diff --git a/.gitattributes b/.gitattributes index d040881ee5d3f5135f1786c29d686a6c0c53882e..a332a4539f4615f98a905d1bbdaec498e90dab00 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,6 +33,7 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text -*.pdf filter=lfs diff=lfs merge=lfs -text +*.onnx.data filter=lfs diff=lfs merge=lfs -text *.docx filter=lfs diff=lfs merge=lfs -text *.xlsx filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..fafd5d86e9958b5eff671f039c61ed36ea73611b --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +__pycache__/ +*.py[cod] +*.pyc diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..a804dfdf7d81ba9a3f5d9941d2c9d86363dc011c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,31 @@ +FROM python:3.11-slim + +WORKDIR /app + +# System dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + && rm -rf /var/lib/apt/lists/* + +# Install only serving dependencies (no torch needed — ONNX Runtime only) +COPY requirements-serve.txt . +RUN pip install --no-cache-dir -r requirements-serve.txt + +# Copy application code +COPY service/ service/ +COPY decision/ decision/ +COPY streaming_intent/ streaming_intent/ +COPY config/ config/ +COPY list/ list/ +COPY artifacts/onnx_int8/ artifacts/onnx_int8/ +COPY artifacts/config/ artifacts/config/ + +# HF Spaces expects port 7860 +ENV PORT=7860 +ENV PYTHONUNBUFFERED=1 +ENV REQUIRE_AUTH=false +ENV DISABLE_DOCS=false + +EXPOSE 7860 + +CMD ["uvicorn", "service.app:app", "--host", "0.0.0.0", "--port", "7860"] diff --git a/README.md b/README.md index ac941dd2bb5b12fae28e19990bc5f83ae655fc13..bf2b58c135b19761357177be1f410a4372f3accf 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,32 @@ --- -title: DCE -emoji: 🏆 -colorFrom: indigo +title: Medical Intent Escalation +emoji: 🏥 +colorFrom: blue colorTo: red sdk: docker pinned: false -short_description: Medical Intent Escalation +license: mit +app_port: 7860 --- -Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference +# Medical Intent Escalation + +Real-time clinical intent classification and safety escalation API powered by DriveHealthBERT. + +## Endpoints + +- **POST /predict** — Classify medical intent from text +- **POST /predict/clinical** — Full clinical risk assessment (R0–R3) +- **POST /conversation/start** — Start a clinical conversation session +- **POST /conversation/turn** — Process a patient turn +- **POST /stream/chunk** — Process streaming STT chunks with SPRT decisions +- **GET /health** — Health check +- **GET /docs** — Interactive Swagger UI + +## Quick Test + +```bash +curl -X POST "https://YOUR-SPACE.hf.space/predict" \ + -H "Content-Type: application/json" \ + -d '{"text": "I have been having chest pain"}' +``` diff --git a/artifacts/config/decision_policy.json b/artifacts/config/decision_policy.json new file mode 100644 index 0000000000000000000000000000000000000000..a4f0ad2536ea9264e7e5a2372fe9ed771dcb7c4e --- /dev/null +++ b/artifacts/config/decision_policy.json @@ -0,0 +1,71 @@ +{ + "version": "2.0.0", + "created_at": "2026-03-06T04:20:52.670734+00:00", + "escalation_policy": { + "escalation_label": "ESCALATION", + "escalation_threshold": 0.95, + "description": "If P(ESCALATION) >= 0.950, escalate regardless of argmax. This prioritizes recall for safety-critical escalation detection." + }, + "confidence_policy": { + "min_confidence": 0.3, + "fallback_label": "OTHER", + "description": "If max probability < 0.3, route to OTHER for review." + }, + "calibration_metrics": { + "threshold": 0.95, + "recall": 0.9696969696969697, + "precision": 0.898876404494382, + "fpr": 0.016498625114573784, + "tp": 160, + "fp": 18, + "tn": 1073, + "fn": 5, + "recall_ci": { + "point_estimate": 0.9702812759764813, + "ci_lower": 0.9433872701218056, + "ci_upper": 0.9938281072483526, + "confidence_level": 0.95 + }, + "precision_ci": { + "point_estimate": 0.9000275789258342, + "ci_lower": 0.8563822440343247, + "ci_upper": 0.9408681214421253, + "confidence_level": 0.95 + }, + "fpr_ci": { + "point_estimate": 0.016454061300607874, + "ci_lower": 0.009250480061420503, + "ci_upper": 0.02428254680618841, + "confidence_level": 0.95 + } + }, + "decision_logic": [ + "1. If P(ESCALATION) >= 0.950 \u2192 ESCALATE", + "2. Else if max(P) < 0.3 \u2192 route to OTHER", + "3. Else \u2192 return argmax label" + ], + "drift_monitoring": { + "enabled": true, + "baseline_metrics": { + "recall": 0.9696969696969697, + "fpr": 0.016498625114573784, + "calibration_date": "2026-03-06T04:20:52.670756+00:00" + }, + "alert_thresholds": { + "min_recall": 0.9, + "max_fpr": 0.3, + "recall_drop_from_baseline": 0.05, + "fpr_increase_from_baseline": 0.1 + }, + "revalidation_policy": { + "sample_size": 100, + "revalidation_interval_days": 30, + "auto_recalibrate": false + }, + "safety_guardrails": { + "never_lower_recall_below": 0.85, + "never_raise_threshold_above": 0.7, + "require_human_approval": true + } + } +} \ No newline at end of file diff --git a/artifacts/onnx_int8/config.json b/artifacts/onnx_int8/config.json new file mode 100644 index 0000000000000000000000000000000000000000..918cc979bf4a1c33adbc41d7c815f648006fae99 --- /dev/null +++ b/artifacts/onnx_int8/config.json @@ -0,0 +1,44 @@ +{ + "add_cross_attention": false, + "architectures": [ + "BertForSequenceClassification" + ], + "attention_probs_dropout_prob": 0.1, + "bos_token_id": null, + "classifier_dropout": null, + "dtype": "float32", + "eos_token_id": null, + "hidden_act": "gelu", + "hidden_dropout_prob": 0.1, + "hidden_size": 768, + "id2label": { + "0": "ESCALATION", + "1": "APPOINTMENT", + "2": "MEDICATION", + "3": "SYMPTOM_CHECK", + "4": "GENERAL_INQUIRY", + "5": "BILLING" + }, + "initializer_range": 0.02, + "intermediate_size": 3072, + "is_decoder": false, + "label2id": { + "APPOINTMENT": 1, + "BILLING": 5, + "ESCALATION": 0, + "GENERAL_INQUIRY": 4, + "MEDICATION": 2, + "SYMPTOM_CHECK": 3 + }, + "layer_norm_eps": 1e-12, + "max_position_embeddings": 512, + "model_type": "bert", + "num_attention_heads": 12, + "num_hidden_layers": 12, + "pad_token_id": 0, + "tie_word_embeddings": true, + "transformers_version": "5.0.0", + "type_vocab_size": 2, + "use_cache": false, + "vocab_size": 28996 +} diff --git a/artifacts/onnx_int8/decision_policy.json b/artifacts/onnx_int8/decision_policy.json new file mode 100644 index 0000000000000000000000000000000000000000..c0b9b8736c4211762a67e2d7548cd890356473b8 --- /dev/null +++ b/artifacts/onnx_int8/decision_policy.json @@ -0,0 +1,71 @@ +{ + "version": "2.0.0", + "created_at": "2026-02-19T06:04:01.530506+00:00", + "escalation_policy": { + "escalation_label": "ESCALATION", + "escalation_threshold": 0.8069999999999998, + "description": "If P(ESCALATION) >= 0.807, escalate regardless of argmax. This prioritizes recall for safety-critical escalation detection." + }, + "confidence_policy": { + "min_confidence": 0.3, + "fallback_label": "OTHER", + "description": "If max probability < 0.3, route to OTHER for review." + }, + "calibration_metrics": { + "threshold": 0.8069999999999998, + "recall": 0.9515151515151515, + "precision": 0.9401197604790419, + "fpr": 0.00916590284142988, + "tp": 157, + "fp": 10, + "tn": 1081, + "fn": 8, + "recall_ci": { + "point_estimate": 0.9522554476419556, + "ci_lower": 0.9182282243473766, + "ci_upper": 0.9817073170731707, + "confidence_level": 0.95 + }, + "precision_ci": { + "point_estimate": 0.9408976664848623, + "ci_lower": 0.9015464082389816, + "ci_upper": 0.9719292994412722, + "confidence_level": 0.95 + }, + "fpr_ci": { + "point_estimate": 0.009122676909917872, + "ci_lower": 0.0045207956600361665, + "ci_upper": 0.015582034830430797, + "confidence_level": 0.95 + } + }, + "decision_logic": [ + "1. If P(ESCALATION) >= 0.807 \u2192 ESCALATE", + "2. Else if max(P) < 0.3 \u2192 route to OTHER", + "3. Else \u2192 return argmax label" + ], + "drift_monitoring": { + "enabled": true, + "baseline_metrics": { + "recall": 0.9515151515151515, + "fpr": 0.00916590284142988, + "calibration_date": "2026-02-19T06:04:01.530524+00:00" + }, + "alert_thresholds": { + "min_recall": 0.9, + "max_fpr": 0.3, + "recall_drop_from_baseline": 0.05, + "fpr_increase_from_baseline": 0.1 + }, + "revalidation_policy": { + "sample_size": 100, + "revalidation_interval_days": 30, + "auto_recalibrate": false + }, + "safety_guardrails": { + "never_lower_recall_below": 0.85, + "never_raise_threshold_above": 0.7, + "require_human_approval": true + } + } +} \ No newline at end of file diff --git a/artifacts/onnx_int8/export_metadata.json b/artifacts/onnx_int8/export_metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..30bc2826a5fa68a7d8e8ea649657d2273de7e515 --- /dev/null +++ b/artifacts/onnx_int8/export_metadata.json @@ -0,0 +1,9 @@ +{ + "source_model": "artifacts\\pytorch\\latest", + "export_timestamp": "2026-02-09T05:34:58.146488+00:00", + "opset_version": 14, + "max_length": 64, + "format": "ONNX", + "quantization": null, + "provider": "CPUExecutionProvider" +} \ No newline at end of file diff --git a/artifacts/onnx_int8/label_mappings.json b/artifacts/onnx_int8/label_mappings.json new file mode 100644 index 0000000000000000000000000000000000000000..16fd4d835f2d043ebfc40024ae608c33f6119aa9 --- /dev/null +++ b/artifacts/onnx_int8/label_mappings.json @@ -0,0 +1,18 @@ +{ + "label2id": { + "ESCALATION": 0, + "APPOINTMENT": 1, + "MEDICATION": 2, + "SYMPTOM_CHECK": 3, + "GENERAL_INQUIRY": 4, + "BILLING": 5 + }, + "id2label": { + "0": "ESCALATION", + "1": "APPOINTMENT", + "2": "MEDICATION", + "3": "SYMPTOM_CHECK", + "4": "GENERAL_INQUIRY", + "5": "BILLING" + } +} \ No newline at end of file diff --git a/artifacts/onnx_int8/model.onnx b/artifacts/onnx_int8/model.onnx new file mode 100644 index 0000000000000000000000000000000000000000..e3b1e0d0903a3157d4f7d066caf25afe28a2dbd8 --- /dev/null +++ b/artifacts/onnx_int8/model.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:839432f5a2f74ab12c1832182e6473386467ab1d44f812789854129080f54200 +size 433351691 diff --git a/artifacts/onnx_int8/model.onnx.data b/artifacts/onnx_int8/model.onnx.data new file mode 100644 index 0000000000000000000000000000000000000000..3202865c67997827e21021d0f99a6857e9949ebe --- /dev/null +++ b/artifacts/onnx_int8/model.onnx.data @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2eca618854e0f1521bd8b19ed895062e990e19f5878c103e78a5504c76aa8de9 +size 433270784 diff --git a/artifacts/onnx_int8/model_preprocessed.onnx b/artifacts/onnx_int8/model_preprocessed.onnx new file mode 100644 index 0000000000000000000000000000000000000000..eb5524eb8a18e2ca0eb5186925c913040115791c --- /dev/null +++ b/artifacts/onnx_int8/model_preprocessed.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a8c406501f56f3345e2d0a59e37ffa30a428b134625bfa9805d961bfcbc414c +size 57448739 diff --git a/artifacts/onnx_int8/quantization_metadata.json b/artifacts/onnx_int8/quantization_metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..88e09836d29106c09545d311f3f3b815749cab4e --- /dev/null +++ b/artifacts/onnx_int8/quantization_metadata.json @@ -0,0 +1,12 @@ +{ + "source_model": "artifacts\\onnx", + "quantization_timestamp": "2026-02-19T06:03:17.727140+00:00", + "quantization_type": "dynamic", + "weight_type": "INT8", + "is_quantized": true, + "original_size_mb": 414.67, + "quantized_size_mb": 413.28, + "compression_ratio": 1.0, + "provider": "CPUExecutionProvider", + "warning": null +} \ No newline at end of file diff --git a/artifacts/onnx_int8/special_tokens_map.json b/artifacts/onnx_int8/special_tokens_map.json new file mode 100644 index 0000000000000000000000000000000000000000..9bbecc17cabbcbd3112c14d6982b51403b264bfa --- /dev/null +++ b/artifacts/onnx_int8/special_tokens_map.json @@ -0,0 +1,37 @@ +{ + "cls_token": { + "content": "[CLS]", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + }, + "mask_token": { + "content": "[MASK]", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + }, + "pad_token": { + "content": "[PAD]", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + }, + "sep_token": { + "content": "[SEP]", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + }, + "unk_token": { + "content": "[UNK]", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false + } +} diff --git a/artifacts/onnx_int8/tokenizer.json b/artifacts/onnx_int8/tokenizer.json new file mode 100644 index 0000000000000000000000000000000000000000..5b4b57af714004d976f1599f8c623caef68010d6 --- /dev/null +++ b/artifacts/onnx_int8/tokenizer.json @@ -0,0 +1,29160 @@ +{ + "version": "1.0", + "truncation": { + "direction": "Right", + "max_length": 64, + "strategy": "LongestFirst", + "stride": 0 + }, + "padding": { + "strategy": { + "Fixed": 64 + }, + "direction": "Right", + "pad_to_multiple_of": null, + "pad_id": 0, + "pad_type_id": 0, + "pad_token": "[PAD]" + }, + "added_tokens": [ + { + "id": 0, + "content": "[PAD]", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 100, + "content": "[UNK]", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 101, + "content": "[CLS]", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 102, + "content": "[SEP]", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 103, + "content": "[MASK]", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + } + ], + "normalizer": { + "type": "BertNormalizer", + "clean_text": true, + "handle_chinese_chars": true, + "strip_accents": null, + "lowercase": false + }, + "pre_tokenizer": { + "type": "BertPreTokenizer" + }, + "post_processor": { + "type": "TemplateProcessing", + "single": [ + { + "SpecialToken": { + "id": "[CLS]", + "type_id": 0 + } + }, + { + "Sequence": { + "id": "A", + "type_id": 0 + } + }, + { + "SpecialToken": { + "id": "[SEP]", + "type_id": 0 + } + } + ], + "pair": [ + { + "SpecialToken": { + "id": "[CLS]", + "type_id": 0 + } + }, + { + "Sequence": { + "id": "A", + "type_id": 0 + } + }, + { + "SpecialToken": { + "id": "[SEP]", + "type_id": 0 + } + }, + { + "Sequence": { + "id": "B", + "type_id": 1 + } + }, + { + "SpecialToken": { + "id": "[SEP]", + "type_id": 1 + } + } + ], + "special_tokens": { + "[CLS]": { + "id": "[CLS]", + "ids": [ + 101 + ], + "tokens": [ + "[CLS]" + ] + }, + "[SEP]": { + "id": "[SEP]", + "ids": [ + 102 + ], + "tokens": [ + "[SEP]" + ] + } + } + }, + "decoder": { + "type": "WordPiece", + "prefix": "##", + "cleanup": true + }, + "model": { + "type": "WordPiece", + "unk_token": "[UNK]", + "continuing_subword_prefix": "##", + "max_input_chars_per_word": 100, + "vocab": { + "[PAD]": 0, + "[unused1]": 1, + "[unused2]": 2, + "[unused3]": 3, + "[unused4]": 4, + "[unused5]": 5, + "[unused6]": 6, + "[unused7]": 7, + "[unused8]": 8, + "[unused9]": 9, + "[unused10]": 10, + "[unused11]": 11, + "[unused12]": 12, + "[unused13]": 13, + "[unused14]": 14, + "[unused15]": 15, + "[unused16]": 16, + "[unused17]": 17, + "[unused18]": 18, + "[unused19]": 19, + "[unused20]": 20, + "[unused21]": 21, + "[unused22]": 22, + "[unused23]": 23, + "[unused24]": 24, + "[unused25]": 25, + "[unused26]": 26, + "[unused27]": 27, + "[unused28]": 28, + "[unused29]": 29, + "[unused30]": 30, + "[unused31]": 31, + "[unused32]": 32, + "[unused33]": 33, + "[unused34]": 34, + "[unused35]": 35, + "[unused36]": 36, + "[unused37]": 37, + "[unused38]": 38, + "[unused39]": 39, + "[unused40]": 40, + "[unused41]": 41, + "[unused42]": 42, + "[unused43]": 43, + "[unused44]": 44, + "[unused45]": 45, + "[unused46]": 46, + "[unused47]": 47, + "[unused48]": 48, + "[unused49]": 49, + "[unused50]": 50, + "[unused51]": 51, + "[unused52]": 52, + "[unused53]": 53, + "[unused54]": 54, + "[unused55]": 55, + "[unused56]": 56, + "[unused57]": 57, + "[unused58]": 58, + "[unused59]": 59, + "[unused60]": 60, + "[unused61]": 61, + "[unused62]": 62, + "[unused63]": 63, + "[unused64]": 64, + "[unused65]": 65, + "[unused66]": 66, + "[unused67]": 67, + "[unused68]": 68, + "[unused69]": 69, + "[unused70]": 70, + "[unused71]": 71, + "[unused72]": 72, + "[unused73]": 73, + "[unused74]": 74, + "[unused75]": 75, + "[unused76]": 76, + "[unused77]": 77, + "[unused78]": 78, + "[unused79]": 79, + "[unused80]": 80, + "[unused81]": 81, + "[unused82]": 82, + "[unused83]": 83, + "[unused84]": 84, + "[unused85]": 85, + "[unused86]": 86, + "[unused87]": 87, + "[unused88]": 88, + "[unused89]": 89, + "[unused90]": 90, + "[unused91]": 91, + "[unused92]": 92, + "[unused93]": 93, + "[unused94]": 94, + "[unused95]": 95, + "[unused96]": 96, + "[unused97]": 97, + "[unused98]": 98, + "[unused99]": 99, + "[UNK]": 100, + "[CLS]": 101, + "[SEP]": 102, + "[MASK]": 103, + "[unused100]": 104, + "[unused101]": 105, + "!": 106, + "\"": 107, + "#": 108, + "$": 109, + "%": 110, + "&": 111, + "'": 112, + "(": 113, + ")": 114, + "*": 115, + "+": 116, + ",": 117, + "-": 118, + ".": 119, + "/": 120, + "0": 121, + "1": 122, + "2": 123, + "3": 124, + "4": 125, + "5": 126, + "6": 127, + "7": 128, + "8": 129, + "9": 130, + ":": 131, + ";": 132, + "<": 133, + "=": 134, + ">": 135, + "?": 136, + "@": 137, + "A": 138, + "B": 139, + "C": 140, + "D": 141, + "E": 142, + "F": 143, + "G": 144, + "H": 145, + "I": 146, + "J": 147, + "K": 148, + "L": 149, + "M": 150, + "N": 151, + "O": 152, + "P": 153, + "Q": 154, + "R": 155, + "S": 156, + "T": 157, + "U": 158, + "V": 159, + "W": 160, + "X": 161, + "Y": 162, + "Z": 163, + "[": 164, + "\\": 165, + "]": 166, + "^": 167, + "_": 168, + "`": 169, + "a": 170, + "b": 171, + "c": 172, + "d": 173, + "e": 174, + "f": 175, + "g": 176, + "h": 177, + "i": 178, + "j": 179, + "k": 180, + "l": 181, + "m": 182, + "n": 183, + "o": 184, + "p": 185, + "q": 186, + "r": 187, + "s": 188, + "t": 189, + "u": 190, + "v": 191, + "w": 192, + "x": 193, + "y": 194, + "z": 195, + "{": 196, + "|": 197, + "}": 198, + "~": 199, + "¡": 200, + "¢": 201, + "£": 202, + "¥": 203, + "§": 204, + "¨": 205, + "©": 206, + "ª": 207, + "«": 208, + "¬": 209, + "®": 210, + "°": 211, + "±": 212, + "²": 213, + "³": 214, + "´": 215, + "µ": 216, + "¶": 217, + "·": 218, + "¹": 219, + "º": 220, + "»": 221, + "¼": 222, + "½": 223, + "¾": 224, + "¿": 225, + "À": 226, + "Á": 227, + "Â": 228, + "Ä": 229, + "Å": 230, + "Æ": 231, + "Ç": 232, + "È": 233, + "É": 234, + "Í": 235, + "Î": 236, + "Ñ": 237, + "Ó": 238, + "Ö": 239, + "×": 240, + "Ø": 241, + "Ú": 242, + "Ü": 243, + "Þ": 244, + "ß": 245, + "à": 246, + "á": 247, + "â": 248, + "ã": 249, + "ä": 250, + "å": 251, + "æ": 252, + "ç": 253, + "è": 254, + "é": 255, + "ê": 256, + "ë": 257, + "ì": 258, + "í": 259, + "î": 260, + "ï": 261, + "ð": 262, + "ñ": 263, + "ò": 264, + "ó": 265, + "ô": 266, + "õ": 267, + "ö": 268, + "÷": 269, + "ø": 270, + "ù": 271, + "ú": 272, + "û": 273, + "ü": 274, + "ý": 275, + "þ": 276, + "ÿ": 277, + "Ā": 278, + "ā": 279, + "ă": 280, + "ą": 281, + "Ć": 282, + "ć": 283, + "Č": 284, + "č": 285, + "ď": 286, + "Đ": 287, + "đ": 288, + "ē": 289, + "ė": 290, + "ę": 291, + "ě": 292, + "ğ": 293, + "ġ": 294, + "Ħ": 295, + "ħ": 296, + "ĩ": 297, + "Ī": 298, + "ī": 299, + "İ": 300, + "ı": 301, + "ļ": 302, + "Ľ": 303, + "ľ": 304, + "Ł": 305, + "ł": 306, + "ń": 307, + "ņ": 308, + "ň": 309, + "ŋ": 310, + "Ō": 311, + "ō": 312, + "ŏ": 313, + "ő": 314, + "Œ": 315, + "œ": 316, + "ř": 317, + "Ś": 318, + "ś": 319, + "Ş": 320, + "ş": 321, + "Š": 322, + "š": 323, + "Ţ": 324, + "ţ": 325, + "ť": 326, + "ũ": 327, + "ū": 328, + "ŭ": 329, + "ů": 330, + "ű": 331, + "ų": 332, + "ŵ": 333, + "ŷ": 334, + "ź": 335, + "Ż": 336, + "ż": 337, + "Ž": 338, + "ž": 339, + "Ə": 340, + "ƒ": 341, + "ơ": 342, + "ư": 343, + "ǎ": 344, + "ǐ": 345, + "ǒ": 346, + "ǔ": 347, + "ǫ": 348, + "Ș": 349, + "ș": 350, + "Ț": 351, + "ț": 352, + "ɐ": 353, + "ɑ": 354, + "ɔ": 355, + "ɕ": 356, + "ə": 357, + "ɛ": 358, + "ɡ": 359, + "ɣ": 360, + "ɨ": 361, + "ɪ": 362, + "ɲ": 363, + "ɾ": 364, + "ʀ": 365, + "ʁ": 366, + "ʂ": 367, + "ʃ": 368, + "ʊ": 369, + "ʋ": 370, + "ʌ": 371, + "ʐ": 372, + "ʑ": 373, + "ʒ": 374, + "ʔ": 375, + "ʰ": 376, + "ʲ": 377, + "ʳ": 378, + "ʷ": 379, + "ʻ": 380, + "ʼ": 381, + "ʾ": 382, + "ʿ": 383, + "ˈ": 384, + "ː": 385, + "ˡ": 386, + "ˢ": 387, + "ˣ": 388, + "́": 389, + "̃": 390, + "̍": 391, + "̯": 392, + "͡": 393, + "Α": 394, + "Β": 395, + "Γ": 396, + "Δ": 397, + "Ε": 398, + "Η": 399, + "Θ": 400, + "Ι": 401, + "Κ": 402, + "Λ": 403, + "Μ": 404, + "Ν": 405, + "Ο": 406, + "Π": 407, + "Σ": 408, + "Τ": 409, + "Φ": 410, + "Χ": 411, + "Ψ": 412, + "Ω": 413, + "ά": 414, + "έ": 415, + "ή": 416, + "ί": 417, + "α": 418, + "β": 419, + "γ": 420, + "δ": 421, + "ε": 422, + "ζ": 423, + "η": 424, + "θ": 425, + "ι": 426, + "κ": 427, + "λ": 428, + "μ": 429, + "ν": 430, + "ξ": 431, + "ο": 432, + "π": 433, + "ρ": 434, + "ς": 435, + "σ": 436, + "τ": 437, + "υ": 438, + "φ": 439, + "χ": 440, + "ψ": 441, + "ω": 442, + "ό": 443, + "ύ": 444, + "ώ": 445, + "І": 446, + "Ј": 447, + "А": 448, + "Б": 449, + "В": 450, + "Г": 451, + "Д": 452, + "Е": 453, + "Ж": 454, + "З": 455, + "И": 456, + "К": 457, + "Л": 458, + "М": 459, + "Н": 460, + "О": 461, + "П": 462, + "Р": 463, + "С": 464, + "Т": 465, + "У": 466, + "Ф": 467, + "Х": 468, + "Ц": 469, + "Ч": 470, + "Ш": 471, + "Э": 472, + "Ю": 473, + "Я": 474, + "а": 475, + "б": 476, + "в": 477, + "г": 478, + "д": 479, + "е": 480, + "ж": 481, + "з": 482, + "и": 483, + "й": 484, + "к": 485, + "л": 486, + "м": 487, + "н": 488, + "о": 489, + "п": 490, + "р": 491, + "с": 492, + "т": 493, + "у": 494, + "ф": 495, + "х": 496, + "ц": 497, + "ч": 498, + "ш": 499, + "щ": 500, + "ъ": 501, + "ы": 502, + "ь": 503, + "э": 504, + "ю": 505, + "я": 506, + "ё": 507, + "і": 508, + "ї": 509, + "ј": 510, + "њ": 511, + "ћ": 512, + "Ա": 513, + "Հ": 514, + "ա": 515, + "ե": 516, + "ի": 517, + "կ": 518, + "մ": 519, + "յ": 520, + "ն": 521, + "ո": 522, + "ս": 523, + "տ": 524, + "ր": 525, + "ւ": 526, + "ְ": 527, + "ִ": 528, + "ֵ": 529, + "ֶ": 530, + "ַ": 531, + "ָ": 532, + "ֹ": 533, + "ּ": 534, + "א": 535, + "ב": 536, + "ג": 537, + "ד": 538, + "ה": 539, + "ו": 540, + "ז": 541, + "ח": 542, + "ט": 543, + "י": 544, + "כ": 545, + "ל": 546, + "ם": 547, + "מ": 548, + "ן": 549, + "נ": 550, + "ס": 551, + "ע": 552, + "פ": 553, + "צ": 554, + "ק": 555, + "ר": 556, + "ש": 557, + "ת": 558, + "،": 559, + "ء": 560, + "آ": 561, + "أ": 562, + "إ": 563, + "ئ": 564, + "ا": 565, + "ب": 566, + "ة": 567, + "ت": 568, + "ث": 569, + "ج": 570, + "ح": 571, + "خ": 572, + "د": 573, + "ذ": 574, + "ر": 575, + "ز": 576, + "س": 577, + "ش": 578, + "ص": 579, + "ض": 580, + "ط": 581, + "ظ": 582, + "ع": 583, + "غ": 584, + "ف": 585, + "ق": 586, + "ك": 587, + "ل": 588, + "م": 589, + "ن": 590, + "ه": 591, + "و": 592, + "ى": 593, + "ي": 594, + "َ": 595, + "ِ": 596, + "ٹ": 597, + "پ": 598, + "چ": 599, + "ک": 600, + "گ": 601, + "ہ": 602, + "ی": 603, + "ے": 604, + "ं": 605, + "आ": 606, + "क": 607, + "ग": 608, + "च": 609, + "ज": 610, + "ण": 611, + "त": 612, + "द": 613, + "ध": 614, + "न": 615, + "प": 616, + "ब": 617, + "भ": 618, + "म": 619, + "य": 620, + "र": 621, + "ल": 622, + "व": 623, + "श": 624, + "ष": 625, + "स": 626, + "ह": 627, + "ा": 628, + "ि": 629, + "ी": 630, + "ु": 631, + "े": 632, + "ो": 633, + "्": 634, + "।": 635, + "॥": 636, + "আ": 637, + "ই": 638, + "এ": 639, + "ও": 640, + "ক": 641, + "খ": 642, + "গ": 643, + "চ": 644, + "ছ": 645, + "জ": 646, + "ট": 647, + "ত": 648, + "থ": 649, + "দ": 650, + "ধ": 651, + "ন": 652, + "প": 653, + "ব": 654, + "ম": 655, + "য": 656, + "র": 657, + "ল": 658, + "শ": 659, + "স": 660, + "হ": 661, + "়": 662, + "া": 663, + "ি": 664, + "ী": 665, + "ু": 666, + "ে": 667, + "ো": 668, + "্": 669, + "য়": 670, + "க": 671, + "த": 672, + "ப": 673, + "ம": 674, + "ய": 675, + "ர": 676, + "ல": 677, + "வ": 678, + "ா": 679, + "ி": 680, + "ு": 681, + "்": 682, + "ร": 683, + "་": 684, + "ག": 685, + "ང": 686, + "ད": 687, + "ན": 688, + "བ": 689, + "མ": 690, + "ར": 691, + "ལ": 692, + "ས": 693, + "ི": 694, + "ུ": 695, + "ེ": 696, + "ོ": 697, + "ა": 698, + "ე": 699, + "ი": 700, + "ლ": 701, + "ნ": 702, + "ო": 703, + "რ": 704, + "ს": 705, + "ᴬ": 706, + "ᴵ": 707, + "ᵀ": 708, + "ᵃ": 709, + "ᵇ": 710, + "ᵈ": 711, + "ᵉ": 712, + "ᵍ": 713, + "ᵏ": 714, + "ᵐ": 715, + "ᵒ": 716, + "ᵖ": 717, + "ᵗ": 718, + "ᵘ": 719, + "ᵢ": 720, + "ᵣ": 721, + "ᵤ": 722, + "ᵥ": 723, + "ᶜ": 724, + "ᶠ": 725, + "ḍ": 726, + "Ḥ": 727, + "ḥ": 728, + "Ḩ": 729, + "ḩ": 730, + "ḳ": 731, + "ṃ": 732, + "ṅ": 733, + "ṇ": 734, + "ṛ": 735, + "ṣ": 736, + "ṭ": 737, + "ạ": 738, + "ả": 739, + "ấ": 740, + "ầ": 741, + "ẩ": 742, + "ậ": 743, + "ắ": 744, + "ế": 745, + "ề": 746, + "ể": 747, + "ễ": 748, + "ệ": 749, + "ị": 750, + "ọ": 751, + "ố": 752, + "ồ": 753, + "ổ": 754, + "ộ": 755, + "ớ": 756, + "ờ": 757, + "ợ": 758, + "ụ": 759, + "ủ": 760, + "ứ": 761, + "ừ": 762, + "ử": 763, + "ữ": 764, + "ự": 765, + "ỳ": 766, + "ỹ": 767, + "ἀ": 768, + "ἐ": 769, + "ὁ": 770, + "ὐ": 771, + "ὰ": 772, + "ὶ": 773, + "ὸ": 774, + "ῆ": 775, + "ῖ": 776, + "ῦ": 777, + "ῶ": 778, + "‐": 779, + "‑": 780, + "‒": 781, + "–": 782, + "—": 783, + "―": 784, + "‖": 785, + "‘": 786, + "’": 787, + "‚": 788, + "“": 789, + "”": 790, + "„": 791, + "†": 792, + "‡": 793, + "•": 794, + "…": 795, + "‰": 796, + "′": 797, + "″": 798, + "⁄": 799, + "⁰": 800, + "ⁱ": 801, + "⁴": 802, + "⁵": 803, + "⁶": 804, + "⁷": 805, + "⁸": 806, + "⁹": 807, + "⁺": 808, + "⁻": 809, + "ⁿ": 810, + "₀": 811, + "₁": 812, + "₂": 813, + "₃": 814, + "₄": 815, + "₅": 816, + "₆": 817, + "₇": 818, + "₈": 819, + "₉": 820, + "₊": 821, + "₍": 822, + "₎": 823, + "ₐ": 824, + "ₑ": 825, + "ₒ": 826, + "ₓ": 827, + "ₕ": 828, + "ₖ": 829, + "ₘ": 830, + "ₙ": 831, + "ₚ": 832, + "ₛ": 833, + "ₜ": 834, + "₤": 835, + "€": 836, + "₱": 837, + "₹": 838, + "ℓ": 839, + "№": 840, + "ℝ": 841, + "⅓": 842, + "←": 843, + "↑": 844, + "→": 845, + "↔": 846, + "⇌": 847, + "⇒": 848, + "∂": 849, + "∈": 850, + "−": 851, + "∗": 852, + "∘": 853, + "√": 854, + "∞": 855, + "∧": 856, + "∨": 857, + "∩": 858, + "∪": 859, + "≈": 860, + "≠": 861, + "≡": 862, + "≤": 863, + "≥": 864, + "⊂": 865, + "⊆": 866, + "⊕": 867, + "⋅": 868, + "─": 869, + "│": 870, + "■": 871, + "●": 872, + "★": 873, + "☆": 874, + "☉": 875, + "♠": 876, + "♣": 877, + "♥": 878, + "♦": 879, + "♭": 880, + "♯": 881, + "⟨": 882, + "⟩": 883, + "ⱼ": 884, + "、": 885, + "。": 886, + "《": 887, + "》": 888, + "「": 889, + "」": 890, + "『": 891, + "』": 892, + "〜": 893, + "い": 894, + "う": 895, + "え": 896, + "お": 897, + "か": 898, + "き": 899, + "く": 900, + "け": 901, + "こ": 902, + "さ": 903, + "し": 904, + "す": 905, + "せ": 906, + "そ": 907, + "た": 908, + "ち": 909, + "つ": 910, + "て": 911, + "と": 912, + "な": 913, + "に": 914, + "の": 915, + "は": 916, + "ひ": 917, + "ま": 918, + "み": 919, + "む": 920, + "め": 921, + "も": 922, + "や": 923, + "ゆ": 924, + "よ": 925, + "ら": 926, + "り": 927, + "る": 928, + "れ": 929, + "ん": 930, + "ア": 931, + "ィ": 932, + "イ": 933, + "ウ": 934, + "エ": 935, + "オ": 936, + "カ": 937, + "ガ": 938, + "キ": 939, + "ク": 940, + "グ": 941, + "コ": 942, + "サ": 943, + "シ": 944, + "ジ": 945, + "ス": 946, + "ズ": 947, + "タ": 948, + "ダ": 949, + "ッ": 950, + "テ": 951, + "デ": 952, + "ト": 953, + "ド": 954, + "ナ": 955, + "ニ": 956, + "ハ": 957, + "バ": 958, + "パ": 959, + "フ": 960, + "ブ": 961, + "プ": 962, + "マ": 963, + "ミ": 964, + "ム": 965, + "ャ": 966, + "ュ": 967, + "ラ": 968, + "リ": 969, + "ル": 970, + "レ": 971, + "ロ": 972, + "ン": 973, + "・": 974, + "ー": 975, + "一": 976, + "三": 977, + "上": 978, + "下": 979, + "中": 980, + "事": 981, + "二": 982, + "井": 983, + "京": 984, + "人": 985, + "亻": 986, + "仁": 987, + "佐": 988, + "侍": 989, + "光": 990, + "公": 991, + "力": 992, + "北": 993, + "十": 994, + "南": 995, + "原": 996, + "口": 997, + "史": 998, + "司": 999, + "吉": 1000, + "同": 1001, + "和": 1002, + "囗": 1003, + "国": 1004, + "國": 1005, + "土": 1006, + "城": 1007, + "士": 1008, + "大": 1009, + "天": 1010, + "太": 1011, + "夫": 1012, + "女": 1013, + "子": 1014, + "宀": 1015, + "安": 1016, + "宮": 1017, + "宿": 1018, + "小": 1019, + "尚": 1020, + "山": 1021, + "島": 1022, + "川": 1023, + "州": 1024, + "平": 1025, + "年": 1026, + "心": 1027, + "愛": 1028, + "戸": 1029, + "文": 1030, + "新": 1031, + "方": 1032, + "日": 1033, + "明": 1034, + "星": 1035, + "書": 1036, + "月": 1037, + "木": 1038, + "本": 1039, + "李": 1040, + "村": 1041, + "東": 1042, + "松": 1043, + "林": 1044, + "正": 1045, + "武": 1046, + "氏": 1047, + "水": 1048, + "氵": 1049, + "江": 1050, + "河": 1051, + "海": 1052, + "版": 1053, + "犬": 1054, + "王": 1055, + "生": 1056, + "田": 1057, + "白": 1058, + "皇": 1059, + "省": 1060, + "真": 1061, + "石": 1062, + "社": 1063, + "神": 1064, + "竹": 1065, + "美": 1066, + "義": 1067, + "花": 1068, + "藤": 1069, + "西": 1070, + "谷": 1071, + "車": 1072, + "辶": 1073, + "道": 1074, + "郎": 1075, + "郡": 1076, + "部": 1077, + "野": 1078, + "金": 1079, + "長": 1080, + "門": 1081, + "陽": 1082, + "青": 1083, + "食": 1084, + "馬": 1085, + "高": 1086, + "龍": 1087, + "龸": 1088, + "사": 1089, + "씨": 1090, + "의": 1091, + "이": 1092, + "한": 1093, + "fi": 1094, + "fl": 1095, + "!": 1096, + "(": 1097, + ")": 1098, + ",": 1099, + "-": 1100, + "/": 1101, + ":": 1102, + "the": 1103, + "of": 1104, + "and": 1105, + "to": 1106, + "in": 1107, + "was": 1108, + "The": 1109, + "is": 1110, + "for": 1111, + "as": 1112, + "on": 1113, + "with": 1114, + "that": 1115, + "##s": 1116, + "his": 1117, + "by": 1118, + "he": 1119, + "at": 1120, + "from": 1121, + "it": 1122, + "her": 1123, + "He": 1124, + "had": 1125, + "an": 1126, + "were": 1127, + "you": 1128, + "be": 1129, + "In": 1130, + "she": 1131, + "are": 1132, + "but": 1133, + "which": 1134, + "It": 1135, + "not": 1136, + "or": 1137, + "have": 1138, + "my": 1139, + "him": 1140, + "one": 1141, + "this": 1142, + "me": 1143, + "has": 1144, + "also": 1145, + "up": 1146, + "their": 1147, + "first": 1148, + "out": 1149, + "who": 1150, + "been": 1151, + "they": 1152, + "She": 1153, + "into": 1154, + "all": 1155, + "would": 1156, + "its": 1157, + "##ing": 1158, + "time": 1159, + "two": 1160, + "##a": 1161, + "##e": 1162, + "said": 1163, + "about": 1164, + "when": 1165, + "over": 1166, + "more": 1167, + "other": 1168, + "can": 1169, + "after": 1170, + "back": 1171, + "them": 1172, + "then": 1173, + "##ed": 1174, + "there": 1175, + "like": 1176, + "so": 1177, + "only": 1178, + "##n": 1179, + "could": 1180, + "##d": 1181, + "##i": 1182, + "##y": 1183, + "what": 1184, + "no": 1185, + "##o": 1186, + "where": 1187, + "This": 1188, + "made": 1189, + "than": 1190, + "if": 1191, + "You": 1192, + "##ly": 1193, + "through": 1194, + "we": 1195, + "before": 1196, + "##r": 1197, + "just": 1198, + "some": 1199, + "##er": 1200, + "years": 1201, + "do": 1202, + "New": 1203, + "##t": 1204, + "down": 1205, + "between": 1206, + "new": 1207, + "now": 1208, + "will": 1209, + "three": 1210, + "most": 1211, + "On": 1212, + "around": 1213, + "year": 1214, + "used": 1215, + "such": 1216, + "being": 1217, + "well": 1218, + "during": 1219, + "They": 1220, + "know": 1221, + "against": 1222, + "under": 1223, + "later": 1224, + "did": 1225, + "part": 1226, + "known": 1227, + "off": 1228, + "while": 1229, + "His": 1230, + "re": 1231, + "...": 1232, + "##l": 1233, + "people": 1234, + "until": 1235, + "way": 1236, + "American": 1237, + "didn": 1238, + "University": 1239, + "your": 1240, + "both": 1241, + "many": 1242, + "get": 1243, + "United": 1244, + "became": 1245, + "head": 1246, + "There": 1247, + "second": 1248, + "As": 1249, + "work": 1250, + "any": 1251, + "But": 1252, + "still": 1253, + "again": 1254, + "born": 1255, + "even": 1256, + "eyes": 1257, + "After": 1258, + "including": 1259, + "de": 1260, + "took": 1261, + "And": 1262, + "long": 1263, + "team": 1264, + "season": 1265, + "family": 1266, + "see": 1267, + "right": 1268, + "same": 1269, + "called": 1270, + "name": 1271, + "because": 1272, + "film": 1273, + "don": 1274, + "10": 1275, + "found": 1276, + "much": 1277, + "school": 1278, + "##es": 1279, + "going": 1280, + "won": 1281, + "place": 1282, + "away": 1283, + "We": 1284, + "day": 1285, + "left": 1286, + "John": 1287, + "000": 1288, + "hand": 1289, + "since": 1290, + "World": 1291, + "these": 1292, + "how": 1293, + "make": 1294, + "number": 1295, + "each": 1296, + "life": 1297, + "area": 1298, + "man": 1299, + "four": 1300, + "go": 1301, + "No": 1302, + "here": 1303, + "very": 1304, + "National": 1305, + "##m": 1306, + "played": 1307, + "released": 1308, + "never": 1309, + "began": 1310, + "States": 1311, + "album": 1312, + "home": 1313, + "last": 1314, + "too": 1315, + "held": 1316, + "several": 1317, + "May": 1318, + "own": 1319, + "##on": 1320, + "take": 1321, + "end": 1322, + "School": 1323, + "##h": 1324, + "ll": 1325, + "series": 1326, + "What": 1327, + "want": 1328, + "use": 1329, + "another": 1330, + "city": 1331, + "When": 1332, + "2010": 1333, + "side": 1334, + "At": 1335, + "may": 1336, + "That": 1337, + "came": 1338, + "face": 1339, + "June": 1340, + "think": 1341, + "game": 1342, + "those": 1343, + "high": 1344, + "March": 1345, + "early": 1346, + "September": 1347, + "##al": 1348, + "2011": 1349, + "looked": 1350, + "July": 1351, + "state": 1352, + "small": 1353, + "thought": 1354, + "went": 1355, + "January": 1356, + "October": 1357, + "##u": 1358, + "based": 1359, + "August": 1360, + "##us": 1361, + "world": 1362, + "good": 1363, + "April": 1364, + "York": 1365, + "us": 1366, + "12": 1367, + "2012": 1368, + "2008": 1369, + "For": 1370, + "2009": 1371, + "group": 1372, + "along": 1373, + "few": 1374, + "South": 1375, + "little": 1376, + "##k": 1377, + "following": 1378, + "November": 1379, + "something": 1380, + "2013": 1381, + "December": 1382, + "set": 1383, + "2007": 1384, + "old": 1385, + "2006": 1386, + "2014": 1387, + "located": 1388, + "##an": 1389, + "music": 1390, + "County": 1391, + "City": 1392, + "former": 1393, + "##in": 1394, + "room": 1395, + "ve": 1396, + "next": 1397, + "All": 1398, + "##man": 1399, + "got": 1400, + "father": 1401, + "house": 1402, + "##g": 1403, + "body": 1404, + "15": 1405, + "20": 1406, + "18": 1407, + "started": 1408, + "If": 1409, + "2015": 1410, + "town": 1411, + "our": 1412, + "line": 1413, + "War": 1414, + "large": 1415, + "population": 1416, + "named": 1417, + "British": 1418, + "company": 1419, + "member": 1420, + "five": 1421, + "My": 1422, + "single": 1423, + "##en": 1424, + "age": 1425, + "State": 1426, + "moved": 1427, + "February": 1428, + "11": 1429, + "Her": 1430, + "should": 1431, + "century": 1432, + "government": 1433, + "built": 1434, + "come": 1435, + "best": 1436, + "show": 1437, + "However": 1438, + "within": 1439, + "look": 1440, + "men": 1441, + "door": 1442, + "without": 1443, + "need": 1444, + "wasn": 1445, + "2016": 1446, + "water": 1447, + "One": 1448, + "system": 1449, + "knew": 1450, + "every": 1451, + "died": 1452, + "League": 1453, + "turned": 1454, + "asked": 1455, + "North": 1456, + "St": 1457, + "wanted": 1458, + "building": 1459, + "received": 1460, + "song": 1461, + "served": 1462, + "though": 1463, + "felt": 1464, + "##ia": 1465, + "station": 1466, + "band": 1467, + "##ers": 1468, + "local": 1469, + "public": 1470, + "himself": 1471, + "different": 1472, + "death": 1473, + "say": 1474, + "##1": 1475, + "30": 1476, + "##2": 1477, + "2005": 1478, + "16": 1479, + "night": 1480, + "behind": 1481, + "children": 1482, + "English": 1483, + "members": 1484, + "near": 1485, + "saw": 1486, + "together": 1487, + "son": 1488, + "14": 1489, + "voice": 1490, + "village": 1491, + "13": 1492, + "hands": 1493, + "help": 1494, + "##3": 1495, + "due": 1496, + "French": 1497, + "London": 1498, + "top": 1499, + "told": 1500, + "open": 1501, + "published": 1502, + "third": 1503, + "2017": 1504, + "play": 1505, + "across": 1506, + "During": 1507, + "put": 1508, + "final": 1509, + "often": 1510, + "include": 1511, + "25": 1512, + "##le": 1513, + "main": 1514, + "having": 1515, + "2004": 1516, + "once": 1517, + "ever": 1518, + "let": 1519, + "book": 1520, + "led": 1521, + "gave": 1522, + "late": 1523, + "front": 1524, + "find": 1525, + "club": 1526, + "##4": 1527, + "German": 1528, + "included": 1529, + "species": 1530, + "College": 1531, + "form": 1532, + "opened": 1533, + "mother": 1534, + "women": 1535, + "enough": 1536, + "West": 1537, + "must": 1538, + "2000": 1539, + "power": 1540, + "really": 1541, + "17": 1542, + "making": 1543, + "half": 1544, + "##6": 1545, + "order": 1546, + "might": 1547, + "##is": 1548, + "given": 1549, + "million": 1550, + "times": 1551, + "days": 1552, + "point": 1553, + "full": 1554, + "service": 1555, + "With": 1556, + "km": 1557, + "major": 1558, + "##7": 1559, + "original": 1560, + "become": 1561, + "seen": 1562, + "II": 1563, + "north": 1564, + "six": 1565, + "##te": 1566, + "love": 1567, + "##0": 1568, + "national": 1569, + "International": 1570, + "##5": 1571, + "24": 1572, + "So": 1573, + "District": 1574, + "lost": 1575, + "run": 1576, + "couldn": 1577, + "career": 1578, + "always": 1579, + "##9": 1580, + "2003": 1581, + "##th": 1582, + "country": 1583, + "##z": 1584, + "House": 1585, + "air": 1586, + "tell": 1587, + "south": 1588, + "worked": 1589, + "woman": 1590, + "player": 1591, + "##A": 1592, + "almost": 1593, + "war": 1594, + "River": 1595, + "##ic": 1596, + "married": 1597, + "continued": 1598, + "Then": 1599, + "James": 1600, + "close": 1601, + "black": 1602, + "short": 1603, + "##8": 1604, + "##na": 1605, + "using": 1606, + "history": 1607, + "returned": 1608, + "light": 1609, + "car": 1610, + "##ra": 1611, + "sure": 1612, + "William": 1613, + "things": 1614, + "General": 1615, + "##ry": 1616, + "2002": 1617, + "better": 1618, + "support": 1619, + "100": 1620, + "among": 1621, + "From": 1622, + "feet": 1623, + "King": 1624, + "anything": 1625, + "21": 1626, + "19": 1627, + "established": 1628, + "district": 1629, + "2001": 1630, + "feel": 1631, + "great": 1632, + "##ton": 1633, + "level": 1634, + "Cup": 1635, + "These": 1636, + "written": 1637, + "games": 1638, + "others": 1639, + "already": 1640, + "title": 1641, + "story": 1642, + "##p": 1643, + "law": 1644, + "thing": 1645, + "US": 1646, + "record": 1647, + "role": 1648, + "however": 1649, + "By": 1650, + "students": 1651, + "England": 1652, + "white": 1653, + "control": 1654, + "least": 1655, + "inside": 1656, + "land": 1657, + "##C": 1658, + "22": 1659, + "give": 1660, + "community": 1661, + "hard": 1662, + "##ie": 1663, + "non": 1664, + "##c": 1665, + "produced": 1666, + "George": 1667, + "round": 1668, + "period": 1669, + "Park": 1670, + "business": 1671, + "various": 1672, + "##ne": 1673, + "does": 1674, + "present": 1675, + "wife": 1676, + "far": 1677, + "taken": 1678, + "per": 1679, + "reached": 1680, + "David": 1681, + "able": 1682, + "version": 1683, + "working": 1684, + "young": 1685, + "live": 1686, + "created": 1687, + "joined": 1688, + "East": 1689, + "living": 1690, + "appeared": 1691, + "case": 1692, + "High": 1693, + "done": 1694, + "23": 1695, + "important": 1696, + "President": 1697, + "Award": 1698, + "France": 1699, + "position": 1700, + "office": 1701, + "looking": 1702, + "total": 1703, + "general": 1704, + "class": 1705, + "To": 1706, + "production": 1707, + "##S": 1708, + "football": 1709, + "party": 1710, + "brother": 1711, + "keep": 1712, + "mind": 1713, + "free": 1714, + "Street": 1715, + "hair": 1716, + "announced": 1717, + "development": 1718, + "either": 1719, + "nothing": 1720, + "moment": 1721, + "Church": 1722, + "followed": 1723, + "wrote": 1724, + "why": 1725, + "India": 1726, + "San": 1727, + "election": 1728, + "1999": 1729, + "lead": 1730, + "How": 1731, + "##ch": 1732, + "##rs": 1733, + "words": 1734, + "European": 1735, + "course": 1736, + "considered": 1737, + "America": 1738, + "arms": 1739, + "Army": 1740, + "political": 1741, + "##la": 1742, + "28": 1743, + "26": 1744, + "west": 1745, + "east": 1746, + "ground": 1747, + "further": 1748, + "church": 1749, + "less": 1750, + "site": 1751, + "First": 1752, + "Not": 1753, + "Australia": 1754, + "toward": 1755, + "California": 1756, + "##ness": 1757, + "described": 1758, + "works": 1759, + "An": 1760, + "Council": 1761, + "heart": 1762, + "past": 1763, + "military": 1764, + "27": 1765, + "##or": 1766, + "heard": 1767, + "field": 1768, + "human": 1769, + "soon": 1770, + "founded": 1771, + "1998": 1772, + "playing": 1773, + "trying": 1774, + "##x": 1775, + "##ist": 1776, + "##ta": 1777, + "television": 1778, + "mouth": 1779, + "although": 1780, + "taking": 1781, + "win": 1782, + "fire": 1783, + "Division": 1784, + "##ity": 1785, + "Party": 1786, + "Royal": 1787, + "program": 1788, + "Some": 1789, + "Don": 1790, + "Association": 1791, + "According": 1792, + "tried": 1793, + "TV": 1794, + "Paul": 1795, + "outside": 1796, + "daughter": 1797, + "Best": 1798, + "While": 1799, + "someone": 1800, + "match": 1801, + "recorded": 1802, + "Canada": 1803, + "closed": 1804, + "region": 1805, + "Air": 1806, + "above": 1807, + "months": 1808, + "elected": 1809, + "##da": 1810, + "##ian": 1811, + "road": 1812, + "##ar": 1813, + "brought": 1814, + "move": 1815, + "1997": 1816, + "leave": 1817, + "##um": 1818, + "Thomas": 1819, + "1996": 1820, + "am": 1821, + "low": 1822, + "Robert": 1823, + "formed": 1824, + "person": 1825, + "services": 1826, + "points": 1827, + "Mr": 1828, + "miles": 1829, + "##b": 1830, + "stop": 1831, + "rest": 1832, + "doing": 1833, + "needed": 1834, + "international": 1835, + "release": 1836, + "floor": 1837, + "start": 1838, + "sound": 1839, + "call": 1840, + "killed": 1841, + "real": 1842, + "dark": 1843, + "research": 1844, + "finished": 1845, + "language": 1846, + "Michael": 1847, + "professional": 1848, + "change": 1849, + "sent": 1850, + "50": 1851, + "upon": 1852, + "29": 1853, + "track": 1854, + "hit": 1855, + "event": 1856, + "2018": 1857, + "term": 1858, + "example": 1859, + "Germany": 1860, + "similar": 1861, + "return": 1862, + "##ism": 1863, + "fact": 1864, + "pulled": 1865, + "stood": 1866, + "says": 1867, + "ran": 1868, + "information": 1869, + "yet": 1870, + "result": 1871, + "developed": 1872, + "girl": 1873, + "##re": 1874, + "God": 1875, + "1995": 1876, + "areas": 1877, + "signed": 1878, + "decided": 1879, + "##ment": 1880, + "Company": 1881, + "seemed": 1882, + "##el": 1883, + "co": 1884, + "turn": 1885, + "race": 1886, + "common": 1887, + "video": 1888, + "Charles": 1889, + "Indian": 1890, + "##ation": 1891, + "blood": 1892, + "art": 1893, + "red": 1894, + "##able": 1895, + "added": 1896, + "rather": 1897, + "1994": 1898, + "met": 1899, + "director": 1900, + "addition": 1901, + "design": 1902, + "average": 1903, + "minutes": 1904, + "##ies": 1905, + "##ted": 1906, + "available": 1907, + "bed": 1908, + "coming": 1909, + "friend": 1910, + "idea": 1911, + "kind": 1912, + "Union": 1913, + "Road": 1914, + "remained": 1915, + "##ting": 1916, + "everything": 1917, + "##ma": 1918, + "running": 1919, + "care": 1920, + "finally": 1921, + "Chinese": 1922, + "appointed": 1923, + "1992": 1924, + "Australian": 1925, + "##ley": 1926, + "popular": 1927, + "mean": 1928, + "teams": 1929, + "probably": 1930, + "##land": 1931, + "usually": 1932, + "project": 1933, + "social": 1934, + "Championship": 1935, + "possible": 1936, + "word": 1937, + "Russian": 1938, + "instead": 1939, + "mi": 1940, + "herself": 1941, + "##T": 1942, + "Peter": 1943, + "Hall": 1944, + "Center": 1945, + "seat": 1946, + "style": 1947, + "money": 1948, + "1993": 1949, + "else": 1950, + "Department": 1951, + "table": 1952, + "Music": 1953, + "current": 1954, + "31": 1955, + "features": 1956, + "special": 1957, + "events": 1958, + "character": 1959, + "Two": 1960, + "square": 1961, + "sold": 1962, + "debut": 1963, + "##v": 1964, + "process": 1965, + "Although": 1966, + "Since": 1967, + "##ka": 1968, + "40": 1969, + "Central": 1970, + "currently": 1971, + "education": 1972, + "placed": 1973, + "lot": 1974, + "China": 1975, + "quickly": 1976, + "forward": 1977, + "seven": 1978, + "##ling": 1979, + "Europe": 1980, + "arm": 1981, + "performed": 1982, + "Japanese": 1983, + "1991": 1984, + "Henry": 1985, + "Now": 1986, + "Dr": 1987, + "##ion": 1988, + "week": 1989, + "Group": 1990, + "myself": 1991, + "big": 1992, + "UK": 1993, + "Washington": 1994, + "ten": 1995, + "deep": 1996, + "1990": 1997, + "Club": 1998, + "Japan": 1999, + "space": 2000, + "La": 2001, + "directed": 2002, + "smile": 2003, + "episode": 2004, + "hours": 2005, + "whole": 2006, + "##de": 2007, + "##less": 2008, + "Why": 2009, + "wouldn": 2010, + "designed": 2011, + "strong": 2012, + "training": 2013, + "changed": 2014, + "Society": 2015, + "stage": 2016, + "involved": 2017, + "hadn": 2018, + "towards": 2019, + "leading": 2020, + "police": 2021, + "eight": 2022, + "kept": 2023, + "Institute": 2024, + "study": 2025, + "largest": 2026, + "child": 2027, + "eventually": 2028, + "private": 2029, + "modern": 2030, + "Court": 2031, + "throughout": 2032, + "getting": 2033, + "originally": 2034, + "attack": 2035, + "##E": 2036, + "talk": 2037, + "Great": 2038, + "longer": 2039, + "songs": 2040, + "alone": 2041, + "##ine": 2042, + "wide": 2043, + "dead": 2044, + "walked": 2045, + "shot": 2046, + "##ri": 2047, + "Oh": 2048, + "force": 2049, + "##st": 2050, + "Art": 2051, + "today": 2052, + "friends": 2053, + "Island": 2054, + "Richard": 2055, + "1989": 2056, + "center": 2057, + "construction": 2058, + "believe": 2059, + "size": 2060, + "White": 2061, + "ship": 2062, + "completed": 2063, + "##B": 2064, + "gone": 2065, + "Just": 2066, + "rock": 2067, + "sat": 2068, + "##R": 2069, + "radio": 2070, + "below": 2071, + "entire": 2072, + "families": 2073, + "league": 2074, + "includes": 2075, + "type": 2076, + "lived": 2077, + "official": 2078, + "range": 2079, + "hold": 2080, + "featured": 2081, + "Most": 2082, + "##ter": 2083, + "president": 2084, + "passed": 2085, + "means": 2086, + "##f": 2087, + "forces": 2088, + "lips": 2089, + "Mary": 2090, + "Do": 2091, + "guitar": 2092, + "##ce": 2093, + "food": 2094, + "wall": 2095, + "Of": 2096, + "spent": 2097, + "Its": 2098, + "performance": 2099, + "hear": 2100, + "##P": 2101, + "Western": 2102, + "reported": 2103, + "sister": 2104, + "##et": 2105, + "morning": 2106, + "##M": 2107, + "especially": 2108, + "##ive": 2109, + "Minister": 2110, + "itself": 2111, + "post": 2112, + "bit": 2113, + "groups": 2114, + "1988": 2115, + "##tion": 2116, + "Black": 2117, + "##ng": 2118, + "Well": 2119, + "raised": 2120, + "sometimes": 2121, + "Canadian": 2122, + "Paris": 2123, + "Spanish": 2124, + "replaced": 2125, + "schools": 2126, + "Academy": 2127, + "leaving": 2128, + "central": 2129, + "female": 2130, + "Christian": 2131, + "Jack": 2132, + "whose": 2133, + "college": 2134, + "onto": 2135, + "provided": 2136, + "##D": 2137, + "##ville": 2138, + "players": 2139, + "actually": 2140, + "stopped": 2141, + "##son": 2142, + "Museum": 2143, + "doesn": 2144, + "##ts": 2145, + "books": 2146, + "fight": 2147, + "allowed": 2148, + "##ur": 2149, + "beginning": 2150, + "Records": 2151, + "awarded": 2152, + "parents": 2153, + "coach": 2154, + "##os": 2155, + "Red": 2156, + "saying": 2157, + "##ck": 2158, + "Smith": 2159, + "Yes": 2160, + "Lake": 2161, + "##L": 2162, + "aircraft": 2163, + "1987": 2164, + "##ble": 2165, + "previous": 2166, + "ft": 2167, + "action": 2168, + "Italian": 2169, + "African": 2170, + "happened": 2171, + "vocals": 2172, + "Act": 2173, + "future": 2174, + "court": 2175, + "##ge": 2176, + "1986": 2177, + "degree": 2178, + "phone": 2179, + "##ro": 2180, + "Is": 2181, + "countries": 2182, + "winning": 2183, + "breath": 2184, + "Love": 2185, + "river": 2186, + "matter": 2187, + "Lord": 2188, + "Other": 2189, + "list": 2190, + "self": 2191, + "parts": 2192, + "##ate": 2193, + "provide": 2194, + "cut": 2195, + "shows": 2196, + "plan": 2197, + "1st": 2198, + "interest": 2199, + "##ized": 2200, + "Africa": 2201, + "stated": 2202, + "Sir": 2203, + "fell": 2204, + "owned": 2205, + "earlier": 2206, + "ended": 2207, + "competition": 2208, + "attention": 2209, + "1985": 2210, + "lower": 2211, + "nearly": 2212, + "bad": 2213, + "older": 2214, + "stay": 2215, + "Saint": 2216, + "##se": 2217, + "certain": 2218, + "1984": 2219, + "fingers": 2220, + "blue": 2221, + "try": 2222, + "fourth": 2223, + "Grand": 2224, + "##as": 2225, + "king": 2226, + "##nt": 2227, + "makes": 2228, + "chest": 2229, + "movement": 2230, + "states": 2231, + "moving": 2232, + "data": 2233, + "introduced": 2234, + "model": 2235, + "date": 2236, + "section": 2237, + "Los": 2238, + "deal": 2239, + "##I": 2240, + "skin": 2241, + "entered": 2242, + "middle": 2243, + "success": 2244, + "Texas": 2245, + "##w": 2246, + "summer": 2247, + "island": 2248, + "##N": 2249, + "Republic": 2250, + "length": 2251, + "husband": 2252, + "1980": 2253, + "##ey": 2254, + "reason": 2255, + "anyone": 2256, + "forced": 2257, + "via": 2258, + "base": 2259, + "500": 2260, + "job": 2261, + "covered": 2262, + "Festival": 2263, + "Roman": 2264, + "successful": 2265, + "rights": 2266, + "cover": 2267, + "Man": 2268, + "writing": 2269, + "Ireland": 2270, + "##F": 2271, + "related": 2272, + "goal": 2273, + "takes": 2274, + "buildings": 2275, + "true": 2276, + "weeks": 2277, + "1983": 2278, + "Because": 2279, + "opening": 2280, + "novel": 2281, + "ISBN": 2282, + "meet": 2283, + "gold": 2284, + "##ous": 2285, + "mid": 2286, + "km²": 2287, + "standing": 2288, + "Football": 2289, + "Chicago": 2290, + "shook": 2291, + "whom": 2292, + "##ki": 2293, + "1982": 2294, + "Day": 2295, + "feeling": 2296, + "scored": 2297, + "boy": 2298, + "higher": 2299, + "Force": 2300, + "leader": 2301, + "heavy": 2302, + "fall": 2303, + "question": 2304, + "sense": 2305, + "army": 2306, + "Second": 2307, + "energy": 2308, + "meeting": 2309, + "themselves": 2310, + "kill": 2311, + "##am": 2312, + "board": 2313, + "census": 2314, + "##ya": 2315, + "##ns": 2316, + "mine": 2317, + "meant": 2318, + "market": 2319, + "required": 2320, + "battle": 2321, + "campaign": 2322, + "attended": 2323, + "approximately": 2324, + "Kingdom": 2325, + "runs": 2326, + "active": 2327, + "##ha": 2328, + "contract": 2329, + "clear": 2330, + "previously": 2331, + "health": 2332, + "1979": 2333, + "Arts": 2334, + "complete": 2335, + "Catholic": 2336, + "couple": 2337, + "units": 2338, + "##ll": 2339, + "##ty": 2340, + "Committee": 2341, + "shoulder": 2342, + "sea": 2343, + "systems": 2344, + "listed": 2345, + "##O": 2346, + "caught": 2347, + "tournament": 2348, + "##G": 2349, + "northern": 2350, + "author": 2351, + "Film": 2352, + "Your": 2353, + "##men": 2354, + "holding": 2355, + "offered": 2356, + "personal": 2357, + "1981": 2358, + "southern": 2359, + "artist": 2360, + "traditional": 2361, + "studio": 2362, + "200": 2363, + "capital": 2364, + "##ful": 2365, + "regular": 2366, + "ask": 2367, + "giving": 2368, + "organization": 2369, + "month": 2370, + "news": 2371, + "Are": 2372, + "read": 2373, + "managed": 2374, + "helped": 2375, + "studied": 2376, + "student": 2377, + "defeated": 2378, + "natural": 2379, + "industry": 2380, + "Year": 2381, + "noted": 2382, + "decision": 2383, + "Government": 2384, + "quite": 2385, + "##id": 2386, + "smiled": 2387, + "1972": 2388, + "Maybe": 2389, + "tracks": 2390, + "##ke": 2391, + "Mark": 2392, + "al": 2393, + "media": 2394, + "engine": 2395, + "hour": 2396, + "Their": 2397, + "relationship": 2398, + "plays": 2399, + "property": 2400, + "structure": 2401, + "1976": 2402, + "ago": 2403, + "Hill": 2404, + "Martin": 2405, + "1978": 2406, + "ready": 2407, + "Many": 2408, + "Like": 2409, + "Bay": 2410, + "immediately": 2411, + "generally": 2412, + "Italy": 2413, + "Greek": 2414, + "practice": 2415, + "caused": 2416, + "division": 2417, + "significant": 2418, + "Joseph": 2419, + "speed": 2420, + "Let": 2421, + "thinking": 2422, + "completely": 2423, + "1974": 2424, + "primary": 2425, + "mostly": 2426, + "##field": 2427, + "##K": 2428, + "1975": 2429, + "##to": 2430, + "Even": 2431, + "writer": 2432, + "##led": 2433, + "dropped": 2434, + "magazine": 2435, + "collection": 2436, + "understand": 2437, + "route": 2438, + "highest": 2439, + "particular": 2440, + "films": 2441, + "lines": 2442, + "network": 2443, + "Science": 2444, + "loss": 2445, + "carried": 2446, + "direction": 2447, + "green": 2448, + "1977": 2449, + "location": 2450, + "producer": 2451, + "according": 2452, + "Women": 2453, + "Queen": 2454, + "neck": 2455, + "thus": 2456, + "independent": 2457, + "view": 2458, + "1970": 2459, + "Angeles": 2460, + "Soviet": 2461, + "distance": 2462, + "problem": 2463, + "Board": 2464, + "tour": 2465, + "western": 2466, + "income": 2467, + "appearance": 2468, + "access": 2469, + "Mexico": 2470, + "nodded": 2471, + "street": 2472, + "surface": 2473, + "arrived": 2474, + "believed": 2475, + "Old": 2476, + "1968": 2477, + "1973": 2478, + "becoming": 2479, + "whether": 2480, + "1945": 2481, + "figure": 2482, + "singer": 2483, + "stand": 2484, + "Following": 2485, + "issue": 2486, + "window": 2487, + "wrong": 2488, + "pain": 2489, + "everyone": 2490, + "lives": 2491, + "issues": 2492, + "park": 2493, + "slowly": 2494, + "la": 2495, + "act": 2496, + "##va": 2497, + "bring": 2498, + "Lee": 2499, + "operations": 2500, + "key": 2501, + "comes": 2502, + "fine": 2503, + "cold": 2504, + "famous": 2505, + "Navy": 2506, + "1971": 2507, + "Me": 2508, + "additional": 2509, + "individual": 2510, + "##ner": 2511, + "Zealand": 2512, + "goals": 2513, + "county": 2514, + "contains": 2515, + "Service": 2516, + "minute": 2517, + "2nd": 2518, + "reach": 2519, + "talking": 2520, + "particularly": 2521, + "##ham": 2522, + "movie": 2523, + "Director": 2524, + "glass": 2525, + "paper": 2526, + "studies": 2527, + "##co": 2528, + "railway": 2529, + "standard": 2530, + "Education": 2531, + "45": 2532, + "represented": 2533, + "Chief": 2534, + "Louis": 2535, + "launched": 2536, + "Star": 2537, + "terms": 2538, + "60": 2539, + "1969": 2540, + "experience": 2541, + "watched": 2542, + "Another": 2543, + "Press": 2544, + "Tom": 2545, + "staff": 2546, + "starting": 2547, + "subject": 2548, + "break": 2549, + "Virginia": 2550, + "nine": 2551, + "eye": 2552, + "##age": 2553, + "evidence": 2554, + "foot": 2555, + "##est": 2556, + "companies": 2557, + "Prince": 2558, + "##V": 2559, + "gun": 2560, + "create": 2561, + "Big": 2562, + "People": 2563, + "guy": 2564, + "Green": 2565, + "simply": 2566, + "numerous": 2567, + "##line": 2568, + "increased": 2569, + "twenty": 2570, + "##ga": 2571, + "##do": 2572, + "1967": 2573, + "award": 2574, + "officer": 2575, + "stone": 2576, + "Before": 2577, + "material": 2578, + "Northern": 2579, + "grew": 2580, + "male": 2581, + "plant": 2582, + "Life": 2583, + "legs": 2584, + "step": 2585, + "Al": 2586, + "unit": 2587, + "35": 2588, + "except": 2589, + "answer": 2590, + "##U": 2591, + "report": 2592, + "response": 2593, + "Edward": 2594, + "commercial": 2595, + "edition": 2596, + "trade": 2597, + "science": 2598, + "##ca": 2599, + "Irish": 2600, + "Law": 2601, + "shown": 2602, + "rate": 2603, + "failed": 2604, + "##ni": 2605, + "remains": 2606, + "changes": 2607, + "mm": 2608, + "limited": 2609, + "larger": 2610, + "Later": 2611, + "cause": 2612, + "waiting": 2613, + "Time": 2614, + "##wood": 2615, + "cost": 2616, + "Bill": 2617, + "manager": 2618, + "activities": 2619, + "likely": 2620, + "allow": 2621, + "operated": 2622, + "retired": 2623, + "##ping": 2624, + "65": 2625, + "directly": 2626, + "Who": 2627, + "associated": 2628, + "effect": 2629, + "hell": 2630, + "Florida": 2631, + "straight": 2632, + "hot": 2633, + "Valley": 2634, + "management": 2635, + "girls": 2636, + "expected": 2637, + "eastern": 2638, + "Mike": 2639, + "chance": 2640, + "cast": 2641, + "centre": 2642, + "chair": 2643, + "hurt": 2644, + "problems": 2645, + "##li": 2646, + "walk": 2647, + "programs": 2648, + "Team": 2649, + "characters": 2650, + "Battle": 2651, + "edge": 2652, + "pay": 2653, + "maybe": 2654, + "corner": 2655, + "majority": 2656, + "medical": 2657, + "Joe": 2658, + "Summer": 2659, + "##io": 2660, + "attempt": 2661, + "Pacific": 2662, + "command": 2663, + "Radio": 2664, + "##by": 2665, + "names": 2666, + "municipality": 2667, + "1964": 2668, + "train": 2669, + "economic": 2670, + "Brown": 2671, + "feature": 2672, + "sex": 2673, + "source": 2674, + "agreed": 2675, + "remember": 2676, + "Three": 2677, + "1966": 2678, + "1965": 2679, + "Pennsylvania": 2680, + "victory": 2681, + "senior": 2682, + "annual": 2683, + "III": 2684, + "Southern": 2685, + "results": 2686, + "Sam": 2687, + "serving": 2688, + "religious": 2689, + "Jones": 2690, + "appears": 2691, + "##der": 2692, + "despite": 2693, + "claimed": 2694, + "Both": 2695, + "musical": 2696, + "matches": 2697, + "fast": 2698, + "security": 2699, + "selected": 2700, + "Young": 2701, + "double": 2702, + "complex": 2703, + "hospital": 2704, + "chief": 2705, + "Times": 2706, + "##ve": 2707, + "Championships": 2708, + "filled": 2709, + "Public": 2710, + "Despite": 2711, + "beautiful": 2712, + "Research": 2713, + "plans": 2714, + "Province": 2715, + "##ally": 2716, + "Wales": 2717, + "##ko": 2718, + "artists": 2719, + "metal": 2720, + "nearby": 2721, + "Spain": 2722, + "##il": 2723, + "32": 2724, + "houses": 2725, + "supported": 2726, + "piece": 2727, + "##no": 2728, + "stared": 2729, + "recording": 2730, + "nature": 2731, + "legal": 2732, + "Russia": 2733, + "##ization": 2734, + "remaining": 2735, + "looks": 2736, + "##sh": 2737, + "bridge": 2738, + "closer": 2739, + "cases": 2740, + "scene": 2741, + "marriage": 2742, + "Little": 2743, + "##é": 2744, + "uses": 2745, + "Earth": 2746, + "specific": 2747, + "Frank": 2748, + "theory": 2749, + "Good": 2750, + "discovered": 2751, + "referred": 2752, + "bass": 2753, + "culture": 2754, + "university": 2755, + "presented": 2756, + "Congress": 2757, + "##go": 2758, + "metres": 2759, + "continue": 2760, + "1960": 2761, + "isn": 2762, + "Awards": 2763, + "meaning": 2764, + "cell": 2765, + "composed": 2766, + "separate": 2767, + "Series": 2768, + "forms": 2769, + "Blue": 2770, + "cross": 2771, + "##tor": 2772, + "increase": 2773, + "test": 2774, + "computer": 2775, + "slightly": 2776, + "Where": 2777, + "Jewish": 2778, + "Town": 2779, + "tree": 2780, + "status": 2781, + "1944": 2782, + "variety": 2783, + "responsible": 2784, + "pretty": 2785, + "initially": 2786, + "##way": 2787, + "realized": 2788, + "pass": 2789, + "provides": 2790, + "Captain": 2791, + "Alexander": 2792, + "recent": 2793, + "score": 2794, + "broke": 2795, + "Scott": 2796, + "drive": 2797, + "financial": 2798, + "showed": 2799, + "Line": 2800, + "stories": 2801, + "ordered": 2802, + "soldiers": 2803, + "genus": 2804, + "operation": 2805, + "gaze": 2806, + "sitting": 2807, + "society": 2808, + "Only": 2809, + "hope": 2810, + "actor": 2811, + "follow": 2812, + "Empire": 2813, + "Yeah": 2814, + "technology": 2815, + "happy": 2816, + "focus": 2817, + "policy": 2818, + "spread": 2819, + "situation": 2820, + "##ford": 2821, + "##ba": 2822, + "Mrs": 2823, + "watch": 2824, + "Can": 2825, + "1963": 2826, + "Commission": 2827, + "touch": 2828, + "earned": 2829, + "troops": 2830, + "Under": 2831, + "1962": 2832, + "individuals": 2833, + "cannot": 2834, + "19th": 2835, + "##lin": 2836, + "mile": 2837, + "expression": 2838, + "exactly": 2839, + "suddenly": 2840, + "weight": 2841, + "dance": 2842, + "stepped": 2843, + "places": 2844, + "appear": 2845, + "difficult": 2846, + "Railway": 2847, + "anti": 2848, + "numbers": 2849, + "kilometres": 2850, + "star": 2851, + "##ier": 2852, + "department": 2853, + "ice": 2854, + "Britain": 2855, + "removed": 2856, + "Once": 2857, + "##lo": 2858, + "Boston": 2859, + "value": 2860, + "##ant": 2861, + "mission": 2862, + "trees": 2863, + "Order": 2864, + "sports": 2865, + "join": 2866, + "serve": 2867, + "Major": 2868, + "poor": 2869, + "Poland": 2870, + "mainly": 2871, + "Theatre": 2872, + "pushed": 2873, + "Station": 2874, + "##it": 2875, + "Lady": 2876, + "federal": 2877, + "silver": 2878, + "##ler": 2879, + "foreign": 2880, + "##ard": 2881, + "Eastern": 2882, + "##den": 2883, + "box": 2884, + "hall": 2885, + "subsequently": 2886, + "lies": 2887, + "acquired": 2888, + "1942": 2889, + "ancient": 2890, + "CD": 2891, + "History": 2892, + "Jean": 2893, + "beyond": 2894, + "##ger": 2895, + "El": 2896, + "##les": 2897, + "growing": 2898, + "championship": 2899, + "native": 2900, + "Parliament": 2901, + "Williams": 2902, + "watching": 2903, + "direct": 2904, + "overall": 2905, + "offer": 2906, + "Also": 2907, + "80": 2908, + "Secretary": 2909, + "spoke": 2910, + "Latin": 2911, + "ability": 2912, + "##ated": 2913, + "safe": 2914, + "presence": 2915, + "##ial": 2916, + "headed": 2917, + "regional": 2918, + "planned": 2919, + "1961": 2920, + "Johnson": 2921, + "throat": 2922, + "consists": 2923, + "##W": 2924, + "extended": 2925, + "Or": 2926, + "bar": 2927, + "walls": 2928, + "Chris": 2929, + "stations": 2930, + "politician": 2931, + "Olympics": 2932, + "influence": 2933, + "share": 2934, + "fighting": 2935, + "speak": 2936, + "hundred": 2937, + "Carolina": 2938, + "die": 2939, + "stars": 2940, + "##tic": 2941, + "color": 2942, + "Chapter": 2943, + "##ish": 2944, + "fear": 2945, + "sleep": 2946, + "goes": 2947, + "Francisco": 2948, + "oil": 2949, + "Bank": 2950, + "sign": 2951, + "physical": 2952, + "##berg": 2953, + "Dutch": 2954, + "seasons": 2955, + "##rd": 2956, + "Games": 2957, + "Governor": 2958, + "sorry": 2959, + "lack": 2960, + "Centre": 2961, + "memory": 2962, + "baby": 2963, + "smaller": 2964, + "charge": 2965, + "Did": 2966, + "multiple": 2967, + "ships": 2968, + "shirt": 2969, + "Assembly": 2970, + "amount": 2971, + "leaves": 2972, + "3rd": 2973, + "Foundation": 2974, + "conditions": 2975, + "1943": 2976, + "Rock": 2977, + "Democratic": 2978, + "Daniel": 2979, + "##at": 2980, + "winner": 2981, + "products": 2982, + "##ina": 2983, + "store": 2984, + "latter": 2985, + "Professor": 2986, + "civil": 2987, + "prior": 2988, + "host": 2989, + "1956": 2990, + "soft": 2991, + "vote": 2992, + "needs": 2993, + "Each": 2994, + "rules": 2995, + "1958": 2996, + "pressure": 2997, + "letter": 2998, + "normal": 2999, + "proposed": 3000, + "levels": 3001, + "records": 3002, + "1959": 3003, + "paid": 3004, + "intended": 3005, + "Victoria": 3006, + "purpose": 3007, + "okay": 3008, + "historical": 3009, + "issued": 3010, + "1980s": 3011, + "broadcast": 3012, + "rule": 3013, + "simple": 3014, + "picked": 3015, + "firm": 3016, + "Sea": 3017, + "1941": 3018, + "Elizabeth": 3019, + "1940": 3020, + "serious": 3021, + "featuring": 3022, + "highly": 3023, + "graduated": 3024, + "mentioned": 3025, + "choice": 3026, + "1948": 3027, + "replied": 3028, + "percent": 3029, + "Scotland": 3030, + "##hi": 3031, + "females": 3032, + "constructed": 3033, + "1957": 3034, + "settled": 3035, + "Steve": 3036, + "recognized": 3037, + "cities": 3038, + "crew": 3039, + "glanced": 3040, + "kiss": 3041, + "competed": 3042, + "flight": 3043, + "knowledge": 3044, + "editor": 3045, + "More": 3046, + "Conference": 3047, + "##H": 3048, + "fifth": 3049, + "elements": 3050, + "##ee": 3051, + "##tes": 3052, + "function": 3053, + "newspaper": 3054, + "recently": 3055, + "Miss": 3056, + "cultural": 3057, + "brown": 3058, + "twice": 3059, + "Office": 3060, + "1939": 3061, + "truth": 3062, + "Creek": 3063, + "1946": 3064, + "households": 3065, + "USA": 3066, + "1950": 3067, + "quality": 3068, + "##tt": 3069, + "border": 3070, + "seconds": 3071, + "destroyed": 3072, + "pre": 3073, + "wait": 3074, + "ahead": 3075, + "build": 3076, + "image": 3077, + "90": 3078, + "cars": 3079, + "##mi": 3080, + "33": 3081, + "promoted": 3082, + "professor": 3083, + "et": 3084, + "bank": 3085, + "medal": 3086, + "text": 3087, + "broken": 3088, + "Middle": 3089, + "revealed": 3090, + "sides": 3091, + "wing": 3092, + "seems": 3093, + "channel": 3094, + "1970s": 3095, + "Ben": 3096, + "loved": 3097, + "effort": 3098, + "officers": 3099, + "Will": 3100, + "##ff": 3101, + "70": 3102, + "Israel": 3103, + "Jim": 3104, + "upper": 3105, + "fully": 3106, + "label": 3107, + "Jr": 3108, + "assistant": 3109, + "powerful": 3110, + "pair": 3111, + "positive": 3112, + "##ary": 3113, + "gives": 3114, + "1955": 3115, + "20th": 3116, + "races": 3117, + "remain": 3118, + "kitchen": 3119, + "primarily": 3120, + "##ti": 3121, + "Sydney": 3122, + "easy": 3123, + "Tour": 3124, + "whispered": 3125, + "buried": 3126, + "300": 3127, + "News": 3128, + "Polish": 3129, + "1952": 3130, + "Duke": 3131, + "Columbia": 3132, + "produce": 3133, + "accepted": 3134, + "00": 3135, + "approach": 3136, + "minor": 3137, + "1947": 3138, + "Special": 3139, + "44": 3140, + "Asian": 3141, + "basis": 3142, + "visit": 3143, + "Fort": 3144, + "Civil": 3145, + "finish": 3146, + "formerly": 3147, + "beside": 3148, + "leaned": 3149, + "##ite": 3150, + "median": 3151, + "rose": 3152, + "coast": 3153, + "effects": 3154, + "supposed": 3155, + "Cross": 3156, + "##hip": 3157, + "Corps": 3158, + "residents": 3159, + "Jackson": 3160, + "##ir": 3161, + "Bob": 3162, + "basketball": 3163, + "36": 3164, + "Asia": 3165, + "seem": 3166, + "Bishop": 3167, + "Book": 3168, + "##ber": 3169, + "ring": 3170, + "##ze": 3171, + "owner": 3172, + "BBC": 3173, + "##ja": 3174, + "transferred": 3175, + "acting": 3176, + "De": 3177, + "appearances": 3178, + "walking": 3179, + "Le": 3180, + "press": 3181, + "grabbed": 3182, + "1954": 3183, + "officially": 3184, + "1953": 3185, + "##pe": 3186, + "risk": 3187, + "taught": 3188, + "review": 3189, + "##X": 3190, + "lay": 3191, + "##well": 3192, + "council": 3193, + "Avenue": 3194, + "seeing": 3195, + "losing": 3196, + "Ohio": 3197, + "Super": 3198, + "province": 3199, + "ones": 3200, + "travel": 3201, + "##sa": 3202, + "projects": 3203, + "equipment": 3204, + "spot": 3205, + "Berlin": 3206, + "administrative": 3207, + "heat": 3208, + "potential": 3209, + "shut": 3210, + "capacity": 3211, + "elections": 3212, + "growth": 3213, + "fought": 3214, + "Republican": 3215, + "mixed": 3216, + "Andrew": 3217, + "teacher": 3218, + "turning": 3219, + "strength": 3220, + "shoulders": 3221, + "beat": 3222, + "wind": 3223, + "1949": 3224, + "Health": 3225, + "follows": 3226, + "camp": 3227, + "suggested": 3228, + "perhaps": 3229, + "Alex": 3230, + "mountain": 3231, + "contact": 3232, + "divided": 3233, + "candidate": 3234, + "fellow": 3235, + "34": 3236, + "Show": 3237, + "necessary": 3238, + "workers": 3239, + "ball": 3240, + "horse": 3241, + "ways": 3242, + "questions": 3243, + "protect": 3244, + "gas": 3245, + "activity": 3246, + "younger": 3247, + "bottom": 3248, + "founder": 3249, + "Scottish": 3250, + "screen": 3251, + "treatment": 3252, + "easily": 3253, + "com": 3254, + "##house": 3255, + "dedicated": 3256, + "Master": 3257, + "warm": 3258, + "Night": 3259, + "Georgia": 3260, + "Long": 3261, + "von": 3262, + "##me": 3263, + "perfect": 3264, + "website": 3265, + "1960s": 3266, + "piano": 3267, + "efforts": 3268, + "##ide": 3269, + "Tony": 3270, + "sort": 3271, + "offers": 3272, + "Development": 3273, + "Simon": 3274, + "executive": 3275, + "##nd": 3276, + "save": 3277, + "Over": 3278, + "Senate": 3279, + "1951": 3280, + "1990s": 3281, + "draw": 3282, + "master": 3283, + "Police": 3284, + "##ius": 3285, + "renamed": 3286, + "boys": 3287, + "initial": 3288, + "prominent": 3289, + "damage": 3290, + "Co": 3291, + "##ov": 3292, + "##za": 3293, + "online": 3294, + "begin": 3295, + "occurred": 3296, + "captured": 3297, + "youth": 3298, + "Top": 3299, + "account": 3300, + "tells": 3301, + "Justice": 3302, + "conducted": 3303, + "forest": 3304, + "##town": 3305, + "bought": 3306, + "teeth": 3307, + "Jersey": 3308, + "##di": 3309, + "purchased": 3310, + "agreement": 3311, + "Michigan": 3312, + "##ure": 3313, + "campus": 3314, + "prison": 3315, + "becomes": 3316, + "product": 3317, + "secret": 3318, + "guess": 3319, + "Route": 3320, + "huge": 3321, + "types": 3322, + "drums": 3323, + "64": 3324, + "split": 3325, + "defeat": 3326, + "estate": 3327, + "housing": 3328, + "##ot": 3329, + "brothers": 3330, + "Coast": 3331, + "declared": 3332, + "happen": 3333, + "titled": 3334, + "therefore": 3335, + "sun": 3336, + "commonly": 3337, + "alongside": 3338, + "Stadium": 3339, + "library": 3340, + "Home": 3341, + "article": 3342, + "steps": 3343, + "telling": 3344, + "slow": 3345, + "assigned": 3346, + "refused": 3347, + "laughed": 3348, + "wants": 3349, + "Nick": 3350, + "wearing": 3351, + "Rome": 3352, + "Open": 3353, + "##ah": 3354, + "Hospital": 3355, + "pointed": 3356, + "Taylor": 3357, + "lifted": 3358, + "escape": 3359, + "participated": 3360, + "##j": 3361, + "drama": 3362, + "parish": 3363, + "Santa": 3364, + "##per": 3365, + "organized": 3366, + "mass": 3367, + "pick": 3368, + "Airport": 3369, + "gets": 3370, + "Library": 3371, + "unable": 3372, + "pull": 3373, + "Live": 3374, + "##ging": 3375, + "surrounding": 3376, + "##ries": 3377, + "focused": 3378, + "Adam": 3379, + "facilities": 3380, + "##ning": 3381, + "##ny": 3382, + "38": 3383, + "##ring": 3384, + "notable": 3385, + "era": 3386, + "connected": 3387, + "gained": 3388, + "operating": 3389, + "laid": 3390, + "Regiment": 3391, + "branch": 3392, + "defined": 3393, + "Christmas": 3394, + "machine": 3395, + "Four": 3396, + "academic": 3397, + "Iran": 3398, + "adopted": 3399, + "concept": 3400, + "Men": 3401, + "compared": 3402, + "search": 3403, + "traffic": 3404, + "Max": 3405, + "Maria": 3406, + "greater": 3407, + "##ding": 3408, + "widely": 3409, + "##burg": 3410, + "serves": 3411, + "1938": 3412, + "37": 3413, + "Go": 3414, + "hotel": 3415, + "shared": 3416, + "typically": 3417, + "scale": 3418, + "1936": 3419, + "leg": 3420, + "suffered": 3421, + "yards": 3422, + "pieces": 3423, + "Ministry": 3424, + "Wilson": 3425, + "episodes": 3426, + "empty": 3427, + "1918": 3428, + "safety": 3429, + "continues": 3430, + "yellow": 3431, + "historic": 3432, + "settlement": 3433, + "400": 3434, + "Come": 3435, + "Corporation": 3436, + "enemy": 3437, + "content": 3438, + "picture": 3439, + "evening": 3440, + "territory": 3441, + "method": 3442, + "trial": 3443, + "solo": 3444, + "driver": 3445, + "Here": 3446, + "##ls": 3447, + "entrance": 3448, + "Prize": 3449, + "spring": 3450, + "whatever": 3451, + "##ent": 3452, + "75": 3453, + "##ji": 3454, + "reading": 3455, + "Arthur": 3456, + "##cy": 3457, + "Our": 3458, + "clothes": 3459, + "Prime": 3460, + "Illinois": 3461, + "Kong": 3462, + "code": 3463, + "##ria": 3464, + "sit": 3465, + "Harry": 3466, + "Federal": 3467, + "chosen": 3468, + "administration": 3469, + "bodies": 3470, + "begins": 3471, + "stomach": 3472, + "Though": 3473, + "seats": 3474, + "Hong": 3475, + "density": 3476, + "Sun": 3477, + "leaders": 3478, + "Field": 3479, + "museum": 3480, + "chart": 3481, + "platform": 3482, + "languages": 3483, + "##ron": 3484, + "birth": 3485, + "holds": 3486, + "Gold": 3487, + "##un": 3488, + "fish": 3489, + "combined": 3490, + "##ps": 3491, + "4th": 3492, + "1937": 3493, + "largely": 3494, + "captain": 3495, + "trust": 3496, + "Game": 3497, + "van": 3498, + "boat": 3499, + "Oxford": 3500, + "basic": 3501, + "beneath": 3502, + "Islands": 3503, + "painting": 3504, + "nice": 3505, + "Toronto": 3506, + "path": 3507, + "males": 3508, + "sources": 3509, + "block": 3510, + "conference": 3511, + "parties": 3512, + "murder": 3513, + "clubs": 3514, + "crowd": 3515, + "calling": 3516, + "About": 3517, + "Business": 3518, + "peace": 3519, + "knows": 3520, + "lake": 3521, + "speaking": 3522, + "stayed": 3523, + "Brazil": 3524, + "allowing": 3525, + "Born": 3526, + "unique": 3527, + "thick": 3528, + "Technology": 3529, + "##que": 3530, + "receive": 3531, + "des": 3532, + "semi": 3533, + "alive": 3534, + "noticed": 3535, + "format": 3536, + "##ped": 3537, + "coffee": 3538, + "digital": 3539, + "##ned": 3540, + "handed": 3541, + "guard": 3542, + "tall": 3543, + "faced": 3544, + "setting": 3545, + "plants": 3546, + "partner": 3547, + "claim": 3548, + "reduced": 3549, + "temple": 3550, + "animals": 3551, + "determined": 3552, + "classes": 3553, + "##out": 3554, + "estimated": 3555, + "##ad": 3556, + "Olympic": 3557, + "providing": 3558, + "Massachusetts": 3559, + "learned": 3560, + "Inc": 3561, + "Philadelphia": 3562, + "Social": 3563, + "carry": 3564, + "42": 3565, + "possibly": 3566, + "hosted": 3567, + "tonight": 3568, + "respectively": 3569, + "Today": 3570, + "shape": 3571, + "Mount": 3572, + "roles": 3573, + "designated": 3574, + "brain": 3575, + "etc": 3576, + "Korea": 3577, + "thoughts": 3578, + "Brian": 3579, + "Highway": 3580, + "doors": 3581, + "background": 3582, + "drew": 3583, + "models": 3584, + "footballer": 3585, + "tone": 3586, + "turns": 3587, + "1935": 3588, + "quiet": 3589, + "tower": 3590, + "wood": 3591, + "bus": 3592, + "write": 3593, + "software": 3594, + "weapons": 3595, + "flat": 3596, + "marked": 3597, + "1920": 3598, + "newly": 3599, + "tight": 3600, + "Eric": 3601, + "finger": 3602, + "Journal": 3603, + "FC": 3604, + "Van": 3605, + "rise": 3606, + "critical": 3607, + "Atlantic": 3608, + "granted": 3609, + "returning": 3610, + "communities": 3611, + "humans": 3612, + "quick": 3613, + "39": 3614, + "48": 3615, + "ranked": 3616, + "sight": 3617, + "pop": 3618, + "Swedish": 3619, + "Stephen": 3620, + "card": 3621, + "analysis": 3622, + "attacked": 3623, + "##wa": 3624, + "Sunday": 3625, + "identified": 3626, + "Jason": 3627, + "champion": 3628, + "situated": 3629, + "1930": 3630, + "expanded": 3631, + "tears": 3632, + "##nce": 3633, + "reaching": 3634, + "Davis": 3635, + "protection": 3636, + "Emperor": 3637, + "positions": 3638, + "nominated": 3639, + "Bridge": 3640, + "tax": 3641, + "dress": 3642, + "allows": 3643, + "avoid": 3644, + "leadership": 3645, + "killing": 3646, + "actress": 3647, + "guest": 3648, + "steel": 3649, + "knowing": 3650, + "electric": 3651, + "cells": 3652, + "disease": 3653, + "grade": 3654, + "unknown": 3655, + "##ium": 3656, + "resulted": 3657, + "Pakistan": 3658, + "confirmed": 3659, + "##ged": 3660, + "tongue": 3661, + "covers": 3662, + "##Y": 3663, + "roof": 3664, + "entirely": 3665, + "applied": 3666, + "votes": 3667, + "drink": 3668, + "interview": 3669, + "exchange": 3670, + "Township": 3671, + "reasons": 3672, + "##ised": 3673, + "page": 3674, + "calls": 3675, + "dog": 3676, + "agent": 3677, + "nose": 3678, + "teaching": 3679, + "##ds": 3680, + "##ists": 3681, + "advanced": 3682, + "wish": 3683, + "Golden": 3684, + "existing": 3685, + "vehicle": 3686, + "del": 3687, + "1919": 3688, + "develop": 3689, + "attacks": 3690, + "pressed": 3691, + "Sports": 3692, + "planning": 3693, + "resulting": 3694, + "facility": 3695, + "Sarah": 3696, + "notes": 3697, + "1933": 3698, + "Class": 3699, + "Historic": 3700, + "winter": 3701, + "##mo": 3702, + "audience": 3703, + "Community": 3704, + "household": 3705, + "Netherlands": 3706, + "creation": 3707, + "##ize": 3708, + "keeping": 3709, + "1914": 3710, + "claims": 3711, + "dry": 3712, + "guys": 3713, + "opposite": 3714, + "##ak": 3715, + "explained": 3716, + "Ontario": 3717, + "secondary": 3718, + "difference": 3719, + "Francis": 3720, + "actions": 3721, + "organizations": 3722, + "yard": 3723, + "animal": 3724, + "Up": 3725, + "Lewis": 3726, + "titles": 3727, + "Several": 3728, + "1934": 3729, + "Ryan": 3730, + "55": 3731, + "Supreme": 3732, + "rolled": 3733, + "1917": 3734, + "distribution": 3735, + "figures": 3736, + "afraid": 3737, + "rural": 3738, + "yourself": 3739, + "##rt": 3740, + "sets": 3741, + "barely": 3742, + "Instead": 3743, + "passing": 3744, + "awards": 3745, + "41": 3746, + "silence": 3747, + "authority": 3748, + "occupied": 3749, + "environment": 3750, + "windows": 3751, + "engineering": 3752, + "surprised": 3753, + "flying": 3754, + "crime": 3755, + "reports": 3756, + "Mountain": 3757, + "powers": 3758, + "driving": 3759, + "succeeded": 3760, + "reviews": 3761, + "1929": 3762, + "Head": 3763, + "missing": 3764, + "Song": 3765, + "Jesus": 3766, + "opportunity": 3767, + "inspired": 3768, + "ends": 3769, + "albums": 3770, + "conversation": 3771, + "impact": 3772, + "injury": 3773, + "surprise": 3774, + "billion": 3775, + "learning": 3776, + "heavily": 3777, + "oldest": 3778, + "union": 3779, + "creating": 3780, + "##ky": 3781, + "festival": 3782, + "literature": 3783, + "letters": 3784, + "sexual": 3785, + "##tte": 3786, + "apartment": 3787, + "Final": 3788, + "comedy": 3789, + "nation": 3790, + "orders": 3791, + "##sen": 3792, + "contemporary": 3793, + "Power": 3794, + "drawn": 3795, + "existence": 3796, + "connection": 3797, + "##ating": 3798, + "Post": 3799, + "Junior": 3800, + "remembered": 3801, + "message": 3802, + "Medal": 3803, + "castle": 3804, + "note": 3805, + "engineer": 3806, + "sounds": 3807, + "Beach": 3808, + "crossed": 3809, + "##dy": 3810, + "ear": 3811, + "scientific": 3812, + "sales": 3813, + "##ai": 3814, + "theme": 3815, + "starts": 3816, + "clearly": 3817, + "##ut": 3818, + "trouble": 3819, + "##gan": 3820, + "bag": 3821, + "##han": 3822, + "BC": 3823, + "sons": 3824, + "1928": 3825, + "silent": 3826, + "versions": 3827, + "daily": 3828, + "Studies": 3829, + "ending": 3830, + "Rose": 3831, + "guns": 3832, + "1932": 3833, + "headquarters": 3834, + "reference": 3835, + "obtained": 3836, + "Squadron": 3837, + "concert": 3838, + "none": 3839, + "du": 3840, + "Among": 3841, + "##don": 3842, + "prevent": 3843, + "Member": 3844, + "answered": 3845, + "staring": 3846, + "Between": 3847, + "##lla": 3848, + "portion": 3849, + "drug": 3850, + "liked": 3851, + "association": 3852, + "performances": 3853, + "Nations": 3854, + "formation": 3855, + "Castle": 3856, + "lose": 3857, + "learn": 3858, + "scoring": 3859, + "relatively": 3860, + "quarter": 3861, + "47": 3862, + "Premier": 3863, + "##ors": 3864, + "Sweden": 3865, + "baseball": 3866, + "attempted": 3867, + "trip": 3868, + "worth": 3869, + "perform": 3870, + "airport": 3871, + "fields": 3872, + "enter": 3873, + "honor": 3874, + "Medical": 3875, + "rear": 3876, + "commander": 3877, + "officials": 3878, + "condition": 3879, + "supply": 3880, + "materials": 3881, + "52": 3882, + "Anna": 3883, + "volume": 3884, + "threw": 3885, + "Persian": 3886, + "43": 3887, + "interested": 3888, + "Gallery": 3889, + "achieved": 3890, + "visited": 3891, + "laws": 3892, + "relief": 3893, + "Area": 3894, + "Matt": 3895, + "singles": 3896, + "Lieutenant": 3897, + "Country": 3898, + "fans": 3899, + "Cambridge": 3900, + "sky": 3901, + "Miller": 3902, + "effective": 3903, + "tradition": 3904, + "Port": 3905, + "##ana": 3906, + "minister": 3907, + "extra": 3908, + "entitled": 3909, + "System": 3910, + "sites": 3911, + "authorities": 3912, + "acres": 3913, + "committee": 3914, + "racing": 3915, + "1931": 3916, + "desk": 3917, + "trains": 3918, + "ass": 3919, + "weren": 3920, + "Family": 3921, + "farm": 3922, + "##ance": 3923, + "industrial": 3924, + "##head": 3925, + "iron": 3926, + "49": 3927, + "abandoned": 3928, + "Out": 3929, + "Holy": 3930, + "chairman": 3931, + "waited": 3932, + "frequently": 3933, + "display": 3934, + "Light": 3935, + "transport": 3936, + "starring": 3937, + "Patrick": 3938, + "Engineering": 3939, + "eat": 3940, + "FM": 3941, + "judge": 3942, + "reaction": 3943, + "centuries": 3944, + "price": 3945, + "##tive": 3946, + "Korean": 3947, + "defense": 3948, + "Get": 3949, + "arrested": 3950, + "1927": 3951, + "send": 3952, + "urban": 3953, + "##ss": 3954, + "pilot": 3955, + "Okay": 3956, + "Media": 3957, + "reality": 3958, + "arts": 3959, + "soul": 3960, + "thirty": 3961, + "##be": 3962, + "catch": 3963, + "generation": 3964, + "##nes": 3965, + "apart": 3966, + "Anne": 3967, + "drop": 3968, + "See": 3969, + "##ving": 3970, + "sixth": 3971, + "trained": 3972, + "Management": 3973, + "magic": 3974, + "cm": 3975, + "height": 3976, + "Fox": 3977, + "Ian": 3978, + "resources": 3979, + "vampire": 3980, + "principal": 3981, + "Was": 3982, + "haven": 3983, + "##au": 3984, + "Walter": 3985, + "Albert": 3986, + "rich": 3987, + "1922": 3988, + "causing": 3989, + "entry": 3990, + "##ell": 3991, + "shortly": 3992, + "46": 3993, + "worry": 3994, + "doctor": 3995, + "composer": 3996, + "rank": 3997, + "Network": 3998, + "bright": 3999, + "showing": 4000, + "regions": 4001, + "1924": 4002, + "wave": 4003, + "carrying": 4004, + "kissed": 4005, + "finding": 4006, + "missed": 4007, + "Earl": 4008, + "lying": 4009, + "target": 4010, + "vehicles": 4011, + "Military": 4012, + "controlled": 4013, + "dinner": 4014, + "##board": 4015, + "briefly": 4016, + "lyrics": 4017, + "motion": 4018, + "duty": 4019, + "strange": 4020, + "attempts": 4021, + "invited": 4022, + "kg": 4023, + "villages": 4024, + "5th": 4025, + "Land": 4026, + "##mer": 4027, + "Christ": 4028, + "prepared": 4029, + "twelve": 4030, + "check": 4031, + "thousand": 4032, + "earth": 4033, + "copies": 4034, + "en": 4035, + "transfer": 4036, + "citizens": 4037, + "Americans": 4038, + "politics": 4039, + "nor": 4040, + "theatre": 4041, + "Project": 4042, + "##bo": 4043, + "clean": 4044, + "rooms": 4045, + "laugh": 4046, + "##ran": 4047, + "application": 4048, + "contained": 4049, + "anyway": 4050, + "containing": 4051, + "Sciences": 4052, + "1925": 4053, + "rare": 4054, + "speech": 4055, + "exist": 4056, + "1950s": 4057, + "falling": 4058, + "passenger": 4059, + "##im": 4060, + "stands": 4061, + "51": 4062, + "##ol": 4063, + "##ow": 4064, + "phase": 4065, + "governor": 4066, + "kids": 4067, + "details": 4068, + "methods": 4069, + "Vice": 4070, + "employed": 4071, + "performing": 4072, + "counter": 4073, + "Jane": 4074, + "heads": 4075, + "Channel": 4076, + "wine": 4077, + "opposition": 4078, + "aged": 4079, + "1912": 4080, + "Every": 4081, + "1926": 4082, + "highway": 4083, + "##ura": 4084, + "1921": 4085, + "aired": 4086, + "978": 4087, + "permanent": 4088, + "Forest": 4089, + "finds": 4090, + "joint": 4091, + "approved": 4092, + "##pur": 4093, + "brief": 4094, + "doubt": 4095, + "acts": 4096, + "brand": 4097, + "wild": 4098, + "closely": 4099, + "Ford": 4100, + "Kevin": 4101, + "chose": 4102, + "shall": 4103, + "port": 4104, + "sweet": 4105, + "fun": 4106, + "asking": 4107, + "Be": 4108, + "##bury": 4109, + "sought": 4110, + "Dave": 4111, + "Mexican": 4112, + "mom": 4113, + "Right": 4114, + "Howard": 4115, + "Moscow": 4116, + "Charlie": 4117, + "Stone": 4118, + "##mann": 4119, + "admitted": 4120, + "##ver": 4121, + "wooden": 4122, + "1923": 4123, + "Officer": 4124, + "relations": 4125, + "Hot": 4126, + "combat": 4127, + "publication": 4128, + "chain": 4129, + "shop": 4130, + "inhabitants": 4131, + "proved": 4132, + "ideas": 4133, + "address": 4134, + "1915": 4135, + "Memorial": 4136, + "explain": 4137, + "increasing": 4138, + "conflict": 4139, + "Anthony": 4140, + "Melbourne": 4141, + "narrow": 4142, + "temperature": 4143, + "slid": 4144, + "1916": 4145, + "worse": 4146, + "selling": 4147, + "documentary": 4148, + "Ali": 4149, + "Ray": 4150, + "opposed": 4151, + "vision": 4152, + "dad": 4153, + "extensive": 4154, + "Infantry": 4155, + "commissioned": 4156, + "Doctor": 4157, + "offices": 4158, + "programming": 4159, + "core": 4160, + "respect": 4161, + "storm": 4162, + "##pa": 4163, + "##ay": 4164, + "##om": 4165, + "promotion": 4166, + "der": 4167, + "struck": 4168, + "anymore": 4169, + "shit": 4170, + "Region": 4171, + "receiving": 4172, + "DVD": 4173, + "alternative": 4174, + "##ue": 4175, + "ride": 4176, + "maximum": 4177, + "1910": 4178, + "##ious": 4179, + "Third": 4180, + "Affairs": 4181, + "cancer": 4182, + "Executive": 4183, + "##op": 4184, + "dream": 4185, + "18th": 4186, + "Due": 4187, + "##ker": 4188, + "##worth": 4189, + "economy": 4190, + "IV": 4191, + "Billboard": 4192, + "identity": 4193, + "subsequent": 4194, + "statement": 4195, + "skills": 4196, + "##back": 4197, + "funding": 4198, + "##ons": 4199, + "Round": 4200, + "Foreign": 4201, + "truck": 4202, + "Please": 4203, + "lights": 4204, + "wondered": 4205, + "##ms": 4206, + "frame": 4207, + "yes": 4208, + "Still": 4209, + "districts": 4210, + "fiction": 4211, + "Colonel": 4212, + "converted": 4213, + "150": 4214, + "grown": 4215, + "accident": 4216, + "critics": 4217, + "fit": 4218, + "Information": 4219, + "architecture": 4220, + "Point": 4221, + "Five": 4222, + "armed": 4223, + "Billy": 4224, + "poet": 4225, + "functions": 4226, + "consisted": 4227, + "suit": 4228, + "Turkish": 4229, + "Band": 4230, + "object": 4231, + "desire": 4232, + "##ities": 4233, + "sounded": 4234, + "flow": 4235, + "Norwegian": 4236, + "articles": 4237, + "Marie": 4238, + "pulling": 4239, + "thin": 4240, + "singing": 4241, + "Hunter": 4242, + "Human": 4243, + "Battalion": 4244, + "Federation": 4245, + "Kim": 4246, + "origin": 4247, + "represent": 4248, + "dangerous": 4249, + "weather": 4250, + "fuel": 4251, + "ex": 4252, + "##sing": 4253, + "Last": 4254, + "bedroom": 4255, + "aid": 4256, + "knees": 4257, + "Alan": 4258, + "angry": 4259, + "assumed": 4260, + "plane": 4261, + "Something": 4262, + "founding": 4263, + "concerned": 4264, + "global": 4265, + "Fire": 4266, + "di": 4267, + "please": 4268, + "Portuguese": 4269, + "touched": 4270, + "Roger": 4271, + "nuclear": 4272, + "Register": 4273, + "Jeff": 4274, + "fixed": 4275, + "royal": 4276, + "lie": 4277, + "finals": 4278, + "NFL": 4279, + "Manchester": 4280, + "towns": 4281, + "handle": 4282, + "shaped": 4283, + "Chairman": 4284, + "Dean": 4285, + "launch": 4286, + "understanding": 4287, + "Children": 4288, + "violence": 4289, + "failure": 4290, + "sector": 4291, + "Brigade": 4292, + "wrapped": 4293, + "fired": 4294, + "sharp": 4295, + "tiny": 4296, + "developing": 4297, + "expansion": 4298, + "Free": 4299, + "institutions": 4300, + "technical": 4301, + "Nothing": 4302, + "otherwise": 4303, + "Main": 4304, + "inch": 4305, + "Saturday": 4306, + "wore": 4307, + "Senior": 4308, + "attached": 4309, + "cheek": 4310, + "representing": 4311, + "Kansas": 4312, + "##chi": 4313, + "##kin": 4314, + "actual": 4315, + "advantage": 4316, + "Dan": 4317, + "Austria": 4318, + "##dale": 4319, + "hoped": 4320, + "multi": 4321, + "squad": 4322, + "Norway": 4323, + "streets": 4324, + "1913": 4325, + "Services": 4326, + "hired": 4327, + "grow": 4328, + "pp": 4329, + "wear": 4330, + "painted": 4331, + "Minnesota": 4332, + "stuff": 4333, + "Building": 4334, + "54": 4335, + "Philippines": 4336, + "1900": 4337, + "##ties": 4338, + "educational": 4339, + "Khan": 4340, + "Magazine": 4341, + "##port": 4342, + "Cape": 4343, + "signal": 4344, + "Gordon": 4345, + "sword": 4346, + "Anderson": 4347, + "cool": 4348, + "engaged": 4349, + "Commander": 4350, + "images": 4351, + "Upon": 4352, + "tied": 4353, + "Security": 4354, + "cup": 4355, + "rail": 4356, + "Vietnam": 4357, + "successfully": 4358, + "##red": 4359, + "Muslim": 4360, + "gain": 4361, + "bringing": 4362, + "Native": 4363, + "hers": 4364, + "occurs": 4365, + "negative": 4366, + "Philip": 4367, + "Kelly": 4368, + "Colorado": 4369, + "category": 4370, + "##lan": 4371, + "600": 4372, + "Have": 4373, + "supporting": 4374, + "wet": 4375, + "56": 4376, + "stairs": 4377, + "Grace": 4378, + "observed": 4379, + "##ung": 4380, + "funds": 4381, + "restaurant": 4382, + "1911": 4383, + "Jews": 4384, + "##ments": 4385, + "##che": 4386, + "Jake": 4387, + "Back": 4388, + "53": 4389, + "asks": 4390, + "journalist": 4391, + "accept": 4392, + "bands": 4393, + "bronze": 4394, + "helping": 4395, + "##ice": 4396, + "decades": 4397, + "mayor": 4398, + "survived": 4399, + "usual": 4400, + "influenced": 4401, + "Douglas": 4402, + "Hey": 4403, + "##izing": 4404, + "surrounded": 4405, + "retirement": 4406, + "Temple": 4407, + "derived": 4408, + "Pope": 4409, + "registered": 4410, + "producing": 4411, + "##ral": 4412, + "structures": 4413, + "Johnny": 4414, + "contributed": 4415, + "finishing": 4416, + "buy": 4417, + "specifically": 4418, + "##king": 4419, + "patients": 4420, + "Jordan": 4421, + "internal": 4422, + "regarding": 4423, + "Samuel": 4424, + "Clark": 4425, + "##q": 4426, + "afternoon": 4427, + "Finally": 4428, + "scenes": 4429, + "notice": 4430, + "refers": 4431, + "quietly": 4432, + "threat": 4433, + "Water": 4434, + "Those": 4435, + "Hamilton": 4436, + "promise": 4437, + "freedom": 4438, + "Turkey": 4439, + "breaking": 4440, + "maintained": 4441, + "device": 4442, + "lap": 4443, + "ultimately": 4444, + "Champion": 4445, + "Tim": 4446, + "Bureau": 4447, + "expressed": 4448, + "investigation": 4449, + "extremely": 4450, + "capable": 4451, + "qualified": 4452, + "recognition": 4453, + "items": 4454, + "##up": 4455, + "Indiana": 4456, + "adult": 4457, + "rain": 4458, + "greatest": 4459, + "architect": 4460, + "Morgan": 4461, + "dressed": 4462, + "equal": 4463, + "Antonio": 4464, + "collected": 4465, + "drove": 4466, + "occur": 4467, + "Grant": 4468, + "graduate": 4469, + "anger": 4470, + "Sri": 4471, + "worried": 4472, + "standards": 4473, + "##ore": 4474, + "injured": 4475, + "somewhere": 4476, + "damn": 4477, + "Singapore": 4478, + "Jimmy": 4479, + "pocket": 4480, + "homes": 4481, + "stock": 4482, + "religion": 4483, + "aware": 4484, + "regarded": 4485, + "Wisconsin": 4486, + "##tra": 4487, + "passes": 4488, + "fresh": 4489, + "##ea": 4490, + "argued": 4491, + "Ltd": 4492, + "EP": 4493, + "Diego": 4494, + "importance": 4495, + "Census": 4496, + "incident": 4497, + "Egypt": 4498, + "Missouri": 4499, + "domestic": 4500, + "leads": 4501, + "ceremony": 4502, + "Early": 4503, + "camera": 4504, + "Father": 4505, + "challenge": 4506, + "Switzerland": 4507, + "lands": 4508, + "familiar": 4509, + "hearing": 4510, + "spend": 4511, + "educated": 4512, + "Tennessee": 4513, + "Thank": 4514, + "##ram": 4515, + "Thus": 4516, + "concern": 4517, + "putting": 4518, + "inches": 4519, + "map": 4520, + "classical": 4521, + "Allen": 4522, + "crazy": 4523, + "valley": 4524, + "Space": 4525, + "softly": 4526, + "##my": 4527, + "pool": 4528, + "worldwide": 4529, + "climate": 4530, + "experienced": 4531, + "neighborhood": 4532, + "scheduled": 4533, + "neither": 4534, + "fleet": 4535, + "1908": 4536, + "Girl": 4537, + "##J": 4538, + "Part": 4539, + "engines": 4540, + "locations": 4541, + "darkness": 4542, + "Revolution": 4543, + "establishment": 4544, + "lawyer": 4545, + "objects": 4546, + "apparently": 4547, + "Queensland": 4548, + "Entertainment": 4549, + "bill": 4550, + "mark": 4551, + "Television": 4552, + "##ong": 4553, + "pale": 4554, + "demand": 4555, + "Hotel": 4556, + "selection": 4557, + "##rn": 4558, + "##ino": 4559, + "Labour": 4560, + "Liberal": 4561, + "burned": 4562, + "Mom": 4563, + "merged": 4564, + "Arizona": 4565, + "request": 4566, + "##lia": 4567, + "##light": 4568, + "hole": 4569, + "employees": 4570, + "##ical": 4571, + "incorporated": 4572, + "95": 4573, + "independence": 4574, + "Walker": 4575, + "covering": 4576, + "joining": 4577, + "##ica": 4578, + "task": 4579, + "papers": 4580, + "backing": 4581, + "sell": 4582, + "biggest": 4583, + "6th": 4584, + "strike": 4585, + "establish": 4586, + "##ō": 4587, + "gently": 4588, + "59": 4589, + "Orchestra": 4590, + "Winter": 4591, + "protein": 4592, + "Juan": 4593, + "locked": 4594, + "dates": 4595, + "Boy": 4596, + "aren": 4597, + "shooting": 4598, + "Luke": 4599, + "solid": 4600, + "charged": 4601, + "Prior": 4602, + "resigned": 4603, + "interior": 4604, + "garden": 4605, + "spoken": 4606, + "improve": 4607, + "wonder": 4608, + "promote": 4609, + "hidden": 4610, + "##med": 4611, + "combination": 4612, + "Hollywood": 4613, + "Swiss": 4614, + "consider": 4615, + "##ks": 4616, + "Lincoln": 4617, + "literary": 4618, + "drawing": 4619, + "Marine": 4620, + "weapon": 4621, + "Victor": 4622, + "Trust": 4623, + "Maryland": 4624, + "properties": 4625, + "##ara": 4626, + "exhibition": 4627, + "understood": 4628, + "hung": 4629, + "Tell": 4630, + "installed": 4631, + "loud": 4632, + "fashion": 4633, + "affected": 4634, + "junior": 4635, + "landing": 4636, + "flowers": 4637, + "##he": 4638, + "Internet": 4639, + "beach": 4640, + "Heart": 4641, + "tries": 4642, + "Mayor": 4643, + "programme": 4644, + "800": 4645, + "wins": 4646, + "noise": 4647, + "##ster": 4648, + "##ory": 4649, + "58": 4650, + "contain": 4651, + "fair": 4652, + "delivered": 4653, + "##ul": 4654, + "wedding": 4655, + "Square": 4656, + "advance": 4657, + "behavior": 4658, + "Program": 4659, + "Oregon": 4660, + "##rk": 4661, + "residence": 4662, + "realize": 4663, + "certainly": 4664, + "hill": 4665, + "Houston": 4666, + "57": 4667, + "indicated": 4668, + "##water": 4669, + "wounded": 4670, + "Village": 4671, + "massive": 4672, + "Moore": 4673, + "thousands": 4674, + "personnel": 4675, + "dating": 4676, + "opera": 4677, + "poetry": 4678, + "##her": 4679, + "causes": 4680, + "feelings": 4681, + "Frederick": 4682, + "applications": 4683, + "push": 4684, + "approached": 4685, + "foundation": 4686, + "pleasure": 4687, + "sale": 4688, + "fly": 4689, + "gotten": 4690, + "northeast": 4691, + "costs": 4692, + "raise": 4693, + "paintings": 4694, + "##ney": 4695, + "views": 4696, + "horses": 4697, + "formal": 4698, + "Arab": 4699, + "hockey": 4700, + "typical": 4701, + "representative": 4702, + "rising": 4703, + "##des": 4704, + "clock": 4705, + "stadium": 4706, + "shifted": 4707, + "Dad": 4708, + "peak": 4709, + "Fame": 4710, + "vice": 4711, + "disappeared": 4712, + "users": 4713, + "Way": 4714, + "Naval": 4715, + "prize": 4716, + "hoping": 4717, + "values": 4718, + "evil": 4719, + "Bell": 4720, + "consisting": 4721, + "##ón": 4722, + "Regional": 4723, + "##ics": 4724, + "improved": 4725, + "circle": 4726, + "carefully": 4727, + "broad": 4728, + "##ini": 4729, + "Fine": 4730, + "maintain": 4731, + "operate": 4732, + "offering": 4733, + "mention": 4734, + "Death": 4735, + "stupid": 4736, + "Through": 4737, + "Princess": 4738, + "attend": 4739, + "interests": 4740, + "ruled": 4741, + "somewhat": 4742, + "wings": 4743, + "roads": 4744, + "grounds": 4745, + "##ual": 4746, + "Greece": 4747, + "Champions": 4748, + "facing": 4749, + "hide": 4750, + "voted": 4751, + "require": 4752, + "Dark": 4753, + "Matthew": 4754, + "credit": 4755, + "sighed": 4756, + "separated": 4757, + "manner": 4758, + "##ile": 4759, + "Boys": 4760, + "1905": 4761, + "committed": 4762, + "impossible": 4763, + "lip": 4764, + "candidates": 4765, + "7th": 4766, + "Bruce": 4767, + "arranged": 4768, + "Islamic": 4769, + "courses": 4770, + "criminal": 4771, + "##ened": 4772, + "smell": 4773, + "##bed": 4774, + "08": 4775, + "consecutive": 4776, + "##ening": 4777, + "proper": 4778, + "purchase": 4779, + "weak": 4780, + "Prix": 4781, + "1906": 4782, + "aside": 4783, + "introduction": 4784, + "Look": 4785, + "##ku": 4786, + "changing": 4787, + "budget": 4788, + "resistance": 4789, + "factory": 4790, + "Forces": 4791, + "agency": 4792, + "##tone": 4793, + "northwest": 4794, + "user": 4795, + "1907": 4796, + "stating": 4797, + "##one": 4798, + "sport": 4799, + "Design": 4800, + "environmental": 4801, + "cards": 4802, + "concluded": 4803, + "Carl": 4804, + "250": 4805, + "accused": 4806, + "##ology": 4807, + "Girls": 4808, + "sick": 4809, + "intelligence": 4810, + "Margaret": 4811, + "responsibility": 4812, + "Guard": 4813, + "##tus": 4814, + "17th": 4815, + "sq": 4816, + "goods": 4817, + "1909": 4818, + "hate": 4819, + "##ek": 4820, + "capture": 4821, + "stores": 4822, + "Gray": 4823, + "comic": 4824, + "Modern": 4825, + "Silver": 4826, + "Andy": 4827, + "electronic": 4828, + "wheel": 4829, + "##ied": 4830, + "Deputy": 4831, + "##bs": 4832, + "Czech": 4833, + "zone": 4834, + "choose": 4835, + "constant": 4836, + "reserve": 4837, + "##lle": 4838, + "Tokyo": 4839, + "spirit": 4840, + "sub": 4841, + "degrees": 4842, + "flew": 4843, + "pattern": 4844, + "compete": 4845, + "Dance": 4846, + "##ik": 4847, + "secretary": 4848, + "Imperial": 4849, + "99": 4850, + "reduce": 4851, + "Hungarian": 4852, + "confused": 4853, + "##rin": 4854, + "Pierre": 4855, + "describes": 4856, + "regularly": 4857, + "Rachel": 4858, + "85": 4859, + "landed": 4860, + "passengers": 4861, + "##ise": 4862, + "##sis": 4863, + "historian": 4864, + "meters": 4865, + "Youth": 4866, + "##ud": 4867, + "participate": 4868, + "##cing": 4869, + "arrival": 4870, + "tired": 4871, + "Mother": 4872, + "##gy": 4873, + "jumped": 4874, + "Kentucky": 4875, + "faces": 4876, + "feed": 4877, + "Israeli": 4878, + "Ocean": 4879, + "##Q": 4880, + "##án": 4881, + "plus": 4882, + "snow": 4883, + "techniques": 4884, + "plate": 4885, + "sections": 4886, + "falls": 4887, + "jazz": 4888, + "##ris": 4889, + "tank": 4890, + "loan": 4891, + "repeated": 4892, + "opinion": 4893, + "##res": 4894, + "unless": 4895, + "rugby": 4896, + "journal": 4897, + "Lawrence": 4898, + "moments": 4899, + "shock": 4900, + "distributed": 4901, + "##ded": 4902, + "adjacent": 4903, + "Argentina": 4904, + "crossing": 4905, + "uncle": 4906, + "##ric": 4907, + "Detroit": 4908, + "communication": 4909, + "mental": 4910, + "tomorrow": 4911, + "session": 4912, + "Emma": 4913, + "Without": 4914, + "##gen": 4915, + "Miami": 4916, + "charges": 4917, + "Administration": 4918, + "hits": 4919, + "coat": 4920, + "protected": 4921, + "Cole": 4922, + "invasion": 4923, + "priest": 4924, + "09": 4925, + "Gary": 4926, + "enjoyed": 4927, + "plot": 4928, + "measure": 4929, + "bound": 4930, + "friendly": 4931, + "throw": 4932, + "musician": 4933, + "##lon": 4934, + "##ins": 4935, + "Age": 4936, + "knife": 4937, + "damaged": 4938, + "birds": 4939, + "driven": 4940, + "lit": 4941, + "ears": 4942, + "breathing": 4943, + "Arabic": 4944, + "Jan": 4945, + "faster": 4946, + "Jonathan": 4947, + "##gate": 4948, + "Independent": 4949, + "starred": 4950, + "Harris": 4951, + "teachers": 4952, + "Alice": 4953, + "sequence": 4954, + "mph": 4955, + "file": 4956, + "translated": 4957, + "decide": 4958, + "determine": 4959, + "Review": 4960, + "documents": 4961, + "sudden": 4962, + "threatened": 4963, + "##ft": 4964, + "bear": 4965, + "distinct": 4966, + "decade": 4967, + "burning": 4968, + "##sky": 4969, + "1930s": 4970, + "replace": 4971, + "begun": 4972, + "extension": 4973, + "##time": 4974, + "1904": 4975, + "equivalent": 4976, + "accompanied": 4977, + "Christopher": 4978, + "Danish": 4979, + "##ye": 4980, + "Besides": 4981, + "##more": 4982, + "persons": 4983, + "fallen": 4984, + "Rural": 4985, + "roughly": 4986, + "saved": 4987, + "willing": 4988, + "ensure": 4989, + "Belgium": 4990, + "05": 4991, + "musicians": 4992, + "##ang": 4993, + "giant": 4994, + "Six": 4995, + "Retrieved": 4996, + "worst": 4997, + "purposes": 4998, + "##bly": 4999, + "mountains": 5000, + "seventh": 5001, + "slipped": 5002, + "brick": 5003, + "07": 5004, + "##py": 5005, + "somehow": 5006, + "Carter": 5007, + "Iraq": 5008, + "cousin": 5009, + "favor": 5010, + "islands": 5011, + "journey": 5012, + "FIFA": 5013, + "contrast": 5014, + "planet": 5015, + "vs": 5016, + "calm": 5017, + "##ings": 5018, + "concrete": 5019, + "branches": 5020, + "gray": 5021, + "profit": 5022, + "Russell": 5023, + "##ae": 5024, + "##ux": 5025, + "##ens": 5026, + "philosophy": 5027, + "businesses": 5028, + "talked": 5029, + "parking": 5030, + "##ming": 5031, + "owners": 5032, + "Place": 5033, + "##tle": 5034, + "agricultural": 5035, + "Kate": 5036, + "06": 5037, + "southeast": 5038, + "draft": 5039, + "Eddie": 5040, + "earliest": 5041, + "forget": 5042, + "Dallas": 5043, + "Commonwealth": 5044, + "edited": 5045, + "66": 5046, + "inner": 5047, + "ed": 5048, + "operates": 5049, + "16th": 5050, + "Harvard": 5051, + "assistance": 5052, + "##si": 5053, + "designs": 5054, + "Take": 5055, + "bathroom": 5056, + "indicate": 5057, + "CEO": 5058, + "Command": 5059, + "Louisiana": 5060, + "1902": 5061, + "Dublin": 5062, + "Books": 5063, + "1901": 5064, + "tropical": 5065, + "1903": 5066, + "##tors": 5067, + "Places": 5068, + "tie": 5069, + "progress": 5070, + "forming": 5071, + "solution": 5072, + "62": 5073, + "letting": 5074, + "##ery": 5075, + "studying": 5076, + "##jo": 5077, + "duties": 5078, + "Baseball": 5079, + "taste": 5080, + "Reserve": 5081, + "##ru": 5082, + "Ann": 5083, + "##gh": 5084, + "visible": 5085, + "##vi": 5086, + "notably": 5087, + "link": 5088, + "NCAA": 5089, + "southwest": 5090, + "Never": 5091, + "storage": 5092, + "mobile": 5093, + "writers": 5094, + "favorite": 5095, + "Pro": 5096, + "pages": 5097, + "truly": 5098, + "count": 5099, + "##tta": 5100, + "string": 5101, + "kid": 5102, + "98": 5103, + "Ross": 5104, + "row": 5105, + "##idae": 5106, + "Kennedy": 5107, + "##tan": 5108, + "Hockey": 5109, + "hip": 5110, + "waist": 5111, + "grandfather": 5112, + "listen": 5113, + "##ho": 5114, + "feels": 5115, + "busy": 5116, + "72": 5117, + "stream": 5118, + "obvious": 5119, + "cycle": 5120, + "shaking": 5121, + "Knight": 5122, + "##ren": 5123, + "Carlos": 5124, + "painter": 5125, + "trail": 5126, + "web": 5127, + "linked": 5128, + "04": 5129, + "Palace": 5130, + "existed": 5131, + "##ira": 5132, + "responded": 5133, + "closing": 5134, + "End": 5135, + "examples": 5136, + "Marshall": 5137, + "weekend": 5138, + "jaw": 5139, + "Denmark": 5140, + "lady": 5141, + "township": 5142, + "medium": 5143, + "chin": 5144, + "Story": 5145, + "option": 5146, + "fifteen": 5147, + "Moon": 5148, + "represents": 5149, + "makeup": 5150, + "investment": 5151, + "jump": 5152, + "childhood": 5153, + "Oklahoma": 5154, + "roll": 5155, + "normally": 5156, + "Ten": 5157, + "Operation": 5158, + "Graham": 5159, + "Seattle": 5160, + "Atlanta": 5161, + "paused": 5162, + "promised": 5163, + "rejected": 5164, + "treated": 5165, + "returns": 5166, + "flag": 5167, + "##ita": 5168, + "Hungary": 5169, + "danger": 5170, + "glad": 5171, + "movements": 5172, + "visual": 5173, + "subjects": 5174, + "credited": 5175, + "soldier": 5176, + "Norman": 5177, + "ill": 5178, + "translation": 5179, + "José": 5180, + "Quebec": 5181, + "medicine": 5182, + "warning": 5183, + "theater": 5184, + "praised": 5185, + "municipal": 5186, + "01": 5187, + "commune": 5188, + "churches": 5189, + "acid": 5190, + "folk": 5191, + "8th": 5192, + "testing": 5193, + "add": 5194, + "survive": 5195, + "Sound": 5196, + "devices": 5197, + "residential": 5198, + "severe": 5199, + "presidential": 5200, + "Mississippi": 5201, + "Austin": 5202, + "Perhaps": 5203, + "Charlotte": 5204, + "hanging": 5205, + "Montreal": 5206, + "grin": 5207, + "##ten": 5208, + "racial": 5209, + "partnership": 5210, + "shoot": 5211, + "shift": 5212, + "##nie": 5213, + "Les": 5214, + "downtown": 5215, + "Brothers": 5216, + "Garden": 5217, + "matters": 5218, + "restored": 5219, + "mirror": 5220, + "forever": 5221, + "winners": 5222, + "rapidly": 5223, + "poverty": 5224, + "##ible": 5225, + "Until": 5226, + "DC": 5227, + "faith": 5228, + "hundreds": 5229, + "Real": 5230, + "Ukraine": 5231, + "Nelson": 5232, + "balance": 5233, + "Adams": 5234, + "contest": 5235, + "relative": 5236, + "ethnic": 5237, + "Edinburgh": 5238, + "composition": 5239, + "##nts": 5240, + "emergency": 5241, + "##van": 5242, + "marine": 5243, + "reputation": 5244, + "Down": 5245, + "pack": 5246, + "12th": 5247, + "Communist": 5248, + "Mountains": 5249, + "pro": 5250, + "stages": 5251, + "measures": 5252, + "##ld": 5253, + "ABC": 5254, + "Li": 5255, + "victims": 5256, + "benefit": 5257, + "Iowa": 5258, + "Broadway": 5259, + "gathered": 5260, + "rating": 5261, + "Defense": 5262, + "classic": 5263, + "##ily": 5264, + "ceiling": 5265, + "##ions": 5266, + "snapped": 5267, + "Everything": 5268, + "constituency": 5269, + "Franklin": 5270, + "Thompson": 5271, + "Stewart": 5272, + "entering": 5273, + "Judge": 5274, + "forth": 5275, + "##sk": 5276, + "wanting": 5277, + "smiling": 5278, + "moves": 5279, + "tunnel": 5280, + "premiered": 5281, + "grass": 5282, + "unusual": 5283, + "Ukrainian": 5284, + "bird": 5285, + "Friday": 5286, + "tail": 5287, + "Portugal": 5288, + "coal": 5289, + "element": 5290, + "Fred": 5291, + "guards": 5292, + "Senator": 5293, + "collaboration": 5294, + "beauty": 5295, + "Wood": 5296, + "chemical": 5297, + "beer": 5298, + "justice": 5299, + "signs": 5300, + "##Z": 5301, + "sees": 5302, + "##zi": 5303, + "Puerto": 5304, + "##zed": 5305, + "96": 5306, + "smooth": 5307, + "Bowl": 5308, + "gift": 5309, + "limit": 5310, + "97": 5311, + "heading": 5312, + "Source": 5313, + "wake": 5314, + "requires": 5315, + "Ed": 5316, + "Constitution": 5317, + "factor": 5318, + "Lane": 5319, + "factors": 5320, + "adding": 5321, + "Note": 5322, + "cleared": 5323, + "pictures": 5324, + "pink": 5325, + "##ola": 5326, + "Kent": 5327, + "Local": 5328, + "Singh": 5329, + "moth": 5330, + "Ty": 5331, + "##ture": 5332, + "courts": 5333, + "Seven": 5334, + "temporary": 5335, + "involving": 5336, + "Vienna": 5337, + "emerged": 5338, + "fishing": 5339, + "agree": 5340, + "defensive": 5341, + "stuck": 5342, + "secure": 5343, + "Tamil": 5344, + "##ick": 5345, + "bottle": 5346, + "03": 5347, + "Player": 5348, + "instruments": 5349, + "Spring": 5350, + "patient": 5351, + "flesh": 5352, + "contributions": 5353, + "cry": 5354, + "Malaysia": 5355, + "120": 5356, + "Global": 5357, + "da": 5358, + "Alabama": 5359, + "Within": 5360, + "##work": 5361, + "debuted": 5362, + "expect": 5363, + "Cleveland": 5364, + "concerns": 5365, + "retained": 5366, + "horror": 5367, + "10th": 5368, + "spending": 5369, + "Peace": 5370, + "Transport": 5371, + "grand": 5372, + "Crown": 5373, + "instance": 5374, + "institution": 5375, + "acted": 5376, + "Hills": 5377, + "mounted": 5378, + "Campbell": 5379, + "shouldn": 5380, + "1898": 5381, + "##ably": 5382, + "chamber": 5383, + "soil": 5384, + "88": 5385, + "Ethan": 5386, + "sand": 5387, + "cheeks": 5388, + "##gi": 5389, + "marry": 5390, + "61": 5391, + "weekly": 5392, + "classification": 5393, + "DNA": 5394, + "Elementary": 5395, + "Roy": 5396, + "definitely": 5397, + "Soon": 5398, + "Rights": 5399, + "gate": 5400, + "suggests": 5401, + "aspects": 5402, + "imagine": 5403, + "golden": 5404, + "beating": 5405, + "Studios": 5406, + "Warren": 5407, + "differences": 5408, + "significantly": 5409, + "glance": 5410, + "occasionally": 5411, + "##od": 5412, + "clothing": 5413, + "Assistant": 5414, + "depth": 5415, + "sending": 5416, + "possibility": 5417, + "mode": 5418, + "prisoners": 5419, + "requirements": 5420, + "daughters": 5421, + "dated": 5422, + "Representatives": 5423, + "prove": 5424, + "guilty": 5425, + "interesting": 5426, + "smoke": 5427, + "cricket": 5428, + "93": 5429, + "##ates": 5430, + "rescue": 5431, + "Connecticut": 5432, + "underground": 5433, + "Opera": 5434, + "13th": 5435, + "reign": 5436, + "##ski": 5437, + "thanks": 5438, + "leather": 5439, + "equipped": 5440, + "routes": 5441, + "fan": 5442, + "##ans": 5443, + "script": 5444, + "Wright": 5445, + "bishop": 5446, + "Welsh": 5447, + "jobs": 5448, + "faculty": 5449, + "eleven": 5450, + "Railroad": 5451, + "appearing": 5452, + "anniversary": 5453, + "Upper": 5454, + "##down": 5455, + "anywhere": 5456, + "Rugby": 5457, + "Metropolitan": 5458, + "Meanwhile": 5459, + "Nicholas": 5460, + "champions": 5461, + "forehead": 5462, + "mining": 5463, + "drinking": 5464, + "76": 5465, + "Jerry": 5466, + "membership": 5467, + "Brazilian": 5468, + "Wild": 5469, + "Rio": 5470, + "scheme": 5471, + "Unlike": 5472, + "strongly": 5473, + "##bility": 5474, + "fill": 5475, + "##rian": 5476, + "easier": 5477, + "MP": 5478, + "Hell": 5479, + "##sha": 5480, + "Stanley": 5481, + "banks": 5482, + "Baron": 5483, + "##ique": 5484, + "Robinson": 5485, + "67": 5486, + "Gabriel": 5487, + "Austrian": 5488, + "Wayne": 5489, + "exposed": 5490, + "##wan": 5491, + "Alfred": 5492, + "1899": 5493, + "manage": 5494, + "mix": 5495, + "visitors": 5496, + "eating": 5497, + "##rate": 5498, + "Sean": 5499, + "commission": 5500, + "Cemetery": 5501, + "policies": 5502, + "Camp": 5503, + "parallel": 5504, + "traveled": 5505, + "guitarist": 5506, + "02": 5507, + "supplies": 5508, + "couples": 5509, + "poem": 5510, + "blocks": 5511, + "Rick": 5512, + "Training": 5513, + "Energy": 5514, + "achieve": 5515, + "appointment": 5516, + "Wing": 5517, + "Jamie": 5518, + "63": 5519, + "novels": 5520, + "##em": 5521, + "1890": 5522, + "songwriter": 5523, + "Base": 5524, + "Jay": 5525, + "##gar": 5526, + "naval": 5527, + "scared": 5528, + "miss": 5529, + "labor": 5530, + "technique": 5531, + "crisis": 5532, + "Additionally": 5533, + "backed": 5534, + "destroy": 5535, + "seriously": 5536, + "tools": 5537, + "tennis": 5538, + "91": 5539, + "god": 5540, + "##ington": 5541, + "continuing": 5542, + "steam": 5543, + "obviously": 5544, + "Bobby": 5545, + "adapted": 5546, + "fifty": 5547, + "enjoy": 5548, + "Jacob": 5549, + "publishing": 5550, + "column": 5551, + "##ular": 5552, + "Baltimore": 5553, + "Donald": 5554, + "Liverpool": 5555, + "92": 5556, + "drugs": 5557, + "movies": 5558, + "##ock": 5559, + "Heritage": 5560, + "##je": 5561, + "##istic": 5562, + "vocal": 5563, + "strategy": 5564, + "gene": 5565, + "advice": 5566, + "##bi": 5567, + "Ottoman": 5568, + "riding": 5569, + "##side": 5570, + "Agency": 5571, + "Indonesia": 5572, + "11th": 5573, + "laughing": 5574, + "sleeping": 5575, + "und": 5576, + "muttered": 5577, + "listening": 5578, + "deck": 5579, + "tip": 5580, + "77": 5581, + "ownership": 5582, + "grey": 5583, + "Claire": 5584, + "deeply": 5585, + "provincial": 5586, + "popularity": 5587, + "Cooper": 5588, + "##á": 5589, + "Emily": 5590, + "##sed": 5591, + "designer": 5592, + "Murray": 5593, + "describe": 5594, + "Danny": 5595, + "Around": 5596, + "Parker": 5597, + "##dae": 5598, + "68": 5599, + "rates": 5600, + "suffering": 5601, + "considerable": 5602, + "78": 5603, + "nervous": 5604, + "powered": 5605, + "tons": 5606, + "circumstances": 5607, + "wished": 5608, + "belonged": 5609, + "Pittsburgh": 5610, + "flows": 5611, + "9th": 5612, + "##use": 5613, + "belt": 5614, + "81": 5615, + "useful": 5616, + "15th": 5617, + "context": 5618, + "List": 5619, + "Dead": 5620, + "Iron": 5621, + "seek": 5622, + "Season": 5623, + "worn": 5624, + "frequency": 5625, + "legislation": 5626, + "replacement": 5627, + "memories": 5628, + "Tournament": 5629, + "Again": 5630, + "Barry": 5631, + "organisation": 5632, + "copy": 5633, + "Gulf": 5634, + "waters": 5635, + "meets": 5636, + "struggle": 5637, + "Oliver": 5638, + "1895": 5639, + "Susan": 5640, + "protest": 5641, + "kick": 5642, + "Alliance": 5643, + "components": 5644, + "1896": 5645, + "Tower": 5646, + "Windows": 5647, + "demanded": 5648, + "regiment": 5649, + "sentence": 5650, + "Woman": 5651, + "Logan": 5652, + "Referee": 5653, + "hosts": 5654, + "debate": 5655, + "knee": 5656, + "Blood": 5657, + "##oo": 5658, + "universities": 5659, + "practices": 5660, + "Ward": 5661, + "ranking": 5662, + "correct": 5663, + "happening": 5664, + "Vincent": 5665, + "attracted": 5666, + "classified": 5667, + "##stic": 5668, + "processes": 5669, + "immediate": 5670, + "waste": 5671, + "increasingly": 5672, + "Helen": 5673, + "##po": 5674, + "Lucas": 5675, + "Phil": 5676, + "organ": 5677, + "1897": 5678, + "tea": 5679, + "suicide": 5680, + "actors": 5681, + "lb": 5682, + "crash": 5683, + "approval": 5684, + "waves": 5685, + "##ered": 5686, + "hated": 5687, + "grip": 5688, + "700": 5689, + "amongst": 5690, + "69": 5691, + "74": 5692, + "hunting": 5693, + "dying": 5694, + "lasted": 5695, + "illegal": 5696, + "##rum": 5697, + "stare": 5698, + "defeating": 5699, + "##gs": 5700, + "shrugged": 5701, + "°C": 5702, + "Jon": 5703, + "Count": 5704, + "Orleans": 5705, + "94": 5706, + "affairs": 5707, + "formally": 5708, + "##and": 5709, + "##ves": 5710, + "criticized": 5711, + "Disney": 5712, + "Vol": 5713, + "successor": 5714, + "tests": 5715, + "scholars": 5716, + "palace": 5717, + "Would": 5718, + "celebrated": 5719, + "rounds": 5720, + "grant": 5721, + "Schools": 5722, + "Such": 5723, + "commanded": 5724, + "demon": 5725, + "Romania": 5726, + "##all": 5727, + "Karl": 5728, + "71": 5729, + "##yn": 5730, + "84": 5731, + "Daily": 5732, + "totally": 5733, + "Medicine": 5734, + "fruit": 5735, + "Die": 5736, + "upset": 5737, + "Lower": 5738, + "Conservative": 5739, + "14th": 5740, + "Mitchell": 5741, + "escaped": 5742, + "shoes": 5743, + "Morris": 5744, + "##tz": 5745, + "queen": 5746, + "harder": 5747, + "prime": 5748, + "Thanks": 5749, + "indeed": 5750, + "Sky": 5751, + "authors": 5752, + "rocks": 5753, + "definition": 5754, + "Nazi": 5755, + "accounts": 5756, + "printed": 5757, + "experiences": 5758, + "##ters": 5759, + "divisions": 5760, + "Cathedral": 5761, + "denied": 5762, + "depending": 5763, + "Express": 5764, + "##let": 5765, + "73": 5766, + "appeal": 5767, + "loose": 5768, + "colors": 5769, + "filed": 5770, + "##isation": 5771, + "gender": 5772, + "##ew": 5773, + "throne": 5774, + "forests": 5775, + "Finland": 5776, + "domain": 5777, + "boats": 5778, + "Baker": 5779, + "squadron": 5780, + "shore": 5781, + "remove": 5782, + "##ification": 5783, + "careful": 5784, + "wound": 5785, + "railroad": 5786, + "82": 5787, + "seeking": 5788, + "agents": 5789, + "##ved": 5790, + "Blues": 5791, + "##off": 5792, + "customers": 5793, + "ignored": 5794, + "net": 5795, + "##ction": 5796, + "hiding": 5797, + "Originally": 5798, + "declined": 5799, + "##ess": 5800, + "franchise": 5801, + "eliminated": 5802, + "NBA": 5803, + "merely": 5804, + "pure": 5805, + "appropriate": 5806, + "visiting": 5807, + "forty": 5808, + "markets": 5809, + "offensive": 5810, + "coverage": 5811, + "cave": 5812, + "##nia": 5813, + "spell": 5814, + "##lar": 5815, + "Benjamin": 5816, + "##ire": 5817, + "Convention": 5818, + "filmed": 5819, + "Trade": 5820, + "##sy": 5821, + "##ct": 5822, + "Having": 5823, + "palm": 5824, + "1889": 5825, + "Evans": 5826, + "intense": 5827, + "plastic": 5828, + "Julia": 5829, + "document": 5830, + "jeans": 5831, + "vessel": 5832, + "SR": 5833, + "##fully": 5834, + "proposal": 5835, + "Birmingham": 5836, + "le": 5837, + "##ative": 5838, + "assembly": 5839, + "89": 5840, + "fund": 5841, + "lock": 5842, + "1893": 5843, + "AD": 5844, + "meetings": 5845, + "occupation": 5846, + "modified": 5847, + "Years": 5848, + "odd": 5849, + "aimed": 5850, + "reform": 5851, + "Mission": 5852, + "Works": 5853, + "shake": 5854, + "cat": 5855, + "exception": 5856, + "convinced": 5857, + "executed": 5858, + "pushing": 5859, + "dollars": 5860, + "replacing": 5861, + "soccer": 5862, + "manufacturing": 5863, + "##ros": 5864, + "expensive": 5865, + "kicked": 5866, + "minimum": 5867, + "Josh": 5868, + "coastal": 5869, + "Chase": 5870, + "ha": 5871, + "Thailand": 5872, + "publications": 5873, + "deputy": 5874, + "Sometimes": 5875, + "Angel": 5876, + "effectively": 5877, + "##illa": 5878, + "criticism": 5879, + "conduct": 5880, + "Serbian": 5881, + "landscape": 5882, + "NY": 5883, + "absence": 5884, + "passage": 5885, + "##ula": 5886, + "Blake": 5887, + "Indians": 5888, + "1892": 5889, + "admit": 5890, + "Trophy": 5891, + "##ball": 5892, + "Next": 5893, + "##rated": 5894, + "##ians": 5895, + "charts": 5896, + "kW": 5897, + "orchestra": 5898, + "79": 5899, + "heritage": 5900, + "1894": 5901, + "rough": 5902, + "exists": 5903, + "boundary": 5904, + "Bible": 5905, + "Legislative": 5906, + "moon": 5907, + "medieval": 5908, + "##over": 5909, + "cutting": 5910, + "print": 5911, + "##ett": 5912, + "birthday": 5913, + "##hood": 5914, + "destruction": 5915, + "Julian": 5916, + "injuries": 5917, + "influential": 5918, + "sisters": 5919, + "raising": 5920, + "statue": 5921, + "colour": 5922, + "dancing": 5923, + "characteristics": 5924, + "orange": 5925, + "##ok": 5926, + "##aries": 5927, + "Ken": 5928, + "colonial": 5929, + "twin": 5930, + "Larry": 5931, + "surviving": 5932, + "##shi": 5933, + "Barbara": 5934, + "personality": 5935, + "entertainment": 5936, + "assault": 5937, + "##ering": 5938, + "talent": 5939, + "happens": 5940, + "license": 5941, + "86": 5942, + "couch": 5943, + "Century": 5944, + "soundtrack": 5945, + "shower": 5946, + "swimming": 5947, + "cash": 5948, + "Staff": 5949, + "bent": 5950, + "1885": 5951, + "bay": 5952, + "lunch": 5953, + "##lus": 5954, + "dozen": 5955, + "vessels": 5956, + "CBS": 5957, + "greatly": 5958, + "critic": 5959, + "Test": 5960, + "symbol": 5961, + "panel": 5962, + "shell": 5963, + "output": 5964, + "reaches": 5965, + "87": 5966, + "Front": 5967, + "motor": 5968, + "ocean": 5969, + "##era": 5970, + "##ala": 5971, + "maintenance": 5972, + "violent": 5973, + "scent": 5974, + "Limited": 5975, + "Las": 5976, + "Hope": 5977, + "Theater": 5978, + "Which": 5979, + "survey": 5980, + "Robin": 5981, + "recordings": 5982, + "compilation": 5983, + "##ward": 5984, + "bomb": 5985, + "insurance": 5986, + "Authority": 5987, + "sponsored": 5988, + "satellite": 5989, + "Jazz": 5990, + "refer": 5991, + "stronger": 5992, + "blow": 5993, + "whilst": 5994, + "Wrestling": 5995, + "suggest": 5996, + "##rie": 5997, + "climbed": 5998, + "##els": 5999, + "voices": 6000, + "shopping": 6001, + "1891": 6002, + "Neil": 6003, + "discovery": 6004, + "##vo": 6005, + "##ations": 6006, + "burst": 6007, + "Baby": 6008, + "peaked": 6009, + "Brooklyn": 6010, + "knocked": 6011, + "lift": 6012, + "##try": 6013, + "false": 6014, + "nations": 6015, + "Hugh": 6016, + "Catherine": 6017, + "preserved": 6018, + "distinguished": 6019, + "terminal": 6020, + "resolution": 6021, + "ratio": 6022, + "pants": 6023, + "cited": 6024, + "competitions": 6025, + "completion": 6026, + "DJ": 6027, + "bone": 6028, + "uniform": 6029, + "schedule": 6030, + "shouted": 6031, + "83": 6032, + "1920s": 6033, + "rarely": 6034, + "Basketball": 6035, + "Taiwan": 6036, + "artistic": 6037, + "bare": 6038, + "vampires": 6039, + "arrest": 6040, + "Utah": 6041, + "Marcus": 6042, + "assist": 6043, + "gradually": 6044, + "qualifying": 6045, + "Victorian": 6046, + "vast": 6047, + "rival": 6048, + "Warner": 6049, + "Terry": 6050, + "Economic": 6051, + "##cia": 6052, + "losses": 6053, + "boss": 6054, + "versus": 6055, + "audio": 6056, + "runner": 6057, + "apply": 6058, + "surgery": 6059, + "Play": 6060, + "twisted": 6061, + "comfortable": 6062, + "##cs": 6063, + "Everyone": 6064, + "guests": 6065, + "##lt": 6066, + "Harrison": 6067, + "UEFA": 6068, + "lowered": 6069, + "occasions": 6070, + "##lly": 6071, + "##cher": 6072, + "chapter": 6073, + "youngest": 6074, + "eighth": 6075, + "Culture": 6076, + "##room": 6077, + "##stone": 6078, + "1888": 6079, + "Songs": 6080, + "Seth": 6081, + "Digital": 6082, + "involvement": 6083, + "expedition": 6084, + "relationships": 6085, + "signing": 6086, + "1000": 6087, + "fault": 6088, + "annually": 6089, + "circuit": 6090, + "afterwards": 6091, + "meat": 6092, + "creature": 6093, + "##ou": 6094, + "cable": 6095, + "Bush": 6096, + "##net": 6097, + "Hispanic": 6098, + "rapid": 6099, + "gonna": 6100, + "figured": 6101, + "extent": 6102, + "considering": 6103, + "cried": 6104, + "##tin": 6105, + "sigh": 6106, + "dynasty": 6107, + "##ration": 6108, + "cabinet": 6109, + "Richmond": 6110, + "stable": 6111, + "##zo": 6112, + "1864": 6113, + "Admiral": 6114, + "Unit": 6115, + "occasion": 6116, + "shares": 6117, + "badly": 6118, + "longest": 6119, + "##ify": 6120, + "Connor": 6121, + "extreme": 6122, + "wondering": 6123, + "girlfriend": 6124, + "Studio": 6125, + "##tions": 6126, + "1865": 6127, + "tribe": 6128, + "exact": 6129, + "muscles": 6130, + "hat": 6131, + "Luis": 6132, + "Orthodox": 6133, + "decisions": 6134, + "amateur": 6135, + "description": 6136, + "##lis": 6137, + "hips": 6138, + "kingdom": 6139, + "##ute": 6140, + "Portland": 6141, + "whereas": 6142, + "Bachelor": 6143, + "outer": 6144, + "discussion": 6145, + "partly": 6146, + "Arkansas": 6147, + "1880": 6148, + "dreams": 6149, + "perfectly": 6150, + "Lloyd": 6151, + "##bridge": 6152, + "asleep": 6153, + "##tti": 6154, + "Greg": 6155, + "permission": 6156, + "trading": 6157, + "pitch": 6158, + "mill": 6159, + "Stage": 6160, + "liquid": 6161, + "Keith": 6162, + "##tal": 6163, + "wolf": 6164, + "processing": 6165, + "stick": 6166, + "Jerusalem": 6167, + "profile": 6168, + "rushed": 6169, + "spiritual": 6170, + "argument": 6171, + "Ice": 6172, + "Guy": 6173, + "till": 6174, + "Delhi": 6175, + "roots": 6176, + "Section": 6177, + "missions": 6178, + "Glasgow": 6179, + "penalty": 6180, + "NBC": 6181, + "encouraged": 6182, + "identify": 6183, + "keyboards": 6184, + "##zing": 6185, + "##ston": 6186, + "disc": 6187, + "plain": 6188, + "informed": 6189, + "Bernard": 6190, + "thinks": 6191, + "fled": 6192, + "Justin": 6193, + "##day": 6194, + "newspapers": 6195, + "##wick": 6196, + "Ralph": 6197, + "##zer": 6198, + "unlike": 6199, + "Stars": 6200, + "artillery": 6201, + "##ified": 6202, + "recovered": 6203, + "arrangement": 6204, + "searching": 6205, + "##pers": 6206, + "##tory": 6207, + "##rus": 6208, + "deaths": 6209, + "Egyptian": 6210, + "diameter": 6211, + "##í": 6212, + "marketing": 6213, + "corporate": 6214, + "teach": 6215, + "marks": 6216, + "Turner": 6217, + "staying": 6218, + "hallway": 6219, + "Sebastian": 6220, + "chapel": 6221, + "naked": 6222, + "mistake": 6223, + "possession": 6224, + "1887": 6225, + "dominated": 6226, + "jacket": 6227, + "creative": 6228, + "Fellow": 6229, + "Falls": 6230, + "Defence": 6231, + "suspended": 6232, + "employment": 6233, + "##rry": 6234, + "Hebrew": 6235, + "Hudson": 6236, + "Week": 6237, + "Wars": 6238, + "recognize": 6239, + "Natural": 6240, + "controversial": 6241, + "Tommy": 6242, + "thank": 6243, + "Athletic": 6244, + "benefits": 6245, + "decline": 6246, + "intention": 6247, + "##ets": 6248, + "Lost": 6249, + "Wall": 6250, + "participation": 6251, + "elevation": 6252, + "supports": 6253, + "parliament": 6254, + "1861": 6255, + "concentration": 6256, + "Movement": 6257, + "##IS": 6258, + "competing": 6259, + "stops": 6260, + "behalf": 6261, + "##mm": 6262, + "limits": 6263, + "funded": 6264, + "discuss": 6265, + "Collins": 6266, + "departure": 6267, + "obtain": 6268, + "woods": 6269, + "latest": 6270, + "universe": 6271, + "alcohol": 6272, + "Laura": 6273, + "rush": 6274, + "blade": 6275, + "funny": 6276, + "Dennis": 6277, + "forgotten": 6278, + "Amy": 6279, + "Symphony": 6280, + "apparent": 6281, + "graduating": 6282, + "1862": 6283, + "Rob": 6284, + "Grey": 6285, + "collections": 6286, + "Mason": 6287, + "emotions": 6288, + "##ugh": 6289, + "literally": 6290, + "Any": 6291, + "counties": 6292, + "1863": 6293, + "nomination": 6294, + "fighter": 6295, + "habitat": 6296, + "respond": 6297, + "external": 6298, + "Capital": 6299, + "exit": 6300, + "Video": 6301, + "carbon": 6302, + "sharing": 6303, + "Bad": 6304, + "opportunities": 6305, + "Perry": 6306, + "photo": 6307, + "##mus": 6308, + "Orange": 6309, + "posted": 6310, + "remainder": 6311, + "transportation": 6312, + "portrayed": 6313, + "Labor": 6314, + "recommended": 6315, + "percussion": 6316, + "rated": 6317, + "Grade": 6318, + "rivers": 6319, + "partially": 6320, + "suspected": 6321, + "strip": 6322, + "adults": 6323, + "button": 6324, + "struggled": 6325, + "intersection": 6326, + "Canal": 6327, + "##ability": 6328, + "poems": 6329, + "claiming": 6330, + "Madrid": 6331, + "1886": 6332, + "Together": 6333, + "##our": 6334, + "Much": 6335, + "Vancouver": 6336, + "instrument": 6337, + "instrumental": 6338, + "1870": 6339, + "mad": 6340, + "angle": 6341, + "Control": 6342, + "Phoenix": 6343, + "Leo": 6344, + "Communications": 6345, + "mail": 6346, + "##ette": 6347, + "##ev": 6348, + "preferred": 6349, + "adaptation": 6350, + "alleged": 6351, + "discussed": 6352, + "deeper": 6353, + "##ane": 6354, + "Yet": 6355, + "Monday": 6356, + "volumes": 6357, + "thrown": 6358, + "Zane": 6359, + "##logy": 6360, + "displayed": 6361, + "rolling": 6362, + "dogs": 6363, + "Along": 6364, + "Todd": 6365, + "##ivity": 6366, + "withdrew": 6367, + "representation": 6368, + "belief": 6369, + "##sia": 6370, + "crown": 6371, + "Late": 6372, + "Short": 6373, + "hardly": 6374, + "grinned": 6375, + "romantic": 6376, + "Pete": 6377, + "##ken": 6378, + "networks": 6379, + "enemies": 6380, + "Colin": 6381, + "Eventually": 6382, + "Side": 6383, + "donated": 6384, + "##su": 6385, + "steady": 6386, + "grab": 6387, + "guide": 6388, + "Finnish": 6389, + "Milan": 6390, + "pregnant": 6391, + "controversy": 6392, + "reminded": 6393, + "1884": 6394, + "Stuart": 6395, + "##bach": 6396, + "##ade": 6397, + "Race": 6398, + "Belgian": 6399, + "LP": 6400, + "Production": 6401, + "Zone": 6402, + "lieutenant": 6403, + "infantry": 6404, + "Child": 6405, + "confusion": 6406, + "sang": 6407, + "resident": 6408, + "##ez": 6409, + "victim": 6410, + "1881": 6411, + "channels": 6412, + "Ron": 6413, + "businessman": 6414, + "##gle": 6415, + "Dick": 6416, + "colony": 6417, + "pace": 6418, + "producers": 6419, + "##ese": 6420, + "agencies": 6421, + "Craig": 6422, + "Lucy": 6423, + "Very": 6424, + "centers": 6425, + "Yorkshire": 6426, + "photography": 6427, + "##ched": 6428, + "Album": 6429, + "championships": 6430, + "Metro": 6431, + "substantial": 6432, + "Standard": 6433, + "terrible": 6434, + "directors": 6435, + "contribution": 6436, + "advertising": 6437, + "emotional": 6438, + "##its": 6439, + "layer": 6440, + "segment": 6441, + "sir": 6442, + "folded": 6443, + "Roberts": 6444, + "ceased": 6445, + "Hampshire": 6446, + "##ray": 6447, + "detailed": 6448, + "partners": 6449, + "m²": 6450, + "##pt": 6451, + "Beth": 6452, + "genre": 6453, + "commented": 6454, + "generated": 6455, + "remote": 6456, + "aim": 6457, + "Hans": 6458, + "credits": 6459, + "concerts": 6460, + "periods": 6461, + "breakfast": 6462, + "gay": 6463, + "shadow": 6464, + "defence": 6465, + "Too": 6466, + "Had": 6467, + "transition": 6468, + "Afghanistan": 6469, + "##book": 6470, + "eggs": 6471, + "defend": 6472, + "##lli": 6473, + "writes": 6474, + "Systems": 6475, + "bones": 6476, + "mess": 6477, + "seed": 6478, + "scientists": 6479, + "Shortly": 6480, + "Romanian": 6481, + "##zy": 6482, + "Freedom": 6483, + "muscle": 6484, + "hero": 6485, + "parent": 6486, + "agriculture": 6487, + "checked": 6488, + "Islam": 6489, + "Bristol": 6490, + "Freyja": 6491, + "Arena": 6492, + "cabin": 6493, + "Germans": 6494, + "electricity": 6495, + "ranks": 6496, + "viewed": 6497, + "medals": 6498, + "Wolf": 6499, + "associate": 6500, + "Madison": 6501, + "Sorry": 6502, + "fort": 6503, + "Chile": 6504, + "detail": 6505, + "widespread": 6506, + "attorney": 6507, + "boyfriend": 6508, + "##nan": 6509, + "Students": 6510, + "Spencer": 6511, + "##ig": 6512, + "bite": 6513, + "Maine": 6514, + "demolished": 6515, + "Lisa": 6516, + "erected": 6517, + "Someone": 6518, + "operational": 6519, + "Commissioner": 6520, + "NHL": 6521, + "Coach": 6522, + "Bar": 6523, + "forcing": 6524, + "Dream": 6525, + "Rico": 6526, + "cargo": 6527, + "Murphy": 6528, + "##fish": 6529, + "##ase": 6530, + "distant": 6531, + "##master": 6532, + "##ora": 6533, + "Organization": 6534, + "doorway": 6535, + "Steven": 6536, + "traded": 6537, + "electrical": 6538, + "frequent": 6539, + "##wn": 6540, + "Branch": 6541, + "Sure": 6542, + "1882": 6543, + "placing": 6544, + "Manhattan": 6545, + "attending": 6546, + "attributed": 6547, + "excellent": 6548, + "pounds": 6549, + "ruling": 6550, + "principles": 6551, + "component": 6552, + "Mediterranean": 6553, + "Vegas": 6554, + "machines": 6555, + "percentage": 6556, + "infrastructure": 6557, + "throwing": 6558, + "affiliated": 6559, + "Kings": 6560, + "secured": 6561, + "Caribbean": 6562, + "Track": 6563, + "Ted": 6564, + "honour": 6565, + "opponent": 6566, + "Virgin": 6567, + "Construction": 6568, + "grave": 6569, + "produces": 6570, + "Challenge": 6571, + "stretched": 6572, + "paying": 6573, + "murmured": 6574, + "##ata": 6575, + "integrated": 6576, + "waved": 6577, + "Nathan": 6578, + "##ator": 6579, + "transmission": 6580, + "videos": 6581, + "##yan": 6582, + "##hu": 6583, + "Nova": 6584, + "descent": 6585, + "AM": 6586, + "Harold": 6587, + "conservative": 6588, + "Therefore": 6589, + "venue": 6590, + "competitive": 6591, + "##ui": 6592, + "conclusion": 6593, + "funeral": 6594, + "confidence": 6595, + "releases": 6596, + "scholar": 6597, + "##sson": 6598, + "Treaty": 6599, + "stress": 6600, + "mood": 6601, + "##sm": 6602, + "Mac": 6603, + "residing": 6604, + "Action": 6605, + "Fund": 6606, + "##ship": 6607, + "animated": 6608, + "fitted": 6609, + "##kar": 6610, + "defending": 6611, + "voting": 6612, + "tend": 6613, + "##berry": 6614, + "answers": 6615, + "believes": 6616, + "##ci": 6617, + "helps": 6618, + "Aaron": 6619, + "##tis": 6620, + "themes": 6621, + "##lay": 6622, + "populations": 6623, + "Players": 6624, + "stroke": 6625, + "Trinity": 6626, + "electoral": 6627, + "paint": 6628, + "abroad": 6629, + "charity": 6630, + "keys": 6631, + "Fair": 6632, + "##pes": 6633, + "interrupted": 6634, + "participants": 6635, + "murdered": 6636, + "Days": 6637, + "supporters": 6638, + "##ab": 6639, + "expert": 6640, + "borders": 6641, + "mate": 6642, + "##llo": 6643, + "solar": 6644, + "architectural": 6645, + "tension": 6646, + "##bling": 6647, + "Parish": 6648, + "tape": 6649, + "operator": 6650, + "Cultural": 6651, + "Clinton": 6652, + "indicates": 6653, + "publisher": 6654, + "ordinary": 6655, + "sugar": 6656, + "arrive": 6657, + "rifle": 6658, + "acoustic": 6659, + "##uring": 6660, + "assets": 6661, + "##shire": 6662, + "SS": 6663, + "sufficient": 6664, + "options": 6665, + "HMS": 6666, + "Classic": 6667, + "bars": 6668, + "rebuilt": 6669, + "governments": 6670, + "Beijing": 6671, + "reporter": 6672, + "screamed": 6673, + "Abbey": 6674, + "crying": 6675, + "mechanical": 6676, + "instantly": 6677, + "communications": 6678, + "Political": 6679, + "cemetery": 6680, + "Cameron": 6681, + "Stop": 6682, + "representatives": 6683, + "USS": 6684, + "texts": 6685, + "mathematics": 6686, + "innings": 6687, + "civilian": 6688, + "Serbia": 6689, + "##hill": 6690, + "practical": 6691, + "patterns": 6692, + "dust": 6693, + "Faculty": 6694, + "debt": 6695, + "##end": 6696, + "##cus": 6697, + "junction": 6698, + "suppose": 6699, + "experimental": 6700, + "Computer": 6701, + "Food": 6702, + "wrist": 6703, + "abuse": 6704, + "dealing": 6705, + "bigger": 6706, + "cap": 6707, + "principle": 6708, + "##pin": 6709, + "Muhammad": 6710, + "Fleet": 6711, + "Collection": 6712, + "attempting": 6713, + "dismissed": 6714, + "##burn": 6715, + "regime": 6716, + "Herbert": 6717, + "##ua": 6718, + "shadows": 6719, + "1883": 6720, + "Eve": 6721, + "Lanka": 6722, + "1878": 6723, + "Performance": 6724, + "fictional": 6725, + "##lock": 6726, + "Noah": 6727, + "Run": 6728, + "Voivodeship": 6729, + "exercise": 6730, + "broadcasting": 6731, + "##fer": 6732, + "RAF": 6733, + "Magic": 6734, + "Bangladesh": 6735, + "suitable": 6736, + "##low": 6737, + "##del": 6738, + "styles": 6739, + "toured": 6740, + "Code": 6741, + "identical": 6742, + "links": 6743, + "insisted": 6744, + "110": 6745, + "flash": 6746, + "Model": 6747, + "slave": 6748, + "Derek": 6749, + "Rev": 6750, + "fairly": 6751, + "Greater": 6752, + "sole": 6753, + "##lands": 6754, + "connecting": 6755, + "zero": 6756, + "bench": 6757, + "##ome": 6758, + "switched": 6759, + "Fall": 6760, + "Owen": 6761, + "yours": 6762, + "Electric": 6763, + "shocked": 6764, + "convention": 6765, + "##bra": 6766, + "climb": 6767, + "memorial": 6768, + "swept": 6769, + "Racing": 6770, + "decides": 6771, + "belong": 6772, + "##nk": 6773, + "parliamentary": 6774, + "##und": 6775, + "ages": 6776, + "proof": 6777, + "##dan": 6778, + "delivery": 6779, + "1860": 6780, + "##ów": 6781, + "sad": 6782, + "publicly": 6783, + "leaning": 6784, + "Archbishop": 6785, + "dirt": 6786, + "##ose": 6787, + "categories": 6788, + "1876": 6789, + "burn": 6790, + "##bing": 6791, + "requested": 6792, + "Guinea": 6793, + "Historical": 6794, + "rhythm": 6795, + "relation": 6796, + "##heim": 6797, + "ye": 6798, + "pursue": 6799, + "merchant": 6800, + "##mes": 6801, + "lists": 6802, + "continuous": 6803, + "frowned": 6804, + "colored": 6805, + "tool": 6806, + "gods": 6807, + "involves": 6808, + "Duncan": 6809, + "photographs": 6810, + "Cricket": 6811, + "slight": 6812, + "Gregory": 6813, + "atmosphere": 6814, + "wider": 6815, + "Cook": 6816, + "##tar": 6817, + "essential": 6818, + "Being": 6819, + "FA": 6820, + "emperor": 6821, + "wealthy": 6822, + "nights": 6823, + "##bar": 6824, + "licensed": 6825, + "Hawaii": 6826, + "viewers": 6827, + "Language": 6828, + "load": 6829, + "nearest": 6830, + "milk": 6831, + "kilometers": 6832, + "platforms": 6833, + "##ys": 6834, + "territories": 6835, + "Rogers": 6836, + "sheet": 6837, + "Rangers": 6838, + "contested": 6839, + "##lation": 6840, + "isolated": 6841, + "assisted": 6842, + "swallowed": 6843, + "Small": 6844, + "Contemporary": 6845, + "Technical": 6846, + "Edwards": 6847, + "express": 6848, + "Volume": 6849, + "endemic": 6850, + "##ei": 6851, + "tightly": 6852, + "Whatever": 6853, + "indigenous": 6854, + "Colombia": 6855, + "##ulation": 6856, + "hp": 6857, + "characterized": 6858, + "##ida": 6859, + "Nigeria": 6860, + "Professional": 6861, + "duo": 6862, + "Soccer": 6863, + "slaves": 6864, + "Farm": 6865, + "smart": 6866, + "Attorney": 6867, + "Attendance": 6868, + "Common": 6869, + "salt": 6870, + "##vin": 6871, + "tribes": 6872, + "nod": 6873, + "sentenced": 6874, + "bid": 6875, + "sample": 6876, + "Drive": 6877, + "switch": 6878, + "instant": 6879, + "21st": 6880, + "Cuba": 6881, + "drunk": 6882, + "Alaska": 6883, + "proud": 6884, + "awareness": 6885, + "hitting": 6886, + "sessions": 6887, + "Thai": 6888, + "locally": 6889, + "elsewhere": 6890, + "Dragon": 6891, + "gentle": 6892, + "touching": 6893, + "##lee": 6894, + "Springs": 6895, + "Universal": 6896, + "Latino": 6897, + "spin": 6898, + "1871": 6899, + "Chart": 6900, + "recalled": 6901, + "Type": 6902, + "pointing": 6903, + "##ii": 6904, + "lowest": 6905, + "##ser": 6906, + "grandmother": 6907, + "Adelaide": 6908, + "Jacques": 6909, + "spotted": 6910, + "Buffalo": 6911, + "restoration": 6912, + "Son": 6913, + "Joan": 6914, + "farmers": 6915, + "Lily": 6916, + "1879": 6917, + "lucky": 6918, + "##dal": 6919, + "luck": 6920, + "eldest": 6921, + "##rant": 6922, + "Market": 6923, + "drummer": 6924, + "deployed": 6925, + "warned": 6926, + "prince": 6927, + "sing": 6928, + "amazing": 6929, + "sailed": 6930, + "##oon": 6931, + "1875": 6932, + "Primary": 6933, + "traveling": 6934, + "Masters": 6935, + "Sara": 6936, + "cattle": 6937, + "Trail": 6938, + "gang": 6939, + "Further": 6940, + "desert": 6941, + "relocated": 6942, + "##tch": 6943, + "##ord": 6944, + "Flight": 6945, + "illness": 6946, + "Munich": 6947, + "ninth": 6948, + "repair": 6949, + "Singles": 6950, + "##lated": 6951, + "Tyler": 6952, + "tossed": 6953, + "boots": 6954, + "Work": 6955, + "sized": 6956, + "earning": 6957, + "shoved": 6958, + "magazines": 6959, + "housed": 6960, + "dam": 6961, + "researchers": 6962, + "Former": 6963, + "spun": 6964, + "premiere": 6965, + "spaces": 6966, + "organised": 6967, + "wealth": 6968, + "crimes": 6969, + "devoted": 6970, + "stones": 6971, + "Urban": 6972, + "automatic": 6973, + "hop": 6974, + "affect": 6975, + "outstanding": 6976, + "tanks": 6977, + "mechanism": 6978, + "Muslims": 6979, + "Ms": 6980, + "shots": 6981, + "argue": 6982, + "Jeremy": 6983, + "connections": 6984, + "Armenian": 6985, + "increases": 6986, + "rubbed": 6987, + "1867": 6988, + "retail": 6989, + "gear": 6990, + "Pan": 6991, + "bonus": 6992, + "jurisdiction": 6993, + "weird": 6994, + "concerning": 6995, + "whisper": 6996, + "##gal": 6997, + "Microsoft": 6998, + "tenure": 6999, + "hills": 7000, + "www": 7001, + "Gmina": 7002, + "porch": 7003, + "files": 7004, + "reportedly": 7005, + "venture": 7006, + "Storm": 7007, + "##ence": 7008, + "Nature": 7009, + "killer": 7010, + "panic": 7011, + "fate": 7012, + "Secret": 7013, + "Wang": 7014, + "scream": 7015, + "drivers": 7016, + "belongs": 7017, + "Chamber": 7018, + "clan": 7019, + "monument": 7020, + "mixing": 7021, + "Peru": 7022, + "bet": 7023, + "Riley": 7024, + "Friends": 7025, + "Isaac": 7026, + "submarine": 7027, + "1877": 7028, + "130": 7029, + "judges": 7030, + "harm": 7031, + "ranging": 7032, + "affair": 7033, + "prepare": 7034, + "pupils": 7035, + "householder": 7036, + "Policy": 7037, + "decorated": 7038, + "Nation": 7039, + "slammed": 7040, + "activist": 7041, + "implemented": 7042, + "Room": 7043, + "qualify": 7044, + "Publishing": 7045, + "establishing": 7046, + "Baptist": 7047, + "touring": 7048, + "subsidiary": 7049, + "##nal": 7050, + "legend": 7051, + "1872": 7052, + "laughter": 7053, + "PC": 7054, + "Athens": 7055, + "settlers": 7056, + "ties": 7057, + "dual": 7058, + "dear": 7059, + "Draft": 7060, + "strategic": 7061, + "Ivan": 7062, + "reveal": 7063, + "closest": 7064, + "dominant": 7065, + "Ah": 7066, + "##ult": 7067, + "Denver": 7068, + "bond": 7069, + "boundaries": 7070, + "drafted": 7071, + "tables": 7072, + "##TV": 7073, + "eyed": 7074, + "Edition": 7075, + "##ena": 7076, + "1868": 7077, + "belonging": 7078, + "1874": 7079, + "Industrial": 7080, + "cream": 7081, + "Ridge": 7082, + "Hindu": 7083, + "scholarship": 7084, + "Ma": 7085, + "opens": 7086, + "initiated": 7087, + "##ith": 7088, + "yelled": 7089, + "compound": 7090, + "random": 7091, + "Throughout": 7092, + "grades": 7093, + "physics": 7094, + "sank": 7095, + "grows": 7096, + "exclusively": 7097, + "settle": 7098, + "Saints": 7099, + "brings": 7100, + "Amsterdam": 7101, + "Make": 7102, + "Hart": 7103, + "walks": 7104, + "battery": 7105, + "violin": 7106, + "##born": 7107, + "explanation": 7108, + "##ware": 7109, + "1873": 7110, + "##har": 7111, + "provinces": 7112, + "thrust": 7113, + "exclusive": 7114, + "sculpture": 7115, + "shops": 7116, + "##fire": 7117, + "VI": 7118, + "constitution": 7119, + "Barcelona": 7120, + "monster": 7121, + "Devon": 7122, + "Jefferson": 7123, + "Sullivan": 7124, + "bow": 7125, + "##din": 7126, + "desperate": 7127, + "##ć": 7128, + "Julie": 7129, + "##mon": 7130, + "##ising": 7131, + "terminus": 7132, + "Jesse": 7133, + "abilities": 7134, + "golf": 7135, + "##ple": 7136, + "##via": 7137, + "##away": 7138, + "Raymond": 7139, + "measured": 7140, + "jury": 7141, + "firing": 7142, + "revenue": 7143, + "suburb": 7144, + "Bulgarian": 7145, + "1866": 7146, + "##cha": 7147, + "timber": 7148, + "Things": 7149, + "##weight": 7150, + "Morning": 7151, + "spots": 7152, + "Alberta": 7153, + "Data": 7154, + "explains": 7155, + "Kyle": 7156, + "friendship": 7157, + "raw": 7158, + "tube": 7159, + "demonstrated": 7160, + "aboard": 7161, + "immigrants": 7162, + "reply": 7163, + "breathe": 7164, + "Manager": 7165, + "ease": 7166, + "##ban": 7167, + "##dia": 7168, + "Diocese": 7169, + "##vy": 7170, + "##ía": 7171, + "pit": 7172, + "ongoing": 7173, + "##lie": 7174, + "Gilbert": 7175, + "Costa": 7176, + "1940s": 7177, + "Report": 7178, + "voters": 7179, + "cloud": 7180, + "traditions": 7181, + "##MS": 7182, + "gallery": 7183, + "Jennifer": 7184, + "swung": 7185, + "Broadcasting": 7186, + "Does": 7187, + "diverse": 7188, + "reveals": 7189, + "arriving": 7190, + "initiative": 7191, + "##ani": 7192, + "Give": 7193, + "Allied": 7194, + "Pat": 7195, + "Outstanding": 7196, + "monastery": 7197, + "blind": 7198, + "Currently": 7199, + "##war": 7200, + "bloody": 7201, + "stopping": 7202, + "focuses": 7203, + "managing": 7204, + "Florence": 7205, + "Harvey": 7206, + "creatures": 7207, + "900": 7208, + "breast": 7209, + "internet": 7210, + "Artillery": 7211, + "purple": 7212, + "##mate": 7213, + "alliance": 7214, + "excited": 7215, + "fee": 7216, + "Brisbane": 7217, + "lifetime": 7218, + "Private": 7219, + "##aw": 7220, + "##nis": 7221, + "##gue": 7222, + "##ika": 7223, + "phrase": 7224, + "regulations": 7225, + "reflected": 7226, + "manufactured": 7227, + "conventional": 7228, + "pleased": 7229, + "client": 7230, + "##ix": 7231, + "##ncy": 7232, + "Pedro": 7233, + "reduction": 7234, + "##con": 7235, + "welcome": 7236, + "jail": 7237, + "comfort": 7238, + "Iranian": 7239, + "Norfolk": 7240, + "Dakota": 7241, + "##tein": 7242, + "evolution": 7243, + "everywhere": 7244, + "Initially": 7245, + "sensitive": 7246, + "Olivia": 7247, + "Oscar": 7248, + "implementation": 7249, + "sits": 7250, + "stolen": 7251, + "demands": 7252, + "slide": 7253, + "grandson": 7254, + "##ich": 7255, + "merger": 7256, + "##mic": 7257, + "Spirit": 7258, + "##°": 7259, + "ticket": 7260, + "root": 7261, + "difficulty": 7262, + "Nevada": 7263, + "##als": 7264, + "lined": 7265, + "Dylan": 7266, + "Original": 7267, + "Call": 7268, + "biological": 7269, + "EU": 7270, + "dramatic": 7271, + "##hn": 7272, + "Operations": 7273, + "treaty": 7274, + "gap": 7275, + "##list": 7276, + "Am": 7277, + "Romanized": 7278, + "moral": 7279, + "Butler": 7280, + "perspective": 7281, + "Furthermore": 7282, + "Manuel": 7283, + "absolutely": 7284, + "unsuccessful": 7285, + "disaster": 7286, + "dispute": 7287, + "preparation": 7288, + "tested": 7289, + "discover": 7290, + "##ach": 7291, + "shield": 7292, + "squeezed": 7293, + "brushed": 7294, + "battalion": 7295, + "Arnold": 7296, + "##ras": 7297, + "superior": 7298, + "treat": 7299, + "clinical": 7300, + "##so": 7301, + "Apple": 7302, + "Syria": 7303, + "Cincinnati": 7304, + "package": 7305, + "flights": 7306, + "editions": 7307, + "Leader": 7308, + "minority": 7309, + "wonderful": 7310, + "hang": 7311, + "Pop": 7312, + "Philippine": 7313, + "telephone": 7314, + "bell": 7315, + "honorary": 7316, + "##mar": 7317, + "balls": 7318, + "Democrat": 7319, + "dirty": 7320, + "thereafter": 7321, + "collapsed": 7322, + "Inside": 7323, + "slip": 7324, + "wrestling": 7325, + "##ín": 7326, + "listened": 7327, + "regard": 7328, + "bowl": 7329, + "None": 7330, + "Sport": 7331, + "completing": 7332, + "trapped": 7333, + "##view": 7334, + "copper": 7335, + "Wallace": 7336, + "Honor": 7337, + "blame": 7338, + "Peninsula": 7339, + "##ert": 7340, + "##oy": 7341, + "Anglo": 7342, + "bearing": 7343, + "simultaneously": 7344, + "honest": 7345, + "##ias": 7346, + "Mix": 7347, + "Got": 7348, + "speaker": 7349, + "voiced": 7350, + "impressed": 7351, + "prices": 7352, + "error": 7353, + "1869": 7354, + "##feld": 7355, + "trials": 7356, + "Nine": 7357, + "Industry": 7358, + "substitute": 7359, + "Municipal": 7360, + "departed": 7361, + "slept": 7362, + "##ama": 7363, + "Junction": 7364, + "Socialist": 7365, + "flower": 7366, + "dropping": 7367, + "comment": 7368, + "fantasy": 7369, + "##ress": 7370, + "arrangements": 7371, + "travelled": 7372, + "furniture": 7373, + "fist": 7374, + "relieved": 7375, + "##tics": 7376, + "Leonard": 7377, + "linear": 7378, + "earn": 7379, + "expand": 7380, + "Soul": 7381, + "Plan": 7382, + "Leeds": 7383, + "Sierra": 7384, + "accessible": 7385, + "innocent": 7386, + "Winner": 7387, + "Fighter": 7388, + "Range": 7389, + "winds": 7390, + "vertical": 7391, + "Pictures": 7392, + "101": 7393, + "charter": 7394, + "cooperation": 7395, + "prisoner": 7396, + "interviews": 7397, + "recognised": 7398, + "sung": 7399, + "manufacturer": 7400, + "exposure": 7401, + "submitted": 7402, + "Mars": 7403, + "leaf": 7404, + "gauge": 7405, + "screaming": 7406, + "likes": 7407, + "eligible": 7408, + "##ac": 7409, + "gathering": 7410, + "columns": 7411, + "##dra": 7412, + "belly": 7413, + "UN": 7414, + "maps": 7415, + "messages": 7416, + "speakers": 7417, + "##ants": 7418, + "garage": 7419, + "unincorporated": 7420, + "Number": 7421, + "Watson": 7422, + "sixteen": 7423, + "lots": 7424, + "beaten": 7425, + "Could": 7426, + "Municipality": 7427, + "##ano": 7428, + "Horse": 7429, + "talks": 7430, + "Drake": 7431, + "scores": 7432, + "Venice": 7433, + "genetic": 7434, + "##mal": 7435, + "##ère": 7436, + "Cold": 7437, + "Jose": 7438, + "nurse": 7439, + "traditionally": 7440, + "##bus": 7441, + "Territory": 7442, + "Key": 7443, + "Nancy": 7444, + "##win": 7445, + "thumb": 7446, + "São": 7447, + "index": 7448, + "dependent": 7449, + "carries": 7450, + "controls": 7451, + "Comics": 7452, + "coalition": 7453, + "physician": 7454, + "referring": 7455, + "Ruth": 7456, + "Based": 7457, + "restricted": 7458, + "inherited": 7459, + "internationally": 7460, + "stretch": 7461, + "THE": 7462, + "plates": 7463, + "margin": 7464, + "Holland": 7465, + "knock": 7466, + "significance": 7467, + "valuable": 7468, + "Kenya": 7469, + "carved": 7470, + "emotion": 7471, + "conservation": 7472, + "municipalities": 7473, + "overseas": 7474, + "resumed": 7475, + "Finance": 7476, + "graduation": 7477, + "blinked": 7478, + "temperatures": 7479, + "constantly": 7480, + "productions": 7481, + "scientist": 7482, + "ghost": 7483, + "cuts": 7484, + "permitted": 7485, + "##ches": 7486, + "firmly": 7487, + "##bert": 7488, + "patrol": 7489, + "##yo": 7490, + "Croatian": 7491, + "attacking": 7492, + "1850": 7493, + "portrait": 7494, + "promoting": 7495, + "sink": 7496, + "conversion": 7497, + "##kov": 7498, + "locomotives": 7499, + "Guide": 7500, + "##val": 7501, + "nephew": 7502, + "relevant": 7503, + "Marc": 7504, + "drum": 7505, + "originated": 7506, + "Chair": 7507, + "visits": 7508, + "dragged": 7509, + "Price": 7510, + "favour": 7511, + "corridor": 7512, + "properly": 7513, + "respective": 7514, + "Caroline": 7515, + "reporting": 7516, + "inaugural": 7517, + "1848": 7518, + "industries": 7519, + "##ching": 7520, + "edges": 7521, + "Christianity": 7522, + "Maurice": 7523, + "Trent": 7524, + "Economics": 7525, + "carrier": 7526, + "Reed": 7527, + "##gon": 7528, + "tribute": 7529, + "Pradesh": 7530, + "##ale": 7531, + "extend": 7532, + "attitude": 7533, + "Yale": 7534, + "##lu": 7535, + "settlements": 7536, + "glasses": 7537, + "taxes": 7538, + "targets": 7539, + "##ids": 7540, + "quarters": 7541, + "##ological": 7542, + "connect": 7543, + "hence": 7544, + "metre": 7545, + "collapse": 7546, + "underneath": 7547, + "banned": 7548, + "Future": 7549, + "clients": 7550, + "alternate": 7551, + "explosion": 7552, + "kinds": 7553, + "Commons": 7554, + "hungry": 7555, + "dragon": 7556, + "Chapel": 7557, + "Buddhist": 7558, + "lover": 7559, + "depression": 7560, + "pulls": 7561, + "##ges": 7562, + "##uk": 7563, + "origins": 7564, + "computers": 7565, + "crosses": 7566, + "kissing": 7567, + "assume": 7568, + "emphasis": 7569, + "lighting": 7570, + "##ites": 7571, + "personally": 7572, + "crashed": 7573, + "beam": 7574, + "touchdown": 7575, + "lane": 7576, + "comparison": 7577, + "##mont": 7578, + "Hitler": 7579, + "##las": 7580, + "execution": 7581, + "##ene": 7582, + "acre": 7583, + "sum": 7584, + "Pearl": 7585, + "ray": 7586, + "##point": 7587, + "essentially": 7588, + "worker": 7589, + "convicted": 7590, + "tear": 7591, + "Clay": 7592, + "recovery": 7593, + "Literature": 7594, + "Unfortunately": 7595, + "##row": 7596, + "partial": 7597, + "Petersburg": 7598, + "Bulgaria": 7599, + "coaching": 7600, + "evolved": 7601, + "reception": 7602, + "enters": 7603, + "narrowed": 7604, + "elevator": 7605, + "therapy": 7606, + "defended": 7607, + "pairs": 7608, + "##lam": 7609, + "breaks": 7610, + "Bennett": 7611, + "Uncle": 7612, + "cylinder": 7613, + "##ison": 7614, + "passion": 7615, + "bases": 7616, + "Actor": 7617, + "cancelled": 7618, + "battles": 7619, + "extensively": 7620, + "oxygen": 7621, + "Ancient": 7622, + "specialized": 7623, + "negotiations": 7624, + "##rat": 7625, + "acquisition": 7626, + "convince": 7627, + "interpretation": 7628, + "##00": 7629, + "photos": 7630, + "aspect": 7631, + "colleges": 7632, + "Artist": 7633, + "keeps": 7634, + "##wing": 7635, + "Croatia": 7636, + "##ona": 7637, + "Hughes": 7638, + "Otto": 7639, + "comments": 7640, + "##du": 7641, + "Ph": 7642, + "Sweet": 7643, + "adventure": 7644, + "describing": 7645, + "Student": 7646, + "Shakespeare": 7647, + "scattered": 7648, + "objective": 7649, + "Aviation": 7650, + "Phillips": 7651, + "Fourth": 7652, + "athletes": 7653, + "##hal": 7654, + "##tered": 7655, + "Guitar": 7656, + "intensity": 7657, + "née": 7658, + "dining": 7659, + "curve": 7660, + "Obama": 7661, + "topics": 7662, + "legislative": 7663, + "Mill": 7664, + "Cruz": 7665, + "##ars": 7666, + "Members": 7667, + "recipient": 7668, + "Derby": 7669, + "inspiration": 7670, + "corresponding": 7671, + "fed": 7672, + "YouTube": 7673, + "coins": 7674, + "pressing": 7675, + "intent": 7676, + "Karen": 7677, + "cinema": 7678, + "Delta": 7679, + "destination": 7680, + "shorter": 7681, + "Christians": 7682, + "imagined": 7683, + "canal": 7684, + "Newcastle": 7685, + "Shah": 7686, + "Adrian": 7687, + "super": 7688, + "Males": 7689, + "160": 7690, + "liberal": 7691, + "lord": 7692, + "bat": 7693, + "supplied": 7694, + "Claude": 7695, + "meal": 7696, + "worship": 7697, + "##atic": 7698, + "Han": 7699, + "wire": 7700, + "°F": 7701, + "##tha": 7702, + "punishment": 7703, + "thirteen": 7704, + "fighters": 7705, + "##ibility": 7706, + "1859": 7707, + "Ball": 7708, + "gardens": 7709, + "##ari": 7710, + "Ottawa": 7711, + "pole": 7712, + "indicating": 7713, + "Twenty": 7714, + "Higher": 7715, + "Bass": 7716, + "Ivy": 7717, + "farming": 7718, + "##urs": 7719, + "certified": 7720, + "Saudi": 7721, + "plenty": 7722, + "##ces": 7723, + "restaurants": 7724, + "Representative": 7725, + "Miles": 7726, + "payment": 7727, + "##inger": 7728, + "##rit": 7729, + "Confederate": 7730, + "festivals": 7731, + "references": 7732, + "##ić": 7733, + "Mario": 7734, + "PhD": 7735, + "playoffs": 7736, + "witness": 7737, + "rice": 7738, + "mask": 7739, + "saving": 7740, + "opponents": 7741, + "enforcement": 7742, + "automatically": 7743, + "relegated": 7744, + "##oe": 7745, + "radar": 7746, + "whenever": 7747, + "Financial": 7748, + "imperial": 7749, + "uncredited": 7750, + "influences": 7751, + "Abraham": 7752, + "skull": 7753, + "Guardian": 7754, + "Haven": 7755, + "Bengal": 7756, + "impressive": 7757, + "input": 7758, + "mixture": 7759, + "Warsaw": 7760, + "altitude": 7761, + "distinction": 7762, + "1857": 7763, + "collective": 7764, + "Annie": 7765, + "##ean": 7766, + "##bal": 7767, + "directions": 7768, + "Flying": 7769, + "##nic": 7770, + "faded": 7771, + "##ella": 7772, + "contributing": 7773, + "##ó": 7774, + "employee": 7775, + "##lum": 7776, + "##yl": 7777, + "ruler": 7778, + "oriented": 7779, + "conductor": 7780, + "focusing": 7781, + "##die": 7782, + "Giants": 7783, + "Mills": 7784, + "mines": 7785, + "Deep": 7786, + "curled": 7787, + "Jessica": 7788, + "guitars": 7789, + "Louise": 7790, + "procedure": 7791, + "Machine": 7792, + "failing": 7793, + "attendance": 7794, + "Nepal": 7795, + "Brad": 7796, + "Liam": 7797, + "tourist": 7798, + "exhibited": 7799, + "Sophie": 7800, + "depicted": 7801, + "Shaw": 7802, + "Chuck": 7803, + "##can": 7804, + "expecting": 7805, + "challenges": 7806, + "##nda": 7807, + "equally": 7808, + "resignation": 7809, + "##logical": 7810, + "Tigers": 7811, + "loop": 7812, + "pitched": 7813, + "outdoor": 7814, + "reviewed": 7815, + "hopes": 7816, + "True": 7817, + "temporarily": 7818, + "Borough": 7819, + "torn": 7820, + "jerked": 7821, + "collect": 7822, + "Berkeley": 7823, + "Independence": 7824, + "cotton": 7825, + "retreat": 7826, + "campaigns": 7827, + "participating": 7828, + "Intelligence": 7829, + "Heaven": 7830, + "##ked": 7831, + "situations": 7832, + "borough": 7833, + "Democrats": 7834, + "Harbor": 7835, + "##len": 7836, + "Liga": 7837, + "serial": 7838, + "circles": 7839, + "fourteen": 7840, + "##lot": 7841, + "seized": 7842, + "filling": 7843, + "departments": 7844, + "finance": 7845, + "absolute": 7846, + "Roland": 7847, + "Nate": 7848, + "floors": 7849, + "raced": 7850, + "struggling": 7851, + "deliver": 7852, + "protests": 7853, + "##tel": 7854, + "Exchange": 7855, + "efficient": 7856, + "experiments": 7857, + "##dar": 7858, + "faint": 7859, + "3D": 7860, + "binding": 7861, + "Lions": 7862, + "lightly": 7863, + "skill": 7864, + "proteins": 7865, + "difficulties": 7866, + "##cal": 7867, + "monthly": 7868, + "camps": 7869, + "flood": 7870, + "loves": 7871, + "Amanda": 7872, + "Commerce": 7873, + "##oid": 7874, + "##lies": 7875, + "elementary": 7876, + "##tre": 7877, + "organic": 7878, + "##stein": 7879, + "##ph": 7880, + "receives": 7881, + "Tech": 7882, + "enormous": 7883, + "distinctive": 7884, + "Joint": 7885, + "experiment": 7886, + "Circuit": 7887, + "citizen": 7888, + "##hy": 7889, + "shelter": 7890, + "ideal": 7891, + "practically": 7892, + "formula": 7893, + "addressed": 7894, + "Foster": 7895, + "Productions": 7896, + "##ax": 7897, + "variable": 7898, + "punk": 7899, + "Voice": 7900, + "fastest": 7901, + "concentrated": 7902, + "##oma": 7903, + "##yer": 7904, + "stored": 7905, + "surrender": 7906, + "vary": 7907, + "Sergeant": 7908, + "Wells": 7909, + "ward": 7910, + "Wait": 7911, + "##ven": 7912, + "playoff": 7913, + "reducing": 7914, + "cavalry": 7915, + "##dle": 7916, + "Venezuela": 7917, + "tissue": 7918, + "amounts": 7919, + "sweat": 7920, + "##we": 7921, + "Non": 7922, + "##nik": 7923, + "beetle": 7924, + "##bu": 7925, + "##tu": 7926, + "Jared": 7927, + "Hunt": 7928, + "##₂": 7929, + "fat": 7930, + "Sultan": 7931, + "Living": 7932, + "Circle": 7933, + "Secondary": 7934, + "Suddenly": 7935, + "reverse": 7936, + "##min": 7937, + "Travel": 7938, + "##bin": 7939, + "Lebanon": 7940, + "##mas": 7941, + "virus": 7942, + "Wind": 7943, + "dissolved": 7944, + "enrolled": 7945, + "holiday": 7946, + "Keep": 7947, + "helicopter": 7948, + "Clarke": 7949, + "constitutional": 7950, + "technologies": 7951, + "doubles": 7952, + "instructions": 7953, + "##ace": 7954, + "Azerbaijan": 7955, + "##ill": 7956, + "occasional": 7957, + "frozen": 7958, + "trick": 7959, + "wiped": 7960, + "writings": 7961, + "Shanghai": 7962, + "preparing": 7963, + "challenged": 7964, + "mainstream": 7965, + "summit": 7966, + "180": 7967, + "##arian": 7968, + "##rating": 7969, + "designation": 7970, + "##ada": 7971, + "revenge": 7972, + "filming": 7973, + "tightened": 7974, + "Miguel": 7975, + "Montana": 7976, + "reflect": 7977, + "celebration": 7978, + "bitch": 7979, + "flashed": 7980, + "signals": 7981, + "rounded": 7982, + "peoples": 7983, + "##tation": 7984, + "renowned": 7985, + "Google": 7986, + "characteristic": 7987, + "Campaign": 7988, + "sliding": 7989, + "##rman": 7990, + "usage": 7991, + "Record": 7992, + "Using": 7993, + "woke": 7994, + "solutions": 7995, + "holes": 7996, + "theories": 7997, + "logo": 7998, + "Protestant": 7999, + "relaxed": 8000, + "brow": 8001, + "nickname": 8002, + "Reading": 8003, + "marble": 8004, + "##tro": 8005, + "symptoms": 8006, + "Overall": 8007, + "capita": 8008, + "##ila": 8009, + "outbreak": 8010, + "revolution": 8011, + "deemed": 8012, + "Principal": 8013, + "Hannah": 8014, + "approaches": 8015, + "inducted": 8016, + "Wellington": 8017, + "vulnerable": 8018, + "Environmental": 8019, + "Drama": 8020, + "incumbent": 8021, + "Dame": 8022, + "1854": 8023, + "travels": 8024, + "samples": 8025, + "accurate": 8026, + "physically": 8027, + "Sony": 8028, + "Nashville": 8029, + "##sville": 8030, + "##lic": 8031, + "##og": 8032, + "Producer": 8033, + "Lucky": 8034, + "tough": 8035, + "Stanford": 8036, + "resort": 8037, + "repeatedly": 8038, + "eyebrows": 8039, + "Far": 8040, + "choir": 8041, + "commenced": 8042, + "##ep": 8043, + "##ridge": 8044, + "rage": 8045, + "swing": 8046, + "sequel": 8047, + "heir": 8048, + "buses": 8049, + "ad": 8050, + "Grove": 8051, + "##late": 8052, + "##rick": 8053, + "updated": 8054, + "##SA": 8055, + "Delaware": 8056, + "##fa": 8057, + "Athletics": 8058, + "warmth": 8059, + "Off": 8060, + "excitement": 8061, + "verse": 8062, + "Protection": 8063, + "Villa": 8064, + "corruption": 8065, + "intellectual": 8066, + "Jenny": 8067, + "##lyn": 8068, + "mystery": 8069, + "prayer": 8070, + "healthy": 8071, + "##ologist": 8072, + "Bear": 8073, + "lab": 8074, + "Ernest": 8075, + "Remix": 8076, + "register": 8077, + "basement": 8078, + "Montgomery": 8079, + "consistent": 8080, + "tier": 8081, + "1855": 8082, + "Preston": 8083, + "Brooks": 8084, + "##maker": 8085, + "vocalist": 8086, + "laboratory": 8087, + "delayed": 8088, + "wheels": 8089, + "rope": 8090, + "bachelor": 8091, + "pitcher": 8092, + "Block": 8093, + "Nevertheless": 8094, + "suspect": 8095, + "efficiency": 8096, + "Nebraska": 8097, + "siege": 8098, + "FBI": 8099, + "planted": 8100, + "##AC": 8101, + "Newton": 8102, + "breeding": 8103, + "##ain": 8104, + "eighteen": 8105, + "Argentine": 8106, + "encounter": 8107, + "servant": 8108, + "1858": 8109, + "elder": 8110, + "Shadow": 8111, + "Episode": 8112, + "fabric": 8113, + "doctors": 8114, + "survival": 8115, + "removal": 8116, + "chemistry": 8117, + "volunteers": 8118, + "Kane": 8119, + "variant": 8120, + "arrives": 8121, + "Eagle": 8122, + "Left": 8123, + "##fe": 8124, + "Jo": 8125, + "divorce": 8126, + "##ret": 8127, + "yesterday": 8128, + "Bryan": 8129, + "handling": 8130, + "diseases": 8131, + "customer": 8132, + "Sheriff": 8133, + "Tiger": 8134, + "Harper": 8135, + "##oi": 8136, + "resting": 8137, + "Linda": 8138, + "Sheffield": 8139, + "gasped": 8140, + "sexy": 8141, + "economics": 8142, + "alien": 8143, + "tale": 8144, + "footage": 8145, + "Liberty": 8146, + "yeah": 8147, + "fundamental": 8148, + "Ground": 8149, + "flames": 8150, + "Actress": 8151, + "photographer": 8152, + "Maggie": 8153, + "Additional": 8154, + "joke": 8155, + "custom": 8156, + "Survey": 8157, + "Abu": 8158, + "silk": 8159, + "consumption": 8160, + "Ellis": 8161, + "bread": 8162, + "##uous": 8163, + "engagement": 8164, + "puts": 8165, + "Dog": 8166, + "##hr": 8167, + "poured": 8168, + "guilt": 8169, + "CDP": 8170, + "boxes": 8171, + "hardware": 8172, + "clenched": 8173, + "##cio": 8174, + "stem": 8175, + "arena": 8176, + "extending": 8177, + "##com": 8178, + "examination": 8179, + "Steel": 8180, + "encountered": 8181, + "revised": 8182, + "140": 8183, + "picking": 8184, + "Car": 8185, + "hasn": 8186, + "Minor": 8187, + "pride": 8188, + "Roosevelt": 8189, + "boards": 8190, + "##mia": 8191, + "blocked": 8192, + "curious": 8193, + "drag": 8194, + "narrative": 8195, + "brigade": 8196, + "Prefecture": 8197, + "mysterious": 8198, + "namely": 8199, + "connects": 8200, + "Devil": 8201, + "historians": 8202, + "CHAPTER": 8203, + "quit": 8204, + "installation": 8205, + "Golf": 8206, + "empire": 8207, + "elevated": 8208, + "##eo": 8209, + "releasing": 8210, + "Bond": 8211, + "##uri": 8212, + "harsh": 8213, + "ban": 8214, + "##BA": 8215, + "contracts": 8216, + "cloth": 8217, + "presents": 8218, + "stake": 8219, + "chorus": 8220, + "##eau": 8221, + "swear": 8222, + "##mp": 8223, + "allies": 8224, + "generations": 8225, + "Motor": 8226, + "meter": 8227, + "pen": 8228, + "warrior": 8229, + "veteran": 8230, + "##EC": 8231, + "comprehensive": 8232, + "missile": 8233, + "interaction": 8234, + "instruction": 8235, + "Renaissance": 8236, + "rested": 8237, + "Dale": 8238, + "fix": 8239, + "fluid": 8240, + "les": 8241, + "investigate": 8242, + "loaded": 8243, + "widow": 8244, + "exhibit": 8245, + "artificial": 8246, + "select": 8247, + "rushing": 8248, + "tasks": 8249, + "signature": 8250, + "nowhere": 8251, + "Engineer": 8252, + "feared": 8253, + "Prague": 8254, + "bother": 8255, + "extinct": 8256, + "gates": 8257, + "Bird": 8258, + "climbing": 8259, + "heels": 8260, + "striking": 8261, + "artwork": 8262, + "hunt": 8263, + "awake": 8264, + "##hin": 8265, + "Formula": 8266, + "thereby": 8267, + "commitment": 8268, + "imprisoned": 8269, + "Beyond": 8270, + "##MA": 8271, + "transformed": 8272, + "Agriculture": 8273, + "Low": 8274, + "Movie": 8275, + "radical": 8276, + "complicated": 8277, + "Yellow": 8278, + "Auckland": 8279, + "mansion": 8280, + "tenth": 8281, + "Trevor": 8282, + "predecessor": 8283, + "##eer": 8284, + "disbanded": 8285, + "sucked": 8286, + "circular": 8287, + "witch": 8288, + "gaining": 8289, + "lean": 8290, + "Behind": 8291, + "illustrated": 8292, + "rang": 8293, + "celebrate": 8294, + "bike": 8295, + "consist": 8296, + "framework": 8297, + "##cent": 8298, + "Shane": 8299, + "owns": 8300, + "350": 8301, + "comprises": 8302, + "collaborated": 8303, + "colleagues": 8304, + "##cast": 8305, + "engage": 8306, + "fewer": 8307, + "##ave": 8308, + "1856": 8309, + "observation": 8310, + "diplomatic": 8311, + "legislature": 8312, + "improvements": 8313, + "Interstate": 8314, + "craft": 8315, + "MTV": 8316, + "martial": 8317, + "administered": 8318, + "jet": 8319, + "approaching": 8320, + "permanently": 8321, + "attraction": 8322, + "manuscript": 8323, + "numbered": 8324, + "Happy": 8325, + "Andrea": 8326, + "shallow": 8327, + "Gothic": 8328, + "Anti": 8329, + "##bad": 8330, + "improvement": 8331, + "trace": 8332, + "preserve": 8333, + "regardless": 8334, + "rode": 8335, + "dies": 8336, + "achievement": 8337, + "maintaining": 8338, + "Hamburg": 8339, + "spine": 8340, + "##air": 8341, + "flowing": 8342, + "encourage": 8343, + "widened": 8344, + "posts": 8345, + "##bound": 8346, + "125": 8347, + "Southeast": 8348, + "Santiago": 8349, + "##bles": 8350, + "impression": 8351, + "receiver": 8352, + "Single": 8353, + "closure": 8354, + "##unt": 8355, + "communist": 8356, + "honors": 8357, + "Northwest": 8358, + "105": 8359, + "##ulated": 8360, + "cared": 8361, + "un": 8362, + "hug": 8363, + "magnetic": 8364, + "seeds": 8365, + "topic": 8366, + "perceived": 8367, + "prey": 8368, + "prevented": 8369, + "Marvel": 8370, + "Eight": 8371, + "Michel": 8372, + "Transportation": 8373, + "rings": 8374, + "Gate": 8375, + "##gne": 8376, + "Byzantine": 8377, + "accommodate": 8378, + "floating": 8379, + "##dor": 8380, + "equation": 8381, + "ministry": 8382, + "##ito": 8383, + "##gled": 8384, + "Rules": 8385, + "earthquake": 8386, + "revealing": 8387, + "Brother": 8388, + "Celtic": 8389, + "blew": 8390, + "chairs": 8391, + "Panama": 8392, + "Leon": 8393, + "attractive": 8394, + "descendants": 8395, + "Care": 8396, + "Ambassador": 8397, + "tours": 8398, + "breathed": 8399, + "threatening": 8400, + "##cho": 8401, + "smiles": 8402, + "Lt": 8403, + "Beginning": 8404, + "##iness": 8405, + "fake": 8406, + "assists": 8407, + "fame": 8408, + "strings": 8409, + "Mobile": 8410, + "Liu": 8411, + "parks": 8412, + "http": 8413, + "1852": 8414, + "brush": 8415, + "Aunt": 8416, + "bullet": 8417, + "consciousness": 8418, + "##sta": 8419, + "##ther": 8420, + "consequences": 8421, + "gather": 8422, + "dug": 8423, + "1851": 8424, + "bridges": 8425, + "Doug": 8426, + "##sion": 8427, + "Artists": 8428, + "ignore": 8429, + "Carol": 8430, + "brilliant": 8431, + "radiation": 8432, + "temples": 8433, + "basin": 8434, + "clouds": 8435, + "##cted": 8436, + "Stevens": 8437, + "spite": 8438, + "soap": 8439, + "consumer": 8440, + "Damn": 8441, + "Snow": 8442, + "recruited": 8443, + "##craft": 8444, + "Advanced": 8445, + "tournaments": 8446, + "Quinn": 8447, + "undergraduate": 8448, + "questioned": 8449, + "Palmer": 8450, + "Annual": 8451, + "Others": 8452, + "feeding": 8453, + "Spider": 8454, + "printing": 8455, + "##orn": 8456, + "cameras": 8457, + "functional": 8458, + "Chester": 8459, + "readers": 8460, + "Alpha": 8461, + "universal": 8462, + "Faith": 8463, + "Brandon": 8464, + "François": 8465, + "authored": 8466, + "Ring": 8467, + "el": 8468, + "aims": 8469, + "athletic": 8470, + "possessed": 8471, + "Vermont": 8472, + "programmes": 8473, + "##uck": 8474, + "bore": 8475, + "Fisher": 8476, + "statements": 8477, + "shed": 8478, + "saxophone": 8479, + "neighboring": 8480, + "pronounced": 8481, + "barrel": 8482, + "bags": 8483, + "##dge": 8484, + "organisations": 8485, + "pilots": 8486, + "casualties": 8487, + "Kenneth": 8488, + "##brook": 8489, + "silently": 8490, + "Malcolm": 8491, + "span": 8492, + "Essex": 8493, + "anchor": 8494, + "##hl": 8495, + "virtual": 8496, + "lessons": 8497, + "Henri": 8498, + "Trump": 8499, + "Page": 8500, + "pile": 8501, + "locomotive": 8502, + "wounds": 8503, + "uncomfortable": 8504, + "sustained": 8505, + "Diana": 8506, + "Eagles": 8507, + "##pi": 8508, + "2000s": 8509, + "documented": 8510, + "##bel": 8511, + "Cassie": 8512, + "delay": 8513, + "kisses": 8514, + "##ines": 8515, + "variation": 8516, + "##ag": 8517, + "growled": 8518, + "##mark": 8519, + "##ways": 8520, + "Leslie": 8521, + "studios": 8522, + "Friedrich": 8523, + "aunt": 8524, + "actively": 8525, + "armor": 8526, + "eaten": 8527, + "historically": 8528, + "Better": 8529, + "purse": 8530, + "honey": 8531, + "ratings": 8532, + "##ée": 8533, + "naturally": 8534, + "1840": 8535, + "peer": 8536, + "Kenny": 8537, + "Cardinal": 8538, + "database": 8539, + "Looking": 8540, + "runners": 8541, + "handsome": 8542, + "Double": 8543, + "PA": 8544, + "##boat": 8545, + "##sted": 8546, + "protecting": 8547, + "##jan": 8548, + "Diamond": 8549, + "concepts": 8550, + "interface": 8551, + "##aki": 8552, + "Watch": 8553, + "Article": 8554, + "Columbus": 8555, + "dialogue": 8556, + "pause": 8557, + "##rio": 8558, + "extends": 8559, + "blanket": 8560, + "pulse": 8561, + "1853": 8562, + "affiliate": 8563, + "ladies": 8564, + "Ronald": 8565, + "counted": 8566, + "kills": 8567, + "demons": 8568, + "##zation": 8569, + "Airlines": 8570, + "Marco": 8571, + "Cat": 8572, + "companion": 8573, + "mere": 8574, + "Yugoslavia": 8575, + "Forum": 8576, + "Allan": 8577, + "pioneer": 8578, + "Competition": 8579, + "Methodist": 8580, + "patent": 8581, + "nobody": 8582, + "Stockholm": 8583, + "##ien": 8584, + "regulation": 8585, + "##ois": 8586, + "accomplished": 8587, + "##itive": 8588, + "washed": 8589, + "sake": 8590, + "Vladimir": 8591, + "crops": 8592, + "prestigious": 8593, + "humor": 8594, + "Sally": 8595, + "labour": 8596, + "tributary": 8597, + "trap": 8598, + "altered": 8599, + "examined": 8600, + "Mumbai": 8601, + "bombing": 8602, + "Ash": 8603, + "noble": 8604, + "suspension": 8605, + "ruins": 8606, + "##bank": 8607, + "spare": 8608, + "displays": 8609, + "guided": 8610, + "dimensional": 8611, + "Iraqi": 8612, + "##hon": 8613, + "sciences": 8614, + "Franz": 8615, + "relating": 8616, + "fence": 8617, + "followers": 8618, + "Palestine": 8619, + "invented": 8620, + "proceeded": 8621, + "Batman": 8622, + "Bradley": 8623, + "##yard": 8624, + "##ova": 8625, + "crystal": 8626, + "Kerala": 8627, + "##ima": 8628, + "shipping": 8629, + "handled": 8630, + "Want": 8631, + "abolished": 8632, + "Drew": 8633, + "##tter": 8634, + "Powell": 8635, + "Half": 8636, + "##table": 8637, + "##cker": 8638, + "exhibitions": 8639, + "Were": 8640, + "assignment": 8641, + "assured": 8642, + "##rine": 8643, + "Indonesian": 8644, + "Grammy": 8645, + "acknowledged": 8646, + "Kylie": 8647, + "coaches": 8648, + "structural": 8649, + "clearing": 8650, + "stationed": 8651, + "Say": 8652, + "Total": 8653, + "Rail": 8654, + "besides": 8655, + "glow": 8656, + "threats": 8657, + "afford": 8658, + "Tree": 8659, + "Musical": 8660, + "##pp": 8661, + "elite": 8662, + "centered": 8663, + "explore": 8664, + "Engineers": 8665, + "Stakes": 8666, + "Hello": 8667, + "tourism": 8668, + "severely": 8669, + "assessment": 8670, + "##tly": 8671, + "crack": 8672, + "politicians": 8673, + "##rrow": 8674, + "sheets": 8675, + "volunteer": 8676, + "##borough": 8677, + "##hold": 8678, + "announcement": 8679, + "recover": 8680, + "contribute": 8681, + "lungs": 8682, + "##ille": 8683, + "mainland": 8684, + "presentation": 8685, + "Johann": 8686, + "Writing": 8687, + "1849": 8688, + "##bird": 8689, + "Study": 8690, + "Boulevard": 8691, + "coached": 8692, + "fail": 8693, + "airline": 8694, + "Congo": 8695, + "Plus": 8696, + "Syrian": 8697, + "introduce": 8698, + "ridge": 8699, + "Casey": 8700, + "manages": 8701, + "##fi": 8702, + "searched": 8703, + "Support": 8704, + "succession": 8705, + "progressive": 8706, + "coup": 8707, + "cultures": 8708, + "##lessly": 8709, + "sensation": 8710, + "Cork": 8711, + "Elena": 8712, + "Sofia": 8713, + "Philosophy": 8714, + "mini": 8715, + "trunk": 8716, + "academy": 8717, + "Mass": 8718, + "Liz": 8719, + "practiced": 8720, + "Reid": 8721, + "##ule": 8722, + "satisfied": 8723, + "experts": 8724, + "Wilhelm": 8725, + "Woods": 8726, + "invitation": 8727, + "Angels": 8728, + "calendar": 8729, + "joy": 8730, + "Sr": 8731, + "Dam": 8732, + "packed": 8733, + "##uan": 8734, + "bastard": 8735, + "Workers": 8736, + "broadcasts": 8737, + "logic": 8738, + "cooking": 8739, + "backward": 8740, + "##ack": 8741, + "Chen": 8742, + "creates": 8743, + "enzyme": 8744, + "##xi": 8745, + "Davies": 8746, + "aviation": 8747, + "VII": 8748, + "Conservation": 8749, + "fucking": 8750, + "Knights": 8751, + "##kan": 8752, + "requiring": 8753, + "hectares": 8754, + "wars": 8755, + "ate": 8756, + "##box": 8757, + "Mind": 8758, + "desired": 8759, + "oak": 8760, + "absorbed": 8761, + "Really": 8762, + "Vietnamese": 8763, + "Paulo": 8764, + "athlete": 8765, + "##car": 8766, + "##eth": 8767, + "Talk": 8768, + "Wu": 8769, + "##cks": 8770, + "survivors": 8771, + "Yang": 8772, + "Joel": 8773, + "Almost": 8774, + "Holmes": 8775, + "Armed": 8776, + "Joshua": 8777, + "priests": 8778, + "discontinued": 8779, + "##sey": 8780, + "blond": 8781, + "Rolling": 8782, + "suggesting": 8783, + "CA": 8784, + "clay": 8785, + "exterior": 8786, + "Scientific": 8787, + "##sive": 8788, + "Giovanni": 8789, + "Hi": 8790, + "farther": 8791, + "contents": 8792, + "Winners": 8793, + "animation": 8794, + "neutral": 8795, + "mall": 8796, + "Notes": 8797, + "layers": 8798, + "professionals": 8799, + "Armstrong": 8800, + "Against": 8801, + "Piano": 8802, + "involve": 8803, + "monitor": 8804, + "angel": 8805, + "parked": 8806, + "bears": 8807, + "seated": 8808, + "feat": 8809, + "beliefs": 8810, + "##kers": 8811, + "Version": 8812, + "suffer": 8813, + "##ceae": 8814, + "guidance": 8815, + "##eur": 8816, + "honored": 8817, + "raid": 8818, + "alarm": 8819, + "Glen": 8820, + "Ellen": 8821, + "Jamaica": 8822, + "trio": 8823, + "enabled": 8824, + "##ils": 8825, + "procedures": 8826, + "##hus": 8827, + "moderate": 8828, + "upstairs": 8829, + "##ses": 8830, + "torture": 8831, + "Georgian": 8832, + "rebellion": 8833, + "Fernando": 8834, + "Nice": 8835, + "##are": 8836, + "Aires": 8837, + "Campus": 8838, + "beast": 8839, + "##hing": 8840, + "1847": 8841, + "##FA": 8842, + "Isle": 8843, + "##logist": 8844, + "Princeton": 8845, + "cathedral": 8846, + "Oakland": 8847, + "Solomon": 8848, + "##tto": 8849, + "Milwaukee": 8850, + "upcoming": 8851, + "midfielder": 8852, + "Neither": 8853, + "sacred": 8854, + "Eyes": 8855, + "appreciate": 8856, + "Brunswick": 8857, + "secrets": 8858, + "Rice": 8859, + "Somerset": 8860, + "Chancellor": 8861, + "Curtis": 8862, + "##gel": 8863, + "Rich": 8864, + "separation": 8865, + "grid": 8866, + "##los": 8867, + "##bon": 8868, + "urge": 8869, + "##ees": 8870, + "##ree": 8871, + "freight": 8872, + "towers": 8873, + "psychology": 8874, + "requirement": 8875, + "dollar": 8876, + "##fall": 8877, + "##sman": 8878, + "exile": 8879, + "tomb": 8880, + "Salt": 8881, + "Stefan": 8882, + "Buenos": 8883, + "Revival": 8884, + "Porter": 8885, + "tender": 8886, + "diesel": 8887, + "chocolate": 8888, + "Eugene": 8889, + "Legion": 8890, + "Laboratory": 8891, + "sheep": 8892, + "arched": 8893, + "hospitals": 8894, + "orbit": 8895, + "Full": 8896, + "##hall": 8897, + "drinks": 8898, + "ripped": 8899, + "##RS": 8900, + "tense": 8901, + "Hank": 8902, + "leagues": 8903, + "##nberg": 8904, + "PlayStation": 8905, + "fool": 8906, + "Punjab": 8907, + "relatives": 8908, + "Comedy": 8909, + "sur": 8910, + "1846": 8911, + "Tonight": 8912, + "Sox": 8913, + "##if": 8914, + "Rabbi": 8915, + "org": 8916, + "speaks": 8917, + "institute": 8918, + "defender": 8919, + "painful": 8920, + "wishes": 8921, + "Weekly": 8922, + "literacy": 8923, + "portions": 8924, + "snake": 8925, + "item": 8926, + "deals": 8927, + "##tum": 8928, + "autumn": 8929, + "sharply": 8930, + "reforms": 8931, + "thighs": 8932, + "prototype": 8933, + "##ition": 8934, + "argues": 8935, + "disorder": 8936, + "Physics": 8937, + "terror": 8938, + "provisions": 8939, + "refugees": 8940, + "predominantly": 8941, + "independently": 8942, + "march": 8943, + "##graphy": 8944, + "Arabia": 8945, + "Andrews": 8946, + "Bus": 8947, + "Money": 8948, + "drops": 8949, + "##zar": 8950, + "pistol": 8951, + "matrix": 8952, + "revolutionary": 8953, + "##ust": 8954, + "Starting": 8955, + "##ptic": 8956, + "Oak": 8957, + "Monica": 8958, + "##ides": 8959, + "servants": 8960, + "##hed": 8961, + "archaeological": 8962, + "divorced": 8963, + "rocket": 8964, + "enjoying": 8965, + "fires": 8966, + "##nel": 8967, + "assembled": 8968, + "qualification": 8969, + "retiring": 8970, + "##fied": 8971, + "Distinguished": 8972, + "handful": 8973, + "infection": 8974, + "Durham": 8975, + "##itz": 8976, + "fortune": 8977, + "renewed": 8978, + "Chelsea": 8979, + "##sley": 8980, + "curved": 8981, + "gesture": 8982, + "retain": 8983, + "exhausted": 8984, + "##ifying": 8985, + "Perth": 8986, + "jumping": 8987, + "Palestinian": 8988, + "Simpson": 8989, + "colonies": 8990, + "steal": 8991, + "##chy": 8992, + "corners": 8993, + "Finn": 8994, + "arguing": 8995, + "Martha": 8996, + "##var": 8997, + "Betty": 8998, + "emerging": 8999, + "Heights": 9000, + "Hindi": 9001, + "Manila": 9002, + "pianist": 9003, + "founders": 9004, + "regret": 9005, + "Napoleon": 9006, + "elbow": 9007, + "overhead": 9008, + "bold": 9009, + "praise": 9010, + "humanity": 9011, + "##ori": 9012, + "Revolutionary": 9013, + "##ere": 9014, + "fur": 9015, + "##ole": 9016, + "Ashley": 9017, + "Official": 9018, + "##rm": 9019, + "lovely": 9020, + "Architecture": 9021, + "##sch": 9022, + "Baronet": 9023, + "virtually": 9024, + "##OS": 9025, + "descended": 9026, + "immigration": 9027, + "##das": 9028, + "##kes": 9029, + "Holly": 9030, + "Wednesday": 9031, + "maintains": 9032, + "theatrical": 9033, + "Evan": 9034, + "Gardens": 9035, + "citing": 9036, + "##gia": 9037, + "segments": 9038, + "Bailey": 9039, + "Ghost": 9040, + "##city": 9041, + "governing": 9042, + "graphics": 9043, + "##ined": 9044, + "privately": 9045, + "potentially": 9046, + "transformation": 9047, + "Crystal": 9048, + "Cabinet": 9049, + "sacrifice": 9050, + "hesitated": 9051, + "mud": 9052, + "Apollo": 9053, + "Desert": 9054, + "bin": 9055, + "victories": 9056, + "Editor": 9057, + "Railways": 9058, + "Web": 9059, + "Case": 9060, + "tourists": 9061, + "Brussels": 9062, + "Franco": 9063, + "compiled": 9064, + "topped": 9065, + "Gene": 9066, + "engineers": 9067, + "commentary": 9068, + "egg": 9069, + "escort": 9070, + "nerve": 9071, + "arch": 9072, + "necessarily": 9073, + "frustration": 9074, + "Michelle": 9075, + "democracy": 9076, + "genes": 9077, + "Facebook": 9078, + "halfway": 9079, + "##ient": 9080, + "102": 9081, + "flipped": 9082, + "Won": 9083, + "##mit": 9084, + "NASA": 9085, + "Lynn": 9086, + "Provincial": 9087, + "ambassador": 9088, + "Inspector": 9089, + "glared": 9090, + "Change": 9091, + "McDonald": 9092, + "developments": 9093, + "tucked": 9094, + "noting": 9095, + "Gibson": 9096, + "circulation": 9097, + "dubbed": 9098, + "armies": 9099, + "resource": 9100, + "Headquarters": 9101, + "##iest": 9102, + "Mia": 9103, + "Albanian": 9104, + "Oil": 9105, + "Albums": 9106, + "excuse": 9107, + "intervention": 9108, + "Grande": 9109, + "Hugo": 9110, + "integration": 9111, + "civilians": 9112, + "depends": 9113, + "reserves": 9114, + "Dee": 9115, + "compositions": 9116, + "identification": 9117, + "restrictions": 9118, + "quarterback": 9119, + "Miranda": 9120, + "Universe": 9121, + "favourite": 9122, + "ranges": 9123, + "hint": 9124, + "loyal": 9125, + "Op": 9126, + "entity": 9127, + "Manual": 9128, + "quoted": 9129, + "dealt": 9130, + "specialist": 9131, + "Zhang": 9132, + "download": 9133, + "Westminster": 9134, + "Rebecca": 9135, + "streams": 9136, + "Anglican": 9137, + "variations": 9138, + "Mine": 9139, + "detective": 9140, + "Films": 9141, + "reserved": 9142, + "##oke": 9143, + "##key": 9144, + "sailing": 9145, + "##gger": 9146, + "expanding": 9147, + "recall": 9148, + "discovers": 9149, + "particles": 9150, + "behaviour": 9151, + "Gavin": 9152, + "blank": 9153, + "permit": 9154, + "Java": 9155, + "Fraser": 9156, + "Pass": 9157, + "##non": 9158, + "##TA": 9159, + "panels": 9160, + "statistics": 9161, + "notion": 9162, + "courage": 9163, + "dare": 9164, + "venues": 9165, + "##roy": 9166, + "Box": 9167, + "Newport": 9168, + "travelling": 9169, + "Thursday": 9170, + "warriors": 9171, + "Glenn": 9172, + "criteria": 9173, + "360": 9174, + "mutual": 9175, + "restore": 9176, + "varied": 9177, + "bitter": 9178, + "Katherine": 9179, + "##lant": 9180, + "ritual": 9181, + "bits": 9182, + "##à": 9183, + "Henderson": 9184, + "trips": 9185, + "Richardson": 9186, + "Detective": 9187, + "curse": 9188, + "psychological": 9189, + "Il": 9190, + "midnight": 9191, + "streak": 9192, + "facts": 9193, + "Dawn": 9194, + "Indies": 9195, + "Edmund": 9196, + "roster": 9197, + "Gen": 9198, + "##nation": 9199, + "1830": 9200, + "congregation": 9201, + "shaft": 9202, + "##ically": 9203, + "##mination": 9204, + "Indianapolis": 9205, + "Sussex": 9206, + "loving": 9207, + "##bit": 9208, + "sounding": 9209, + "horrible": 9210, + "Continental": 9211, + "Griffin": 9212, + "advised": 9213, + "magical": 9214, + "millions": 9215, + "##date": 9216, + "1845": 9217, + "Safety": 9218, + "lifting": 9219, + "determination": 9220, + "valid": 9221, + "dialect": 9222, + "Penn": 9223, + "Know": 9224, + "triple": 9225, + "avoided": 9226, + "dancer": 9227, + "judgment": 9228, + "sixty": 9229, + "farmer": 9230, + "lakes": 9231, + "blast": 9232, + "aggressive": 9233, + "Abby": 9234, + "tag": 9235, + "chains": 9236, + "inscription": 9237, + "##nn": 9238, + "conducting": 9239, + "Scout": 9240, + "buying": 9241, + "##wich": 9242, + "spreading": 9243, + "##OC": 9244, + "array": 9245, + "hurried": 9246, + "Environment": 9247, + "improving": 9248, + "prompted": 9249, + "fierce": 9250, + "Taking": 9251, + "Away": 9252, + "tune": 9253, + "pissed": 9254, + "Bull": 9255, + "catching": 9256, + "##ying": 9257, + "eyebrow": 9258, + "metropolitan": 9259, + "terrain": 9260, + "##rel": 9261, + "Lodge": 9262, + "manufacturers": 9263, + "creator": 9264, + "##etic": 9265, + "happiness": 9266, + "ports": 9267, + "##ners": 9268, + "Relations": 9269, + "fortress": 9270, + "targeted": 9271, + "##ST": 9272, + "allegedly": 9273, + "blues": 9274, + "##osa": 9275, + "Bosnia": 9276, + "##dom": 9277, + "burial": 9278, + "similarly": 9279, + "stranger": 9280, + "pursued": 9281, + "symbols": 9282, + "rebels": 9283, + "reflection": 9284, + "routine": 9285, + "traced": 9286, + "indoor": 9287, + "eventual": 9288, + "##ska": 9289, + "##ão": 9290, + "##una": 9291, + "MD": 9292, + "##phone": 9293, + "oh": 9294, + "grants": 9295, + "Reynolds": 9296, + "rid": 9297, + "operators": 9298, + "##nus": 9299, + "Joey": 9300, + "vital": 9301, + "siblings": 9302, + "keyboard": 9303, + "br": 9304, + "removing": 9305, + "societies": 9306, + "drives": 9307, + "solely": 9308, + "princess": 9309, + "lighter": 9310, + "Various": 9311, + "Cavalry": 9312, + "believing": 9313, + "SC": 9314, + "underwent": 9315, + "relay": 9316, + "smelled": 9317, + "syndrome": 9318, + "welfare": 9319, + "authorized": 9320, + "seemingly": 9321, + "Hard": 9322, + "chicken": 9323, + "##rina": 9324, + "Ages": 9325, + "Bo": 9326, + "democratic": 9327, + "barn": 9328, + "Eye": 9329, + "shorts": 9330, + "##coming": 9331, + "##hand": 9332, + "disappointed": 9333, + "unexpected": 9334, + "centres": 9335, + "Exhibition": 9336, + "Stories": 9337, + "Site": 9338, + "banking": 9339, + "accidentally": 9340, + "Agent": 9341, + "conjunction": 9342, + "André": 9343, + "Chloe": 9344, + "resist": 9345, + "width": 9346, + "Queens": 9347, + "provision": 9348, + "##art": 9349, + "Melissa": 9350, + "Honorary": 9351, + "Del": 9352, + "prefer": 9353, + "abruptly": 9354, + "duration": 9355, + "##vis": 9356, + "Glass": 9357, + "enlisted": 9358, + "##ado": 9359, + "discipline": 9360, + "Sisters": 9361, + "carriage": 9362, + "##ctor": 9363, + "##sburg": 9364, + "Lancashire": 9365, + "log": 9366, + "fuck": 9367, + "##iz": 9368, + "closet": 9369, + "collecting": 9370, + "holy": 9371, + "rape": 9372, + "trusted": 9373, + "cleaning": 9374, + "inhabited": 9375, + "Rocky": 9376, + "104": 9377, + "editorial": 9378, + "##yu": 9379, + "##ju": 9380, + "succeed": 9381, + "strict": 9382, + "Cuban": 9383, + "##iya": 9384, + "Bronze": 9385, + "outcome": 9386, + "##ifies": 9387, + "##set": 9388, + "corps": 9389, + "Hero": 9390, + "barrier": 9391, + "Kumar": 9392, + "groaned": 9393, + "Nina": 9394, + "Burton": 9395, + "enable": 9396, + "stability": 9397, + "Milton": 9398, + "knots": 9399, + "##ination": 9400, + "slavery": 9401, + "##borg": 9402, + "curriculum": 9403, + "trailer": 9404, + "warfare": 9405, + "Dante": 9406, + "Edgar": 9407, + "revival": 9408, + "Copenhagen": 9409, + "define": 9410, + "advocate": 9411, + "Garrett": 9412, + "Luther": 9413, + "overcome": 9414, + "pipe": 9415, + "750": 9416, + "construct": 9417, + "Scotia": 9418, + "kings": 9419, + "flooding": 9420, + "##hard": 9421, + "Ferdinand": 9422, + "Felix": 9423, + "forgot": 9424, + "Fish": 9425, + "Kurt": 9426, + "elaborate": 9427, + "##BC": 9428, + "graphic": 9429, + "gripped": 9430, + "colonel": 9431, + "Sophia": 9432, + "Advisory": 9433, + "Self": 9434, + "##uff": 9435, + "##lio": 9436, + "monitoring": 9437, + "seal": 9438, + "senses": 9439, + "rises": 9440, + "peaceful": 9441, + "journals": 9442, + "1837": 9443, + "checking": 9444, + "legendary": 9445, + "Ghana": 9446, + "##power": 9447, + "ammunition": 9448, + "Rosa": 9449, + "Richards": 9450, + "nineteenth": 9451, + "ferry": 9452, + "aggregate": 9453, + "Troy": 9454, + "inter": 9455, + "##wall": 9456, + "Triple": 9457, + "steep": 9458, + "tent": 9459, + "Cyprus": 9460, + "1844": 9461, + "##woman": 9462, + "commanding": 9463, + "farms": 9464, + "doi": 9465, + "navy": 9466, + "specified": 9467, + "na": 9468, + "cricketer": 9469, + "transported": 9470, + "Think": 9471, + "comprising": 9472, + "grateful": 9473, + "solve": 9474, + "##core": 9475, + "beings": 9476, + "clerk": 9477, + "grain": 9478, + "vector": 9479, + "discrimination": 9480, + "##TC": 9481, + "Katie": 9482, + "reasonable": 9483, + "drawings": 9484, + "veins": 9485, + "consideration": 9486, + "Monroe": 9487, + "repeat": 9488, + "breed": 9489, + "dried": 9490, + "witnessed": 9491, + "ordained": 9492, + "Current": 9493, + "spirits": 9494, + "remarkable": 9495, + "consultant": 9496, + "urged": 9497, + "Remember": 9498, + "anime": 9499, + "singers": 9500, + "phenomenon": 9501, + "Rhode": 9502, + "Carlo": 9503, + "demanding": 9504, + "findings": 9505, + "manual": 9506, + "varying": 9507, + "Fellowship": 9508, + "generate": 9509, + "safely": 9510, + "heated": 9511, + "withdrawn": 9512, + "##ao": 9513, + "headquartered": 9514, + "##zon": 9515, + "##lav": 9516, + "##ency": 9517, + "Col": 9518, + "Memphis": 9519, + "imposed": 9520, + "rivals": 9521, + "Planet": 9522, + "healing": 9523, + "##hs": 9524, + "ensemble": 9525, + "Warriors": 9526, + "##bone": 9527, + "cult": 9528, + "Frankfurt": 9529, + "##HL": 9530, + "diversity": 9531, + "Gerald": 9532, + "intermediate": 9533, + "##izes": 9534, + "reactions": 9535, + "Sister": 9536, + "##ously": 9537, + "##lica": 9538, + "quantum": 9539, + "awkward": 9540, + "mentions": 9541, + "pursuit": 9542, + "##ography": 9543, + "varies": 9544, + "profession": 9545, + "molecular": 9546, + "consequence": 9547, + "lectures": 9548, + "cracked": 9549, + "103": 9550, + "slowed": 9551, + "##tsu": 9552, + "cheese": 9553, + "upgraded": 9554, + "suite": 9555, + "substance": 9556, + "Kingston": 9557, + "1800": 9558, + "Idaho": 9559, + "Theory": 9560, + "##een": 9561, + "ain": 9562, + "Carson": 9563, + "Molly": 9564, + "##OR": 9565, + "configuration": 9566, + "Whitney": 9567, + "reads": 9568, + "audiences": 9569, + "##tie": 9570, + "Geneva": 9571, + "Outside": 9572, + "##nen": 9573, + "##had": 9574, + "transit": 9575, + "volleyball": 9576, + "Randy": 9577, + "Chad": 9578, + "rubber": 9579, + "motorcycle": 9580, + "respected": 9581, + "eager": 9582, + "Level": 9583, + "coin": 9584, + "##lets": 9585, + "neighbouring": 9586, + "##wski": 9587, + "confident": 9588, + "##cious": 9589, + "poll": 9590, + "uncertain": 9591, + "punch": 9592, + "thesis": 9593, + "Tucker": 9594, + "IATA": 9595, + "Alec": 9596, + "##ographic": 9597, + "##law": 9598, + "1841": 9599, + "desperately": 9600, + "1812": 9601, + "Lithuania": 9602, + "accent": 9603, + "Cox": 9604, + "lightning": 9605, + "skirt": 9606, + "##load": 9607, + "Burns": 9608, + "Dynasty": 9609, + "##ug": 9610, + "chapters": 9611, + "Working": 9612, + "dense": 9613, + "Morocco": 9614, + "##kins": 9615, + "casting": 9616, + "Set": 9617, + "activated": 9618, + "oral": 9619, + "Brien": 9620, + "horn": 9621, + "HIV": 9622, + "dawn": 9623, + "stumbled": 9624, + "altar": 9625, + "tore": 9626, + "considerably": 9627, + "Nicole": 9628, + "interchange": 9629, + "registration": 9630, + "biography": 9631, + "Hull": 9632, + "Stan": 9633, + "bulk": 9634, + "consent": 9635, + "Pierce": 9636, + "##ER": 9637, + "Fifth": 9638, + "marched": 9639, + "terrorist": 9640, + "##piece": 9641, + "##itt": 9642, + "Presidential": 9643, + "Heather": 9644, + "staged": 9645, + "Plant": 9646, + "relegation": 9647, + "sporting": 9648, + "joins": 9649, + "##ced": 9650, + "Pakistani": 9651, + "dynamic": 9652, + "Heat": 9653, + "##lf": 9654, + "ourselves": 9655, + "Except": 9656, + "Elliott": 9657, + "nationally": 9658, + "goddess": 9659, + "investors": 9660, + "Burke": 9661, + "Jackie": 9662, + "##ā": 9663, + "##RA": 9664, + "Tristan": 9665, + "Associate": 9666, + "Tuesday": 9667, + "scope": 9668, + "Near": 9669, + "bunch": 9670, + "##abad": 9671, + "##ben": 9672, + "sunlight": 9673, + "##aire": 9674, + "manga": 9675, + "Willie": 9676, + "trucks": 9677, + "boarding": 9678, + "Lion": 9679, + "lawsuit": 9680, + "Learning": 9681, + "Der": 9682, + "pounding": 9683, + "awful": 9684, + "##mine": 9685, + "IT": 9686, + "Legend": 9687, + "romance": 9688, + "Serie": 9689, + "AC": 9690, + "gut": 9691, + "precious": 9692, + "Robertson": 9693, + "hometown": 9694, + "realm": 9695, + "Guards": 9696, + "Tag": 9697, + "batting": 9698, + "##vre": 9699, + "halt": 9700, + "conscious": 9701, + "1838": 9702, + "acquire": 9703, + "collar": 9704, + "##gg": 9705, + "##ops": 9706, + "Herald": 9707, + "nationwide": 9708, + "citizenship": 9709, + "Aircraft": 9710, + "decrease": 9711, + "em": 9712, + "Fiction": 9713, + "Female": 9714, + "corporation": 9715, + "Located": 9716, + "##ip": 9717, + "fights": 9718, + "unconscious": 9719, + "Tampa": 9720, + "Poetry": 9721, + "lobby": 9722, + "Malta": 9723, + "##sar": 9724, + "##bie": 9725, + "layout": 9726, + "Tate": 9727, + "reader": 9728, + "stained": 9729, + "##bre": 9730, + "##rst": 9731, + "##ulate": 9732, + "loudly": 9733, + "Eva": 9734, + "Cohen": 9735, + "exploded": 9736, + "Merit": 9737, + "Maya": 9738, + "##rable": 9739, + "Rovers": 9740, + "##IC": 9741, + "Morrison": 9742, + "Should": 9743, + "vinyl": 9744, + "##mie": 9745, + "onwards": 9746, + "##gie": 9747, + "vicinity": 9748, + "Wildlife": 9749, + "probability": 9750, + "Mar": 9751, + "Barnes": 9752, + "##ook": 9753, + "spinning": 9754, + "Moses": 9755, + "##vie": 9756, + "Surrey": 9757, + "Planning": 9758, + "conferences": 9759, + "protective": 9760, + "Plaza": 9761, + "deny": 9762, + "Canterbury": 9763, + "manor": 9764, + "Estate": 9765, + "tilted": 9766, + "comics": 9767, + "IBM": 9768, + "destroying": 9769, + "server": 9770, + "Dorothy": 9771, + "##horn": 9772, + "Oslo": 9773, + "lesser": 9774, + "heaven": 9775, + "Marshal": 9776, + "scales": 9777, + "strikes": 9778, + "##ath": 9779, + "firms": 9780, + "attract": 9781, + "##BS": 9782, + "controlling": 9783, + "Bradford": 9784, + "southeastern": 9785, + "Amazon": 9786, + "Travis": 9787, + "Janet": 9788, + "governed": 9789, + "1842": 9790, + "Train": 9791, + "Holden": 9792, + "bleeding": 9793, + "gifts": 9794, + "rent": 9795, + "1839": 9796, + "palms": 9797, + "##ū": 9798, + "judicial": 9799, + "Ho": 9800, + "Finals": 9801, + "conflicts": 9802, + "unlikely": 9803, + "draws": 9804, + "##cies": 9805, + "compensation": 9806, + "adds": 9807, + "elderly": 9808, + "Anton": 9809, + "lasting": 9810, + "Nintendo": 9811, + "codes": 9812, + "ministers": 9813, + "pot": 9814, + "associations": 9815, + "capabilities": 9816, + "##cht": 9817, + "libraries": 9818, + "##sie": 9819, + "chances": 9820, + "performers": 9821, + "runway": 9822, + "##af": 9823, + "##nder": 9824, + "Mid": 9825, + "Vocals": 9826, + "##uch": 9827, + "##eon": 9828, + "interpreted": 9829, + "priority": 9830, + "Uganda": 9831, + "ruined": 9832, + "Mathematics": 9833, + "cook": 9834, + "AFL": 9835, + "Lutheran": 9836, + "AIDS": 9837, + "Capitol": 9838, + "chase": 9839, + "axis": 9840, + "Moreover": 9841, + "María": 9842, + "Saxon": 9843, + "storyline": 9844, + "##ffed": 9845, + "Tears": 9846, + "Kid": 9847, + "cent": 9848, + "colours": 9849, + "Sex": 9850, + "##long": 9851, + "pm": 9852, + "blonde": 9853, + "Edwin": 9854, + "CE": 9855, + "diocese": 9856, + "##ents": 9857, + "##boy": 9858, + "Inn": 9859, + "##ller": 9860, + "Saskatchewan": 9861, + "##kh": 9862, + "stepping": 9863, + "Windsor": 9864, + "##oka": 9865, + "##eri": 9866, + "Xavier": 9867, + "Resources": 9868, + "1843": 9869, + "##top": 9870, + "##rad": 9871, + "##lls": 9872, + "Testament": 9873, + "poorly": 9874, + "1836": 9875, + "drifted": 9876, + "slope": 9877, + "CIA": 9878, + "remix": 9879, + "Lords": 9880, + "mature": 9881, + "hosting": 9882, + "diamond": 9883, + "beds": 9884, + "##ncies": 9885, + "luxury": 9886, + "trigger": 9887, + "##lier": 9888, + "preliminary": 9889, + "hybrid": 9890, + "journalists": 9891, + "Enterprise": 9892, + "proven": 9893, + "expelled": 9894, + "insects": 9895, + "Beautiful": 9896, + "lifestyle": 9897, + "vanished": 9898, + "##ake": 9899, + "##ander": 9900, + "matching": 9901, + "surfaces": 9902, + "Dominican": 9903, + "Kids": 9904, + "referendum": 9905, + "Orlando": 9906, + "Truth": 9907, + "Sandy": 9908, + "privacy": 9909, + "Calgary": 9910, + "Speaker": 9911, + "sts": 9912, + "Nobody": 9913, + "shifting": 9914, + "##gers": 9915, + "Roll": 9916, + "Armenia": 9917, + "Hand": 9918, + "##ES": 9919, + "106": 9920, + "##ont": 9921, + "Guild": 9922, + "larvae": 9923, + "Stock": 9924, + "flame": 9925, + "gravity": 9926, + "enhanced": 9927, + "Marion": 9928, + "surely": 9929, + "##tering": 9930, + "Tales": 9931, + "algorithm": 9932, + "Emmy": 9933, + "darker": 9934, + "VIII": 9935, + "##lash": 9936, + "hamlet": 9937, + "deliberately": 9938, + "occurring": 9939, + "choices": 9940, + "Gage": 9941, + "fees": 9942, + "settling": 9943, + "ridiculous": 9944, + "##ela": 9945, + "Sons": 9946, + "cop": 9947, + "custody": 9948, + "##ID": 9949, + "proclaimed": 9950, + "Cardinals": 9951, + "##pm": 9952, + "Metal": 9953, + "Ana": 9954, + "1835": 9955, + "clue": 9956, + "Cardiff": 9957, + "riders": 9958, + "observations": 9959, + "MA": 9960, + "sometime": 9961, + "##och": 9962, + "performer": 9963, + "intact": 9964, + "Points": 9965, + "allegations": 9966, + "rotation": 9967, + "Tennis": 9968, + "tenor": 9969, + "Directors": 9970, + "##ats": 9971, + "Transit": 9972, + "thigh": 9973, + "Complex": 9974, + "##works": 9975, + "twentieth": 9976, + "Factory": 9977, + "doctrine": 9978, + "Daddy": 9979, + "##ished": 9980, + "pretend": 9981, + "Winston": 9982, + "cigarette": 9983, + "##IA": 9984, + "specimens": 9985, + "hydrogen": 9986, + "smoking": 9987, + "mathematical": 9988, + "arguments": 9989, + "openly": 9990, + "developer": 9991, + "##iro": 9992, + "fists": 9993, + "somebody": 9994, + "##san": 9995, + "Standing": 9996, + "Caleb": 9997, + "intelligent": 9998, + "Stay": 9999, + "Interior": 10000, + "echoed": 10001, + "Valentine": 10002, + "varieties": 10003, + "Brady": 10004, + "cluster": 10005, + "Ever": 10006, + "voyage": 10007, + "##of": 10008, + "deposits": 10009, + "ultimate": 10010, + "Hayes": 10011, + "horizontal": 10012, + "proximity": 10013, + "##ás": 10014, + "estates": 10015, + "exploration": 10016, + "NATO": 10017, + "Classical": 10018, + "##most": 10019, + "bills": 10020, + "condemned": 10021, + "1832": 10022, + "hunger": 10023, + "##ato": 10024, + "planes": 10025, + "deserve": 10026, + "offense": 10027, + "sequences": 10028, + "rendered": 10029, + "acceptance": 10030, + "##ony": 10031, + "manufacture": 10032, + "Plymouth": 10033, + "innovative": 10034, + "predicted": 10035, + "##RC": 10036, + "Fantasy": 10037, + "##une": 10038, + "supporter": 10039, + "absent": 10040, + "Picture": 10041, + "bassist": 10042, + "rescued": 10043, + "##MC": 10044, + "Ahmed": 10045, + "Monte": 10046, + "##sts": 10047, + "##rius": 10048, + "insane": 10049, + "novelist": 10050, + "##és": 10051, + "agrees": 10052, + "Antarctic": 10053, + "Lancaster": 10054, + "Hopkins": 10055, + "calculated": 10056, + "startled": 10057, + "##star": 10058, + "tribal": 10059, + "Amendment": 10060, + "##hoe": 10061, + "invisible": 10062, + "patron": 10063, + "deer": 10064, + "Walk": 10065, + "tracking": 10066, + "Lyon": 10067, + "tickets": 10068, + "##ED": 10069, + "philosopher": 10070, + "compounds": 10071, + "chuckled": 10072, + "##wi": 10073, + "pound": 10074, + "loyalty": 10075, + "Academic": 10076, + "petition": 10077, + "refuses": 10078, + "marking": 10079, + "Mercury": 10080, + "northeastern": 10081, + "dimensions": 10082, + "scandal": 10083, + "Canyon": 10084, + "patch": 10085, + "publish": 10086, + "##oning": 10087, + "Peak": 10088, + "minds": 10089, + "##boro": 10090, + "Presbyterian": 10091, + "Hardy": 10092, + "theoretical": 10093, + "magnitude": 10094, + "bombs": 10095, + "cage": 10096, + "##ders": 10097, + "##kai": 10098, + "measuring": 10099, + "explaining": 10100, + "avoiding": 10101, + "touchdowns": 10102, + "Card": 10103, + "theology": 10104, + "##ured": 10105, + "Popular": 10106, + "export": 10107, + "suspicious": 10108, + "Probably": 10109, + "photograph": 10110, + "Lou": 10111, + "Parks": 10112, + "Arms": 10113, + "compact": 10114, + "Apparently": 10115, + "excess": 10116, + "Banks": 10117, + "lied": 10118, + "stunned": 10119, + "territorial": 10120, + "Filipino": 10121, + "spectrum": 10122, + "learns": 10123, + "wash": 10124, + "imprisonment": 10125, + "ugly": 10126, + "##rose": 10127, + "Albany": 10128, + "Erik": 10129, + "sends": 10130, + "##hara": 10131, + "##rid": 10132, + "consumed": 10133, + "##gling": 10134, + "Belgrade": 10135, + "Da": 10136, + "opposing": 10137, + "Magnus": 10138, + "footsteps": 10139, + "glowing": 10140, + "delicate": 10141, + "Alexandria": 10142, + "Ludwig": 10143, + "gorgeous": 10144, + "Bros": 10145, + "Index": 10146, + "##PA": 10147, + "customs": 10148, + "preservation": 10149, + "bonds": 10150, + "##mond": 10151, + "environments": 10152, + "##nto": 10153, + "instructed": 10154, + "parted": 10155, + "adoption": 10156, + "locality": 10157, + "workshops": 10158, + "goalkeeper": 10159, + "##rik": 10160, + "##uma": 10161, + "Brighton": 10162, + "Slovenia": 10163, + "##ulating": 10164, + "##tical": 10165, + "towel": 10166, + "hugged": 10167, + "stripped": 10168, + "Bears": 10169, + "upright": 10170, + "Wagner": 10171, + "##aux": 10172, + "secretly": 10173, + "Adventures": 10174, + "nest": 10175, + "Course": 10176, + "Lauren": 10177, + "Boeing": 10178, + "Abdul": 10179, + "Lakes": 10180, + "450": 10181, + "##cu": 10182, + "USSR": 10183, + "caps": 10184, + "Chan": 10185, + "##nna": 10186, + "conceived": 10187, + "Actually": 10188, + "Belfast": 10189, + "Lithuanian": 10190, + "concentrate": 10191, + "possess": 10192, + "militia": 10193, + "pine": 10194, + "protagonist": 10195, + "Helena": 10196, + "##PS": 10197, + "##band": 10198, + "Belle": 10199, + "Clara": 10200, + "Reform": 10201, + "currency": 10202, + "pregnancy": 10203, + "1500": 10204, + "##rim": 10205, + "Isabella": 10206, + "hull": 10207, + "Name": 10208, + "trend": 10209, + "journalism": 10210, + "diet": 10211, + "##mel": 10212, + "Recording": 10213, + "acclaimed": 10214, + "Tang": 10215, + "Jace": 10216, + "steering": 10217, + "vacant": 10218, + "suggestion": 10219, + "costume": 10220, + "laser": 10221, + "##š": 10222, + "##ink": 10223, + "##pan": 10224, + "##vić": 10225, + "integral": 10226, + "achievements": 10227, + "wise": 10228, + "classroom": 10229, + "unions": 10230, + "southwestern": 10231, + "##uer": 10232, + "Garcia": 10233, + "toss": 10234, + "Tara": 10235, + "Large": 10236, + "##tate": 10237, + "evident": 10238, + "responsibilities": 10239, + "populated": 10240, + "satisfaction": 10241, + "##bia": 10242, + "casual": 10243, + "Ecuador": 10244, + "##ght": 10245, + "arose": 10246, + "##ović": 10247, + "Cornwall": 10248, + "embrace": 10249, + "refuse": 10250, + "Heavyweight": 10251, + "XI": 10252, + "Eden": 10253, + "activists": 10254, + "##uation": 10255, + "biology": 10256, + "##shan": 10257, + "fraud": 10258, + "Fuck": 10259, + "matched": 10260, + "legacy": 10261, + "Rivers": 10262, + "missionary": 10263, + "extraordinary": 10264, + "Didn": 10265, + "holder": 10266, + "wickets": 10267, + "crucial": 10268, + "Writers": 10269, + "Hurricane": 10270, + "Iceland": 10271, + "gross": 10272, + "trumpet": 10273, + "accordance": 10274, + "hurry": 10275, + "flooded": 10276, + "doctorate": 10277, + "Albania": 10278, + "##yi": 10279, + "united": 10280, + "deceased": 10281, + "jealous": 10282, + "grief": 10283, + "flute": 10284, + "portraits": 10285, + "##а": 10286, + "pleasant": 10287, + "Founded": 10288, + "Face": 10289, + "crowned": 10290, + "Raja": 10291, + "advisor": 10292, + "Salem": 10293, + "##ec": 10294, + "Achievement": 10295, + "admission": 10296, + "freely": 10297, + "minimal": 10298, + "Sudan": 10299, + "developers": 10300, + "estimate": 10301, + "disabled": 10302, + "##lane": 10303, + "downstairs": 10304, + "Bruno": 10305, + "##pus": 10306, + "pinyin": 10307, + "##ude": 10308, + "lecture": 10309, + "deadly": 10310, + "underlying": 10311, + "optical": 10312, + "witnesses": 10313, + "Combat": 10314, + "Julius": 10315, + "tapped": 10316, + "variants": 10317, + "##like": 10318, + "Colonial": 10319, + "Critics": 10320, + "Similarly": 10321, + "mouse": 10322, + "voltage": 10323, + "sculptor": 10324, + "Concert": 10325, + "salary": 10326, + "Frances": 10327, + "##ground": 10328, + "hook": 10329, + "premises": 10330, + "Software": 10331, + "instructor": 10332, + "nominee": 10333, + "##ited": 10334, + "fog": 10335, + "slopes": 10336, + "##zu": 10337, + "vegetation": 10338, + "sail": 10339, + "##rch": 10340, + "Body": 10341, + "Apart": 10342, + "atop": 10343, + "View": 10344, + "utility": 10345, + "ribs": 10346, + "cab": 10347, + "migration": 10348, + "##wyn": 10349, + "bounded": 10350, + "2019": 10351, + "pillow": 10352, + "trails": 10353, + "##ub": 10354, + "Halifax": 10355, + "shade": 10356, + "Rush": 10357, + "##lah": 10358, + "##dian": 10359, + "Notre": 10360, + "interviewed": 10361, + "Alexandra": 10362, + "Springfield": 10363, + "Indeed": 10364, + "rubbing": 10365, + "dozens": 10366, + "amusement": 10367, + "legally": 10368, + "##lers": 10369, + "Jill": 10370, + "Cinema": 10371, + "ignoring": 10372, + "Choice": 10373, + "##ures": 10374, + "pockets": 10375, + "##nell": 10376, + "laying": 10377, + "Blair": 10378, + "tackles": 10379, + "separately": 10380, + "##teen": 10381, + "Criminal": 10382, + "performs": 10383, + "theorem": 10384, + "Communication": 10385, + "suburbs": 10386, + "##iel": 10387, + "competitors": 10388, + "rows": 10389, + "##hai": 10390, + "Manitoba": 10391, + "Eleanor": 10392, + "interactions": 10393, + "nominations": 10394, + "assassination": 10395, + "##dis": 10396, + "Edmonton": 10397, + "diving": 10398, + "##dine": 10399, + "essay": 10400, + "##tas": 10401, + "AFC": 10402, + "Edge": 10403, + "directing": 10404, + "imagination": 10405, + "sunk": 10406, + "implement": 10407, + "Theodore": 10408, + "trembling": 10409, + "sealed": 10410, + "##rock": 10411, + "Nobel": 10412, + "##ancy": 10413, + "##dorf": 10414, + "##chen": 10415, + "genuine": 10416, + "apartments": 10417, + "Nicolas": 10418, + "AA": 10419, + "Bach": 10420, + "Globe": 10421, + "Store": 10422, + "220": 10423, + "##10": 10424, + "Rochester": 10425, + "##ño": 10426, + "alert": 10427, + "107": 10428, + "Beck": 10429, + "##nin": 10430, + "Naples": 10431, + "Basin": 10432, + "Crawford": 10433, + "fears": 10434, + "Tracy": 10435, + "##hen": 10436, + "disk": 10437, + "##pped": 10438, + "seventeen": 10439, + "Lead": 10440, + "backup": 10441, + "reconstruction": 10442, + "##lines": 10443, + "terrified": 10444, + "sleeve": 10445, + "nicknamed": 10446, + "popped": 10447, + "##making": 10448, + "##ern": 10449, + "Holiday": 10450, + "Gospel": 10451, + "ibn": 10452, + "##ime": 10453, + "convert": 10454, + "divine": 10455, + "resolved": 10456, + "##quet": 10457, + "ski": 10458, + "realizing": 10459, + "##RT": 10460, + "Legislature": 10461, + "reservoir": 10462, + "Rain": 10463, + "sinking": 10464, + "rainfall": 10465, + "elimination": 10466, + "challenging": 10467, + "tobacco": 10468, + "##outs": 10469, + "Given": 10470, + "smallest": 10471, + "Commercial": 10472, + "pin": 10473, + "rebel": 10474, + "comedian": 10475, + "exchanged": 10476, + "airing": 10477, + "dish": 10478, + "Salvador": 10479, + "promising": 10480, + "##wl": 10481, + "relax": 10482, + "presenter": 10483, + "toll": 10484, + "aerial": 10485, + "##eh": 10486, + "Fletcher": 10487, + "brass": 10488, + "disappear": 10489, + "zones": 10490, + "adjusted": 10491, + "contacts": 10492, + "##lk": 10493, + "sensed": 10494, + "Walt": 10495, + "mild": 10496, + "toes": 10497, + "flies": 10498, + "shame": 10499, + "considers": 10500, + "wildlife": 10501, + "Hanna": 10502, + "Arsenal": 10503, + "Ladies": 10504, + "naming": 10505, + "##ishing": 10506, + "anxiety": 10507, + "discussions": 10508, + "cute": 10509, + "undertaken": 10510, + "Cash": 10511, + "strain": 10512, + "Wyoming": 10513, + "dishes": 10514, + "precise": 10515, + "Angela": 10516, + "##ided": 10517, + "hostile": 10518, + "twins": 10519, + "115": 10520, + "Built": 10521, + "##pel": 10522, + "Online": 10523, + "tactics": 10524, + "Newman": 10525, + "##bourne": 10526, + "unclear": 10527, + "repairs": 10528, + "embarrassed": 10529, + "listing": 10530, + "tugged": 10531, + "Vale": 10532, + "##gin": 10533, + "Meredith": 10534, + "bout": 10535, + "##cle": 10536, + "velocity": 10537, + "tips": 10538, + "froze": 10539, + "evaluation": 10540, + "demonstrate": 10541, + "##card": 10542, + "criticised": 10543, + "Nash": 10544, + "lineup": 10545, + "Rao": 10546, + "monks": 10547, + "bacteria": 10548, + "lease": 10549, + "##lish": 10550, + "frightened": 10551, + "den": 10552, + "revived": 10553, + "finale": 10554, + "##rance": 10555, + "flee": 10556, + "Letters": 10557, + "decreased": 10558, + "##oh": 10559, + "Sounds": 10560, + "wrap": 10561, + "Sharon": 10562, + "incidents": 10563, + "renovated": 10564, + "everybody": 10565, + "stole": 10566, + "Bath": 10567, + "boxing": 10568, + "1815": 10569, + "withdraw": 10570, + "backs": 10571, + "interim": 10572, + "react": 10573, + "murders": 10574, + "Rhodes": 10575, + "Copa": 10576, + "framed": 10577, + "flown": 10578, + "Estonia": 10579, + "Heavy": 10580, + "explored": 10581, + "##rra": 10582, + "##GA": 10583, + "##ali": 10584, + "Istanbul": 10585, + "1834": 10586, + "##rite": 10587, + "##aging": 10588, + "##ues": 10589, + "Episcopal": 10590, + "arc": 10591, + "orientation": 10592, + "Maxwell": 10593, + "infected": 10594, + "##rot": 10595, + "BCE": 10596, + "Brook": 10597, + "grasp": 10598, + "Roberto": 10599, + "Excellence": 10600, + "108": 10601, + "withdrawal": 10602, + "Marines": 10603, + "rider": 10604, + "Lo": 10605, + "##sin": 10606, + "##run": 10607, + "Subsequently": 10608, + "garrison": 10609, + "hurricane": 10610, + "facade": 10611, + "Prussia": 10612, + "crushed": 10613, + "enterprise": 10614, + "##mber": 10615, + "Twitter": 10616, + "Generation": 10617, + "Physical": 10618, + "Sugar": 10619, + "editing": 10620, + "communicate": 10621, + "Ellie": 10622, + "##hurst": 10623, + "Ernst": 10624, + "wagon": 10625, + "promotional": 10626, + "conquest": 10627, + "Parliamentary": 10628, + "courtyard": 10629, + "lawyers": 10630, + "Superman": 10631, + "email": 10632, + "Prussian": 10633, + "lately": 10634, + "lecturer": 10635, + "Singer": 10636, + "Majesty": 10637, + "Paradise": 10638, + "sooner": 10639, + "Heath": 10640, + "slot": 10641, + "curves": 10642, + "convoy": 10643, + "##vian": 10644, + "induced": 10645, + "synonym": 10646, + "breeze": 10647, + "##plane": 10648, + "##ox": 10649, + "peered": 10650, + "Coalition": 10651, + "##hia": 10652, + "odds": 10653, + "##esh": 10654, + "##lina": 10655, + "Tomorrow": 10656, + "Nadu": 10657, + "##ico": 10658, + "##rah": 10659, + "damp": 10660, + "autonomous": 10661, + "console": 10662, + "Victory": 10663, + "counts": 10664, + "Luxembourg": 10665, + "intimate": 10666, + "Archived": 10667, + "Carroll": 10668, + "spy": 10669, + "Zero": 10670, + "habit": 10671, + "Always": 10672, + "faction": 10673, + "teenager": 10674, + "Johnston": 10675, + "chaos": 10676, + "ruin": 10677, + "commerce": 10678, + "blog": 10679, + "##shed": 10680, + "##the": 10681, + "reliable": 10682, + "Word": 10683, + "Yu": 10684, + "Norton": 10685, + "parade": 10686, + "Catholics": 10687, + "damned": 10688, + "##iling": 10689, + "surgeon": 10690, + "##tia": 10691, + "Allison": 10692, + "Jonas": 10693, + "remarked": 10694, + "##ès": 10695, + "idiot": 10696, + "Making": 10697, + "proposals": 10698, + "Industries": 10699, + "strategies": 10700, + "artifacts": 10701, + "batteries": 10702, + "reward": 10703, + "##vers": 10704, + "Agricultural": 10705, + "distinguish": 10706, + "lengths": 10707, + "Jeffrey": 10708, + "Progressive": 10709, + "kicking": 10710, + "Patricia": 10711, + "##gio": 10712, + "ballot": 10713, + "##ios": 10714, + "skilled": 10715, + "##gation": 10716, + "Colt": 10717, + "limestone": 10718, + "##AS": 10719, + "peninsula": 10720, + "##itis": 10721, + "LA": 10722, + "hotels": 10723, + "shapes": 10724, + "Crime": 10725, + "depicting": 10726, + "northwestern": 10727, + "HD": 10728, + "silly": 10729, + "Das": 10730, + "##²": 10731, + "##ws": 10732, + "##ash": 10733, + "##matic": 10734, + "thermal": 10735, + "Has": 10736, + "forgive": 10737, + "surrendered": 10738, + "Palm": 10739, + "Nacional": 10740, + "drank": 10741, + "haired": 10742, + "Mercedes": 10743, + "##foot": 10744, + "loading": 10745, + "Timothy": 10746, + "##roll": 10747, + "mechanisms": 10748, + "traces": 10749, + "digging": 10750, + "discussing": 10751, + "Natalie": 10752, + "##zhou": 10753, + "Forbes": 10754, + "landmark": 10755, + "Anyway": 10756, + "Manor": 10757, + "conspiracy": 10758, + "gym": 10759, + "knocking": 10760, + "viewing": 10761, + "Formation": 10762, + "Pink": 10763, + "Beauty": 10764, + "limbs": 10765, + "Phillip": 10766, + "sponsor": 10767, + "Joy": 10768, + "granite": 10769, + "Harbour": 10770, + "##ero": 10771, + "payments": 10772, + "Ballet": 10773, + "conviction": 10774, + "##dam": 10775, + "Hood": 10776, + "estimates": 10777, + "lacked": 10778, + "Mad": 10779, + "Jorge": 10780, + "##wen": 10781, + "refuge": 10782, + "##LA": 10783, + "invaded": 10784, + "Kat": 10785, + "suburban": 10786, + "##fold": 10787, + "investigated": 10788, + "Ari": 10789, + "complained": 10790, + "creek": 10791, + "Georges": 10792, + "##uts": 10793, + "powder": 10794, + "accepting": 10795, + "deserved": 10796, + "carpet": 10797, + "Thunder": 10798, + "molecules": 10799, + "Legal": 10800, + "cliff": 10801, + "strictly": 10802, + "enrollment": 10803, + "ranch": 10804, + "##rg": 10805, + "##mba": 10806, + "proportion": 10807, + "renovation": 10808, + "crop": 10809, + "grabbing": 10810, + "##liga": 10811, + "finest": 10812, + "entries": 10813, + "receptor": 10814, + "helmet": 10815, + "blown": 10816, + "Listen": 10817, + "flagship": 10818, + "workshop": 10819, + "resolve": 10820, + "nails": 10821, + "Shannon": 10822, + "portal": 10823, + "jointly": 10824, + "shining": 10825, + "Violet": 10826, + "overwhelming": 10827, + "upward": 10828, + "Mick": 10829, + "proceedings": 10830, + "##dies": 10831, + "##aring": 10832, + "Laurence": 10833, + "Churchill": 10834, + "##rice": 10835, + "commit": 10836, + "170": 10837, + "inclusion": 10838, + "Examples": 10839, + "##verse": 10840, + "##rma": 10841, + "fury": 10842, + "paths": 10843, + "##SC": 10844, + "ankle": 10845, + "nerves": 10846, + "Chemistry": 10847, + "rectangular": 10848, + "sworn": 10849, + "screenplay": 10850, + "cake": 10851, + "Mann": 10852, + "Seoul": 10853, + "Animal": 10854, + "sizes": 10855, + "Speed": 10856, + "vol": 10857, + "Population": 10858, + "Southwest": 10859, + "Hold": 10860, + "continuously": 10861, + "Qualified": 10862, + "wishing": 10863, + "Fighting": 10864, + "Made": 10865, + "disappointment": 10866, + "Portsmouth": 10867, + "Thirty": 10868, + "##beck": 10869, + "Ahmad": 10870, + "teammate": 10871, + "MLB": 10872, + "graph": 10873, + "Charleston": 10874, + "realizes": 10875, + "##dium": 10876, + "exhibits": 10877, + "preventing": 10878, + "##int": 10879, + "fever": 10880, + "rivalry": 10881, + "Male": 10882, + "mentally": 10883, + "dull": 10884, + "##lor": 10885, + "##rich": 10886, + "consistently": 10887, + "##igan": 10888, + "Madame": 10889, + "certificate": 10890, + "suited": 10891, + "Krishna": 10892, + "accuracy": 10893, + "Webb": 10894, + "Budapest": 10895, + "Rex": 10896, + "1831": 10897, + "Cornell": 10898, + "OK": 10899, + "surveillance": 10900, + "##gated": 10901, + "habitats": 10902, + "Adventure": 10903, + "Conrad": 10904, + "Superior": 10905, + "Gay": 10906, + "sofa": 10907, + "aka": 10908, + "boot": 10909, + "Statistics": 10910, + "Jessie": 10911, + "Liberation": 10912, + "##lip": 10913, + "##rier": 10914, + "brands": 10915, + "saint": 10916, + "Heinrich": 10917, + "Christine": 10918, + "bath": 10919, + "Rhine": 10920, + "ballet": 10921, + "Jin": 10922, + "consensus": 10923, + "chess": 10924, + "Arctic": 10925, + "stack": 10926, + "furious": 10927, + "cheap": 10928, + "toy": 10929, + "##yre": 10930, + "##face": 10931, + "##gging": 10932, + "gastropod": 10933, + "##nne": 10934, + "Romans": 10935, + "membrane": 10936, + "answering": 10937, + "25th": 10938, + "architects": 10939, + "sustainable": 10940, + "##yne": 10941, + "Hon": 10942, + "1814": 10943, + "Baldwin": 10944, + "dome": 10945, + "##awa": 10946, + "##zen": 10947, + "celebrity": 10948, + "enclosed": 10949, + "##uit": 10950, + "##mmer": 10951, + "Electronic": 10952, + "locals": 10953, + "##CE": 10954, + "supervision": 10955, + "mineral": 10956, + "Chemical": 10957, + "Slovakia": 10958, + "alley": 10959, + "hub": 10960, + "##az": 10961, + "heroes": 10962, + "Creative": 10963, + "##AM": 10964, + "incredible": 10965, + "politically": 10966, + "ESPN": 10967, + "yanked": 10968, + "halls": 10969, + "Aboriginal": 10970, + "Greatest": 10971, + "yield": 10972, + "##20": 10973, + "congressional": 10974, + "robot": 10975, + "Kiss": 10976, + "welcomed": 10977, + "MS": 10978, + "speeds": 10979, + "proceed": 10980, + "Sherman": 10981, + "eased": 10982, + "Greene": 10983, + "Walsh": 10984, + "Geoffrey": 10985, + "variables": 10986, + "rocky": 10987, + "##print": 10988, + "acclaim": 10989, + "Reverend": 10990, + "Wonder": 10991, + "tonnes": 10992, + "recurring": 10993, + "Dawson": 10994, + "continent": 10995, + "finite": 10996, + "AP": 10997, + "continental": 10998, + "ID": 10999, + "facilitate": 11000, + "essays": 11001, + "Rafael": 11002, + "Neal": 11003, + "1833": 11004, + "ancestors": 11005, + "##met": 11006, + "##gic": 11007, + "Especially": 11008, + "teenage": 11009, + "frustrated": 11010, + "Jules": 11011, + "cock": 11012, + "expense": 11013, + "##oli": 11014, + "##old": 11015, + "blocking": 11016, + "Notable": 11017, + "prohibited": 11018, + "ca": 11019, + "dock": 11020, + "organize": 11021, + "##wald": 11022, + "Burma": 11023, + "Gloria": 11024, + "dimension": 11025, + "aftermath": 11026, + "choosing": 11027, + "Mickey": 11028, + "torpedo": 11029, + "pub": 11030, + "##used": 11031, + "manuscripts": 11032, + "laps": 11033, + "Ulster": 11034, + "staircase": 11035, + "sphere": 11036, + "Insurance": 11037, + "Contest": 11038, + "lens": 11039, + "risks": 11040, + "investigations": 11041, + "ERA": 11042, + "glare": 11043, + "##play": 11044, + "Graduate": 11045, + "auction": 11046, + "Chronicle": 11047, + "##tric": 11048, + "##50": 11049, + "Coming": 11050, + "seating": 11051, + "Wade": 11052, + "seeks": 11053, + "inland": 11054, + "Thames": 11055, + "Rather": 11056, + "butterfly": 11057, + "contracted": 11058, + "positioned": 11059, + "consumers": 11060, + "contestants": 11061, + "fragments": 11062, + "Yankees": 11063, + "Santos": 11064, + "administrator": 11065, + "hypothesis": 11066, + "retire": 11067, + "Denis": 11068, + "agreements": 11069, + "Winnipeg": 11070, + "##rill": 11071, + "1820": 11072, + "trophy": 11073, + "crap": 11074, + "shakes": 11075, + "Jenkins": 11076, + "##rium": 11077, + "ya": 11078, + "twist": 11079, + "labels": 11080, + "Maritime": 11081, + "##lings": 11082, + "##iv": 11083, + "111": 11084, + "##ensis": 11085, + "Cairo": 11086, + "Anything": 11087, + "##fort": 11088, + "opinions": 11089, + "crowded": 11090, + "##nian": 11091, + "abandon": 11092, + "##iff": 11093, + "drained": 11094, + "imported": 11095, + "##rr": 11096, + "tended": 11097, + "##rain": 11098, + "Going": 11099, + "introducing": 11100, + "sculptures": 11101, + "bankruptcy": 11102, + "danced": 11103, + "demonstration": 11104, + "stance": 11105, + "settings": 11106, + "gazed": 11107, + "abstract": 11108, + "pet": 11109, + "Calvin": 11110, + "stiff": 11111, + "strongest": 11112, + "wrestler": 11113, + "##dre": 11114, + "Republicans": 11115, + "grace": 11116, + "allocated": 11117, + "cursed": 11118, + "snail": 11119, + "advancing": 11120, + "Return": 11121, + "errors": 11122, + "Mall": 11123, + "presenting": 11124, + "eliminate": 11125, + "Amateur": 11126, + "Institution": 11127, + "counting": 11128, + "##wind": 11129, + "warehouse": 11130, + "##nde": 11131, + "Ethiopia": 11132, + "trailed": 11133, + "hollow": 11134, + "##press": 11135, + "Literary": 11136, + "capability": 11137, + "nursing": 11138, + "preceding": 11139, + "lamp": 11140, + "Thomson": 11141, + "Morton": 11142, + "##ctic": 11143, + "Crew": 11144, + "Close": 11145, + "composers": 11146, + "boom": 11147, + "Clare": 11148, + "missiles": 11149, + "112": 11150, + "hunter": 11151, + "snap": 11152, + "##oni": 11153, + "##tail": 11154, + "Us": 11155, + "declaration": 11156, + "##cock": 11157, + "rally": 11158, + "huh": 11159, + "lion": 11160, + "straightened": 11161, + "Philippe": 11162, + "Sutton": 11163, + "alpha": 11164, + "valued": 11165, + "maker": 11166, + "navigation": 11167, + "detected": 11168, + "favorable": 11169, + "perception": 11170, + "Charter": 11171, + "##ña": 11172, + "Ricky": 11173, + "rebounds": 11174, + "tunnels": 11175, + "slapped": 11176, + "Emergency": 11177, + "supposedly": 11178, + "##act": 11179, + "deployment": 11180, + "socialist": 11181, + "tubes": 11182, + "anybody": 11183, + "corn": 11184, + "##NA": 11185, + "Seminary": 11186, + "heating": 11187, + "pump": 11188, + "##AA": 11189, + "achieving": 11190, + "souls": 11191, + "##ass": 11192, + "Link": 11193, + "##ele": 11194, + "##smith": 11195, + "greeted": 11196, + "Bates": 11197, + "Americas": 11198, + "Elder": 11199, + "cure": 11200, + "contestant": 11201, + "240": 11202, + "fold": 11203, + "Runner": 11204, + "Uh": 11205, + "licked": 11206, + "Politics": 11207, + "committees": 11208, + "neighbors": 11209, + "fairy": 11210, + "Silva": 11211, + "Leipzig": 11212, + "tipped": 11213, + "correctly": 11214, + "exciting": 11215, + "electronics": 11216, + "foundations": 11217, + "cottage": 11218, + "governmental": 11219, + "##hat": 11220, + "allied": 11221, + "claws": 11222, + "presidency": 11223, + "cruel": 11224, + "Agreement": 11225, + "slender": 11226, + "accompanying": 11227, + "precisely": 11228, + "##pass": 11229, + "driveway": 11230, + "swim": 11231, + "Stand": 11232, + "crews": 11233, + "##mission": 11234, + "rely": 11235, + "everyday": 11236, + "Wings": 11237, + "demo": 11238, + "##hic": 11239, + "recreational": 11240, + "min": 11241, + "nationality": 11242, + "##duction": 11243, + "Easter": 11244, + "##hole": 11245, + "canvas": 11246, + "Kay": 11247, + "Leicester": 11248, + "talented": 11249, + "Discovery": 11250, + "shells": 11251, + "##ech": 11252, + "Kerry": 11253, + "Ferguson": 11254, + "Leave": 11255, + "##place": 11256, + "altogether": 11257, + "adopt": 11258, + "butt": 11259, + "wolves": 11260, + "##nsis": 11261, + "##ania": 11262, + "modest": 11263, + "soprano": 11264, + "Boris": 11265, + "##ught": 11266, + "electron": 11267, + "depicts": 11268, + "hid": 11269, + "cruise": 11270, + "differ": 11271, + "treasure": 11272, + "##nch": 11273, + "Gun": 11274, + "Mama": 11275, + "Bengali": 11276, + "trainer": 11277, + "merchants": 11278, + "innovation": 11279, + "presumably": 11280, + "Shirley": 11281, + "bottles": 11282, + "proceeds": 11283, + "Fear": 11284, + "invested": 11285, + "Pirates": 11286, + "particle": 11287, + "Dominic": 11288, + "blamed": 11289, + "Fight": 11290, + "Daisy": 11291, + "##pper": 11292, + "##graphic": 11293, + "nods": 11294, + "knight": 11295, + "Doyle": 11296, + "tales": 11297, + "Carnegie": 11298, + "Evil": 11299, + "Inter": 11300, + "Shore": 11301, + "Nixon": 11302, + "transform": 11303, + "Savannah": 11304, + "##gas": 11305, + "Baltic": 11306, + "stretching": 11307, + "worlds": 11308, + "protocol": 11309, + "Percy": 11310, + "Toby": 11311, + "Heroes": 11312, + "brave": 11313, + "dancers": 11314, + "##aria": 11315, + "backwards": 11316, + "responses": 11317, + "Chi": 11318, + "Gaelic": 11319, + "Berry": 11320, + "crush": 11321, + "embarked": 11322, + "promises": 11323, + "Madonna": 11324, + "researcher": 11325, + "realised": 11326, + "inaugurated": 11327, + "Cherry": 11328, + "Mikhail": 11329, + "Nottingham": 11330, + "reinforced": 11331, + "subspecies": 11332, + "rapper": 11333, + "##kie": 11334, + "Dreams": 11335, + "Re": 11336, + "Damon": 11337, + "Minneapolis": 11338, + "monsters": 11339, + "suspicion": 11340, + "Tel": 11341, + "surroundings": 11342, + "afterward": 11343, + "complaints": 11344, + "OF": 11345, + "sectors": 11346, + "Algeria": 11347, + "lanes": 11348, + "Sabha": 11349, + "objectives": 11350, + "Donna": 11351, + "bothered": 11352, + "distracted": 11353, + "deciding": 11354, + "##ives": 11355, + "##CA": 11356, + "##onia": 11357, + "bishops": 11358, + "Strange": 11359, + "machinery": 11360, + "Voiced": 11361, + "synthesis": 11362, + "reflects": 11363, + "interference": 11364, + "##TS": 11365, + "##ury": 11366, + "keen": 11367, + "##ign": 11368, + "frown": 11369, + "freestyle": 11370, + "ton": 11371, + "Dixon": 11372, + "Sacred": 11373, + "Ruby": 11374, + "Prison": 11375, + "##ión": 11376, + "1825": 11377, + "outfit": 11378, + "##tain": 11379, + "curiosity": 11380, + "##ight": 11381, + "frames": 11382, + "steadily": 11383, + "emigrated": 11384, + "horizon": 11385, + "##erly": 11386, + "Doc": 11387, + "philosophical": 11388, + "Table": 11389, + "UTC": 11390, + "Marina": 11391, + "##DA": 11392, + "secular": 11393, + "##eed": 11394, + "Zimbabwe": 11395, + "cops": 11396, + "Mack": 11397, + "sheriff": 11398, + "Sanskrit": 11399, + "Francesco": 11400, + "catches": 11401, + "questioning": 11402, + "streaming": 11403, + "Kill": 11404, + "testimony": 11405, + "hissed": 11406, + "tackle": 11407, + "countryside": 11408, + "copyright": 11409, + "##IP": 11410, + "Buddhism": 11411, + "##rator": 11412, + "ladder": 11413, + "##ON": 11414, + "Past": 11415, + "rookie": 11416, + "depths": 11417, + "##yama": 11418, + "##ister": 11419, + "##HS": 11420, + "Samantha": 11421, + "Dana": 11422, + "Educational": 11423, + "brows": 11424, + "Hammond": 11425, + "raids": 11426, + "envelope": 11427, + "##sco": 11428, + "##hart": 11429, + "##ulus": 11430, + "epic": 11431, + "detection": 11432, + "Streets": 11433, + "Potter": 11434, + "statistical": 11435, + "für": 11436, + "ni": 11437, + "accounting": 11438, + "##pot": 11439, + "employer": 11440, + "Sidney": 11441, + "Depression": 11442, + "commands": 11443, + "Tracks": 11444, + "averaged": 11445, + "lets": 11446, + "Ram": 11447, + "longtime": 11448, + "suits": 11449, + "branded": 11450, + "chip": 11451, + "Shield": 11452, + "loans": 11453, + "ought": 11454, + "Said": 11455, + "sip": 11456, + "##rome": 11457, + "requests": 11458, + "Vernon": 11459, + "bordered": 11460, + "veterans": 11461, + "##ament": 11462, + "Marsh": 11463, + "Herzegovina": 11464, + "Pine": 11465, + "##igo": 11466, + "mills": 11467, + "anticipation": 11468, + "reconnaissance": 11469, + "##ef": 11470, + "expectations": 11471, + "protested": 11472, + "arrow": 11473, + "guessed": 11474, + "depot": 11475, + "maternal": 11476, + "weakness": 11477, + "##ap": 11478, + "projected": 11479, + "pour": 11480, + "Carmen": 11481, + "provider": 11482, + "newer": 11483, + "remind": 11484, + "freed": 11485, + "##rily": 11486, + "##wal": 11487, + "##tones": 11488, + "intentions": 11489, + "Fiji": 11490, + "timing": 11491, + "Match": 11492, + "managers": 11493, + "Kosovo": 11494, + "Herman": 11495, + "Wesley": 11496, + "Chang": 11497, + "135": 11498, + "semifinals": 11499, + "shouting": 11500, + "Indo": 11501, + "Janeiro": 11502, + "Chess": 11503, + "Macedonia": 11504, + "Buck": 11505, + "##onies": 11506, + "rulers": 11507, + "Mail": 11508, + "##vas": 11509, + "##sel": 11510, + "MHz": 11511, + "Programme": 11512, + "Task": 11513, + "commercially": 11514, + "subtle": 11515, + "propaganda": 11516, + "spelled": 11517, + "bowling": 11518, + "basically": 11519, + "Raven": 11520, + "1828": 11521, + "Colony": 11522, + "109": 11523, + "##ingham": 11524, + "##wara": 11525, + "anticipated": 11526, + "1829": 11527, + "##iers": 11528, + "graduates": 11529, + "##rton": 11530, + "##fication": 11531, + "endangered": 11532, + "ISO": 11533, + "diagnosed": 11534, + "##tage": 11535, + "exercises": 11536, + "Battery": 11537, + "bolt": 11538, + "poison": 11539, + "cartoon": 11540, + "##ción": 11541, + "hood": 11542, + "bowed": 11543, + "heal": 11544, + "Meyer": 11545, + "Reagan": 11546, + "##wed": 11547, + "subfamily": 11548, + "##gent": 11549, + "momentum": 11550, + "infant": 11551, + "detect": 11552, + "##sse": 11553, + "Chapman": 11554, + "Darwin": 11555, + "mechanics": 11556, + "NSW": 11557, + "Cancer": 11558, + "Brooke": 11559, + "Nuclear": 11560, + "comprised": 11561, + "hire": 11562, + "sanctuary": 11563, + "wingspan": 11564, + "contrary": 11565, + "remembering": 11566, + "surprising": 11567, + "Basic": 11568, + "stealing": 11569, + "OS": 11570, + "hatred": 11571, + "##lled": 11572, + "masters": 11573, + "violation": 11574, + "Rule": 11575, + "##nger": 11576, + "assuming": 11577, + "conquered": 11578, + "louder": 11579, + "robe": 11580, + "Beatles": 11581, + "legitimate": 11582, + "##vation": 11583, + "massacre": 11584, + "Rica": 11585, + "unsuccessfully": 11586, + "poets": 11587, + "##enberg": 11588, + "careers": 11589, + "doubled": 11590, + "premier": 11591, + "battalions": 11592, + "Dubai": 11593, + "Paper": 11594, + "Louisville": 11595, + "gestured": 11596, + "dressing": 11597, + "successive": 11598, + "mumbled": 11599, + "Vic": 11600, + "referee": 11601, + "pupil": 11602, + "##cated": 11603, + "##rre": 11604, + "ceremonies": 11605, + "picks": 11606, + "##IN": 11607, + "diplomat": 11608, + "alike": 11609, + "geographical": 11610, + "rays": 11611, + "##HA": 11612, + "##read": 11613, + "harbour": 11614, + "factories": 11615, + "pastor": 11616, + "playwright": 11617, + "Ultimate": 11618, + "nationalist": 11619, + "uniforms": 11620, + "obtaining": 11621, + "kit": 11622, + "Amber": 11623, + "##pling": 11624, + "screenwriter": 11625, + "ancestry": 11626, + "##cott": 11627, + "Fields": 11628, + "PR": 11629, + "Coleman": 11630, + "rat": 11631, + "Bavaria": 11632, + "squeeze": 11633, + "highlighted": 11634, + "Adult": 11635, + "reflecting": 11636, + "Mel": 11637, + "1824": 11638, + "bicycle": 11639, + "organizing": 11640, + "sided": 11641, + "Previously": 11642, + "Underground": 11643, + "Prof": 11644, + "athletics": 11645, + "coupled": 11646, + "mortal": 11647, + "Hampton": 11648, + "worthy": 11649, + "immune": 11650, + "Ava": 11651, + "##gun": 11652, + "encouraging": 11653, + "simplified": 11654, + "##ssa": 11655, + "##nte": 11656, + "##ann": 11657, + "Providence": 11658, + "entities": 11659, + "Pablo": 11660, + "Strong": 11661, + "Housing": 11662, + "##ista": 11663, + "##ators": 11664, + "kidnapped": 11665, + "mosque": 11666, + "Kirk": 11667, + "whispers": 11668, + "fruits": 11669, + "shattered": 11670, + "fossil": 11671, + "Empress": 11672, + "Johns": 11673, + "Webster": 11674, + "Thing": 11675, + "refusing": 11676, + "differently": 11677, + "specimen": 11678, + "Ha": 11679, + "##EN": 11680, + "##tina": 11681, + "##elle": 11682, + "##night": 11683, + "Horn": 11684, + "neighbourhood": 11685, + "Bolivia": 11686, + "##rth": 11687, + "genres": 11688, + "Pre": 11689, + "##vich": 11690, + "Amelia": 11691, + "swallow": 11692, + "Tribune": 11693, + "Forever": 11694, + "Psychology": 11695, + "Use": 11696, + "##bers": 11697, + "Gazette": 11698, + "ash": 11699, + "##usa": 11700, + "Monster": 11701, + "##cular": 11702, + "delegation": 11703, + "blowing": 11704, + "Oblast": 11705, + "retreated": 11706, + "automobile": 11707, + "##ex": 11708, + "profits": 11709, + "shirts": 11710, + "devil": 11711, + "Treasury": 11712, + "##backs": 11713, + "Drums": 11714, + "Ronnie": 11715, + "gameplay": 11716, + "expertise": 11717, + "Evening": 11718, + "resides": 11719, + "Caesar": 11720, + "unity": 11721, + "Crazy": 11722, + "linking": 11723, + "Vision": 11724, + "donations": 11725, + "Isabel": 11726, + "valve": 11727, + "Sue": 11728, + "WWE": 11729, + "logical": 11730, + "availability": 11731, + "fitting": 11732, + "revolt": 11733, + "##mill": 11734, + "Linux": 11735, + "taxi": 11736, + "Access": 11737, + "pollution": 11738, + "statues": 11739, + "Augustus": 11740, + "##pen": 11741, + "cello": 11742, + "##some": 11743, + "lacking": 11744, + "##ati": 11745, + "Gwen": 11746, + "##aka": 11747, + "##ovich": 11748, + "1821": 11749, + "Wow": 11750, + "initiatives": 11751, + "Uruguay": 11752, + "Cain": 11753, + "stroked": 11754, + "examine": 11755, + "##ī": 11756, + "mentor": 11757, + "moist": 11758, + "disorders": 11759, + "buttons": 11760, + "##tica": 11761, + "##anna": 11762, + "Species": 11763, + "Lynch": 11764, + "museums": 11765, + "scorer": 11766, + "Poor": 11767, + "eligibility": 11768, + "op": 11769, + "unveiled": 11770, + "cats": 11771, + "Title": 11772, + "wheat": 11773, + "critically": 11774, + "Syracuse": 11775, + "##osis": 11776, + "marketed": 11777, + "enhance": 11778, + "Ryder": 11779, + "##NG": 11780, + "##ull": 11781, + "##rna": 11782, + "embedded": 11783, + "throws": 11784, + "foods": 11785, + "happily": 11786, + "##ami": 11787, + "lesson": 11788, + "formats": 11789, + "punched": 11790, + "##rno": 11791, + "expressions": 11792, + "qualities": 11793, + "##sal": 11794, + "Gods": 11795, + "##lity": 11796, + "elect": 11797, + "wives": 11798, + "##lling": 11799, + "jungle": 11800, + "Toyota": 11801, + "reversed": 11802, + "Grammar": 11803, + "Cloud": 11804, + "Agnes": 11805, + "##ules": 11806, + "disputed": 11807, + "verses": 11808, + "Lucien": 11809, + "threshold": 11810, + "##rea": 11811, + "scanned": 11812, + "##bled": 11813, + "##dley": 11814, + "##lice": 11815, + "Kazakhstan": 11816, + "Gardner": 11817, + "Freeman": 11818, + "##rz": 11819, + "inspection": 11820, + "Rita": 11821, + "accommodation": 11822, + "advances": 11823, + "chill": 11824, + "Elliot": 11825, + "thriller": 11826, + "Constantinople": 11827, + "##mos": 11828, + "debris": 11829, + "whoever": 11830, + "1810": 11831, + "Santo": 11832, + "Carey": 11833, + "remnants": 11834, + "Guatemala": 11835, + "##irs": 11836, + "carriers": 11837, + "equations": 11838, + "mandatory": 11839, + "##WA": 11840, + "anxious": 11841, + "measurement": 11842, + "Summit": 11843, + "Terminal": 11844, + "Erin": 11845, + "##zes": 11846, + "LLC": 11847, + "##uo": 11848, + "glancing": 11849, + "sin": 11850, + "##₃": 11851, + "Downtown": 11852, + "flowering": 11853, + "Euro": 11854, + "Leigh": 11855, + "Lance": 11856, + "warn": 11857, + "decent": 11858, + "recommendations": 11859, + "##ote": 11860, + "Quartet": 11861, + "##rrell": 11862, + "Clarence": 11863, + "colleague": 11864, + "guarantee": 11865, + "230": 11866, + "Clayton": 11867, + "Beast": 11868, + "addresses": 11869, + "prospect": 11870, + "destroyer": 11871, + "vegetables": 11872, + "Leadership": 11873, + "fatal": 11874, + "prints": 11875, + "190": 11876, + "##makers": 11877, + "Hyde": 11878, + "persuaded": 11879, + "illustrations": 11880, + "Southampton": 11881, + "Joyce": 11882, + "beats": 11883, + "editors": 11884, + "mount": 11885, + "##grave": 11886, + "Malaysian": 11887, + "Bombay": 11888, + "endorsed": 11889, + "##sian": 11890, + "##bee": 11891, + "applying": 11892, + "Religion": 11893, + "nautical": 11894, + "bomber": 11895, + "Na": 11896, + "airfield": 11897, + "gravel": 11898, + "##rew": 11899, + "Cave": 11900, + "bye": 11901, + "dig": 11902, + "decree": 11903, + "burden": 11904, + "Election": 11905, + "Hawk": 11906, + "Fe": 11907, + "##iled": 11908, + "reunited": 11909, + "##tland": 11910, + "liver": 11911, + "Teams": 11912, + "Put": 11913, + "delegates": 11914, + "Ella": 11915, + "##fect": 11916, + "Cal": 11917, + "invention": 11918, + "Castro": 11919, + "bored": 11920, + "##kawa": 11921, + "##ail": 11922, + "Trinidad": 11923, + "NASCAR": 11924, + "pond": 11925, + "develops": 11926, + "##pton": 11927, + "expenses": 11928, + "Zoe": 11929, + "Released": 11930, + "##rf": 11931, + "organs": 11932, + "beta": 11933, + "parameters": 11934, + "Neill": 11935, + "##lene": 11936, + "lateral": 11937, + "Beat": 11938, + "blades": 11939, + "Either": 11940, + "##hale": 11941, + "Mitch": 11942, + "##ET": 11943, + "##vous": 11944, + "Rod": 11945, + "burnt": 11946, + "phones": 11947, + "Rising": 11948, + "##front": 11949, + "investigating": 11950, + "##dent": 11951, + "Stephanie": 11952, + "##keeper": 11953, + "screening": 11954, + "##uro": 11955, + "Swan": 11956, + "Sinclair": 11957, + "modes": 11958, + "bullets": 11959, + "Nigerian": 11960, + "melody": 11961, + "##ques": 11962, + "Rifle": 11963, + "##12": 11964, + "128": 11965, + "##jin": 11966, + "charm": 11967, + "Venus": 11968, + "##tian": 11969, + "fusion": 11970, + "advocated": 11971, + "visitor": 11972, + "pinned": 11973, + "genera": 11974, + "3000": 11975, + "Ferry": 11976, + "Solo": 11977, + "quantity": 11978, + "regained": 11979, + "platinum": 11980, + "shoots": 11981, + "narrowly": 11982, + "preceded": 11983, + "update": 11984, + "##ichi": 11985, + "equality": 11986, + "unaware": 11987, + "regiments": 11988, + "ally": 11989, + "##tos": 11990, + "transmitter": 11991, + "locks": 11992, + "Seeing": 11993, + "outlets": 11994, + "feast": 11995, + "reopened": 11996, + "##ows": 11997, + "struggles": 11998, + "Buddy": 11999, + "1826": 12000, + "bark": 12001, + "elegant": 12002, + "amused": 12003, + "Pretty": 12004, + "themed": 12005, + "schemes": 12006, + "Lisbon": 12007, + "Te": 12008, + "patted": 12009, + "terrorism": 12010, + "Mystery": 12011, + "##croft": 12012, + "##imo": 12013, + "Madagascar": 12014, + "Journey": 12015, + "dealer": 12016, + "contacted": 12017, + "##quez": 12018, + "ITV": 12019, + "vacation": 12020, + "Wong": 12021, + "Sacramento": 12022, + "organisms": 12023, + "##pts": 12024, + "balcony": 12025, + "coloured": 12026, + "sheer": 12027, + "defines": 12028, + "MC": 12029, + "abortion": 12030, + "forbidden": 12031, + "accredited": 12032, + "Newfoundland": 12033, + "tendency": 12034, + "entrepreneur": 12035, + "Benny": 12036, + "Tanzania": 12037, + "needing": 12038, + "finalist": 12039, + "mythology": 12040, + "weakened": 12041, + "gown": 12042, + "sentences": 12043, + "Guest": 12044, + "websites": 12045, + "Tibetan": 12046, + "UFC": 12047, + "voluntary": 12048, + "annoyed": 12049, + "Welcome": 12050, + "honestly": 12051, + "correspondence": 12052, + "geometry": 12053, + "Deutsche": 12054, + "Biology": 12055, + "Help": 12056, + "##aya": 12057, + "Lines": 12058, + "Hector": 12059, + "##ael": 12060, + "reluctant": 12061, + "##ages": 12062, + "wears": 12063, + "inquiry": 12064, + "##dell": 12065, + "Holocaust": 12066, + "Tourism": 12067, + "Wei": 12068, + "volcanic": 12069, + "##mates": 12070, + "Visual": 12071, + "sorts": 12072, + "neighborhoods": 12073, + "Running": 12074, + "apple": 12075, + "shy": 12076, + "Laws": 12077, + "bend": 12078, + "Northeast": 12079, + "feminist": 12080, + "Speedway": 12081, + "Murder": 12082, + "visa": 12083, + "stuffed": 12084, + "fangs": 12085, + "transmitted": 12086, + "fiscal": 12087, + "Ain": 12088, + "enlarged": 12089, + "##ndi": 12090, + "Cecil": 12091, + "Peterson": 12092, + "Benson": 12093, + "Bedford": 12094, + "acceptable": 12095, + "##CC": 12096, + "##wer": 12097, + "purely": 12098, + "triangle": 12099, + "foster": 12100, + "Alberto": 12101, + "educator": 12102, + "Highland": 12103, + "acute": 12104, + "LGBT": 12105, + "Tina": 12106, + "Mi": 12107, + "adventures": 12108, + "Davidson": 12109, + "Honda": 12110, + "translator": 12111, + "monk": 12112, + "enacted": 12113, + "summoned": 12114, + "##ional": 12115, + "collector": 12116, + "Genesis": 12117, + "Un": 12118, + "liner": 12119, + "Di": 12120, + "Statistical": 12121, + "##CS": 12122, + "filter": 12123, + "Knox": 12124, + "Religious": 12125, + "Stella": 12126, + "Estonian": 12127, + "Turn": 12128, + "##ots": 12129, + "primitive": 12130, + "parishes": 12131, + "##lles": 12132, + "complexity": 12133, + "autobiography": 12134, + "rigid": 12135, + "cannon": 12136, + "pursuing": 12137, + "exploring": 12138, + "##gram": 12139, + "##mme": 12140, + "freshman": 12141, + "caves": 12142, + "Expedition": 12143, + "Traditional": 12144, + "iTunes": 12145, + "certification": 12146, + "cooling": 12147, + "##ort": 12148, + "##gna": 12149, + "##IT": 12150, + "##lman": 12151, + "##VA": 12152, + "Motion": 12153, + "explosive": 12154, + "licence": 12155, + "boxer": 12156, + "shrine": 12157, + "loosely": 12158, + "Brigadier": 12159, + "Savage": 12160, + "Brett": 12161, + "MVP": 12162, + "heavier": 12163, + "##elli": 12164, + "##gged": 12165, + "Buddha": 12166, + "Easy": 12167, + "spells": 12168, + "fails": 12169, + "incredibly": 12170, + "Georg": 12171, + "stern": 12172, + "compatible": 12173, + "Perfect": 12174, + "applies": 12175, + "cognitive": 12176, + "excessive": 12177, + "nightmare": 12178, + "neighbor": 12179, + "Sicily": 12180, + "appealed": 12181, + "static": 12182, + "##₁": 12183, + "Aberdeen": 12184, + "##leigh": 12185, + "slipping": 12186, + "bride": 12187, + "##guard": 12188, + "Um": 12189, + "Clyde": 12190, + "1818": 12191, + "##gible": 12192, + "Hal": 12193, + "Frost": 12194, + "Sanders": 12195, + "interactive": 12196, + "Hour": 12197, + "##vor": 12198, + "hurting": 12199, + "bull": 12200, + "termed": 12201, + "shelf": 12202, + "capturing": 12203, + "##pace": 12204, + "rolls": 12205, + "113": 12206, + "##bor": 12207, + "Chilean": 12208, + "teaches": 12209, + "##rey": 12210, + "exam": 12211, + "shipped": 12212, + "Twin": 12213, + "borrowed": 12214, + "##lift": 12215, + "Shit": 12216, + "##hot": 12217, + "Lindsay": 12218, + "Below": 12219, + "Kiev": 12220, + "Lin": 12221, + "leased": 12222, + "##sto": 12223, + "Eli": 12224, + "Diane": 12225, + "Val": 12226, + "subtropical": 12227, + "shoe": 12228, + "Bolton": 12229, + "Dragons": 12230, + "##rification": 12231, + "Vatican": 12232, + "##pathy": 12233, + "Crisis": 12234, + "dramatically": 12235, + "talents": 12236, + "babies": 12237, + "##ores": 12238, + "surname": 12239, + "##AP": 12240, + "##cology": 12241, + "cubic": 12242, + "opted": 12243, + "Archer": 12244, + "sweep": 12245, + "tends": 12246, + "Karnataka": 12247, + "Judy": 12248, + "stint": 12249, + "Similar": 12250, + "##nut": 12251, + "explicitly": 12252, + "##nga": 12253, + "interact": 12254, + "Mae": 12255, + "portfolio": 12256, + "clinic": 12257, + "abbreviated": 12258, + "Counties": 12259, + "##iko": 12260, + "hearts": 12261, + "##ı": 12262, + "providers": 12263, + "screams": 12264, + "Individual": 12265, + "##etti": 12266, + "Monument": 12267, + "##iana": 12268, + "accessed": 12269, + "encounters": 12270, + "gasp": 12271, + "##rge": 12272, + "defunct": 12273, + "Avery": 12274, + "##rne": 12275, + "nobility": 12276, + "useless": 12277, + "Phase": 12278, + "Vince": 12279, + "senator": 12280, + "##FL": 12281, + "1813": 12282, + "surprisingly": 12283, + "##illo": 12284, + "##chin": 12285, + "Boyd": 12286, + "rumors": 12287, + "equity": 12288, + "Gone": 12289, + "Hearts": 12290, + "chassis": 12291, + "overnight": 12292, + "Trek": 12293, + "wrists": 12294, + "submit": 12295, + "civic": 12296, + "designers": 12297, + "##rity": 12298, + "prominence": 12299, + "decorative": 12300, + "derives": 12301, + "starter": 12302, + "##AF": 12303, + "wisdom": 12304, + "Powers": 12305, + "reluctantly": 12306, + "measurements": 12307, + "doctoral": 12308, + "Noel": 12309, + "Gideon": 12310, + "Baden": 12311, + "Cologne": 12312, + "lawn": 12313, + "Hawaiian": 12314, + "anthology": 12315, + "##rov": 12316, + "Raiders": 12317, + "embassy": 12318, + "Sterling": 12319, + "##pal": 12320, + "Telugu": 12321, + "troubled": 12322, + "##FC": 12323, + "##bian": 12324, + "fountain": 12325, + "observe": 12326, + "ore": 12327, + "##uru": 12328, + "##gence": 12329, + "spelling": 12330, + "Border": 12331, + "grinning": 12332, + "sketch": 12333, + "Benedict": 12334, + "Xbox": 12335, + "dialects": 12336, + "readily": 12337, + "immigrant": 12338, + "Constitutional": 12339, + "aided": 12340, + "nevertheless": 12341, + "SE": 12342, + "tragedy": 12343, + "##ager": 12344, + "##rden": 12345, + "Flash": 12346, + "##MP": 12347, + "Europa": 12348, + "emissions": 12349, + "##ield": 12350, + "panties": 12351, + "Beverly": 12352, + "Homer": 12353, + "curtain": 12354, + "##oto": 12355, + "toilet": 12356, + "Isn": 12357, + "Jerome": 12358, + "Chiefs": 12359, + "Hermann": 12360, + "supernatural": 12361, + "juice": 12362, + "integrity": 12363, + "Scots": 12364, + "auto": 12365, + "Patriots": 12366, + "Strategic": 12367, + "engaging": 12368, + "prosecution": 12369, + "cleaned": 12370, + "Byron": 12371, + "investments": 12372, + "adequate": 12373, + "vacuum": 12374, + "laughs": 12375, + "##inus": 12376, + "##nge": 12377, + "Usually": 12378, + "Roth": 12379, + "Cities": 12380, + "Brand": 12381, + "corpse": 12382, + "##ffy": 12383, + "Gas": 12384, + "rifles": 12385, + "Plains": 12386, + "sponsorship": 12387, + "Levi": 12388, + "tray": 12389, + "owed": 12390, + "della": 12391, + "commanders": 12392, + "##ead": 12393, + "tactical": 12394, + "##rion": 12395, + "García": 12396, + "harbor": 12397, + "discharge": 12398, + "##hausen": 12399, + "gentleman": 12400, + "endless": 12401, + "highways": 12402, + "##itarian": 12403, + "pleaded": 12404, + "##eta": 12405, + "archive": 12406, + "Midnight": 12407, + "exceptions": 12408, + "instances": 12409, + "Gibraltar": 12410, + "cart": 12411, + "##NS": 12412, + "Darren": 12413, + "Bonnie": 12414, + "##yle": 12415, + "##iva": 12416, + "OCLC": 12417, + "bra": 12418, + "Jess": 12419, + "##EA": 12420, + "consulting": 12421, + "Archives": 12422, + "Chance": 12423, + "distances": 12424, + "commissioner": 12425, + "##AR": 12426, + "LL": 12427, + "sailors": 12428, + "##sters": 12429, + "enthusiasm": 12430, + "Lang": 12431, + "##zia": 12432, + "Yugoslav": 12433, + "confirm": 12434, + "possibilities": 12435, + "Suffolk": 12436, + "##eman": 12437, + "banner": 12438, + "1822": 12439, + "Supporting": 12440, + "fingertips": 12441, + "civilization": 12442, + "##gos": 12443, + "technically": 12444, + "1827": 12445, + "Hastings": 12446, + "sidewalk": 12447, + "strained": 12448, + "monuments": 12449, + "Floyd": 12450, + "Chennai": 12451, + "Elvis": 12452, + "villagers": 12453, + "Cumberland": 12454, + "strode": 12455, + "albeit": 12456, + "Believe": 12457, + "planets": 12458, + "combining": 12459, + "Mohammad": 12460, + "container": 12461, + "##mouth": 12462, + "##tures": 12463, + "verb": 12464, + "BA": 12465, + "Tank": 12466, + "Midland": 12467, + "screened": 12468, + "Gang": 12469, + "Democracy": 12470, + "Helsinki": 12471, + "screens": 12472, + "thread": 12473, + "charitable": 12474, + "##version": 12475, + "swiftly": 12476, + "ma": 12477, + "rational": 12478, + "combine": 12479, + "##SS": 12480, + "##antly": 12481, + "dragging": 12482, + "Cliff": 12483, + "Tasmania": 12484, + "quest": 12485, + "professionally": 12486, + "##aj": 12487, + "rap": 12488, + "##lion": 12489, + "livestock": 12490, + "##hua": 12491, + "informal": 12492, + "specially": 12493, + "lonely": 12494, + "Matthews": 12495, + "Dictionary": 12496, + "1816": 12497, + "Observatory": 12498, + "correspondent": 12499, + "constitute": 12500, + "homeless": 12501, + "waving": 12502, + "appreciated": 12503, + "Analysis": 12504, + "Meeting": 12505, + "dagger": 12506, + "##AL": 12507, + "Gandhi": 12508, + "flank": 12509, + "Giant": 12510, + "Choir": 12511, + "##not": 12512, + "glimpse": 12513, + "toe": 12514, + "Writer": 12515, + "teasing": 12516, + "springs": 12517, + "##dt": 12518, + "Glory": 12519, + "healthcare": 12520, + "regulated": 12521, + "complaint": 12522, + "math": 12523, + "Publications": 12524, + "makers": 12525, + "##hips": 12526, + "cement": 12527, + "Need": 12528, + "apologize": 12529, + "disputes": 12530, + "finishes": 12531, + "Partners": 12532, + "boring": 12533, + "ups": 12534, + "gains": 12535, + "1793": 12536, + "Congressional": 12537, + "clergy": 12538, + "Folk": 12539, + "##made": 12540, + "##nza": 12541, + "Waters": 12542, + "stays": 12543, + "encoded": 12544, + "spider": 12545, + "betrayed": 12546, + "Applied": 12547, + "inception": 12548, + "##urt": 12549, + "##zzo": 12550, + "wards": 12551, + "bells": 12552, + "UCLA": 12553, + "Worth": 12554, + "bombers": 12555, + "Mo": 12556, + "trademark": 12557, + "Piper": 12558, + "##vel": 12559, + "incorporates": 12560, + "1801": 12561, + "##cial": 12562, + "dim": 12563, + "Twelve": 12564, + "##word": 12565, + "Appeals": 12566, + "tighter": 12567, + "spacecraft": 12568, + "##tine": 12569, + "coordinates": 12570, + "##iac": 12571, + "mistakes": 12572, + "Zach": 12573, + "laptop": 12574, + "Teresa": 12575, + "##llar": 12576, + "##yr": 12577, + "favored": 12578, + "Nora": 12579, + "sophisticated": 12580, + "Irving": 12581, + "hammer": 12582, + "División": 12583, + "corporations": 12584, + "niece": 12585, + "##rley": 12586, + "Patterson": 12587, + "UNESCO": 12588, + "trafficking": 12589, + "Ming": 12590, + "balanced": 12591, + "plaque": 12592, + "Latvia": 12593, + "broader": 12594, + "##owed": 12595, + "Save": 12596, + "confined": 12597, + "##vable": 12598, + "Dalton": 12599, + "tide": 12600, + "##right": 12601, + "##ural": 12602, + "##num": 12603, + "swords": 12604, + "caring": 12605, + "##eg": 12606, + "IX": 12607, + "Acting": 12608, + "paved": 12609, + "##moto": 12610, + "launching": 12611, + "Antoine": 12612, + "substantially": 12613, + "Pride": 12614, + "Philharmonic": 12615, + "grammar": 12616, + "Indoor": 12617, + "Ensemble": 12618, + "enabling": 12619, + "114": 12620, + "resided": 12621, + "Angelo": 12622, + "publicity": 12623, + "chaired": 12624, + "crawled": 12625, + "Maharashtra": 12626, + "Telegraph": 12627, + "lengthy": 12628, + "preference": 12629, + "differential": 12630, + "anonymous": 12631, + "Honey": 12632, + "##itation": 12633, + "wage": 12634, + "##iki": 12635, + "consecrated": 12636, + "Bryant": 12637, + "regulatory": 12638, + "Carr": 12639, + "##én": 12640, + "functioning": 12641, + "watches": 12642, + "##ú": 12643, + "shifts": 12644, + "diagnosis": 12645, + "Search": 12646, + "app": 12647, + "Peters": 12648, + "##SE": 12649, + "##cat": 12650, + "Andreas": 12651, + "honours": 12652, + "temper": 12653, + "counsel": 12654, + "Urdu": 12655, + "Anniversary": 12656, + "maritime": 12657, + "##uka": 12658, + "harmony": 12659, + "##unk": 12660, + "essence": 12661, + "Lorenzo": 12662, + "choked": 12663, + "Quarter": 12664, + "indie": 12665, + "##oll": 12666, + "loses": 12667, + "##prints": 12668, + "amendment": 12669, + "Adolf": 12670, + "scenario": 12671, + "similarities": 12672, + "##rade": 12673, + "##LC": 12674, + "technological": 12675, + "metric": 12676, + "Russians": 12677, + "thoroughly": 12678, + "##tead": 12679, + "cruiser": 12680, + "1806": 12681, + "##nier": 12682, + "1823": 12683, + "Teddy": 12684, + "##psy": 12685, + "au": 12686, + "progressed": 12687, + "exceptional": 12688, + "broadcaster": 12689, + "partnered": 12690, + "fitness": 12691, + "irregular": 12692, + "placement": 12693, + "mothers": 12694, + "unofficial": 12695, + "Garion": 12696, + "Johannes": 12697, + "1817": 12698, + "regain": 12699, + "Solar": 12700, + "publishes": 12701, + "Gates": 12702, + "Broken": 12703, + "thirds": 12704, + "conversations": 12705, + "dive": 12706, + "Raj": 12707, + "contributor": 12708, + "quantities": 12709, + "Worcester": 12710, + "governance": 12711, + "##flow": 12712, + "generating": 12713, + "pretending": 12714, + "Belarus": 12715, + "##voy": 12716, + "radius": 12717, + "skating": 12718, + "Marathon": 12719, + "1819": 12720, + "affection": 12721, + "undertook": 12722, + "##wright": 12723, + "los": 12724, + "##bro": 12725, + "locate": 12726, + "PS": 12727, + "excluded": 12728, + "recreation": 12729, + "tortured": 12730, + "jewelry": 12731, + "moaned": 12732, + "##logue": 12733, + "##cut": 12734, + "Complete": 12735, + "##rop": 12736, + "117": 12737, + "##II": 12738, + "plantation": 12739, + "whipped": 12740, + "slower": 12741, + "crater": 12742, + "##drome": 12743, + "Volunteer": 12744, + "attributes": 12745, + "celebrations": 12746, + "regards": 12747, + "Publishers": 12748, + "oath": 12749, + "utilized": 12750, + "Robbie": 12751, + "Giuseppe": 12752, + "fiber": 12753, + "indication": 12754, + "melted": 12755, + "archives": 12756, + "Damien": 12757, + "storey": 12758, + "affecting": 12759, + "identifying": 12760, + "dances": 12761, + "alumni": 12762, + "comparable": 12763, + "upgrade": 12764, + "rented": 12765, + "sprint": 12766, + "##kle": 12767, + "Marty": 12768, + "##lous": 12769, + "treating": 12770, + "railways": 12771, + "Lebanese": 12772, + "erupted": 12773, + "occupy": 12774, + "sympathy": 12775, + "Jude": 12776, + "Darling": 12777, + "Qatar": 12778, + "drainage": 12779, + "McCarthy": 12780, + "heel": 12781, + "Klein": 12782, + "computing": 12783, + "wireless": 12784, + "flip": 12785, + "Du": 12786, + "Bella": 12787, + "##ast": 12788, + "##ssen": 12789, + "narrator": 12790, + "mist": 12791, + "sings": 12792, + "alignment": 12793, + "121": 12794, + "2020": 12795, + "securing": 12796, + "##rail": 12797, + "Progress": 12798, + "missionaries": 12799, + "brutal": 12800, + "mercy": 12801, + "##shing": 12802, + "Hip": 12803, + "##ache": 12804, + "##olo": 12805, + "switching": 12806, + "##here": 12807, + "Malay": 12808, + "##ob": 12809, + "constituted": 12810, + "Mohammed": 12811, + "Often": 12812, + "standings": 12813, + "surge": 12814, + "teachings": 12815, + "ink": 12816, + "detached": 12817, + "systematic": 12818, + "Trial": 12819, + "Myanmar": 12820, + "##wo": 12821, + "offs": 12822, + "Reyes": 12823, + "decoration": 12824, + "translations": 12825, + "wherever": 12826, + "reviewer": 12827, + "speculation": 12828, + "Bangkok": 12829, + "terminated": 12830, + "##ester": 12831, + "beard": 12832, + "RCA": 12833, + "Aidan": 12834, + "Associated": 12835, + "Emerson": 12836, + "Charity": 12837, + "1803": 12838, + "generous": 12839, + "Dudley": 12840, + "ATP": 12841, + "##haven": 12842, + "prizes": 12843, + "toxic": 12844, + "gloves": 12845, + "##iles": 12846, + "##dos": 12847, + "Turning": 12848, + "myth": 12849, + "Parade": 12850, + "##building": 12851, + "Hits": 12852, + "##eva": 12853, + "teamed": 12854, + "Above": 12855, + "Duchess": 12856, + "Holt": 12857, + "##oth": 12858, + "Sub": 12859, + "Ace": 12860, + "atomic": 12861, + "inform": 12862, + "Ship": 12863, + "depend": 12864, + "Jun": 12865, + "##bes": 12866, + "Norwich": 12867, + "globe": 12868, + "Baroque": 12869, + "Christina": 12870, + "Cotton": 12871, + "Tunnel": 12872, + "kidding": 12873, + "Concerto": 12874, + "Brittany": 12875, + "tasted": 12876, + "phases": 12877, + "stems": 12878, + "angles": 12879, + "##TE": 12880, + "##nam": 12881, + "##40": 12882, + "charted": 12883, + "Alison": 12884, + "intensive": 12885, + "Willis": 12886, + "glory": 12887, + "##lit": 12888, + "Bergen": 12889, + "est": 12890, + "taller": 12891, + "##dicate": 12892, + "labeled": 12893, + "##ido": 12894, + "commentator": 12895, + "Warrior": 12896, + "Viscount": 12897, + "shortened": 12898, + "aisle": 12899, + "Aria": 12900, + "Spike": 12901, + "spectators": 12902, + "goodbye": 12903, + "overlooking": 12904, + "mammals": 12905, + "##lude": 12906, + "wholly": 12907, + "Barrett": 12908, + "##gus": 12909, + "accompany": 12910, + "seventy": 12911, + "employ": 12912, + "##mb": 12913, + "ambitious": 12914, + "beloved": 12915, + "basket": 12916, + "##mma": 12917, + "##lding": 12918, + "halted": 12919, + "descendant": 12920, + "pad": 12921, + "exclaimed": 12922, + "cloak": 12923, + "##pet": 12924, + "Strait": 12925, + "Bang": 12926, + "Aviv": 12927, + "sadness": 12928, + "##ffer": 12929, + "Donovan": 12930, + "1880s": 12931, + "agenda": 12932, + "swinging": 12933, + "##quin": 12934, + "jerk": 12935, + "Boat": 12936, + "##rist": 12937, + "nervously": 12938, + "Silence": 12939, + "Echo": 12940, + "shout": 12941, + "implies": 12942, + "##iser": 12943, + "##cking": 12944, + "Shiva": 12945, + "Weston": 12946, + "damages": 12947, + "##tist": 12948, + "effectiveness": 12949, + "Horace": 12950, + "cycling": 12951, + "Rey": 12952, + "ache": 12953, + "Photography": 12954, + "PDF": 12955, + "Dear": 12956, + "leans": 12957, + "Lea": 12958, + "##vision": 12959, + "booth": 12960, + "attained": 12961, + "disbelief": 12962, + "##eus": 12963, + "##ution": 12964, + "Hop": 12965, + "pension": 12966, + "toys": 12967, + "Eurovision": 12968, + "faithful": 12969, + "##heads": 12970, + "Andre": 12971, + "owe": 12972, + "default": 12973, + "Atlas": 12974, + "Megan": 12975, + "highlights": 12976, + "lovers": 12977, + "Constantine": 12978, + "Sixth": 12979, + "masses": 12980, + "##garh": 12981, + "emerge": 12982, + "Auto": 12983, + "Slovak": 12984, + "##oa": 12985, + "##vert": 12986, + "Superintendent": 12987, + "flicked": 12988, + "inventor": 12989, + "Chambers": 12990, + "Frankie": 12991, + "Romeo": 12992, + "pottery": 12993, + "companions": 12994, + "Rudolf": 12995, + "##liers": 12996, + "diary": 12997, + "Unless": 12998, + "tap": 12999, + "alter": 13000, + "Randall": 13001, + "##ddle": 13002, + "##eal": 13003, + "limitations": 13004, + "##boards": 13005, + "utterly": 13006, + "knelt": 13007, + "guaranteed": 13008, + "Cowboys": 13009, + "Islander": 13010, + "horns": 13011, + "##ike": 13012, + "Wendy": 13013, + "sexually": 13014, + "Smart": 13015, + "breasts": 13016, + "##cian": 13017, + "compromise": 13018, + "Duchy": 13019, + "AT": 13020, + "Galaxy": 13021, + "analog": 13022, + "Style": 13023, + "##aking": 13024, + "weighed": 13025, + "Nigel": 13026, + "optional": 13027, + "Czechoslovakia": 13028, + "practicing": 13029, + "Ham": 13030, + "##0s": 13031, + "feedback": 13032, + "batted": 13033, + "uprising": 13034, + "operative": 13035, + "applicable": 13036, + "criminals": 13037, + "classrooms": 13038, + "Somehow": 13039, + "##ode": 13040, + "##OM": 13041, + "Naomi": 13042, + "Winchester": 13043, + "##pping": 13044, + "Bart": 13045, + "Regina": 13046, + "competitor": 13047, + "Recorded": 13048, + "Yuan": 13049, + "Vera": 13050, + "lust": 13051, + "Confederation": 13052, + "##test": 13053, + "suck": 13054, + "1809": 13055, + "Lambert": 13056, + "175": 13057, + "Friend": 13058, + "##ppa": 13059, + "Slowly": 13060, + "##⁺": 13061, + "Wake": 13062, + "Dec": 13063, + "##aneous": 13064, + "chambers": 13065, + "Color": 13066, + "Gus": 13067, + "##site": 13068, + "Alternative": 13069, + "##world": 13070, + "Exeter": 13071, + "Omaha": 13072, + "celebrities": 13073, + "striker": 13074, + "210": 13075, + "dwarf": 13076, + "meals": 13077, + "Oriental": 13078, + "Pearson": 13079, + "financing": 13080, + "revenues": 13081, + "underwater": 13082, + "Steele": 13083, + "screw": 13084, + "Feeling": 13085, + "Mt": 13086, + "acids": 13087, + "badge": 13088, + "swore": 13089, + "theaters": 13090, + "Moving": 13091, + "admired": 13092, + "lung": 13093, + "knot": 13094, + "penalties": 13095, + "116": 13096, + "fork": 13097, + "##cribed": 13098, + "Afghan": 13099, + "outskirts": 13100, + "Cambodia": 13101, + "oval": 13102, + "wool": 13103, + "fossils": 13104, + "Ned": 13105, + "Countess": 13106, + "Darkness": 13107, + "delicious": 13108, + "##nica": 13109, + "Evelyn": 13110, + "Recordings": 13111, + "guidelines": 13112, + "##CP": 13113, + "Sandra": 13114, + "meantime": 13115, + "Antarctica": 13116, + "modeling": 13117, + "granddaughter": 13118, + "##rial": 13119, + "Roma": 13120, + "Seventh": 13121, + "Sunshine": 13122, + "Gabe": 13123, + "##nton": 13124, + "Shop": 13125, + "Turks": 13126, + "prolific": 13127, + "soup": 13128, + "parody": 13129, + "##nta": 13130, + "Judith": 13131, + "disciplines": 13132, + "resign": 13133, + "Companies": 13134, + "Libya": 13135, + "Jets": 13136, + "inserted": 13137, + "Mile": 13138, + "retrieve": 13139, + "filmmaker": 13140, + "##rand": 13141, + "realistic": 13142, + "unhappy": 13143, + "##30": 13144, + "sandstone": 13145, + "##nas": 13146, + "##lent": 13147, + "##ush": 13148, + "##rous": 13149, + "Brent": 13150, + "trash": 13151, + "Rescue": 13152, + "##unted": 13153, + "Autumn": 13154, + "disgust": 13155, + "flexible": 13156, + "infinite": 13157, + "sideways": 13158, + "##oss": 13159, + "##vik": 13160, + "trailing": 13161, + "disturbed": 13162, + "50th": 13163, + "Newark": 13164, + "posthumously": 13165, + "##rol": 13166, + "Schmidt": 13167, + "Josef": 13168, + "##eous": 13169, + "determining": 13170, + "menu": 13171, + "Pole": 13172, + "Anita": 13173, + "Luc": 13174, + "peaks": 13175, + "118": 13176, + "Yard": 13177, + "warrant": 13178, + "generic": 13179, + "deserted": 13180, + "Walking": 13181, + "stamp": 13182, + "tracked": 13183, + "##berger": 13184, + "paired": 13185, + "surveyed": 13186, + "sued": 13187, + "Rainbow": 13188, + "##isk": 13189, + "Carpenter": 13190, + "submarines": 13191, + "realization": 13192, + "touches": 13193, + "sweeping": 13194, + "Fritz": 13195, + "module": 13196, + "Whether": 13197, + "resembles": 13198, + "##form": 13199, + "##lop": 13200, + "unsure": 13201, + "hunters": 13202, + "Zagreb": 13203, + "unemployment": 13204, + "Senators": 13205, + "Georgetown": 13206, + "##onic": 13207, + "Barker": 13208, + "foul": 13209, + "commercials": 13210, + "Dresden": 13211, + "Words": 13212, + "collision": 13213, + "Carlton": 13214, + "Fashion": 13215, + "doubted": 13216, + "##ril": 13217, + "precision": 13218, + "MIT": 13219, + "Jacobs": 13220, + "mob": 13221, + "Monk": 13222, + "retaining": 13223, + "gotta": 13224, + "##rod": 13225, + "remake": 13226, + "Fast": 13227, + "chips": 13228, + "##pled": 13229, + "sufficiently": 13230, + "##lights": 13231, + "delivering": 13232, + "##enburg": 13233, + "Dancing": 13234, + "Barton": 13235, + "Officers": 13236, + "metals": 13237, + "##lake": 13238, + "religions": 13239, + "##ré": 13240, + "motivated": 13241, + "differs": 13242, + "dorsal": 13243, + "##birds": 13244, + "##rts": 13245, + "Priest": 13246, + "polished": 13247, + "##aling": 13248, + "Saxony": 13249, + "Wyatt": 13250, + "knockout": 13251, + "##hor": 13252, + "Lopez": 13253, + "RNA": 13254, + "##link": 13255, + "metallic": 13256, + "##kas": 13257, + "daylight": 13258, + "Montenegro": 13259, + "##lining": 13260, + "wrapping": 13261, + "resemble": 13262, + "Jam": 13263, + "Viking": 13264, + "uncertainty": 13265, + "angels": 13266, + "enables": 13267, + "##fy": 13268, + "Stuttgart": 13269, + "tricks": 13270, + "tattoo": 13271, + "127": 13272, + "wicked": 13273, + "asset": 13274, + "breach": 13275, + "##yman": 13276, + "MW": 13277, + "breaths": 13278, + "Jung": 13279, + "im": 13280, + "1798": 13281, + "noon": 13282, + "vowel": 13283, + "##qua": 13284, + "calmly": 13285, + "seasonal": 13286, + "chat": 13287, + "ingredients": 13288, + "cooled": 13289, + "Randolph": 13290, + "ensuring": 13291, + "##ib": 13292, + "##idal": 13293, + "flashing": 13294, + "1808": 13295, + "Macedonian": 13296, + "Cool": 13297, + "councils": 13298, + "##lick": 13299, + "advantages": 13300, + "Immediately": 13301, + "Madras": 13302, + "##cked": 13303, + "Pain": 13304, + "fancy": 13305, + "chronic": 13306, + "Malayalam": 13307, + "begged": 13308, + "##nese": 13309, + "Inner": 13310, + "feathers": 13311, + "##vey": 13312, + "Names": 13313, + "dedication": 13314, + "Sing": 13315, + "pan": 13316, + "Fischer": 13317, + "nurses": 13318, + "Sharp": 13319, + "inning": 13320, + "stamps": 13321, + "Meg": 13322, + "##ello": 13323, + "edged": 13324, + "motioned": 13325, + "Jacksonville": 13326, + "##ffle": 13327, + "##dic": 13328, + "##US": 13329, + "divide": 13330, + "garnered": 13331, + "Ranking": 13332, + "chasing": 13333, + "modifications": 13334, + "##oc": 13335, + "clever": 13336, + "midst": 13337, + "flushed": 13338, + "##DP": 13339, + "void": 13340, + "##sby": 13341, + "ambulance": 13342, + "beaches": 13343, + "groan": 13344, + "isolation": 13345, + "strengthen": 13346, + "prevention": 13347, + "##ffs": 13348, + "Scouts": 13349, + "reformed": 13350, + "geographic": 13351, + "squadrons": 13352, + "Fiona": 13353, + "Kai": 13354, + "Consequently": 13355, + "##uss": 13356, + "overtime": 13357, + "##yas": 13358, + "Fr": 13359, + "##BL": 13360, + "Papua": 13361, + "Mixed": 13362, + "glances": 13363, + "Haiti": 13364, + "Sporting": 13365, + "sandy": 13366, + "confronted": 13367, + "René": 13368, + "Tanner": 13369, + "1811": 13370, + "##IM": 13371, + "advisory": 13372, + "trim": 13373, + "##ibe": 13374, + "González": 13375, + "gambling": 13376, + "Jupiter": 13377, + "##ility": 13378, + "##owski": 13379, + "##nar": 13380, + "122": 13381, + "apology": 13382, + "teased": 13383, + "Pool": 13384, + "feminine": 13385, + "wicket": 13386, + "eagle": 13387, + "shiny": 13388, + "##lator": 13389, + "blend": 13390, + "peaking": 13391, + "nasty": 13392, + "nodding": 13393, + "fraction": 13394, + "tech": 13395, + "Noble": 13396, + "Kuwait": 13397, + "brushing": 13398, + "Italia": 13399, + "Canberra": 13400, + "duet": 13401, + "Johan": 13402, + "1805": 13403, + "Written": 13404, + "cameo": 13405, + "Stalin": 13406, + "pig": 13407, + "cord": 13408, + "##zio": 13409, + "Surely": 13410, + "SA": 13411, + "owing": 13412, + "holidays": 13413, + "123": 13414, + "Ranger": 13415, + "lighthouse": 13416, + "##ige": 13417, + "miners": 13418, + "1804": 13419, + "##ë": 13420, + "##gren": 13421, + "##ried": 13422, + "crashing": 13423, + "##atory": 13424, + "wartime": 13425, + "highlight": 13426, + "inclined": 13427, + "Torres": 13428, + "Tax": 13429, + "##zel": 13430, + "##oud": 13431, + "Own": 13432, + "##corn": 13433, + "Divine": 13434, + "EMI": 13435, + "Relief": 13436, + "Northwestern": 13437, + "ethics": 13438, + "BMW": 13439, + "click": 13440, + "plasma": 13441, + "Christie": 13442, + "coordinator": 13443, + "Shepherd": 13444, + "washing": 13445, + "cooked": 13446, + "##dio": 13447, + "##eat": 13448, + "Cerambycidae": 13449, + "algebra": 13450, + "Engine": 13451, + "costumes": 13452, + "Vampire": 13453, + "vault": 13454, + "submission": 13455, + "virtue": 13456, + "assumption": 13457, + "##rell": 13458, + "Toledo": 13459, + "##oting": 13460, + "##rva": 13461, + "crept": 13462, + "emphasized": 13463, + "##lton": 13464, + "##ood": 13465, + "Greeks": 13466, + "surgical": 13467, + "crest": 13468, + "Patrol": 13469, + "Beta": 13470, + "Tessa": 13471, + "##GS": 13472, + "pizza": 13473, + "traits": 13474, + "rats": 13475, + "Iris": 13476, + "spray": 13477, + "##GC": 13478, + "Lightning": 13479, + "binary": 13480, + "escapes": 13481, + "##take": 13482, + "Clary": 13483, + "crowds": 13484, + "##zong": 13485, + "hauled": 13486, + "maid": 13487, + "##fen": 13488, + "Manning": 13489, + "##yang": 13490, + "Nielsen": 13491, + "aesthetic": 13492, + "sympathetic": 13493, + "affiliation": 13494, + "soaked": 13495, + "Mozart": 13496, + "personalities": 13497, + "begging": 13498, + "##iga": 13499, + "clip": 13500, + "Raphael": 13501, + "yearly": 13502, + "Lima": 13503, + "abundant": 13504, + "##lm": 13505, + "1794": 13506, + "strips": 13507, + "Initiative": 13508, + "reporters": 13509, + "##vsky": 13510, + "consolidated": 13511, + "##itated": 13512, + "Civic": 13513, + "rankings": 13514, + "mandate": 13515, + "symbolic": 13516, + "##ively": 13517, + "1807": 13518, + "rental": 13519, + "duck": 13520, + "nave": 13521, + "complications": 13522, + "##nor": 13523, + "Irene": 13524, + "Nazis": 13525, + "haunted": 13526, + "scholarly": 13527, + "Pratt": 13528, + "Gran": 13529, + "Embassy": 13530, + "Wave": 13531, + "pity": 13532, + "genius": 13533, + "bats": 13534, + "canton": 13535, + "Tropical": 13536, + "marker": 13537, + "##cos": 13538, + "escorted": 13539, + "Climate": 13540, + "##posed": 13541, + "appreciation": 13542, + "freezing": 13543, + "puzzle": 13544, + "Internal": 13545, + "pools": 13546, + "Shawn": 13547, + "pathway": 13548, + "Daniels": 13549, + "Fitzgerald": 13550, + "extant": 13551, + "olive": 13552, + "Vanessa": 13553, + "marriages": 13554, + "cocked": 13555, + "##dging": 13556, + "prone": 13557, + "chemicals": 13558, + "doll": 13559, + "drawer": 13560, + "##HF": 13561, + "Stark": 13562, + "Property": 13563, + "##tai": 13564, + "flowed": 13565, + "Sheridan": 13566, + "##uated": 13567, + "Less": 13568, + "Omar": 13569, + "remarks": 13570, + "catalogue": 13571, + "Seymour": 13572, + "wreck": 13573, + "Carrie": 13574, + "##bby": 13575, + "Mercer": 13576, + "displaced": 13577, + "sovereignty": 13578, + "rip": 13579, + "Flynn": 13580, + "Archie": 13581, + "Quarterfinals": 13582, + "Hassan": 13583, + "##ards": 13584, + "vein": 13585, + "Osaka": 13586, + "pouring": 13587, + "wages": 13588, + "Romance": 13589, + "##cript": 13590, + "##phere": 13591, + "550": 13592, + "##eil": 13593, + "##stown": 13594, + "Documentary": 13595, + "ancestor": 13596, + "CNN": 13597, + "Panthers": 13598, + "publishers": 13599, + "Rise": 13600, + "##mu": 13601, + "biting": 13602, + "Bright": 13603, + "String": 13604, + "succeeding": 13605, + "119": 13606, + "loaned": 13607, + "Warwick": 13608, + "Sheikh": 13609, + "Von": 13610, + "Afterwards": 13611, + "Jax": 13612, + "Camden": 13613, + "helicopters": 13614, + "Hence": 13615, + "Laurel": 13616, + "##ddy": 13617, + "transaction": 13618, + "Corp": 13619, + "clause": 13620, + "##owing": 13621, + "##kel": 13622, + "Investment": 13623, + "cups": 13624, + "Lucia": 13625, + "Moss": 13626, + "Giles": 13627, + "chef": 13628, + "López": 13629, + "decisive": 13630, + "30th": 13631, + "distress": 13632, + "linguistic": 13633, + "surveys": 13634, + "Ready": 13635, + "maiden": 13636, + "Touch": 13637, + "frontier": 13638, + "incorporate": 13639, + "exotic": 13640, + "mollusk": 13641, + "Leopold": 13642, + "Ride": 13643, + "##wain": 13644, + "##ndo": 13645, + "teammates": 13646, + "tones": 13647, + "drift": 13648, + "ordering": 13649, + "Feb": 13650, + "Penny": 13651, + "Normandy": 13652, + "Present": 13653, + "Flag": 13654, + "pipes": 13655, + "##rro": 13656, + "delight": 13657, + "motto": 13658, + "Tibet": 13659, + "leap": 13660, + "Eliza": 13661, + "Produced": 13662, + "teenagers": 13663, + "sitcom": 13664, + "Try": 13665, + "Hansen": 13666, + "Cody": 13667, + "wandered": 13668, + "terrestrial": 13669, + "frog": 13670, + "scare": 13671, + "resisted": 13672, + "employers": 13673, + "coined": 13674, + "##DS": 13675, + "resistant": 13676, + "Fly": 13677, + "captive": 13678, + "dissolution": 13679, + "judged": 13680, + "associates": 13681, + "defining": 13682, + "##court": 13683, + "Hale": 13684, + "##mbo": 13685, + "raises": 13686, + "clusters": 13687, + "twelfth": 13688, + "##metric": 13689, + "Roads": 13690, + "##itude": 13691, + "satisfy": 13692, + "Android": 13693, + "Reds": 13694, + "Gloucester": 13695, + "Category": 13696, + "Valencia": 13697, + "Daemon": 13698, + "stabbed": 13699, + "Luna": 13700, + "Churches": 13701, + "Canton": 13702, + "##eller": 13703, + "Attack": 13704, + "Kashmir": 13705, + "annexed": 13706, + "grabs": 13707, + "asteroid": 13708, + "Hartford": 13709, + "recommendation": 13710, + "Rodriguez": 13711, + "handing": 13712, + "stressed": 13713, + "frequencies": 13714, + "delegate": 13715, + "Bones": 13716, + "Erie": 13717, + "Weber": 13718, + "Hands": 13719, + "Acts": 13720, + "millimetres": 13721, + "24th": 13722, + "Fat": 13723, + "Howe": 13724, + "casually": 13725, + "##SL": 13726, + "convent": 13727, + "1790": 13728, + "IF": 13729, + "##sity": 13730, + "1795": 13731, + "yelling": 13732, + "##ises": 13733, + "drain": 13734, + "addressing": 13735, + "amino": 13736, + "Marcel": 13737, + "Sylvia": 13738, + "Paramount": 13739, + "Gerard": 13740, + "Volleyball": 13741, + "butter": 13742, + "124": 13743, + "Albion": 13744, + "##GB": 13745, + "triggered": 13746, + "1792": 13747, + "folding": 13748, + "accepts": 13749, + "##ße": 13750, + "preparations": 13751, + "Wimbledon": 13752, + "dose": 13753, + "##grass": 13754, + "escaping": 13755, + "##tling": 13756, + "import": 13757, + "charging": 13758, + "##dation": 13759, + "280": 13760, + "Nolan": 13761, + "##fried": 13762, + "Calcutta": 13763, + "##pool": 13764, + "Cove": 13765, + "examining": 13766, + "minded": 13767, + "heartbeat": 13768, + "twisting": 13769, + "domains": 13770, + "bush": 13771, + "Tunisia": 13772, + "Purple": 13773, + "Leone": 13774, + "##code": 13775, + "evacuated": 13776, + "battlefield": 13777, + "tiger": 13778, + "Electrical": 13779, + "##ared": 13780, + "chased": 13781, + "##cre": 13782, + "cultivated": 13783, + "Jet": 13784, + "solved": 13785, + "shrug": 13786, + "ringing": 13787, + "Impact": 13788, + "##iant": 13789, + "kilometre": 13790, + "##log": 13791, + "commemorate": 13792, + "migrated": 13793, + "singular": 13794, + "designing": 13795, + "promptly": 13796, + "Higgins": 13797, + "##own": 13798, + "##aves": 13799, + "freshwater": 13800, + "Marketing": 13801, + "Payne": 13802, + "beg": 13803, + "locker": 13804, + "pray": 13805, + "implied": 13806, + "AAA": 13807, + "corrected": 13808, + "Trans": 13809, + "Europeans": 13810, + "Ashe": 13811, + "acknowledge": 13812, + "Introduction": 13813, + "##writer": 13814, + "##llen": 13815, + "Munster": 13816, + "auxiliary": 13817, + "growl": 13818, + "Hours": 13819, + "Poems": 13820, + "##AT": 13821, + "reduces": 13822, + "Plain": 13823, + "plague": 13824, + "canceled": 13825, + "detention": 13826, + "polite": 13827, + "necklace": 13828, + "Gustav": 13829, + "##gu": 13830, + "##lance": 13831, + "En": 13832, + "Angola": 13833, + "##bb": 13834, + "dwelling": 13835, + "##hea": 13836, + "5000": 13837, + "Qing": 13838, + "Dodgers": 13839, + "rim": 13840, + "##ored": 13841, + "##haus": 13842, + "spilled": 13843, + "Elisabeth": 13844, + "Viktor": 13845, + "backpack": 13846, + "1802": 13847, + "amended": 13848, + "##worthy": 13849, + "Phantom": 13850, + "##ctive": 13851, + "keeper": 13852, + "##loom": 13853, + "Vikings": 13854, + "##gua": 13855, + "employs": 13856, + "Tehran": 13857, + "specialty": 13858, + "##bate": 13859, + "Marx": 13860, + "Mirror": 13861, + "Jenna": 13862, + "rides": 13863, + "needle": 13864, + "prayers": 13865, + "clarinet": 13866, + "forewings": 13867, + "##walk": 13868, + "Midlands": 13869, + "convincing": 13870, + "advocacy": 13871, + "Cao": 13872, + "Birds": 13873, + "cycles": 13874, + "Clement": 13875, + "Gil": 13876, + "bubble": 13877, + "Maximum": 13878, + "humanitarian": 13879, + "Tan": 13880, + "cries": 13881, + "##SI": 13882, + "Parsons": 13883, + "Trio": 13884, + "offshore": 13885, + "Innovation": 13886, + "clutched": 13887, + "260": 13888, + "##mund": 13889, + "##duct": 13890, + "Prairie": 13891, + "relied": 13892, + "Falcon": 13893, + "##ste": 13894, + "Kolkata": 13895, + "Gill": 13896, + "Swift": 13897, + "Negro": 13898, + "Zoo": 13899, + "valleys": 13900, + "##OL": 13901, + "Opening": 13902, + "beams": 13903, + "MPs": 13904, + "outline": 13905, + "Bermuda": 13906, + "Personal": 13907, + "exceed": 13908, + "productive": 13909, + "##MT": 13910, + "republic": 13911, + "forum": 13912, + "##sty": 13913, + "tornado": 13914, + "Known": 13915, + "dipped": 13916, + "Edith": 13917, + "folks": 13918, + "mathematician": 13919, + "watershed": 13920, + "Ricardo": 13921, + "synthetic": 13922, + "##dication": 13923, + "deity": 13924, + "##₄": 13925, + "gaming": 13926, + "subjected": 13927, + "suspects": 13928, + "Foot": 13929, + "swollen": 13930, + "Motors": 13931, + "##tty": 13932, + "##ý": 13933, + "aloud": 13934, + "ceremonial": 13935, + "es": 13936, + "nuts": 13937, + "intend": 13938, + "Carlisle": 13939, + "tasked": 13940, + "hesitation": 13941, + "sponsors": 13942, + "unified": 13943, + "inmates": 13944, + "##ctions": 13945, + "##stan": 13946, + "tiles": 13947, + "jokes": 13948, + "whereby": 13949, + "outcomes": 13950, + "Lights": 13951, + "scary": 13952, + "Stoke": 13953, + "Portrait": 13954, + "Blind": 13955, + "sergeant": 13956, + "violations": 13957, + "cultivation": 13958, + "fuselage": 13959, + "Mister": 13960, + "Alfonso": 13961, + "candy": 13962, + "sticks": 13963, + "teen": 13964, + "agony": 13965, + "Enough": 13966, + "invite": 13967, + "Perkins": 13968, + "Appeal": 13969, + "mapping": 13970, + "undergo": 13971, + "Glacier": 13972, + "Melanie": 13973, + "affects": 13974, + "incomplete": 13975, + "##dd": 13976, + "Colombian": 13977, + "##nate": 13978, + "CBC": 13979, + "purchasing": 13980, + "bypass": 13981, + "Drug": 13982, + "Electronics": 13983, + "Frontier": 13984, + "Coventry": 13985, + "##aan": 13986, + "autonomy": 13987, + "scrambled": 13988, + "Recent": 13989, + "bounced": 13990, + "cow": 13991, + "experiencing": 13992, + "Rouge": 13993, + "cuisine": 13994, + "Elite": 13995, + "disability": 13996, + "Ji": 13997, + "inheritance": 13998, + "wildly": 13999, + "Into": 14000, + "##wig": 14001, + "confrontation": 14002, + "Wheeler": 14003, + "shiver": 14004, + "Performing": 14005, + "aligned": 14006, + "consequently": 14007, + "Alexis": 14008, + "Sin": 14009, + "woodland": 14010, + "executives": 14011, + "Stevenson": 14012, + "Ferrari": 14013, + "inevitable": 14014, + "##cist": 14015, + "##dha": 14016, + "##base": 14017, + "Corner": 14018, + "comeback": 14019, + "León": 14020, + "##eck": 14021, + "##urus": 14022, + "MacDonald": 14023, + "pioneering": 14024, + "breakdown": 14025, + "landscapes": 14026, + "Veterans": 14027, + "Rican": 14028, + "Theological": 14029, + "stirred": 14030, + "participant": 14031, + "Credit": 14032, + "Hyderabad": 14033, + "snails": 14034, + "Claudia": 14035, + "##ocene": 14036, + "compliance": 14037, + "##MI": 14038, + "Flags": 14039, + "Middlesex": 14040, + "storms": 14041, + "winding": 14042, + "asserted": 14043, + "er": 14044, + "##ault": 14045, + "##kal": 14046, + "waking": 14047, + "##rates": 14048, + "abbey": 14049, + "Augusta": 14050, + "tooth": 14051, + "trustees": 14052, + "Commodore": 14053, + "##uded": 14054, + "Cunningham": 14055, + "NC": 14056, + "Witch": 14057, + "marching": 14058, + "Sword": 14059, + "Same": 14060, + "spiral": 14061, + "Harley": 14062, + "##ahan": 14063, + "Zack": 14064, + "Audio": 14065, + "1890s": 14066, + "##fit": 14067, + "Simmons": 14068, + "Kara": 14069, + "Veronica": 14070, + "negotiated": 14071, + "Speaking": 14072, + "FIBA": 14073, + "Conservatory": 14074, + "formations": 14075, + "constituencies": 14076, + "explicit": 14077, + "facial": 14078, + "eleventh": 14079, + "##ilt": 14080, + "villain": 14081, + "##dog": 14082, + "##case": 14083, + "##hol": 14084, + "armored": 14085, + "tin": 14086, + "hairs": 14087, + "##umi": 14088, + "##rai": 14089, + "mattress": 14090, + "Angus": 14091, + "cease": 14092, + "verbal": 14093, + "Recreation": 14094, + "savings": 14095, + "Aurora": 14096, + "peers": 14097, + "Monastery": 14098, + "Airways": 14099, + "drowned": 14100, + "additions": 14101, + "downstream": 14102, + "sticking": 14103, + "Shi": 14104, + "mice": 14105, + "skiing": 14106, + "##CD": 14107, + "Raw": 14108, + "Riverside": 14109, + "warming": 14110, + "hooked": 14111, + "boost": 14112, + "memorable": 14113, + "posed": 14114, + "treatments": 14115, + "320": 14116, + "##dai": 14117, + "celebrating": 14118, + "blink": 14119, + "helpless": 14120, + "circa": 14121, + "Flowers": 14122, + "PM": 14123, + "uncommon": 14124, + "Oct": 14125, + "Hawks": 14126, + "overwhelmed": 14127, + "Sparhawk": 14128, + "repaired": 14129, + "Mercy": 14130, + "pose": 14131, + "counterpart": 14132, + "compare": 14133, + "survives": 14134, + "##½": 14135, + "##eum": 14136, + "coordinate": 14137, + "Lil": 14138, + "grandchildren": 14139, + "notorious": 14140, + "Yi": 14141, + "Judaism": 14142, + "Juliet": 14143, + "accusations": 14144, + "1789": 14145, + "floated": 14146, + "marathon": 14147, + "roar": 14148, + "fortified": 14149, + "reunion": 14150, + "145": 14151, + "Nov": 14152, + "Paula": 14153, + "##fare": 14154, + "##toria": 14155, + "tearing": 14156, + "Cedar": 14157, + "disappearance": 14158, + "Si": 14159, + "gifted": 14160, + "scar": 14161, + "270": 14162, + "PBS": 14163, + "Technologies": 14164, + "Marvin": 14165, + "650": 14166, + "roller": 14167, + "cupped": 14168, + "negotiate": 14169, + "##erman": 14170, + "passport": 14171, + "tram": 14172, + "miracle": 14173, + "styled": 14174, + "##tier": 14175, + "necessity": 14176, + "Des": 14177, + "rehabilitation": 14178, + "Lara": 14179, + "USD": 14180, + "psychic": 14181, + "wipe": 14182, + "##lem": 14183, + "mistaken": 14184, + "##lov": 14185, + "charming": 14186, + "Rider": 14187, + "pageant": 14188, + "dynamics": 14189, + "Cassidy": 14190, + "##icus": 14191, + "defenses": 14192, + "##tadt": 14193, + "##vant": 14194, + "aging": 14195, + "##inal": 14196, + "declare": 14197, + "mistress": 14198, + "supervised": 14199, + "##alis": 14200, + "##rest": 14201, + "Ashton": 14202, + "submerged": 14203, + "sack": 14204, + "Dodge": 14205, + "grocery": 14206, + "ramp": 14207, + "Teacher": 14208, + "lineage": 14209, + "imagery": 14210, + "arrange": 14211, + "inscriptions": 14212, + "Organisation": 14213, + "Siege": 14214, + "combines": 14215, + "pounded": 14216, + "Fleming": 14217, + "legends": 14218, + "columnist": 14219, + "Apostolic": 14220, + "prose": 14221, + "insight": 14222, + "Arabian": 14223, + "expired": 14224, + "##uses": 14225, + "##nos": 14226, + "Alone": 14227, + "elbows": 14228, + "##asis": 14229, + "##adi": 14230, + "##combe": 14231, + "Step": 14232, + "Waterloo": 14233, + "Alternate": 14234, + "interval": 14235, + "Sonny": 14236, + "plains": 14237, + "Goals": 14238, + "incorporating": 14239, + "recruit": 14240, + "adjoining": 14241, + "Cheshire": 14242, + "excluding": 14243, + "marrying": 14244, + "ducked": 14245, + "Cherokee": 14246, + "par": 14247, + "##inate": 14248, + "hiking": 14249, + "Coal": 14250, + "##bow": 14251, + "natives": 14252, + "ribbon": 14253, + "Allies": 14254, + "con": 14255, + "descriptions": 14256, + "positively": 14257, + "##lal": 14258, + "defendant": 14259, + "22nd": 14260, + "Vivian": 14261, + "##beat": 14262, + "Weather": 14263, + "possessions": 14264, + "Date": 14265, + "sweetheart": 14266, + "inability": 14267, + "Salisbury": 14268, + "adviser": 14269, + "ideology": 14270, + "Nordic": 14271, + "##eu": 14272, + "Cubs": 14273, + "IP": 14274, + "Administrative": 14275, + "##nick": 14276, + "facto": 14277, + "liberation": 14278, + "Burnett": 14279, + "Javier": 14280, + "fashioned": 14281, + "Electoral": 14282, + "Turin": 14283, + "theft": 14284, + "unanimous": 14285, + "Per": 14286, + "1799": 14287, + "Clan": 14288, + "Hawkins": 14289, + "Teachers": 14290, + "##wes": 14291, + "Cameroon": 14292, + "Parkway": 14293, + "##gment": 14294, + "demolition": 14295, + "atoms": 14296, + "nucleus": 14297, + "##thi": 14298, + "recovering": 14299, + "##yte": 14300, + "##vice": 14301, + "lifts": 14302, + "Must": 14303, + "deposit": 14304, + "Hancock": 14305, + "Semi": 14306, + "darkened": 14307, + "Declaration": 14308, + "moan": 14309, + "muscular": 14310, + "Myers": 14311, + "attractions": 14312, + "sauce": 14313, + "simulation": 14314, + "##weed": 14315, + "Alps": 14316, + "barriers": 14317, + "##baum": 14318, + "Barack": 14319, + "galleries": 14320, + "Min": 14321, + "holders": 14322, + "Greenwich": 14323, + "donation": 14324, + "Everybody": 14325, + "Wolfgang": 14326, + "sandwich": 14327, + "Kendra": 14328, + "Collegiate": 14329, + "casino": 14330, + "Slavic": 14331, + "ensuing": 14332, + "Porto": 14333, + "##grapher": 14334, + "Jesuit": 14335, + "suppressed": 14336, + "tires": 14337, + "Ibrahim": 14338, + "protesters": 14339, + "Ibn": 14340, + "Amos": 14341, + "1796": 14342, + "phenomena": 14343, + "Hayden": 14344, + "Paraguay": 14345, + "Squad": 14346, + "Reilly": 14347, + "complement": 14348, + "aluminum": 14349, + "##eers": 14350, + "doubts": 14351, + "decay": 14352, + "demise": 14353, + "Practice": 14354, + "patience": 14355, + "fireplace": 14356, + "transparent": 14357, + "monarchy": 14358, + "##person": 14359, + "Rodney": 14360, + "mattered": 14361, + "rotating": 14362, + "Clifford": 14363, + "disposal": 14364, + "Standards": 14365, + "paced": 14366, + "##llie": 14367, + "arise": 14368, + "tallest": 14369, + "tug": 14370, + "documentation": 14371, + "node": 14372, + "freeway": 14373, + "Nikolai": 14374, + "##cite": 14375, + "clicked": 14376, + "imaging": 14377, + "Lorraine": 14378, + "Tactical": 14379, + "Different": 14380, + "Regular": 14381, + "Holding": 14382, + "165": 14383, + "Pilot": 14384, + "guarded": 14385, + "##polis": 14386, + "Classics": 14387, + "Mongolia": 14388, + "Brock": 14389, + "monarch": 14390, + "cellular": 14391, + "receptors": 14392, + "Mini": 14393, + "Chandler": 14394, + "financed": 14395, + "financially": 14396, + "Lives": 14397, + "erection": 14398, + "Fuller": 14399, + "unnamed": 14400, + "Kannada": 14401, + "cc": 14402, + "passive": 14403, + "plateau": 14404, + "##arity": 14405, + "freak": 14406, + "##rde": 14407, + "retrieved": 14408, + "transactions": 14409, + "##sus": 14410, + "23rd": 14411, + "swimmer": 14412, + "beef": 14413, + "fulfill": 14414, + "Arlington": 14415, + "offspring": 14416, + "reasoning": 14417, + "Rhys": 14418, + "saves": 14419, + "pseudonym": 14420, + "centimetres": 14421, + "shivered": 14422, + "shuddered": 14423, + "##ME": 14424, + "Feel": 14425, + "##otic": 14426, + "professors": 14427, + "Blackburn": 14428, + "##eng": 14429, + "##life": 14430, + "##haw": 14431, + "interred": 14432, + "lodge": 14433, + "fragile": 14434, + "Della": 14435, + "guardian": 14436, + "##bbled": 14437, + "catalog": 14438, + "clad": 14439, + "observer": 14440, + "tract": 14441, + "declaring": 14442, + "##headed": 14443, + "Lok": 14444, + "dean": 14445, + "Isabelle": 14446, + "1776": 14447, + "irrigation": 14448, + "spectacular": 14449, + "shuttle": 14450, + "mastering": 14451, + "##aro": 14452, + "Nathaniel": 14453, + "Retired": 14454, + "##lves": 14455, + "Brennan": 14456, + "##kha": 14457, + "dick": 14458, + "##dated": 14459, + "##hler": 14460, + "Rookie": 14461, + "leapt": 14462, + "televised": 14463, + "weekends": 14464, + "Baghdad": 14465, + "Yemen": 14466, + "##fo": 14467, + "factions": 14468, + "ion": 14469, + "Lab": 14470, + "mortality": 14471, + "passionate": 14472, + "Hammer": 14473, + "encompasses": 14474, + "confluence": 14475, + "demonstrations": 14476, + "Ki": 14477, + "derivative": 14478, + "soils": 14479, + "##unch": 14480, + "Ranch": 14481, + "Universities": 14482, + "conventions": 14483, + "outright": 14484, + "aiming": 14485, + "hierarchy": 14486, + "reside": 14487, + "illusion": 14488, + "graves": 14489, + "rituals": 14490, + "126": 14491, + "Antwerp": 14492, + "Dover": 14493, + "##ema": 14494, + "campuses": 14495, + "Hobart": 14496, + "lifelong": 14497, + "aliens": 14498, + "##vity": 14499, + "Memory": 14500, + "coordination": 14501, + "alphabet": 14502, + "##mina": 14503, + "Titans": 14504, + "pushes": 14505, + "Flanders": 14506, + "##holder": 14507, + "Normal": 14508, + "excellence": 14509, + "capped": 14510, + "profound": 14511, + "Taipei": 14512, + "portrayal": 14513, + "sparked": 14514, + "scratch": 14515, + "se": 14516, + "##eas": 14517, + "##hir": 14518, + "Mackenzie": 14519, + "##cation": 14520, + "Neo": 14521, + "Shin": 14522, + "##lined": 14523, + "magnificent": 14524, + "poster": 14525, + "batsman": 14526, + "##rgent": 14527, + "persuade": 14528, + "##ement": 14529, + "Icelandic": 14530, + "miserable": 14531, + "collegiate": 14532, + "Feature": 14533, + "geography": 14534, + "##mura": 14535, + "Comic": 14536, + "Circus": 14537, + "processor": 14538, + "barracks": 14539, + "Tale": 14540, + "##11": 14541, + "Bulls": 14542, + "##rap": 14543, + "strengthened": 14544, + "##bell": 14545, + "injection": 14546, + "miniature": 14547, + "broadly": 14548, + "Letter": 14549, + "fare": 14550, + "hostage": 14551, + "traders": 14552, + "##nium": 14553, + "##mere": 14554, + "Fortune": 14555, + "Rivera": 14556, + "Lu": 14557, + "triumph": 14558, + "Browns": 14559, + "Bangalore": 14560, + "cooperative": 14561, + "Basel": 14562, + "announcing": 14563, + "Sawyer": 14564, + "##him": 14565, + "##cco": 14566, + "##kara": 14567, + "darted": 14568, + "##AD": 14569, + "##nova": 14570, + "sucking": 14571, + "##position": 14572, + "perimeter": 14573, + "flung": 14574, + "Holdings": 14575, + "##NP": 14576, + "Basque": 14577, + "sketches": 14578, + "Augustine": 14579, + "Silk": 14580, + "Elijah": 14581, + "analyst": 14582, + "armour": 14583, + "riots": 14584, + "acquiring": 14585, + "ghosts": 14586, + "##ems": 14587, + "132": 14588, + "Pioneer": 14589, + "Colleges": 14590, + "Simone": 14591, + "Economy": 14592, + "Author": 14593, + "semester": 14594, + "Soldier": 14595, + "il": 14596, + "##unting": 14597, + "##bid": 14598, + "freaking": 14599, + "Vista": 14600, + "tumor": 14601, + "##bat": 14602, + "murderer": 14603, + "##eda": 14604, + "unreleased": 14605, + "##grove": 14606, + "##sser": 14607, + "##té": 14608, + "edit": 14609, + "statute": 14610, + "sovereign": 14611, + "##gawa": 14612, + "Killer": 14613, + "stares": 14614, + "Fury": 14615, + "comply": 14616, + "##lord": 14617, + "##nant": 14618, + "barrels": 14619, + "Andhra": 14620, + "Maple": 14621, + "generator": 14622, + "mascot": 14623, + "unusually": 14624, + "eds": 14625, + "##ante": 14626, + "##runner": 14627, + "rod": 14628, + "##tles": 14629, + "Historically": 14630, + "Jennings": 14631, + "dumped": 14632, + "Established": 14633, + "resemblance": 14634, + "##lium": 14635, + "##cise": 14636, + "##body": 14637, + "##voke": 14638, + "Lydia": 14639, + "##hou": 14640, + "##iring": 14641, + "nonetheless": 14642, + "1797": 14643, + "corrupt": 14644, + "patrons": 14645, + "physicist": 14646, + "sneak": 14647, + "Livingston": 14648, + "Citizens": 14649, + "Architects": 14650, + "Werner": 14651, + "trends": 14652, + "Melody": 14653, + "eighty": 14654, + "markings": 14655, + "brakes": 14656, + "##titled": 14657, + "oversaw": 14658, + "processed": 14659, + "mock": 14660, + "Midwest": 14661, + "intervals": 14662, + "##EF": 14663, + "stretches": 14664, + "werewolf": 14665, + "##MG": 14666, + "Pack": 14667, + "controller": 14668, + "##dition": 14669, + "Honours": 14670, + "cane": 14671, + "Griffith": 14672, + "vague": 14673, + "repertoire": 14674, + "Courtney": 14675, + "orgasm": 14676, + "Abdullah": 14677, + "dominance": 14678, + "occupies": 14679, + "Ya": 14680, + "introduces": 14681, + "Lester": 14682, + "instinct": 14683, + "collaborative": 14684, + "Indigenous": 14685, + "refusal": 14686, + "##rank": 14687, + "outlet": 14688, + "debts": 14689, + "spear": 14690, + "155": 14691, + "##keeping": 14692, + "##ulu": 14693, + "Catalan": 14694, + "##osh": 14695, + "tensions": 14696, + "##OT": 14697, + "bred": 14698, + "crude": 14699, + "Dunn": 14700, + "abdomen": 14701, + "accurately": 14702, + "##fu": 14703, + "##lough": 14704, + "accidents": 14705, + "Row": 14706, + "Audrey": 14707, + "rude": 14708, + "Getting": 14709, + "promotes": 14710, + "replies": 14711, + "Paolo": 14712, + "merge": 14713, + "##nock": 14714, + "trans": 14715, + "Evangelical": 14716, + "automated": 14717, + "Canon": 14718, + "##wear": 14719, + "##ggy": 14720, + "##gma": 14721, + "Broncos": 14722, + "foolish": 14723, + "icy": 14724, + "Voices": 14725, + "knives": 14726, + "Aside": 14727, + "dreamed": 14728, + "generals": 14729, + "molecule": 14730, + "AG": 14731, + "rejection": 14732, + "insufficient": 14733, + "##nagar": 14734, + "deposited": 14735, + "sacked": 14736, + "Landing": 14737, + "arches": 14738, + "helpful": 14739, + "devotion": 14740, + "intake": 14741, + "Flower": 14742, + "PGA": 14743, + "dragons": 14744, + "evolutionary": 14745, + "##mail": 14746, + "330": 14747, + "GM": 14748, + "tissues": 14749, + "##tree": 14750, + "arcade": 14751, + "composite": 14752, + "lid": 14753, + "Across": 14754, + "implications": 14755, + "lacks": 14756, + "theological": 14757, + "assessed": 14758, + "concentrations": 14759, + "Den": 14760, + "##mans": 14761, + "##ulous": 14762, + "Fu": 14763, + "homeland": 14764, + "##stream": 14765, + "Harriet": 14766, + "ecclesiastical": 14767, + "troop": 14768, + "ecological": 14769, + "winked": 14770, + "##xed": 14771, + "eighteenth": 14772, + "Casino": 14773, + "specializing": 14774, + "##sworth": 14775, + "unlocked": 14776, + "supreme": 14777, + "devastated": 14778, + "snatched": 14779, + "trauma": 14780, + "GDP": 14781, + "Nord": 14782, + "saddle": 14783, + "Wes": 14784, + "convenient": 14785, + "competes": 14786, + "##nu": 14787, + "##iss": 14788, + "Marian": 14789, + "subway": 14790, + "##rri": 14791, + "successes": 14792, + "umbrella": 14793, + "##far": 14794, + "##ually": 14795, + "Dundee": 14796, + "##cence": 14797, + "spark": 14798, + "##rix": 14799, + "##я": 14800, + "Quality": 14801, + "Geological": 14802, + "cockpit": 14803, + "rpm": 14804, + "Cam": 14805, + "Bucharest": 14806, + "riot": 14807, + "##PM": 14808, + "Leah": 14809, + "##dad": 14810, + "##pose": 14811, + "Ka": 14812, + "m³": 14813, + "Bundesliga": 14814, + "Wolfe": 14815, + "grim": 14816, + "textile": 14817, + "quartet": 14818, + "expressing": 14819, + "fantastic": 14820, + "destroyers": 14821, + "eternal": 14822, + "picnic": 14823, + "##oro": 14824, + "contractor": 14825, + "1775": 14826, + "spanning": 14827, + "declining": 14828, + "##cating": 14829, + "Lowe": 14830, + "Sutherland": 14831, + "Emirates": 14832, + "downward": 14833, + "nineteen": 14834, + "violently": 14835, + "scout": 14836, + "viral": 14837, + "melting": 14838, + "enterprises": 14839, + "##cer": 14840, + "Crosby": 14841, + "Jubilee": 14842, + "antenna": 14843, + "urgent": 14844, + "Rory": 14845, + "##uin": 14846, + "##sure": 14847, + "wandering": 14848, + "##gler": 14849, + "##vent": 14850, + "Suzuki": 14851, + "Lifetime": 14852, + "Dirty": 14853, + "occupying": 14854, + "##quent": 14855, + "Disc": 14856, + "Guru": 14857, + "mound": 14858, + "Lennon": 14859, + "Humanities": 14860, + "listeners": 14861, + "Walton": 14862, + "uh": 14863, + "Braves": 14864, + "Bologna": 14865, + "##bis": 14866, + "##gra": 14867, + "Dwight": 14868, + "crawl": 14869, + "flags": 14870, + "memoir": 14871, + "Thorne": 14872, + "Archdiocese": 14873, + "dairy": 14874, + "##uz": 14875, + "##tery": 14876, + "roared": 14877, + "adjust": 14878, + "patches": 14879, + "inn": 14880, + "Knowing": 14881, + "##bbed": 14882, + "##zan": 14883, + "scan": 14884, + "Papa": 14885, + "precipitation": 14886, + "angrily": 14887, + "passages": 14888, + "postal": 14889, + "Phi": 14890, + "embraced": 14891, + "blacks": 14892, + "economist": 14893, + "triangular": 14894, + "Sen": 14895, + "shooter": 14896, + "punished": 14897, + "Millennium": 14898, + "Swimming": 14899, + "confessed": 14900, + "Aston": 14901, + "defeats": 14902, + "Era": 14903, + "cousins": 14904, + "Williamson": 14905, + "##rer": 14906, + "daytime": 14907, + "dumb": 14908, + "##rek": 14909, + "underway": 14910, + "specification": 14911, + "Buchanan": 14912, + "prayed": 14913, + "concealed": 14914, + "activation": 14915, + "##issa": 14916, + "canon": 14917, + "awesome": 14918, + "Starr": 14919, + "plural": 14920, + "summers": 14921, + "##fields": 14922, + "Slam": 14923, + "unnecessary": 14924, + "1791": 14925, + "resume": 14926, + "trilogy": 14927, + "compression": 14928, + "##rough": 14929, + "selective": 14930, + "dignity": 14931, + "Yan": 14932, + "##xton": 14933, + "immense": 14934, + "##yun": 14935, + "lone": 14936, + "seeded": 14937, + "hiatus": 14938, + "lightweight": 14939, + "summary": 14940, + "Yo": 14941, + "approve": 14942, + "Galway": 14943, + "rejoined": 14944, + "Elise": 14945, + "garbage": 14946, + "burns": 14947, + "speeches": 14948, + "129": 14949, + "Honduras": 14950, + "##liness": 14951, + "inventory": 14952, + "jersey": 14953, + "FK": 14954, + "assure": 14955, + "slumped": 14956, + "Lionel": 14957, + "Suite": 14958, + "##sbury": 14959, + "Lena": 14960, + "continuation": 14961, + "##AN": 14962, + "brightly": 14963, + "##nti": 14964, + "GT": 14965, + "Knowledge": 14966, + "##park": 14967, + "##lius": 14968, + "lethal": 14969, + "##tribution": 14970, + "##sions": 14971, + "Certificate": 14972, + "Mara": 14973, + "##lby": 14974, + "algorithms": 14975, + "Jade": 14976, + "blows": 14977, + "pirates": 14978, + "fleeing": 14979, + "wheelchair": 14980, + "Stein": 14981, + "sophomore": 14982, + "Alt": 14983, + "Territorial": 14984, + "diploma": 14985, + "snakes": 14986, + "##olic": 14987, + "##tham": 14988, + "Tiffany": 14989, + "Pius": 14990, + "flush": 14991, + "urging": 14992, + "Hanover": 14993, + "Reich": 14994, + "##olate": 14995, + "Unity": 14996, + "Pike": 14997, + "collectively": 14998, + "Theme": 14999, + "ballad": 15000, + "kindergarten": 15001, + "rocked": 15002, + "zoo": 15003, + "##page": 15004, + "whip": 15005, + "Rodríguez": 15006, + "strokes": 15007, + "checks": 15008, + "Becky": 15009, + "Stern": 15010, + "upstream": 15011, + "##uta": 15012, + "Silent": 15013, + "volunteered": 15014, + "Sigma": 15015, + "##ingen": 15016, + "##tract": 15017, + "##ede": 15018, + "Gujarat": 15019, + "screwed": 15020, + "entertaining": 15021, + "##action": 15022, + "##ryn": 15023, + "defenders": 15024, + "innocence": 15025, + "lesbian": 15026, + "que": 15027, + "Richie": 15028, + "nodes": 15029, + "Lie": 15030, + "juvenile": 15031, + "Jakarta": 15032, + "safer": 15033, + "confront": 15034, + "Bert": 15035, + "breakthrough": 15036, + "gospel": 15037, + "Cable": 15038, + "##zie": 15039, + "institutional": 15040, + "Archive": 15041, + "brake": 15042, + "liquor": 15043, + "feeds": 15044, + "##iate": 15045, + "chancellor": 15046, + "Encyclopedia": 15047, + "Animation": 15048, + "scanning": 15049, + "teens": 15050, + "##mother": 15051, + "Core": 15052, + "Rear": 15053, + "Wine": 15054, + "##flower": 15055, + "reactor": 15056, + "Ave": 15057, + "cardinal": 15058, + "sodium": 15059, + "strands": 15060, + "Olivier": 15061, + "crouched": 15062, + "Vaughan": 15063, + "Sammy": 15064, + "Image": 15065, + "scars": 15066, + "Emmanuel": 15067, + "flour": 15068, + "bias": 15069, + "nipple": 15070, + "revelation": 15071, + "##ucci": 15072, + "Denny": 15073, + "##ssy": 15074, + "Form": 15075, + "Runners": 15076, + "admits": 15077, + "Rama": 15078, + "violated": 15079, + "Burmese": 15080, + "feud": 15081, + "underwear": 15082, + "Mohamed": 15083, + "Named": 15084, + "swift": 15085, + "statewide": 15086, + "Door": 15087, + "Recently": 15088, + "comparing": 15089, + "Hundred": 15090, + "##idge": 15091, + "##nity": 15092, + "##rds": 15093, + "Rally": 15094, + "Reginald": 15095, + "Auburn": 15096, + "solving": 15097, + "waitress": 15098, + "Treasurer": 15099, + "##ilization": 15100, + "Halloween": 15101, + "Ministers": 15102, + "Boss": 15103, + "Shut": 15104, + "##listic": 15105, + "Rahman": 15106, + "demonstrating": 15107, + "##pies": 15108, + "Gaza": 15109, + "Yuri": 15110, + "installations": 15111, + "Math": 15112, + "schooling": 15113, + "##bble": 15114, + "Bronx": 15115, + "exiled": 15116, + "gasoline": 15117, + "133": 15118, + "bundle": 15119, + "humid": 15120, + "FCC": 15121, + "proportional": 15122, + "relate": 15123, + "VFL": 15124, + "##dez": 15125, + "continuity": 15126, + "##cene": 15127, + "syndicated": 15128, + "atmospheric": 15129, + "arrows": 15130, + "Wanderers": 15131, + "reinforcements": 15132, + "Willow": 15133, + "Lexington": 15134, + "Rotten": 15135, + "##yon": 15136, + "discovering": 15137, + "Serena": 15138, + "portable": 15139, + "##lysis": 15140, + "targeting": 15141, + "£1": 15142, + "Goodman": 15143, + "Steam": 15144, + "sensors": 15145, + "detachment": 15146, + "Malik": 15147, + "##erie": 15148, + "attitudes": 15149, + "Goes": 15150, + "Kendall": 15151, + "Read": 15152, + "Sleep": 15153, + "beans": 15154, + "Nikki": 15155, + "modification": 15156, + "Jeanne": 15157, + "knuckles": 15158, + "Eleven": 15159, + "##iously": 15160, + "Gross": 15161, + "Jaime": 15162, + "dioxide": 15163, + "moisture": 15164, + "Stones": 15165, + "UCI": 15166, + "displacement": 15167, + "Metacritic": 15168, + "Jury": 15169, + "lace": 15170, + "rendering": 15171, + "elephant": 15172, + "Sergei": 15173, + "##quire": 15174, + "GP": 15175, + "Abbott": 15176, + "##type": 15177, + "projection": 15178, + "Mouse": 15179, + "Bishops": 15180, + "whispering": 15181, + "Kathleen": 15182, + "Rams": 15183, + "##jar": 15184, + "whites": 15185, + "##oran": 15186, + "assess": 15187, + "dispatched": 15188, + "##hire": 15189, + "kin": 15190, + "##mir": 15191, + "Nursing": 15192, + "advocates": 15193, + "tremendous": 15194, + "sweater": 15195, + "assisting": 15196, + "##bil": 15197, + "Farmer": 15198, + "prominently": 15199, + "reddish": 15200, + "Hague": 15201, + "cyclone": 15202, + "##SD": 15203, + "Sage": 15204, + "Lawson": 15205, + "Sanctuary": 15206, + "discharged": 15207, + "retains": 15208, + "##ube": 15209, + "shotgun": 15210, + "wilderness": 15211, + "Reformed": 15212, + "similarity": 15213, + "Entry": 15214, + "Watts": 15215, + "Bahá": 15216, + "Quest": 15217, + "Looks": 15218, + "visions": 15219, + "Reservoir": 15220, + "Arabs": 15221, + "curls": 15222, + "Blu": 15223, + "dripping": 15224, + "accomplish": 15225, + "Verlag": 15226, + "drill": 15227, + "sensor": 15228, + "Dillon": 15229, + "physicians": 15230, + "smashed": 15231, + "##dir": 15232, + "painters": 15233, + "Renault": 15234, + "straw": 15235, + "fading": 15236, + "Directorate": 15237, + "lounge": 15238, + "commissions": 15239, + "Brain": 15240, + "##graph": 15241, + "neo": 15242, + "##urg": 15243, + "plug": 15244, + "coordinated": 15245, + "##houses": 15246, + "Critical": 15247, + "lamps": 15248, + "illustrator": 15249, + "Returning": 15250, + "erosion": 15251, + "Crow": 15252, + "##ciation": 15253, + "blessing": 15254, + "Thought": 15255, + "Wife": 15256, + "medalist": 15257, + "synthesizer": 15258, + "Pam": 15259, + "Thornton": 15260, + "Esther": 15261, + "HBO": 15262, + "fond": 15263, + "Associates": 15264, + "##raz": 15265, + "pirate": 15266, + "permits": 15267, + "Wide": 15268, + "tire": 15269, + "##PC": 15270, + "Ernie": 15271, + "Nassau": 15272, + "transferring": 15273, + "RFC": 15274, + "##ntly": 15275, + "um": 15276, + "spit": 15277, + "AS": 15278, + "##mps": 15279, + "Mining": 15280, + "polar": 15281, + "villa": 15282, + "anchored": 15283, + "##zzi": 15284, + "embarrassment": 15285, + "relates": 15286, + "##ă": 15287, + "Rupert": 15288, + "counterparts": 15289, + "131": 15290, + "Baxter": 15291, + "##18": 15292, + "Igor": 15293, + "recognizes": 15294, + "Clive": 15295, + "##hane": 15296, + "##eries": 15297, + "##ibly": 15298, + "occurrence": 15299, + "##scope": 15300, + "fin": 15301, + "colorful": 15302, + "Rapids": 15303, + "banker": 15304, + "tile": 15305, + "##rative": 15306, + "##dus": 15307, + "delays": 15308, + "destinations": 15309, + "##llis": 15310, + "Pond": 15311, + "Dane": 15312, + "grandparents": 15313, + "rewarded": 15314, + "socially": 15315, + "motorway": 15316, + "##hof": 15317, + "##lying": 15318, + "##human": 15319, + "modeled": 15320, + "Dayton": 15321, + "Forward": 15322, + "conscience": 15323, + "Sharma": 15324, + "whistle": 15325, + "Mayer": 15326, + "Sasha": 15327, + "##pical": 15328, + "circuits": 15329, + "Zhou": 15330, + "##ça": 15331, + "Latvian": 15332, + "finalists": 15333, + "predators": 15334, + "Lafayette": 15335, + "closes": 15336, + "obligations": 15337, + "Resolution": 15338, + "##vier": 15339, + "Trustees": 15340, + "reminiscent": 15341, + "##hos": 15342, + "Highlands": 15343, + "Protected": 15344, + "asylum": 15345, + "evacuation": 15346, + "##acy": 15347, + "Chevrolet": 15348, + "confession": 15349, + "Somalia": 15350, + "emergence": 15351, + "separating": 15352, + "##rica": 15353, + "alright": 15354, + "calcium": 15355, + "Laurent": 15356, + "Welfare": 15357, + "Leonardo": 15358, + "ashes": 15359, + "dental": 15360, + "Deal": 15361, + "minerals": 15362, + "##lump": 15363, + "##mount": 15364, + "accounted": 15365, + "staggered": 15366, + "slogan": 15367, + "photographic": 15368, + "builder": 15369, + "##imes": 15370, + "##raft": 15371, + "tragic": 15372, + "144": 15373, + "SEC": 15374, + "Hit": 15375, + "tailed": 15376, + "##ples": 15377, + "##rring": 15378, + "##rson": 15379, + "ethical": 15380, + "wrestlers": 15381, + "concludes": 15382, + "lunar": 15383, + "##ept": 15384, + "nitrogen": 15385, + "Aid": 15386, + "cyclist": 15387, + "quarterfinals": 15388, + "##ه": 15389, + "harvest": 15390, + "##hem": 15391, + "Pasha": 15392, + "IL": 15393, + "##mis": 15394, + "continually": 15395, + "##forth": 15396, + "Intel": 15397, + "bucket": 15398, + "##ended": 15399, + "witches": 15400, + "pretended": 15401, + "dresses": 15402, + "viewer": 15403, + "peculiar": 15404, + "lowering": 15405, + "volcano": 15406, + "Marilyn": 15407, + "Qualifier": 15408, + "clung": 15409, + "##sher": 15410, + "Cut": 15411, + "modules": 15412, + "Bowie": 15413, + "##lded": 15414, + "onset": 15415, + "transcription": 15416, + "residences": 15417, + "##pie": 15418, + "##itor": 15419, + "scrapped": 15420, + "##bic": 15421, + "Monaco": 15422, + "Mayo": 15423, + "eternity": 15424, + "Strike": 15425, + "uncovered": 15426, + "skeleton": 15427, + "##wicz": 15428, + "Isles": 15429, + "bug": 15430, + "Promoted": 15431, + "##rush": 15432, + "Mechanical": 15433, + "XII": 15434, + "##ivo": 15435, + "gripping": 15436, + "stubborn": 15437, + "velvet": 15438, + "TD": 15439, + "decommissioned": 15440, + "operas": 15441, + "spatial": 15442, + "unstable": 15443, + "Congressman": 15444, + "wasted": 15445, + "##aga": 15446, + "##ume": 15447, + "advertisements": 15448, + "##nya": 15449, + "obliged": 15450, + "Cannes": 15451, + "Conway": 15452, + "bricks": 15453, + "##gnant": 15454, + "##mity": 15455, + "##uise": 15456, + "jumps": 15457, + "Clear": 15458, + "##cine": 15459, + "##sche": 15460, + "chord": 15461, + "utter": 15462, + "Su": 15463, + "podium": 15464, + "spokesman": 15465, + "Royce": 15466, + "assassin": 15467, + "confirmation": 15468, + "licensing": 15469, + "liberty": 15470, + "##rata": 15471, + "Geographic": 15472, + "individually": 15473, + "detained": 15474, + "##ffe": 15475, + "Saturn": 15476, + "crushing": 15477, + "airplane": 15478, + "bushes": 15479, + "knights": 15480, + "##PD": 15481, + "Lilly": 15482, + "hurts": 15483, + "unexpectedly": 15484, + "Conservatives": 15485, + "pumping": 15486, + "Forty": 15487, + "candle": 15488, + "Pérez": 15489, + "peasants": 15490, + "supplement": 15491, + "Sundays": 15492, + "##ggs": 15493, + "##rries": 15494, + "risen": 15495, + "enthusiastic": 15496, + "corresponds": 15497, + "pending": 15498, + "##IF": 15499, + "Owens": 15500, + "floods": 15501, + "Painter": 15502, + "inflation": 15503, + "presumed": 15504, + "inscribed": 15505, + "Chamberlain": 15506, + "bizarre": 15507, + "1200": 15508, + "liability": 15509, + "reacted": 15510, + "tub": 15511, + "Legacy": 15512, + "##eds": 15513, + "##pted": 15514, + "shone": 15515, + "##litz": 15516, + "##NC": 15517, + "Tiny": 15518, + "genome": 15519, + "bays": 15520, + "Eduardo": 15521, + "robbery": 15522, + "stall": 15523, + "hatch": 15524, + "Depot": 15525, + "Variety": 15526, + "Flora": 15527, + "reprinted": 15528, + "trembled": 15529, + "outlined": 15530, + "CR": 15531, + "Theresa": 15532, + "spans": 15533, + "##plication": 15534, + "Jensen": 15535, + "##eering": 15536, + "posting": 15537, + "##rky": 15538, + "pays": 15539, + "##ost": 15540, + "Marcos": 15541, + "fortifications": 15542, + "inferior": 15543, + "##ential": 15544, + "Devi": 15545, + "despair": 15546, + "Talbot": 15547, + "##chus": 15548, + "updates": 15549, + "ego": 15550, + "Booth": 15551, + "Darius": 15552, + "tops": 15553, + "##lau": 15554, + "Scene": 15555, + "##DC": 15556, + "Harlem": 15557, + "Trey": 15558, + "Generally": 15559, + "candles": 15560, + "##α": 15561, + "Neville": 15562, + "Admiralty": 15563, + "##hong": 15564, + "iconic": 15565, + "victorious": 15566, + "1600": 15567, + "Rowan": 15568, + "abundance": 15569, + "miniseries": 15570, + "clutching": 15571, + "sanctioned": 15572, + "##words": 15573, + "obscure": 15574, + "##ision": 15575, + "##rle": 15576, + "##EM": 15577, + "disappearing": 15578, + "Resort": 15579, + "Obviously": 15580, + "##eb": 15581, + "exceeded": 15582, + "1870s": 15583, + "Adults": 15584, + "##cts": 15585, + "Cry": 15586, + "Kerr": 15587, + "ragged": 15588, + "selfish": 15589, + "##lson": 15590, + "circled": 15591, + "pillars": 15592, + "galaxy": 15593, + "##asco": 15594, + "##mental": 15595, + "rebuild": 15596, + "caution": 15597, + "Resistance": 15598, + "Start": 15599, + "bind": 15600, + "splitting": 15601, + "Baba": 15602, + "Hogan": 15603, + "ps": 15604, + "partnerships": 15605, + "slam": 15606, + "Peggy": 15607, + "courthouse": 15608, + "##OD": 15609, + "organizational": 15610, + "packages": 15611, + "Angie": 15612, + "##nds": 15613, + "possesses": 15614, + "##rp": 15615, + "Expressway": 15616, + "Gould": 15617, + "Terror": 15618, + "Him": 15619, + "Geoff": 15620, + "nobles": 15621, + "##ope": 15622, + "shark": 15623, + "##nh": 15624, + "identifies": 15625, + "##oor": 15626, + "testified": 15627, + "Playing": 15628, + "##ump": 15629, + "##isa": 15630, + "stool": 15631, + "Idol": 15632, + "##pice": 15633, + "##tana": 15634, + "Byrne": 15635, + "Gerry": 15636, + "grunted": 15637, + "26th": 15638, + "observing": 15639, + "habits": 15640, + "privilege": 15641, + "immortal": 15642, + "wagons": 15643, + "##thy": 15644, + "dot": 15645, + "Bring": 15646, + "##lian": 15647, + "##witz": 15648, + "newest": 15649, + "##uga": 15650, + "constraints": 15651, + "Screen": 15652, + "Issue": 15653, + "##RNA": 15654, + "##vil": 15655, + "reminder": 15656, + "##gles": 15657, + "addiction": 15658, + "piercing": 15659, + "stunning": 15660, + "var": 15661, + "##rita": 15662, + "Signal": 15663, + "accumulated": 15664, + "##wide": 15665, + "float": 15666, + "devastating": 15667, + "viable": 15668, + "cartoons": 15669, + "Uttar": 15670, + "flared": 15671, + "##encies": 15672, + "Theology": 15673, + "patents": 15674, + "##bahn": 15675, + "privileges": 15676, + "##ava": 15677, + "##CO": 15678, + "137": 15679, + "##oped": 15680, + "##NT": 15681, + "orchestral": 15682, + "medication": 15683, + "225": 15684, + "erect": 15685, + "Nadia": 15686, + "École": 15687, + "fried": 15688, + "Sales": 15689, + "scripts": 15690, + "##rease": 15691, + "airs": 15692, + "Cage": 15693, + "inadequate": 15694, + "structured": 15695, + "countless": 15696, + "Avengers": 15697, + "Kathy": 15698, + "disguise": 15699, + "mirrors": 15700, + "Investigation": 15701, + "reservation": 15702, + "##nson": 15703, + "Legends": 15704, + "humorous": 15705, + "Mona": 15706, + "decorations": 15707, + "attachment": 15708, + "Via": 15709, + "motivation": 15710, + "Browne": 15711, + "strangers": 15712, + "##ński": 15713, + "Shadows": 15714, + "Twins": 15715, + "##pressed": 15716, + "Alma": 15717, + "Nominated": 15718, + "##ott": 15719, + "Sergio": 15720, + "canopy": 15721, + "152": 15722, + "Semifinals": 15723, + "devised": 15724, + "##irk": 15725, + "upwards": 15726, + "Traffic": 15727, + "Goddess": 15728, + "Move": 15729, + "beetles": 15730, + "138": 15731, + "spat": 15732, + "##anne": 15733, + "holdings": 15734, + "##SP": 15735, + "tangled": 15736, + "Whilst": 15737, + "Fowler": 15738, + "anthem": 15739, + "##ING": 15740, + "##ogy": 15741, + "snarled": 15742, + "moonlight": 15743, + "songwriting": 15744, + "tolerance": 15745, + "Worlds": 15746, + "exams": 15747, + "##pia": 15748, + "notices": 15749, + "sensitivity": 15750, + "poetic": 15751, + "Stephens": 15752, + "Boone": 15753, + "insect": 15754, + "reconstructed": 15755, + "Fresh": 15756, + "27th": 15757, + "balloon": 15758, + "##ables": 15759, + "Brendan": 15760, + "mug": 15761, + "##gee": 15762, + "1780": 15763, + "apex": 15764, + "exports": 15765, + "slides": 15766, + "Lahore": 15767, + "hiring": 15768, + "Shell": 15769, + "electorate": 15770, + "sexuality": 15771, + "poker": 15772, + "nonprofit": 15773, + "##imate": 15774, + "cone": 15775, + "##uce": 15776, + "Okinawa": 15777, + "superintendent": 15778, + "##HC": 15779, + "referenced": 15780, + "turret": 15781, + "Sprint": 15782, + "Citizen": 15783, + "equilibrium": 15784, + "Stafford": 15785, + "curb": 15786, + "Driver": 15787, + "Valerie": 15788, + "##rona": 15789, + "aching": 15790, + "impacts": 15791, + "##bol": 15792, + "observers": 15793, + "Downs": 15794, + "Shri": 15795, + "##uth": 15796, + "airports": 15797, + "##uda": 15798, + "assignments": 15799, + "curtains": 15800, + "solitary": 15801, + "icon": 15802, + "patrols": 15803, + "substances": 15804, + "Jasper": 15805, + "mountainous": 15806, + "Published": 15807, + "ached": 15808, + "##ingly": 15809, + "announce": 15810, + "dove": 15811, + "damaging": 15812, + "##tism": 15813, + "Primera": 15814, + "Dexter": 15815, + "limiting": 15816, + "batch": 15817, + "##uli": 15818, + "undergoing": 15819, + "refugee": 15820, + "Ye": 15821, + "admiral": 15822, + "pavement": 15823, + "##WR": 15824, + "##reed": 15825, + "pipeline": 15826, + "desires": 15827, + "Ramsey": 15828, + "Sheila": 15829, + "thickness": 15830, + "Brotherhood": 15831, + "Tea": 15832, + "instituted": 15833, + "Belt": 15834, + "Break": 15835, + "plots": 15836, + "##ais": 15837, + "masculine": 15838, + "##where": 15839, + "Theo": 15840, + "##aged": 15841, + "##mined": 15842, + "Experience": 15843, + "scratched": 15844, + "Ethiopian": 15845, + "Teaching": 15846, + "##nov": 15847, + "Aiden": 15848, + "Abe": 15849, + "Samoa": 15850, + "conditioning": 15851, + "##mous": 15852, + "Otherwise": 15853, + "fade": 15854, + "Jenks": 15855, + "##encing": 15856, + "Nat": 15857, + "##lain": 15858, + "Anyone": 15859, + "##kis": 15860, + "smirk": 15861, + "Riding": 15862, + "##nny": 15863, + "Bavarian": 15864, + "blessed": 15865, + "potatoes": 15866, + "Hook": 15867, + "##wise": 15868, + "likewise": 15869, + "hardened": 15870, + "Merry": 15871, + "amid": 15872, + "persecution": 15873, + "##sten": 15874, + "Elections": 15875, + "Hoffman": 15876, + "Pitt": 15877, + "##vering": 15878, + "distraction": 15879, + "exploitation": 15880, + "infamous": 15881, + "quote": 15882, + "averaging": 15883, + "healed": 15884, + "Rhythm": 15885, + "Germanic": 15886, + "Mormon": 15887, + "illuminated": 15888, + "guides": 15889, + "##ische": 15890, + "interfere": 15891, + "##ilized": 15892, + "rector": 15893, + "perennial": 15894, + "##ival": 15895, + "Everett": 15896, + "courtesy": 15897, + "##nham": 15898, + "Kirby": 15899, + "Mk": 15900, + "##vic": 15901, + "Medieval": 15902, + "##tale": 15903, + "Luigi": 15904, + "limp": 15905, + "##diction": 15906, + "Alive": 15907, + "greeting": 15908, + "shove": 15909, + "##force": 15910, + "##fly": 15911, + "Jasmine": 15912, + "Bend": 15913, + "Capt": 15914, + "Suzanne": 15915, + "ditch": 15916, + "134": 15917, + "##nning": 15918, + "Host": 15919, + "fathers": 15920, + "rebuilding": 15921, + "Vocal": 15922, + "wires": 15923, + "##manship": 15924, + "tan": 15925, + "Factor": 15926, + "fixture": 15927, + "##LS": 15928, + "Māori": 15929, + "Plate": 15930, + "pyramid": 15931, + "##umble": 15932, + "slap": 15933, + "Schneider": 15934, + "yell": 15935, + "##ulture": 15936, + "##tional": 15937, + "Goodbye": 15938, + "sore": 15939, + "##pher": 15940, + "depressed": 15941, + "##dox": 15942, + "pitching": 15943, + "Find": 15944, + "Lotus": 15945, + "##wang": 15946, + "strand": 15947, + "Teen": 15948, + "debates": 15949, + "prevalent": 15950, + "##bilities": 15951, + "exposing": 15952, + "hears": 15953, + "billed": 15954, + "##rse": 15955, + "reorganized": 15956, + "compelled": 15957, + "disturbing": 15958, + "displaying": 15959, + "##tock": 15960, + "Clinical": 15961, + "emotionally": 15962, + "##iah": 15963, + "Derbyshire": 15964, + "grouped": 15965, + "##quel": 15966, + "Bahrain": 15967, + "Journalism": 15968, + "IN": 15969, + "persistent": 15970, + "blankets": 15971, + "Crane": 15972, + "camping": 15973, + "Direct": 15974, + "proving": 15975, + "Lola": 15976, + "##dding": 15977, + "Corporate": 15978, + "birthplace": 15979, + "##boats": 15980, + "##ender": 15981, + "Figure": 15982, + "dared": 15983, + "Assam": 15984, + "precursor": 15985, + "##nched": 15986, + "Tribe": 15987, + "Restoration": 15988, + "slate": 15989, + "Meyrick": 15990, + "hunted": 15991, + "stroking": 15992, + "Earlier": 15993, + "Kind": 15994, + "polls": 15995, + "appeals": 15996, + "monetary": 15997, + "##reate": 15998, + "Kira": 15999, + "Langdon": 16000, + "explores": 16001, + "GPS": 16002, + "extensions": 16003, + "squares": 16004, + "Results": 16005, + "draped": 16006, + "announcer": 16007, + "merit": 16008, + "##ennial": 16009, + "##tral": 16010, + "##roved": 16011, + "##cion": 16012, + "robots": 16013, + "supervisor": 16014, + "snorted": 16015, + "##group": 16016, + "Cannon": 16017, + "procession": 16018, + "monkey": 16019, + "freeze": 16020, + "sleeves": 16021, + "Nile": 16022, + "verdict": 16023, + "ropes": 16024, + "firearms": 16025, + "extraction": 16026, + "tensed": 16027, + "EC": 16028, + "Saunders": 16029, + "##tches": 16030, + "diamonds": 16031, + "Marriage": 16032, + "##amble": 16033, + "curling": 16034, + "Amazing": 16035, + "##haling": 16036, + "unrelated": 16037, + "##roads": 16038, + "Daughter": 16039, + "cum": 16040, + "discarded": 16041, + "kidney": 16042, + "cliffs": 16043, + "forested": 16044, + "Candy": 16045, + "##lap": 16046, + "authentic": 16047, + "tablet": 16048, + "notation": 16049, + "##nburg": 16050, + "Bulldogs": 16051, + "Callum": 16052, + "Meet": 16053, + "mouths": 16054, + "coated": 16055, + "##xe": 16056, + "Truman": 16057, + "combinations": 16058, + "##mation": 16059, + "Steelers": 16060, + "Fan": 16061, + "Than": 16062, + "paternal": 16063, + "##father": 16064, + "##uti": 16065, + "Rebellion": 16066, + "inviting": 16067, + "Fun": 16068, + "theatres": 16069, + "##ي": 16070, + "##rom": 16071, + "curator": 16072, + "##cision": 16073, + "networking": 16074, + "Oz": 16075, + "drought": 16076, + "##ssel": 16077, + "granting": 16078, + "MBA": 16079, + "Shelby": 16080, + "Elaine": 16081, + "jealousy": 16082, + "Kyoto": 16083, + "shores": 16084, + "signaling": 16085, + "tenants": 16086, + "debated": 16087, + "Intermediate": 16088, + "Wise": 16089, + "##hes": 16090, + "##pu": 16091, + "Havana": 16092, + "duke": 16093, + "vicious": 16094, + "exited": 16095, + "servers": 16096, + "Nonetheless": 16097, + "Reports": 16098, + "explode": 16099, + "##beth": 16100, + "Nationals": 16101, + "offerings": 16102, + "Oval": 16103, + "conferred": 16104, + "eponymous": 16105, + "folklore": 16106, + "##NR": 16107, + "Shire": 16108, + "planting": 16109, + "1783": 16110, + "Zeus": 16111, + "accelerated": 16112, + "Constable": 16113, + "consuming": 16114, + "troubles": 16115, + "McCartney": 16116, + "texture": 16117, + "bust": 16118, + "Immigration": 16119, + "excavated": 16120, + "hopefully": 16121, + "##cession": 16122, + "##coe": 16123, + "##name": 16124, + "##ully": 16125, + "lining": 16126, + "Einstein": 16127, + "Venezuelan": 16128, + "reissued": 16129, + "minorities": 16130, + "Beatrice": 16131, + "crystals": 16132, + "##nies": 16133, + "circus": 16134, + "lava": 16135, + "Beirut": 16136, + "extinction": 16137, + "##shu": 16138, + "Becker": 16139, + "##uke": 16140, + "issuing": 16141, + "Zurich": 16142, + "extract": 16143, + "##esta": 16144, + "##rred": 16145, + "regulate": 16146, + "progression": 16147, + "hut": 16148, + "alcoholic": 16149, + "plea": 16150, + "AB": 16151, + "Norse": 16152, + "Hubert": 16153, + "Mansfield": 16154, + "ashamed": 16155, + "##put": 16156, + "Bombardment": 16157, + "stripes": 16158, + "electrons": 16159, + "Denise": 16160, + "horrified": 16161, + "Nor": 16162, + "arranger": 16163, + "Hay": 16164, + "Koch": 16165, + "##ddling": 16166, + "##iner": 16167, + "Birthday": 16168, + "Josie": 16169, + "deliberate": 16170, + "explorer": 16171, + "##jiang": 16172, + "##signed": 16173, + "Arrow": 16174, + "wiping": 16175, + "satellites": 16176, + "baritone": 16177, + "mobility": 16178, + "##rals": 16179, + "Dorset": 16180, + "turbine": 16181, + "Coffee": 16182, + "185": 16183, + "##lder": 16184, + "Cara": 16185, + "Colts": 16186, + "pits": 16187, + "Crossing": 16188, + "coral": 16189, + "##birth": 16190, + "Tai": 16191, + "zombie": 16192, + "smoothly": 16193, + "##hp": 16194, + "mates": 16195, + "##ady": 16196, + "Marguerite": 16197, + "##tary": 16198, + "puzzled": 16199, + "tapes": 16200, + "overly": 16201, + "Sonic": 16202, + "Prayer": 16203, + "Thinking": 16204, + "##uf": 16205, + "IEEE": 16206, + "obligation": 16207, + "##cliffe": 16208, + "Basil": 16209, + "redesignated": 16210, + "##mmy": 16211, + "nostrils": 16212, + "Barney": 16213, + "XIII": 16214, + "##phones": 16215, + "vacated": 16216, + "unused": 16217, + "Berg": 16218, + "##roid": 16219, + "Towards": 16220, + "viola": 16221, + "136": 16222, + "Event": 16223, + "subdivided": 16224, + "rabbit": 16225, + "recruiting": 16226, + "##nery": 16227, + "Namibia": 16228, + "##16": 16229, + "##ilation": 16230, + "recruits": 16231, + "Famous": 16232, + "Francesca": 16233, + "##hari": 16234, + "Goa": 16235, + "##lat": 16236, + "Karachi": 16237, + "haul": 16238, + "biblical": 16239, + "##cible": 16240, + "MGM": 16241, + "##rta": 16242, + "horsepower": 16243, + "profitable": 16244, + "Grandma": 16245, + "importantly": 16246, + "Martinez": 16247, + "incoming": 16248, + "##kill": 16249, + "beneficial": 16250, + "nominal": 16251, + "praying": 16252, + "##isch": 16253, + "gable": 16254, + "nail": 16255, + "noises": 16256, + "##ttle": 16257, + "Polytechnic": 16258, + "rub": 16259, + "##cope": 16260, + "Thor": 16261, + "audition": 16262, + "erotic": 16263, + "##ending": 16264, + "##iano": 16265, + "Ultimately": 16266, + "armoured": 16267, + "##mum": 16268, + "presently": 16269, + "pedestrian": 16270, + "##tled": 16271, + "Ipswich": 16272, + "offence": 16273, + "##ffin": 16274, + "##borne": 16275, + "Flemish": 16276, + "##hman": 16277, + "echo": 16278, + "##cting": 16279, + "auditorium": 16280, + "gentlemen": 16281, + "winged": 16282, + "##tched": 16283, + "Nicaragua": 16284, + "Unknown": 16285, + "prosperity": 16286, + "exhaust": 16287, + "pie": 16288, + "Peruvian": 16289, + "compartment": 16290, + "heights": 16291, + "disabilities": 16292, + "##pole": 16293, + "Harding": 16294, + "Humphrey": 16295, + "postponed": 16296, + "moths": 16297, + "Mathematical": 16298, + "Mets": 16299, + "posters": 16300, + "axe": 16301, + "##nett": 16302, + "Nights": 16303, + "Typically": 16304, + "chuckle": 16305, + "councillors": 16306, + "alternating": 16307, + "141": 16308, + "Norris": 16309, + "##ately": 16310, + "##etus": 16311, + "deficit": 16312, + "dreaming": 16313, + "cooler": 16314, + "oppose": 16315, + "Beethoven": 16316, + "##esis": 16317, + "Marquis": 16318, + "flashlight": 16319, + "headache": 16320, + "investor": 16321, + "responding": 16322, + "appointments": 16323, + "##shore": 16324, + "Elias": 16325, + "ideals": 16326, + "shades": 16327, + "torch": 16328, + "lingering": 16329, + "##real": 16330, + "pier": 16331, + "fertile": 16332, + "Diploma": 16333, + "currents": 16334, + "Snake": 16335, + "##horse": 16336, + "##15": 16337, + "Briggs": 16338, + "##ota": 16339, + "##hima": 16340, + "##romatic": 16341, + "Coastal": 16342, + "Kuala": 16343, + "ankles": 16344, + "Rae": 16345, + "slice": 16346, + "Hilton": 16347, + "locking": 16348, + "Approximately": 16349, + "Workshop": 16350, + "Niagara": 16351, + "strangely": 16352, + "##scence": 16353, + "functionality": 16354, + "advertisement": 16355, + "Rapid": 16356, + "Anders": 16357, + "ho": 16358, + "Soviets": 16359, + "packing": 16360, + "basal": 16361, + "Sunderland": 16362, + "Permanent": 16363, + "##fting": 16364, + "rack": 16365, + "tying": 16366, + "Lowell": 16367, + "##ncing": 16368, + "Wizard": 16369, + "mighty": 16370, + "tertiary": 16371, + "pencil": 16372, + "dismissal": 16373, + "torso": 16374, + "grasped": 16375, + "##yev": 16376, + "Sand": 16377, + "gossip": 16378, + "##nae": 16379, + "Beer": 16380, + "implementing": 16381, + "##19": 16382, + "##riya": 16383, + "Fork": 16384, + "Bee": 16385, + "##eria": 16386, + "Win": 16387, + "##cid": 16388, + "sailor": 16389, + "pressures": 16390, + "##oping": 16391, + "speculated": 16392, + "Freddie": 16393, + "originating": 16394, + "##DF": 16395, + "##SR": 16396, + "##outh": 16397, + "28th": 16398, + "melt": 16399, + "Brenda": 16400, + "lump": 16401, + "Burlington": 16402, + "USC": 16403, + "marginal": 16404, + "##bine": 16405, + "Dogs": 16406, + "swamp": 16407, + "cu": 16408, + "Ex": 16409, + "uranium": 16410, + "metro": 16411, + "spill": 16412, + "Pietro": 16413, + "seize": 16414, + "Chorus": 16415, + "partition": 16416, + "##dock": 16417, + "##media": 16418, + "engineered": 16419, + "##oria": 16420, + "conclusions": 16421, + "subdivision": 16422, + "##uid": 16423, + "Illustrated": 16424, + "Leading": 16425, + "##hora": 16426, + "Berkshire": 16427, + "definite": 16428, + "##books": 16429, + "##cin": 16430, + "##suke": 16431, + "noun": 16432, + "winced": 16433, + "Doris": 16434, + "dissertation": 16435, + "Wilderness": 16436, + "##quest": 16437, + "braced": 16438, + "arbitrary": 16439, + "kidnapping": 16440, + "Kurdish": 16441, + "##but": 16442, + "clearance": 16443, + "excavations": 16444, + "wanna": 16445, + "Allmusic": 16446, + "insult": 16447, + "presided": 16448, + "yacht": 16449, + "##SM": 16450, + "Honour": 16451, + "Tin": 16452, + "attracting": 16453, + "explosives": 16454, + "Gore": 16455, + "Bride": 16456, + "##ience": 16457, + "Packers": 16458, + "Devils": 16459, + "Observer": 16460, + "##course": 16461, + "Loser": 16462, + "##erry": 16463, + "##hardt": 16464, + "##mble": 16465, + "Cyrillic": 16466, + "undefeated": 16467, + "##stra": 16468, + "subordinate": 16469, + "##ame": 16470, + "Wigan": 16471, + "compulsory": 16472, + "Pauline": 16473, + "Cruise": 16474, + "Opposition": 16475, + "##ods": 16476, + "Period": 16477, + "dispersed": 16478, + "expose": 16479, + "##60": 16480, + "##has": 16481, + "Certain": 16482, + "Clerk": 16483, + "Wolves": 16484, + "##hibition": 16485, + "apparatus": 16486, + "allegiance": 16487, + "orbital": 16488, + "justified": 16489, + "thanked": 16490, + "##ević": 16491, + "Biblical": 16492, + "Carolyn": 16493, + "Graves": 16494, + "##tton": 16495, + "Hercules": 16496, + "backgrounds": 16497, + "replica": 16498, + "1788": 16499, + "aquatic": 16500, + "Mega": 16501, + "Stirling": 16502, + "obstacles": 16503, + "filing": 16504, + "Founder": 16505, + "vowels": 16506, + "Deborah": 16507, + "Rotterdam": 16508, + "surpassed": 16509, + "Belarusian": 16510, + "##ologists": 16511, + "Zambia": 16512, + "Ren": 16513, + "Olga": 16514, + "Alpine": 16515, + "bi": 16516, + "councillor": 16517, + "Oaks": 16518, + "Animals": 16519, + "eliminating": 16520, + "digit": 16521, + "Managing": 16522, + "##GE": 16523, + "laundry": 16524, + "##rdo": 16525, + "presses": 16526, + "slamming": 16527, + "Tudor": 16528, + "thief": 16529, + "posterior": 16530, + "##bas": 16531, + "Rodgers": 16532, + "smells": 16533, + "##ining": 16534, + "Hole": 16535, + "SUV": 16536, + "trombone": 16537, + "numbering": 16538, + "representations": 16539, + "Domingo": 16540, + "Paralympics": 16541, + "cartridge": 16542, + "##rash": 16543, + "Combined": 16544, + "shelves": 16545, + "Kraków": 16546, + "revision": 16547, + "##frame": 16548, + "Sánchez": 16549, + "##tracted": 16550, + "##bler": 16551, + "Alain": 16552, + "townships": 16553, + "sic": 16554, + "trousers": 16555, + "Gibbs": 16556, + "anterior": 16557, + "symmetry": 16558, + "vaguely": 16559, + "Castile": 16560, + "IRA": 16561, + "resembling": 16562, + "Penguin": 16563, + "##ulent": 16564, + "infections": 16565, + "##stant": 16566, + "raped": 16567, + "##pressive": 16568, + "worrying": 16569, + "brains": 16570, + "bending": 16571, + "JR": 16572, + "Evidence": 16573, + "Venetian": 16574, + "complexes": 16575, + "Jonah": 16576, + "850": 16577, + "exported": 16578, + "Ambrose": 16579, + "Gap": 16580, + "philanthropist": 16581, + "##atus": 16582, + "Marxist": 16583, + "weighing": 16584, + "##KO": 16585, + "##nath": 16586, + "Soldiers": 16587, + "chiefs": 16588, + "reject": 16589, + "repeating": 16590, + "shaky": 16591, + "Zürich": 16592, + "preserving": 16593, + "##xin": 16594, + "cigarettes": 16595, + "##break": 16596, + "mortar": 16597, + "##fin": 16598, + "Already": 16599, + "reproduction": 16600, + "socks": 16601, + "Waiting": 16602, + "amazed": 16603, + "##aca": 16604, + "dash": 16605, + "##path": 16606, + "Airborne": 16607, + "##harf": 16608, + "##get": 16609, + "descending": 16610, + "OBE": 16611, + "Sant": 16612, + "Tess": 16613, + "Lucius": 16614, + "enjoys": 16615, + "##ttered": 16616, + "##ivation": 16617, + "##ete": 16618, + "Leinster": 16619, + "Phillies": 16620, + "execute": 16621, + "geological": 16622, + "unfinished": 16623, + "Courts": 16624, + "SP": 16625, + "Beaver": 16626, + "Duck": 16627, + "motions": 16628, + "Platinum": 16629, + "friction": 16630, + "##aud": 16631, + "##bet": 16632, + "Parts": 16633, + "Stade": 16634, + "entirety": 16635, + "sprang": 16636, + "Smithsonian": 16637, + "coffin": 16638, + "prolonged": 16639, + "Borneo": 16640, + "##vise": 16641, + "unanimously": 16642, + "##uchi": 16643, + "Cars": 16644, + "Cassandra": 16645, + "Australians": 16646, + "##CT": 16647, + "##rgen": 16648, + "Louisa": 16649, + "spur": 16650, + "Constance": 16651, + "##lities": 16652, + "Patent": 16653, + "racism": 16654, + "tempo": 16655, + "##ssion": 16656, + "##chard": 16657, + "##nology": 16658, + "##claim": 16659, + "Million": 16660, + "Nichols": 16661, + "##dah": 16662, + "Numerous": 16663, + "ing": 16664, + "Pure": 16665, + "plantations": 16666, + "donor": 16667, + "##EP": 16668, + "##rip": 16669, + "convenience": 16670, + "##plate": 16671, + "dots": 16672, + "indirect": 16673, + "##written": 16674, + "Dong": 16675, + "failures": 16676, + "adapt": 16677, + "wizard": 16678, + "unfortunately": 16679, + "##gion": 16680, + "practitioners": 16681, + "economically": 16682, + "Enrique": 16683, + "unchanged": 16684, + "kingdoms": 16685, + "refined": 16686, + "definitions": 16687, + "lazy": 16688, + "worries": 16689, + "railing": 16690, + "##nay": 16691, + "Kaiser": 16692, + "##lug": 16693, + "cracks": 16694, + "sells": 16695, + "ninety": 16696, + "##WC": 16697, + "Directed": 16698, + "denotes": 16699, + "developmental": 16700, + "papal": 16701, + "unfortunate": 16702, + "disappointing": 16703, + "sixteenth": 16704, + "Jen": 16705, + "##urier": 16706, + "NWA": 16707, + "drifting": 16708, + "Horror": 16709, + "##chemical": 16710, + "behaviors": 16711, + "bury": 16712, + "surfaced": 16713, + "foreigners": 16714, + "slick": 16715, + "AND": 16716, + "##rene": 16717, + "##ditions": 16718, + "##teral": 16719, + "scrap": 16720, + "kicks": 16721, + "comprise": 16722, + "buddy": 16723, + "##anda": 16724, + "Mental": 16725, + "##ype": 16726, + "Dom": 16727, + "wines": 16728, + "Limerick": 16729, + "Luca": 16730, + "Rand": 16731, + "##won": 16732, + "Tomatoes": 16733, + "homage": 16734, + "geometric": 16735, + "##nted": 16736, + "telescope": 16737, + "Shelley": 16738, + "poles": 16739, + "##fan": 16740, + "shareholders": 16741, + "Autonomous": 16742, + "cope": 16743, + "intensified": 16744, + "Genoa": 16745, + "Reformation": 16746, + "grazing": 16747, + "##tern": 16748, + "Zhao": 16749, + "provisional": 16750, + "##bies": 16751, + "Con": 16752, + "##riel": 16753, + "Cynthia": 16754, + "Raleigh": 16755, + "vivid": 16756, + "threaten": 16757, + "Length": 16758, + "subscription": 16759, + "roses": 16760, + "Müller": 16761, + "##isms": 16762, + "robin": 16763, + "##tial": 16764, + "Laos": 16765, + "Stanton": 16766, + "nationalism": 16767, + "##clave": 16768, + "##ND": 16769, + "##17": 16770, + "##zz": 16771, + "staging": 16772, + "Busch": 16773, + "Cindy": 16774, + "relieve": 16775, + "##spective": 16776, + "packs": 16777, + "neglected": 16778, + "CBE": 16779, + "alpine": 16780, + "Evolution": 16781, + "uneasy": 16782, + "coastline": 16783, + "Destiny": 16784, + "Barber": 16785, + "Julio": 16786, + "##tted": 16787, + "informs": 16788, + "unprecedented": 16789, + "Pavilion": 16790, + "##bei": 16791, + "##ference": 16792, + "betrayal": 16793, + "awaiting": 16794, + "leaked": 16795, + "V8": 16796, + "puppet": 16797, + "adverse": 16798, + "Bourne": 16799, + "Sunset": 16800, + "collectors": 16801, + "##glass": 16802, + "##sque": 16803, + "copied": 16804, + "Demon": 16805, + "conceded": 16806, + "resembled": 16807, + "Rafe": 16808, + "Levy": 16809, + "prosecutor": 16810, + "##ject": 16811, + "flora": 16812, + "manned": 16813, + "deaf": 16814, + "Mosque": 16815, + "reminds": 16816, + "Lizzie": 16817, + "Products": 16818, + "Funny": 16819, + "cassette": 16820, + "congress": 16821, + "##rong": 16822, + "Rover": 16823, + "tossing": 16824, + "prompting": 16825, + "chooses": 16826, + "Satellite": 16827, + "cautiously": 16828, + "Reese": 16829, + "##UT": 16830, + "Huang": 16831, + "Gloucestershire": 16832, + "giggled": 16833, + "Kitty": 16834, + "##å": 16835, + "Pleasant": 16836, + "Aye": 16837, + "##ond": 16838, + "judging": 16839, + "1860s": 16840, + "intentionally": 16841, + "Hurling": 16842, + "aggression": 16843, + "##xy": 16844, + "transfers": 16845, + "employing": 16846, + "##fies": 16847, + "##oda": 16848, + "Archibald": 16849, + "Blessed": 16850, + "Ski": 16851, + "flavor": 16852, + "Rosie": 16853, + "##burgh": 16854, + "sunset": 16855, + "Scholarship": 16856, + "WC": 16857, + "surround": 16858, + "ranged": 16859, + "##jay": 16860, + "Degree": 16861, + "Houses": 16862, + "squeezing": 16863, + "limb": 16864, + "premium": 16865, + "Leningrad": 16866, + "steals": 16867, + "##inated": 16868, + "##ssie": 16869, + "madness": 16870, + "vacancy": 16871, + "hydraulic": 16872, + "Northampton": 16873, + "##prise": 16874, + "Marks": 16875, + "Boxing": 16876, + "##fying": 16877, + "academics": 16878, + "##lich": 16879, + "##TY": 16880, + "CDs": 16881, + "##lma": 16882, + "hardcore": 16883, + "monitors": 16884, + "paperback": 16885, + "cables": 16886, + "Dimitri": 16887, + "upside": 16888, + "advent": 16889, + "Ra": 16890, + "##clusive": 16891, + "Aug": 16892, + "Christchurch": 16893, + "objected": 16894, + "stalked": 16895, + "Simple": 16896, + "colonists": 16897, + "##laid": 16898, + "CT": 16899, + "discusses": 16900, + "fellowship": 16901, + "Carnival": 16902, + "cares": 16903, + "Miracle": 16904, + "pastoral": 16905, + "rooted": 16906, + "shortage": 16907, + "borne": 16908, + "Quentin": 16909, + "meditation": 16910, + "tapping": 16911, + "Novel": 16912, + "##ades": 16913, + "Alicia": 16914, + "Burn": 16915, + "famed": 16916, + "residency": 16917, + "Fernández": 16918, + "Johannesburg": 16919, + "Zhu": 16920, + "offended": 16921, + "Mao": 16922, + "outward": 16923, + "##inas": 16924, + "XV": 16925, + "denial": 16926, + "noticing": 16927, + "##ís": 16928, + "quarry": 16929, + "##hound": 16930, + "##amo": 16931, + "Bernie": 16932, + "Bentley": 16933, + "Joanna": 16934, + "mortgage": 16935, + "##rdi": 16936, + "##sumption": 16937, + "lenses": 16938, + "extracted": 16939, + "depiction": 16940, + "##RE": 16941, + "Networks": 16942, + "Broad": 16943, + "Revenue": 16944, + "flickered": 16945, + "virgin": 16946, + "flanked": 16947, + "##о": 16948, + "Enterprises": 16949, + "probable": 16950, + "Liberals": 16951, + "Falcons": 16952, + "drowning": 16953, + "phrases": 16954, + "loads": 16955, + "assumes": 16956, + "inhaled": 16957, + "awe": 16958, + "logs": 16959, + "slightest": 16960, + "spiders": 16961, + "waterfall": 16962, + "##pate": 16963, + "rocking": 16964, + "shrub": 16965, + "##uil": 16966, + "roofs": 16967, + "##gard": 16968, + "prehistoric": 16969, + "wary": 16970, + "##rak": 16971, + "TO": 16972, + "clips": 16973, + "sustain": 16974, + "treason": 16975, + "microphone": 16976, + "voter": 16977, + "Lamb": 16978, + "psychologist": 16979, + "wrinkled": 16980, + "##ères": 16981, + "mating": 16982, + "Carrier": 16983, + "340": 16984, + "##lbert": 16985, + "sensing": 16986, + "##rino": 16987, + "destiny": 16988, + "distract": 16989, + "weaker": 16990, + "UC": 16991, + "Nearly": 16992, + "neurons": 16993, + "spends": 16994, + "Apache": 16995, + "##rem": 16996, + "genuinely": 16997, + "wells": 16998, + "##lanted": 16999, + "stereo": 17000, + "##girl": 17001, + "Lois": 17002, + "Leaving": 17003, + "consul": 17004, + "fungi": 17005, + "Pier": 17006, + "Cyril": 17007, + "80s": 17008, + "Jungle": 17009, + "##tani": 17010, + "illustration": 17011, + "Split": 17012, + "##hana": 17013, + "Abigail": 17014, + "##patrick": 17015, + "1787": 17016, + "diminished": 17017, + "Selected": 17018, + "packaging": 17019, + "##EG": 17020, + "Martínez": 17021, + "communal": 17022, + "Manufacturing": 17023, + "sentiment": 17024, + "143": 17025, + "unwilling": 17026, + "praising": 17027, + "Citation": 17028, + "pills": 17029, + "##iti": 17030, + "##rax": 17031, + "muffled": 17032, + "neatly": 17033, + "workforce": 17034, + "Yep": 17035, + "leisure": 17036, + "Tu": 17037, + "##nding": 17038, + "Wakefield": 17039, + "ancestral": 17040, + "##uki": 17041, + "destructive": 17042, + "seas": 17043, + "Passion": 17044, + "showcase": 17045, + "##ceptive": 17046, + "heroic": 17047, + "142": 17048, + "exhaustion": 17049, + "Customs": 17050, + "##aker": 17051, + "Scholar": 17052, + "sliced": 17053, + "##inian": 17054, + "Direction": 17055, + "##OW": 17056, + "Swansea": 17057, + "aluminium": 17058, + "##eep": 17059, + "ceramic": 17060, + "McCoy": 17061, + "Career": 17062, + "Sector": 17063, + "chartered": 17064, + "Damascus": 17065, + "pictured": 17066, + "Interest": 17067, + "stiffened": 17068, + "Plateau": 17069, + "obsolete": 17070, + "##tant": 17071, + "irritated": 17072, + "inappropriate": 17073, + "overs": 17074, + "##nko": 17075, + "bail": 17076, + "Talent": 17077, + "Sur": 17078, + "ours": 17079, + "##nah": 17080, + "barred": 17081, + "legged": 17082, + "sociology": 17083, + "Bud": 17084, + "dictionary": 17085, + "##luk": 17086, + "Cover": 17087, + "obey": 17088, + "##oring": 17089, + "annoying": 17090, + "##dong": 17091, + "apprentice": 17092, + "Cyrus": 17093, + "Role": 17094, + "##GP": 17095, + "##uns": 17096, + "##bag": 17097, + "Greenland": 17098, + "Porsche": 17099, + "Rocket": 17100, + "##32": 17101, + "organism": 17102, + "##ntary": 17103, + "reliability": 17104, + "##vocation": 17105, + "##й": 17106, + "Found": 17107, + "##hine": 17108, + "motors": 17109, + "promoter": 17110, + "unfair": 17111, + "##oms": 17112, + "##note": 17113, + "distribute": 17114, + "eminent": 17115, + "rails": 17116, + "appealing": 17117, + "chiefly": 17118, + "meaningful": 17119, + "Stephan": 17120, + "##rehension": 17121, + "Consumer": 17122, + "psychiatric": 17123, + "bowler": 17124, + "saints": 17125, + "##iful": 17126, + "##н": 17127, + "1777": 17128, + "Pol": 17129, + "Dorian": 17130, + "Townsend": 17131, + "hastily": 17132, + "##jima": 17133, + "Quincy": 17134, + "Sol": 17135, + "fascinated": 17136, + "Scarlet": 17137, + "alto": 17138, + "Avon": 17139, + "certainty": 17140, + "##eding": 17141, + "Keys": 17142, + "##chu": 17143, + "Chu": 17144, + "##VE": 17145, + "ions": 17146, + "tributaries": 17147, + "Thanksgiving": 17148, + "##fusion": 17149, + "astronomer": 17150, + "oxide": 17151, + "pavilion": 17152, + "Supply": 17153, + "Casa": 17154, + "Bollywood": 17155, + "sadly": 17156, + "mutations": 17157, + "Keller": 17158, + "##wave": 17159, + "nationals": 17160, + "##rgo": 17161, + "##ym": 17162, + "predict": 17163, + "Catholicism": 17164, + "Vega": 17165, + "##eration": 17166, + "##ums": 17167, + "Mali": 17168, + "tuned": 17169, + "Lankan": 17170, + "Plans": 17171, + "radial": 17172, + "Bosnian": 17173, + "Lexi": 17174, + "##14": 17175, + "##ü": 17176, + "sacks": 17177, + "unpleasant": 17178, + "Empty": 17179, + "handles": 17180, + "##taking": 17181, + "Bon": 17182, + "switches": 17183, + "intently": 17184, + "tuition": 17185, + "antique": 17186, + "##jk": 17187, + "fraternity": 17188, + "notebook": 17189, + "Desmond": 17190, + "##sei": 17191, + "prostitution": 17192, + "##how": 17193, + "deed": 17194, + "##OP": 17195, + "501": 17196, + "Somewhere": 17197, + "Rocks": 17198, + "##mons": 17199, + "campaigned": 17200, + "frigate": 17201, + "gases": 17202, + "suppress": 17203, + "##hang": 17204, + "Merlin": 17205, + "Northumberland": 17206, + "dominate": 17207, + "expeditions": 17208, + "thunder": 17209, + "##ups": 17210, + "##rical": 17211, + "Cap": 17212, + "thorough": 17213, + "Ariel": 17214, + "##kind": 17215, + "renewable": 17216, + "constructing": 17217, + "pacing": 17218, + "terrorists": 17219, + "Bowen": 17220, + "documentaries": 17221, + "westward": 17222, + "##lass": 17223, + "##nage": 17224, + "Merchant": 17225, + "##ued": 17226, + "Beaumont": 17227, + "Din": 17228, + "##hian": 17229, + "Danube": 17230, + "peasant": 17231, + "Garrison": 17232, + "encourages": 17233, + "gratitude": 17234, + "reminding": 17235, + "stormed": 17236, + "##ouse": 17237, + "pronunciation": 17238, + "##ailed": 17239, + "Weekend": 17240, + "suggestions": 17241, + "##ffing": 17242, + "##DI": 17243, + "Active": 17244, + "Colombo": 17245, + "##logists": 17246, + "Merrill": 17247, + "##cens": 17248, + "Archaeological": 17249, + "Medina": 17250, + "captained": 17251, + "##yk": 17252, + "duel": 17253, + "cracking": 17254, + "Wilkinson": 17255, + "Guam": 17256, + "pickup": 17257, + "renovations": 17258, + "##ël": 17259, + "##izer": 17260, + "delighted": 17261, + "##iri": 17262, + "Weaver": 17263, + "##ctional": 17264, + "tens": 17265, + "##hab": 17266, + "Clint": 17267, + "##usion": 17268, + "##each": 17269, + "petals": 17270, + "Farrell": 17271, + "##sable": 17272, + "caste": 17273, + "##will": 17274, + "Ezra": 17275, + "##qi": 17276, + "##standing": 17277, + "thrilled": 17278, + "ambush": 17279, + "exhaled": 17280, + "##SU": 17281, + "Resource": 17282, + "blur": 17283, + "forearm": 17284, + "specifications": 17285, + "contingent": 17286, + "cafe": 17287, + "##iology": 17288, + "Antony": 17289, + "fundraising": 17290, + "grape": 17291, + "##rgy": 17292, + "turnout": 17293, + "##udi": 17294, + "Clifton": 17295, + "laboratories": 17296, + "Irvine": 17297, + "##opus": 17298, + "##lid": 17299, + "Monthly": 17300, + "Bihar": 17301, + "statutory": 17302, + "Roses": 17303, + "Emil": 17304, + "##rig": 17305, + "lumber": 17306, + "optimal": 17307, + "##DR": 17308, + "pumps": 17309, + "plaster": 17310, + "Mozambique": 17311, + "##aco": 17312, + "nightclub": 17313, + "propelled": 17314, + "##hun": 17315, + "ked": 17316, + "surplus": 17317, + "wax": 17318, + "##urai": 17319, + "pioneered": 17320, + "Sunny": 17321, + "imprint": 17322, + "Forget": 17323, + "Eliot": 17324, + "approximate": 17325, + "patronage": 17326, + "##bek": 17327, + "##ely": 17328, + "##mbe": 17329, + "Partnership": 17330, + "curl": 17331, + "snapping": 17332, + "29th": 17333, + "Patriarch": 17334, + "##jord": 17335, + "seldom": 17336, + "##ature": 17337, + "astronomy": 17338, + "Bremen": 17339, + "XIV": 17340, + "airborne": 17341, + "205": 17342, + "1778": 17343, + "recognizing": 17344, + "stranded": 17345, + "arrogant": 17346, + "bombardment": 17347, + "destined": 17348, + "ensured": 17349, + "146": 17350, + "robust": 17351, + "Davenport": 17352, + "Interactive": 17353, + "Offensive": 17354, + "Fi": 17355, + "prevents": 17356, + "probe": 17357, + "propeller": 17358, + "sorrow": 17359, + "Blade": 17360, + "mounting": 17361, + "automotive": 17362, + "##dged": 17363, + "wallet": 17364, + "201": 17365, + "lashes": 17366, + "Forrest": 17367, + "##ift": 17368, + "Cell": 17369, + "Younger": 17370, + "shouts": 17371, + "##cki": 17372, + "folds": 17373, + "##chet": 17374, + "Epic": 17375, + "yields": 17376, + "homosexual": 17377, + "tunes": 17378, + "##minate": 17379, + "##text": 17380, + "Manny": 17381, + "chemist": 17382, + "hindwings": 17383, + "##urn": 17384, + "pilgrimage": 17385, + "##sfield": 17386, + "##riff": 17387, + "MLS": 17388, + "##rive": 17389, + "Huntington": 17390, + "translates": 17391, + "Path": 17392, + "slim": 17393, + "##ndra": 17394, + "##oz": 17395, + "climax": 17396, + "commuter": 17397, + "desperation": 17398, + "##reet": 17399, + "denying": 17400, + "##rious": 17401, + "daring": 17402, + "seminary": 17403, + "polo": 17404, + "##clamation": 17405, + "Teatro": 17406, + "Torah": 17407, + "Cats": 17408, + "identities": 17409, + "Poles": 17410, + "photographed": 17411, + "fiery": 17412, + "popularly": 17413, + "##cross": 17414, + "winters": 17415, + "Hesse": 17416, + "##vio": 17417, + "Nurse": 17418, + "Senegal": 17419, + "Salon": 17420, + "prescribed": 17421, + "justify": 17422, + "##gues": 17423, + "##и": 17424, + "##orted": 17425, + "HQ": 17426, + "##hiro": 17427, + "evaluated": 17428, + "momentarily": 17429, + "##unts": 17430, + "Debbie": 17431, + "##licity": 17432, + "##TP": 17433, + "Mighty": 17434, + "Rabbit": 17435, + "##chal": 17436, + "Events": 17437, + "Savoy": 17438, + "##ht": 17439, + "Brandenburg": 17440, + "Bordeaux": 17441, + "##laus": 17442, + "Release": 17443, + "##IE": 17444, + "##kowski": 17445, + "1900s": 17446, + "SK": 17447, + "Strauss": 17448, + "##aly": 17449, + "Sonia": 17450, + "Updated": 17451, + "synagogue": 17452, + "McKay": 17453, + "flattened": 17454, + "370": 17455, + "clutch": 17456, + "contests": 17457, + "toast": 17458, + "evaluate": 17459, + "pope": 17460, + "heirs": 17461, + "jam": 17462, + "tutor": 17463, + "reverted": 17464, + "##ading": 17465, + "nonsense": 17466, + "hesitate": 17467, + "Lars": 17468, + "Ceylon": 17469, + "Laurie": 17470, + "##guchi": 17471, + "accordingly": 17472, + "customary": 17473, + "148": 17474, + "Ethics": 17475, + "Multiple": 17476, + "instincts": 17477, + "IGN": 17478, + "##ä": 17479, + "bullshit": 17480, + "##hit": 17481, + "##par": 17482, + "desirable": 17483, + "##ducing": 17484, + "##yam": 17485, + "alias": 17486, + "ashore": 17487, + "licenses": 17488, + "##lification": 17489, + "misery": 17490, + "147": 17491, + "Cola": 17492, + "assassinated": 17493, + "fiercely": 17494, + "##aft": 17495, + "las": 17496, + "goat": 17497, + "substrate": 17498, + "lords": 17499, + "Cass": 17500, + "Bridges": 17501, + "ICC": 17502, + "lasts": 17503, + "sights": 17504, + "reproductive": 17505, + "##asi": 17506, + "Ivory": 17507, + "Clean": 17508, + "fixing": 17509, + "##lace": 17510, + "seeming": 17511, + "aide": 17512, + "1850s": 17513, + "harassment": 17514, + "##FF": 17515, + "##LE": 17516, + "reasonably": 17517, + "##coat": 17518, + "##cano": 17519, + "NYC": 17520, + "1784": 17521, + "Fifty": 17522, + "immunity": 17523, + "Canadians": 17524, + "Cheng": 17525, + "comforting": 17526, + "meanwhile": 17527, + "##tera": 17528, + "##blin": 17529, + "breeds": 17530, + "glowed": 17531, + "##vour": 17532, + "Aden": 17533, + "##verted": 17534, + "##aded": 17535, + "##oral": 17536, + "neat": 17537, + "enforced": 17538, + "poisoning": 17539, + "##ews": 17540, + "##hone": 17541, + "enforce": 17542, + "predecessors": 17543, + "survivor": 17544, + "Month": 17545, + "unfamiliar": 17546, + "pierced": 17547, + "waived": 17548, + "dump": 17549, + "responds": 17550, + "Mai": 17551, + "Declan": 17552, + "angular": 17553, + "Doesn": 17554, + "interpretations": 17555, + "##yar": 17556, + "invest": 17557, + "Dhaka": 17558, + "policeman": 17559, + "Congregation": 17560, + "Eighth": 17561, + "painfully": 17562, + "##este": 17563, + "##vior": 17564, + "Württemberg": 17565, + "##cles": 17566, + "blockade": 17567, + "encouragement": 17568, + "##fie": 17569, + "Caucasus": 17570, + "Malone": 17571, + "Universidad": 17572, + "utilize": 17573, + "Nissan": 17574, + "inherent": 17575, + "151": 17576, + "agreeing": 17577, + "syllable": 17578, + "determines": 17579, + "Protocol": 17580, + "conclude": 17581, + "##gara": 17582, + "40th": 17583, + "Xu": 17584, + "Taiwanese": 17585, + "##ather": 17586, + "boiler": 17587, + "printer": 17588, + "Lacey": 17589, + "titular": 17590, + "Klaus": 17591, + "Fallon": 17592, + "Wembley": 17593, + "fox": 17594, + "Chandra": 17595, + "Governorate": 17596, + "obsessed": 17597, + "##Ps": 17598, + "micro": 17599, + "##25": 17600, + "Cooke": 17601, + "gymnasium": 17602, + "weaving": 17603, + "Shall": 17604, + "Hussein": 17605, + "glaring": 17606, + "softball": 17607, + "Reader": 17608, + "Dominion": 17609, + "Trouble": 17610, + "varsity": 17611, + "Cooperation": 17612, + "Chaos": 17613, + "Kang": 17614, + "Kramer": 17615, + "Eisenhower": 17616, + "proves": 17617, + "Connie": 17618, + "consortium": 17619, + "governors": 17620, + "Bethany": 17621, + "opener": 17622, + "Normally": 17623, + "Willy": 17624, + "linebacker": 17625, + "Regent": 17626, + "Used": 17627, + "AllMusic": 17628, + "Twilight": 17629, + "##shaw": 17630, + "Companion": 17631, + "Tribunal": 17632, + "simpler": 17633, + "##gam": 17634, + "Experimental": 17635, + "Slovenian": 17636, + "cellar": 17637, + "deadline": 17638, + "trout": 17639, + "Hubbard": 17640, + "ads": 17641, + "idol": 17642, + "##hetto": 17643, + "Granada": 17644, + "clues": 17645, + "salmon": 17646, + "1700": 17647, + "Omega": 17648, + "Caldwell": 17649, + "softened": 17650, + "Bills": 17651, + "Honolulu": 17652, + "##gn": 17653, + "Terrace": 17654, + "suitcase": 17655, + "##IL": 17656, + "frantic": 17657, + "##oons": 17658, + "Abbot": 17659, + "Sitting": 17660, + "Fortress": 17661, + "Riders": 17662, + "sickness": 17663, + "enzymes": 17664, + "trustee": 17665, + "Bern": 17666, + "forged": 17667, + "##13": 17668, + "##ruff": 17669, + "##rl": 17670, + "##versity": 17671, + "inspector": 17672, + "champagne": 17673, + "##held": 17674, + "##FI": 17675, + "hereditary": 17676, + "Taliban": 17677, + "handball": 17678, + "##wine": 17679, + "Sioux": 17680, + "##dicated": 17681, + "honoured": 17682, + "139": 17683, + "##tude": 17684, + "Skye": 17685, + "meanings": 17686, + "##rkin": 17687, + "cardiac": 17688, + "analyzed": 17689, + "vegetable": 17690, + "##FS": 17691, + "Royals": 17692, + "dial": 17693, + "freelance": 17694, + "##fest": 17695, + "partisan": 17696, + "petroleum": 17697, + "ridden": 17698, + "Lincolnshire": 17699, + "panting": 17700, + "##comb": 17701, + "presidents": 17702, + "Haley": 17703, + "##chs": 17704, + "contributes": 17705, + "Jew": 17706, + "discoveries": 17707, + "panicked": 17708, + "Woody": 17709, + "eyelids": 17710, + "Fate": 17711, + "Tulsa": 17712, + "mg": 17713, + "whiskey": 17714, + "zombies": 17715, + "Wii": 17716, + "##udge": 17717, + "investigators": 17718, + "##bull": 17719, + "centred": 17720, + "##screen": 17721, + "Bone": 17722, + "Lana": 17723, + "##oise": 17724, + "forts": 17725, + "##ske": 17726, + "Conan": 17727, + "Lyons": 17728, + "##writing": 17729, + "SH": 17730, + "##ride": 17731, + "rhythmic": 17732, + "154": 17733, + "##llah": 17734, + "pioneers": 17735, + "##bright": 17736, + "captivity": 17737, + "Sanchez": 17738, + "Oman": 17739, + "##mith": 17740, + "Flint": 17741, + "Platform": 17742, + "##ioned": 17743, + "emission": 17744, + "packet": 17745, + "Persia": 17746, + "##formed": 17747, + "takeover": 17748, + "tempted": 17749, + "Vance": 17750, + "Few": 17751, + "Toni": 17752, + "receptions": 17753, + "##ن": 17754, + "exchanges": 17755, + "Camille": 17756, + "whale": 17757, + "Chronicles": 17758, + "##rent": 17759, + "##ushing": 17760, + "##rift": 17761, + "Alto": 17762, + "Genus": 17763, + "##asing": 17764, + "onward": 17765, + "foremost": 17766, + "longing": 17767, + "Rockefeller": 17768, + "containers": 17769, + "##cribe": 17770, + "intercepted": 17771, + "##olt": 17772, + "pleading": 17773, + "Bye": 17774, + "bee": 17775, + "##umbling": 17776, + "153": 17777, + "undertake": 17778, + "Izzy": 17779, + "cheaper": 17780, + "Ultra": 17781, + "validity": 17782, + "##pse": 17783, + "Sa": 17784, + "hovering": 17785, + "##pert": 17786, + "vintage": 17787, + "engraved": 17788, + "##rise": 17789, + "farmland": 17790, + "##ever": 17791, + "##ifier": 17792, + "Atlantis": 17793, + "propose": 17794, + "Catalonia": 17795, + "plunged": 17796, + "##edly": 17797, + "demonstrates": 17798, + "gig": 17799, + "##cover": 17800, + "156": 17801, + "Osborne": 17802, + "cowboy": 17803, + "herd": 17804, + "investigator": 17805, + "loops": 17806, + "Burning": 17807, + "rests": 17808, + "Instrumental": 17809, + "embarrassing": 17810, + "focal": 17811, + "install": 17812, + "readings": 17813, + "swirling": 17814, + "Chatham": 17815, + "parameter": 17816, + "##zin": 17817, + "##holders": 17818, + "Mandarin": 17819, + "Moody": 17820, + "converting": 17821, + "Escape": 17822, + "warnings": 17823, + "##chester": 17824, + "incarnation": 17825, + "##ophone": 17826, + "adopting": 17827, + "##lins": 17828, + "Cromwell": 17829, + "##laws": 17830, + "Axis": 17831, + "Verde": 17832, + "Kappa": 17833, + "Schwartz": 17834, + "Serbs": 17835, + "caliber": 17836, + "Wanna": 17837, + "Chung": 17838, + "##ality": 17839, + "nursery": 17840, + "principally": 17841, + "Bulletin": 17842, + "likelihood": 17843, + "logging": 17844, + "##erty": 17845, + "Boyle": 17846, + "supportive": 17847, + "twitched": 17848, + "##usive": 17849, + "builds": 17850, + "Marseille": 17851, + "omitted": 17852, + "motif": 17853, + "Lands": 17854, + "##lusion": 17855, + "##ssed": 17856, + "Barrow": 17857, + "Airfield": 17858, + "Harmony": 17859, + "WWF": 17860, + "endured": 17861, + "merging": 17862, + "convey": 17863, + "branding": 17864, + "examinations": 17865, + "167": 17866, + "Italians": 17867, + "##dh": 17868, + "dude": 17869, + "1781": 17870, + "##teau": 17871, + "crawling": 17872, + "thoughtful": 17873, + "clasped": 17874, + "concluding": 17875, + "brewery": 17876, + "Moldova": 17877, + "Wan": 17878, + "Towers": 17879, + "Heidelberg": 17880, + "202": 17881, + "##ict": 17882, + "Lagos": 17883, + "imposing": 17884, + "##eval": 17885, + "##serve": 17886, + "Bacon": 17887, + "frowning": 17888, + "thirteenth": 17889, + "conception": 17890, + "calculations": 17891, + "##ович": 17892, + "##mile": 17893, + "##ivated": 17894, + "mutation": 17895, + "strap": 17896, + "##lund": 17897, + "demographic": 17898, + "nude": 17899, + "perfection": 17900, + "stocks": 17901, + "##renched": 17902, + "##dit": 17903, + "Alejandro": 17904, + "bites": 17905, + "fragment": 17906, + "##hack": 17907, + "##rchy": 17908, + "GB": 17909, + "Surgery": 17910, + "Berger": 17911, + "punish": 17912, + "boiling": 17913, + "consume": 17914, + "Elle": 17915, + "Sid": 17916, + "Dome": 17917, + "relies": 17918, + "Crescent": 17919, + "treasurer": 17920, + "Bloody": 17921, + "1758": 17922, + "upheld": 17923, + "Guess": 17924, + "Restaurant": 17925, + "signatures": 17926, + "font": 17927, + "millennium": 17928, + "mural": 17929, + "stakes": 17930, + "Abel": 17931, + "hailed": 17932, + "insists": 17933, + "Alumni": 17934, + "Breton": 17935, + "##jun": 17936, + "digits": 17937, + "##FM": 17938, + "##thal": 17939, + "Talking": 17940, + "motive": 17941, + "reigning": 17942, + "babe": 17943, + "masks": 17944, + "##ø": 17945, + "Shaun": 17946, + "potato": 17947, + "sour": 17948, + "whitish": 17949, + "Somali": 17950, + "##derman": 17951, + "##rab": 17952, + "##wy": 17953, + "chancel": 17954, + "telecommunications": 17955, + "Noise": 17956, + "messenger": 17957, + "tidal": 17958, + "grinding": 17959, + "##ogenic": 17960, + "Rebel": 17961, + "constituent": 17962, + "peripheral": 17963, + "recruitment": 17964, + "##ograph": 17965, + "##tler": 17966, + "pumped": 17967, + "Ravi": 17968, + "poked": 17969, + "##gley": 17970, + "Olive": 17971, + "diabetes": 17972, + "discs": 17973, + "liking": 17974, + "sting": 17975, + "fits": 17976, + "stir": 17977, + "Mari": 17978, + "Sega": 17979, + "creativity": 17980, + "weights": 17981, + "Macau": 17982, + "mandated": 17983, + "Bohemia": 17984, + "disastrous": 17985, + "Katrina": 17986, + "Baku": 17987, + "Rajasthan": 17988, + "waiter": 17989, + "##psis": 17990, + "Siberia": 17991, + "verbs": 17992, + "##truction": 17993, + "patented": 17994, + "1782": 17995, + "##ndon": 17996, + "Relegated": 17997, + "Hunters": 17998, + "Greenwood": 17999, + "Shock": 18000, + "accusing": 18001, + "skipped": 18002, + "Sessions": 18003, + "markers": 18004, + "subset": 18005, + "monumental": 18006, + "Viola": 18007, + "comparative": 18008, + "Alright": 18009, + "Barbados": 18010, + "setup": 18011, + "Session": 18012, + "standardized": 18013, + "##ík": 18014, + "##sket": 18015, + "appoint": 18016, + "AFB": 18017, + "Nationalist": 18018, + "##WS": 18019, + "Troop": 18020, + "leaped": 18021, + "Treasure": 18022, + "goodness": 18023, + "weary": 18024, + "originates": 18025, + "100th": 18026, + "compassion": 18027, + "expresses": 18028, + "recommend": 18029, + "168": 18030, + "composing": 18031, + "seventeenth": 18032, + "Tex": 18033, + "Atlético": 18034, + "bald": 18035, + "Finding": 18036, + "Presidency": 18037, + "Sharks": 18038, + "favoured": 18039, + "inactive": 18040, + "##lter": 18041, + "suffix": 18042, + "princes": 18043, + "brighter": 18044, + "##ctus": 18045, + "classics": 18046, + "defendants": 18047, + "culminated": 18048, + "terribly": 18049, + "Strategy": 18050, + "evenings": 18051, + "##ção": 18052, + "##iver": 18053, + "##urance": 18054, + "absorb": 18055, + "##rner": 18056, + "Territories": 18057, + "RBI": 18058, + "soothing": 18059, + "Martín": 18060, + "concurrently": 18061, + "##tr": 18062, + "Nicholson": 18063, + "fibers": 18064, + "swam": 18065, + "##oney": 18066, + "Allie": 18067, + "Algerian": 18068, + "Dartmouth": 18069, + "Mafia": 18070, + "##bos": 18071, + "##tts": 18072, + "Councillor": 18073, + "vocabulary": 18074, + "##bla": 18075, + "##lé": 18076, + "intending": 18077, + "##dler": 18078, + "Guerrero": 18079, + "sunshine": 18080, + "pedal": 18081, + "##TO": 18082, + "administrators": 18083, + "periodic": 18084, + "scholarships": 18085, + "Loop": 18086, + "Madeline": 18087, + "exaggerated": 18088, + "##ressed": 18089, + "Regan": 18090, + "##cellular": 18091, + "Explorer": 18092, + "##oids": 18093, + "Alexandre": 18094, + "vows": 18095, + "Reporter": 18096, + "Unable": 18097, + "Average": 18098, + "absorption": 18099, + "##bedience": 18100, + "Fortunately": 18101, + "Auxiliary": 18102, + "Grandpa": 18103, + "##HP": 18104, + "##ovo": 18105, + "potent": 18106, + "temporal": 18107, + "adrenaline": 18108, + "##udo": 18109, + "confusing": 18110, + "guiding": 18111, + "Dry": 18112, + "qualifications": 18113, + "joking": 18114, + "wherein": 18115, + "heavyweight": 18116, + "##ices": 18117, + "nightmares": 18118, + "pharmaceutical": 18119, + "Commanding": 18120, + "##aled": 18121, + "##ove": 18122, + "Gregor": 18123, + "##UP": 18124, + "censorship": 18125, + "degradation": 18126, + "glorious": 18127, + "Austro": 18128, + "##rench": 18129, + "380": 18130, + "Miriam": 18131, + "sped": 18132, + "##orous": 18133, + "offset": 18134, + "##KA": 18135, + "fined": 18136, + "specialists": 18137, + "Pune": 18138, + "João": 18139, + "##dina": 18140, + "propped": 18141, + "fungus": 18142, + "##ς": 18143, + "frantically": 18144, + "Gabrielle": 18145, + "Hare": 18146, + "committing": 18147, + "##plied": 18148, + "Ask": 18149, + "Wilmington": 18150, + "stunt": 18151, + "numb": 18152, + "warmer": 18153, + "preacher": 18154, + "earnings": 18155, + "##lating": 18156, + "integer": 18157, + "##ija": 18158, + "federation": 18159, + "homosexuality": 18160, + "##cademia": 18161, + "epidemic": 18162, + "grumbled": 18163, + "shoving": 18164, + "Milk": 18165, + "Satan": 18166, + "Tobias": 18167, + "innovations": 18168, + "##dington": 18169, + "geology": 18170, + "memoirs": 18171, + "##IR": 18172, + "spared": 18173, + "culminating": 18174, + "Daphne": 18175, + "Focus": 18176, + "severed": 18177, + "stricken": 18178, + "Paige": 18179, + "Mans": 18180, + "flats": 18181, + "Russo": 18182, + "communes": 18183, + "litigation": 18184, + "strengthening": 18185, + "##powered": 18186, + "Staffordshire": 18187, + "Wiltshire": 18188, + "Painting": 18189, + "Watkins": 18190, + "##د": 18191, + "specializes": 18192, + "Select": 18193, + "##rane": 18194, + "##aver": 18195, + "Fulton": 18196, + "playable": 18197, + "##VN": 18198, + "openings": 18199, + "sampling": 18200, + "##coon": 18201, + "##21": 18202, + "Allah": 18203, + "travelers": 18204, + "allocation": 18205, + "##arily": 18206, + "Loch": 18207, + "##hm": 18208, + "commentators": 18209, + "fulfilled": 18210, + "##troke": 18211, + "Emeritus": 18212, + "Vanderbilt": 18213, + "Vijay": 18214, + "pledged": 18215, + "##tative": 18216, + "diagram": 18217, + "drilling": 18218, + "##MD": 18219, + "##plain": 18220, + "Edison": 18221, + "productivity": 18222, + "31st": 18223, + "##rying": 18224, + "##ption": 18225, + "##gano": 18226, + "##oration": 18227, + "##bara": 18228, + "posture": 18229, + "bothering": 18230, + "platoon": 18231, + "politely": 18232, + "##inating": 18233, + "redevelopment": 18234, + "Job": 18235, + "##vale": 18236, + "stark": 18237, + "incorrect": 18238, + "Mansion": 18239, + "renewal": 18240, + "threatens": 18241, + "Bahamas": 18242, + "fridge": 18243, + "##tata": 18244, + "Uzbekistan": 18245, + "##edia": 18246, + "Sainte": 18247, + "##mio": 18248, + "gaps": 18249, + "neural": 18250, + "##storm": 18251, + "overturned": 18252, + "Preservation": 18253, + "shields": 18254, + "##ngo": 18255, + "##physics": 18256, + "ah": 18257, + "gradual": 18258, + "killings": 18259, + "##anza": 18260, + "consultation": 18261, + "premiership": 18262, + "Felipe": 18263, + "coincidence": 18264, + "##ène": 18265, + "##any": 18266, + "Handbook": 18267, + "##loaded": 18268, + "Edit": 18269, + "Guns": 18270, + "arguably": 18271, + "##ş": 18272, + "compressed": 18273, + "depict": 18274, + "seller": 18275, + "##qui": 18276, + "Kilkenny": 18277, + "##kling": 18278, + "Olympia": 18279, + "librarian": 18280, + "##acles": 18281, + "dramas": 18282, + "JP": 18283, + "Kit": 18284, + "Maj": 18285, + "##lists": 18286, + "proprietary": 18287, + "##nged": 18288, + "##ettes": 18289, + "##tok": 18290, + "exceeding": 18291, + "Lock": 18292, + "induction": 18293, + "numerical": 18294, + "##vist": 18295, + "Straight": 18296, + "foyer": 18297, + "imaginary": 18298, + "##pop": 18299, + "violinist": 18300, + "Carla": 18301, + "bouncing": 18302, + "##ashi": 18303, + "abolition": 18304, + "##uction": 18305, + "restoring": 18306, + "scenic": 18307, + "##č": 18308, + "Doom": 18309, + "overthrow": 18310, + "para": 18311, + "##vid": 18312, + "##ughty": 18313, + "Concord": 18314, + "HC": 18315, + "cocaine": 18316, + "deputies": 18317, + "##aul": 18318, + "visibility": 18319, + "##wart": 18320, + "Kapoor": 18321, + "Hutchinson": 18322, + "##agan": 18323, + "flashes": 18324, + "kn": 18325, + "decreasing": 18326, + "##ronology": 18327, + "quotes": 18328, + "vain": 18329, + "satisfying": 18330, + "##iam": 18331, + "##linger": 18332, + "310": 18333, + "Hanson": 18334, + "fauna": 18335, + "##zawa": 18336, + "##rrel": 18337, + "Trenton": 18338, + "##VB": 18339, + "Employment": 18340, + "vocational": 18341, + "Exactly": 18342, + "bartender": 18343, + "butterflies": 18344, + "tow": 18345, + "##chers": 18346, + "##ocks": 18347, + "pigs": 18348, + "merchandise": 18349, + "##game": 18350, + "##pine": 18351, + "Shea": 18352, + "##gration": 18353, + "Connell": 18354, + "Josephine": 18355, + "monopoly": 18356, + "##dled": 18357, + "Cobb": 18358, + "warships": 18359, + "cancellation": 18360, + "someday": 18361, + "stove": 18362, + "##Cs": 18363, + "candidacy": 18364, + "superhero": 18365, + "unrest": 18366, + "Toulouse": 18367, + "admiration": 18368, + "undergone": 18369, + "whirled": 18370, + "Reconnaissance": 18371, + "costly": 18372, + "##ships": 18373, + "290": 18374, + "Cafe": 18375, + "amber": 18376, + "Tory": 18377, + "##mpt": 18378, + "definitive": 18379, + "##dress": 18380, + "proposes": 18381, + "redesigned": 18382, + "acceleration": 18383, + "##asa": 18384, + "##raphy": 18385, + "Presley": 18386, + "exits": 18387, + "Languages": 18388, + "##cel": 18389, + "Mode": 18390, + "spokesperson": 18391, + "##tius": 18392, + "Ban": 18393, + "forthcoming": 18394, + "grounded": 18395, + "ACC": 18396, + "compelling": 18397, + "logistics": 18398, + "retailers": 18399, + "abused": 18400, + "##gating": 18401, + "soda": 18402, + "##yland": 18403, + "##lution": 18404, + "Landmark": 18405, + "XVI": 18406, + "blush": 18407, + "##tem": 18408, + "hurling": 18409, + "dread": 18410, + "Tobago": 18411, + "Foley": 18412, + "##uad": 18413, + "scenarios": 18414, + "##mentation": 18415, + "##rks": 18416, + "Score": 18417, + "fatigue": 18418, + "hairy": 18419, + "correspond": 18420, + "##iard": 18421, + "defences": 18422, + "confiscated": 18423, + "##rudence": 18424, + "1785": 18425, + "Formerly": 18426, + "Shot": 18427, + "advertised": 18428, + "460": 18429, + "Text": 18430, + "ridges": 18431, + "Promise": 18432, + "Dev": 18433, + "exclusion": 18434, + "NHS": 18435, + "tuberculosis": 18436, + "rockets": 18437, + "##offs": 18438, + "sparkling": 18439, + "256": 18440, + "disappears": 18441, + "mankind": 18442, + "##hore": 18443, + "HP": 18444, + "##omo": 18445, + "taxation": 18446, + "Multi": 18447, + "DS": 18448, + "Virgil": 18449, + "##ams": 18450, + "Dell": 18451, + "stacked": 18452, + "guessing": 18453, + "Jump": 18454, + "Nope": 18455, + "cheer": 18456, + "hates": 18457, + "ballots": 18458, + "overlooked": 18459, + "analyses": 18460, + "Prevention": 18461, + "maturity": 18462, + "dos": 18463, + "##cards": 18464, + "##lect": 18465, + "Mare": 18466, + "##yssa": 18467, + "Petty": 18468, + "##wning": 18469, + "differing": 18470, + "iOS": 18471, + "##ior": 18472, + "Joachim": 18473, + "Sentinel": 18474, + "##nstein": 18475, + "90s": 18476, + "Pamela": 18477, + "480": 18478, + "Asher": 18479, + "##lary": 18480, + "Vicente": 18481, + "landings": 18482, + "portray": 18483, + "##rda": 18484, + "##xley": 18485, + "Virtual": 18486, + "##uary": 18487, + "finances": 18488, + "Jain": 18489, + "Somebody": 18490, + "Tri": 18491, + "behave": 18492, + "Michele": 18493, + "##ider": 18494, + "dwellings": 18495, + "FAA": 18496, + "Gallagher": 18497, + "##lide": 18498, + "Monkey": 18499, + "195": 18500, + "aforementioned": 18501, + "##rism": 18502, + "##bey": 18503, + "##kim": 18504, + "##puted": 18505, + "Mesa": 18506, + "hopped": 18507, + "unopposed": 18508, + "recipients": 18509, + "Reality": 18510, + "Been": 18511, + "gritted": 18512, + "149": 18513, + "playground": 18514, + "pillar": 18515, + "##rone": 18516, + "Guinness": 18517, + "##tad": 18518, + "Théâtre": 18519, + "depended": 18520, + "Tipperary": 18521, + "Reuben": 18522, + "frightening": 18523, + "wooded": 18524, + "Target": 18525, + "globally": 18526, + "##uted": 18527, + "Morales": 18528, + "Baptiste": 18529, + "drunken": 18530, + "Institut": 18531, + "characterised": 18532, + "##chemistry": 18533, + "Strip": 18534, + "discrete": 18535, + "Premiership": 18536, + "##zzling": 18537, + "gazing": 18538, + "Outer": 18539, + "##quisition": 18540, + "Sikh": 18541, + "Booker": 18542, + "##yal": 18543, + "contemporaries": 18544, + "Jericho": 18545, + "##chan": 18546, + "##physical": 18547, + "##witch": 18548, + "Militia": 18549, + "##rez": 18550, + "##zard": 18551, + "dangers": 18552, + "##utter": 18553, + "##₀": 18554, + "Programs": 18555, + "darling": 18556, + "participates": 18557, + "railroads": 18558, + "##ienne": 18559, + "behavioral": 18560, + "bureau": 18561, + "##rook": 18562, + "161": 18563, + "Hicks": 18564, + "##rises": 18565, + "Comes": 18566, + "inflicted": 18567, + "bees": 18568, + "kindness": 18569, + "norm": 18570, + "##ković": 18571, + "generators": 18572, + "##pard": 18573, + "##omy": 18574, + "##ili": 18575, + "methodology": 18576, + "Alvin": 18577, + "façade": 18578, + "latitude": 18579, + "##plified": 18580, + "DE": 18581, + "Morse": 18582, + "##mered": 18583, + "educate": 18584, + "intersects": 18585, + "##MF": 18586, + "##cz": 18587, + "##vated": 18588, + "AL": 18589, + "##graded": 18590, + "##fill": 18591, + "constitutes": 18592, + "artery": 18593, + "feudal": 18594, + "avant": 18595, + "cautious": 18596, + "##ogue": 18597, + "immigrated": 18598, + "##chenko": 18599, + "Saul": 18600, + "Clinic": 18601, + "Fang": 18602, + "choke": 18603, + "Cornelius": 18604, + "flexibility": 18605, + "temperate": 18606, + "pins": 18607, + "##erson": 18608, + "oddly": 18609, + "inequality": 18610, + "157": 18611, + "Natasha": 18612, + "Sal": 18613, + "##uter": 18614, + "215": 18615, + "aft": 18616, + "blinking": 18617, + "##ntino": 18618, + "northward": 18619, + "Exposition": 18620, + "cookies": 18621, + "Wedding": 18622, + "impulse": 18623, + "Overseas": 18624, + "terrifying": 18625, + "##ough": 18626, + "Mortimer": 18627, + "##see": 18628, + "440": 18629, + "https": 18630, + "og": 18631, + "imagining": 18632, + "##cars": 18633, + "Nicola": 18634, + "exceptionally": 18635, + "threads": 18636, + "##cup": 18637, + "Oswald": 18638, + "Provisional": 18639, + "dismantled": 18640, + "deserves": 18641, + "1786": 18642, + "Fairy": 18643, + "discourse": 18644, + "Counsel": 18645, + "departing": 18646, + "Arc": 18647, + "guarding": 18648, + "##orse": 18649, + "420": 18650, + "alterations": 18651, + "vibrant": 18652, + "Em": 18653, + "squinted": 18654, + "terrace": 18655, + "rowing": 18656, + "Led": 18657, + "accessories": 18658, + "SF": 18659, + "Sgt": 18660, + "cheating": 18661, + "Atomic": 18662, + "##raj": 18663, + "Blackpool": 18664, + "##iary": 18665, + "boarded": 18666, + "substituted": 18667, + "bestowed": 18668, + "lime": 18669, + "kernel": 18670, + "##jah": 18671, + "Belmont": 18672, + "shaken": 18673, + "sticky": 18674, + "retrospective": 18675, + "Louie": 18676, + "migrants": 18677, + "weigh": 18678, + "sunglasses": 18679, + "thumbs": 18680, + "##hoff": 18681, + "excavation": 18682, + "##nks": 18683, + "Extra": 18684, + "Polo": 18685, + "motives": 18686, + "Drum": 18687, + "infrared": 18688, + "tastes": 18689, + "berth": 18690, + "verge": 18691, + "##stand": 18692, + "programmed": 18693, + "warmed": 18694, + "Shankar": 18695, + "Titan": 18696, + "chromosome": 18697, + "cafeteria": 18698, + "dividing": 18699, + "pepper": 18700, + "CPU": 18701, + "Stevie": 18702, + "satirical": 18703, + "Nagar": 18704, + "scowled": 18705, + "Died": 18706, + "backyard": 18707, + "##gata": 18708, + "##reath": 18709, + "##bir": 18710, + "Governors": 18711, + "portraying": 18712, + "##yah": 18713, + "Revenge": 18714, + "##acing": 18715, + "1772": 18716, + "margins": 18717, + "Bahn": 18718, + "OH": 18719, + "lowland": 18720, + "##razed": 18721, + "catcher": 18722, + "replay": 18723, + "##yoshi": 18724, + "Seriously": 18725, + "##licit": 18726, + "Aristotle": 18727, + "##ald": 18728, + "Habsburg": 18729, + "weekday": 18730, + "Secretariat": 18731, + "CO": 18732, + "##dly": 18733, + "##joy": 18734, + "##stad": 18735, + "litre": 18736, + "ultra": 18737, + "##cke": 18738, + "Mongol": 18739, + "Tucson": 18740, + "correlation": 18741, + "compose": 18742, + "traps": 18743, + "Groups": 18744, + "Hai": 18745, + "Salvatore": 18746, + "##dea": 18747, + "cents": 18748, + "##eese": 18749, + "concession": 18750, + "clash": 18751, + "Trip": 18752, + "Panzer": 18753, + "Moroccan": 18754, + "cruisers": 18755, + "torque": 18756, + "Ba": 18757, + "grossed": 18758, + "##arate": 18759, + "restriction": 18760, + "concentrating": 18761, + "FDA": 18762, + "##Leod": 18763, + "##ones": 18764, + "Scholars": 18765, + "##esi": 18766, + "throbbing": 18767, + "specialised": 18768, + "##heses": 18769, + "Chicken": 18770, + "##fia": 18771, + "##ificant": 18772, + "Erich": 18773, + "Residence": 18774, + "##trate": 18775, + "manipulation": 18776, + "namesake": 18777, + "##tom": 18778, + "Hoover": 18779, + "cue": 18780, + "Lindsey": 18781, + "Lonely": 18782, + "275": 18783, + "##HT": 18784, + "combustion": 18785, + "subscribers": 18786, + "Punjabi": 18787, + "respects": 18788, + "Jeremiah": 18789, + "penned": 18790, + "##gor": 18791, + "##rilla": 18792, + "suppression": 18793, + "##tration": 18794, + "Crimson": 18795, + "piston": 18796, + "Derry": 18797, + "crimson": 18798, + "lyrical": 18799, + "oversee": 18800, + "portrays": 18801, + "CF": 18802, + "Districts": 18803, + "Lenin": 18804, + "Cora": 18805, + "searches": 18806, + "clans": 18807, + "VHS": 18808, + "##hel": 18809, + "Jacqueline": 18810, + "Redskins": 18811, + "Clubs": 18812, + "desktop": 18813, + "indirectly": 18814, + "alternatives": 18815, + "marijuana": 18816, + "suffrage": 18817, + "##smos": 18818, + "Irwin": 18819, + "##liff": 18820, + "Process": 18821, + "##hawks": 18822, + "Sloane": 18823, + "##bson": 18824, + "Sonata": 18825, + "yielded": 18826, + "Flores": 18827, + "##ares": 18828, + "armament": 18829, + "adaptations": 18830, + "integrate": 18831, + "neighbours": 18832, + "shelters": 18833, + "##tour": 18834, + "Skinner": 18835, + "##jet": 18836, + "##tations": 18837, + "1774": 18838, + "Peterborough": 18839, + "##elles": 18840, + "ripping": 18841, + "Liang": 18842, + "Dickinson": 18843, + "charities": 18844, + "Rwanda": 18845, + "monasteries": 18846, + "crossover": 18847, + "racist": 18848, + "barked": 18849, + "guerrilla": 18850, + "##ivate": 18851, + "Grayson": 18852, + "##iques": 18853, + "##vious": 18854, + "##got": 18855, + "Rolls": 18856, + "denominations": 18857, + "atom": 18858, + "affinity": 18859, + "##delity": 18860, + "Wish": 18861, + "##inted": 18862, + "##inae": 18863, + "interrogation": 18864, + "##cey": 18865, + "##erina": 18866, + "##lifting": 18867, + "192": 18868, + "Sands": 18869, + "1779": 18870, + "mast": 18871, + "Likewise": 18872, + "##hyl": 18873, + "##oft": 18874, + "contempt": 18875, + "##por": 18876, + "assaulted": 18877, + "fills": 18878, + "establishments": 18879, + "Mal": 18880, + "consulted": 18881, + "##omi": 18882, + "##sight": 18883, + "greet": 18884, + "##roma": 18885, + "##egan": 18886, + "Pulitzer": 18887, + "##rried": 18888, + "##dius": 18889, + "##ractical": 18890, + "##voked": 18891, + "Hasan": 18892, + "CB": 18893, + "##zzy": 18894, + "Romanesque": 18895, + "Panic": 18896, + "wheeled": 18897, + "recorder": 18898, + "##tters": 18899, + "##warm": 18900, + "##gly": 18901, + "botanist": 18902, + "Balkan": 18903, + "Lockheed": 18904, + "Polly": 18905, + "farewell": 18906, + "suffers": 18907, + "purchases": 18908, + "Eaton": 18909, + "##80": 18910, + "Quick": 18911, + "commenting": 18912, + "Saga": 18913, + "beasts": 18914, + "hides": 18915, + "motifs": 18916, + "##icks": 18917, + "Alonso": 18918, + "Springer": 18919, + "Wikipedia": 18920, + "circulated": 18921, + "encoding": 18922, + "jurisdictions": 18923, + "snout": 18924, + "UAE": 18925, + "Integrated": 18926, + "unmarried": 18927, + "Heinz": 18928, + "##lein": 18929, + "##figured": 18930, + "deleted": 18931, + "##tley": 18932, + "Zen": 18933, + "Cycling": 18934, + "Fuel": 18935, + "Scandinavian": 18936, + "##rants": 18937, + "Conner": 18938, + "reef": 18939, + "Marino": 18940, + "curiously": 18941, + "lingered": 18942, + "Gina": 18943, + "manners": 18944, + "activism": 18945, + "Mines": 18946, + "Expo": 18947, + "Micah": 18948, + "promotions": 18949, + "Server": 18950, + "booked": 18951, + "derivatives": 18952, + "eastward": 18953, + "detailing": 18954, + "reelection": 18955, + "##chase": 18956, + "182": 18957, + "Campeonato": 18958, + "Po": 18959, + "158": 18960, + "Peel": 18961, + "winger": 18962, + "##itch": 18963, + "canyon": 18964, + "##pit": 18965, + "LDS": 18966, + "A1": 18967, + "##shin": 18968, + "Giorgio": 18969, + "pathetic": 18970, + "##rga": 18971, + "##mist": 18972, + "Aren": 18973, + "##lag": 18974, + "confronts": 18975, + "motel": 18976, + "textbook": 18977, + "shine": 18978, + "turbines": 18979, + "1770": 18980, + "Darcy": 18981, + "##cot": 18982, + "Southeastern": 18983, + "##lessness": 18984, + "Banner": 18985, + "recognise": 18986, + "stray": 18987, + "Kitchen": 18988, + "paperwork": 18989, + "realism": 18990, + "Chrysler": 18991, + "filmmakers": 18992, + "fishermen": 18993, + "##hetic": 18994, + "variously": 18995, + "Vishnu": 18996, + "fiddle": 18997, + "Eddy": 18998, + "Origin": 18999, + "##tec": 19000, + "##ulin": 19001, + "Flames": 19002, + "Rs": 19003, + "bankrupt": 19004, + "Extreme": 19005, + "Pomeranian": 19006, + "##emption": 19007, + "ratified": 19008, + "##iu": 19009, + "jockey": 19010, + "Stratford": 19011, + "##ivating": 19012, + "##oire": 19013, + "Babylon": 19014, + "pardon": 19015, + "AI": 19016, + "affordable": 19017, + "deities": 19018, + "disturbance": 19019, + "Trying": 19020, + "##sai": 19021, + "Ida": 19022, + "Papers": 19023, + "advancement": 19024, + "70s": 19025, + "archbishop": 19026, + "Luftwaffe": 19027, + "announces": 19028, + "tugging": 19029, + "##lphin": 19030, + "##sistence": 19031, + "##eel": 19032, + "##ishes": 19033, + "ambition": 19034, + "aura": 19035, + "##fled": 19036, + "##lected": 19037, + "##vue": 19038, + "Prasad": 19039, + "boiled": 19040, + "clarity": 19041, + "Violin": 19042, + "investigative": 19043, + "routing": 19044, + "Yankee": 19045, + "##uckle": 19046, + "McMahon": 19047, + "bugs": 19048, + "eruption": 19049, + "##rooms": 19050, + "Minutes": 19051, + "relics": 19052, + "##ckle": 19053, + "##nse": 19054, + "sipped": 19055, + "valves": 19056, + "weakly": 19057, + "##ital": 19058, + "Middleton": 19059, + "collided": 19060, + "##quer": 19061, + "bamboo": 19062, + "insignia": 19063, + "Tyne": 19064, + "exercised": 19065, + "Ninth": 19066, + "echoing": 19067, + "polynomial": 19068, + "considerations": 19069, + "lunged": 19070, + "##bius": 19071, + "objections": 19072, + "complain": 19073, + "disguised": 19074, + "plaza": 19075, + "##VC": 19076, + "institutes": 19077, + "Judicial": 19078, + "ascent": 19079, + "imminent": 19080, + "Waterford": 19081, + "hello": 19082, + "Lumpur": 19083, + "Niger": 19084, + "Goldman": 19085, + "vendors": 19086, + "Kensington": 19087, + "Wren": 19088, + "browser": 19089, + "##bner": 19090, + "##tri": 19091, + "##mize": 19092, + "##pis": 19093, + "##lea": 19094, + "Cheyenne": 19095, + "Bold": 19096, + "Settlement": 19097, + "Hollow": 19098, + "Paralympic": 19099, + "axle": 19100, + "##toire": 19101, + "##actic": 19102, + "impose": 19103, + "perched": 19104, + "utilizing": 19105, + "slips": 19106, + "Benz": 19107, + "Michaels": 19108, + "manipulate": 19109, + "Chiang": 19110, + "##mian": 19111, + "Dolphins": 19112, + "prohibition": 19113, + "attacker": 19114, + "ecology": 19115, + "Estadio": 19116, + "##SB": 19117, + "##uild": 19118, + "attracts": 19119, + "recalls": 19120, + "glacier": 19121, + "lad": 19122, + "##rima": 19123, + "Barlow": 19124, + "kHz": 19125, + "melodic": 19126, + "##aby": 19127, + "##iracy": 19128, + "assumptions": 19129, + "Cornish": 19130, + "##aru": 19131, + "DOS": 19132, + "Maddie": 19133, + "##mers": 19134, + "lyric": 19135, + "Luton": 19136, + "nm": 19137, + "##tron": 19138, + "Reno": 19139, + "Fin": 19140, + "YOU": 19141, + "Broadcast": 19142, + "Finch": 19143, + "sensory": 19144, + "##bent": 19145, + "Jeep": 19146, + "##uman": 19147, + "additionally": 19148, + "Buildings": 19149, + "businessmen": 19150, + "treaties": 19151, + "235": 19152, + "Stranger": 19153, + "gateway": 19154, + "Charlton": 19155, + "accomplishments": 19156, + "Diary": 19157, + "apologized": 19158, + "zinc": 19159, + "histories": 19160, + "supplier": 19161, + "##tting": 19162, + "162": 19163, + "asphalt": 19164, + "Treatment": 19165, + "Abbas": 19166, + "##pating": 19167, + "##yres": 19168, + "Bloom": 19169, + "sedan": 19170, + "soloist": 19171, + "##cum": 19172, + "antagonist": 19173, + "denounced": 19174, + "Fairfax": 19175, + "##aving": 19176, + "##enko": 19177, + "noticeable": 19178, + "Budget": 19179, + "Buckingham": 19180, + "Snyder": 19181, + "retreating": 19182, + "Jai": 19183, + "spoon": 19184, + "invading": 19185, + "giggle": 19186, + "woven": 19187, + "gunfire": 19188, + "arrests": 19189, + "##vered": 19190, + "##come": 19191, + "respiratory": 19192, + "violet": 19193, + "##aws": 19194, + "Byrd": 19195, + "shocking": 19196, + "tenant": 19197, + "Jamaican": 19198, + "Ottomans": 19199, + "Seal": 19200, + "theirs": 19201, + "##isse": 19202, + "##48": 19203, + "cooperate": 19204, + "peering": 19205, + "##nius": 19206, + "163": 19207, + "Composer": 19208, + "organist": 19209, + "Mongolian": 19210, + "Bauer": 19211, + "Spy": 19212, + "collects": 19213, + "prophecy": 19214, + "congregations": 19215, + "##moor": 19216, + "Brick": 19217, + "calculation": 19218, + "fixtures": 19219, + "exempt": 19220, + "##dden": 19221, + "Ada": 19222, + "Thousand": 19223, + "##lue": 19224, + "tracing": 19225, + "##achi": 19226, + "bodyguard": 19227, + "vicar": 19228, + "supplying": 19229, + "Łódź": 19230, + "interception": 19231, + "monitored": 19232, + "##heart": 19233, + "Paso": 19234, + "overlap": 19235, + "annoyance": 19236, + "##dice": 19237, + "yellowish": 19238, + "stables": 19239, + "elders": 19240, + "illegally": 19241, + "honesty": 19242, + "##oar": 19243, + "skinny": 19244, + "spinal": 19245, + "##puram": 19246, + "Bourbon": 19247, + "##cor": 19248, + "flourished": 19249, + "Medium": 19250, + "##stics": 19251, + "##aba": 19252, + "Follow": 19253, + "##ckey": 19254, + "stationary": 19255, + "##scription": 19256, + "dresser": 19257, + "scrutiny": 19258, + "Buckley": 19259, + "Clearly": 19260, + "##SF": 19261, + "Lyrics": 19262, + "##heimer": 19263, + "drying": 19264, + "Oracle": 19265, + "internally": 19266, + "rains": 19267, + "##last": 19268, + "Enemy": 19269, + "##oes": 19270, + "McLean": 19271, + "Ole": 19272, + "phosphate": 19273, + "Rosario": 19274, + "Rifles": 19275, + "##mium": 19276, + "battered": 19277, + "Pepper": 19278, + "Presidents": 19279, + "conquer": 19280, + "Château": 19281, + "castles": 19282, + "##aldo": 19283, + "##ulf": 19284, + "Depending": 19285, + "Lesser": 19286, + "Boom": 19287, + "trades": 19288, + "Peyton": 19289, + "164": 19290, + "emphasize": 19291, + "accustomed": 19292, + "SM": 19293, + "Ai": 19294, + "Classification": 19295, + "##mins": 19296, + "##35": 19297, + "##rons": 19298, + "leak": 19299, + "piled": 19300, + "deeds": 19301, + "lush": 19302, + "##self": 19303, + "beginnings": 19304, + "breathless": 19305, + "1660": 19306, + "McGill": 19307, + "##ago": 19308, + "##chaft": 19309, + "##gies": 19310, + "humour": 19311, + "Bomb": 19312, + "securities": 19313, + "Might": 19314, + "##zone": 19315, + "##eves": 19316, + "Matthias": 19317, + "Movies": 19318, + "Levine": 19319, + "vengeance": 19320, + "##ads": 19321, + "Challenger": 19322, + "Misty": 19323, + "Traditionally": 19324, + "constellation": 19325, + "##rass": 19326, + "deepest": 19327, + "workplace": 19328, + "##oof": 19329, + "##vina": 19330, + "impatient": 19331, + "##ML": 19332, + "Mughal": 19333, + "Alessandro": 19334, + "scenery": 19335, + "Slater": 19336, + "postseason": 19337, + "troupe": 19338, + "##ń": 19339, + "Volunteers": 19340, + "Facility": 19341, + "militants": 19342, + "Reggie": 19343, + "sanctions": 19344, + "Expeditionary": 19345, + "Nam": 19346, + "countered": 19347, + "interpret": 19348, + "Basilica": 19349, + "coding": 19350, + "expectation": 19351, + "Duffy": 19352, + "def": 19353, + "Tong": 19354, + "wakes": 19355, + "Bowling": 19356, + "Vehicle": 19357, + "Adler": 19358, + "salad": 19359, + "intricate": 19360, + "stronghold": 19361, + "medley": 19362, + "##uries": 19363, + "##bur": 19364, + "joints": 19365, + "##rac": 19366, + "##yx": 19367, + "##IO": 19368, + "Ordnance": 19369, + "Welch": 19370, + "distributor": 19371, + "Ark": 19372, + "cavern": 19373, + "trench": 19374, + "Weiss": 19375, + "Mauritius": 19376, + "decreases": 19377, + "docks": 19378, + "eagerly": 19379, + "irritation": 19380, + "Matilda": 19381, + "biographer": 19382, + "Visiting": 19383, + "##marked": 19384, + "##iter": 19385, + "##ear": 19386, + "##gong": 19387, + "Moreno": 19388, + "attendant": 19389, + "Bury": 19390, + "instrumentation": 19391, + "theologian": 19392, + "clit": 19393, + "nuns": 19394, + "symphony": 19395, + "translate": 19396, + "375": 19397, + "loser": 19398, + "##user": 19399, + "##VR": 19400, + "##meter": 19401, + "##orious": 19402, + "harmful": 19403, + "##yuki": 19404, + "Commissioners": 19405, + "Mendoza": 19406, + "sniffed": 19407, + "Hulk": 19408, + "##dded": 19409, + "##ulator": 19410, + "##nz": 19411, + "Donnell": 19412, + "##eka": 19413, + "deported": 19414, + "Met": 19415, + "SD": 19416, + "Aerospace": 19417, + "##cultural": 19418, + "##odes": 19419, + "Fantastic": 19420, + "cavity": 19421, + "remark": 19422, + "emblem": 19423, + "fearing": 19424, + "##iance": 19425, + "ICAO": 19426, + "Liberia": 19427, + "stab": 19428, + "##yd": 19429, + "Pac": 19430, + "Gymnasium": 19431, + "IS": 19432, + "Everton": 19433, + "##vanna": 19434, + "mantle": 19435, + "##ief": 19436, + "Ramon": 19437, + "##genic": 19438, + "Shooting": 19439, + "Smoke": 19440, + "Random": 19441, + "Africans": 19442, + "MB": 19443, + "tavern": 19444, + "bargain": 19445, + "voluntarily": 19446, + "Ion": 19447, + "Peoples": 19448, + "Rusty": 19449, + "attackers": 19450, + "Patton": 19451, + "sins": 19452, + "##cake": 19453, + "Hat": 19454, + "moderately": 19455, + "##hala": 19456, + "##alia": 19457, + "requesting": 19458, + "mechanic": 19459, + "##eae": 19460, + "Seine": 19461, + "Robbins": 19462, + "##ulum": 19463, + "susceptible": 19464, + "Bravo": 19465, + "Slade": 19466, + "Strasbourg": 19467, + "rubble": 19468, + "entrusted": 19469, + "Creation": 19470, + "##amp": 19471, + "smoothed": 19472, + "##uintet": 19473, + "evenly": 19474, + "reviewers": 19475, + "skip": 19476, + "Sculpture": 19477, + "177": 19478, + "Rough": 19479, + "##rrie": 19480, + "Reeves": 19481, + "##cede": 19482, + "Administrator": 19483, + "garde": 19484, + "minus": 19485, + "carriages": 19486, + "grenade": 19487, + "Ninja": 19488, + "fuscous": 19489, + "##kley": 19490, + "Punk": 19491, + "contributors": 19492, + "Aragon": 19493, + "Tottenham": 19494, + "##cca": 19495, + "##sir": 19496, + "VA": 19497, + "laced": 19498, + "dealers": 19499, + "##sonic": 19500, + "crisp": 19501, + "harmonica": 19502, + "Artistic": 19503, + "Butch": 19504, + "Andes": 19505, + "Farmers": 19506, + "corridors": 19507, + "unseen": 19508, + "##tium": 19509, + "Countries": 19510, + "Lone": 19511, + "envisioned": 19512, + "Katy": 19513, + "##lang": 19514, + "##cc": 19515, + "Quarterly": 19516, + "##neck": 19517, + "consort": 19518, + "##aceae": 19519, + "bidding": 19520, + "Corey": 19521, + "concurrent": 19522, + "##acts": 19523, + "##gum": 19524, + "Highness": 19525, + "##lient": 19526, + "##rators": 19527, + "arising": 19528, + "##unta": 19529, + "pathways": 19530, + "49ers": 19531, + "bolted": 19532, + "complaining": 19533, + "ecosystem": 19534, + "libretto": 19535, + "Ser": 19536, + "narrated": 19537, + "212": 19538, + "Soft": 19539, + "influx": 19540, + "##dder": 19541, + "incorporation": 19542, + "plagued": 19543, + "tents": 19544, + "##ddled": 19545, + "1750": 19546, + "Risk": 19547, + "citation": 19548, + "Tomas": 19549, + "hostilities": 19550, + "seals": 19551, + "Bruins": 19552, + "Dominique": 19553, + "attic": 19554, + "competent": 19555, + "##UR": 19556, + "##cci": 19557, + "hugging": 19558, + "Breuning": 19559, + "bacterial": 19560, + "Shrewsbury": 19561, + "vowed": 19562, + "eh": 19563, + "elongated": 19564, + "hangs": 19565, + "render": 19566, + "centimeters": 19567, + "##ficient": 19568, + "Mu": 19569, + "turtle": 19570, + "besieged": 19571, + "##gaard": 19572, + "grapes": 19573, + "bravery": 19574, + "collaborations": 19575, + "deprived": 19576, + "##amine": 19577, + "##using": 19578, + "##gins": 19579, + "arid": 19580, + "##uve": 19581, + "coats": 19582, + "hanged": 19583, + "##sting": 19584, + "Pa": 19585, + "prefix": 19586, + "##ranged": 19587, + "Exit": 19588, + "Chain": 19589, + "Flood": 19590, + "Materials": 19591, + "suspicions": 19592, + "##ö": 19593, + "hovered": 19594, + "Hidden": 19595, + "##state": 19596, + "Malawi": 19597, + "##24": 19598, + "Mandy": 19599, + "norms": 19600, + "fascinating": 19601, + "airlines": 19602, + "delivers": 19603, + "##rust": 19604, + "Cretaceous": 19605, + "spanned": 19606, + "pillows": 19607, + "##onomy": 19608, + "jar": 19609, + "##kka": 19610, + "regent": 19611, + "fireworks": 19612, + "morality": 19613, + "discomfort": 19614, + "lure": 19615, + "uneven": 19616, + "##jack": 19617, + "Lucian": 19618, + "171": 19619, + "archaeology": 19620, + "##til": 19621, + "mornings": 19622, + "Billie": 19623, + "Marquess": 19624, + "impending": 19625, + "spilling": 19626, + "tombs": 19627, + "##volved": 19628, + "Celia": 19629, + "Coke": 19630, + "underside": 19631, + "##bation": 19632, + "Vaughn": 19633, + "Daytona": 19634, + "Godfrey": 19635, + "Pascal": 19636, + "Alien": 19637, + "##sign": 19638, + "172": 19639, + "##lage": 19640, + "iPhone": 19641, + "Gonna": 19642, + "genocide": 19643, + "##rber": 19644, + "oven": 19645, + "endure": 19646, + "dashed": 19647, + "simultaneous": 19648, + "##phism": 19649, + "Wally": 19650, + "##rō": 19651, + "ants": 19652, + "predator": 19653, + "reissue": 19654, + "##aper": 19655, + "Speech": 19656, + "funk": 19657, + "Rudy": 19658, + "claw": 19659, + "Hindus": 19660, + "Numbers": 19661, + "Bing": 19662, + "lantern": 19663, + "##aurus": 19664, + "scattering": 19665, + "poisoned": 19666, + "##active": 19667, + "Andrei": 19668, + "algebraic": 19669, + "baseman": 19670, + "##ritz": 19671, + "Gregg": 19672, + "##cola": 19673, + "selections": 19674, + "##putation": 19675, + "lick": 19676, + "Laguna": 19677, + "##IX": 19678, + "Sumatra": 19679, + "Warning": 19680, + "turf": 19681, + "buyers": 19682, + "Burgess": 19683, + "Oldham": 19684, + "exploit": 19685, + "worm": 19686, + "initiate": 19687, + "strapped": 19688, + "tuning": 19689, + "filters": 19690, + "haze": 19691, + "##е": 19692, + "##ledge": 19693, + "##ydro": 19694, + "##culture": 19695, + "amendments": 19696, + "Promotion": 19697, + "##union": 19698, + "Clair": 19699, + "##uria": 19700, + "petty": 19701, + "shutting": 19702, + "##eveloped": 19703, + "Phoebe": 19704, + "Zeke": 19705, + "conducts": 19706, + "grains": 19707, + "clashes": 19708, + "##latter": 19709, + "illegitimate": 19710, + "willingly": 19711, + "Deer": 19712, + "Lakers": 19713, + "Reference": 19714, + "chaplain": 19715, + "commitments": 19716, + "interrupt": 19717, + "salvation": 19718, + "Panther": 19719, + "Qualifying": 19720, + "Assessment": 19721, + "cancel": 19722, + "efficiently": 19723, + "attorneys": 19724, + "Dynamo": 19725, + "impress": 19726, + "accession": 19727, + "clinging": 19728, + "randomly": 19729, + "reviewing": 19730, + "Romero": 19731, + "Cathy": 19732, + "charting": 19733, + "clapped": 19734, + "rebranded": 19735, + "Azerbaijani": 19736, + "coma": 19737, + "indicator": 19738, + "punches": 19739, + "##tons": 19740, + "Sami": 19741, + "monastic": 19742, + "prospects": 19743, + "Pastor": 19744, + "##rville": 19745, + "electrified": 19746, + "##CI": 19747, + "##utical": 19748, + "tumbled": 19749, + "Chef": 19750, + "muzzle": 19751, + "selecting": 19752, + "UP": 19753, + "Wheel": 19754, + "protocols": 19755, + "##tat": 19756, + "Extended": 19757, + "beautifully": 19758, + "nests": 19759, + "##stal": 19760, + "Andersen": 19761, + "##anu": 19762, + "##³": 19763, + "##rini": 19764, + "kneeling": 19765, + "##reis": 19766, + "##xia": 19767, + "anatomy": 19768, + "dusty": 19769, + "Safe": 19770, + "turmoil": 19771, + "Bianca": 19772, + "##elo": 19773, + "analyze": 19774, + "##ر": 19775, + "##eran": 19776, + "podcast": 19777, + "Slovene": 19778, + "Locke": 19779, + "Rue": 19780, + "##retta": 19781, + "##uni": 19782, + "Person": 19783, + "Prophet": 19784, + "crooked": 19785, + "disagreed": 19786, + "Versailles": 19787, + "Sarajevo": 19788, + "Utrecht": 19789, + "##ogen": 19790, + "chewing": 19791, + "##ception": 19792, + "##iidae": 19793, + "Missile": 19794, + "attribute": 19795, + "majors": 19796, + "Arch": 19797, + "intellectuals": 19798, + "##andra": 19799, + "ideological": 19800, + "Cory": 19801, + "Salzburg": 19802, + "##fair": 19803, + "Lot": 19804, + "electromagnetic": 19805, + "Distribution": 19806, + "##oper": 19807, + "##pered": 19808, + "Russ": 19809, + "Terra": 19810, + "repeats": 19811, + "fluttered": 19812, + "Riga": 19813, + "##ific": 19814, + "##gt": 19815, + "cows": 19816, + "Hair": 19817, + "labelled": 19818, + "protects": 19819, + "Gale": 19820, + "Personnel": 19821, + "Düsseldorf": 19822, + "Moran": 19823, + "rematch": 19824, + "##OE": 19825, + "Slow": 19826, + "forgiveness": 19827, + "##ssi": 19828, + "proudly": 19829, + "Macmillan": 19830, + "insist": 19831, + "undoubtedly": 19832, + "Québec": 19833, + "Violence": 19834, + "##yuan": 19835, + "##aine": 19836, + "mourning": 19837, + "linen": 19838, + "accidental": 19839, + "##iol": 19840, + "##arium": 19841, + "grossing": 19842, + "lattice": 19843, + "maneuver": 19844, + "##marine": 19845, + "prestige": 19846, + "petrol": 19847, + "gradient": 19848, + "invasive": 19849, + "militant": 19850, + "Galerie": 19851, + "widening": 19852, + "##aman": 19853, + "##quist": 19854, + "disagreement": 19855, + "##ales": 19856, + "creepy": 19857, + "remembers": 19858, + "buzz": 19859, + "##erial": 19860, + "Exempt": 19861, + "Dirk": 19862, + "mon": 19863, + "Addison": 19864, + "##inen": 19865, + "deposed": 19866, + "##agon": 19867, + "fifteenth": 19868, + "Hang": 19869, + "ornate": 19870, + "slab": 19871, + "##lades": 19872, + "Fountain": 19873, + "contractors": 19874, + "das": 19875, + "Warwickshire": 19876, + "1763": 19877, + "##rc": 19878, + "Carly": 19879, + "Essays": 19880, + "Indy": 19881, + "Ligue": 19882, + "greenhouse": 19883, + "slit": 19884, + "##sea": 19885, + "chewed": 19886, + "wink": 19887, + "##azi": 19888, + "Playhouse": 19889, + "##kon": 19890, + "Gram": 19891, + "Ko": 19892, + "Samson": 19893, + "creators": 19894, + "revive": 19895, + "##rians": 19896, + "spawned": 19897, + "seminars": 19898, + "Craft": 19899, + "Tall": 19900, + "diverted": 19901, + "assistants": 19902, + "computational": 19903, + "enclosure": 19904, + "##acity": 19905, + "Coca": 19906, + "##eve": 19907, + "databases": 19908, + "Drop": 19909, + "##loading": 19910, + "##hage": 19911, + "Greco": 19912, + "Privy": 19913, + "entrances": 19914, + "pork": 19915, + "prospective": 19916, + "Memories": 19917, + "robes": 19918, + "##market": 19919, + "transporting": 19920, + "##lik": 19921, + "Rudolph": 19922, + "Horton": 19923, + "visually": 19924, + "##uay": 19925, + "##nja": 19926, + "Centro": 19927, + "Tor": 19928, + "Howell": 19929, + "##rsey": 19930, + "admitting": 19931, + "postgraduate": 19932, + "herbs": 19933, + "##att": 19934, + "Chin": 19935, + "Rutherford": 19936, + "##bot": 19937, + "##etta": 19938, + "Seasons": 19939, + "explanations": 19940, + "##bery": 19941, + "Friedman": 19942, + "heap": 19943, + "##ryl": 19944, + "##sberg": 19945, + "jaws": 19946, + "##agh": 19947, + "Choi": 19948, + "Killing": 19949, + "Fanny": 19950, + "##suming": 19951, + "##hawk": 19952, + "hopeful": 19953, + "##aid": 19954, + "Monty": 19955, + "gum": 19956, + "remarkably": 19957, + "Secrets": 19958, + "disco": 19959, + "harp": 19960, + "advise": 19961, + "##avia": 19962, + "Marathi": 19963, + "##cycle": 19964, + "Truck": 19965, + "abbot": 19966, + "sincere": 19967, + "urine": 19968, + "##mology": 19969, + "masked": 19970, + "bathing": 19971, + "##tun": 19972, + "Fellows": 19973, + "##TM": 19974, + "##gnetic": 19975, + "owl": 19976, + "##jon": 19977, + "hymn": 19978, + "##leton": 19979, + "208": 19980, + "hostility": 19981, + "##cée": 19982, + "baked": 19983, + "Bottom": 19984, + "##AB": 19985, + "shudder": 19986, + "##ater": 19987, + "##von": 19988, + "##hee": 19989, + "reorganization": 19990, + "Cycle": 19991, + "##phs": 19992, + "Lex": 19993, + "##style": 19994, + "##rms": 19995, + "Translation": 19996, + "##erick": 19997, + "##imeter": 19998, + "##ière": 19999, + "attested": 20000, + "Hillary": 20001, + "##DM": 20002, + "gal": 20003, + "wander": 20004, + "Salle": 20005, + "##laming": 20006, + "Perez": 20007, + "Pit": 20008, + "##LP": 20009, + "USAF": 20010, + "contexts": 20011, + "Disease": 20012, + "blazing": 20013, + "aroused": 20014, + "razor": 20015, + "walled": 20016, + "Danielle": 20017, + "Mont": 20018, + "Funk": 20019, + "royalty": 20020, + "thee": 20021, + "203": 20022, + "donors": 20023, + "##erton": 20024, + "famously": 20025, + "processors": 20026, + "reassigned": 20027, + "welcoming": 20028, + "Goldberg": 20029, + "##quities": 20030, + "undisclosed": 20031, + "Orient": 20032, + "Patty": 20033, + "vaccine": 20034, + "refrigerator": 20035, + "Cypriot": 20036, + "consonant": 20037, + "##waters": 20038, + "176": 20039, + "sober": 20040, + "##lement": 20041, + "Racecourse": 20042, + "##uate": 20043, + "Luckily": 20044, + "Selection": 20045, + "conceptual": 20046, + "vines": 20047, + "Breaking": 20048, + "wa": 20049, + "lions": 20050, + "oversight": 20051, + "sheltered": 20052, + "Dancer": 20053, + "ponds": 20054, + "borrow": 20055, + "##BB": 20056, + "##pulsion": 20057, + "Daly": 20058, + "##eek": 20059, + "fertility": 20060, + "spontaneous": 20061, + "Worldwide": 20062, + "gasping": 20063, + "##tino": 20064, + "169": 20065, + "ABS": 20066, + "Vickers": 20067, + "ambient": 20068, + "energetic": 20069, + "prisons": 20070, + "##eson": 20071, + "Stacy": 20072, + "##roach": 20073, + "GmbH": 20074, + "Afro": 20075, + "Marin": 20076, + "farmhouse": 20077, + "pinched": 20078, + "##cursion": 20079, + "##sp": 20080, + "Sabine": 20081, + "##pire": 20082, + "181": 20083, + "nak": 20084, + "swelling": 20085, + "humble": 20086, + "perfume": 20087, + "##balls": 20088, + "Rai": 20089, + "cannons": 20090, + "##taker": 20091, + "Married": 20092, + "Maltese": 20093, + "canals": 20094, + "interceptions": 20095, + "hats": 20096, + "lever": 20097, + "slowing": 20098, + "##ppy": 20099, + "Nike": 20100, + "Silas": 20101, + "Scarborough": 20102, + "skirts": 20103, + "166": 20104, + "inauguration": 20105, + "Shuttle": 20106, + "alloy": 20107, + "beads": 20108, + "belts": 20109, + "Compton": 20110, + "Cause": 20111, + "battling": 20112, + "critique": 20113, + "surf": 20114, + "Dock": 20115, + "roommate": 20116, + "##ulet": 20117, + "invade": 20118, + "Garland": 20119, + "##slow": 20120, + "nutrition": 20121, + "persona": 20122, + "##zam": 20123, + "Wichita": 20124, + "acquaintance": 20125, + "coincided": 20126, + "##cate": 20127, + "Dracula": 20128, + "clamped": 20129, + "##gau": 20130, + "overhaul": 20131, + "##broken": 20132, + "##rrier": 20133, + "melodies": 20134, + "ventures": 20135, + "Paz": 20136, + "convex": 20137, + "Roots": 20138, + "##holding": 20139, + "Tribute": 20140, + "transgender": 20141, + "##ò": 20142, + "chimney": 20143, + "##riad": 20144, + "Ajax": 20145, + "Thereafter": 20146, + "messed": 20147, + "nowadays": 20148, + "pH": 20149, + "##100": 20150, + "##alog": 20151, + "Pomerania": 20152, + "##yra": 20153, + "Rossi": 20154, + "glove": 20155, + "##TL": 20156, + "Races": 20157, + "##asily": 20158, + "tablets": 20159, + "Jase": 20160, + "##ttes": 20161, + "diner": 20162, + "##rns": 20163, + "Hu": 20164, + "Mohan": 20165, + "anytime": 20166, + "weighted": 20167, + "remixes": 20168, + "Dove": 20169, + "cherry": 20170, + "imports": 20171, + "##urity": 20172, + "GA": 20173, + "##TT": 20174, + "##iated": 20175, + "##sford": 20176, + "Clarkson": 20177, + "evidently": 20178, + "rugged": 20179, + "Dust": 20180, + "siding": 20181, + "##ometer": 20182, + "acquitted": 20183, + "choral": 20184, + "##mite": 20185, + "infants": 20186, + "Domenico": 20187, + "gallons": 20188, + "Atkinson": 20189, + "gestures": 20190, + "slated": 20191, + "##xa": 20192, + "Archaeology": 20193, + "unwanted": 20194, + "##ibes": 20195, + "##duced": 20196, + "premise": 20197, + "Colby": 20198, + "Geelong": 20199, + "disqualified": 20200, + "##pf": 20201, + "##voking": 20202, + "simplicity": 20203, + "Walkover": 20204, + "Qaeda": 20205, + "Warden": 20206, + "##bourg": 20207, + "##ān": 20208, + "Invasion": 20209, + "Babe": 20210, + "harness": 20211, + "183": 20212, + "##tated": 20213, + "maze": 20214, + "Burt": 20215, + "bedrooms": 20216, + "##nsley": 20217, + "Horizon": 20218, + "##oast": 20219, + "minimize": 20220, + "peeked": 20221, + "MLA": 20222, + "Trains": 20223, + "tractor": 20224, + "nudged": 20225, + "##iform": 20226, + "Growth": 20227, + "Benton": 20228, + "separates": 20229, + "##about": 20230, + "##kari": 20231, + "buffer": 20232, + "anthropology": 20233, + "brigades": 20234, + "foil": 20235, + "##wu": 20236, + "Domain": 20237, + "licking": 20238, + "whore": 20239, + "##rage": 20240, + "##sham": 20241, + "Initial": 20242, + "Courthouse": 20243, + "Rutgers": 20244, + "dams": 20245, + "villains": 20246, + "supermarket": 20247, + "##brush": 20248, + "Brunei": 20249, + "Palermo": 20250, + "arises": 20251, + "Passenger": 20252, + "outreach": 20253, + "##gill": 20254, + "Labrador": 20255, + "McLaren": 20256, + "##uy": 20257, + "Lori": 20258, + "##fires": 20259, + "Heads": 20260, + "magistrate": 20261, + "¹⁄₂": 20262, + "Weapons": 20263, + "##wai": 20264, + "##roke": 20265, + "projecting": 20266, + "##ulates": 20267, + "bordering": 20268, + "McKenzie": 20269, + "Pavel": 20270, + "midway": 20271, + "Guangzhou": 20272, + "streamed": 20273, + "racer": 20274, + "##lished": 20275, + "eccentric": 20276, + "spectral": 20277, + "206": 20278, + "##mism": 20279, + "Wilde": 20280, + "Grange": 20281, + "preparatory": 20282, + "lent": 20283, + "##tam": 20284, + "starving": 20285, + "Gertrude": 20286, + "##cea": 20287, + "##ricted": 20288, + "Breakfast": 20289, + "Mira": 20290, + "blurted": 20291, + "derive": 20292, + "##lair": 20293, + "blunt": 20294, + "sob": 20295, + "Cheltenham": 20296, + "Henrik": 20297, + "reinstated": 20298, + "intends": 20299, + "##istan": 20300, + "unite": 20301, + "##ector": 20302, + "playful": 20303, + "sparks": 20304, + "mapped": 20305, + "Cadet": 20306, + "luggage": 20307, + "prosperous": 20308, + "##ein": 20309, + "salon": 20310, + "##utes": 20311, + "Biological": 20312, + "##rland": 20313, + "Tyrone": 20314, + "buyer": 20315, + "##lose": 20316, + "amounted": 20317, + "Saw": 20318, + "smirked": 20319, + "Ronan": 20320, + "Reviews": 20321, + "Adele": 20322, + "trait": 20323, + "##proof": 20324, + "Bhutan": 20325, + "Ginger": 20326, + "##junct": 20327, + "digitally": 20328, + "stirring": 20329, + "##isted": 20330, + "coconut": 20331, + "Hamlet": 20332, + "Dinner": 20333, + "Scale": 20334, + "pledge": 20335, + "##RP": 20336, + "Wrong": 20337, + "Goal": 20338, + "Panel": 20339, + "therapeutic": 20340, + "elevations": 20341, + "infectious": 20342, + "priesthood": 20343, + "##inda": 20344, + "Guyana": 20345, + "diagnostic": 20346, + "##mbre": 20347, + "Blackwell": 20348, + "sails": 20349, + "##arm": 20350, + "literal": 20351, + "periodically": 20352, + "gleaming": 20353, + "Robot": 20354, + "Rector": 20355, + "##abulous": 20356, + "##tres": 20357, + "Reaching": 20358, + "Romantic": 20359, + "CP": 20360, + "Wonderful": 20361, + "##tur": 20362, + "ornamental": 20363, + "##nges": 20364, + "traitor": 20365, + "##zilla": 20366, + "genetics": 20367, + "mentioning": 20368, + "##eim": 20369, + "resonance": 20370, + "Areas": 20371, + "Shopping": 20372, + "##nard": 20373, + "Gail": 20374, + "Solid": 20375, + "##rito": 20376, + "##mara": 20377, + "Willem": 20378, + "Chip": 20379, + "Matches": 20380, + "Volkswagen": 20381, + "obstacle": 20382, + "Organ": 20383, + "invites": 20384, + "Coral": 20385, + "attain": 20386, + "##anus": 20387, + "##dates": 20388, + "Midway": 20389, + "shuffled": 20390, + "Cecilia": 20391, + "dessert": 20392, + "Gateway": 20393, + "Ch": 20394, + "Napoleonic": 20395, + "Petroleum": 20396, + "jets": 20397, + "goose": 20398, + "striped": 20399, + "bowls": 20400, + "vibration": 20401, + "Sims": 20402, + "nickel": 20403, + "Thirteen": 20404, + "problematic": 20405, + "intervene": 20406, + "##grading": 20407, + "##unds": 20408, + "Mum": 20409, + "semifinal": 20410, + "Radical": 20411, + "##izations": 20412, + "refurbished": 20413, + "##sation": 20414, + "##harine": 20415, + "Maximilian": 20416, + "cites": 20417, + "Advocate": 20418, + "Potomac": 20419, + "surged": 20420, + "preserves": 20421, + "Curry": 20422, + "angled": 20423, + "ordination": 20424, + "##pad": 20425, + "Cade": 20426, + "##DE": 20427, + "##sko": 20428, + "researched": 20429, + "torpedoes": 20430, + "Resident": 20431, + "wetlands": 20432, + "hay": 20433, + "applicants": 20434, + "depart": 20435, + "Bernstein": 20436, + "##pic": 20437, + "##ario": 20438, + "##rae": 20439, + "favourable": 20440, + "##wari": 20441, + "##р": 20442, + "metabolism": 20443, + "nobleman": 20444, + "Defaulted": 20445, + "calculate": 20446, + "ignition": 20447, + "Celebrity": 20448, + "Belize": 20449, + "sulfur": 20450, + "Flat": 20451, + "Sc": 20452, + "USB": 20453, + "flicker": 20454, + "Hertfordshire": 20455, + "Sept": 20456, + "CFL": 20457, + "Pasadena": 20458, + "Saturdays": 20459, + "Titus": 20460, + "##nir": 20461, + "Canary": 20462, + "Computing": 20463, + "Isaiah": 20464, + "##mler": 20465, + "formidable": 20466, + "pulp": 20467, + "orchid": 20468, + "Called": 20469, + "Solutions": 20470, + "kilograms": 20471, + "steamer": 20472, + "##hil": 20473, + "Doncaster": 20474, + "successors": 20475, + "Stokes": 20476, + "Holstein": 20477, + "##sius": 20478, + "sperm": 20479, + "API": 20480, + "Rogue": 20481, + "instability": 20482, + "Acoustic": 20483, + "##rag": 20484, + "159": 20485, + "undercover": 20486, + "Wouldn": 20487, + "##pra": 20488, + "##medical": 20489, + "Eliminated": 20490, + "honorable": 20491, + "##chel": 20492, + "denomination": 20493, + "abrupt": 20494, + "Buffy": 20495, + "blouse": 20496, + "fi": 20497, + "Regardless": 20498, + "Subsequent": 20499, + "##rdes": 20500, + "Lover": 20501, + "##tford": 20502, + "bacon": 20503, + "##emia": 20504, + "carving": 20505, + "##cripts": 20506, + "Massacre": 20507, + "Ramos": 20508, + "Latter": 20509, + "##ulp": 20510, + "ballroom": 20511, + "##gement": 20512, + "richest": 20513, + "bruises": 20514, + "Rest": 20515, + "Wiley": 20516, + "##aster": 20517, + "explosions": 20518, + "##lastic": 20519, + "Edo": 20520, + "##LD": 20521, + "Mir": 20522, + "choking": 20523, + "disgusted": 20524, + "faintly": 20525, + "Barracks": 20526, + "blasted": 20527, + "headlights": 20528, + "Tours": 20529, + "ensued": 20530, + "presentations": 20531, + "##cale": 20532, + "wrought": 20533, + "##oat": 20534, + "##coa": 20535, + "Quaker": 20536, + "##sdale": 20537, + "recipe": 20538, + "##gny": 20539, + "corpses": 20540, + "##liance": 20541, + "comfortably": 20542, + "##wat": 20543, + "Landscape": 20544, + "niche": 20545, + "catalyst": 20546, + "##leader": 20547, + "Securities": 20548, + "messy": 20549, + "##RL": 20550, + "Rodrigo": 20551, + "backdrop": 20552, + "##opping": 20553, + "treats": 20554, + "Emilio": 20555, + "Anand": 20556, + "bilateral": 20557, + "meadow": 20558, + "VC": 20559, + "socialism": 20560, + "##grad": 20561, + "clinics": 20562, + "##itating": 20563, + "##ppe": 20564, + "##ymphonic": 20565, + "seniors": 20566, + "Advisor": 20567, + "Armoured": 20568, + "Method": 20569, + "Alley": 20570, + "##orio": 20571, + "Sad": 20572, + "fueled": 20573, + "raided": 20574, + "Axel": 20575, + "NH": 20576, + "rushes": 20577, + "Dixie": 20578, + "Otis": 20579, + "wrecked": 20580, + "##22": 20581, + "capitalism": 20582, + "café": 20583, + "##bbe": 20584, + "##pion": 20585, + "##forcing": 20586, + "Aubrey": 20587, + "Lublin": 20588, + "Whenever": 20589, + "Sears": 20590, + "Scheme": 20591, + "##lana": 20592, + "Meadows": 20593, + "treatise": 20594, + "##RI": 20595, + "##ustic": 20596, + "sacrifices": 20597, + "sustainability": 20598, + "Biography": 20599, + "mystical": 20600, + "Wanted": 20601, + "multiplayer": 20602, + "Applications": 20603, + "disliked": 20604, + "##tisfied": 20605, + "impaired": 20606, + "empirical": 20607, + "forgetting": 20608, + "Fairfield": 20609, + "Sunni": 20610, + "blurred": 20611, + "Growing": 20612, + "Avalon": 20613, + "coil": 20614, + "Camera": 20615, + "Skin": 20616, + "bruised": 20617, + "terminals": 20618, + "##fted": 20619, + "##roving": 20620, + "Commando": 20621, + "##hya": 20622, + "##sper": 20623, + "reservations": 20624, + "needles": 20625, + "dangling": 20626, + "##rsch": 20627, + "##rsten": 20628, + "##spect": 20629, + "##mbs": 20630, + "yoga": 20631, + "regretted": 20632, + "Bliss": 20633, + "Orion": 20634, + "Rufus": 20635, + "glucose": 20636, + "Olsen": 20637, + "autobiographical": 20638, + "##dened": 20639, + "222": 20640, + "humidity": 20641, + "Shan": 20642, + "##ifiable": 20643, + "supper": 20644, + "##rou": 20645, + "flare": 20646, + "##MO": 20647, + "campaigning": 20648, + "descend": 20649, + "socio": 20650, + "declares": 20651, + "Mounted": 20652, + "Gracie": 20653, + "Arte": 20654, + "endurance": 20655, + "##ety": 20656, + "Copper": 20657, + "costa": 20658, + "airplay": 20659, + "##MB": 20660, + "Proceedings": 20661, + "dislike": 20662, + "grimaced": 20663, + "occupants": 20664, + "births": 20665, + "glacial": 20666, + "oblivious": 20667, + "cans": 20668, + "installment": 20669, + "muddy": 20670, + "##ł": 20671, + "captains": 20672, + "pneumonia": 20673, + "Quiet": 20674, + "Sloan": 20675, + "Excuse": 20676, + "##nine": 20677, + "Geography": 20678, + "gymnastics": 20679, + "multimedia": 20680, + "drains": 20681, + "Anthology": 20682, + "Gear": 20683, + "cylindrical": 20684, + "Fry": 20685, + "undertaking": 20686, + "##pler": 20687, + "##tility": 20688, + "Nan": 20689, + "##recht": 20690, + "Dub": 20691, + "philosophers": 20692, + "piss": 20693, + "Atari": 20694, + "##pha": 20695, + "Galicia": 20696, + "México": 20697, + "##nking": 20698, + "Continuing": 20699, + "bump": 20700, + "graveyard": 20701, + "persisted": 20702, + "Shrine": 20703, + "##erapy": 20704, + "defects": 20705, + "Advance": 20706, + "Bomber": 20707, + "##oil": 20708, + "##ffling": 20709, + "cheerful": 20710, + "##lix": 20711, + "scrub": 20712, + "##eto": 20713, + "awkwardly": 20714, + "collaborator": 20715, + "fencing": 20716, + "##alo": 20717, + "prophet": 20718, + "Croix": 20719, + "coughed": 20720, + "##lication": 20721, + "roadway": 20722, + "slaughter": 20723, + "elephants": 20724, + "##erated": 20725, + "Simpsons": 20726, + "vulnerability": 20727, + "ivory": 20728, + "Birth": 20729, + "lizard": 20730, + "scarce": 20731, + "cylinders": 20732, + "fortunes": 20733, + "##NL": 20734, + "Hate": 20735, + "Priory": 20736, + "##lai": 20737, + "McBride": 20738, + "##copy": 20739, + "Lenny": 20740, + "liaison": 20741, + "Triangle": 20742, + "coronation": 20743, + "sampled": 20744, + "savage": 20745, + "amidst": 20746, + "Grady": 20747, + "whatsoever": 20748, + "instinctively": 20749, + "Reconstruction": 20750, + "insides": 20751, + "seizure": 20752, + "Drawing": 20753, + "##rlin": 20754, + "Antioch": 20755, + "Gao": 20756, + "Díaz": 20757, + "1760": 20758, + "Sparks": 20759, + "##tien": 20760, + "##bidae": 20761, + "rehearsal": 20762, + "##bbs": 20763, + "botanical": 20764, + "##hers": 20765, + "compensate": 20766, + "wholesale": 20767, + "Seville": 20768, + "shareholder": 20769, + "prediction": 20770, + "astronomical": 20771, + "Reddy": 20772, + "hardest": 20773, + "circling": 20774, + "whereabouts": 20775, + "termination": 20776, + "Rep": 20777, + "Assistance": 20778, + "Dramatic": 20779, + "Herb": 20780, + "##ghter": 20781, + "climbs": 20782, + "188": 20783, + "Poole": 20784, + "301": 20785, + "##pable": 20786, + "wit": 20787, + "##istice": 20788, + "Walters": 20789, + "relying": 20790, + "Jakob": 20791, + "##redo": 20792, + "proceeding": 20793, + "Langley": 20794, + "affiliates": 20795, + "ou": 20796, + "##allo": 20797, + "##holm": 20798, + "Samsung": 20799, + "##ishi": 20800, + "Missing": 20801, + "Xi": 20802, + "vertices": 20803, + "Claus": 20804, + "foam": 20805, + "restless": 20806, + "##uating": 20807, + "##sso": 20808, + "##ttering": 20809, + "Philips": 20810, + "delta": 20811, + "bombed": 20812, + "Catalogue": 20813, + "coaster": 20814, + "Ling": 20815, + "Willard": 20816, + "satire": 20817, + "410": 20818, + "Composition": 20819, + "Net": 20820, + "Orioles": 20821, + "##ldon": 20822, + "fins": 20823, + "Palatinate": 20824, + "Woodward": 20825, + "tease": 20826, + "tilt": 20827, + "brightness": 20828, + "##70": 20829, + "##bbling": 20830, + "##loss": 20831, + "##dhi": 20832, + "##uilt": 20833, + "Whoever": 20834, + "##yers": 20835, + "hitter": 20836, + "Elton": 20837, + "Extension": 20838, + "ace": 20839, + "Affair": 20840, + "restructuring": 20841, + "##loping": 20842, + "Paterson": 20843, + "hi": 20844, + "##rya": 20845, + "spouse": 20846, + "Shay": 20847, + "Himself": 20848, + "piles": 20849, + "preaching": 20850, + "##gical": 20851, + "bikes": 20852, + "Brave": 20853, + "expulsion": 20854, + "Mirza": 20855, + "stride": 20856, + "Trees": 20857, + "commemorated": 20858, + "famine": 20859, + "masonry": 20860, + "Selena": 20861, + "Watt": 20862, + "Banking": 20863, + "Rancho": 20864, + "Stockton": 20865, + "dip": 20866, + "tattoos": 20867, + "Vlad": 20868, + "acquainted": 20869, + "Flyers": 20870, + "ruthless": 20871, + "fourteenth": 20872, + "illustrate": 20873, + "##akes": 20874, + "EPA": 20875, + "##rows": 20876, + "##uiz": 20877, + "bumped": 20878, + "Designed": 20879, + "Leaders": 20880, + "mastered": 20881, + "Manfred": 20882, + "swirled": 20883, + "McCain": 20884, + "##rout": 20885, + "Artemis": 20886, + "rabbi": 20887, + "flinched": 20888, + "upgrades": 20889, + "penetrate": 20890, + "shipyard": 20891, + "transforming": 20892, + "caretaker": 20893, + "##eiro": 20894, + "Maureen": 20895, + "tightening": 20896, + "##founded": 20897, + "RAM": 20898, + "##icular": 20899, + "##mper": 20900, + "##rung": 20901, + "Fifteen": 20902, + "exploited": 20903, + "consistency": 20904, + "interstate": 20905, + "##ynn": 20906, + "Bridget": 20907, + "contamination": 20908, + "Mistress": 20909, + "##rup": 20910, + "coating": 20911, + "##FP": 20912, + "##jective": 20913, + "Libyan": 20914, + "211": 20915, + "Gemma": 20916, + "dependence": 20917, + "shrubs": 20918, + "##ggled": 20919, + "Germain": 20920, + "retaliation": 20921, + "traction": 20922, + "##PP": 20923, + "Dangerous": 20924, + "terminology": 20925, + "psychiatrist": 20926, + "##garten": 20927, + "hurdles": 20928, + "Natal": 20929, + "wasting": 20930, + "Weir": 20931, + "revolves": 20932, + "stripe": 20933, + "##reased": 20934, + "preferences": 20935, + "##entation": 20936, + "##lde": 20937, + "##áil": 20938, + "##otherapy": 20939, + "Flame": 20940, + "##ologies": 20941, + "viruses": 20942, + "Label": 20943, + "Pandora": 20944, + "veil": 20945, + "##ogical": 20946, + "Coliseum": 20947, + "Cottage": 20948, + "creeping": 20949, + "Jong": 20950, + "lectured": 20951, + "##çaise": 20952, + "shoreline": 20953, + "##fference": 20954, + "##hra": 20955, + "Shade": 20956, + "Clock": 20957, + "Faye": 20958, + "bilingual": 20959, + "Humboldt": 20960, + "Operating": 20961, + "##fter": 20962, + "##was": 20963, + "algae": 20964, + "towed": 20965, + "amphibious": 20966, + "Parma": 20967, + "impacted": 20968, + "smacked": 20969, + "Piedmont": 20970, + "Monsters": 20971, + "##omb": 20972, + "Moor": 20973, + "##lberg": 20974, + "sinister": 20975, + "Postal": 20976, + "178": 20977, + "Drummond": 20978, + "Sign": 20979, + "textbooks": 20980, + "hazardous": 20981, + "Brass": 20982, + "Rosemary": 20983, + "Pick": 20984, + "Sit": 20985, + "Architect": 20986, + "transverse": 20987, + "Centennial": 20988, + "confess": 20989, + "polling": 20990, + "##aia": 20991, + "Julien": 20992, + "##mand": 20993, + "consolidation": 20994, + "Ethel": 20995, + "##ulse": 20996, + "severity": 20997, + "Yorker": 20998, + "choreographer": 20999, + "1840s": 21000, + "##ltry": 21001, + "softer": 21002, + "versa": 21003, + "##geny": 21004, + "##quila": 21005, + "##jō": 21006, + "Caledonia": 21007, + "Friendship": 21008, + "Visa": 21009, + "rogue": 21010, + "##zzle": 21011, + "bait": 21012, + "feather": 21013, + "incidence": 21014, + "Foods": 21015, + "Ships": 21016, + "##uto": 21017, + "##stead": 21018, + "arousal": 21019, + "##rote": 21020, + "Hazel": 21021, + "##bolic": 21022, + "Swing": 21023, + "##ej": 21024, + "##cule": 21025, + "##jana": 21026, + "##metry": 21027, + "##uity": 21028, + "Valuable": 21029, + "##ₙ": 21030, + "Shropshire": 21031, + "##nect": 21032, + "365": 21033, + "Ones": 21034, + "realise": 21035, + "Café": 21036, + "Albuquerque": 21037, + "##grown": 21038, + "##stadt": 21039, + "209": 21040, + "##ᵢ": 21041, + "prefers": 21042, + "withstand": 21043, + "Lillian": 21044, + "MacArthur": 21045, + "Hara": 21046, + "##fulness": 21047, + "domination": 21048, + "##VO": 21049, + "##school": 21050, + "Freddy": 21051, + "ethnicity": 21052, + "##while": 21053, + "adorned": 21054, + "hormone": 21055, + "Calder": 21056, + "Domestic": 21057, + "Freud": 21058, + "Shields": 21059, + "##phus": 21060, + "##rgan": 21061, + "BP": 21062, + "Segunda": 21063, + "Mustang": 21064, + "##GI": 21065, + "Bonn": 21066, + "patiently": 21067, + "remarried": 21068, + "##umbria": 21069, + "Crete": 21070, + "Elephant": 21071, + "Nuremberg": 21072, + "tolerate": 21073, + "Tyson": 21074, + "##evich": 21075, + "Programming": 21076, + "##lander": 21077, + "Bethlehem": 21078, + "segregation": 21079, + "Constituency": 21080, + "quarterly": 21081, + "blushed": 21082, + "photographers": 21083, + "Sheldon": 21084, + "porcelain": 21085, + "Blanche": 21086, + "goddamn": 21087, + "lively": 21088, + "##fused": 21089, + "bumps": 21090, + "##eli": 21091, + "curated": 21092, + "coherent": 21093, + "provoked": 21094, + "##vet": 21095, + "Madeleine": 21096, + "##isco": 21097, + "rainy": 21098, + "Bethel": 21099, + "accusation": 21100, + "ponytail": 21101, + "gag": 21102, + "##lington": 21103, + "quicker": 21104, + "scroll": 21105, + "##vate": 21106, + "Bow": 21107, + "Gender": 21108, + "Ira": 21109, + "crashes": 21110, + "ACT": 21111, + "Maintenance": 21112, + "##aton": 21113, + "##ieu": 21114, + "bitterly": 21115, + "strains": 21116, + "rattled": 21117, + "vectors": 21118, + "##arina": 21119, + "##ishly": 21120, + "173": 21121, + "parole": 21122, + "##nx": 21123, + "amusing": 21124, + "Gonzalez": 21125, + "##erative": 21126, + "Caucus": 21127, + "sensual": 21128, + "Penelope": 21129, + "coefficient": 21130, + "Mateo": 21131, + "##mani": 21132, + "proposition": 21133, + "Duty": 21134, + "lacrosse": 21135, + "proportions": 21136, + "Plato": 21137, + "profiles": 21138, + "Botswana": 21139, + "Brandt": 21140, + "reins": 21141, + "mandolin": 21142, + "encompassing": 21143, + "##gens": 21144, + "Kahn": 21145, + "prop": 21146, + "summon": 21147, + "##MR": 21148, + "##yrian": 21149, + "##zaki": 21150, + "Falling": 21151, + "conditional": 21152, + "thy": 21153, + "##bao": 21154, + "##ych": 21155, + "radioactive": 21156, + "##nics": 21157, + "Newspaper": 21158, + "##people": 21159, + "##nded": 21160, + "Gaming": 21161, + "sunny": 21162, + "##look": 21163, + "Sherwood": 21164, + "crafted": 21165, + "NJ": 21166, + "awoke": 21167, + "187": 21168, + "timeline": 21169, + "giants": 21170, + "possessing": 21171, + "##ycle": 21172, + "Cheryl": 21173, + "ng": 21174, + "Ruiz": 21175, + "polymer": 21176, + "potassium": 21177, + "Ramsay": 21178, + "relocation": 21179, + "##leen": 21180, + "Sociology": 21181, + "##bana": 21182, + "Franciscan": 21183, + "propulsion": 21184, + "denote": 21185, + "##erjee": 21186, + "registers": 21187, + "headline": 21188, + "Tests": 21189, + "emerges": 21190, + "Articles": 21191, + "Mint": 21192, + "livery": 21193, + "breakup": 21194, + "kits": 21195, + "Rap": 21196, + "Browning": 21197, + "Bunny": 21198, + "##mington": 21199, + "##watch": 21200, + "Anastasia": 21201, + "Zachary": 21202, + "arranging": 21203, + "biographical": 21204, + "Erica": 21205, + "Nippon": 21206, + "##membrance": 21207, + "Carmel": 21208, + "##sport": 21209, + "##xes": 21210, + "Paddy": 21211, + "##holes": 21212, + "Issues": 21213, + "Spears": 21214, + "compliment": 21215, + "##stro": 21216, + "##graphs": 21217, + "Castillo": 21218, + "##MU": 21219, + "##space": 21220, + "Corporal": 21221, + "##nent": 21222, + "174": 21223, + "Gentlemen": 21224, + "##ilize": 21225, + "##vage": 21226, + "convinces": 21227, + "Carmine": 21228, + "Crash": 21229, + "##hashi": 21230, + "Files": 21231, + "Doctors": 21232, + "brownish": 21233, + "sweating": 21234, + "goats": 21235, + "##conductor": 21236, + "rendition": 21237, + "##bt": 21238, + "NL": 21239, + "##spiration": 21240, + "generates": 21241, + "##cans": 21242, + "obsession": 21243, + "##noy": 21244, + "Danger": 21245, + "Diaz": 21246, + "heats": 21247, + "Realm": 21248, + "priorities": 21249, + "##phon": 21250, + "1300": 21251, + "initiation": 21252, + "pagan": 21253, + "bursts": 21254, + "archipelago": 21255, + "chloride": 21256, + "Screenplay": 21257, + "Hewitt": 21258, + "Khmer": 21259, + "bang": 21260, + "judgement": 21261, + "negotiating": 21262, + "##ait": 21263, + "Mabel": 21264, + "densely": 21265, + "Boulder": 21266, + "knob": 21267, + "430": 21268, + "Alfredo": 21269, + "##kt": 21270, + "pitches": 21271, + "##ées": 21272, + "##ان": 21273, + "Macdonald": 21274, + "##llum": 21275, + "imply": 21276, + "##mot": 21277, + "Smile": 21278, + "spherical": 21279, + "##tura": 21280, + "Derrick": 21281, + "Kelley": 21282, + "Nico": 21283, + "cortex": 21284, + "launches": 21285, + "differed": 21286, + "parallels": 21287, + "Navigation": 21288, + "##child": 21289, + "##rming": 21290, + "canoe": 21291, + "forestry": 21292, + "reinforce": 21293, + "##mote": 21294, + "confirming": 21295, + "tasting": 21296, + "scaled": 21297, + "##resh": 21298, + "##eting": 21299, + "Understanding": 21300, + "prevailing": 21301, + "Pearce": 21302, + "CW": 21303, + "earnest": 21304, + "Gaius": 21305, + "asserts": 21306, + "denoted": 21307, + "landmarks": 21308, + "Chargers": 21309, + "warns": 21310, + "##flies": 21311, + "Judges": 21312, + "jagged": 21313, + "##dain": 21314, + "tails": 21315, + "Historian": 21316, + "Millie": 21317, + "##sler": 21318, + "221": 21319, + "##uard": 21320, + "absurd": 21321, + "Dion": 21322, + "##ially": 21323, + "makeshift": 21324, + "Specifically": 21325, + "ignorance": 21326, + "Eat": 21327, + "##ieri": 21328, + "comparisons": 21329, + "forensic": 21330, + "186": 21331, + "Giro": 21332, + "skeptical": 21333, + "disciplinary": 21334, + "battleship": 21335, + "##45": 21336, + "Libby": 21337, + "520": 21338, + "Odyssey": 21339, + "ledge": 21340, + "##post": 21341, + "Eternal": 21342, + "Missionary": 21343, + "deficiency": 21344, + "settler": 21345, + "wonders": 21346, + "##gai": 21347, + "raging": 21348, + "##cis": 21349, + "Romney": 21350, + "Ulrich": 21351, + "annexation": 21352, + "boxers": 21353, + "sect": 21354, + "204": 21355, + "ARIA": 21356, + "dei": 21357, + "Hitchcock": 21358, + "te": 21359, + "Varsity": 21360, + "##fic": 21361, + "CC": 21362, + "lending": 21363, + "##nial": 21364, + "##tag": 21365, + "##rdy": 21366, + "##obe": 21367, + "Defensive": 21368, + "##dson": 21369, + "##pore": 21370, + "stellar": 21371, + "Lam": 21372, + "Trials": 21373, + "contention": 21374, + "Sung": 21375, + "##uminous": 21376, + "Poe": 21377, + "superiority": 21378, + "##plicate": 21379, + "325": 21380, + "bitten": 21381, + "conspicuous": 21382, + "##olly": 21383, + "Lila": 21384, + "Pub": 21385, + "Petit": 21386, + "distorted": 21387, + "ISIL": 21388, + "distinctly": 21389, + "##family": 21390, + "Cowboy": 21391, + "mutant": 21392, + "##cats": 21393, + "##week": 21394, + "Changes": 21395, + "Sinatra": 21396, + "epithet": 21397, + "neglect": 21398, + "Innocent": 21399, + "gamma": 21400, + "thrill": 21401, + "reggae": 21402, + "##adia": 21403, + "##ational": 21404, + "##due": 21405, + "landlord": 21406, + "##leaf": 21407, + "visibly": 21408, + "##ì": 21409, + "Darlington": 21410, + "Gomez": 21411, + "##iting": 21412, + "scarf": 21413, + "##lade": 21414, + "Hinduism": 21415, + "Fever": 21416, + "scouts": 21417, + "##roi": 21418, + "convened": 21419, + "##oki": 21420, + "184": 21421, + "Lao": 21422, + "boycott": 21423, + "unemployed": 21424, + "##lore": 21425, + "##ß": 21426, + "##hammer": 21427, + "Curran": 21428, + "disciples": 21429, + "odor": 21430, + "##ygiene": 21431, + "Lighthouse": 21432, + "Played": 21433, + "whales": 21434, + "discretion": 21435, + "Yves": 21436, + "##ceived": 21437, + "pauses": 21438, + "coincide": 21439, + "##nji": 21440, + "dizzy": 21441, + "##scopic": 21442, + "routed": 21443, + "Guardians": 21444, + "Kellan": 21445, + "carnival": 21446, + "nasal": 21447, + "224": 21448, + "##awed": 21449, + "Mitsubishi": 21450, + "640": 21451, + "Cast": 21452, + "silky": 21453, + "Projects": 21454, + "joked": 21455, + "Huddersfield": 21456, + "Rothschild": 21457, + "zu": 21458, + "##olar": 21459, + "Divisions": 21460, + "mildly": 21461, + "##eni": 21462, + "##lge": 21463, + "Appalachian": 21464, + "Sahara": 21465, + "pinch": 21466, + "##roon": 21467, + "wardrobe": 21468, + "##dham": 21469, + "##etal": 21470, + "Bubba": 21471, + "##lini": 21472, + "##rumbling": 21473, + "Communities": 21474, + "Poznań": 21475, + "unification": 21476, + "Beau": 21477, + "Kris": 21478, + "SV": 21479, + "Rowing": 21480, + "Minh": 21481, + "reconciliation": 21482, + "##saki": 21483, + "##sor": 21484, + "taped": 21485, + "##reck": 21486, + "certificates": 21487, + "gubernatorial": 21488, + "rainbow": 21489, + "##uing": 21490, + "litter": 21491, + "##lique": 21492, + "##oted": 21493, + "Butterfly": 21494, + "benefited": 21495, + "Images": 21496, + "induce": 21497, + "Balkans": 21498, + "Velvet": 21499, + "##90": 21500, + "##xon": 21501, + "Bowman": 21502, + "##breaker": 21503, + "penis": 21504, + "##nitz": 21505, + "##oint": 21506, + "##otive": 21507, + "crust": 21508, + "##pps": 21509, + "organizers": 21510, + "Outdoor": 21511, + "nominees": 21512, + "##rika": 21513, + "TX": 21514, + "##ucks": 21515, + "Protestants": 21516, + "##imation": 21517, + "appetite": 21518, + "Baja": 21519, + "awaited": 21520, + "##points": 21521, + "windshield": 21522, + "##igh": 21523, + "##zled": 21524, + "Brody": 21525, + "Buster": 21526, + "stylized": 21527, + "Bryce": 21528, + "##sz": 21529, + "Dollar": 21530, + "vest": 21531, + "mold": 21532, + "ounce": 21533, + "ok": 21534, + "receivers": 21535, + "##uza": 21536, + "Purdue": 21537, + "Harrington": 21538, + "Hodges": 21539, + "captures": 21540, + "##ggio": 21541, + "Reservation": 21542, + "##ssin": 21543, + "##tman": 21544, + "cosmic": 21545, + "straightforward": 21546, + "flipping": 21547, + "remixed": 21548, + "##athed": 21549, + "Gómez": 21550, + "Lim": 21551, + "motorcycles": 21552, + "economies": 21553, + "owning": 21554, + "Dani": 21555, + "##rosis": 21556, + "myths": 21557, + "sire": 21558, + "kindly": 21559, + "1768": 21560, + "Bean": 21561, + "graphs": 21562, + "##mee": 21563, + "##RO": 21564, + "##geon": 21565, + "puppy": 21566, + "Stephenson": 21567, + "notified": 21568, + "##jer": 21569, + "Watching": 21570, + "##rama": 21571, + "Sino": 21572, + "urgency": 21573, + "Islanders": 21574, + "##mash": 21575, + "Plata": 21576, + "fumble": 21577, + "##chev": 21578, + "##stance": 21579, + "##rack": 21580, + "##she": 21581, + "facilitated": 21582, + "swings": 21583, + "akin": 21584, + "enduring": 21585, + "payload": 21586, + "##phine": 21587, + "Deputies": 21588, + "murals": 21589, + "##tooth": 21590, + "610": 21591, + "Jays": 21592, + "eyeing": 21593, + "##quito": 21594, + "transparency": 21595, + "##cote": 21596, + "Timor": 21597, + "negatively": 21598, + "##isan": 21599, + "battled": 21600, + "##fected": 21601, + "thankful": 21602, + "Rage": 21603, + "hospitality": 21604, + "incorrectly": 21605, + "207": 21606, + "entrepreneurs": 21607, + "##cula": 21608, + "##wley": 21609, + "hedge": 21610, + "##cratic": 21611, + "Corpus": 21612, + "Odessa": 21613, + "Whereas": 21614, + "##ln": 21615, + "fetch": 21616, + "happier": 21617, + "Amherst": 21618, + "bullying": 21619, + "graceful": 21620, + "Height": 21621, + "Bartholomew": 21622, + "willingness": 21623, + "qualifier": 21624, + "191": 21625, + "Syed": 21626, + "Wesleyan": 21627, + "Layla": 21628, + "##rrence": 21629, + "Webber": 21630, + "##hum": 21631, + "Rat": 21632, + "##cket": 21633, + "##herence": 21634, + "Monterey": 21635, + "contaminated": 21636, + "Beside": 21637, + "Mustafa": 21638, + "Nana": 21639, + "213": 21640, + "##pruce": 21641, + "Reason": 21642, + "##spense": 21643, + "spike": 21644, + "##gé": 21645, + "AU": 21646, + "disciple": 21647, + "charcoal": 21648, + "##lean": 21649, + "formulated": 21650, + "Diesel": 21651, + "Mariners": 21652, + "accreditation": 21653, + "glossy": 21654, + "1800s": 21655, + "##ih": 21656, + "Mainz": 21657, + "unison": 21658, + "Marianne": 21659, + "shear": 21660, + "overseeing": 21661, + "vernacular": 21662, + "bowled": 21663, + "##lett": 21664, + "unpopular": 21665, + "##ckoned": 21666, + "##monia": 21667, + "Gaston": 21668, + "##TI": 21669, + "##oters": 21670, + "Cups": 21671, + "##bones": 21672, + "##ports": 21673, + "Museo": 21674, + "minors": 21675, + "1773": 21676, + "Dickens": 21677, + "##EL": 21678, + "##NBC": 21679, + "Presents": 21680, + "ambitions": 21681, + "axes": 21682, + "Río": 21683, + "Yukon": 21684, + "bedside": 21685, + "Ribbon": 21686, + "Units": 21687, + "faults": 21688, + "conceal": 21689, + "##lani": 21690, + "prevailed": 21691, + "214": 21692, + "Goodwin": 21693, + "Jaguar": 21694, + "crumpled": 21695, + "Cullen": 21696, + "Wireless": 21697, + "ceded": 21698, + "remotely": 21699, + "Bin": 21700, + "mocking": 21701, + "straps": 21702, + "ceramics": 21703, + "##avi": 21704, + "##uding": 21705, + "##ader": 21706, + "Taft": 21707, + "twenties": 21708, + "##aked": 21709, + "Problem": 21710, + "quasi": 21711, + "Lamar": 21712, + "##ntes": 21713, + "##avan": 21714, + "Barr": 21715, + "##eral": 21716, + "hooks": 21717, + "sa": 21718, + "##ône": 21719, + "194": 21720, + "##ross": 21721, + "Nero": 21722, + "Caine": 21723, + "trance": 21724, + "Homeland": 21725, + "benches": 21726, + "Guthrie": 21727, + "dismiss": 21728, + "##lex": 21729, + "César": 21730, + "foliage": 21731, + "##oot": 21732, + "##alty": 21733, + "Assyrian": 21734, + "Ahead": 21735, + "Murdoch": 21736, + "dictatorship": 21737, + "wraps": 21738, + "##ntal": 21739, + "Corridor": 21740, + "Mackay": 21741, + "respectable": 21742, + "jewels": 21743, + "understands": 21744, + "##pathic": 21745, + "Bryn": 21746, + "##tep": 21747, + "ON": 21748, + "capsule": 21749, + "intrigued": 21750, + "Sleeping": 21751, + "communists": 21752, + "##chayat": 21753, + "##current": 21754, + "##vez": 21755, + "doubling": 21756, + "booklet": 21757, + "##uche": 21758, + "Creed": 21759, + "##NU": 21760, + "spies": 21761, + "##sef": 21762, + "adjusting": 21763, + "197": 21764, + "Imam": 21765, + "heaved": 21766, + "Tanya": 21767, + "canonical": 21768, + "restraint": 21769, + "senators": 21770, + "stainless": 21771, + "##gnate": 21772, + "Matter": 21773, + "cache": 21774, + "restrained": 21775, + "conflicting": 21776, + "stung": 21777, + "##ool": 21778, + "Sustainable": 21779, + "antiquity": 21780, + "193": 21781, + "heavens": 21782, + "inclusive": 21783, + "##ador": 21784, + "fluent": 21785, + "303": 21786, + "911": 21787, + "archaeologist": 21788, + "superseded": 21789, + "##plex": 21790, + "Tammy": 21791, + "inspire": 21792, + "##passing": 21793, + "##lub": 21794, + "Lama": 21795, + "Mixing": 21796, + "##activated": 21797, + "##yote": 21798, + "parlor": 21799, + "tactic": 21800, + "198": 21801, + "Stefano": 21802, + "prostitute": 21803, + "recycling": 21804, + "sorted": 21805, + "banana": 21806, + "Stacey": 21807, + "Musée": 21808, + "aristocratic": 21809, + "cough": 21810, + "##rting": 21811, + "authorised": 21812, + "gangs": 21813, + "runoff": 21814, + "thoughtfully": 21815, + "##nish": 21816, + "Fisheries": 21817, + "Provence": 21818, + "detector": 21819, + "hum": 21820, + "##zhen": 21821, + "pill": 21822, + "##árez": 21823, + "Map": 21824, + "Leaves": 21825, + "Peabody": 21826, + "skater": 21827, + "vent": 21828, + "##color": 21829, + "390": 21830, + "cerebral": 21831, + "hostages": 21832, + "mare": 21833, + "Jurassic": 21834, + "swell": 21835, + "##isans": 21836, + "Knoxville": 21837, + "Naked": 21838, + "Malaya": 21839, + "scowl": 21840, + "Cobra": 21841, + "##anga": 21842, + "Sexual": 21843, + "##dron": 21844, + "##iae": 21845, + "196": 21846, + "##drick": 21847, + "Ravens": 21848, + "Blaine": 21849, + "##throp": 21850, + "Ismail": 21851, + "symmetric": 21852, + "##lossom": 21853, + "Leicestershire": 21854, + "Sylvester": 21855, + "glazed": 21856, + "##tended": 21857, + "Radar": 21858, + "fused": 21859, + "Families": 21860, + "Blacks": 21861, + "Sale": 21862, + "Zion": 21863, + "foothills": 21864, + "microwave": 21865, + "slain": 21866, + "Collingwood": 21867, + "##pants": 21868, + "##dling": 21869, + "killers": 21870, + "routinely": 21871, + "Janice": 21872, + "hearings": 21873, + "##chanted": 21874, + "##ltration": 21875, + "continents": 21876, + "##iving": 21877, + "##yster": 21878, + "##shot": 21879, + "##yna": 21880, + "injected": 21881, + "Guillaume": 21882, + "##ibi": 21883, + "kinda": 21884, + "Confederacy": 21885, + "Barnett": 21886, + "disasters": 21887, + "incapable": 21888, + "##grating": 21889, + "rhythms": 21890, + "betting": 21891, + "draining": 21892, + "##hak": 21893, + "Callie": 21894, + "Glover": 21895, + "##iliated": 21896, + "Sherlock": 21897, + "hearted": 21898, + "punching": 21899, + "Wolverhampton": 21900, + "Leaf": 21901, + "Pi": 21902, + "builders": 21903, + "furnished": 21904, + "knighted": 21905, + "Photo": 21906, + "##zle": 21907, + "Touring": 21908, + "fumbled": 21909, + "pads": 21910, + "##ий": 21911, + "Bartlett": 21912, + "Gunner": 21913, + "eerie": 21914, + "Marius": 21915, + "Bonus": 21916, + "pots": 21917, + "##hino": 21918, + "##pta": 21919, + "Bray": 21920, + "Frey": 21921, + "Ortiz": 21922, + "stalls": 21923, + "belongings": 21924, + "Subway": 21925, + "fascination": 21926, + "metaphor": 21927, + "Bat": 21928, + "Boer": 21929, + "Colchester": 21930, + "sway": 21931, + "##gro": 21932, + "rhetoric": 21933, + "##dheim": 21934, + "Fool": 21935, + "PMID": 21936, + "admire": 21937, + "##hsil": 21938, + "Strand": 21939, + "TNA": 21940, + "##roth": 21941, + "Nottinghamshire": 21942, + "##mat": 21943, + "##yler": 21944, + "Oxfordshire": 21945, + "##nacle": 21946, + "##roner": 21947, + "BS": 21948, + "##nces": 21949, + "stimulus": 21950, + "transports": 21951, + "Sabbath": 21952, + "##postle": 21953, + "Richter": 21954, + "4000": 21955, + "##grim": 21956, + "##shima": 21957, + "##lette": 21958, + "deteriorated": 21959, + "analogous": 21960, + "##ratic": 21961, + "UHF": 21962, + "energies": 21963, + "inspiring": 21964, + "Yiddish": 21965, + "Activities": 21966, + "##quential": 21967, + "##boe": 21968, + "Melville": 21969, + "##ilton": 21970, + "Judd": 21971, + "consonants": 21972, + "labs": 21973, + "smuggling": 21974, + "##fari": 21975, + "avid": 21976, + "##uc": 21977, + "truce": 21978, + "undead": 21979, + "##raith": 21980, + "Mostly": 21981, + "bracelet": 21982, + "Connection": 21983, + "Hussain": 21984, + "awhile": 21985, + "##UC": 21986, + "##vention": 21987, + "liable": 21988, + "genetically": 21989, + "##phic": 21990, + "Important": 21991, + "Wildcats": 21992, + "daddy": 21993, + "transmit": 21994, + "##cas": 21995, + "conserved": 21996, + "Yesterday": 21997, + "##lite": 21998, + "Nicky": 21999, + "Guys": 22000, + "Wilder": 22001, + "Lay": 22002, + "skinned": 22003, + "Communists": 22004, + "Garfield": 22005, + "Nearby": 22006, + "organizer": 22007, + "Loss": 22008, + "crafts": 22009, + "walkway": 22010, + "Chocolate": 22011, + "Sundance": 22012, + "Synod": 22013, + "##enham": 22014, + "modify": 22015, + "swayed": 22016, + "Surface": 22017, + "analysts": 22018, + "brackets": 22019, + "drone": 22020, + "parachute": 22021, + "smelling": 22022, + "Andrés": 22023, + "filthy": 22024, + "frogs": 22025, + "vertically": 22026, + "##OK": 22027, + "localities": 22028, + "marries": 22029, + "AHL": 22030, + "35th": 22031, + "##pian": 22032, + "Palazzo": 22033, + "cube": 22034, + "dismay": 22035, + "relocate": 22036, + "##на": 22037, + "Hear": 22038, + "##digo": 22039, + "##oxide": 22040, + "prefecture": 22041, + "converts": 22042, + "hangar": 22043, + "##oya": 22044, + "##ucking": 22045, + "Spectrum": 22046, + "deepened": 22047, + "spoiled": 22048, + "Keeping": 22049, + "##phobic": 22050, + "Verona": 22051, + "outrage": 22052, + "Improvement": 22053, + "##UI": 22054, + "masterpiece": 22055, + "slung": 22056, + "Calling": 22057, + "chant": 22058, + "Haute": 22059, + "mediated": 22060, + "manipulated": 22061, + "affirmed": 22062, + "##hesis": 22063, + "Hangul": 22064, + "skies": 22065, + "##llan": 22066, + "Worcestershire": 22067, + "##kos": 22068, + "mosaic": 22069, + "##bage": 22070, + "##wned": 22071, + "Putnam": 22072, + "folder": 22073, + "##LM": 22074, + "guts": 22075, + "noteworthy": 22076, + "##rada": 22077, + "AJ": 22078, + "sculpted": 22079, + "##iselle": 22080, + "##rang": 22081, + "recognizable": 22082, + "##pent": 22083, + "dolls": 22084, + "lobbying": 22085, + "impatiently": 22086, + "Se": 22087, + "staple": 22088, + "Serb": 22089, + "tandem": 22090, + "Hiroshima": 22091, + "thieves": 22092, + "##ynx": 22093, + "faculties": 22094, + "Norte": 22095, + "##alle": 22096, + "##trusion": 22097, + "chords": 22098, + "##ylon": 22099, + "Gareth": 22100, + "##lops": 22101, + "##escu": 22102, + "FIA": 22103, + "Levin": 22104, + "auspices": 22105, + "groin": 22106, + "Hui": 22107, + "nun": 22108, + "Listed": 22109, + "Honourable": 22110, + "Larsen": 22111, + "rigorous": 22112, + "##erer": 22113, + "Tonga": 22114, + "##pment": 22115, + "##rave": 22116, + "##track": 22117, + "##aa": 22118, + "##enary": 22119, + "540": 22120, + "clone": 22121, + "sediment": 22122, + "esteem": 22123, + "sighted": 22124, + "cruelty": 22125, + "##boa": 22126, + "inverse": 22127, + "violating": 22128, + "Amtrak": 22129, + "Status": 22130, + "amalgamated": 22131, + "vertex": 22132, + "AR": 22133, + "harmless": 22134, + "Amir": 22135, + "mounts": 22136, + "Coronation": 22137, + "counseling": 22138, + "Audi": 22139, + "CO₂": 22140, + "splits": 22141, + "##eyer": 22142, + "Humans": 22143, + "Salmon": 22144, + "##have": 22145, + "##rado": 22146, + "##čić": 22147, + "216": 22148, + "takeoff": 22149, + "classmates": 22150, + "psychedelic": 22151, + "##gni": 22152, + "Gypsy": 22153, + "231": 22154, + "Anger": 22155, + "GAA": 22156, + "ME": 22157, + "##nist": 22158, + "##tals": 22159, + "Lissa": 22160, + "Odd": 22161, + "baptized": 22162, + "Fiat": 22163, + "fringe": 22164, + "##hren": 22165, + "179": 22166, + "elevators": 22167, + "perspectives": 22168, + "##TF": 22169, + "##ngle": 22170, + "Question": 22171, + "frontal": 22172, + "950": 22173, + "thicker": 22174, + "Molecular": 22175, + "##nological": 22176, + "Sixteen": 22177, + "Baton": 22178, + "Hearing": 22179, + "commemorative": 22180, + "dorm": 22181, + "Architectural": 22182, + "purity": 22183, + "##erse": 22184, + "risky": 22185, + "Georgie": 22186, + "relaxing": 22187, + "##ugs": 22188, + "downed": 22189, + "##rar": 22190, + "Slim": 22191, + "##phy": 22192, + "IUCN": 22193, + "##thorpe": 22194, + "Parkinson": 22195, + "217": 22196, + "Marley": 22197, + "Shipping": 22198, + "sweaty": 22199, + "Jesuits": 22200, + "Sindh": 22201, + "Janata": 22202, + "implying": 22203, + "Armenians": 22204, + "intercept": 22205, + "Ankara": 22206, + "commissioners": 22207, + "ascended": 22208, + "sniper": 22209, + "Grass": 22210, + "Walls": 22211, + "salvage": 22212, + "Dewey": 22213, + "generalized": 22214, + "learnt": 22215, + "PT": 22216, + "##fighter": 22217, + "##tech": 22218, + "DR": 22219, + "##itrus": 22220, + "##zza": 22221, + "mercenaries": 22222, + "slots": 22223, + "##burst": 22224, + "##finger": 22225, + "##nsky": 22226, + "Princes": 22227, + "Rhodesia": 22228, + "##munication": 22229, + "##strom": 22230, + "Fremantle": 22231, + "homework": 22232, + "ins": 22233, + "##Os": 22234, + "##hao": 22235, + "##uffed": 22236, + "Thorpe": 22237, + "Xiao": 22238, + "exquisite": 22239, + "firstly": 22240, + "liberated": 22241, + "technician": 22242, + "Oilers": 22243, + "Phyllis": 22244, + "herb": 22245, + "sharks": 22246, + "MBE": 22247, + "##stock": 22248, + "Product": 22249, + "banjo": 22250, + "##morandum": 22251, + "##than": 22252, + "Visitors": 22253, + "unavailable": 22254, + "unpublished": 22255, + "oxidation": 22256, + "Vogue": 22257, + "##copic": 22258, + "##etics": 22259, + "Yates": 22260, + "##ppard": 22261, + "Leiden": 22262, + "Trading": 22263, + "cottages": 22264, + "Principles": 22265, + "##Millan": 22266, + "##wife": 22267, + "##hiva": 22268, + "Vicar": 22269, + "nouns": 22270, + "strolled": 22271, + "##eorological": 22272, + "##eton": 22273, + "##science": 22274, + "precedent": 22275, + "Armand": 22276, + "Guido": 22277, + "rewards": 22278, + "##ilis": 22279, + "##tise": 22280, + "clipped": 22281, + "chick": 22282, + "##endra": 22283, + "averages": 22284, + "tentatively": 22285, + "1830s": 22286, + "##vos": 22287, + "Certainly": 22288, + "305": 22289, + "Société": 22290, + "Commandant": 22291, + "##crats": 22292, + "##dified": 22293, + "##nka": 22294, + "marsh": 22295, + "angered": 22296, + "ventilation": 22297, + "Hutton": 22298, + "Ritchie": 22299, + "##having": 22300, + "Eclipse": 22301, + "flick": 22302, + "motionless": 22303, + "Amor": 22304, + "Fest": 22305, + "Loire": 22306, + "lays": 22307, + "##icit": 22308, + "##sband": 22309, + "Guggenheim": 22310, + "Luck": 22311, + "disrupted": 22312, + "##ncia": 22313, + "Disco": 22314, + "##vigator": 22315, + "criticisms": 22316, + "grins": 22317, + "##lons": 22318, + "##vial": 22319, + "##ody": 22320, + "salute": 22321, + "Coaches": 22322, + "junk": 22323, + "saxophonist": 22324, + "##eology": 22325, + "Uprising": 22326, + "Diet": 22327, + "##marks": 22328, + "chronicles": 22329, + "robbed": 22330, + "##iet": 22331, + "##ahi": 22332, + "Bohemian": 22333, + "magician": 22334, + "wavelength": 22335, + "Kenyan": 22336, + "augmented": 22337, + "fashionable": 22338, + "##ogies": 22339, + "Luce": 22340, + "F1": 22341, + "Monmouth": 22342, + "##jos": 22343, + "##loop": 22344, + "enjoyment": 22345, + "exemption": 22346, + "Centers": 22347, + "##visor": 22348, + "Soundtrack": 22349, + "blinding": 22350, + "practitioner": 22351, + "solidarity": 22352, + "sacrificed": 22353, + "##oso": 22354, + "##cture": 22355, + "##riated": 22356, + "blended": 22357, + "Abd": 22358, + "Copyright": 22359, + "##nob": 22360, + "34th": 22361, + "##reak": 22362, + "Claudio": 22363, + "hectare": 22364, + "rotor": 22365, + "testify": 22366, + "##ends": 22367, + "##iably": 22368, + "##sume": 22369, + "landowner": 22370, + "##cess": 22371, + "##ckman": 22372, + "Eduard": 22373, + "Silesian": 22374, + "backseat": 22375, + "mutually": 22376, + "##abe": 22377, + "Mallory": 22378, + "bounds": 22379, + "Collective": 22380, + "Poet": 22381, + "Winkler": 22382, + "pertaining": 22383, + "scraped": 22384, + "Phelps": 22385, + "crane": 22386, + "flickering": 22387, + "Proto": 22388, + "bubbles": 22389, + "popularized": 22390, + "removes": 22391, + "##86": 22392, + "Cadillac": 22393, + "Warfare": 22394, + "audible": 22395, + "rites": 22396, + "shivering": 22397, + "##sist": 22398, + "##nst": 22399, + "##biotic": 22400, + "Mon": 22401, + "fascist": 22402, + "Bali": 22403, + "Kathryn": 22404, + "ambiguous": 22405, + "furiously": 22406, + "morale": 22407, + "patio": 22408, + "Sang": 22409, + "inconsistent": 22410, + "topology": 22411, + "Greens": 22412, + "monkeys": 22413, + "Köppen": 22414, + "189": 22415, + "Toy": 22416, + "vow": 22417, + "##ías": 22418, + "bombings": 22419, + "##culus": 22420, + "improvised": 22421, + "lodged": 22422, + "subsidiaries": 22423, + "garment": 22424, + "startling": 22425, + "practised": 22426, + "Hume": 22427, + "Thorn": 22428, + "categorized": 22429, + "Till": 22430, + "Eileen": 22431, + "wedge": 22432, + "##64": 22433, + "Federico": 22434, + "patriotic": 22435, + "unlock": 22436, + "##oshi": 22437, + "badminton": 22438, + "Compared": 22439, + "Vilnius": 22440, + "##KE": 22441, + "Crimean": 22442, + "Kemp": 22443, + "decks": 22444, + "spaced": 22445, + "resolutions": 22446, + "sighs": 22447, + "##mind": 22448, + "Imagine": 22449, + "Cartoon": 22450, + "huddled": 22451, + "policemen": 22452, + "forwards": 22453, + "##rouch": 22454, + "equals": 22455, + "##nter": 22456, + "inspected": 22457, + "Charley": 22458, + "MG": 22459, + "##rte": 22460, + "pamphlet": 22461, + "Arturo": 22462, + "dans": 22463, + "scarcely": 22464, + "##ulton": 22465, + "##rvin": 22466, + "parental": 22467, + "unconstitutional": 22468, + "watts": 22469, + "Susannah": 22470, + "Dare": 22471, + "##sitive": 22472, + "Rowland": 22473, + "Valle": 22474, + "invalid": 22475, + "##ué": 22476, + "Detachment": 22477, + "acronym": 22478, + "Yokohama": 22479, + "verified": 22480, + "##lsson": 22481, + "groove": 22482, + "Liza": 22483, + "clarified": 22484, + "compromised": 22485, + "265": 22486, + "##rgon": 22487, + "##orf": 22488, + "hesitant": 22489, + "Fruit": 22490, + "Application": 22491, + "Mathias": 22492, + "icons": 22493, + "##cell": 22494, + "Qin": 22495, + "interventions": 22496, + "##uron": 22497, + "punt": 22498, + "remnant": 22499, + "##rien": 22500, + "Ames": 22501, + "manifold": 22502, + "spines": 22503, + "floral": 22504, + "##zable": 22505, + "comrades": 22506, + "Fallen": 22507, + "orbits": 22508, + "Annals": 22509, + "hobby": 22510, + "Auditorium": 22511, + "implicated": 22512, + "researching": 22513, + "Pueblo": 22514, + "Ta": 22515, + "terminate": 22516, + "##pella": 22517, + "Rings": 22518, + "approximation": 22519, + "fuzzy": 22520, + "##ús": 22521, + "thriving": 22522, + "##ket": 22523, + "Conor": 22524, + "alarmed": 22525, + "etched": 22526, + "Cary": 22527, + "##rdon": 22528, + "Ally": 22529, + "##rington": 22530, + "Pay": 22531, + "mint": 22532, + "##hasa": 22533, + "##unity": 22534, + "##dman": 22535, + "##itate": 22536, + "Oceania": 22537, + "furrowed": 22538, + "trams": 22539, + "##aq": 22540, + "Wentworth": 22541, + "ventured": 22542, + "choreography": 22543, + "prototypes": 22544, + "Patel": 22545, + "mouthed": 22546, + "trenches": 22547, + "##licing": 22548, + "##yya": 22549, + "Lies": 22550, + "deception": 22551, + "##erve": 22552, + "##vations": 22553, + "Bertrand": 22554, + "earthquakes": 22555, + "##tography": 22556, + "Southwestern": 22557, + "##aja": 22558, + "token": 22559, + "Gupta": 22560, + "##yō": 22561, + "Beckett": 22562, + "initials": 22563, + "ironic": 22564, + "Tsar": 22565, + "subdued": 22566, + "shootout": 22567, + "sobbing": 22568, + "liar": 22569, + "Scandinavia": 22570, + "Souls": 22571, + "ch": 22572, + "therapist": 22573, + "trader": 22574, + "Regulation": 22575, + "Kali": 22576, + "busiest": 22577, + "##pation": 22578, + "32nd": 22579, + "Telephone": 22580, + "Vargas": 22581, + "##moky": 22582, + "##nose": 22583, + "##uge": 22584, + "Favorite": 22585, + "abducted": 22586, + "bonding": 22587, + "219": 22588, + "255": 22589, + "correction": 22590, + "mat": 22591, + "drown": 22592, + "fl": 22593, + "unbeaten": 22594, + "Pocket": 22595, + "Summers": 22596, + "Quite": 22597, + "rods": 22598, + "Percussion": 22599, + "##ndy": 22600, + "buzzing": 22601, + "cadet": 22602, + "Wilkes": 22603, + "attire": 22604, + "directory": 22605, + "utilities": 22606, + "naive": 22607, + "populous": 22608, + "Hendrix": 22609, + "##actor": 22610, + "disadvantage": 22611, + "1400": 22612, + "Landon": 22613, + "Underworld": 22614, + "##ense": 22615, + "Occasionally": 22616, + "mercury": 22617, + "Davey": 22618, + "Morley": 22619, + "spa": 22620, + "wrestled": 22621, + "##vender": 22622, + "eclipse": 22623, + "Sienna": 22624, + "supplemented": 22625, + "thou": 22626, + "Stream": 22627, + "liturgical": 22628, + "##gall": 22629, + "##berries": 22630, + "##piration": 22631, + "1769": 22632, + "Bucks": 22633, + "abandoning": 22634, + "##jutant": 22635, + "##nac": 22636, + "232": 22637, + "venom": 22638, + "##31": 22639, + "Roche": 22640, + "dotted": 22641, + "Currie": 22642, + "Córdoba": 22643, + "Milo": 22644, + "Sharif": 22645, + "divides": 22646, + "justification": 22647, + "prejudice": 22648, + "fortunate": 22649, + "##vide": 22650, + "##ābād": 22651, + "Rowe": 22652, + "inflammatory": 22653, + "##eld": 22654, + "avenue": 22655, + "Sources": 22656, + "##rimal": 22657, + "Messenger": 22658, + "Blanco": 22659, + "advocating": 22660, + "formulation": 22661, + "##pute": 22662, + "emphasizes": 22663, + "nut": 22664, + "Armored": 22665, + "##ented": 22666, + "nutrients": 22667, + "##tment": 22668, + "insistence": 22669, + "Martins": 22670, + "landowners": 22671, + "##RB": 22672, + "comparatively": 22673, + "headlines": 22674, + "snaps": 22675, + "##qing": 22676, + "Celebration": 22677, + "##mad": 22678, + "republican": 22679, + "##NE": 22680, + "Trace": 22681, + "##500": 22682, + "1771": 22683, + "proclamation": 22684, + "NRL": 22685, + "Rubin": 22686, + "Buzz": 22687, + "Weimar": 22688, + "##AG": 22689, + "199": 22690, + "posthumous": 22691, + "##ental": 22692, + "##deacon": 22693, + "Distance": 22694, + "intensely": 22695, + "overheard": 22696, + "Arcade": 22697, + "diagonal": 22698, + "hazard": 22699, + "Giving": 22700, + "weekdays": 22701, + "##ù": 22702, + "Verdi": 22703, + "actresses": 22704, + "##hare": 22705, + "Pulling": 22706, + "##erries": 22707, + "##pores": 22708, + "catering": 22709, + "shortest": 22710, + "##ctors": 22711, + "##cure": 22712, + "##restle": 22713, + "##reta": 22714, + "##runch": 22715, + "##brecht": 22716, + "##uddin": 22717, + "Moments": 22718, + "senate": 22719, + "Feng": 22720, + "Prescott": 22721, + "##thest": 22722, + "218": 22723, + "divisional": 22724, + "Bertie": 22725, + "sparse": 22726, + "surrounds": 22727, + "coupling": 22728, + "gravitational": 22729, + "werewolves": 22730, + "##lax": 22731, + "Rankings": 22732, + "##mated": 22733, + "##tries": 22734, + "Shia": 22735, + "##mart": 22736, + "##23": 22737, + "##vocative": 22738, + "interfaces": 22739, + "morphology": 22740, + "newscast": 22741, + "##bide": 22742, + "inputs": 22743, + "solicitor": 22744, + "Olaf": 22745, + "cabinets": 22746, + "puzzles": 22747, + "##tains": 22748, + "Unified": 22749, + "##firmed": 22750, + "WA": 22751, + "solemn": 22752, + "##opy": 22753, + "Tito": 22754, + "Jaenelle": 22755, + "Neolithic": 22756, + "horseback": 22757, + "##ires": 22758, + "pharmacy": 22759, + "prevalence": 22760, + "##lint": 22761, + "Swami": 22762, + "##bush": 22763, + "##tudes": 22764, + "Philipp": 22765, + "mythical": 22766, + "divers": 22767, + "Scouting": 22768, + "aperture": 22769, + "progressively": 22770, + "##bay": 22771, + "##nio": 22772, + "bounce": 22773, + "Floor": 22774, + "##elf": 22775, + "Lucan": 22776, + "adulthood": 22777, + "helm": 22778, + "Bluff": 22779, + "Passage": 22780, + "Salvation": 22781, + "lemon": 22782, + "napkin": 22783, + "scheduling": 22784, + "##gets": 22785, + "Elements": 22786, + "Mina": 22787, + "Novak": 22788, + "stalled": 22789, + "##llister": 22790, + "Infrastructure": 22791, + "##nky": 22792, + "##tania": 22793, + "##uished": 22794, + "Katz": 22795, + "Norma": 22796, + "sucks": 22797, + "trusting": 22798, + "1765": 22799, + "boilers": 22800, + "Accordingly": 22801, + "##hered": 22802, + "223": 22803, + "Crowley": 22804, + "##fight": 22805, + "##ulo": 22806, + "Henrietta": 22807, + "##hani": 22808, + "pounder": 22809, + "surprises": 22810, + "##chor": 22811, + "##glia": 22812, + "Dukes": 22813, + "##cracy": 22814, + "##zier": 22815, + "##fs": 22816, + "Patriot": 22817, + "silicon": 22818, + "##VP": 22819, + "simulcast": 22820, + "telegraph": 22821, + "Mysore": 22822, + "cardboard": 22823, + "Len": 22824, + "##QL": 22825, + "Auguste": 22826, + "accordion": 22827, + "analytical": 22828, + "specify": 22829, + "ineffective": 22830, + "hunched": 22831, + "abnormal": 22832, + "Transylvania": 22833, + "##dn": 22834, + "##tending": 22835, + "Emilia": 22836, + "glittering": 22837, + "Maddy": 22838, + "##wana": 22839, + "1762": 22840, + "External": 22841, + "Lecture": 22842, + "endorsement": 22843, + "Hernández": 22844, + "Anaheim": 22845, + "Ware": 22846, + "offences": 22847, + "##phorus": 22848, + "Plantation": 22849, + "popping": 22850, + "Bonaparte": 22851, + "disgusting": 22852, + "neared": 22853, + "##notes": 22854, + "Identity": 22855, + "heroin": 22856, + "nicely": 22857, + "##raverse": 22858, + "apron": 22859, + "congestion": 22860, + "##PR": 22861, + "padded": 22862, + "##fts": 22863, + "invaders": 22864, + "##came": 22865, + "freshly": 22866, + "Halle": 22867, + "endowed": 22868, + "fracture": 22869, + "ROM": 22870, + "##max": 22871, + "sediments": 22872, + "diffusion": 22873, + "dryly": 22874, + "##tara": 22875, + "Tam": 22876, + "Draw": 22877, + "Spin": 22878, + "Talon": 22879, + "Anthropology": 22880, + "##lify": 22881, + "nausea": 22882, + "##shirt": 22883, + "insert": 22884, + "Fresno": 22885, + "capitalist": 22886, + "indefinitely": 22887, + "apples": 22888, + "Gift": 22889, + "scooped": 22890, + "60s": 22891, + "Cooperative": 22892, + "mistakenly": 22893, + "##lover": 22894, + "murmur": 22895, + "##iger": 22896, + "Equipment": 22897, + "abusive": 22898, + "orphanage": 22899, + "##9th": 22900, + "##lterweight": 22901, + "##unda": 22902, + "Baird": 22903, + "ant": 22904, + "saloon": 22905, + "33rd": 22906, + "Chesapeake": 22907, + "##chair": 22908, + "##sound": 22909, + "##tend": 22910, + "chaotic": 22911, + "pornography": 22912, + "brace": 22913, + "##aret": 22914, + "heiress": 22915, + "SSR": 22916, + "resentment": 22917, + "Arbor": 22918, + "headmaster": 22919, + "##uren": 22920, + "unlimited": 22921, + "##with": 22922, + "##jn": 22923, + "Bram": 22924, + "Ely": 22925, + "Pokémon": 22926, + "pivotal": 22927, + "##guous": 22928, + "Database": 22929, + "Marta": 22930, + "Shine": 22931, + "stumbling": 22932, + "##ovsky": 22933, + "##skin": 22934, + "Henley": 22935, + "Polk": 22936, + "functioned": 22937, + "##layer": 22938, + "##pas": 22939, + "##udd": 22940, + "##MX": 22941, + "blackness": 22942, + "cadets": 22943, + "feral": 22944, + "Damian": 22945, + "##actions": 22946, + "2D": 22947, + "##yla": 22948, + "Apocalypse": 22949, + "##aic": 22950, + "inactivated": 22951, + "##china": 22952, + "##kovic": 22953, + "##bres": 22954, + "destroys": 22955, + "nap": 22956, + "Macy": 22957, + "sums": 22958, + "Madhya": 22959, + "Wisdom": 22960, + "rejects": 22961, + "##amel": 22962, + "60th": 22963, + "Cho": 22964, + "bandwidth": 22965, + "##sons": 22966, + "##obbing": 22967, + "##orama": 22968, + "Mutual": 22969, + "shafts": 22970, + "##estone": 22971, + "##rsen": 22972, + "accord": 22973, + "replaces": 22974, + "waterfront": 22975, + "##gonal": 22976, + "##rida": 22977, + "convictions": 22978, + "##ays": 22979, + "calmed": 22980, + "suppliers": 22981, + "Cummings": 22982, + "GMA": 22983, + "fearful": 22984, + "Scientist": 22985, + "Sinai": 22986, + "examines": 22987, + "experimented": 22988, + "Netflix": 22989, + "Enforcement": 22990, + "Scarlett": 22991, + "##lasia": 22992, + "Healthcare": 22993, + "##onte": 22994, + "Dude": 22995, + "inverted": 22996, + "##36": 22997, + "##regation": 22998, + "##lidae": 22999, + "Munro": 23000, + "##angay": 23001, + "Airbus": 23002, + "overlapping": 23003, + "Drivers": 23004, + "lawsuits": 23005, + "bodily": 23006, + "##udder": 23007, + "Wanda": 23008, + "Effects": 23009, + "Fathers": 23010, + "##finery": 23011, + "##islav": 23012, + "Ridley": 23013, + "observatory": 23014, + "pod": 23015, + "##utrition": 23016, + "Electricity": 23017, + "landslide": 23018, + "##mable": 23019, + "##zoic": 23020, + "##imator": 23021, + "##uration": 23022, + "Estates": 23023, + "sleepy": 23024, + "Nickelodeon": 23025, + "steaming": 23026, + "irony": 23027, + "schedules": 23028, + "snack": 23029, + "spikes": 23030, + "Hmm": 23031, + "##nesia": 23032, + "##bella": 23033, + "##hibit": 23034, + "Greenville": 23035, + "plucked": 23036, + "Harald": 23037, + "##ono": 23038, + "Gamma": 23039, + "infringement": 23040, + "roaring": 23041, + "deposition": 23042, + "##pol": 23043, + "##orum": 23044, + "660": 23045, + "seminal": 23046, + "passports": 23047, + "engagements": 23048, + "Akbar": 23049, + "rotated": 23050, + "##bina": 23051, + "##gart": 23052, + "Hartley": 23053, + "##lown": 23054, + "##truct": 23055, + "uttered": 23056, + "traumatic": 23057, + "Dex": 23058, + "##ôme": 23059, + "Holloway": 23060, + "MV": 23061, + "apartheid": 23062, + "##nee": 23063, + "Counter": 23064, + "Colton": 23065, + "OR": 23066, + "245": 23067, + "Spaniards": 23068, + "Regency": 23069, + "Schedule": 23070, + "scratching": 23071, + "squads": 23072, + "verify": 23073, + "##alk": 23074, + "keyboardist": 23075, + "rotten": 23076, + "Forestry": 23077, + "aids": 23078, + "commemorating": 23079, + "##yed": 23080, + "##érie": 23081, + "Sting": 23082, + "##elly": 23083, + "Dai": 23084, + "##fers": 23085, + "##berley": 23086, + "##ducted": 23087, + "Melvin": 23088, + "cannabis": 23089, + "glider": 23090, + "##enbach": 23091, + "##rban": 23092, + "Costello": 23093, + "Skating": 23094, + "cartoonist": 23095, + "AN": 23096, + "audit": 23097, + "##pectator": 23098, + "distributing": 23099, + "226": 23100, + "312": 23101, + "interpreter": 23102, + "header": 23103, + "Alternatively": 23104, + "##ases": 23105, + "smug": 23106, + "##kumar": 23107, + "cabins": 23108, + "remastered": 23109, + "Connolly": 23110, + "Kelsey": 23111, + "LED": 23112, + "tentative": 23113, + "Check": 23114, + "Sichuan": 23115, + "shaved": 23116, + "##42": 23117, + "Gerhard": 23118, + "Harvest": 23119, + "inward": 23120, + "##rque": 23121, + "Hopefully": 23122, + "hem": 23123, + "##34": 23124, + "Typical": 23125, + "binds": 23126, + "wrath": 23127, + "Woodstock": 23128, + "forcibly": 23129, + "Fergus": 23130, + "##charged": 23131, + "##tured": 23132, + "prepares": 23133, + "amenities": 23134, + "penetration": 23135, + "##ghan": 23136, + "coarse": 23137, + "##oned": 23138, + "enthusiasts": 23139, + "##av": 23140, + "##twined": 23141, + "fielded": 23142, + "##cky": 23143, + "Kiel": 23144, + "##obia": 23145, + "470": 23146, + "beers": 23147, + "tremble": 23148, + "youths": 23149, + "attendees": 23150, + "##cademies": 23151, + "##sex": 23152, + "Macon": 23153, + "communism": 23154, + "dir": 23155, + "##abi": 23156, + "Lennox": 23157, + "Wen": 23158, + "differentiate": 23159, + "jewel": 23160, + "##SO": 23161, + "activate": 23162, + "assert": 23163, + "laden": 23164, + "unto": 23165, + "Gillespie": 23166, + "Guillermo": 23167, + "accumulation": 23168, + "##GM": 23169, + "NGO": 23170, + "Rosenberg": 23171, + "calculating": 23172, + "drastically": 23173, + "##omorphic": 23174, + "peeled": 23175, + "Liège": 23176, + "insurgents": 23177, + "outdoors": 23178, + "##enia": 23179, + "Aspen": 23180, + "Sep": 23181, + "awakened": 23182, + "##eye": 23183, + "Consul": 23184, + "Maiden": 23185, + "insanity": 23186, + "##brian": 23187, + "furnace": 23188, + "Colours": 23189, + "distributions": 23190, + "longitudinal": 23191, + "syllables": 23192, + "##scent": 23193, + "Martian": 23194, + "accountant": 23195, + "Atkins": 23196, + "husbands": 23197, + "sewage": 23198, + "zur": 23199, + "collaborate": 23200, + "highlighting": 23201, + "##rites": 23202, + "##PI": 23203, + "colonization": 23204, + "nearer": 23205, + "##XT": 23206, + "dunes": 23207, + "positioning": 23208, + "Ku": 23209, + "multitude": 23210, + "luxurious": 23211, + "Volvo": 23212, + "linguistics": 23213, + "plotting": 23214, + "squared": 23215, + "##inder": 23216, + "outstretched": 23217, + "##uds": 23218, + "Fuji": 23219, + "ji": 23220, + "##feit": 23221, + "##ahu": 23222, + "##loat": 23223, + "##gado": 23224, + "##luster": 23225, + "##oku": 23226, + "América": 23227, + "##iza": 23228, + "Residents": 23229, + "vine": 23230, + "Pieces": 23231, + "DD": 23232, + "Vampires": 23233, + "##ová": 23234, + "smoked": 23235, + "harshly": 23236, + "spreads": 23237, + "##turn": 23238, + "##zhi": 23239, + "betray": 23240, + "electors": 23241, + "##settled": 23242, + "Considering": 23243, + "exploits": 23244, + "stamped": 23245, + "Dusty": 23246, + "enraged": 23247, + "Nairobi": 23248, + "##38": 23249, + "intervened": 23250, + "##luck": 23251, + "orchestras": 23252, + "##lda": 23253, + "Hereford": 23254, + "Jarvis": 23255, + "calf": 23256, + "##itzer": 23257, + "##CH": 23258, + "salesman": 23259, + "Lovers": 23260, + "cigar": 23261, + "Angelica": 23262, + "doomed": 23263, + "heroine": 23264, + "##tible": 23265, + "Sanford": 23266, + "offenders": 23267, + "##ulously": 23268, + "articulated": 23269, + "##oam": 23270, + "Emanuel": 23271, + "Gardiner": 23272, + "Edna": 23273, + "Shu": 23274, + "gigantic": 23275, + "##stable": 23276, + "Tallinn": 23277, + "coasts": 23278, + "Maker": 23279, + "ale": 23280, + "stalking": 23281, + "##oga": 23282, + "##smus": 23283, + "lucrative": 23284, + "southbound": 23285, + "##changing": 23286, + "Reg": 23287, + "##lants": 23288, + "Schleswig": 23289, + "discount": 23290, + "grouping": 23291, + "physiological": 23292, + "##OH": 23293, + "##sun": 23294, + "Galen": 23295, + "assurance": 23296, + "reconcile": 23297, + "rib": 23298, + "scarlet": 23299, + "Thatcher": 23300, + "anarchist": 23301, + "##oom": 23302, + "Turnpike": 23303, + "##ceding": 23304, + "cocktail": 23305, + "Sweeney": 23306, + "Allegheny": 23307, + "concessions": 23308, + "oppression": 23309, + "reassuring": 23310, + "##poli": 23311, + "##ticus": 23312, + "##TR": 23313, + "##VI": 23314, + "##uca": 23315, + "##zione": 23316, + "directional": 23317, + "strikeouts": 23318, + "Beneath": 23319, + "Couldn": 23320, + "Kabul": 23321, + "##national": 23322, + "hydroelectric": 23323, + "##jit": 23324, + "Desire": 23325, + "##riot": 23326, + "enhancing": 23327, + "northbound": 23328, + "##PO": 23329, + "Ok": 23330, + "Routledge": 23331, + "volatile": 23332, + "Bernardo": 23333, + "Python": 23334, + "333": 23335, + "ample": 23336, + "chestnut": 23337, + "automobiles": 23338, + "##innamon": 23339, + "##care": 23340, + "##hering": 23341, + "BWF": 23342, + "salaries": 23343, + "Turbo": 23344, + "acquisitions": 23345, + "##stituting": 23346, + "strengths": 23347, + "pilgrims": 23348, + "Ponce": 23349, + "Pig": 23350, + "Actors": 23351, + "Beard": 23352, + "sanitation": 23353, + "##RD": 23354, + "##mett": 23355, + "Telecommunications": 23356, + "worms": 23357, + "##idas": 23358, + "Juno": 23359, + "Larson": 23360, + "Ventura": 23361, + "Northeastern": 23362, + "weighs": 23363, + "Houghton": 23364, + "collaborating": 23365, + "lottery": 23366, + "##rano": 23367, + "Wonderland": 23368, + "gigs": 23369, + "##lmer": 23370, + "##zano": 23371, + "##edd": 23372, + "##nife": 23373, + "mixtape": 23374, + "predominant": 23375, + "tripped": 23376, + "##ruly": 23377, + "Alexei": 23378, + "investing": 23379, + "Belgarath": 23380, + "Brasil": 23381, + "hiss": 23382, + "##crat": 23383, + "##xham": 23384, + "Côte": 23385, + "560": 23386, + "kilometer": 23387, + "##cological": 23388, + "analyzing": 23389, + "##As": 23390, + "engined": 23391, + "listener": 23392, + "##cakes": 23393, + "negotiation": 23394, + "##hisky": 23395, + "Santana": 23396, + "##lemma": 23397, + "IAAF": 23398, + "Seneca": 23399, + "skeletal": 23400, + "Covenant": 23401, + "Steiner": 23402, + "##lev": 23403, + "##uen": 23404, + "Neptune": 23405, + "retention": 23406, + "##upon": 23407, + "Closing": 23408, + "Czechoslovak": 23409, + "chalk": 23410, + "Navarre": 23411, + "NZ": 23412, + "##IG": 23413, + "##hop": 23414, + "##oly": 23415, + "##quatorial": 23416, + "##sad": 23417, + "Brewery": 23418, + "Conflict": 23419, + "Them": 23420, + "renew": 23421, + "turrets": 23422, + "disagree": 23423, + "Petra": 23424, + "Slave": 23425, + "##reole": 23426, + "adjustment": 23427, + "##dela": 23428, + "##regard": 23429, + "##sner": 23430, + "framing": 23431, + "stature": 23432, + "##rca": 23433, + "##sies": 23434, + "##46": 23435, + "##mata": 23436, + "Logic": 23437, + "inadvertently": 23438, + "naturalist": 23439, + "spheres": 23440, + "towering": 23441, + "heightened": 23442, + "Dodd": 23443, + "rink": 23444, + "##fle": 23445, + "Keyboards": 23446, + "bulb": 23447, + "diver": 23448, + "ul": 23449, + "##tsk": 23450, + "Exodus": 23451, + "Deacon": 23452, + "España": 23453, + "Canadiens": 23454, + "oblique": 23455, + "thud": 23456, + "reigned": 23457, + "rug": 23458, + "Whitman": 23459, + "Dash": 23460, + "##iens": 23461, + "Haifa": 23462, + "pets": 23463, + "##arland": 23464, + "manually": 23465, + "dart": 23466, + "##bial": 23467, + "Sven": 23468, + "textiles": 23469, + "subgroup": 23470, + "Napier": 23471, + "graffiti": 23472, + "revolver": 23473, + "humming": 23474, + "Babu": 23475, + "protector": 23476, + "typed": 23477, + "Provinces": 23478, + "Sparta": 23479, + "Wills": 23480, + "subjective": 23481, + "##rella": 23482, + "temptation": 23483, + "##liest": 23484, + "FL": 23485, + "Sadie": 23486, + "manifest": 23487, + "Guangdong": 23488, + "Transfer": 23489, + "entertain": 23490, + "eve": 23491, + "recipes": 23492, + "##33": 23493, + "Benedictine": 23494, + "retailer": 23495, + "##dence": 23496, + "establishes": 23497, + "##cluded": 23498, + "##rked": 23499, + "Ursula": 23500, + "##ltz": 23501, + "##lars": 23502, + "##rena": 23503, + "qualifiers": 23504, + "##curement": 23505, + "colt": 23506, + "depictions": 23507, + "##oit": 23508, + "Spiritual": 23509, + "differentiation": 23510, + "staffed": 23511, + "transitional": 23512, + "##lew": 23513, + "1761": 23514, + "fatalities": 23515, + "##oan": 23516, + "Bayern": 23517, + "Northamptonshire": 23518, + "Weeks": 23519, + "##CU": 23520, + "Fife": 23521, + "capacities": 23522, + "hoarse": 23523, + "##latt": 23524, + "##ة": 23525, + "evidenced": 23526, + "##HD": 23527, + "##ographer": 23528, + "assessing": 23529, + "evolve": 23530, + "hints": 23531, + "42nd": 23532, + "streaked": 23533, + "##lve": 23534, + "Yahoo": 23535, + "##estive": 23536, + "##rned": 23537, + "##zas": 23538, + "baggage": 23539, + "Elected": 23540, + "secrecy": 23541, + "##champ": 23542, + "Character": 23543, + "Pen": 23544, + "Decca": 23545, + "cape": 23546, + "Bernardino": 23547, + "vapor": 23548, + "Dolly": 23549, + "counselor": 23550, + "##isers": 23551, + "Benin": 23552, + "##khar": 23553, + "##CR": 23554, + "notch": 23555, + "##thus": 23556, + "##racy": 23557, + "bounty": 23558, + "lend": 23559, + "grassland": 23560, + "##chtenstein": 23561, + "##dating": 23562, + "pseudo": 23563, + "golfer": 23564, + "simplest": 23565, + "##ceive": 23566, + "Lucivar": 23567, + "Triumph": 23568, + "dinosaur": 23569, + "dinosaurs": 23570, + "##šić": 23571, + "Seahawks": 23572, + "##nco": 23573, + "resorts": 23574, + "reelected": 23575, + "1766": 23576, + "reproduce": 23577, + "universally": 23578, + "##OA": 23579, + "ER": 23580, + "tendencies": 23581, + "Consolidated": 23582, + "Massey": 23583, + "Tasmanian": 23584, + "reckless": 23585, + "##icz": 23586, + "##ricks": 23587, + "1755": 23588, + "questionable": 23589, + "Audience": 23590, + "##lates": 23591, + "preseason": 23592, + "Quran": 23593, + "trivial": 23594, + "Haitian": 23595, + "Freeway": 23596, + "dialed": 23597, + "Appointed": 23598, + "Heard": 23599, + "ecosystems": 23600, + "##bula": 23601, + "hormones": 23602, + "Carbon": 23603, + "Rd": 23604, + "##arney": 23605, + "##working": 23606, + "Christoph": 23607, + "presiding": 23608, + "pu": 23609, + "##athy": 23610, + "Morrow": 23611, + "Dar": 23612, + "ensures": 23613, + "posing": 23614, + "remedy": 23615, + "EA": 23616, + "disclosed": 23617, + "##hui": 23618, + "##rten": 23619, + "rumours": 23620, + "surveying": 23621, + "##ficiency": 23622, + "Aziz": 23623, + "Jewel": 23624, + "Plays": 23625, + "##smatic": 23626, + "Bernhard": 23627, + "Christi": 23628, + "##eanut": 23629, + "##friend": 23630, + "jailed": 23631, + "##dr": 23632, + "govern": 23633, + "neighbour": 23634, + "butler": 23635, + "Acheron": 23636, + "murdering": 23637, + "oils": 23638, + "mac": 23639, + "Editorial": 23640, + "detectives": 23641, + "bolts": 23642, + "##ulon": 23643, + "Guitars": 23644, + "malaria": 23645, + "36th": 23646, + "Pembroke": 23647, + "Opened": 23648, + "##hium": 23649, + "harmonic": 23650, + "serum": 23651, + "##sio": 23652, + "Franks": 23653, + "fingernails": 23654, + "##gli": 23655, + "culturally": 23656, + "evolving": 23657, + "scalp": 23658, + "VP": 23659, + "deploy": 23660, + "uploaded": 23661, + "mater": 23662, + "##evo": 23663, + "Jammu": 23664, + "Spa": 23665, + "##icker": 23666, + "flirting": 23667, + "##cursions": 23668, + "Heidi": 23669, + "Majority": 23670, + "sprawled": 23671, + "##alytic": 23672, + "Zheng": 23673, + "bunker": 23674, + "##lena": 23675, + "ST": 23676, + "##tile": 23677, + "Jiang": 23678, + "ceilings": 23679, + "##ently": 23680, + "##ols": 23681, + "Recovery": 23682, + "dire": 23683, + "##good": 23684, + "Manson": 23685, + "Honestly": 23686, + "Montréal": 23687, + "1764": 23688, + "227": 23689, + "quota": 23690, + "Lakshmi": 23691, + "incentive": 23692, + "Accounting": 23693, + "##cilla": 23694, + "Eureka": 23695, + "Reaper": 23696, + "buzzed": 23697, + "##uh": 23698, + "courtroom": 23699, + "dub": 23700, + "##mberg": 23701, + "KC": 23702, + "Gong": 23703, + "Theodor": 23704, + "Académie": 23705, + "NPR": 23706, + "criticizing": 23707, + "protesting": 23708, + "##pired": 23709, + "##yric": 23710, + "abuses": 23711, + "fisheries": 23712, + "##minated": 23713, + "1767": 23714, + "yd": 23715, + "Gemini": 23716, + "Subcommittee": 23717, + "##fuse": 23718, + "Duff": 23719, + "Wasn": 23720, + "Wight": 23721, + "cleaner": 23722, + "##tite": 23723, + "planetary": 23724, + "Survivor": 23725, + "Zionist": 23726, + "mounds": 23727, + "##rary": 23728, + "landfall": 23729, + "disruption": 23730, + "yielding": 23731, + "##yana": 23732, + "bids": 23733, + "unidentified": 23734, + "Garry": 23735, + "Ellison": 23736, + "Elmer": 23737, + "Fishing": 23738, + "Hayward": 23739, + "demos": 23740, + "modelling": 23741, + "##anche": 23742, + "##stick": 23743, + "caressed": 23744, + "entertained": 23745, + "##hesion": 23746, + "piers": 23747, + "Crimea": 23748, + "##mass": 23749, + "WHO": 23750, + "boulder": 23751, + "trunks": 23752, + "1640": 23753, + "Biennale": 23754, + "Palestinians": 23755, + "Pursuit": 23756, + "##udes": 23757, + "Dora": 23758, + "contender": 23759, + "##dridge": 23760, + "Nanjing": 23761, + "##ezer": 23762, + "##former": 23763, + "##ibel": 23764, + "Whole": 23765, + "proliferation": 23766, + "##tide": 23767, + "##weiler": 23768, + "fuels": 23769, + "predictions": 23770, + "##ente": 23771, + "##onium": 23772, + "Filming": 23773, + "absorbing": 23774, + "Ramón": 23775, + "strangled": 23776, + "conveyed": 23777, + "inhabit": 23778, + "prostitutes": 23779, + "recession": 23780, + "bonded": 23781, + "clinched": 23782, + "##eak": 23783, + "##iji": 23784, + "##edar": 23785, + "Pleasure": 23786, + "Rite": 23787, + "Christy": 23788, + "Therapy": 23789, + "sarcasm": 23790, + "##collegiate": 23791, + "hilt": 23792, + "probation": 23793, + "Sarawak": 23794, + "coefficients": 23795, + "underworld": 23796, + "biodiversity": 23797, + "SBS": 23798, + "groom": 23799, + "brewing": 23800, + "dungeon": 23801, + "##claiming": 23802, + "Hari": 23803, + "turnover": 23804, + "##ntina": 23805, + "##omer": 23806, + "##opped": 23807, + "orthodox": 23808, + "styling": 23809, + "##tars": 23810, + "##ulata": 23811, + "priced": 23812, + "Marjorie": 23813, + "##eley": 23814, + "##abar": 23815, + "Yong": 23816, + "##tically": 23817, + "Crambidae": 23818, + "Hernandez": 23819, + "##ego": 23820, + "##rricular": 23821, + "##ark": 23822, + "##lamour": 23823, + "##llin": 23824, + "##augh": 23825, + "##tens": 23826, + "Advancement": 23827, + "Loyola": 23828, + "##4th": 23829, + "##hh": 23830, + "goin": 23831, + "marshes": 23832, + "Sardinia": 23833, + "##ša": 23834, + "Ljubljana": 23835, + "Singing": 23836, + "suspiciously": 23837, + "##hesive": 23838, + "Félix": 23839, + "Regarding": 23840, + "flap": 23841, + "stimulation": 23842, + "##raught": 23843, + "Apr": 23844, + "Yin": 23845, + "gaping": 23846, + "tighten": 23847, + "skier": 23848, + "##itas": 23849, + "##lad": 23850, + "##rani": 23851, + "264": 23852, + "Ashes": 23853, + "Olson": 23854, + "Problems": 23855, + "Tabitha": 23856, + "##rading": 23857, + "balancing": 23858, + "sunrise": 23859, + "##ease": 23860, + "##iture": 23861, + "##ritic": 23862, + "Fringe": 23863, + "##iciency": 23864, + "Inspired": 23865, + "Linnaeus": 23866, + "PBA": 23867, + "disapproval": 23868, + "##kles": 23869, + "##rka": 23870, + "##tails": 23871, + "##urger": 23872, + "Disaster": 23873, + "Laboratories": 23874, + "apps": 23875, + "paradise": 23876, + "Aero": 23877, + "Came": 23878, + "sneaking": 23879, + "Gee": 23880, + "Beacon": 23881, + "ODI": 23882, + "commodity": 23883, + "Ellington": 23884, + "graphical": 23885, + "Gretchen": 23886, + "spire": 23887, + "##skaya": 23888, + "##trine": 23889, + "RTÉ": 23890, + "efficacy": 23891, + "plc": 23892, + "tribunal": 23893, + "##ytic": 23894, + "downhill": 23895, + "flu": 23896, + "medications": 23897, + "##kaya": 23898, + "widen": 23899, + "Sunrise": 23900, + "##nous": 23901, + "distinguishing": 23902, + "pawn": 23903, + "##BO": 23904, + "##irn": 23905, + "##ssing": 23906, + "##ν": 23907, + "Easton": 23908, + "##vila": 23909, + "Rhineland": 23910, + "##aque": 23911, + "defect": 23912, + "##saurus": 23913, + "Goose": 23914, + "Ju": 23915, + "##classified": 23916, + "Middlesbrough": 23917, + "shaping": 23918, + "preached": 23919, + "1759": 23920, + "##erland": 23921, + "Ein": 23922, + "Hailey": 23923, + "musicals": 23924, + "##altered": 23925, + "Galileo": 23926, + "Hilda": 23927, + "Fighters": 23928, + "Lac": 23929, + "##ometric": 23930, + "295": 23931, + "Leafs": 23932, + "Milano": 23933, + "##lta": 23934, + "##VD": 23935, + "##ivist": 23936, + "penetrated": 23937, + "Mask": 23938, + "Orchard": 23939, + "plaintiff": 23940, + "##icorn": 23941, + "Yvonne": 23942, + "##fred": 23943, + "outfielder": 23944, + "peek": 23945, + "Collier": 23946, + "Caracas": 23947, + "repealed": 23948, + "Bois": 23949, + "dell": 23950, + "restrict": 23951, + "Dolores": 23952, + "Hadley": 23953, + "peacefully": 23954, + "##LL": 23955, + "condom": 23956, + "Granny": 23957, + "Orders": 23958, + "sabotage": 23959, + "##toon": 23960, + "##rings": 23961, + "compass": 23962, + "marshal": 23963, + "gears": 23964, + "brigadier": 23965, + "dye": 23966, + "Yunnan": 23967, + "communicating": 23968, + "donate": 23969, + "emerald": 23970, + "vitamin": 23971, + "administer": 23972, + "Fulham": 23973, + "##classical": 23974, + "##llas": 23975, + "Buckinghamshire": 23976, + "Held": 23977, + "layered": 23978, + "disclosure": 23979, + "Akira": 23980, + "programmer": 23981, + "shrimp": 23982, + "Crusade": 23983, + "##ximal": 23984, + "Luzon": 23985, + "bakery": 23986, + "##cute": 23987, + "Garth": 23988, + "Citadel": 23989, + "uniquely": 23990, + "Curling": 23991, + "info": 23992, + "mum": 23993, + "Para": 23994, + "##ști": 23995, + "sleek": 23996, + "##ione": 23997, + "hey": 23998, + "Lantern": 23999, + "mesh": 24000, + "##lacing": 24001, + "##lizzard": 24002, + "##gade": 24003, + "prosecuted": 24004, + "Alba": 24005, + "Gilles": 24006, + "greedy": 24007, + "twists": 24008, + "##ogged": 24009, + "Viper": 24010, + "##kata": 24011, + "Appearances": 24012, + "Skyla": 24013, + "hymns": 24014, + "##pelled": 24015, + "curving": 24016, + "predictable": 24017, + "Grave": 24018, + "Watford": 24019, + "##dford": 24020, + "##liptic": 24021, + "##vary": 24022, + "Westwood": 24023, + "fluids": 24024, + "Models": 24025, + "statutes": 24026, + "##ynamite": 24027, + "1740": 24028, + "##culate": 24029, + "Framework": 24030, + "Johanna": 24031, + "##gression": 24032, + "Vuelta": 24033, + "imp": 24034, + "##otion": 24035, + "##raga": 24036, + "##thouse": 24037, + "Ciudad": 24038, + "festivities": 24039, + "##love": 24040, + "Beyoncé": 24041, + "italics": 24042, + "##vance": 24043, + "DB": 24044, + "##haman": 24045, + "outs": 24046, + "Singers": 24047, + "##ueva": 24048, + "##urning": 24049, + "##51": 24050, + "##ntiary": 24051, + "##mobile": 24052, + "285": 24053, + "Mimi": 24054, + "emeritus": 24055, + "nesting": 24056, + "Keeper": 24057, + "Ways": 24058, + "##onal": 24059, + "##oux": 24060, + "Edmond": 24061, + "MMA": 24062, + "##bark": 24063, + "##oop": 24064, + "Hampson": 24065, + "##ñez": 24066, + "##rets": 24067, + "Gladstone": 24068, + "wreckage": 24069, + "Pont": 24070, + "Playboy": 24071, + "reluctance": 24072, + "##ná": 24073, + "apprenticeship": 24074, + "preferring": 24075, + "Value": 24076, + "originate": 24077, + "##wei": 24078, + "##olio": 24079, + "Alexia": 24080, + "##rog": 24081, + "Parachute": 24082, + "jammed": 24083, + "stud": 24084, + "Eton": 24085, + "vols": 24086, + "##ganized": 24087, + "1745": 24088, + "straining": 24089, + "creep": 24090, + "indicators": 24091, + "##mán": 24092, + "humiliation": 24093, + "hinted": 24094, + "alma": 24095, + "tanker": 24096, + "##egation": 24097, + "Haynes": 24098, + "Penang": 24099, + "amazement": 24100, + "branched": 24101, + "rumble": 24102, + "##ddington": 24103, + "archaeologists": 24104, + "paranoid": 24105, + "expenditure": 24106, + "Absolutely": 24107, + "Musicians": 24108, + "banished": 24109, + "##fining": 24110, + "baptism": 24111, + "Joker": 24112, + "Persons": 24113, + "hemisphere": 24114, + "##tieth": 24115, + "##ück": 24116, + "flock": 24117, + "##xing": 24118, + "lbs": 24119, + "Kung": 24120, + "crab": 24121, + "##dak": 24122, + "##tinent": 24123, + "Regulations": 24124, + "barrage": 24125, + "parcel": 24126, + "##ós": 24127, + "Tanaka": 24128, + "##rsa": 24129, + "Natalia": 24130, + "Voyage": 24131, + "flaws": 24132, + "stepfather": 24133, + "##aven": 24134, + "##eological": 24135, + "Botanical": 24136, + "Minsk": 24137, + "##ckers": 24138, + "Cinderella": 24139, + "Feast": 24140, + "Loving": 24141, + "Previous": 24142, + "Shark": 24143, + "##took": 24144, + "barrister": 24145, + "collaborators": 24146, + "##nnes": 24147, + "Croydon": 24148, + "Graeme": 24149, + "Juniors": 24150, + "##7th": 24151, + "##formation": 24152, + "##ulos": 24153, + "##ák": 24154, + "£2": 24155, + "##hwa": 24156, + "##rove": 24157, + "##ș": 24158, + "Whig": 24159, + "demeanor": 24160, + "Otago": 24161, + "##TH": 24162, + "##ooster": 24163, + "Faber": 24164, + "instructors": 24165, + "##ahl": 24166, + "##bha": 24167, + "emptied": 24168, + "##schen": 24169, + "saga": 24170, + "##lora": 24171, + "exploding": 24172, + "##rges": 24173, + "Crusaders": 24174, + "##caster": 24175, + "##uations": 24176, + "streaks": 24177, + "CBN": 24178, + "bows": 24179, + "insights": 24180, + "ka": 24181, + "1650": 24182, + "diversion": 24183, + "LSU": 24184, + "Wingspan": 24185, + "##liva": 24186, + "Response": 24187, + "sanity": 24188, + "Producers": 24189, + "imitation": 24190, + "##fine": 24191, + "Lange": 24192, + "Spokane": 24193, + "splash": 24194, + "weed": 24195, + "Siberian": 24196, + "magnet": 24197, + "##rocodile": 24198, + "capitals": 24199, + "##rgus": 24200, + "swelled": 24201, + "Rani": 24202, + "Bells": 24203, + "Silesia": 24204, + "arithmetic": 24205, + "rumor": 24206, + "##hampton": 24207, + "favors": 24208, + "Weird": 24209, + "marketplace": 24210, + "##orm": 24211, + "tsunami": 24212, + "unpredictable": 24213, + "##citation": 24214, + "##ferno": 24215, + "Tradition": 24216, + "postwar": 24217, + "stench": 24218, + "succeeds": 24219, + "##roup": 24220, + "Anya": 24221, + "Users": 24222, + "oversized": 24223, + "totaling": 24224, + "pouch": 24225, + "##nat": 24226, + "Tripoli": 24227, + "leverage": 24228, + "satin": 24229, + "##cline": 24230, + "Bathurst": 24231, + "Lund": 24232, + "Niall": 24233, + "thereof": 24234, + "##quid": 24235, + "Bangor": 24236, + "barge": 24237, + "Animated": 24238, + "##53": 24239, + "##alan": 24240, + "Ballard": 24241, + "utilizes": 24242, + "Done": 24243, + "ballistic": 24244, + "NDP": 24245, + "gatherings": 24246, + "##elin": 24247, + "##vening": 24248, + "Rockets": 24249, + "Sabrina": 24250, + "Tamara": 24251, + "Tribal": 24252, + "WTA": 24253, + "##citing": 24254, + "blinded": 24255, + "flux": 24256, + "Khalid": 24257, + "Una": 24258, + "prescription": 24259, + "##jee": 24260, + "Parents": 24261, + "##otics": 24262, + "##food": 24263, + "Silicon": 24264, + "cured": 24265, + "electro": 24266, + "perpendicular": 24267, + "intimacy": 24268, + "##rified": 24269, + "Lots": 24270, + "##ceiving": 24271, + "##powder": 24272, + "incentives": 24273, + "McKenna": 24274, + "##arma": 24275, + "##ounced": 24276, + "##rinkled": 24277, + "Alzheimer": 24278, + "##tarian": 24279, + "262": 24280, + "Seas": 24281, + "##cam": 24282, + "Novi": 24283, + "##hout": 24284, + "##morphic": 24285, + "##hazar": 24286, + "##hul": 24287, + "##nington": 24288, + "Huron": 24289, + "Bahadur": 24290, + "Pirate": 24291, + "pursed": 24292, + "Griffiths": 24293, + "indicted": 24294, + "swap": 24295, + "refrain": 24296, + "##mulating": 24297, + "Lal": 24298, + "stomped": 24299, + "##Pad": 24300, + "##mamoto": 24301, + "Reef": 24302, + "disposed": 24303, + "plastered": 24304, + "weeping": 24305, + "##rato": 24306, + "Minas": 24307, + "hourly": 24308, + "tumors": 24309, + "##ruising": 24310, + "Lyle": 24311, + "##yper": 24312, + "##sol": 24313, + "Odisha": 24314, + "credibility": 24315, + "##Dowell": 24316, + "Braun": 24317, + "Graphic": 24318, + "lurched": 24319, + "muster": 24320, + "##nex": 24321, + "##ührer": 24322, + "##connected": 24323, + "##iek": 24324, + "##ruba": 24325, + "Carthage": 24326, + "Peck": 24327, + "maple": 24328, + "bursting": 24329, + "##lava": 24330, + "Enrico": 24331, + "rite": 24332, + "##jak": 24333, + "Moment": 24334, + "##skar": 24335, + "Styx": 24336, + "poking": 24337, + "Spartan": 24338, + "##urney": 24339, + "Hepburn": 24340, + "Mart": 24341, + "Titanic": 24342, + "newsletter": 24343, + "waits": 24344, + "Mecklenburg": 24345, + "agitated": 24346, + "eats": 24347, + "##dious": 24348, + "Chow": 24349, + "matrices": 24350, + "Maud": 24351, + "##sexual": 24352, + "sermon": 24353, + "234": 24354, + "##sible": 24355, + "##lung": 24356, + "Qi": 24357, + "cemeteries": 24358, + "mined": 24359, + "sprinter": 24360, + "##ckett": 24361, + "coward": 24362, + "##gable": 24363, + "##hell": 24364, + "##thin": 24365, + "##FB": 24366, + "Contact": 24367, + "##hay": 24368, + "rainforest": 24369, + "238": 24370, + "Hemisphere": 24371, + "boasts": 24372, + "##nders": 24373, + "##verance": 24374, + "##kat": 24375, + "Convent": 24376, + "Dunedin": 24377, + "Lecturer": 24378, + "lyricist": 24379, + "##bject": 24380, + "Iberian": 24381, + "comune": 24382, + "##pphire": 24383, + "chunk": 24384, + "##boo": 24385, + "thrusting": 24386, + "fore": 24387, + "informing": 24388, + "pistols": 24389, + "echoes": 24390, + "Tier": 24391, + "battleships": 24392, + "substitution": 24393, + "##belt": 24394, + "moniker": 24395, + "##charya": 24396, + "##lland": 24397, + "Thoroughbred": 24398, + "38th": 24399, + "##01": 24400, + "##tah": 24401, + "parting": 24402, + "tongues": 24403, + "Cale": 24404, + "##seau": 24405, + "Unionist": 24406, + "modular": 24407, + "celebrates": 24408, + "preview": 24409, + "steamed": 24410, + "Bismarck": 24411, + "302": 24412, + "737": 24413, + "vamp": 24414, + "##finity": 24415, + "##nbridge": 24416, + "weaknesses": 24417, + "husky": 24418, + "##berman": 24419, + "absently": 24420, + "##icide": 24421, + "Craven": 24422, + "tailored": 24423, + "Tokugawa": 24424, + "VIP": 24425, + "syntax": 24426, + "Kazan": 24427, + "captives": 24428, + "doses": 24429, + "filtered": 24430, + "overview": 24431, + "Cleopatra": 24432, + "Conversely": 24433, + "stallion": 24434, + "Burger": 24435, + "Suez": 24436, + "Raoul": 24437, + "th": 24438, + "##reaves": 24439, + "Dickson": 24440, + "Nell": 24441, + "Rate": 24442, + "anal": 24443, + "colder": 24444, + "##sław": 24445, + "Arm": 24446, + "Semitic": 24447, + "##green": 24448, + "reflective": 24449, + "1100": 24450, + "episcopal": 24451, + "journeys": 24452, + "##ours": 24453, + "##pository": 24454, + "##dering": 24455, + "residue": 24456, + "Gunn": 24457, + "##27": 24458, + "##ntial": 24459, + "##crates": 24460, + "##zig": 24461, + "Astros": 24462, + "Renee": 24463, + "Emerald": 24464, + "##vili": 24465, + "connectivity": 24466, + "undrafted": 24467, + "Sampson": 24468, + "treasures": 24469, + "##kura": 24470, + "##theon": 24471, + "##vern": 24472, + "Destroyer": 24473, + "##iable": 24474, + "##ener": 24475, + "Frederic": 24476, + "briefcase": 24477, + "confinement": 24478, + "Bree": 24479, + "##WD": 24480, + "Athena": 24481, + "233": 24482, + "Padres": 24483, + "Thom": 24484, + "speeding": 24485, + "##hali": 24486, + "Dental": 24487, + "ducks": 24488, + "Putin": 24489, + "##rcle": 24490, + "##lou": 24491, + "Asylum": 24492, + "##usk": 24493, + "dusk": 24494, + "pasture": 24495, + "Institutes": 24496, + "ONE": 24497, + "jack": 24498, + "##named": 24499, + "diplomacy": 24500, + "Intercontinental": 24501, + "Leagues": 24502, + "Towns": 24503, + "comedic": 24504, + "premature": 24505, + "##edic": 24506, + "##mona": 24507, + "##ories": 24508, + "trimmed": 24509, + "Charge": 24510, + "Cream": 24511, + "guarantees": 24512, + "Dmitry": 24513, + "splashed": 24514, + "Philosophical": 24515, + "tramway": 24516, + "##cape": 24517, + "Maynard": 24518, + "predatory": 24519, + "redundant": 24520, + "##gratory": 24521, + "##wry": 24522, + "sobs": 24523, + "Burgundy": 24524, + "edible": 24525, + "outfits": 24526, + "Handel": 24527, + "dazed": 24528, + "dangerously": 24529, + "idle": 24530, + "Operational": 24531, + "organizes": 24532, + "##sional": 24533, + "blackish": 24534, + "broker": 24535, + "weddings": 24536, + "##halt": 24537, + "Becca": 24538, + "McGee": 24539, + "##gman": 24540, + "protagonists": 24541, + "##pelling": 24542, + "Keynes": 24543, + "aux": 24544, + "stumble": 24545, + "##ordination": 24546, + "Nokia": 24547, + "reel": 24548, + "sexes": 24549, + "##woods": 24550, + "##pheric": 24551, + "##quished": 24552, + "##voc": 24553, + "##oir": 24554, + "##pathian": 24555, + "##ptus": 24556, + "##sma": 24557, + "##tating": 24558, + "##ê": 24559, + "fulfilling": 24560, + "sheath": 24561, + "##ayne": 24562, + "Mei": 24563, + "Ordinary": 24564, + "Collin": 24565, + "Sharpe": 24566, + "grasses": 24567, + "interdisciplinary": 24568, + "##OX": 24569, + "Background": 24570, + "##ignment": 24571, + "Assault": 24572, + "transforms": 24573, + "Hamas": 24574, + "Serge": 24575, + "ratios": 24576, + "##sik": 24577, + "swaying": 24578, + "##rcia": 24579, + "Rosen": 24580, + "##gant": 24581, + "##versible": 24582, + "cinematographer": 24583, + "curly": 24584, + "penny": 24585, + "Kamal": 24586, + "Mellon": 24587, + "Sailor": 24588, + "Spence": 24589, + "phased": 24590, + "Brewers": 24591, + "amassed": 24592, + "Societies": 24593, + "##ropriations": 24594, + "##buted": 24595, + "mythological": 24596, + "##SN": 24597, + "##byss": 24598, + "##ired": 24599, + "Sovereign": 24600, + "preface": 24601, + "Parry": 24602, + "##ife": 24603, + "altitudes": 24604, + "crossings": 24605, + "##28": 24606, + "Crewe": 24607, + "southernmost": 24608, + "taut": 24609, + "McKinley": 24610, + "##owa": 24611, + "##tore": 24612, + "254": 24613, + "##ckney": 24614, + "compiling": 24615, + "Shelton": 24616, + "##hiko": 24617, + "228": 24618, + "Poll": 24619, + "Shepard": 24620, + "Labs": 24621, + "Pace": 24622, + "Carlson": 24623, + "grasping": 24624, + "##ов": 24625, + "Delaney": 24626, + "Winning": 24627, + "robotic": 24628, + "intentional": 24629, + "shattering": 24630, + "##boarding": 24631, + "##git": 24632, + "##grade": 24633, + "Editions": 24634, + "Reserves": 24635, + "ignorant": 24636, + "proposing": 24637, + "##hanna": 24638, + "cutter": 24639, + "Mongols": 24640, + "NW": 24641, + "##eux": 24642, + "Codex": 24643, + "Cristina": 24644, + "Daughters": 24645, + "Rees": 24646, + "forecast": 24647, + "##hita": 24648, + "NGOs": 24649, + "Stations": 24650, + "Beaux": 24651, + "Erwin": 24652, + "##jected": 24653, + "##EX": 24654, + "##trom": 24655, + "Schumacher": 24656, + "##hrill": 24657, + "##rophe": 24658, + "Maharaja": 24659, + "Oricon": 24660, + "##sul": 24661, + "##dynamic": 24662, + "##fighting": 24663, + "Ce": 24664, + "Ingrid": 24665, + "rumbled": 24666, + "Prospect": 24667, + "stairwell": 24668, + "Barnard": 24669, + "applause": 24670, + "complementary": 24671, + "##uba": 24672, + "grunt": 24673, + "##mented": 24674, + "Bloc": 24675, + "Carleton": 24676, + "loft": 24677, + "noisy": 24678, + "##hey": 24679, + "490": 24680, + "contrasted": 24681, + "##inator": 24682, + "##rief": 24683, + "##centric": 24684, + "##fica": 24685, + "Cantonese": 24686, + "Blanc": 24687, + "Lausanne": 24688, + "License": 24689, + "artifact": 24690, + "##ddin": 24691, + "rot": 24692, + "Amongst": 24693, + "Prakash": 24694, + "RF": 24695, + "##topia": 24696, + "milestone": 24697, + "##vard": 24698, + "Winters": 24699, + "Mead": 24700, + "churchyard": 24701, + "Lulu": 24702, + "estuary": 24703, + "##ind": 24704, + "Cha": 24705, + "Infinity": 24706, + "Meadow": 24707, + "subsidies": 24708, + "##valent": 24709, + "CONCACAF": 24710, + "Ching": 24711, + "medicinal": 24712, + "navigate": 24713, + "Carver": 24714, + "Twice": 24715, + "abdominal": 24716, + "regulating": 24717, + "RB": 24718, + "toilets": 24719, + "Brewer": 24720, + "weakening": 24721, + "ambushed": 24722, + "##aut": 24723, + "##vignon": 24724, + "Lansing": 24725, + "unacceptable": 24726, + "reliance": 24727, + "stabbing": 24728, + "##mpo": 24729, + "##naire": 24730, + "Interview": 24731, + "##ested": 24732, + "##imed": 24733, + "bearings": 24734, + "##lts": 24735, + "Rashid": 24736, + "##iation": 24737, + "authenticity": 24738, + "vigorous": 24739, + "##frey": 24740, + "##uel": 24741, + "biologist": 24742, + "NFC": 24743, + "##rmaid": 24744, + "##wash": 24745, + "Makes": 24746, + "##aunt": 24747, + "##steries": 24748, + "withdrawing": 24749, + "##qa": 24750, + "Buccaneers": 24751, + "bleed": 24752, + "inclination": 24753, + "stain": 24754, + "##ilo": 24755, + "##ppel": 24756, + "Torre": 24757, + "privileged": 24758, + "cereal": 24759, + "trailers": 24760, + "alumnus": 24761, + "neon": 24762, + "Cochrane": 24763, + "Mariana": 24764, + "caress": 24765, + "##47": 24766, + "##ients": 24767, + "experimentation": 24768, + "Window": 24769, + "convict": 24770, + "signaled": 24771, + "##YP": 24772, + "rower": 24773, + "Pharmacy": 24774, + "interacting": 24775, + "241": 24776, + "Strings": 24777, + "dominating": 24778, + "kinase": 24779, + "Dinamo": 24780, + "Wire": 24781, + "pains": 24782, + "sensations": 24783, + "##suse": 24784, + "Twenty20": 24785, + "##39": 24786, + "spotlight": 24787, + "##hend": 24788, + "elemental": 24789, + "##pura": 24790, + "Jameson": 24791, + "Swindon": 24792, + "honoring": 24793, + "pained": 24794, + "##ediatric": 24795, + "##lux": 24796, + "Psychological": 24797, + "assemblies": 24798, + "ingredient": 24799, + "Martial": 24800, + "Penguins": 24801, + "beverage": 24802, + "Monitor": 24803, + "mysteries": 24804, + "##ION": 24805, + "emigration": 24806, + "mused": 24807, + "##sique": 24808, + "crore": 24809, + "AMC": 24810, + "Funding": 24811, + "Chinatown": 24812, + "Establishment": 24813, + "Finalist": 24814, + "enjoyable": 24815, + "1756": 24816, + "##mada": 24817, + "##rams": 24818, + "NO": 24819, + "newborn": 24820, + "CS": 24821, + "comprehend": 24822, + "Invisible": 24823, + "Siemens": 24824, + "##acon": 24825, + "246": 24826, + "contraction": 24827, + "##volving": 24828, + "##moration": 24829, + "##rok": 24830, + "montane": 24831, + "##ntation": 24832, + "Galloway": 24833, + "##llow": 24834, + "Verity": 24835, + "directorial": 24836, + "pearl": 24837, + "Leaning": 24838, + "##rase": 24839, + "Fernandez": 24840, + "swallowing": 24841, + "Automatic": 24842, + "Madness": 24843, + "haunting": 24844, + "paddle": 24845, + "##UE": 24846, + "##rrows": 24847, + "##vies": 24848, + "##zuki": 24849, + "##bolt": 24850, + "##iber": 24851, + "Fender": 24852, + "emails": 24853, + "paste": 24854, + "##lancing": 24855, + "hind": 24856, + "homestead": 24857, + "hopeless": 24858, + "##dles": 24859, + "Rockies": 24860, + "garlic": 24861, + "fatty": 24862, + "shrieked": 24863, + "##ismic": 24864, + "Gillian": 24865, + "Inquiry": 24866, + "Schultz": 24867, + "XML": 24868, + "##cius": 24869, + "##uld": 24870, + "Domesday": 24871, + "grenades": 24872, + "northernmost": 24873, + "##igi": 24874, + "Tbilisi": 24875, + "optimistic": 24876, + "##poon": 24877, + "Refuge": 24878, + "stacks": 24879, + "Bose": 24880, + "smash": 24881, + "surreal": 24882, + "Nah": 24883, + "Straits": 24884, + "Conquest": 24885, + "##roo": 24886, + "##weet": 24887, + "##kell": 24888, + "Gladys": 24889, + "CH": 24890, + "##lim": 24891, + "##vitation": 24892, + "Doctorate": 24893, + "NRHP": 24894, + "knocks": 24895, + "Bey": 24896, + "Romano": 24897, + "##pile": 24898, + "242": 24899, + "Diamonds": 24900, + "strides": 24901, + "eclectic": 24902, + "Betsy": 24903, + "clade": 24904, + "##hady": 24905, + "##leashed": 24906, + "dissolve": 24907, + "moss": 24908, + "Suburban": 24909, + "silvery": 24910, + "##bria": 24911, + "tally": 24912, + "turtles": 24913, + "##uctive": 24914, + "finely": 24915, + "industrialist": 24916, + "##nary": 24917, + "Ernesto": 24918, + "oz": 24919, + "pact": 24920, + "loneliness": 24921, + "##hov": 24922, + "Tomb": 24923, + "multinational": 24924, + "risked": 24925, + "Layne": 24926, + "USL": 24927, + "ne": 24928, + "##quiries": 24929, + "Ad": 24930, + "Message": 24931, + "Kamen": 24932, + "Kristen": 24933, + "reefs": 24934, + "implements": 24935, + "##itative": 24936, + "educators": 24937, + "garments": 24938, + "gunshot": 24939, + "##essed": 24940, + "##rve": 24941, + "Montevideo": 24942, + "vigorously": 24943, + "Stamford": 24944, + "assemble": 24945, + "packaged": 24946, + "##same": 24947, + "état": 24948, + "Viva": 24949, + "paragraph": 24950, + "##eter": 24951, + "##wire": 24952, + "Stick": 24953, + "Navajo": 24954, + "MCA": 24955, + "##pressing": 24956, + "ensembles": 24957, + "ABA": 24958, + "##zor": 24959, + "##llus": 24960, + "Partner": 24961, + "raked": 24962, + "##BI": 24963, + "Iona": 24964, + "thump": 24965, + "Celeste": 24966, + "Kiran": 24967, + "##iscovered": 24968, + "##rith": 24969, + "inflammation": 24970, + "##arel": 24971, + "Features": 24972, + "loosened": 24973, + "##yclic": 24974, + "Deluxe": 24975, + "Speak": 24976, + "economical": 24977, + "Frankenstein": 24978, + "Picasso": 24979, + "showcased": 24980, + "##zad": 24981, + "##eira": 24982, + "##planes": 24983, + "##linear": 24984, + "##overs": 24985, + "monsoon": 24986, + "prosecutors": 24987, + "slack": 24988, + "Horses": 24989, + "##urers": 24990, + "Angry": 24991, + "coughing": 24992, + "##truder": 24993, + "Questions": 24994, + "##tō": 24995, + "##zak": 24996, + "challenger": 24997, + "clocks": 24998, + "##ieving": 24999, + "Newmarket": 25000, + "##acle": 25001, + "cursing": 25002, + "stimuli": 25003, + "##mming": 25004, + "##qualified": 25005, + "slapping": 25006, + "##vasive": 25007, + "narration": 25008, + "##kini": 25009, + "Advertising": 25010, + "CSI": 25011, + "alliances": 25012, + "mixes": 25013, + "##yes": 25014, + "covert": 25015, + "amalgamation": 25016, + "reproduced": 25017, + "##ardt": 25018, + "##gis": 25019, + "1648": 25020, + "id": 25021, + "Annette": 25022, + "Boots": 25023, + "Champagne": 25024, + "Brest": 25025, + "Daryl": 25026, + "##emon": 25027, + "##jou": 25028, + "##llers": 25029, + "Mean": 25030, + "adaptive": 25031, + "technicians": 25032, + "##pair": 25033, + "##usal": 25034, + "Yoga": 25035, + "fronts": 25036, + "leaping": 25037, + "Jul": 25038, + "harvesting": 25039, + "keel": 25040, + "##44": 25041, + "petitioned": 25042, + "##lved": 25043, + "yells": 25044, + "Endowment": 25045, + "proponent": 25046, + "##spur": 25047, + "##tised": 25048, + "##zal": 25049, + "Homes": 25050, + "Includes": 25051, + "##ifer": 25052, + "##oodoo": 25053, + "##rvette": 25054, + "awarding": 25055, + "mirrored": 25056, + "ransom": 25057, + "Flute": 25058, + "outlook": 25059, + "##ganj": 25060, + "DVDs": 25061, + "Sufi": 25062, + "frontman": 25063, + "Goddard": 25064, + "barren": 25065, + "##astic": 25066, + "Suicide": 25067, + "hillside": 25068, + "Harlow": 25069, + "Lau": 25070, + "notions": 25071, + "Amnesty": 25072, + "Homestead": 25073, + "##irt": 25074, + "GE": 25075, + "hooded": 25076, + "umpire": 25077, + "mustered": 25078, + "Catch": 25079, + "Masonic": 25080, + "##erd": 25081, + "Dynamics": 25082, + "Equity": 25083, + "Oro": 25084, + "Charts": 25085, + "Mussolini": 25086, + "populace": 25087, + "muted": 25088, + "accompaniment": 25089, + "##lour": 25090, + "##ndes": 25091, + "ignited": 25092, + "##iferous": 25093, + "##laced": 25094, + "##atch": 25095, + "anguish": 25096, + "registry": 25097, + "##tub": 25098, + "##hards": 25099, + "##neer": 25100, + "251": 25101, + "Hooker": 25102, + "uncomfortably": 25103, + "##6th": 25104, + "##ivers": 25105, + "Catalina": 25106, + "MiG": 25107, + "giggling": 25108, + "1754": 25109, + "Dietrich": 25110, + "Kaladin": 25111, + "pricing": 25112, + "##quence": 25113, + "Sabah": 25114, + "##lving": 25115, + "##nical": 25116, + "Gettysburg": 25117, + "Vita": 25118, + "Telecom": 25119, + "Worst": 25120, + "Palais": 25121, + "Pentagon": 25122, + "##brand": 25123, + "##chichte": 25124, + "Graf": 25125, + "unnatural": 25126, + "1715": 25127, + "bio": 25128, + "##26": 25129, + "Radcliffe": 25130, + "##utt": 25131, + "chatting": 25132, + "spices": 25133, + "##aus": 25134, + "untouched": 25135, + "##eper": 25136, + "Doll": 25137, + "turkey": 25138, + "Syndicate": 25139, + "##rlene": 25140, + "##JP": 25141, + "##roots": 25142, + "Como": 25143, + "clashed": 25144, + "modernization": 25145, + "1757": 25146, + "fantasies": 25147, + "##iating": 25148, + "dissipated": 25149, + "Sicilian": 25150, + "inspect": 25151, + "sensible": 25152, + "reputed": 25153, + "##final": 25154, + "Milford": 25155, + "poised": 25156, + "RC": 25157, + "metabolic": 25158, + "Tobacco": 25159, + "Mecca": 25160, + "optimization": 25161, + "##heat": 25162, + "lobe": 25163, + "rabbits": 25164, + "NAS": 25165, + "geologist": 25166, + "##liner": 25167, + "Kilda": 25168, + "carpenter": 25169, + "nationalists": 25170, + "##brae": 25171, + "summarized": 25172, + "##venge": 25173, + "Designer": 25174, + "misleading": 25175, + "beamed": 25176, + "##meyer": 25177, + "Matrix": 25178, + "excuses": 25179, + "##aines": 25180, + "##biology": 25181, + "401": 25182, + "Moose": 25183, + "drafting": 25184, + "Sai": 25185, + "##ggle": 25186, + "Comprehensive": 25187, + "dripped": 25188, + "skate": 25189, + "##WI": 25190, + "##enan": 25191, + "##ruk": 25192, + "narrower": 25193, + "outgoing": 25194, + "##enter": 25195, + "##nounce": 25196, + "overseen": 25197, + "##structure": 25198, + "travellers": 25199, + "banging": 25200, + "scarred": 25201, + "##thing": 25202, + "##arra": 25203, + "Ebert": 25204, + "Sometime": 25205, + "##nated": 25206, + "BAFTA": 25207, + "Hurricanes": 25208, + "configurations": 25209, + "##MLL": 25210, + "immortality": 25211, + "##heus": 25212, + "gothic": 25213, + "##mpest": 25214, + "clergyman": 25215, + "viewpoint": 25216, + "Maxim": 25217, + "Instituto": 25218, + "emitted": 25219, + "quantitative": 25220, + "1689": 25221, + "Consortium": 25222, + "##rsk": 25223, + "Meat": 25224, + "Tao": 25225, + "swimmers": 25226, + "Shaking": 25227, + "Terence": 25228, + "mainline": 25229, + "##linity": 25230, + "Quantum": 25231, + "##rogate": 25232, + "Nair": 25233, + "banquet": 25234, + "39th": 25235, + "reprised": 25236, + "lagoon": 25237, + "subdivisions": 25238, + "synonymous": 25239, + "incurred": 25240, + "password": 25241, + "sprung": 25242, + "##vere": 25243, + "Credits": 25244, + "Petersen": 25245, + "Faces": 25246, + "##vu": 25247, + "statesman": 25248, + "Zombie": 25249, + "gesturing": 25250, + "##going": 25251, + "Sergey": 25252, + "dormant": 25253, + "possessive": 25254, + "totals": 25255, + "southward": 25256, + "Ángel": 25257, + "##odies": 25258, + "HM": 25259, + "Mariano": 25260, + "Ramirez": 25261, + "Wicked": 25262, + "impressions": 25263, + "##Net": 25264, + "##cap": 25265, + "##ème": 25266, + "Transformers": 25267, + "Poker": 25268, + "RIAA": 25269, + "Redesignated": 25270, + "##chuk": 25271, + "Harcourt": 25272, + "Peña": 25273, + "spacious": 25274, + "tinged": 25275, + "alternatively": 25276, + "narrowing": 25277, + "Brigham": 25278, + "authorization": 25279, + "Membership": 25280, + "Zeppelin": 25281, + "##amed": 25282, + "Handball": 25283, + "steer": 25284, + "##orium": 25285, + "##rnal": 25286, + "##rops": 25287, + "Committees": 25288, + "endings": 25289, + "##MM": 25290, + "##yung": 25291, + "ejected": 25292, + "grams": 25293, + "##relli": 25294, + "Birch": 25295, + "Hilary": 25296, + "Stadion": 25297, + "orphan": 25298, + "clawed": 25299, + "##kner": 25300, + "Motown": 25301, + "Wilkins": 25302, + "ballads": 25303, + "outspoken": 25304, + "##ancipation": 25305, + "##bankment": 25306, + "##cheng": 25307, + "Advances": 25308, + "harvested": 25309, + "novelty": 25310, + "ineligible": 25311, + "oversees": 25312, + "##´s": 25313, + "obeyed": 25314, + "inevitably": 25315, + "Kingdoms": 25316, + "burying": 25317, + "Fabian": 25318, + "relevance": 25319, + "Tatiana": 25320, + "##MCA": 25321, + "sarcastic": 25322, + "##onda": 25323, + "Akron": 25324, + "229": 25325, + "sandwiches": 25326, + "Adobe": 25327, + "Maddox": 25328, + "##azar": 25329, + "Hunting": 25330, + "##onized": 25331, + "Smiling": 25332, + "##tology": 25333, + "Juventus": 25334, + "Leroy": 25335, + "Poets": 25336, + "attach": 25337, + "lo": 25338, + "##rly": 25339, + "##film": 25340, + "Structure": 25341, + "##igate": 25342, + "olds": 25343, + "projections": 25344, + "SMS": 25345, + "outnumbered": 25346, + "##tase": 25347, + "judiciary": 25348, + "paramilitary": 25349, + "playfully": 25350, + "##rsing": 25351, + "##tras": 25352, + "Chico": 25353, + "Vin": 25354, + "informally": 25355, + "abandonment": 25356, + "##russ": 25357, + "Baroness": 25358, + "injuring": 25359, + "octagonal": 25360, + "deciduous": 25361, + "##nea": 25362, + "##olm": 25363, + "Hz": 25364, + "Norwood": 25365, + "poses": 25366, + "Marissa": 25367, + "alerted": 25368, + "willed": 25369, + "##KS": 25370, + "Dino": 25371, + "##ddler": 25372, + "##vani": 25373, + "Barbie": 25374, + "Thankfully": 25375, + "625": 25376, + "bicycles": 25377, + "shimmering": 25378, + "##tinuum": 25379, + "##wolf": 25380, + "Chesterfield": 25381, + "##idy": 25382, + "##urgency": 25383, + "Knowles": 25384, + "sweetly": 25385, + "Ventures": 25386, + "##ponents": 25387, + "##valence": 25388, + "Darryl": 25389, + "Powerplant": 25390, + "RAAF": 25391, + "##pec": 25392, + "Kingsley": 25393, + "Parramatta": 25394, + "penetrating": 25395, + "spectacle": 25396, + "##inia": 25397, + "Marlborough": 25398, + "residual": 25399, + "compatibility": 25400, + "hike": 25401, + "Underwood": 25402, + "depleted": 25403, + "ministries": 25404, + "##odus": 25405, + "##ropriation": 25406, + "rotting": 25407, + "Faso": 25408, + "##inn": 25409, + "Happiness": 25410, + "Lille": 25411, + "Suns": 25412, + "cookie": 25413, + "rift": 25414, + "warmly": 25415, + "##lvin": 25416, + "Bugs": 25417, + "Gotham": 25418, + "Gothenburg": 25419, + "Properties": 25420, + "##seller": 25421, + "##ubi": 25422, + "Created": 25423, + "MAC": 25424, + "Noelle": 25425, + "Requiem": 25426, + "Ulysses": 25427, + "##ails": 25428, + "franchises": 25429, + "##icious": 25430, + "##rwick": 25431, + "celestial": 25432, + "kinetic": 25433, + "720": 25434, + "STS": 25435, + "transmissions": 25436, + "amplitude": 25437, + "forums": 25438, + "freeing": 25439, + "reptiles": 25440, + "tumbling": 25441, + "##continent": 25442, + "##rising": 25443, + "##tropy": 25444, + "physiology": 25445, + "##uster": 25446, + "Loves": 25447, + "bodied": 25448, + "neutrality": 25449, + "Neumann": 25450, + "assessments": 25451, + "Vicky": 25452, + "##hom": 25453, + "hampered": 25454, + "##uku": 25455, + "Custom": 25456, + "timed": 25457, + "##eville": 25458, + "##xious": 25459, + "elastic": 25460, + "##section": 25461, + "rig": 25462, + "stilled": 25463, + "shipment": 25464, + "243": 25465, + "artworks": 25466, + "boulders": 25467, + "Bournemouth": 25468, + "##hly": 25469, + "##LF": 25470, + "##linary": 25471, + "rumored": 25472, + "##bino": 25473, + "##drum": 25474, + "Chun": 25475, + "Freiburg": 25476, + "##dges": 25477, + "Equality": 25478, + "252": 25479, + "Guadalajara": 25480, + "##sors": 25481, + "##taire": 25482, + "Roach": 25483, + "cramped": 25484, + "##ultural": 25485, + "Logistics": 25486, + "Punch": 25487, + "fines": 25488, + "Lai": 25489, + "caravan": 25490, + "##55": 25491, + "lame": 25492, + "Collector": 25493, + "pausing": 25494, + "315": 25495, + "migrant": 25496, + "hawk": 25497, + "signalling": 25498, + "##erham": 25499, + "##oughs": 25500, + "Demons": 25501, + "surfing": 25502, + "Rana": 25503, + "insisting": 25504, + "Wien": 25505, + "adolescent": 25506, + "##jong": 25507, + "##rera": 25508, + "##umba": 25509, + "Regis": 25510, + "brushes": 25511, + "##iman": 25512, + "residues": 25513, + "storytelling": 25514, + "Consider": 25515, + "contrasting": 25516, + "regeneration": 25517, + "##elling": 25518, + "##hlete": 25519, + "afforded": 25520, + "reactors": 25521, + "costing": 25522, + "##biotics": 25523, + "##gat": 25524, + "##евич": 25525, + "chanting": 25526, + "secondly": 25527, + "confesses": 25528, + "##ikos": 25529, + "##uang": 25530, + "##ronological": 25531, + "##−": 25532, + "Giacomo": 25533, + "##eca": 25534, + "vaudeville": 25535, + "weeds": 25536, + "rejecting": 25537, + "revoked": 25538, + "affluent": 25539, + "fullback": 25540, + "progresses": 25541, + "geologic": 25542, + "proprietor": 25543, + "replication": 25544, + "gliding": 25545, + "recounted": 25546, + "##bah": 25547, + "##igma": 25548, + "Flow": 25549, + "ii": 25550, + "newcomer": 25551, + "##lasp": 25552, + "##miya": 25553, + "Candace": 25554, + "fractured": 25555, + "interiors": 25556, + "confidential": 25557, + "Inverness": 25558, + "footing": 25559, + "##robe": 25560, + "Coordinator": 25561, + "Westphalia": 25562, + "jumper": 25563, + "##chism": 25564, + "dormitory": 25565, + "##gno": 25566, + "281": 25567, + "acknowledging": 25568, + "leveled": 25569, + "##éra": 25570, + "Algiers": 25571, + "migrate": 25572, + "Frog": 25573, + "Rare": 25574, + "##iovascular": 25575, + "##urous": 25576, + "DSO": 25577, + "nomadic": 25578, + "##iera": 25579, + "woken": 25580, + "lifeless": 25581, + "##graphical": 25582, + "##ifications": 25583, + "Dot": 25584, + "Sachs": 25585, + "crow": 25586, + "nmi": 25587, + "Tacoma": 25588, + "Weight": 25589, + "mushroom": 25590, + "RS": 25591, + "conditioned": 25592, + "##zine": 25593, + "Tunisian": 25594, + "altering": 25595, + "##mizing": 25596, + "Handicap": 25597, + "Patti": 25598, + "Monsieur": 25599, + "clicking": 25600, + "gorge": 25601, + "interrupting": 25602, + "##powerment": 25603, + "drawers": 25604, + "Serra": 25605, + "##icides": 25606, + "Specialist": 25607, + "##itte": 25608, + "connector": 25609, + "worshipped": 25610, + "##ask": 25611, + "consoles": 25612, + "tags": 25613, + "##iler": 25614, + "glued": 25615, + "##zac": 25616, + "fences": 25617, + "Bratislava": 25618, + "honeymoon": 25619, + "313": 25620, + "A2": 25621, + "disposition": 25622, + "Gentleman": 25623, + "Gilmore": 25624, + "glaciers": 25625, + "##scribed": 25626, + "Calhoun": 25627, + "convergence": 25628, + "Aleppo": 25629, + "shortages": 25630, + "##43": 25631, + "##orax": 25632, + "##worm": 25633, + "##codes": 25634, + "##rmal": 25635, + "neutron": 25636, + "##ossa": 25637, + "Bloomberg": 25638, + "Salford": 25639, + "periodicals": 25640, + "##ryan": 25641, + "Slayer": 25642, + "##ynasties": 25643, + "credentials": 25644, + "##tista": 25645, + "surveyor": 25646, + "File": 25647, + "stinging": 25648, + "unnoticed": 25649, + "Medici": 25650, + "ecstasy": 25651, + "espionage": 25652, + "Jett": 25653, + "Leary": 25654, + "circulating": 25655, + "bargaining": 25656, + "concerto": 25657, + "serviced": 25658, + "37th": 25659, + "HK": 25660, + "##fueling": 25661, + "Delilah": 25662, + "Marcia": 25663, + "graded": 25664, + "##join": 25665, + "Kaplan": 25666, + "feasible": 25667, + "##nale": 25668, + "##yt": 25669, + "Burnley": 25670, + "dreadful": 25671, + "ministerial": 25672, + "Brewster": 25673, + "Judah": 25674, + "##ngled": 25675, + "##rrey": 25676, + "recycled": 25677, + "Iroquois": 25678, + "backstage": 25679, + "parchment": 25680, + "##numbered": 25681, + "Kern": 25682, + "Motorsports": 25683, + "Organizations": 25684, + "##mini": 25685, + "Seems": 25686, + "Warrington": 25687, + "Dunbar": 25688, + "Ezio": 25689, + "##eor": 25690, + "paralyzed": 25691, + "Ara": 25692, + "yeast": 25693, + "##olis": 25694, + "cheated": 25695, + "reappeared": 25696, + "banged": 25697, + "##ymph": 25698, + "##dick": 25699, + "Lyndon": 25700, + "glide": 25701, + "Mat": 25702, + "##natch": 25703, + "Hotels": 25704, + "Household": 25705, + "parasite": 25706, + "irrelevant": 25707, + "youthful": 25708, + "##smic": 25709, + "##tero": 25710, + "##anti": 25711, + "2d": 25712, + "Ignacio": 25713, + "squash": 25714, + "##nets": 25715, + "shale": 25716, + "##اد": 25717, + "Abrams": 25718, + "##oese": 25719, + "assaults": 25720, + "##dier": 25721, + "##otte": 25722, + "Swamp": 25723, + "287": 25724, + "Spurs": 25725, + "##economic": 25726, + "Fargo": 25727, + "auditioned": 25728, + "##mé": 25729, + "Haas": 25730, + "une": 25731, + "abbreviation": 25732, + "Turkic": 25733, + "##tisfaction": 25734, + "favorites": 25735, + "specials": 25736, + "##lial": 25737, + "Enlightenment": 25738, + "Burkina": 25739, + "##vir": 25740, + "Comparative": 25741, + "Lacrosse": 25742, + "elves": 25743, + "##lerical": 25744, + "##pear": 25745, + "Borders": 25746, + "controllers": 25747, + "##villa": 25748, + "excelled": 25749, + "##acher": 25750, + "##varo": 25751, + "camouflage": 25752, + "perpetual": 25753, + "##ffles": 25754, + "devoid": 25755, + "schooner": 25756, + "##bered": 25757, + "##oris": 25758, + "Gibbons": 25759, + "Lia": 25760, + "discouraged": 25761, + "sue": 25762, + "##gnition": 25763, + "Excellent": 25764, + "Layton": 25765, + "noir": 25766, + "smack": 25767, + "##ivable": 25768, + "##evity": 25769, + "##lone": 25770, + "Myra": 25771, + "weaken": 25772, + "weaponry": 25773, + "##azza": 25774, + "Shake": 25775, + "backbone": 25776, + "Certified": 25777, + "clown": 25778, + "occupational": 25779, + "caller": 25780, + "enslaved": 25781, + "soaking": 25782, + "Wexford": 25783, + "perceive": 25784, + "shortlisted": 25785, + "##pid": 25786, + "feminism": 25787, + "Bari": 25788, + "Indie": 25789, + "##avelin": 25790, + "##ldo": 25791, + "Hellenic": 25792, + "Hundreds": 25793, + "Savings": 25794, + "comedies": 25795, + "Honors": 25796, + "Mohawk": 25797, + "Told": 25798, + "coded": 25799, + "Incorporated": 25800, + "hideous": 25801, + "trusts": 25802, + "hose": 25803, + "Calais": 25804, + "Forster": 25805, + "Gabon": 25806, + "Internationale": 25807, + "AK": 25808, + "Colour": 25809, + "##UM": 25810, + "##heist": 25811, + "McGregor": 25812, + "localized": 25813, + "##tronomy": 25814, + "Darrell": 25815, + "##iara": 25816, + "squirrel": 25817, + "freaked": 25818, + "##eking": 25819, + "##manned": 25820, + "##ungen": 25821, + "radiated": 25822, + "##dua": 25823, + "commence": 25824, + "Donaldson": 25825, + "##iddle": 25826, + "MR": 25827, + "SAS": 25828, + "Tavern": 25829, + "Teenage": 25830, + "admissions": 25831, + "Instruments": 25832, + "##ilizer": 25833, + "Konrad": 25834, + "contemplated": 25835, + "##ductor": 25836, + "Jing": 25837, + "Reacher": 25838, + "recalling": 25839, + "Dhabi": 25840, + "emphasizing": 25841, + "illumination": 25842, + "##tony": 25843, + "legitimacy": 25844, + "Goethe": 25845, + "Ritter": 25846, + "McDonnell": 25847, + "Polar": 25848, + "Seconds": 25849, + "aspiring": 25850, + "derby": 25851, + "tunic": 25852, + "##rmed": 25853, + "outlines": 25854, + "Changing": 25855, + "distortion": 25856, + "##cter": 25857, + "Mechanics": 25858, + "##urly": 25859, + "##vana": 25860, + "Egg": 25861, + "Wolverine": 25862, + "Stupid": 25863, + "centralized": 25864, + "knit": 25865, + "##Ms": 25866, + "Saratoga": 25867, + "Ogden": 25868, + "storylines": 25869, + "##vres": 25870, + "lavish": 25871, + "beverages": 25872, + "##grarian": 25873, + "Kyrgyzstan": 25874, + "forcefully": 25875, + "superb": 25876, + "Elm": 25877, + "Thessaloniki": 25878, + "follower": 25879, + "Plants": 25880, + "slang": 25881, + "trajectory": 25882, + "Nowadays": 25883, + "Bengals": 25884, + "Ingram": 25885, + "perch": 25886, + "coloring": 25887, + "carvings": 25888, + "doubtful": 25889, + "##aph": 25890, + "##gratulations": 25891, + "##41": 25892, + "Curse": 25893, + "253": 25894, + "nightstand": 25895, + "Campo": 25896, + "Meiji": 25897, + "decomposition": 25898, + "##giri": 25899, + "McCormick": 25900, + "Yours": 25901, + "##amon": 25902, + "##bang": 25903, + "Texans": 25904, + "injunction": 25905, + "organise": 25906, + "periodical": 25907, + "##peculative": 25908, + "oceans": 25909, + "##aley": 25910, + "Success": 25911, + "Lehigh": 25912, + "##guin": 25913, + "1730": 25914, + "Davy": 25915, + "allowance": 25916, + "obituary": 25917, + "##tov": 25918, + "treasury": 25919, + "##wayne": 25920, + "euros": 25921, + "readiness": 25922, + "systematically": 25923, + "##stered": 25924, + "##igor": 25925, + "##xen": 25926, + "##cliff": 25927, + "##lya": 25928, + "Send": 25929, + "##umatic": 25930, + "Celtics": 25931, + "Judiciary": 25932, + "425": 25933, + "propagation": 25934, + "rebellious": 25935, + "##ims": 25936, + "##lut": 25937, + "Dal": 25938, + "##ayman": 25939, + "##cloth": 25940, + "Boise": 25941, + "pairing": 25942, + "Waltz": 25943, + "torment": 25944, + "Hatch": 25945, + "aspirations": 25946, + "diaspora": 25947, + "##hame": 25948, + "Rank": 25949, + "237": 25950, + "Including": 25951, + "Muir": 25952, + "chained": 25953, + "toxicity": 25954, + "Université": 25955, + "##aroo": 25956, + "Mathews": 25957, + "meadows": 25958, + "##bio": 25959, + "Editing": 25960, + "Khorasan": 25961, + "##them": 25962, + "##ahn": 25963, + "##bari": 25964, + "##umes": 25965, + "evacuate": 25966, + "##sium": 25967, + "gram": 25968, + "kidnap": 25969, + "pinning": 25970, + "##diation": 25971, + "##orms": 25972, + "beacon": 25973, + "organising": 25974, + "McGrath": 25975, + "##ogist": 25976, + "Qur": 25977, + "Tango": 25978, + "##ceptor": 25979, + "##rud": 25980, + "##cend": 25981, + "##cie": 25982, + "##jas": 25983, + "##sided": 25984, + "Tuscany": 25985, + "Venture": 25986, + "creations": 25987, + "exhibiting": 25988, + "##rcerer": 25989, + "##tten": 25990, + "Butcher": 25991, + "Divinity": 25992, + "Pet": 25993, + "Whitehead": 25994, + "falsely": 25995, + "perished": 25996, + "handy": 25997, + "Moines": 25998, + "cyclists": 25999, + "synthesizers": 26000, + "Mortal": 26001, + "notoriety": 26002, + "##ronic": 26003, + "Dialogue": 26004, + "expressive": 26005, + "uk": 26006, + "Nightingale": 26007, + "grimly": 26008, + "vineyards": 26009, + "Driving": 26010, + "relentless": 26011, + "compiler": 26012, + "##district": 26013, + "##tuated": 26014, + "Hades": 26015, + "medicines": 26016, + "objection": 26017, + "Answer": 26018, + "Soap": 26019, + "Chattanooga": 26020, + "##gogue": 26021, + "Haryana": 26022, + "Parties": 26023, + "Turtle": 26024, + "##ferred": 26025, + "explorers": 26026, + "stakeholders": 26027, + "##aar": 26028, + "##rbonne": 26029, + "tempered": 26030, + "conjecture": 26031, + "##tee": 26032, + "##hur": 26033, + "Reeve": 26034, + "bumper": 26035, + "stew": 26036, + "##church": 26037, + "##generate": 26038, + "##ilitating": 26039, + "##chanized": 26040, + "##elier": 26041, + "##enne": 26042, + "translucent": 26043, + "##lows": 26044, + "Publisher": 26045, + "evangelical": 26046, + "inherit": 26047, + "##rted": 26048, + "247": 26049, + "SmackDown": 26050, + "bitterness": 26051, + "lesions": 26052, + "##worked": 26053, + "mosques": 26054, + "wed": 26055, + "##lashes": 26056, + "Ng": 26057, + "Rebels": 26058, + "booking": 26059, + "##nail": 26060, + "Incident": 26061, + "Sailing": 26062, + "yo": 26063, + "confirms": 26064, + "Chaplin": 26065, + "baths": 26066, + "##kled": 26067, + "modernist": 26068, + "pulsing": 26069, + "Cicero": 26070, + "slaughtered": 26071, + "boasted": 26072, + "##losure": 26073, + "zipper": 26074, + "##hales": 26075, + "aristocracy": 26076, + "halftime": 26077, + "jolt": 26078, + "unlawful": 26079, + "Marching": 26080, + "sustaining": 26081, + "Yerevan": 26082, + "bracket": 26083, + "ram": 26084, + "Markus": 26085, + "##zef": 26086, + "butcher": 26087, + "massage": 26088, + "##quisite": 26089, + "Leisure": 26090, + "Pizza": 26091, + "collapsing": 26092, + "##lante": 26093, + "commentaries": 26094, + "scripted": 26095, + "##disciplinary": 26096, + "##sused": 26097, + "eroded": 26098, + "alleging": 26099, + "vase": 26100, + "Chichester": 26101, + "Peacock": 26102, + "commencement": 26103, + "dice": 26104, + "hotter": 26105, + "poisonous": 26106, + "executions": 26107, + "##occo": 26108, + "frost": 26109, + "fielding": 26110, + "vendor": 26111, + "Counts": 26112, + "Troops": 26113, + "maize": 26114, + "Divisional": 26115, + "analogue": 26116, + "shadowy": 26117, + "Nuevo": 26118, + "Ville": 26119, + "radiating": 26120, + "worthless": 26121, + "Adriatic": 26122, + "Buy": 26123, + "blaze": 26124, + "brutally": 26125, + "horizontally": 26126, + "longed": 26127, + "##matical": 26128, + "federally": 26129, + "Rolf": 26130, + "Root": 26131, + "exclude": 26132, + "rag": 26133, + "agitation": 26134, + "Lounge": 26135, + "astonished": 26136, + "##wirl": 26137, + "Impossible": 26138, + "transformations": 26139, + "##IVE": 26140, + "##ceded": 26141, + "##slav": 26142, + "downloaded": 26143, + "fucked": 26144, + "Egyptians": 26145, + "Welles": 26146, + "##ffington": 26147, + "U2": 26148, + "befriended": 26149, + "radios": 26150, + "##jid": 26151, + "archaic": 26152, + "compares": 26153, + "##ccelerator": 26154, + "##imated": 26155, + "##tosis": 26156, + "Hung": 26157, + "Scientists": 26158, + "Thousands": 26159, + "geographically": 26160, + "##LR": 26161, + "Macintosh": 26162, + "fluorescent": 26163, + "##ipur": 26164, + "Wehrmacht": 26165, + "##BR": 26166, + "##firmary": 26167, + "Chao": 26168, + "##ague": 26169, + "Boyer": 26170, + "##grounds": 26171, + "##hism": 26172, + "##mento": 26173, + "##taining": 26174, + "infancy": 26175, + "##cton": 26176, + "510": 26177, + "Boca": 26178, + "##loy": 26179, + "1644": 26180, + "ben": 26181, + "dong": 26182, + "stresses": 26183, + "Sweat": 26184, + "expressway": 26185, + "graders": 26186, + "ochreous": 26187, + "nets": 26188, + "Lawn": 26189, + "thirst": 26190, + "Uruguayan": 26191, + "satisfactory": 26192, + "##tracts": 26193, + "baroque": 26194, + "rusty": 26195, + "##ław": 26196, + "Shen": 26197, + "Gdańsk": 26198, + "chickens": 26199, + "##graving": 26200, + "Hodge": 26201, + "Papal": 26202, + "SAT": 26203, + "bearer": 26204, + "##ogo": 26205, + "##rger": 26206, + "merits": 26207, + "Calendar": 26208, + "Highest": 26209, + "Skills": 26210, + "##ortex": 26211, + "Roberta": 26212, + "paradigm": 26213, + "recounts": 26214, + "frigates": 26215, + "swamps": 26216, + "unitary": 26217, + "##oker": 26218, + "balloons": 26219, + "Hawthorne": 26220, + "Muse": 26221, + "spurred": 26222, + "advisors": 26223, + "reclaimed": 26224, + "stimulate": 26225, + "fibre": 26226, + "pat": 26227, + "repeal": 26228, + "##dgson": 26229, + "##iar": 26230, + "##rana": 26231, + "anthropologist": 26232, + "descends": 26233, + "flinch": 26234, + "reared": 26235, + "##chang": 26236, + "##eric": 26237, + "##lithic": 26238, + "commissioning": 26239, + "##cumenical": 26240, + "##lume": 26241, + "##rchen": 26242, + "Wolff": 26243, + "##tsky": 26244, + "Eurasian": 26245, + "Nepali": 26246, + "Nightmare": 26247, + "ZIP": 26248, + "playback": 26249, + "##latz": 26250, + "##vington": 26251, + "Warm": 26252, + "##75": 26253, + "Martina": 26254, + "Rollins": 26255, + "Saetan": 26256, + "Variations": 26257, + "sorting": 26258, + "##م": 26259, + "530": 26260, + "Joaquin": 26261, + "Ptolemy": 26262, + "thinner": 26263, + "##iator": 26264, + "##pticism": 26265, + "Cebu": 26266, + "Highlanders": 26267, + "Linden": 26268, + "Vanguard": 26269, + "##SV": 26270, + "##mor": 26271, + "##ulge": 26272, + "ISSN": 26273, + "cartridges": 26274, + "repression": 26275, + "Étienne": 26276, + "311": 26277, + "Lauderdale": 26278, + "commodities": 26279, + "null": 26280, + "##rb": 26281, + "1720": 26282, + "gearbox": 26283, + "##reator": 26284, + "Ang": 26285, + "Forgotten": 26286, + "dubious": 26287, + "##rls": 26288, + "##dicative": 26289, + "##phate": 26290, + "Groove": 26291, + "Herrera": 26292, + "##çais": 26293, + "Collections": 26294, + "Maximus": 26295, + "##published": 26296, + "Fell": 26297, + "Qualification": 26298, + "filtering": 26299, + "##tized": 26300, + "Roe": 26301, + "hazards": 26302, + "##37": 26303, + "##lative": 26304, + "##tröm": 26305, + "Guadalupe": 26306, + "Tajikistan": 26307, + "Preliminary": 26308, + "fronted": 26309, + "glands": 26310, + "##paper": 26311, + "##iche": 26312, + "##iding": 26313, + "Cairns": 26314, + "rallies": 26315, + "Location": 26316, + "seduce": 26317, + "##mple": 26318, + "BYU": 26319, + "##itic": 26320, + "##FT": 26321, + "Carmichael": 26322, + "Prentice": 26323, + "songwriters": 26324, + "forefront": 26325, + "Physicians": 26326, + "##rille": 26327, + "##zee": 26328, + "Preparatory": 26329, + "##cherous": 26330, + "UV": 26331, + "##dized": 26332, + "Navarro": 26333, + "misses": 26334, + "##nney": 26335, + "Inland": 26336, + "resisting": 26337, + "##sect": 26338, + "Hurt": 26339, + "##lino": 26340, + "galaxies": 26341, + "##raze": 26342, + "Institutions": 26343, + "devote": 26344, + "##lamp": 26345, + "##ciating": 26346, + "baron": 26347, + "##bracing": 26348, + "Hess": 26349, + "operatic": 26350, + "##CL": 26351, + "##ος": 26352, + "Chevalier": 26353, + "Guiana": 26354, + "##lattered": 26355, + "Fed": 26356, + "##cuted": 26357, + "##smo": 26358, + "Skull": 26359, + "denies": 26360, + "236": 26361, + "Waller": 26362, + "##mah": 26363, + "Sakura": 26364, + "mole": 26365, + "nominate": 26366, + "sermons": 26367, + "##bering": 26368, + "widowed": 26369, + "##röm": 26370, + "Cavendish": 26371, + "##struction": 26372, + "Nehru": 26373, + "Revelation": 26374, + "doom": 26375, + "Gala": 26376, + "baking": 26377, + "Nr": 26378, + "Yourself": 26379, + "banning": 26380, + "Individuals": 26381, + "Sykes": 26382, + "orchestrated": 26383, + "630": 26384, + "Phone": 26385, + "steered": 26386, + "620": 26387, + "specialising": 26388, + "starvation": 26389, + "##AV": 26390, + "##alet": 26391, + "##upation": 26392, + "seductive": 26393, + "##jects": 26394, + "##zure": 26395, + "Tolkien": 26396, + "Benito": 26397, + "Wizards": 26398, + "Submarine": 26399, + "dictator": 26400, + "Duo": 26401, + "Caden": 26402, + "approx": 26403, + "basins": 26404, + "##nc": 26405, + "shrink": 26406, + "##icles": 26407, + "##sponsible": 26408, + "249": 26409, + "mit": 26410, + "outpost": 26411, + "##bayashi": 26412, + "##rouse": 26413, + "##tl": 26414, + "Jana": 26415, + "Lombard": 26416, + "RBIs": 26417, + "finalized": 26418, + "humanities": 26419, + "##function": 26420, + "Honorable": 26421, + "tomato": 26422, + "##iot": 26423, + "Pie": 26424, + "tee": 26425, + "##pect": 26426, + "Beaufort": 26427, + "Ferris": 26428, + "bucks": 26429, + "##graduate": 26430, + "##ocytes": 26431, + "Directory": 26432, + "anxiously": 26433, + "##nating": 26434, + "flanks": 26435, + "##Ds": 26436, + "virtues": 26437, + "##believable": 26438, + "Grades": 26439, + "criterion": 26440, + "manufactures": 26441, + "sourced": 26442, + "##balt": 26443, + "##dance": 26444, + "##tano": 26445, + "Ying": 26446, + "##BF": 26447, + "##sett": 26448, + "adequately": 26449, + "blacksmith": 26450, + "totaled": 26451, + "trapping": 26452, + "expanse": 26453, + "Historia": 26454, + "Worker": 26455, + "Sense": 26456, + "ascending": 26457, + "housekeeper": 26458, + "##oos": 26459, + "Crafts": 26460, + "Resurrection": 26461, + "##verty": 26462, + "encryption": 26463, + "##aris": 26464, + "##vat": 26465, + "##pox": 26466, + "##runk": 26467, + "##iability": 26468, + "gazes": 26469, + "spying": 26470, + "##ths": 26471, + "helmets": 26472, + "wired": 26473, + "##zophrenia": 26474, + "Cheung": 26475, + "WR": 26476, + "downloads": 26477, + "stereotypes": 26478, + "239": 26479, + "Lucknow": 26480, + "bleak": 26481, + "Bragg": 26482, + "hauling": 26483, + "##haft": 26484, + "prohibit": 26485, + "##ermined": 26486, + "##castle": 26487, + "barony": 26488, + "##hta": 26489, + "Typhoon": 26490, + "antibodies": 26491, + "##ascism": 26492, + "Hawthorn": 26493, + "Kurdistan": 26494, + "Minority": 26495, + "Gorge": 26496, + "Herr": 26497, + "appliances": 26498, + "disrupt": 26499, + "Drugs": 26500, + "Lazarus": 26501, + "##ilia": 26502, + "##ryo": 26503, + "##tany": 26504, + "Gotta": 26505, + "Masovian": 26506, + "Roxy": 26507, + "choreographed": 26508, + "##rissa": 26509, + "turbulent": 26510, + "##listed": 26511, + "Anatomy": 26512, + "exiting": 26513, + "##det": 26514, + "##isław": 26515, + "580": 26516, + "Kaufman": 26517, + "sage": 26518, + "##apa": 26519, + "Symposium": 26520, + "##rolls": 26521, + "Kaye": 26522, + "##ptera": 26523, + "##rocław": 26524, + "jerking": 26525, + "##menclature": 26526, + "Guo": 26527, + "M1": 26528, + "resurrected": 26529, + "trophies": 26530, + "##lard": 26531, + "Gathering": 26532, + "nestled": 26533, + "serpent": 26534, + "Dow": 26535, + "reservoirs": 26536, + "Claremont": 26537, + "arbitration": 26538, + "chronicle": 26539, + "eki": 26540, + "##arded": 26541, + "##zers": 26542, + "##mmoth": 26543, + "Congregational": 26544, + "Astronomical": 26545, + "NE": 26546, + "RA": 26547, + "Robson": 26548, + "Scotch": 26549, + "modelled": 26550, + "slashed": 26551, + "##imus": 26552, + "exceeds": 26553, + "##roper": 26554, + "##utile": 26555, + "Laughing": 26556, + "vascular": 26557, + "superficial": 26558, + "##arians": 26559, + "Barclay": 26560, + "Caucasian": 26561, + "classmate": 26562, + "sibling": 26563, + "Kimberly": 26564, + "Shreveport": 26565, + "##ilde": 26566, + "##liche": 26567, + "Cheney": 26568, + "Deportivo": 26569, + "Veracruz": 26570, + "berries": 26571, + "##lase": 26572, + "Bed": 26573, + "MI": 26574, + "Anatolia": 26575, + "Mindanao": 26576, + "broadband": 26577, + "##olia": 26578, + "##arte": 26579, + "##wab": 26580, + "darts": 26581, + "##immer": 26582, + "##uze": 26583, + "believers": 26584, + "ordinance": 26585, + "violate": 26586, + "##wheel": 26587, + "##ynth": 26588, + "Alongside": 26589, + "Coupe": 26590, + "Hobbs": 26591, + "arrondissement": 26592, + "earl": 26593, + "townland": 26594, + "##dote": 26595, + "##lihood": 26596, + "##sla": 26597, + "Ghosts": 26598, + "midfield": 26599, + "pulmonary": 26600, + "##eno": 26601, + "cues": 26602, + "##gol": 26603, + "##zda": 26604, + "322": 26605, + "Siena": 26606, + "Sultanate": 26607, + "Bradshaw": 26608, + "Pieter": 26609, + "##thical": 26610, + "Raceway": 26611, + "bared": 26612, + "competence": 26613, + "##ssent": 26614, + "Bet": 26615, + "##urer": 26616, + "##ła": 26617, + "Alistair": 26618, + "Göttingen": 26619, + "appropriately": 26620, + "forge": 26621, + "##osterone": 26622, + "##ugen": 26623, + "DL": 26624, + "345": 26625, + "convoys": 26626, + "inventions": 26627, + "##resses": 26628, + "##cturnal": 26629, + "Fay": 26630, + "Integration": 26631, + "slash": 26632, + "##roats": 26633, + "Widow": 26634, + "barking": 26635, + "##fant": 26636, + "1A": 26637, + "Hooper": 26638, + "##cona": 26639, + "##runched": 26640, + "unreliable": 26641, + "##emont": 26642, + "##esign": 26643, + "##stabulary": 26644, + "##stop": 26645, + "Journalists": 26646, + "bony": 26647, + "##iba": 26648, + "##trata": 26649, + "##ège": 26650, + "horrific": 26651, + "##bish": 26652, + "Jocelyn": 26653, + "##rmon": 26654, + "##apon": 26655, + "##cier": 26656, + "trainers": 26657, + "##ulatory": 26658, + "1753": 26659, + "BR": 26660, + "corpus": 26661, + "synthesized": 26662, + "##bidden": 26663, + "##rafford": 26664, + "Elgin": 26665, + "##entry": 26666, + "Doherty": 26667, + "clockwise": 26668, + "##played": 26669, + "spins": 26670, + "##ample": 26671, + "##bley": 26672, + "Cope": 26673, + "constructions": 26674, + "seater": 26675, + "warlord": 26676, + "Voyager": 26677, + "documenting": 26678, + "fairies": 26679, + "##viator": 26680, + "Lviv": 26681, + "jewellery": 26682, + "suites": 26683, + "##gold": 26684, + "Maia": 26685, + "NME": 26686, + "##eavor": 26687, + "##kus": 26688, + "Eugène": 26689, + "furnishings": 26690, + "##risto": 26691, + "MCC": 26692, + "Metropolis": 26693, + "Older": 26694, + "Telangana": 26695, + "##mpus": 26696, + "amplifier": 26697, + "supervising": 26698, + "1710": 26699, + "buffalo": 26700, + "cushion": 26701, + "terminating": 26702, + "##powering": 26703, + "steak": 26704, + "Quickly": 26705, + "contracting": 26706, + "dem": 26707, + "sarcastically": 26708, + "Elsa": 26709, + "##hein": 26710, + "bastards": 26711, + "narratives": 26712, + "Takes": 26713, + "304": 26714, + "composure": 26715, + "typing": 26716, + "variance": 26717, + "##ifice": 26718, + "Softball": 26719, + "##rations": 26720, + "McLaughlin": 26721, + "gaped": 26722, + "shrines": 26723, + "##hogany": 26724, + "Glamorgan": 26725, + "##icle": 26726, + "##nai": 26727, + "##ntin": 26728, + "Fleetwood": 26729, + "Woodland": 26730, + "##uxe": 26731, + "fictitious": 26732, + "shrugs": 26733, + "##iper": 26734, + "BWV": 26735, + "conform": 26736, + "##uckled": 26737, + "Launch": 26738, + "##ductory": 26739, + "##mized": 26740, + "Tad": 26741, + "##stituted": 26742, + "##free": 26743, + "Bel": 26744, + "Chávez": 26745, + "messing": 26746, + "quartz": 26747, + "##iculate": 26748, + "##folia": 26749, + "##lynn": 26750, + "ushered": 26751, + "##29": 26752, + "##ailing": 26753, + "dictated": 26754, + "Pony": 26755, + "##opsis": 26756, + "precinct": 26757, + "802": 26758, + "Plastic": 26759, + "##ughter": 26760, + "##uno": 26761, + "##porated": 26762, + "Denton": 26763, + "Matters": 26764, + "SPD": 26765, + "hating": 26766, + "##rogen": 26767, + "Essential": 26768, + "Deck": 26769, + "Dortmund": 26770, + "obscured": 26771, + "##maging": 26772, + "Earle": 26773, + "##bred": 26774, + "##ittle": 26775, + "##ropolis": 26776, + "saturated": 26777, + "##fiction": 26778, + "##ression": 26779, + "Pereira": 26780, + "Vinci": 26781, + "mute": 26782, + "warehouses": 26783, + "##ún": 26784, + "biographies": 26785, + "##icking": 26786, + "sealing": 26787, + "##dered": 26788, + "executing": 26789, + "pendant": 26790, + "##wives": 26791, + "murmurs": 26792, + "##oko": 26793, + "substrates": 26794, + "symmetrical": 26795, + "Susie": 26796, + "##mare": 26797, + "Yusuf": 26798, + "analogy": 26799, + "##urage": 26800, + "Lesley": 26801, + "limitation": 26802, + "##rby": 26803, + "##ío": 26804, + "disagreements": 26805, + "##mise": 26806, + "embroidered": 26807, + "nape": 26808, + "unarmed": 26809, + "Sumner": 26810, + "Stores": 26811, + "dwell": 26812, + "Wilcox": 26813, + "creditors": 26814, + "##rivatization": 26815, + "##shes": 26816, + "##amia": 26817, + "directs": 26818, + "recaptured": 26819, + "scouting": 26820, + "McGuire": 26821, + "cradle": 26822, + "##onnell": 26823, + "Sato": 26824, + "insulin": 26825, + "mercenary": 26826, + "tolerant": 26827, + "Macquarie": 26828, + "transitions": 26829, + "cradled": 26830, + "##berto": 26831, + "##ivism": 26832, + "##yotes": 26833, + "FF": 26834, + "Ke": 26835, + "Reach": 26836, + "##dbury": 26837, + "680": 26838, + "##bill": 26839, + "##oja": 26840, + "##sui": 26841, + "prairie": 26842, + "##ogan": 26843, + "reactive": 26844, + "##icient": 26845, + "##rits": 26846, + "Cyclone": 26847, + "Sirius": 26848, + "Survival": 26849, + "Pak": 26850, + "##coach": 26851, + "##trar": 26852, + "halves": 26853, + "Agatha": 26854, + "Opus": 26855, + "contrasts": 26856, + "##jection": 26857, + "ominous": 26858, + "##iden": 26859, + "Baylor": 26860, + "Woodrow": 26861, + "duct": 26862, + "fortification": 26863, + "intercourse": 26864, + "##rois": 26865, + "Colbert": 26866, + "envy": 26867, + "##isi": 26868, + "Afterward": 26869, + "geared": 26870, + "##flections": 26871, + "accelerate": 26872, + "##lenching": 26873, + "Witness": 26874, + "##rrer": 26875, + "Angelina": 26876, + "Material": 26877, + "assertion": 26878, + "misconduct": 26879, + "Nix": 26880, + "cringed": 26881, + "tingling": 26882, + "##eti": 26883, + "##gned": 26884, + "Everest": 26885, + "disturb": 26886, + "sturdy": 26887, + "##keepers": 26888, + "##vied": 26889, + "Profile": 26890, + "heavenly": 26891, + "##kova": 26892, + "##victed": 26893, + "translating": 26894, + "##sses": 26895, + "316": 26896, + "Invitational": 26897, + "Mention": 26898, + "martyr": 26899, + "##uristic": 26900, + "Barron": 26901, + "hardness": 26902, + "Nakamura": 26903, + "405": 26904, + "Genevieve": 26905, + "reflections": 26906, + "##falls": 26907, + "jurist": 26908, + "##LT": 26909, + "Pyramid": 26910, + "##yme": 26911, + "Shoot": 26912, + "heck": 26913, + "linguist": 26914, + "##tower": 26915, + "Ives": 26916, + "superiors": 26917, + "##leo": 26918, + "Achilles": 26919, + "##phological": 26920, + "Christophe": 26921, + "Padma": 26922, + "precedence": 26923, + "grassy": 26924, + "Oral": 26925, + "resurrection": 26926, + "##itting": 26927, + "clumsy": 26928, + "##lten": 26929, + "##rue": 26930, + "huts": 26931, + "##stars": 26932, + "Equal": 26933, + "##queduct": 26934, + "Devin": 26935, + "Gaga": 26936, + "diocesan": 26937, + "##plating": 26938, + "##upe": 26939, + "##graphers": 26940, + "Patch": 26941, + "Scream": 26942, + "hail": 26943, + "moaning": 26944, + "tracts": 26945, + "##hdi": 26946, + "Examination": 26947, + "outsider": 26948, + "##ergic": 26949, + "##oter": 26950, + "Archipelago": 26951, + "Havilland": 26952, + "greenish": 26953, + "tilting": 26954, + "Aleksandr": 26955, + "Konstantin": 26956, + "warship": 26957, + "##emann": 26958, + "##gelist": 26959, + "##ought": 26960, + "billionaire": 26961, + "##blivion": 26962, + "321": 26963, + "Hungarians": 26964, + "transplant": 26965, + "##jured": 26966, + "##fters": 26967, + "Corbin": 26968, + "autism": 26969, + "pitchers": 26970, + "Garner": 26971, + "thence": 26972, + "Scientology": 26973, + "transitioned": 26974, + "integrating": 26975, + "repetitive": 26976, + "##dant": 26977, + "Rene": 26978, + "vomit": 26979, + "##burne": 26980, + "1661": 26981, + "Researchers": 26982, + "Wallis": 26983, + "insulted": 26984, + "wavy": 26985, + "##wati": 26986, + "Ewing": 26987, + "excitedly": 26988, + "##kor": 26989, + "frescoes": 26990, + "injustice": 26991, + "##achal": 26992, + "##lumber": 26993, + "##úl": 26994, + "novella": 26995, + "##sca": 26996, + "Liv": 26997, + "##enstein": 26998, + "##river": 26999, + "monstrous": 27000, + "topping": 27001, + "downfall": 27002, + "looming": 27003, + "sinks": 27004, + "trillion": 27005, + "##pont": 27006, + "Effect": 27007, + "##phi": 27008, + "##urley": 27009, + "Sites": 27010, + "catchment": 27011, + "##H1": 27012, + "Hopper": 27013, + "##raiser": 27014, + "1642": 27015, + "Maccabi": 27016, + "lance": 27017, + "##chia": 27018, + "##sboro": 27019, + "NSA": 27020, + "branching": 27021, + "retorted": 27022, + "tensor": 27023, + "Immaculate": 27024, + "drumming": 27025, + "feeder": 27026, + "##mony": 27027, + "Dyer": 27028, + "homicide": 27029, + "Temeraire": 27030, + "fishes": 27031, + "protruding": 27032, + "skins": 27033, + "orchards": 27034, + "##nso": 27035, + "inlet": 27036, + "ventral": 27037, + "##finder": 27038, + "Asiatic": 27039, + "Sul": 27040, + "1688": 27041, + "Melinda": 27042, + "assigns": 27043, + "paranormal": 27044, + "gardening": 27045, + "Tau": 27046, + "calming": 27047, + "##inge": 27048, + "##crow": 27049, + "regimental": 27050, + "Nik": 27051, + "fastened": 27052, + "correlated": 27053, + "##gene": 27054, + "##rieve": 27055, + "Sick": 27056, + "##minster": 27057, + "##politan": 27058, + "hardwood": 27059, + "hurled": 27060, + "##ssler": 27061, + "Cinematography": 27062, + "rhyme": 27063, + "Montenegrin": 27064, + "Packard": 27065, + "debating": 27066, + "##itution": 27067, + "Helens": 27068, + "Trick": 27069, + "Museums": 27070, + "defiance": 27071, + "encompassed": 27072, + "##EE": 27073, + "##TU": 27074, + "##nees": 27075, + "##uben": 27076, + "##ünster": 27077, + "##nosis": 27078, + "435": 27079, + "Hagen": 27080, + "cinemas": 27081, + "Corbett": 27082, + "commended": 27083, + "##fines": 27084, + "##oman": 27085, + "bosses": 27086, + "ripe": 27087, + "scraping": 27088, + "##loc": 27089, + "filly": 27090, + "Saddam": 27091, + "pointless": 27092, + "Faust": 27093, + "Orléans": 27094, + "Syriac": 27095, + "##♭": 27096, + "longitude": 27097, + "##ropic": 27098, + "Alfa": 27099, + "bliss": 27100, + "gangster": 27101, + "##ckling": 27102, + "SL": 27103, + "blending": 27104, + "##eptide": 27105, + "##nner": 27106, + "bends": 27107, + "escorting": 27108, + "##bloid": 27109, + "##quis": 27110, + "burials": 27111, + "##sle": 27112, + "##è": 27113, + "Ambulance": 27114, + "insults": 27115, + "##gth": 27116, + "Antrim": 27117, + "unfolded": 27118, + "##missible": 27119, + "splendid": 27120, + "Cure": 27121, + "warily": 27122, + "Saigon": 27123, + "Waste": 27124, + "astonishment": 27125, + "boroughs": 27126, + "##VS": 27127, + "##dalgo": 27128, + "##reshing": 27129, + "##usage": 27130, + "rue": 27131, + "marital": 27132, + "versatile": 27133, + "unpaid": 27134, + "allotted": 27135, + "bacterium": 27136, + "##coil": 27137, + "##cue": 27138, + "Dorothea": 27139, + "IDF": 27140, + "##location": 27141, + "##yke": 27142, + "RPG": 27143, + "##tropical": 27144, + "devotees": 27145, + "liter": 27146, + "##pree": 27147, + "Johnstone": 27148, + "astronaut": 27149, + "attends": 27150, + "pollen": 27151, + "periphery": 27152, + "doctrines": 27153, + "meta": 27154, + "showered": 27155, + "##tyn": 27156, + "GO": 27157, + "Huh": 27158, + "laude": 27159, + "244": 27160, + "Amar": 27161, + "Christensen": 27162, + "Ping": 27163, + "Pontifical": 27164, + "Austen": 27165, + "raiding": 27166, + "realities": 27167, + "##dric": 27168, + "urges": 27169, + "##dek": 27170, + "Cambridgeshire": 27171, + "##otype": 27172, + "Cascade": 27173, + "Greenberg": 27174, + "Pact": 27175, + "##cognition": 27176, + "##aran": 27177, + "##urion": 27178, + "Riot": 27179, + "mimic": 27180, + "Eastwood": 27181, + "##imating": 27182, + "reversal": 27183, + "##blast": 27184, + "##henian": 27185, + "Pitchfork": 27186, + "##sunderstanding": 27187, + "Staten": 27188, + "WCW": 27189, + "lieu": 27190, + "##bard": 27191, + "##sang": 27192, + "experimenting": 27193, + "Aquino": 27194, + "##lums": 27195, + "TNT": 27196, + "Hannibal": 27197, + "catastrophic": 27198, + "##lsive": 27199, + "272": 27200, + "308": 27201, + "##otypic": 27202, + "41st": 27203, + "Highways": 27204, + "aggregator": 27205, + "##fluenza": 27206, + "Featured": 27207, + "Reece": 27208, + "dispatch": 27209, + "simulated": 27210, + "##BE": 27211, + "Communion": 27212, + "Vinnie": 27213, + "hardcover": 27214, + "inexpensive": 27215, + "til": 27216, + "##adores": 27217, + "groundwater": 27218, + "kicker": 27219, + "blogs": 27220, + "frenzy": 27221, + "##wala": 27222, + "dealings": 27223, + "erase": 27224, + "Anglia": 27225, + "##umour": 27226, + "Hapoel": 27227, + "Marquette": 27228, + "##raphic": 27229, + "##tives": 27230, + "consult": 27231, + "atrocities": 27232, + "concussion": 27233, + "##érard": 27234, + "Decree": 27235, + "ethanol": 27236, + "##aen": 27237, + "Rooney": 27238, + "##chemist": 27239, + "##hoot": 27240, + "1620": 27241, + "menacing": 27242, + "Schuster": 27243, + "##bearable": 27244, + "laborers": 27245, + "sultan": 27246, + "Juliana": 27247, + "erased": 27248, + "onstage": 27249, + "##ync": 27250, + "Eastman": 27251, + "##tick": 27252, + "hushed": 27253, + "##yrinth": 27254, + "Lexie": 27255, + "Wharton": 27256, + "Lev": 27257, + "##PL": 27258, + "Testing": 27259, + "Bangladeshi": 27260, + "##bba": 27261, + "##usions": 27262, + "communicated": 27263, + "integers": 27264, + "internship": 27265, + "societal": 27266, + "##odles": 27267, + "Loki": 27268, + "ET": 27269, + "Ghent": 27270, + "broadcasters": 27271, + "Unix": 27272, + "##auer": 27273, + "Kildare": 27274, + "Yamaha": 27275, + "##quencing": 27276, + "##zman": 27277, + "chilled": 27278, + "##rapped": 27279, + "##uant": 27280, + "Duval": 27281, + "sentiments": 27282, + "Oliveira": 27283, + "packets": 27284, + "Horne": 27285, + "##rient": 27286, + "Harlan": 27287, + "Mirage": 27288, + "invariant": 27289, + "##anger": 27290, + "##tensive": 27291, + "flexed": 27292, + "sweetness": 27293, + "##wson": 27294, + "alleviate": 27295, + "insulting": 27296, + "limo": 27297, + "Hahn": 27298, + "##llars": 27299, + "##hesia": 27300, + "##lapping": 27301, + "buys": 27302, + "##oaming": 27303, + "mocked": 27304, + "pursuits": 27305, + "scooted": 27306, + "##conscious": 27307, + "##ilian": 27308, + "Ballad": 27309, + "jackets": 27310, + "##kra": 27311, + "hilly": 27312, + "##cane": 27313, + "Scenic": 27314, + "McGraw": 27315, + "silhouette": 27316, + "whipping": 27317, + "##roduced": 27318, + "##wark": 27319, + "##chess": 27320, + "##rump": 27321, + "Lemon": 27322, + "calculus": 27323, + "demonic": 27324, + "##latine": 27325, + "Bharatiya": 27326, + "Govt": 27327, + "Que": 27328, + "Trilogy": 27329, + "Ducks": 27330, + "Suit": 27331, + "stairway": 27332, + "##ceipt": 27333, + "Isa": 27334, + "regulator": 27335, + "Automobile": 27336, + "flatly": 27337, + "##buster": 27338, + "##lank": 27339, + "Spartans": 27340, + "topography": 27341, + "Tavi": 27342, + "usable": 27343, + "Chartered": 27344, + "Fairchild": 27345, + "##sance": 27346, + "##vyn": 27347, + "Digest": 27348, + "nuclei": 27349, + "typhoon": 27350, + "##llon": 27351, + "Alvarez": 27352, + "DJs": 27353, + "Grimm": 27354, + "authoritative": 27355, + "firearm": 27356, + "##chschule": 27357, + "Origins": 27358, + "lair": 27359, + "unmistakable": 27360, + "##xial": 27361, + "##cribing": 27362, + "Mouth": 27363, + "##genesis": 27364, + "##shū": 27365, + "##gaon": 27366, + "##ulter": 27367, + "Jaya": 27368, + "Neck": 27369, + "##UN": 27370, + "##oing": 27371, + "##static": 27372, + "relativity": 27373, + "##mott": 27374, + "##utive": 27375, + "##esan": 27376, + "##uveau": 27377, + "BT": 27378, + "salts": 27379, + "##roa": 27380, + "Dustin": 27381, + "preoccupied": 27382, + "Novgorod": 27383, + "##asus": 27384, + "Magnum": 27385, + "tempting": 27386, + "##histling": 27387, + "##ilated": 27388, + "Musa": 27389, + "##ghty": 27390, + "Ashland": 27391, + "pubs": 27392, + "routines": 27393, + "##etto": 27394, + "Soto": 27395, + "257": 27396, + "Featuring": 27397, + "Augsburg": 27398, + "##alaya": 27399, + "Bit": 27400, + "loomed": 27401, + "expects": 27402, + "##abby": 27403, + "##ooby": 27404, + "Auschwitz": 27405, + "Pendleton": 27406, + "vodka": 27407, + "##sent": 27408, + "rescuing": 27409, + "systemic": 27410, + "##inet": 27411, + "##leg": 27412, + "Yun": 27413, + "applicant": 27414, + "revered": 27415, + "##nacht": 27416, + "##ndas": 27417, + "Muller": 27418, + "characterization": 27419, + "##patient": 27420, + "##roft": 27421, + "Carole": 27422, + "##asperated": 27423, + "Amiga": 27424, + "disconnected": 27425, + "gel": 27426, + "##cologist": 27427, + "Patriotic": 27428, + "rallied": 27429, + "assign": 27430, + "veterinary": 27431, + "installing": 27432, + "##cedural": 27433, + "258": 27434, + "Jang": 27435, + "Parisian": 27436, + "incarcerated": 27437, + "stalk": 27438, + "##iment": 27439, + "Jamal": 27440, + "McPherson": 27441, + "Palma": 27442, + "##oken": 27443, + "##viation": 27444, + "512": 27445, + "Rourke": 27446, + "irrational": 27447, + "##rippled": 27448, + "Devlin": 27449, + "erratic": 27450, + "##NI": 27451, + "##payers": 27452, + "Ni": 27453, + "engages": 27454, + "Portal": 27455, + "aesthetics": 27456, + "##rrogance": 27457, + "Milne": 27458, + "assassins": 27459, + "##rots": 27460, + "335": 27461, + "385": 27462, + "Cambodian": 27463, + "Females": 27464, + "fellows": 27465, + "si": 27466, + "##block": 27467, + "##otes": 27468, + "Jayne": 27469, + "Toro": 27470, + "flutter": 27471, + "##eera": 27472, + "Burr": 27473, + "##lanche": 27474, + "relaxation": 27475, + "##fra": 27476, + "Fitzroy": 27477, + "##undy": 27478, + "1751": 27479, + "261": 27480, + "comb": 27481, + "conglomerate": 27482, + "ribbons": 27483, + "veto": 27484, + "##Es": 27485, + "casts": 27486, + "##ege": 27487, + "1748": 27488, + "Ares": 27489, + "spears": 27490, + "spirituality": 27491, + "comet": 27492, + "##nado": 27493, + "##yeh": 27494, + "Veterinary": 27495, + "aquarium": 27496, + "yer": 27497, + "Councils": 27498, + "##oked": 27499, + "##ynamic": 27500, + "Malmö": 27501, + "remorse": 27502, + "auditions": 27503, + "drilled": 27504, + "Hoffmann": 27505, + "Moe": 27506, + "Nagoya": 27507, + "Yacht": 27508, + "##hakti": 27509, + "##race": 27510, + "##rrick": 27511, + "Talmud": 27512, + "coordinating": 27513, + "##EI": 27514, + "##bul": 27515, + "##his": 27516, + "##itors": 27517, + "##ligent": 27518, + "##uerra": 27519, + "Narayan": 27520, + "goaltender": 27521, + "taxa": 27522, + "##asures": 27523, + "Det": 27524, + "##mage": 27525, + "Infinite": 27526, + "Maid": 27527, + "bean": 27528, + "intriguing": 27529, + "##cription": 27530, + "gasps": 27531, + "socket": 27532, + "##mentary": 27533, + "##reus": 27534, + "sewing": 27535, + "transmitting": 27536, + "##different": 27537, + "##furbishment": 27538, + "##traction": 27539, + "Grimsby": 27540, + "sprawling": 27541, + "Shipyard": 27542, + "##destine": 27543, + "##hropic": 27544, + "##icked": 27545, + "trolley": 27546, + "##agi": 27547, + "##lesh": 27548, + "Josiah": 27549, + "invasions": 27550, + "Content": 27551, + "firefighters": 27552, + "intro": 27553, + "Lucifer": 27554, + "subunit": 27555, + "Sahib": 27556, + "Myrtle": 27557, + "inhibitor": 27558, + "maneuvers": 27559, + "##teca": 27560, + "Wrath": 27561, + "slippery": 27562, + "##versing": 27563, + "Shoes": 27564, + "##dial": 27565, + "##illiers": 27566, + "##luded": 27567, + "##mmal": 27568, + "##pack": 27569, + "handkerchief": 27570, + "##edestal": 27571, + "##stones": 27572, + "Fusion": 27573, + "cumulative": 27574, + "##mell": 27575, + "##cacia": 27576, + "##rudge": 27577, + "##utz": 27578, + "foe": 27579, + "storing": 27580, + "swiped": 27581, + "##meister": 27582, + "##orra": 27583, + "batter": 27584, + "strung": 27585, + "##venting": 27586, + "##kker": 27587, + "Doo": 27588, + "Taste": 27589, + "immensely": 27590, + "Fairbanks": 27591, + "Jarrett": 27592, + "Boogie": 27593, + "1746": 27594, + "mage": 27595, + "Kick": 27596, + "legislators": 27597, + "medial": 27598, + "##ilon": 27599, + "##logies": 27600, + "##ranton": 27601, + "Hybrid": 27602, + "##uters": 27603, + "Tide": 27604, + "deportation": 27605, + "Metz": 27606, + "##secration": 27607, + "##virus": 27608, + "UFO": 27609, + "##fell": 27610, + "##orage": 27611, + "##raction": 27612, + "##rrigan": 27613, + "1747": 27614, + "fabricated": 27615, + "##BM": 27616, + "##GR": 27617, + "##rter": 27618, + "muttering": 27619, + "theorist": 27620, + "##tamine": 27621, + "BMG": 27622, + "Kincaid": 27623, + "solvent": 27624, + "##azed": 27625, + "Thin": 27626, + "adorable": 27627, + "Wendell": 27628, + "ta": 27629, + "##viour": 27630, + "pulses": 27631, + "##pologies": 27632, + "counters": 27633, + "exposition": 27634, + "sewer": 27635, + "Luciano": 27636, + "Clancy": 27637, + "##angelo": 27638, + "##riars": 27639, + "Showtime": 27640, + "observes": 27641, + "frankly": 27642, + "##oppy": 27643, + "Bergman": 27644, + "lobes": 27645, + "timetable": 27646, + "##bri": 27647, + "##uest": 27648, + "FX": 27649, + "##dust": 27650, + "##genus": 27651, + "Glad": 27652, + "Helmut": 27653, + "Meridian": 27654, + "##besity": 27655, + "##ontaine": 27656, + "Revue": 27657, + "miracles": 27658, + "##titis": 27659, + "PP": 27660, + "bluff": 27661, + "syrup": 27662, + "307": 27663, + "Messiah": 27664, + "##erne": 27665, + "interfering": 27666, + "picturesque": 27667, + "unconventional": 27668, + "dipping": 27669, + "hurriedly": 27670, + "Kerman": 27671, + "248": 27672, + "Ethnic": 27673, + "Toward": 27674, + "acidic": 27675, + "Harrisburg": 27676, + "##65": 27677, + "intimidating": 27678, + "##aal": 27679, + "Jed": 27680, + "Pontiac": 27681, + "munitions": 27682, + "##nchen": 27683, + "growling": 27684, + "mausoleum": 27685, + "##ération": 27686, + "##wami": 27687, + "Cy": 27688, + "aerospace": 27689, + "caucus": 27690, + "Doing": 27691, + "##around": 27692, + "##miring": 27693, + "Cuthbert": 27694, + "##poradic": 27695, + "##rovisation": 27696, + "##wth": 27697, + "evaluating": 27698, + "##scraper": 27699, + "Belinda": 27700, + "owes": 27701, + "##sitic": 27702, + "##thermal": 27703, + "##fast": 27704, + "economists": 27705, + "##lishing": 27706, + "##uerre": 27707, + "##ân": 27708, + "credible": 27709, + "##koto": 27710, + "Fourteen": 27711, + "cones": 27712, + "##ebrates": 27713, + "bookstore": 27714, + "towels": 27715, + "##phony": 27716, + "Appearance": 27717, + "newscasts": 27718, + "##olin": 27719, + "Karin": 27720, + "Bingham": 27721, + "##elves": 27722, + "1680": 27723, + "306": 27724, + "disks": 27725, + "##lston": 27726, + "##secutor": 27727, + "Levant": 27728, + "##vout": 27729, + "Micro": 27730, + "snuck": 27731, + "##ogel": 27732, + "##racker": 27733, + "Exploration": 27734, + "drastic": 27735, + "##kening": 27736, + "Elsie": 27737, + "endowment": 27738, + "##utnant": 27739, + "Blaze": 27740, + "##rrosion": 27741, + "leaking": 27742, + "45th": 27743, + "##rug": 27744, + "##uernsey": 27745, + "760": 27746, + "Shapiro": 27747, + "cakes": 27748, + "##ehan": 27749, + "##mei": 27750, + "##ité": 27751, + "##kla": 27752, + "repetition": 27753, + "successively": 27754, + "Friendly": 27755, + "Île": 27756, + "Koreans": 27757, + "Au": 27758, + "Tirana": 27759, + "flourish": 27760, + "Spirits": 27761, + "Yao": 27762, + "reasoned": 27763, + "##leam": 27764, + "Consort": 27765, + "cater": 27766, + "marred": 27767, + "ordeal": 27768, + "supremacy": 27769, + "##ritable": 27770, + "Paisley": 27771, + "euro": 27772, + "healer": 27773, + "portico": 27774, + "wetland": 27775, + "##kman": 27776, + "restart": 27777, + "##habilitation": 27778, + "##zuka": 27779, + "##Script": 27780, + "emptiness": 27781, + "communion": 27782, + "##CF": 27783, + "##inhabited": 27784, + "##wamy": 27785, + "Casablanca": 27786, + "pulsed": 27787, + "##rrible": 27788, + "##safe": 27789, + "395": 27790, + "Dual": 27791, + "Terrorism": 27792, + "##urge": 27793, + "##found": 27794, + "##gnolia": 27795, + "Courage": 27796, + "patriarch": 27797, + "segregated": 27798, + "intrinsic": 27799, + "##liography": 27800, + "##phe": 27801, + "PD": 27802, + "convection": 27803, + "##icidal": 27804, + "Dharma": 27805, + "Jimmie": 27806, + "texted": 27807, + "constituents": 27808, + "twitch": 27809, + "##calated": 27810, + "##mitage": 27811, + "##ringing": 27812, + "415": 27813, + "milling": 27814, + "##geons": 27815, + "Armagh": 27816, + "Geometridae": 27817, + "evergreen": 27818, + "needy": 27819, + "reflex": 27820, + "template": 27821, + "##pina": 27822, + "Schubert": 27823, + "##bruck": 27824, + "##icted": 27825, + "##scher": 27826, + "##wildered": 27827, + "1749": 27828, + "Joanne": 27829, + "clearer": 27830, + "##narl": 27831, + "278": 27832, + "Print": 27833, + "automation": 27834, + "consciously": 27835, + "flashback": 27836, + "occupations": 27837, + "##ests": 27838, + "Casimir": 27839, + "differentiated": 27840, + "policing": 27841, + "repay": 27842, + "##aks": 27843, + "##gnesium": 27844, + "Evaluation": 27845, + "commotion": 27846, + "##CM": 27847, + "##smopolitan": 27848, + "Clapton": 27849, + "mitochondrial": 27850, + "Kobe": 27851, + "1752": 27852, + "Ignoring": 27853, + "Vincenzo": 27854, + "Wet": 27855, + "bandage": 27856, + "##rassed": 27857, + "##unate": 27858, + "Maris": 27859, + "##eted": 27860, + "##hetical": 27861, + "figuring": 27862, + "##eit": 27863, + "##nap": 27864, + "leopard": 27865, + "strategically": 27866, + "##reer": 27867, + "Fen": 27868, + "Iain": 27869, + "##ggins": 27870, + "##pipe": 27871, + "Matteo": 27872, + "McIntyre": 27873, + "##chord": 27874, + "##feng": 27875, + "Romani": 27876, + "asshole": 27877, + "flopped": 27878, + "reassure": 27879, + "Founding": 27880, + "Styles": 27881, + "Torino": 27882, + "patrolling": 27883, + "##erging": 27884, + "##ibrating": 27885, + "##ructural": 27886, + "sincerity": 27887, + "##ät": 27888, + "##teacher": 27889, + "Juliette": 27890, + "##cé": 27891, + "##hog": 27892, + "##idated": 27893, + "##span": 27894, + "Winfield": 27895, + "##fender": 27896, + "##nast": 27897, + "##pliant": 27898, + "1690": 27899, + "Bai": 27900, + "Je": 27901, + "Saharan": 27902, + "expands": 27903, + "Bolshevik": 27904, + "rotate": 27905, + "##root": 27906, + "Britannia": 27907, + "Severn": 27908, + "##cini": 27909, + "##gering": 27910, + "##say": 27911, + "sly": 27912, + "Steps": 27913, + "insertion": 27914, + "rooftop": 27915, + "Piece": 27916, + "cuffs": 27917, + "plausible": 27918, + "##zai": 27919, + "Provost": 27920, + "semantic": 27921, + "##data": 27922, + "##vade": 27923, + "##cimal": 27924, + "IPA": 27925, + "indictment": 27926, + "Libraries": 27927, + "flaming": 27928, + "highlands": 27929, + "liberties": 27930, + "##pio": 27931, + "Elders": 27932, + "aggressively": 27933, + "##pecific": 27934, + "Decision": 27935, + "pigeon": 27936, + "nominally": 27937, + "descriptive": 27938, + "adjustments": 27939, + "equestrian": 27940, + "heaving": 27941, + "##mour": 27942, + "##dives": 27943, + "##fty": 27944, + "##yton": 27945, + "intermittent": 27946, + "##naming": 27947, + "##sets": 27948, + "Calvert": 27949, + "Casper": 27950, + "Tarzan": 27951, + "##kot": 27952, + "Ramírez": 27953, + "##IB": 27954, + "##erus": 27955, + "Gustavo": 27956, + "Roller": 27957, + "vaulted": 27958, + "##solation": 27959, + "##formatics": 27960, + "##tip": 27961, + "Hunger": 27962, + "colloquially": 27963, + "handwriting": 27964, + "hearth": 27965, + "launcher": 27966, + "##idian": 27967, + "##ilities": 27968, + "##lind": 27969, + "##locating": 27970, + "Magdalena": 27971, + "Soo": 27972, + "clubhouse": 27973, + "##kushima": 27974, + "##ruit": 27975, + "Bogotá": 27976, + "Organic": 27977, + "Worship": 27978, + "##Vs": 27979, + "##wold": 27980, + "upbringing": 27981, + "##kick": 27982, + "groundbreaking": 27983, + "##urable": 27984, + "##ván": 27985, + "repulsed": 27986, + "##dira": 27987, + "##ditional": 27988, + "##ici": 27989, + "melancholy": 27990, + "##bodied": 27991, + "##cchi": 27992, + "404": 27993, + "concurrency": 27994, + "H₂O": 27995, + "bouts": 27996, + "##gami": 27997, + "288": 27998, + "Leto": 27999, + "troll": 28000, + "##lak": 28001, + "advising": 28002, + "bundled": 28003, + "##nden": 28004, + "lipstick": 28005, + "littered": 28006, + "##leading": 28007, + "##mogeneous": 28008, + "Experiment": 28009, + "Nikola": 28010, + "grove": 28011, + "##ogram": 28012, + "Mace": 28013, + "##jure": 28014, + "cheat": 28015, + "Annabelle": 28016, + "Tori": 28017, + "lurking": 28018, + "Emery": 28019, + "Walden": 28020, + "##riz": 28021, + "paints": 28022, + "Markets": 28023, + "brutality": 28024, + "overrun": 28025, + "##agu": 28026, + "##sat": 28027, + "din": 28028, + "ostensibly": 28029, + "Fielding": 28030, + "flees": 28031, + "##eron": 28032, + "Pound": 28033, + "ornaments": 28034, + "tornadoes": 28035, + "##nikov": 28036, + "##organisation": 28037, + "##reen": 28038, + "##Works": 28039, + "##ldred": 28040, + "##olten": 28041, + "##stillery": 28042, + "soluble": 28043, + "Mata": 28044, + "Grimes": 28045, + "Léon": 28046, + "##NF": 28047, + "coldly": 28048, + "permitting": 28049, + "##inga": 28050, + "##reaked": 28051, + "Agents": 28052, + "hostess": 28053, + "##dl": 28054, + "Dyke": 28055, + "Kota": 28056, + "avail": 28057, + "orderly": 28058, + "##saur": 28059, + "##sities": 28060, + "Arroyo": 28061, + "##ceps": 28062, + "##egro": 28063, + "Hawke": 28064, + "Noctuidae": 28065, + "html": 28066, + "seminar": 28067, + "##ggles": 28068, + "##wasaki": 28069, + "Clube": 28070, + "recited": 28071, + "##sace": 28072, + "Ascension": 28073, + "Fitness": 28074, + "dough": 28075, + "##ixel": 28076, + "Nationale": 28077, + "##solidate": 28078, + "pulpit": 28079, + "vassal": 28080, + "570": 28081, + "Annapolis": 28082, + "bladder": 28083, + "phylogenetic": 28084, + "##iname": 28085, + "convertible": 28086, + "##ppan": 28087, + "Comet": 28088, + "paler": 28089, + "##definite": 28090, + "Spot": 28091, + "##dices": 28092, + "frequented": 28093, + "Apostles": 28094, + "slalom": 28095, + "##ivision": 28096, + "##mana": 28097, + "##runcated": 28098, + "Trojan": 28099, + "##agger": 28100, + "##iq": 28101, + "##league": 28102, + "Concept": 28103, + "Controller": 28104, + "##barian": 28105, + "##curate": 28106, + "##spersed": 28107, + "##tring": 28108, + "engulfed": 28109, + "inquired": 28110, + "##hmann": 28111, + "286": 28112, + "##dict": 28113, + "##osy": 28114, + "##raw": 28115, + "MacKenzie": 28116, + "su": 28117, + "##ienced": 28118, + "##iggs": 28119, + "##quitaine": 28120, + "bisexual": 28121, + "##noon": 28122, + "runways": 28123, + "subsp": 28124, + "##!": 28125, + "##\"": 28126, + "###": 28127, + "##$": 28128, + "##%": 28129, + "##&": 28130, + "##'": 28131, + "##(": 28132, + "##)": 28133, + "##*": 28134, + "##+": 28135, + "##,": 28136, + "##-": 28137, + "##.": 28138, + "##/": 28139, + "##:": 28140, + "##;": 28141, + "##<": 28142, + "##=": 28143, + "##>": 28144, + "##?": 28145, + "##@": 28146, + "##[": 28147, + "##\\": 28148, + "##]": 28149, + "##^": 28150, + "##_": 28151, + "##`": 28152, + "##{": 28153, + "##|": 28154, + "##}": 28155, + "##~": 28156, + "##¡": 28157, + "##¢": 28158, + "##£": 28159, + "##¥": 28160, + "##§": 28161, + "##¨": 28162, + "##©": 28163, + "##ª": 28164, + "##«": 28165, + "##¬": 28166, + "##®": 28167, + "##±": 28168, + "##´": 28169, + "##µ": 28170, + "##¶": 28171, + "##·": 28172, + "##¹": 28173, + "##º": 28174, + "##»": 28175, + "##¼": 28176, + "##¾": 28177, + "##¿": 28178, + "##À": 28179, + "##Á": 28180, + "##Â": 28181, + "##Ä": 28182, + "##Å": 28183, + "##Æ": 28184, + "##Ç": 28185, + "##È": 28186, + "##É": 28187, + "##Í": 28188, + "##Î": 28189, + "##Ñ": 28190, + "##Ó": 28191, + "##Ö": 28192, + "##×": 28193, + "##Ø": 28194, + "##Ú": 28195, + "##Ü": 28196, + "##Þ": 28197, + "##â": 28198, + "##ã": 28199, + "##æ": 28200, + "##ç": 28201, + "##î": 28202, + "##ï": 28203, + "##ð": 28204, + "##ñ": 28205, + "##ô": 28206, + "##õ": 28207, + "##÷": 28208, + "##û": 28209, + "##þ": 28210, + "##ÿ": 28211, + "##Ā": 28212, + "##ą": 28213, + "##Ć": 28214, + "##Č": 28215, + "##ď": 28216, + "##Đ": 28217, + "##đ": 28218, + "##ē": 28219, + "##ė": 28220, + "##ę": 28221, + "##ě": 28222, + "##ğ": 28223, + "##ġ": 28224, + "##Ħ": 28225, + "##ħ": 28226, + "##ĩ": 28227, + "##Ī": 28228, + "##İ": 28229, + "##ļ": 28230, + "##Ľ": 28231, + "##ľ": 28232, + "##Ł": 28233, + "##ņ": 28234, + "##ň": 28235, + "##ŋ": 28236, + "##Ō": 28237, + "##ŏ": 28238, + "##ő": 28239, + "##Œ": 28240, + "##œ": 28241, + "##ř": 28242, + "##Ś": 28243, + "##ś": 28244, + "##Ş": 28245, + "##Š": 28246, + "##Ţ": 28247, + "##ţ": 28248, + "##ť": 28249, + "##ũ": 28250, + "##ŭ": 28251, + "##ů": 28252, + "##ű": 28253, + "##ų": 28254, + "##ŵ": 28255, + "##ŷ": 28256, + "##ź": 28257, + "##Ż": 28258, + "##ż": 28259, + "##Ž": 28260, + "##ž": 28261, + "##Ə": 28262, + "##ƒ": 28263, + "##ơ": 28264, + "##ư": 28265, + "##ǎ": 28266, + "##ǐ": 28267, + "##ǒ": 28268, + "##ǔ": 28269, + "##ǫ": 28270, + "##Ș": 28271, + "##Ț": 28272, + "##ț": 28273, + "##ɐ": 28274, + "##ɑ": 28275, + "##ɔ": 28276, + "##ɕ": 28277, + "##ə": 28278, + "##ɛ": 28279, + "##ɡ": 28280, + "##ɣ": 28281, + "##ɨ": 28282, + "##ɪ": 28283, + "##ɲ": 28284, + "##ɾ": 28285, + "##ʀ": 28286, + "##ʁ": 28287, + "##ʂ": 28288, + "##ʃ": 28289, + "##ʊ": 28290, + "##ʋ": 28291, + "##ʌ": 28292, + "##ʐ": 28293, + "##ʑ": 28294, + "##ʒ": 28295, + "##ʔ": 28296, + "##ʰ": 28297, + "##ʲ": 28298, + "##ʳ": 28299, + "##ʷ": 28300, + "##ʻ": 28301, + "##ʼ": 28302, + "##ʾ": 28303, + "##ʿ": 28304, + "##ˈ": 28305, + "##ː": 28306, + "##ˡ": 28307, + "##ˢ": 28308, + "##ˣ": 28309, + "##́": 28310, + "##̃": 28311, + "##̍": 28312, + "##̯": 28313, + "##͡": 28314, + "##Α": 28315, + "##Β": 28316, + "##Γ": 28317, + "##Δ": 28318, + "##Ε": 28319, + "##Η": 28320, + "##Θ": 28321, + "##Ι": 28322, + "##Κ": 28323, + "##Λ": 28324, + "##Μ": 28325, + "##Ν": 28326, + "##Ο": 28327, + "##Π": 28328, + "##Σ": 28329, + "##Τ": 28330, + "##Φ": 28331, + "##Χ": 28332, + "##Ψ": 28333, + "##Ω": 28334, + "##ά": 28335, + "##έ": 28336, + "##ή": 28337, + "##ί": 28338, + "##β": 28339, + "##γ": 28340, + "##δ": 28341, + "##ε": 28342, + "##ζ": 28343, + "##η": 28344, + "##θ": 28345, + "##ι": 28346, + "##κ": 28347, + "##λ": 28348, + "##μ": 28349, + "##ξ": 28350, + "##ο": 28351, + "##π": 28352, + "##ρ": 28353, + "##σ": 28354, + "##τ": 28355, + "##υ": 28356, + "##φ": 28357, + "##χ": 28358, + "##ψ": 28359, + "##ω": 28360, + "##ό": 28361, + "##ύ": 28362, + "##ώ": 28363, + "##І": 28364, + "##Ј": 28365, + "##А": 28366, + "##Б": 28367, + "##В": 28368, + "##Г": 28369, + "##Д": 28370, + "##Е": 28371, + "##Ж": 28372, + "##З": 28373, + "##И": 28374, + "##К": 28375, + "##Л": 28376, + "##М": 28377, + "##Н": 28378, + "##О": 28379, + "##П": 28380, + "##Р": 28381, + "##С": 28382, + "##Т": 28383, + "##У": 28384, + "##Ф": 28385, + "##Х": 28386, + "##Ц": 28387, + "##Ч": 28388, + "##Ш": 28389, + "##Э": 28390, + "##Ю": 28391, + "##Я": 28392, + "##б": 28393, + "##в": 28394, + "##г": 28395, + "##д": 28396, + "##ж": 28397, + "##з": 28398, + "##к": 28399, + "##л": 28400, + "##м": 28401, + "##п": 28402, + "##с": 28403, + "##т": 28404, + "##у": 28405, + "##ф": 28406, + "##х": 28407, + "##ц": 28408, + "##ч": 28409, + "##ш": 28410, + "##щ": 28411, + "##ъ": 28412, + "##ы": 28413, + "##ь": 28414, + "##э": 28415, + "##ю": 28416, + "##ё": 28417, + "##і": 28418, + "##ї": 28419, + "##ј": 28420, + "##њ": 28421, + "##ћ": 28422, + "##Ա": 28423, + "##Հ": 28424, + "##ա": 28425, + "##ե": 28426, + "##ի": 28427, + "##կ": 28428, + "##մ": 28429, + "##յ": 28430, + "##ն": 28431, + "##ո": 28432, + "##ս": 28433, + "##տ": 28434, + "##ր": 28435, + "##ւ": 28436, + "##ְ": 28437, + "##ִ": 28438, + "##ֵ": 28439, + "##ֶ": 28440, + "##ַ": 28441, + "##ָ": 28442, + "##ֹ": 28443, + "##ּ": 28444, + "##א": 28445, + "##ב": 28446, + "##ג": 28447, + "##ד": 28448, + "##ה": 28449, + "##ו": 28450, + "##ז": 28451, + "##ח": 28452, + "##ט": 28453, + "##י": 28454, + "##כ": 28455, + "##ל": 28456, + "##ם": 28457, + "##מ": 28458, + "##ן": 28459, + "##נ": 28460, + "##ס": 28461, + "##ע": 28462, + "##פ": 28463, + "##צ": 28464, + "##ק": 28465, + "##ר": 28466, + "##ש": 28467, + "##ת": 28468, + "##،": 28469, + "##ء": 28470, + "##آ": 28471, + "##أ": 28472, + "##إ": 28473, + "##ئ": 28474, + "##ا": 28475, + "##ب": 28476, + "##ت": 28477, + "##ث": 28478, + "##ج": 28479, + "##ح": 28480, + "##خ": 28481, + "##ذ": 28482, + "##ز": 28483, + "##س": 28484, + "##ش": 28485, + "##ص": 28486, + "##ض": 28487, + "##ط": 28488, + "##ظ": 28489, + "##ع": 28490, + "##غ": 28491, + "##ف": 28492, + "##ق": 28493, + "##ك": 28494, + "##ل": 28495, + "##و": 28496, + "##ى": 28497, + "##َ": 28498, + "##ِ": 28499, + "##ٹ": 28500, + "##پ": 28501, + "##چ": 28502, + "##ک": 28503, + "##گ": 28504, + "##ہ": 28505, + "##ی": 28506, + "##ے": 28507, + "##ं": 28508, + "##आ": 28509, + "##क": 28510, + "##ग": 28511, + "##च": 28512, + "##ज": 28513, + "##ण": 28514, + "##त": 28515, + "##द": 28516, + "##ध": 28517, + "##न": 28518, + "##प": 28519, + "##ब": 28520, + "##भ": 28521, + "##म": 28522, + "##य": 28523, + "##र": 28524, + "##ल": 28525, + "##व": 28526, + "##श": 28527, + "##ष": 28528, + "##स": 28529, + "##ह": 28530, + "##ा": 28531, + "##ि": 28532, + "##ी": 28533, + "##ु": 28534, + "##े": 28535, + "##ो": 28536, + "##्": 28537, + "##।": 28538, + "##॥": 28539, + "##আ": 28540, + "##ই": 28541, + "##এ": 28542, + "##ও": 28543, + "##ক": 28544, + "##খ": 28545, + "##গ": 28546, + "##চ": 28547, + "##ছ": 28548, + "##জ": 28549, + "##ট": 28550, + "##ত": 28551, + "##থ": 28552, + "##দ": 28553, + "##ধ": 28554, + "##ন": 28555, + "##প": 28556, + "##ব": 28557, + "##ম": 28558, + "##য": 28559, + "##র": 28560, + "##ল": 28561, + "##শ": 28562, + "##স": 28563, + "##হ": 28564, + "##়": 28565, + "##া": 28566, + "##ি": 28567, + "##ী": 28568, + "##ু": 28569, + "##ে": 28570, + "##ো": 28571, + "##্": 28572, + "##য়": 28573, + "##க": 28574, + "##த": 28575, + "##ப": 28576, + "##ம": 28577, + "##ய": 28578, + "##ர": 28579, + "##ல": 28580, + "##வ": 28581, + "##ா": 28582, + "##ி": 28583, + "##ு": 28584, + "##்": 28585, + "##ร": 28586, + "##་": 28587, + "##ག": 28588, + "##ང": 28589, + "##ད": 28590, + "##ན": 28591, + "##བ": 28592, + "##མ": 28593, + "##ར": 28594, + "##ལ": 28595, + "##ས": 28596, + "##ི": 28597, + "##ུ": 28598, + "##ེ": 28599, + "##ོ": 28600, + "##ა": 28601, + "##ე": 28602, + "##ი": 28603, + "##ლ": 28604, + "##ნ": 28605, + "##ო": 28606, + "##რ": 28607, + "##ს": 28608, + "##ᴬ": 28609, + "##ᴵ": 28610, + "##ᵀ": 28611, + "##ᵃ": 28612, + "##ᵇ": 28613, + "##ᵈ": 28614, + "##ᵉ": 28615, + "##ᵍ": 28616, + "##ᵏ": 28617, + "##ᵐ": 28618, + "##ᵒ": 28619, + "##ᵖ": 28620, + "##ᵗ": 28621, + "##ᵘ": 28622, + "##ᵣ": 28623, + "##ᵤ": 28624, + "##ᵥ": 28625, + "##ᶜ": 28626, + "##ᶠ": 28627, + "##ḍ": 28628, + "##Ḥ": 28629, + "##ḥ": 28630, + "##Ḩ": 28631, + "##ḩ": 28632, + "##ḳ": 28633, + "##ṃ": 28634, + "##ṅ": 28635, + "##ṇ": 28636, + "##ṛ": 28637, + "##ṣ": 28638, + "##ṭ": 28639, + "##ạ": 28640, + "##ả": 28641, + "##ấ": 28642, + "##ầ": 28643, + "##ẩ": 28644, + "##ậ": 28645, + "##ắ": 28646, + "##ế": 28647, + "##ề": 28648, + "##ể": 28649, + "##ễ": 28650, + "##ệ": 28651, + "##ị": 28652, + "##ọ": 28653, + "##ố": 28654, + "##ồ": 28655, + "##ổ": 28656, + "##ộ": 28657, + "##ớ": 28658, + "##ờ": 28659, + "##ợ": 28660, + "##ụ": 28661, + "##ủ": 28662, + "##ứ": 28663, + "##ừ": 28664, + "##ử": 28665, + "##ữ": 28666, + "##ự": 28667, + "##ỳ": 28668, + "##ỹ": 28669, + "##ἀ": 28670, + "##ἐ": 28671, + "##ὁ": 28672, + "##ὐ": 28673, + "##ὰ": 28674, + "##ὶ": 28675, + "##ὸ": 28676, + "##ῆ": 28677, + "##ῖ": 28678, + "##ῦ": 28679, + "##ῶ": 28680, + "##‐": 28681, + "##‑": 28682, + "##‒": 28683, + "##–": 28684, + "##—": 28685, + "##―": 28686, + "##‖": 28687, + "##‘": 28688, + "##’": 28689, + "##‚": 28690, + "##“": 28691, + "##”": 28692, + "##„": 28693, + "##†": 28694, + "##‡": 28695, + "##•": 28696, + "##…": 28697, + "##‰": 28698, + "##′": 28699, + "##″": 28700, + "##⁄": 28701, + "##⁰": 28702, + "##ⁱ": 28703, + "##⁴": 28704, + "##⁵": 28705, + "##⁶": 28706, + "##⁷": 28707, + "##⁸": 28708, + "##⁹": 28709, + "##⁻": 28710, + "##ⁿ": 28711, + "##₅": 28712, + "##₆": 28713, + "##₇": 28714, + "##₈": 28715, + "##₉": 28716, + "##₊": 28717, + "##₍": 28718, + "##₎": 28719, + "##ₐ": 28720, + "##ₑ": 28721, + "##ₒ": 28722, + "##ₓ": 28723, + "##ₕ": 28724, + "##ₖ": 28725, + "##ₘ": 28726, + "##ₚ": 28727, + "##ₛ": 28728, + "##ₜ": 28729, + "##₤": 28730, + "##€": 28731, + "##₱": 28732, + "##₹": 28733, + "##ℓ": 28734, + "##№": 28735, + "##ℝ": 28736, + "##⅓": 28737, + "##←": 28738, + "##↑": 28739, + "##→": 28740, + "##↔": 28741, + "##⇌": 28742, + "##⇒": 28743, + "##∂": 28744, + "##∈": 28745, + "##∗": 28746, + "##∘": 28747, + "##√": 28748, + "##∞": 28749, + "##∧": 28750, + "##∨": 28751, + "##∩": 28752, + "##∪": 28753, + "##≈": 28754, + "##≠": 28755, + "##≡": 28756, + "##≤": 28757, + "##≥": 28758, + "##⊂": 28759, + "##⊆": 28760, + "##⊕": 28761, + "##⋅": 28762, + "##─": 28763, + "##│": 28764, + "##■": 28765, + "##●": 28766, + "##★": 28767, + "##☆": 28768, + "##☉": 28769, + "##♠": 28770, + "##♣": 28771, + "##♥": 28772, + "##♦": 28773, + "##♯": 28774, + "##⟨": 28775, + "##⟩": 28776, + "##ⱼ": 28777, + "##、": 28778, + "##。": 28779, + "##《": 28780, + "##》": 28781, + "##「": 28782, + "##」": 28783, + "##『": 28784, + "##』": 28785, + "##〜": 28786, + "##い": 28787, + "##う": 28788, + "##え": 28789, + "##お": 28790, + "##か": 28791, + "##き": 28792, + "##く": 28793, + "##け": 28794, + "##こ": 28795, + "##さ": 28796, + "##し": 28797, + "##す": 28798, + "##せ": 28799, + "##そ": 28800, + "##た": 28801, + "##ち": 28802, + "##つ": 28803, + "##て": 28804, + "##と": 28805, + "##な": 28806, + "##に": 28807, + "##の": 28808, + "##は": 28809, + "##ひ": 28810, + "##ま": 28811, + "##み": 28812, + "##む": 28813, + "##め": 28814, + "##も": 28815, + "##や": 28816, + "##ゆ": 28817, + "##よ": 28818, + "##ら": 28819, + "##り": 28820, + "##る": 28821, + "##れ": 28822, + "##ん": 28823, + "##ア": 28824, + "##ィ": 28825, + "##イ": 28826, + "##ウ": 28827, + "##エ": 28828, + "##オ": 28829, + "##カ": 28830, + "##ガ": 28831, + "##キ": 28832, + "##ク": 28833, + "##グ": 28834, + "##コ": 28835, + "##サ": 28836, + "##シ": 28837, + "##ジ": 28838, + "##ス": 28839, + "##ズ": 28840, + "##タ": 28841, + "##ダ": 28842, + "##ッ": 28843, + "##テ": 28844, + "##デ": 28845, + "##ト": 28846, + "##ド": 28847, + "##ナ": 28848, + "##ニ": 28849, + "##ハ": 28850, + "##バ": 28851, + "##パ": 28852, + "##フ": 28853, + "##ブ": 28854, + "##プ": 28855, + "##マ": 28856, + "##ミ": 28857, + "##ム": 28858, + "##ャ": 28859, + "##ュ": 28860, + "##ラ": 28861, + "##リ": 28862, + "##ル": 28863, + "##レ": 28864, + "##ロ": 28865, + "##ン": 28866, + "##・": 28867, + "##ー": 28868, + "##一": 28869, + "##三": 28870, + "##上": 28871, + "##下": 28872, + "##中": 28873, + "##事": 28874, + "##二": 28875, + "##井": 28876, + "##京": 28877, + "##人": 28878, + "##亻": 28879, + "##仁": 28880, + "##佐": 28881, + "##侍": 28882, + "##光": 28883, + "##公": 28884, + "##力": 28885, + "##北": 28886, + "##十": 28887, + "##南": 28888, + "##原": 28889, + "##口": 28890, + "##史": 28891, + "##司": 28892, + "##吉": 28893, + "##同": 28894, + "##和": 28895, + "##囗": 28896, + "##国": 28897, + "##國": 28898, + "##土": 28899, + "##城": 28900, + "##士": 28901, + "##大": 28902, + "##天": 28903, + "##太": 28904, + "##夫": 28905, + "##女": 28906, + "##子": 28907, + "##宀": 28908, + "##安": 28909, + "##宮": 28910, + "##宿": 28911, + "##小": 28912, + "##尚": 28913, + "##山": 28914, + "##島": 28915, + "##川": 28916, + "##州": 28917, + "##平": 28918, + "##年": 28919, + "##心": 28920, + "##愛": 28921, + "##戸": 28922, + "##文": 28923, + "##新": 28924, + "##方": 28925, + "##日": 28926, + "##明": 28927, + "##星": 28928, + "##書": 28929, + "##月": 28930, + "##木": 28931, + "##本": 28932, + "##李": 28933, + "##村": 28934, + "##東": 28935, + "##松": 28936, + "##林": 28937, + "##正": 28938, + "##武": 28939, + "##氏": 28940, + "##水": 28941, + "##氵": 28942, + "##江": 28943, + "##河": 28944, + "##海": 28945, + "##版": 28946, + "##犬": 28947, + "##王": 28948, + "##生": 28949, + "##田": 28950, + "##白": 28951, + "##皇": 28952, + "##省": 28953, + "##真": 28954, + "##石": 28955, + "##社": 28956, + "##神": 28957, + "##竹": 28958, + "##美": 28959, + "##義": 28960, + "##花": 28961, + "##藤": 28962, + "##西": 28963, + "##谷": 28964, + "##車": 28965, + "##辶": 28966, + "##道": 28967, + "##郎": 28968, + "##郡": 28969, + "##部": 28970, + "##野": 28971, + "##金": 28972, + "##長": 28973, + "##門": 28974, + "##陽": 28975, + "##青": 28976, + "##食": 28977, + "##馬": 28978, + "##高": 28979, + "##龍": 28980, + "##龸": 28981, + "##사": 28982, + "##씨": 28983, + "##의": 28984, + "##이": 28985, + "##한": 28986, + "##fi": 28987, + "##fl": 28988, + "##!": 28989, + "##(": 28990, + "##)": 28991, + "##,": 28992, + "##-": 28993, + "##/": 28994, + "##:": 28995 + } + } +} \ No newline at end of file diff --git a/artifacts/onnx_int8/tokenizer_config.json b/artifacts/onnx_int8/tokenizer_config.json new file mode 100644 index 0000000000000000000000000000000000000000..4a3691938ce42b4c9b9ce9af3171588b50a6d09d --- /dev/null +++ b/artifacts/onnx_int8/tokenizer_config.json @@ -0,0 +1,14 @@ +{ + "backend": "tokenizers", + "cls_token": "[CLS]", + "do_lower_case": false, + "is_local": true, + "mask_token": "[MASK]", + "model_max_length": 1000000000000000019884624838656, + "pad_token": "[PAD]", + "sep_token": "[SEP]", + "strip_accents": null, + "tokenize_chinese_chars": true, + "tokenizer_class": "BertTokenizer", + "unk_token": "[UNK]" +} diff --git a/artifacts/onnx_int8/training_metadata.json b/artifacts/onnx_int8/training_metadata.json new file mode 100644 index 0000000000000000000000000000000000000000..bf483f08a3ed338aab1fe662270992732848035f --- /dev/null +++ b/artifacts/onnx_int8/training_metadata.json @@ -0,0 +1,21 @@ +{ + "base_model": "emilyalsentzer/Bio_ClinicalBERT", + "max_length": 64, + "num_labels": 6, + "labels": [ + "ESCALATION", + "APPOINTMENT", + "MEDICATION", + "SYMPTOM_CHECK", + "GENERAL_INQUIRY", + "BILLING" + ], + "training_config": { + "epochs": 8, + "batch_size": 16, + "learning_rate": 2e-05, + "max_length": 64 + }, + "timestamp": "2026-02-19T05:59:29.871942+00:00", + "seed": 42 +} \ No newline at end of file diff --git a/artifacts/onnx_int8/vocab.txt b/artifacts/onnx_int8/vocab.txt new file mode 100644 index 0000000000000000000000000000000000000000..fb140275c155a9c7c5a3b3e0e77a9e839594a938 --- /dev/null +++ b/artifacts/onnx_int8/vocab.txt @@ -0,0 +1,30522 @@ +[PAD] +[unused0] +[unused1] +[unused2] +[unused3] +[unused4] +[unused5] +[unused6] +[unused7] +[unused8] +[unused9] +[unused10] +[unused11] +[unused12] +[unused13] +[unused14] +[unused15] +[unused16] +[unused17] +[unused18] +[unused19] +[unused20] +[unused21] +[unused22] +[unused23] +[unused24] +[unused25] +[unused26] +[unused27] +[unused28] +[unused29] +[unused30] +[unused31] +[unused32] +[unused33] +[unused34] +[unused35] +[unused36] +[unused37] +[unused38] +[unused39] +[unused40] +[unused41] +[unused42] +[unused43] +[unused44] +[unused45] +[unused46] +[unused47] +[unused48] +[unused49] +[unused50] +[unused51] +[unused52] +[unused53] +[unused54] +[unused55] +[unused56] +[unused57] +[unused58] +[unused59] +[unused60] +[unused61] +[unused62] +[unused63] +[unused64] +[unused65] +[unused66] +[unused67] +[unused68] +[unused69] +[unused70] +[unused71] +[unused72] +[unused73] +[unused74] +[unused75] +[unused76] +[unused77] +[unused78] +[unused79] +[unused80] +[unused81] +[unused82] +[unused83] +[unused84] +[unused85] +[unused86] +[unused87] +[unused88] +[unused89] +[unused90] +[unused91] +[unused92] +[unused93] +[unused94] +[unused95] +[unused96] +[unused97] +[unused98] +[UNK] +[CLS] +[SEP] +[MASK] +[unused99] +[unused100] +[unused101] +[unused102] +[unused103] +[unused104] +[unused105] +[unused106] +[unused107] +[unused108] +[unused109] +[unused110] +[unused111] +[unused112] +[unused113] +[unused114] +[unused115] +[unused116] +[unused117] +[unused118] +[unused119] +[unused120] +[unused121] +[unused122] +[unused123] +[unused124] +[unused125] +[unused126] +[unused127] +[unused128] +[unused129] +[unused130] +[unused131] +[unused132] +[unused133] +[unused134] +[unused135] +[unused136] +[unused137] +[unused138] +[unused139] +[unused140] +[unused141] +[unused142] +[unused143] +[unused144] +[unused145] +[unused146] +[unused147] +[unused148] +[unused149] +[unused150] +[unused151] +[unused152] +[unused153] +[unused154] +[unused155] +[unused156] +[unused157] +[unused158] +[unused159] +[unused160] +[unused161] +[unused162] +[unused163] +[unused164] +[unused165] +[unused166] +[unused167] +[unused168] +[unused169] +[unused170] +[unused171] +[unused172] +[unused173] +[unused174] +[unused175] +[unused176] +[unused177] +[unused178] +[unused179] +[unused180] +[unused181] +[unused182] +[unused183] +[unused184] +[unused185] +[unused186] +[unused187] +[unused188] +[unused189] +[unused190] +[unused191] +[unused192] +[unused193] +[unused194] +[unused195] +[unused196] +[unused197] +[unused198] +[unused199] +[unused200] +[unused201] +[unused202] +[unused203] +[unused204] +[unused205] +[unused206] +[unused207] +[unused208] +[unused209] +[unused210] +[unused211] +[unused212] +[unused213] +[unused214] +[unused215] +[unused216] +[unused217] +[unused218] +[unused219] +[unused220] +[unused221] +[unused222] +[unused223] +[unused224] +[unused225] +[unused226] +[unused227] +[unused228] +[unused229] +[unused230] +[unused231] +[unused232] +[unused233] +[unused234] +[unused235] +[unused236] +[unused237] +[unused238] +[unused239] +[unused240] +[unused241] +[unused242] +[unused243] +[unused244] +[unused245] +[unused246] +[unused247] +[unused248] +[unused249] +[unused250] +[unused251] +[unused252] +[unused253] +[unused254] +[unused255] +[unused256] +[unused257] +[unused258] +[unused259] +[unused260] +[unused261] +[unused262] +[unused263] +[unused264] +[unused265] +[unused266] +[unused267] +[unused268] +[unused269] +[unused270] +[unused271] +[unused272] +[unused273] +[unused274] +[unused275] +[unused276] +[unused277] +[unused278] +[unused279] +[unused280] +[unused281] +[unused282] +[unused283] +[unused284] +[unused285] +[unused286] +[unused287] +[unused288] +[unused289] +[unused290] +[unused291] +[unused292] +[unused293] +[unused294] +[unused295] +[unused296] +[unused297] +[unused298] +[unused299] +[unused300] +[unused301] +[unused302] +[unused303] +[unused304] +[unused305] +[unused306] +[unused307] +[unused308] +[unused309] +[unused310] +[unused311] +[unused312] +[unused313] +[unused314] +[unused315] +[unused316] +[unused317] +[unused318] +[unused319] +[unused320] +[unused321] +[unused322] +[unused323] +[unused324] +[unused325] +[unused326] +[unused327] +[unused328] +[unused329] +[unused330] +[unused331] +[unused332] +[unused333] +[unused334] +[unused335] +[unused336] +[unused337] +[unused338] +[unused339] +[unused340] +[unused341] +[unused342] +[unused343] +[unused344] +[unused345] +[unused346] +[unused347] +[unused348] +[unused349] +[unused350] +[unused351] +[unused352] +[unused353] +[unused354] +[unused355] +[unused356] +[unused357] +[unused358] +[unused359] +[unused360] +[unused361] +[unused362] +[unused363] +[unused364] +[unused365] +[unused366] +[unused367] +[unused368] +[unused369] +[unused370] +[unused371] +[unused372] +[unused373] +[unused374] +[unused375] +[unused376] +[unused377] +[unused378] +[unused379] +[unused380] +[unused381] +[unused382] +[unused383] +[unused384] +[unused385] +[unused386] +[unused387] +[unused388] +[unused389] +[unused390] +[unused391] +[unused392] +[unused393] +[unused394] +[unused395] +[unused396] +[unused397] +[unused398] +[unused399] +[unused400] +[unused401] +[unused402] +[unused403] +[unused404] +[unused405] +[unused406] +[unused407] +[unused408] +[unused409] +[unused410] +[unused411] +[unused412] +[unused413] +[unused414] +[unused415] +[unused416] +[unused417] +[unused418] +[unused419] +[unused420] +[unused421] +[unused422] +[unused423] +[unused424] +[unused425] +[unused426] +[unused427] +[unused428] +[unused429] +[unused430] +[unused431] +[unused432] +[unused433] +[unused434] +[unused435] +[unused436] +[unused437] +[unused438] +[unused439] +[unused440] +[unused441] +[unused442] +[unused443] +[unused444] +[unused445] +[unused446] +[unused447] +[unused448] +[unused449] +[unused450] +[unused451] +[unused452] +[unused453] +[unused454] +[unused455] +[unused456] +[unused457] +[unused458] +[unused459] +[unused460] +[unused461] +[unused462] +[unused463] +[unused464] +[unused465] +[unused466] +[unused467] +[unused468] +[unused469] +[unused470] +[unused471] +[unused472] +[unused473] +[unused474] +[unused475] +[unused476] +[unused477] +[unused478] +[unused479] +[unused480] +[unused481] +[unused482] +[unused483] +[unused484] +[unused485] +[unused486] +[unused487] +[unused488] +[unused489] +[unused490] +[unused491] +[unused492] +[unused493] +[unused494] +[unused495] +[unused496] +[unused497] +[unused498] +[unused499] +[unused500] +[unused501] +[unused502] +[unused503] +[unused504] +[unused505] +[unused506] +[unused507] +[unused508] +[unused509] +[unused510] +[unused511] +[unused512] +[unused513] +[unused514] +[unused515] +[unused516] +[unused517] +[unused518] +[unused519] +[unused520] +[unused521] +[unused522] +[unused523] +[unused524] +[unused525] +[unused526] +[unused527] +[unused528] +[unused529] +[unused530] +[unused531] +[unused532] +[unused533] +[unused534] +[unused535] +[unused536] +[unused537] +[unused538] +[unused539] +[unused540] +[unused541] +[unused542] +[unused543] +[unused544] +[unused545] +[unused546] +[unused547] +[unused548] +[unused549] +[unused550] +[unused551] +[unused552] +[unused553] +[unused554] +[unused555] +[unused556] +[unused557] +[unused558] +[unused559] +[unused560] +[unused561] +[unused562] +[unused563] +[unused564] +[unused565] +[unused566] +[unused567] +[unused568] +[unused569] +[unused570] +[unused571] +[unused572] +[unused573] +[unused574] +[unused575] +[unused576] +[unused577] +[unused578] +[unused579] +[unused580] +[unused581] +[unused582] +[unused583] +[unused584] +[unused585] +[unused586] +[unused587] +[unused588] +[unused589] +[unused590] +[unused591] +[unused592] +[unused593] +[unused594] +[unused595] +[unused596] +[unused597] +[unused598] +[unused599] +[unused600] +[unused601] +[unused602] +[unused603] +[unused604] +[unused605] +[unused606] +[unused607] +[unused608] +[unused609] +[unused610] +[unused611] +[unused612] +[unused613] +[unused614] +[unused615] +[unused616] +[unused617] +[unused618] +[unused619] +[unused620] +[unused621] +[unused622] +[unused623] +[unused624] +[unused625] +[unused626] +[unused627] +[unused628] +[unused629] +[unused630] +[unused631] +[unused632] +[unused633] +[unused634] +[unused635] +[unused636] +[unused637] +[unused638] +[unused639] +[unused640] +[unused641] +[unused642] +[unused643] +[unused644] +[unused645] +[unused646] +[unused647] +[unused648] +[unused649] +[unused650] +[unused651] +[unused652] +[unused653] +[unused654] +[unused655] +[unused656] +[unused657] +[unused658] +[unused659] +[unused660] +[unused661] +[unused662] +[unused663] +[unused664] +[unused665] +[unused666] +[unused667] +[unused668] +[unused669] +[unused670] +[unused671] +[unused672] +[unused673] +[unused674] +[unused675] +[unused676] +[unused677] +[unused678] +[unused679] +[unused680] +[unused681] +[unused682] +[unused683] +[unused684] +[unused685] +[unused686] +[unused687] +[unused688] +[unused689] +[unused690] +[unused691] +[unused692] +[unused693] +[unused694] +[unused695] +[unused696] +[unused697] +[unused698] +[unused699] +[unused700] +[unused701] +[unused702] +[unused703] +[unused704] +[unused705] +[unused706] +[unused707] +[unused708] +[unused709] +[unused710] +[unused711] +[unused712] +[unused713] +[unused714] +[unused715] +[unused716] +[unused717] +[unused718] +[unused719] +[unused720] +[unused721] +[unused722] +[unused723] +[unused724] +[unused725] +[unused726] +[unused727] +[unused728] +[unused729] +[unused730] +[unused731] +[unused732] +[unused733] +[unused734] +[unused735] +[unused736] +[unused737] +[unused738] +[unused739] +[unused740] +[unused741] +[unused742] +[unused743] +[unused744] +[unused745] +[unused746] +[unused747] +[unused748] +[unused749] +[unused750] +[unused751] +[unused752] +[unused753] +[unused754] +[unused755] +[unused756] +[unused757] +[unused758] +[unused759] +[unused760] +[unused761] +[unused762] +[unused763] +[unused764] +[unused765] +[unused766] +[unused767] +[unused768] +[unused769] +[unused770] +[unused771] +[unused772] +[unused773] +[unused774] +[unused775] +[unused776] +[unused777] +[unused778] +[unused779] +[unused780] +[unused781] +[unused782] +[unused783] +[unused784] +[unused785] +[unused786] +[unused787] +[unused788] +[unused789] +[unused790] +[unused791] +[unused792] +[unused793] +[unused794] +[unused795] +[unused796] +[unused797] +[unused798] +[unused799] +[unused800] +[unused801] +[unused802] +[unused803] +[unused804] +[unused805] +[unused806] +[unused807] +[unused808] +[unused809] +[unused810] +[unused811] +[unused812] +[unused813] +[unused814] +[unused815] +[unused816] +[unused817] +[unused818] +[unused819] +[unused820] +[unused821] +[unused822] +[unused823] +[unused824] +[unused825] +[unused826] +[unused827] +[unused828] +[unused829] +[unused830] +[unused831] +[unused832] +[unused833] +[unused834] +[unused835] +[unused836] +[unused837] +[unused838] +[unused839] +[unused840] +[unused841] +[unused842] +[unused843] +[unused844] +[unused845] +[unused846] +[unused847] +[unused848] +[unused849] +[unused850] +[unused851] +[unused852] +[unused853] +[unused854] +[unused855] +[unused856] +[unused857] +[unused858] +[unused859] +[unused860] +[unused861] +[unused862] +[unused863] +[unused864] +[unused865] +[unused866] +[unused867] +[unused868] +[unused869] +[unused870] +[unused871] +[unused872] +[unused873] +[unused874] +[unused875] +[unused876] +[unused877] +[unused878] +[unused879] +[unused880] +[unused881] +[unused882] +[unused883] +[unused884] +[unused885] +[unused886] +[unused887] +[unused888] +[unused889] +[unused890] +[unused891] +[unused892] +[unused893] +[unused894] +[unused895] +[unused896] +[unused897] +[unused898] +[unused899] +[unused900] +[unused901] +[unused902] +[unused903] +[unused904] +[unused905] +[unused906] +[unused907] +[unused908] +[unused909] +[unused910] +[unused911] +[unused912] +[unused913] +[unused914] +[unused915] +[unused916] +[unused917] +[unused918] +[unused919] +[unused920] +[unused921] +[unused922] +[unused923] +[unused924] +[unused925] +[unused926] +[unused927] +[unused928] +[unused929] +[unused930] +[unused931] +[unused932] +[unused933] +[unused934] +[unused935] +[unused936] +[unused937] +[unused938] +[unused939] +[unused940] +[unused941] +[unused942] +[unused943] +[unused944] +[unused945] +[unused946] +[unused947] +[unused948] +[unused949] +[unused950] +[unused951] +[unused952] +[unused953] +[unused954] +[unused955] +[unused956] +[unused957] +[unused958] +[unused959] +[unused960] +[unused961] +[unused962] +[unused963] +[unused964] +[unused965] +[unused966] +[unused967] +[unused968] +[unused969] +[unused970] +[unused971] +[unused972] +[unused973] +[unused974] +[unused975] +[unused976] +[unused977] +[unused978] +[unused979] +[unused980] +[unused981] +[unused982] +[unused983] +[unused984] +[unused985] +[unused986] +[unused987] +[unused988] +[unused989] +[unused990] +[unused991] +[unused992] +[unused993] +! +" +# +$ +% +& +' +( +) +* ++ +, +- +. +/ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +: +; +< += +> +? +@ +[ +\ +] +^ +_ +` +a +b +c +d +e +f +g +h +i +j +k +l +m +n +o +p +q +r +s +t +u +v +w +x +y +z +{ +| +} +~ +¡ +¢ +£ +¤ +¥ +¦ +§ +¨ +© +ª +« +¬ +® +° +± +² +³ +´ +µ +¶ +· +¹ +º +» +¼ +½ +¾ +¿ +× +ß +æ +ð +÷ +ø +þ +đ +ħ +ı +ł +ŋ +œ +ƒ +ɐ +ɑ +ɒ +ɔ +ɕ +ə +ɛ +ɡ +ɣ +ɨ +ɪ +ɫ +ɬ +ɯ +ɲ +ɴ +ɹ +ɾ +ʀ +ʁ +ʂ +ʃ +ʉ +ʊ +ʋ +ʌ +ʎ +ʐ +ʑ +ʒ +ʔ +ʰ +ʲ +ʳ +ʷ +ʸ +ʻ +ʼ +ʾ +ʿ +ˈ +ː +ˡ +ˢ +ˣ +ˤ +α +β +γ +δ +ε +ζ +η +θ +ι +κ +λ +μ +ν +ξ +ο +π +ρ +ς +σ +τ +υ +φ +χ +ψ +ω +а +б +в +г +д +е +ж +з +и +к +л +м +н +о +п +р +с +т +у +ф +х +ц +ч +ш +щ +ъ +ы +ь +э +ю +я +ђ +є +і +ј +љ +њ +ћ +ӏ +ա +բ +գ +դ +ե +թ +ի +լ +կ +հ +մ +յ +ն +ո +պ +ս +վ +տ +ր +ւ +ք +־ +א +ב +ג +ד +ה +ו +ז +ח +ט +י +ך +כ +ל +ם +מ +ן +נ +ס +ע +ף +פ +ץ +צ +ק +ר +ש +ת +، +ء +ا +ب +ة +ت +ث +ج +ح +خ +د +ذ +ر +ز +س +ش +ص +ض +ط +ظ +ع +غ +ـ +ف +ق +ك +ل +م +ن +ه +و +ى +ي +ٹ +پ +چ +ک +گ +ں +ھ +ہ +ی +ے +अ +आ +उ +ए +क +ख +ग +च +ज +ट +ड +ण +त +थ +द +ध +न +प +ब +भ +म +य +र +ल +व +श +ष +स +ह +ा +ि +ी +ो +। +॥ +ং +অ +আ +ই +উ +এ +ও +ক +খ +গ +চ +ছ +জ +ট +ড +ণ +ত +থ +দ +ধ +ন +প +ব +ভ +ম +য +র +ল +শ +ষ +স +হ +া +ি +ী +ে +க +ச +ட +த +ந +ன +ப +ம +ய +ர +ல +ள +வ +ா +ி +ு +ே +ை +ನ +ರ +ಾ +ක +ය +ර +ල +ව +ා +ก +ง +ต +ท +น +พ +ม +ย +ร +ล +ว +ส +อ +า +เ +་ +། +ག +ང +ད +ན +པ +བ +མ +འ +ར +ལ +ས +မ +ა +ბ +გ +დ +ე +ვ +თ +ი +კ +ლ +მ +ნ +ო +რ +ს +ტ +უ +ᄀ +ᄂ +ᄃ +ᄅ +ᄆ +ᄇ +ᄉ +ᄊ +ᄋ +ᄌ +ᄎ +ᄏ +ᄐ +ᄑ +ᄒ +ᅡ +ᅢ +ᅥ +ᅦ +ᅧ +ᅩ +ᅪ +ᅭ +ᅮ +ᅯ +ᅲ +ᅳ +ᅴ +ᅵ +ᆨ +ᆫ +ᆯ +ᆷ +ᆸ +ᆼ +ᴬ +ᴮ +ᴰ +ᴵ +ᴺ +ᵀ +ᵃ +ᵇ +ᵈ +ᵉ +ᵍ +ᵏ +ᵐ +ᵒ +ᵖ +ᵗ +ᵘ +ᵢ +ᵣ +ᵤ +ᵥ +ᶜ +ᶠ +‐ +‑ +‒ +– +— +― +‖ +‘ +’ +‚ +“ +” +„ +† +‡ +• +… +‰ +′ +″ +› +‿ +⁄ +⁰ +ⁱ +⁴ +⁵ +⁶ +⁷ +⁸ +⁹ +⁺ +⁻ +ⁿ +₀ +₁ +₂ +₃ +₄ +₅ +₆ +₇ +₈ +₉ +₊ +₍ +₎ +ₐ +ₑ +ₒ +ₓ +ₕ +ₖ +ₗ +ₘ +ₙ +ₚ +ₛ +ₜ +₤ +₩ +€ +₱ +₹ +ℓ +№ +ℝ +™ +⅓ +⅔ +← +↑ +→ +↓ +↔ +↦ +⇄ +⇌ +⇒ +∂ +∅ +∆ +∇ +∈ +− +∗ +∘ +√ +∞ +∧ +∨ +∩ +∪ +≈ +≡ +≤ +≥ +⊂ +⊆ +⊕ +⊗ +⋅ +─ +│ +■ +▪ +● +★ +☆ +☉ +♠ +♣ +♥ +♦ +♭ +♯ +⟨ +⟩ +ⱼ +⺩ +⺼ +⽥ +、 +。 +〈 +〉 +《 +》 +「 +」 +『 +』 +〜 +あ +い +う +え +お +か +き +く +け +こ +さ +し +す +せ +そ +た +ち +っ +つ +て +と +な +に +ぬ +ね +の +は +ひ +ふ +へ +ほ +ま +み +む +め +も +や +ゆ +よ +ら +り +る +れ +ろ +を +ん +ァ +ア +ィ +イ +ウ +ェ +エ +オ +カ +キ +ク +ケ +コ +サ +シ +ス +セ +タ +チ +ッ +ツ +テ +ト +ナ +ニ +ノ +ハ +ヒ +フ +ヘ +ホ +マ +ミ +ム +メ +モ +ャ +ュ +ョ +ラ +リ +ル +レ +ロ +ワ +ン +・ +ー +一 +三 +上 +下 +不 +世 +中 +主 +久 +之 +也 +事 +二 +五 +井 +京 +人 +亻 +仁 +介 +代 +仮 +伊 +会 +佐 +侍 +保 +信 +健 +元 +光 +八 +公 +内 +出 +分 +前 +劉 +力 +加 +勝 +北 +区 +十 +千 +南 +博 +原 +口 +古 +史 +司 +合 +吉 +同 +名 +和 +囗 +四 +国 +國 +土 +地 +坂 +城 +堂 +場 +士 +夏 +外 +大 +天 +太 +夫 +奈 +女 +子 +学 +宀 +宇 +安 +宗 +定 +宣 +宮 +家 +宿 +寺 +將 +小 +尚 +山 +岡 +島 +崎 +川 +州 +巿 +帝 +平 +年 +幸 +广 +弘 +張 +彳 +後 +御 +德 +心 +忄 +志 +忠 +愛 +成 +我 +戦 +戸 +手 +扌 +政 +文 +新 +方 +日 +明 +星 +春 +昭 +智 +曲 +書 +月 +有 +朝 +木 +本 +李 +村 +東 +松 +林 +森 +楊 +樹 +橋 +歌 +止 +正 +武 +比 +氏 +民 +水 +氵 +氷 +永 +江 +沢 +河 +治 +法 +海 +清 +漢 +瀬 +火 +版 +犬 +王 +生 +田 +男 +疒 +発 +白 +的 +皇 +目 +相 +省 +真 +石 +示 +社 +神 +福 +禾 +秀 +秋 +空 +立 +章 +竹 +糹 +美 +義 +耳 +良 +艹 +花 +英 +華 +葉 +藤 +行 +街 +西 +見 +訁 +語 +谷 +貝 +貴 +車 +軍 +辶 +道 +郎 +郡 +部 +都 +里 +野 +金 +鈴 +镇 +長 +門 +間 +阝 +阿 +陳 +陽 +雄 +青 +面 +風 +食 +香 +馬 +高 +龍 +龸 +fi +fl +! +( +) +, +- +. +/ +: +? +~ +the +of +and +in +to +was +he +is +as +for +on +with +that +it +his +by +at +from +her +##s +she +you +had +an +were +but +be +this +are +not +my +they +one +which +or +have +him +me +first +all +also +their +has +up +who +out +been +when +after +there +into +new +two +its +##a +time +would +no +what +about +said +we +over +then +other +so +more +##e +can +if +like +back +them +only +some +could +##i +where +just +##ing +during +before +##n +do +##o +made +school +through +than +now +years +most +world +may +between +down +well +three +##d +year +while +will +##ed +##r +##y +later +##t +city +under +around +did +such +being +used +state +people +part +know +against +your +many +second +university +both +national +##er +these +don +known +off +way +until +re +how +even +get +head +... +didn +##ly +team +american +because +de +##l +born +united +film +since +still +long +work +south +us +became +any +high +again +day +family +see +right +man +eyes +house +season +war +states +including +took +life +north +same +each +called +name +much +place +however +go +four +group +another +found +won +area +here +going +10 +away +series +left +home +music +best +make +hand +number +company +several +never +last +john +000 +very +album +take +end +good +too +following +released +game +played +little +began +district +##m +old +want +those +side +held +own +early +county +ll +league +use +west +##u +face +think +##es +2010 +government +##h +march +came +small +general +town +june +##on +line +based +something +##k +september +thought +looked +along +international +2011 +air +july +club +went +january +october +our +august +april +york +12 +few +2012 +2008 +east +show +member +college +2009 +father +public +##us +come +men +five +set +station +church +##c +next +former +november +room +party +located +december +2013 +age +got +2007 +##g +system +let +love +2006 +though +every +2014 +look +song +water +century +without +body +black +night +within +great +women +single +ve +building +large +population +river +named +band +white +started +##an +once +15 +20 +should +18 +2015 +service +top +built +british +open +death +king +moved +local +times +children +february +book +why +11 +door +need +president +order +final +road +wasn +although +due +major +died +village +third +knew +2016 +asked +turned +st +wanted +say +##p +together +received +main +son +served +different +##en +behind +himself +felt +members +power +football +law +voice +play +##in +near +park +history +30 +having +2005 +16 +##man +saw +mother +##al +army +point +front +help +english +street +art +late +hands +games +award +##ia +young +14 +put +published +country +division +across +told +13 +often +ever +french +london +center +six +red +2017 +led +days +include +light +25 +find +tell +among +species +really +according +central +half +2004 +form +original +gave +office +making +enough +lost +full +opened +must +included +live +given +german +player +run +business +woman +community +cup +might +million +land +2000 +court +development +17 +short +round +ii +km +seen +class +story +always +become +sure +research +almost +director +council +la +##2 +career +things +using +island +##z +couldn +car +##is +24 +close +force +##1 +better +free +support +control +field +students +2003 +education +married +##b +nothing +worked +others +record +big +inside +level +anything +continued +give +james +##3 +military +established +non +returned +feel +does +title +written +thing +feet +william +far +co +association +hard +already +2002 +##ra +championship +human +western +100 +##na +department +hall +role +various +production +21 +19 +heart +2001 +living +fire +version +##ers +##f +television +royal +##4 +produced +working +act +case +society +region +present +radio +period +looking +least +total +keep +england +wife +program +per +brother +mind +special +22 +##le +am +works +soon +##6 +political +george +services +taken +created +##7 +further +able +reached +david +union +joined +upon +done +important +social +information +either +##ic +##x +appeared +position +ground +lead +rock +dark +election +23 +board +france +hair +course +arms +site +police +girl +instead +real +sound +##v +words +moment +##te +someone +##8 +summer +project +announced +san +less +wrote +past +followed +##5 +blue +founded +al +finally +india +taking +records +america +##ne +1999 +design +considered +northern +god +stop +battle +toward +european +outside +described +track +today +playing +language +28 +call +26 +heard +professional +low +australia +miles +california +win +yet +green +##ie +trying +blood +##ton +southern +science +maybe +everything +match +square +27 +mouth +video +race +recorded +leave +above +##9 +daughter +points +space +1998 +museum +change +middle +common +##0 +move +tv +post +##ta +lake +seven +tried +elected +closed +ten +paul +minister +##th +months +start +chief +return +canada +person +sea +release +similar +modern +brought +rest +hit +formed +mr +##la +1997 +floor +event +doing +thomas +1996 +robert +care +killed +training +star +week +needed +turn +finished +railway +rather +news +health +sent +example +ran +term +michael +coming +currently +yes +forces +despite +gold +areas +50 +stage +fact +29 +dead +says +popular +2018 +originally +germany +probably +developed +result +pulled +friend +stood +money +running +mi +signed +word +songs +child +eventually +met +tour +average +teams +minutes +festival +current +deep +kind +1995 +decided +usually +eastern +seemed +##ness +episode +bed +added +table +indian +private +charles +route +available +idea +throughout +centre +addition +appointed +style +1994 +books +eight +construction +press +mean +wall +friends +remained +schools +study +##ch +##um +institute +oh +chinese +sometimes +events +possible +1992 +australian +type +brown +forward +talk +process +food +debut +seat +performance +committee +features +character +arts +herself +else +lot +strong +russian +range +hours +peter +arm +##da +morning +dr +sold +##ry +quickly +directed +1993 +guitar +china +##w +31 +list +##ma +performed +media +uk +players +smile +##rs +myself +40 +placed +coach +province +towards +wouldn +leading +whole +boy +official +designed +grand +census +##el +europe +attack +japanese +henry +1991 +##re +##os +cross +getting +alone +action +lower +network +wide +washington +japan +1990 +hospital +believe +changed +sister +##ar +hold +gone +sir +hadn +ship +##ka +studies +academy +shot +rights +below +base +bad +involved +kept +largest +##ist +bank +future +especially +beginning +mark +movement +section +female +magazine +plan +professor +lord +longer +##ian +sat +walked +hill +actually +civil +energy +model +families +size +thus +aircraft +completed +includes +data +captain +##or +fight +vocals +featured +richard +bridge +fourth +1989 +officer +stone +hear +##ism +means +medical +groups +management +self +lips +competition +entire +lived +technology +leaving +federal +tournament +bit +passed +hot +independent +awards +kingdom +mary +spent +fine +doesn +reported +##ling +jack +fall +raised +itself +stay +true +studio +1988 +sports +replaced +paris +systems +saint +leader +theatre +whose +market +capital +parents +spanish +canadian +earth +##ity +cut +degree +writing +bay +christian +awarded +natural +higher +bill +##as +coast +provided +previous +senior +ft +valley +organization +stopped +onto +countries +parts +conference +queen +security +interest +saying +allowed +master +earlier +phone +matter +smith +winning +try +happened +moving +campaign +los +##ley +breath +nearly +mid +1987 +certain +girls +date +italian +african +standing +fell +artist +##ted +shows +deal +mine +industry +1986 +##ng +everyone +republic +provide +collection +library +student +##ville +primary +owned +older +via +heavy +1st +makes +##able +attention +anyone +africa +##ri +stated +length +ended +fingers +command +staff +skin +foreign +opening +governor +okay +medal +kill +sun +cover +job +1985 +introduced +chest +hell +feeling +##ies +success +meet +reason +standard +meeting +novel +1984 +trade +source +buildings +##land +rose +guy +goal +##ur +chapter +native +husband +previously +unit +limited +entered +weeks +producer +operations +mountain +takes +covered +forced +related +roman +complete +successful +key +texas +cold +##ya +channel +1980 +traditional +films +dance +clear +approximately +500 +nine +van +prince +question +active +tracks +ireland +regional +silver +author +personal +sense +operation +##ine +economic +1983 +holding +twenty +isbn +additional +speed +hour +edition +regular +historic +places +whom +shook +movie +km² +secretary +prior +report +chicago +read +foundation +view +engine +scored +1982 +units +ask +airport +property +ready +immediately +lady +month +listed +contract +##de +manager +themselves +lines +##ki +navy +writer +meant +##ts +runs +##ro +practice +championships +singer +glass +commission +required +forest +starting +culture +generally +giving +access +attended +test +couple +stand +catholic +martin +caught +executive +##less +eye +##ey +thinking +chair +quite +shoulder +1979 +hope +decision +plays +defeated +municipality +whether +structure +offered +slowly +pain +ice +direction +##ion +paper +mission +1981 +mostly +200 +noted +individual +managed +nature +lives +plant +##ha +helped +except +studied +computer +figure +relationship +issue +significant +loss +die +smiled +gun +ago +highest +1972 +##am +male +bring +goals +mexico +problem +distance +commercial +completely +location +annual +famous +drive +1976 +neck +1978 +surface +caused +italy +understand +greek +highway +wrong +hotel +comes +appearance +joseph +double +issues +musical +companies +castle +income +review +assembly +bass +initially +parliament +artists +experience +1974 +particular +walk +foot +engineering +talking +window +dropped +##ter +miss +baby +boys +break +1975 +stars +edge +remember +policy +carried +train +stadium +bar +sex +angeles +evidence +##ge +becoming +assistant +soviet +1977 +upper +step +wing +1970 +youth +financial +reach +##ll +actor +numerous +##se +##st +nodded +arrived +##ation +minute +##nt +believed +sorry +complex +beautiful +victory +associated +temple +1968 +1973 +chance +perhaps +metal +##son +1945 +bishop +##et +lee +launched +particularly +tree +le +retired +subject +prize +contains +yeah +theory +empire +##ce +suddenly +waiting +trust +recording +##to +happy +terms +camp +champion +1971 +religious +pass +zealand +names +2nd +port +ancient +tom +corner +represented +watch +legal +anti +justice +cause +watched +brothers +45 +material +changes +simply +response +louis +fast +##ting +answer +60 +historical +1969 +stories +straight +create +feature +increased +rate +administration +virginia +el +activities +cultural +overall +winner +programs +basketball +legs +guard +beyond +cast +doctor +mm +flight +results +remains +cost +effect +winter +##ble +larger +islands +problems +chairman +grew +commander +isn +1967 +pay +failed +selected +hurt +fort +box +regiment +majority +journal +35 +edward +plans +##ke +##ni +shown +pretty +irish +characters +directly +scene +likely +operated +allow +spring +##j +junior +matches +looks +mike +houses +fellow +##tion +beach +marriage +##ham +##ive +rules +oil +65 +florida +expected +nearby +congress +sam +peace +recent +iii +wait +subsequently +cell +##do +variety +serving +agreed +please +poor +joe +pacific +attempt +wood +democratic +piece +prime +##ca +rural +mile +touch +appears +township +1964 +1966 +soldiers +##men +##ized +1965 +pennsylvania +closer +fighting +claimed +score +jones +physical +editor +##ous +filled +genus +specific +sitting +super +mom +##va +therefore +supported +status +fear +cases +store +meaning +wales +minor +spain +tower +focus +vice +frank +follow +parish +separate +golden +horse +fifth +remaining +branch +32 +presented +stared +##id +uses +secret +forms +##co +baseball +exactly +##ck +choice +note +discovered +travel +composed +truth +russia +ball +color +kiss +dad +wind +continue +ring +referred +numbers +digital +greater +##ns +metres +slightly +direct +increase +1960 +responsible +crew +rule +trees +troops +##no +broke +goes +individuals +hundred +weight +creek +sleep +memory +defense +provides +ordered +code +value +jewish +windows +1944 +safe +judge +whatever +corps +realized +growing +pre +##ga +cities +alexander +gaze +lies +spread +scott +letter +showed +situation +mayor +transport +watching +workers +extended +##li +expression +normal +##ment +chart +multiple +border +##ba +host +##ner +daily +mrs +walls +piano +##ko +heat +cannot +##ate +earned +products +drama +era +authority +seasons +join +grade +##io +sign +difficult +machine +1963 +territory +mainly +##wood +stations +squadron +1962 +stepped +iron +19th +##led +serve +appear +sky +speak +broken +charge +knowledge +kilometres +removed +ships +article +campus +simple +##ty +pushed +britain +##ve +leaves +recently +cd +soft +boston +latter +easy +acquired +poland +##sa +quality +officers +presence +planned +nations +mass +broadcast +jean +share +image +influence +wild +offer +emperor +electric +reading +headed +ability +promoted +yellow +ministry +1942 +throat +smaller +politician +##by +latin +spoke +cars +williams +males +lack +pop +80 +##ier +acting +seeing +consists +##ti +estate +1961 +pressure +johnson +newspaper +jr +chris +olympics +online +conditions +beat +elements +walking +vote +##field +needs +carolina +text +featuring +global +block +shirt +levels +francisco +purpose +females +et +dutch +duke +ahead +gas +twice +safety +serious +turning +highly +lieutenant +firm +maria +amount +mixed +daniel +proposed +perfect +agreement +affairs +3rd +seconds +contemporary +paid +1943 +prison +save +kitchen +label +administrative +intended +constructed +academic +nice +teacher +races +1956 +formerly +corporation +ben +nation +issued +shut +1958 +drums +housing +victoria +seems +opera +1959 +graduated +function +von +mentioned +picked +build +recognized +shortly +protection +picture +notable +exchange +elections +1980s +loved +percent +racing +fish +elizabeth +garden +volume +hockey +1941 +beside +settled +##ford +1940 +competed +replied +drew +1948 +actress +marine +scotland +steel +glanced +farm +steve +1957 +risk +tonight +positive +magic +singles +effects +gray +screen +dog +##ja +residents +bus +sides +none +secondary +literature +polish +destroyed +flying +founder +households +1939 +lay +reserve +usa +gallery +##ler +1946 +industrial +younger +approach +appearances +urban +ones +1950 +finish +avenue +powerful +fully +growth +page +honor +jersey +projects +advanced +revealed +basic +90 +infantry +pair +equipment +visit +33 +evening +search +grant +effort +solo +treatment +buried +republican +primarily +bottom +owner +1970s +israel +gives +jim +dream +bob +remain +spot +70 +notes +produce +champions +contact +ed +soul +accepted +ways +del +##ally +losing +split +price +capacity +basis +trial +questions +##ina +1955 +20th +guess +officially +memorial +naval +initial +##ization +whispered +median +engineer +##ful +sydney +##go +columbia +strength +300 +1952 +tears +senate +00 +card +asian +agent +1947 +software +44 +draw +warm +supposed +com +pro +##il +transferred +leaned +##at +candidate +escape +mountains +asia +potential +activity +entertainment +seem +traffic +jackson +murder +36 +slow +product +orchestra +haven +agency +bbc +taught +website +comedy +unable +storm +planning +albums +rugby +environment +scientific +grabbed +protect +##hi +boat +typically +1954 +1953 +damage +principal +divided +dedicated +mount +ohio +##berg +pick +fought +driver +##der +empty +shoulders +sort +thank +berlin +prominent +account +freedom +necessary +efforts +alex +headquarters +follows +alongside +des +simon +andrew +suggested +operating +learning +steps +1949 +sweet +technical +begin +easily +34 +teeth +speaking +settlement +scale +##sh +renamed +ray +max +enemy +semi +joint +compared +##rd +scottish +leadership +analysis +offers +georgia +pieces +captured +animal +deputy +guest +organized +##lin +tony +combined +method +challenge +1960s +huge +wants +battalion +sons +rise +crime +types +facilities +telling +path +1951 +platform +sit +1990s +##lo +tells +assigned +rich +pull +##ot +commonly +alive +##za +letters +concept +conducted +wearing +happen +bought +becomes +holy +gets +ocean +defeat +languages +purchased +coffee +occurred +titled +##q +declared +applied +sciences +concert +sounds +jazz +brain +##me +painting +fleet +tax +nick +##ius +michigan +count +animals +leaders +episodes +##line +content +##den +birth +##it +clubs +64 +palace +critical +refused +fair +leg +laughed +returning +surrounding +participated +formation +lifted +pointed +connected +rome +medicine +laid +taylor +santa +powers +adam +tall +shared +focused +knowing +yards +entrance +falls +##wa +calling +##ad +sources +chosen +beneath +resources +yard +##ite +nominated +silence +zone +defined +##que +gained +thirty +38 +bodies +moon +##ard +adopted +christmas +widely +register +apart +iran +premier +serves +du +unknown +parties +##les +generation +##ff +continues +quick +fields +brigade +quiet +teaching +clothes +impact +weapons +partner +flat +theater +supreme +1938 +37 +relations +##tor +plants +suffered +1936 +wilson +kids +begins +##age +1918 +seats +armed +internet +models +worth +laws +400 +communities +classes +background +knows +thanks +quarter +reaching +humans +carry +killing +format +kong +hong +setting +75 +architecture +disease +railroad +inc +possibly +wish +arthur +thoughts +harry +doors +density +##di +crowd +illinois +stomach +tone +unique +reports +anyway +##ir +liberal +der +vehicle +thick +dry +drug +faced +largely +facility +theme +holds +creation +strange +colonel +##mi +revolution +bell +politics +turns +silent +rail +relief +independence +combat +shape +write +determined +sales +learned +4th +finger +oxford +providing +1937 +heritage +fiction +situated +designated +allowing +distribution +hosted +##est +sight +interview +estimated +reduced +##ria +toronto +footballer +keeping +guys +damn +claim +motion +sport +sixth +stayed +##ze +en +rear +receive +handed +twelve +dress +audience +granted +brazil +##well +spirit +##ated +noticed +etc +olympic +representative +eric +tight +trouble +reviews +drink +vampire +missing +roles +ranked +newly +household +finals +wave +critics +##ee +phase +massachusetts +pilot +unlike +philadelphia +bright +guns +crown +organizations +roof +42 +respectively +clearly +tongue +marked +circle +fox +korea +bronze +brian +expanded +sexual +supply +yourself +inspired +labour +fc +##ah +reference +vision +draft +connection +brand +reasons +1935 +classic +driving +trip +jesus +cells +entry +1920 +neither +trail +claims +atlantic +orders +labor +nose +afraid +identified +intelligence +calls +cancer +attacked +passing +stephen +positions +imperial +grey +jason +39 +sunday +48 +swedish +avoid +extra +uncle +message +covers +allows +surprise +materials +fame +hunter +##ji +1930 +citizens +figures +davis +environmental +confirmed +shit +titles +di +performing +difference +acts +attacks +##ov +existing +votes +opportunity +nor +shop +entirely +trains +opposite +pakistan +##pa +develop +resulted +representatives +actions +reality +pressed +##ish +barely +wine +conversation +faculty +northwest +ends +documentary +nuclear +stock +grace +sets +eat +alternative +##ps +bag +resulting +creating +surprised +cemetery +1919 +drop +finding +sarah +cricket +streets +tradition +ride +1933 +exhibition +target +ear +explained +rain +composer +injury +apartment +municipal +educational +occupied +netherlands +clean +billion +constitution +learn +1914 +maximum +classical +francis +lose +opposition +jose +ontario +bear +core +hills +rolled +ending +drawn +permanent +fun +##tes +##lla +lewis +sites +chamber +ryan +##way +scoring +height +1934 +##house +lyrics +staring +55 +officials +1917 +snow +oldest +##tic +orange +##ger +qualified +interior +apparently +succeeded +thousand +dinner +lights +existence +fans +heavily +41 +greatest +conservative +send +bowl +plus +enter +catch +##un +economy +duty +1929 +speech +authorities +princess +performances +versions +shall +graduate +pictures +effective +remembered +poetry +desk +crossed +starring +starts +passenger +sharp +##ant +acres +ass +weather +falling +rank +fund +supporting +check +adult +publishing +heads +cm +southeast +lane +##burg +application +bc +##ura +les +condition +transfer +prevent +display +ex +regions +earl +federation +cool +relatively +answered +besides +1928 +obtained +portion +##town +mix +##ding +reaction +liked +dean +express +peak +1932 +##tte +counter +religion +chain +rare +miller +convention +aid +lie +vehicles +mobile +perform +squad +wonder +lying +crazy +sword +##ping +attempted +centuries +weren +philosophy +category +##ize +anna +interested +47 +sweden +wolf +frequently +abandoned +kg +literary +alliance +task +entitled +##ay +threw +promotion +factory +tiny +soccer +visited +matt +fm +achieved +52 +defence +internal +persian +43 +methods +##ging +arrested +otherwise +cambridge +programming +villages +elementary +districts +rooms +criminal +conflict +worry +trained +1931 +attempts +waited +signal +bird +truck +subsequent +programme +##ol +ad +49 +communist +details +faith +sector +patrick +carrying +laugh +##ss +controlled +korean +showing +origin +fuel +evil +1927 +##ent +brief +identity +darkness +address +pool +missed +publication +web +planet +ian +anne +wings +invited +##tt +briefly +standards +kissed +##be +ideas +climate +causing +walter +worse +albert +articles +winners +desire +aged +northeast +dangerous +gate +doubt +1922 +wooden +multi +##ky +poet +rising +funding +46 +communications +communication +violence +copies +prepared +ford +investigation +skills +1924 +pulling +electronic +##ak +##ial +##han +containing +ultimately +offices +singing +understanding +restaurant +tomorrow +fashion +christ +ward +da +pope +stands +5th +flow +studios +aired +commissioned +contained +exist +fresh +americans +##per +wrestling +approved +kid +employed +respect +suit +1925 +angel +asking +increasing +frame +angry +selling +1950s +thin +finds +##nd +temperature +statement +ali +explain +inhabitants +towns +extensive +narrow +51 +jane +flowers +images +promise +somewhere +object +fly +closely +##ls +1912 +bureau +cape +1926 +weekly +presidential +legislative +1921 +##ai +##au +launch +founding +##ny +978 +##ring +artillery +strike +un +institutions +roll +writers +landing +chose +kevin +anymore +pp +##ut +attorney +fit +dan +billboard +receiving +agricultural +breaking +sought +dave +admitted +lands +mexican +##bury +charlie +specifically +hole +iv +howard +credit +moscow +roads +accident +1923 +proved +wear +struck +hey +guards +stuff +slid +expansion +1915 +cat +anthony +##kin +melbourne +opposed +sub +southwest +architect +failure +plane +1916 +##ron +map +camera +tank +listen +regarding +wet +introduction +metropolitan +link +ep +fighter +inch +grown +gene +anger +fixed +buy +dvd +khan +domestic +worldwide +chapel +mill +functions +examples +##head +developing +1910 +turkey +hits +pocket +antonio +papers +grow +unless +circuit +18th +concerned +attached +journalist +selection +journey +converted +provincial +painted +hearing +aren +bands +negative +aside +wondered +knight +lap +survey +ma +##ow +noise +billy +##ium +shooting +guide +bedroom +priest +resistance +motor +homes +sounded +giant +##mer +150 +scenes +equal +comic +patients +hidden +solid +actual +bringing +afternoon +touched +funds +wedding +consisted +marie +canal +sr +kim +treaty +turkish +recognition +residence +cathedral +broad +knees +incident +shaped +fired +norwegian +handle +cheek +contest +represent +##pe +representing +beauty +##sen +birds +advantage +emergency +wrapped +drawing +notice +pink +broadcasting +##ong +somehow +bachelor +seventh +collected +registered +establishment +alan +assumed +chemical +personnel +roger +retirement +jeff +portuguese +wore +tied +device +threat +progress +advance +##ised +banks +hired +manchester +nfl +teachers +structures +forever +##bo +tennis +helping +saturday +sale +applications +junction +hip +incorporated +neighborhood +dressed +ceremony +##ds +influenced +hers +visual +stairs +decades +inner +kansas +hung +hoped +gain +scheduled +downtown +engaged +austria +clock +norway +certainly +pale +protected +1913 +victor +employees +plate +putting +surrounded +##ists +finishing +blues +tropical +##ries +minnesota +consider +philippines +accept +54 +retrieved +1900 +concern +anderson +properties +institution +gordon +successfully +vietnam +##dy +backing +outstanding +muslim +crossing +folk +producing +usual +demand +occurs +observed +lawyer +educated +##ana +kelly +string +pleasure +budget +items +quietly +colorado +philip +typical +##worth +derived +600 +survived +asks +mental +##ide +56 +jake +jews +distinguished +ltd +1911 +sri +extremely +53 +athletic +loud +thousands +worried +shadow +transportation +horses +weapon +arena +importance +users +tim +objects +contributed +dragon +douglas +aware +senator +johnny +jordan +sisters +engines +flag +investment +samuel +shock +capable +clark +row +wheel +refers +session +familiar +biggest +wins +hate +maintained +drove +hamilton +request +expressed +injured +underground +churches +walker +wars +tunnel +passes +stupid +agriculture +softly +cabinet +regarded +joining +indiana +##ea +##ms +push +dates +spend +behavior +woods +protein +gently +chase +morgan +mention +burning +wake +combination +occur +mirror +leads +jimmy +indeed +impossible +singapore +paintings +covering +##nes +soldier +locations +attendance +sell +historian +wisconsin +invasion +argued +painter +diego +changing +egypt +##don +experienced +inches +##ku +missouri +vol +grounds +spoken +switzerland +##gan +reform +rolling +ha +forget +massive +resigned +burned +allen +tennessee +locked +values +improved +##mo +wounded +universe +sick +dating +facing +pack +purchase +user +##pur +moments +##ul +merged +anniversary +1908 +coal +brick +understood +causes +dynasty +queensland +establish +stores +crisis +promote +hoping +views +cards +referee +extension +##si +raise +arizona +improve +colonial +formal +charged +##rt +palm +lucky +hide +rescue +faces +95 +feelings +candidates +juan +##ell +goods +6th +courses +weekend +59 +luke +cash +fallen +##om +delivered +affected +installed +carefully +tries +swiss +hollywood +costs +lincoln +responsibility +##he +shore +file +proper +normally +maryland +assistance +jump +constant +offering +friendly +waters +persons +realize +contain +trophy +800 +partnership +factor +58 +musicians +cry +bound +oregon +indicated +hero +houston +medium +##ure +consisting +somewhat +##ara +57 +cycle +##che +beer +moore +frederick +gotten +eleven +worst +weak +approached +arranged +chin +loan +universal +bond +fifteen +pattern +disappeared +##ney +translated +##zed +lip +arab +capture +interests +insurance +##chi +shifted +cave +prix +warning +sections +courts +coat +plot +smell +feed +golf +favorite +maintain +knife +vs +voted +degrees +finance +quebec +opinion +translation +manner +ruled +operate +productions +choose +musician +discovery +confused +tired +separated +stream +techniques +committed +attend +ranking +kings +throw +passengers +measure +horror +fan +mining +sand +danger +salt +calm +decade +dam +require +runner +##ik +rush +associate +greece +##ker +rivers +consecutive +matthew +##ski +sighed +sq +documents +steam +edited +closing +tie +accused +1905 +##ini +islamic +distributed +directors +organisation +bruce +7th +breathing +mad +lit +arrival +concrete +taste +08 +composition +shaking +faster +amateur +adjacent +stating +1906 +twin +flew +##ran +tokyo +publications +##tone +obviously +ridge +storage +1907 +carl +pages +concluded +desert +driven +universities +ages +terminal +sequence +borough +250 +constituency +creative +cousin +economics +dreams +margaret +notably +reduce +montreal +mode +17th +ears +saved +jan +vocal +##ica +1909 +andy +##jo +riding +roughly +threatened +##ise +meters +meanwhile +landed +compete +repeated +grass +czech +regularly +charges +tea +sudden +appeal +##ung +solution +describes +pierre +classification +glad +parking +##ning +belt +physics +99 +rachel +add +hungarian +participate +expedition +damaged +gift +childhood +85 +fifty +##red +mathematics +jumped +letting +defensive +mph +##ux +##gh +testing +##hip +hundreds +shoot +owners +matters +smoke +israeli +kentucky +dancing +mounted +grandfather +emma +designs +profit +argentina +##gs +truly +li +lawrence +cole +begun +detroit +willing +branches +smiling +decide +miami +enjoyed +recordings +##dale +poverty +ethnic +gay +##bi +gary +arabic +09 +accompanied +##one +##ons +fishing +determine +residential +acid +##ary +alice +returns +starred +mail +##ang +jonathan +strategy +##ue +net +forty +cook +businesses +equivalent +commonwealth +distinct +ill +##cy +seriously +##ors +##ped +shift +harris +replace +rio +imagine +formula +ensure +##ber +additionally +scheme +conservation +occasionally +purposes +feels +favor +##and +##ore +1930s +contrast +hanging +hunt +movies +1904 +instruments +victims +danish +christopher +busy +demon +sugar +earliest +colony +studying +balance +duties +##ks +belgium +slipped +carter +05 +visible +stages +iraq +fifa +##im +commune +forming +zero +07 +continuing +talked +counties +legend +bathroom +option +tail +clay +daughters +afterwards +severe +jaw +visitors +##ded +devices +aviation +russell +kate +##vi +entering +subjects +##ino +temporary +swimming +forth +smooth +ghost +audio +bush +operates +rocks +movements +signs +eddie +##tz +ann +voices +honorary +06 +memories +dallas +pure +measures +racial +promised +66 +harvard +ceo +16th +parliamentary +indicate +benefit +flesh +dublin +louisiana +1902 +1901 +patient +sleeping +1903 +membership +coastal +medieval +wanting +element +scholars +rice +62 +limit +survive +makeup +rating +definitely +collaboration +obvious +##tan +boss +ms +baron +birthday +linked +soil +diocese +##lan +ncaa +##mann +offensive +shell +shouldn +waist +##tus +plain +ross +organ +resolution +manufacturing +adding +relative +kennedy +98 +whilst +moth +marketing +gardens +crash +72 +heading +partners +credited +carlos +moves +cable +##zi +marshall +##out +depending +bottle +represents +rejected +responded +existed +04 +jobs +denmark +lock +##ating +treated +graham +routes +talent +commissioner +drugs +secure +tests +reign +restored +photography +##gi +contributions +oklahoma +designer +disc +grin +seattle +robin +paused +atlanta +unusual +##gate +praised +las +laughing +satellite +hungary +visiting +##sky +interesting +factors +deck +poems +norman +##water +stuck +speaker +rifle +domain +premiered +##her +dc +comics +actors +01 +reputation +eliminated +8th +ceiling +prisoners +script +##nce +leather +austin +mississippi +rapidly +admiral +parallel +charlotte +guilty +tools +gender +divisions +fruit +##bs +laboratory +nelson +fantasy +marry +rapid +aunt +tribe +requirements +aspects +suicide +amongst +adams +bone +ukraine +abc +kick +sees +edinburgh +clothing +column +rough +gods +hunting +broadway +gathered +concerns +##ek +spending +ty +12th +snapped +requires +solar +bones +cavalry +##tta +iowa +drinking +waste +index +franklin +charity +thompson +stewart +tip +flash +landscape +friday +enjoy +singh +poem +listening +##back +eighth +fred +differences +adapted +bomb +ukrainian +surgery +corporate +masters +anywhere +##more +waves +odd +sean +portugal +orleans +dick +debate +kent +eating +puerto +cleared +96 +expect +cinema +97 +guitarist +blocks +electrical +agree +involving +depth +dying +panel +struggle +##ged +peninsula +adults +novels +emerged +vienna +metro +debuted +shoes +tamil +songwriter +meets +prove +beating +instance +heaven +scared +sending +marks +artistic +passage +superior +03 +significantly +shopping +##tive +retained +##izing +malaysia +technique +cheeks +##ola +warren +maintenance +destroy +extreme +allied +120 +appearing +##yn +fill +advice +alabama +qualifying +policies +cleveland +hat +battery +smart +authors +10th +soundtrack +acted +dated +lb +glance +equipped +coalition +funny +outer +ambassador +roy +possibility +couples +campbell +dna +loose +ethan +supplies +1898 +gonna +88 +monster +##res +shake +agents +frequency +springs +dogs +practices +61 +gang +plastic +easier +suggests +gulf +blade +exposed +colors +industries +markets +pan +nervous +electoral +charts +legislation +ownership +##idae +mac +appointment +shield +copy +assault +socialist +abbey +monument +license +throne +employment +jay +93 +replacement +charter +cloud +powered +suffering +accounts +oak +connecticut +strongly +wright +colour +crystal +13th +context +welsh +networks +voiced +gabriel +jerry +##cing +forehead +mp +##ens +manage +schedule +totally +remix +##ii +forests +occupation +print +nicholas +brazilian +strategic +vampires +engineers +76 +roots +seek +correct +instrumental +und +alfred +backed +hop +##des +stanley +robinson +traveled +wayne +welcome +austrian +achieve +67 +exit +rates +1899 +strip +whereas +##cs +sing +deeply +adventure +bobby +rick +jamie +careful +components +cap +useful +personality +knee +##shi +pushing +hosts +02 +protest +ca +ottoman +symphony +##sis +63 +boundary +1890 +processes +considering +considerable +tons +##work +##ft +##nia +cooper +trading +dear +conduct +91 +illegal +apple +revolutionary +holiday +definition +harder +##van +jacob +circumstances +destruction +##lle +popularity +grip +classified +liverpool +donald +baltimore +flows +seeking +honour +approval +92 +mechanical +till +happening +statue +critic +increasingly +immediate +describe +commerce +stare +##ster +indonesia +meat +rounds +boats +baker +orthodox +depression +formally +worn +naked +claire +muttered +sentence +11th +emily +document +77 +criticism +wished +vessel +spiritual +bent +virgin +parker +minimum +murray +lunch +danny +printed +compilation +keyboards +false +blow +belonged +68 +raising +78 +cutting +##board +pittsburgh +##up +9th +shadows +81 +hated +indigenous +jon +15th +barry +scholar +ah +##zer +oliver +##gy +stick +susan +meetings +attracted +spell +romantic +##ver +ye +1895 +photo +demanded +customers +##ac +1896 +logan +revival +keys +modified +commanded +jeans +##ious +upset +raw +phil +detective +hiding +resident +vincent +##bly +experiences +diamond +defeating +coverage +lucas +external +parks +franchise +helen +bible +successor +percussion +celebrated +il +lift +profile +clan +romania +##ied +mills +##su +nobody +achievement +shrugged +fault +1897 +rhythm +initiative +breakfast +carbon +700 +69 +lasted +violent +74 +wound +ken +killer +gradually +filmed +°c +dollars +processing +94 +remove +criticized +guests +sang +chemistry +##vin +legislature +disney +##bridge +uniform +escaped +integrated +proposal +purple +denied +liquid +karl +influential +morris +nights +stones +intense +experimental +twisted +71 +84 +##ld +pace +nazi +mitchell +ny +blind +reporter +newspapers +14th +centers +burn +basin +forgotten +surviving +filed +collections +monastery +losses +manual +couch +description +appropriate +merely +tag +missions +sebastian +restoration +replacing +triple +73 +elder +julia +warriors +benjamin +julian +convinced +stronger +amazing +declined +versus +merchant +happens +output +finland +bare +barbara +absence +ignored +dawn +injuries +##port +producers +##ram +82 +luis +##ities +kw +admit +expensive +electricity +nba +exception +symbol +##ving +ladies +shower +sheriff +characteristics +##je +aimed +button +ratio +effectively +summit +angle +jury +bears +foster +vessels +pants +executed +evans +dozen +advertising +kicked +patrol +1889 +competitions +lifetime +principles +athletics +##logy +birmingham +sponsored +89 +rob +nomination +1893 +acoustic +##sm +creature +longest +##tra +credits +harbor +dust +josh +##so +territories +milk +infrastructure +completion +thailand +indians +leon +archbishop +##sy +assist +pitch +blake +arrangement +girlfriend +serbian +operational +hence +sad +scent +fur +dj +sessions +hp +refer +rarely +##ora +exists +1892 +##ten +scientists +dirty +penalty +burst +portrait +seed +79 +pole +limits +rival +1894 +stable +alpha +grave +constitutional +alcohol +arrest +flower +mystery +devil +architectural +relationships +greatly +habitat +##istic +larry +progressive +remote +cotton +##ics +##ok +preserved +reaches +##ming +cited +86 +vast +scholarship +decisions +cbs +joy +teach +1885 +editions +knocked +eve +searching +partly +participation +gap +animated +fate +excellent +##ett +na +87 +alternate +saints +youngest +##ily +climbed +##ita +##tors +suggest +##ct +discussion +staying +choir +lakes +jacket +revenue +nevertheless +peaked +instrument +wondering +annually +managing +neil +1891 +signing +terry +##ice +apply +clinical +brooklyn +aim +catherine +fuck +farmers +figured +ninth +pride +hugh +evolution +ordinary +involvement +comfortable +shouted +tech +encouraged +taiwan +representation +sharing +##lia +##em +panic +exact +cargo +competing +fat +cried +83 +1920s +occasions +pa +cabin +borders +utah +marcus +##isation +badly +muscles +##ance +victorian +transition +warner +bet +permission +##rin +slave +terrible +similarly +shares +seth +uefa +possession +medals +benefits +colleges +lowered +perfectly +mall +transit +##ye +##kar +publisher +##ened +harrison +deaths +elevation +##ae +asleep +machines +sigh +ash +hardly +argument +occasion +parent +leo +decline +1888 +contribution +##ua +concentration +1000 +opportunities +hispanic +guardian +extent +emotions +hips +mason +volumes +bloody +controversy +diameter +steady +mistake +phoenix +identify +violin +##sk +departure +richmond +spin +funeral +enemies +1864 +gear +literally +connor +random +sergeant +grab +confusion +1865 +transmission +informed +op +leaning +sacred +suspended +thinks +gates +portland +luck +agencies +yours +hull +expert +muscle +layer +practical +sculpture +jerusalem +latest +lloyd +statistics +deeper +recommended +warrior +arkansas +mess +supports +greg +eagle +1880 +recovered +rated +concerts +rushed +##ano +stops +eggs +files +premiere +keith +##vo +delhi +turner +pit +affair +belief +paint +##zing +mate +##ach +##ev +victim +##ology +withdrew +bonus +styles +fled +##ud +glasgow +technologies +funded +nbc +adaptation +##ata +portrayed +cooperation +supporters +judges +bernard +justin +hallway +ralph +##ick +graduating +controversial +distant +continental +spider +bite +##ho +recognize +intention +mixing +##ese +egyptian +bow +tourism +suppose +claiming +tiger +dominated +participants +vi +##ru +nurse +partially +tape +##rum +psychology +##rn +essential +touring +duo +voting +civilian +emotional +channels +##king +apparent +hebrew +1887 +tommy +carrier +intersection +beast +hudson +##gar +##zo +lab +nova +bench +discuss +costa +##ered +detailed +behalf +drivers +unfortunately +obtain +##lis +rocky +##dae +siege +friendship +honey +##rian +1861 +amy +hang +posted +governments +collins +respond +wildlife +preferred +operator +##po +laura +pregnant +videos +dennis +suspected +boots +instantly +weird +automatic +businessman +alleged +placing +throwing +ph +mood +1862 +perry +venue +jet +remainder +##lli +##ci +passion +biological +boyfriend +1863 +dirt +buffalo +ron +segment +fa +abuse +##era +genre +thrown +stroke +colored +stress +exercise +displayed +##gen +struggled +##tti +abroad +dramatic +wonderful +thereafter +madrid +component +widespread +##sed +tale +citizen +todd +monday +1886 +vancouver +overseas +forcing +crying +descent +##ris +discussed +substantial +ranks +regime +1870 +provinces +switch +drum +zane +ted +tribes +proof +lp +cream +researchers +volunteer +manor +silk +milan +donated +allies +venture +principle +delivery +enterprise +##ves +##ans +bars +traditionally +witch +reminded +copper +##uk +pete +inter +links +colin +grinned +elsewhere +competitive +frequent +##oy +scream +##hu +tension +texts +submarine +finnish +defending +defend +pat +detail +1884 +affiliated +stuart +themes +villa +periods +tool +belgian +ruling +crimes +answers +folded +licensed +resort +demolished +hans +lucy +1881 +lion +traded +photographs +writes +craig +##fa +trials +generated +beth +noble +debt +percentage +yorkshire +erected +ss +viewed +grades +confidence +ceased +islam +telephone +retail +##ible +chile +m² +roberts +sixteen +##ich +commented +hampshire +innocent +dual +pounds +checked +regulations +afghanistan +sung +rico +liberty +assets +bigger +options +angels +relegated +tribute +wells +attending +leaf +##yan +butler +romanian +forum +monthly +lisa +patterns +gmina +##tory +madison +hurricane +rev +##ians +bristol +##ula +elite +valuable +disaster +democracy +awareness +germans +freyja +##ins +loop +absolutely +paying +populations +maine +sole +prayer +spencer +releases +doorway +bull +##ani +lover +midnight +conclusion +##sson +thirteen +lily +mediterranean +##lt +nhl +proud +sample +##hill +drummer +guinea +##ova +murphy +climb +##ston +instant +attributed +horn +ain +railways +steven +##ao +autumn +ferry +opponent +root +traveling +secured +corridor +stretched +tales +sheet +trinity +cattle +helps +indicates +manhattan +murdered +fitted +1882 +gentle +grandmother +mines +shocked +vegas +produces +##light +caribbean +##ou +belong +continuous +desperate +drunk +historically +trio +waved +raf +dealing +nathan +bat +murmured +interrupted +residing +scientist +pioneer +harold +aaron +##net +delta +attempting +minority +mini +believes +chorus +tend +lots +eyed +indoor +load +shots +updated +jail +##llo +concerning +connecting +wealth +##ved +slaves +arrive +rangers +sufficient +rebuilt +##wick +cardinal +flood +muhammad +whenever +relation +runners +moral +repair +viewers +arriving +revenge +punk +assisted +bath +fairly +breathe +lists +innings +illustrated +whisper +nearest +voters +clinton +ties +ultimate +screamed +beijing +lions +andre +fictional +gathering +comfort +radar +suitable +dismissed +hms +ban +pine +wrist +atmosphere +voivodeship +bid +timber +##ned +##nan +giants +##ane +cameron +recovery +uss +identical +categories +switched +serbia +laughter +noah +ensemble +therapy +peoples +touching +##off +locally +pearl +platforms +everywhere +ballet +tables +lanka +herbert +outdoor +toured +derek +1883 +spaces +contested +swept +1878 +exclusive +slight +connections +##dra +winds +prisoner +collective +bangladesh +tube +publicly +wealthy +thai +##ys +isolated +select +##ric +insisted +pen +fortune +ticket +spotted +reportedly +animation +enforcement +tanks +110 +decides +wider +lowest +owen +##time +nod +hitting +##hn +gregory +furthermore +magazines +fighters +solutions +##ery +pointing +requested +peru +reed +chancellor +knights +mask +worker +eldest +flames +reduction +1860 +volunteers +##tis +reporting +##hl +wire +advisory +endemic +origins +settlers +pursue +knock +consumer +1876 +eu +compound +creatures +mansion +sentenced +ivan +deployed +guitars +frowned +involves +mechanism +kilometers +perspective +shops +maps +terminus +duncan +alien +fist +bridges +##pers +heroes +fed +derby +swallowed +##ros +patent +sara +illness +characterized +adventures +slide +hawaii +jurisdiction +##op +organised +##side +adelaide +walks +biology +se +##ties +rogers +swing +tightly +boundaries +##rie +prepare +implementation +stolen +##sha +certified +colombia +edwards +garage +##mm +recalled +##ball +rage +harm +nigeria +breast +##ren +furniture +pupils +settle +##lus +cuba +balls +client +alaska +21st +linear +thrust +celebration +latino +genetic +terror +##cia +##ening +lightning +fee +witness +lodge +establishing +skull +##ique +earning +hood +##ei +rebellion +wang +sporting +warned +missile +devoted +activist +porch +worship +fourteen +package +1871 +decorated +##shire +housed +##ock +chess +sailed +doctors +oscar +joan +treat +garcia +harbour +jeremy +##ire +traditions +dominant +jacques +##gon +##wan +relocated +1879 +amendment +sized +companion +simultaneously +volleyball +spun +acre +increases +stopping +loves +belongs +affect +drafted +tossed +scout +battles +1875 +filming +shoved +munich +tenure +vertical +romance +pc +##cher +argue +##ical +craft +ranging +www +opens +honest +tyler +yesterday +virtual +##let +muslims +reveal +snake +immigrants +radical +screaming +speakers +firing +saving +belonging +ease +lighting +prefecture +blame +farmer +hungry +grows +rubbed +beam +sur +subsidiary +##cha +armenian +sao +dropping +conventional +##fer +microsoft +reply +qualify +spots +1867 +sweat +festivals +##ken +immigration +physician +discover +exposure +sandy +explanation +isaac +implemented +##fish +hart +initiated +connect +stakes +presents +heights +householder +pleased +tourist +regardless +slip +closest +##ction +surely +sultan +brings +riley +preparation +aboard +slammed +baptist +experiment +ongoing +interstate +organic +playoffs +##ika +1877 +130 +##tar +hindu +error +tours +tier +plenty +arrangements +talks +trapped +excited +sank +ho +athens +1872 +denver +welfare +suburb +athletes +trick +diverse +belly +exclusively +yelled +1868 +##med +conversion +##ette +1874 +internationally +computers +conductor +abilities +sensitive +hello +dispute +measured +globe +rocket +prices +amsterdam +flights +tigers +inn +municipalities +emotion +references +3d +##mus +explains +airlines +manufactured +pm +archaeological +1873 +interpretation +devon +comment +##ites +settlements +kissing +absolute +improvement +suite +impressed +barcelona +sullivan +jefferson +towers +jesse +julie +##tin +##lu +grandson +hi +gauge +regard +rings +interviews +trace +raymond +thumb +departments +burns +serial +bulgarian +scores +demonstrated +##ix +1866 +kyle +alberta +underneath +romanized +##ward +relieved +acquisition +phrase +cliff +reveals +han +cuts +merger +custom +##dar +nee +gilbert +graduation +##nts +assessment +cafe +difficulty +demands +swung +democrat +jennifer +commons +1940s +grove +##yo +completing +focuses +sum +substitute +bearing +stretch +reception +##py +reflected +essentially +destination +pairs +##ched +survival +resource +##bach +promoting +doubles +messages +tear +##down +##fully +parade +florence +harvey +incumbent +partial +framework +900 +pedro +frozen +procedure +olivia +controls +##mic +shelter +personally +temperatures +##od +brisbane +tested +sits +marble +comprehensive +oxygen +leonard +##kov +inaugural +iranian +referring +quarters +attitude +##ivity +mainstream +lined +mars +dakota +norfolk +unsuccessful +##° +explosion +helicopter +congressional +##sing +inspector +bitch +seal +departed +divine +##ters +coaching +examination +punishment +manufacturer +sink +columns +unincorporated +signals +nevada +squeezed +dylan +dining +photos +martial +manuel +eighteen +elevator +brushed +plates +ministers +ivy +congregation +##len +slept +specialized +taxes +curve +restricted +negotiations +likes +statistical +arnold +inspiration +execution +bold +intermediate +significance +margin +ruler +wheels +gothic +intellectual +dependent +listened +eligible +buses +widow +syria +earn +cincinnati +collapsed +recipient +secrets +accessible +philippine +maritime +goddess +clerk +surrender +breaks +playoff +database +##ified +##lon +ideal +beetle +aspect +soap +regulation +strings +expand +anglo +shorter +crosses +retreat +tough +coins +wallace +directions +pressing +##oon +shipping +locomotives +comparison +topics +nephew +##mes +distinction +honors +travelled +sierra +ibn +##over +fortress +sa +recognised +carved +1869 +clients +##dan +intent +##mar +coaches +describing +bread +##ington +beaten +northwestern +##ona +merit +youtube +collapse +challenges +em +historians +objective +submitted +virus +attacking +drake +assume +##ere +diseases +marc +stem +leeds +##cus +##ab +farming +glasses +##lock +visits +nowhere +fellowship +relevant +carries +restaurants +experiments +101 +constantly +bases +targets +shah +tenth +opponents +verse +territorial +##ira +writings +corruption +##hs +instruction +inherited +reverse +emphasis +##vic +employee +arch +keeps +rabbi +watson +payment +uh +##ala +nancy +##tre +venice +fastest +sexy +banned +adrian +properly +ruth +touchdown +dollar +boards +metre +circles +edges +favour +comments +ok +travels +liberation +scattered +firmly +##ular +holland +permitted +diesel +kenya +den +originated +##ral +demons +resumed +dragged +rider +##rus +servant +blinked +extend +torn +##ias +##sey +input +meal +everybody +cylinder +kinds +camps +##fe +bullet +logic +##wn +croatian +evolved +healthy +fool +chocolate +wise +preserve +pradesh +##ess +respective +1850 +##ew +chicken +artificial +gross +corresponding +convicted +cage +caroline +dialogue +##dor +narrative +stranger +mario +br +christianity +failing +trent +commanding +buddhist +1848 +maurice +focusing +yale +bike +altitude +##ering +mouse +revised +##sley +veteran +##ig +pulls +theology +crashed +campaigns +legion +##ability +drag +excellence +customer +cancelled +intensity +excuse +##lar +liga +participating +contributing +printing +##burn +variable +##rk +curious +bin +legacy +renaissance +##my +symptoms +binding +vocalist +dancer +##nie +grammar +gospel +democrats +ya +enters +sc +diplomatic +hitler +##ser +clouds +mathematical +quit +defended +oriented +##heim +fundamental +hardware +impressive +equally +convince +confederate +guilt +chuck +sliding +##ware +magnetic +narrowed +petersburg +bulgaria +otto +phd +skill +##ama +reader +hopes +pitcher +reservoir +hearts +automatically +expecting +mysterious +bennett +extensively +imagined +seeds +monitor +fix +##ative +journalism +struggling +signature +ranch +encounter +photographer +observation +protests +##pin +influences +##hr +calendar +##all +cruz +croatia +locomotive +hughes +naturally +shakespeare +basement +hook +uncredited +faded +theories +approaches +dare +phillips +filling +fury +obama +##ain +efficient +arc +deliver +min +raid +breeding +inducted +leagues +efficiency +axis +montana +eagles +##ked +supplied +instructions +karen +picking +indicating +trap +anchor +practically +christians +tomb +vary +occasional +electronics +lords +readers +newcastle +faint +innovation +collect +situations +engagement +160 +claude +mixture +##feld +peer +tissue +logo +lean +##ration +°f +floors +##ven +architects +reducing +##our +##ments +rope +1859 +ottawa +##har +samples +banking +declaration +proteins +resignation +francois +saudi +advocate +exhibited +armor +twins +divorce +##ras +abraham +reviewed +jo +temporarily +matrix +physically +pulse +curled +##ena +difficulties +bengal +usage +##ban +annie +riders +certificate +##pi +holes +warsaw +distinctive +jessica +##mon +mutual +1857 +customs +circular +eugene +removal +loaded +mere +vulnerable +depicted +generations +dame +heir +enormous +lightly +climbing +pitched +lessons +pilots +nepal +ram +google +preparing +brad +louise +renowned +##₂ +liam +##ably +plaza +shaw +sophie +brilliant +bills +##bar +##nik +fucking +mainland +server +pleasant +seized +veterans +jerked +fail +beta +brush +radiation +stored +warmth +southeastern +nate +sin +raced +berkeley +joke +athlete +designation +trunk +##low +roland +qualification +archives +heels +artwork +receives +judicial +reserves +##bed +woke +installation +abu +floating +fake +lesser +excitement +interface +concentrated +addressed +characteristic +amanda +saxophone +monk +auto +##bus +releasing +egg +dies +interaction +defender +ce +outbreak +glory +loving +##bert +sequel +consciousness +http +awake +ski +enrolled +##ress +handling +rookie +brow +somebody +biography +warfare +amounts +contracts +presentation +fabric +dissolved +challenged +meter +psychological +lt +elevated +rally +accurate +##tha +hospitals +undergraduate +specialist +venezuela +exhibit +shed +nursing +protestant +fluid +structural +footage +jared +consistent +prey +##ska +succession +reflect +exile +lebanon +wiped +suspect +shanghai +resting +integration +preservation +marvel +variant +pirates +sheep +rounded +capita +sailing +colonies +manuscript +deemed +variations +clarke +functional +emerging +boxing +relaxed +curse +azerbaijan +heavyweight +nickname +editorial +rang +grid +tightened +earthquake +flashed +miguel +rushing +##ches +improvements +boxes +brooks +180 +consumption +molecular +felix +societies +repeatedly +variation +aids +civic +graphics +professionals +realm +autonomous +receiver +delayed +workshop +militia +chairs +trump +canyon +##point +harsh +extending +lovely +happiness +##jan +stake +eyebrows +embassy +wellington +hannah +##ella +sony +corners +bishops +swear +cloth +contents +xi +namely +commenced +1854 +stanford +nashville +courage +graphic +commitment +garrison +##bin +hamlet +clearing +rebels +attraction +literacy +cooking +ruins +temples +jenny +humanity +celebrate +hasn +freight +sixty +rebel +bastard +##art +newton +##ada +deer +##ges +##ching +smiles +delaware +singers +##ets +approaching +assists +flame +##ph +boulevard +barrel +planted +##ome +pursuit +##sia +consequences +posts +shallow +invitation +rode +depot +ernest +kane +rod +concepts +preston +topic +chambers +striking +blast +arrives +descendants +montgomery +ranges +worlds +##lay +##ari +span +chaos +praise +##ag +fewer +1855 +sanctuary +mud +fbi +##ions +programmes +maintaining +unity +harper +bore +handsome +closure +tournaments +thunder +nebraska +linda +facade +puts +satisfied +argentine +dale +cork +dome +panama +##yl +1858 +tasks +experts +##ates +feeding +equation +##las +##ida +##tu +engage +bryan +##ax +um +quartet +melody +disbanded +sheffield +blocked +gasped +delay +kisses +maggie +connects +##non +sts +poured +creator +publishers +##we +guided +ellis +extinct +hug +gaining +##ord +complicated +##bility +poll +clenched +investigate +##use +thereby +quantum +spine +cdp +humor +kills +administered +semifinals +##du +encountered +ignore +##bu +commentary +##maker +bother +roosevelt +140 +plains +halfway +flowing +cultures +crack +imprisoned +neighboring +airline +##ses +##view +##mate +##ec +gather +wolves +marathon +transformed +##ill +cruise +organisations +carol +punch +exhibitions +numbered +alarm +ratings +daddy +silently +##stein +queens +colours +impression +guidance +liu +tactical +##rat +marshal +della +arrow +##ings +rested +feared +tender +owns +bitter +advisor +escort +##ides +spare +farms +grants +##ene +dragons +encourage +colleagues +cameras +##und +sucked +pile +spirits +prague +statements +suspension +landmark +fence +torture +recreation +bags +permanently +survivors +pond +spy +predecessor +bombing +coup +##og +protecting +transformation +glow +##lands +##book +dug +priests +andrea +feat +barn +jumping +##chen +##ologist +##con +casualties +stern +auckland +pipe +serie +revealing +ba +##bel +trevor +mercy +spectrum +yang +consist +governing +collaborated +possessed +epic +comprises +blew +shane +##ack +lopez +honored +magical +sacrifice +judgment +perceived +hammer +mtv +baronet +tune +das +missionary +sheets +350 +neutral +oral +threatening +attractive +shade +aims +seminary +##master +estates +1856 +michel +wounds +refugees +manufacturers +##nic +mercury +syndrome +porter +##iya +##din +hamburg +identification +upstairs +purse +widened +pause +cared +breathed +affiliate +santiago +prevented +celtic +fisher +125 +recruited +byzantine +reconstruction +farther +##mp +diet +sake +au +spite +sensation +##ert +blank +separation +105 +##hon +vladimir +armies +anime +##lie +accommodate +orbit +cult +sofia +archive +##ify +##box +founders +sustained +disorder +honours +northeastern +mia +crops +violet +threats +blanket +fires +canton +followers +southwestern +prototype +voyage +assignment +altered +moderate +protocol +pistol +##eo +questioned +brass +lifting +1852 +math +authored +##ual +doug +dimensional +dynamic +##san +1851 +pronounced +grateful +quest +uncomfortable +boom +presidency +stevens +relating +politicians +chen +barrier +quinn +diana +mosque +tribal +cheese +palmer +portions +sometime +chester +treasure +wu +bend +download +millions +reforms +registration +##osa +consequently +monitoring +ate +preliminary +brandon +invented +ps +eaten +exterior +intervention +ports +documented +log +displays +lecture +sally +favourite +##itz +vermont +lo +invisible +isle +breed +##ator +journalists +relay +speaks +backward +explore +midfielder +actively +stefan +procedures +cannon +blond +kenneth +centered +servants +chains +libraries +malcolm +essex +henri +slavery +##hal +facts +fairy +coached +cassie +cats +washed +cop +##fi +announcement +item +2000s +vinyl +activated +marco +frontier +growled +curriculum +##das +loyal +accomplished +leslie +ritual +kenny +##00 +vii +napoleon +hollow +hybrid +jungle +stationed +friedrich +counted +##ulated +platinum +theatrical +seated +col +rubber +glen +1840 +diversity +healing +extends +id +provisions +administrator +columbus +##oe +tributary +te +assured +org +##uous +prestigious +examined +lectures +grammy +ronald +associations +bailey +allan +essays +flute +believing +consultant +proceedings +travelling +1853 +kit +kerala +yugoslavia +buddy +methodist +##ith +burial +centres +batman +##nda +discontinued +bo +dock +stockholm +lungs +severely +##nk +citing +manga +##ugh +steal +mumbai +iraqi +robot +celebrity +bride +broadcasts +abolished +pot +joel +overhead +franz +packed +reconnaissance +johann +acknowledged +introduce +handled +doctorate +developments +drinks +alley +palestine +##nis +##aki +proceeded +recover +bradley +grain +patch +afford +infection +nationalist +legendary +##ath +interchange +virtually +gen +gravity +exploration +amber +vital +wishes +powell +doctrine +elbow +screenplay +##bird +contribute +indonesian +pet +creates +##com +enzyme +kylie +discipline +drops +manila +hunger +##ien +layers +suffer +fever +bits +monica +keyboard +manages +##hood +searched +appeals +##bad +testament +grande +reid +##war +beliefs +congo +##ification +##dia +si +requiring +##via +casey +1849 +regret +streak +rape +depends +syrian +sprint +pound +tourists +upcoming +pub +##xi +tense +##els +practiced +echo +nationwide +guild +motorcycle +liz +##zar +chiefs +desired +elena +bye +precious +absorbed +relatives +booth +pianist +##mal +citizenship +exhausted +wilhelm +##ceae +##hed +noting +quarterback +urge +hectares +##gue +ace +holly +##tal +blonde +davies +parked +sustainable +stepping +twentieth +airfield +galaxy +nest +chip +##nell +tan +shaft +paulo +requirement +##zy +paradise +tobacco +trans +renewed +vietnamese +##cker +##ju +suggesting +catching +holmes +enjoying +md +trips +colt +holder +butterfly +nerve +reformed +cherry +bowling +trailer +carriage +goodbye +appreciate +toy +joshua +interactive +enabled +involve +##kan +collar +determination +bunch +facebook +recall +shorts +superintendent +episcopal +frustration +giovanni +nineteenth +laser +privately +array +circulation +##ovic +armstrong +deals +painful +permit +discrimination +##wi +aires +retiring +cottage +ni +##sta +horizon +ellen +jamaica +ripped +fernando +chapters +playstation +patron +lecturer +navigation +behaviour +genes +georgian +export +solomon +rivals +swift +seventeen +rodriguez +princeton +independently +sox +1847 +arguing +entity +casting +hank +criteria +oakland +geographic +milwaukee +reflection +expanding +conquest +dubbed +##tv +halt +brave +brunswick +doi +arched +curtis +divorced +predominantly +somerset +streams +ugly +zoo +horrible +curved +buenos +fierce +dictionary +vector +theological +unions +handful +stability +chan +punjab +segments +##lly +altar +ignoring +gesture +monsters +pastor +##stone +thighs +unexpected +operators +abruptly +coin +compiled +associates +improving +migration +pin +##ose +compact +collegiate +reserved +##urs +quarterfinals +roster +restore +assembled +hurry +oval +##cies +1846 +flags +martha +##del +victories +sharply +##rated +argues +deadly +neo +drawings +symbols +performer +##iel +griffin +restrictions +editing +andrews +java +journals +arabia +compositions +dee +pierce +removing +hindi +casino +runway +civilians +minds +nasa +hotels +##zation +refuge +rent +retain +potentially +conferences +suburban +conducting +##tto +##tions +##tle +descended +massacre +##cal +ammunition +terrain +fork +souls +counts +chelsea +durham +drives +cab +##bank +perth +realizing +palestinian +finn +simpson +##dal +betty +##ule +moreover +particles +cardinals +tent +evaluation +extraordinary +##oid +inscription +##works +wednesday +chloe +maintains +panels +ashley +trucks +##nation +cluster +sunlight +strikes +zhang +##wing +dialect +canon +##ap +tucked +##ws +collecting +##mas +##can +##sville +maker +quoted +evan +franco +aria +buying +cleaning +eva +closet +provision +apollo +clinic +rat +##ez +necessarily +ac +##gle +##ising +venues +flipped +cent +spreading +trustees +checking +authorized +##sco +disappointed +##ado +notion +duration +trumpet +hesitated +topped +brussels +rolls +theoretical +hint +define +aggressive +repeat +wash +peaceful +optical +width +allegedly +mcdonald +strict +copyright +##illa +investors +mar +jam +witnesses +sounding +miranda +michelle +privacy +hugo +harmony +##pp +valid +lynn +glared +nina +102 +headquartered +diving +boarding +gibson +##ncy +albanian +marsh +routine +dealt +enhanced +er +intelligent +substance +targeted +enlisted +discovers +spinning +observations +pissed +smoking +rebecca +capitol +visa +varied +costume +seemingly +indies +compensation +surgeon +thursday +arsenal +westminster +suburbs +rid +anglican +##ridge +knots +foods +alumni +lighter +fraser +whoever +portal +scandal +##ray +gavin +advised +instructor +flooding +terrorist +##ale +teenage +interim +senses +duck +teen +thesis +abby +eager +overcome +##ile +newport +glenn +rises +shame +##cc +prompted +priority +forgot +bomber +nicolas +protective +360 +cartoon +katherine +breeze +lonely +trusted +henderson +richardson +relax +banner +candy +palms +remarkable +##rio +legends +cricketer +essay +ordained +edmund +rifles +trigger +##uri +##away +sail +alert +1830 +audiences +penn +sussex +siblings +pursued +indianapolis +resist +rosa +consequence +succeed +avoided +1845 +##ulation +inland +##tie +##nna +counsel +profession +chronicle +hurried +##una +eyebrow +eventual +bleeding +innovative +cure +##dom +committees +accounting +con +scope +hardy +heather +tenor +gut +herald +codes +tore +scales +wagon +##oo +luxury +tin +prefer +fountain +triangle +bonds +darling +convoy +dried +traced +beings +troy +accidentally +slam +findings +smelled +joey +lawyers +outcome +steep +bosnia +configuration +shifting +toll +brook +performers +lobby +philosophical +construct +shrine +aggregate +boot +cox +phenomenon +savage +insane +solely +reynolds +lifestyle +##ima +nationally +holdings +consideration +enable +edgar +mo +mama +##tein +fights +relegation +chances +atomic +hub +conjunction +awkward +reactions +currency +finale +kumar +underwent +steering +elaborate +gifts +comprising +melissa +veins +reasonable +sunshine +chi +solve +trails +inhabited +elimination +ethics +huh +ana +molly +consent +apartments +layout +marines +##ces +hunters +bulk +##oma +hometown +##wall +##mont +cracked +reads +neighbouring +withdrawn +admission +wingspan +damned +anthology +lancashire +brands +batting +forgive +cuban +awful +##lyn +104 +dimensions +imagination +##ade +dante +##ship +tracking +desperately +goalkeeper +##yne +groaned +workshops +confident +burton +gerald +milton +circus +uncertain +slope +copenhagen +sophia +fog +philosopher +portraits +accent +cycling +varying +gripped +larvae +garrett +specified +scotia +mature +luther +kurt +rap +##kes +aerial +750 +ferdinand +heated +es +transported +##shan +safely +nonetheless +##orn +##gal +motors +demanding +##sburg +startled +##brook +ally +generate +caps +ghana +stained +demo +mentions +beds +ap +afterward +diary +##bling +utility +##iro +richards +1837 +conspiracy +conscious +shining +footsteps +observer +cyprus +urged +loyalty +developer +probability +olive +upgraded +gym +miracle +insects +graves +1844 +ourselves +hydrogen +amazon +katie +tickets +poets +##pm +planes +##pan +prevention +witnessed +dense +jin +randy +tang +warehouse +monroe +bang +archived +elderly +investigations +alec +granite +mineral +conflicts +controlling +aboriginal +carlo +##zu +mechanics +stan +stark +rhode +skirt +est +##berry +bombs +respected +##horn +imposed +limestone +deny +nominee +memphis +grabbing +disabled +##als +amusement +aa +frankfurt +corn +referendum +varies +slowed +disk +firms +unconscious +incredible +clue +sue +##zhou +twist +##cio +joins +idaho +chad +developers +computing +destroyer +103 +mortal +tucker +kingston +choices +yu +carson +1800 +os +whitney +geneva +pretend +dimension +staged +plateau +maya +##une +freestyle +##bc +rovers +hiv +##ids +tristan +classroom +prospect +##hus +honestly +diploma +lied +thermal +auxiliary +feast +unlikely +iata +##tel +morocco +pounding +treasury +lithuania +considerably +1841 +dish +1812 +geological +matching +stumbled +destroying +marched +brien +advances +cake +nicole +belle +settling +measuring +directing +##mie +tuesday +bassist +capabilities +stunned +fraud +torpedo +##list +##phone +anton +wisdom +surveillance +ruined +##ulate +lawsuit +healthcare +theorem +halls +trend +aka +horizontal +dozens +acquire +lasting +swim +hawk +gorgeous +fees +vicinity +decrease +adoption +tactics +##ography +pakistani +##ole +draws +##hall +willie +burke +heath +algorithm +integral +powder +elliott +brigadier +jackie +tate +varieties +darker +##cho +lately +cigarette +specimens +adds +##ree +##ensis +##inger +exploded +finalist +cia +murders +wilderness +arguments +nicknamed +acceptance +onwards +manufacture +robertson +jets +tampa +enterprises +blog +loudly +composers +nominations +1838 +ai +malta +inquiry +automobile +hosting +viii +rays +tilted +grief +museums +strategies +furious +euro +equality +cohen +poison +surrey +wireless +governed +ridiculous +moses +##esh +##room +vanished +##ito +barnes +attract +morrison +istanbul +##iness +absent +rotation +petition +janet +##logical +satisfaction +custody +deliberately +observatory +comedian +surfaces +pinyin +novelist +strictly +canterbury +oslo +monks +embrace +ibm +jealous +photograph +continent +dorothy +marina +doc +excess +holden +allegations +explaining +stack +avoiding +lance +storyline +majesty +poorly +spike +dos +bradford +raven +travis +classics +proven +voltage +pillow +fists +butt +1842 +interpreted +##car +1839 +gage +telegraph +lens +promising +expelled +casual +collector +zones +##min +silly +nintendo +##kh +##bra +downstairs +chef +suspicious +afl +flies +vacant +uganda +pregnancy +condemned +lutheran +estimates +cheap +decree +saxon +proximity +stripped +idiot +deposits +contrary +presenter +magnus +glacier +im +offense +edwin +##ori +upright +##long +bolt +##ois +toss +geographical +##izes +environments +delicate +marking +abstract +xavier +nails +windsor +plantation +occurring +equity +saskatchewan +fears +drifted +sequences +vegetation +revolt +##stic +1843 +sooner +fusion +opposing +nato +skating +1836 +secretly +ruin +lease +##oc +edit +##nne +flora +anxiety +ruby +##ological +##mia +tel +bout +taxi +emmy +frost +rainbow +compounds +foundations +rainfall +assassination +nightmare +dominican +##win +achievements +deserve +orlando +intact +armenia +##nte +calgary +valentine +106 +marion +proclaimed +theodore +bells +courtyard +thigh +gonzalez +console +troop +minimal +monte +everyday +##ence +##if +supporter +terrorism +buck +openly +presbyterian +activists +carpet +##iers +rubbing +uprising +##yi +cute +conceived +legally +##cht +millennium +cello +velocity +ji +rescued +cardiff +1835 +rex +concentrate +senators +beard +rendered +glowing +battalions +scouts +competitors +sculptor +catalogue +arctic +ion +raja +bicycle +wow +glancing +lawn +##woman +gentleman +lighthouse +publish +predicted +calculated +##val +variants +##gne +strain +##ui +winston +deceased +##nus +touchdowns +brady +caleb +sinking +echoed +crush +hon +blessed +protagonist +hayes +endangered +magnitude +editors +##tine +estimate +responsibilities +##mel +backup +laying +consumed +sealed +zurich +lovers +frustrated +##eau +ahmed +kicking +mit +treasurer +1832 +biblical +refuse +terrified +pump +agrees +genuine +imprisonment +refuses +plymouth +##hen +lou +##nen +tara +trembling +antarctic +ton +learns +##tas +crap +crucial +faction +atop +##borough +wrap +lancaster +odds +hopkins +erik +lyon +##eon +bros +##ode +snap +locality +tips +empress +crowned +cal +acclaimed +chuckled +##ory +clara +sends +mild +towel +##fl +##day +##а +wishing +assuming +interviewed +##bal +##die +interactions +eden +cups +helena +##lf +indie +beck +##fire +batteries +filipino +wizard +parted +##lam +traces +##born +rows +idol +albany +delegates +##ees +##sar +discussions +##ex +notre +instructed +belgrade +highways +suggestion +lauren +possess +orientation +alexandria +abdul +beats +salary +reunion +ludwig +alright +wagner +intimate +pockets +slovenia +hugged +brighton +merchants +cruel +stole +trek +slopes +repairs +enrollment +politically +underlying +promotional +counting +boeing +##bb +isabella +naming +##и +keen +bacteria +listing +separately +belfast +ussr +450 +lithuanian +anybody +ribs +sphere +martinez +cock +embarrassed +proposals +fragments +nationals +##fs +##wski +premises +fin +1500 +alpine +matched +freely +bounded +jace +sleeve +##af +gaming +pier +populated +evident +##like +frances +flooded +##dle +frightened +pour +trainer +framed +visitor +challenging +pig +wickets +##fold +infected +email +##pes +arose +##aw +reward +ecuador +oblast +vale +ch +shuttle +##usa +bach +rankings +forbidden +cornwall +accordance +salem +consumers +bruno +fantastic +toes +machinery +resolved +julius +remembering +propaganda +iceland +bombardment +tide +contacts +wives +##rah +concerto +macdonald +albania +implement +daisy +tapped +sudan +helmet +angela +mistress +##lic +crop +sunk +finest +##craft +hostile +##ute +##tsu +boxer +fr +paths +adjusted +habit +ballot +supervision +soprano +##zen +bullets +wicked +sunset +regiments +disappear +lamp +performs +app +##gia +##oa +rabbit +digging +incidents +entries +##cion +dishes +##oi +introducing +##ati +##fied +freshman +slot +jill +tackles +baroque +backs +##iest +lone +sponsor +destiny +altogether +convert +##aro +consensus +shapes +demonstration +basically +feminist +auction +artifacts +##bing +strongest +twitter +halifax +2019 +allmusic +mighty +smallest +precise +alexandra +viola +##los +##ille +manuscripts +##illo +dancers +ari +managers +monuments +blades +barracks +springfield +maiden +consolidated +electron +##end +berry +airing +wheat +nobel +inclusion +blair +payments +geography +bee +cc +eleanor +react +##hurst +afc +manitoba +##yu +su +lineup +fitness +recreational +investments +airborne +disappointment +##dis +edmonton +viewing +##row +renovation +##cast +infant +bankruptcy +roses +aftermath +pavilion +##yer +carpenter +withdrawal +ladder +##hy +discussing +popped +reliable +agreements +rochester +##abad +curves +bombers +220 +rao +reverend +decreased +choosing +107 +stiff +consulting +naples +crawford +tracy +ka +ribbon +cops +##lee +crushed +deciding +unified +teenager +accepting +flagship +explorer +poles +sanchez +inspection +revived +skilled +induced +exchanged +flee +locals +tragedy +swallow +loading +hanna +demonstrate +##ela +salvador +flown +contestants +civilization +##ines +wanna +rhodes +fletcher +hector +knocking +considers +##ough +nash +mechanisms +sensed +mentally +walt +unclear +##eus +renovated +madame +##cks +crews +governmental +##hin +undertaken +monkey +##ben +##ato +fatal +armored +copa +caves +governance +grasp +perception +certification +froze +damp +tugged +wyoming +##rg +##ero +newman +##lor +nerves +curiosity +graph +115 +##ami +withdraw +tunnels +dull +meredith +moss +exhibits +neighbors +communicate +accuracy +explored +raiders +republicans +secular +kat +superman +penny +criticised +##tch +freed +update +conviction +wade +ham +likewise +delegation +gotta +doll +promises +technological +myth +nationality +resolve +convent +##mark +sharon +dig +sip +coordinator +entrepreneur +fold +##dine +capability +councillor +synonym +blown +swan +cursed +1815 +jonas +haired +sofa +canvas +keeper +rivalry +##hart +rapper +speedway +swords +postal +maxwell +estonia +potter +recurring +##nn +##ave +errors +##oni +cognitive +1834 +##² +claws +nadu +roberto +bce +wrestler +ellie +##ations +infinite +ink +##tia +presumably +finite +staircase +108 +noel +patricia +nacional +##cation +chill +eternal +tu +preventing +prussia +fossil +limbs +##logist +ernst +frog +perez +rene +##ace +pizza +prussian +##ios +##vy +molecules +regulatory +answering +opinions +sworn +lengths +supposedly +hypothesis +upward +habitats +seating +ancestors +drank +yield +hd +synthesis +researcher +modest +##var +mothers +peered +voluntary +homeland +##the +acclaim +##igan +static +valve +luxembourg +alto +carroll +fe +receptor +norton +ambulance +##tian +johnston +catholics +depicting +jointly +elephant +gloria +mentor +badge +ahmad +distinguish +remarked +councils +precisely +allison +advancing +detection +crowded +##10 +cooperative +ankle +mercedes +dagger +surrendered +pollution +commit +subway +jeffrey +lesson +sculptures +provider +##fication +membrane +timothy +rectangular +fiscal +heating +teammate +basket +particle +anonymous +deployment +##ple +missiles +courthouse +proportion +shoe +sec +##ller +complaints +forbes +blacks +abandon +remind +sizes +overwhelming +autobiography +natalie +##awa +risks +contestant +countryside +babies +scorer +invaded +enclosed +proceed +hurling +disorders +##cu +reflecting +continuously +cruiser +graduates +freeway +investigated +ore +deserved +maid +blocking +phillip +jorge +shakes +dove +mann +variables +lacked +burden +accompanying +que +consistently +organizing +provisional +complained +endless +##rm +tubes +juice +georges +krishna +mick +labels +thriller +##uch +laps +arcade +sage +snail +##table +shannon +fi +laurence +seoul +vacation +presenting +hire +churchill +surprisingly +prohibited +savannah +technically +##oli +170 +##lessly +testimony +suited +speeds +toys +romans +mlb +flowering +measurement +talented +kay +settings +charleston +expectations +shattered +achieving +triumph +ceremonies +portsmouth +lanes +mandatory +loser +stretching +cologne +realizes +seventy +cornell +careers +webb +##ulating +americas +budapest +ava +suspicion +##ison +yo +conrad +##hai +sterling +jessie +rector +##az +1831 +transform +organize +loans +christine +volcanic +warrant +slender +summers +subfamily +newer +danced +dynamics +rhine +proceeds +heinrich +gastropod +commands +sings +facilitate +easter +ra +positioned +responses +expense +fruits +yanked +imported +25th +velvet +vic +primitive +tribune +baldwin +neighbourhood +donna +rip +hay +pr +##uro +1814 +espn +welcomed +##aria +qualifier +glare +highland +timing +##cted +shells +eased +geometry +louder +exciting +slovakia +##sion +##iz +##lot +savings +prairie +##ques +marching +rafael +tonnes +##lled +curtain +preceding +shy +heal +greene +worthy +##pot +detachment +bury +sherman +##eck +reinforced +seeks +bottles +contracted +duchess +outfit +walsh +##sc +mickey +##ase +geoffrey +archer +squeeze +dawson +eliminate +invention +##enberg +neal +##eth +stance +dealer +coral +maple +retire +polo +simplified +##ht +1833 +hid +watts +backwards +jules +##oke +genesis +mt +frames +rebounds +burma +woodland +moist +santos +whispers +drained +subspecies +##aa +streaming +ulster +burnt +correspondence +maternal +gerard +denis +stealing +##load +genius +duchy +##oria +inaugurated +momentum +suits +placement +sovereign +clause +thames +##hara +confederation +reservation +sketch +yankees +lets +rotten +charm +hal +verses +ultra +commercially +dot +salon +citation +adopt +winnipeg +mist +allocated +cairo +##boy +jenkins +interference +objectives +##wind +1820 +portfolio +armoured +sectors +##eh +initiatives +##world +integrity +exercises +robe +tap +ab +gazed +##tones +distracted +rulers +111 +favorable +jerome +tended +cart +factories +##eri +diplomat +valued +gravel +charitable +##try +calvin +exploring +chang +shepherd +terrace +pdf +pupil +##ural +reflects +ups +##rch +governors +shelf +depths +##nberg +trailed +crest +tackle +##nian +##ats +hatred +##kai +clare +makers +ethiopia +longtime +detected +embedded +lacking +slapped +rely +thomson +anticipation +iso +morton +successive +agnes +screenwriter +straightened +philippe +playwright +haunted +licence +iris +intentions +sutton +112 +logical +correctly +##weight +branded +licked +tipped +silva +ricky +narrator +requests +##ents +greeted +supernatural +cow +##wald +lung +refusing +employer +strait +gaelic +liner +##piece +zoe +sabha +##mba +driveway +harvest +prints +bates +reluctantly +threshold +algebra +ira +wherever +coupled +240 +assumption +picks +##air +designers +raids +gentlemen +##ean +roller +blowing +leipzig +locks +screw +dressing +strand +##lings +scar +dwarf +depicts +##nu +nods +##mine +differ +boris +##eur +yuan +flip +##gie +mob +invested +questioning +applying +##ture +shout +##sel +gameplay +blamed +illustrations +bothered +weakness +rehabilitation +##of +##zes +envelope +rumors +miners +leicester +subtle +kerry +##ico +ferguson +##fu +premiership +ne +##cat +bengali +prof +catches +remnants +dana +##rily +shouting +presidents +baltic +ought +ghosts +dances +sailors +shirley +fancy +dominic +##bie +madonna +##rick +bark +buttons +gymnasium +ashes +liver +toby +oath +providence +doyle +evangelical +nixon +cement +carnegie +embarked +hatch +surroundings +guarantee +needing +pirate +essence +##bee +filter +crane +hammond +projected +immune +percy +twelfth +##ult +regent +doctoral +damon +mikhail +##ichi +lu +critically +elect +realised +abortion +acute +screening +mythology +steadily +##fc +frown +nottingham +kirk +wa +minneapolis +##rra +module +algeria +mc +nautical +encounters +surprising +statues +availability +shirts +pie +alma +brows +munster +mack +soup +crater +tornado +sanskrit +cedar +explosive +bordered +dixon +planets +stamp +exam +happily +##bble +carriers +kidnapped +##vis +accommodation +emigrated +##met +knockout +correspondent +violation +profits +peaks +lang +specimen +agenda +ancestry +pottery +spelling +equations +obtaining +ki +linking +1825 +debris +asylum +##20 +buddhism +teddy +##ants +gazette +##nger +##sse +dental +eligibility +utc +fathers +averaged +zimbabwe +francesco +coloured +hissed +translator +lynch +mandate +humanities +mackenzie +uniforms +lin +##iana +##gio +asset +mhz +fitting +samantha +genera +wei +rim +beloved +shark +riot +entities +expressions +indo +carmen +slipping +owing +abbot +neighbor +sidney +##av +rats +recommendations +encouraging +squadrons +anticipated +commanders +conquered +##oto +donations +diagnosed +##mond +divide +##iva +guessed +decoration +vernon +auditorium +revelation +conversations +##kers +##power +herzegovina +dash +alike +protested +lateral +herman +accredited +mg +##gent +freeman +mel +fiji +crow +crimson +##rine +livestock +##pped +humanitarian +bored +oz +whip +##lene +##ali +legitimate +alter +grinning +spelled +anxious +oriental +wesley +##nin +##hole +carnival +controller +detect +##ssa +bowed +educator +kosovo +macedonia +##sin +occupy +mastering +stephanie +janeiro +para +unaware +nurses +noon +135 +cam +hopefully +ranger +combine +sociology +polar +rica +##eer +neill +##sman +holocaust +##ip +doubled +lust +1828 +109 +decent +cooling +unveiled +##card +1829 +nsw +homer +chapman +meyer +##gin +dive +mae +reagan +expertise +##gled +darwin +brooke +sided +prosecution +investigating +comprised +petroleum +genres +reluctant +differently +trilogy +johns +vegetables +corpse +highlighted +lounge +pension +unsuccessfully +elegant +aided +ivory +beatles +amelia +cain +dubai +sunny +immigrant +babe +click +##nder +underwater +pepper +combining +mumbled +atlas +horns +accessed +ballad +physicians +homeless +gestured +rpm +freak +louisville +corporations +patriots +prizes +rational +warn +modes +decorative +overnight +din +troubled +phantom +##ort +monarch +sheer +##dorf +generals +guidelines +organs +addresses +##zon +enhance +curling +parishes +cord +##kie +linux +caesar +deutsche +bavaria +##bia +coleman +cyclone +##eria +bacon +petty +##yama +##old +hampton +diagnosis +1824 +throws +complexity +rita +disputed +##₃ +pablo +##sch +marketed +trafficking +##ulus +examine +plague +formats +##oh +vault +faithful +##bourne +webster +##ox +highlights +##ient +##ann +phones +vacuum +sandwich +modeling +##gated +bolivia +clergy +qualities +isabel +##nas +##ars +wears +screams +reunited +annoyed +bra +##ancy +##rate +differential +transmitter +tattoo +container +poker +##och +excessive +resides +cowboys +##tum +augustus +trash +providers +statute +retreated +balcony +reversed +void +storey +preceded +masses +leap +laughs +neighborhoods +wards +schemes +falcon +santo +battlefield +pad +ronnie +thread +lesbian +venus +##dian +beg +sandstone +daylight +punched +gwen +analog +stroked +wwe +acceptable +measurements +dec +toxic +##kel +adequate +surgical +economist +parameters +varsity +##sberg +quantity +ella +##chy +##rton +countess +generating +precision +diamonds +expressway +ga +##ı +1821 +uruguay +talents +galleries +expenses +scanned +colleague +outlets +ryder +lucien +##ila +paramount +##bon +syracuse +dim +fangs +gown +sweep +##sie +toyota +missionaries +websites +##nsis +sentences +adviser +val +trademark +spells +##plane +patience +starter +slim +##borg +toe +incredibly +shoots +elliot +nobility +##wyn +cowboy +endorsed +gardner +tendency +persuaded +organisms +emissions +kazakhstan +amused +boring +chips +themed +##hand +llc +constantinople +chasing +systematic +guatemala +borrowed +erin +carey +##hard +highlands +struggles +1810 +##ifying +##ced +wong +exceptions +develops +enlarged +kindergarten +castro +##ern +##rina +leigh +zombie +juvenile +##most +consul +##nar +sailor +hyde +clarence +intensive +pinned +nasty +useless +jung +clayton +stuffed +exceptional +ix +apostolic +230 +transactions +##dge +exempt +swinging +cove +religions +##ash +shields +dairy +bypass +190 +pursuing +bug +joyce +bombay +chassis +southampton +chat +interact +redesignated +##pen +nascar +pray +salmon +rigid +regained +malaysian +grim +publicity +constituted +capturing +toilet +delegate +purely +tray +drift +loosely +striker +weakened +trinidad +mitch +itv +defines +transmitted +ming +scarlet +nodding +fitzgerald +fu +narrowly +sp +tooth +standings +virtue +##₁ +##wara +##cting +chateau +gloves +lid +##nel +hurting +conservatory +##pel +sinclair +reopened +sympathy +nigerian +strode +advocated +optional +chronic +discharge +##rc +suck +compatible +laurel +stella +shi +fails +wage +dodge +128 +informal +sorts +levi +buddha +villagers +##aka +chronicles +heavier +summoned +gateway +3000 +eleventh +jewelry +translations +accordingly +seas +##ency +fiber +pyramid +cubic +dragging +##ista +caring +##ops +android +contacted +lunar +##dt +kai +lisbon +patted +1826 +sacramento +theft +madagascar +subtropical +disputes +ta +holidays +piper +willow +mare +cane +itunes +newfoundland +benny +companions +dong +raj +observe +roar +charming +plaque +tibetan +fossils +enacted +manning +bubble +tina +tanzania +##eda +##hir +funk +swamp +deputies +cloak +ufc +scenario +par +scratch +metals +anthem +guru +engaging +specially +##boat +dialects +nineteen +cecil +duet +disability +messenger +unofficial +##lies +defunct +eds +moonlight +drainage +surname +puzzle +honda +switching +conservatives +mammals +knox +broadcaster +sidewalk +cope +##ried +benson +princes +peterson +##sal +bedford +sharks +eli +wreck +alberto +gasp +archaeology +lgbt +teaches +securities +madness +compromise +waving +coordination +davidson +visions +leased +possibilities +eighty +jun +fernandez +enthusiasm +assassin +sponsorship +reviewer +kingdoms +estonian +laboratories +##fy +##nal +applies +verb +celebrations +##zzo +rowing +lightweight +sadness +submit +mvp +balanced +dude +##vas +explicitly +metric +magnificent +mound +brett +mohammad +mistakes +irregular +##hing +##ass +sanders +betrayed +shipped +surge +##enburg +reporters +termed +georg +pity +verbal +bulls +abbreviated +enabling +appealed +##are +##atic +sicily +sting +heel +sweetheart +bart +spacecraft +brutal +monarchy +##tter +aberdeen +cameo +diane +##ub +survivor +clyde +##aries +complaint +##makers +clarinet +delicious +chilean +karnataka +coordinates +1818 +panties +##rst +pretending +ar +dramatically +kiev +bella +tends +distances +113 +catalog +launching +instances +telecommunications +portable +lindsay +vatican +##eim +angles +aliens +marker +stint +screens +bolton +##rne +judy +wool +benedict +plasma +europa +spark +imaging +filmmaker +swiftly +##een +contributor +##nor +opted +stamps +apologize +financing +butter +gideon +sophisticated +alignment +avery +chemicals +yearly +speculation +prominence +professionally +##ils +immortal +institutional +inception +wrists +identifying +tribunal +derives +gains +##wo +papal +preference +linguistic +vince +operative +brewery +##ont +unemployment +boyd +##ured +##outs +albeit +prophet +1813 +bi +##rr +##face +##rad +quarterly +asteroid +cleaned +radius +temper +##llen +telugu +jerk +viscount +menu +##ote +glimpse +##aya +yacht +hawaiian +baden +##rl +laptop +readily +##gu +monetary +offshore +scots +watches +##yang +##arian +upgrade +needle +xbox +lea +encyclopedia +flank +fingertips +##pus +delight +teachings +confirm +roth +beaches +midway +winters +##iah +teasing +daytime +beverly +gambling +bonnie +##backs +regulated +clement +hermann +tricks +knot +##shing +##uring +##vre +detached +ecological +owed +specialty +byron +inventor +bats +stays +screened +unesco +midland +trim +affection +##ander +##rry +jess +thoroughly +feedback +##uma +chennai +strained +heartbeat +wrapping +overtime +pleaded +##sworth +mon +leisure +oclc +##tate +##ele +feathers +angelo +thirds +nuts +surveys +clever +gill +commentator +##dos +darren +rides +gibraltar +##nc +##mu +dissolution +dedication +shin +meals +saddle +elvis +reds +chaired +taller +appreciation +functioning +niece +favored +advocacy +robbie +criminals +suffolk +yugoslav +passport +constable +congressman +hastings +vera +##rov +consecrated +sparks +ecclesiastical +confined +##ovich +muller +floyd +nora +1822 +paved +1827 +cumberland +ned +saga +spiral +##flow +appreciated +yi +collaborative +treating +similarities +feminine +finishes +##ib +jade +import +##nse +##hot +champagne +mice +securing +celebrities +helsinki +attributes +##gos +cousins +phases +ache +lucia +gandhi +submission +vicar +spear +shine +tasmania +biting +detention +constitute +tighter +seasonal +##gus +terrestrial +matthews +##oka +effectiveness +parody +philharmonic +##onic +1816 +strangers +encoded +consortium +guaranteed +regards +shifts +tortured +collision +supervisor +inform +broader +insight +theaters +armour +emeritus +blink +incorporates +mapping +##50 +##ein +handball +flexible +##nta +substantially +generous +thief +##own +carr +loses +1793 +prose +ucla +romeo +generic +metallic +realization +damages +mk +commissioners +zach +default +##ther +helicopters +lengthy +stems +spa +partnered +spectators +rogue +indication +penalties +teresa +1801 +sen +##tric +dalton +##wich +irving +photographic +##vey +dell +deaf +peters +excluded +unsure +##vable +patterson +crawled +##zio +resided +whipped +latvia +slower +ecole +pipes +employers +maharashtra +comparable +va +textile +pageant +##gel +alphabet +binary +irrigation +chartered +choked +antoine +offs +waking +supplement +##wen +quantities +demolition +regain +locate +urdu +folks +alt +114 +##mc +scary +andreas +whites +##ava +classrooms +mw +aesthetic +publishes +valleys +guides +cubs +johannes +bryant +conventions +affecting +##itt +drain +awesome +isolation +prosecutor +ambitious +apology +captive +downs +atmospheric +lorenzo +aisle +beef +foul +##onia +kidding +composite +disturbed +illusion +natives +##ffer +emi +rockets +riverside +wartime +painters +adolf +melted +##ail +uncertainty +simulation +hawks +progressed +meantime +builder +spray +breach +unhappy +regina +russians +##urg +determining +##tation +tram +1806 +##quin +aging +##12 +1823 +garion +rented +mister +diaz +terminated +clip +1817 +depend +nervously +disco +owe +defenders +shiva +notorious +disbelief +shiny +worcester +##gation +##yr +trailing +undertook +islander +belarus +limitations +watershed +fuller +overlooking +utilized +raphael +1819 +synthetic +breakdown +klein +##nate +moaned +memoir +lamb +practicing +##erly +cellular +arrows +exotic +##graphy +witches +117 +charted +rey +hut +hierarchy +subdivision +freshwater +giuseppe +aloud +reyes +qatar +marty +sideways +utterly +sexually +jude +prayers +mccarthy +softball +blend +damien +##gging +##metric +wholly +erupted +lebanese +negro +revenues +tasted +comparative +teamed +transaction +labeled +maori +sovereignty +parkway +trauma +gran +malay +121 +advancement +descendant +2020 +buzz +salvation +inventory +symbolic +##making +antarctica +mps +##gas +##bro +mohammed +myanmar +holt +submarines +tones +##lman +locker +patriarch +bangkok +emerson +remarks +predators +kin +afghan +confession +norwich +rental +emerge +advantages +##zel +rca +##hold +shortened +storms +aidan +##matic +autonomy +compliance +##quet +dudley +atp +##osis +1803 +motto +documentation +summary +professors +spectacular +christina +archdiocese +flashing +innocence +remake +##dell +psychic +reef +scare +employ +rs +sticks +meg +gus +leans +##ude +accompany +bergen +tomas +##iko +doom +wages +pools +##nch +##bes +breasts +scholarly +alison +outline +brittany +breakthrough +willis +realistic +##cut +##boro +competitor +##stan +pike +picnic +icon +designing +commercials +washing +villain +skiing +micro +costumes +auburn +halted +executives +##hat +logistics +cycles +vowel +applicable +barrett +exclaimed +eurovision +eternity +ramon +##umi +##lls +modifications +sweeping +disgust +##uck +torch +aviv +ensuring +rude +dusty +sonic +donovan +outskirts +cu +pathway +##band +##gun +##lines +disciplines +acids +cadet +paired +##40 +sketches +##sive +marriages +##⁺ +folding +peers +slovak +implies +admired +##beck +1880s +leopold +instinct +attained +weston +megan +horace +##ination +dorsal +ingredients +evolutionary +##its +complications +deity +lethal +brushing +levy +deserted +institutes +posthumously +delivering +telescope +coronation +motivated +rapids +luc +flicked +pays +volcano +tanner +weighed +##nica +crowds +frankie +gifted +addressing +granddaughter +winding +##rna +constantine +gomez +##front +landscapes +rudolf +anthropology +slate +werewolf +##lio +astronomy +circa +rouge +dreaming +sack +knelt +drowned +naomi +prolific +tracked +freezing +herb +##dium +agony +randall +twisting +wendy +deposit +touches +vein +wheeler +##bbled +##bor +batted +retaining +tire +presently +compare +specification +daemon +nigel +##grave +merry +recommendation +czechoslovakia +sandra +ng +roma +##sts +lambert +inheritance +sheikh +winchester +cries +examining +##yle +comeback +cuisine +nave +##iv +ko +retrieve +tomatoes +barker +polished +defining +irene +lantern +personalities +begging +tract +swore +1809 +175 +##gic +omaha +brotherhood +##rley +haiti +##ots +exeter +##ete +##zia +steele +dumb +pearson +210 +surveyed +elisabeth +trends +##ef +fritz +##rf +premium +bugs +fraction +calmly +viking +##birds +tug +inserted +unusually +##ield +confronted +distress +crashing +brent +turks +resign +##olo +cambodia +gabe +sauce +##kal +evelyn +116 +extant +clusters +quarry +teenagers +luna +##lers +##ister +affiliation +drill +##ashi +panthers +scenic +libya +anita +strengthen +inscriptions +##cated +lace +sued +judith +riots +##uted +mint +##eta +preparations +midst +dub +challenger +##vich +mock +cf +displaced +wicket +breaths +enables +schmidt +analyst +##lum +ag +highlight +automotive +axe +josef +newark +sufficiently +resembles +50th +##pal +flushed +mum +traits +##ante +commodore +incomplete +warming +titular +ceremonial +ethical +118 +celebrating +eighteenth +cao +lima +medalist +mobility +strips +snakes +##city +miniature +zagreb +barton +escapes +umbrella +automated +doubted +differs +cooled +georgetown +dresden +cooked +fade +wyatt +rna +jacobs +carlton +abundant +stereo +boost +madras +inning +##hia +spur +ip +malayalam +begged +osaka +groan +escaping +charging +dose +vista +##aj +bud +papa +communists +advocates +edged +tri +##cent +resemble +peaking +necklace +fried +montenegro +saxony +goose +glances +stuttgart +curator +recruit +grocery +sympathetic +##tting +##fort +127 +lotus +randolph +ancestor +##rand +succeeding +jupiter +1798 +macedonian +##heads +hiking +1808 +handing +fischer +##itive +garbage +node +##pies +prone +singular +papua +inclined +attractions +italia +pouring +motioned +grandma +garnered +jacksonville +corp +ego +ringing +aluminum +##hausen +ordering +##foot +drawer +traders +synagogue +##play +##kawa +resistant +wandering +fragile +fiona +teased +var +hardcore +soaked +jubilee +decisive +exposition +mercer +poster +valencia +hale +kuwait +1811 +##ises +##wr +##eed +tavern +gamma +122 +johan +##uer +airways +amino +gil +##ury +vocational +domains +torres +##sp +generator +folklore +outcomes +##keeper +canberra +shooter +fl +beams +confrontation +##lling +##gram +feb +aligned +forestry +pipeline +jax +motorway +conception +decay +##tos +coffin +##cott +stalin +1805 +escorted +minded +##nam +sitcom +purchasing +twilight +veronica +additions +passive +tensions +straw +123 +frequencies +1804 +refugee +cultivation +##iate +christie +clary +bulletin +crept +disposal +##rich +##zong +processor +crescent +##rol +bmw +emphasized +whale +nazis +aurora +##eng +dwelling +hauled +sponsors +toledo +mega +ideology +theatres +tessa +cerambycidae +saves +turtle +cone +suspects +kara +rusty +yelling +greeks +mozart +shades +cocked +participant +##tro +shire +spit +freeze +necessity +##cos +inmates +nielsen +councillors +loaned +uncommon +omar +peasants +botanical +offspring +daniels +formations +jokes +1794 +pioneers +sigma +licensing +##sus +wheelchair +polite +1807 +liquor +pratt +trustee +##uta +forewings +balloon +##zz +kilometre +camping +explicit +casually +shawn +foolish +teammates +nm +hassan +carrie +judged +satisfy +vanessa +knives +selective +cnn +flowed +##lice +eclipse +stressed +eliza +mathematician +cease +cultivated +##roy +commissions +browns +##ania +destroyers +sheridan +meadow +##rius +minerals +##cial +downstream +clash +gram +memoirs +ventures +baha +seymour +archie +midlands +edith +fare +flynn +invite +canceled +tiles +stabbed +boulder +incorporate +amended +camden +facial +mollusk +unreleased +descriptions +yoga +grabs +550 +raises +ramp +shiver +##rose +coined +pioneering +tunes +qing +warwick +tops +119 +melanie +giles +##rous +wandered +##inal +annexed +nov +30th +unnamed +##ished +organizational +airplane +normandy +stoke +whistle +blessing +violations +chased +holders +shotgun +##ctic +outlet +reactor +##vik +tires +tearing +shores +fortified +mascot +constituencies +nc +columnist +productive +tibet +##rta +lineage +hooked +oct +tapes +judging +cody +##gger +hansen +kashmir +triggered +##eva +solved +cliffs +##tree +resisted +anatomy +protesters +transparent +implied +##iga +injection +mattress +excluding +##mbo +defenses +helpless +devotion +##elli +growl +liberals +weber +phenomena +atoms +plug +##iff +mortality +apprentice +howe +convincing +aaa +swimmer +barber +leone +promptly +sodium +def +nowadays +arise +##oning +gloucester +corrected +dignity +norm +erie +##ders +elders +evacuated +sylvia +compression +##yar +hartford +pose +backpack +reasoning +accepts +24th +wipe +millimetres +marcel +##oda +dodgers +albion +1790 +overwhelmed +aerospace +oaks +1795 +showcase +acknowledge +recovering +nolan +ashe +hurts +geology +fashioned +disappearance +farewell +swollen +shrug +marquis +wimbledon +124 +rue +1792 +commemorate +reduces +experiencing +inevitable +calcutta +intel +##court +murderer +sticking +fisheries +imagery +bloom +280 +brake +##inus +gustav +hesitation +memorable +po +viral +beans +accidents +tunisia +antenna +spilled +consort +treatments +aye +perimeter +##gard +donation +hostage +migrated +banker +addiction +apex +lil +trout +##ously +conscience +##nova +rams +sands +genome +passionate +troubles +##lets +##set +amid +##ibility +##ret +higgins +exceed +vikings +##vie +payne +##zan +muscular +##ste +defendant +sucking +##wal +ibrahim +fuselage +claudia +vfl +europeans +snails +interval +##garh +preparatory +statewide +tasked +lacrosse +viktor +##lation +angola +##hra +flint +implications +employs +teens +patrons +stall +weekends +barriers +scrambled +nucleus +tehran +jenna +parsons +lifelong +robots +displacement +5000 +##bles +precipitation +##gt +knuckles +clutched +1802 +marrying +ecology +marx +accusations +declare +scars +kolkata +mat +meadows +bermuda +skeleton +finalists +vintage +crawl +coordinate +affects +subjected +orchestral +mistaken +##tc +mirrors +dipped +relied +260 +arches +candle +##nick +incorporating +wildly +fond +basilica +owl +fringe +rituals +whispering +stirred +feud +tertiary +slick +goat +honorable +whereby +skip +ricardo +stripes +parachute +adjoining +submerged +synthesizer +##gren +intend +positively +ninety +phi +beaver +partition +fellows +alexis +prohibition +carlisle +bizarre +fraternity +##bre +doubts +icy +cbc +aquatic +sneak +sonny +combines +airports +crude +supervised +spatial +merge +alfonso +##bic +corrupt +scan +undergo +##ams +disabilities +colombian +comparing +dolphins +perkins +##lish +reprinted +unanimous +bounced +hairs +underworld +midwest +semester +bucket +paperback +miniseries +coventry +demise +##leigh +demonstrations +sensor +rotating +yan +##hler +arrange +soils +##idge +hyderabad +labs +##dr +brakes +grandchildren +##nde +negotiated +rover +ferrari +continuation +directorate +augusta +stevenson +counterpart +gore +##rda +nursery +rican +ave +collectively +broadly +pastoral +repertoire +asserted +discovering +nordic +styled +fiba +cunningham +harley +middlesex +survives +tumor +tempo +zack +aiming +lok +urgent +##rade +##nto +devils +##ement +contractor +turin +##wl +##ool +bliss +repaired +simmons +moan +astronomical +cr +negotiate +lyric +1890s +lara +bred +clad +angus +pbs +##ience +engineered +posed +##lk +hernandez +possessions +elbows +psychiatric +strokes +confluence +electorate +lifts +campuses +lava +alps +##ep +##ution +##date +physicist +woody +##page +##ographic +##itis +juliet +reformation +sparhawk +320 +complement +suppressed +jewel +##½ +floated +##kas +continuity +sadly +##ische +inability +melting +scanning +paula +flour +judaism +safer +vague +##lm +solving +curb +##stown +financially +gable +bees +expired +miserable +cassidy +dominion +1789 +cupped +145 +robbery +facto +amos +warden +resume +tallest +marvin +ing +pounded +usd +declaring +gasoline +##aux +darkened +270 +650 +sophomore +##mere +erection +gossip +televised +risen +dial +##eu +pillars +##link +passages +profound +##tina +arabian +ashton +silicon +nail +##ead +##lated +##wer +##hardt +fleming +firearms +ducked +circuits +blows +waterloo +titans +##lina +atom +fireplace +cheshire +financed +activation +algorithms +##zzi +constituent +catcher +cherokee +partnerships +sexuality +platoon +tragic +vivian +guarded +whiskey +meditation +poetic +##late +##nga +##ake +porto +listeners +dominance +kendra +mona +chandler +factions +22nd +salisbury +attitudes +derivative +##ido +##haus +intake +paced +javier +illustrator +barrels +bias +cockpit +burnett +dreamed +ensuing +##anda +receptors +someday +hawkins +mattered +##lal +slavic +1799 +jesuit +cameroon +wasted +tai +wax +lowering +victorious +freaking +outright +hancock +librarian +sensing +bald +calcium +myers +tablet +announcing +barack +shipyard +pharmaceutical +##uan +greenwich +flush +medley +patches +wolfgang +pt +speeches +acquiring +exams +nikolai +##gg +hayden +kannada +##type +reilly +##pt +waitress +abdomen +devastated +capped +pseudonym +pharmacy +fulfill +paraguay +1796 +clicked +##trom +archipelago +syndicated +##hman +lumber +orgasm +rejection +clifford +lorraine +advent +mafia +rodney +brock +##ght +##used +##elia +cassette +chamberlain +despair +mongolia +sensors +developmental +upstream +##eg +##alis +spanning +165 +trombone +basque +seeded +interred +renewable +rhys +leapt +revision +molecule +##ages +chord +vicious +nord +shivered +23rd +arlington +debts +corpus +sunrise +bays +blackburn +centimetres +##uded +shuddered +gm +strangely +gripping +cartoons +isabelle +orbital +##ppa +seals +proving +##lton +refusal +strengthened +bust +assisting +baghdad +batsman +portrayal +mara +pushes +spears +og +##cock +reside +nathaniel +brennan +1776 +confirmation +caucus +##worthy +markings +yemen +nobles +ku +lazy +viewer +catalan +encompasses +sawyer +##fall +sparked +substances +patents +braves +arranger +evacuation +sergio +persuade +dover +tolerance +penguin +cum +jockey +insufficient +townships +occupying +declining +plural +processed +projection +puppet +flanders +introduces +liability +##yon +gymnastics +antwerp +taipei +hobart +candles +jeep +wes +observers +126 +chaplain +bundle +glorious +##hine +hazel +flung +sol +excavations +dumped +stares +sh +bangalore +triangular +icelandic +intervals +expressing +turbine +##vers +songwriting +crafts +##igo +jasmine +ditch +rite +##ways +entertaining +comply +sorrow +wrestlers +basel +emirates +marian +rivera +helpful +##some +caution +downward +networking +##atory +##tered +darted +genocide +emergence +replies +specializing +spokesman +convenient +unlocked +fading +augustine +concentrations +resemblance +elijah +investigator +andhra +##uda +promotes +bean +##rrell +fleeing +wan +simone +announcer +##ame +##bby +lydia +weaver +132 +residency +modification +##fest +stretches +##ast +alternatively +nat +lowe +lacks +##ented +pam +tile +concealed +inferior +abdullah +residences +tissues +vengeance +##ided +moisture +peculiar +groove +zip +bologna +jennings +ninja +oversaw +zombies +pumping +batch +livingston +emerald +installations +1797 +peel +nitrogen +rama +##fying +##star +schooling +strands +responding +werner +##ost +lime +casa +accurately +targeting +##rod +underway +##uru +hemisphere +lester +##yard +occupies +2d +griffith +angrily +reorganized +##owing +courtney +deposited +##dd +##30 +estadio +##ifies +dunn +exiled +##ying +checks +##combe +##о +##fly +successes +unexpectedly +blu +assessed +##flower +##ه +observing +sacked +spiders +kn +##tail +mu +nodes +prosperity +audrey +divisional +155 +broncos +tangled +adjust +feeds +erosion +paolo +surf +directory +snatched +humid +admiralty +screwed +gt +reddish +##nese +modules +trench +lamps +bind +leah +bucks +competes +##nz +##form +transcription +##uc +isles +violently +clutching +pga +cyclist +inflation +flats +ragged +unnecessary +##hian +stubborn +coordinated +harriet +baba +disqualified +330 +insect +wolfe +##fies +reinforcements +rocked +duel +winked +embraced +bricks +##raj +hiatus +defeats +pending +brightly +jealousy +##xton +##hm +##uki +lena +gdp +colorful +##dley +stein +kidney +##shu +underwear +wanderers +##haw +##icus +guardians +m³ +roared +habits +##wise +permits +gp +uranium +punished +disguise +bundesliga +elise +dundee +erotic +partisan +pi +collectors +float +individually +rendering +behavioral +bucharest +ser +hare +valerie +corporal +nutrition +proportional +##isa +immense +##kis +pavement +##zie +##eld +sutherland +crouched +1775 +##lp +suzuki +trades +endurance +operas +crosby +prayed +priory +rory +socially +##urn +gujarat +##pu +walton +cube +pasha +privilege +lennon +floods +thorne +waterfall +nipple +scouting +approve +##lov +minorities +voter +dwight +extensions +assure +ballroom +slap +dripping +privileges +rejoined +confessed +demonstrating +patriotic +yell +investor +##uth +pagan +slumped +squares +##cle +##kins +confront +bert +embarrassment +##aid +aston +urging +sweater +starr +yuri +brains +williamson +commuter +mortar +structured +selfish +exports +##jon +cds +##him +unfinished +##rre +mortgage +destinations +##nagar +canoe +solitary +buchanan +delays +magistrate +fk +##pling +motivation +##lier +##vier +recruiting +assess +##mouth +malik +antique +1791 +pius +rahman +reich +tub +zhou +smashed +airs +galway +xii +conditioning +honduras +discharged +dexter +##pf +lionel +129 +debates +lemon +tiffany +volunteered +dom +dioxide +procession +devi +sic +tremendous +advertisements +colts +transferring +verdict +hanover +decommissioned +utter +relate +pac +racism +##top +beacon +limp +similarity +terra +occurrence +ant +##how +becky +capt +updates +armament +richie +pal +##graph +halloween +mayo +##ssen +##bone +cara +serena +fcc +dolls +obligations +##dling +violated +lafayette +jakarta +exploitation +##ime +infamous +iconic +##lah +##park +kitty +moody +reginald +dread +spill +crystals +olivier +modeled +bluff +equilibrium +separating +notices +ordnance +extinction +onset +cosmic +attachment +sammy +expose +privy +anchored +##bil +abbott +admits +bending +baritone +emmanuel +policeman +vaughan +winged +climax +dresses +denny +polytechnic +mohamed +burmese +authentic +nikki +genetics +grandparents +homestead +gaza +postponed +metacritic +una +##sby +##bat +unstable +dissertation +##rial +##cian +curls +obscure +uncovered +bronx +praying +disappearing +##hoe +prehistoric +coke +turret +mutations +nonprofit +pits +monaco +##ي +##usion +prominently +dispatched +podium +##mir +uci +##uation +133 +fortifications +birthplace +kendall +##lby +##oll +preacher +rack +goodman +##rman +persistent +##ott +countless +jaime +recorder +lexington +persecution +jumps +renewal +wagons +##11 +crushing +##holder +decorations +##lake +abundance +wrath +laundry +£1 +garde +##rp +jeanne +beetles +peasant +##sl +splitting +caste +sergei +##rer +##ema +scripts +##ively +rub +satellites +##vor +inscribed +verlag +scrapped +gale +packages +chick +potato +slogan +kathleen +arabs +##culture +counterparts +reminiscent +choral +##tead +rand +retains +bushes +dane +accomplish +courtesy +closes +##oth +slaughter +hague +krakow +lawson +tailed +elias +ginger +##ttes +canopy +betrayal +rebuilding +turf +##hof +frowning +allegiance +brigades +kicks +rebuild +polls +alias +nationalism +td +rowan +audition +bowie +fortunately +recognizes +harp +dillon +horrified +##oro +renault +##tics +ropes +##α +presumed +rewarded +infrared +wiping +accelerated +illustration +##rid +presses +practitioners +badminton +##iard +detained +##tera +recognizing +relates +misery +##sies +##tly +reproduction +piercing +potatoes +thornton +esther +manners +hbo +##aan +ours +bullshit +ernie +perennial +sensitivity +illuminated +rupert +##jin +##iss +##ear +rfc +nassau +##dock +staggered +socialism +##haven +appointments +nonsense +prestige +sharma +haul +##tical +solidarity +gps +##ook +##rata +igor +pedestrian +##uit +baxter +tenants +wires +medication +unlimited +guiding +impacts +diabetes +##rama +sasha +pas +clive +extraction +131 +continually +constraints +##bilities +sonata +hunted +sixteenth +chu +planting +quote +mayer +pretended +abs +spat +##hua +ceramic +##cci +curtains +pigs +pitching +##dad +latvian +sore +dayton +##sted +##qi +patrols +slice +playground +##nted +shone +stool +apparatus +inadequate +mates +treason +##ija +desires +##liga +##croft +somalia +laurent +mir +leonardo +oracle +grape +obliged +chevrolet +thirteenth +stunning +enthusiastic +##ede +accounted +concludes +currents +basil +##kovic +drought +##rica +mai +##aire +shove +posting +##shed +pilgrimage +humorous +packing +fry +pencil +wines +smells +144 +marilyn +aching +newest +clung +bon +neighbours +sanctioned +##pie +mug +##stock +drowning +##mma +hydraulic +##vil +hiring +reminder +lilly +investigators +##ncies +sour +##eous +compulsory +packet +##rion +##graphic +##elle +cannes +##inate +depressed +##rit +heroic +importantly +theresa +##tled +conway +saturn +marginal +rae +##xia +corresponds +royce +pact +jasper +explosives +packaging +aluminium +##ttered +denotes +rhythmic +spans +assignments +hereditary +outlined +originating +sundays +lad +reissued +greeting +beatrice +##dic +pillar +marcos +plots +handbook +alcoholic +judiciary +avant +slides +extract +masculine +blur +##eum +##force +homage +trembled +owens +hymn +trey +omega +signaling +socks +accumulated +reacted +attic +theo +lining +angie +distraction +primera +talbot +##key +1200 +ti +creativity +billed +##hey +deacon +eduardo +identifies +proposition +dizzy +gunner +hogan +##yam +##pping +##hol +ja +##chan +jensen +reconstructed +##berger +clearance +darius +##nier +abe +harlem +plea +dei +circled +emotionally +notation +fascist +neville +exceeded +upwards +viable +ducks +##fo +workforce +racer +limiting +shri +##lson +possesses +1600 +kerr +moths +devastating +laden +disturbing +locking +##cture +gal +fearing +accreditation +flavor +aide +1870s +mountainous +##baum +melt +##ures +motel +texture +servers +soda +##mb +herd +##nium +erect +puzzled +hum +peggy +examinations +gould +testified +geoff +ren +devised +sacks +##law +denial +posters +grunted +cesar +tutor +ec +gerry +offerings +byrne +falcons +combinations +ct +incoming +pardon +rocking +26th +avengers +flared +mankind +seller +uttar +loch +nadia +stroking +exposing +##hd +fertile +ancestral +instituted +##has +noises +prophecy +taxation +eminent +vivid +pol +##bol +dart +indirect +multimedia +notebook +upside +displaying +adrenaline +referenced +geometric +##iving +progression +##ddy +blunt +announce +##far +implementing +##lav +aggression +liaison +cooler +cares +headache +plantations +gorge +dots +impulse +thickness +ashamed +averaging +kathy +obligation +precursor +137 +fowler +symmetry +thee +225 +hears +##rai +undergoing +ads +butcher +bowler +##lip +cigarettes +subscription +goodness +##ically +browne +##hos +##tech +kyoto +donor +##erty +damaging +friction +drifting +expeditions +hardened +prostitution +152 +fauna +blankets +claw +tossing +snarled +butterflies +recruits +investigative +coated +healed +138 +communal +hai +xiii +academics +boone +psychologist +restless +lahore +stephens +mba +brendan +foreigners +printer +##pc +ached +explode +27th +deed +scratched +dared +##pole +cardiac +1780 +okinawa +proto +commando +compelled +oddly +electrons +##base +replica +thanksgiving +##rist +sheila +deliberate +stafford +tidal +representations +hercules +ou +##path +##iated +kidnapping +lenses +##tling +deficit +samoa +mouths +consuming +computational +maze +granting +smirk +razor +fixture +ideals +inviting +aiden +nominal +##vs +issuing +julio +pitt +ramsey +docks +##oss +exhaust +##owed +bavarian +draped +anterior +mating +ethiopian +explores +noticing +##nton +discarded +convenience +hoffman +endowment +beasts +cartridge +mormon +paternal +probe +sleeves +interfere +lump +deadline +##rail +jenks +bulldogs +scrap +alternating +justified +reproductive +nam +seize +descending +secretariat +kirby +coupe +grouped +smash +panther +sedan +tapping +##18 +lola +cheer +germanic +unfortunate +##eter +unrelated +##fan +subordinate +##sdale +suzanne +advertisement +##ility +horsepower +##lda +cautiously +discourse +luigi +##mans +##fields +noun +prevalent +mao +schneider +everett +surround +governorate +kira +##avia +westward +##take +misty +rails +sustainability +134 +unused +##rating +packs +toast +unwilling +regulate +thy +suffrage +nile +awe +assam +definitions +travelers +affordable +##rb +conferred +sells +undefeated +beneficial +torso +basal +repeating +remixes +##pass +bahrain +cables +fang +##itated +excavated +numbering +statutory +##rey +deluxe +##lian +forested +ramirez +derbyshire +zeus +slamming +transfers +astronomer +banana +lottery +berg +histories +bamboo +##uchi +resurrection +posterior +bowls +vaguely +##thi +thou +preserving +tensed +offence +##inas +meyrick +callum +ridden +watt +langdon +tying +lowland +snorted +daring +truman +##hale +##girl +aura +overly +filing +weighing +goa +infections +philanthropist +saunders +eponymous +##owski +latitude +perspectives +reviewing +mets +commandant +radial +##kha +flashlight +reliability +koch +vowels +amazed +ada +elaine +supper +##rth +##encies +predator +debated +soviets +cola +##boards +##nah +compartment +crooked +arbitrary +fourteenth +##ctive +havana +majors +steelers +clips +profitable +ambush +exited +packers +##tile +nude +cracks +fungi +##е +limb +trousers +josie +shelby +tens +frederic +##ος +definite +smoothly +constellation +insult +baton +discs +lingering +##nco +conclusions +lent +staging +becker +grandpa +shaky +##tron +einstein +obstacles +sk +adverse +elle +economically +##moto +mccartney +thor +dismissal +motions +readings +nostrils +treatise +##pace +squeezing +evidently +prolonged +1783 +venezuelan +je +marguerite +beirut +takeover +shareholders +##vent +denise +digit +airplay +norse +##bbling +imaginary +pills +hubert +blaze +vacated +eliminating +##ello +vine +mansfield +##tty +retrospective +barrow +borne +clutch +bail +forensic +weaving +##nett +##witz +desktop +citadel +promotions +worrying +dorset +ieee +subdivided +##iating +manned +expeditionary +pickup +synod +chuckle +185 +barney +##rz +##ffin +functionality +karachi +litigation +meanings +uc +lick +turbo +anders +##ffed +execute +curl +oppose +ankles +typhoon +##د +##ache +##asia +linguistics +compassion +pressures +grazing +perfection +##iting +immunity +monopoly +muddy +backgrounds +136 +namibia +francesca +monitors +attracting +stunt +tuition +##ии +vegetable +##mates +##quent +mgm +jen +complexes +forts +##ond +cellar +bites +seventeenth +royals +flemish +failures +mast +charities +##cular +peruvian +capitals +macmillan +ipswich +outward +frigate +postgraduate +folds +employing +##ouse +concurrently +fiery +##tai +contingent +nightmares +monumental +nicaragua +##kowski +lizard +mal +fielding +gig +reject +##pad +harding +##ipe +coastline +##cin +##nos +beethoven +humphrey +innovations +##tam +##nge +norris +doris +solicitor +huang +obey +141 +##lc +niagara +##tton +shelves +aug +bourbon +curry +nightclub +specifications +hilton +##ndo +centennial +dispersed +worm +neglected +briggs +sm +font +kuala +uneasy +plc +##nstein +##bound +##aking +##burgh +awaiting +pronunciation +##bbed +##quest +eh +optimal +zhu +raped +greens +presided +brenda +worries +##life +venetian +marxist +turnout +##lius +refined +braced +sins +grasped +sunderland +nickel +speculated +lowell +cyrillic +communism +fundraising +resembling +colonists +mutant +freddie +usc +##mos +gratitude +##run +mural +##lous +chemist +wi +reminds +28th +steals +tess +pietro +##ingen +promoter +ri +microphone +honoured +rai +sant +##qui +feather +##nson +burlington +kurdish +terrorists +deborah +sickness +##wed +##eet +hazard +irritated +desperation +veil +clarity +##rik +jewels +xv +##gged +##ows +##cup +berkshire +unfair +mysteries +orchid +winced +exhaustion +renovations +stranded +obe +infinity +##nies +adapt +redevelopment +thanked +registry +olga +domingo +noir +tudor +ole +##atus +commenting +behaviors +##ais +crisp +pauline +probable +stirling +wigan +##bian +paralympics +panting +surpassed +##rew +luca +barred +pony +famed +##sters +cassandra +waiter +carolyn +exported +##orted +andres +destructive +deeds +jonah +castles +vacancy +suv +##glass +1788 +orchard +yep +famine +belarusian +sprang +##forth +skinny +##mis +administrators +rotterdam +zambia +zhao +boiler +discoveries +##ride +##physics +lucius +disappointing +outreach +spoon +##frame +qualifications +unanimously +enjoys +regency +##iidae +stade +realism +veterinary +rodgers +dump +alain +chestnut +castile +censorship +rumble +gibbs +##itor +communion +reggae +inactivated +logs +loads +##houses +homosexual +##iano +ale +informs +##cas +phrases +plaster +linebacker +ambrose +kaiser +fascinated +850 +limerick +recruitment +forge +mastered +##nding +leinster +rooted +threaten +##strom +borneo +##hes +suggestions +scholarships +propeller +documentaries +patronage +coats +constructing +invest +neurons +comet +entirety +shouts +identities +annoying +unchanged +wary +##antly +##ogy +neat +oversight +##kos +phillies +replay +constance +##kka +incarnation +humble +skies +minus +##acy +smithsonian +##chel +guerrilla +jar +cadets +##plate +surplus +audit +##aru +cracking +joanna +louisa +pacing +##lights +intentionally +##iri +diner +nwa +imprint +australians +tong +unprecedented +bunker +naive +specialists +ark +nichols +railing +leaked +pedal +##uka +shrub +longing +roofs +v8 +captains +neural +tuned +##ntal +##jet +emission +medina +frantic +codex +definitive +sid +abolition +intensified +stocks +enrique +sustain +genoa +oxide +##written +clues +cha +##gers +tributaries +fragment +venom +##rity +##ente +##sca +muffled +vain +sire +laos +##ingly +##hana +hastily +snapping +surfaced +sentiment +motive +##oft +contests +approximate +mesa +luckily +dinosaur +exchanges +propelled +accord +bourne +relieve +tow +masks +offended +##ues +cynthia +##mmer +rains +bartender +zinc +reviewers +lois +##sai +legged +arrogant +rafe +rosie +comprise +handicap +blockade +inlet +lagoon +copied +drilling +shelley +petals +##inian +mandarin +obsolete +##inated +onward +arguably +productivity +cindy +praising +seldom +busch +discusses +raleigh +shortage +ranged +stanton +encouragement +firstly +conceded +overs +temporal +##uke +cbe +##bos +woo +certainty +pumps +##pton +stalked +##uli +lizzie +periodic +thieves +weaker +##night +gases +shoving +chooses +wc +##chemical +prompting +weights +##kill +robust +flanked +sticky +hu +tuberculosis +##eb +##eal +christchurch +resembled +wallet +reese +inappropriate +pictured +distract +fixing +fiddle +giggled +burger +heirs +hairy +mechanic +torque +apache +obsessed +chiefly +cheng +logging +##tag +extracted +meaningful +numb +##vsky +gloucestershire +reminding +##bay +unite +##lit +breeds +diminished +clown +glove +1860s +##ن +##ug +archibald +focal +freelance +sliced +depiction +##yk +organism +switches +sights +stray +crawling +##ril +lever +leningrad +interpretations +loops +anytime +reel +alicia +delighted +##ech +inhaled +xiv +suitcase +bernie +vega +licenses +northampton +exclusion +induction +monasteries +racecourse +homosexuality +##right +##sfield +##rky +dimitri +michele +alternatives +ions +commentators +genuinely +objected +pork +hospitality +fencing +stephan +warships +peripheral +wit +drunken +wrinkled +quentin +spends +departing +chung +numerical +spokesperson +##zone +johannesburg +caliber +killers +##udge +assumes +neatly +demographic +abigail +bloc +##vel +mounting +##lain +bentley +slightest +xu +recipients +##jk +merlin +##writer +seniors +prisons +blinking +hindwings +flickered +kappa +##hel +80s +strengthening +appealing +brewing +gypsy +mali +lashes +hulk +unpleasant +harassment +bio +treaties +predict +instrumentation +pulp +troupe +boiling +mantle +##ffe +ins +##vn +dividing +handles +verbs +##onal +coconut +senegal +340 +thorough +gum +momentarily +##sto +cocaine +panicked +destined +##turing +teatro +denying +weary +captained +mans +##hawks +##code +wakefield +bollywood +thankfully +##16 +cyril +##wu +amendments +##bahn +consultation +stud +reflections +kindness +1787 +internally +##ovo +tex +mosaic +distribute +paddy +seeming +143 +##hic +piers +##15 +##mura +##verse +popularly +winger +kang +sentinel +mccoy +##anza +covenant +##bag +verge +fireworks +suppress +thrilled +dominate +##jar +swansea +##60 +142 +reconciliation +##ndi +stiffened +cue +dorian +##uf +damascus +amor +ida +foremost +##aga +porsche +unseen +dir +##had +##azi +stony +lexi +melodies +##nko +angular +integer +podcast +ants +inherent +jaws +justify +persona +##olved +josephine +##nr +##ressed +customary +flashes +gala +cyrus +glaring +backyard +ariel +physiology +greenland +html +stir +avon +atletico +finch +methodology +ked +##lent +mas +catholicism +townsend +branding +quincy +fits +containers +1777 +ashore +aragon +##19 +forearm +poisoning +##sd +adopting +conquer +grinding +amnesty +keller +finances +evaluate +forged +lankan +instincts +##uto +guam +bosnian +photographed +workplace +desirable +protector +##dog +allocation +intently +encourages +willy +##sten +bodyguard +electro +brighter +##ν +bihar +##chev +lasts +opener +amphibious +sal +verde +arte +##cope +captivity +vocabulary +yields +##tted +agreeing +desmond +pioneered +##chus +strap +campaigned +railroads +##ович +emblem +##dre +stormed +501 +##ulous +marijuana +northumberland +##gn +##nath +bowen +landmarks +beaumont +##qua +danube +##bler +attorneys +th +ge +flyers +critique +villains +cass +mutation +acc +##0s +colombo +mckay +motif +sampling +concluding +syndicate +##rell +neon +stables +ds +warnings +clint +mourning +wilkinson +##tated +merrill +leopard +evenings +exhaled +emil +sonia +ezra +discrete +stove +farrell +fifteenth +prescribed +superhero +##rier +worms +helm +wren +##duction +##hc +expo +##rator +hq +unfamiliar +antony +prevents +acceleration +fiercely +mari +painfully +calculations +cheaper +ign +clifton +irvine +davenport +mozambique +##np +pierced +##evich +wonders +##wig +##cate +##iling +crusade +ware +##uel +enzymes +reasonably +mls +##coe +mater +ambition +bunny +eliot +kernel +##fin +asphalt +headmaster +torah +aden +lush +pins +waived +##care +##yas +joao +substrate +enforce +##grad +##ules +alvarez +selections +epidemic +tempted +##bit +bremen +translates +ensured +waterfront +29th +forrest +manny +malone +kramer +reigning +cookies +simpler +absorption +205 +engraved +##ffy +evaluated +1778 +haze +146 +comforting +crossover +##abe +thorn +##rift +##imo +##pop +suppression +fatigue +cutter +##tr +201 +wurttemberg +##orf +enforced +hovering +proprietary +gb +samurai +syllable +ascent +lacey +tick +lars +tractor +merchandise +rep +bouncing +defendants +##yre +huntington +##ground +##oko +standardized +##hor +##hima +assassinated +nu +predecessors +rainy +liar +assurance +lyrical +##uga +secondly +flattened +ios +parameter +undercover +##mity +bordeaux +punish +ridges +markers +exodus +inactive +hesitate +debbie +nyc +pledge +savoy +nagar +offset +organist +##tium +hesse +marin +converting +##iver +diagram +propulsion +pu +validity +reverted +supportive +##dc +ministries +clans +responds +proclamation +##inae +##ø +##rea +ein +pleading +patriot +sf +birch +islanders +strauss +hates +##dh +brandenburg +concession +rd +##ob +1900s +killings +textbook +antiquity +cinematography +wharf +embarrassing +setup +creed +farmland +inequality +centred +signatures +fallon +370 +##ingham +##uts +ceylon +gazing +directive +laurie +##tern +globally +##uated +##dent +allah +excavation +threads +##cross +148 +frantically +icc +utilize +determines +respiratory +thoughtful +receptions +##dicate +merging +chandra +seine +147 +builders +builds +diagnostic +dev +visibility +goddamn +analyses +dhaka +cho +proves +chancel +concurrent +curiously +canadians +pumped +restoring +1850s +turtles +jaguar +sinister +spinal +traction +declan +vows +1784 +glowed +capitalism +swirling +install +universidad +##lder +##oat +soloist +##genic +##oor +coincidence +beginnings +nissan +dip +resorts +caucasus +combustion +infectious +##eno +pigeon +serpent +##itating +conclude +masked +salad +jew +##gr +surreal +toni +##wc +harmonica +151 +##gins +##etic +##coat +fishermen +intending +bravery +##wave +klaus +titan +wembley +taiwanese +ransom +40th +incorrect +hussein +eyelids +jp +cooke +dramas +utilities +##etta +##print +eisenhower +principally +granada +lana +##rak +openings +concord +##bl +bethany +connie +morality +sega +##mons +##nard +earnings +##kara +##cine +wii +communes +##rel +coma +composing +softened +severed +grapes +##17 +nguyen +analyzed +warlord +hubbard +heavenly +behave +slovenian +##hit +##ony +hailed +filmmakers +trance +caldwell +skye +unrest +coward +likelihood +##aging +bern +sci +taliban +honolulu +propose +##wang +1700 +browser +imagining +cobra +contributes +dukes +instinctively +conan +violinist +##ores +accessories +gradual +##amp +quotes +sioux +##dating +undertake +intercepted +sparkling +compressed +139 +fungus +tombs +haley +imposing +rests +degradation +lincolnshire +retailers +wetlands +tulsa +distributor +dungeon +nun +greenhouse +convey +atlantis +aft +exits +oman +dresser +lyons +##sti +joking +eddy +judgement +omitted +digits +##cts +##game +juniors +##rae +cents +stricken +une +##ngo +wizards +weir +breton +nan +technician +fibers +liking +royalty +##cca +154 +persia +terribly +magician +##rable +##unt +vance +cafeteria +booker +camille +warmer +##static +consume +cavern +gaps +compass +contemporaries +foyer +soothing +graveyard +maj +plunged +blush +##wear +cascade +demonstrates +ordinance +##nov +boyle +##lana +rockefeller +shaken +banjo +izzy +##ense +breathless +vines +##32 +##eman +alterations +chromosome +dwellings +feudal +mole +153 +catalonia +relics +tenant +mandated +##fm +fridge +hats +honesty +patented +raul +heap +cruisers +accusing +enlightenment +infants +wherein +chatham +contractors +zen +affinity +hc +osborne +piston +156 +traps +maturity +##rana +lagos +##zal +peering +##nay +attendant +dealers +protocols +subset +prospects +biographical +##cre +artery +##zers +insignia +nuns +endured +##eration +recommend +schwartz +serbs +berger +cromwell +crossroads +##ctor +enduring +clasped +grounded +##bine +marseille +twitched +abel +choke +https +catalyst +moldova +italians +##tist +disastrous +wee +##oured +##nti +wwf +nope +##piration +##asa +expresses +thumbs +167 +##nza +coca +1781 +cheating +##ption +skipped +sensory +heidelberg +spies +satan +dangers +semifinal +202 +bohemia +whitish +confusing +shipbuilding +relies +surgeons +landings +ravi +baku +moor +suffix +alejandro +##yana +litre +upheld +##unk +rajasthan +##rek +coaster +insists +posture +scenarios +etienne +favoured +appoint +transgender +elephants +poked +greenwood +defences +fulfilled +militant +somali +1758 +chalk +potent +##ucci +migrants +wink +assistants +nos +restriction +activism +niger +##ario +colon +shaun +##sat +daphne +##erated +swam +congregations +reprise +considerations +magnet +playable +xvi +##р +overthrow +tobias +knob +chavez +coding +##mers +propped +katrina +orient +newcomer +##suke +temperate +##pool +farmhouse +interrogation +##vd +committing +##vert +forthcoming +strawberry +joaquin +macau +ponds +shocking +siberia +##cellular +chant +contributors +##nant +##ologists +sped +absorb +hail +1782 +spared +##hore +barbados +karate +opus +originates +saul +##xie +evergreen +leaped +##rock +correlation +exaggerated +weekday +unification +bump +tracing +brig +afb +pathways +utilizing +##ners +mod +mb +disturbance +kneeling +##stad +##guchi +100th +pune +##thy +decreasing +168 +manipulation +miriam +academia +ecosystem +occupational +rbi +##lem +rift +##14 +rotary +stacked +incorporation +awakening +generators +guerrero +racist +##omy +cyber +derivatives +culminated +allie +annals +panzer +sainte +wikipedia +pops +zu +austro +##vate +algerian +politely +nicholson +mornings +educate +tastes +thrill +dartmouth +##gating +db +##jee +regan +differing +concentrating +choreography +divinity +##media +pledged +alexandre +routing +gregor +madeline +##idal +apocalypse +##hora +gunfire +culminating +elves +fined +liang +lam +programmed +tar +guessing +transparency +gabrielle +##gna +cancellation +flexibility +##lining +accession +shea +stronghold +nets +specializes +##rgan +abused +hasan +sgt +ling +exceeding +##₄ +admiration +supermarket +##ark +photographers +specialised +tilt +resonance +hmm +perfume +380 +sami +threatens +garland +botany +guarding +boiled +greet +puppy +russo +supplier +wilmington +vibrant +vijay +##bius +paralympic +grumbled +paige +faa +licking +margins +hurricanes +##gong +fest +grenade +ripping +##uz +counseling +weigh +##sian +needles +wiltshire +edison +costly +##not +fulton +tramway +redesigned +staffordshire +cache +gasping +watkins +sleepy +candidacy +##group +monkeys +timeline +throbbing +##bid +##sos +berth +uzbekistan +vanderbilt +bothering +overturned +ballots +gem +##iger +sunglasses +subscribers +hooker +compelling +ang +exceptionally +saloon +stab +##rdi +carla +terrifying +rom +##vision +coil +##oids +satisfying +vendors +31st +mackay +deities +overlooked +ambient +bahamas +felipe +olympia +whirled +botanist +advertised +tugging +##dden +disciples +morales +unionist +rites +foley +morse +motives +creepy +##₀ +soo +##sz +bargain +highness +frightening +turnpike +tory +reorganization +##cer +depict +biographer +##walk +unopposed +manifesto +##gles +institut +emile +accidental +kapoor +##dam +kilkenny +cortex +lively +##13 +romanesque +jain +shan +cannons +##ood +##ske +petrol +echoing +amalgamated +disappears +cautious +proposes +sanctions +trenton +##ر +flotilla +aus +contempt +tor +canary +cote +theirs +##hun +conceptual +deleted +fascinating +paso +blazing +elf +honourable +hutchinson +##eiro +##outh +##zin +surveyor +tee +amidst +wooded +reissue +intro +##ono +cobb +shelters +newsletter +hanson +brace +encoding +confiscated +dem +caravan +marino +scroll +melodic +cows +imam +##adi +##aneous +northward +searches +biodiversity +cora +310 +roaring +##bers +connell +theologian +halo +compose +pathetic +unmarried +dynamo +##oot +az +calculation +toulouse +deserves +humour +nr +forgiveness +tam +undergone +martyr +pamela +myths +whore +counselor +hicks +290 +heavens +battleship +electromagnetic +##bbs +stellar +establishments +presley +hopped +##chin +temptation +90s +wills +nas +##yuan +nhs +##nya +seminars +##yev +adaptations +gong +asher +lex +indicator +sikh +tobago +cites +goin +##yte +satirical +##gies +characterised +correspond +bubbles +lure +participates +##vid +eruption +skate +therapeutic +1785 +canals +wholesale +defaulted +sac +460 +petit +##zzled +virgil +leak +ravens +256 +portraying +##yx +ghetto +creators +dams +portray +vicente +##rington +fae +namesake +bounty +##arium +joachim +##ota +##iser +aforementioned +axle +snout +depended +dismantled +reuben +480 +##ibly +gallagher +##lau +##pd +earnest +##ieu +##iary +inflicted +objections +##llar +asa +gritted +##athy +jericho +##sea +##was +flick +underside +ceramics +undead +substituted +195 +eastward +undoubtedly +wheeled +chimney +##iche +guinness +cb +##ager +siding +##bell +traitor +baptiste +disguised +inauguration +149 +tipperary +choreographer +perched +warmed +stationary +eco +##ike +##ntes +bacterial +##aurus +flores +phosphate +##core +attacker +invaders +alvin +intersects +a1 +indirectly +immigrated +businessmen +cornelius +valves +narrated +pill +sober +ul +nationale +monastic +applicants +scenery +##jack +161 +motifs +constitutes +cpu +##osh +jurisdictions +sd +tuning +irritation +woven +##uddin +fertility +gao +##erie +antagonist +impatient +glacial +hides +boarded +denominations +interception +##jas +cookie +nicola +##tee +algebraic +marquess +bahn +parole +buyers +bait +turbines +paperwork +bestowed +natasha +renee +oceans +purchases +157 +vaccine +215 +##tock +fixtures +playhouse +integrate +jai +oswald +intellectuals +##cky +booked +nests +mortimer +##isi +obsession +sept +##gler +##sum +440 +scrutiny +simultaneous +squinted +##shin +collects +oven +shankar +penned +remarkably +##я +slips +luggage +spectral +1786 +collaborations +louie +consolidation +##ailed +##ivating +420 +hoover +blackpool +harness +ignition +vest +tails +belmont +mongol +skinner +##nae +visually +mage +derry +##tism +##unce +stevie +transitional +##rdy +redskins +drying +prep +prospective +##21 +annoyance +oversee +##loaded +fills +##books +##iki +announces +fda +scowled +respects +prasad +mystic +tucson +##vale +revue +springer +bankrupt +1772 +aristotle +salvatore +habsburg +##geny +dal +natal +nut +pod +chewing +darts +moroccan +walkover +rosario +lenin +punjabi +##ße +grossed +scattering +wired +invasive +hui +polynomial +corridors +wakes +gina +portrays +##cratic +arid +retreating +erich +irwin +sniper +##dha +linen +lindsey +maneuver +butch +shutting +socio +bounce +commemorative +postseason +jeremiah +pines +275 +mystical +beads +bp +abbas +furnace +bidding +consulted +assaulted +empirical +rubble +enclosure +sob +weakly +cancel +polly +yielded +##emann +curly +prediction +battered +70s +vhs +jacqueline +render +sails +barked +detailing +grayson +riga +sloane +raging +##yah +herbs +bravo +##athlon +alloy +giggle +imminent +suffers +assumptions +waltz +##itate +accomplishments +##ited +bathing +remixed +deception +prefix +##emia +deepest +##tier +##eis +balkan +frogs +##rong +slab +##pate +philosophers +peterborough +grains +imports +dickinson +rwanda +##atics +1774 +dirk +lan +tablets +##rove +clone +##rice +caretaker +hostilities +mclean +##gre +regimental +treasures +norms +impose +tsar +tango +diplomacy +variously +complain +192 +recognise +arrests +1779 +celestial +pulitzer +##dus +bing +libretto +##moor +adele +splash +##rite +expectation +lds +confronts +##izer +spontaneous +harmful +wedge +entrepreneurs +buyer +##ope +bilingual +translate +rugged +conner +circulated +uae +eaton +##gra +##zzle +lingered +lockheed +vishnu +reelection +alonso +##oom +joints +yankee +headline +cooperate +heinz +laureate +invading +##sford +echoes +scandinavian +##dham +hugging +vitamin +salute +micah +hind +trader +##sper +radioactive +##ndra +militants +poisoned +ratified +remark +campeonato +deprived +wander +prop +##dong +outlook +##tani +##rix +##eye +chiang +darcy +##oping +mandolin +spice +statesman +babylon +182 +walled +forgetting +afro +##cap +158 +giorgio +buffer +##polis +planetary +##gis +overlap +terminals +kinda +centenary +##bir +arising +manipulate +elm +ke +1770 +ak +##tad +chrysler +mapped +moose +pomeranian +quad +macarthur +assemblies +shoreline +recalls +stratford +##rted +noticeable +##evic +imp +##rita +##sque +accustomed +supplying +tents +disgusted +vogue +sipped +filters +khz +reno +selecting +luftwaffe +mcmahon +tyne +masterpiece +carriages +collided +dunes +exercised +flare +remembers +muzzle +##mobile +heck +##rson +burgess +lunged +middleton +boycott +bilateral +##sity +hazardous +lumpur +multiplayer +spotlight +jackets +goldman +liege +porcelain +rag +waterford +benz +attracts +hopeful +battling +ottomans +kensington +baked +hymns +cheyenne +lattice +levine +borrow +polymer +clashes +michaels +monitored +commitments +denounced +##25 +##von +cavity +##oney +hobby +akin +##holders +futures +intricate +cornish +patty +##oned +illegally +dolphin +##lag +barlow +yellowish +maddie +apologized +luton +plagued +##puram +nana +##rds +sway +fanny +łodz +##rino +psi +suspicions +hanged +##eding +initiate +charlton +##por +nak +competent +235 +analytical +annex +wardrobe +reservations +##rma +sect +162 +fairfax +hedge +piled +buckingham +uneven +bauer +simplicity +snyder +interpret +accountability +donors +moderately +byrd +continents +##cite +##max +disciple +hr +jamaican +ping +nominees +##uss +mongolian +diver +attackers +eagerly +ideological +pillows +miracles +apartheid +revolver +sulfur +clinics +moran +163 +##enko +ile +katy +rhetoric +##icated +chronology +recycling +##hrer +elongated +mughal +pascal +profiles +vibration +databases +domination +##fare +##rant +matthias +digest +rehearsal +polling +weiss +initiation +reeves +clinging +flourished +impress +ngo +##hoff +##ume +buckley +symposium +rhythms +weed +emphasize +transforming +##taking +##gence +##yman +accountant +analyze +flicker +foil +priesthood +voluntarily +decreases +##80 +##hya +slater +sv +charting +mcgill +##lde +moreno +##iu +besieged +zur +robes +##phic +admitting +api +deported +turmoil +peyton +earthquakes +##ares +nationalists +beau +clair +brethren +interrupt +welch +curated +galerie +requesting +164 +##ested +impending +steward +viper +##vina +complaining +beautifully +brandy +foam +nl +1660 +##cake +alessandro +punches +laced +explanations +##lim +attribute +clit +reggie +discomfort +##cards +smoothed +whales +##cene +adler +countered +duffy +disciplinary +widening +recipe +reliance +conducts +goats +gradient +preaching +##shaw +matilda +quasi +striped +meridian +cannabis +cordoba +certificates +##agh +##tering +graffiti +hangs +pilgrims +repeats +##ych +revive +urine +etat +##hawk +fueled +belts +fuzzy +susceptible +##hang +mauritius +salle +sincere +beers +hooks +##cki +arbitration +entrusted +advise +sniffed +seminar +junk +donnell +processors +principality +strapped +celia +mendoza +everton +fortunes +prejudice +starving +reassigned +steamer +##lund +tuck +evenly +foreman +##ffen +dans +375 +envisioned +slit +##xy +baseman +liberia +rosemary +##weed +electrified +periodically +potassium +stride +contexts +sperm +slade +mariners +influx +bianca +subcommittee +##rane +spilling +icao +estuary +##nock +delivers +iphone +##ulata +isa +mira +bohemian +dessert +##sbury +welcoming +proudly +slowing +##chs +musee +ascension +russ +##vian +waits +##psy +africans +exploit +##morphic +gov +eccentric +crab +peck +##ull +entrances +formidable +marketplace +groom +bolted +metabolism +patton +robbins +courier +payload +endure +##ifier +andes +refrigerator +##pr +ornate +##uca +ruthless +illegitimate +masonry +strasbourg +bikes +adobe +##³ +apples +quintet +willingly +niche +bakery +corpses +energetic +##cliffe +##sser +##ards +177 +centimeters +centro +fuscous +cretaceous +rancho +##yde +andrei +telecom +tottenham +oasis +ordination +vulnerability +presiding +corey +cp +penguins +sims +##pis +malawi +piss +##48 +correction +##cked +##ffle +##ryn +countdown +detectives +psychiatrist +psychedelic +dinosaurs +blouse +##get +choi +vowed +##oz +randomly +##pol +49ers +scrub +blanche +bruins +dusseldorf +##using +unwanted +##ums +212 +dominique +elevations +headlights +om +laguna +##oga +1750 +famously +ignorance +shrewsbury +##aine +ajax +breuning +che +confederacy +greco +overhaul +##screen +paz +skirts +disagreement +cruelty +jagged +phoebe +shifter +hovered +viruses +##wes +mandy +##lined +##gc +landlord +squirrel +dashed +##ι +ornamental +gag +wally +grange +literal +spurs +undisclosed +proceeding +yin +##text +billie +orphan +spanned +humidity +indy +weighted +presentations +explosions +lucian +##tary +vaughn +hindus +##anga +##hell +psycho +171 +daytona +protects +efficiently +rematch +sly +tandem +##oya +rebranded +impaired +hee +metropolis +peach +godfrey +diaspora +ethnicity +prosperous +gleaming +dar +grossing +playback +##rden +stripe +pistols +##tain +births +labelled +##cating +172 +rudy +alba +##onne +aquarium +hostility +##gb +##tase +shudder +sumatra +hardest +lakers +consonant +creeping +demos +homicide +capsule +zeke +liberties +expulsion +pueblo +##comb +trait +transporting +##ddin +##neck +##yna +depart +gregg +mold +ledge +hangar +oldham +playboy +termination +analysts +gmbh +romero +##itic +insist +cradle +filthy +brightness +slash +shootout +deposed +bordering +##truct +isis +microwave +tumbled +sheltered +cathy +werewolves +messy +andersen +convex +clapped +clinched +satire +wasting +edo +vc +rufus +##jak +mont +##etti +poznan +##keeping +restructuring +transverse +##rland +azerbaijani +slovene +gestures +roommate +choking +shear +##quist +vanguard +oblivious +##hiro +disagreed +baptism +##lich +coliseum +##aceae +salvage +societe +cory +locke +relocation +relying +versailles +ahl +swelling +##elo +cheerful +##word +##edes +gin +sarajevo +obstacle +diverted +##nac +messed +thoroughbred +fluttered +utrecht +chewed +acquaintance +assassins +dispatch +mirza +##wart +nike +salzburg +swell +yen +##gee +idle +ligue +samson +##nds +##igh +playful +spawned +##cise +tease +##case +burgundy +##bot +stirring +skeptical +interceptions +marathi +##dies +bedrooms +aroused +pinch +##lik +preferences +tattoos +buster +digitally +projecting +rust +##ital +kitten +priorities +addison +pseudo +##guard +dusk +icons +sermon +##psis +##iba +bt +##lift +##xt +ju +truce +rink +##dah +##wy +defects +psychiatry +offences +calculate +glucose +##iful +##rized +##unda +francaise +##hari +richest +warwickshire +carly +1763 +purity +redemption +lending +##cious +muse +bruises +cerebral +aero +carving +##name +preface +terminology +invade +monty +##int +anarchist +blurred +##iled +rossi +treats +guts +shu +foothills +ballads +undertaking +premise +cecilia +affiliates +blasted +conditional +wilder +minors +drone +rudolph +buffy +swallowing +horton +attested +##hop +rutherford +howell +primetime +livery +penal +##bis +minimize +hydro +wrecked +wrought +palazzo +##gling +cans +vernacular +friedman +nobleman +shale +walnut +danielle +##ection +##tley +sears +##kumar +chords +lend +flipping +streamed +por +dracula +gallons +sacrifices +gamble +orphanage +##iman +mckenzie +##gible +boxers +daly +##balls +##ان +208 +##ific +##rative +##iq +exploited +slated +##uity +circling +hillary +pinched +goldberg +provost +campaigning +lim +piles +ironically +jong +mohan +successors +usaf +##tem +##ught +autobiographical +haute +preserves +##ending +acquitted +comparisons +203 +hydroelectric +gangs +cypriot +torpedoes +rushes +chrome +derive +bumps +instability +fiat +pets +##mbe +silas +dye +reckless +settler +##itation +info +heats +##writing +176 +canonical +maltese +fins +mushroom +stacy +aspen +avid +##kur +##loading +vickers +gaston +hillside +statutes +wilde +gail +kung +sabine +comfortably +motorcycles +##rgo +169 +pneumonia +fetch +##sonic +axel +faintly +parallels +##oop +mclaren +spouse +compton +interdisciplinary +miner +##eni +181 +clamped +##chal +##llah +separates +versa +##mler +scarborough +labrador +##lity +##osing +rutgers +hurdles +como +166 +burt +divers +##100 +wichita +cade +coincided +##erson +bruised +mla +##pper +vineyard +##ili +##brush +notch +mentioning +jase +hearted +kits +doe +##acle +pomerania +##ady +ronan +seizure +pavel +problematic +##zaki +domenico +##ulin +catering +penelope +dependence +parental +emilio +ministerial +atkinson +##bolic +clarkson +chargers +colby +grill +peeked +arises +summon +##aged +fools +##grapher +faculties +qaeda +##vial +garner +refurbished +##hwa +geelong +disasters +nudged +bs +shareholder +lori +algae +reinstated +rot +##ades +##nous +invites +stainless +183 +inclusive +##itude +diocesan +til +##icz +denomination +##xa +benton +floral +registers +##ider +##erman +##kell +absurd +brunei +guangzhou +hitter +retaliation +##uled +##eve +blanc +nh +consistency +contamination +##eres +##rner +dire +palermo +broadcasters +diaries +inspire +vols +brewer +tightening +ky +mixtape +hormone +##tok +stokes +##color +##dly +##ssi +pg +##ometer +##lington +sanitation +##tility +intercontinental +apps +##adt +¹⁄₂ +cylinders +economies +favourable +unison +croix +gertrude +odyssey +vanity +dangling +##logists +upgrades +dice +middleweight +practitioner +##ight +206 +henrik +parlor +orion +angered +lac +python +blurted +##rri +sensual +intends +swings +angled +##phs +husky +attain +peerage +precinct +textiles +cheltenham +shuffled +dai +confess +tasting +bhutan +##riation +tyrone +segregation +abrupt +ruiz +##rish +smirked +blackwell +confidential +browning +amounted +##put +vase +scarce +fabulous +raided +staple +guyana +unemployed +glider +shay +##tow +carmine +troll +intervene +squash +superstar +##uce +cylindrical +len +roadway +researched +handy +##rium +##jana +meta +lao +declares +##rring +##tadt +##elin +##kova +willem +shrubs +napoleonic +realms +skater +qi +volkswagen +##ł +tad +hara +archaeologist +awkwardly +eerie +##kind +wiley +##heimer +##24 +titus +organizers +cfl +crusaders +lama +usb +vent +enraged +thankful +occupants +maximilian +##gaard +possessing +textbooks +##oran +collaborator +quaker +##ulo +avalanche +mono +silky +straits +isaiah +mustang +surged +resolutions +potomac +descend +cl +kilograms +plato +strains +saturdays +##olin +bernstein +##ype +holstein +ponytail +##watch +belize +conversely +heroine +perpetual +##ylus +charcoal +piedmont +glee +negotiating +backdrop +prologue +##jah +##mmy +pasadena +climbs +ramos +sunni +##holm +##tner +##tri +anand +deficiency +hertfordshire +stout +##avi +aperture +orioles +##irs +doncaster +intrigued +bombed +coating +otis +##mat +cocktail +##jit +##eto +amir +arousal +sar +##proof +##act +##ories +dixie +pots +##bow +whereabouts +159 +##fted +drains +bullying +cottages +scripture +coherent +fore +poe +appetite +##uration +sampled +##ators +##dp +derrick +rotor +jays +peacock +installment +##rro +advisors +##coming +rodeo +scotch +##mot +##db +##fen +##vant +ensued +rodrigo +dictatorship +martyrs +twenties +##н +towed +incidence +marta +rainforest +sai +scaled +##cles +oceanic +qualifiers +symphonic +mcbride +dislike +generalized +aubrey +colonization +##iation +##lion +##ssing +disliked +lublin +salesman +##ulates +spherical +whatsoever +sweating +avalon +contention +punt +severity +alderman +atari +##dina +##grant +##rop +scarf +seville +vertices +annexation +fairfield +fascination +inspiring +launches +palatinate +regretted +##rca +feral +##iom +elk +nap +olsen +reddy +yong +##leader +##iae +garment +transports +feng +gracie +outrage +viceroy +insides +##esis +breakup +grady +organizer +softer +grimaced +222 +murals +galicia +arranging +vectors +##rsten +bas +##sb +##cens +sloan +##eka +bitten +ara +fender +nausea +bumped +kris +banquet +comrades +detector +persisted +##llan +adjustment +endowed +cinemas +##shot +sellers +##uman +peek +epa +kindly +neglect +simpsons +talon +mausoleum +runaway +hangul +lookout +##cic +rewards +coughed +acquainted +chloride +##ald +quicker +accordion +neolithic +##qa +artemis +coefficient +lenny +pandora +tx +##xed +ecstasy +litter +segunda +chairperson +gemma +hiss +rumor +vow +nasal +antioch +compensate +patiently +transformers +##eded +judo +morrow +penis +posthumous +philips +bandits +husbands +denote +flaming +##any +##phones +langley +yorker +1760 +walters +##uo +##kle +gubernatorial +fatty +samsung +leroy +outlaw +##nine +unpublished +poole +jakob +##ᵢ +##ₙ +crete +distorted +superiority +##dhi +intercept +crust +mig +claus +crashes +positioning +188 +stallion +301 +frontal +armistice +##estinal +elton +aj +encompassing +camel +commemorated +malaria +woodward +calf +cigar +penetrate +##oso +willard +##rno +##uche +illustrate +amusing +convergence +noteworthy +##lma +##rva +journeys +realise +manfred +##sable +410 +##vocation +hearings +fiance +##posed +educators +provoked +adjusting +##cturing +modular +stockton +paterson +vlad +rejects +electors +selena +maureen +##tres +uber +##rce +swirled +##num +proportions +nanny +pawn +naturalist +parma +apostles +awoke +ethel +wen +##bey +monsoon +overview +##inating +mccain +rendition +risky +adorned +##ih +equestrian +germain +nj +conspicuous +confirming +##yoshi +shivering +##imeter +milestone +rumours +flinched +bounds +smacked +token +##bei +lectured +automobiles +##shore +impacted +##iable +nouns +nero +##leaf +ismail +prostitute +trams +##lace +bridget +sud +stimulus +impressions +reins +revolves +##oud +##gned +giro +honeymoon +##swell +criterion +##sms +##uil +libyan +prefers +##osition +211 +preview +sucks +accusation +bursts +metaphor +diffusion +tolerate +faye +betting +cinematographer +liturgical +specials +bitterly +humboldt +##ckle +flux +rattled +##itzer +archaeologists +odor +authorised +marshes +discretion +##ов +alarmed +archaic +inverse +##leton +explorers +##pine +drummond +tsunami +woodlands +##minate +##tland +booklet +insanity +owning +insert +crafted +calculus +##tore +receivers +##bt +stung +##eca +##nched +prevailing +travellers +eyeing +lila +graphs +##borne +178 +julien +##won +morale +adaptive +therapist +erica +cw +libertarian +bowman +pitches +vita +##ional +crook +##ads +##entation +caledonia +mutiny +##sible +1840s +automation +##ß +flock +##pia +ironic +pathology +##imus +remarried +##22 +joker +withstand +energies +##att +shropshire +hostages +madeleine +tentatively +conflicting +mateo +recipes +euros +ol +mercenaries +nico +##ndon +albuquerque +augmented +mythical +bel +freud +##child +cough +##lica +365 +freddy +lillian +genetically +nuremberg +calder +209 +bonn +outdoors +paste +suns +urgency +vin +restraint +tyson +##cera +##selle +barrage +bethlehem +kahn +##par +mounts +nippon +barony +happier +ryu +makeshift +sheldon +blushed +castillo +barking +listener +taped +bethel +fluent +headlines +pornography +rum +disclosure +sighing +mace +doubling +gunther +manly +##plex +rt +interventions +physiological +forwards +emerges +##tooth +##gny +compliment +rib +recession +visibly +barge +faults +connector +exquisite +prefect +##rlin +patio +##cured +elevators +brandt +italics +pena +173 +wasp +satin +ea +botswana +graceful +respectable +##jima +##rter +##oic +franciscan +generates +##dl +alfredo +disgusting +##olate +##iously +sherwood +warns +cod +promo +cheryl +sino +##ة +##escu +twitch +##zhi +brownish +thom +ortiz +##dron +densely +##beat +carmel +reinforce +##bana +187 +anastasia +downhill +vertex +contaminated +remembrance +harmonic +homework +##sol +fiancee +gears +olds +angelica +loft +ramsay +quiz +colliery +sevens +##cape +autism +##hil +walkway +##boats +ruben +abnormal +ounce +khmer +##bbe +zachary +bedside +morphology +punching +##olar +sparrow +convinces +##35 +hewitt +queer +remastered +rods +mabel +solemn +notified +lyricist +symmetric +##xide +174 +encore +passports +wildcats +##uni +baja +##pac +mildly +##ease +bleed +commodity +mounds +glossy +orchestras +##omo +damian +prelude +ambitions +##vet +awhile +remotely +##aud +asserts +imply +##iques +distinctly +modelling +remedy +##dded +windshield +dani +xiao +##endra +audible +powerplant +1300 +invalid +elemental +acquisitions +##hala +immaculate +libby +plata +smuggling +ventilation +denoted +minh +##morphism +430 +differed +dion +kelley +lore +mocking +sabbath +spikes +hygiene +drown +runoff +stylized +tally +liberated +aux +interpreter +righteous +aba +siren +reaper +pearce +millie +##cier +##yra +gaius +##iso +captures +##ttering +dorm +claudio +##sic +benches +knighted +blackness +##ored +discount +fumble +oxidation +routed +##ς +novak +perpendicular +spoiled +fracture +splits +##urt +pads +topology +##cats +axes +fortunate +offenders +protestants +esteem +221 +broadband +convened +frankly +hound +prototypes +isil +facilitated +keel +##sher +sahara +awaited +bubba +orb +prosecutors +186 +hem +520 +##xing +relaxing +remnant +romney +sorted +slalom +stefano +ulrich +##active +exemption +folder +pauses +foliage +hitchcock +epithet +204 +criticisms +##aca +ballistic +brody +hinduism +chaotic +youths +equals +##pala +pts +thicker +analogous +capitalist +improvised +overseeing +sinatra +ascended +beverage +##tl +straightforward +##kon +curran +##west +bois +325 +induce +surveying +emperors +sax +unpopular +##kk +cartoonist +fused +##mble +unto +##yuki +localities +##cko +##ln +darlington +slain +academie +lobbying +sediment +puzzles +##grass +defiance +dickens +manifest +tongues +alumnus +arbor +coincide +184 +appalachian +mustafa +examiner +cabaret +traumatic +yves +bracelet +draining +heroin +magnum +baths +odessa +consonants +mitsubishi +##gua +kellan +vaudeville +##fr +joked +null +straps +probation +##ław +ceded +interfaces +##pas +##zawa +blinding +viet +224 +rothschild +museo +640 +huddersfield +##vr +tactic +##storm +brackets +dazed +incorrectly +##vu +reg +glazed +fearful +manifold +benefited +irony +##sun +stumbling +##rte +willingness +balkans +mei +wraps +##aba +injected +##lea +gu +syed +harmless +##hammer +bray +takeoff +poppy +timor +cardboard +astronaut +purdue +weeping +southbound +cursing +stalls +diagonal +##neer +lamar +bryce +comte +weekdays +harrington +##uba +negatively +##see +lays +grouping +##cken +##henko +affirmed +halle +modernist +##lai +hodges +smelling +aristocratic +baptized +dismiss +justification +oilers +##now +coupling +qin +snack +healer +##qing +gardener +layla +battled +formulated +stephenson +gravitational +##gill +##jun +1768 +granny +coordinating +suites +##cd +##ioned +monarchs +##cote +##hips +sep +blended +apr +barrister +deposition +fia +mina +policemen +paranoid +##pressed +churchyard +covert +crumpled +creep +abandoning +tr +transmit +conceal +barr +understands +readiness +spire +##cology +##enia +##erry +610 +startling +unlock +vida +bowled +slots +##nat +##islav +spaced +trusting +admire +rig +##ink +slack +##70 +mv +207 +casualty +##wei +classmates +##odes +##rar +##rked +amherst +furnished +evolve +foundry +menace +mead +##lein +flu +wesleyan +##kled +monterey +webber +##vos +wil +##mith +##на +bartholomew +justices +restrained +##cke +amenities +191 +mediated +sewage +trenches +ml +mainz +##thus +1800s +##cula +##inski +caine +bonding +213 +converts +spheres +superseded +marianne +crypt +sweaty +ensign +historia +##br +spruce +##post +##ask +forks +thoughtfully +yukon +pamphlet +ames +##uter +karma +##yya +bryn +negotiation +sighs +incapable +##mbre +##ntial +actresses +taft +##mill +luce +prevailed +##amine +1773 +motionless +envoy +testify +investing +sculpted +instructors +provence +kali +cullen +horseback +##while +goodwin +##jos +gaa +norte +##ldon +modify +wavelength +abd +214 +skinned +sprinter +forecast +scheduling +marries +squared +tentative +##chman +boer +##isch +bolts +swap +fisherman +assyrian +impatiently +guthrie +martins +murdoch +194 +tanya +nicely +dolly +lacy +med +##45 +syn +decks +fashionable +millionaire +##ust +surfing +##ml +##ision +heaved +tammy +consulate +attendees +routinely +197 +fuse +saxophonist +backseat +malaya +##lord +scowl +tau +##ishly +193 +sighted +steaming +##rks +303 +911 +##holes +##hong +ching +##wife +bless +conserved +jurassic +stacey +unix +zion +chunk +rigorous +blaine +198 +peabody +slayer +dismay +brewers +nz +##jer +det +##glia +glover +postwar +int +penetration +sylvester +imitation +vertically +airlift +heiress +knoxville +viva +##uin +390 +macon +##rim +##fighter +##gonal +janice +##orescence +##wari +marius +belongings +leicestershire +196 +blanco +inverted +preseason +sanity +sobbing +##due +##elt +##dled +collingwood +regeneration +flickering +shortest +##mount +##osi +feminism +##lat +sherlock +cabinets +fumbled +northbound +precedent +snaps +##mme +researching +##akes +guillaume +insights +manipulated +vapor +neighbour +sap +gangster +frey +f1 +stalking +scarcely +callie +barnett +tendencies +audi +doomed +assessing +slung +panchayat +ambiguous +bartlett +##etto +distributing +violating +wolverhampton +##hetic +swami +histoire +##urus +liable +pounder +groin +hussain +larsen +popping +surprises +##atter +vie +curt +##station +mute +relocate +musicals +authorization +richter +##sef +immortality +tna +bombings +##press +deteriorated +yiddish +##acious +robbed +colchester +cs +pmid +ao +verified +balancing +apostle +swayed +recognizable +oxfordshire +retention +nottinghamshire +contender +judd +invitational +shrimp +uhf +##icient +cleaner +longitudinal +tanker +##mur +acronym +broker +koppen +sundance +suppliers +##gil +4000 +clipped +fuels +petite +##anne +landslide +helene +diversion +populous +landowners +auspices +melville +quantitative +##xes +ferries +nicky +##llus +doo +haunting +roche +carver +downed +unavailable +##pathy +approximation +hiroshima +##hue +garfield +valle +comparatively +keyboardist +traveler +##eit +congestion +calculating +subsidiaries +##bate +serb +modernization +fairies +deepened +ville +averages +##lore +inflammatory +tonga +##itch +co₂ +squads +##hea +gigantic +serum +enjoyment +retailer +verona +35th +cis +##phobic +magna +technicians +##vati +arithmetic +##sport +levin +##dation +amtrak +chow +sienna +##eyer +backstage +entrepreneurship +##otic +learnt +tao +##udy +worcestershire +formulation +baggage +hesitant +bali +sabotage +##kari +barren +enhancing +murmur +pl +freshly +putnam +syntax +aces +medicines +resentment +bandwidth +##sier +grins +chili +guido +##sei +framing +implying +gareth +lissa +genevieve +pertaining +admissions +geo +thorpe +proliferation +sato +bela +analyzing +parting +##gor +awakened +##isman +huddled +secrecy +##kling +hush +gentry +540 +dungeons +##ego +coasts +##utz +sacrificed +##chule +landowner +mutually +prevalence +programmer +adolescent +disrupted +seaside +gee +trusts +vamp +georgie +##nesian +##iol +schedules +sindh +##market +etched +hm +sparse +bey +beaux +scratching +gliding +unidentified +216 +collaborating +gems +jesuits +oro +accumulation +shaping +mbe +anal +##xin +231 +enthusiasts +newscast +##egan +janata +dewey +parkinson +179 +ankara +biennial +towering +dd +inconsistent +950 +##chet +thriving +terminate +cabins +furiously +eats +advocating +donkey +marley +muster +phyllis +leiden +##user +grassland +glittering +iucn +loneliness +217 +memorandum +armenians +##ddle +popularized +rhodesia +60s +lame +##illon +sans +bikini +header +orbits +##xx +##finger +##ulator +sharif +spines +biotechnology +strolled +naughty +yates +##wire +fremantle +milo +##mour +abducted +removes +##atin +humming +wonderland +##chrome +##ester +hume +pivotal +##rates +armand +grams +believers +elector +rte +apron +bis +scraped +##yria +endorsement +initials +##llation +eps +dotted +hints +buzzing +emigration +nearer +##tom +indicators +##ulu +coarse +neutron +protectorate +##uze +directional +exploits +pains +loire +1830s +proponents +guggenheim +rabbits +ritchie +305 +hectare +inputs +hutton +##raz +verify +##ako +boilers +longitude +##lev +skeletal +yer +emilia +citrus +compromised +##gau +pokemon +prescription +paragraph +eduard +cadillac +attire +categorized +kenyan +weddings +charley +##bourg +entertain +monmouth +##lles +nutrients +davey +mesh +incentive +practised +ecosystems +kemp +subdued +overheard +##rya +bodily +maxim +##nius +apprenticeship +ursula +##fight +lodged +rug +silesian +unconstitutional +patel +inspected +coyote +unbeaten +##hak +34th +disruption +convict +parcel +##cl +##nham +collier +implicated +mallory +##iac +##lab +susannah +winkler +##rber +shia +phelps +sediments +graphical +robotic +##sner +adulthood +mart +smoked +##isto +kathryn +clarified +##aran +divides +convictions +oppression +pausing +burying +##mt +federico +mathias +eileen +##tana +kite +hunched +##acies +189 +##atz +disadvantage +liza +kinetic +greedy +paradox +yokohama +dowager +trunks +ventured +##gement +gupta +vilnius +olaf +##thest +crimean +hopper +##ej +progressively +arturo +mouthed +arrondissement +##fusion +rubin +simulcast +oceania +##orum +##stra +##rred +busiest +intensely +navigator +cary +##vine +##hini +##bies +fife +rowe +rowland +posing +insurgents +shafts +lawsuits +activate +conor +inward +culturally +garlic +265 +##eering +eclectic +##hui +##kee +##nl +furrowed +vargas +meteorological +rendezvous +##aus +culinary +commencement +##dition +quota +##notes +mommy +salaries +overlapping +mule +##iology +##mology +sums +wentworth +##isk +##zione +mainline +subgroup +##illy +hack +plaintiff +verdi +bulb +differentiation +engagements +multinational +supplemented +bertrand +caller +regis +##naire +##sler +##arts +##imated +blossom +propagation +kilometer +viaduct +vineyards +##uate +beckett +optimization +golfer +songwriters +seminal +semitic +thud +volatile +evolving +ridley +##wley +trivial +distributions +scandinavia +jiang +##ject +wrestled +insistence +##dio +emphasizes +napkin +##ods +adjunct +rhyme +##ricted +##eti +hopeless +surrounds +tremble +32nd +smoky +##ntly +oils +medicinal +padded +steer +wilkes +219 +255 +concessions +hue +uniquely +blinded +landon +yahoo +##lane +hendrix +commemorating +dex +specify +chicks +##ggio +intercity +1400 +morley +##torm +highlighting +##oting +pang +oblique +stalled +##liner +flirting +newborn +1769 +bishopric +shaved +232 +currie +##ush +dharma +spartan +##ooped +favorites +smug +novella +sirens +abusive +creations +espana +##lage +paradigm +semiconductor +sheen +##rdo +##yen +##zak +nrl +renew +##pose +##tur +adjutant +marches +norma +##enity +ineffective +weimar +grunt +##gat +lordship +plotting +expenditure +infringement +lbs +refrain +av +mimi +mistakenly +postmaster +1771 +##bara +ras +motorsports +tito +199 +subjective +##zza +bully +stew +##kaya +prescott +1a +##raphic +##zam +bids +styling +paranormal +reeve +sneaking +exploding +katz +akbar +migrant +syllables +indefinitely +##ogical +destroys +replaces +applause +##phine +pest +##fide +218 +articulated +bertie +##thing +##cars +##ptic +courtroom +crowley +aesthetics +cummings +tehsil +hormones +titanic +dangerously +##ibe +stadion +jaenelle +auguste +ciudad +##chu +mysore +partisans +##sio +lucan +philipp +##aly +debating +henley +interiors +##rano +##tious +homecoming +beyonce +usher +henrietta +prepares +weeds +##oman +ely +plucked +##pire +##dable +luxurious +##aq +artifact +password +pasture +juno +maddy +minsk +##dder +##ologies +##rone +assessments +martian +royalist +1765 +examines +##mani +##rge +nino +223 +parry +scooped +relativity +##eli +##uting +##cao +congregational +noisy +traverse +##agawa +strikeouts +nickelodeon +obituary +transylvania +binds +depictions +polk +trolley +##yed +##lard +breeders +##under +dryly +hokkaido +1762 +strengths +stacks +bonaparte +connectivity +neared +prostitutes +stamped +anaheim +gutierrez +sinai +##zzling +bram +fresno +madhya +##86 +proton +##lena +##llum +##phon +reelected +wanda +##anus +##lb +ample +distinguishing +##yler +grasping +sermons +tomato +bland +stimulation +avenues +##eux +spreads +scarlett +fern +pentagon +assert +baird +chesapeake +ir +calmed +distortion +fatalities +##olis +correctional +pricing +##astic +##gina +prom +dammit +ying +collaborate +##chia +welterweight +33rd +pointer +substitution +bonded +umpire +communicating +multitude +paddle +##obe +federally +intimacy +##insky +betray +ssr +##lett +##lean +##lves +##therapy +airbus +##tery +functioned +ud +bearer +biomedical +netflix +##hire +##nca +condom +brink +ik +##nical +macy +##bet +flap +gma +experimented +jelly +lavender +##icles +##ulia +munro +##mian +##tial +rye +##rle +60th +gigs +hottest +rotated +predictions +fuji +bu +##erence +##omi +barangay +##fulness +##sas +clocks +##rwood +##liness +cereal +roe +wight +decker +uttered +babu +onion +xml +forcibly +##df +petra +sarcasm +hartley +peeled +storytelling +##42 +##xley +##ysis +##ffa +fibre +kiel +auditor +fig +harald +greenville +##berries +geographically +nell +quartz +##athic +cemeteries +##lr +crossings +nah +holloway +reptiles +chun +sichuan +snowy +660 +corrections +##ivo +zheng +ambassadors +blacksmith +fielded +fluids +hardcover +turnover +medications +melvin +academies +##erton +ro +roach +absorbing +spaniards +colton +##founded +outsider +espionage +kelsey +245 +edible +##ulf +dora +establishes +##sham +##tries +contracting +##tania +cinematic +costello +nesting +##uron +connolly +duff +##nology +mma +##mata +fergus +sexes +gi +optics +spectator +woodstock +banning +##hee +##fle +differentiate +outfielder +refinery +226 +312 +gerhard +horde +lair +drastically +##udi +landfall +##cheng +motorsport +odi +##achi +predominant +quay +skins +##ental +edna +harshly +complementary +murdering +##aves +wreckage +##90 +ono +outstretched +lennox +munitions +galen +reconcile +470 +scalp +bicycles +gillespie +questionable +rosenberg +guillermo +hostel +jarvis +kabul +volvo +opium +yd +##twined +abuses +decca +outpost +##cino +sensible +neutrality +##64 +ponce +anchorage +atkins +turrets +inadvertently +disagree +libre +vodka +reassuring +weighs +##yal +glide +jumper +ceilings +repertory +outs +stain +##bial +envy +##ucible +smashing +heightened +policing +hyun +mixes +lai +prima +##ples +celeste +##bina +lucrative +intervened +kc +manually +##rned +stature +staffed +bun +bastards +nairobi +priced +##auer +thatcher +##kia +tripped +comune +##ogan +##pled +brasil +incentives +emanuel +hereford +musica +##kim +benedictine +biennale +##lani +eureka +gardiner +rb +knocks +sha +##ael +##elled +##onate +efficacy +ventura +masonic +sanford +maize +leverage +##feit +capacities +santana +##aur +novelty +vanilla +##cter +##tour +benin +##oir +##rain +neptune +drafting +tallinn +##cable +humiliation +##boarding +schleswig +fabian +bernardo +liturgy +spectacle +sweeney +pont +routledge +##tment +cosmos +ut +hilt +sleek +universally +##eville +##gawa +typed +##dry +favors +allegheny +glaciers +##rly +recalling +aziz +##log +parasite +requiem +auf +##berto +##llin +illumination +##breaker +##issa +festivities +bows +govern +vibe +vp +333 +sprawled +larson +pilgrim +bwf +leaping +##rts +##ssel +alexei +greyhound +hoarse +##dler +##oration +seneca +##cule +gaping +##ulously +##pura +cinnamon +##gens +##rricular +craven +fantasies +houghton +engined +reigned +dictator +supervising +##oris +bogota +commentaries +unnatural +fingernails +spirituality +tighten +##tm +canadiens +protesting +intentional +cheers +sparta +##ytic +##iere +##zine +widen +belgarath +controllers +dodd +iaaf +navarre +##ication +defect +squire +steiner +whisky +##mins +560 +inevitably +tome +##gold +chew +##uid +##lid +elastic +##aby +streaked +alliances +jailed +regal +##ined +##phy +czechoslovak +narration +absently +##uld +bluegrass +guangdong +quran +criticizing +hose +hari +##liest +##owa +skier +streaks +deploy +##lom +raft +bose +dialed +huff +##eira +haifa +simplest +bursting +endings +ib +sultanate +##titled +franks +whitman +ensures +sven +##ggs +collaborators +forster +organising +ui +banished +napier +injustice +teller +layered +thump +##otti +roc +battleships +evidenced +fugitive +sadie +robotics +##roud +equatorial +geologist +##iza +yielding +##bron +##sr +internationale +mecca +##diment +sbs +skyline +toad +uploaded +reflective +undrafted +lal +leafs +bayern +##dai +lakshmi +shortlisted +##stick +##wicz +camouflage +donate +af +christi +lau +##acio +disclosed +nemesis +1761 +assemble +straining +northamptonshire +tal +##asi +bernardino +premature +heidi +42nd +coefficients +galactic +reproduce +buzzed +sensations +zionist +monsieur +myrtle +##eme +archery +strangled +musically +viewpoint +antiquities +bei +trailers +seahawks +cured +pee +preferring +tasmanian +lange +sul +##mail +##working +colder +overland +lucivar +massey +gatherings +haitian +##smith +disapproval +flaws +##cco +##enbach +1766 +npr +##icular +boroughs +creole +forums +techno +1755 +dent +abdominal +streetcar +##eson +##stream +procurement +gemini +predictable +##tya +acheron +christoph +feeder +fronts +vendor +bernhard +jammu +tumors +slang +##uber +goaltender +twists +curving +manson +vuelta +mer +peanut +confessions +pouch +unpredictable +allowance +theodor +vascular +##factory +bala +authenticity +metabolic +coughing +nanjing +##cea +pembroke +##bard +splendid +36th +ff +hourly +##ahu +elmer +handel +##ivate +awarding +thrusting +dl +experimentation +##hesion +##46 +caressed +entertained +steak +##rangle +biologist +orphans +baroness +oyster +stepfather +##dridge +mirage +reefs +speeding +##31 +barons +1764 +227 +inhabit +preached +repealed +##tral +honoring +boogie +captives +administer +johanna +##imate +gel +suspiciously +1767 +sobs +##dington +backbone +hayward +garry +##folding +##nesia +maxi +##oof +##ppe +ellison +galileo +##stand +crimea +frenzy +amour +bumper +matrices +natalia +baking +garth +palestinians +##grove +smack +conveyed +ensembles +gardening +##manship +##rup +##stituting +1640 +harvesting +topography +jing +shifters +dormitory +##carriage +##lston +ist +skulls +##stadt +dolores +jewellery +sarawak +##wai +##zier +fences +christy +confinement +tumbling +credibility +fir +stench +##bria +##plication +##nged +##sam +virtues +##belt +marjorie +pba +##eem +##made +celebrates +schooner +agitated +barley +fulfilling +anthropologist +##pro +restrict +novi +regulating +##nent +padres +##rani +##hesive +loyola +tabitha +milky +olson +proprietor +crambidae +guarantees +intercollegiate +ljubljana +hilda +##sko +ignorant +hooded +##lts +sardinia +##lidae +##vation +frontman +privileged +witchcraft +##gp +jammed +laude +poking +##than +bracket +amazement +yunnan +##erus +maharaja +linnaeus +264 +commissioning +milano +peacefully +##logies +akira +rani +regulator +##36 +grasses +##rance +luzon +crows +compiler +gretchen +seaman +edouard +tab +buccaneers +ellington +hamlets +whig +socialists +##anto +directorial +easton +mythological +##kr +##vary +rhineland +semantic +taut +dune +inventions +succeeds +##iter +replication +branched +##pired +jul +prosecuted +kangaroo +penetrated +##avian +middlesbrough +doses +bleak +madam +predatory +relentless +##vili +reluctance +##vir +hailey +crore +silvery +1759 +monstrous +swimmers +transmissions +hawthorn +informing +##eral +toilets +caracas +crouch +kb +##sett +295 +cartel +hadley +##aling +alexia +yvonne +##biology +cinderella +eton +superb +blizzard +stabbing +industrialist +maximus +##gm +##orus +groves +maud +clade +oversized +comedic +##bella +rosen +nomadic +fulham +montane +beverages +galaxies +redundant +swarm +##rot +##folia +##llis +buckinghamshire +fen +bearings +bahadur +##rom +gilles +phased +dynamite +faber +benoit +vip +##ount +##wd +booking +fractured +tailored +anya +spices +westwood +cairns +auditions +inflammation +steamed +##rocity +##acion +##urne +skyla +thereof +watford +torment +archdeacon +transforms +lulu +demeanor +fucked +serge +##sor +mckenna +minas +entertainer +##icide +caress +originate +residue +##sty +1740 +##ilised +##org +beech +##wana +subsidies +##ghton +emptied +gladstone +ru +firefighters +voodoo +##rcle +het +nightingale +tamara +edmond +ingredient +weaknesses +silhouette +285 +compatibility +withdrawing +hampson +##mona +anguish +giggling +##mber +bookstore +##jiang +southernmost +tilting +##vance +bai +economical +rf +briefcase +dreadful +hinted +projections +shattering +totaling +##rogate +analogue +indicted +periodical +fullback +##dman +haynes +##tenberg +##ffs +##ishment +1745 +thirst +stumble +penang +vigorous +##ddling +##kor +##lium +octave +##ove +##enstein +##inen +##ones +siberian +##uti +cbn +repeal +swaying +##vington +khalid +tanaka +unicorn +otago +plastered +lobe +riddle +##rella +perch +##ishing +croydon +filtered +graeme +tripoli +##ossa +crocodile +##chers +sufi +mined +##tung +inferno +lsu +##phi +swelled +utilizes +£2 +cale +periodicals +styx +hike +informally +coop +lund +##tidae +ala +hen +qui +transformations +disposed +sheath +chickens +##cade +fitzroy +sas +silesia +unacceptable +odisha +1650 +sabrina +pe +spokane +ratios +athena +massage +shen +dilemma +##drum +##riz +##hul +corona +doubtful +niall +##pha +##bino +fines +cite +acknowledging +bangor +ballard +bathurst +##resh +huron +mustered +alzheimer +garments +kinase +tyre +warship +##cp +flashback +pulmonary +braun +cheat +kamal +cyclists +constructions +grenades +ndp +traveller +excuses +stomped +signalling +trimmed +futsal +mosques +relevance +##wine +wta +##23 +##vah +##lter +hoc +##riding +optimistic +##´s +deco +sim +interacting +rejecting +moniker +waterways +##ieri +##oku +mayors +gdansk +outnumbered +pearls +##ended +##hampton +fairs +totals +dominating +262 +notions +stairway +compiling +pursed +commodities +grease +yeast +##jong +carthage +griffiths +residual +amc +contraction +laird +sapphire +##marine +##ivated +amalgamation +dissolve +inclination +lyle +packaged +altitudes +suez +canons +graded +lurched +narrowing +boasts +guise +wed +enrico +##ovsky +rower +scarred +bree +cub +iberian +protagonists +bargaining +proposing +trainers +voyages +vans +fishes +##aea +##ivist +##verance +encryption +artworks +kazan +sabre +cleopatra +hepburn +rotting +supremacy +mecklenburg +##brate +burrows +hazards +outgoing +flair +organizes +##ctions +scorpion +##usions +boo +234 +chevalier +dunedin +slapping +##34 +ineligible +pensions +##38 +##omic +manufactures +emails +bismarck +238 +weakening +blackish +ding +mcgee +quo +##rling +northernmost +xx +manpower +greed +sampson +clicking +##ange +##horpe +##inations +##roving +torre +##eptive +##moral +symbolism +38th +asshole +meritorious +outfits +splashed +biographies +sprung +astros +##tale +302 +737 +filly +raoul +nw +tokugawa +linden +clubhouse +##apa +tracts +romano +##pio +putin +tags +##note +chained +dickson +gunshot +moe +gunn +rashid +##tails +zipper +##bas +##nea +contrasted +##ply +##udes +plum +pharaoh +##pile +aw +comedies +ingrid +sandwiches +subdivisions +1100 +mariana +nokia +kamen +hz +delaney +veto +herring +##words +possessive +outlines +##roup +siemens +stairwell +rc +gallantry +messiah +palais +yells +233 +zeppelin +##dm +bolivar +##cede +smackdown +mckinley +##mora +##yt +muted +geologic +finely +unitary +avatar +hamas +maynard +rees +bog +contrasting +##rut +liv +chico +disposition +pixel +##erate +becca +dmitry +yeshiva +narratives +##lva +##ulton +mercenary +sharpe +tempered +navigate +stealth +amassed +keynes +##lini +untouched +##rrie +havoc +lithium +##fighting +abyss +graf +southward +wolverine +balloons +implements +ngos +transitions +##icum +ambushed +concacaf +dormant +economists +##dim +costing +csi +rana +universite +boulders +verity +##llon +collin +mellon +misses +cypress +fluorescent +lifeless +spence +##ulla +crewe +shepard +pak +revelations +##م +jolly +gibbons +paw +##dro +##quel +freeing +##test +shack +fries +palatine +##51 +##hiko +accompaniment +cruising +recycled +##aver +erwin +sorting +synthesizers +dyke +realities +sg +strides +enslaved +wetland +##ghan +competence +gunpowder +grassy +maroon +reactors +objection +##oms +carlson +gearbox +macintosh +radios +shelton +##sho +clergyman +prakash +254 +mongols +trophies +oricon +228 +stimuli +twenty20 +cantonese +cortes +mirrored +##saurus +bhp +cristina +melancholy +##lating +enjoyable +nuevo +##wny +downfall +schumacher +##ind +banging +lausanne +rumbled +paramilitary +reflex +ax +amplitude +migratory +##gall +##ups +midi +barnard +lastly +sherry +##hp +##nall +keystone +##kra +carleton +slippery +##53 +coloring +foe +socket +otter +##rgos +mats +##tose +consultants +bafta +bison +topping +##km +490 +primal +abandonment +transplant +atoll +hideous +mort +pained +reproduced +tae +howling +##turn +unlawful +billionaire +hotter +poised +lansing +##chang +dinamo +retro +messing +nfc +domesday +##mina +blitz +timed +##athing +##kley +ascending +gesturing +##izations +signaled +tis +chinatown +mermaid +savanna +jameson +##aint +catalina +##pet +##hers +cochrane +cy +chatting +##kus +alerted +computation +mused +noelle +majestic +mohawk +campo +octagonal +##sant +##hend +241 +aspiring +##mart +comprehend +iona +paralyzed +shimmering +swindon +rhone +##eley +reputed +configurations +pitchfork +agitation +francais +gillian +lipstick +##ilo +outsiders +pontifical +resisting +bitterness +sewer +rockies +##edd +##ucher +misleading +1756 +exiting +galloway +##nging +risked +##heart +246 +commemoration +schultz +##rka +integrating +##rsa +poses +shrieked +##weiler +guineas +gladys +jerking +owls +goldsmith +nightly +penetrating +##unced +lia +##33 +ignited +betsy +##aring +##thorpe +follower +vigorously +##rave +coded +kiran +knit +zoology +tbilisi +##28 +##bered +repository +govt +deciduous +dino +growling +##bba +enhancement +unleashed +chanting +pussy +biochemistry +##eric +kettle +repression +toxicity +nrhp +##arth +##kko +##bush +ernesto +commended +outspoken +242 +mca +parchment +sms +kristen +##aton +bisexual +raked +glamour +navajo +a2 +conditioned +showcased +##hma +spacious +youthful +##esa +usl +appliances +junta +brest +layne +conglomerate +enchanted +chao +loosened +picasso +circulating +inspect +montevideo +##centric +##kti +piazza +spurred +##aith +bari +freedoms +poultry +stamford +lieu +##ect +indigo +sarcastic +bahia +stump +attach +dvds +frankenstein +lille +approx +scriptures +pollen +##script +nmi +overseen +##ivism +tides +proponent +newmarket +inherit +milling +##erland +centralized +##rou +distributors +credentials +drawers +abbreviation +##lco +##xon +downing +uncomfortably +ripe +##oes +erase +franchises +##ever +populace +##bery +##khar +decomposition +pleas +##tet +daryl +sabah +##stle +##wide +fearless +genie +lesions +annette +##ogist +oboe +appendix +nair +dripped +petitioned +maclean +mosquito +parrot +rpg +hampered +1648 +operatic +reservoirs +##tham +irrelevant +jolt +summarized +##fp +medallion +##taff +##− +clawed +harlow +narrower +goddard +marcia +bodied +fremont +suarez +altering +tempest +mussolini +porn +##isms +sweetly +oversees +walkers +solitude +grimly +shrines +hk +ich +supervisors +hostess +dietrich +legitimacy +brushes +expressive +##yp +dissipated +##rse +localized +systemic +##nikov +gettysburg +##js +##uaries +dialogues +muttering +251 +housekeeper +sicilian +discouraged +##frey +beamed +kaladin +halftime +kidnap +##amo +##llet +1754 +synonymous +depleted +instituto +insulin +reprised +##opsis +clashed +##ctric +interrupting +radcliffe +insisting +medici +1715 +ejected +playfully +turbulent +##47 +starvation +##rini +shipment +rebellious +petersen +verification +merits +##rified +cakes +##charged +1757 +milford +shortages +spying +fidelity +##aker +emitted +storylines +harvested +seismic +##iform +cheung +kilda +theoretically +barbie +lynx +##rgy +##tius +goblin +mata +poisonous +##nburg +reactive +residues +obedience +##евич +conjecture +##rac +401 +hating +sixties +kicker +moaning +motown +##bha +emancipation +neoclassical +##hering +consoles +ebert +professorship +##tures +sustaining +assaults +obeyed +affluent +incurred +tornadoes +##eber +##zow +emphasizing +highlanders +cheated +helmets +##ctus +internship +terence +bony +executions +legislators +berries +peninsular +tinged +##aco +1689 +amplifier +corvette +ribbons +lavish +pennant +##lander +worthless +##chfield +##forms +mariano +pyrenees +expenditures +##icides +chesterfield +mandir +tailor +39th +sergey +nestled +willed +aristocracy +devotees +goodnight +raaf +rumored +weaponry +remy +appropriations +harcourt +burr +riaa +##lence +limitation +unnoticed +guo +soaking +swamps +##tica +collapsing +tatiana +descriptive +brigham +psalm +##chment +maddox +##lization +patti +caliph +##aja +akron +injuring +serra +##ganj +basins +##sari +astonished +launcher +##church +hilary +wilkins +sewing +##sf +stinging +##fia +##ncia +underwood +startup +##ition +compilations +vibrations +embankment +jurist +##nity +bard +juventus +groundwater +kern +palaces +helium +boca +cramped +marissa +soto +##worm +jae +princely +##ggy +faso +bazaar +warmly +##voking +229 +pairing +##lite +##grate +##nets +wien +freaked +ulysses +rebirth +##alia +##rent +mummy +guzman +jimenez +stilled +##nitz +trajectory +tha +woken +archival +professions +##pts +##pta +hilly +shadowy +shrink +##bolt +norwood +glued +migrate +stereotypes +devoid +##pheus +625 +evacuate +horrors +infancy +gotham +knowles +optic +downloaded +sachs +kingsley +parramatta +darryl +mor +##onale +shady +commence +confesses +kan +##meter +##placed +marlborough +roundabout +regents +frigates +io +##imating +gothenburg +revoked +carvings +clockwise +convertible +intruder +##sche +banged +##ogo +vicky +bourgeois +##mony +dupont +footing +##gum +pd +##real +buckle +yun +penthouse +sane +720 +serviced +stakeholders +neumann +bb +##eers +comb +##gam +catchment +pinning +rallies +typing +##elles +forefront +freiburg +sweetie +giacomo +widowed +goodwill +worshipped +aspirations +midday +##vat +fishery +##trick +bournemouth +turk +243 +hearth +ethanol +guadalajara +murmurs +sl +##uge +afforded +scripted +##hta +wah +##jn +coroner +translucent +252 +memorials +puck +progresses +clumsy +##race +315 +candace +recounted +##27 +##slin +##uve +filtering +##mac +howl +strata +heron +leveled +##ays +dubious +##oja +##т +##wheel +citations +exhibiting +##laya +##mics +##pods +turkic +##lberg +injunction +##ennial +##mit +antibodies +##44 +organise +##rigues +cardiovascular +cushion +inverness +##zquez +dia +cocoa +sibling +##tman +##roid +expanse +feasible +tunisian +algiers +##relli +rus +bloomberg +dso +westphalia +bro +tacoma +281 +downloads +##ours +konrad +duran +##hdi +continuum +jett +compares +legislator +secession +##nable +##gues +##zuka +translating +reacher +##gley +##ła +aleppo +##agi +tc +orchards +trapping +linguist +versatile +drumming +postage +calhoun +superiors +##mx +barefoot +leary +##cis +ignacio +alfa +kaplan +##rogen +bratislava +mori +##vot +disturb +haas +313 +cartridges +gilmore +radiated +salford +tunic +hades +##ulsive +archeological +delilah +magistrates +auditioned +brewster +charters +empowerment +blogs +cappella +dynasties +iroquois +whipping +##krishna +raceway +truths +myra +weaken +judah +mcgregor +##horse +mic +refueling +37th +burnley +bosses +markus +premio +query +##gga +dunbar +##economic +darkest +lyndon +sealing +commendation +reappeared +##mun +addicted +ezio +slaughtered +satisfactory +shuffle +##eves +##thic +##uj +fortification +warrington +##otto +resurrected +fargo +mane +##utable +##lei +##space +foreword +ox +##aris +##vern +abrams +hua +##mento +sakura +##alo +uv +sentimental +##skaya +midfield +##eses +sturdy +scrolls +macleod +##kyu +entropy +##lance +mitochondrial +cicero +excelled +thinner +convoys +perceive +##oslav +##urable +systematically +grind +burkina +287 +##tagram +ops +##aman +guantanamo +##cloth +##tite +forcefully +wavy +##jou +pointless +##linger +##tze +layton +portico +superficial +clerical +outlaws +##hism +burials +muir +##inn +creditors +hauling +rattle +##leg +calais +monde +archers +reclaimed +dwell +wexford +hellenic +falsely +remorse +##tek +dough +furnishings +##uttered +gabon +neurological +novice +##igraphy +contemplated +pulpit +nightstand +saratoga +##istan +documenting +pulsing +taluk +##firmed +busted +marital +##rien +disagreements +wasps +##yes +hodge +mcdonnell +mimic +fran +pendant +dhabi +musa +##nington +congratulations +argent +darrell +concussion +losers +regrets +thessaloniki +reversal +donaldson +hardwood +thence +achilles +ritter +##eran +demonic +jurgen +prophets +goethe +eki +classmate +buff +##cking +yank +irrational +##inging +perished +seductive +qur +sourced +##crat +##typic +mustard +ravine +barre +horizontally +characterization +phylogenetic +boise +##dit +##runner +##tower +brutally +intercourse +seduce +##bbing +fay +ferris +ogden +amar +nik +unarmed +##inator +evaluating +kyrgyzstan +sweetness +##lford +##oki +mccormick +meiji +notoriety +stimulate +disrupt +figuring +instructional +mcgrath +##zoo +groundbreaking +##lto +flinch +khorasan +agrarian +bengals +mixer +radiating +##sov +ingram +pitchers +nad +tariff +##cript +tata +##codes +##emi +##ungen +appellate +lehigh +##bled +##giri +brawl +duct +texans +##ciation +##ropolis +skipper +speculative +vomit +doctrines +stresses +253 +davy +graders +whitehead +jozef +timely +cumulative +haryana +paints +appropriately +boon +cactus +##ales +##pid +dow +legions +##pit +perceptions +1730 +picturesque +##yse +periphery +rune +wr +##aha +celtics +sentencing +whoa +##erin +confirms +variance +425 +moines +mathews +spade +rave +m1 +fronted +fx +blending +alleging +reared +##gl +237 +##paper +grassroots +eroded +##free +##physical +directs +ordeal +##sław +accelerate +hacker +rooftop +##inia +lev +buys +cebu +devote +##lce +specialising +##ulsion +choreographed +repetition +warehouses +##ryl +paisley +tuscany +analogy +sorcerer +hash +huts +shards +descends +exclude +nix +chaplin +gaga +ito +vane +##drich +causeway +misconduct +limo +orchestrated +glands +jana +##kot +u2 +##mple +##sons +branching +contrasts +scoop +longed +##virus +chattanooga +##75 +syrup +cornerstone +##tized +##mind +##iaceae +careless +precedence +frescoes +##uet +chilled +consult +modelled +snatch +peat +##thermal +caucasian +humane +relaxation +spins +temperance +##lbert +occupations +lambda +hybrids +moons +mp3 +##oese +247 +rolf +societal +yerevan +ness +##ssler +befriended +mechanized +nominate +trough +boasted +cues +seater +##hom +bends +##tangle +conductors +emptiness +##lmer +eurasian +adriatic +tian +##cie +anxiously +lark +propellers +chichester +jock +ev +2a +##holding +credible +recounts +tori +loyalist +abduction +##hoot +##redo +nepali +##mite +ventral +tempting +##ango +##crats +steered +##wice +javelin +dipping +laborers +prentice +looming +titanium +##ː +badges +emir +tensor +##ntation +egyptians +rash +denies +hawthorne +lombard +showers +wehrmacht +dietary +trojan +##reus +welles +executing +horseshoe +lifeboat +##lak +elsa +infirmary +nearing +roberta +boyer +mutter +trillion +joanne +##fine +##oked +sinks +vortex +uruguayan +clasp +sirius +##block +accelerator +prohibit +sunken +byu +chronological +diplomats +ochreous +510 +symmetrical +1644 +maia +##tology +salts +reigns +atrocities +##ия +hess +bared +issn +##vyn +cater +saturated +##cycle +##isse +sable +voyager +dyer +yusuf +##inge +fountains +wolff +##39 +##nni +engraving +rollins +atheist +ominous +##ault +herr +chariot +martina +strung +##fell +##farlane +horrific +sahib +gazes +saetan +erased +ptolemy +##olic +flushing +lauderdale +analytic +##ices +530 +navarro +beak +gorilla +herrera +broom +guadalupe +raiding +sykes +311 +bsc +deliveries +1720 +invasions +carmichael +tajikistan +thematic +ecumenical +sentiments +onstage +##rians +##brand +##sume +catastrophic +flanks +molten +##arns +waller +aimee +terminating +##icing +alternately +##oche +nehru +printers +outraged +##eving +empires +template +banners +repetitive +za +##oise +vegetarian +##tell +guiana +opt +cavendish +lucknow +synthesized +##hani +##mada +finalized +##ctable +fictitious +mayoral +unreliable +##enham +embracing +peppers +rbis +##chio +##neo +inhibition +slashed +togo +orderly +embroidered +safari +salty +236 +barron +benito +totaled +##dak +pubs +simulated +caden +devin +tolkien +momma +welding +sesame +##ept +gottingen +hardness +630 +shaman +temeraire +620 +adequately +pediatric +##kit +ck +assertion +radicals +composure +cadence +seafood +beaufort +lazarus +mani +warily +cunning +kurdistan +249 +cantata +##kir +ares +##41 +##clusive +nape +townland +geared +insulted +flutter +boating +violate +draper +dumping +malmo +##hh +##romatic +firearm +alta +bono +obscured +##clave +exceeds +panorama +unbelievable +##train +preschool +##essed +disconnected +installing +rescuing +secretaries +accessibility +##castle +##drive +##ifice +##film +bouts +slug +waterway +mindanao +##buro +##ratic +halves +##ل +calming +liter +maternity +adorable +bragg +electrification +mcc +##dote +roxy +schizophrenia +##body +munoz +kaye +whaling +239 +mil +tingling +tolerant +##ago +unconventional +volcanoes +##finder +deportivo +##llie +robson +kaufman +neuroscience +wai +deportation +masovian +scraping +converse +##bh +hacking +bulge +##oun +administratively +yao +580 +amp +mammoth +booster +claremont +hooper +nomenclature +pursuits +mclaughlin +melinda +##sul +catfish +barclay +substrates +taxa +zee +originals +kimberly +packets +padma +##ality +borrowing +ostensibly +solvent +##bri +##genesis +##mist +lukas +shreveport +veracruz +##ь +##lou +##wives +cheney +tt +anatolia +hobbs +##zyn +cyclic +radiant +alistair +greenish +siena +dat +independents +##bation +conform +pieter +hyper +applicant +bradshaw +spores +telangana +vinci +inexpensive +nuclei +322 +jang +nme +soho +spd +##ign +cradled +receptionist +pow +##43 +##rika +fascism +##ifer +experimenting +##ading +##iec +##region +345 +jocelyn +maris +stair +nocturnal +toro +constabulary +elgin +##kker +msc +##giving +##schen +##rase +doherty +doping +sarcastically +batter +maneuvers +##cano +##apple +##gai +##git +intrinsic +##nst +##stor +1753 +showtime +cafes +gasps +lviv +ushered +##thed +fours +restart +astonishment +transmitting +flyer +shrugs +##sau +intriguing +cones +dictated +mushrooms +medial +##kovsky +##elman +escorting +gaped +##26 +godfather +##door +##sell +djs +recaptured +timetable +vila +1710 +3a +aerodrome +mortals +scientology +##orne +angelina +mag +convection +unpaid +insertion +intermittent +lego +##nated +endeavor +kota +pereira +##lz +304 +bwv +glamorgan +insults +agatha +fey +##cend +fleetwood +mahogany +protruding +steamship +zeta +##arty +mcguire +suspense +##sphere +advising +urges +##wala +hurriedly +meteor +gilded +inline +arroyo +stalker +##oge +excitedly +revered +##cure +earle +introductory +##break +##ilde +mutants +puff +pulses +reinforcement +##haling +curses +lizards +stalk +correlated +##fixed +fallout +macquarie +##unas +bearded +denton +heaving +802 +##ocation +winery +assign +dortmund +##lkirk +everest +invariant +charismatic +susie +##elling +bled +lesley +telegram +sumner +bk +##ogen +##к +wilcox +needy +colbert +duval +##iferous +##mbled +allotted +attends +imperative +##hita +replacements +hawker +##inda +insurgency +##zee +##eke +casts +##yla +680 +ives +transitioned +##pack +##powering +authoritative +baylor +flex +cringed +plaintiffs +woodrow +##skie +drastic +ape +aroma +unfolded +commotion +nt +preoccupied +theta +routines +lasers +privatization +wand +domino +ek +clenching +nsa +strategically +showered +bile +handkerchief +pere +storing +christophe +insulting +316 +nakamura +romani +asiatic +magdalena +palma +cruises +stripping +405 +konstantin +soaring +##berman +colloquially +forerunner +havilland +incarcerated +parasites +sincerity +##utus +disks +plank +saigon +##ining +corbin +homo +ornaments +powerhouse +##tlement +chong +fastened +feasibility +idf +morphological +usable +##nish +##zuki +aqueduct +jaguars +keepers +##flies +aleksandr +faust +assigns +ewing +bacterium +hurled +tricky +hungarians +integers +wallis +321 +yamaha +##isha +hushed +oblivion +aviator +evangelist +friars +##eller +monograph +ode +##nary +airplanes +labourers +charms +##nee +1661 +hagen +tnt +rudder +fiesta +transcript +dorothea +ska +inhibitor +maccabi +retorted +raining +encompassed +clauses +menacing +1642 +lineman +##gist +vamps +##ape +##dick +gloom +##rera +dealings +easing +seekers +##nut +##pment +helens +unmanned +##anu +##isson +basics +##amy +##ckman +adjustments +1688 +brutality +horne +##zell +sui +##55 +##mable +aggregator +##thal +rhino +##drick +##vira +counters +zoom +##01 +##rting +mn +montenegrin +packard +##unciation +##♭ +##kki +reclaim +scholastic +thugs +pulsed +##icia +syriac +quan +saddam +banda +kobe +blaming +buddies +dissent +##lusion +##usia +corbett +jaya +delle +erratic +lexie +##hesis +435 +amiga +hermes +##pressing +##leen +chapels +gospels +jamal +##uating +compute +revolving +warp +##sso +##thes +armory +##eras +##gol +antrim +loki +##kow +##asian +##good +##zano +braid +handwriting +subdistrict +funky +pantheon +##iculate +concurrency +estimation +improper +juliana +##his +newcomers +johnstone +staten +communicated +##oco +##alle +sausage +stormy +##stered +##tters +superfamily +##grade +acidic +collateral +tabloid +##oped +##rza +bladder +austen +##ellant +mcgraw +##hay +hannibal +mein +aquino +lucifer +wo +badger +boar +cher +christensen +greenberg +interruption +##kken +jem +244 +mocked +bottoms +cambridgeshire +##lide +sprawling +##bbly +eastwood +ghent +synth +##buck +advisers +##bah +nominally +hapoel +qu +daggers +estranged +fabricated +towels +vinnie +wcw +misunderstanding +anglia +nothin +unmistakable +##dust +##lova +chilly +marquette +truss +##edge +##erine +reece +##lty +##chemist +##connected +272 +308 +41st +bash +raion +waterfalls +##ump +##main +labyrinth +queue +theorist +##istle +bharatiya +flexed +soundtracks +rooney +leftist +patrolling +wharton +plainly +alleviate +eastman +schuster +topographic +engages +immensely +unbearable +fairchild +1620 +dona +lurking +parisian +oliveira +ia +indictment +hahn +bangladeshi +##aster +vivo +##uming +##ential +antonia +expects +indoors +kildare +harlan +##logue +##ogenic +##sities +forgiven +##wat +childish +tavi +##mide +##orra +plausible +grimm +successively +scooted +##bola +##dget +##rith +spartans +emery +flatly +azure +epilogue +##wark +flourish +##iny +##tracted +##overs +##oshi +bestseller +distressed +receipt +spitting +hermit +topological +##cot +drilled +subunit +francs +##layer +eel +##fk +##itas +octopus +footprint +petitions +ufo +##say +##foil +interfering +leaking +palo +##metry +thistle +valiant +##pic +narayan +mcpherson +##fast +gonzales +##ym +##enne +dustin +novgorod +solos +##zman +doin +##raph +##patient +##meyer +soluble +ashland +cuffs +carole +pendleton +whistling +vassal +##river +deviation +revisited +constituents +rallied +rotate +loomed +##eil +##nting +amateurs +augsburg +auschwitz +crowns +skeletons +##cona +bonnet +257 +dummy +globalization +simeon +sleeper +mandal +differentiated +##crow +##mare +milne +bundled +exasperated +talmud +owes +segregated +##feng +##uary +dentist +piracy +props +##rang +devlin +##torium +malicious +paws +##laid +dependency +##ergy +##fers +##enna +258 +pistons +rourke +jed +grammatical +tres +maha +wig +512 +ghostly +jayne +##achal +##creen +##ilis +##lins +##rence +designate +##with +arrogance +cambodian +clones +showdown +throttle +twain +##ception +lobes +metz +nagoya +335 +braking +##furt +385 +roaming +##minster +amin +crippled +##37 +##llary +indifferent +hoffmann +idols +intimidating +1751 +261 +influenza +memo +onions +1748 +bandage +consciously +##landa +##rage +clandestine +observes +swiped +tangle +##ener +##jected +##trum +##bill +##lta +hugs +congresses +josiah +spirited +##dek +humanist +managerial +filmmaking +inmate +rhymes +debuting +grimsby +ur +##laze +duplicate +vigor +##tf +republished +bolshevik +refurbishment +antibiotics +martini +methane +newscasts +royale +horizons +levant +iain +visas +##ischen +paler +##around +manifestation +snuck +alf +chop +futile +pedestal +rehab +##kat +bmg +kerman +res +fairbanks +jarrett +abstraction +saharan +##zek +1746 +procedural +clearer +kincaid +sash +luciano +##ffey +crunch +helmut +##vara +revolutionaries +##tute +creamy +leach +##mmon +1747 +permitting +nes +plight +wendell +##lese +contra +ts +clancy +ipa +mach +staples +autopsy +disturbances +nueva +karin +pontiac +##uding +proxy +venerable +haunt +leto +bergman +expands +##helm +wal +##pipe +canning +celine +cords +obesity +##enary +intrusion +planner +##phate +reasoned +sequencing +307 +harrow +##chon +##dora +marred +mcintyre +repay +tarzan +darting +248 +harrisburg +margarita +repulsed +##hur +##lding +belinda +hamburger +novo +compliant +runways +bingham +registrar +skyscraper +ic +cuthbert +improvisation +livelihood +##corp +##elial +admiring +##dened +sporadic +believer +casablanca +popcorn +##29 +asha +shovel +##bek +##dice +coiled +tangible +##dez +casper +elsie +resin +tenderness +rectory +##ivision +avail +sonar +##mori +boutique +##dier +guerre +bathed +upbringing +vaulted +sandals +blessings +##naut +##utnant +1680 +306 +foxes +pia +corrosion +hesitantly +confederates +crystalline +footprints +shapiro +tirana +valentin +drones +45th +microscope +shipments +texted +inquisition +wry +guernsey +unauthorized +resigning +760 +ripple +schubert +stu +reassure +felony +##ardo +brittle +koreans +##havan +##ives +dun +implicit +tyres +##aldi +##lth +magnolia +##ehan +##puri +##poulos +aggressively +fei +gr +familiarity +##poo +indicative +##trust +fundamentally +jimmie +overrun +395 +anchors +moans +##opus +britannia +armagh +##ggle +purposely +seizing +##vao +bewildered +mundane +avoidance +cosmopolitan +geometridae +quartermaster +caf +415 +chatter +engulfed +gleam +purge +##icate +juliette +jurisprudence +guerra +revisions +##bn +casimir +brew +##jm +1749 +clapton +cloudy +conde +hermitage +278 +simulations +torches +vincenzo +matteo +##rill +hidalgo +booming +westbound +accomplishment +tentacles +unaffected +##sius +annabelle +flopped +sloping +##litz +dreamer +interceptor +vu +##loh +consecration +copying +messaging +breaker +climates +hospitalized +1752 +torino +afternoons +winfield +witnessing +##teacher +breakers +choirs +sawmill +coldly +##ege +sipping +haste +uninhabited +conical +bibliography +pamphlets +severn +edict +##oca +deux +illnesses +grips +##pl +rehearsals +sis +thinkers +tame +##keepers +1690 +acacia +reformer +##osed +##rys +shuffling +##iring +##shima +eastbound +ionic +rhea +flees +littered +##oum +rocker +vomiting +groaning +champ +overwhelmingly +civilizations +paces +sloop +adoptive +##tish +skaters +##vres +aiding +mango +##joy +nikola +shriek +##ignon +pharmaceuticals +##mg +tuna +calvert +gustavo +stocked +yearbook +##urai +##mana +computed +subsp +riff +hanoi +kelvin +hamid +moors +pastures +summons +jihad +nectar +##ctors +bayou +untitled +pleasing +vastly +republics +intellect +##η +##ulio +##tou +crumbling +stylistic +sb +##ی +consolation +frequented +h₂o +walden +widows +##iens +404 +##ignment +chunks +improves +288 +grit +recited +##dev +snarl +sociological +##arte +##gul +inquired +##held +bruise +clube +consultancy +homogeneous +hornets +multiplication +pasta +prick +savior +##grin +##kou +##phile +yoon +##gara +grimes +vanishing +cheering +reacting +bn +distillery +##quisite +##vity +coe +dockyard +massif +##jord +escorts +voss +##valent +byte +chopped +hawke +illusions +workings +floats +##koto +##vac +kv +annapolis +madden +##onus +alvaro +noctuidae +##cum +##scopic +avenge +steamboat +forte +illustrates +erika +##trip +570 +dew +nationalities +bran +manifested +thirsty +diversified +muscled +reborn +##standing +arson +##lessness +##dran +##logram +##boys +##kushima +##vious +willoughby +##phobia +286 +alsace +dashboard +yuki +##chai +granville +myspace +publicized +tricked +##gang +adjective +##ater +relic +reorganisation +enthusiastically +indications +saxe +##lassified +consolidate +iec +padua +helplessly +ramps +renaming +regulars +pedestrians +accents +convicts +inaccurate +lowers +mana +##pati +barrie +bjp +outta +someplace +berwick +flanking +invoked +marrow +sparsely +excerpts +clothed +rei +##ginal +wept +##straße +##vish +alexa +excel +##ptive +membranes +aquitaine +creeks +cutler +sheppard +implementations +ns +##dur +fragrance +budge +concordia +magnesium +marcelo +##antes +gladly +vibrating +##rral +##ggles +montrose +##omba +lew +seamus +1630 +cocky +##ament +##uen +bjorn +##rrick +fielder +fluttering +##lase +methyl +kimberley +mcdowell +reductions +barbed +##jic +##tonic +aeronautical +condensed +distracting +##promising +huffed +##cala +##sle +claudius +invincible +missy +pious +balthazar +ci +##lang +butte +combo +orson +##dication +myriad +1707 +silenced +##fed +##rh +coco +netball +yourselves +##oza +clarify +heller +peg +durban +etudes +offender +roast +blackmail +curvature +##woods +vile +309 +illicit +suriname +##linson +overture +1685 +bubbling +gymnast +tucking +##mming +##ouin +maldives +##bala +gurney +##dda +##eased +##oides +backside +pinto +jars +racehorse +tending +##rdial +baronetcy +wiener +duly +##rke +barbarian +cupping +flawed +##thesis +bertha +pleistocene +puddle +swearing +##nob +##tically +fleeting +prostate +amulet +educating +##mined +##iti +##tler +75th +jens +respondents +analytics +cavaliers +papacy +raju +##iente +##ulum +##tip +funnel +271 +disneyland +##lley +sociologist +##iam +2500 +faulkner +louvre +menon +##dson +276 +##ower +afterlife +mannheim +peptide +referees +comedians +meaningless +##anger +##laise +fabrics +hurley +renal +sleeps +##bour +##icle +breakout +kristin +roadside +animator +clover +disdain +unsafe +redesign +##urity +firth +barnsley +portage +reset +narrows +268 +commandos +expansive +speechless +tubular +##lux +essendon +eyelashes +smashwords +##yad +##bang +##claim +craved +sprinted +chet +somme +astor +wrocław +orton +266 +bane +##erving +##uing +mischief +##amps +##sund +scaling +terre +##xious +impairment +offenses +undermine +moi +soy +contiguous +arcadia +inuit +seam +##tops +macbeth +rebelled +##icative +##iot +590 +elaborated +frs +uniformed +##dberg +259 +powerless +priscilla +stimulated +980 +qc +arboretum +frustrating +trieste +bullock +##nified +enriched +glistening +intern +##adia +locus +nouvelle +ollie +ike +lash +starboard +ee +tapestry +headlined +hove +rigged +##vite +pollock +##yme +thrive +clustered +cas +roi +gleamed +olympiad +##lino +pressured +regimes +##hosis +##lick +ripley +##ophone +kickoff +gallon +rockwell +##arable +crusader +glue +revolutions +scrambling +1714 +grover +##jure +englishman +aztec +263 +contemplating +coven +ipad +preach +triumphant +tufts +##esian +rotational +##phus +328 +falkland +##brates +strewn +clarissa +rejoin +environmentally +glint +banded +drenched +moat +albanians +johor +rr +maestro +malley +nouveau +shaded +taxonomy +v6 +adhere +bunk +airfields +##ritan +1741 +encompass +remington +tran +##erative +amelie +mazda +friar +morals +passions +##zai +breadth +vis +##hae +argus +burnham +caressing +insider +rudd +##imov +##mini +##rso +italianate +murderous +textual +wainwright +armada +bam +weave +timer +##taken +##nh +fra +##crest +ardent +salazar +taps +tunis +##ntino +allegro +gland +philanthropic +##chester +implication +##optera +esq +judas +noticeably +wynn +##dara +inched +indexed +crises +villiers +bandit +royalties +patterned +cupboard +interspersed +accessory +isla +kendrick +entourage +stitches +##esthesia +headwaters +##ior +interlude +distraught +draught +1727 +##basket +biased +sy +transient +triad +subgenus +adapting +kidd +shortstop +##umatic +dimly +spiked +mcleod +reprint +nellie +pretoria +windmill +##cek +singled +##mps +273 +reunite +##orous +747 +bankers +outlying +##omp +##ports +##tream +apologies +cosmetics +patsy +##deh +##ocks +##yson +bender +nantes +serene +##nad +lucha +mmm +323 +##cius +##gli +cmll +coinage +nestor +juarez +##rook +smeared +sprayed +twitching +sterile +irina +embodied +juveniles +enveloped +miscellaneous +cancers +dq +gulped +luisa +crested +swat +donegal +ref +##anov +##acker +hearst +mercantile +##lika +doorbell +ua +vicki +##alla +##som +bilbao +psychologists +stryker +sw +horsemen +turkmenistan +wits +##national +anson +mathew +screenings +##umb +rihanna +##agne +##nessy +aisles +##iani +##osphere +hines +kenton +saskatoon +tasha +truncated +##champ +##itan +mildred +advises +fredrik +interpreting +inhibitors +##athi +spectroscopy +##hab +##kong +karim +panda +##oia +##nail +##vc +conqueror +kgb +leukemia +##dity +arrivals +cheered +pisa +phosphorus +shielded +##riated +mammal +unitarian +urgently +chopin +sanitary +##mission +spicy +drugged +hinges +##tort +tipping +trier +impoverished +westchester +##caster +267 +epoch +nonstop +##gman +##khov +aromatic +centrally +cerro +##tively +##vio +billions +modulation +sedimentary +283 +facilitating +outrageous +goldstein +##eak +##kt +ld +maitland +penultimate +pollard +##dance +fleets +spaceship +vertebrae +##nig +alcoholism +als +recital +##bham +##ference +##omics +m2 +##bm +trois +##tropical +##в +commemorates +##meric +marge +##raction +1643 +670 +cosmetic +ravaged +##ige +catastrophe +eng +##shida +albrecht +arterial +bellamy +decor +harmon +##rde +bulbs +synchronized +vito +easiest +shetland +shielding +wnba +##glers +##ssar +##riam +brianna +cumbria +##aceous +##rard +cores +thayer +##nsk +brood +hilltop +luminous +carts +keynote +larkin +logos +##cta +##ا +##mund +##quay +lilith +tinted +277 +wrestle +mobilization +##uses +sequential +siam +bloomfield +takahashi +274 +##ieving +presenters +ringo +blazed +witty +##oven +##ignant +devastation +haydn +harmed +newt +therese +##peed +gershwin +molina +rabbis +sudanese +001 +innate +restarted +##sack +##fus +slices +wb +##shah +enroll +hypothetical +hysterical +1743 +fabio +indefinite +warped +##hg +exchanging +525 +unsuitable +##sboro +gallo +1603 +bret +cobalt +homemade +##hunter +mx +operatives +##dhar +terraces +durable +latch +pens +whorls +##ctuated +##eaux +billing +ligament +succumbed +##gly +regulators +spawn +##brick +##stead +filmfare +rochelle +##nzo +1725 +circumstance +saber +supplements +##nsky +##tson +crowe +wellesley +carrot +##9th +##movable +primate +drury +sincerely +topical +##mad +##rao +callahan +kyiv +smarter +tits +undo +##yeh +announcements +anthologies +barrio +nebula +##islaus +##shaft +##tyn +bodyguards +2021 +assassinate +barns +emmett +scully +##mah +##yd +##eland +##tino +##itarian +demoted +gorman +lashed +prized +adventist +writ +##gui +alla +invertebrates +##ausen +1641 +amman +1742 +align +healy +redistribution +##gf +##rize +insulation +##drop +adherents +hezbollah +vitro +ferns +yanking +269 +php +registering +uppsala +cheerleading +confines +mischievous +tully +##ross +49th +docked +roam +stipulated +pumpkin +##bry +prompt +##ezer +blindly +shuddering +craftsmen +frail +scented +katharine +scramble +shaggy +sponge +helix +zaragoza +279 +##52 +43rd +backlash +fontaine +seizures +posse +cowan +nonfiction +telenovela +wwii +hammered +undone +##gpur +encircled +irs +##ivation +artefacts +oneself +searing +smallpox +##belle +##osaurus +shandong +breached +upland +blushing +rankin +infinitely +psyche +tolerated +docking +evicted +##col +unmarked +##lving +gnome +lettering +litres +musique +##oint +benevolent +##jal +blackened +##anna +mccall +racers +tingle +##ocene +##orestation +introductions +radically +292 +##hiff +##باد +1610 +1739 +munchen +plead +##nka +condo +scissors +##sight +##tens +apprehension +##cey +##yin +hallmark +watering +formulas +sequels +##llas +aggravated +bae +commencing +##building +enfield +prohibits +marne +vedic +civilized +euclidean +jagger +beforehand +blasts +dumont +##arney +##nem +740 +conversions +hierarchical +rios +simulator +##dya +##lellan +hedges +oleg +thrusts +shadowed +darby +maximize +1744 +gregorian +##nded +##routed +sham +unspecified +##hog +emory +factual +##smo +##tp +fooled +##rger +ortega +wellness +marlon +##oton +##urance +casket +keating +ley +enclave +##ayan +char +influencing +jia +##chenko +412 +ammonia +erebidae +incompatible +violins +cornered +##arat +grooves +astronauts +columbian +rampant +fabrication +kyushu +mahmud +vanish +##dern +mesopotamia +##lete +ict +##rgen +caspian +kenji +pitted +##vered +999 +grimace +roanoke +tchaikovsky +twinned +##analysis +##awan +xinjiang +arias +clemson +kazakh +sizable +1662 +##khand +##vard +plunge +tatum +vittorio +##nden +cholera +##dana +##oper +bracing +indifference +projectile +superliga +##chee +realises +upgrading +299 +porte +retribution +##vies +nk +stil +##resses +ama +bureaucracy +blackberry +bosch +testosterone +collapses +greer +##pathic +ioc +fifties +malls +##erved +bao +baskets +adolescents +siegfried +##osity +##tosis +mantra +detecting +existent +fledgling +##cchi +dissatisfied +gan +telecommunication +mingled +sobbed +6000 +controversies +outdated +taxis +##raus +fright +slams +##lham +##fect +##tten +detectors +fetal +tanned +##uw +fray +goth +olympian +skipping +mandates +scratches +sheng +unspoken +hyundai +tracey +hotspur +restrictive +##buch +americana +mundo +##bari +burroughs +diva +vulcan +##6th +distinctions +thumping +##ngen +mikey +sheds +fide +rescues +springsteen +vested +valuation +##ece +##ely +pinnacle +rake +sylvie +##edo +almond +quivering +##irus +alteration +faltered +##wad +51st +hydra +ticked +##kato +recommends +##dicated +antigua +arjun +stagecoach +wilfred +trickle +pronouns +##pon +aryan +nighttime +##anian +gall +pea +stitch +##hei +leung +milos +##dini +eritrea +nexus +starved +snowfall +kant +parasitic +cot +discus +hana +strikers +appleton +kitchens +##erina +##partisan +##itha +##vius +disclose +metis +##channel +1701 +tesla +##vera +fitch +1735 +blooded +##tila +decimal +##tang +##bai +cyclones +eun +bottled +peas +pensacola +basha +bolivian +crabs +boil +lanterns +partridge +roofed +1645 +necks +##phila +opined +patting +##kla +##lland +chuckles +volta +whereupon +##nche +devout +euroleague +suicidal +##dee +inherently +involuntary +knitting +nasser +##hide +puppets +colourful +courageous +southend +stills +miraculous +hodgson +richer +rochdale +ethernet +greta +uniting +prism +umm +##haya +##itical +##utation +deterioration +pointe +prowess +##ropriation +lids +scranton +billings +subcontinent +##koff +##scope +brute +kellogg +psalms +degraded +##vez +stanisław +##ructured +ferreira +pun +astonishing +gunnar +##yat +arya +prc +gottfried +##tight +excursion +##ographer +dina +##quil +##nare +huffington +illustrious +wilbur +gundam +verandah +##zard +naacp +##odle +constructive +fjord +kade +##naud +generosity +thrilling +baseline +cayman +frankish +plastics +accommodations +zoological +##fting +cedric +qb +motorized +##dome +##otted +squealed +tackled +canucks +budgets +situ +asthma +dail +gabled +grasslands +whimpered +writhing +judgments +##65 +minnie +pv +##carbon +bananas +grille +domes +monique +odin +maguire +markham +tierney +##estra +##chua +libel +poke +speedy +atrium +laval +notwithstanding +##edly +fai +kala +##sur +robb +##sma +listings +luz +supplementary +tianjin +##acing +enzo +jd +ric +scanner +croats +transcribed +##49 +arden +cv +##hair +##raphy +##lver +##uy +357 +seventies +staggering +alam +horticultural +hs +regression +timbers +blasting +##ounded +montagu +manipulating +##cit +catalytic +1550 +troopers +##meo +condemnation +fitzpatrick +##oire +##roved +inexperienced +1670 +castes +##lative +outing +314 +dubois +flicking +quarrel +ste +learners +1625 +iq +whistled +##class +282 +classify +tariffs +temperament +355 +folly +liszt +##yles +immersed +jordanian +ceasefire +apparel +extras +maru +fished +##bio +harta +stockport +assortment +craftsman +paralysis +transmitters +##cola +blindness +##wk +fatally +proficiency +solemnly +##orno +repairing +amore +groceries +ultraviolet +##chase +schoolhouse +##tua +resurgence +nailed +##otype +##× +ruse +saliva +diagrams +##tructing +albans +rann +thirties +1b +antennas +hilarious +cougars +paddington +stats +##eger +breakaway +ipod +reza +authorship +prohibiting +scoffed +##etz +##ttle +conscription +defected +trondheim +##fires +ivanov +keenan +##adan +##ciful +##fb +##slow +locating +##ials +##tford +cadiz +basalt +blankly +interned +rags +rattling +##tick +carpathian +reassured +sync +bum +guildford +iss +staunch +##onga +astronomers +sera +sofie +emergencies +susquehanna +##heard +duc +mastery +vh1 +williamsburg +bayer +buckled +craving +##khan +##rdes +bloomington +##write +alton +barbecue +##bians +justine +##hri +##ndt +delightful +smartphone +newtown +photon +retrieval +peugeot +hissing +##monium +##orough +flavors +lighted +relaunched +tainted +##games +##lysis +anarchy +microscopic +hopping +adept +evade +evie +##beau +inhibit +sinn +adjustable +hurst +intuition +wilton +cisco +44th +lawful +lowlands +stockings +thierry +##dalen +##hila +##nai +fates +prank +tb +maison +lobbied +provocative +1724 +4a +utopia +##qual +carbonate +gujarati +purcell +##rford +curtiss +##mei +overgrown +arenas +mediation +swallows +##rnik +respectful +turnbull +##hedron +##hope +alyssa +ozone +##ʻi +ami +gestapo +johansson +snooker +canteen +cuff +declines +empathy +stigma +##ags +##iner +##raine +taxpayers +gui +volga +##wright +##copic +lifespan +overcame +tattooed +enactment +giggles +##ador +##camp +barrington +bribe +obligatory +orbiting +peng +##enas +elusive +sucker +##vating +cong +hardship +empowered +anticipating +estrada +cryptic +greasy +detainees +planck +sudbury +plaid +dod +marriott +kayla +##ears +##vb +##zd +mortally +##hein +cognition +radha +319 +liechtenstein +meade +richly +argyle +harpsichord +liberalism +trumpets +lauded +tyrant +salsa +tiled +lear +promoters +reused +slicing +trident +##chuk +##gami +##lka +cantor +checkpoint +##points +gaul +leger +mammalian +##tov +##aar +##schaft +doha +frenchman +nirvana +##vino +delgado +headlining +##eron +##iography +jug +tko +1649 +naga +intersections +##jia +benfica +nawab +##suka +ashford +gulp +##deck +##vill +##rug +brentford +frazier +pleasures +dunne +potsdam +shenzhen +dentistry +##tec +flanagan +##dorff +##hear +chorale +dinah +prem +quezon +##rogated +relinquished +sutra +terri +##pani +flaps +##rissa +poly +##rnet +homme +aback +##eki +linger +womb +##kson +##lewood +doorstep +orthodoxy +threaded +westfield +##rval +dioceses +fridays +subsided +##gata +loyalists +##biotic +##ettes +letterman +lunatic +prelate +tenderly +invariably +souza +thug +winslow +##otide +furlongs +gogh +jeopardy +##runa +pegasus +##umble +humiliated +standalone +tagged +##roller +freshmen +klan +##bright +attaining +initiating +transatlantic +logged +viz +##uance +1723 +combatants +intervening +stephane +chieftain +despised +grazed +317 +cdc +galveston +godzilla +macro +simulate +##planes +parades +##esses +960 +##ductive +##unes +equator +overdose +##cans +##hosh +##lifting +joshi +epstein +sonora +treacherous +aquatics +manchu +responsive +##sation +supervisory +##christ +##llins +##ibar +##balance +##uso +kimball +karlsruhe +mab +##emy +ignores +phonetic +reuters +spaghetti +820 +almighty +danzig +rumbling +tombstone +designations +lured +outset +##felt +supermarkets +##wt +grupo +kei +kraft +susanna +##blood +comprehension +genealogy +##aghan +##verted +redding +##ythe +1722 +bowing +##pore +##roi +lest +sharpened +fulbright +valkyrie +sikhs +##unds +swans +bouquet +merritt +##tage +##venting +commuted +redhead +clerks +leasing +cesare +dea +hazy +##vances +fledged +greenfield +servicemen +##gical +armando +blackout +dt +sagged +downloadable +intra +potion +pods +##4th +##mism +xp +attendants +gambia +stale +##ntine +plump +asteroids +rediscovered +buds +flea +hive +##neas +1737 +classifications +debuts +##eles +olympus +scala +##eurs +##gno +##mute +hummed +sigismund +visuals +wiggled +await +pilasters +clench +sulfate +##ances +bellevue +enigma +trainee +snort +##sw +clouded +denim +##rank +##rder +churning +hartman +lodges +riches +sima +##missible +accountable +socrates +regulates +mueller +##cr +1702 +avoids +solids +himalayas +nutrient +pup +##jevic +squat +fades +nec +##lates +##pina +##rona +##ου +privateer +tequila +##gative +##mpton +apt +hornet +immortals +##dou +asturias +cleansing +dario +##rries +##anta +etymology +servicing +zhejiang +##venor +##nx +horned +erasmus +rayon +relocating +£10 +##bags +escalated +promenade +stubble +2010s +artisans +axial +liquids +mora +sho +yoo +##tsky +bundles +oldies +##nally +notification +bastion +##ths +sparkle +##lved +1728 +leash +pathogen +highs +##hmi +immature +880 +gonzaga +ignatius +mansions +monterrey +sweets +bryson +##loe +polled +regatta +brightest +pei +rosy +squid +hatfield +payroll +addict +meath +cornerback +heaviest +lodging +##mage +capcom +rippled +##sily +barnet +mayhem +ymca +snuggled +rousseau +##cute +blanchard +284 +fragmented +leighton +chromosomes +risking +##md +##strel +##utter +corinne +coyotes +cynical +hiroshi +yeomanry +##ractive +ebook +grading +mandela +plume +agustin +magdalene +##rkin +bea +femme +trafford +##coll +##lun +##tance +52nd +fourier +upton +##mental +camilla +gust +iihf +islamabad +longevity +##kala +feldman +netting +##rization +endeavour +foraging +mfa +orr +##open +greyish +contradiction +graz +##ruff +handicapped +marlene +tweed +oaxaca +spp +campos +miocene +pri +configured +cooks +pluto +cozy +pornographic +##entes +70th +fairness +glided +jonny +lynne +rounding +sired +##emon +##nist +remade +uncover +##mack +complied +lei +newsweek +##jured +##parts +##enting +##pg +293 +finer +guerrillas +athenian +deng +disused +stepmother +accuse +gingerly +seduction +521 +confronting +##walker +##going +gora +nostalgia +sabres +virginity +wrenched +##minated +syndication +wielding +eyre +##56 +##gnon +##igny +behaved +taxpayer +sweeps +##growth +childless +gallant +##ywood +amplified +geraldine +scrape +##ffi +babylonian +fresco +##rdan +##kney +##position +1718 +restricting +tack +fukuoka +osborn +selector +partnering +##dlow +318 +gnu +kia +tak +whitley +gables +##54 +##mania +mri +softness +immersion +##bots +##evsky +1713 +chilling +insignificant +pcs +##uis +elites +lina +purported +supplemental +teaming +##americana +##dding +##inton +proficient +rouen +##nage +##rret +niccolo +selects +##bread +fluffy +1621 +gruff +knotted +mukherjee +polgara +thrash +nicholls +secluded +smoothing +thru +corsica +loaf +whitaker +inquiries +##rrier +##kam +indochina +289 +marlins +myles +peking +##tea +extracts +pastry +superhuman +connacht +vogel +##ditional +##het +##udged +##lash +gloss +quarries +refit +teaser +##alic +##gaon +20s +materialized +sling +camped +pickering +tung +tracker +pursuant +##cide +cranes +soc +##cini +##typical +##viere +anhalt +overboard +workout +chores +fares +orphaned +stains +##logie +fenton +surpassing +joyah +triggers +##itte +grandmaster +##lass +##lists +clapping +fraudulent +ledger +nagasaki +##cor +##nosis +##tsa +eucalyptus +tun +##icio +##rney +##tara +dax +heroism +ina +wrexham +onboard +unsigned +##dates +moshe +galley +winnie +droplets +exiles +praises +watered +noodles +##aia +fein +adi +leland +multicultural +stink +bingo +comets +erskine +modernized +canned +constraint +domestically +chemotherapy +featherweight +stifled +##mum +darkly +irresistible +refreshing +hasty +isolate +##oys +kitchener +planners +##wehr +cages +yarn +implant +toulon +elects +childbirth +yue +##lind +##lone +cn +rightful +sportsman +junctions +remodeled +specifies +##rgh +291 +##oons +complimented +##urgent +lister +ot +##logic +bequeathed +cheekbones +fontana +gabby +##dial +amadeus +corrugated +maverick +resented +triangles +##hered +##usly +nazareth +tyrol +1675 +assent +poorer +sectional +aegean +##cous +296 +nylon +ghanaian +##egorical +##weig +cushions +forbid +fusiliers +obstruction +somerville +##scia +dime +earrings +elliptical +leyte +oder +polymers +timmy +atm +midtown +piloted +settles +continual +externally +mayfield +##uh +enrichment +henson +keane +persians +1733 +benji +braden +pep +324 +##efe +contenders +pepsi +valet +##isches +298 +##asse +##earing +goofy +stroll +##amen +authoritarian +occurrences +adversary +ahmedabad +tangent +toppled +dorchester +1672 +modernism +marxism +islamist +charlemagne +exponential +racks +unicode +brunette +mbc +pic +skirmish +##bund +##lad +##powered +##yst +hoisted +messina +shatter +##ctum +jedi +vantage +##music +##neil +clemens +mahmoud +corrupted +authentication +lowry +nils +##washed +omnibus +wounding +jillian +##itors +##opped +serialized +narcotics +handheld +##arm +##plicity +intersecting +stimulating +##onis +crate +fellowships +hemingway +casinos +climatic +fordham +copeland +drip +beatty +leaflets +robber +brothel +madeira +##hedral +sphinx +ultrasound +##vana +valor +forbade +leonid +villas +##aldo +duane +marquez +##cytes +disadvantaged +forearms +kawasaki +reacts +consular +lax +uncles +uphold +##hopper +concepcion +dorsey +lass +##izan +arching +passageway +1708 +researches +tia +internationals +##graphs +##opers +distinguishes +javanese +divert +##uven +plotted +##listic +##rwin +##erik +##tify +affirmative +signifies +validation +##bson +kari +felicity +georgina +zulu +##eros +##rained +##rath +overcoming +##dot +argyll +##rbin +1734 +chiba +ratification +windy +earls +parapet +##marks +hunan +pristine +astrid +punta +##gart +brodie +##kota +##oder +malaga +minerva +rouse +##phonic +bellowed +pagoda +portals +reclamation +##gur +##odies +##⁄₄ +parentheses +quoting +allergic +palette +showcases +benefactor +heartland +nonlinear +##tness +bladed +cheerfully +scans +##ety +##hone +1666 +girlfriends +pedersen +hiram +sous +##liche +##nator +1683 +##nery +##orio +##umen +bobo +primaries +smiley +##cb +unearthed +uniformly +fis +metadata +1635 +ind +##oted +recoil +##titles +##tura +##ια +406 +hilbert +jamestown +mcmillan +tulane +seychelles +##frid +antics +coli +fated +stucco +##grants +1654 +bulky +accolades +arrays +caledonian +carnage +optimism +puebla +##tative +##cave +enforcing +rotherham +seo +dunlop +aeronautics +chimed +incline +zoning +archduke +hellenistic +##oses +##sions +candi +thong +##ople +magnate +rustic +##rsk +projective +slant +##offs +danes +hollis +vocalists +##ammed +congenital +contend +gesellschaft +##ocating +##pressive +douglass +quieter +##cm +##kshi +howled +salim +spontaneously +townsville +buena +southport +##bold +kato +1638 +faerie +stiffly +##vus +##rled +297 +flawless +realising +taboo +##7th +bytes +straightening +356 +jena +##hid +##rmin +cartwright +berber +bertram +soloists +411 +noses +417 +coping +fission +hardin +inca +##cen +1717 +mobilized +vhf +##raf +biscuits +curate +##85 +##anial +331 +gaunt +neighbourhoods +1540 +##abas +blanca +bypassed +sockets +behold +coincidentally +##bane +nara +shave +splinter +terrific +##arion +##erian +commonplace +juris +redwood +waistband +boxed +caitlin +fingerprints +jennie +naturalized +##ired +balfour +craters +jody +bungalow +hugely +quilt +glitter +pigeons +undertaker +bulging +constrained +goo +##sil +##akh +assimilation +reworked +##person +persuasion +##pants +felicia +##cliff +##ulent +1732 +explodes +##dun +##inium +##zic +lyman +vulture +hog +overlook +begs +northwards +ow +spoil +##urer +fatima +favorably +accumulate +sargent +sorority +corresponded +dispersal +kochi +toned +##imi +##lita +internacional +newfound +##agger +##lynn +##rigue +booths +peanuts +##eborg +medicare +muriel +nur +##uram +crates +millennia +pajamas +worsened +##breakers +jimi +vanuatu +yawned +##udeau +carousel +##hony +hurdle +##ccus +##mounted +##pod +rv +##eche +airship +ambiguity +compulsion +recapture +##claiming +arthritis +##osomal +1667 +asserting +ngc +sniffing +dade +discontent +glendale +ported +##amina +defamation +rammed +##scent +fling +livingstone +##fleet +875 +##ppy +apocalyptic +comrade +lcd +##lowe +cessna +eine +persecuted +subsistence +demi +hoop +reliefs +710 +coptic +progressing +stemmed +perpetrators +1665 +priestess +##nio +dobson +ebony +rooster +itf +tortricidae +##bbon +##jian +cleanup +##jean +##øy +1721 +eighties +taxonomic +holiness +##hearted +##spar +antilles +showcasing +stabilized +##nb +gia +mascara +michelangelo +dawned +##uria +##vinsky +extinguished +fitz +grotesque +£100 +##fera +##loid +##mous +barges +neue +throbbed +cipher +johnnie +##a1 +##mpt +outburst +##swick +spearheaded +administrations +c1 +heartbreak +pixels +pleasantly +##enay +lombardy +plush +##nsed +bobbie +##hly +reapers +tremor +xiang +minogue +substantive +hitch +barak +##wyl +kwan +##encia +910 +obscene +elegance +indus +surfer +bribery +conserve +##hyllum +##masters +horatio +##fat +apes +rebound +psychotic +##pour +iteration +##mium +##vani +botanic +horribly +antiques +dispose +paxton +##hli +##wg +timeless +1704 +disregard +engraver +hounds +##bau +##version +looted +uno +facilitates +groans +masjid +rutland +antibody +disqualification +decatur +footballers +quake +slacks +48th +rein +scribe +stabilize +commits +exemplary +tho +##hort +##chison +pantry +traversed +##hiti +disrepair +identifiable +vibrated +baccalaureate +##nnis +csa +interviewing +##iensis +##raße +greaves +wealthiest +343 +classed +jogged +£5 +##58 +##atal +illuminating +knicks +respecting +##uno +scrubbed +##iji +##dles +kruger +moods +growls +raider +silvia +chefs +kam +vr +cree +percival +##terol +gunter +counterattack +defiant +henan +ze +##rasia +##riety +equivalence +submissions +##fra +##thor +bautista +mechanically +##heater +cornice +herbal +templar +##mering +outputs +ruining +ligand +renumbered +extravagant +mika +blockbuster +eta +insurrection +##ilia +darkening +ferocious +pianos +strife +kinship +##aer +melee +##anor +##iste +##may +##oue +decidedly +weep +##jad +##missive +##ppel +354 +puget +unease +##gnant +1629 +hammering +kassel +ob +wessex +##lga +bromwich +egan +paranoia +utilization +##atable +##idad +contradictory +provoke +##ols +##ouring +##tangled +knesset +##very +##lette +plumbing +##sden +##¹ +greensboro +occult +sniff +338 +zev +beaming +gamer +haggard +mahal +##olt +##pins +mendes +utmost +briefing +gunnery +##gut +##pher +##zh +##rok +1679 +khalifa +sonya +##boot +principals +urbana +wiring +##liffe +##minating +##rrado +dahl +nyu +skepticism +np +townspeople +ithaca +lobster +somethin +##fur +##arina +##−1 +freighter +zimmerman +biceps +contractual +##herton +amend +hurrying +subconscious +##anal +336 +meng +clermont +spawning +##eia +##lub +dignitaries +impetus +snacks +spotting +twigs +##bilis +##cz +##ouk +libertadores +nic +skylar +##aina +##firm +gustave +asean +##anum +dieter +legislatures +flirt +bromley +trolls +umar +##bbies +##tyle +blah +parc +bridgeport +crank +negligence +##nction +46th +constantin +molded +bandages +seriousness +00pm +siegel +carpets +compartments +upbeat +statehood +##dner +##edging +marko +730 +platt +##hane +paving +##iy +1738 +abbess +impatience +limousine +nbl +##talk +441 +lucille +mojo +nightfall +robbers +##nais +karel +brisk +calves +replicate +ascribed +telescopes +##olf +intimidated +##reen +ballast +specialization +##sit +aerodynamic +caliphate +rainer +visionary +##arded +epsilon +##aday +##onte +aggregation +auditory +boosted +reunification +kathmandu +loco +robyn +402 +acknowledges +appointing +humanoid +newell +redeveloped +restraints +##tained +barbarians +chopper +1609 +italiana +##lez +##lho +investigates +wrestlemania +##anies +##bib +690 +##falls +creaked +dragoons +gravely +minions +stupidity +volley +##harat +##week +musik +##eries +##uously +fungal +massimo +semantics +malvern +##ahl +##pee +discourage +embryo +imperialism +1910s +profoundly +##ddled +jiangsu +sparkled +stat +##holz +sweatshirt +tobin +##iction +sneered +##cheon +##oit +brit +causal +smyth +##neuve +diffuse +perrin +silvio +##ipes +##recht +detonated +iqbal +selma +##nism +##zumi +roasted +##riders +tay +##ados +##mament +##mut +##rud +840 +completes +nipples +cfa +flavour +hirsch +##laus +calderon +sneakers +moravian +##ksha +1622 +rq +294 +##imeters +bodo +##isance +##pre +##ronia +anatomical +excerpt +##lke +dh +kunst +##tablished +##scoe +biomass +panted +unharmed +gael +housemates +montpellier +##59 +coa +rodents +tonic +hickory +singleton +##taro +451 +1719 +aldo +breaststroke +dempsey +och +rocco +##cuit +merton +dissemination +midsummer +serials +##idi +haji +polynomials +##rdon +gs +enoch +prematurely +shutter +taunton +£3 +##grating +##inates +archangel +harassed +##asco +326 +archway +dazzling +##ecin +1736 +sumo +wat +##kovich +1086 +honneur +##ently +##nostic +##ttal +##idon +1605 +403 +1716 +blogger +rents +##gnan +hires +##ikh +##dant +howie +##rons +handler +retracted +shocks +1632 +arun +duluth +kepler +trumpeter +##lary +peeking +seasoned +trooper +##mara +laszlo +##iciencies +##rti +heterosexual +##inatory +##ssion +indira +jogging +##inga +##lism +beit +dissatisfaction +malice +##ately +nedra +peeling +##rgeon +47th +stadiums +475 +vertigo +##ains +iced +restroom +##plify +##tub +illustrating +pear +##chner +##sibility +inorganic +rappers +receipts +watery +##kura +lucinda +##oulos +reintroduced +##8th +##tched +gracefully +saxons +nutritional +wastewater +rained +favourites +bedrock +fisted +hallways +likeness +upscale +##lateral +1580 +blinds +prequel +##pps +##tama +deter +humiliating +restraining +tn +vents +1659 +laundering +recess +rosary +tractors +coulter +federer +##ifiers +##plin +persistence +##quitable +geschichte +pendulum +quakers +##beam +bassett +pictorial +buffet +koln +##sitor +drills +reciprocal +shooters +##57 +##cton +##tees +converge +pip +dmitri +donnelly +yamamoto +aqua +azores +demographics +hypnotic +spitfire +suspend +wryly +roderick +##rran +sebastien +##asurable +mavericks +##fles +##200 +himalayan +prodigy +##iance +transvaal +demonstrators +handcuffs +dodged +mcnamara +sublime +1726 +crazed +##efined +##till +ivo +pondered +reconciled +shrill +sava +##duk +bal +cad +heresy +jaipur +goran +##nished +341 +lux +shelly +whitehall +##hre +israelis +peacekeeping +##wled +1703 +demetrius +ousted +##arians +##zos +beale +anwar +backstroke +raged +shrinking +cremated +##yck +benign +towing +wadi +darmstadt +landfill +parana +soothe +colleen +sidewalks +mayfair +tumble +hepatitis +ferrer +superstructure +##gingly +##urse +##wee +anthropological +translators +##mies +closeness +hooves +##pw +mondays +##roll +##vita +landscaping +##urized +purification +sock +thorns +thwarted +jalan +tiberius +##taka +saline +##rito +confidently +khyber +sculptors +##ij +brahms +hammersmith +inspectors +battista +fivb +fragmentation +hackney +##uls +arresting +exercising +antoinette +bedfordshire +##zily +dyed +##hema +1656 +racetrack +variability +##tique +1655 +austrians +deteriorating +madman +theorists +aix +lehman +weathered +1731 +decreed +eruptions +1729 +flaw +quinlan +sorbonne +flutes +nunez +1711 +adored +downwards +fable +rasped +1712 +moritz +mouthful +renegade +shivers +stunts +dysfunction +restrain +translit +327 +pancakes +##avio +##cision +##tray +351 +vial +##lden +bain +##maid +##oxide +chihuahua +malacca +vimes +##rba +##rnier +1664 +donnie +plaques +##ually +337 +bangs +floppy +huntsville +loretta +nikolay +##otte +eater +handgun +ubiquitous +##hett +eras +zodiac +1634 +##omorphic +1820s +##zog +cochran +##bula +##lithic +warring +##rada +dalai +excused +blazers +mcconnell +reeling +bot +este +##abi +geese +hoax +taxon +##bla +guitarists +##icon +condemning +hunts +inversion +moffat +taekwondo +##lvis +1624 +stammered +##rest +##rzy +sousa +fundraiser +marylebone +navigable +uptown +cabbage +daniela +salman +shitty +whimper +##kian +##utive +programmers +protections +rm +##rmi +##rued +forceful +##enes +fuss +##tao +##wash +brat +oppressive +reykjavik +spartak +ticking +##inkles +##kiewicz +adolph +horst +maui +protege +straighten +cpc +landau +concourse +clements +resultant +##ando +imaginative +joo +reactivated +##rem +##ffled +##uising +consultative +##guide +flop +kaitlyn +mergers +parenting +somber +##vron +supervise +vidhan +##imum +courtship +exemplified +harmonies +medallist +refining +##rrow +##ка +amara +##hum +780 +goalscorer +sited +overshadowed +rohan +displeasure +secretive +multiplied +osman +##orth +engravings +padre +##kali +##veda +miniatures +mis +##yala +clap +pali +rook +##cana +1692 +57th +antennae +astro +oskar +1628 +bulldog +crotch +hackett +yucatan +##sure +amplifiers +brno +ferrara +migrating +##gree +thanking +turing +##eza +mccann +ting +andersson +onslaught +gaines +ganga +incense +standardization +##mation +sentai +scuba +stuffing +turquoise +waivers +alloys +##vitt +regaining +vaults +##clops +##gizing +digger +furry +memorabilia +probing +##iad +payton +rec +deutschland +filippo +opaque +seamen +zenith +afrikaans +##filtration +disciplined +inspirational +##merie +banco +confuse +grafton +tod +##dgets +championed +simi +anomaly +biplane +##ceptive +electrode +##para +1697 +cleavage +crossbow +swirl +informant +##lars +##osta +afi +bonfire +spec +##oux +lakeside +slump +##culus +##lais +##qvist +##rrigan +1016 +facades +borg +inwardly +cervical +xl +pointedly +050 +stabilization +##odon +chests +1699 +hacked +ctv +orthogonal +suzy +##lastic +gaulle +jacobite +rearview +##cam +##erted +ashby +##drik +##igate +##mise +##zbek +affectionately +canine +disperse +latham +##istles +##ivar +spielberg +##orin +##idium +ezekiel +cid +##sg +durga +middletown +##cina +customized +frontiers +harden +##etano +##zzy +1604 +bolsheviks +##66 +coloration +yoko +##bedo +briefs +slabs +debra +liquidation +plumage +##oin +blossoms +dementia +subsidy +1611 +proctor +relational +jerseys +parochial +ter +##ici +esa +peshawar +cavalier +loren +cpi +idiots +shamrock +1646 +dutton +malabar +mustache +##endez +##ocytes +referencing +terminates +marche +yarmouth +##sop +acton +mated +seton +subtly +baptised +beige +extremes +jolted +kristina +telecast +##actic +safeguard +waldo +##baldi +##bular +endeavors +sloppy +subterranean +##ensburg +##itung +delicately +pigment +tq +##scu +1626 +##ound +collisions +coveted +herds +##personal +##meister +##nberger +chopra +##ricting +abnormalities +defective +galician +lucie +##dilly +alligator +likened +##genase +burundi +clears +complexion +derelict +deafening +diablo +fingered +champaign +dogg +enlist +isotope +labeling +mrna +##erre +brilliance +marvelous +##ayo +1652 +crawley +ether +footed +dwellers +deserts +hamish +rubs +warlock +skimmed +##lizer +870 +buick +embark +heraldic +irregularities +##ajan +kiara +##kulam +##ieg +antigen +kowalski +##lge +oakley +visitation +##mbit +vt +##suit +1570 +murderers +##miento +##rites +chimneys +##sling +condemn +custer +exchequer +havre +##ghi +fluctuations +##rations +dfb +hendricks +vaccines +##tarian +nietzsche +biking +juicy +##duced +brooding +scrolling +selangor +##ragan +352 +annum +boomed +seminole +sugarcane +##dna +departmental +dismissing +innsbruck +arteries +ashok +batavia +daze +kun +overtook +##rga +##tlan +beheaded +gaddafi +holm +electronically +faulty +galilee +fractures +kobayashi +##lized +gunmen +magma +aramaic +mala +eastenders +inference +messengers +bf +##qu +407 +bathrooms +##vere +1658 +flashbacks +ideally +misunderstood +##jali +##weather +mendez +##grounds +505 +uncanny +##iii +1709 +friendships +##nbc +sacrament +accommodated +reiterated +logistical +pebbles +thumped +##escence +administering +decrees +drafts +##flight +##cased +##tula +futuristic +picket +intimidation +winthrop +##fahan +interfered +339 +afar +francoise +morally +uta +cochin +croft +dwarfs +##bruck +##dents +##nami +biker +##hner +##meral +nano +##isen +##ometric +##pres +##ан +brightened +meek +parcels +securely +gunners +##jhl +##zko +agile +hysteria +##lten +##rcus +bukit +champs +chevy +cuckoo +leith +sadler +theologians +welded +##section +1663 +jj +plurality +xander +##rooms +##formed +shredded +temps +intimately +pau +tormented +##lok +##stellar +1618 +charred +ems +essen +##mmel +alarms +spraying +ascot +blooms +twinkle +##abia +##apes +internment +obsidian +##chaft +snoop +##dav +##ooping +malibu +##tension +quiver +##itia +hays +mcintosh +travers +walsall +##ffie +1623 +beverley +schwarz +plunging +structurally +m3 +rosenthal +vikram +##tsk +770 +ghz +##onda +##tiv +chalmers +groningen +pew +reckon +unicef +##rvis +55th +##gni +1651 +sulawesi +avila +cai +metaphysical +screwing +turbulence +##mberg +augusto +samba +56th +baffled +momentary +toxin +##urian +##wani +aachen +condoms +dali +steppe +##3d +##app +##oed +##year +adolescence +dauphin +electrically +inaccessible +microscopy +nikita +##ega +atv +##cel +##enter +##oles +##oteric +##ы +accountants +punishments +wrongly +bribes +adventurous +clinch +flinders +southland +##hem +##kata +gough +##ciency +lads +soared +##ה +undergoes +deformation +outlawed +rubbish +##arus +##mussen +##nidae +##rzburg +arcs +##ingdon +##tituted +1695 +wheelbase +wheeling +bombardier +campground +zebra +##lices +##oj +##bain +lullaby +##ecure +donetsk +wylie +grenada +##arding +##ης +squinting +eireann +opposes +##andra +maximal +runes +##broken +##cuting +##iface +##ror +##rosis +additive +britney +adultery +triggering +##drome +detrimental +aarhus +containment +jc +swapped +vichy +##ioms +madly +##oric +##rag +brant +##ckey +##trix +1560 +1612 +broughton +rustling +##stems +##uder +asbestos +mentoring +##nivorous +finley +leaps +##isan +apical +pry +slits +substitutes +##dict +intuitive +fantasia +insistent +unreasonable +##igen +##vna +domed +hannover +margot +ponder +##zziness +impromptu +jian +lc +rampage +stemming +##eft +andrey +gerais +whichever +amnesia +appropriated +anzac +clicks +modifying +ultimatum +cambrian +maids +verve +yellowstone +##mbs +conservatoire +##scribe +adherence +dinners +spectra +imperfect +mysteriously +sidekick +tatar +tuba +##aks +##ifolia +distrust +##athan +##zle +c2 +ronin +zac +##pse +celaena +instrumentalist +scents +skopje +##mbling +comical +compensated +vidal +condor +intersect +jingle +wavelengths +##urrent +mcqueen +##izzly +carp +weasel +422 +kanye +militias +postdoctoral +eugen +gunslinger +##ɛ +faux +hospice +##for +appalled +derivation +dwarves +##elis +dilapidated +##folk +astoria +philology +##lwyn +##otho +##saka +inducing +philanthropy +##bf +##itative +geek +markedly +sql +##yce +bessie +indices +rn +##flict +495 +frowns +resolving +weightlifting +tugs +cleric +contentious +1653 +mania +rms +##miya +##reate +##ruck +##tucket +bien +eels +marek +##ayton +##cence +discreet +unofficially +##ife +leaks +##bber +1705 +332 +dung +compressor +hillsborough +pandit +shillings +distal +##skin +381 +##tat +##you +nosed +##nir +mangrove +undeveloped +##idia +textures +##inho +##500 +##rise +ae +irritating +nay +amazingly +bancroft +apologetic +compassionate +kata +symphonies +##lovic +airspace +##lch +930 +gifford +precautions +fulfillment +sevilla +vulgar +martinique +##urities +looting +piccolo +tidy +##dermott +quadrant +armchair +incomes +mathematicians +stampede +nilsson +##inking +##scan +foo +quarterfinal +##ostal +shang +shouldered +squirrels +##owe +344 +vinegar +##bner +##rchy +##systems +delaying +##trics +ars +dwyer +rhapsody +sponsoring +##gration +bipolar +cinder +starters +##olio +##urst +421 +signage +##nty +aground +figurative +mons +acquaintances +duets +erroneously +soyuz +elliptic +recreated +##cultural +##quette +##ssed +##tma +##zcz +moderator +scares +##itaire +##stones +##udence +juniper +sighting +##just +##nsen +britten +calabria +ry +bop +cramer +forsyth +stillness +##л +airmen +gathers +unfit +##umber +##upt +taunting +##rip +seeker +streamlined +##bution +holster +schumann +tread +vox +##gano +##onzo +strive +dil +reforming +covent +newbury +predicting +##orro +decorate +tre +##puted +andover +ie +asahi +dept +dunkirk +gills +##tori +buren +huskies +##stis +##stov +abstracts +bets +loosen +##opa +1682 +yearning +##glio +##sir +berman +effortlessly +enamel +napoli +persist +##peration +##uez +attache +elisa +b1 +invitations +##kic +accelerating +reindeer +boardwalk +clutches +nelly +polka +starbucks +##kei +adamant +huey +lough +unbroken +adventurer +embroidery +inspecting +stanza +##ducted +naia +taluka +##pone +##roids +chases +deprivation +florian +##jing +##ppet +earthly +##lib +##ssee +colossal +foreigner +vet +freaks +patrice +rosewood +triassic +upstate +##pkins +dominates +ata +chants +ks +vo +##400 +##bley +##raya +##rmed +555 +agra +infiltrate +##ailing +##ilation +##tzer +##uppe +##werk +binoculars +enthusiast +fujian +squeak +##avs +abolitionist +almeida +boredom +hampstead +marsden +rations +##ands +inflated +334 +bonuses +rosalie +patna +##rco +329 +detachments +penitentiary +54th +flourishing +woolf +##dion +##etched +papyrus +##lster +##nsor +##toy +bobbed +dismounted +endelle +inhuman +motorola +tbs +wince +wreath +##ticus +hideout +inspections +sanjay +disgrace +infused +pudding +stalks +##urbed +arsenic +leases +##hyl +##rrard +collarbone +##waite +##wil +dowry +##bant +##edance +genealogical +nitrate +salamanca +scandals +thyroid +necessitated +##! +##" +### +##$ +##% +##& +##' +##( +##) +##* +##+ +##, +##- +##. +##/ +##: +##; +##< +##= +##> +##? +##@ +##[ +##\ +##] +##^ +##_ +##` +##{ +##| +##} +##~ +##¡ +##¢ +##£ +##¤ +##¥ +##¦ +##§ +##¨ +##© +##ª +##« +##¬ +##® +##± +##´ +##µ +##¶ +##· +##º +##» +##¼ +##¾ +##¿ +##æ +##ð +##÷ +##þ +##đ +##ħ +##ŋ +##œ +##ƒ +##ɐ +##ɑ +##ɒ +##ɔ +##ɕ +##ə +##ɡ +##ɣ +##ɨ +##ɪ +##ɫ +##ɬ +##ɯ +##ɲ +##ɴ +##ɹ +##ɾ +##ʀ +##ʁ +##ʂ +##ʃ +##ʉ +##ʊ +##ʋ +##ʌ +##ʎ +##ʐ +##ʑ +##ʒ +##ʔ +##ʰ +##ʲ +##ʳ +##ʷ +##ʸ +##ʻ +##ʼ +##ʾ +##ʿ +##ˈ +##ˡ +##ˢ +##ˣ +##ˤ +##β +##γ +##δ +##ε +##ζ +##θ +##κ +##λ +##μ +##ξ +##ο +##π +##ρ +##σ +##τ +##υ +##φ +##χ +##ψ +##ω +##б +##г +##д +##ж +##з +##м +##п +##с +##у +##ф +##х +##ц +##ч +##ш +##щ +##ъ +##э +##ю +##ђ +##є +##і +##ј +##љ +##њ +##ћ +##ӏ +##ա +##բ +##գ +##դ +##ե +##թ +##ի +##լ +##կ +##հ +##մ +##յ +##ն +##ո +##պ +##ս +##վ +##տ +##ր +##ւ +##ք +##־ +##א +##ב +##ג +##ד +##ו +##ז +##ח +##ט +##י +##ך +##כ +##ל +##ם +##מ +##ן +##נ +##ס +##ע +##ף +##פ +##ץ +##צ +##ק +##ר +##ש +##ת +##، +##ء +##ب +##ت +##ث +##ج +##ح +##خ +##ذ +##ز +##س +##ش +##ص +##ض +##ط +##ظ +##ع +##غ +##ـ +##ف +##ق +##ك +##و +##ى +##ٹ +##پ +##چ +##ک +##گ +##ں +##ھ +##ہ +##ے +##अ +##आ +##उ +##ए +##क +##ख +##ग +##च +##ज +##ट +##ड +##ण +##त +##थ +##द +##ध +##न +##प +##ब +##भ +##म +##य +##र +##ल +##व +##श +##ष +##स +##ह +##ा +##ि +##ी +##ो +##। +##॥ +##ং +##অ +##আ +##ই +##উ +##এ +##ও +##ক +##খ +##গ +##চ +##ছ +##জ +##ট +##ড +##ণ +##ত +##থ +##দ +##ধ +##ন +##প +##ব +##ভ +##ম +##য +##র +##ল +##শ +##ষ +##স +##হ +##া +##ি +##ী +##ে +##க +##ச +##ட +##த +##ந +##ன +##ப +##ம +##ய +##ர +##ல +##ள +##வ +##ா +##ி +##ு +##ே +##ை +##ನ +##ರ +##ಾ +##ක +##ය +##ර +##ල +##ව +##ා +##ก +##ง +##ต +##ท +##น +##พ +##ม +##ย +##ร +##ล +##ว +##ส +##อ +##า +##เ +##་ +##། +##ག +##ང +##ད +##ན +##པ +##བ +##མ +##འ +##ར +##ལ +##ས +##မ +##ა +##ბ +##გ +##დ +##ე +##ვ +##თ +##ი +##კ +##ლ +##მ +##ნ +##ო +##რ +##ს +##ტ +##უ +##ᄀ +##ᄂ +##ᄃ +##ᄅ +##ᄆ +##ᄇ +##ᄉ +##ᄊ +##ᄋ +##ᄌ +##ᄎ +##ᄏ +##ᄐ +##ᄑ +##ᄒ +##ᅡ +##ᅢ +##ᅥ +##ᅦ +##ᅧ +##ᅩ +##ᅪ +##ᅭ +##ᅮ +##ᅯ +##ᅲ +##ᅳ +##ᅴ +##ᅵ +##ᆨ +##ᆫ +##ᆯ +##ᆷ +##ᆸ +##ᆼ +##ᴬ +##ᴮ +##ᴰ +##ᴵ +##ᴺ +##ᵀ +##ᵃ +##ᵇ +##ᵈ +##ᵉ +##ᵍ +##ᵏ +##ᵐ +##ᵒ +##ᵖ +##ᵗ +##ᵘ +##ᵣ +##ᵤ +##ᵥ +##ᶜ +##ᶠ +##‐ +##‑ +##‒ +##– +##— +##― +##‖ +##‘ +##’ +##‚ +##“ +##” +##„ +##† +##‡ +##• +##… +##‰ +##′ +##″ +##› +##‿ +##⁄ +##⁰ +##ⁱ +##⁴ +##⁵ +##⁶ +##⁷ +##⁸ +##⁹ +##⁻ +##ⁿ +##₅ +##₆ +##₇ +##₈ +##₉ +##₊ +##₍ +##₎ +##ₐ +##ₑ +##ₒ +##ₓ +##ₕ +##ₖ +##ₗ +##ₘ +##ₚ +##ₛ +##ₜ +##₤ +##₩ +##€ +##₱ +##₹ +##ℓ +##№ +##ℝ +##™ +##⅓ +##⅔ +##← +##↑ +##→ +##↓ +##↔ +##↦ +##⇄ +##⇌ +##⇒ +##∂ +##∅ +##∆ +##∇ +##∈ +##∗ +##∘ +##√ +##∞ +##∧ +##∨ +##∩ +##∪ +##≈ +##≡ +##≤ +##≥ +##⊂ +##⊆ +##⊕ +##⊗ +##⋅ +##─ +##│ +##■ +##▪ +##● +##★ +##☆ +##☉ +##♠ +##♣ +##♥ +##♦ +##♯ +##⟨ +##⟩ +##ⱼ +##⺩ +##⺼ +##⽥ +##、 +##。 +##〈 +##〉 +##《 +##》 +##「 +##」 +##『 +##』 +##〜 +##あ +##い +##う +##え +##お +##か +##き +##く +##け +##こ +##さ +##し +##す +##せ +##そ +##た +##ち +##っ +##つ +##て +##と +##な +##に +##ぬ +##ね +##の +##は +##ひ +##ふ +##へ +##ほ +##ま +##み +##む +##め +##も +##や +##ゆ +##よ +##ら +##り +##る +##れ +##ろ +##を +##ん +##ァ +##ア +##ィ +##イ +##ウ +##ェ +##エ +##オ +##カ +##キ +##ク +##ケ +##コ +##サ +##シ +##ス +##セ +##タ +##チ +##ッ +##ツ +##テ +##ト +##ナ +##ニ +##ノ +##ハ +##ヒ +##フ +##ヘ +##ホ +##マ +##ミ +##ム +##メ +##モ +##ャ +##ュ +##ョ +##ラ +##リ +##ル +##レ +##ロ +##ワ +##ン +##・ +##ー +##一 +##三 +##上 +##下 +##不 +##世 +##中 +##主 +##久 +##之 +##也 +##事 +##二 +##五 +##井 +##京 +##人 +##亻 +##仁 +##介 +##代 +##仮 +##伊 +##会 +##佐 +##侍 +##保 +##信 +##健 +##元 +##光 +##八 +##公 +##内 +##出 +##分 +##前 +##劉 +##力 +##加 +##勝 +##北 +##区 +##十 +##千 +##南 +##博 +##原 +##口 +##古 +##史 +##司 +##合 +##吉 +##同 +##名 +##和 +##囗 +##四 +##国 +##國 +##土 +##地 +##坂 +##城 +##堂 +##場 +##士 +##夏 +##外 +##大 +##天 +##太 +##夫 +##奈 +##女 +##子 +##学 +##宀 +##宇 +##安 +##宗 +##定 +##宣 +##宮 +##家 +##宿 +##寺 +##將 +##小 +##尚 +##山 +##岡 +##島 +##崎 +##川 +##州 +##巿 +##帝 +##平 +##年 +##幸 +##广 +##弘 +##張 +##彳 +##後 +##御 +##德 +##心 +##忄 +##志 +##忠 +##愛 +##成 +##我 +##戦 +##戸 +##手 +##扌 +##政 +##文 +##新 +##方 +##日 +##明 +##星 +##春 +##昭 +##智 +##曲 +##書 +##月 +##有 +##朝 +##木 +##本 +##李 +##村 +##東 +##松 +##林 +##森 +##楊 +##樹 +##橋 +##歌 +##止 +##正 +##武 +##比 +##氏 +##民 +##水 +##氵 +##氷 +##永 +##江 +##沢 +##河 +##治 +##法 +##海 +##清 +##漢 +##瀬 +##火 +##版 +##犬 +##王 +##生 +##田 +##男 +##疒 +##発 +##白 +##的 +##皇 +##目 +##相 +##省 +##真 +##石 +##示 +##社 +##神 +##福 +##禾 +##秀 +##秋 +##空 +##立 +##章 +##竹 +##糹 +##美 +##義 +##耳 +##良 +##艹 +##花 +##英 +##華 +##葉 +##藤 +##行 +##街 +##西 +##見 +##訁 +##語 +##谷 +##貝 +##貴 +##車 +##軍 +##辶 +##道 +##郎 +##郡 +##部 +##都 +##里 +##野 +##金 +##鈴 +##镇 +##長 +##門 +##間 +##阝 +##阿 +##陳 +##陽 +##雄 +##青 +##面 +##風 +##食 +##香 +##馬 +##高 +##龍 +##龸 +##fi +##fl +##! +##( +##) +##, +##- +##. +##/ +##: +##? +##~ diff --git a/config/streaming_intent.yaml b/config/streaming_intent.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3fe080fa37daac9402c72a5274a7ce608506b8b7 --- /dev/null +++ b/config/streaming_intent.yaml @@ -0,0 +1,117 @@ +# Streaming Intent Router Configuration +# HMM-style belief updating for STT chunk processing + +intents: + - ESCALATION + - APPOINTMENT + - MEDICATION + - SYMPTOM_CHECK + - BILLING + - GENERAL_INQUIRY + - OTHER + +# Prior distribution (initial belief state) +prior: + ESCALATION: 0.05 + APPOINTMENT: 0.15 + MEDICATION: 0.15 + SYMPTOM_CHECK: 0.15 + BILLING: 0.10 + GENERAL_INQUIRY: 0.15 + OTHER: 0.25 + +# Transition matrix T[i,j] = P(intent_t=j | intent_{t-1}=i) +# Rows must sum to 1.0 +# High diagonal = "stickiness" (intent tends to persist) +transition_matrix: + ESCALATION: + ESCALATION: 0.90 + APPOINTMENT: 0.01 + MEDICATION: 0.02 + SYMPTOM_CHECK: 0.02 + BILLING: 0.01 + GENERAL_INQUIRY: 0.02 + OTHER: 0.02 + APPOINTMENT: + ESCALATION: 0.02 + APPOINTMENT: 0.80 + MEDICATION: 0.03 + SYMPTOM_CHECK: 0.03 + BILLING: 0.07 + GENERAL_INQUIRY: 0.03 + OTHER: 0.02 + MEDICATION: + ESCALATION: 0.04 + APPOINTMENT: 0.03 + MEDICATION: 0.82 + SYMPTOM_CHECK: 0.04 + BILLING: 0.02 + GENERAL_INQUIRY: 0.03 + OTHER: 0.02 + SYMPTOM_CHECK: + ESCALATION: 0.08 + APPOINTMENT: 0.04 + MEDICATION: 0.05 + SYMPTOM_CHECK: 0.75 + BILLING: 0.02 + GENERAL_INQUIRY: 0.03 + OTHER: 0.03 + BILLING: + ESCALATION: 0.01 + APPOINTMENT: 0.05 + MEDICATION: 0.02 + SYMPTOM_CHECK: 0.02 + BILLING: 0.85 + GENERAL_INQUIRY: 0.03 + OTHER: 0.02 + GENERAL_INQUIRY: + ESCALATION: 0.03 + APPOINTMENT: 0.05 + MEDICATION: 0.05 + SYMPTOM_CHECK: 0.05 + BILLING: 0.04 + GENERAL_INQUIRY: 0.75 + OTHER: 0.03 + OTHER: + ESCALATION: 0.02 + APPOINTMENT: 0.08 + MEDICATION: 0.08 + SYMPTOM_CHECK: 0.08 + BILLING: 0.06 + GENERAL_INQUIRY: 0.08 + OTHER: 0.60 + +# Emission model parameters +emission: + alpha: 1.5 # Sharpening exponent for DriveHealthBERT probabilities + epsilon: 1.0e-8 # Smoothing to avoid zero probabilities + +# Decision thresholds +thresholds: + theta_hi: 0.85 # Immediate escalation threshold + theta_med: 0.60 # Consecutive-steps escalation threshold + theta_lock: 0.70 # Commit threshold for non-escalation intents + K: 3 # Required consecutive steps for stability + +# Rolling window parameters +window: + max_tokens: 64 # Default max tokens in rolling window + max_tokens_limit: 128 # Hard limit for max_tokens + +# Debounce parameters +debounce: + debounce_ms: 150 # Minimum ms between updates (unless is_final) + min_change_chars: 3 # Minimum character change to trigger update + +# Model parameters +model: + max_length: 48 # Max sequence length for BioClinicalBERT inference (reduced for latency) + +# SPRT (Sequential Probability Ratio Test) parameters +# Used for statistically-principled escalation decisions +sprt: + alpha: 0.05 # Type I error target (false escalation rate) + beta: 0.10 # Type II error target (missed escalation rate) + p0: 0.20 # H0: baseline escalation probability (non-escalation) + p1: 0.60 # H1: expected escalation probability (true escalation) + # Note: Run scripts/evaluate_sprt_streaming.py --estimate_p0_p1 to tune these diff --git a/config/train_config.yaml b/config/train_config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..86e454b3813a60985971febd868c5a7460e526b5 --- /dev/null +++ b/config/train_config.yaml @@ -0,0 +1,87 @@ +# DCE Intent BioClinicalBERT Training Configuration +# ============================================ +# Version: 2.0.0 +# Last Updated: 2026-02-08 + +# Model Configuration +# Using BioClinicalBERT for medical domain accuracy +# Reduced max_length to 48 to maintain low latency +model: + base_model: "emilyalsentzer/Bio_ClinicalBERT" + max_length: 48 # Reduced from 64 to compensate for larger model + num_labels: null # Auto-detected from dataset + +# Training Hyperparameters +training: + learning_rate: 3.0e-5 + epochs: 15 + batch_size: 16 + eval_batch_size: 32 + warmup_ratio: 0.1 + weight_decay: 0.01 + gradient_accumulation_steps: 1 + max_grad_norm: 1.0 + +# Optimizer +optimizer: + type: "adamw" + betas: [0.9, 0.999] + eps: 1.0e-8 + +# Scheduler +scheduler: + type: "linear" # linear warmup then linear decay + +# Data Paths +data: + train_path: "data/examples/train.jsonl" + val_path: "data/examples/val.jsonl" + test_path: "data/examples/test.jsonl" + text_column: "text" + label_column: "label" + +# Output Configuration +output: + base_dir: "artifacts" + pytorch_dir: "artifacts/pytorch" + save_steps: 30 + eval_steps: 15 + logging_steps: 15 + save_total_limit: 2 + +# Reproducibility +seed: 42 +deterministic: true + +# Logging +logging: + level: "INFO" + log_to_file: true + log_file: "artifacts/logs/training.log" + +# Intent Schema (Tier 1 - Required) +intent_schema: + tier1: + - "ESCALATION" # Urgent medical escalation + - "APPOINTMENT" # Schedule/reschedule appointments + - "MEDICATION" # Medication-related queries + - "SYMPTOM_CHECK" # Symptom assessment + - "GENERAL_INQUIRY" # General health questions + - "BILLING" # Billing/insurance questions + - "OTHER" # Fallback category + tier2: # Optional sub-categories + ESCALATION: + - "CHEST_PAIN" + - "BREATHING_DIFFICULTY" + - "SEVERE_BLEEDING" + - "LOSS_OF_CONSCIOUSNESS" + - "OTHER_EMERGENCY" + +# Evaluation Metrics +metrics: + primary: "macro_f1" + track: + - "accuracy" + - "macro_f1" + - "per_class_recall" + escalation_label: "ESCALATION" # Label to track recall for diff --git a/config/train_config_augmented.yaml b/config/train_config_augmented.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a36facdfb7f2a3ce4116dc078e7b29713fd21f0e --- /dev/null +++ b/config/train_config_augmented.yaml @@ -0,0 +1,80 @@ +# DCE Intent BioClinicalBERT Training Configuration - Augmented Dataset +# ====================================================================== +# Version: 2.1.0 +# Last Updated: 2026-02-13 +# Description: Training config using merged dataset with disease symptom data + +# Model Configuration +model: + base_model: "emilyalsentzer/Bio_ClinicalBERT" + max_length: 48 + num_labels: null # Auto-detected from dataset + +# Training Hyperparameters +# Slightly adjusted for larger dataset +training: + learning_rate: 2.5e-5 # Slightly lower LR for larger dataset + epochs: 12 # Slightly fewer epochs since more data + batch_size: 16 + eval_batch_size: 32 + warmup_ratio: 0.1 + weight_decay: 0.01 + gradient_accumulation_steps: 1 + max_grad_norm: 1.0 + +# Optimizer +optimizer: + type: "adamw" + betas: [0.9, 0.999] + eps: 1.0e-8 + +# Scheduler +scheduler: + type: "linear" + +# Data Paths - Using merged augmented dataset +data: + train_path: "data/merged/train.jsonl" + val_path: "data/merged/val.jsonl" + test_path: "data/merged/test.jsonl" + text_column: "text" + label_column: "label" + +# Output Configuration +output: + base_dir: "artifacts" + pytorch_dir: "artifacts/pytorch" + save_steps: 50 + eval_steps: 25 + logging_steps: 25 + save_total_limit: 2 + +# Reproducibility +seed: 42 +deterministic: true + +# Logging +logging: + level: "INFO" + log_to_file: true + log_file: "artifacts/logs/training_augmented.log" + +# Intent Schema +intent_schema: + tier1: + - "ESCALATION" + - "APPOINTMENT" + - "MEDICATION" + - "SYMPTOM_CHECK" + - "GENERAL_INQUIRY" + - "BILLING" + - "OTHER" + +# Evaluation Metrics +metrics: + primary: "macro_f1" + track: + - "accuracy" + - "macro_f1" + - "per_class_recall" + escalation_label: "ESCALATION" diff --git a/config/train_config_v2.yaml b/config/train_config_v2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b8e59ec92ddac07544b256ec10c96f2d5b31fee8 --- /dev/null +++ b/config/train_config_v2.yaml @@ -0,0 +1,69 @@ +# DCE Intent BioClinicalBERT Training Configuration - v2 with Hard Negatives +# =========================================================================== +# Version: 2.2.0 +# Description: Training with hard negative examples to reduce false positives + +model: + base_model: "emilyalsentzer/Bio_ClinicalBERT" + max_length: 48 + num_labels: null + +training: + learning_rate: 2.0e-5 # Slightly lower for fine-tuning + epochs: 10 + batch_size: 16 + eval_batch_size: 32 + warmup_ratio: 0.1 + weight_decay: 0.01 + gradient_accumulation_steps: 1 + max_grad_norm: 1.0 + +optimizer: + type: "adamw" + betas: [0.9, 0.999] + eps: 1.0e-8 + +scheduler: + type: "linear" + +# Using merged_v2 with hard negatives +data: + train_path: "data/merged_v2/train.jsonl" + val_path: "data/merged_v2/val.jsonl" + test_path: "data/merged_v2/test.jsonl" + text_column: "text" + label_column: "label" + +output: + base_dir: "artifacts" + pytorch_dir: "artifacts/pytorch" + save_steps: 50 + eval_steps: 25 + logging_steps: 25 + save_total_limit: 2 + +seed: 42 +deterministic: true + +logging: + level: "INFO" + log_to_file: true + log_file: "artifacts/logs/training_v2.log" + +intent_schema: + tier1: + - "ESCALATION" + - "APPOINTMENT" + - "MEDICATION" + - "SYMPTOM_CHECK" + - "GENERAL_INQUIRY" + - "BILLING" + - "OTHER" + +metrics: + primary: "macro_f1" + track: + - "accuracy" + - "macro_f1" + - "per_class_recall" + escalation_label: "ESCALATION" diff --git a/config/train_config_v3.yaml b/config/train_config_v3.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d79fa093eb0ae5e6f54299cdc992c54e704a8828 --- /dev/null +++ b/config/train_config_v3.yaml @@ -0,0 +1,74 @@ +# DCE Intent BioClinicalBERT Training Configuration - v3 Taxonomy Augmented +# =========================================================================== +# Version: 3.0.0 +# Description: Retrain with taxonomy-augmented data from 66 clinical domains +# Changes from v2: +# - Merged 1,720 taxonomy-generated samples (balanced, deduplicated) +# - Better coverage of minority classes (GENERAL_INQUIRY, APPOINTMENT, MEDICATION) +# - Negation examples to reduce false positive escalations +# - Slightly lower LR for fine-tuning on augmented mix + +model: + base_model: "emilyalsentzer/Bio_ClinicalBERT" + max_length: 48 + num_labels: null + +training: + learning_rate: 2.0e-5 + epochs: 6 + batch_size: 16 + eval_batch_size: 32 + warmup_ratio: 0.1 + weight_decay: 0.01 + gradient_accumulation_steps: 1 + max_grad_norm: 1.0 + +optimizer: + type: "adamw" + betas: [0.9, 0.999] + eps: 1.0e-8 + +scheduler: + type: "linear" + +# Using merged_v3 with taxonomy augmentation +data: + train_path: "data/merged_v3/train.jsonl" + val_path: "data/merged_v3/val.jsonl" + test_path: "data/merged_v3/test.jsonl" + text_column: "text" + label_column: "label" + +output: + base_dir: "artifacts" + pytorch_dir: "artifacts/pytorch" + save_steps: 200 + eval_steps: 100 + logging_steps: 50 + save_total_limit: 3 + +seed: 42 +deterministic: true + +logging: + level: "INFO" + log_to_file: true + log_file: "artifacts/logs/training_v3.log" + +intent_schema: + tier1: + - "ESCALATION" + - "APPOINTMENT" + - "MEDICATION" + - "SYMPTOM_CHECK" + - "GENERAL_INQUIRY" + - "BILLING" + - "OTHER" + +metrics: + primary: "macro_f1" + track: + - "accuracy" + - "macro_f1" + - "per_class_recall" + escalation_label: "ESCALATION" diff --git a/config/train_config_v4.yaml b/config/train_config_v4.yaml new file mode 100644 index 0000000000000000000000000000000000000000..09c1da76568ff1e7b53119aac7aaa1e5932f4044 --- /dev/null +++ b/config/train_config_v4.yaml @@ -0,0 +1,74 @@ +# DCE Intent BioClinicalBERT Training Configuration - v4 Severity-Relabeled +# =========================================================================== +# Version: 4.0.0 +# Description: Retrain with severity-based relabeling, merged OTHER, R3 augmentation +# Changes from v3: +# - ESCALATION/SYMPTOM_CHECK relabeled based on R3 severity rules (1,783 fixes) +# - OTHER merged into GENERAL_INQUIRY +# - 632 new R3-specific ESCALATION samples with distinct urgent phrasing +# - max_length increased to 64 (was 48) for edge-case multi-symptom text +# - Reduced escalation_weight, using focal loss for better hard-example handling +# - 6 labels (no more OTHER) + +model: + base_model: "emilyalsentzer/Bio_ClinicalBERT" + max_length: 64 + num_labels: null + +training: + learning_rate: 2.0e-5 + epochs: 8 + batch_size: 16 + eval_batch_size: 32 + warmup_ratio: 0.1 + weight_decay: 0.01 + gradient_accumulation_steps: 1 + max_grad_norm: 1.0 + +optimizer: + type: "adamw" + betas: [0.9, 0.999] + eps: 1.0e-8 + +scheduler: + type: "linear" + +data: + train_path: "data/merged_v4/train.jsonl" + val_path: "data/merged_v4/val.jsonl" + test_path: "data/merged_v4/test.jsonl" + text_column: "text" + label_column: "label" + +output: + base_dir: "artifacts" + pytorch_dir: "artifacts/pytorch" + save_steps: 200 + eval_steps: 100 + logging_steps: 50 + save_total_limit: 3 + +seed: 42 +deterministic: true + +logging: + level: "INFO" + log_to_file: true + log_file: "artifacts/logs/training_v4.log" + +intent_schema: + tier1: + - "ESCALATION" + - "APPOINTMENT" + - "MEDICATION" + - "SYMPTOM_CHECK" + - "GENERAL_INQUIRY" + - "BILLING" + +metrics: + primary: "macro_f1" + track: + - "accuracy" + - "macro_f1" + - "per_class_recall" + escalation_label: "ESCALATION" diff --git a/config/train_config_v5.yaml b/config/train_config_v5.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cb9e45ef0d1aa1ae98a54514e68a68be52dd55cf --- /dev/null +++ b/config/train_config_v5.yaml @@ -0,0 +1,71 @@ +# DCE Intent BioClinicalBERT Training Configuration - v5 Temporal Context +# =========================================================================== +# Version: 5.0.0 +# Description: v4 base + 1,180 temporal/historical context samples +# Changes from v4: +# - 820 past/resolved symptom samples (SYMPTOM_CHECK) - teaches past tense +# - 280 still-active-despite-past-framing samples (ESCALATION) - preserves recall +# - 80 third-party/informational samples (GENERAL_INQUIRY) +# - Total: 7,338 train + 1,256 val + +model: + base_model: "emilyalsentzer/Bio_ClinicalBERT" + max_length: 64 + num_labels: null + +training: + learning_rate: 2.0e-5 + epochs: 8 + batch_size: 16 + eval_batch_size: 32 + warmup_ratio: 0.1 + weight_decay: 0.01 + gradient_accumulation_steps: 1 + max_grad_norm: 1.0 + +optimizer: + type: "adamw" + betas: [0.9, 0.999] + eps: 1.0e-8 + +scheduler: + type: "linear" + +data: + train_path: "data/merged_v5/train.jsonl" + val_path: "data/merged_v5/val.jsonl" + text_column: "text" + label_column: "label" + +output: + base_dir: "artifacts" + pytorch_dir: "artifacts/pytorch" + save_steps: 200 + eval_steps: 100 + logging_steps: 50 + save_total_limit: 3 + +seed: 42 +deterministic: true + +logging: + level: "INFO" + log_to_file: true + log_file: "artifacts/logs/training_v5.log" + +intent_schema: + tier1: + - "ESCALATION" + - "APPOINTMENT" + - "MEDICATION" + - "SYMPTOM_CHECK" + - "GENERAL_INQUIRY" + - "BILLING" + +metrics: + primary: "macro_f1" + track: + - "accuracy" + - "macro_f1" + - "per_class_recall" + escalation_label: "ESCALATION" diff --git a/config/train_config_v6.yaml b/config/train_config_v6.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6ee49a188fc8209c1a68d122579f0730bb90201c --- /dev/null +++ b/config/train_config_v6.yaml @@ -0,0 +1,75 @@ +# DCE Intent BioClinicalBERT Training Configuration - v6 Temporal Edge Cases +# =========================================================================== +# Version: 6.0.0 +# Description: v5 base + 840 temporal edge case samples +# Changes from v5: +# - 300 BUT-clause reversal samples (ESCALATION) - "felt better but now it's back" +# - 300 proxy/third-party urgent reports (ESCALATION) - "my mom says chest hurts" +# - 90 proxy non-urgent (SYMPTOM_CHECK/GENERAL_INQUIRY) - "my friend had X last year" +# - 80 mixed temporal active (ESCALATION) - "had X and it hasn't gone away" +# - 20 intermittent dangerous (ESCALATION) - "sometimes I have trouble breathing" +# - 25 negated symptoms (SYMPTOM_CHECK) - "I don't have chest pain" +# - 25 informational (GENERAL_INQUIRY) - "what causes seizures" +# - Total: ~8,178 train + 1,256 val + +model: + base_model: "emilyalsentzer/Bio_ClinicalBERT" + max_length: 64 + num_labels: null + +training: + learning_rate: 2.0e-5 + epochs: 8 + batch_size: 16 + eval_batch_size: 32 + warmup_ratio: 0.1 + weight_decay: 0.01 + gradient_accumulation_steps: 1 + max_grad_norm: 1.0 + +optimizer: + type: "adamw" + betas: [0.9, 0.999] + eps: 1.0e-8 + +scheduler: + type: "linear" + +data: + train_path: "data/merged_v6/train.jsonl" + val_path: "data/merged_v6/val.jsonl" + text_column: "text" + label_column: "label" + +output: + base_dir: "artifacts" + pytorch_dir: "artifacts/pytorch" + save_steps: 200 + eval_steps: 100 + logging_steps: 50 + save_total_limit: 3 + +seed: 42 +deterministic: true + +logging: + level: "INFO" + log_to_file: true + log_file: "artifacts/logs/training_v6.log" + +intent_schema: + tier1: + - "ESCALATION" + - "APPOINTMENT" + - "MEDICATION" + - "SYMPTOM_CHECK" + - "GENERAL_INQUIRY" + - "BILLING" + +metrics: + primary: "macro_f1" + track: + - "accuracy" + - "macro_f1" + - "per_class_recall" + escalation_label: "ESCALATION" diff --git a/decision/context/fhir_mappings.yaml b/decision/context/fhir_mappings.yaml new file mode 100644 index 0000000000000000000000000000000000000000..95b6fa446eb5d6db93754a3721d248023a74ee46 --- /dev/null +++ b/decision/context/fhir_mappings.yaml @@ -0,0 +1,61 @@ +# FHIR Resource Mappings for Patient Context +# +# Maps FHIR resources to PatientContext fields, organized by wedge. +# Used by PatientContextBuilder to fetch only what's needed (minimum necessary). + +# Which FHIR resources to fetch per wedge (minimum necessary principle) +wedge_resources: + post_discharge_engagement: + - Patient + - Condition + - MedicationRequest + - Observation # labs + vitals + - AllergyIntolerance + - Encounter + - DocumentReference # discharge summary + - Appointment + pre_op_optimization: + - Patient + - Condition + - MedicationRequest + - AllergyIntolerance + - ServiceRequest # scheduled procedures + - Appointment + annual_wellness_visit: + - Patient + - Condition + - MedicationRequest + - Observation + - Immunization + - AllergyIntolerance + gap_closure: + - Patient + - Condition + - Immunization + - Observation # screening results + health_risk_assessment: + - Patient + - Condition + - MedicationRequest + - Observation # labs + screenings + - AllergyIntolerance + +# Default lookback periods per resource type +lookback_days: + Observation_laboratory: 90 + Observation_vital_signs: 30 + MedicationRequest: 365 + Condition: null # all active, no date filter + Encounter: 365 + Immunization: 730 + Appointment: 90 # upcoming only + +# Freshness thresholds (hours) for staleness detection +freshness_thresholds: + MedicationRequest: 24 + Condition: 168 # 7 days + Observation_laboratory: 48 + Observation_vital_signs: 24 + AllergyIntolerance: 720 # 30 days + Immunization: 720 + Appointment: 12 diff --git a/decision/engine/__init__.py b/decision/engine/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2fdb98641489b3e5a4022f00bdb65fee56c95584 --- /dev/null +++ b/decision/engine/__init__.py @@ -0,0 +1,55 @@ +""" +Decision Engine for DCE Intent Classification. + +Phase 1: Safety Trifecta + - Taxonomy trigger matching (phrase, regex, partial, negation) + - Domain nomination (DriveHealthBERT + triggers → ranked domains) + - Risk classification (R0/R1/R2/R3) + +Phase 2: Conversation Engine + - Flow execution (state machine, slot tracking) + - Streaming flow integration + +Phase 3: Clinical Intelligence + - FHIR context-aware risk rules + - Multi-tenant configuration + - Journey orchestration +""" + +from decision.engine.models import ( + ConfidenceTier, + RiskClass, + TriggerMatch, + DomainNomination, + RiskAssessment, + NegationResult, +) +from decision.engine.trigger_engine import TaxonomyTriggerEngine +from decision.engine.domain_nomination import DomainNominator +from decision.engine.risk_classifier import RiskClassifier +from decision.engine.config_loader import DecisionConfigLoader +from decision.engine.flow_engine import FlowEngine, FlowResolver, TurnResult +from decision.engine.fhir_context import PatientContext, PatientContextBuilder +from decision.engine.tenant_manager import TenantManager, TenantConfig +from decision.engine.journey_orchestrator import JourneyOrchestrator + +__all__ = [ + "ConfidenceTier", + "RiskClass", + "TriggerMatch", + "DomainNomination", + "RiskAssessment", + "NegationResult", + "TaxonomyTriggerEngine", + "DomainNominator", + "RiskClassifier", + "DecisionConfigLoader", + "FlowEngine", + "FlowResolver", + "TurnResult", + "PatientContext", + "PatientContextBuilder", + "TenantManager", + "TenantConfig", + "JourneyOrchestrator", +] diff --git a/decision/engine/config_loader.py b/decision/engine/config_loader.py new file mode 100644 index 0000000000000000000000000000000000000000..13c45ec8355852709b4c1031877a982f26eaf3a4 --- /dev/null +++ b/decision/engine/config_loader.py @@ -0,0 +1,472 @@ +""" +Configuration loader for the Decision Engine. + +Loads and validates all YAML configuration from the decision/ folder: + - global/global_rules.yaml + - taxonomy/*/triggers.yaml, rules.yaml, flows/*.yaml + - primitives/*.yaml + - orchestrator/*.yaml + - context/fhir_mappings.yaml + - tenants/*/tenant.yaml + - journeys/*.yaml +""" + +from __future__ import annotations + +import logging +import os +import re +from pathlib import Path +from typing import Any, Dict, List, Optional, Set + +import yaml + +logger = logging.getLogger("decision.config_loader") + + +class DecisionConfigLoader: + """Loads and caches all decision engine configuration from YAML files.""" + + def __init__(self, decision_dir: str | Path): + self.decision_dir = Path(decision_dir) + if not self.decision_dir.is_dir(): + raise FileNotFoundError( + f"Decision config directory not found: {self.decision_dir}" + ) + + # Loaded config caches + self._global_rules: Optional[Dict[str, Any]] = None + self._taxonomy_triggers: Optional[Dict[str, Dict[str, Any]]] = None + self._taxonomy_rules: Optional[Dict[str, Dict[str, Any]]] = None + self._taxonomy_flows: Optional[Dict[str, Dict[str, Dict[str, Any]]]] = None + self._primitives: Optional[Dict[str, Dict[str, Any]]] = None + self._orchestrator: Optional[Dict[str, Dict[str, Any]]] = None + self._fhir_mappings: Optional[Dict[str, Any]] = None + self._tenants: Optional[Dict[str, Dict[str, Any]]] = None + self._journeys: Optional[Dict[str, Dict[str, Any]]] = None + + # ------------------------------------------------------------------ + # Public API + # ------------------------------------------------------------------ + + def load_all(self) -> None: + """Load all configuration files. Call once at startup.""" + logger.info("Loading decision engine configuration from %s", self.decision_dir) + self._load_global_rules() + self._load_taxonomy() + self._load_primitives() + self._load_orchestrator() + self._load_fhir_mappings() + self._load_tenants() + self._load_journeys() + self._validate() + logger.info( + "Decision config loaded: %d domains, %d primitives, %d tenants, %d journeys", + len(self._taxonomy_triggers or {}), + len(self._primitives or {}), + len(self._tenants or {}), + len(self._journeys or {}), + ) + + @property + def global_rules(self) -> Dict[str, Any]: + if self._global_rules is None: + self._load_global_rules() + return self._global_rules + + @property + def taxonomy_triggers(self) -> Dict[str, Dict[str, Any]]: + """domain_name -> triggers.yaml content""" + if self._taxonomy_triggers is None: + self._load_taxonomy() + return self._taxonomy_triggers + + @property + def taxonomy_rules(self) -> Dict[str, Dict[str, Any]]: + """domain_name -> rules.yaml content""" + if self._taxonomy_rules is None: + self._load_taxonomy() + return self._taxonomy_rules + + @property + def taxonomy_flows(self) -> Dict[str, Dict[str, Dict[str, Any]]]: + """domain_name -> {flow_id -> flow.yaml content}""" + if self._taxonomy_flows is None: + self._load_taxonomy() + return self._taxonomy_flows + + @property + def primitives(self) -> Dict[str, Dict[str, Any]]: + if self._primitives is None: + self._load_primitives() + return self._primitives + + @property + def orchestrator(self) -> Dict[str, Dict[str, Any]]: + if self._orchestrator is None: + self._load_orchestrator() + return self._orchestrator + + @property + def fhir_mappings(self) -> Dict[str, Any]: + if self._fhir_mappings is None: + self._load_fhir_mappings() + return self._fhir_mappings + + @property + def tenants(self) -> Dict[str, Dict[str, Any]]: + if self._tenants is None: + self._load_tenants() + return self._tenants + + @property + def journeys(self) -> Dict[str, Dict[str, Any]]: + if self._journeys is None: + self._load_journeys() + return self._journeys + + # ------------------------------------------------------------------ + # Derived accessors + # ------------------------------------------------------------------ + + @property + def safety_precedence(self) -> List[str]: + """Ordered list of domains by clinical acuity (highest first).""" + return self.global_rules.get("safety_precedence", []) + + @property + def hard_escalate_domains(self) -> Set[str]: + """Domains that always escalate regardless of confidence. + + Includes both explicitly listed domains from global_rules AND + any taxonomy domain whose rules.yaml declares target_risk_class: R3. + """ + explicit = set(self.global_rules.get("hard_escalate_domains", [])) + # Auto-include every domain with target_risk_class R3 + for domain_name, rules in (self._taxonomy_rules or {}).items(): + if rules.get("target_risk_class") == "R3": + explicit.add(domain_name) + return explicit + + @property + def risk_escalation_rules(self) -> List[Dict[str, Any]]: + """Risk escalation rule definitions from global_rules.""" + return self.global_rules.get("risk_escalation_rules", []) + + @property + def domain_suppression_rules(self) -> List[Dict[str, Any]]: + """Domain suppression rules from global_rules.""" + return self.global_rules.get("domain_suppression", []) + + @property + def risk_class_descriptions(self) -> Dict[str, str]: + """R0/R1/R2/R3 descriptions.""" + return self.global_rules.get("risk_classes", {}) + + @property + def domain_names(self) -> List[str]: + """All known domain names from taxonomy.""" + return sorted(self.taxonomy_triggers.keys()) + + def get_tenant(self, tenant_id: str) -> Optional[Dict[str, Any]]: + """Get tenant config by ID.""" + return self.tenants.get(tenant_id) + + def get_domain_priority(self, domain: str) -> int: + """Get priority for a domain (higher = more urgent). Default 0.""" + triggers = self.taxonomy_triggers.get(domain, {}) + return triggers.get("priority", 0) + + def get_domain_target_risk(self, domain: str) -> Optional[str]: + """Get default target risk class for a domain from rules.yaml.""" + rules = self.taxonomy_rules.get(domain, {}) + return rules.get("target_risk_class") + + def get_domain_decision_rules(self, domain: str) -> List[Dict[str, Any]]: + """Get decision rules for a domain.""" + rules = self.taxonomy_rules.get(domain, {}) + return rules.get("decision_rules", []) + + # ------------------------------------------------------------------ + # Internal loaders + # ------------------------------------------------------------------ + + def _safe_load_yaml(self, path: Path) -> Dict[str, Any]: + """Load a YAML file safely, returning empty dict on error.""" + try: + with open(path, "r", encoding="utf-8") as f: + data = yaml.safe_load(f) + return data if isinstance(data, dict) else {} + except Exception as e: + logger.warning("Failed to load YAML %s: %s", path, e) + return {} + + def _load_global_rules(self) -> None: + path = self.decision_dir / "global" / "global_rules.yaml" + self._global_rules = self._safe_load_yaml(path) + if not self._global_rules: + logger.error("CRITICAL: global_rules.yaml is empty or missing at %s", path) + + def _load_taxonomy(self) -> None: + self._taxonomy_triggers = {} + self._taxonomy_rules = {} + self._taxonomy_flows = {} + + taxonomy_dir = self.decision_dir / "taxonomy" + if not taxonomy_dir.is_dir(): + logger.warning("Taxonomy directory not found: %s", taxonomy_dir) + return + + for domain_dir in sorted(taxonomy_dir.iterdir()): + if not domain_dir.is_dir(): + continue + domain_name = domain_dir.name + + # Load triggers.yaml + triggers_path = domain_dir / "triggers.yaml" + if triggers_path.is_file(): + triggers = self._safe_load_yaml(triggers_path) + if triggers: + self._taxonomy_triggers[domain_name] = triggers + # Pre-compile regex patterns for performance + self._compile_trigger_regex(domain_name, triggers) + + # Load rules.yaml + rules_path = domain_dir / "rules.yaml" + if rules_path.is_file(): + rules = self._safe_load_yaml(rules_path) + if rules: + self._taxonomy_rules[domain_name] = rules + + # Load flows/*.yaml + flows_dir = domain_dir / "flows" + if flows_dir.is_dir(): + domain_flows = {} + for flow_file in sorted(flows_dir.iterdir()): + if flow_file.suffix in (".yaml", ".yml"): + flow_data = self._safe_load_yaml(flow_file) + if flow_data: + flow_id = flow_data.get("flow_id", flow_file.stem) + domain_flows[flow_id] = flow_data + if domain_flows: + self._taxonomy_flows[domain_name] = domain_flows + + def _compile_trigger_regex( + self, domain_name: str, triggers: Dict[str, Any] + ) -> None: + """Pre-compile regex patterns in trigger definitions for performance.""" + lexical = triggers.get("lexical_signals", {}) + for tier_name in ("high", "medium", "low"): + tier = lexical.get(tier_name, {}) + raw_patterns = tier.get("regex", []) + compiled = [] + for pattern in raw_patterns: + try: + compiled.append(re.compile(pattern, re.IGNORECASE)) + except re.error as e: + logger.warning( + "Invalid regex in %s/%s: %r → %s", + domain_name, + tier_name, + pattern, + e, + ) + tier["_compiled_regex"] = compiled + + # Compile negation patterns + negation = triggers.get("negation_handling", {}) + neg_patterns = negation.get("patterns", []) + negation["_compiled_patterns"] = [ + p.lower() for p in neg_patterns + ] + + def load_additional_taxonomy(self, taxonomy_dir: str | Path) -> int: + """ + Load additional taxonomy domains from a secondary directory. + + Only loads domains that are NOT already present in the primary taxonomy. + Returns the number of new domains added. + """ + taxonomy_dir = Path(taxonomy_dir) + if not taxonomy_dir.is_dir(): + logger.warning("Additional taxonomy directory not found: %s", taxonomy_dir) + return 0 + + if self._taxonomy_triggers is None: + self._taxonomy_triggers = {} + if self._taxonomy_rules is None: + self._taxonomy_rules = {} + if self._taxonomy_flows is None: + self._taxonomy_flows = {} + + added = 0 + for domain_dir in sorted(taxonomy_dir.iterdir()): + if not domain_dir.is_dir(): + continue + domain_name = domain_dir.name + + # Skip domains already loaded from primary taxonomy + if domain_name in self._taxonomy_triggers: + continue + + # Load triggers.yaml + triggers_path = domain_dir / "triggers.yaml" + if triggers_path.is_file(): + triggers = self._safe_load_yaml(triggers_path) + if triggers: + self._taxonomy_triggers[domain_name] = triggers + self._compile_trigger_regex(domain_name, triggers) + + # Load rules.yaml + rules_path = domain_dir / "rules.yaml" + if rules_path.is_file(): + rules = self._safe_load_yaml(rules_path) + if rules: + self._taxonomy_rules[domain_name] = rules + + # Load flows/*.yaml + flows_dir = domain_dir / "flows" + if flows_dir.is_dir(): + domain_flows = {} + for flow_file in sorted(flows_dir.iterdir()): + if flow_file.suffix in (".yaml", ".yml"): + flow_data = self._safe_load_yaml(flow_file) + if flow_data: + flow_id = flow_data.get("flow_id", flow_file.stem) + domain_flows[flow_id] = flow_data + if domain_flows: + self._taxonomy_flows[domain_name] = domain_flows + + added += 1 + + if added: + logger.info( + "Loaded %d additional taxonomy domains from %s (total: %d)", + added, taxonomy_dir, len(self._taxonomy_triggers), + ) + return added + + def _load_primitives(self) -> None: + self._primitives = {} + prim_dir = self.decision_dir / "primitives" + if not prim_dir.is_dir(): + return + for f in sorted(prim_dir.iterdir()): + if f.suffix in (".yaml", ".yml"): + data = self._safe_load_yaml(f) + if data: + flow_id = data.get("flow_id", f.stem) + self._primitives[flow_id] = data + + def _load_orchestrator(self) -> None: + self._orchestrator = {} + orch_dir = self.decision_dir / "orchestrator" + if not orch_dir.is_dir(): + return + for f in sorted(orch_dir.iterdir()): + if f.suffix in (".yaml", ".yml"): + data = self._safe_load_yaml(f) + if data: + self._orchestrator[f.stem] = data + + def _load_fhir_mappings(self) -> None: + path = self.decision_dir / "context" / "fhir_mappings.yaml" + self._fhir_mappings = self._safe_load_yaml(path) if path.is_file() else {} + + def _load_tenants(self) -> None: + self._tenants = {} + tenants_dir = self.decision_dir / "tenants" + if not tenants_dir.is_dir(): + return + for tenant_dir in sorted(tenants_dir.iterdir()): + if not tenant_dir.is_dir(): + continue + tenant_path = tenant_dir / "tenant.yaml" + if tenant_path.is_file(): + data = self._safe_load_yaml(tenant_path) + if data: + tid = data.get("tenant_id", tenant_dir.name) + self._tenants[tid] = data + + def _load_journeys(self) -> None: + self._journeys = {} + journeys_dir = self.decision_dir / "journeys" + if not journeys_dir.is_dir(): + return + for f in sorted(journeys_dir.iterdir()): + if f.suffix in (".yaml", ".yml"): + data = self._safe_load_yaml(f) + if data: + wt = data.get("wedge_type", f.stem) + self._journeys[wt] = data + + # ------------------------------------------------------------------ + # Validation + # ------------------------------------------------------------------ + + def _validate(self) -> None: + """Run basic validation checks on loaded configuration.""" + errors = [] + + # Check global rules has required keys + required_global_keys = [ + "safety_precedence", + "risk_classes", + "risk_escalation_rules", + "hard_escalate_domains", + ] + for key in required_global_keys: + if key not in self.global_rules: + errors.append(f"global_rules.yaml missing required key: {key}") + + # Check every domain in safety_precedence has triggers + for domain in self.safety_precedence: + if domain not in self.taxonomy_triggers: + errors.append( + f"safety_precedence domain '{domain}' has no triggers.yaml" + ) + + # Check hard_escalate domains exist + for domain in self.hard_escalate_domains: + if domain not in self.taxonomy_triggers: + errors.append( + f"hard_escalate domain '{domain}' has no triggers.yaml" + ) + + # Check risk escalation rules reference valid domains + for rule in self.risk_escalation_rules: + rule_domain = rule.get("if", {}).get("domain") + if rule_domain and rule_domain not in self.taxonomy_triggers: + errors.append( + f"risk rule '{rule.get('id')}' references unknown domain " + f"'{rule_domain}'" + ) + + # Check tenant wedge references + for tid, tenant in self.tenants.items(): + for wedge in tenant.get("enabled_wedges", []): + # Map short names to journey keys + if wedge not in self.journeys: + # Try mapping common abbreviations + mapping = { + "pde": "pde", + "pre_op": "pre_op", + "awv": "awv", + "gap_closure": "gap_closure", + "hra": "hra", + } + if wedge not in mapping: + logger.debug( + "Tenant '%s' references wedge '%s' not in journeys", + tid, + wedge, + ) + + if errors: + for err in errors: + logger.warning("Config validation: %s", err) + logger.warning( + "Decision config has %d validation warning(s)", len(errors) + ) + else: + logger.info("Decision config validation passed") diff --git a/decision/engine/domain_nomination.py b/decision/engine/domain_nomination.py new file mode 100644 index 0000000000000000000000000000000000000000..6dde1ad6ab020d9bce8100dacfa0653262b60f65 --- /dev/null +++ b/decision/engine/domain_nomination.py @@ -0,0 +1,326 @@ +""" +Domain Nomination Layer. + +Combines DriveHealthBERT ML output with taxonomy trigger matches to produce +a ranked list of clinical domain nominations. + +The nomination algorithm: + 1. Run taxonomy triggers against the text → domain match results + 2. Receive DriveHealthBERT label + probabilities + 3. Fuse signals: ML confidence reinforces or weakens trigger confidence + 4. Apply hard-escalate rules (suicidal_ideation, homicidal_ideation) + 5. Rank by: (a) effective_confidence tier, (b) domain priority, (c) ML prob + 6. Select recommended_flow from domain rules based on confidence tier + 7. Return sorted list of DomainNomination objects + +Safety invariants: + - Hard-escalate domains ALWAYS nominate at HIGH confidence + - Negated domains are included but marked (caller decides) + - If ML says ESCALATION but no triggers match, still nominate with + a generic "unclassified_escalation" domain + - If triggers match a safety domain but ML says non-escalation, + the trigger OVERRIDES the ML (fail-open) +""" + +from __future__ import annotations + +import logging +from typing import Any, Dict, List, Optional, Set, Tuple + +from decision.engine.config_loader import DecisionConfigLoader +from decision.engine.models import ( + ConfidenceTier, + DomainNomination, + NegationResult, + RiskClass, + TriggerMatch, +) +from decision.engine.trigger_engine import DomainMatchResult, TaxonomyTriggerEngine + +logger = logging.getLogger("decision.domain_nomination") + +# DriveHealthBERT label → taxonomy domain mapping hints +# Used when ML label alone doesn't resolve to a specific domain +_ML_LABEL_DOMAIN_HINTS: Dict[str, List[str]] = { + "SCHEDULING": ["scheduling", "scheduling_barrier", "missed_followup"], + "MEDICATION": ["medication", "medication_nonadherence"], + "SYMPTOM_CHECK": [], # Too broad — rely on triggers + "BILLING": [], # No taxonomy domain for billing yet + "GENERAL": [], + "ESCALATION": [], # Rely on triggers to determine which domain +} + + +class DomainNominator: + """ + Produces ranked domain nominations from ML + lexical signals. + + Usage: + nominator = DomainNominator(config, trigger_engine) + nominations = nominator.nominate( + text="my chest is killing me", + ml_label="ESCALATION", + ml_probabilities={"ESCALATION": 0.92, ...}, + ) + """ + + def __init__( + self, + config: DecisionConfigLoader, + trigger_engine: TaxonomyTriggerEngine, + ): + self._config = config + self._trigger_engine = trigger_engine + self._hard_escalate: Set[str] = config.hard_escalate_domains + self._safety_precedence: List[str] = config.safety_precedence + + def nominate( + self, + text: str, + ml_label: Optional[str] = None, + ml_probabilities: Optional[Dict[str, float]] = None, + ) -> List[DomainNomination]: + """ + Produce ranked domain nominations for the given text. + + Args: + text: Patient utterance (original, NOT context-prepended) + ml_label: DriveHealthBERT predicted label (e.g., "ESCALATION") + ml_probabilities: Full probability distribution from DriveHealthBERT + + Returns: + List of DomainNomination sorted by: + 1. Effective confidence tier (HIGH > MEDIUM > LOW) + 2. Domain priority (higher = more urgent) + 3. ML probability (if available) + """ + ml_confidence = None + if ml_probabilities and ml_label: + ml_confidence = ml_probabilities.get(ml_label, 0.0) + + # Step 1: Run taxonomy triggers + trigger_results = self._trigger_engine.match_all(text) + + # Step 2: Build nominations from trigger results + nominations: List[DomainNomination] = [] + + for domain_name, match_result in trigger_results.items(): + nomination = self._build_nomination( + domain_name=domain_name, + match_result=match_result, + ml_label=ml_label, + ml_confidence=ml_confidence, + ) + nominations.append(nomination) + + # Step 3: Handle hard-escalate domains + # If any hard-escalate domain matched (even at LOW), force HIGH + for nom in nominations: + if nom.domain in self._hard_escalate and not nom.is_negated: + nominations = [ + self._force_high_confidence(n) if n.domain == nom.domain else n + for n in nominations + ] + + # Step 4: Handle ML-only signals (ML says ESCALATION but no triggers) + if ml_label == "ESCALATION" and ml_confidence and ml_confidence > 0.5: + has_safety_trigger = any( + not n.is_negated and n.confidence_tier >= ConfidenceTier.LOW + for n in nominations + if n.domain in set(self._safety_precedence) + ) + # Check if the ML is confused by negated safety keywords: + # If safety domains DID match but were ALL negated, the ML is + # likely reacting to the keywords themselves (e.g., "I'm NOT + # suicidal" triggers ML ESCALATION because it sees "suicidal"). + # In this case, trust the explicit negation over the ML signal. + has_negated_safety = any( + n.is_negated + for n in nominations + if n.domain in set(self._safety_precedence) + ) + if not has_safety_trigger and not has_negated_safety: + # ML detected escalation but no specific domain matched + # (and no negated safety domains either) + # Create a generic nomination so it's not silently dropped + nominations.append( + DomainNomination( + domain="unclassified_escalation", + display_name="Unclassified Escalation", + confidence_tier=self._ml_prob_to_tier(ml_confidence), + priority=50, # Middle priority + target_risk_class=RiskClass.R2, + trigger_matches=(), + negation_result=None, + ml_label=ml_label, + ml_confidence=ml_confidence, + recommended_flow="handoff", + ) + ) + + # Step 5: Handle ML reinforcement for non-escalation labels + if ml_label and ml_label != "ESCALATION": + hint_domains = _ML_LABEL_DOMAIN_HINTS.get(ml_label, []) + for nom in nominations: + if nom.domain in hint_domains and ml_confidence: + # ML confirms trigger match — boost confidence if ML is strong + if ml_confidence > 0.8 and nom.confidence_tier < ConfidenceTier.HIGH: + nominations = [ + self._boost_confidence(n) if n.domain == nom.domain else n + for n in nominations + ] + + # Step 6: Resolve recommended_flow for each nomination + nominations = [self._resolve_flow(n) for n in nominations] + + # Step 7: Sort + nominations.sort(key=self._nomination_sort_key, reverse=True) + + if nominations: + logger.info( + "Domain nominations for text (len=%d): %s", + len(text), + [(n.domain, n.confidence_tier.value, n.priority) for n in nominations[:5]], + ) + + return nominations + + # ------------------------------------------------------------------ + # Internal helpers + # ------------------------------------------------------------------ + + def _build_nomination( + self, + domain_name: str, + match_result: DomainMatchResult, + ml_label: Optional[str], + ml_confidence: Optional[float], + ) -> DomainNomination: + """Build a DomainNomination from a DomainMatchResult.""" + # Get target risk class from rules.yaml + target_risk_str = self._config.get_domain_target_risk(domain_name) + target_risk = None + if target_risk_str: + try: + target_risk = RiskClass(target_risk_str) + except ValueError: + pass + + return DomainNomination( + domain=domain_name, + display_name=domain_name.replace("_", " ").title(), + confidence_tier=match_result.effective_confidence, + priority=match_result.priority, + target_risk_class=target_risk, + trigger_matches=match_result.matches, + negation_result=match_result.negation_result, + ml_label=ml_label, + ml_confidence=ml_confidence, + ) + + def _resolve_flow(self, nomination: DomainNomination) -> DomainNomination: + """Determine recommended_flow from domain decision rules.""" + if nomination.recommended_flow: + return nomination + + rules = self._config.get_domain_decision_rules(nomination.domain) + if not rules: + return nomination + + # Find first matching rule based on confidence tier + for rule in rules: + conditions = rule.get("if", {}) + conf_required = conditions.get("confidence") + if conf_required and conf_required == nomination.confidence_tier.value: + flow = rule.get("then", {}).get("flow") + if flow: + return DomainNomination( + domain=nomination.domain, + display_name=nomination.display_name, + confidence_tier=nomination.confidence_tier, + priority=nomination.priority, + target_risk_class=nomination.target_risk_class, + trigger_matches=nomination.trigger_matches, + negation_result=nomination.negation_result, + ml_label=nomination.ml_label, + ml_confidence=nomination.ml_confidence, + recommended_flow=flow, + ) + + return nomination + + def _force_high_confidence( + self, nomination: DomainNomination + ) -> DomainNomination: + """Force a nomination to HIGH confidence (for hard-escalate domains).""" + if nomination.confidence_tier == ConfidenceTier.HIGH: + return nomination + logger.warning( + "HARD ESCALATE: Forcing %s to HIGH confidence (was %s)", + nomination.domain, + nomination.confidence_tier.value, + ) + return DomainNomination( + domain=nomination.domain, + display_name=nomination.display_name, + confidence_tier=ConfidenceTier.HIGH, + priority=nomination.priority, + target_risk_class=nomination.target_risk_class, + trigger_matches=nomination.trigger_matches, + negation_result=nomination.negation_result, + ml_label=nomination.ml_label, + ml_confidence=nomination.ml_confidence, + recommended_flow=nomination.recommended_flow, + ) + + def _boost_confidence( + self, nomination: DomainNomination + ) -> DomainNomination: + """Boost confidence by one tier when ML reinforces trigger.""" + new_tier = nomination.confidence_tier + if new_tier == ConfidenceTier.LOW: + new_tier = ConfidenceTier.MEDIUM + elif new_tier == ConfidenceTier.MEDIUM: + new_tier = ConfidenceTier.HIGH + if new_tier == nomination.confidence_tier: + return nomination + return DomainNomination( + domain=nomination.domain, + display_name=nomination.display_name, + confidence_tier=new_tier, + priority=nomination.priority, + target_risk_class=nomination.target_risk_class, + trigger_matches=nomination.trigger_matches, + negation_result=nomination.negation_result, + ml_label=nomination.ml_label, + ml_confidence=nomination.ml_confidence, + recommended_flow=nomination.recommended_flow, + ) + + @staticmethod + def _ml_prob_to_tier(prob: float) -> ConfidenceTier: + """Map ML probability to a confidence tier.""" + if prob >= 0.8: + return ConfidenceTier.HIGH + elif prob >= 0.5: + return ConfidenceTier.MEDIUM + elif prob >= 0.3: + return ConfidenceTier.LOW + return ConfidenceTier.NONE + + @staticmethod + def _nomination_sort_key( + nom: DomainNomination, + ) -> Tuple[int, int, float]: + """Sort key: (confidence_rank, priority, ml_confidence).""" + conf_rank = { + ConfidenceTier.HIGH: 3, + ConfidenceTier.MEDIUM: 2, + ConfidenceTier.LOW: 1, + ConfidenceTier.NONE: 0, + } + return ( + conf_rank.get(nom.confidence_tier, 0), + nom.priority, + nom.ml_confidence or 0.0, + ) diff --git a/decision/engine/fhir_context.py b/decision/engine/fhir_context.py new file mode 100644 index 0000000000000000000000000000000000000000..5a964b344a59e4359783e86cb046f34971696679 --- /dev/null +++ b/decision/engine/fhir_context.py @@ -0,0 +1,506 @@ +""" +FHIR Context Loader (Phase 3A). + +Builds a PatientContext from FHIR R4 resources for context-aware risk rules. + +Key features: + - Minimum necessary principle: only fetch resources needed for the active wedge + - Lookback periods: filter by date relevance + - Freshness detection: warn when clinical data is stale + - ICD-10 condition matching for risk rule evaluation + - Medication count for polypharmacy detection + - Pre-populated slot extraction for journey agendas + +This module provides: + 1. PatientContext dataclass — normalized patient data for risk evaluation + 2. PatientContextBuilder — builds context from raw FHIR bundles + 3. FHIRClient (abstract) — interface for FHIR data fetching (Phase 3 full impl) + +Safety invariants: + - Missing context = fail closed (context-dependent rules don't fire) + - Stale data is flagged but still used (better than no data) + - PHI is never logged — only ICD codes and counts +""" + +from __future__ import annotations + +import logging +from dataclasses import dataclass, field +from datetime import datetime, timedelta, timezone +from typing import Any, Dict, List, Optional, Set + +from decision.engine.config_loader import DecisionConfigLoader + +logger = logging.getLogger("decision.fhir_context") + + +# --------------------------------------------------------------------------- +# Patient Context +# --------------------------------------------------------------------------- + +@dataclass +class PatientContext: + """ + Normalized patient context for clinical decision-making. + + Built from FHIR resources. Used by RiskClassifier for context-aware rules. + """ + patient_id: str = "" + + # Conditions (ICD-10 codes of active problems) + active_conditions: List[str] = field(default_factory=list) + # Convenience sets for common condition groups + has_chf: bool = False # I50.* + has_copd: bool = False # J44.* + has_diabetes: bool = False # E10.*, E11.* + has_ckd: bool = False # N18.* + has_cancer: bool = False # C00-C97 + has_afib: bool = False # I48.* + has_depression: bool = False # F32.*, F33.* + has_anxiety: bool = False # F41.* + + # Medications + active_medication_count: int = 0 + active_medication_names: List[str] = field(default_factory=list) + is_on_anticoagulant: bool = False + is_on_insulin: bool = False + is_on_opioid: bool = False + + # Demographics + age: Optional[int] = None + is_elderly: bool = False # 65+ + is_very_elderly: bool = False # 75+ + + # Recent vitals + last_bp_systolic: Optional[float] = None + last_bp_diastolic: Optional[float] = None + last_heart_rate: Optional[float] = None + last_weight_kg: Optional[float] = None + last_glucose: Optional[float] = None + last_temperature: Optional[float] = None + + # Recent encounter + days_since_discharge: Optional[int] = None + discharge_diagnosis_codes: List[str] = field(default_factory=list) + + # Allergies + allergy_count: int = 0 + drug_allergies: List[str] = field(default_factory=list) + + # Appointments + has_upcoming_appointment: bool = False + next_appointment_days: Optional[int] = None + + # Freshness / staleness warnings + stale_resources: List[str] = field(default_factory=list) + context_timestamp: Optional[datetime] = None + + def to_risk_context(self) -> Dict[str, Any]: + """ + Convert to the dict format expected by RiskClassifier.assess(patient_context=...). + """ + return { + "patient_id": self.patient_id, + "active_conditions": self.active_conditions, + "active_medication_count": self.active_medication_count, + "has_chf": self.has_chf, + "has_copd": self.has_copd, + "has_diabetes": self.has_diabetes, + "has_ckd": self.has_ckd, + "has_cancer": self.has_cancer, + "has_afib": self.has_afib, + "has_depression": self.has_depression, + "has_anxiety": self.has_anxiety, + "is_on_anticoagulant": self.is_on_anticoagulant, + "is_on_insulin": self.is_on_insulin, + "is_on_opioid": self.is_on_opioid, + "age": self.age, + "is_elderly": self.is_elderly, + "is_very_elderly": self.is_very_elderly, + "days_since_discharge": self.days_since_discharge, + "stale_resources": self.stale_resources, + } + + +# --------------------------------------------------------------------------- +# Patient Context Builder +# --------------------------------------------------------------------------- + +# ICD-10 pattern groups for condition detection +_CONDITION_GROUPS = { + "has_chf": ["I50"], + "has_copd": ["J44"], + "has_diabetes": ["E10", "E11"], + "has_ckd": ["N18"], + "has_cancer": [f"C{i:02d}" for i in range(98)], # C00-C97 + "has_afib": ["I48"], + "has_depression": ["F32", "F33"], + "has_anxiety": ["F41"], +} + +# Medication class detection (by name substring) +_ANTICOAGULANTS = {"warfarin", "coumadin", "heparin", "enoxaparin", "lovenox", + "apixaban", "eliquis", "rivaroxaban", "xarelto", "dabigatran", "pradaxa"} +_INSULINS = {"insulin", "humalog", "novolog", "lantus", "levemir", "tresiba", + "basaglar", "admelog", "fiasp", "toujeo"} +_OPIOIDS = {"oxycodone", "hydrocodone", "morphine", "fentanyl", "codeine", + "tramadol", "methadone", "hydromorphone", "oxymorphone", "dilaudid", + "percocet", "vicodin", "norco"} + + +class PatientContextBuilder: + """ + Builds a PatientContext from FHIR resource bundles. + + Usage: + builder = PatientContextBuilder(config) + context = builder.build_from_fhir( + patient_id="P-123", + fhir_bundle=bundle_dict, + wedge_type="pde", + ) + """ + + def __init__(self, config: DecisionConfigLoader): + self._config = config + self._fhir_mappings = config.fhir_mappings + self._freshness_thresholds = self._fhir_mappings.get("freshness_thresholds", {}) + + def build_from_fhir( + self, + patient_id: str, + fhir_bundle: Dict[str, Any], + wedge_type: Optional[str] = None, + ) -> PatientContext: + """ + Build PatientContext from a FHIR bundle response. + + Args: + patient_id: Patient identifier + fhir_bundle: FHIR Bundle resource (or dict of resource lists) + wedge_type: Active wedge for minimum necessary filtering + + Returns: + PatientContext ready for risk rule evaluation + """ + ctx = PatientContext( + patient_id=patient_id, + context_timestamp=datetime.now(timezone.utc), + ) + + # Extract resources from bundle + resources = self._extract_resources(fhir_bundle) + + # Build context from each resource type + self._process_patient(ctx, resources.get("Patient", [])) + self._process_conditions(ctx, resources.get("Condition", [])) + self._process_medications(ctx, resources.get("MedicationRequest", [])) + self._process_observations(ctx, resources.get("Observation", [])) + self._process_allergies(ctx, resources.get("AllergyIntolerance", [])) + self._process_encounters(ctx, resources.get("Encounter", [])) + self._process_appointments(ctx, resources.get("Appointment", [])) + + # Check freshness + self._check_freshness(ctx, resources) + + logger.info( + "PatientContext built: patient=%s conditions=%d meds=%d age=%s chf=%s copd=%s dm=%s", + patient_id, + len(ctx.active_conditions), + ctx.active_medication_count, + ctx.age, + ctx.has_chf, + ctx.has_copd, + ctx.has_diabetes, + ) + + return ctx + + def build_from_dict( + self, + patient_id: str, + data: Dict[str, Any], + ) -> PatientContext: + """ + Build PatientContext from a pre-processed dict (e.g., from API request). + + This allows callers to pass patient context directly without FHIR. + """ + ctx = PatientContext( + patient_id=patient_id, + context_timestamp=datetime.now(timezone.utc), + ) + + ctx.active_conditions = data.get("active_conditions", []) + ctx.active_medication_count = data.get("active_medication_count", 0) + ctx.active_medication_names = data.get("active_medication_names", []) + ctx.age = data.get("age") + ctx.days_since_discharge = data.get("days_since_discharge") + + # Derive flags from conditions + self._set_condition_flags(ctx) + + # Derive flags from medications + self._set_medication_flags(ctx) + + # Age flags + if ctx.age: + ctx.is_elderly = ctx.age >= 65 + ctx.is_very_elderly = ctx.age >= 75 + + return ctx + + # ------------------------------------------------------------------ + # Resource processing + # ------------------------------------------------------------------ + + def _extract_resources( + self, bundle: Dict[str, Any] + ) -> Dict[str, List[Dict[str, Any]]]: + """Extract resources from a FHIR Bundle, grouped by resourceType.""" + resources: Dict[str, List[Dict[str, Any]]] = {} + + # Handle standard FHIR Bundle format + entries = bundle.get("entry", []) + for entry in entries: + resource = entry.get("resource", {}) + rtype = resource.get("resourceType", "Unknown") + resources.setdefault(rtype, []).append(resource) + + # Also handle flat dict format {resourceType: [resources]} + for key, value in bundle.items(): + if key != "entry" and isinstance(value, list): + resources.setdefault(key, []).extend(value) + + return resources + + def _process_patient( + self, ctx: PatientContext, patients: List[Dict[str, Any]] + ) -> None: + if not patients: + return + patient = patients[0] + birth_date = patient.get("birthDate") + if birth_date: + try: + dob = datetime.strptime(birth_date, "%Y-%m-%d") + today = datetime.now() + ctx.age = today.year - dob.year - ((today.month, today.day) < (dob.month, dob.day)) + ctx.is_elderly = ctx.age >= 65 + ctx.is_very_elderly = ctx.age >= 75 + except (ValueError, TypeError): + pass + + def _process_conditions( + self, ctx: PatientContext, conditions: List[Dict[str, Any]] + ) -> None: + for condition in conditions: + # Only active conditions + clinical_status = condition.get("clinicalStatus", {}) + if isinstance(clinical_status, dict): + codings = clinical_status.get("coding", []) + status_code = codings[0].get("code", "") if codings else "" + else: + status_code = str(clinical_status) + + if status_code and status_code not in ("active", "recurrence", "relapse"): + continue + + # Extract ICD-10 codes + code_concept = condition.get("code", {}) + for coding in code_concept.get("coding", []): + system = coding.get("system", "") + code = coding.get("code", "") + if "icd" in system.lower() or code: + ctx.active_conditions.append(code) + + self._set_condition_flags(ctx) + + def _set_condition_flags(self, ctx: PatientContext) -> None: + """Set boolean condition flags from ICD-10 codes.""" + for flag_name, prefixes in _CONDITION_GROUPS.items(): + has_condition = any( + any(code.startswith(prefix) for prefix in prefixes) + for code in ctx.active_conditions + ) + setattr(ctx, flag_name, has_condition) + + def _process_medications( + self, ctx: PatientContext, medications: List[Dict[str, Any]] + ) -> None: + active_meds = [] + for med in medications: + status = med.get("status", "") + if status not in ("active", "completed"): + continue + med_name = "" + med_concept = med.get("medicationCodeableConcept", {}) + if med_concept: + med_name = med_concept.get("text", "") + if not med_name: + codings = med_concept.get("coding", []) + if codings: + med_name = codings[0].get("display", "") + if med_name: + active_meds.append(med_name) + + ctx.active_medication_names = active_meds + ctx.active_medication_count = len(active_meds) + self._set_medication_flags(ctx) + + def _set_medication_flags(self, ctx: PatientContext) -> None: + """Set medication class flags from med names.""" + names_lower = {n.lower() for n in ctx.active_medication_names} + ctx.is_on_anticoagulant = bool(names_lower & _ANTICOAGULANTS) + ctx.is_on_insulin = bool(names_lower & _INSULINS) + ctx.is_on_opioid = bool(names_lower & _OPIOIDS) + + def _process_observations( + self, ctx: PatientContext, observations: List[Dict[str, Any]] + ) -> None: + # Sort by date descending to get most recent first + observations.sort( + key=lambda o: o.get("effectiveDateTime", ""), + reverse=True, + ) + + for obs in observations: + code_concept = obs.get("code", {}) + codings = code_concept.get("coding", []) + loinc_code = "" + for coding in codings: + if "loinc" in coding.get("system", "").lower(): + loinc_code = coding.get("code", "") + break + + value = obs.get("valueQuantity", {}).get("value") + if value is None: + continue + + # Map LOINC codes to context fields (most recent only) + if loinc_code == "8480-6" and ctx.last_bp_systolic is None: # Systolic BP + ctx.last_bp_systolic = float(value) + elif loinc_code == "8462-4" and ctx.last_bp_diastolic is None: # Diastolic BP + ctx.last_bp_diastolic = float(value) + elif loinc_code == "8867-4" and ctx.last_heart_rate is None: # Heart rate + ctx.last_heart_rate = float(value) + elif loinc_code == "29463-7" and ctx.last_weight_kg is None: # Weight + ctx.last_weight_kg = float(value) + elif loinc_code in ("2339-0", "2345-7") and ctx.last_glucose is None: # Glucose + ctx.last_glucose = float(value) + elif loinc_code == "8310-5" and ctx.last_temperature is None: # Temperature + ctx.last_temperature = float(value) + + def _process_allergies( + self, ctx: PatientContext, allergies: List[Dict[str, Any]] + ) -> None: + active_allergies = [ + a for a in allergies + if a.get("clinicalStatus", {}).get("coding", [{}])[0].get("code") == "active" + or not a.get("clinicalStatus") + ] + ctx.allergy_count = len(active_allergies) + + for allergy in active_allergies: + category = allergy.get("category", []) + if "medication" in category: + substance = allergy.get("code", {}).get("text", "") + if substance: + ctx.drug_allergies.append(substance) + + def _process_encounters( + self, ctx: PatientContext, encounters: List[Dict[str, Any]] + ) -> None: + # Find most recent discharge + encounters.sort( + key=lambda e: e.get("period", {}).get("end", ""), + reverse=True, + ) + + for enc in encounters: + period = enc.get("period", {}) + end_date = period.get("end") + if not end_date: + continue + try: + discharge_dt = datetime.fromisoformat(end_date.replace("Z", "+00:00")) + now = datetime.now(timezone.utc) + delta = now - discharge_dt + ctx.days_since_discharge = delta.days + + # Extract discharge diagnosis codes + diagnoses = enc.get("diagnosis", []) + for diag in diagnoses: + code = diag.get("condition", {}).get("reference", "") + if code: + ctx.discharge_diagnosis_codes.append(code) + break # Most recent only + except (ValueError, TypeError): + continue + + def _process_appointments( + self, ctx: PatientContext, appointments: List[Dict[str, Any]] + ) -> None: + now = datetime.now(timezone.utc) + for appt in appointments: + status = appt.get("status", "") + if status in ("cancelled", "noshow", "entered-in-error"): + continue + start = appt.get("start") + if not start: + continue + try: + appt_dt = datetime.fromisoformat(start.replace("Z", "+00:00")) + if appt_dt > now: + ctx.has_upcoming_appointment = True + delta = appt_dt - now + if ctx.next_appointment_days is None or delta.days < ctx.next_appointment_days: + ctx.next_appointment_days = delta.days + except (ValueError, TypeError): + continue + + def _check_freshness( + self, ctx: PatientContext, resources: Dict[str, List[Dict[str, Any]]] + ) -> None: + """Check resource freshness against configured thresholds.""" + now = datetime.now(timezone.utc) + + for resource_type, threshold_hours in self._freshness_thresholds.items(): + if threshold_hours is None: + continue + + # Map compound types (e.g., "Observation_laboratory") to base type + base_type = resource_type.split("_")[0] + entries = resources.get(base_type, []) + if not entries: + continue + + # Find most recent entry date + latest_date = None + for entry in entries: + date_str = ( + entry.get("effectiveDateTime") + or entry.get("authoredOn") + or entry.get("recordedDate") + or entry.get("meta", {}).get("lastUpdated") + ) + if date_str: + try: + dt = datetime.fromisoformat(date_str.replace("Z", "+00:00")) + if latest_date is None or dt > latest_date: + latest_date = dt + except (ValueError, TypeError): + continue + + if latest_date: + hours_old = (now - latest_date).total_seconds() / 3600 + if hours_old > threshold_hours: + ctx.stale_resources.append( + f"{resource_type} (last updated {hours_old:.0f}h ago, threshold {threshold_hours}h)" + ) + logger.warning( + "Stale FHIR data: %s is %.0fh old (threshold: %dh)", + resource_type, + hours_old, + threshold_hours, + ) diff --git a/decision/engine/flow_engine.py b/decision/engine/flow_engine.py new file mode 100644 index 0000000000000000000000000000000000000000..74d0e8a4b2498d1f312b6583b46a8b08036e2246 --- /dev/null +++ b/decision/engine/flow_engine.py @@ -0,0 +1,763 @@ +""" +Flow Execution Engine (Phase 2A). + +Manages multi-step clinical conversation flows with: + - State machine for flow step progression + - Slot tracking and validation + - Response spec enforcement (must_include, must_not, max_questions) + - Primitive sequence execution (greeting → identity_verify → consent) + - Domain-specific flow routing from risk assessment + - Exit condition evaluation + +Safety invariants: + - Escalation flows CANNOT be interrupted or rolled back + - Hard-escalate domains skip screening and go directly to escalate_r3 + - If unclear at any step, fail open (escalate, not suppress) + - Response specs enforce must_not constraints — these are NEVER relaxed +""" + +from __future__ import annotations + +import logging +from typing import Any, Dict, List, Optional, Set, Tuple + +from decision.engine.config_loader import DecisionConfigLoader +from decision.engine.models import ( + CallPhase, + ConfidenceTier, + ConversationFlow, + FlowStep, + FlowType, + ResponseSpec, + RiskAssessment, + RiskClass, + SessionState, + SlotState, + TurnOutcome, +) + +logger = logging.getLogger("decision.flow_engine") + + +# --------------------------------------------------------------------------- +# Flow Resolution +# --------------------------------------------------------------------------- + +class FlowResolver: + """ + Resolves which conversation flow to execute based on the current + session state, risk assessment, and domain rules. + """ + + def __init__(self, config: DecisionConfigLoader): + self._config = config + self._primitives = config.primitives + self._taxonomy_flows = config.taxonomy_flows + self._taxonomy_rules = config.taxonomy_rules + self._primitive_sequence = config.global_rules.get("primitive_sequence", []) + self._fallback_flow = config.global_rules.get("fallback_flow", "primitives/clarify") + + def resolve_initial_flow(self, session: SessionState) -> Optional[FlowDefinition]: + """Resolve the first flow to execute when a call starts.""" + if self._primitive_sequence: + first = self._primitive_sequence[0] + return self._load_primitive(first) + return None + + def resolve_next_flow( + self, + session: SessionState, + assessment: Optional[RiskAssessment] = None, + current_exit: Optional[str] = None, + ) -> Optional[FlowDefinition]: + """ + Resolve the next flow based on current state and exit condition. + + Priority order: + 1. Hard-escalate → escalate_r3 (immediate, cannot be overridden) + 2. R3 assessment → domain escalate_r3 flow + 3. R2 assessment → domain escalate_r2 flow + 4. Explicit exit rule (on_complete, on_refused, etc.) + 5. Primitive sequence (if still in opening) + 6. Domain-specific recommended_flow from assessment + 7. Fallback → clarify + """ + # 1. Hard escalate overrides everything + if assessment and assessment.hard_escalate: + domain = assessment.primary_domain or "suicidal_ideation" + flow = self._load_domain_flow(domain, "escalate_r3") + if flow: + logger.warning("HARD ESCALATE: routing to %s/escalate_r3", domain) + return flow + # Fallback to generic handoff + return self._load_primitive("handoff") + + # 2-3. Risk-based routing + if assessment and assessment.risk_class == RiskClass.R3: + domain = assessment.primary_domain + if domain: + flow = self._load_domain_flow(domain, "escalate_r3") + if flow: + return flow + return self._load_primitive("handoff") + + if assessment and assessment.risk_class == RiskClass.R2: + domain = assessment.primary_domain + if domain: + flow = self._load_domain_flow(domain, "escalate_r2") + if flow: + return flow + return self._load_primitive("handoff") + + # 4. Explicit exit rule + if current_exit: + return self._resolve_exit(current_exit, session) + + # 5. Check if still in primitive sequence + prim_flow = self._advance_primitive_sequence(session) + if prim_flow: + return prim_flow + + # 6. Domain recommended flow + if assessment and assessment.recommended_flow: + domain = assessment.primary_domain + if domain: + flow = self._load_domain_flow(domain, assessment.recommended_flow) + if flow: + return flow + + # 7. Fallback + return self._load_primitive("clarify") + + def _resolve_exit( + self, exit_key: str, session: SessionState + ) -> Optional[FlowDefinition]: + """Resolve an exit rule like 'on_complete', 'on_refused', etc.""" + # Special exit targets + if exit_key == "end": + return None # Session over + if exit_key == "re_evaluate": + return None # Signal to re-run assessment + if exit_key == "evaluate_risk": + return None # Signal to run risk evaluation + if exit_key == "evaluate_concern": + return None # Signal to evaluate a patient concern + + # Try as primitive name + prim = self._load_primitive(exit_key) + if prim: + return prim + + # Try as domain flow (format: "domain/flow_id" or just "flow_id") + if "/" in exit_key: + domain, flow_id = exit_key.split("/", 1) + return self._load_domain_flow(domain, flow_id) + + return None + + def _advance_primitive_sequence( + self, session: SessionState + ) -> Optional[FlowDefinition]: + """Check if the session still needs to complete primitive sequence.""" + if session.call_phase != CallPhase.SESSION_START: + return None + + completed = set(session.domain_history) + for prim_name in self._primitive_sequence: + if prim_name not in completed: + return self._load_primitive(prim_name) + + # All primitives complete — advance to active call phase + return None + + def _load_primitive(self, name: str) -> Optional[FlowDefinition]: + """Load a primitive flow definition by name.""" + data = self._primitives.get(name) + if not data: + return None + return FlowDefinition.from_yaml(data, source=f"primitives/{name}") + + def _load_domain_flow( + self, domain: str, flow_id: str + ) -> Optional[FlowDefinition]: + """Load a domain-specific flow definition.""" + domain_flows = self._taxonomy_flows.get(domain, {}) + data = domain_flows.get(flow_id) + if not data: + return None + return FlowDefinition.from_yaml(data, source=f"taxonomy/{domain}/{flow_id}") + + +# --------------------------------------------------------------------------- +# Flow Definition (parsed from YAML) +# --------------------------------------------------------------------------- + +class FlowDefinition: + """A parsed conversation flow with steps and exit rules.""" + + def __init__( + self, + flow_id: str, + flow_type: str, + domain: Optional[str], + required_slots: List[str], + steps: List[FlowStepDef], + exit_rules: Dict[str, str], + source: str = "", + ): + self.flow_id = flow_id + self.flow_type = flow_type + self.domain = domain + self.required_slots = required_slots + self.steps = steps + self.exit_rules = exit_rules + self.source = source + + @classmethod + def from_yaml(cls, data: Dict[str, Any], source: str = "") -> FlowDefinition: + """Parse a flow definition from YAML data.""" + flow_id = data.get("flow_id", "unknown") + flow_type = data.get("type", "primitive") + domain = data.get("domain") + required_slots = data.get("required_slots", []) + exit_rules = data.get("exit", {}) + + steps = [] + for action in data.get("actions", []): + step = FlowStepDef.from_yaml(action) + steps.append(step) + + return cls( + flow_id=flow_id, + flow_type=flow_type, + domain=domain, + required_slots=required_slots, + steps=steps, + exit_rules=exit_rules, + source=source, + ) + + @property + def step_count(self) -> int: + return len(self.steps) + + def get_step(self, index: int) -> Optional[FlowStepDef]: + if 0 <= index < len(self.steps): + return self.steps[index] + return None + + def __repr__(self) -> str: + return f"FlowDefinition({self.flow_id}, type={self.flow_type}, steps={self.step_count})" + + +class FlowStepDef: + """A single step in a flow, parsed from YAML.""" + + def __init__( + self, + step_number: int, + step_type: str, + response_spec: ResponseSpecDef, + collects: List[str], + handoff_target: Optional[str] = None, + handoff_urgency: Optional[str] = None, + ): + self.step_number = step_number + self.step_type = step_type + self.response_spec = response_spec + self.collects = collects + self.handoff_target = handoff_target + self.handoff_urgency = handoff_urgency + + @classmethod + def from_yaml(cls, data: Dict[str, Any]) -> FlowStepDef: + step_number = data.get("step", 0) + step_type = data.get("type", "respond") + spec_data = data.get("response_spec", {}) + response_spec = ResponseSpecDef.from_yaml(spec_data) + collects = data.get("collects", []) + handoff_target = data.get("target") + handoff_urgency = data.get("urgency") + + return cls( + step_number=step_number, + step_type=step_type, + response_spec=response_spec, + collects=collects, + handoff_target=handoff_target, + handoff_urgency=handoff_urgency, + ) + + +class ResponseSpecDef: + """LLM response constraints parsed from YAML.""" + + def __init__( + self, + spec_id: str, + goal: str, + tone: str, + must_include: List[str], + must_ask: List[str], + must_not: List[str], + max_questions: int, + ): + self.spec_id = spec_id + self.goal = goal + self.tone = tone + self.must_include = must_include + self.must_ask = must_ask + self.must_not = must_not + self.max_questions = max_questions + + @classmethod + def from_yaml(cls, data: Dict[str, Any]) -> ResponseSpecDef: + return cls( + spec_id=data.get("id", ""), + goal=data.get("goal", ""), + tone=data.get("tone", "professional"), + must_include=data.get("must_include", []), + must_ask=data.get("must_ask", []), + must_not=data.get("must_not", []), + max_questions=data.get("max_questions", 0), + ) + + def validate_response(self, response_text: str) -> List[str]: + """ + Validate an LLM-generated response against this spec. + Returns list of violations (empty = valid). + """ + violations = [] + response_lower = response_text.lower() + + # Check must_include + for phrase in self.must_include: + if phrase.lower() not in response_lower: + violations.append(f"MISSING required phrase: '{phrase}'") + + # Check must_not — SAFETY CRITICAL, never relaxed + for phrase in self.must_not: + if phrase.lower() in response_lower: + violations.append(f"FORBIDDEN phrase found: '{phrase}'") + + # Check max_questions (count question marks) + question_count = response_text.count("?") + if question_count > self.max_questions and self.max_questions >= 0: + violations.append( + f"Too many questions: {question_count} > max {self.max_questions}" + ) + + return violations + + def to_prompt_constraints(self) -> str: + """Generate constraint text for LLM prompt injection.""" + lines = [f"Goal: {self.goal}", f"Tone: {self.tone}"] + if self.must_include: + lines.append(f"Must include: {', '.join(self.must_include)}") + if self.must_ask: + lines.append(f"Must ask about: {', '.join(self.must_ask)}") + if self.must_not: + lines.append(f"NEVER say: {', '.join(self.must_not)}") + if self.max_questions >= 0: + lines.append(f"Maximum questions: {self.max_questions}") + return "\n".join(lines) + + +# --------------------------------------------------------------------------- +# Flow Execution Engine +# --------------------------------------------------------------------------- + +class FlowEngine: + """ + Executes conversation flows and manages session state. + + Usage: + engine = FlowEngine(config) + session = engine.create_session("session-123") + + # Start call + result = engine.start_call(session) + # result.response_spec has what Avery should say + + # Process patient response + result = engine.process_turn(session, patient_text, assessment) + # result tells you: next response_spec, slots collected, flow status + """ + + def __init__(self, config: DecisionConfigLoader): + self._config = config + self._resolver = FlowResolver(config) + self._sessions: Dict[str, SessionState] = {} + + def create_session( + self, + session_id: str, + patient_id: Optional[str] = None, + tenant_id: Optional[str] = None, + ) -> SessionState: + """Create a new call session.""" + session = SessionState( + session_id=session_id, + patient_id=patient_id, + tenant_id=tenant_id, + call_phase=CallPhase.SESSION_START, + ) + self._sessions[session_id] = session + logger.info("Session created: %s (patient=%s, tenant=%s)", session_id, patient_id, tenant_id) + return session + + def get_session(self, session_id: str) -> Optional[SessionState]: + """Retrieve an existing session.""" + return self._sessions.get(session_id) + + def destroy_session(self, session_id: str) -> None: + """Destroy a session.""" + self._sessions.pop(session_id, None) + + def start_call(self, session: SessionState) -> TurnResult: + """ + Start a new call — returns the first flow step (greeting). + """ + flow = self._resolver.resolve_initial_flow(session) + if not flow: + return TurnResult( + outcome=TurnOutcome.END, + message="No initial flow available", + ) + + session.current_flow = flow.flow_id + session.current_step = 0 + + step = flow.get_step(0) + if not step: + return TurnResult(outcome=TurnOutcome.END, message="Flow has no steps") + + return TurnResult( + outcome=TurnOutcome.PROCEED, + flow_id=flow.flow_id, + flow_type=flow.flow_type, + step_number=0, + step_type=step.step_type, + response_spec=step.response_spec, + collects=step.collects, + handoff_target=step.handoff_target, + handoff_urgency=step.handoff_urgency, + ) + + def process_turn( + self, + session: SessionState, + patient_text: str, + assessment: Optional[RiskAssessment] = None, + extracted_slots: Optional[Dict[str, Any]] = None, + ) -> TurnResult: + """ + Process a patient turn and determine the next action. + + Args: + session: Current session state + patient_text: What the patient said + assessment: Risk assessment from Phase 1 engine + extracted_slots: Slots extracted from patient text (by NLU) + + Returns: + TurnResult with next response_spec or escalation action + """ + session.turn_count += 1 + + # Update slots from extracted values + if extracted_slots: + for k, v in extracted_slots.items(): + session.slots.set_slot(k, v) + + # SAFETY CHECK: If assessment triggers R3/hard_escalate, interrupt immediately + if assessment and (assessment.hard_escalate or assessment.risk_class == RiskClass.R3): + return self._handle_emergency_escalation(session, assessment) + + if assessment and assessment.risk_class == RiskClass.R2: + return self._handle_nurse_transfer(session, assessment) + + # Get current flow + current_flow = self._get_current_flow(session) + if not current_flow: + # No active flow — resolve from assessment + flow = self._resolver.resolve_next_flow(session, assessment) + if not flow: + return TurnResult(outcome=TurnOutcome.END, message="No applicable flow") + return self._enter_flow(session, flow) + + # Advance to next step in current flow + return self._advance_flow(session, current_flow, assessment) + + def _handle_emergency_escalation( + self, session: SessionState, assessment: RiskAssessment + ) -> TurnResult: + """Handle R3 / hard-escalate — interrupt everything, route to escalation.""" + domain = assessment.primary_domain or "unknown" + session.call_phase = CallPhase.ENDED + + # Try to load domain-specific escalation flow + flow = self._resolver.resolve_next_flow(session, assessment) + if flow and flow.steps: + step = flow.get_step(0) + logger.warning( + "EMERGENCY ESCALATION: session=%s domain=%s risk=%s", + session.session_id, domain, assessment.risk_class.value, + ) + return TurnResult( + outcome=TurnOutcome.ESCALATE, + flow_id=flow.flow_id, + flow_type=flow.flow_type, + step_number=0, + step_type=step.step_type if step else "respond", + response_spec=step.response_spec if step else None, + handoff_target=step.handoff_target if step else "clinical_nurse", + handoff_urgency="immediate", + risk_class=assessment.risk_class, + domain=domain, + message=f"R3 EMERGENCY: {domain}", + ) + + # Fallback: generic escalation + return TurnResult( + outcome=TurnOutcome.ESCALATE, + handoff_target="clinical_nurse", + handoff_urgency="immediate", + risk_class=assessment.risk_class, + domain=domain, + message=f"R3 EMERGENCY: {domain} — transfer to nurse immediately", + ) + + def _handle_nurse_transfer( + self, session: SessionState, assessment: RiskAssessment + ) -> TurnResult: + """Handle R2 — warm transfer to nurse.""" + domain = assessment.primary_domain or "unknown" + + flow = self._resolver.resolve_next_flow(session, assessment) + if flow and flow.steps: + step = flow.get_step(0) + return TurnResult( + outcome=TurnOutcome.HANDOFF, + flow_id=flow.flow_id, + flow_type=flow.flow_type, + step_number=0, + step_type=step.step_type if step else "respond", + response_spec=step.response_spec if step else None, + handoff_target=step.handoff_target if step else "clinical_nurse", + handoff_urgency="soon", + risk_class=assessment.risk_class, + domain=domain, + message=f"R2: {domain} — schedule nurse callback", + ) + + return TurnResult( + outcome=TurnOutcome.HANDOFF, + handoff_target="clinical_nurse", + handoff_urgency="soon", + risk_class=assessment.risk_class, + domain=domain, + message=f"R2: {domain} — schedule nurse callback", + ) + + def _enter_flow(self, session: SessionState, flow: FlowDefinition) -> TurnResult: + """Enter a new flow and return the first step.""" + session.current_flow = flow.flow_id + session.current_step = 0 + session.domain_history.append(flow.flow_id) + + step = flow.get_step(0) + if not step: + return TurnResult(outcome=TurnOutcome.PROCEED, message="Flow has no steps") + + return TurnResult( + outcome=TurnOutcome.PROCEED, + flow_id=flow.flow_id, + flow_type=flow.flow_type, + step_number=0, + step_type=step.step_type, + response_spec=step.response_spec, + collects=step.collects, + handoff_target=step.handoff_target, + handoff_urgency=step.handoff_urgency, + ) + + def _advance_flow( + self, + session: SessionState, + flow: FlowDefinition, + assessment: Optional[RiskAssessment], + ) -> TurnResult: + """Advance to the next step in the current flow.""" + next_step_idx = session.current_step + 1 + + if next_step_idx < flow.step_count: + # Move to next step + session.current_step = next_step_idx + step = flow.get_step(next_step_idx) + + return TurnResult( + outcome=TurnOutcome.PROCEED, + flow_id=flow.flow_id, + flow_type=flow.flow_type, + step_number=next_step_idx, + step_type=step.step_type, + response_spec=step.response_spec, + collects=step.collects, + handoff_target=step.handoff_target, + handoff_urgency=step.handoff_urgency, + ) + + # Flow complete — evaluate exit rules + exit_rules = flow.exit_rules + exit_target = exit_rules.get("on_complete", "end") + + # Check for special exits based on slot values + if "on_refused" in exit_rules and session.slots.get_slot("consent_given") == "no": + exit_target = exit_rules["on_refused"] + if "on_unclear" in exit_rules and session.slots.get_slot("clarification_text") is None: + exit_target = exit_rules.get("on_unclear", exit_target) + if "on_concern" in exit_rules: + # Check if any concern was raised during the flow + concern_slots = ["pain_level", "medication_adherence"] + for slot in concern_slots: + val = session.slots.get_slot(slot) + if val and isinstance(val, str) and any(w in val.lower() for w in ["severe", "bad", "not taking", "stopped"]): + exit_target = exit_rules["on_concern"] + break + + # Reset current flow + session.current_flow = None + session.current_step = 0 + + if exit_target == "end": + session.call_phase = CallPhase.ENDED + return TurnResult(outcome=TurnOutcome.END, message="Flow complete") + + if exit_target == "re_evaluate" or exit_target == "evaluate_risk": + # Signal to re-run the risk assessment and determine next flow + return TurnResult( + outcome=TurnOutcome.PROCEED, + message=f"Flow complete — re-evaluate ({exit_target})", + requires_reassessment=True, + ) + + # Resolve exit target as next flow + next_flow = self._resolver.resolve_next_flow(session, assessment, current_exit=exit_target) + if next_flow: + return self._enter_flow(session, next_flow) + + return TurnResult(outcome=TurnOutcome.END, message="No next flow resolved") + + def _get_current_flow(self, session: SessionState) -> Optional[FlowDefinition]: + """Get the current flow definition from session state.""" + if not session.current_flow: + return None + + # Check primitives first + prim = self._config.primitives.get(session.current_flow) + if prim: + return FlowDefinition.from_yaml(prim, source=f"primitives/{session.current_flow}") + + # Check taxonomy flows + for domain, flows in self._config.taxonomy_flows.items(): + if session.current_flow in flows: + return FlowDefinition.from_yaml( + flows[session.current_flow], + source=f"taxonomy/{domain}/{session.current_flow}", + ) + + return None + + +# --------------------------------------------------------------------------- +# Turn Result +# --------------------------------------------------------------------------- + +class TurnResult: + """Result of processing a conversational turn.""" + + def __init__( + self, + outcome: TurnOutcome, + flow_id: Optional[str] = None, + flow_type: Optional[str] = None, + step_number: int = 0, + step_type: Optional[str] = None, + response_spec: Optional[ResponseSpecDef] = None, + collects: Optional[List[str]] = None, + handoff_target: Optional[str] = None, + handoff_urgency: Optional[str] = None, + risk_class: Optional[RiskClass] = None, + domain: Optional[str] = None, + message: str = "", + requires_reassessment: bool = False, + ): + self.outcome = outcome + self.flow_id = flow_id + self.flow_type = flow_type + self.step_number = step_number + self.step_type = step_type + self.response_spec = response_spec + self.collects = collects or [] + self.handoff_target = handoff_target + self.handoff_urgency = handoff_urgency + self.risk_class = risk_class + self.domain = domain + self.message = message + self.requires_reassessment = requires_reassessment + + @property + def is_escalation(self) -> bool: + return self.outcome == TurnOutcome.ESCALATE + + @property + def is_handoff(self) -> bool: + return self.outcome in (TurnOutcome.ESCALATE, TurnOutcome.HANDOFF) + + @property + def is_end(self) -> bool: + return self.outcome == TurnOutcome.END + + @property + def prompt_constraints(self) -> Optional[str]: + """Get LLM prompt constraints from response spec.""" + if self.response_spec: + return self.response_spec.to_prompt_constraints() + return None + + def to_dict(self) -> Dict[str, Any]: + """Serialize for API response.""" + result = { + "outcome": self.outcome.value, + "flow_id": self.flow_id, + "flow_type": self.flow_type, + "step_number": self.step_number, + "step_type": self.step_type, + "collects": self.collects, + "handoff_target": self.handoff_target, + "handoff_urgency": self.handoff_urgency, + "message": self.message, + "requires_reassessment": self.requires_reassessment, + } + if self.response_spec: + result["response_spec"] = { + "id": self.response_spec.spec_id, + "goal": self.response_spec.goal, + "tone": self.response_spec.tone, + "must_include": self.response_spec.must_include, + "must_ask": self.response_spec.must_ask, + "must_not": self.response_spec.must_not, + "max_questions": self.response_spec.max_questions, + } + if self.risk_class: + result["risk_class"] = self.risk_class.value + if self.domain: + result["domain"] = self.domain + return result + + def __repr__(self) -> str: + return ( + f"TurnResult(outcome={self.outcome.value}, flow={self.flow_id}, " + f"step={self.step_number}, type={self.step_type})" + ) diff --git a/decision/engine/journey_orchestrator.py b/decision/engine/journey_orchestrator.py new file mode 100644 index 0000000000000000000000000000000000000000..825d4175f1fabaf27a16a815b056c2b9f588b92c --- /dev/null +++ b/decision/engine/journey_orchestrator.py @@ -0,0 +1,478 @@ +""" +Journey Orchestrator (Phase 3B). + +Manages multi-day patient engagement journeys with: + - Enrollment eligibility and deduplication + - Contact scheduling (offset days, time windows, channel selection) + - Contact caps (max per day/week, quiet hours) + - Wedge priority and conflict resolution + - Post-escalation suppression + - Journey step tracking and agenda management + +Usage: + orchestrator = JourneyOrchestrator(config, tenant_manager) + + # Enroll a patient + enrollment = orchestrator.enroll(patient_id, wedge_type, tenant_id, trigger_event_id) + + # Check if a contact is allowed right now + allowed, reason = orchestrator.can_contact(patient_id, channel="voice") + + # Get the next scheduled step + step = orchestrator.get_next_step(enrollment_id) +""" + +from __future__ import annotations + +import logging +from dataclasses import dataclass, field +from datetime import datetime, timedelta, timezone +from typing import Any, Dict, List, Optional, Set, Tuple + +from decision.engine.config_loader import DecisionConfigLoader +from decision.engine.tenant_manager import TenantManager + +logger = logging.getLogger("decision.journey_orchestrator") + + +# --------------------------------------------------------------------------- +# Data models +# --------------------------------------------------------------------------- + +@dataclass +class Enrollment: + """A patient enrolled in a journey.""" + enrollment_id: str + patient_id: str + wedge_type: str + tenant_id: str + trigger_event_id: str + status: str = "active" # active, completed, withdrawn, paused + enrolled_at: datetime = field(default_factory=lambda: datetime.now(timezone.utc)) + current_step: int = 0 + completed_steps: List[int] = field(default_factory=list) + last_contact_at: Optional[datetime] = None + last_contact_channel: Optional[str] = None + next_scheduled_at: Optional[datetime] = None + + +@dataclass +class ContactRecord: + """Record of a patient contact for rate limiting.""" + patient_id: str + channel: str # voice, sms + timestamp: datetime + wedge_type: str + risk_class: Optional[str] = None + + +@dataclass +class JourneyStep: + """A step in a journey to be executed.""" + step_index: int + step_name: str + channel: str + offset_days: int + window_start_hour: int + window_end_hour: int + agenda_sequence: List[str] + conditional_probes: List[Dict[str, Any]] + pre_populated_slots: List[str] + + +@dataclass +class ContactDecision: + """Result of a contact eligibility check.""" + allowed: bool + reason: str + retry_after: Optional[datetime] = None + + +# --------------------------------------------------------------------------- +# Journey Orchestrator +# --------------------------------------------------------------------------- + +class JourneyOrchestrator: + """ + Orchestrates multi-day patient engagement journeys. + """ + + def __init__( + self, + config: DecisionConfigLoader, + tenant_manager: Optional[TenantManager] = None, + ): + self._config = config + self._tenant_manager = tenant_manager + self._journeys = config.journeys + self._orchestrator = config.orchestrator + + # In-memory stores (production: replace with persistent storage) + self._enrollments: Dict[str, Enrollment] = {} # enrollment_id -> Enrollment + self._patient_enrollments: Dict[str, List[str]] = {} # patient_id -> [enrollment_ids] + self._contact_history: Dict[str, List[ContactRecord]] = {} # patient_id -> [ContactRecord] + + # Load orchestrator rules + self._contact_caps = self._orchestrator.get("contact_caps", {}) + self._wedge_priority = self._orchestrator.get("wedge_priority", {}) + self._conflict_rules = self._orchestrator.get("conflict_resolution", {}) + self._enrollment_rules = self._orchestrator.get("enrollment_rules", {}) + self._suppression_rules = self._orchestrator.get("wedge_suppression", {}) + + logger.info( + "JourneyOrchestrator initialized: %d journeys, %d wedge priorities", + len(self._journeys), + len(self._wedge_priority.get("priorities", [])), + ) + + # ------------------------------------------------------------------ + # Enrollment + # ------------------------------------------------------------------ + + def enroll( + self, + patient_id: str, + wedge_type: str, + tenant_id: str, + trigger_event_id: str, + ) -> Tuple[Optional[Enrollment], str]: + """ + Enroll a patient in a journey. + + Returns: + (Enrollment, reason) — Enrollment object if successful, None if rejected. + """ + # Check journey exists + if wedge_type not in self._journeys: + return None, f"Unknown wedge type: {wedge_type}" + + # Check tenant enables this wedge + if self._tenant_manager: + if not self._tenant_manager.is_wedge_enabled(tenant_id, wedge_type): + return None, f"Wedge '{wedge_type}' not enabled for tenant '{tenant_id}'" + + # Check deduplication + existing = self._patient_enrollments.get(patient_id, []) + for eid in existing: + enrollment = self._enrollments.get(eid) + if enrollment and enrollment.status == "active": + if enrollment.wedge_type == wedge_type and enrollment.trigger_event_id == trigger_event_id: + return None, f"Duplicate enrollment: patient already in {wedge_type} for event {trigger_event_id}" + + # Check max active enrollments + max_active = self._enrollment_rules.get("max_active_per_patient", 3) + active_count = sum( + 1 for eid in existing + if self._enrollments.get(eid, Enrollment("", "", "", "", "")).status == "active" + ) + if active_count >= max_active: + return None, f"Max active enrollments ({max_active}) reached for patient {patient_id}" + + # Check cooldown + cooldown_days = self._get_cooldown(wedge_type) + if cooldown_days: + for eid in existing: + prev = self._enrollments.get(eid) + if prev and prev.wedge_type == wedge_type and prev.status == "completed": + elapsed = (datetime.now(timezone.utc) - prev.enrolled_at).days + if elapsed < cooldown_days: + return None, f"Cooldown active: {cooldown_days - elapsed} days remaining for {wedge_type}" + + # Create enrollment + import uuid + enrollment_id = f"enr-{uuid.uuid4().hex[:12]}" + enrollment = Enrollment( + enrollment_id=enrollment_id, + patient_id=patient_id, + wedge_type=wedge_type, + tenant_id=tenant_id, + trigger_event_id=trigger_event_id, + ) + + # Calculate first contact schedule + journey = self._journeys[wedge_type] + steps = journey.get("steps", []) + if steps: + first_step = steps[0] + offset = first_step.get("offset_days", 1) + enrollment.next_scheduled_at = datetime.now(timezone.utc) + timedelta(days=offset) + + self._enrollments[enrollment_id] = enrollment + self._patient_enrollments.setdefault(patient_id, []).append(enrollment_id) + + logger.info( + "Enrolled patient %s in %s (enrollment=%s, tenant=%s)", + patient_id, wedge_type, enrollment_id, tenant_id, + ) + return enrollment, "enrolled" + + # ------------------------------------------------------------------ + # Contact eligibility + # ------------------------------------------------------------------ + + def can_contact( + self, + patient_id: str, + channel: str = "voice", + now: Optional[datetime] = None, + ) -> ContactDecision: + """ + Check if a patient can be contacted right now. + + Evaluates: + 1. Quiet hours (default 9PM-9AM) + 2. Channel-specific daily/weekly caps + 3. Post-escalation suppression + 4. Voice cooldown (4h between voice calls) + """ + now = now or datetime.now(timezone.utc) + + # 1. Quiet hours (YAML may store as "21:00" or 21) + raw_start = self._contact_caps.get("quiet_hours", {}).get("start", 21) + raw_end = self._contact_caps.get("quiet_hours", {}).get("end", 9) + quiet_start = int(str(raw_start).split(":")[0]) + quiet_end = int(str(raw_end).split(":")[0]) + current_hour = now.hour + if quiet_start <= current_hour or current_hour < quiet_end: + resume_at = now.replace(hour=quiet_end, minute=0, second=0, microsecond=0) + if current_hour >= quiet_start: + resume_at += timedelta(days=1) + return ContactDecision( + allowed=False, + reason=f"Quiet hours ({quiet_start}:00-{quiet_end}:00)", + retry_after=resume_at, + ) + + # 2. Daily/weekly caps + history = self._contact_history.get(patient_id, []) + today = now.date() + week_ago = now - timedelta(days=7) + + daily_total = sum(1 for r in history if r.timestamp.date() == today) + weekly_total = sum(1 for r in history if r.timestamp >= week_ago) + + max_daily = self._contact_caps.get("max_contacts_per_day", 2) + max_weekly = self._contact_caps.get("max_contacts_per_week", 7) + + if daily_total >= max_daily: + tomorrow = now.replace(hour=quiet_end, minute=0) + timedelta(days=1) + return ContactDecision( + allowed=False, + reason=f"Daily contact cap reached ({daily_total}/{max_daily})", + retry_after=tomorrow, + ) + + if weekly_total >= max_weekly: + return ContactDecision( + allowed=False, + reason=f"Weekly contact cap reached ({weekly_total}/{max_weekly})", + ) + + # Channel-specific caps (stored as list of {channel, max_per_day, ...}) + raw_channel_caps = self._contact_caps.get("channel_caps", []) + channel_caps = {} + if isinstance(raw_channel_caps, list): + for entry in raw_channel_caps: + if isinstance(entry, dict) and entry.get("channel") == channel: + channel_caps = entry + break + elif isinstance(raw_channel_caps, dict): + channel_caps = raw_channel_caps.get(channel, {}) + ch_max_daily = channel_caps.get("max_per_day", max_daily) + ch_daily = sum(1 for r in history if r.timestamp.date() == today and r.channel == channel) + if ch_daily >= ch_max_daily: + return ContactDecision( + allowed=False, + reason=f"{channel} daily cap reached ({ch_daily}/{ch_max_daily})", + ) + + # 3. Post-escalation suppression + suppression_rules = self._suppression_rules.get("post_escalation", []) + for rule in suppression_rules: + risk_trigger = rule.get("after_risk_class") + suppress_hours = rule.get("suppress_all_hours", 0) + if risk_trigger and suppress_hours: + for record in reversed(history): + if record.risk_class == risk_trigger: + suppress_until = record.timestamp + timedelta(hours=suppress_hours) + if now < suppress_until: + return ContactDecision( + allowed=False, + reason=f"Post-{risk_trigger} suppression ({suppress_hours}h)", + retry_after=suppress_until, + ) + + # 4. Voice cooldown + if channel == "voice": + cooldown_hours = self._contact_caps.get("voice_cooldown_hours", 4) + voice_records = [r for r in history if r.channel == "voice"] + if voice_records: + last_voice = max(voice_records, key=lambda r: r.timestamp) + cooldown_until = last_voice.timestamp + timedelta(hours=cooldown_hours) + if now < cooldown_until: + return ContactDecision( + allowed=False, + reason=f"Voice cooldown ({cooldown_hours}h since last voice contact)", + retry_after=cooldown_until, + ) + + return ContactDecision(allowed=True, reason="Contact allowed") + + def record_contact( + self, + patient_id: str, + channel: str, + wedge_type: str, + risk_class: Optional[str] = None, + ) -> None: + """Record a contact for rate limiting.""" + record = ContactRecord( + patient_id=patient_id, + channel=channel, + timestamp=datetime.now(timezone.utc), + wedge_type=wedge_type, + risk_class=risk_class, + ) + self._contact_history.setdefault(patient_id, []).append(record) + + # ------------------------------------------------------------------ + # Journey step management + # ------------------------------------------------------------------ + + def get_next_step(self, enrollment_id: str) -> Optional[JourneyStep]: + """Get the next scheduled step for an enrollment.""" + enrollment = self._enrollments.get(enrollment_id) + if not enrollment or enrollment.status != "active": + return None + + journey = self._journeys.get(enrollment.wedge_type, {}) + steps = journey.get("steps", []) + + if enrollment.current_step >= len(steps): + return None + + step_data = steps[enrollment.current_step] + return JourneyStep( + step_index=enrollment.current_step, + step_name=step_data.get("name", f"step_{enrollment.current_step}"), + channel=step_data.get("channel", "voice"), + offset_days=step_data.get("offset_days", 0), + window_start_hour=step_data.get("window_start_hour", 9), + window_end_hour=step_data.get("window_end_hour", 20), + agenda_sequence=step_data.get("agenda_sequence", []), + conditional_probes=step_data.get("conditional_probes", []), + pre_populated_slots=step_data.get("pre_populated_slots", []), + ) + + def advance_step(self, enrollment_id: str) -> bool: + """Mark the current step as completed and advance to next.""" + enrollment = self._enrollments.get(enrollment_id) + if not enrollment or enrollment.status != "active": + return False + + enrollment.completed_steps.append(enrollment.current_step) + enrollment.current_step += 1 + enrollment.last_contact_at = datetime.now(timezone.utc) + + journey = self._journeys.get(enrollment.wedge_type, {}) + steps = journey.get("steps", []) + + if enrollment.current_step >= len(steps): + enrollment.status = "completed" + logger.info("Enrollment %s completed all steps", enrollment_id) + return True + + # Schedule next step + next_step = steps[enrollment.current_step] + offset = next_step.get("offset_days", 0) + enrollment.next_scheduled_at = datetime.now(timezone.utc) + timedelta(days=offset) + + logger.info( + "Enrollment %s advanced to step %d (scheduled in %d days)", + enrollment_id, enrollment.current_step, offset, + ) + return True + + # ------------------------------------------------------------------ + # Conflict resolution + # ------------------------------------------------------------------ + + def resolve_conflict( + self, patient_id: str + ) -> Optional[str]: + """ + When multiple enrollments are due on the same day, + return the enrollment_id that should proceed (highest priority wins). + """ + enrollment_ids = self._patient_enrollments.get(patient_id, []) + active = [ + self._enrollments[eid] + for eid in enrollment_ids + if self._enrollments.get(eid, Enrollment("", "", "", "", "")).status == "active" + ] + + if len(active) <= 1: + return active[0].enrollment_id if active else None + + # Get priorities + priorities = { + p.get("wedge_type"): p.get("priority", 0) + for p in self._wedge_priority.get("priorities", []) + } + + # Sort by priority descending + active.sort(key=lambda e: priorities.get(e.wedge_type, 0), reverse=True) + + winner = active[0] + for loser in active[1:]: + if loser.next_scheduled_at and winner.next_scheduled_at: + if loser.next_scheduled_at.date() == winner.next_scheduled_at.date(): + # Defer loser by 24h + loser.next_scheduled_at += timedelta(hours=24) + logger.info( + "Conflict resolution: %s (%s) wins over %s (%s), deferring 24h", + winner.wedge_type, winner.enrollment_id, + loser.wedge_type, loser.enrollment_id, + ) + + return winner.enrollment_id + + # ------------------------------------------------------------------ + # Status and listing + # ------------------------------------------------------------------ + + def get_patient_enrollments(self, patient_id: str) -> List[Enrollment]: + """Get all enrollments for a patient.""" + enrollment_ids = self._patient_enrollments.get(patient_id, []) + return [ + self._enrollments[eid] + for eid in enrollment_ids + if eid in self._enrollments + ] + + def get_enrollment(self, enrollment_id: str) -> Optional[Enrollment]: + return self._enrollments.get(enrollment_id) + + def withdraw(self, enrollment_id: str, reason: str = "") -> bool: + enrollment = self._enrollments.get(enrollment_id) + if not enrollment: + return False + enrollment.status = "withdrawn" + logger.info("Enrollment %s withdrawn: %s", enrollment_id, reason) + return True + + # ------------------------------------------------------------------ + # Internal helpers + # ------------------------------------------------------------------ + + def _get_cooldown(self, wedge_type: str) -> Optional[int]: + """Get cooldown days for a wedge type.""" + cooldowns = self._enrollment_rules.get("cooldown_days", {}) + return cooldowns.get(wedge_type) + + def _get_wedge_priority(self, wedge_type: str) -> int: + priorities = { + p.get("wedge_type"): p.get("priority", 0) + for p in self._wedge_priority.get("priorities", []) + } + return priorities.get(wedge_type, 0) diff --git a/decision/engine/models.py b/decision/engine/models.py new file mode 100644 index 0000000000000000000000000000000000000000..9beb7870bac9f3dda7ffbc95b850d9777f21fe19 --- /dev/null +++ b/decision/engine/models.py @@ -0,0 +1,322 @@ +""" +Core data models for the Decision Engine. + +All models are immutable dataclasses to prevent accidental mutation +during safety-critical evaluation pipelines. +""" + +from __future__ import annotations + +import enum +from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional + + +# --------------------------------------------------------------------------- +# Enums +# --------------------------------------------------------------------------- + +class ConfidenceTier(enum.Enum): + """Confidence tier for taxonomy trigger matches.""" + HIGH = "high" + MEDIUM = "medium" + LOW = "low" + NONE = "none" + + def __ge__(self, other: ConfidenceTier) -> bool: + order = {self.HIGH: 3, self.MEDIUM: 2, self.LOW: 1, self.NONE: 0} + return order[self] >= order[other] + + def __gt__(self, other: ConfidenceTier) -> bool: + order = {self.HIGH: 3, self.MEDIUM: 2, self.LOW: 1, self.NONE: 0} + return order[self] > order[other] + + def __le__(self, other: ConfidenceTier) -> bool: + order = {self.HIGH: 3, self.MEDIUM: 2, self.LOW: 1, self.NONE: 0} + return order[self] <= order[other] + + def __lt__(self, other: ConfidenceTier) -> bool: + order = {self.HIGH: 3, self.MEDIUM: 2, self.LOW: 1, self.NONE: 0} + return order[self] < order[other] + + +class RiskClass(enum.Enum): + """Clinical risk classification tier.""" + R0 = "R0" # No clinical concern + R1 = "R1" # Low-level concern, routine follow-up + R2 = "R2" # Moderate concern, warm transfer to nurse + R3 = "R3" # Emergent, instruct to call 911 + transfer + + @property + def is_emergent(self) -> bool: + return self == RiskClass.R3 + + @property + def requires_nurse(self) -> bool: + return self in (RiskClass.R2, RiskClass.R3) + + @property + def severity_rank(self) -> int: + return {self.R0: 0, self.R1: 1, self.R2: 2, self.R3: 3}[self] + + def __ge__(self, other: RiskClass) -> bool: + return self.severity_rank >= other.severity_rank + + def __gt__(self, other: RiskClass) -> bool: + return self.severity_rank > other.severity_rank + + def __le__(self, other: RiskClass) -> bool: + return self.severity_rank <= other.severity_rank + + def __lt__(self, other: RiskClass) -> bool: + return self.severity_rank < other.severity_rank + + +class MatchType(enum.Enum): + """Type of lexical match that fired.""" + PHRASE = "phrase" + REGEX = "regex" + PARTIAL = "partial" + + +class NegationAction(enum.Enum): + """What to do when negation is detected.""" + SUPPRESS = "suppress" # Remove domain nomination entirely + DOWNGRADE_CONFIDENCE = "downgrade_confidence" # Drop confidence one tier + + +class TurnOutcome(enum.Enum): + """Possible outcomes after a conversational turn.""" + PROCEED = "proceed" + CLARIFY = "clarify" + ESCALATE = "escalate" + HANDOFF = "handoff" + END = "end" + + +class FlowType(enum.Enum): + """Type of conversation flow.""" + SCREENING = "screening" + ESCALATION = "escalation" + CLARIFICATION = "clarification" + RESOLUTION = "resolution" + HANDOFF = "handoff" + PRIMITIVE = "primitive" + + +class CallPhase(enum.Enum): + """Phase of the current call.""" + SESSION_START = "session_start" + ACTIVE_CALL = "active_call" + ENDED = "ended" + + +# --------------------------------------------------------------------------- +# Trigger & Match Models +# --------------------------------------------------------------------------- + +@dataclass(frozen=True) +class TriggerMatch: + """A single lexical match from a taxonomy trigger.""" + domain: str + confidence_tier: ConfidenceTier + match_type: MatchType + matched_text: str # The phrase/pattern that matched + matched_span: str # The actual text span from patient input + priority: int # Domain priority from triggers.yaml + + +@dataclass(frozen=True) +class NegationResult: + """Result of negation analysis on a domain match.""" + is_negated: bool + action: NegationAction + matched_pattern: str = "" # Which negation pattern matched + original_confidence: ConfidenceTier = ConfidenceTier.NONE + adjusted_confidence: ConfidenceTier = ConfidenceTier.NONE + + +@dataclass(frozen=True) +class DomainNomination: + """A nominated clinical domain with combined confidence from ML + lexical signals.""" + domain: str + display_name: str + confidence_tier: ConfidenceTier + priority: int # From triggers.yaml priority field + target_risk_class: Optional[RiskClass] # Default risk from rules.yaml + trigger_matches: tuple # Tuple of TriggerMatch (frozen) + negation_result: Optional[NegationResult] = None + ml_label: Optional[str] = None # DriveHealthBERT predicted label + ml_confidence: Optional[float] = None # DriveHealthBERT probability + recommended_flow: Optional[str] = None # From rules.yaml decision_rules + + @property + def is_negated(self) -> bool: + return self.negation_result is not None and self.negation_result.is_negated + + @property + def is_safety_critical(self) -> bool: + """R3 domains or hard-escalate domains.""" + return self.target_risk_class == RiskClass.R3 + + +# --------------------------------------------------------------------------- +# Risk Assessment Models +# --------------------------------------------------------------------------- + +@dataclass(frozen=True) +class RiskRuleMatch: + """A risk escalation rule that fired.""" + rule_id: str + domain: str + risk_class: RiskClass + conditions_met: Dict[str, Any] = field(default_factory=dict) + context_conditions: Optional[Dict[str, Any]] = None + + +@dataclass(frozen=True) +class SuppressionResult: + """Result of domain suppression evaluation.""" + suppressed: bool + suppressor_domain: Optional[str] = None + rule_reason: Optional[str] = None + + +@dataclass(frozen=True) +class RiskAssessment: + """Complete risk assessment for a patient utterance.""" + # Primary result + risk_class: RiskClass + primary_domain: Optional[str] + # All nominated domains (ranked by priority) + domain_nominations: tuple # Tuple of DomainNomination + # Which rules fired + matched_rules: tuple # Tuple of RiskRuleMatch + # Suppression results + suppressions: tuple = () # Tuple of SuppressionResult + # Metadata + hard_escalate: bool = False # suicidal_ideation / homicidal_ideation + safety_override: bool = False # Lexical safety signal regardless of ML + ml_label: Optional[str] = None + ml_confidence: Optional[float] = None + recommended_flow: Optional[str] = None + recommended_action: Optional[TurnOutcome] = None + + @property + def requires_911(self) -> bool: + return self.risk_class == RiskClass.R3 + + @property + def requires_nurse_transfer(self) -> bool: + return self.risk_class >= RiskClass.R2 + + def to_dict(self) -> Dict[str, Any]: + """Serialize for API response.""" + return { + "risk_class": self.risk_class.value, + "primary_domain": self.primary_domain, + "requires_911": self.requires_911, + "requires_nurse_transfer": self.requires_nurse_transfer, + "hard_escalate": self.hard_escalate, + "safety_override": self.safety_override, + "ml_label": self.ml_label, + "ml_confidence": self.ml_confidence, + "recommended_flow": self.recommended_flow, + "recommended_action": self.recommended_action.value if self.recommended_action else None, + "domain_nominations": [ + { + "domain": n.domain, + "confidence_tier": n.confidence_tier.value, + "priority": n.priority, + "target_risk_class": n.target_risk_class.value if n.target_risk_class else None, + "is_negated": n.is_negated, + "recommended_flow": n.recommended_flow, + "trigger_match_count": len(n.trigger_matches), + } + for n in self.domain_nominations + ], + "matched_rules": [ + { + "rule_id": r.rule_id, + "domain": r.domain, + "risk_class": r.risk_class.value, + } + for r in self.matched_rules + ], + } + + +# --------------------------------------------------------------------------- +# Flow Execution Models (Phase 2 — stubs for forward compatibility) +# --------------------------------------------------------------------------- + +@dataclass(frozen=True) +class ResponseSpec: + """LLM response constraints for a flow step.""" + spec_id: str + goal: str + tone: str + must_include: tuple = () + must_ask: tuple = () + must_not: tuple = () + max_questions: int = 0 + + +@dataclass(frozen=True) +class FlowStep: + """A single step in a conversation flow.""" + step_number: int + step_type: str # "ask", "respond", "handoff" + response_spec: ResponseSpec + collects: tuple = () # Slot names to extract + handoff_target: Optional[str] = None + handoff_urgency: Optional[str] = None + + +@dataclass(frozen=True) +class ConversationFlow: + """A complete conversation flow definition.""" + flow_id: str + flow_type: FlowType + domain: Optional[str] + required_slots: tuple = () + steps: tuple = () # Tuple of FlowStep + exit_rules: Dict[str, str] = field(default_factory=dict) + + +# --------------------------------------------------------------------------- +# Session State Models (Phase 2 — stubs for forward compatibility) +# --------------------------------------------------------------------------- + +@dataclass +class SlotState: + """Mutable slot tracker for an active conversation.""" + slots: Dict[str, Any] = field(default_factory=dict) + + def set_slot(self, name: str, value: Any) -> None: + self.slots[name] = value + + def get_slot(self, name: str) -> Optional[Any]: + return self.slots.get(name) + + def has_slot(self, name: str) -> bool: + return name in self.slots + + def has_all(self, slot_names: List[str]) -> bool: + return all(name in self.slots for name in slot_names) + + +@dataclass +class SessionState: + """Mutable state for an active call session.""" + session_id: str + patient_id: Optional[str] = None + tenant_id: Optional[str] = None + call_phase: CallPhase = CallPhase.SESSION_START + current_flow: Optional[str] = None + current_step: int = 0 + agenda_position: int = 0 + slots: SlotState = field(default_factory=SlotState) + domain_history: List[str] = field(default_factory=list) + risk_history: List[RiskAssessment] = field(default_factory=list) + turn_count: int = 0 diff --git a/decision/engine/risk_classifier.py b/decision/engine/risk_classifier.py new file mode 100644 index 0000000000000000000000000000000000000000..84bca6a42a83238c08572a3ad5425cc9a05f8770 --- /dev/null +++ b/decision/engine/risk_classifier.py @@ -0,0 +1,456 @@ +""" +Risk Classifier. + +Evaluates domain nominations against global risk escalation rules to +produce a final RiskAssessment with R0/R1/R2/R3 classification. + +Evaluation pipeline: + 1. Check hard-escalate domains (suicidal_ideation → always R3) + 2. For each nominated domain, evaluate risk_escalation_rules + 3. Apply domain suppression rules (R1 wound_concern suppresses R2 wound_infection) + 4. Select highest risk class across all active nominations + 5. Determine recommended action (proceed / clarify / escalate / handoff) + +Safety invariants: + - Hard-escalate domains CANNOT be suppressed + - R3 can never be downgraded by suppression + - When no rules match, default to the domain's target_risk_class + - When no target_risk_class exists, default to R1 (fail-open) + - Context-aware rules require explicit context; they fail closed (don't fire) + when context is unavailable +""" + +from __future__ import annotations + +import logging +from typing import Any, Dict, List, Optional, Set, Tuple + +from decision.engine.config_loader import DecisionConfigLoader +from decision.engine.models import ( + ConfidenceTier, + DomainNomination, + RiskAssessment, + RiskClass, + RiskRuleMatch, + SuppressionResult, + TurnOutcome, +) + +logger = logging.getLogger("decision.risk_classifier") + + +class RiskClassifier: + """ + Classifies risk from domain nominations using global rules. + + Usage: + classifier = RiskClassifier(config) + assessment = classifier.assess( + nominations=nominations, + slot_values={"shortness_of_breath": "yes"}, + patient_context=None, # Phase 3: FHIR data + ) + """ + + def __init__(self, config: DecisionConfigLoader): + self._config = config + self._hard_escalate: Set[str] = config.hard_escalate_domains + self._safety_precedence: List[str] = config.safety_precedence + self._risk_rules: List[Dict[str, Any]] = config.risk_escalation_rules + self._suppression_rules: List[Dict[str, Any]] = config.domain_suppression_rules + + def assess( + self, + nominations: List[DomainNomination], + slot_values: Optional[Dict[str, str]] = None, + patient_context: Optional[Dict[str, Any]] = None, + ml_label: Optional[str] = None, + ml_confidence: Optional[float] = None, + ) -> RiskAssessment: + """ + Produce a complete risk assessment from domain nominations. + + Args: + nominations: Ranked domain nominations from DomainNominator + slot_values: Currently filled slots (from flow execution) + patient_context: FHIR-derived patient context (Phase 3) + ml_label: Original DriveHealthBERT label + ml_confidence: Original DriveHealthBERT confidence + + Returns: + RiskAssessment with final risk class, matched rules, etc. + """ + if not nominations: + return self._empty_assessment(ml_label, ml_confidence) + + slot_values = slot_values or {} + active_nominations = [n for n in nominations if not n.is_negated] + + # Step 1: Check hard-escalate domains + hard_escalate = False + hard_domain = None + for nom in active_nominations: + if nom.domain in self._hard_escalate: + hard_escalate = True + hard_domain = nom.domain + logger.warning( + "HARD ESCALATE triggered: domain=%s", nom.domain + ) + break + + # Step 2: Evaluate risk rules for each nomination + all_rule_matches: List[RiskRuleMatch] = [] + for nom in active_nominations: + matches = self._evaluate_rules_for_domain( + nom.domain, slot_values, patient_context + ) + all_rule_matches.extend(matches) + + # Step 3: Apply domain suppression + suppressions: List[SuppressionResult] = [] + suppressed_domains: Set[str] = set() + if not hard_escalate: + suppressions, suppressed_domains = self._evaluate_suppressions( + active_nominations + ) + + # Step 4: Determine highest risk class + risk_class = self._determine_risk_class( + nominations=active_nominations, + rule_matches=all_rule_matches, + suppressed_domains=suppressed_domains, + hard_escalate=hard_escalate, + hard_domain=hard_domain, + ) + + # Step 5: Determine primary domain + primary_domain = self._select_primary_domain( + active_nominations, suppressed_domains, hard_domain + ) + + # Step 6: Determine recommended action + recommended_action = self._determine_action(risk_class) + + # Step 7: Determine recommended flow from primary domain + recommended_flow = None + for nom in active_nominations: + if nom.domain == primary_domain and nom.recommended_flow: + recommended_flow = nom.recommended_flow + break + + # Safety override flag + safety_override = any( + nom.confidence_tier >= ConfidenceTier.HIGH + and nom.domain in set(self._safety_precedence) + and nom.domain not in suppressed_domains + for nom in active_nominations + ) + + return RiskAssessment( + risk_class=risk_class, + primary_domain=primary_domain, + domain_nominations=tuple(nominations), + matched_rules=tuple(all_rule_matches), + suppressions=tuple(suppressions), + hard_escalate=hard_escalate, + safety_override=safety_override, + ml_label=ml_label, + ml_confidence=ml_confidence, + recommended_flow=recommended_flow, + recommended_action=recommended_action, + ) + + # ------------------------------------------------------------------ + # Internal evaluation + # ------------------------------------------------------------------ + + def _evaluate_rules_for_domain( + self, + domain: str, + slot_values: Dict[str, str], + patient_context: Optional[Dict[str, Any]], + ) -> List[RiskRuleMatch]: + """Evaluate all global risk rules for a specific domain.""" + matches = [] + + for rule in self._risk_rules: + rule_id = rule.get("id", "unknown") + conditions = rule.get("if", {}) + result = rule.get("then", {}) + + # Check domain match + rule_domain = conditions.get("domain") + if rule_domain != domain: + continue + + # Check slot conditions + slots_present = conditions.get("slots_present", []) + slot_value_conditions = conditions.get("slot_values", {}) + context_conditions = conditions.get("context") + + # All required slots must be present + slots_ok = all( + slot_name in slot_values for slot_name in slots_present + ) + + # All slot value conditions must match + values_ok = all( + slot_values.get(k) == v + for k, v in slot_value_conditions.items() + ) + + # Context conditions (Phase 3) + context_ok = True + if context_conditions: + if patient_context is None: + # Fail closed: context required but not available + context_ok = False + else: + context_ok = self._evaluate_context_conditions( + context_conditions, patient_context + ) + + if slots_ok and values_ok and context_ok: + risk_str = result.get("risk_class", "R1") + try: + risk = RiskClass(risk_str) + except ValueError: + risk = RiskClass.R1 + + matches.append( + RiskRuleMatch( + rule_id=rule_id, + domain=domain, + risk_class=risk, + conditions_met=slot_value_conditions, + context_conditions=context_conditions, + ) + ) + + return matches + + def _evaluate_context_conditions( + self, + conditions: Dict[str, Any], + patient_context: Dict[str, Any], + ) -> bool: + """ + Evaluate FHIR context conditions against patient context. + + Phase 3: Full implementation. Currently supports: + - patient_has_condition: list of ICD-10 patterns + - medication_count_above: int threshold + """ + # patient_has_condition: check ICD-10 codes + required_conditions = conditions.get("patient_has_condition", []) + if required_conditions: + patient_icd_codes = patient_context.get("active_conditions", []) + if not self._match_icd_patterns(required_conditions, patient_icd_codes): + return False + + # medication_count_above: check polypharmacy + med_threshold = conditions.get("medication_count_above") + if med_threshold is not None: + med_count = patient_context.get("active_medication_count", 0) + if med_count <= med_threshold: + return False + + return True + + @staticmethod + def _match_icd_patterns( + patterns: List[str], patient_codes: List[str] + ) -> bool: + """Check if any patient ICD-10 code matches any required pattern.""" + import re + + for pattern in patterns: + # Convert ICD-10 wildcard to regex (e.g., "I50.*" → "I50\..*") + regex = pattern.replace(".", r"\.").replace("*", ".*") + for code in patient_codes: + if re.match(regex, code, re.IGNORECASE): + return True + return False + + def _evaluate_suppressions( + self, nominations: List[DomainNomination] + ) -> Tuple[List[SuppressionResult], Set[str]]: + """ + Evaluate domain suppression rules. + + A lower-acuity domain firing at high confidence can suppress + a higher-acuity domain at low/medium confidence to reduce + false escalations. + """ + suppressions: List[SuppressionResult] = [] + suppressed: Set[str] = set() + + active_domains = {n.domain: n for n in nominations} + + for rule in self._suppression_rules: + suppressor_name = rule.get("suppressor") + suppressed_list = rule.get("suppressed_domains", []) + condition = rule.get("condition", {}) + reason = rule.get("reason", "") + + suppressor = active_domains.get(suppressor_name) + if not suppressor: + continue + + # Check suppressor minimum confidence + min_conf_str = condition.get("suppressor_min_confidence", "medium") + min_conf = self._str_to_confidence(min_conf_str) + if suppressor.confidence_tier < min_conf: + continue + + # Check suppressed domains + max_conf_str = condition.get("suppressed_max_confidence", "medium") + max_conf = self._str_to_confidence(max_conf_str) + + for target_name in suppressed_list: + target = active_domains.get(target_name) + if not target: + continue + + # SAFETY: Never suppress hard-escalate domains + if target_name in self._hard_escalate: + continue + + # Only suppress if target is at or below max confidence + if target.confidence_tier <= max_conf: + suppressed.add(target_name) + suppressions.append( + SuppressionResult( + suppressed=True, + suppressor_domain=suppressor_name, + rule_reason=reason, + ) + ) + logger.info( + "Domain suppression: %s suppresses %s (reason: %s)", + suppressor_name, + target_name, + reason, + ) + + return suppressions, suppressed + + def _determine_risk_class( + self, + nominations: List[DomainNomination], + rule_matches: List[RiskRuleMatch], + suppressed_domains: Set[str], + hard_escalate: bool, + hard_domain: Optional[str], + ) -> RiskClass: + """Determine the highest applicable risk class.""" + + # Hard escalate always wins + if hard_escalate: + return RiskClass.R3 + + # Collect all risk classes from rule matches (excluding suppressed) + risk_candidates: List[RiskClass] = [] + for rm in rule_matches: + if rm.domain not in suppressed_domains: + risk_candidates.append(rm.risk_class) + + # ALSO consider target_risk_class from nominations (even when rules + # matched for other domains). Previously this was a fallback that + # only ran when zero rules matched, which let a benign R1 rule on + # domain A mask a critical R3 target on domain B. + for nom in nominations: + if nom.domain in suppressed_domains: + continue + if nom.is_negated: + continue + if nom.target_risk_class: + # For high-confidence matches on safety domains, use target risk + if nom.confidence_tier >= ConfidenceTier.HIGH: + risk_candidates.append(nom.target_risk_class) + elif nom.confidence_tier >= ConfidenceTier.MEDIUM: + # Medium confidence: one tier below target, minimum R1 + downgraded = self._downgrade_risk(nom.target_risk_class) + risk_candidates.append(downgraded) + else: + # Low confidence: two tiers below or R1 + risk_candidates.append(RiskClass.R1) + + if risk_candidates: + return max(risk_candidates) + + # Absolute fallback: if we have any non-negated nomination, R1 + if any(not n.is_negated for n in nominations): + return RiskClass.R1 + + return RiskClass.R0 + + def _select_primary_domain( + self, + nominations: List[DomainNomination], + suppressed_domains: Set[str], + hard_domain: Optional[str], + ) -> Optional[str]: + """Select the primary domain from active nominations.""" + if hard_domain: + return hard_domain + + # Use safety precedence order for tie-breaking + precedence_set = set(self._safety_precedence) + + for nom in nominations: + if nom.domain in suppressed_domains: + continue + if nom.is_negated: + continue + return nom.domain # Already sorted by confidence + priority + + # All negated or suppressed + return nominations[0].domain if nominations else None + + @staticmethod + def _determine_action(risk_class: RiskClass) -> TurnOutcome: + """Map risk class to recommended turn outcome.""" + if risk_class == RiskClass.R3: + return TurnOutcome.ESCALATE + elif risk_class == RiskClass.R2: + return TurnOutcome.HANDOFF + elif risk_class == RiskClass.R1: + return TurnOutcome.PROCEED + return TurnOutcome.PROCEED + + @staticmethod + def _downgrade_risk(risk: RiskClass) -> RiskClass: + """Downgrade risk by one tier, minimum R1.""" + if risk == RiskClass.R3: + return RiskClass.R2 + elif risk == RiskClass.R2: + return RiskClass.R1 + return RiskClass.R1 + + @staticmethod + def _str_to_confidence(s: str) -> ConfidenceTier: + try: + return ConfidenceTier(s) + except ValueError: + return ConfidenceTier.MEDIUM + + def _empty_assessment( + self, + ml_label: Optional[str] = None, + ml_confidence: Optional[float] = None, + ) -> RiskAssessment: + """Return a default R0 assessment when no nominations exist.""" + return RiskAssessment( + risk_class=RiskClass.R0, + primary_domain=None, + domain_nominations=(), + matched_rules=(), + suppressions=(), + hard_escalate=False, + safety_override=False, + ml_label=ml_label, + ml_confidence=ml_confidence, + recommended_flow=None, + recommended_action=TurnOutcome.PROCEED, + ) diff --git a/decision/engine/tenant_manager.py b/decision/engine/tenant_manager.py new file mode 100644 index 0000000000000000000000000000000000000000..f1a16ed3824aace3381147d3f79c9b38f6621587 --- /dev/null +++ b/decision/engine/tenant_manager.py @@ -0,0 +1,237 @@ +""" +Multi-Tenant Configuration Manager (Phase 3B). + +Manages tenant-specific configuration overrides including: + - Enabled wedges and journeys per tenant + - Custom escalation rules (institution-specific clinical protocols) + - Domain overrides (enable/disable specific domains) + - Institution context (nurse line, ED name, timezone, branding) + - FHIR data source configuration + - Compliance settings (audit retention, PHI logging) + +Usage: + manager = TenantManager(config) + tenant = manager.get_tenant("example_health_system") + merged_rules = manager.get_merged_escalation_rules("example_health_system") + enabled_domains = manager.get_enabled_domains("example_health_system") +""" + +from __future__ import annotations + +import logging +from typing import Any, Dict, List, Optional, Set + +from decision.engine.config_loader import DecisionConfigLoader + +logger = logging.getLogger("decision.tenant_manager") + + +class TenantConfig: + """Parsed tenant configuration with convenience accessors.""" + + def __init__(self, tenant_id: str, raw: Dict[str, Any]): + self.tenant_id = tenant_id + self._raw = raw + + @property + def name(self) -> str: + return self._raw.get("institution_name", self.tenant_id) + + @property + def type(self) -> str: + return self._raw.get("institution_type", "unknown") + + @property + def enabled_wedges(self) -> List[str]: + return self._raw.get("enabled_wedges", []) + + @property + def enabled_journeys(self) -> List[str]: + return self._raw.get("enabled_journeys", self.enabled_wedges) + + @property + def custom_escalation_rules(self) -> List[Dict[str, Any]]: + return self._raw.get("custom_escalation_rules", []) + + @property + def domain_overrides(self) -> Dict[str, Any]: + return self._raw.get("domain_overrides", {}) + + @property + def disabled_domains(self) -> Set[str]: + overrides = self.domain_overrides + return { + domain + for domain, cfg in overrides.items() + if isinstance(cfg, dict) and not cfg.get("enabled", True) + } + + @property + def institution_context(self) -> Dict[str, Any]: + return self._raw.get("institution_context", {}) + + @property + def nurse_line_number(self) -> str: + return self.institution_context.get("nurse_line_number", "") + + @property + def ed_name(self) -> str: + return self.institution_context.get("ed_name", "the emergency department") + + @property + def timezone(self) -> str: + return self.institution_context.get("timezone", "America/New_York") + + @property + def operating_hours(self) -> Dict[str, str]: + return self.institution_context.get("operating_hours", {}) + + @property + def fhir_config(self) -> Dict[str, Any]: + return self._raw.get("data_source", {}).get("fhir", {}) + + @property + def branding(self) -> Dict[str, str]: + return self._raw.get("branding", {}) + + @property + def greeting_name(self) -> str: + return self.branding.get("agent_introduction", "Avery, a care assistant") + + @property + def compliance(self) -> Dict[str, Any]: + return self._raw.get("compliance", {}) + + @property + def audit_retention_years(self) -> int: + return self.compliance.get("audit_retention_years", 7) + + def __repr__(self) -> str: + return f"TenantConfig({self.tenant_id}, name={self.name}, wedges={self.enabled_wedges})" + + +class TenantManager: + """ + Manages multi-tenant configurations and rule merging. + + Provides: + - Tenant lookup and validation + - Merged escalation rules (global + tenant custom) + - Domain filtering (respect tenant disabled_domains) + - Institution context for response generation + """ + + def __init__(self, config: DecisionConfigLoader): + self._config = config + self._tenants: Dict[str, TenantConfig] = {} + + for tid, raw in config.tenants.items(): + self._tenants[tid] = TenantConfig(tid, raw) + + logger.info("TenantManager initialized with %d tenants", len(self._tenants)) + + @property + def tenant_ids(self) -> List[str]: + return sorted(self._tenants.keys()) + + def get_tenant(self, tenant_id: str) -> Optional[TenantConfig]: + return self._tenants.get(tenant_id) + + def get_merged_escalation_rules( + self, tenant_id: str + ) -> List[Dict[str, Any]]: + """ + Merge global escalation rules with tenant-specific custom rules. + + Tenant rules are appended AFTER global rules, so they take effect + as additional checks. Tenant rules with the same ID as global rules + override the global version. + """ + global_rules = list(self._config.risk_escalation_rules) + tenant = self._tenants.get(tenant_id) + if not tenant: + return global_rules + + custom = tenant.custom_escalation_rules + if not custom: + return global_rules + + # Build a map of global rules by ID + global_ids = {r.get("id"): i for i, r in enumerate(global_rules)} + + merged = list(global_rules) + for rule in custom: + rule_id = rule.get("id") + if rule_id and rule_id in global_ids: + # Override existing rule + merged[global_ids[rule_id]] = rule + logger.info( + "Tenant %s overrides global rule: %s", tenant_id, rule_id + ) + else: + # Append new rule + merged.append(rule) + logger.info( + "Tenant %s adds custom rule: %s", tenant_id, rule_id + ) + + return merged + + def get_enabled_domains( + self, tenant_id: str, all_domains: Optional[List[str]] = None + ) -> List[str]: + """ + Get domains enabled for a tenant (all domains minus disabled ones). + """ + if all_domains is None: + all_domains = self._config.domain_names + + tenant = self._tenants.get(tenant_id) + if not tenant: + return all_domains + + disabled = tenant.disabled_domains + if not disabled: + return all_domains + + enabled = [d for d in all_domains if d not in disabled] + logger.info( + "Tenant %s: %d domains enabled (%d disabled: %s)", + tenant_id, + len(enabled), + len(disabled), + disabled, + ) + return enabled + + def is_wedge_enabled(self, tenant_id: str, wedge_type: str) -> bool: + """Check if a wedge/journey is enabled for a tenant.""" + tenant = self._tenants.get(tenant_id) + if not tenant: + return True # No tenant config = all enabled + return wedge_type in tenant.enabled_wedges + + def get_institution_context_for_prompts( + self, tenant_id: str + ) -> Dict[str, str]: + """ + Get institution-specific context for LLM prompt injection. + + Returns strings that can be inserted into response specs. + """ + tenant = self._tenants.get(tenant_id) + if not tenant: + return { + "agent_name": "Avery", + "institution_name": "your healthcare provider", + "nurse_line": "the nurse line", + "ed_name": "the emergency department", + } + + return { + "agent_name": "Avery", + "institution_name": tenant.name, + "nurse_line": tenant.nurse_line_number or "the nurse line", + "ed_name": tenant.ed_name, + "greeting": tenant.greeting_name, + } diff --git a/decision/engine/training_data_generator.py b/decision/engine/training_data_generator.py new file mode 100644 index 0000000000000000000000000000000000000000..e98fa9372259190765a40105139ecf1dc8d4739c --- /dev/null +++ b/decision/engine/training_data_generator.py @@ -0,0 +1,373 @@ +""" +Training Data Generator (Phase 3C). + +Generates synthetic training samples from taxonomy trigger definitions +for model retraining and augmentation. + +Each domain's triggers.yaml contains carefully curated phrases at +multiple confidence tiers. These can be converted into labeled training +examples to improve DriveHealthBERT's domain coverage. + +Capabilities: + - Generate ESCALATION samples from R2/R3 domain triggers + - Generate domain-specific samples with label mapping + - Generate negation examples (negative samples for safety) + - Template-based augmentation with variations + - JSONL output compatible with train.py + +Usage: + generator = TrainingDataGenerator(config) + samples = generator.generate_all() + generator.write_jsonl(samples, "data/taxonomy_augmented.jsonl") +""" + +from __future__ import annotations + +import json +import logging +import random +from pathlib import Path +from typing import Any, Dict, List, Optional, Set, Tuple + +from decision.engine.config_loader import DecisionConfigLoader + +logger = logging.getLogger("decision.training_data_generator") + +# Map domains to DriveHealthBERT labels +_DOMAIN_TO_LABEL = { + # R3 domains → ESCALATION + "chest_pain": "ESCALATION", + "suicidal_ideation": "ESCALATION", + "homicidal_ideation": "ESCALATION", + "stroke_symptoms": "ESCALATION", + "seizure": "ESCALATION", + "severe_bleeding": "ESCALATION", + "anaphylaxis": "ESCALATION", + "airway_compromise": "ESCALATION", + "overdose": "ESCALATION", + "pregnancy_emergency": "ESCALATION", + "ectopic_signal": "ESCALATION", + "febrile_neutropenia": "ESCALATION", + "meningitis_signal": "ESCALATION", + "dka_hhs": "ESCALATION", + "severe_hypoglycemia": "ESCALATION", + "syncope": "ESCALATION", + "thunderclap_headache": "ESCALATION", + "sudden_vision_loss": "ESCALATION", + "acute_limb_deficit": "ESCALATION", + + # R2 domains → ESCALATION (moderate, but still escalation) + "shortness_of_breath_rest": "ESCALATION", + "palpitations_dizziness": "ESCALATION", + "heart_failure_worsening": "ESCALATION", + "gi_bleed": "ESCALATION", + "severe_abdominal_pain": "ESCALATION", + "wound_infection": "ESCALATION", + "fall_high_risk": "ESCALATION", + "behavioral_crisis": "ESCALATION", + "acute_confusion": "ESCALATION", + "persistent_vomiting": "ESCALATION", + "post_discharge_fever": "ESCALATION", + "dvt_signal": "ESCALATION", + "npo_violation": "ESCALATION", + "anticoagulant_hold_failure": "ESCALATION", + "acute_illness_preop": "ESCALATION", + "worsening_depression_si": "ESCALATION", + "procedure_anxiety_severe": "ESCALATION", + "domestic_safety_concern": "ESCALATION", + + # R1/R0 symptom domains → SYMPTOM_CHECK + "exertional_dyspnea": "SYMPTOM_CHECK", + "persistent_dizziness": "SYMPTOM_CHECK", + "abnormal_bp": "SYMPTOM_CHECK", + "reproducible_chest_discomfort": "SYMPTOM_CHECK", + "wound_concern": "SYMPTOM_CHECK", + "uncontrolled_pain": "SYMPTOM_CHECK", + "worsening_chronic_pain": "SYMPTOM_CHECK", + "progressive_weakness": "SYMPTOM_CHECK", + "urinary_retention": "SYMPTOM_CHECK", + "severe_diarrhea": "SYMPTOM_CHECK", + "poor_oral_intake": "SYMPTOM_CHECK", + "new_jaundice": "SYMPTOM_CHECK", + "glucose_out_of_range": "SYMPTOM_CHECK", + "recurrent_falls": "SYMPTOM_CHECK", + "post_procedure_incontinence": "SYMPTOM_CHECK", + + # Medication domains → MEDICATION + "medication": "MEDICATION", + "medication_nonadherence": "MEDICATION", + + # Scheduling domains → APPOINTMENT + "scheduling": "APPOINTMENT", + "scheduling_barrier": "APPOINTMENT", + "missed_followup": "APPOINTMENT", + "post_discharge_engagement": "APPOINTMENT", + + # Screening domains → SYMPTOM_CHECK + "phq2_positive": "SYMPTOM_CHECK", + "audit_c_positive": "SYMPTOM_CHECK", + "screening_gap_identified": "SYMPTOM_CHECK", + "screening_refusal": "GENERAL_INQUIRY", + "cognitive_concern": "SYMPTOM_CHECK", + + # Social/safety domains + "caregiver_safety_concern": "ESCALATION", + "food_insecurity": "GENERAL_INQUIRY", + "social_isolation": "GENERAL_INQUIRY", + "tobacco_use_active": "GENERAL_INQUIRY", +} + +# Templates for wrapping trigger phrases into natural sentences +_PATIENT_TEMPLATES = [ + "{phrase}", + "I have {phrase}", + "I'm experiencing {phrase}", + "I've been having {phrase}", + "I think I have {phrase}", + "My {phrase} is getting worse", + "I need help with {phrase}", + "I'm worried about {phrase}", + "I want to talk about {phrase}", + "Can you help me with {phrase}", +] + +_NEGATION_TEMPLATES = [ + "I don't have {phrase}", + "No {phrase}", + "I'm not experiencing {phrase}", + "{phrase} has gone away", + "I used to have {phrase} but not anymore", + "My mother had {phrase} not me", +] + + +class TrainingDataGenerator: + """Generates training data from taxonomy triggers.""" + + def __init__(self, config: DecisionConfigLoader): + self._config = config + self._triggers = config.taxonomy_triggers + self._rules = config.taxonomy_rules + + def generate_all( + self, + include_negations: bool = True, + max_per_domain: int = 50, + augment_templates: bool = True, + seed: int = 42, + ) -> List[Dict[str, str]]: + """ + Generate training samples from all taxonomy domains. + + Args: + include_negations: Also generate negative samples from negation patterns + max_per_domain: Maximum samples per domain + augment_templates: Apply template-based augmentation + seed: Random seed for reproducibility + + Returns: + List of {"text": ..., "label": ..., "source": ...} dicts + """ + random.seed(seed) + all_samples: List[Dict[str, str]] = [] + + for domain_name, triggers in self._triggers.items(): + label = _DOMAIN_TO_LABEL.get(domain_name) + if not label: + logger.debug("Skipping domain %s (no label mapping)", domain_name) + continue + + domain_samples = self._generate_for_domain( + domain_name, triggers, label, augment_templates, max_per_domain + ) + all_samples.extend(domain_samples) + + # Generate negation samples + if include_negations and label == "ESCALATION": + neg_samples = self._generate_negations( + domain_name, triggers, max_per_domain // 3 + ) + all_samples.extend(neg_samples) + + random.shuffle(all_samples) + + # Summary + label_counts = {} + for s in all_samples: + label_counts[s["label"]] = label_counts.get(s["label"], 0) + 1 + + logger.info( + "Generated %d training samples from %d domains: %s", + len(all_samples), + len(self._triggers), + label_counts, + ) + + return all_samples + + def _generate_for_domain( + self, + domain_name: str, + triggers: Dict[str, Any], + label: str, + augment: bool, + max_samples: int, + ) -> List[Dict[str, str]]: + """Generate training samples for a single domain.""" + samples = [] + lexical = triggers.get("lexical_signals", {}) + + for tier_name in ("high", "medium", "low"): + tier = lexical.get(tier_name, {}) + + # Direct phrase samples + for phrase in tier.get("phrases", []): + samples.append({ + "text": phrase, + "label": label, + "source": f"taxonomy/{domain_name}/{tier_name}/phrase", + }) + + # Template augmentation + if augment: + templates = random.sample( + _PATIENT_TEMPLATES, min(3, len(_PATIENT_TEMPLATES)) + ) + for template in templates: + try: + augmented = template.format(phrase=phrase.lower()) + if augmented != phrase: + samples.append({ + "text": augmented, + "label": label, + "source": f"taxonomy/{domain_name}/{tier_name}/augmented", + }) + except (KeyError, IndexError): + pass + + # Partial samples (lower confidence) + for partial in tier.get("partials", []): + samples.append({ + "text": partial, + "label": label, + "source": f"taxonomy/{domain_name}/{tier_name}/partial", + }) + + # Deduplicate by text + seen = set() + unique = [] + for s in samples: + text_lower = s["text"].lower().strip() + if text_lower not in seen: + seen.add(text_lower) + unique.append(s) + + # Cap per domain + if len(unique) > max_samples: + unique = random.sample(unique, max_samples) + + return unique + + def _generate_negations( + self, + domain_name: str, + triggers: Dict[str, Any], + max_samples: int, + ) -> List[Dict[str, str]]: + """ + Generate negative samples from negation patterns. + + These become NON-ESCALATION training examples to reduce false positives. + """ + samples = [] + negation = triggers.get("negation_handling", {}) + patterns = negation.get("patterns", []) + + # Use negation patterns directly as negative examples + for pattern in patterns: + samples.append({ + "text": pattern, + "label": "GENERAL_INQUIRY", # Negated safety = not escalation + "source": f"taxonomy/{domain_name}/negation", + }) + + # Apply negation templates to domain phrases + lexical = triggers.get("lexical_signals", {}) + high_phrases = lexical.get("high", {}).get("phrases", []) + + for phrase in high_phrases[:5]: # Top 5 high-confidence phrases + templates = random.sample( + _NEGATION_TEMPLATES, min(2, len(_NEGATION_TEMPLATES)) + ) + for template in templates: + try: + negated = template.format(phrase=phrase.lower()) + samples.append({ + "text": negated, + "label": "GENERAL_INQUIRY", + "source": f"taxonomy/{domain_name}/negation_augmented", + }) + except (KeyError, IndexError): + pass + + if len(samples) > max_samples: + samples = random.sample(samples, max_samples) + + return samples + + def write_jsonl( + self, samples: List[Dict[str, str]], output_path: str + ) -> int: + """Write samples to JSONL file compatible with train.py.""" + path = Path(output_path) + path.parent.mkdir(parents=True, exist_ok=True) + + count = 0 + with open(path, "w", encoding="utf-8") as f: + for sample in samples: + record = { + "text": sample["text"], + "label": sample["label"], + } + f.write(json.dumps(record, ensure_ascii=False) + "\n") + count += 1 + + logger.info("Wrote %d samples to %s", count, path) + return count + + def get_label_distribution( + self, samples: List[Dict[str, str]] + ) -> Dict[str, int]: + """Get label distribution of generated samples.""" + dist: Dict[str, int] = {} + for s in samples: + dist[s["label"]] = dist.get(s["label"], 0) + 1 + return dict(sorted(dist.items(), key=lambda x: x[1], reverse=True)) + + def get_domain_coverage_report( + self, samples: List[Dict[str, str]] + ) -> str: + """Generate a coverage report.""" + domain_count: Dict[str, int] = {} + for s in samples: + source = s.get("source", "") + domain = source.split("/")[1] if "/" in source else "unknown" + domain_count[domain] = domain_count.get(domain, 0) + 1 + + lines = ["=== Training Data Coverage Report ===", ""] + lines.append(f"Total samples: {len(samples)}") + lines.append(f"Domains covered: {len(domain_count)}") + lines.append("") + + dist = self.get_label_distribution(samples) + lines.append("Label distribution:") + for label, count in dist.items(): + pct = count / len(samples) * 100 + lines.append(f" {label:20s}: {count:5d} ({pct:.1f}%)") + + lines.append("") + lines.append("Top domains by sample count:") + for domain, count in sorted(domain_count.items(), key=lambda x: x[1], reverse=True)[:15]: + lines.append(f" {domain:35s}: {count:4d}") + + return "\n".join(lines) diff --git a/decision/engine/trigger_engine.py b/decision/engine/trigger_engine.py new file mode 100644 index 0000000000000000000000000000000000000000..98296dc6bfd977c3e6e2d37e8fb88b6c73cf4f32 --- /dev/null +++ b/decision/engine/trigger_engine.py @@ -0,0 +1,323 @@ +""" +Taxonomy Trigger Engine. + +Matches patient utterances against all 65 clinical domain trigger definitions +using phrase matching, regex patterns, partial substring matching, and +negation handling. + +Safety-critical: This is the last line of defense for catching clinical +emergencies that the ML model may miss. False negatives here can be +life-threatening. + +Design principles: + - Fail open: If in doubt, nominate the domain (better to over-escalate) + - Exhaustive matching: Check ALL domains, not just the first match + - Negation requires explicit evidence: Only suppress if negation pattern + clearly matches + - Pre-compiled regex: All patterns compiled at config load time + - Case-insensitive matching throughout +""" + +from __future__ import annotations + +import logging +import re +from typing import Any, Dict, List, Optional, Set, Tuple + +from decision.engine.config_loader import DecisionConfigLoader +from decision.engine.models import ( + ConfidenceTier, + MatchType, + NegationAction, + NegationResult, + TriggerMatch, +) + +logger = logging.getLogger("decision.trigger_engine") + + +class TaxonomyTriggerEngine: + """ + Matches text against taxonomy trigger definitions. + + Usage: + engine = TaxonomyTriggerEngine(config) + matches = engine.match_all(text) + # Returns: Dict[str, DomainMatchResult] keyed by domain name + """ + + def __init__(self, config: DecisionConfigLoader): + self._config = config + self._domains: Dict[str, Dict[str, Any]] = config.taxonomy_triggers + logger.info( + "TaxonomyTriggerEngine initialized with %d domains", len(self._domains) + ) + + # ------------------------------------------------------------------ + # Public API + # ------------------------------------------------------------------ + + def match_all(self, text: str) -> Dict[str, DomainMatchResult]: + """ + Match text against ALL taxonomy domains. + + Returns a dict of domain_name -> DomainMatchResult for every domain + that has at least one trigger match (before negation). + + Negation is evaluated but does NOT remove the domain from results. + The caller decides what to do based on negation_result. + """ + text_lower = text.lower().strip() + if not text_lower: + return {} + + results: Dict[str, DomainMatchResult] = {} + + for domain_name, triggers in self._domains.items(): + result = self._match_domain(domain_name, triggers, text, text_lower) + if result and result.highest_confidence != ConfidenceTier.NONE: + results[domain_name] = result + + return results + + def match_domain(self, domain_name: str, text: str) -> Optional[DomainMatchResult]: + """Match text against a single domain's triggers.""" + triggers = self._domains.get(domain_name) + if not triggers: + return None + text_lower = text.lower().strip() + return self._match_domain(domain_name, triggers, text, text_lower) + + def check_negation( + self, domain_name: str, text: str + ) -> NegationResult: + """Check if text matches negation patterns for a domain.""" + triggers = self._domains.get(domain_name, {}) + text_lower = text.lower().strip() + return self._evaluate_negation(domain_name, triggers, text_lower) + + # ------------------------------------------------------------------ + # Internal matching + # ------------------------------------------------------------------ + + def _match_domain( + self, + domain_name: str, + triggers: Dict[str, Any], + text: str, + text_lower: str, + ) -> Optional[DomainMatchResult]: + """Match text against a single domain's trigger definition.""" + lexical = triggers.get("lexical_signals", {}) + priority = triggers.get("priority", 0) + + all_matches: List[TriggerMatch] = [] + + # Check each confidence tier (high → medium → low) + for tier_name, tier_enum in [ + ("high", ConfidenceTier.HIGH), + ("medium", ConfidenceTier.MEDIUM), + ("low", ConfidenceTier.LOW), + ]: + tier = lexical.get(tier_name, {}) + tier_matches = self._match_tier( + domain_name, tier, tier_enum, text, text_lower, priority + ) + all_matches.extend(tier_matches) + + if not all_matches: + return None + + # Determine highest confidence from matches + highest = ConfidenceTier.NONE + for m in all_matches: + if m.confidence_tier > highest: + highest = m.confidence_tier + + # Evaluate negation + negation = self._evaluate_negation(domain_name, triggers, text_lower) + + # Apply negation to adjust confidence + effective_confidence = highest + if negation.is_negated: + if negation.action == NegationAction.SUPPRESS: + effective_confidence = ConfidenceTier.NONE + elif negation.action == NegationAction.DOWNGRADE_CONFIDENCE: + effective_confidence = self._downgrade_tier(highest) + + return DomainMatchResult( + domain=domain_name, + priority=priority, + matches=tuple(all_matches), + highest_confidence=highest, + effective_confidence=effective_confidence, + negation_result=negation, + ) + + def _match_tier( + self, + domain_name: str, + tier: Dict[str, Any], + tier_enum: ConfidenceTier, + text: str, + text_lower: str, + priority: int, + ) -> List[TriggerMatch]: + """Match text against a single confidence tier.""" + matches: List[TriggerMatch] = [] + + # 1. Phrase matching (exact substring, case-insensitive) + for phrase in tier.get("phrases", []): + phrase_lower = phrase.lower() + idx = text_lower.find(phrase_lower) + if idx >= 0: + matched_span = text[idx : idx + len(phrase)] + matches.append( + TriggerMatch( + domain=domain_name, + confidence_tier=tier_enum, + match_type=MatchType.PHRASE, + matched_text=phrase, + matched_span=matched_span, + priority=priority, + ) + ) + + # 2. Regex matching (pre-compiled) + for compiled_re in tier.get("_compiled_regex", []): + m = compiled_re.search(text) + if m: + matches.append( + TriggerMatch( + domain=domain_name, + confidence_tier=tier_enum, + match_type=MatchType.REGEX, + matched_text=compiled_re.pattern, + matched_span=m.group(0), + priority=priority, + ) + ) + + # 3. Partial matching (substring, case-insensitive) + for partial in tier.get("partials", []): + partial_lower = partial.lower() + idx = text_lower.find(partial_lower) + if idx >= 0: + matched_span = text[idx : idx + len(partial)] + matches.append( + TriggerMatch( + domain=domain_name, + confidence_tier=tier_enum, + match_type=MatchType.PARTIAL, + matched_text=partial, + matched_span=matched_span, + priority=priority, + ) + ) + + return matches + + def _evaluate_negation( + self, + domain_name: str, + triggers: Dict[str, Any], + text_lower: str, + ) -> NegationResult: + """ + Evaluate negation patterns for a domain. + + SAFETY DESIGN: Negation requires an EXPLICIT match against a known + negation pattern. We do NOT use generic "no/not" detection because + that risks suppressing true emergencies. + """ + negation_config = triggers.get("negation_handling", {}) + compiled_patterns: List[str] = negation_config.get("_compiled_patterns", []) + action_str = negation_config.get("action", "downgrade_confidence") + + try: + action = NegationAction(action_str) + except ValueError: + action = NegationAction.DOWNGRADE_CONFIDENCE + + for pattern in compiled_patterns: + if pattern in text_lower: + return NegationResult( + is_negated=True, + action=action, + matched_pattern=pattern, + ) + + return NegationResult( + is_negated=False, + action=action, + ) + + @staticmethod + def _downgrade_tier(tier: ConfidenceTier) -> ConfidenceTier: + """Downgrade confidence by one level.""" + if tier == ConfidenceTier.HIGH: + return ConfidenceTier.MEDIUM + elif tier == ConfidenceTier.MEDIUM: + return ConfidenceTier.LOW + elif tier == ConfidenceTier.LOW: + return ConfidenceTier.NONE + return ConfidenceTier.NONE + + +# --------------------------------------------------------------------------- +# Domain Match Result +# --------------------------------------------------------------------------- + +class DomainMatchResult: + """ + Result of matching a single domain against patient text. + + Contains all trigger matches, the highest raw confidence, + effective confidence (after negation), and negation details. + """ + + __slots__ = ( + "domain", + "priority", + "matches", + "highest_confidence", + "effective_confidence", + "negation_result", + ) + + def __init__( + self, + domain: str, + priority: int, + matches: Tuple[TriggerMatch, ...], + highest_confidence: ConfidenceTier, + effective_confidence: ConfidenceTier, + negation_result: NegationResult, + ): + self.domain = domain + self.priority = priority + self.matches = matches + self.highest_confidence = highest_confidence + self.effective_confidence = effective_confidence + self.negation_result = negation_result + + @property + def is_negated(self) -> bool: + return self.negation_result.is_negated + + @property + def is_suppressed(self) -> bool: + return self.effective_confidence == ConfidenceTier.NONE + + @property + def match_count(self) -> int: + return len(self.matches) + + def __repr__(self) -> str: + neg = " [NEGATED]" if self.is_negated else "" + return ( + f"DomainMatchResult({self.domain}, " + f"confidence={self.effective_confidence.value}, " + f"priority={self.priority}, " + f"matches={self.match_count}{neg})" + ) diff --git a/decision/global/global_rules.yaml b/decision/global/global_rules.yaml new file mode 100644 index 0000000000000000000000000000000000000000..edb44edb5776051e80edf0ca204d2f66ac2f27b4 --- /dev/null +++ b/decision/global/global_rules.yaml @@ -0,0 +1,666 @@ +safety_precedence: + # R3 domains ordered by clinical acuity + - chest_pain + - airway_compromise + - shortness_of_breath_rest + - exertional_dyspnea + - severe_bleeding + - gi_bleed + - stroke_symptoms + - acute_limb_deficit + - syncope + - anaphylaxis + - seizure + - suicidal_ideation + - homicidal_ideation + - overdose + - thunderclap_headache + - pregnancy_emergency + - severe_hypoglycemia + - dka_hhs + - febrile_neutropenia + - sudden_vision_loss + # R2 safety domain — domestic violence / elder abuse + - domestic_safety_concern + +call_phases: + - session_start + - active_call + - ended + +primitive_sequence: + - greeting + - identity_verify + - consent + +fallback_flow: primitives/clarify + +risk_classes: + R0: "No clinical concern identified" + R1: "Low-level concern, routine follow-up" + R2: "Moderate concern, warm transfer to nurse" + R3: "Emergent, instruct patient to call 911 and transfer to nurse" + +risk_escalation_rules: + - id: chest_pain_with_sob + if: + domain: chest_pain + slots_present: + - shortness_of_breath + slot_values: + shortness_of_breath: "yes" + then: + risk_class: R3 + + - id: chest_pain_with_syncope + if: + domain: chest_pain + slots_present: + - syncope_or_dizziness + slot_values: + syncope_or_dizziness: "yes" + then: + risk_class: R3 + + - id: chest_pain_isolated + if: + domain: chest_pain + slots_present: + - chest_pain_severity + then: + risk_class: R3 + + - id: chest_pain_screening_clear + if: + domain: chest_pain + slot_values: + shortness_of_breath: "no" + syncope_or_dizziness: "no" + then: + risk_class: R3 + + # ── DKA/HHS ────────────────────────────────────────────────── + - id: dka_hhs_confirmed_nausea + if: + domain: dka_hhs + slots_present: + - nausea_vomiting + slot_values: + nausea_vomiting: "yes" + then: + risk_class: R3 + + - id: dka_hhs_confirmed_confusion + if: + domain: dka_hhs + slots_present: + - confusion_status + slot_values: + confusion_status: "yes" + then: + risk_class: R3 + + - id: dka_hhs_glucose_critical + if: + domain: dka_hhs + slots_present: + - glucose_level_bucket + slot_values: + glucose_level_bucket: "severe" + then: + risk_class: R3 + + - id: dka_hhs_glucose_high + if: + domain: dka_hhs + slots_present: + - glucose_level_bucket + slot_values: + glucose_level_bucket: "moderate" + then: + risk_class: R2 + + - id: dka_hhs_screening_clear + if: + domain: dka_hhs + slot_values: + nausea_vomiting: "no" + confusion_status: "no" + then: + risk_class: R2 + + # ── Shortness of Breath at Rest ────────────────────────────── + - id: sob_rest_confirmed + if: + domain: shortness_of_breath_rest + slots_present: + - sob_at_rest + slot_values: + sob_at_rest: "yes" + then: + risk_class: R3 + + - id: sob_rest_exertion_only + if: + domain: shortness_of_breath_rest + slot_values: + sob_at_rest: "no" + then: + risk_class: R0 + + # ── Wound Infection ────────────────────────────────────────── + - id: wound_infection_confirmed_fever + if: + domain: wound_infection + slots_present: + - fever_present + slot_values: + fever_present: "yes" + then: + risk_class: R3 + + - id: wound_infection_confirmed_systemic + if: + domain: wound_infection + slots_present: + - wound_systemic_signs + slot_values: + wound_systemic_signs: "yes" + then: + risk_class: R3 + + - id: wound_infection_screening_clear + if: + domain: wound_infection + slot_values: + fever_present: "no" + wound_systemic_signs: "no" + then: + risk_class: R2 + + # ── DVT Signal ─────────────────────────────────────────────── + - id: dvt_signal_confirmed_swelling + if: + domain: dvt_signal + slots_present: + - leg_swelling_acute + slot_values: + leg_swelling_acute: "yes" + then: + risk_class: R2 + + - id: dvt_signal_confirmed_tenderness + if: + domain: dvt_signal + slots_present: + - calf_tenderness + slot_values: + calf_tenderness: "yes" + then: + risk_class: R2 + + - id: dvt_signal_screening_clear + if: + domain: dvt_signal + slot_values: + leg_swelling_acute: "no" + calf_tenderness: "no" + then: + risk_class: R0 + + # ── Fall High Risk ────────────────────────────────────────── + - id: fall_confirmed_loc + if: + domain: fall_high_risk + slot_values: + loss_of_consciousness: "yes" + then: + risk_class: R3 + + - id: fall_confirmed_head_strike_anticoag + if: + domain: fall_high_risk + slot_values: + head_strike: "yes" + on_anticoagulant: "yes" + then: + risk_class: R3 + + - id: fall_confirmed_head_strike + if: + domain: fall_high_risk + slots_present: + - head_strike + slot_values: + head_strike: "yes" + then: + risk_class: R2 + + - id: fall_confirmed_anticoagulant + if: + domain: fall_high_risk + slots_present: + - on_anticoagulant + slot_values: + on_anticoagulant: "yes" + then: + risk_class: R2 + + - id: fall_screening_clear + if: + domain: fall_high_risk + slot_values: + head_strike: "no" + injury_present: "no" + then: + risk_class: R0 + + # ── Anaphylaxis ───────────────────────────────────────────── + - id: anaphylaxis_confirmed_swelling + if: + domain: anaphylaxis + slots_present: + - tongue_lip_swelling + slot_values: + tongue_lip_swelling: "yes" + then: + risk_class: R3 + + - id: anaphylaxis_confirmed_breathing + if: + domain: anaphylaxis + slots_present: + - breathing_difficulty_acute + slot_values: + breathing_difficulty_acute: "yes" + then: + risk_class: R3 + + - id: anaphylaxis_screening_clear + if: + domain: anaphylaxis + slot_values: + rash_hives: "no" + tongue_lip_swelling: "no" + breathing_difficulty_acute: "no" + then: + risk_class: R0 + + # ── Overdose ──────────────────────────────────────────────── + - id: overdose_confirmed_intentional + if: + domain: overdose + slots_present: + - intent + slot_values: + intent: "intentional" + then: + risk_class: R3 + + - id: overdose_confirmed_altered + if: + domain: overdose + slots_present: + - consciousness_level + slot_values: + consciousness_level: "altered" + then: + risk_class: R3 + + - id: overdose_screening_clear + if: + domain: overdose + slot_values: + intent: "accidental" + consciousness_level: "alert" + then: + risk_class: R2 + + # ── Stroke Symptoms (BE-FAST) ──────────────────────────────── + - id: stroke_confirmed_balance + if: + domain: stroke_symptoms + slot_values: + balance_deficit: "yes" + then: + risk_class: R3 + + - id: stroke_confirmed_vision + if: + domain: stroke_symptoms + slot_values: + vision_change: "yes" + then: + risk_class: R3 + + - id: stroke_confirmed_facial_droop + if: + domain: stroke_symptoms + slots_present: + - facial_droop + slot_values: + facial_droop: "yes" + then: + risk_class: R3 + + - id: stroke_confirmed_arm_weakness + if: + domain: stroke_symptoms + slots_present: + - arm_weakness + slot_values: + arm_weakness: "yes" + then: + risk_class: R3 + + - id: stroke_confirmed_speech + if: + domain: stroke_symptoms + slots_present: + - speech_slurring + slot_values: + speech_slurring: "yes" + then: + risk_class: R3 + + - id: stroke_screening_clear + if: + domain: stroke_symptoms + slot_values: + balance_deficit: "no" + vision_change: "no" + facial_droop: "no" + arm_weakness: "no" + speech_slurring: "no" + then: + risk_class: R0 + + # ── Exertional Dyspnea ────────────────────────────────────── + - id: exertional_dyspnea_new_onset + if: + domain: exertional_dyspnea + slot_values: + dyspnea_onset: "new" + then: + risk_class: R3 + + - id: exertional_dyspnea_chronic + if: + domain: exertional_dyspnea + slot_values: + dyspnea_onset: "chronic" + then: + risk_class: R1 + + - id: exertional_dyspnea_screening_clear + if: + domain: exertional_dyspnea + slot_values: + dyspnea_onset: "chronic" + then: + risk_class: R0 + + # ── Abnormal BP ──────────────────────────────────────────── + - id: abnormal_bp_critical_threshold + if: + domain: abnormal_bp + slots_present: + - bp_critical + slot_values: + bp_critical: "yes" + then: + risk_class: R3 + + - id: abnormal_bp_any_report + if: + domain: abnormal_bp + slots_present: + - bp_report_confirmed + slot_values: + bp_report_confirmed: "yes" + then: + risk_class: R2 + + # ── Anticoagulant Hold Failure ───────────────────────────── + - id: anticoag_still_taking + if: + domain: anticoagulant_hold_failure + slots_present: + - anticoag_still_taking + slot_values: + anticoag_still_taking: "yes" + then: + risk_class: R2 + + - id: anticoag_hold_compliant + if: + domain: anticoagulant_hold_failure + slot_values: + anticoag_still_taking: "no" + then: + risk_class: R0 + + # ── NPO Violation ───────────────────────────────────────── + - id: npo_recent_intake + if: + domain: npo_violation + slots_present: + - npo_last_intake_time + slot_values: + npo_intake_recent: "yes" + then: + risk_class: R2 + + - id: npo_compliant + if: + domain: npo_violation + slot_values: + npo_intake_recent: "no" + then: + risk_class: R0 + + # ── Acute Illness Pre-Op ────────────────────────────────── + - id: preop_illness_fever + if: + domain: acute_illness_preop + slots_present: + - illness_fever_present + slot_values: + illness_fever_present: "yes" + then: + risk_class: R2 + + - id: preop_illness_respiratory + if: + domain: acute_illness_preop + slots_present: + - illness_respiratory_symptoms + slot_values: + illness_respiratory_symptoms: "yes" + then: + risk_class: R2 + + - id: preop_illness_gi + if: + domain: acute_illness_preop + slots_present: + - illness_gi_symptoms + slot_values: + illness_gi_symptoms: "yes" + then: + risk_class: R2 + + - id: preop_illness_clear + if: + domain: acute_illness_preop + slot_values: + illness_fever_present: "no" + illness_respiratory_symptoms: "no" + illness_gi_symptoms: "no" + then: + risk_class: R0 + + # ── Domestic Safety Concern ────────────────────────────────── + - id: domestic_safety_immediate_danger + if: + domain: domestic_safety_concern + slots_present: + - immediate_danger + slot_values: + immediate_danger: "yes" + then: + risk_class: R2 + + - id: domestic_safety_not_safe_to_talk + if: + domain: domestic_safety_concern + slots_present: + - safe_to_talk + slot_values: + safe_to_talk: "no" + then: + risk_class: R2 + + - id: domestic_safety_screening_clear + if: + domain: domestic_safety_concern + slot_values: + safe_to_talk: "yes" + immediate_danger: "no" + then: + risk_class: R0 + + # ── Context-aware risk rules ───────────────────────────────────────── + # These rules require BOTH slot conditions AND patient context conditions + # to fire. When patient_context is None, context conditions are treated + # as non-matching (fail closed). + + - id: sob_chf_decompensation + if: + domain: shortness_of_breath_rest + slots_present: + - sob_severity + slot_values: + sob_severity: "moderate" + context: + patient_has_condition: ["I50.*"] + then: + risk_class: R2 + + - id: sob_severe_chf_decompensation + if: + domain: shortness_of_breath_rest + slots_present: + - sob_severity + slot_values: + sob_severity: "severe" + context: + patient_has_condition: ["I50.*"] + then: + risk_class: R2 + + - id: confusion_polypharmacy + if: + domain: altered_mental_status + slots_present: + - confusion_reported + slot_values: + confusion_reported: "yes" + context: + medication_count_above: 10 + then: + risk_class: R2 + + - id: weight_gain_chf_fluid_overload + if: + domain: weight_gain_sudden + slots_present: + - weight_change_lbs + - weight_gain_significant + slot_values: + weight_gain_significant: "yes" + context: + patient_has_condition: ["I50.*"] + then: + risk_class: R2 + +hard_escalate_domains: + - suicidal_ideation + - homicidal_ideation + +turn_outcomes: + - proceed + - clarify + - escalate + - handoff + - end + +# ══════════════════════════════════════════════════════════════════════════════ +# Domain Suppression Rules +# ══════════════════════════════════════════════════════════════════════════════ +# These rules allow an R1 domain firing at high confidence to suppress +# an R2/R3 domain, reducing false escalations. +# The flow engine must be updated separately to consume these rules. + +domain_suppression: + # ── Wound domains ───────────────────────────────────────────────────── + # When R1 wound_concern fires at medium/high confidence, suppress R2 wound_infection + # at low/medium confidence (not high - genuine infection signals should still escalate) + - suppressor: wound_concern + suppressed_domains: + - wound_infection + condition: + suppressor_min_confidence: medium # medium or high + suppressed_max_confidence: medium # low or medium (not high) + reason: "Routine wound concern (R1) contradicts infection (R2) at lower confidence" + + # ── Chest pain domains ──────────────────────────────────────────────── + # When R1 reproducible_chest_discomfort fires, suppress R3 chest_pain at low/medium + - suppressor: reproducible_chest_discomfort + suppressed_domains: + - chest_pain + condition: + suppressor_min_confidence: medium + suppressed_max_confidence: medium + reason: "Reproducible pattern suggests non-ACS chest pain" + + # ── Glucose domains ─────────────────────────────────────────────────── + # When R1 glucose_out_of_range fires, suppress R3 dka_hhs at low/medium + - suppressor: glucose_out_of_range + suppressed_domains: + - dka_hhs + - severe_hypoglycemia + condition: + suppressor_min_confidence: medium + suppressed_max_confidence: medium + reason: "Routine glucose management (R1) vs emergency (R3)" + + # ── Medication domains ──────────────────────────────────────────────── + # When R1 medication fires, suppress R3 overdose at low/medium + - suppressor: medication + suppressed_domains: + - overdose + condition: + suppressor_min_confidence: medium + suppressed_max_confidence: medium + reason: "Medication inquiry (R1) vs overdose (R3)" + + # ── Oral intake domains ─────────────────────────────────────────────── + # When R1 poor_oral_intake fires, suppress R2 persistent_vomiting at low/medium + - suppressor: poor_oral_intake + suppressed_domains: + - persistent_vomiting + condition: + suppressor_min_confidence: medium + suppressed_max_confidence: medium + reason: "Appetite concern (R1) vs persistent vomiting (R2)" + + # ── Pain domains ────────────────────────────────────────────────────── + # When R1 worsening_chronic_pain fires, suppress R2 uncontrolled_pain at low/medium + - suppressor: worsening_chronic_pain + suppressed_domains: + - uncontrolled_pain + condition: + suppressor_min_confidence: medium + suppressed_max_confidence: medium + reason: "Chronic pain management (R1) vs acute uncontrolled pain (R2)" diff --git a/decision/journeys/annual_wellness_visit.yaml b/decision/journeys/annual_wellness_visit.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2071cc8e7985ee875966f44dbdc1c18f7b72bca9 --- /dev/null +++ b/decision/journeys/annual_wellness_visit.yaml @@ -0,0 +1,58 @@ +wedge_type: awv +display_name: Annual Wellness Visit +description: >- + 30-day annual wellness visit preparation journey. Voice calls with SMS + reminders. Initial outreach uses the full 12-step agenda. Subsequent calls + use abbreviated agendas focused on screening reminders and visit preparation. +default_duration_days: 30 +steps: + - step_id: initial_outreach + channel: voice + schedule: + offset_days: 30 + window_hours: [9, 17] + agenda_sequence: + - awv_intro + - health_history_update + - medication_list_review + - family_history_update + - functional_status + - fall_risk_screening + - screening_reminders + - immunization_reminders + - advance_directives + - depression_screening + - social_determinants + - closing + teachback_steps: [] + max_retries: 3 + retry_delay_hours: 2 + + - step_id: reminder_call + channel: voice + schedule: + offset_days: 7 + window_hours: [9, 17] + agenda_sequence: + - awv_intro + - screening_reminders + - immunization_reminders + - social_determinants + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 + + - step_id: visit_prep_call + channel: voice + schedule: + offset_days: 2 + window_hours: [9, 17] + agenda_sequence: + - awv_intro + - medication_list_review + - screening_reminders + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 2 diff --git a/decision/journeys/gap_closure.yaml b/decision/journeys/gap_closure.yaml new file mode 100644 index 0000000000000000000000000000000000000000..eb3a4521212d6fde2c089680f3bc5f6fd0790637 --- /dev/null +++ b/decision/journeys/gap_closure.yaml @@ -0,0 +1,91 @@ +wedge_type: gap_closure +display_name: Gap Closure +description: >- + 30-90 day care gap closure journey. SMS-first channel strategy with voice + call escalation for patients who do not respond to SMS reminders. SMS + messages are template-driven and do NOT pass through the DCE pipeline. + Only voice calls invoke the engine. Voice calls use a 7-step agenda + focused on gap identification, barrier assessment, and scheduling assistance. +default_duration_days: 90 +steps: + # Step 1: SMS reminder (template-driven, does not invoke DCE) + - step_id: sms_reminder_1 + channel: sms + schedule: + offset_days: 1 + window_hours: [9, 20] + agenda_sequence: [] + teachback_steps: [] + max_retries: 0 + retry_delay_hours: 0 + + # Step 2: SMS reminder (template-driven, does not invoke DCE) + - step_id: sms_reminder_2 + channel: sms + schedule: + offset_days: 7 + window_hours: [9, 20] + agenda_sequence: [] + teachback_steps: [] + max_retries: 0 + retry_delay_hours: 0 + + # Step 3: SMS reminder (template-driven, does not invoke DCE) + - step_id: sms_reminder_3 + channel: sms + schedule: + offset_days: 14 + window_hours: [9, 20] + agenda_sequence: [] + teachback_steps: [] + max_retries: 0 + retry_delay_hours: 0 + + # Step 4: First voice call — full 7-step gap closure agenda + - step_id: initial_outreach_call + channel: voice + schedule: + offset_days: 21 + window_hours: [9, 17] + agenda_sequence: + - gap_intro + - gap_identification + - barrier_assessment + - motivational_support + - scheduling_assistance + - questions + - closing + teachback_steps: [] + max_retries: 3 + retry_delay_hours: 2 + + # Step 5: Follow-up voice call — abbreviated agenda + - step_id: follow_up_call + channel: voice + schedule: + offset_days: 45 + window_hours: [9, 17] + agenda_sequence: + - gap_intro + - gap_identification + - scheduling_assistance + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 + + # Step 6: Final voice call — last attempt + - step_id: final_outreach_call + channel: voice + schedule: + offset_days: 75 + window_hours: [9, 17] + agenda_sequence: + - gap_intro + - gap_identification + - barrier_assessment + - scheduling_assistance + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 diff --git a/decision/journeys/health_risk_assessment.yaml b/decision/journeys/health_risk_assessment.yaml new file mode 100644 index 0000000000000000000000000000000000000000..431c5f0f5741b4552897ec2fd291cb3fbd063942 --- /dev/null +++ b/decision/journeys/health_risk_assessment.yaml @@ -0,0 +1,45 @@ +wedge_type: hra +display_name: Health Risk Assessment +description: >- + 14-day health risk assessment journey. Voice calls with SMS reminders. + Initial call uses the full 10-step agenda covering chronic conditions, + functional status, mental health screening, social determinants, and + preventive care review. Follow-up call uses abbreviated agenda for + incomplete sections. +default_duration_days: 14 +steps: + - step_id: initial_hra_call + channel: voice + schedule: + offset_days: 1 + window_hours: [9, 17] + agenda_sequence: + - hra_intro + - chronic_condition_inventory + - functional_status_assessment + - mental_health_screen + - social_determinants_screen + - medication_burden_review + - preventive_care_review + - care_plan_summary + - closing + - wrap_up + teachback_steps: [] + max_retries: 3 + retry_delay_hours: 2 + + - step_id: followup_hra_call + channel: voice + schedule: + offset_days: 7 + window_hours: [9, 17] + agenda_sequence: + - hra_intro + - mental_health_screen + - social_determinants_screen + - preventive_care_review + - care_plan_summary + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 diff --git a/decision/journeys/post_discharge_engagement.yaml b/decision/journeys/post_discharge_engagement.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0be50561587b0488ce1eb4981a0f308e7cf48dae --- /dev/null +++ b/decision/journeys/post_discharge_engagement.yaml @@ -0,0 +1,120 @@ +wedge_type: pde +display_name: Post-Discharge Engagement +description: >- + 3-30 day post-discharge follow-up journey. Voice calls with SMS reminders. + Day 1 uses the full 14-step agenda. Subsequent calls use abbreviated agendas + focused on evolving patient needs. +default_duration_days: 30 +steps: + - step_id: day1_call + channel: voice + schedule: + offset_days: 1 + window_hours: [9, 17] + agenda_sequence: + - intro_permission + - discharge_context + - teachback_diagnosis + - teachback_warning_signs + - general_status + - symptom_review + - meds_reconciliation + - appointments_check + - pending_tests + - home_services + - problem_solving + - emergency_plan + - closing + - wrap_up + teachback_steps: + - teachback_diagnosis + - teachback_warning_signs + max_retries: 3 + retry_delay_hours: 2 + conditional_probes: + - probe_id: chf_symptom_review + when: + patient_has_condition: ["I50.*"] + must_ask: + - "Have you been weighing yourself daily as instructed?" + - "Have you noticed any new or worsening swelling in your legs or ankles?" + - "Have you had any trouble breathing when lying flat?" + slots_to_extract: ["daily_weight_check", "edema_worsening", "orthopnea"] + reason: "CHF-specific symptom monitoring per AHA guidelines" + - probe_id: copd_symptom_review + when: + patient_has_condition: ["J44.*", "J43.*"] + must_ask: + - "Have you noticed any change in your sputum color or amount?" + - "Are you using your rescue inhaler more than usual?" + slots_to_extract: ["sputum_change", "rescue_inhaler_frequency"] + reason: "COPD exacerbation early detection" + - probe_id: diabetes_symptom_review + when: + patient_has_condition: ["E11.*", "E10.*"] + must_ask: + - "Have you been checking your blood sugar regularly?" + - "Have you had any episodes of very high or very low blood sugar?" + slots_to_extract: ["glucose_monitoring", "glucose_extremes"] + reason: "Post-discharge glucose management" + pre_populated_slots: + - slot: discharge_med_count + source_field: discharge_info.discharge_medications + reason: "Pre-populate from discharge medication list" + + - step_id: day3_call + channel: voice + schedule: + offset_days: 3 + window_hours: [9, 17] + agenda_sequence: + - intro_permission + - general_status + - symptom_review + - meds_reconciliation + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 + + - step_id: day7_call + channel: voice + schedule: + offset_days: 7 + window_hours: [9, 17] + agenda_sequence: + - intro_permission + - appointments_check + - problem_solving + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 + + - step_id: day14_call + channel: voice + schedule: + offset_days: 14 + window_hours: [9, 17] + agenda_sequence: + - intro_permission + - general_status + - symptom_review + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 + + - step_id: day30_call + channel: voice + schedule: + offset_days: 30 + window_hours: [9, 17] + agenda_sequence: + - intro_permission + - general_status + - emergency_plan + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 diff --git a/decision/journeys/pre_op_optimization.yaml b/decision/journeys/pre_op_optimization.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4f9f051739e6ad021ee4c24af7ad0e5b7ffce76a --- /dev/null +++ b/decision/journeys/pre_op_optimization.yaml @@ -0,0 +1,83 @@ +wedge_type: pre_op +display_name: Pre-Op Optimization +description: >- + 7-90 day pre-surgery optimization journey. Voice calls with SMS reminders. + Initial call uses the full 10-step agenda. Subsequent calls use abbreviated + agendas focused on compliance verification and anxiety management. +default_duration_days: 90 +steps: + - step_id: initial_assessment + channel: voice + schedule: + offset_days: 7 + window_hours: [9, 17] + agenda_sequence: + - preop_intro + - health_history_update + - medication_review + - allergy_verification + - npo_status + - anxiety_screening + - procedure_prep + - logistics + - questions + - closing + teachback_steps: + - npo_status + max_retries: 3 + retry_delay_hours: 2 + conditional_probes: + - probe_id: anticoagulant_hold_check + when: + patient_on_medication_class: ["anticoagulant", "DOAC"] + must_ask: + - "Have you stopped taking your blood thinner as instructed?" + - "When did you take your last dose?" + slots_to_extract: ["anticoag_stopped", "last_anticoag_dose"] + reason: "Anticoagulant hold verification per ERAS guidelines" + - probe_id: glp1_hold_check + when: + patient_on_medication_class: ["GLP-1_agonist"] + must_ask: + - "Have you stopped taking your GLP-1 medication as instructed?" + slots_to_extract: ["glp1_stopped"] + reason: "GLP-1 agonist hold per updated ERAS guidelines" + - probe_id: insulin_management + when: + patient_on_medication_class: ["insulin"] + must_ask: + - "Have you adjusted your insulin dose as your surgeon instructed?" + slots_to_extract: ["insulin_adjusted"] + reason: "Perioperative insulin management" + + - step_id: compliance_check + channel: voice + schedule: + offset_days: 3 + window_hours: [9, 17] + agenda_sequence: + - preop_intro + - medication_review + - npo_status + - anxiety_screening + - closing + teachback_steps: + - npo_status + max_retries: 2 + retry_delay_hours: 4 + + - step_id: day_before_call + channel: voice + schedule: + offset_days: 1 + window_hours: [9, 17] + agenda_sequence: + - preop_intro + - npo_status + - logistics + - anxiety_screening + - closing + teachback_steps: + - npo_status + max_retries: 2 + retry_delay_hours: 2 diff --git a/decision/orchestrator/conflict_resolution.yaml b/decision/orchestrator/conflict_resolution.yaml new file mode 100644 index 0000000000000000000000000000000000000000..158df221b12c785ddb0fdd1bc3a91e9aec75cc57 --- /dev/null +++ b/decision/orchestrator/conflict_resolution.yaml @@ -0,0 +1,79 @@ +# Cross-wedge conflict resolution rules. +# When two wedges compete for the same contact slot, these rules decide +# which one proceeds and what happens to the other. + +conflict_rules: + # PDE and Pre-Op on same day: PDE wins (higher priority_rank), Pre-Op defers + - rule_id: pde_preop_same_day + wedge_a: pde + wedge_b: pre_op + condition: same_day + winner: higher_priority + loser_action: defer_24h + + # Tier 1 vs Tier 2 on same day: Tier 1 always wins + - rule_id: tier1_beats_tier2 + wedge_a: pde + wedge_b: awv + condition: same_day + winner: higher_priority + loser_action: defer_24h + + - rule_id: tier1_beats_gap + wedge_a: pde + wedge_b: gap_closure + condition: same_day + winner: higher_priority + loser_action: defer_24h + + - rule_id: tier1_beats_hra + wedge_a: pde + wedge_b: hra + condition: same_day + winner: higher_priority + loser_action: defer_24h + + - rule_id: preop_beats_awv + wedge_a: pre_op + wedge_b: awv + condition: same_day + winner: higher_priority + loser_action: defer_24h + + - rule_id: preop_beats_gap + wedge_a: pre_op + wedge_b: gap_closure + condition: same_day + winner: higher_priority + loser_action: defer_24h + + - rule_id: preop_beats_hra + wedge_a: pre_op + wedge_b: hra + condition: same_day + winner: higher_priority + loser_action: defer_24h + + # Within Tier 2: AWV > Gap Closure > HRA (by priority_rank) + - rule_id: awv_beats_gap + wedge_a: awv + wedge_b: gap_closure + condition: same_day + winner: higher_priority + loser_action: defer_24h + + - rule_id: awv_beats_hra + wedge_a: awv + wedge_b: hra + condition: same_day + winner: higher_priority + loser_action: defer_24h + + - rule_id: gap_beats_hra + wedge_a: gap_closure + wedge_b: hra + condition: same_day + winner: higher_priority + loser_action: defer_24h + +default_loser_action: defer_24h diff --git a/decision/orchestrator/contact_caps.yaml b/decision/orchestrator/contact_caps.yaml new file mode 100644 index 0000000000000000000000000000000000000000..301a065a9d2fa3d47214a98b0e5702529a1e6773 --- /dev/null +++ b/decision/orchestrator/contact_caps.yaml @@ -0,0 +1,16 @@ +global_max_per_day: 2 +global_max_per_week: 7 +channel_caps: + - channel: voice + max_per_day: 1 + max_per_week: 5 + - channel: sms + max_per_day: 2 + max_per_week: 10 + - channel: email + max_per_day: 1 + max_per_week: 3 +quiet_hours: + start: "21:00" + end: "09:00" +emergency_override: true diff --git a/decision/orchestrator/enrollment_rules.yaml b/decision/orchestrator/enrollment_rules.yaml new file mode 100644 index 0000000000000000000000000000000000000000..272599c98f41c1cf6e521b3a567165468f7c6b01 --- /dev/null +++ b/decision/orchestrator/enrollment_rules.yaml @@ -0,0 +1,53 @@ +# Enrollment rules for journey lifecycle management. +# Controls eligibility, deduplication, and cooldown periods. + +dedup_key_fields: + - patient_id + - wedge_type + - trigger_event_id + +enrollment_criteria: + - wedge_type: pde + required_events: + - adt_discharge + eligible_statuses: + - discharged + cooldown_days: 30 + max_concurrent_journeys: 1 + + - wedge_type: pre_op + required_events: + - surgery_scheduled + eligible_statuses: + - scheduled + cooldown_days: 7 + max_concurrent_journeys: 1 + + - wedge_type: awv + required_events: + - awv_eligible + eligible_statuses: + - eligible + cooldown_days: 365 + max_concurrent_journeys: 1 + + - wedge_type: gap_closure + required_events: + - gap_identified + eligible_statuses: + - open + cooldown_days: 90 + max_concurrent_journeys: 3 + + - wedge_type: hra + required_events: + - hra_eligible + eligible_statuses: + - eligible + cooldown_days: 365 + max_concurrent_journeys: 1 + +global_enrollment_settings: + max_active_journeys_per_patient: 3 + require_consent: true + allow_re_enrollment: true diff --git a/decision/orchestrator/wedge_priority.yaml b/decision/orchestrator/wedge_priority.yaml new file mode 100644 index 0000000000000000000000000000000000000000..97d047c81ac6000ff1ae1b592db6d02a6b5c4b26 --- /dev/null +++ b/decision/orchestrator/wedge_priority.yaml @@ -0,0 +1,16 @@ +priorities: + - wedge_type: pde + safety_tier: 1 + priority_rank: 100 + - wedge_type: pre_op + safety_tier: 1 + priority_rank: 90 + - wedge_type: awv + safety_tier: 2 + priority_rank: 50 + - wedge_type: gap_closure + safety_tier: 2 + priority_rank: 40 + - wedge_type: hra + safety_tier: 2 + priority_rank: 30 diff --git a/decision/orchestrator/wedge_suppression.yaml b/decision/orchestrator/wedge_suppression.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5af11f58704fe23630ddf5dd6957015107dc6244 --- /dev/null +++ b/decision/orchestrator/wedge_suppression.yaml @@ -0,0 +1,78 @@ +# Temporal suppression rules for cross-wedge contact orchestration. +# After certain events, suppress outbound contacts for specified wedges. +# Escalation lock suppression blocks ALL wedges for ALL channels. + +suppression_rules: + # After any PDE voice call, suppress routine wedges for 24 hours + - rule_id: pde_call_suppresses_routine + trigger_wedge: pde + trigger_event: call_completed + suppress_wedges: + - awv + - gap_closure + - hra + suppress_channels: + - voice + - sms + - email + duration_hours: 24 + + # After any Pre-Op voice call, suppress routine wedges for 24 hours + - rule_id: preop_call_suppresses_routine + trigger_wedge: pre_op + trigger_event: call_completed + suppress_wedges: + - awv + - gap_closure + - hra + suppress_channels: + - voice + - sms + - email + duration_hours: 24 + + # After R3 escalation lock, suppress ALL wedges (all channels) + - rule_id: r3_lock_suppresses_all + trigger_wedge: any + trigger_event: escalation_lock_r3 + suppress_wedges: + - pde + - pre_op + - awv + - gap_closure + - hra + suppress_channels: + - voice + - sms + - email + duration_hours: 24 + + # After R2 escalation lock, suppress ALL wedges (all channels) + - rule_id: r2_lock_suppresses_all + trigger_wedge: any + trigger_event: escalation_lock_r2 + suppress_wedges: + - pde + - pre_op + - awv + - gap_closure + - hra + suppress_channels: + - voice + - sms + - email + duration_hours: 72 + + # After any voice call, suppress voice for same patient for 4 hours + - rule_id: voice_cooldown + trigger_wedge: any + trigger_event: call_completed + suppress_wedges: + - pde + - pre_op + - awv + - gap_closure + - hra + suppress_channels: + - voice + duration_hours: 4 diff --git a/decision/primitives/clarify.yaml b/decision/primitives/clarify.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e262cc20a807c6065b6df8411d10a2f2e0641074 --- /dev/null +++ b/decision/primitives/clarify.yaml @@ -0,0 +1,23 @@ +flow_id: clarify +type: primitive + +actions: + - step: 1 + type: ask + response_spec: + id: global_clarify + goal: "Ask the patient to repeat or clarify what they said" + tone: gentle_professional + must_include: + - "understand" + must_ask: + - "could you say that again" + must_not: + - "diagnos" + max_questions: 1 + collects: + - clarification_text + +exit: + on_complete: re_evaluate + on_unclear: handoff diff --git a/decision/primitives/consent.yaml b/decision/primitives/consent.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c2fb2e865a355db5628652f343d59270ca6a9ae5 --- /dev/null +++ b/decision/primitives/consent.yaml @@ -0,0 +1,29 @@ +flow_id: consent +type: primitive + +required_slots: + - consent_given + +actions: + - step: 1 + type: ask + response_spec: + id: consent_request + goal: "Obtain verbal consent to proceed with post-discharge check-in" + tone: warm_professional + must_include: + - "consent" + - "proceed" + must_ask: + - "okay to continue" + must_not: + - "required" + - "must" + - "have to" + max_questions: 1 + collects: + - consent_given + +exit: + on_complete: recovery_checkin + on_refused: end_no_consent diff --git a/decision/primitives/end_identity_failed.yaml b/decision/primitives/end_identity_failed.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1e10c65986d65c51293f6826a09aa2c772c3eb79 --- /dev/null +++ b/decision/primitives/end_identity_failed.yaml @@ -0,0 +1,27 @@ +flow_id: end_identity_failed +type: primitive + +# Terminal state when identity verification fails after max attempts. +# Per HIPAA telephone rules: do not disclose which identifier was wrong. +# Apologize, cite privacy standards, and end the clinical portion. +actions: + - step: 1 + type: respond + response_spec: + id: end_identity_failed + goal: "End the call due to identity verification failure, citing privacy standards" + tone: warm_professional + must_include: + - "privacy" + - "verify" + must_ask: [] + must_not: + - "wrong" + - "incorrect" + - "mismatch" + - "diagnos" + - "condition" + max_questions: 0 + +exit: + on_complete: end diff --git a/decision/primitives/end_no_consent.yaml b/decision/primitives/end_no_consent.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0f2fb6d3b8fe52cb58d7c7a92b6bfa9a2d141a64 --- /dev/null +++ b/decision/primitives/end_no_consent.yaml @@ -0,0 +1,22 @@ +flow_id: end_no_consent +type: primitive + +actions: + - step: 1 + type: respond + response_spec: + id: end_no_consent + goal: "Acknowledge the patient's decision to decline and end the call respectfully" + tone: warm_respectful + must_include: + - "understand" + - "respect" + must_ask: [] + must_not: + - "must" + - "have to" + - "required" + max_questions: 0 + +exit: + on_complete: end diff --git a/decision/primitives/greeting.yaml b/decision/primitives/greeting.yaml new file mode 100644 index 0000000000000000000000000000000000000000..99d708ee7adf75d3984aaa5f3d6ddd82a9a4fd6b --- /dev/null +++ b/decision/primitives/greeting.yaml @@ -0,0 +1,22 @@ +flow_id: greeting +type: primitive + +actions: + - step: 1 + type: respond + response_spec: + id: greeting_intro + goal: "Greet the patient warmly and introduce yourself as Avery, a post-discharge care assistant" + tone: warm_professional + must_include: + - "Avery" + - "checking in" + must_ask: [] + must_not: + - "diagnos" + - "doctor" + - "nurse" + max_questions: 0 + +exit: + on_complete: identity_verify diff --git a/decision/primitives/handoff.yaml b/decision/primitives/handoff.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f0dce7f032e509092f912663e1f4ad0f74cf3ea6 --- /dev/null +++ b/decision/primitives/handoff.yaml @@ -0,0 +1,34 @@ +flow_id: handoff +type: primitive + +actions: + - step: 1 + type: respond + response_spec: + id: global_handoff_notice + goal: "Let the patient know they will be connected with a person who can help" + tone: warm_professional + must_include: + - "connect" + - "someone" + must_ask: [] + must_not: + - "goodbye" + - "diagnos" + max_questions: 0 + + - step: 2 + type: handoff + target: general_nurse_line + urgency: normal + response_spec: + id: global_handoff_transfer + goal: "Transfer to general nurse line" + tone: professional + must_include: + - "transferring" + must_ask: [] + must_not: [] + +exit: + on_complete: end diff --git a/decision/primitives/identity_verify.yaml b/decision/primitives/identity_verify.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ed104ce855ff8f14377fb0871af851f948777fec --- /dev/null +++ b/decision/primitives/identity_verify.yaml @@ -0,0 +1,36 @@ +flow_id: identity_verify +type: primitive + +# Joint Commission NPSG.01.01.01: Use at least two patient identifiers. +# HIPAA telephone rules: full name + at least two identifying pieces of info. +# For outbound calls, the system already knows the patient's identity from +# the scheduling system. We confirm name + DOB = two-factor verification. +required_slots: + - patient_name_confirm + - patient_dob + +actions: + - step: 1 + type: ask + response_spec: + id: identity_name_dob_request + goal: "Verify patient identity by asking for their full name and date of birth" + tone: warm_professional + must_include: + - "verify" + - "name" + - "date of birth" + must_ask: + - "full name" + - "date of birth" + must_not: + - "diagnos" + - "social security" + - "medical record" + max_questions: 2 + collects: + - patient_name_confirm + - patient_dob + +exit: + on_complete: consent diff --git a/decision/primitives/recovery_checkin.yaml b/decision/primitives/recovery_checkin.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8ecedf107f12dc9c8b8aeb1d2ba71c4a852fd377 --- /dev/null +++ b/decision/primitives/recovery_checkin.yaml @@ -0,0 +1,64 @@ +flow_id: recovery_checkin +type: primitive + +required_slots: + - pain_level + - medication_adherence + - activity_level + +actions: + - step: 1 + type: ask + response_spec: + id: recovery_pain_check + goal: "Ask about current pain level and general recovery" + tone: warm_empathetic + must_include: + - "recovery" + - "pain" + must_ask: + - "How are you feeling" + - "pain" + must_not: + - "diagnos" + - "should be" + max_questions: 2 + collects: + - pain_level + + - step: 2 + type: ask + response_spec: + id: recovery_medication_check + goal: "Check medication adherence and any issues" + tone: warm_professional + must_include: + - "medication" + must_ask: + - "taking your medications" + must_not: + - "must" + - "have to" + max_questions: 2 + collects: + - medication_adherence + + - step: 3 + type: ask + response_spec: + id: recovery_activity_check + goal: "Check activity level and mobility" + tone: warm_encouraging + must_include: + - "activity" + must_ask: + - "getting around" + must_not: + - "should be doing more" + max_questions: 1 + collects: + - activity_level + +exit: + on_complete: wrap_up + on_concern: evaluate_concern diff --git a/decision/primitives/stt_repair.yaml b/decision/primitives/stt_repair.yaml new file mode 100644 index 0000000000000000000000000000000000000000..262f821558d47ddd2ace05368246fb1eea851e84 --- /dev/null +++ b/decision/primitives/stt_repair.yaml @@ -0,0 +1,22 @@ +flow_id: stt_repair +type: primitive + +actions: + - step: 1 + type: ask + response_spec: + id: stt_repair_request + goal: "Ask the patient to repeat what they said due to audio issues" + tone: gentle_professional + must_include: + - "hear" + must_ask: + - "say that again" + must_not: + - "diagnos" + - "don't worry" + max_questions: 1 + +exit: + on_complete: re_evaluate + on_unclear: handoff diff --git a/decision/primitives/wrap_up.yaml b/decision/primitives/wrap_up.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3093f72f257b7c607a86b34805ee2b8748cbe0b4 --- /dev/null +++ b/decision/primitives/wrap_up.yaml @@ -0,0 +1,21 @@ +flow_id: wrap_up +type: primitive + +actions: + - step: 1 + type: respond + response_spec: + id: wrap_up_closing + goal: "Thank the patient, summarize any follow-ups, and close the call" + tone: warm_professional + must_include: + - "thank you" + - "care team" + must_ask: [] + must_not: + - "diagnos" + - "guarantee" + max_questions: 0 + +exit: + on_complete: end diff --git a/decision/taxonomy/abnormal_bp/flows/clarify.yaml b/decision/taxonomy/abnormal_bp/flows/clarify.yaml new file mode 100644 index 0000000000000000000000000000000000000000..69106a878aafc344812cd4155e1d0bfc3c3f6b59 --- /dev/null +++ b/decision/taxonomy/abnormal_bp/flows/clarify.yaml @@ -0,0 +1,25 @@ +flow_id: clarify +type: clarification +domain: abnormal_bp + +actions: + - step: 1 + type: ask + response_spec: + id: abnormal_bp_clarify + goal: "Ask patient to describe their abnormal bp symptom more specifically" + tone: gentle_professional + must_include: + - "tell me more" + must_ask: + - "describe" + must_not: + - "diagnos" + - "don't worry" + max_questions: 1 + collects: + - abnormal_bp_description + +exit: + on_complete: re_evaluate + on_unclear: handoff diff --git a/decision/taxonomy/abnormal_bp/flows/escalate_r1.yaml b/decision/taxonomy/abnormal_bp/flows/escalate_r1.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e62de9f3d253a0d241dc4facd395aa51e002c55a --- /dev/null +++ b/decision/taxonomy/abnormal_bp/flows/escalate_r1.yaml @@ -0,0 +1,23 @@ +flow_id: escalate_r1 +type: escalation +domain: abnormal_bp + +actions: + - step: 1 + type: respond + response_spec: + id: r1_escalation_notice + goal: "Inform patient their care team will be notified and will follow up" + tone: warm_professional + must_include: + - "care team" + - "follow up" + must_ask: [] + must_not: + - "diagnos" + - "guarantee" + - "nothing to worry about" + max_questions: 0 + +exit: + on_complete: end diff --git a/decision/taxonomy/abnormal_bp/flows/escalate_r2.yaml b/decision/taxonomy/abnormal_bp/flows/escalate_r2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e7997739c5b314e46198fcc8b91f88f97a8e447b --- /dev/null +++ b/decision/taxonomy/abnormal_bp/flows/escalate_r2.yaml @@ -0,0 +1,37 @@ +flow_id: escalate_r2 +type: escalation +domain: abnormal_bp + +actions: + - step: 1 + type: respond + response_spec: + id: r2_escalation_notice + goal: "Inform patient a nurse will be connected to discuss their symptoms" + tone: calm_reassuring + must_include: + - "nurse" + - "connect" + - "important" + must_ask: [] + must_not: + - "diagnos" + - "don't worry" + - "probably" + max_questions: 0 + + - step: 2 + type: handoff + target: clinical_nurse + urgency: urgent + response_spec: + id: r2_handoff + goal: "Warm transfer to nurse with context summary" + tone: professional + must_include: + - "connecting" + must_ask: [] + must_not: [] + +exit: + on_complete: end diff --git a/decision/taxonomy/abnormal_bp/flows/escalate_r3.yaml b/decision/taxonomy/abnormal_bp/flows/escalate_r3.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ce19eace6089262e8092dd61b00de65bbb2fad2d --- /dev/null +++ b/decision/taxonomy/abnormal_bp/flows/escalate_r3.yaml @@ -0,0 +1,37 @@ +flow_id: escalate_r3 +type: escalation +domain: abnormal_bp + +actions: + - step: 1 + type: respond + response_spec: + id: r3_escalation_notice + goal: "Instruct patient to call 911 immediately and inform them of nurse transfer" + tone: calm_direct + must_include: + - "call 911" + - "right away" + must_ask: [] + must_not: + - "diagnos" + - "don't worry" + - "probably" + max_questions: 0 + + - step: 2 + type: handoff + target: clinical_nurse + urgency: immediate + response_spec: + id: r3_handoff + goal: "Transfer to clinical nurse with context summary" + tone: professional + must_include: + - "transferring" + must_ask: [] + must_not: + - "goodbye" + +exit: + on_complete: end diff --git a/decision/taxonomy/abnormal_bp/flows/handoff.yaml b/decision/taxonomy/abnormal_bp/flows/handoff.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4110f824f8d3dcc3f09cc3fe31948598e1b51a6b --- /dev/null +++ b/decision/taxonomy/abnormal_bp/flows/handoff.yaml @@ -0,0 +1,34 @@ +flow_id: handoff +type: handoff +domain: abnormal_bp + +actions: + - step: 1 + type: respond + response_spec: + id: abnormal_bp_handoff + goal: "Let patient know they will be connected with someone who can help" + tone: warm_professional + must_include: + - "connect" + - "help" + must_ask: [] + must_not: + - "goodbye" + max_questions: 0 + + - step: 2 + type: handoff + target: general_nurse_line + urgency: normal + response_spec: + id: abnormal_bp_handoff_transfer + goal: "Transfer to general nurse line" + tone: professional + must_include: + - "transferring" + must_ask: [] + must_not: [] + +exit: + on_complete: end diff --git a/decision/taxonomy/abnormal_bp/flows/safety_screen.yaml b/decision/taxonomy/abnormal_bp/flows/safety_screen.yaml new file mode 100644 index 0000000000000000000000000000000000000000..59234ca0ea43b07de797abf6d8cd3f0ff6122d3b --- /dev/null +++ b/decision/taxonomy/abnormal_bp/flows/safety_screen.yaml @@ -0,0 +1,37 @@ +flow_id: safety_screen +type: screening +domain: abnormal_bp + +required_slots: + - bp_report_confirmed + - bp_associated_symptoms + +actions: + - step: 1 + type: ask + response_spec: + id: abnormal_bp_screen_step1 + goal: "Gather details about BP reading and associated symptoms" + tone: calm_urgent + must_include: + - "blood pressure" + must_ask: + - "What was your blood pressure reading?" + - "Are you having any headache, vision changes, or chest pain?" + must_not: + - "don't worry" + - "probably nothing" + max_questions: 2 + collects: + - bp_report_confirmed + - bp_associated_symptoms + - bp_systolic + - bp_diastolic + - bp_critical + +exit: + on_complete: evaluate_risk + on_r3: escalate_r3 + on_r2: escalate_r2 + on_low_risk: escalate_r1 + on_unclear: escalate_r2 diff --git a/decision/taxonomy/abnormal_bp/rules.yaml b/decision/taxonomy/abnormal_bp/rules.yaml new file mode 100644 index 0000000000000000000000000000000000000000..64343f6c47c21a77f096f7e1a2c014d2bdf900d2 --- /dev/null +++ b/decision/taxonomy/abnormal_bp/rules.yaml @@ -0,0 +1,33 @@ +domain: abnormal_bp +target_risk_class: R2 + +decision_rules: + - id: abnormal_bp_high_confidence + if: + confidence: high + then: + flow: safety_screen + + - id: abnormal_bp_medium_confidence + if: + confidence: medium + then: + flow: safety_screen + + - id: abnormal_bp_low_confidence + if: + confidence: low + then: + flow: clarify + + - id: abnormal_bp_r3_escalation + if: + risk_class: R3 + then: + flow: escalate_r3 + + - id: abnormal_bp_r2_escalation + if: + risk_class: R2 + then: + flow: escalate_r2 diff --git a/decision/taxonomy/abnormal_bp/triggers.yaml b/decision/taxonomy/abnormal_bp/triggers.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9a6f7c076468d07978f3089f20e4193aa848b50e --- /dev/null +++ b/decision/taxonomy/abnormal_bp/triggers.yaml @@ -0,0 +1,75 @@ +domain: abnormal_bp +priority: 41 + +lexical_signals: + high: + phrases: + - "blood pressure readings very high at home" + - "blood pressure consistently above 160" + - "hypertensive readings at home" + - "blood pressure dangerously high" + - "BP won't come down" + - "blood pressure consistently elevated" + regex: + - "blood\\s+pressure.*(high|elevated|above\\s+1[6-9]\\d)" + - "BP.*(high|won'?t\\s+come)" + medium: + phrases: + - "blood pressure elevated at home" + - "home BP readings are high" + - "blood pressure not controlled" + - "readings above normal consistently" + - "blood pressure higher than usual" + # --- MINIMIZER coverage --- + - "blood pressure was a little high" + - "my numbers have been kind of elevated" + - "BP might be a bit off" + - "readings were a little higher than usual" + - "blood pressure seems higher but it's probably just stress" + - "machine said it was high but those things aren't always right" + - "numbers are up a bit" + - "pressure behind my eyes" + - "head feels kind of heavy" + - "felt a bit dizzy and checked my blood pressure" + - "took my blood pressure and it was kind of high" + - "blood pressure is running higher than normal" + - "headache and my blood pressure was up" + - "blood pressure is creeping up" + - "numbers aren't great but probably nothing" + - "BP has been bouncing around" + regex: + - "(blood\\s+pressure|BP|numbers|readings).{0,20}(a\\s+)?(little|bit|kind of|sort of|somewhat|slightly).{0,10}(high|elevated|up|off)" + - "(blood\\s+pressure|BP|numbers|readings).{0,20}(higher|up|elevated).{0,10}(than usual|than normal|lately|recently|this week)" + - "(blood\\s+pressure|BP).{0,20}(probably|might be|could be).{0,15}(stress|nothing|fine|okay|normal)" + - "(head|pressure|headache).{0,15}(heavy|pound|throb|pressure|tight).{0,20}(blood pressure|BP)" + - "(dizzy|lightheaded|blurry|headache).{0,25}(blood pressure|BP|check|reading|numbers)" + - "(machine|monitor|reading|cuff).{0,20}(said|showed|read|was).{0,15}(high|elevated|up|above)" + - "(took|checked|tested).{0,10}(my\\s+)?(blood\\s+pressure|BP).{0,15}(high|elevated|up|above|not great)" + - "(blood\\s+pressure|BP).{0,15}(creep|bounc|run|fluctuat|trend|climb).{0,10}(up|around|higher|ing)" + # --- specific readings --- + - "(blood\\s+pressure|BP|reading).{0,15}(was|is|showed|read)\\s+\\d{3}\\s*(over|/)\\s*\\d{2,3}" + # --- symptomatic high BP --- + - "(headache|vision|nosebleed|nose\\s+bleed).{0,25}(blood\\s+pressure|BP).{0,15}(high|elevated|up)" + # --- Reading + minimization (R2 recall) --- + - "(BP|blood pressure).{0,15}(\\d{2,3}).{0,30}(nothing|stress|probably|fine|okay)" + - "(\\d{3}).{0,10}(over|/).{0,10}(\\d{2,3}).{0,25}(probably|nothing|just|stress)" + - "(reading|number|BP).{0,20}(said|was|showed).{0,15}(\\d{3}).{0,20}(but|though|stress|nothing)" + # --- Symptom combinations with elevated reading --- + - "(headache|pounding|throbbing).{0,25}(elevated|high).{0,15}(reading|BP|blood pressure)" + - "(palpitations|racing|pounding).{0,25}(high|elevated).{0,15}(BP|blood pressure|reading)" + - "(dizzy|lightheaded|blurry).{0,25}(blood pressure|BP).{0,15}(checked|was|showed).{0,15}(high|elevated|\\d{3})" + # --- Machine skepticism with documented reading (should still escalate) --- + - "(machine|monitor|cuff).{0,20}(aren't|not).{0,15}(right|accurate).{0,20}(but|though|still).{0,20}(\\d{3}|high|elevated)" + - "(don't trust|not accurate).{0,25}(machine|monitor).{0,20}(said|showed|read).{0,15}(\\d{3}|high)" + low: + partials: + - "blood pressure" + - "BP readings" + - "hypertension" + +negation_handling: + patterns: + - "blood pressure normal" + - "BP is fine" + - "readings are good" + action: downgrade_confidence diff --git a/decision/taxonomy/acute_confusion/flows/clarify.yaml b/decision/taxonomy/acute_confusion/flows/clarify.yaml new file mode 100644 index 0000000000000000000000000000000000000000..aee5b62ad60d9d5ed71c9d3ccc8ac46f1c4ad0ea --- /dev/null +++ b/decision/taxonomy/acute_confusion/flows/clarify.yaml @@ -0,0 +1,25 @@ +flow_id: clarify +type: clarification +domain: acute_confusion + +actions: + - step: 1 + type: ask + response_spec: + id: acute_confusion_clarify + goal: "Ask patient to describe their acute confusion symptom more specifically" + tone: gentle_professional + must_include: + - "tell me more" + must_ask: + - "describe" + must_not: + - "diagnos" + - "don't worry" + max_questions: 1 + collects: + - acute_confusion_description + +exit: + on_complete: re_evaluate + on_unclear: handoff diff --git a/decision/taxonomy/acute_confusion/flows/escalate_r2.yaml b/decision/taxonomy/acute_confusion/flows/escalate_r2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..56453291c86b1038d498ad70ebc7e86a59e02826 --- /dev/null +++ b/decision/taxonomy/acute_confusion/flows/escalate_r2.yaml @@ -0,0 +1,37 @@ +flow_id: escalate_r2 +type: escalation +domain: acute_confusion + +actions: + - step: 1 + type: respond + response_spec: + id: r2_escalation_notice + goal: "Inform patient a nurse will follow up same day about their symptoms" + tone: calm_reassuring + must_include: + - "nurse" + - "follow up" + - "same day" + must_ask: [] + must_not: + - "diagnos" + - "don't worry" + - "probably" + max_questions: 0 + + - step: 2 + type: handoff + target: clinical_nurse + urgency: same_day + response_spec: + id: r2_handoff + goal: "Schedule same-day nurse callback with context summary" + tone: professional + must_include: + - "follow up" + must_ask: [] + must_not: [] + +exit: + on_complete: end diff --git a/decision/taxonomy/acute_confusion/flows/handoff.yaml b/decision/taxonomy/acute_confusion/flows/handoff.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9479c0d6b7d31d289788d2b136addf9618797f60 --- /dev/null +++ b/decision/taxonomy/acute_confusion/flows/handoff.yaml @@ -0,0 +1,34 @@ +flow_id: handoff +type: handoff +domain: acute_confusion + +actions: + - step: 1 + type: respond + response_spec: + id: acute_confusion_handoff + goal: "Let patient know they will be connected with someone who can help" + tone: warm_professional + must_include: + - "connect" + - "help" + must_ask: [] + must_not: + - "goodbye" + max_questions: 0 + + - step: 2 + type: handoff + target: general_nurse_line + urgency: normal + response_spec: + id: acute_confusion_handoff_transfer + goal: "Transfer to general nurse line" + tone: professional + must_include: + - "transferring" + must_ask: [] + must_not: [] + +exit: + on_complete: end diff --git a/decision/taxonomy/acute_confusion/flows/safety_screen.yaml b/decision/taxonomy/acute_confusion/flows/safety_screen.yaml new file mode 100644 index 0000000000000000000000000000000000000000..bec88a4d2984a457c3073b7f18055e879da142d8 --- /dev/null +++ b/decision/taxonomy/acute_confusion/flows/safety_screen.yaml @@ -0,0 +1,53 @@ +flow_id: safety_screen +type: screening +domain: acute_confusion + +required_slots: + - confusion_onset + - orientation_status + - medication_changes + - recent_illness + +actions: + - step: 1 + type: ask + response_spec: + id: safety_screen_step1 + goal: "Gather initial details about the patient's symptoms" + tone: calm_urgent + must_include: + - "tell me" + must_ask: + - "confusion onset" + - "orientation status" + must_not: + - "don't worry" + - "probably nothing" + max_questions: 2 + collects: + - confusion_onset + - orientation_status + + - step: 2 + type: ask + response_spec: + id: safety_screen_step2 + goal: "Gather additional details to complete the safety assessment" + tone: calm_urgent + must_include: + - "also" + must_ask: + - "medication changes" + - "recent illness" + must_not: + - "don't worry" + - "probably fine" + max_questions: 2 + collects: + - medication_changes + - recent_illness + +exit: + on_complete: evaluate_risk + on_r2: escalate_r2 + on_unclear: clarify diff --git a/decision/taxonomy/acute_confusion/rules.yaml b/decision/taxonomy/acute_confusion/rules.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5e6dd70e1cf4493b0c7ecefb16eedc3aaa6f8953 --- /dev/null +++ b/decision/taxonomy/acute_confusion/rules.yaml @@ -0,0 +1,27 @@ +domain: acute_confusion +target_risk_class: R2 + +decision_rules: + - id: acute_confusion_high_confidence + if: + confidence: high + then: + flow: safety_screen + + - id: acute_confusion_medium_confidence + if: + confidence: medium + then: + flow: safety_screen + + - id: acute_confusion_low_confidence + if: + confidence: low + then: + flow: clarify + + - id: acute_confusion_r2_escalation + if: + risk_class: R2 + then: + flow: escalate_r2 diff --git a/decision/taxonomy/acute_confusion/triggers.yaml b/decision/taxonomy/acute_confusion/triggers.yaml new file mode 100644 index 0000000000000000000000000000000000000000..38c787698be6e30687c54b28723d673254585efc --- /dev/null +++ b/decision/taxonomy/acute_confusion/triggers.yaml @@ -0,0 +1,296 @@ +domain: acute_confusion +priority: 79 + +lexical_signals: + high: + phrases: + - "suddenly confused" + - "new confusion" + - "acute delirium" + - "suddenly not making sense" + - "head feels scrambled" + - "doesn't know where he is" + - "doesn't know where she is" + - "doesn't recognize me" + - "talking gibberish" + - "talking nonsense" + - "saying things that make no sense" + - "completely disoriented" + - "woke up and didn't know who I was" + - "can't tell me what year it is" + - "thinks he is somewhere else" + - "thinks she is somewhere else" + - "not making any sense at all" + - "hallucinating and confused" + - "seeing things that are not there and confused" + - "confused and aggressive" + regex: + - "(sudden|new|acute)\\s+(confusion|delirium)" + - "doesn[']?t\\s+know\\s+where\\s+(they|he|she)" + - "disoriented\\s+and\\s+wasn[']?t\\s+before" + - "don[']?t\\s+know\\s+what\\s+day" + - "keep\\s+forgetting\\s+what\\s+I\\s+was\\s+doing" + - "doesn[']?t\\s+(recognize|know)\\s+(me|us|his|her|the|where)" + - "talking\\s+(gibberish|nonsense|crazy|rubbish|garbage|jibberish)" + - "(say|said|saying)\\s+(things|stuff|words).{0,10}(that\\s+)?(make|do)n?[']?t?\\s+(no\\s+)?sense" + - "(complete|total)ly\\s+(disoriented|confused|out\\s+of\\s+it|lost)" + - "(woke|wake).{0,10}up.{0,15}(didn[']?t|doesn[']?t|not)\\s+(know|recognize)" + - "can[']?t\\s+tell\\s+(me|us|you).{0,10}(what|where|who|the)" + - "thinks?\\s+(he|she|they|I).{0,5}(is|am|are)\\s+(somewhere|in\\s+a|at\\s+the|back\\s+in)" + - "(hallucinat|seeing\\s+things|hearing\\s+things).{0,15}(and\\s+)?(confused|disoriented)" + - "(confused|disoriented).{0,15}(and\\s+)?(aggressive|agitated|combative|violent|yelling)" + medium: + phrases: + - "acting confused" + - "not themselves today" + - "seems disoriented" + - "confused since this morning" + - "altered mental status" + - "not feeling right" + - "walking around in a fog" + - "acting off" + - "not as sharp today" + - "misplacing stuff" + - "keeps asking the same thing" + - "not acting like himself" + - "not acting like herself" + - "not acting like myself" + - "acting really weird" + - "got lost in his own house" + - "got lost in her own house" + - "couldn't figure out how to use the remote" + - "put the milk in the cupboard" + - "called me by the wrong name" + - "forgot where the bathroom is" + - "staring off into space" + - "eyes look glazed over" + - "just mumbling and not making sense" + - "couldn't finish a sentence" + - "words are all jumbled up" + - "tried to leave the house in pajamas at 3am" + - "thought it was morning when it was night" + - "keeps getting up and wandering around" + - "having trouble following the conversation" + # --- MINIMIZER coverage --- + - "just a little mixed up sometimes" + - "a bit forgetful lately" + - "thoughts are kind of jumbled" + - "brain won't cooperate" + - "probably just tired" + - "I'm fine, just a bit foggy" + - "just got confused for a minute" + - "a little bit spacey I guess" + - "he's always been a little forgetful" + - "she's just having an off day" + - "my mind keeps wandering" + - "having a hard time concentrating" + - "losing my train of thought" + - "thoughts keep sliding around" + - "brain keeps skipping" + # --- additional patterns --- + - "doesn't know what year it is" + - "thinks the kids are still little" + - "talking to people who aren't here" + - "tried to go to a job he retired from" + regex: + - "(can[']?t|keep)\\s+(remember|recall)" + - "(head|brain).*(scrambled|buffering|foggy|not working)" + - "keep\\s+(forgetting|losing)\\s+(my\\s+)?(train\\s+of\\s+thought|what)" + - "can[']?t\\s+remember\\s+things\\s+today" + - "brain[']?s\\s+buffering" + - "head[']?s\\s+not\\s+working" + - "sounded\\s+weird\\s+on\\s+the\\s+phone" + - "can[']?t\\s+think\\s+straight" + - "doesn[']?t\\s+track" + - "(acting|seems?|been)\\s+(really\\s+)?(off|weird|strange)" + - "(my|his|her)\\s+(head|brain|mind).*(off|foggy|cloudy|fuzzy|not right|skipping)" + - "misplac(e|ed|ing)\\s+(my|his|her|the)" + - "forgot\\s+(the\\s+)?(neighbor|day|where|what|why)" + - "(daughter|son|wife|husband|partner|sister|spouse)\\s+(says?|keeps?\\s+saying)\\s+(I[']?m|he[']?s|she[']?s)\\s+.?off" + - "not\\s+acting\\s+like\\s+(my|him|her|them)sel" + - "mentally\\s+.?off" + - "couldn[']?t\\s+orient" + - "(asked|saying)\\s+the\\s+same\\s+(question|thing)" + - "rereading.*(same|email|sentence)" + - "brain\\s+is\\s+skipping" + - "speech\\s+(is\\s+)?(sort\\s+of\\s+)?jumbled" + - "words\\s+(are\\s+)?coming\\s+out\\s+wrong" + - "called\\s+the\\s+\\w+\\s+the\\s+.?(fridge|microwave|oven)" + - "mixed\\s+up\\s+(sometimes|on)" + - "she[']?s\\s+acting\\s+really\\s+weird" + - "he[']?s\\s+acting\\s+really\\s+weird" + - "(been|was)\\s+acting.*off" + - "acting.{0,15}off" + - "(spouse|partner|wife|husband)\\s+said\\s+(I|he|she)\\s+was\\s+.?weird" + - "kept\\s+saying\\s+(she|he)\\s+needed\\s+to" + - "little\\s+weird\\s+mistakes" + - "been\\s+retired.*go\\s+to\\s+work" + - "(got|get|getting)\\s+lost\\s+(in\\s+)?(his|her|the|own)\\s+(own\\s+)?(house|home|room|yard)" + - "(put|left|placed).{0,10}(milk|keys|phone|remote|wallet).{0,10}(in\\s+the\\s+)?(cupboard|oven|fridge|freezer|wrong|weird)" + - "called\\s+(me|him|her|us).{0,10}(by\\s+)?(the\\s+)?wrong\\s+name" + - "forgot\\s+where\\s+(the\\s+)?(bathroom|kitchen|bedroom|door)" + - "(star|gaz).{0,5}(ing|ed)\\s+(off|into\\s+space|at\\s+nothing|blankly)" + - "eyes?.{0,10}(glaz|glass|blank|vacant|empty)" + - "(mumbl|mutter|rambl).{0,5}(ing|ed).{0,10}(not\\s+)?(mak|no\\s+sense)" + - "(can[']?t|couldn[']?t|unable)\\s+(finish|complete).{0,10}(a\\s+)?(sentence|thought|word)" + - "words?.{0,10}(jumbl|garbl|scrambl|mix)" + - "(tried|try|trying)\\s+to\\s+(leave|go\\s+out|walk\\s+out).{0,15}(pajama|nightgown|underwear|naked|middle\\s+of\\s+the\\s+night|3\\s*am|2\\s*am)" + - "thought\\s+it\\s+was\\s+(morning|night|day|tuesday|monday|\\d{4})" + - "(wander|roam|pace).{0,5}(ing|ed).{0,10}(around|aimless|the\\s+house|the\\s+hall)" + - "(trouble|difficulty|hard\\s+time).{0,10}(follow|track|understand).{0,10}(the\\s+)?(conversation|what)" + # --- MINIMIZER / CONFUSED_VAGUE coverage --- + - "(just|only).{0,10}(a\\s+)?(little|bit|slight).{0,15}(confused|mixed up|foggy|forgetful|spacey|scattered)" + - "(probably|might be).{0,15}(just|nothing|tired|medication|stress|age|old|getting older)" + - "(confused|foggy|forgetful|mixed up).{0,15}(but|though).{0,15}(fine|okay|managing|not that bad)" + - "(thoughts?|brain|head|mind).{0,15}(won'?t|not|isn'?t|doesn'?t).{0,10}(cooperat|work|focus|click|connect)" + - "(mind|thoughts?).{0,15}(wander|drift|slide|slip|scatter|jumble|scramble|all over)" + - "(hard|harder|having trouble|difficulty).{0,10}(concentrat|focus|think|follow|track|keep up)" + low: + partials: + - "confused" + - "disoriented" + - "delirium" + - "altered" + - "not making sense" + - "foggy" + - "scrambled" + - "mixed up" + - "spacey" + - "out of it" + - "acting off" + - "feel off" + - "feels off" + - "glazed" + - "incoherent" + - "wandering" + - "mumbling" + - "sundowning" + - "not oriented" + +negation_handling: + patterns: + - "not confused" + - "thinking clearly" + - "mental status is fine" + - "I can think clearly" + - "head is fine" + - "oriented and alert" + - "alert and oriented" + - "no confusion" + - "confusion resolved" + - "back to normal mentally" + - "sharp as usual" + - "no delirium" + - "mind is clear" + - "thinking clearly now" + - "not confused anymore" + - "confusion cleared up" + - "brain fog lifted" + - "acting like themselves again" + - "making sense now" + - "remembering things fine" + - "knows where he is" + - "knows where she is" + - "oriented to person place and time" + - "mental status is back to baseline" + # --- non-clinical confusion context (R1 scenarios) --- + - "confused about the instructions" + - "confused about my medications" + - "confused about the schedule" + - "confused about the timing" + - "confused about the paperwork" + - "confused about which pill" + - "confused by all the" + - "confused with the" + - "confused about what to do" + - "confused about when to" + - "got confused about" + - "a little confused about" + - "confused about my appointment" + - "confused about my discharge" + - "I get confused with all the medical" + - "confusing to keep track" + - "it's all a bit confusing" + - "the instructions were confusing" + - "no, I'm thinking clearly" + - "no confusion" + - "not confused" + - "I'm clear headed" + - "mind is fine" + - "no I haven't been confused" + # --- medication/instruction memory context --- + - "remember the dosage" + - "remember what the doctor" + - "remember what to take" + - "remember the instructions" + - "remember the schedule" + - "remember which pill" + - "remember how many" + - "remember what I was told" + - "remember if I" + - "remember what I" + - "remember which" + - "remember what my" + # --- wound care / administrative confusion context --- + - "confused about the whole process" + - "confused about the process" + - "confused about how this works" + - "confused about whether" + - "confused about how to" + - "confused with forms" + - "confused about forms" + - "confused about calling" + - "i get confused with" + - "mixed up with all these appointments" + - "mixed up with appointments" + - "mixed up on how this works" + - "can't remember the name" + - "can't remember which one" + - "can't remember which doctor" + - "can't remember the doctor" + - "can't remember who I saw" + - "can't remember her name" + - "can't remember his name" + - "probably nothing" + - "probably just need" + - "probably just a general" + - "probably just a check" + - "probably just age" + - "wound care" + - "dressing change" + - "bandage change" + - "changing the bandage" + - "sterile gauze" + - "buy gauze" + - "healing okay" + - "healing fine" + - "healing well" + - "healing right" + - "forgetting which pill" + - "forgetting the schedule" + - "forgetting what to take" + - "recall the dosage" + - "recall what the doctor" + - "mixed up about my medications" + - "mixed up about the schedule" + - "mixed up about what to take" + - "mixed up the pills" + - "mixed up my medications" + - "pharmacy label" + - "label says something different" + - "label says" + - "prescription says" + - "the bottle says" + - "medication question" + - "medication schedule" + - "dosing schedule" + - "asking about my" + - "question about my" + - "refill" + # --- administrative context (suppress) --- + - "schedule an appointment" + - "follow-up appointment" + - "appointment timing" + - "routine check" + - "just a question" + action: downgrade_confidence diff --git a/decision/taxonomy/acute_illness_preop/flows/clarify.yaml b/decision/taxonomy/acute_illness_preop/flows/clarify.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9a19e9ae6cf221b0541b69d4cf5aeda0a6a3aeda --- /dev/null +++ b/decision/taxonomy/acute_illness_preop/flows/clarify.yaml @@ -0,0 +1,25 @@ +flow_id: clarify +type: clarification +domain: acute_illness_preop + +actions: + - step: 1 + type: ask + response_spec: + id: acute_illness_preop_clarify + goal: "Ask patient to describe how they are feeling before their surgery" + tone: gentle_professional + must_include: + - "tell me more" + must_ask: + - "describe" + must_not: + - "diagnos" + - "don't worry" + max_questions: 1 + collects: + - acute_illness_description + +exit: + on_complete: re_evaluate + on_unclear: handoff diff --git a/decision/taxonomy/acute_illness_preop/flows/escalate_r2.yaml b/decision/taxonomy/acute_illness_preop/flows/escalate_r2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1c598ce629f1252f1a358283d4b6e31a8da709d1 --- /dev/null +++ b/decision/taxonomy/acute_illness_preop/flows/escalate_r2.yaml @@ -0,0 +1,37 @@ +flow_id: escalate_r2 +type: escalation +domain: acute_illness_preop + +actions: + - step: 1 + type: respond + response_spec: + id: acute_illness_preop_r2_escalation_notice + goal: "Inform patient that the surgical team will follow up same day about their illness before the procedure" + tone: calm_reassuring + must_include: + - "surgical team" + - "follow up" + - "same day" + must_ask: [] + must_not: + - "diagnos" + - "don't worry" + - "probably" + max_questions: 0 + + - step: 2 + type: handoff + target: surgical_nurse + urgency: same_day + response_spec: + id: acute_illness_preop_r2_handoff + goal: "Schedule same-day surgical team callback with illness context" + tone: professional + must_include: + - "follow up" + must_ask: [] + must_not: [] + +exit: + on_complete: end diff --git a/decision/taxonomy/acute_illness_preop/flows/escalate_r3.yaml b/decision/taxonomy/acute_illness_preop/flows/escalate_r3.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6be71bb0e0128b573b352e2b0465111d0d1551f8 --- /dev/null +++ b/decision/taxonomy/acute_illness_preop/flows/escalate_r3.yaml @@ -0,0 +1,37 @@ +flow_id: escalate_r3 +type: escalation +domain: acute_illness_preop + +actions: + - step: 1 + type: respond + response_spec: + id: r3_escalation_notice + goal: "Instruct patient to call 911 immediately and inform them of nurse transfer" + tone: calm_direct + must_include: + - "call 911" + - "right away" + must_ask: [] + must_not: + - "diagnos" + - "don't worry" + - "probably" + max_questions: 0 + + - step: 2 + type: handoff + target: clinical_nurse + urgency: immediate + response_spec: + id: r3_handoff + goal: "Transfer to clinical nurse with context summary" + tone: professional + must_include: + - "transferring" + must_ask: [] + must_not: + - "goodbye" + +exit: + on_complete: end diff --git a/decision/taxonomy/acute_illness_preop/flows/reassure_low_risk.yaml b/decision/taxonomy/acute_illness_preop/flows/reassure_low_risk.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a34b1e11c70d3c0fa4f89b3cf1ffa0247a40f884 --- /dev/null +++ b/decision/taxonomy/acute_illness_preop/flows/reassure_low_risk.yaml @@ -0,0 +1,21 @@ +flow_id: reassure_low_risk +type: resolution +domain: acute_illness_preop + +actions: + - step: 1 + type: respond + response_spec: + id: acute_illness_preop_reassure + goal: "Acknowledge the patient's concern and note that their care team will be informed for routine follow-up before surgery" + tone: warm_professional + must_include: + - "care team" + - "follow up" + must_not: + - "emergency" + - "don't worry" + max_questions: 0 + +exit: + on_complete: end diff --git a/decision/taxonomy/acute_illness_preop/flows/safety_screen.yaml b/decision/taxonomy/acute_illness_preop/flows/safety_screen.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f2e9eaf865c3ba7009ba4842fbbd7f2c6d739e89 --- /dev/null +++ b/decision/taxonomy/acute_illness_preop/flows/safety_screen.yaml @@ -0,0 +1,55 @@ +flow_id: safety_screen +type: screening +domain: acute_illness_preop + +required_slots: + - illness_fever_present + - illness_respiratory_symptoms + - illness_gi_symptoms + - illness_onset_timing + +actions: + - step: 1 + type: ask + response_spec: + id: acute_illness_preop_screen_step1 + goal: "Assess whether the patient has a fever and respiratory symptoms" + tone: calm_urgent + must_include: + - "symptoms" + must_ask: + - "Do you have a fever or feel feverish?" + - "Are you experiencing any cough, sore throat, or trouble breathing?" + must_not: + - "don't worry" + - "probably nothing" + max_questions: 2 + collects: + - illness_fever_present + - illness_respiratory_symptoms + + - step: 2 + type: ask + response_spec: + id: acute_illness_preop_screen_step2 + goal: "Assess GI symptoms and when symptoms started" + tone: calm_urgent + must_include: + - "also" + must_ask: + - "Have you had any nausea, vomiting, or diarrhea?" + - "When did you first start feeling sick?" + must_not: + - "don't worry" + - "probably fine" + max_questions: 2 + collects: + - illness_gi_symptoms + - illness_onset_timing + +exit: + on_complete: evaluate_risk + on_r2: escalate_r2 + on_r3: escalate_r3 + on_low_risk: reassure_low_risk + on_unclear: escalate_r2 diff --git a/decision/taxonomy/acute_illness_preop/rules.yaml b/decision/taxonomy/acute_illness_preop/rules.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e644965b64d49f097161e288634b58bec98b7441 --- /dev/null +++ b/decision/taxonomy/acute_illness_preop/rules.yaml @@ -0,0 +1,33 @@ +domain: acute_illness_preop +target_risk_class: R2 + +decision_rules: + - id: acute_illness_preop_high_confidence + if: + confidence: high + then: + flow: safety_screen + + - id: acute_illness_preop_medium_confidence + if: + confidence: medium + then: + flow: safety_screen + + - id: acute_illness_preop_low_confidence + if: + confidence: low + then: + flow: clarify + + - id: acute_illness_preop_r3_escalation + if: + risk_class: R3 + then: + flow: escalate_r3 + + - id: acute_illness_preop_r2_escalation + if: + risk_class: R2 + then: + flow: escalate_r2 diff --git a/decision/taxonomy/acute_illness_preop/triggers.yaml b/decision/taxonomy/acute_illness_preop/triggers.yaml new file mode 100644 index 0000000000000000000000000000000000000000..420e3b91fe3ccf4e1ac46d52ee3b93e1e447a430 --- /dev/null +++ b/decision/taxonomy/acute_illness_preop/triggers.yaml @@ -0,0 +1,83 @@ +domain: acute_illness_preop +priority: 69 + +lexical_signals: + high: + phrases: + - "came down with a cold before surgery" + - "running a fever" + - "started coughing" + - "have the flu" + - "stomach bug before my procedure" + - "feel sick before surgery" + - "vomiting before my surgery" + - "diarrhea before my procedure" + - "woke up with a fever this morning" + - "sore throat and fever before my operation" + - "throwing up since last night" + - "coughing up phlegm before surgery" + - "came down with something before my procedure" + - "been sick the last few days and surgery is soon" + - "got sick right before surgery" + - "fever of 101 and surgery is tomorrow" + - "been vomiting and have surgery coming up" + - "chills and body aches before my procedure" + regex: + - "(fever|cold|flu|cough|vomit|diarrhea|throwing\\s+up|sick|ill).{0,25}(before|prior).{0,10}(surgery|procedure|operation)" + - "(surgery|procedure|operation).{0,25}(fever|cold|flu|cough|vomit|diarrhea|throwing\\s+up|sick|ill)" + - "(came\\s+down|come\\s+down|got|gotten).{0,15}(sick|cold|flu|bug|fever|ill).{0,20}(surgery|procedure|operation)" + - "(running|have|got|gotten|developed).{0,10}(a\\s+)?(fever|temperature).{0,20}(surgery|procedure|operation)" + - "(vomit|throw|threw).{0,10}(up|ing).{0,20}(surgery|procedure|operation|before|prior)" + - "(diarrhea|stomach\\s+bug|stomach\\s+flu|gi\\s+bug).{0,20}(surgery|procedure|operation|before|prior)" + - "(?=180/120 + end-organ damage) + # requires immediate ED evaluation. Symptoms: headache, vision changes, + # chest pain, SOB, altered mentation, nosebleed. + - id: htn_emergency_symptoms + if: + domain: hypertension_uncontrolled + slots_present: + - bp_symptoms + slot_values: + bp_symptoms: "yes" + then: + risk_class: R2 + + - id: htn_emergency_critical_reading + if: + domain: hypertension_uncontrolled + slots_present: + - bp_reading_critical + slot_values: + bp_reading_critical: "yes" + then: + risk_class: R3 + + # ── Psychiatric Med Crisis: NMS and Serotonin Syndrome (CRITICAL) ────── + # PubMed evidence: NMS mortality 10-20% even with treatment. Serotonin + # syndrome mortality 2-12%. Both require immediate emergency care. + - id: psych_med_nms_symptoms + if: + domain: psychiatric_med_crisis + slots_present: + - nms_symptoms + slot_values: + nms_symptoms: "yes" + then: + risk_class: R3 + + - id: psych_med_serotonin_syndrome + if: + domain: psychiatric_med_crisis + slots_present: + - serotonin_syndrome_symptoms + slot_values: + serotonin_syndrome_symptoms: "yes" + then: + risk_class: R3 + + # ── Heart Failure Worsening: Pulmonary Edema (MAJOR) ─────────────────── + # PubMed evidence: Pink frothy sputum = flash pulmonary edema, requires + # immediate ED evaluation. Mortality 12% in-hospital. + - id: hf_pink_frothy_sputum + if: + domain: heart_failure_worsening + slots_present: + - pink_frothy_sputum + slot_values: + pink_frothy_sputum: "yes" + then: + risk_class: R3 + + # ── Palpitations with Syncope (MAJOR) ────────────────────────────────── + # PubMed evidence: Syncope with palpitations suggests ventricular + # tachycardia or other life-threatening arrhythmia. AHA: cardiac syncope + # has 1-year mortality 18-33%. + - id: palpitations_with_syncope + if: + domain: palpitations_dizziness + slots_present: + - syncope_history + slot_values: + syncope_history: "yes" + then: + risk_class: R3 + + # ── Post-Discharge Fever Very High (MAJOR) ───────────────────────────── + # PubMed evidence: Fever >= 103F (39.4C) post-discharge with altered + # mentation suggests sepsis. Sepsis mortality increases 7.6% per hour + # of delayed treatment. + - id: fever_very_high_with_confusion + if: + domain: post_discharge_fever + slots_present: + - fever_very_high + - confusion_present + slot_values: + fever_very_high: "yes" + confusion_present: "yes" + then: + risk_class: R3 + + - id: fever_very_high + if: + domain: post_discharge_fever + slots_present: + - fever_very_high + slot_values: + fever_very_high: "yes" + then: + risk_class: R3 + + # ── Anticoagulation: Severe Hemorrhage (MAJOR) ───────────────────────── + # PubMed evidence: Major hemorrhage on anticoagulation has 9-14% mortality. + # Signs: hematemesis, large volume rectal bleeding, hemoptysis, intracranial + # hemorrhage symptoms. + - id: anticoag_bleeding_severe + if: + domain: anticoagulation_monitoring + slots_present: + - bleeding_severity + slot_values: + bleeding_severity: "severe" + then: + risk_class: R3 + +hard_escalate_domains: + - suicidal_ideation + - homicidal_ideation + +turn_outcomes: + - proceed + - clarify + - escalate + - handoff + - end + +# ══════════════════════════════════════════════════════════════════════════════ +# Domain Suppression Rules +# ══════════════════════════════════════════════════════════════════════════════ +# These rules allow an R1 domain firing at high confidence to suppress +# an R2/R3 domain, reducing false escalations. +# The flow engine must be updated separately to consume these rules. + +domain_suppression: + # ── Wound domains ───────────────────────────────────────────────────── + # When R1 wound_concern fires at medium/high confidence, suppress R2 wound_infection + # at low/medium confidence (not high - genuine infection signals should still escalate) + - suppressor: wound_concern + suppressed_domains: + - wound_infection + condition: + suppressor_min_confidence: medium # medium or high + suppressed_max_confidence: medium # low or medium (not high) + reason: "Routine wound concern (R1) contradicts infection (R2) at lower confidence" + + # ── Chest pain domains ──────────────────────────────────────────────── + # When R1 reproducible_chest_discomfort fires, suppress R3 chest_pain at low/medium + - suppressor: reproducible_chest_discomfort + suppressed_domains: + - chest_pain + condition: + suppressor_min_confidence: medium + suppressed_max_confidence: medium + reason: "Reproducible pattern suggests non-ACS chest pain" + + # ── Glucose domains ─────────────────────────────────────────────────── + # When R1 glucose_out_of_range fires, suppress R3 dka_hhs at low/medium + - suppressor: glucose_out_of_range + suppressed_domains: + - dka_hhs + - severe_hypoglycemia + condition: + suppressor_min_confidence: medium + suppressed_max_confidence: medium + reason: "Routine glucose management (R1) vs emergency (R3)" + + # ── Medication domains ──────────────────────────────────────────────── + # When R1 medication fires, suppress R3 overdose at low/medium + - suppressor: medication + suppressed_domains: + - overdose + condition: + suppressor_min_confidence: medium + suppressed_max_confidence: medium + reason: "Medication inquiry (R1) vs overdose (R3)" + + # ── Oral intake domains ─────────────────────────────────────────────── + # When R1 poor_oral_intake fires, suppress R2 persistent_vomiting at low/medium + - suppressor: poor_oral_intake + suppressed_domains: + - persistent_vomiting + condition: + suppressor_min_confidence: medium + suppressed_max_confidence: medium + reason: "Appetite concern (R1) vs persistent vomiting (R2)" + + # ── Pain domains ────────────────────────────────────────────────────── + # When R1 worsening_chronic_pain fires, suppress R2 uncontrolled_pain at low/medium + - suppressor: worsening_chronic_pain + suppressed_domains: + - uncontrolled_pain + condition: + suppressor_min_confidence: medium + suppressed_max_confidence: medium + reason: "Chronic pain management (R1) vs acute uncontrolled pain (R2)" + + # ── MH/BH Crisis Line domain suppression ──────────────────────────── + # overdose at MEDIUM+ suppresses substance_use_crisis at LOW/MEDIUM + - suppressor: overdose + suppressed_domains: + - substance_use_crisis + condition: + suppressor_min_confidence: medium + suppressed_max_confidence: medium + reason: "Active overdose (R3) takes priority over substance use crisis (R2)" + + # C-SSRS screen at MEDIUM+ suppresses worsening_depression_si and NSSI at LOW/MEDIUM + - suppressor: cssrs_suicide_screen + suppressed_domains: + - worsening_depression_si + - self_harm_nonsuicidal + condition: + suppressor_min_confidence: medium + suppressed_max_confidence: medium + reason: "C-SSRS structured screening supersedes general depression/NSSI assessment" + + # chest_pain at MEDIUM+ suppresses panic_crisis at LOW/MEDIUM + - suppressor: chest_pain + suppressed_domains: + - panic_crisis + condition: + suppressor_min_confidence: medium + suppressed_max_confidence: medium + reason: "Chest pain (R3 cardiac) takes priority over panic crisis (R2)" + + # shortness_of_breath_rest at MEDIUM+ suppresses panic_crisis at LOW/MEDIUM + - suppressor: shortness_of_breath_rest + suppressed_domains: + - panic_crisis + condition: + suppressor_min_confidence: medium + suppressed_max_confidence: medium + reason: "SOB at rest (R3) takes priority over panic crisis (R2)" diff --git a/list/journeys/annual_wellness_visit.yaml b/list/journeys/annual_wellness_visit.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2071cc8e7985ee875966f44dbdc1c18f7b72bca9 --- /dev/null +++ b/list/journeys/annual_wellness_visit.yaml @@ -0,0 +1,58 @@ +wedge_type: awv +display_name: Annual Wellness Visit +description: >- + 30-day annual wellness visit preparation journey. Voice calls with SMS + reminders. Initial outreach uses the full 12-step agenda. Subsequent calls + use abbreviated agendas focused on screening reminders and visit preparation. +default_duration_days: 30 +steps: + - step_id: initial_outreach + channel: voice + schedule: + offset_days: 30 + window_hours: [9, 17] + agenda_sequence: + - awv_intro + - health_history_update + - medication_list_review + - family_history_update + - functional_status + - fall_risk_screening + - screening_reminders + - immunization_reminders + - advance_directives + - depression_screening + - social_determinants + - closing + teachback_steps: [] + max_retries: 3 + retry_delay_hours: 2 + + - step_id: reminder_call + channel: voice + schedule: + offset_days: 7 + window_hours: [9, 17] + agenda_sequence: + - awv_intro + - screening_reminders + - immunization_reminders + - social_determinants + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 + + - step_id: visit_prep_call + channel: voice + schedule: + offset_days: 2 + window_hours: [9, 17] + agenda_sequence: + - awv_intro + - medication_list_review + - screening_reminders + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 2 diff --git a/list/journeys/gap_closure.yaml b/list/journeys/gap_closure.yaml new file mode 100644 index 0000000000000000000000000000000000000000..eb3a4521212d6fde2c089680f3bc5f6fd0790637 --- /dev/null +++ b/list/journeys/gap_closure.yaml @@ -0,0 +1,91 @@ +wedge_type: gap_closure +display_name: Gap Closure +description: >- + 30-90 day care gap closure journey. SMS-first channel strategy with voice + call escalation for patients who do not respond to SMS reminders. SMS + messages are template-driven and do NOT pass through the DCE pipeline. + Only voice calls invoke the engine. Voice calls use a 7-step agenda + focused on gap identification, barrier assessment, and scheduling assistance. +default_duration_days: 90 +steps: + # Step 1: SMS reminder (template-driven, does not invoke DCE) + - step_id: sms_reminder_1 + channel: sms + schedule: + offset_days: 1 + window_hours: [9, 20] + agenda_sequence: [] + teachback_steps: [] + max_retries: 0 + retry_delay_hours: 0 + + # Step 2: SMS reminder (template-driven, does not invoke DCE) + - step_id: sms_reminder_2 + channel: sms + schedule: + offset_days: 7 + window_hours: [9, 20] + agenda_sequence: [] + teachback_steps: [] + max_retries: 0 + retry_delay_hours: 0 + + # Step 3: SMS reminder (template-driven, does not invoke DCE) + - step_id: sms_reminder_3 + channel: sms + schedule: + offset_days: 14 + window_hours: [9, 20] + agenda_sequence: [] + teachback_steps: [] + max_retries: 0 + retry_delay_hours: 0 + + # Step 4: First voice call — full 7-step gap closure agenda + - step_id: initial_outreach_call + channel: voice + schedule: + offset_days: 21 + window_hours: [9, 17] + agenda_sequence: + - gap_intro + - gap_identification + - barrier_assessment + - motivational_support + - scheduling_assistance + - questions + - closing + teachback_steps: [] + max_retries: 3 + retry_delay_hours: 2 + + # Step 5: Follow-up voice call — abbreviated agenda + - step_id: follow_up_call + channel: voice + schedule: + offset_days: 45 + window_hours: [9, 17] + agenda_sequence: + - gap_intro + - gap_identification + - scheduling_assistance + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 + + # Step 6: Final voice call — last attempt + - step_id: final_outreach_call + channel: voice + schedule: + offset_days: 75 + window_hours: [9, 17] + agenda_sequence: + - gap_intro + - gap_identification + - barrier_assessment + - scheduling_assistance + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 diff --git a/list/journeys/health_risk_assessment.yaml b/list/journeys/health_risk_assessment.yaml new file mode 100644 index 0000000000000000000000000000000000000000..431c5f0f5741b4552897ec2fd291cb3fbd063942 --- /dev/null +++ b/list/journeys/health_risk_assessment.yaml @@ -0,0 +1,45 @@ +wedge_type: hra +display_name: Health Risk Assessment +description: >- + 14-day health risk assessment journey. Voice calls with SMS reminders. + Initial call uses the full 10-step agenda covering chronic conditions, + functional status, mental health screening, social determinants, and + preventive care review. Follow-up call uses abbreviated agenda for + incomplete sections. +default_duration_days: 14 +steps: + - step_id: initial_hra_call + channel: voice + schedule: + offset_days: 1 + window_hours: [9, 17] + agenda_sequence: + - hra_intro + - chronic_condition_inventory + - functional_status_assessment + - mental_health_screen + - social_determinants_screen + - medication_burden_review + - preventive_care_review + - care_plan_summary + - closing + - wrap_up + teachback_steps: [] + max_retries: 3 + retry_delay_hours: 2 + + - step_id: followup_hra_call + channel: voice + schedule: + offset_days: 7 + window_hours: [9, 17] + agenda_sequence: + - hra_intro + - mental_health_screen + - social_determinants_screen + - preventive_care_review + - care_plan_summary + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 diff --git a/list/journeys/post_discharge_engagement.yaml b/list/journeys/post_discharge_engagement.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0be50561587b0488ce1eb4981a0f308e7cf48dae --- /dev/null +++ b/list/journeys/post_discharge_engagement.yaml @@ -0,0 +1,120 @@ +wedge_type: pde +display_name: Post-Discharge Engagement +description: >- + 3-30 day post-discharge follow-up journey. Voice calls with SMS reminders. + Day 1 uses the full 14-step agenda. Subsequent calls use abbreviated agendas + focused on evolving patient needs. +default_duration_days: 30 +steps: + - step_id: day1_call + channel: voice + schedule: + offset_days: 1 + window_hours: [9, 17] + agenda_sequence: + - intro_permission + - discharge_context + - teachback_diagnosis + - teachback_warning_signs + - general_status + - symptom_review + - meds_reconciliation + - appointments_check + - pending_tests + - home_services + - problem_solving + - emergency_plan + - closing + - wrap_up + teachback_steps: + - teachback_diagnosis + - teachback_warning_signs + max_retries: 3 + retry_delay_hours: 2 + conditional_probes: + - probe_id: chf_symptom_review + when: + patient_has_condition: ["I50.*"] + must_ask: + - "Have you been weighing yourself daily as instructed?" + - "Have you noticed any new or worsening swelling in your legs or ankles?" + - "Have you had any trouble breathing when lying flat?" + slots_to_extract: ["daily_weight_check", "edema_worsening", "orthopnea"] + reason: "CHF-specific symptom monitoring per AHA guidelines" + - probe_id: copd_symptom_review + when: + patient_has_condition: ["J44.*", "J43.*"] + must_ask: + - "Have you noticed any change in your sputum color or amount?" + - "Are you using your rescue inhaler more than usual?" + slots_to_extract: ["sputum_change", "rescue_inhaler_frequency"] + reason: "COPD exacerbation early detection" + - probe_id: diabetes_symptom_review + when: + patient_has_condition: ["E11.*", "E10.*"] + must_ask: + - "Have you been checking your blood sugar regularly?" + - "Have you had any episodes of very high or very low blood sugar?" + slots_to_extract: ["glucose_monitoring", "glucose_extremes"] + reason: "Post-discharge glucose management" + pre_populated_slots: + - slot: discharge_med_count + source_field: discharge_info.discharge_medications + reason: "Pre-populate from discharge medication list" + + - step_id: day3_call + channel: voice + schedule: + offset_days: 3 + window_hours: [9, 17] + agenda_sequence: + - intro_permission + - general_status + - symptom_review + - meds_reconciliation + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 + + - step_id: day7_call + channel: voice + schedule: + offset_days: 7 + window_hours: [9, 17] + agenda_sequence: + - intro_permission + - appointments_check + - problem_solving + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 + + - step_id: day14_call + channel: voice + schedule: + offset_days: 14 + window_hours: [9, 17] + agenda_sequence: + - intro_permission + - general_status + - symptom_review + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 + + - step_id: day30_call + channel: voice + schedule: + offset_days: 30 + window_hours: [9, 17] + agenda_sequence: + - intro_permission + - general_status + - emergency_plan + - closing + teachback_steps: [] + max_retries: 2 + retry_delay_hours: 4 diff --git a/list/journeys/pre_op_optimization.yaml b/list/journeys/pre_op_optimization.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4f9f051739e6ad021ee4c24af7ad0e5b7ffce76a --- /dev/null +++ b/list/journeys/pre_op_optimization.yaml @@ -0,0 +1,83 @@ +wedge_type: pre_op +display_name: Pre-Op Optimization +description: >- + 7-90 day pre-surgery optimization journey. Voice calls with SMS reminders. + Initial call uses the full 10-step agenda. Subsequent calls use abbreviated + agendas focused on compliance verification and anxiety management. +default_duration_days: 90 +steps: + - step_id: initial_assessment + channel: voice + schedule: + offset_days: 7 + window_hours: [9, 17] + agenda_sequence: + - preop_intro + - health_history_update + - medication_review + - allergy_verification + - npo_status + - anxiety_screening + - procedure_prep + - logistics + - questions + - closing + teachback_steps: + - npo_status + max_retries: 3 + retry_delay_hours: 2 + conditional_probes: + - probe_id: anticoagulant_hold_check + when: + patient_on_medication_class: ["anticoagulant", "DOAC"] + must_ask: + - "Have you stopped taking your blood thinner as instructed?" + - "When did you take your last dose?" + slots_to_extract: ["anticoag_stopped", "last_anticoag_dose"] + reason: "Anticoagulant hold verification per ERAS guidelines" + - probe_id: glp1_hold_check + when: + patient_on_medication_class: ["GLP-1_agonist"] + must_ask: + - "Have you stopped taking your GLP-1 medication as instructed?" + slots_to_extract: ["glp1_stopped"] + reason: "GLP-1 agonist hold per updated ERAS guidelines" + - probe_id: insulin_management + when: + patient_on_medication_class: ["insulin"] + must_ask: + - "Have you adjusted your insulin dose as your surgeon instructed?" + slots_to_extract: ["insulin_adjusted"] + reason: "Perioperative insulin management" + + - step_id: compliance_check + channel: voice + schedule: + offset_days: 3 + window_hours: [9, 17] + agenda_sequence: + - preop_intro + - medication_review + - npo_status + - anxiety_screening + - closing + teachback_steps: + - npo_status + max_retries: 2 + retry_delay_hours: 4 + + - step_id: day_before_call + channel: voice + schedule: + offset_days: 1 + window_hours: [9, 17] + agenda_sequence: + - preop_intro + - npo_status + - logistics + - anxiety_screening + - closing + teachback_steps: + - npo_status + max_retries: 2 + retry_delay_hours: 2 diff --git a/list/orchestrator/conflict_resolution.yaml b/list/orchestrator/conflict_resolution.yaml new file mode 100644 index 0000000000000000000000000000000000000000..158df221b12c785ddb0fdd1bc3a91e9aec75cc57 --- /dev/null +++ b/list/orchestrator/conflict_resolution.yaml @@ -0,0 +1,79 @@ +# Cross-wedge conflict resolution rules. +# When two wedges compete for the same contact slot, these rules decide +# which one proceeds and what happens to the other. + +conflict_rules: + # PDE and Pre-Op on same day: PDE wins (higher priority_rank), Pre-Op defers + - rule_id: pde_preop_same_day + wedge_a: pde + wedge_b: pre_op + condition: same_day + winner: higher_priority + loser_action: defer_24h + + # Tier 1 vs Tier 2 on same day: Tier 1 always wins + - rule_id: tier1_beats_tier2 + wedge_a: pde + wedge_b: awv + condition: same_day + winner: higher_priority + loser_action: defer_24h + + - rule_id: tier1_beats_gap + wedge_a: pde + wedge_b: gap_closure + condition: same_day + winner: higher_priority + loser_action: defer_24h + + - rule_id: tier1_beats_hra + wedge_a: pde + wedge_b: hra + condition: same_day + winner: higher_priority + loser_action: defer_24h + + - rule_id: preop_beats_awv + wedge_a: pre_op + wedge_b: awv + condition: same_day + winner: higher_priority + loser_action: defer_24h + + - rule_id: preop_beats_gap + wedge_a: pre_op + wedge_b: gap_closure + condition: same_day + winner: higher_priority + loser_action: defer_24h + + - rule_id: preop_beats_hra + wedge_a: pre_op + wedge_b: hra + condition: same_day + winner: higher_priority + loser_action: defer_24h + + # Within Tier 2: AWV > Gap Closure > HRA (by priority_rank) + - rule_id: awv_beats_gap + wedge_a: awv + wedge_b: gap_closure + condition: same_day + winner: higher_priority + loser_action: defer_24h + + - rule_id: awv_beats_hra + wedge_a: awv + wedge_b: hra + condition: same_day + winner: higher_priority + loser_action: defer_24h + + - rule_id: gap_beats_hra + wedge_a: gap_closure + wedge_b: hra + condition: same_day + winner: higher_priority + loser_action: defer_24h + +default_loser_action: defer_24h diff --git a/list/orchestrator/contact_caps.yaml b/list/orchestrator/contact_caps.yaml new file mode 100644 index 0000000000000000000000000000000000000000..301a065a9d2fa3d47214a98b0e5702529a1e6773 --- /dev/null +++ b/list/orchestrator/contact_caps.yaml @@ -0,0 +1,16 @@ +global_max_per_day: 2 +global_max_per_week: 7 +channel_caps: + - channel: voice + max_per_day: 1 + max_per_week: 5 + - channel: sms + max_per_day: 2 + max_per_week: 10 + - channel: email + max_per_day: 1 + max_per_week: 3 +quiet_hours: + start: "21:00" + end: "09:00" +emergency_override: true diff --git a/list/orchestrator/enrollment_rules.yaml b/list/orchestrator/enrollment_rules.yaml new file mode 100644 index 0000000000000000000000000000000000000000..272599c98f41c1cf6e521b3a567165468f7c6b01 --- /dev/null +++ b/list/orchestrator/enrollment_rules.yaml @@ -0,0 +1,53 @@ +# Enrollment rules for journey lifecycle management. +# Controls eligibility, deduplication, and cooldown periods. + +dedup_key_fields: + - patient_id + - wedge_type + - trigger_event_id + +enrollment_criteria: + - wedge_type: pde + required_events: + - adt_discharge + eligible_statuses: + - discharged + cooldown_days: 30 + max_concurrent_journeys: 1 + + - wedge_type: pre_op + required_events: + - surgery_scheduled + eligible_statuses: + - scheduled + cooldown_days: 7 + max_concurrent_journeys: 1 + + - wedge_type: awv + required_events: + - awv_eligible + eligible_statuses: + - eligible + cooldown_days: 365 + max_concurrent_journeys: 1 + + - wedge_type: gap_closure + required_events: + - gap_identified + eligible_statuses: + - open + cooldown_days: 90 + max_concurrent_journeys: 3 + + - wedge_type: hra + required_events: + - hra_eligible + eligible_statuses: + - eligible + cooldown_days: 365 + max_concurrent_journeys: 1 + +global_enrollment_settings: + max_active_journeys_per_patient: 3 + require_consent: true + allow_re_enrollment: true diff --git a/list/orchestrator/wedge_priority.yaml b/list/orchestrator/wedge_priority.yaml new file mode 100644 index 0000000000000000000000000000000000000000..97d047c81ac6000ff1ae1b592db6d02a6b5c4b26 --- /dev/null +++ b/list/orchestrator/wedge_priority.yaml @@ -0,0 +1,16 @@ +priorities: + - wedge_type: pde + safety_tier: 1 + priority_rank: 100 + - wedge_type: pre_op + safety_tier: 1 + priority_rank: 90 + - wedge_type: awv + safety_tier: 2 + priority_rank: 50 + - wedge_type: gap_closure + safety_tier: 2 + priority_rank: 40 + - wedge_type: hra + safety_tier: 2 + priority_rank: 30 diff --git a/list/orchestrator/wedge_suppression.yaml b/list/orchestrator/wedge_suppression.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5af11f58704fe23630ddf5dd6957015107dc6244 --- /dev/null +++ b/list/orchestrator/wedge_suppression.yaml @@ -0,0 +1,78 @@ +# Temporal suppression rules for cross-wedge contact orchestration. +# After certain events, suppress outbound contacts for specified wedges. +# Escalation lock suppression blocks ALL wedges for ALL channels. + +suppression_rules: + # After any PDE voice call, suppress routine wedges for 24 hours + - rule_id: pde_call_suppresses_routine + trigger_wedge: pde + trigger_event: call_completed + suppress_wedges: + - awv + - gap_closure + - hra + suppress_channels: + - voice + - sms + - email + duration_hours: 24 + + # After any Pre-Op voice call, suppress routine wedges for 24 hours + - rule_id: preop_call_suppresses_routine + trigger_wedge: pre_op + trigger_event: call_completed + suppress_wedges: + - awv + - gap_closure + - hra + suppress_channels: + - voice + - sms + - email + duration_hours: 24 + + # After R3 escalation lock, suppress ALL wedges (all channels) + - rule_id: r3_lock_suppresses_all + trigger_wedge: any + trigger_event: escalation_lock_r3 + suppress_wedges: + - pde + - pre_op + - awv + - gap_closure + - hra + suppress_channels: + - voice + - sms + - email + duration_hours: 24 + + # After R2 escalation lock, suppress ALL wedges (all channels) + - rule_id: r2_lock_suppresses_all + trigger_wedge: any + trigger_event: escalation_lock_r2 + suppress_wedges: + - pde + - pre_op + - awv + - gap_closure + - hra + suppress_channels: + - voice + - sms + - email + duration_hours: 72 + + # After any voice call, suppress voice for same patient for 4 hours + - rule_id: voice_cooldown + trigger_wedge: any + trigger_event: call_completed + suppress_wedges: + - pde + - pre_op + - awv + - gap_closure + - hra + suppress_channels: + - voice + duration_hours: 4 diff --git a/list/primitives/clarify.yaml b/list/primitives/clarify.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e262cc20a807c6065b6df8411d10a2f2e0641074 --- /dev/null +++ b/list/primitives/clarify.yaml @@ -0,0 +1,23 @@ +flow_id: clarify +type: primitive + +actions: + - step: 1 + type: ask + response_spec: + id: global_clarify + goal: "Ask the patient to repeat or clarify what they said" + tone: gentle_professional + must_include: + - "understand" + must_ask: + - "could you say that again" + must_not: + - "diagnos" + max_questions: 1 + collects: + - clarification_text + +exit: + on_complete: re_evaluate + on_unclear: handoff diff --git a/list/primitives/consent.yaml b/list/primitives/consent.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c2fb2e865a355db5628652f343d59270ca6a9ae5 --- /dev/null +++ b/list/primitives/consent.yaml @@ -0,0 +1,29 @@ +flow_id: consent +type: primitive + +required_slots: + - consent_given + +actions: + - step: 1 + type: ask + response_spec: + id: consent_request + goal: "Obtain verbal consent to proceed with post-discharge check-in" + tone: warm_professional + must_include: + - "consent" + - "proceed" + must_ask: + - "okay to continue" + must_not: + - "required" + - "must" + - "have to" + max_questions: 1 + collects: + - consent_given + +exit: + on_complete: recovery_checkin + on_refused: end_no_consent diff --git a/list/primitives/end_identity_failed.yaml b/list/primitives/end_identity_failed.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1e10c65986d65c51293f6826a09aa2c772c3eb79 --- /dev/null +++ b/list/primitives/end_identity_failed.yaml @@ -0,0 +1,27 @@ +flow_id: end_identity_failed +type: primitive + +# Terminal state when identity verification fails after max attempts. +# Per HIPAA telephone rules: do not disclose which identifier was wrong. +# Apologize, cite privacy standards, and end the clinical portion. +actions: + - step: 1 + type: respond + response_spec: + id: end_identity_failed + goal: "End the call due to identity verification failure, citing privacy standards" + tone: warm_professional + must_include: + - "privacy" + - "verify" + must_ask: [] + must_not: + - "wrong" + - "incorrect" + - "mismatch" + - "diagnos" + - "condition" + max_questions: 0 + +exit: + on_complete: end diff --git a/list/primitives/end_no_consent.yaml b/list/primitives/end_no_consent.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0f2fb6d3b8fe52cb58d7c7a92b6bfa9a2d141a64 --- /dev/null +++ b/list/primitives/end_no_consent.yaml @@ -0,0 +1,22 @@ +flow_id: end_no_consent +type: primitive + +actions: + - step: 1 + type: respond + response_spec: + id: end_no_consent + goal: "Acknowledge the patient's decision to decline and end the call respectfully" + tone: warm_respectful + must_include: + - "understand" + - "respect" + must_ask: [] + must_not: + - "must" + - "have to" + - "required" + max_questions: 0 + +exit: + on_complete: end diff --git a/list/primitives/greeting.yaml b/list/primitives/greeting.yaml new file mode 100644 index 0000000000000000000000000000000000000000..99d708ee7adf75d3984aaa5f3d6ddd82a9a4fd6b --- /dev/null +++ b/list/primitives/greeting.yaml @@ -0,0 +1,22 @@ +flow_id: greeting +type: primitive + +actions: + - step: 1 + type: respond + response_spec: + id: greeting_intro + goal: "Greet the patient warmly and introduce yourself as Avery, a post-discharge care assistant" + tone: warm_professional + must_include: + - "Avery" + - "checking in" + must_ask: [] + must_not: + - "diagnos" + - "doctor" + - "nurse" + max_questions: 0 + +exit: + on_complete: identity_verify diff --git a/list/primitives/handoff.yaml b/list/primitives/handoff.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f0dce7f032e509092f912663e1f4ad0f74cf3ea6 --- /dev/null +++ b/list/primitives/handoff.yaml @@ -0,0 +1,34 @@ +flow_id: handoff +type: primitive + +actions: + - step: 1 + type: respond + response_spec: + id: global_handoff_notice + goal: "Let the patient know they will be connected with a person who can help" + tone: warm_professional + must_include: + - "connect" + - "someone" + must_ask: [] + must_not: + - "goodbye" + - "diagnos" + max_questions: 0 + + - step: 2 + type: handoff + target: general_nurse_line + urgency: normal + response_spec: + id: global_handoff_transfer + goal: "Transfer to general nurse line" + tone: professional + must_include: + - "transferring" + must_ask: [] + must_not: [] + +exit: + on_complete: end diff --git a/list/primitives/identity_verify.yaml b/list/primitives/identity_verify.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ed104ce855ff8f14377fb0871af851f948777fec --- /dev/null +++ b/list/primitives/identity_verify.yaml @@ -0,0 +1,36 @@ +flow_id: identity_verify +type: primitive + +# Joint Commission NPSG.01.01.01: Use at least two patient identifiers. +# HIPAA telephone rules: full name + at least two identifying pieces of info. +# For outbound calls, the system already knows the patient's identity from +# the scheduling system. We confirm name + DOB = two-factor verification. +required_slots: + - patient_name_confirm + - patient_dob + +actions: + - step: 1 + type: ask + response_spec: + id: identity_name_dob_request + goal: "Verify patient identity by asking for their full name and date of birth" + tone: warm_professional + must_include: + - "verify" + - "name" + - "date of birth" + must_ask: + - "full name" + - "date of birth" + must_not: + - "diagnos" + - "social security" + - "medical record" + max_questions: 2 + collects: + - patient_name_confirm + - patient_dob + +exit: + on_complete: consent diff --git a/list/primitives/recovery_checkin.yaml b/list/primitives/recovery_checkin.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8ecedf107f12dc9c8b8aeb1d2ba71c4a852fd377 --- /dev/null +++ b/list/primitives/recovery_checkin.yaml @@ -0,0 +1,64 @@ +flow_id: recovery_checkin +type: primitive + +required_slots: + - pain_level + - medication_adherence + - activity_level + +actions: + - step: 1 + type: ask + response_spec: + id: recovery_pain_check + goal: "Ask about current pain level and general recovery" + tone: warm_empathetic + must_include: + - "recovery" + - "pain" + must_ask: + - "How are you feeling" + - "pain" + must_not: + - "diagnos" + - "should be" + max_questions: 2 + collects: + - pain_level + + - step: 2 + type: ask + response_spec: + id: recovery_medication_check + goal: "Check medication adherence and any issues" + tone: warm_professional + must_include: + - "medication" + must_ask: + - "taking your medications" + must_not: + - "must" + - "have to" + max_questions: 2 + collects: + - medication_adherence + + - step: 3 + type: ask + response_spec: + id: recovery_activity_check + goal: "Check activity level and mobility" + tone: warm_encouraging + must_include: + - "activity" + must_ask: + - "getting around" + must_not: + - "should be doing more" + max_questions: 1 + collects: + - activity_level + +exit: + on_complete: wrap_up + on_concern: evaluate_concern diff --git a/list/primitives/stt_repair.yaml b/list/primitives/stt_repair.yaml new file mode 100644 index 0000000000000000000000000000000000000000..262f821558d47ddd2ace05368246fb1eea851e84 --- /dev/null +++ b/list/primitives/stt_repair.yaml @@ -0,0 +1,22 @@ +flow_id: stt_repair +type: primitive + +actions: + - step: 1 + type: ask + response_spec: + id: stt_repair_request + goal: "Ask the patient to repeat what they said due to audio issues" + tone: gentle_professional + must_include: + - "hear" + must_ask: + - "say that again" + must_not: + - "diagnos" + - "don't worry" + max_questions: 1 + +exit: + on_complete: re_evaluate + on_unclear: handoff diff --git a/list/primitives/wrap_up.yaml b/list/primitives/wrap_up.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3093f72f257b7c607a86b34805ee2b8748cbe0b4 --- /dev/null +++ b/list/primitives/wrap_up.yaml @@ -0,0 +1,21 @@ +flow_id: wrap_up +type: primitive + +actions: + - step: 1 + type: respond + response_spec: + id: wrap_up_closing + goal: "Thank the patient, summarize any follow-ups, and close the call" + tone: warm_professional + must_include: + - "thank you" + - "care team" + must_ask: [] + must_not: + - "diagnos" + - "guarantee" + max_questions: 0 + +exit: + on_complete: end diff --git a/list/taxonomy/abnormal_bp/flows/clarify.yaml b/list/taxonomy/abnormal_bp/flows/clarify.yaml new file mode 100644 index 0000000000000000000000000000000000000000..69106a878aafc344812cd4155e1d0bfc3c3f6b59 --- /dev/null +++ b/list/taxonomy/abnormal_bp/flows/clarify.yaml @@ -0,0 +1,25 @@ +flow_id: clarify +type: clarification +domain: abnormal_bp + +actions: + - step: 1 + type: ask + response_spec: + id: abnormal_bp_clarify + goal: "Ask patient to describe their abnormal bp symptom more specifically" + tone: gentle_professional + must_include: + - "tell me more" + must_ask: + - "describe" + must_not: + - "diagnos" + - "don't worry" + max_questions: 1 + collects: + - abnormal_bp_description + +exit: + on_complete: re_evaluate + on_unclear: handoff diff --git a/list/taxonomy/abnormal_bp/flows/escalate_r1.yaml b/list/taxonomy/abnormal_bp/flows/escalate_r1.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e62de9f3d253a0d241dc4facd395aa51e002c55a --- /dev/null +++ b/list/taxonomy/abnormal_bp/flows/escalate_r1.yaml @@ -0,0 +1,23 @@ +flow_id: escalate_r1 +type: escalation +domain: abnormal_bp + +actions: + - step: 1 + type: respond + response_spec: + id: r1_escalation_notice + goal: "Inform patient their care team will be notified and will follow up" + tone: warm_professional + must_include: + - "care team" + - "follow up" + must_ask: [] + must_not: + - "diagnos" + - "guarantee" + - "nothing to worry about" + max_questions: 0 + +exit: + on_complete: end diff --git a/list/taxonomy/abnormal_bp/flows/escalate_r2.yaml b/list/taxonomy/abnormal_bp/flows/escalate_r2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e7997739c5b314e46198fcc8b91f88f97a8e447b --- /dev/null +++ b/list/taxonomy/abnormal_bp/flows/escalate_r2.yaml @@ -0,0 +1,37 @@ +flow_id: escalate_r2 +type: escalation +domain: abnormal_bp + +actions: + - step: 1 + type: respond + response_spec: + id: r2_escalation_notice + goal: "Inform patient a nurse will be connected to discuss their symptoms" + tone: calm_reassuring + must_include: + - "nurse" + - "connect" + - "important" + must_ask: [] + must_not: + - "diagnos" + - "don't worry" + - "probably" + max_questions: 0 + + - step: 2 + type: handoff + target: clinical_nurse + urgency: urgent + response_spec: + id: r2_handoff + goal: "Warm transfer to nurse with context summary" + tone: professional + must_include: + - "connecting" + must_ask: [] + must_not: [] + +exit: + on_complete: end diff --git a/list/taxonomy/abnormal_bp/flows/escalate_r3.yaml b/list/taxonomy/abnormal_bp/flows/escalate_r3.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a53dd475f5f0fd04f1d80adcb2677f0537356211 --- /dev/null +++ b/list/taxonomy/abnormal_bp/flows/escalate_r3.yaml @@ -0,0 +1,37 @@ +flow_id: escalate_r3 +type: escalation +domain: abnormal_bp +actions: +- step: 1 + type: respond + response_spec: + id: r3_escalation_notice + goal: Instruct patient to call 911 immediately and inform them of nurse transfer + tone: calm_direct + must_include: + - call 911 + - right away + must_ask: [] + must_not: + - diagnos + - don't worry + - probably + - based on what you + - I've determined + - my assessment + max_questions: 0 +- step: 2 + type: handoff + target: clinical_nurse + urgency: immediate + response_spec: + id: r3_handoff + goal: Transfer to clinical nurse with context summary + tone: professional + must_include: + - transferring + must_ask: [] + must_not: + - goodbye +exit: + on_complete: end diff --git a/list/taxonomy/abnormal_bp/flows/handoff.yaml b/list/taxonomy/abnormal_bp/flows/handoff.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4110f824f8d3dcc3f09cc3fe31948598e1b51a6b --- /dev/null +++ b/list/taxonomy/abnormal_bp/flows/handoff.yaml @@ -0,0 +1,34 @@ +flow_id: handoff +type: handoff +domain: abnormal_bp + +actions: + - step: 1 + type: respond + response_spec: + id: abnormal_bp_handoff + goal: "Let patient know they will be connected with someone who can help" + tone: warm_professional + must_include: + - "connect" + - "help" + must_ask: [] + must_not: + - "goodbye" + max_questions: 0 + + - step: 2 + type: handoff + target: general_nurse_line + urgency: normal + response_spec: + id: abnormal_bp_handoff_transfer + goal: "Transfer to general nurse line" + tone: professional + must_include: + - "transferring" + must_ask: [] + must_not: [] + +exit: + on_complete: end diff --git a/list/taxonomy/abnormal_bp/flows/safety_screen.yaml b/list/taxonomy/abnormal_bp/flows/safety_screen.yaml new file mode 100644 index 0000000000000000000000000000000000000000..59234ca0ea43b07de797abf6d8cd3f0ff6122d3b --- /dev/null +++ b/list/taxonomy/abnormal_bp/flows/safety_screen.yaml @@ -0,0 +1,37 @@ +flow_id: safety_screen +type: screening +domain: abnormal_bp + +required_slots: + - bp_report_confirmed + - bp_associated_symptoms + +actions: + - step: 1 + type: ask + response_spec: + id: abnormal_bp_screen_step1 + goal: "Gather details about BP reading and associated symptoms" + tone: calm_urgent + must_include: + - "blood pressure" + must_ask: + - "What was your blood pressure reading?" + - "Are you having any headache, vision changes, or chest pain?" + must_not: + - "don't worry" + - "probably nothing" + max_questions: 2 + collects: + - bp_report_confirmed + - bp_associated_symptoms + - bp_systolic + - bp_diastolic + - bp_critical + +exit: + on_complete: evaluate_risk + on_r3: escalate_r3 + on_r2: escalate_r2 + on_low_risk: escalate_r1 + on_unclear: escalate_r2 diff --git a/list/taxonomy/abnormal_bp/rules.yaml b/list/taxonomy/abnormal_bp/rules.yaml new file mode 100644 index 0000000000000000000000000000000000000000..64343f6c47c21a77f096f7e1a2c014d2bdf900d2 --- /dev/null +++ b/list/taxonomy/abnormal_bp/rules.yaml @@ -0,0 +1,33 @@ +domain: abnormal_bp +target_risk_class: R2 + +decision_rules: + - id: abnormal_bp_high_confidence + if: + confidence: high + then: + flow: safety_screen + + - id: abnormal_bp_medium_confidence + if: + confidence: medium + then: + flow: safety_screen + + - id: abnormal_bp_low_confidence + if: + confidence: low + then: + flow: clarify + + - id: abnormal_bp_r3_escalation + if: + risk_class: R3 + then: + flow: escalate_r3 + + - id: abnormal_bp_r2_escalation + if: + risk_class: R2 + then: + flow: escalate_r2 diff --git a/list/taxonomy/abnormal_bp/triggers.yaml b/list/taxonomy/abnormal_bp/triggers.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9a6f7c076468d07978f3089f20e4193aa848b50e --- /dev/null +++ b/list/taxonomy/abnormal_bp/triggers.yaml @@ -0,0 +1,75 @@ +domain: abnormal_bp +priority: 41 + +lexical_signals: + high: + phrases: + - "blood pressure readings very high at home" + - "blood pressure consistently above 160" + - "hypertensive readings at home" + - "blood pressure dangerously high" + - "BP won't come down" + - "blood pressure consistently elevated" + regex: + - "blood\\s+pressure.*(high|elevated|above\\s+1[6-9]\\d)" + - "BP.*(high|won'?t\\s+come)" + medium: + phrases: + - "blood pressure elevated at home" + - "home BP readings are high" + - "blood pressure not controlled" + - "readings above normal consistently" + - "blood pressure higher than usual" + # --- MINIMIZER coverage --- + - "blood pressure was a little high" + - "my numbers have been kind of elevated" + - "BP might be a bit off" + - "readings were a little higher than usual" + - "blood pressure seems higher but it's probably just stress" + - "machine said it was high but those things aren't always right" + - "numbers are up a bit" + - "pressure behind my eyes" + - "head feels kind of heavy" + - "felt a bit dizzy and checked my blood pressure" + - "took my blood pressure and it was kind of high" + - "blood pressure is running higher than normal" + - "headache and my blood pressure was up" + - "blood pressure is creeping up" + - "numbers aren't great but probably nothing" + - "BP has been bouncing around" + regex: + - "(blood\\s+pressure|BP|numbers|readings).{0,20}(a\\s+)?(little|bit|kind of|sort of|somewhat|slightly).{0,10}(high|elevated|up|off)" + - "(blood\\s+pressure|BP|numbers|readings).{0,20}(higher|up|elevated).{0,10}(than usual|than normal|lately|recently|this week)" + - "(blood\\s+pressure|BP).{0,20}(probably|might be|could be).{0,15}(stress|nothing|fine|okay|normal)" + - "(head|pressure|headache).{0,15}(heavy|pound|throb|pressure|tight).{0,20}(blood pressure|BP)" + - "(dizzy|lightheaded|blurry|headache).{0,25}(blood pressure|BP|check|reading|numbers)" + - "(machine|monitor|reading|cuff).{0,20}(said|showed|read|was).{0,15}(high|elevated|up|above)" + - "(took|checked|tested).{0,10}(my\\s+)?(blood\\s+pressure|BP).{0,15}(high|elevated|up|above|not great)" + - "(blood\\s+pressure|BP).{0,15}(creep|bounc|run|fluctuat|trend|climb).{0,10}(up|around|higher|ing)" + # --- specific readings --- + - "(blood\\s+pressure|BP|reading).{0,15}(was|is|showed|read)\\s+\\d{3}\\s*(over|/)\\s*\\d{2,3}" + # --- symptomatic high BP --- + - "(headache|vision|nosebleed|nose\\s+bleed).{0,25}(blood\\s+pressure|BP).{0,15}(high|elevated|up)" + # --- Reading + minimization (R2 recall) --- + - "(BP|blood pressure).{0,15}(\\d{2,3}).{0,30}(nothing|stress|probably|fine|okay)" + - "(\\d{3}).{0,10}(over|/).{0,10}(\\d{2,3}).{0,25}(probably|nothing|just|stress)" + - "(reading|number|BP).{0,20}(said|was|showed).{0,15}(\\d{3}).{0,20}(but|though|stress|nothing)" + # --- Symptom combinations with elevated reading --- + - "(headache|pounding|throbbing).{0,25}(elevated|high).{0,15}(reading|BP|blood pressure)" + - "(palpitations|racing|pounding).{0,25}(high|elevated).{0,15}(BP|blood pressure|reading)" + - "(dizzy|lightheaded|blurry).{0,25}(blood pressure|BP).{0,15}(checked|was|showed).{0,15}(high|elevated|\\d{3})" + # --- Machine skepticism with documented reading (should still escalate) --- + - "(machine|monitor|cuff).{0,20}(aren't|not).{0,15}(right|accurate).{0,20}(but|though|still).{0,20}(\\d{3}|high|elevated)" + - "(don't trust|not accurate).{0,25}(machine|monitor).{0,20}(said|showed|read).{0,15}(\\d{3}|high)" + low: + partials: + - "blood pressure" + - "BP readings" + - "hypertension" + +negation_handling: + patterns: + - "blood pressure normal" + - "BP is fine" + - "readings are good" + action: downgrade_confidence diff --git a/list/taxonomy/acute_confusion/flows/clarify.yaml b/list/taxonomy/acute_confusion/flows/clarify.yaml new file mode 100644 index 0000000000000000000000000000000000000000..aee5b62ad60d9d5ed71c9d3ccc8ac46f1c4ad0ea --- /dev/null +++ b/list/taxonomy/acute_confusion/flows/clarify.yaml @@ -0,0 +1,25 @@ +flow_id: clarify +type: clarification +domain: acute_confusion + +actions: + - step: 1 + type: ask + response_spec: + id: acute_confusion_clarify + goal: "Ask patient to describe their acute confusion symptom more specifically" + tone: gentle_professional + must_include: + - "tell me more" + must_ask: + - "describe" + must_not: + - "diagnos" + - "don't worry" + max_questions: 1 + collects: + - acute_confusion_description + +exit: + on_complete: re_evaluate + on_unclear: handoff diff --git a/list/taxonomy/acute_confusion/flows/escalate_r2.yaml b/list/taxonomy/acute_confusion/flows/escalate_r2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..56453291c86b1038d498ad70ebc7e86a59e02826 --- /dev/null +++ b/list/taxonomy/acute_confusion/flows/escalate_r2.yaml @@ -0,0 +1,37 @@ +flow_id: escalate_r2 +type: escalation +domain: acute_confusion + +actions: + - step: 1 + type: respond + response_spec: + id: r2_escalation_notice + goal: "Inform patient a nurse will follow up same day about their symptoms" + tone: calm_reassuring + must_include: + - "nurse" + - "follow up" + - "same day" + must_ask: [] + must_not: + - "diagnos" + - "don't worry" + - "probably" + max_questions: 0 + + - step: 2 + type: handoff + target: clinical_nurse + urgency: same_day + response_spec: + id: r2_handoff + goal: "Schedule same-day nurse callback with context summary" + tone: professional + must_include: + - "follow up" + must_ask: [] + must_not: [] + +exit: + on_complete: end diff --git a/list/taxonomy/acute_confusion/flows/handoff.yaml b/list/taxonomy/acute_confusion/flows/handoff.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9479c0d6b7d31d289788d2b136addf9618797f60 --- /dev/null +++ b/list/taxonomy/acute_confusion/flows/handoff.yaml @@ -0,0 +1,34 @@ +flow_id: handoff +type: handoff +domain: acute_confusion + +actions: + - step: 1 + type: respond + response_spec: + id: acute_confusion_handoff + goal: "Let patient know they will be connected with someone who can help" + tone: warm_professional + must_include: + - "connect" + - "help" + must_ask: [] + must_not: + - "goodbye" + max_questions: 0 + + - step: 2 + type: handoff + target: general_nurse_line + urgency: normal + response_spec: + id: acute_confusion_handoff_transfer + goal: "Transfer to general nurse line" + tone: professional + must_include: + - "transferring" + must_ask: [] + must_not: [] + +exit: + on_complete: end diff --git a/list/taxonomy/acute_confusion/flows/safety_screen.yaml b/list/taxonomy/acute_confusion/flows/safety_screen.yaml new file mode 100644 index 0000000000000000000000000000000000000000..bec88a4d2984a457c3073b7f18055e879da142d8 --- /dev/null +++ b/list/taxonomy/acute_confusion/flows/safety_screen.yaml @@ -0,0 +1,53 @@ +flow_id: safety_screen +type: screening +domain: acute_confusion + +required_slots: + - confusion_onset + - orientation_status + - medication_changes + - recent_illness + +actions: + - step: 1 + type: ask + response_spec: + id: safety_screen_step1 + goal: "Gather initial details about the patient's symptoms" + tone: calm_urgent + must_include: + - "tell me" + must_ask: + - "confusion onset" + - "orientation status" + must_not: + - "don't worry" + - "probably nothing" + max_questions: 2 + collects: + - confusion_onset + - orientation_status + + - step: 2 + type: ask + response_spec: + id: safety_screen_step2 + goal: "Gather additional details to complete the safety assessment" + tone: calm_urgent + must_include: + - "also" + must_ask: + - "medication changes" + - "recent illness" + must_not: + - "don't worry" + - "probably fine" + max_questions: 2 + collects: + - medication_changes + - recent_illness + +exit: + on_complete: evaluate_risk + on_r2: escalate_r2 + on_unclear: clarify diff --git a/list/taxonomy/acute_confusion/rules.yaml b/list/taxonomy/acute_confusion/rules.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5e6dd70e1cf4493b0c7ecefb16eedc3aaa6f8953 --- /dev/null +++ b/list/taxonomy/acute_confusion/rules.yaml @@ -0,0 +1,27 @@ +domain: acute_confusion +target_risk_class: R2 + +decision_rules: + - id: acute_confusion_high_confidence + if: + confidence: high + then: + flow: safety_screen + + - id: acute_confusion_medium_confidence + if: + confidence: medium + then: + flow: safety_screen + + - id: acute_confusion_low_confidence + if: + confidence: low + then: + flow: clarify + + - id: acute_confusion_r2_escalation + if: + risk_class: R2 + then: + flow: escalate_r2 diff --git a/list/taxonomy/acute_confusion/triggers.yaml b/list/taxonomy/acute_confusion/triggers.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ca28a619c25bf8cd7cfcf0993551b6c5dce2da30 --- /dev/null +++ b/list/taxonomy/acute_confusion/triggers.yaml @@ -0,0 +1,305 @@ +domain: acute_confusion +priority: 79 + +lexical_signals: + high: + phrases: + - "suddenly confused" + - "new confusion" + - "acute delirium" + - "suddenly not making sense" + - "head feels scrambled" + - "doesn't know where he is" + - "doesn't know where she is" + - "doesn't recognize me" + - "talking gibberish" + - "talking nonsense" + - "saying things that make no sense" + - "completely disoriented" + - "woke up and didn't know who I was" + - "can't tell me what year it is" + - "thinks he is somewhere else" + - "thinks she is somewhere else" + - "not making any sense at all" + - "hallucinating and confused" + - "seeing things that are not there and confused" + - "confused and aggressive" + regex: + - "(sudden|new|acute)\\s+(confusion|delirium)" + - "doesn[']?t\\s+know\\s+where\\s+(they|he|she)" + - "disoriented\\s+and\\s+wasn[']?t\\s+before" + - "don[']?t\\s+know\\s+what\\s+day" + - "keep\\s+forgetting\\s+what\\s+I\\s+was\\s+doing" + - "doesn[']?t\\s+(recognize|know)\\s+(me|us|his|her|the|where)" + - "talking\\s+(gibberish|nonsense|crazy|rubbish|garbage|jibberish)" + - "(say|said|saying)\\s+(things|stuff|words).{0,10}(that\\s+)?(make|do)n?[']?t?\\s+(no\\s+)?sense" + - "(complete|total)ly\\s+(disoriented|confused|out\\s+of\\s+it|lost)" + - "(woke|wake).{0,10}up.{0,15}(didn[']?t|doesn[']?t|not)\\s+(know|recognize)" + - "can[']?t\\s+tell\\s+(me|us|you).{0,10}(what|where|who|the)" + - "thinks?\\s+(he|she|they|I).{0,5}(is|am|are)\\s+(somewhere|in\\s+a|at\\s+the|back\\s+in)" + - "(hallucinat|seeing\\s+things|hearing\\s+things).{0,15}(and\\s+)?(confused|disoriented)" + - "(confused|disoriented).{0,15}(and\\s+)?(aggressive|agitated|combative|violent|yelling)" + medium: + phrases: + - "acting confused" + - "not themselves today" + - "seems disoriented" + - "confused since this morning" + - "altered mental status" + - "not feeling right" + - "walking around in a fog" + - "acting off" + - "not as sharp today" + - "misplacing stuff" + - "keeps asking the same thing" + - "not acting like himself" + - "not acting like herself" + - "not acting like myself" + - "acting really weird" + - "got lost in his own house" + - "got lost in her own house" + - "couldn't figure out how to use the remote" + - "put the milk in the cupboard" + - "called me by the wrong name" + - "forgot where the bathroom is" + - "staring off into space" + - "eyes look glazed over" + - "just mumbling and not making sense" + - "couldn't finish a sentence" + - "words are all jumbled up" + - "tried to leave the house in pajamas at 3am" + - "thought it was morning when it was night" + - "keeps getting up and wandering around" + - "having trouble following the conversation" + # --- MINIMIZER coverage --- + - "just a little mixed up sometimes" + - "a bit forgetful lately" + - "thoughts are kind of jumbled" + - "brain won't cooperate" + - "probably just tired" + - "I'm fine, just a bit foggy" + - "just got confused for a minute" + - "a little bit spacey I guess" + - "he's always been a little forgetful" + - "she's just having an off day" + - "my mind keeps wandering" + - "having a hard time concentrating" + - "losing my train of thought" + - "thoughts keep sliding around" + - "brain keeps skipping" + # --- additional patterns --- + - "doesn't know what year it is" + - "thinks the kids are still little" + - "talking to people who aren't here" + - "tried to go to a job he retired from" + regex: + - "(can[']?t|keep)\\s+(remember|recall)" + - "(head|brain).*(scrambled|buffering|foggy|not working)" + - "keep\\s+(forgetting|losing)\\s+(my\\s+)?(train\\s+of\\s+thought|what)" + - "can[']?t\\s+remember\\s+things\\s+today" + - "brain[']?s\\s+buffering" + - "head[']?s\\s+not\\s+working" + - "sounded\\s+weird\\s+on\\s+the\\s+phone" + - "can[']?t\\s+think\\s+straight" + - "doesn[']?t\\s+track" + - "(acting|seems?|been)\\s+(really\\s+)?(off|weird|strange)" + - "(my|his|her)\\s+(head|brain|mind).*(off|foggy|cloudy|fuzzy|not right|skipping)" + - "misplac(e|ed|ing)\\s+(my|his|her|the)" + - "forgot\\s+(the\\s+)?(neighbor|day|where|what|why)" + - "(daughter|son|wife|husband|partner|sister|spouse)\\s+(says?|keeps?\\s+saying)\\s+(I[']?m|he[']?s|she[']?s)\\s+.?off" + - "not\\s+acting\\s+like\\s+(my|him|her|them)sel" + - "mentally\\s+.?off" + - "couldn[']?t\\s+orient" + - "(asked|saying)\\s+the\\s+same\\s+(question|thing)" + - "rereading.*(same|email|sentence)" + - "brain\\s+is\\s+skipping" + - "speech\\s+(is\\s+)?(sort\\s+of\\s+)?jumbled" + - "words\\s+(are\\s+)?coming\\s+out\\s+wrong" + - "called\\s+the\\s+\\w+\\s+the\\s+.?(fridge|microwave|oven)" + - "mixed\\s+up\\s+(sometimes|on)" + - "she[']?s\\s+acting\\s+really\\s+weird" + - "he[']?s\\s+acting\\s+really\\s+weird" + - "(been|was)\\s+acting.*off" + - "acting.{0,15}off" + - "(spouse|partner|wife|husband)\\s+said\\s+(I|he|she)\\s+was\\s+.?weird" + - "kept\\s+saying\\s+(she|he)\\s+needed\\s+to" + - "little\\s+weird\\s+mistakes" + - "been\\s+retired.*go\\s+to\\s+work" + - "(got|get|getting)\\s+lost\\s+(in\\s+)?(his|her|the|own)\\s+(own\\s+)?(house|home|room|yard)" + - "(put|left|placed).{0,10}(milk|keys|phone|remote|wallet).{0,10}(in\\s+the\\s+)?(cupboard|oven|fridge|freezer|wrong|weird)" + - "called\\s+(me|him|her|us).{0,10}(by\\s+)?(the\\s+)?wrong\\s+name" + - "forgot\\s+where\\s+(the\\s+)?(bathroom|kitchen|bedroom|door)" + - "(star|gaz).{0,5}(ing|ed)\\s+(off|into\\s+space|at\\s+nothing|blankly)" + - "eyes?.{0,10}(glaz|glass|blank|vacant|empty)" + - "(mumbl|mutter|rambl).{0,5}(ing|ed).{0,10}(not\\s+)?(mak|no\\s+sense)" + - "(can[']?t|couldn[']?t|unable)\\s+(finish|complete).{0,10}(a\\s+)?(sentence|thought|word)" + - "words?.{0,10}(jumbl|garbl|scrambl|mix)" + - "(tried|try|trying)\\s+to\\s+(leave|go\\s+out|walk\\s+out).{0,15}(pajama|nightgown|underwear|naked|middle\\s+of\\s+the\\s+night|3\\s*am|2\\s*am)" + - "thought\\s+it\\s+was\\s+(morning|night|day|tuesday|monday|\\d{4})" + - "(wander|roam|pace).{0,5}(ing|ed).{0,10}(around|aimless|the\\s+house|the\\s+hall)" + - "(trouble|difficulty|hard\\s+time).{0,10}(follow|track|understand).{0,10}(the\\s+)?(conversation|what)" + # --- MINIMIZER / CONFUSED_VAGUE coverage --- + - "(just|only).{0,10}(a\\s+)?(little|bit|slight).{0,15}(confused|mixed up|foggy|forgetful|spacey|scattered)" + - "(probably|might be).{0,15}(just|nothing|tired|medication|stress|age|old|getting older)" + - "(confused|foggy|forgetful|mixed up).{0,15}(but|though).{0,15}(fine|okay|managing|not that bad)" + - "(thoughts?|brain|head|mind).{0,15}(won'?t|not|isn'?t|doesn'?t).{0,10}(cooperat|work|focus|click|connect)" + - "(mind|thoughts?).{0,15}(wander|drift|slide|slip|scatter|jumble|scramble|all over)" + - "(hard|harder|having trouble|difficulty).{0,10}(concentrat|focus|think|follow|track|keep up)" + low: + partials: + - "confused" + - "disoriented" + - "delirium" + - "altered" + - "not making sense" + - "foggy" + - "scrambled" + - "mixed up" + - "spacey" + - "out of it" + - "acting off" + - "feel off" + - "feels off" + - "glazed" + - "incoherent" + - "wandering" + - "mumbling" + - "sundowning" + - "not oriented" + +negation_handling: + patterns: + - "not confused" + - "thinking clearly" + - "mental status is fine" + - "I can think clearly" + - "head is fine" + - "oriented and alert" + - "alert and oriented" + - "no confusion" + - "confusion resolved" + - "back to normal mentally" + - "sharp as usual" + - "no delirium" + - "mind is clear" + - "thinking clearly now" + - "not confused anymore" + - "confusion cleared up" + - "brain fog lifted" + - "acting like themselves again" + - "making sense now" + - "remembering things fine" + - "knows where he is" + - "knows where she is" + - "oriented to person place and time" + - "mental status is back to baseline" + # --- non-clinical confusion context (R1 scenarios) --- + - "confused about the instructions" + - "confused about my medications" + - "confused about the schedule" + - "confused about the timing" + - "confused about the paperwork" + - "confused about which pill" + - "confused by all the" + - "confused with the" + - "confused about what to do" + - "confused about when to" + - "got confused about" + - "a little confused about" + - "confused about my appointment" + - "confused about my discharge" + - "I get confused with all the medical" + - "confusing to keep track" + - "it's all a bit confusing" + - "the instructions were confusing" + - "no, I'm thinking clearly" + - "no confusion" + - "not confused" + - "I'm clear headed" + - "mind is fine" + - "no I haven't been confused" + # --- medication/instruction memory context --- + - "remember the dosage" + - "remember what the doctor" + - "remember what to take" + - "remember the instructions" + - "remember the schedule" + - "remember which pill" + - "remember how many" + - "remember what I was told" + - "remember if I" + - "remember what I" + - "remember which" + - "remember what my" + # --- wound care / administrative confusion context --- + - "confused about the whole process" + - "confused about the process" + - "confused about how this works" + - "confused about whether" + - "confused about how to" + - "confused with forms" + - "confused about forms" + - "confused about calling" + - "i get confused with" + - "mixed up with all these appointments" + - "mixed up with appointments" + - "mixed up on how this works" + - "can't remember the name" + - "can't remember which one" + - "can't remember which doctor" + - "can't remember the doctor" + - "can't remember who I saw" + - "can't remember her name" + - "can't remember his name" + - "probably nothing" + - "probably just need" + - "probably just a general" + - "probably just a check" + - "probably just age" + - "wound care" + - "dressing change" + - "bandage change" + - "changing the bandage" + - "sterile gauze" + - "buy gauze" + - "healing okay" + - "healing fine" + - "healing well" + - "healing right" + - "forgetting which pill" + - "forgetting the schedule" + - "forgetting what to take" + - "recall the dosage" + - "recall what the doctor" + - "mixed up about my medications" + - "mixed up about the schedule" + - "mixed up about what to take" + - "mixed up the pills" + - "mixed up my medications" + - "pharmacy label" + - "label says something different" + - "label says" + - "prescription says" + - "the bottle says" + - "medication question" + - "medication schedule" + - "dosing schedule" + - "asking about my" + - "question about my" + - "refill" + # --- administrative context (suppress) --- + - "schedule an appointment" + - "follow-up appointment" + - "appointment timing" + - "routine check" + - "just a question" + action: downgrade_confidence + +context_signals: + boost_to_high: + - when: + patient_has_condition: ["F03.*"] + reason: "Baseline dementia — new confusion suggests delirium" + - when: + patient_on_medication_class: ["benzodiazepines", "opioids", "anticholinergics"] + reason: "High-risk medications for delirium" diff --git a/list/taxonomy/acute_illness_preop/flows/clarify.yaml b/list/taxonomy/acute_illness_preop/flows/clarify.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9a19e9ae6cf221b0541b69d4cf5aeda0a6a3aeda --- /dev/null +++ b/list/taxonomy/acute_illness_preop/flows/clarify.yaml @@ -0,0 +1,25 @@ +flow_id: clarify +type: clarification +domain: acute_illness_preop + +actions: + - step: 1 + type: ask + response_spec: + id: acute_illness_preop_clarify + goal: "Ask patient to describe how they are feeling before their surgery" + tone: gentle_professional + must_include: + - "tell me more" + must_ask: + - "describe" + must_not: + - "diagnos" + - "don't worry" + max_questions: 1 + collects: + - acute_illness_description + +exit: + on_complete: re_evaluate + on_unclear: handoff diff --git a/list/taxonomy/acute_illness_preop/flows/escalate_r2.yaml b/list/taxonomy/acute_illness_preop/flows/escalate_r2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1c598ce629f1252f1a358283d4b6e31a8da709d1 --- /dev/null +++ b/list/taxonomy/acute_illness_preop/flows/escalate_r2.yaml @@ -0,0 +1,37 @@ +flow_id: escalate_r2 +type: escalation +domain: acute_illness_preop + +actions: + - step: 1 + type: respond + response_spec: + id: acute_illness_preop_r2_escalation_notice + goal: "Inform patient that the surgical team will follow up same day about their illness before the procedure" + tone: calm_reassuring + must_include: + - "surgical team" + - "follow up" + - "same day" + must_ask: [] + must_not: + - "diagnos" + - "don't worry" + - "probably" + max_questions: 0 + + - step: 2 + type: handoff + target: surgical_nurse + urgency: same_day + response_spec: + id: acute_illness_preop_r2_handoff + goal: "Schedule same-day surgical team callback with illness context" + tone: professional + must_include: + - "follow up" + must_ask: [] + must_not: [] + +exit: + on_complete: end diff --git a/list/taxonomy/acute_illness_preop/flows/escalate_r3.yaml b/list/taxonomy/acute_illness_preop/flows/escalate_r3.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2777ec103122e3c4f2c40db5353bd471e67991c9 --- /dev/null +++ b/list/taxonomy/acute_illness_preop/flows/escalate_r3.yaml @@ -0,0 +1,37 @@ +flow_id: escalate_r3 +type: escalation +domain: acute_illness_preop +actions: +- step: 1 + type: respond + response_spec: + id: r3_escalation_notice + goal: Instruct patient to call 911 immediately and inform them of nurse transfer + tone: calm_direct + must_include: + - call 911 + - right away + must_ask: [] + must_not: + - diagnos + - don't worry + - probably + - based on what you + - I've determined + - my assessment + max_questions: 0 +- step: 2 + type: handoff + target: clinical_nurse + urgency: immediate + response_spec: + id: r3_handoff + goal: Transfer to clinical nurse with context summary + tone: professional + must_include: + - transferring + must_ask: [] + must_not: + - goodbye +exit: + on_complete: end diff --git a/list/taxonomy/acute_illness_preop/flows/reassure_low_risk.yaml b/list/taxonomy/acute_illness_preop/flows/reassure_low_risk.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a34b1e11c70d3c0fa4f89b3cf1ffa0247a40f884 --- /dev/null +++ b/list/taxonomy/acute_illness_preop/flows/reassure_low_risk.yaml @@ -0,0 +1,21 @@ +flow_id: reassure_low_risk +type: resolution +domain: acute_illness_preop + +actions: + - step: 1 + type: respond + response_spec: + id: acute_illness_preop_reassure + goal: "Acknowledge the patient's concern and note that their care team will be informed for routine follow-up before surgery" + tone: warm_professional + must_include: + - "care team" + - "follow up" + must_not: + - "emergency" + - "don't worry" + max_questions: 0 + +exit: + on_complete: end diff --git a/list/taxonomy/acute_illness_preop/flows/safety_screen.yaml b/list/taxonomy/acute_illness_preop/flows/safety_screen.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f2e9eaf865c3ba7009ba4842fbbd7f2c6d739e89 --- /dev/null +++ b/list/taxonomy/acute_illness_preop/flows/safety_screen.yaml @@ -0,0 +1,55 @@ +flow_id: safety_screen +type: screening +domain: acute_illness_preop + +required_slots: + - illness_fever_present + - illness_respiratory_symptoms + - illness_gi_symptoms + - illness_onset_timing + +actions: + - step: 1 + type: ask + response_spec: + id: acute_illness_preop_screen_step1 + goal: "Assess whether the patient has a fever and respiratory symptoms" + tone: calm_urgent + must_include: + - "symptoms" + must_ask: + - "Do you have a fever or feel feverish?" + - "Are you experiencing any cough, sore throat, or trouble breathing?" + must_not: + - "don't worry" + - "probably nothing" + max_questions: 2 + collects: + - illness_fever_present + - illness_respiratory_symptoms + + - step: 2 + type: ask + response_spec: + id: acute_illness_preop_screen_step2 + goal: "Assess GI symptoms and when symptoms started" + tone: calm_urgent + must_include: + - "also" + must_ask: + - "Have you had any nausea, vomiting, or diarrhea?" + - "When did you first start feeling sick?" + must_not: + - "don't worry" + - "probably fine" + max_questions: 2 + collects: + - illness_gi_symptoms + - illness_onset_timing + +exit: + on_complete: evaluate_risk + on_r2: escalate_r2 + on_r3: escalate_r3 + on_low_risk: reassure_low_risk + on_unclear: escalate_r2 diff --git a/list/taxonomy/acute_illness_preop/rules.yaml b/list/taxonomy/acute_illness_preop/rules.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e644965b64d49f097161e288634b58bec98b7441 --- /dev/null +++ b/list/taxonomy/acute_illness_preop/rules.yaml @@ -0,0 +1,33 @@ +domain: acute_illness_preop +target_risk_class: R2 + +decision_rules: + - id: acute_illness_preop_high_confidence + if: + confidence: high + then: + flow: safety_screen + + - id: acute_illness_preop_medium_confidence + if: + confidence: medium + then: + flow: safety_screen + + - id: acute_illness_preop_low_confidence + if: + confidence: low + then: + flow: clarify + + - id: acute_illness_preop_r3_escalation + if: + risk_class: R3 + then: + flow: escalate_r3 + + - id: acute_illness_preop_r2_escalation + if: + risk_class: R2 + then: + flow: escalate_r2 diff --git a/list/taxonomy/acute_illness_preop/triggers.yaml b/list/taxonomy/acute_illness_preop/triggers.yaml new file mode 100644 index 0000000000000000000000000000000000000000..420e3b91fe3ccf4e1ac46d52ee3b93e1e447a430 --- /dev/null +++ b/list/taxonomy/acute_illness_preop/triggers.yaml @@ -0,0 +1,83 @@ +domain: acute_illness_preop +priority: 69 + +lexical_signals: + high: + phrases: + - "came down with a cold before surgery" + - "running a fever" + - "started coughing" + - "have the flu" + - "stomach bug before my procedure" + - "feel sick before surgery" + - "vomiting before my surgery" + - "diarrhea before my procedure" + - "woke up with a fever this morning" + - "sore throat and fever before my operation" + - "throwing up since last night" + - "coughing up phlegm before surgery" + - "came down with something before my procedure" + - "been sick the last few days and surgery is soon" + - "got sick right before surgery" + - "fever of 101 and surgery is tomorrow" + - "been vomiting and have surgery coming up" + - "chills and body aches before my procedure" + regex: + - "(fever|cold|flu|cough|vomit|diarrhea|throwing\\s+up|sick|ill).{0,25}(before|prior).{0,10}(surgery|procedure|operation)" + - "(surgery|procedure|operation).{0,25}(fever|cold|flu|cough|vomit|diarrhea|throwing\\s+up|sick|ill)" + - "(came\\s+down|come\\s+down|got|gotten).{0,15}(sick|cold|flu|bug|fever|ill).{0,20}(surgery|procedure|operation)" + - "(running|have|got|gotten|developed).{0,10}(a\\s+)?(fever|temperature).{0,20}(surgery|procedure|operation)" + - "(vomit|throw|threw).{0,10}(up|ing).{0,20}(surgery|procedure|operation|before|prior)" + - "(diarrhea|stomach\\s+bug|stomach\\s+flu|gi\\s+bug).{0,20}(surgery|procedure|operation|before|prior)" + - "(?=1.16.0 +transformers>=4.36.0 + +# Web framework +fastapi>=0.109.0 +uvicorn[standard]>=0.27.0 +pydantic>=2.5.0 + +# Utilities +numpy>=1.24.0 +pyyaml>=6.0 +bleach>=6.1.0 +slowapi>=0.1.9 +httpx>=0.26.0 diff --git a/service/__init__.py b/service/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..88f04e4cb74947de57d440ab142fa26618d12e01 --- /dev/null +++ b/service/__init__.py @@ -0,0 +1 @@ +"""DCE Intent Classifier Service Package.""" diff --git a/service/app.py b/service/app.py new file mode 100644 index 0000000000000000000000000000000000000000..669201b0d3a81042c6a15fa8e9103942a22cdb51 --- /dev/null +++ b/service/app.py @@ -0,0 +1,2764 @@ +#!/usr/bin/env python3 +""" +FastAPI Inference Service for DCE Intent BioClinicalBERT. + +Low-latency inference using ONNX Runtime INT8 quantized model. +Scalability features: async inference, connection pooling, metrics, batching. + +Usage: + API_KEY=your-secret-key uvicorn service.app:app --host 0.0.0.0 --port 8000 + + # Or specify a different port: + API_KEY=your-secret-key uvicorn service.app:app --host 0.0.0.0 --port 8001 + + # Production with multiple workers: + API_KEY=your-secret-key gunicorn service.app:app -w 4 -k uvicorn.workers.UvicornWorker +""" + +import asyncio +import hashlib +import json +import logging +import os +import re +import secrets +import signal +import sys +import threading +import time +import uuid +from collections import OrderedDict +from concurrent.futures import ThreadPoolExecutor +from contextlib import asynccontextmanager +from contextvars import ContextVar +from dataclasses import dataclass, field +from datetime import datetime, timezone +from pathlib import Path +from typing import Any, Dict, List, Optional, Tuple + +import bleach +import numpy as np +import onnxruntime as ort +from fastapi import Depends, FastAPI, HTTPException, Query, Request, Security, status +from fastapi.middleware.cors import CORSMiddleware +from fastapi.responses import JSONResponse +from fastapi.security import APIKeyHeader +from pydantic import BaseModel, Field, field_validator +from slowapi import Limiter, _rate_limit_exceeded_handler +from slowapi.errors import RateLimitExceeded +from slowapi.util import get_remote_address +from transformers import AutoTokenizer + +# Import HIPAA compliance utilities +try: + from service.hipaa_config import ( + hipaa_audit, + redact_phi, + check_clinical_safety_keywords, + get_security_headers, + get_compliance_status, + REQUIRE_TLS, + ) + HIPAA_ENABLED = True +except ImportError: + HIPAA_ENABLED = False + +# Import Temporal Preprocessor +try: + from service.temporal_preprocessor import preprocess_temporal, TemporalSignal + TEMPORAL_PREPROCESSOR_AVAILABLE = True +except ImportError: + TEMPORAL_PREPROCESSOR_AVAILABLE = False + +# Import Taxonomy Scorer +try: + from service.taxonomy_scorer import score_taxonomy, TaxonomyScoreResult + TAXONOMY_SCORER_AVAILABLE = True +except ImportError: + TAXONOMY_SCORER_AVAILABLE = False + +# Import Decision Engine (Phase 1: Safety Trifecta) +try: + from decision.engine.config_loader import DecisionConfigLoader + from decision.engine.trigger_engine import TaxonomyTriggerEngine + from decision.engine.domain_nomination import DomainNominator + from decision.engine.risk_classifier import RiskClassifier + from decision.engine.models import RiskClass, ConfidenceTier, RiskAssessment + from decision.engine.flow_engine import FlowEngine, TurnResult + from decision.engine.fhir_context import PatientContextBuilder + from decision.engine.tenant_manager import TenantManager + from decision.engine.journey_orchestrator import JourneyOrchestrator + DECISION_ENGINE_AVAILABLE = True +except ImportError as _de_err: + DECISION_ENGINE_AVAILABLE = False + logger.warning("Decision engine not available: %s", _de_err) + +# ============================================================================= +# CONTEXT VARIABLES FOR THREAD-SAFE LOGGING +# ============================================================================= + +request_id_var: ContextVar[str] = ContextVar("request_id", default="-") +client_ip_var: ContextVar[str] = ContextVar("client_ip", default="-") + + +class RequestContextFilter(logging.Filter): + """Add request context to log records using context variables (thread-safe).""" + def filter(self, record): + record.request_id = request_id_var.get() + record.client_ip = client_ip_var.get() + return True + + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s - %(name)s - %(levelname)s - [%(request_id)s] [%(client_ip)s] - %(message)s", +) +logger = logging.getLogger(__name__) +logger.addFilter(RequestContextFilter()) + +# Audit logger for security events +audit_logger = logging.getLogger("audit") +audit_logger.setLevel(logging.INFO) +audit_logger.addFilter(RequestContextFilter()) + +# ============================================================================= +# SECURITY CONFIGURATION +# ============================================================================= + +# API Key Authentication +API_KEY = os.getenv("API_KEY", "") # Required in production +API_KEY_HEADER = APIKeyHeader(name="X-API-Key", auto_error=False) +REQUIRE_AUTH = os.getenv("REQUIRE_AUTH", "false").lower() == "true" + +# Rate Limiting Configuration +RATE_LIMIT = os.getenv("RATE_LIMIT", "100/minute") # Requests per minute +# Use Redis for multi-worker deployments: redis://localhost:6379 +# Falls back to memory for single-worker or development +RATE_LIMIT_STORAGE_URI = os.getenv("RATE_LIMIT_STORAGE", "memory://") +if "gunicorn" in os.getenv("SERVER_SOFTWARE", "") and RATE_LIMIT_STORAGE_URI == "memory://": + logger.warning("Rate limiting with memory storage won't work across gunicorn workers. Set RATE_LIMIT_STORAGE=redis://...") + +# CORS Configuration - comma-separated list of allowed origins +ALLOWED_ORIGINS = os.getenv("ALLOWED_ORIGINS", "http://localhost:3000,http://localhost:8080").split(",") +ALLOWED_ORIGINS = [origin.strip() for origin in ALLOWED_ORIGINS if origin.strip()] + +# Path validation - allowed base directories for model loading +ALLOWED_MODEL_PATHS = [ + Path("artifacts").resolve(), + Path(os.getenv("ALLOWED_MODEL_BASE", "artifacts")).resolve(), +] + +# ============================================================================= +# SCALABILITY CONFIGURATION +# ============================================================================= + +# Thread pool for CPU-bound inference (prevents blocking async event loop) +INFERENCE_WORKERS = int(os.getenv("INFERENCE_WORKERS", "4")) +inference_executor: Optional[ThreadPoolExecutor] = None + +# ONNX Runtime session configuration +ONNX_INTRA_OP_THREADS = int(os.getenv("ONNX_INTRA_OP_THREADS", "4")) +ONNX_INTER_OP_THREADS = int(os.getenv("ONNX_INTER_OP_THREADS", "1")) +ONNX_GRAPH_OPT_LEVEL = os.getenv("ONNX_GRAPH_OPT_LEVEL", "all") # all, basic, extended, disabled + +# Request batching configuration (optional, for high-throughput scenarios) +ENABLE_BATCHING = os.getenv("ENABLE_BATCHING", "false").lower() == "true" +BATCH_SIZE = int(os.getenv("BATCH_SIZE", "8")) +BATCH_TIMEOUT_MS = int(os.getenv("BATCH_TIMEOUT_MS", "10")) + +# Metrics configuration +ENABLE_METRICS = os.getenv("ENABLE_METRICS", "true").lower() == "true" + +# Request timeout configuration (seconds) +INFERENCE_TIMEOUT_SECONDS = float(os.getenv("INFERENCE_TIMEOUT", "30.0")) + +# Request body size limit (bytes) - prevents DoS via large payloads +MAX_REQUEST_BODY_SIZE = int(os.getenv("MAX_REQUEST_BODY_SIZE", str(1024 * 1024))) # 1MB default + +# Default decision policy constants (used when policy file not found) +DEFAULT_ESCALATION_LABEL = "ESCALATION" +DEFAULT_ESCALATION_THRESHOLD = 0.5 +DEFAULT_MIN_CONFIDENCE = 0.3 +DEFAULT_FALLBACK_LABEL = "OTHER" + +# ============================================================================= +# METRICS TRACKING +# ============================================================================= + +@dataclass +class ServiceMetrics: + """Thread-safe metrics for monitoring service performance.""" + total_requests: int = 0 + successful_requests: int = 0 + failed_requests: int = 0 + total_inference_time_ms: float = 0.0 + total_tokenize_time_ms: float = 0.0 + escalations_triggered: int = 0 + start_time: float = field(default_factory=time.time) + _lock: Any = field(default_factory=lambda: __import__('threading').Lock()) + + def record_request(self, success: bool, inference_ms: float, tokenize_ms: float, escalated: bool): + """Record metrics for a request (thread-safe with lock).""" + with self._lock: + self.total_requests += 1 + if success: + self.successful_requests += 1 + else: + self.failed_requests += 1 + self.total_inference_time_ms += inference_ms + self.total_tokenize_time_ms += tokenize_ms + if escalated: + self.escalations_triggered += 1 + + def get_stats(self) -> Dict[str, Any]: + """Get current metrics as dictionary.""" + uptime = time.time() - self.start_time + avg_inference = self.total_inference_time_ms / max(1, self.successful_requests) + avg_tokenize = self.total_tokenize_time_ms / max(1, self.successful_requests) + return { + "uptime_seconds": round(uptime, 2), + "total_requests": self.total_requests, + "successful_requests": self.successful_requests, + "failed_requests": self.failed_requests, + "success_rate": round(self.successful_requests / max(1, self.total_requests), 4), + "escalations_triggered": self.escalations_triggered, + "avg_inference_ms": round(avg_inference, 3), + "avg_tokenize_ms": round(avg_tokenize, 3), + "requests_per_second": round(self.total_requests / max(1, uptime), 2), + } + + +metrics = ServiceMetrics() + +# ============================================================================= +# MODEL CONFIGURATION +# ============================================================================= + +def validate_path(path: Path, allowed_bases: List[Path]) -> Path: + """Validate that a path is within allowed directories (prevent traversal).""" + resolved = path.resolve() + for base in allowed_bases: + try: + resolved.relative_to(base) + return resolved + except ValueError: + continue + raise ValueError(f"Path {path} is not within allowed directories") + +# Configuration from environment with path validation +_model_dir_raw = Path(os.getenv("MODEL_DIR", "artifacts/onnx_int8")) +_environment = os.getenv("ENVIRONMENT", "development").lower() +try: + MODEL_DIR = validate_path(_model_dir_raw, ALLOWED_MODEL_PATHS) +except ValueError: + if _environment == "production": + raise RuntimeError( + f"MODEL_DIR path validation failed for '{_model_dir_raw}'. " + "In production, MODEL_DIR must be within allowed model paths." + ) + # Fall back to default only in non-production + MODEL_DIR = Path("artifacts/onnx_int8").resolve() + logger.warning(f"MODEL_DIR path validation failed, using default: {MODEL_DIR}") + +_policy_path_raw = Path(os.getenv("POLICY_PATH", "artifacts/config/decision_policy.json")) +try: + POLICY_PATH = validate_path(_policy_path_raw, ALLOWED_MODEL_PATHS) +except ValueError: + if _environment == "production": + raise RuntimeError( + f"POLICY_PATH path validation failed for '{_policy_path_raw}'. " + "In production, POLICY_PATH must be within allowed model paths." + ) + POLICY_PATH = Path("artifacts/config/decision_policy.json").resolve() + logger.warning(f"POLICY_PATH path validation failed, using default: {POLICY_PATH}") + +MAX_LENGTH = int(os.getenv("MAX_LENGTH", "64")) # Match v4 BioClinicalBERT training config +MAX_INPUT_CHARS = int(os.getenv("MAX_INPUT_CHARS", "1024")) +MAX_COMBINED_CHARS = int(os.getenv("MAX_COMBINED_CHARS", "1500")) # text + context limit + +# ============================================================================= +# RATE LIMITER SETUP +# ============================================================================= + +limiter = Limiter(key_func=get_remote_address) + +# ============================================================================= +# FASTAPI APPLICATION +# ============================================================================= + +# Conditionally disable docs in production +DISABLE_DOCS = os.getenv("DISABLE_DOCS", "false").lower() == "true" + +app = FastAPI( + title="Medical Intent Escalation", + description="DCE version 1.0.0", + version="1.0.0", + docs_url=None if DISABLE_DOCS else "/docs", + redoc_url=None if DISABLE_DOCS else "/redoc", + openapi_url=None if DISABLE_DOCS else "/openapi.json", +) + +# Add rate limiter to app +app.state.limiter = limiter +app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) + +# CORS middleware with restricted origins +app.add_middleware( + CORSMiddleware, + allow_origins=ALLOWED_ORIGINS, + allow_credentials=True, + allow_methods=["POST", "GET"], + allow_headers=["X-API-Key", "Content-Type", "Authorization"], +) + + +@app.middleware("http") +async def limit_request_body_size(request: Request, call_next): + """Middleware to limit request body size and prevent DoS via large payloads.""" + content_length = request.headers.get("content-length") + if content_length: + try: + if int(content_length) > MAX_REQUEST_BODY_SIZE: + return JSONResponse( + status_code=413, + content={"detail": f"Request body too large. Max size: {MAX_REQUEST_BODY_SIZE} bytes"}, + ) + except ValueError: + pass # Invalid content-length header, let request proceed + return await call_next(request) + + +# ============================================================================= +# AUTHENTICATION +# ============================================================================= + +async def verify_api_key(api_key: Optional[str] = Security(API_KEY_HEADER)) -> Optional[str]: + """ + Verify API key from header. + + Returns the API key if valid, raises HTTPException if invalid. + """ + if not REQUIRE_AUTH: + return None # Auth disabled + + if not API_KEY: + logger.warning("API_KEY not configured but REQUIRE_AUTH=true") + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail="Server authentication not configured", + ) + + if not api_key: + audit_logger.warning("Missing API key in request") + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Missing API key", + headers={"WWW-Authenticate": "ApiKey"}, + ) + + # Use constant-time comparison to prevent timing attacks + if not secrets.compare_digest(api_key, API_KEY): + audit_logger.warning(f"Invalid API key attempt: {hashlib.sha256(api_key.encode()).hexdigest()[:16]}...") + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid API key", + headers={"WWW-Authenticate": "ApiKey"}, + ) + + return api_key + + +# ============================================================================= +# REQUEST CONTEXT MIDDLEWARE +# ============================================================================= + +@app.middleware("http") +async def add_request_context(request: Request, call_next): + """Add request ID and client IP to all requests for audit logging (thread-safe).""" + request_id = request.headers.get("X-Request-ID", str(uuid.uuid4())[:8]) + client_ip = request.client.host if request.client else "unknown" + + # Store in request state for access in endpoints + request.state.request_id = request_id + request.state.client_ip = client_ip + + # Set context variables (thread-safe, no global state mutation) + request_id_token = request_id_var.set(request_id) + client_ip_token = client_ip_var.set(client_ip) + + try: + # Log request + audit_logger.info(f"Request: {request.method} {request.url.path}") + + start_time = time.perf_counter() + response = await call_next(request) + duration_ms = (time.perf_counter() - start_time) * 1000 + + # Add request ID to response headers + response.headers["X-Request-ID"] = request_id + + # Add security headers for HIPAA compliance + if HIPAA_ENABLED: + # Use relaxed headers for docs endpoints + is_docs = request.url.path in ["/docs", "/redoc", "/openapi.json"] + for header_name, header_value in get_security_headers(is_docs=is_docs).items(): + response.headers[header_name] = header_value + + # Log response + audit_logger.info(f"Response: {response.status_code} ({duration_ms:.2f}ms)") + + return response + finally: + # Reset context variables + request_id_var.reset(request_id_token) + client_ip_var.reset(client_ip_token) + +# Global model resources (loaded at startup) +tokenizer: Optional[AutoTokenizer] = None +session: Optional[ort.InferenceSession] = None +label2id: Dict[str, int] = {} +id2label: Dict[int, str] = {} +decision_policy: Dict[str, Any] = {} + +# Decision Engine globals (Phase 1: Safety Trifecta) +decision_config: Optional[Any] = None # DecisionConfigLoader +trigger_engine: Optional[Any] = None # TaxonomyTriggerEngine +domain_nominator: Optional[Any] = None # DomainNominator +risk_classifier: Optional[Any] = None # RiskClassifier +flow_engine: Optional[Any] = None # FlowEngine (Phase 2) +tenant_manager: Optional[Any] = None # TenantManager (Phase 3) +journey_orch: Optional[Any] = None # JourneyOrchestrator (Phase 3) +context_builder: Optional[Any] = None # PatientContextBuilder (Phase 3) + + +class PredictRequest(BaseModel): + """Request schema for /predict endpoint.""" + text: str = Field(..., min_length=1, max_length=MAX_INPUT_CHARS, description="Input text to classify") + context: Optional[str] = Field(None, max_length=MAX_INPUT_CHARS, description="Optional conversation context") + + @field_validator("text", "context", mode="before") + @classmethod + def sanitize_input(cls, v: Optional[str]) -> Optional[str]: + """Sanitize input to prevent injection attacks.""" + if v is None: + return None + # Strip HTML/script tags + v = bleach.clean(v, tags=[], strip=True) + # Normalize whitespace + v = " ".join(v.split()) + # Remove null bytes and other control characters + v = v.replace("\x00", "").replace("\r", "") + return v + + def validate_combined_length(self) -> None: + """Validate that text + context doesn't exceed combined limit.""" + text_len = len(self.text) if self.text else 0 + context_len = len(self.context) if self.context else 0 + if text_len + context_len > MAX_COMBINED_CHARS: + raise ValueError( + f"Combined text and context length ({text_len + context_len}) " + f"exceeds maximum ({MAX_COMBINED_CHARS})" + ) + + +class TimingInfo(BaseModel): + """Timing breakdown for the prediction.""" + tokenize_ms: float + inference_ms: float + postprocess_ms: float + total_ms: float + + +class TaxonomyMatchDetail(BaseModel): + """Detail for a single matched taxonomy domain.""" + domain: str + score: float = Field(..., description="Deterministic match score 0.0-1.0") + confidence_tier: str = Field(..., description="high/medium/low/none") + priority: int = Field(0, description="Domain clinical priority") + is_negated: bool = False + target_risk_class: Optional[str] = None + recommended_flow: Optional[str] = None + trigger_count: int = 0 + matched_phrases: List[str] = Field(default_factory=list) + + +class PredictResponse(BaseModel): + """Response schema for /predict endpoint.""" + predicted_label: str + probabilities: Dict[str, float] + taxonomy_scores: Dict[str, float] = Field(default_factory=dict, description="Deterministic match scores for all taxonomy domains") + matched_taxonomy: List[TaxonomyMatchDetail] = Field(default_factory=list, description="Taxonomy domains that matched with details") + top_taxonomy_domain: Optional[str] = Field(None, description="Highest-scoring taxonomy domain") + should_escalate: bool + escalation_probability: float + confidence: float + decision_reason: str + timing: TimingInfo + model_version: str = "1.0.0" + + +class DomainNominationResponse(BaseModel): + """A single domain nomination in the clinical assessment.""" + domain: str + confidence_tier: str + priority: int + target_risk_class: Optional[str] = None + is_negated: bool = False + recommended_flow: Optional[str] = None + trigger_match_count: int = 0 + + +class ClinicalAssessmentResponse(BaseModel): + """Full clinical risk assessment response for /predict/clinical.""" + # ML classification + predicted_label: str + probabilities: Dict[str, float] + ml_confidence: float + # Clinical risk assessment + risk_class: str = Field(..., description="R0/R1/R2/R3 clinical risk tier") + risk_description: str = Field(..., description="Human-readable risk description") + primary_domain: Optional[str] = Field(None, description="Primary clinical domain detected") + requires_911: bool = Field(False, description="Whether patient should be instructed to call 911") + requires_nurse_transfer: bool = Field(False, description="Whether a nurse transfer is needed") + hard_escalate: bool = Field(False, description="Whether hard-escalate domain triggered") + safety_override: bool = Field(False, description="Whether lexical safety signal overrode ML") + # Domain nominations + domain_nominations: List[DomainNominationResponse] = Field(default_factory=list) + # Taxonomy scores (deterministic) + taxonomy_scores: Dict[str, float] = Field(default_factory=dict, description="Deterministic match scores for all taxonomy domains") + matched_taxonomy: List[TaxonomyMatchDetail] = Field(default_factory=list, description="Taxonomy domains that matched with details") + top_taxonomy_domain: Optional[str] = Field(None, description="Highest-scoring taxonomy domain") + # Flow recommendation + recommended_flow: Optional[str] = None + recommended_action: Optional[str] = None + # Legacy compatibility + should_escalate: bool + escalation_probability: float + decision_reason: str + # Timing + timing: TimingInfo + model_version: str = "1.0.0" + engine_version: str = "phase1" + + +class HealthResponse(BaseModel): + """Response schema for /health endpoint.""" + status: str + model_loaded: bool + policy_loaded: bool + decision_engine_loaded: bool = False + timestamp: str + + +def get_onnx_optimization_level(level: str) -> ort.GraphOptimizationLevel: + """Convert string optimization level to ONNX Runtime enum.""" + levels = { + "disabled": ort.GraphOptimizationLevel.ORT_DISABLE_ALL, + "basic": ort.GraphOptimizationLevel.ORT_ENABLE_BASIC, + "extended": ort.GraphOptimizationLevel.ORT_ENABLE_EXTENDED, + "all": ort.GraphOptimizationLevel.ORT_ENABLE_ALL, + } + return levels.get(level.lower(), ort.GraphOptimizationLevel.ORT_ENABLE_ALL) + + +def load_model() -> None: + """Load ONNX model, tokenizer, and decision policy.""" + global tokenizer, session, label2id, id2label, decision_policy, inference_executor + + logger.info(f"Loading model from {MODEL_DIR}") + logger.info(f"ONNX config: intra_threads={ONNX_INTRA_OP_THREADS}, inter_threads={ONNX_INTER_OP_THREADS}, opt_level={ONNX_GRAPH_OPT_LEVEL}") + + # Initialize thread pool for async inference + inference_executor = ThreadPoolExecutor( + max_workers=INFERENCE_WORKERS, + thread_name_prefix="inference_worker" + ) + logger.info(f"Inference thread pool created with {INFERENCE_WORKERS} workers") + + # Load tokenizer + tokenizer = AutoTokenizer.from_pretrained(MODEL_DIR) + logger.info("Tokenizer loaded") + + # Load ONNX model + model_path = MODEL_DIR / "model.onnx" + if not model_path.exists(): + raise FileNotFoundError(f"ONNX model not found: {model_path}") + + # Configure session options with environment-based settings + sess_options = ort.SessionOptions() + sess_options.graph_optimization_level = get_onnx_optimization_level(ONNX_GRAPH_OPT_LEVEL) + sess_options.intra_op_num_threads = ONNX_INTRA_OP_THREADS + sess_options.inter_op_num_threads = ONNX_INTER_OP_THREADS + + # Enable memory optimization for better scalability + sess_options.enable_mem_pattern = True + sess_options.enable_cpu_mem_arena = True + + session = ort.InferenceSession( + str(model_path), + sess_options, + providers=["CPUExecutionProvider"] + ) + logger.info("ONNX session created with optimized settings") + + # Check quantization metadata - warn if model is not actually quantized + quant_meta_path = MODEL_DIR / "quantization_metadata.json" + if quant_meta_path.exists(): + with open(quant_meta_path, "r", encoding="utf-8") as f: + quant_meta = json.load(f) + if not quant_meta.get("is_quantized", True): + logger.warning( + f"MODEL NOT QUANTIZED: The model in {MODEL_DIR} is an unquantized FP32 model " + f"despite being in a directory that implies INT8 quantization. " + f"Inference will be slower than expected. Re-run: python quantize_onnx.py" + ) + + # Load label mappings + mappings_path = MODEL_DIR / "label_mappings.json" + if mappings_path.exists(): + with open(mappings_path, "r", encoding="utf-8") as f: + mappings = json.load(f) + label2id = mappings["label2id"] + id2label = {int(k): v for k, v in mappings["id2label"].items()} + logger.info(f"Loaded {len(label2id)} labels") + else: + logger.warning("Label mappings not found, using defaults") + + # Load decision policy + if POLICY_PATH.exists(): + with open(POLICY_PATH, "r", encoding="utf-8") as f: + decision_policy = json.load(f) + logger.info("Decision policy loaded") + + # Runtime safety guardrail: warn if calibrated recall is below minimum + SAFETY_MIN_RECALL = 0.85 + cal_metrics = decision_policy.get("calibration_metrics", {}) + policy_recall = cal_metrics.get("recall", None) + if policy_recall is not None and policy_recall < SAFETY_MIN_RECALL: + logger.warning( + f"SAFETY WARNING: Decision policy recall ({policy_recall:.3f}) is below " + f"the safety minimum ({SAFETY_MIN_RECALL:.3f}). " + f"{(1 - policy_recall) * 100:.1f}% of escalation cases may be missed. " + f"Recalibrate with: python calibrate.py --max_length 64" + ) + else: + logger.warning(f"Decision policy not found at {POLICY_PATH}, using defaults") + decision_policy = { + "escalation_policy": { + "escalation_label": DEFAULT_ESCALATION_LABEL, + "escalation_threshold": DEFAULT_ESCALATION_THRESHOLD, + }, + "confidence_policy": { + "min_confidence": DEFAULT_MIN_CONFIDENCE, + "fallback_label": DEFAULT_FALLBACK_LABEL, + }, + } + + # Initialize Decision Engine (Phase 1: Safety Trifecta) + global decision_config, trigger_engine, domain_nominator, risk_classifier, flow_engine, tenant_manager, journey_orch, context_builder + if DECISION_ENGINE_AVAILABLE: + decision_dir = Path(__file__).resolve().parent.parent / "decision" + if decision_dir.is_dir(): + try: + decision_config = DecisionConfigLoader(decision_dir) + decision_config.load_all() + # Load additional taxonomy domains from list/taxonomy/ + list_taxonomy_dir = Path(__file__).resolve().parent.parent / "list" / "taxonomy" + if list_taxonomy_dir.is_dir(): + decision_config.load_additional_taxonomy(list_taxonomy_dir) + trigger_engine = TaxonomyTriggerEngine(decision_config) + domain_nominator = DomainNominator(decision_config, trigger_engine) + risk_classifier = RiskClassifier(decision_config) + flow_engine = FlowEngine(decision_config) + tenant_manager = TenantManager(decision_config) + journey_orch = JourneyOrchestrator(decision_config, tenant_manager) + context_builder = PatientContextBuilder(decision_config) + logger.info( + "Decision engine initialized: %d domains, %d risk rules, %d suppression rules, " + "%d tenants, %d journeys, flow engine ready", + len(decision_config.domain_names), + len(decision_config.risk_escalation_rules), + len(decision_config.domain_suppression_rules), + len(decision_config.tenants), + len(decision_config.journeys), + ) + except Exception as e: + logger.error("Failed to initialize decision engine: %s", e) + decision_config = None + trigger_engine = None + domain_nominator = None + risk_classifier = None + else: + logger.info("Decision config directory not found at %s, engine disabled", decision_dir) + + +def softmax(x: np.ndarray) -> np.ndarray: + """Compute softmax probabilities from logits.""" + x_shifted = x - np.max(x, axis=-1, keepdims=True) + exp_x = np.exp(x_shifted) + return exp_x / np.sum(exp_x, axis=-1, keepdims=True) + + +# Safety keywords that ALWAYS trigger escalation regardless of model output +# Each entry: (pattern, description, requires_negation_check) +SAFETY_ESCALATION_PATTERNS = [ + # Mental health - ALWAYS check for negation + (re.compile(r"\b(suicide|suicidal)\b", re.IGNORECASE), "suicide_mention", True), + (re.compile(r"\b(kill myself|end my life|want to die|kill me)\b", re.IGNORECASE), "self_harm_intent", True), + (re.compile(r"\b(hurt myself|self[- ]?harm|cutting myself)\b", re.IGNORECASE), "self_harm", True), + (re.compile(r"\b(overdose|od['']?d)\b", re.IGNORECASE), "overdose", True), + # Breathing - check for negation (e.g., "I'm not having trouble breathing") + (re.compile(r"\b(can'?t breathe|cannot breathe|not breathing|stop breathing)\b", re.IGNORECASE), "breathing_emergency", False), # These phrases are already negative + (re.compile(r"\b(difficulty breathing|trouble breathing|hard to breathe)\b", re.IGNORECASE), "breathing_difficulty", True), + # Cardiac - check for negation + (re.compile(r"\b(chest\s+(pain|hurts?|pressure|tightness|burning|discomfort)|pain\s+in\s+(my\s+)?chest|heart\s+pain)\b", re.IGNORECASE), "chest_pain", True), + (re.compile(r"\b(heart attack|cardiac arrest)\b", re.IGNORECASE), "cardiac_emergency", True), + (re.compile(r"\b(stroke)\b", re.IGNORECASE), "stroke", True), + # Consciousness - check for negation + (re.compile(r"\b(unconscious|unresponsive|passed out)\b", re.IGNORECASE), "unconscious", True), + (re.compile(r"\b(seizure|convulsion)\b", re.IGNORECASE), "seizure", True), + # Bleeding - check for negation + (re.compile(r"\b(severe bleeding|bleeding (heavily|out|profusely)|hemorrhage|hemorrhaging)\b", re.IGNORECASE), "severe_bleeding", True), + # Allergic reaction - check for negation + (re.compile(r"\b(anaphylaxis|anaphylactic|severe allergic)\b", re.IGNORECASE), "anaphylaxis", True), + (re.compile(r"\b(throat.*(closing|swelling))\b", re.IGNORECASE), "throat_swelling", True), +] + +# Negation patterns to check before safety keywords +NEGATION_PATTERNS = [ + re.compile(r"\b(not|no|don'?t|doesn'?t|didn'?t|haven'?t|hasn'?t|hadn'?t|won'?t|wouldn'?t|can'?t|cannot|never|without|ain'?t)\b", re.IGNORECASE), +] + +# Context window for negation check (number of words before keyword) +NEGATION_WINDOW_SIZE = 5 + +# Historical/third-party patterns that indicate non-emergency context +HISTORICAL_PATTERNS = [ + re.compile(r"\b(my (friend|mother|father|brother|sister|husband|wife|son|daughter|grandma|grandpa|neighbor|coworker))\b", re.IGNORECASE), + re.compile(r"\b(last (year|month|week|time)|years? ago|previously|in the past|used to|history of)\b", re.IGNORECASE), + re.compile(r"\b(worried about|afraid of|scared of|fear of|thinking about whether)\b", re.IGNORECASE), +] + +# Active-urgency patterns that OVERRIDE historical/proxy suppression. +# When a proxy reference ("my mother") co-occurs with these acute signals, +# the report should be treated as authoritative — do NOT suppress. +PROXY_ACTIVE_URGENCY_PATTERNS = [ + re.compile(r"\b(is\s+having|are\s+having|has\s+been\s+having)\b", re.IGNORECASE), + re.compile(r"\b(right\s+now|at\s+this\s+moment|currently|presently)\b", re.IGNORECASE), + re.compile(r"\b(can'?t\s+breathe|cannot\s+breathe|not\s+breathing|stopped\s+breathing)\b", re.IGNORECASE), + re.compile(r"\b(is\s+(bleeding|seizing|convulsing|choking|vomiting|fainting|unconscious|unresponsive))\b", re.IGNORECASE), + re.compile(r"\b(just\s+(collapsed|fainted|passed\s+out|fell|overdosed|seized))\b", re.IGNORECASE), + re.compile(r"\b(needs?\s+help|call\s+911|emergency|ambulance)\b", re.IGNORECASE), + re.compile(r"\b(what\s+should\s+(i|we|she|he|they)\s+do)\b", re.IGNORECASE), + re.compile(r"\b(is\s+(in\s+pain|hurting|suffering|getting\s+worse))\b", re.IGNORECASE), + re.compile(r"\b(says?\s+(she|he|they)\s+(can'?t|has|is|feels?))\b", re.IGNORECASE), +] + + +_POST_NEGATION_PATTERNS = [ + re.compile(r"\b(free|resolved|gone|cleared|negative|ruled\s+out|improving|controlled|stable)\b", re.IGNORECASE), +] + + +def _check_negation_in_window(text: str, match_start: int, window_size: int = NEGATION_WINDOW_SIZE, match_end: int = 0) -> bool: + """ + Check if there's a negation word within window_size words before the match, + OR a post-negation/resolution word immediately after the match. + + Args: + text: Full text to check + match_start: Character position where the safety keyword starts + window_size: Number of words to look back for negation + match_end: Character position where the safety keyword ends (for post-check) + + Returns: + True if negation found in window, False otherwise + """ + # Get text before the match + text_before = text[:match_start].lower() + + # Split into words and get the last N words + words_before = text_before.split() + window_words = words_before[-window_size:] if len(words_before) >= window_size else words_before + window_text = " ".join(window_words) + + # Check for negation patterns in the window BEFORE the keyword + for neg_pattern in NEGATION_PATTERNS: + if neg_pattern.search(window_text): + return True + + # Check for post-negation words AFTER the keyword (e.g., "seizure free") + if match_end > 0: + text_after = text[match_end:match_end + 30].lower().strip() + for post_pattern in _POST_NEGATION_PATTERNS: + if post_pattern.search(text_after): + return True + + return False + + +def _check_historical_context(text: str, match_start: int) -> bool: + """ + Check if the context suggests historical/third-party reference. + + Returns True (suppress escalation) ONLY if historical/proxy context is + found AND there are no active-urgency signals indicating the report is + about a current emergency. Proxy reports with acute symptoms (e.g., + "my mother is having chest pain") are treated as authoritative. + + Args: + text: Full text to check + match_start: Character position where the safety keyword starts + + Returns: + True if historical/third-party context found WITHOUT active urgency, + False otherwise (i.e., DO escalate) + """ + # Check the sentence or nearby text for historical patterns + # Get text around the match (100 chars before) + context_start = max(0, match_start - 100) + context_text = text[context_start:match_start].lower() + + has_historical = False + for pattern in HISTORICAL_PATTERNS: + if pattern.search(context_text): + has_historical = True + break + + if not has_historical: + return False + + # Historical/proxy pattern found — but check if there are active-urgency + # signals in the FULL text that indicate a current emergency. + # E.g., "my mother is having chest pain" should NOT be suppressed. + text_lower = text.lower() + for urgency_pattern in PROXY_ACTIVE_URGENCY_PATTERNS: + if urgency_pattern.search(text_lower): + logger.info( + "Historical/proxy context found but active-urgency signal " + "overrides suppression — treating as authoritative report" + ) + return False + + return True + + +def check_safety_keywords(text: str) -> Tuple[bool, Optional[str]]: + """ + Check text for critical safety keywords with negation awareness. + + This is a rule-based safety net that triggers escalation regardless of + model predictions. Critical for patient safety in clinical settings. + + Negation-aware: Will NOT trigger on phrases like: + - "I'm not suicidal" + - "I don't have chest pain" + - "My friend had a heart attack last year" + + Returns: + Tuple of (should_escalate, matched_pattern_description) + """ + text_lower = text.lower() + + for pattern, description, check_negation in SAFETY_ESCALATION_PATTERNS: + match = pattern.search(text_lower) + if match: + match_start = match.start() + + # Check for negation if required + if check_negation: + if _check_negation_in_window(text, match_start, match_end=match.end()): + # Negation found - don't escalate but log for review + logger.info(f"Safety keyword '{match.group()}' found but negated - not escalating") + continue + + # Check for historical/third-party context + if _check_historical_context(text, match_start): + logger.info(f"Safety keyword '{match.group()}' found in historical context - not escalating") + continue + + # No negation or historical context - escalate + return True, f"safety_keyword_match: '{match.group()}' ({description})" + + return False, None + + +def apply_decision_policy( + probabilities: np.ndarray, + argmax_label: str, + input_text: Optional[str] = None +) -> Tuple[str, bool, str]: + """ + Apply decision policy to determine final label and escalation status. + + Includes safety keyword fallback for critical patient safety. + + Returns: + Tuple of (final_label, should_escalate, decision_reason) + """ + # SAFETY FIRST: Check for critical keywords before model decision + if input_text: + keyword_escalate, keyword_reason = check_safety_keywords(input_text) + if keyword_escalate: + escalation_label = decision_policy.get("escalation_policy", {}).get("escalation_label", "ESCALATION") + return escalation_label, True, f"SAFETY_OVERRIDE: {keyword_reason}" + + escalation_config = decision_policy.get("escalation_policy", {}) + confidence_config = decision_policy.get("confidence_policy", {}) + + escalation_label = escalation_config.get("escalation_label", "ESCALATION") + escalation_threshold = escalation_config.get("escalation_threshold", 0.5) + min_confidence = confidence_config.get("min_confidence", 0.3) + fallback_label = confidence_config.get("fallback_label", "OTHER") + + # Get escalation probability + escalation_id = label2id.get(escalation_label, 0) + escalation_prob = float(probabilities[escalation_id]) + + # Get max probability (confidence) + max_prob = float(np.max(probabilities)) + + # Apply decision logic + # Rule 1: If escalation probability exceeds threshold, always escalate + if escalation_prob >= escalation_threshold: + return escalation_label, True, f"P({escalation_label})={escalation_prob:.3f} >= threshold={escalation_threshold}" + + # Rule 2: If confidence is too low, route to fallback + if max_prob < min_confidence: + return fallback_label, False, f"Low confidence ({max_prob:.3f} < {min_confidence}), routing to {fallback_label}" + + # Rule 3: Use argmax prediction + return argmax_label, False, f"Standard prediction with confidence={max_prob:.3f}" + + +def shutdown_cleanup() -> None: + """Clean up resources on shutdown.""" + global inference_executor + if inference_executor: + logger.info("Shutting down inference thread pool...") + inference_executor.shutdown(wait=True, cancel_futures=False) + logger.info("Inference thread pool shut down") + + +@asynccontextmanager +async def lifespan(app: FastAPI): + """Lifespan context manager for startup and shutdown events.""" + # Startup + try: + load_model() + logger.info("Service ready") + except Exception as e: + logger.error(f"Failed to load model: {e}") + raise + + yield # Application runs here + + # Shutdown + shutdown_cleanup() + logger.info("Service shutdown complete") + + +# Register lifespan with app +app.router.lifespan_context = lifespan + + +# Graceful shutdown signal handler +def handle_shutdown_signal(signum, frame): + """Handle shutdown signals gracefully.""" + logger.info(f"Received signal {signum}, initiating graceful shutdown...") + shutdown_cleanup() + sys.exit(0) + + +# Register signal handlers (Unix-like systems) +if hasattr(signal, 'SIGTERM'): + signal.signal(signal.SIGTERM, handle_shutdown_signal) +if hasattr(signal, 'SIGINT'): + signal.signal(signal.SIGINT, handle_shutdown_signal) + + +def run_inference_sync(input_ids: np.ndarray, attention_mask: np.ndarray, token_type_ids: Optional[np.ndarray]) -> np.ndarray: + """ + Run ONNX inference synchronously (called from thread pool). + + This function is CPU-bound and should be run in a thread pool + to avoid blocking the async event loop. + """ + ort_inputs = { + "input_ids": input_ids, + "attention_mask": attention_mask, + } + + # Add token_type_ids if model expects it + input_names = [inp.name for inp in session.get_inputs()] + if "token_type_ids" in input_names and token_type_ids is not None: + ort_inputs["token_type_ids"] = token_type_ids + + outputs = session.run(None, ort_inputs) + return outputs[0][0] # Return logits for first sample + + +async def run_inference_async(input_ids: np.ndarray, attention_mask: np.ndarray, token_type_ids: Optional[np.ndarray]) -> np.ndarray: + """ + Run ONNX inference asynchronously using thread pool with timeout. + + This prevents blocking the async event loop during CPU-bound inference. + Raises asyncio.TimeoutError if inference takes longer than INFERENCE_TIMEOUT_SECONDS. + """ + loop = asyncio.get_running_loop() + try: + return await asyncio.wait_for( + loop.run_in_executor( + inference_executor, + run_inference_sync, + input_ids, + attention_mask, + token_type_ids + ), + timeout=INFERENCE_TIMEOUT_SECONDS + ) + except asyncio.TimeoutError: + logger.error(f"Inference timed out after {INFERENCE_TIMEOUT_SECONDS}s") + raise + + +# Health check cache to prevent DoS via repeated inference +_health_check_cache: Dict[str, Any] = {"status": None, "timestamp": 0.0} +_health_check_cache_lock = threading.Lock() +HEALTH_CHECK_CACHE_TTL = 5.0 # Cache health status for 5 seconds + + +@app.get("/health", response_model=HealthResponse) +@limiter.limit("30/minute") +async def health_check(request: Request): + """Health check endpoint (no auth required for load balancer probes).""" + current_time = time.time() + + # Return cached result if within TTL to prevent DoS via repeated inference + with _health_check_cache_lock: + if ( + _health_check_cache["status"] is not None + and current_time - _health_check_cache["timestamp"] < HEALTH_CHECK_CACHE_TTL + ): + cached = _health_check_cache["status"] + return HealthResponse( + status=cached["status"], + model_loaded=cached["model_loaded"], + policy_loaded=cached["policy_loaded"], + decision_engine_loaded=cached.get("decision_engine_loaded", False), + timestamp=datetime.now(timezone.utc).isoformat(), + ) + + model_healthy = False + if session is not None and tokenizer is not None: + try: + # Quick validation that model can run inference + test_inputs = tokenizer("test", return_tensors="np", max_length=8, truncation=True, padding="max_length") + input_dict = {"input_ids": test_inputs["input_ids"], "attention_mask": test_inputs["attention_mask"]} + input_names = [inp.name for inp in session.get_inputs()] + if "token_type_ids" in input_names: + input_dict["token_type_ids"] = np.zeros_like(test_inputs["input_ids"]) + session.run(None, input_dict) + model_healthy = True + except Exception: + model_healthy = False + + engine_loaded = DECISION_ENGINE_AVAILABLE and domain_nominator is not None + + # Cache the result (thread-safe) + with _health_check_cache_lock: + _health_check_cache["status"] = { + "status": "healthy" if model_healthy else "unhealthy", + "model_loaded": model_healthy, + "policy_loaded": bool(decision_policy), + "decision_engine_loaded": engine_loaded, + } + _health_check_cache["timestamp"] = current_time + + return HealthResponse( + status="healthy" if model_healthy else "unhealthy", + model_loaded=model_healthy, + policy_loaded=bool(decision_policy), + decision_engine_loaded=engine_loaded, + timestamp=datetime.now(timezone.utc).isoformat(), + ) + + +@app.post("/predict", response_model=PredictResponse) +@limiter.limit(RATE_LIMIT) +async def predict( + request: Request, + predict_request: PredictRequest, + api_key: str = Depends(verify_api_key), +): + """ + Classify medical intent from input text. + + Applies decision policy for escalation thresholding. + Requires API key authentication. + + Uses async inference to prevent blocking the event loop under load. + """ + if session is None or tokenizer is None: + raise HTTPException(status_code=503, detail="Model not loaded") + + # Validate combined length + try: + predict_request.validate_combined_length() + except ValueError as e: + raise HTTPException(status_code=400, detail=str(e)) + + total_start = time.perf_counter() + + # Prepare input text — run temporal preprocessor first + text = predict_request.text + temporal_signal = None + if TEMPORAL_PREPROCESSOR_AVAILABLE: + temporal_signal = preprocess_temporal(text, predict_request.context) + text = temporal_signal.processed_text + + # Tokenize (fast enough to run synchronously) + # When context is provided, use BERT's native text_pair so that: + # 1. Text (current utterance) is Segment A — always fully preserved + # 2. Context is Segment B — truncated first if combined length exceeds max_length + # truncation="only_second" ensures the patient's current text is NEVER truncated + tokenize_start = time.perf_counter() + if predict_request.context: + inputs = tokenizer( + text, + text_pair=predict_request.context, + padding="max_length", + truncation="only_second", + max_length=MAX_LENGTH, + return_tensors="np" + ) + else: + inputs = tokenizer( + text, + padding="max_length", + truncation=True, + max_length=MAX_LENGTH, + return_tensors="np" + ) + tokenize_time = (time.perf_counter() - tokenize_start) * 1000 + + # Prepare ONNX inputs + input_ids = inputs["input_ids"].astype(np.int64) + attention_mask = inputs["attention_mask"].astype(np.int64) + + # Prepare token_type_ids if needed + token_type_ids = None + input_names = [inp.name for inp in session.get_inputs()] + if "token_type_ids" in input_names: + if "token_type_ids" in inputs: + token_type_ids = inputs["token_type_ids"].astype(np.int64) + else: + token_type_ids = np.zeros_like(input_ids, dtype=np.int64) + + # Run inference asynchronously (prevents blocking event loop) + inference_start = time.perf_counter() + logits = await run_inference_async(input_ids, attention_mask, token_type_ids) + inference_time = (time.perf_counter() - inference_start) * 1000 + + # Postprocess + postprocess_start = time.perf_counter() + probabilities = softmax(logits) + + # Get argmax prediction + argmax_id = int(np.argmax(probabilities)) + argmax_label = id2label.get(argmax_id, "UNKNOWN") + + # Apply decision policy (includes safety keyword fallback) + # Use original text (not context-concatenated) for safety keyword checks + # to avoid false escalation from keywords in historical context + final_label, should_escalate, decision_reason = apply_decision_policy( + probabilities, argmax_label, input_text=predict_request.text + ) + + # Temporal preprocessor override: if preprocessor detected active emergency + # but model/policy didn't escalate, force escalation (safety net) + if temporal_signal and temporal_signal.is_active_emergency and not should_escalate: + escalation_label_name = decision_policy.get("escalation_policy", {}).get("escalation_label", "ESCALATION") + final_label = escalation_label_name + should_escalate = True + decision_reason = f"TEMPORAL_OVERRIDE: {temporal_signal.reason}" + + # Build probability dict + prob_dict = { + id2label.get(i, f"LABEL_{i}"): float(p) + for i, p in enumerate(probabilities) + } + + # Get escalation probability + escalation_label = decision_policy.get("escalation_policy", {}).get("escalation_label", "ESCALATION") + escalation_prob = prob_dict.get(escalation_label, 0.0) + + postprocess_time = (time.perf_counter() - postprocess_start) * 1000 + total_time = (time.perf_counter() - total_start) * 1000 + + # Record metrics + if ENABLE_METRICS: + metrics.record_request( + success=True, + inference_ms=inference_time, + tokenize_ms=tokenize_time, + escalated=should_escalate + ) + + # Taxonomy scoring (deterministic) + tax_scores: Dict[str, float] = {} + matched_tax: List[TaxonomyMatchDetail] = [] + top_tax_domain: Optional[str] = None + if TAXONOMY_SCORER_AVAILABLE and trigger_engine and decision_config: + try: + tax_result = score_taxonomy(predict_request.text, trigger_engine, decision_config) + tax_scores = tax_result.scores + top_tax_domain = tax_result.top_domain + matched_tax = [ + TaxonomyMatchDetail( + domain=d.domain, + score=round(d.score, 4), + confidence_tier=d.confidence_tier, + priority=d.priority, + is_negated=d.is_negated, + target_risk_class=d.target_risk_class, + recommended_flow=d.recommended_flow, + trigger_count=d.trigger_count, + matched_phrases=d.matched_phrases, + ) + for d in tax_result.matched_domains + ] + + # SAFETY NET: If any matched taxonomy domain is a hard-escalate + # R3 domain (not negated), force escalation even when ML disagrees. + # For temporally resolved cases: still escalate but note follow-up + # (past R3 symptoms warrant clinical assessment, not suppression). + is_temporally_resolved = ( + temporal_signal + and temporal_signal.temporal_tag == "resolved" + ) + if decision_config: + hard_esc_domains = decision_config.hard_escalate_domains + for d in tax_result.matched_domains: + if d.domain in hard_esc_domains and not d.is_negated and d.score > 0: + if not should_escalate: + escalation_label_name = decision_policy.get( + "escalation_policy", {} + ).get("escalation_label", "ESCALATION") + final_label = escalation_label_name + should_escalate = True + if is_temporally_resolved: + decision_reason = ( + f"TAXONOMY_FOLLOW_UP: {d.domain} " + f"(resolved but R3 domain warrants clinical follow-up)" + ) + else: + decision_reason = ( + f"TAXONOMY_ESCALATION: {d.domain} " + f"(target_risk={d.target_risk_class}, " + f"confidence={d.confidence_tier})" + ) + logger.warning( + "Taxonomy safety override on /predict: " + "domain=%s risk=%s ML_label=%s temporal=%s", + d.domain, d.target_risk_class, argmax_label, + "resolved" if is_temporally_resolved else "active", + ) + break + except Exception as e: + logger.warning("Taxonomy scoring failed: %s", e) + + return PredictResponse( + predicted_label=final_label, + probabilities=prob_dict, + taxonomy_scores=tax_scores, + matched_taxonomy=matched_tax, + top_taxonomy_domain=top_tax_domain, + should_escalate=should_escalate, + escalation_probability=escalation_prob, + confidence=float(np.max(probabilities)), + decision_reason=decision_reason, + timing=TimingInfo( + tokenize_ms=round(tokenize_time, 3), + inference_ms=round(inference_time, 3), + postprocess_ms=round(postprocess_time, 3), + total_ms=round(total_time, 3), + ), + ) + + +@app.post("/predict/clinical", response_model=ClinicalAssessmentResponse, tags=["Clinical"]) +@limiter.limit(RATE_LIMIT) +async def predict_clinical( + request: Request, + predict_request: PredictRequest, + api_key: str = Depends(verify_api_key), +): + """ + Clinical risk assessment endpoint. + + Combines DriveHealthBERT ML classification with taxonomy-based domain nomination + and 4-tier risk classification (R0/R1/R2/R3). + + Returns the full clinical assessment including: + - ML predicted label and probabilities + - Primary clinical domain (e.g., chest_pain, suicidal_ideation) + - Risk class: R0 (no concern) → R3 (call 911) + - Domain nominations ranked by acuity + - Recommended conversation flow + - Safety override and hard-escalate flags + """ + if session is None or tokenizer is None: + raise HTTPException(status_code=503, detail="Model not loaded") + if not DECISION_ENGINE_AVAILABLE or domain_nominator is None: + raise HTTPException( + status_code=503, + detail="Decision engine not loaded. Ensure decision/ config directory exists.", + ) + + try: + predict_request.validate_combined_length() + except ValueError as e: + raise HTTPException(status_code=400, detail=str(e)) + + total_start = time.perf_counter() + + # Prepare input text — run temporal preprocessor first + text = predict_request.text + temporal_signal = None + if TEMPORAL_PREPROCESSOR_AVAILABLE: + temporal_signal = preprocess_temporal(text, predict_request.context) + text = temporal_signal.processed_text + + # Tokenize: text as Segment A (never truncated), context as Segment B (truncated first) + tokenize_start = time.perf_counter() + if predict_request.context: + inputs = tokenizer( + text, + text_pair=predict_request.context, + padding="max_length", + truncation="only_second", + max_length=MAX_LENGTH, + return_tensors="np", + ) + else: + inputs = tokenizer( + text, + padding="max_length", + truncation=True, + max_length=MAX_LENGTH, + return_tensors="np", + ) + tokenize_time = (time.perf_counter() - tokenize_start) * 1000 + + # Prepare ONNX inputs + input_ids = inputs["input_ids"].astype(np.int64) + attention_mask = inputs["attention_mask"].astype(np.int64) + token_type_ids = None + input_names = [inp.name for inp in session.get_inputs()] + if "token_type_ids" in input_names: + if "token_type_ids" in inputs: + token_type_ids = inputs["token_type_ids"].astype(np.int64) + else: + token_type_ids = np.zeros_like(input_ids, dtype=np.int64) + + # Run ML inference + inference_start = time.perf_counter() + logits = await run_inference_async(input_ids, attention_mask, token_type_ids) + inference_time = (time.perf_counter() - inference_start) * 1000 + + # Postprocess ML output + postprocess_start = time.perf_counter() + probabilities = softmax(logits) + argmax_id = int(np.argmax(probabilities)) + argmax_label = id2label.get(argmax_id, "UNKNOWN") + ml_confidence = float(np.max(probabilities)) + + prob_dict = { + id2label.get(i, f"LABEL_{i}"): float(p) + for i, p in enumerate(probabilities) + } + + escalation_label = decision_policy.get("escalation_policy", {}).get( + "escalation_label", "ESCALATION" + ) + escalation_prob = prob_dict.get(escalation_label, 0.0) + + # Run Decision Engine — use ORIGINAL text (not context-concatenated) + nominations = domain_nominator.nominate( + text=predict_request.text, + ml_label=argmax_label, + ml_probabilities=prob_dict, + ) + assessment = risk_classifier.assess( + nominations=nominations, + slot_values={}, # Phase 2: filled by flow engine + patient_context=None, # Phase 3: filled by FHIR loader + ml_label=argmax_label, + ml_confidence=ml_confidence, + ) + + # Determine final label and escalation (merging ML + decision engine) + if assessment.risk_class >= RiskClass.R2: + should_escalate = True + final_label = escalation_label + if assessment.hard_escalate: + decision_reason = f"HARD_ESCALATE: {assessment.primary_domain} → {assessment.risk_class.value}" + elif assessment.safety_override: + decision_reason = f"SAFETY_OVERRIDE: {assessment.primary_domain} → {assessment.risk_class.value}" + else: + decision_reason = ( + f"CLINICAL_RISK: {assessment.primary_domain} → " + f"{assessment.risk_class.value} (ML={argmax_label} {ml_confidence:.3f})" + ) + else: + # Use legacy decision policy for non-escalation + final_label, should_escalate, decision_reason = apply_decision_policy( + probabilities, argmax_label, input_text=predict_request.text + ) + # Belt + suspenders: if legacy policy escalated but engine says R0/R1, + # upgrade risk_class to R2 minimum. Never suppress an escalation. + if should_escalate and assessment.risk_class < RiskClass.R2: + assessment = RiskAssessment( + risk_class=RiskClass.R2, + primary_domain=assessment.primary_domain, + domain_nominations=assessment.domain_nominations, + matched_rules=assessment.matched_rules, + suppressions=assessment.suppressions, + hard_escalate=assessment.hard_escalate, + safety_override=True, + ml_label=assessment.ml_label, + ml_confidence=assessment.ml_confidence, + recommended_flow="handoff", + recommended_action=assessment.recommended_action, + ) + + # Temporal preprocessor override for /predict/clinical + if temporal_signal and temporal_signal.is_active_emergency and not should_escalate: + should_escalate = True + final_label = escalation_label + decision_reason = f"TEMPORAL_OVERRIDE: {temporal_signal.reason}" + if assessment.risk_class < RiskClass.R2: + assessment = RiskAssessment( + risk_class=RiskClass.R2, + primary_domain=assessment.primary_domain, + domain_nominations=assessment.domain_nominations, + matched_rules=assessment.matched_rules, + suppressions=assessment.suppressions, + hard_escalate=assessment.hard_escalate, + safety_override=True, + ml_label=assessment.ml_label, + ml_confidence=assessment.ml_confidence, + recommended_flow="handoff", + recommended_action=assessment.recommended_action, + ) + + # CONTRASTIVE REVERSAL OVERRIDE: When temporal preprocessor detects a + # BUT-clause reversal (e.g., "chest pain went away but it's back"), the + # domain nomination may have negated the R3 domain (e.g., "chest pain went + # away" matches negation patterns). Override negation for R3 domains when + # temporal analysis confirms the condition is currently active. + if ( + temporal_signal + and temporal_signal.is_active_emergency + and any( + r.startswith("but_clause_reversal") or r == "contrastive_post_active" + for r in temporal_signal.matched_rules + ) + and assessment.risk_class < RiskClass.R3 + ): + # Check if any R3 domain was nominated but negated + override_domain = None + if decision_config: + hard_esc_domains = decision_config.hard_escalate_domains + for nom in nominations: + if nom.domain in hard_esc_domains and nom.is_negated: + override_domain = nom.domain + break + if override_domain: + should_escalate = True + final_label = escalation_label + decision_reason = ( + f"CONTRASTIVE_OVERRIDE: {override_domain} was negated but " + f"BUT-clause reversal confirms active condition — R3" + ) + assessment = RiskAssessment( + risk_class=RiskClass.R3, + primary_domain=override_domain, + domain_nominations=assessment.domain_nominations, + matched_rules=assessment.matched_rules, + suppressions=assessment.suppressions, + hard_escalate=True, + safety_override=True, + ml_label=assessment.ml_label, + ml_confidence=assessment.ml_confidence, + recommended_flow="escalate_r3", + recommended_action=None, + ) + logger.warning( + "Contrastive reversal override: %s negation overridden, " + "temporal confirms active — R3", + override_domain, + ) + + # Temporal DE-ESCALATION: If the temporal preprocessor detected a clearly + # resolved / past condition AND the escalation came from taxonomy hard-escalate, + # downgrade from R3 to R2 (clinical follow-up), NOT to R1. + # + # SAFETY RATIONALE: Even resolved R3 symptoms warrant clinical follow-up. + # "I had chest pain yesterday but I'm fine" is STILL a cardiac red flag. + # R2 = warm transfer to nurse for clinical assessment. R1 would suppress. + # Proxy reports are treated as authoritative — caregivers speak for patients. + if ( + temporal_signal + and temporal_signal.temporal_tag == "resolved" + and should_escalate + and assessment.hard_escalate + ): + # Downgrade to R2 (clinical follow-up), keep should_escalate=True + decision_reason = ( + f"TEMPORAL_FOLLOW_UP: {assessment.primary_domain} detected, " + f"condition appears resolved ({temporal_signal.reason}) " + f"— downgraded to R2 clinical follow-up" + ) + assessment = RiskAssessment( + risk_class=RiskClass.R2, + primary_domain=assessment.primary_domain, + domain_nominations=assessment.domain_nominations, + matched_rules=assessment.matched_rules, + suppressions=assessment.suppressions, + hard_escalate=False, + safety_override=True, + ml_label=assessment.ml_label, + ml_confidence=assessment.ml_confidence, + recommended_flow="clinical_follow_up", + recommended_action="Warm transfer to nurse — past R3 symptom warrants clinical assessment", + ) + logger.info( + "Temporal de-escalation: %s resolved, downgrading from R3 to R2 (clinical follow-up)", + assessment.primary_domain, + ) + + # Build risk description + risk_descriptions = { + "R0": "No clinical concern identified", + "R1": "Low-level concern, routine follow-up", + "R2": "Moderate concern, warm transfer to nurse", + "R3": "Emergent — instruct patient to call 911 and transfer to nurse", + } + + # Build domain nomination responses + nom_responses = [ + DomainNominationResponse( + domain=n.domain, + confidence_tier=n.confidence_tier.value, + priority=n.priority, + target_risk_class=n.target_risk_class.value if n.target_risk_class else None, + is_negated=n.is_negated, + recommended_flow=n.recommended_flow, + trigger_match_count=len(n.trigger_matches), + ) + for n in nominations[:10] # Cap at 10 for response size + ] + + postprocess_time = (time.perf_counter() - postprocess_start) * 1000 + total_time = (time.perf_counter() - total_start) * 1000 + + if ENABLE_METRICS: + metrics.record_request( + success=True, + inference_ms=inference_time, + tokenize_ms=tokenize_time, + escalated=should_escalate, + ) + + # Audit log for clinical assessments + if assessment.risk_class >= RiskClass.R2: + audit_logger.warning( + "CLINICAL_ESCALATION: risk=%s domain=%s hard_escalate=%s safety_override=%s", + assessment.risk_class.value, + assessment.primary_domain, + assessment.hard_escalate, + assessment.safety_override, + ) + + # Taxonomy scoring (deterministic) + tax_scores: Dict[str, float] = {} + matched_tax: List[TaxonomyMatchDetail] = [] + top_tax_domain: Optional[str] = None + if TAXONOMY_SCORER_AVAILABLE and trigger_engine and decision_config: + try: + tax_result = score_taxonomy(predict_request.text, trigger_engine, decision_config) + tax_scores = tax_result.scores + top_tax_domain = tax_result.top_domain + matched_tax = [ + TaxonomyMatchDetail( + domain=d.domain, + score=round(d.score, 4), + confidence_tier=d.confidence_tier, + priority=d.priority, + is_negated=d.is_negated, + target_risk_class=d.target_risk_class, + recommended_flow=d.recommended_flow, + trigger_count=d.trigger_count, + matched_phrases=d.matched_phrases, + ) + for d in tax_result.matched_domains + ] + except Exception as e: + logger.warning("Taxonomy scoring failed in /predict/clinical: %s", e) + + return ClinicalAssessmentResponse( + predicted_label=final_label, + probabilities=prob_dict, + ml_confidence=ml_confidence, + risk_class=assessment.risk_class.value, + risk_description=risk_descriptions.get( + assessment.risk_class.value, "Unknown" + ), + primary_domain=assessment.primary_domain, + requires_911=assessment.requires_911, + requires_nurse_transfer=assessment.requires_nurse_transfer, + hard_escalate=assessment.hard_escalate, + safety_override=assessment.safety_override, + domain_nominations=nom_responses, + taxonomy_scores=tax_scores, + matched_taxonomy=matched_tax, + top_taxonomy_domain=top_tax_domain, + recommended_flow=assessment.recommended_flow, + recommended_action=( + assessment.recommended_action.value + if assessment.recommended_action and hasattr(assessment.recommended_action, 'value') + else assessment.recommended_action + ), + should_escalate=should_escalate, + escalation_probability=escalation_prob, + decision_reason=decision_reason, + timing=TimingInfo( + tokenize_ms=round(tokenize_time, 3), + inference_ms=round(inference_time, 3), + postprocess_ms=round(postprocess_time, 3), + total_ms=round(total_time, 3), + ), + ) + + +# ============================================================================= +# PHASE 2: CONVERSATION FLOW ENDPOINTS +# ============================================================================= + +class ConversationStartRequest(BaseModel): + """Request to start a new conversation session.""" + session_id: str = Field(..., min_length=1, max_length=128, description="Unique session identifier") + patient_id: Optional[str] = Field(None, description="Patient identifier") + tenant_id: Optional[str] = Field(None, description="Tenant identifier") + + +class ConversationTurnRequest(BaseModel): + """Request to process a conversational turn.""" + session_id: str = Field(..., min_length=1, max_length=128) + text: str = Field(..., min_length=1, max_length=MAX_INPUT_CHARS, description="Patient utterance") + extracted_slots: Optional[Dict[str, Any]] = Field(None, description="Slots extracted by NLU") + + @field_validator("text", mode="before") + @classmethod + def sanitize_text(cls, v: Optional[str]) -> Optional[str]: + if v is None: + return None + v = bleach.clean(v, tags=[], strip=True) + v = " ".join(v.split()) + v = v.replace("\x00", "").replace("\r", "") + return v + + +class ResponseSpecResponse(BaseModel): + """LLM response constraints for a flow step.""" + id: str = "" + goal: str = "" + tone: str = "professional" + must_include: List[str] = Field(default_factory=list) + must_ask: List[str] = Field(default_factory=list) + must_not: List[str] = Field(default_factory=list) + max_questions: int = 0 + + +class ConversationTurnResponse(BaseModel): + """Response from a conversation turn.""" + outcome: str = Field(..., description="proceed / clarify / escalate / handoff / end") + flow_id: Optional[str] = None + flow_type: Optional[str] = None + step_number: int = 0 + step_type: Optional[str] = None + response_spec: Optional[ResponseSpecResponse] = None + prompt_constraints: Optional[str] = Field(None, description="Ready-to-use LLM prompt constraints") + collects: List[str] = Field(default_factory=list) + handoff_target: Optional[str] = None + handoff_urgency: Optional[str] = None + risk_class: Optional[str] = None + domain: Optional[str] = None + message: str = "" + requires_reassessment: bool = False + # Clinical assessment included when available + clinical_assessment: Optional[Dict[str, Any]] = None + timing: Optional[TimingInfo] = None + + +@app.post("/conversation/start", response_model=ConversationTurnResponse, tags=["Conversation"]) +@limiter.limit(RATE_LIMIT) +async def conversation_start( + request: Request, + start_request: ConversationStartRequest, + api_key: str = Depends(verify_api_key), +): + """ + Start a new conversation session. + + Creates a session and returns the first flow step (greeting). + The response_spec contains LLM constraints for generating Avery's response. + """ + if not DECISION_ENGINE_AVAILABLE or flow_engine is None: + raise HTTPException(status_code=503, detail="Flow engine not loaded") + + total_start = time.perf_counter() + + session_state = flow_engine.create_session( + session_id=start_request.session_id, + patient_id=start_request.patient_id, + tenant_id=start_request.tenant_id, + ) + result = flow_engine.start_call(session_state) + + total_time = (time.perf_counter() - total_start) * 1000 + + return _turn_result_to_response(result, total_time) + + +@app.post("/conversation/turn", response_model=ConversationTurnResponse, tags=["Conversation"]) +@limiter.limit(RATE_LIMIT) +async def conversation_turn( + request: Request, + turn_request: ConversationTurnRequest, + api_key: str = Depends(verify_api_key), +): + """ + Process a patient turn in an active conversation. + + Runs ML inference + taxonomy triggers + risk assessment, then advances + the conversation flow. Returns the next response_spec for LLM generation. + + Safety behavior: + - R3 emergencies interrupt any active flow immediately + - Hard-escalate domains (suicidal_ideation, homicidal_ideation) always escalate + - Response specs enforce must_not constraints (e.g., never say "heart attack") + """ + if session is None or tokenizer is None: + raise HTTPException(status_code=503, detail="Model not loaded") + if not DECISION_ENGINE_AVAILABLE or flow_engine is None: + raise HTTPException(status_code=503, detail="Flow engine not loaded") + + session_state = flow_engine.get_session(turn_request.session_id) + if session_state is None: + raise HTTPException(status_code=404, detail=f"Session '{turn_request.session_id}' not found") + + total_start = time.perf_counter() + + # Temporal preprocessor + safety keyword check (safety net for /conversation/turn) + temporal_signal = None + text_for_model = turn_request.text + if TEMPORAL_PREPROCESSOR_AVAILABLE: + temporal_signal = preprocess_temporal(turn_request.text) + text_for_model = temporal_signal.processed_text + + # Step 1: ML inference on patient text + tokenize_start = time.perf_counter() + inputs = tokenizer( + text_for_model, + padding="max_length", + truncation=True, + max_length=MAX_LENGTH, + return_tensors="np", + ) + tokenize_time = (time.perf_counter() - tokenize_start) * 1000 + + input_ids = inputs["input_ids"].astype(np.int64) + attention_mask = inputs["attention_mask"].astype(np.int64) + token_type_ids = None + input_names_list = [inp.name for inp in session.get_inputs()] + if "token_type_ids" in input_names_list: + if "token_type_ids" in inputs: + token_type_ids = inputs["token_type_ids"].astype(np.int64) + else: + token_type_ids = np.zeros_like(input_ids, dtype=np.int64) + + inference_start = time.perf_counter() + logits = await run_inference_async(input_ids, attention_mask, token_type_ids) + inference_time = (time.perf_counter() - inference_start) * 1000 + + probabilities = softmax(logits) + argmax_id = int(np.argmax(probabilities)) + argmax_label = id2label.get(argmax_id, "UNKNOWN") + ml_confidence = float(np.max(probabilities)) + + prob_dict = { + id2label.get(i, f"LABEL_{i}"): float(p) + for i, p in enumerate(probabilities) + } + + # Step 2: Domain nomination + risk assessment + postprocess_start = time.perf_counter() + nominations = domain_nominator.nominate( + text=turn_request.text, + ml_label=argmax_label, + ml_probabilities=prob_dict, + ) + assessment = risk_classifier.assess( + nominations=nominations, + slot_values=dict(session_state.slots.slots), + patient_context=None, + ml_label=argmax_label, + ml_confidence=ml_confidence, + ) + + # Safety keyword check (was missing from /conversation/turn — CRIT-13 fix) + keyword_escalate, keyword_reason = check_safety_keywords(turn_request.text) + if keyword_escalate and assessment.risk_class < RiskClass.R2: + assessment = RiskAssessment( + risk_class=RiskClass.R2, + primary_domain=assessment.primary_domain, + domain_nominations=assessment.domain_nominations, + matched_rules=assessment.matched_rules, + suppressions=assessment.suppressions, + hard_escalate=assessment.hard_escalate, + safety_override=True, + ml_label=assessment.ml_label, + ml_confidence=assessment.ml_confidence, + recommended_flow="handoff", + recommended_action=assessment.recommended_action, + ) + + # Temporal preprocessor override + if temporal_signal and temporal_signal.is_active_emergency and assessment.risk_class < RiskClass.R2: + assessment = RiskAssessment( + risk_class=RiskClass.R2, + primary_domain=assessment.primary_domain, + domain_nominations=assessment.domain_nominations, + matched_rules=assessment.matched_rules, + suppressions=assessment.suppressions, + hard_escalate=assessment.hard_escalate, + safety_override=True, + ml_label=assessment.ml_label, + ml_confidence=assessment.ml_confidence, + recommended_flow="handoff", + recommended_action=assessment.recommended_action, + ) + + # CONTRASTIVE REVERSAL OVERRIDE (mirrors /predict/clinical logic): + # When temporal BUT-clause reversal confirms active condition, override + # domain negation for R3 domains and force R3 escalation. + if ( + temporal_signal + and temporal_signal.is_active_emergency + and any( + r.startswith("but_clause_reversal") or r == "contrastive_post_active" + for r in temporal_signal.matched_rules + ) + and assessment.risk_class < RiskClass.R3 + ): + override_domain = None + if decision_config: + hard_esc_domains = decision_config.hard_escalate_domains + for nom in nominations: + if nom.domain in hard_esc_domains and nom.is_negated: + override_domain = nom.domain + break + if override_domain: + assessment = RiskAssessment( + risk_class=RiskClass.R3, + primary_domain=override_domain, + domain_nominations=assessment.domain_nominations, + matched_rules=assessment.matched_rules, + suppressions=assessment.suppressions, + hard_escalate=True, + safety_override=True, + ml_label=assessment.ml_label, + ml_confidence=assessment.ml_confidence, + recommended_flow="escalate_r3", + recommended_action=None, + ) + logger.warning( + "Contrastive reversal override (/conversation/turn): " + "%s negation overridden, temporal confirms active — R3", + override_domain, + ) + + # Step 3: Process turn through flow engine + result = flow_engine.process_turn( + session=session_state, + patient_text=turn_request.text, + assessment=assessment, + extracted_slots=turn_request.extracted_slots, + ) + + postprocess_time = (time.perf_counter() - postprocess_start) * 1000 + total_time = (time.perf_counter() - total_start) * 1000 + + if ENABLE_METRICS: + metrics.record_request( + success=True, + inference_ms=inference_time, + tokenize_ms=tokenize_time, + escalated=result.is_escalation, + ) + + if result.is_escalation: + audit_logger.warning( + "CONVERSATION_ESCALATION: session=%s domain=%s risk=%s", + turn_request.session_id, + result.domain, + result.risk_class.value if result.risk_class else "unknown", + ) + + response = _turn_result_to_response( + result, total_time, tokenize_time, inference_time, postprocess_time + ) + response.clinical_assessment = assessment.to_dict() + return response + + +@app.post("/conversation/end", tags=["Conversation"]) +@limiter.limit(RATE_LIMIT) +async def conversation_end( + request: Request, + session_id: str = Query(..., min_length=1), + api_key: str = Depends(verify_api_key), +): + """End and clean up a conversation session.""" + if flow_engine is None: + raise HTTPException(status_code=503, detail="Flow engine not loaded") + flow_engine.destroy_session(session_id) + return {"status": "ended", "session_id": session_id} + + +def _turn_result_to_response( + result, + total_ms: float, + tokenize_ms: float = 0.0, + inference_ms: float = 0.0, + postprocess_ms: float = 0.0, +) -> ConversationTurnResponse: + """Convert a TurnResult to a ConversationTurnResponse.""" + spec_response = None + if result.response_spec: + spec_response = ResponseSpecResponse( + id=result.response_spec.spec_id, + goal=result.response_spec.goal, + tone=result.response_spec.tone, + must_include=result.response_spec.must_include, + must_ask=result.response_spec.must_ask, + must_not=result.response_spec.must_not, + max_questions=result.response_spec.max_questions, + ) + + return ConversationTurnResponse( + outcome=result.outcome.value, + flow_id=result.flow_id, + flow_type=result.flow_type, + step_number=result.step_number, + step_type=result.step_type, + response_spec=spec_response, + prompt_constraints=result.prompt_constraints, + collects=result.collects, + handoff_target=result.handoff_target, + handoff_urgency=result.handoff_urgency, + risk_class=result.risk_class.value if result.risk_class else None, + domain=result.domain, + message=result.message, + requires_reassessment=result.requires_reassessment, + timing=TimingInfo( + tokenize_ms=round(tokenize_ms, 3), + inference_ms=round(inference_ms, 3), + postprocess_ms=round(postprocess_ms, 3), + total_ms=round(total_ms, 3), + ), + ) + + +class MultiIntentResponse(BaseModel): + """Response for multi-intent detection.""" + detected_intents: List[dict] = Field(..., description="List of detected intents with probabilities") + primary_intent: str = Field(..., description="Highest probability intent") + should_escalate: bool = Field(..., description="Whether escalation is needed") + taxonomy_scores: Dict[str, float] = Field(default_factory=dict, description="Deterministic match scores for all taxonomy domains") + matched_taxonomy: List[TaxonomyMatchDetail] = Field(default_factory=list, description="Taxonomy domains that matched with details") + top_taxonomy_domain: Optional[str] = Field(None, description="Highest-scoring taxonomy domain") + timing: TimingInfo + + +def split_sentences(text: str) -> List[str]: + """ + Split text into sentences for multi-intent detection. + + Handles: + - Standard punctuation (. ! ?) + - Conjunctions (and, but, also, plus) + - Semicolons and commas with conjunctions + - "I also need", "I also want" patterns + + Args: + text: Input text to split + + Returns: + List of sentence fragments for individual classification + """ + # First, split on standard sentence terminators + parts = re.split(r'[.!?;]', text) + + # Further split on conjunctions that indicate separate intents + expanded_parts = [] + conjunction_pattern = re.compile( + r'\s+(?:but|and also|also|plus|additionally|as well as)\s+', + re.IGNORECASE + ) + # Pattern for "and I" which often indicates a new intent + and_i_pattern = re.compile(r'\s+and\s+(?=I\s)', re.IGNORECASE) + # Pattern for comma followed by "I need/want/have" + comma_i_pattern = re.compile(r',\s*(?=I\s+(?:need|want|have|also))', re.IGNORECASE) + + for part in parts: + # Split on conjunctions + sub_parts = conjunction_pattern.split(part) + for sub in sub_parts: + # Split on "and I" + sub_sub = and_i_pattern.split(sub) + for s in sub_sub: + # Split on ", I need/want" + final_parts = comma_i_pattern.split(s) + expanded_parts.extend(final_parts) + + # Clean and filter - minimum 5 chars to catch short phrases + cleaned = [p.strip() for p in expanded_parts if p and len(p.strip()) >= 5] + return cleaned if cleaned else [text] + + +@app.post("/predict/multi", response_model=MultiIntentResponse) +@limiter.limit(RATE_LIMIT) +async def predict_multi_intent( + request: Request, + predict_request: PredictRequest, + threshold: float = Query(default=0.5, ge=0.0, le=1.0, description="Minimum probability threshold (0.0-1.0)"), + api_key: str = Depends(verify_api_key), +): + """ + Detect multiple intents by splitting compound sentences. + + Splits text on periods, 'but', 'and' conjunctions, then classifies each part. + Returns unique intents detected across all parts. + + Args: + threshold: Minimum probability to include an intent (default 0.5 = 50%, range 0.0-1.0) + """ + # Validate threshold bounds + if not 0.0 <= threshold <= 1.0: + raise HTTPException(status_code=400, detail="threshold must be between 0.0 and 1.0") + + if session is None or tokenizer is None: + raise HTTPException(status_code=503, detail="Model not loaded") + + total_start = time.perf_counter() + + text = predict_request.text + context = predict_request.context + + # Temporal preprocessor + temporal_signal = None + if TEMPORAL_PREPROCESSOR_AVAILABLE: + temporal_signal = preprocess_temporal(text, context) + text = temporal_signal.processed_text + + # SAFETY FIRST: Check for critical keywords in original text only + # (not context-concatenated text, to avoid false escalation from historical context) + escalation_label = decision_policy.get("escalation_policy", {}).get("escalation_label", "ESCALATION") + escalation_threshold = decision_policy.get("escalation_policy", {}).get("escalation_threshold", 0.5) + + keyword_escalate, keyword_reason = check_safety_keywords(predict_request.text) + if keyword_escalate: + # Immediate escalation - don't even bother with full analysis + total_time = (time.perf_counter() - total_start) * 1000 + # Taxonomy scoring even on safety override + tax_scores_multi: Dict[str, float] = {} + matched_tax_multi: List[TaxonomyMatchDetail] = [] + top_tax_multi: Optional[str] = None + if TAXONOMY_SCORER_AVAILABLE and trigger_engine and decision_config: + try: + tax_r = score_taxonomy(predict_request.text, trigger_engine, decision_config) + tax_scores_multi = tax_r.scores + top_tax_multi = tax_r.top_domain + matched_tax_multi = [ + TaxonomyMatchDetail(domain=d.domain, score=round(d.score, 4), confidence_tier=d.confidence_tier, + priority=d.priority, is_negated=d.is_negated, target_risk_class=d.target_risk_class, + recommended_flow=d.recommended_flow, trigger_count=d.trigger_count, matched_phrases=d.matched_phrases) + for d in tax_r.matched_domains + ] + except Exception: + pass + return MultiIntentResponse( + detected_intents=[{"intent": escalation_label, "probability": 1.0, "reason": f"SAFETY_OVERRIDE: {keyword_reason}"}], + primary_intent=escalation_label, + should_escalate=True, + taxonomy_scores=tax_scores_multi, + matched_taxonomy=matched_tax_multi, + top_taxonomy_domain=top_tax_multi, + timing=TimingInfo(tokenize_ms=0, inference_ms=0, postprocess_ms=0, total_ms=round(total_time, 3)), + ) + + # Split into sentence parts (text only — context is passed separately to tokenizer) + parts = split_sentences(text) + + detected_map = {} # intent -> max probability + should_escalate = False + + tokenize_time = 0 + inference_time = 0 + + for part in parts: + # Tokenize: text (part) as Segment A, context as Segment B (truncated first) + t_start = time.perf_counter() + if context: + inputs = tokenizer(part, text_pair=context, padding="max_length", truncation="only_second", max_length=MAX_LENGTH, return_tensors="np") + else: + inputs = tokenizer(part, padding="max_length", truncation=True, max_length=MAX_LENGTH, return_tensors="np") + tokenize_time += (time.perf_counter() - t_start) * 1000 + + input_ids = inputs["input_ids"].astype(np.int64) + attention_mask = inputs["attention_mask"].astype(np.int64) + token_type_ids = None + input_names = [inp.name for inp in session.get_inputs()] + if "token_type_ids" in input_names: + token_type_ids = inputs.get("token_type_ids", np.zeros_like(input_ids)).astype(np.int64) + + # Inference + i_start = time.perf_counter() + logits = await run_inference_async(input_ids, attention_mask, token_type_ids) + inference_time += (time.perf_counter() - i_start) * 1000 + + probabilities = softmax(logits) + + # Get top intent for this part + top_idx = int(np.argmax(probabilities)) + top_label = id2label.get(top_idx, f"LABEL_{top_idx}") + top_prob = float(probabilities[top_idx]) + + if top_prob >= threshold: + if top_label not in detected_map or detected_map[top_label] < top_prob: + detected_map[top_label] = top_prob + + # Check escalation + esc_prob = float(probabilities[label2id.get(escalation_label, 0)]) + if esc_prob >= escalation_threshold: + should_escalate = True + + postprocess_start = time.perf_counter() + + # Build response + detected = [{"intent": k, "probability": round(v, 4)} for k, v in detected_map.items()] + detected.sort(key=lambda x: x["probability"], reverse=True) + + primary_intent = detected[0]["intent"] if detected else "UNKNOWN" + + # Temporal preprocessor override for multi-intent + if temporal_signal and temporal_signal.is_active_emergency and not should_escalate: + should_escalate = True + if escalation_label not in detected_map: + detected.insert(0, {"intent": escalation_label, "probability": 1.0, "reason": f"TEMPORAL_OVERRIDE: {temporal_signal.reason}"}) + primary_intent = escalation_label + + postprocess_time = (time.perf_counter() - postprocess_start) * 1000 + total_time = (time.perf_counter() - total_start) * 1000 + + # Taxonomy scoring (deterministic) + tax_scores_m: Dict[str, float] = {} + matched_tax_m: List[TaxonomyMatchDetail] = [] + top_tax_m: Optional[str] = None + if TAXONOMY_SCORER_AVAILABLE and trigger_engine and decision_config: + try: + tax_r = score_taxonomy(predict_request.text, trigger_engine, decision_config) + tax_scores_m = tax_r.scores + top_tax_m = tax_r.top_domain + matched_tax_m = [ + TaxonomyMatchDetail(domain=d.domain, score=round(d.score, 4), confidence_tier=d.confidence_tier, + priority=d.priority, is_negated=d.is_negated, target_risk_class=d.target_risk_class, + recommended_flow=d.recommended_flow, trigger_count=d.trigger_count, matched_phrases=d.matched_phrases) + for d in tax_r.matched_domains + ] + # SAFETY NET: hard-escalate R3 domains override ML + hard_esc_domains = decision_config.hard_escalate_domains + for d in tax_r.matched_domains: + if d.domain in hard_esc_domains and not d.is_negated and d.score > 0: + if not should_escalate: + should_escalate = True + primary_intent = escalation_label + if escalation_label not in detected_map: + detected.insert(0, {"intent": escalation_label, "probability": 1.0, "reason": f"TAXONOMY_ESCALATION: {d.domain}"}) + break + except Exception as e: + logger.warning("Taxonomy scoring failed in /predict/multi: %s", e) + + return MultiIntentResponse( + detected_intents=detected, + primary_intent=primary_intent, + should_escalate=should_escalate, + taxonomy_scores=tax_scores_m, + matched_taxonomy=matched_tax_m, + top_taxonomy_domain=top_tax_m, + timing=TimingInfo( + tokenize_ms=round(tokenize_time, 3), + inference_ms=round(inference_time, 3), + postprocess_ms=round(postprocess_time, 3), + total_ms=round(total_time, 3), + ), + ) + + +@app.get("/taxonomy", tags=["Discovery"]) +@limiter.limit("30/minute") +async def get_taxonomy( + request: Request, + api_key: str = Depends(verify_api_key), +): + """ + List all available taxonomy domains with their priority and target risk class. + + Returns every domain the deterministic engine can match against, + along with metadata from each domain's rules.yaml. + """ + if not decision_config: + return {"domains": [], "count": 0, "message": "Decision engine not loaded"} + + domains = [] + for name in sorted(decision_config.taxonomy_triggers.keys()): + priority = decision_config.get_domain_priority(name) + target_risk = decision_config.get_domain_target_risk(name) + domains.append({ + "domain": name, + "display_name": name.replace("_", " ").title(), + "priority": priority, + "target_risk_class": target_risk, + }) + return {"domains": domains, "count": len(domains)} + + +@app.get("/labels") +@limiter.limit("30/minute") +async def get_labels( + request: Request, + api_key: str = Depends(verify_api_key), +): + """Get available intent labels (requires authentication).""" + return {"labels": list(label2id.keys())} + + +@app.get("/policy") +@limiter.limit("10/minute") +async def get_policy( + request: Request, + api_key: str = Depends(verify_api_key), +): + """ + Get current decision policy (requires authentication). + + This endpoint exposes sensitive threshold information. + """ + audit_logger.info("Policy endpoint accessed") + return decision_policy + + +@app.get("/metrics") +@limiter.limit("60/minute") +async def get_metrics( + request: Request, + api_key: str = Depends(verify_api_key), +): + """ + Get service metrics for monitoring and observability. + + Returns request counts, latency averages, and throughput stats. + Requires authentication. + """ + if not ENABLE_METRICS: + raise HTTPException(status_code=404, detail="Metrics disabled") + + return { + "metrics": metrics.get_stats(), + "config": { + "inference_workers": INFERENCE_WORKERS, + "onnx_intra_op_threads": ONNX_INTRA_OP_THREADS, + "onnx_inter_op_threads": ONNX_INTER_OP_THREADS, + "max_length": MAX_LENGTH, + "batching_enabled": ENABLE_BATCHING, + }, + "timestamp": datetime.now(timezone.utc).isoformat(), + } + + +@app.get("/ready") +async def readiness_check(request: Request): + """ + Kubernetes-style readiness probe. + + Returns 200 if service is ready to accept traffic, + 503 if not ready (model not loaded). + No authentication required for orchestrator probes. + """ + if session is None or tokenizer is None: + raise HTTPException(status_code=503, detail="Service not ready") + return {"status": "ready"} + + +@app.get("/compliance") +@limiter.limit("10/minute") +async def compliance_status( + request: Request, + api_key: str = Depends(verify_api_key), +): + """ + Get HIPAA compliance configuration status. + + Returns current security settings and compliance controls. + Requires authentication. For clinical deployment audits. + """ + if not HIPAA_ENABLED: + return { + "hipaa_module_loaded": False, + "message": "HIPAA compliance module not available", + } + + return { + "hipaa_module_loaded": True, + "compliance_status": get_compliance_status(), + "service_info": { + "version": "1.0.0", + "environment": os.getenv("ENVIRONMENT", "development"), + "docs_disabled": DISABLE_DOCS, + "auth_required": REQUIRE_AUTH, + }, + "timestamp": datetime.now(timezone.utc).isoformat(), + } + + +# ============================================================================= +# STREAMING INTENT ENDPOINTS +# ============================================================================= + +# Thread-safe session-based streaming tracker storage +_streaming_config = None +_streaming_config_lock = threading.Lock() +# Store tuple of (tracker, last_access_time) for TTL-based expiration +_session_trackers: OrderedDict[str, tuple] = OrderedDict() +_session_trackers_lock = threading.Lock() +MAX_SESSIONS = int(os.getenv("MAX_STREAMING_SESSIONS", "1000")) +SESSION_TTL_SECONDS = float(os.getenv("SESSION_TTL_SECONDS", "1800")) # 30 minutes default + + +def _get_streaming_config(): + """Get or load streaming config (thread-safe singleton).""" + global _streaming_config + if _streaming_config is None: + with _streaming_config_lock: + if _streaming_config is None: + from streaming_intent import StreamingConfig + _streaming_config = StreamingConfig.from_yaml() + return _streaming_config + + +def _run_streaming_inference_sync(text: str, config) -> Dict[str, float]: + """Synchronous ONNX inference for streaming (runs in executor).""" + if tokenizer is None or session is None: + raise RuntimeError("Model not loaded") + + inputs = tokenizer( + text, + return_tensors="np", + max_length=config.model_max_length, + truncation=True, + padding="max_length", + ) + + # Build input dict with available inputs + input_dict = { + "input_ids": inputs["input_ids"], + "attention_mask": inputs["attention_mask"], + } + # Add token_type_ids only if model expects it + input_names = [inp.name for inp in session.get_inputs()] + if "token_type_ids" in input_names: + if "token_type_ids" in inputs: + input_dict["token_type_ids"] = inputs["token_type_ids"] + else: + input_dict["token_type_ids"] = np.zeros_like(inputs["input_ids"]) + + outputs = session.run(None, input_dict) + + logits = outputs[0][0] + exp_logits = np.exp(logits - np.max(logits)) + probs = exp_logits / exp_logits.sum() + + return {id2label[i]: float(probs[i]) for i in range(len(probs))} + + +async def _run_streaming_inference_async(text: str) -> Dict[str, float]: + """Async wrapper for streaming inference using ThreadPoolExecutor.""" + config = _get_streaming_config() + loop = asyncio.get_running_loop() + return await loop.run_in_executor( + inference_executor, + _run_streaming_inference_sync, + text, + config, + ) + + +def _create_model_inference_fn() -> callable: + """Create model inference function for streaming tracker (sync version for tracker API).""" + def model_inference(text: str) -> Dict[str, float]: + """Use loaded ONNX model for inference.""" + config = _get_streaming_config() + return _run_streaming_inference_sync(text, config) + + return model_inference + + +def get_streaming_tracker(session_id: str): + """ + Get or create streaming intent tracker for a specific session (thread-safe). + + Each session gets its own tracker to prevent state corruption between + concurrent requests. Old sessions are evicted based on TTL or when MAX_SESSIONS is reached. + """ + global _session_trackers + current_time = time.time() + + with _session_trackers_lock: + # First, clean up expired sessions (TTL-based expiration) + expired_sessions = [ + sid for sid, (_, last_access) in _session_trackers.items() + if current_time - last_access > SESSION_TTL_SECONDS + ] + for sid in expired_sessions: + del _session_trackers[sid] + logger.debug(f"Expired streaming session {sid}") + + if session_id in _session_trackers: + # Update last access time and move to end (LRU) + tracker, _ = _session_trackers[session_id] + _session_trackers[session_id] = (tracker, current_time) + _session_trackers.move_to_end(session_id) + return tracker + + # Create new tracker for this session + try: + from streaming_intent import StreamingIntentTracker + config = _get_streaming_config() + + tracker = StreamingIntentTracker( + config=config, + model_fn=_create_model_inference_fn(), + ) + + # Evict oldest session if at capacity + while len(_session_trackers) >= MAX_SESSIONS: + _session_trackers.popitem(last=False) + + _session_trackers[session_id] = (tracker, current_time) + logger.debug(f"Created streaming tracker for session {session_id}") + return tracker + + except ImportError as e: + logger.warning(f"Streaming intent module not available: {e}") + raise HTTPException(status_code=501, detail="Streaming intent module not installed") + + +def reset_streaming_tracker(session_id: str) -> bool: + """Reset or remove a streaming tracker for a session.""" + with _session_trackers_lock: + if session_id in _session_trackers: + tracker, _ = _session_trackers[session_id] + tracker.reset() + _session_trackers[session_id] = (tracker, time.time()) + return True + return False + + +class StreamChunkRequest(BaseModel): + """Request schema for streaming chunk endpoint.""" + text: str = Field(..., min_length=1, max_length=MAX_INPUT_CHARS, description="STT chunk text") + is_final: bool = Field(False, description="Whether this is a finalized STT segment") + timestamp_ms: Optional[int] = Field(None, description="Optional timestamp in milliseconds") + session_id: Optional[str] = Field(None, description="Session ID for tracking (auto-generated if not provided)") + + +class StreamDecisionResponse(BaseModel): + """Response schema for streaming decision.""" + current_belief: Dict[str, float] = Field(..., description="Current probability distribution over intents") + top_intent: str = Field(..., description="Intent with highest probability") + top_intent_prob: float = Field(..., description="Probability of top intent") + should_escalate: bool = Field(..., description="Whether escalation has been triggered") + should_commit: bool = Field(..., description="Whether intent is ready to be committed") + committed_intent: Optional[str] = Field(None, description="Final committed intent (if should_commit)") + escalation_reason: Optional[str] = Field(None, description="Reason for escalation (if triggered)") + window_text: str = Field(..., description="Current rolling window text") + step_count: int = Field(..., description="Number of update steps processed") + step_latency_ms: float = Field(..., description="Processing time for this step") + # Decision engine enrichment (Phase 1 integration) + risk_class: Optional[str] = Field(None, description="R0/R1/R2/R3 clinical risk tier") + primary_domain: Optional[str] = Field(None, description="Primary clinical domain detected") + domain_nominations: Optional[List[Dict[str, Any]]] = Field(None, description="Top domain nominations") + + +@app.post("/stream/chunk", response_model=StreamDecisionResponse, tags=["Streaming"]) +@limiter.limit(RATE_LIMIT) +async def process_stream_chunk( + request: Request, + chunk: StreamChunkRequest, + api_key: str = Depends(verify_api_key), +): + """ + Process a streaming STT chunk and return belief state + decision. + + This endpoint implements HMM-style belief updating for stable intent + classification over streaming text. Use for real-time STT processing. + + **Decision Rules:** + - Immediate escalation if P(ESCALATION) >= 0.85 + - Escalate if P(ESCALATION) >= 0.60 for 3 consecutive steps + - Commit non-escalation intent if top_prob >= 0.70 AND stable for 3 steps + + **Usage:** + 1. Send chunks as they arrive from STT + 2. Set `is_final=true` for finalized STT segments + 3. Check `should_escalate` for immediate clinical escalation + 4. Check `should_commit` and `committed_intent` for final classification + """ + try: + from streaming_intent import Chunk + + # Get or generate session ID for thread-safe tracking + session_id = chunk.session_id or str(uuid.uuid4()) + tracker = get_streaming_tracker(session_id) + + chunk_obj = Chunk( + text=chunk.text, + is_final=chunk.is_final, + timestamp_ms=chunk.timestamp_ms, + ) + + # Run tracker update in executor to prevent blocking the event loop + # (tracker.update calls synchronous ONNX inference internally) + loop = asyncio.get_running_loop() + decision = await loop.run_in_executor( + inference_executor, tracker.update, chunk_obj + ) + + # Safety override — use decision engine if available, else legacy keywords + should_escalate = decision.should_escalate + escalation_reason = decision.escalation_reason + risk_class_str = None + primary_domain_str = None + domain_nom_list = None + + # Determine text to analyze (prefer window_text for cross-chunk safety) + safety_text = decision.window_text or chunk.text + + if DECISION_ENGINE_AVAILABLE and domain_nominator is not None: + # Always run decision engine for enrichment (risk_class, domain, nominations) + nominations = domain_nominator.nominate( + text=safety_text, + ml_label=decision.top_intent, + ml_probabilities=decision.current_belief, + ) + assessment = risk_classifier.assess( + nominations=nominations, + ml_label=decision.top_intent, + ml_confidence=decision.top_intent_prob, + ) + risk_class_str = assessment.risk_class.value + primary_domain_str = assessment.primary_domain + + # Upgrade escalation if engine detects R2+ and tracker hasn't already + if not should_escalate and assessment.risk_class >= RiskClass.R2: + should_escalate = True + if assessment.hard_escalate: + escalation_reason = f"HARD_ESCALATE: {assessment.primary_domain} → {assessment.risk_class.value}" + elif assessment.safety_override: + escalation_reason = f"SAFETY_OVERRIDE: {assessment.primary_domain} → {assessment.risk_class.value}" + else: + escalation_reason = f"CLINICAL_RISK: {assessment.primary_domain} → {assessment.risk_class.value}" + elif should_escalate and assessment.risk_class < RiskClass.R2: + # Tracker escalated but engine says R0/R1 — belt+suspenders upgrade + risk_class_str = "R2" + + domain_nom_list = [ + {"domain": n.domain, "confidence": n.confidence_tier.value, "negated": n.is_negated} + for n in nominations[:5] + ] + elif not should_escalate: + # Fallback to legacy safety keywords + keyword_match, keyword_reason = check_safety_keywords(chunk.text) + if not keyword_match and decision.window_text: + keyword_match, keyword_reason = check_safety_keywords(decision.window_text) + if keyword_match: + should_escalate = True + escalation_reason = keyword_reason + risk_class_str = "R2" + + # Audit log escalations + if should_escalate and HIPAA_ENABLED: + hipaa_audit.log_escalation( + request_id=getattr(request.state, 'request_id', 'unknown'), + client_ip=request.client.host if request.client else 'unknown', + escalation_type=escalation_reason or "streaming_escalation", + confidence=decision.current_belief.get("ESCALATION", 0), + ) + + return StreamDecisionResponse( + current_belief=decision.current_belief, + top_intent=decision.top_intent, + top_intent_prob=decision.top_intent_prob, + should_escalate=should_escalate, + should_commit=decision.should_commit, + committed_intent=decision.committed_intent, + escalation_reason=escalation_reason, + window_text=decision.window_text, + step_count=decision.step_count, + step_latency_ms=round(decision.step_latency_ms, 3), + risk_class=risk_class_str, + primary_domain=primary_domain_str, + domain_nominations=domain_nom_list, + ) + except ImportError: + raise HTTPException(status_code=501, detail="Streaming intent module not available") + except Exception as e: + logger.error(f"Streaming chunk error: {e}") + raise HTTPException(status_code=500, detail="Streaming processing failed") + + +class StreamResetRequest(BaseModel): + """Request schema for stream reset endpoint.""" + session_id: str = Field(..., min_length=1, description="Session ID to reset") + + +@app.post("/stream/reset", tags=["Streaming"]) +@limiter.limit("30/minute") +async def reset_stream( + request: Request, + reset_request: StreamResetRequest, + api_key: str = Depends(verify_api_key), +): + """ + Reset streaming tracker state for a specific session. + + Call this when starting a new conversation/session to clear + accumulated text buffer and belief state. + """ + try: + was_reset = reset_streaming_tracker(reset_request.session_id) + if was_reset: + return {"status": "reset", "session_id": reset_request.session_id, "message": "Streaming tracker reset"} + else: + return {"status": "not_found", "session_id": reset_request.session_id, "message": "Session not found (may already be expired)"} + except ImportError: + raise HTTPException(status_code=501, detail="Streaming intent module not available") + + +@app.get("/stream/metrics", tags=["Streaming"]) +@limiter.limit("30/minute") +async def get_stream_metrics( + request: Request, + session_id: Optional[str] = None, + api_key: str = Depends(verify_api_key), +): + """ + Get streaming tracker metrics for a specific session or aggregate. + + Returns escalation count, gray zone rate, average steps to decision. + """ + try: + if session_id: + with _session_trackers_lock: + if session_id in _session_trackers: + tracker, _ = _session_trackers[session_id] + metrics_data = tracker.get_metrics() + else: + raise HTTPException(status_code=404, detail=f"Session {session_id} not found") + else: + # Return aggregate info about all sessions + with _session_trackers_lock: + metrics_data = { + "active_sessions": len(_session_trackers), + "max_sessions": MAX_SESSIONS, + } + return { + "streaming_metrics": metrics_data, + "timestamp": datetime.now(timezone.utc).isoformat(), + } + except ImportError: + raise HTTPException(status_code=501, detail="Streaming intent module not available") + + +@app.get("/stream/config", tags=["Streaming"]) +@limiter.limit("10/minute") +async def get_stream_config( + request: Request, + api_key: str = Depends(verify_api_key), +): + """ + Get streaming intent configuration. + + Returns thresholds, transition matrix info, and window settings. + """ + try: + config = _get_streaming_config() + return { + "thresholds": { + "theta_hi": config.theta_hi, + "theta_med": config.theta_med, + "theta_lock": config.theta_lock, + "K": config.K, + }, + "emission": { + "alpha": config.alpha, + "epsilon": config.epsilon, + }, + "window": { + "max_tokens": config.max_tokens, + "max_tokens_limit": config.max_tokens_limit, + }, + "debounce": { + "debounce_ms": config.debounce_ms, + "min_change_chars": config.min_change_chars, + }, + "intents": config.intents, + } + except ImportError: + raise HTTPException(status_code=501, detail="Streaming intent module not available") + + +@app.exception_handler(Exception) +async def global_exception_handler(request: Request, exc: Exception): + """Global exception handler - never expose internal details.""" + request_id = getattr(request.state, 'request_id', 'unknown') + # Log full error internally + logger.error(f"Unhandled exception [request_id={request_id}]: {exc}", exc_info=True) + # Return generic error to client + return JSONResponse( + status_code=500, + content={ + "detail": "Internal server error", + "request_id": request_id, # Allow user to reference for support + }, + headers={"X-Request-ID": request_id}, + ) + + +if __name__ == "__main__": + import uvicorn + uvicorn.run(app, host="0.0.0.0", port=8000) diff --git a/service/hipaa_config.py b/service/hipaa_config.py new file mode 100644 index 0000000000000000000000000000000000000000..14c5185c3c1d915f1e653299682febd097007ed8 --- /dev/null +++ b/service/hipaa_config.py @@ -0,0 +1,405 @@ +#!/usr/bin/env python3 +""" +HIPAA Compliance Configuration for Clinical Deployment. + +This module provides security configurations and utilities to help +ensure HIPAA compliance for the DCE Intent Classifier service. + +IMPORTANT: This is a helper module. Full HIPAA compliance requires +organizational policies, training, and infrastructure beyond this code. +""" + +import hashlib +import logging +import os +import re +from datetime import datetime, timezone +from typing import Any, Dict, List, Optional, Tuple + +# ============================================================================= +# HIPAA SECURITY CONFIGURATION +# ============================================================================= + +# PHI (Protected Health Information) patterns to detect and redact in logs +PHI_PATTERNS = { + "ssn": re.compile(r"\b\d{3}-\d{2}-\d{4}\b"), + "phone": re.compile(r"\b\d{3}[-.]?\d{3}[-.]?\d{4}\b"), + "email": re.compile(r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b"), + "mrn": re.compile(r"\b(MRN|mrn|Medical Record)[\s:#]*\d{6,12}\b", re.IGNORECASE), + "dob": re.compile(r"\b(DOB|dob|birth)[\s:#]*\d{1,2}[/-]\d{1,2}[/-]\d{2,4}\b", re.IGNORECASE), + "credit_card": re.compile(r"\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b"), +} + +# Session timeout in seconds (HIPAA recommends automatic logoff) +SESSION_TIMEOUT_SECONDS = int(os.getenv("SESSION_TIMEOUT", "900")) # 15 minutes default + +# Audit log retention days (HIPAA requires 6 years minimum) +AUDIT_LOG_RETENTION_DAYS = int(os.getenv("AUDIT_RETENTION_DAYS", "2190")) # 6 years + +# Maximum failed login attempts before lockout +MAX_FAILED_ATTEMPTS = int(os.getenv("MAX_FAILED_ATTEMPTS", "5")) +LOCKOUT_DURATION_SECONDS = int(os.getenv("LOCKOUT_DURATION", "900")) # 15 minutes + +# Encryption requirements +REQUIRE_TLS = os.getenv("REQUIRE_TLS", "true").lower() == "true" +MIN_TLS_VERSION = os.getenv("MIN_TLS_VERSION", "1.2") + +# Data handling +LOG_PHI = os.getenv("LOG_PHI", "false").lower() == "true" # Never log PHI by default +REDACT_PHI_IN_LOGS = os.getenv("REDACT_PHI", "true").lower() == "true" + + +# ============================================================================= +# PHI DETECTION AND REDACTION +# ============================================================================= + +def detect_phi(text: str) -> List[Tuple[str, str]]: + """ + Detect potential PHI in text. + + Returns: + List of tuples (phi_type, matched_text) + """ + findings = [] + for phi_type, pattern in PHI_PATTERNS.items(): + matches = pattern.findall(text) + for match in matches: + findings.append((phi_type, match)) + return findings + + +def redact_phi(text: str) -> str: + """ + Redact potential PHI from text for safe logging. + + Returns: + Text with PHI replaced by [REDACTED-{type}] + """ + redacted = text + for phi_type, pattern in PHI_PATTERNS.items(): + redacted = pattern.sub(f"[REDACTED-{phi_type.upper()}]", redacted) + return redacted + + +def hash_identifier(identifier: str) -> str: + """ + Create a one-way hash of an identifier for audit logging. + + This allows tracking without storing actual PHI. + + WARNING: In production, set PHI_HASH_SALT to a unique secret value. + """ + salt = os.getenv("PHI_HASH_SALT", "") + environment = os.getenv("ENVIRONMENT", "development").lower() + + if not salt: + if environment == "production": + raise RuntimeError( + "CRITICAL: PHI_HASH_SALT environment variable must be set in production! " + "This is required for HIPAA-compliant identifier hashing." + ) + import logging + logging.getLogger("hipaa_audit").warning( + "PHI_HASH_SALT not configured - using default. Set this to a unique secret in production!" + ) + salt = "dce-intent-classifier-default" + return hashlib.sha256(f"{salt}:{identifier}".encode()).hexdigest()[:16] + + +# ============================================================================= +# AUDIT LOGGING +# ============================================================================= + +class HIPAAAuditLogger: + """ + HIPAA-compliant audit logger. + + Tracks all access to the system with required audit fields. + """ + + def __init__(self, logger_name: str = "hipaa_audit"): + self.logger = logging.getLogger(logger_name) + self.logger.setLevel(logging.INFO) + + def log_access( + self, + user_id: Optional[str], + action: str, + resource: str, + client_ip: str, + request_id: str, + success: bool, + details: Optional[str] = None, + ) -> None: + """ + Log an access event with HIPAA-required fields. + + Required fields per HIPAA: + - User identification (hashed if applicable) + - Date and time of access + - Action performed + - Resource accessed + - Success/failure status + """ + timestamp = datetime.now(timezone.utc).isoformat() + + # Hash user_id if present to avoid logging actual identifiers + user_hash = hash_identifier(user_id) if user_id else "anonymous" + + # Redact any PHI in details + safe_details = redact_phi(details) if details else None + + log_entry = { + "timestamp": timestamp, + "user_hash": user_hash, + "action": action, + "resource": resource, + "client_ip": client_ip, + "request_id": request_id, + "success": success, + "details": safe_details, + } + + self.logger.info(f"HIPAA_AUDIT: {log_entry}") + + def log_escalation( + self, + request_id: str, + client_ip: str, + escalation_type: str, + confidence: float, + ) -> None: + """ + Log a clinical escalation event. + + This is critical for tracking urgent patient safety events. + """ + timestamp = datetime.now(timezone.utc).isoformat() + + log_entry = { + "timestamp": timestamp, + "event_type": "CLINICAL_ESCALATION", + "escalation_type": escalation_type, + "confidence": round(confidence, 4), + "request_id": request_id, + "client_ip": client_ip, + } + + self.logger.warning(f"ESCALATION_ALERT: {log_entry}") + + def log_security_event( + self, + event_type: str, + client_ip: str, + request_id: str, + details: str, + ) -> None: + """ + Log a security-related event (failed auth, rate limit, etc). + """ + timestamp = datetime.now(timezone.utc).isoformat() + + log_entry = { + "timestamp": timestamp, + "event_type": f"SECURITY_{event_type}", + "client_ip": client_ip, + "request_id": request_id, + "details": redact_phi(details), + } + + self.logger.warning(f"SECURITY_EVENT: {log_entry}") + + +# ============================================================================= +# SECURITY HEADERS +# ============================================================================= + +SECURITY_HEADERS = { + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "DENY", + "X-XSS-Protection": "1; mode=block", + "Strict-Transport-Security": "max-age=31536000; includeSubDomains", + "Cache-Control": "no-store, no-cache, must-revalidate, private", + "Pragma": "no-cache", + "Referrer-Policy": "strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none'", +} + +# Relaxed headers for docs endpoints (allows Swagger UI to load) +DOCS_SECURITY_HEADERS = { + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "SAMEORIGIN", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "strict-origin-when-cross-origin", +} + + +def get_security_headers(is_docs: bool = False) -> Dict[str, str]: + """Get security headers for responses.""" + if is_docs: + return DOCS_SECURITY_HEADERS.copy() + return SECURITY_HEADERS.copy() + + +# ============================================================================= +# INPUT VALIDATION FOR CLINICAL SAFETY +# ============================================================================= + +# Words/phrases that should trigger extra caution in clinical context +CLINICAL_SAFETY_KEYWORDS = { + "high_urgency": [ + "suicide", "suicidal", "kill myself", "end my life", "want to die", + "hurt myself", "self harm", "overdose", "od'd", "not breathing", + "unconscious", "unresponsive", "chest pain", "heart attack", "stroke", + "seizure", "bleeding heavily", "cant breathe", "allergic reaction", + ], + "mental_health": [ + "depressed", "depression", "anxiety", "panic attack", "voices", + "hallucinating", "psychotic", "manic", "bipolar", "schizophrenia", + "ptsd", "trauma", "abuse", "assault", "rape", + ], + "substance": [ + "overdose", "withdrawal", "detox", "drunk", "high", "using", + "relapse", "addiction", "alcoholic", "drugs", + ], +} + + +def _has_temporal_resolution(text_lower: str, keyword: str) -> bool: + """ + Detect if a safety keyword appears in a resolved/historical context. + + Returns True if the keyword is described as past/resolved (should NOT escalate). + Returns False if the keyword appears acute/current (SHOULD escalate). + + Safety bias: if uncertain, returns False (i.e. escalate). + """ + # Find keyword position for proximity-based checks + kw_pos = text_lower.find(keyword) + if kw_pos == -1: + return False + + # Extract a window around the keyword for context analysis + window_start = max(0, kw_pos - 80) + window_end = min(len(text_lower), kw_pos + len(keyword) + 80) + window = text_lower[window_start:window_end] + + # Past-tense / historical markers that precede the keyword + past_prefixes = [ + r"\bi\s+had\b", r"\bi\s+used\s+to\s+have\b", r"\bi\s+was\s+having\b", + r"\bi\s+experienced\b", r"\bi\s+went\s+through\b", r"\bi\s+suffered\b", + r"\bi\s+got\b", r"\bpreviously\s+had\b", r"\bhistory\s+of\b", + r"\bpast\s+episode\b", r"\bformer\b", r"\bprevious\b", + r"\blast\s+(week|month|year|time|night|tuesday|wednesday|thursday|friday|saturday|sunday|monday)\b", + r"\byesterday\b", r"\b\d+\s+(days?|weeks?|months?|years?)\s+ago\b", + r"\bback\s+in\b", r"\bwhen\s+i\s+was\b", r"\ba\s+while\s+ago\b", + r"\bin\s+the\s+past\b", r"\ba\s+few\s+(days|weeks|months)\s+ago\b", + r"\bearlier\s+(this|today|last)\b", r"\bused\s+to\b", + r"\bhad\s+a\b", r"\bhad\s+some\b", r"\bhad\s+an\b", + ] + + # Resolution / improvement markers anywhere in the text + resolution_markers = [ + r"\bfeeling\s+(much\s+)?better\b", r"\bi'?m\s+(feeling\s+)?(much\s+)?better\b", + r"\bimproved\b", r"\bresolved\b", r"\bwent\s+away\b", r"\bgone\s+now\b", + r"\bno\s+longer\b", r"\bstopped\b", r"\bcleared\s+up\b", + r"\bfine\s+now\b", r"\bokay\s+now\b", r"\bok\s+now\b", + r"\brecovered\b", r"\brecovering\b", r"\bheal(ed|ing)\b", + r"\bwent\s+to\s+(the\s+)?(doctor|er|hospital|urgent\s+care|clinic)\b", + r"\bsaw\s+(the\s+)?(doctor|my\s+doctor|a\s+doctor|specialist)\b", + r"\bbeen\s+treated\b", r"\bgot\s+(it\s+)?checked\b", + r"\bthey\s+said\s+(it'?s|i'?m)\s+(fine|ok|normal|nothing)\b", + r"\bnot\s+anymore\b", r"\bdoesn'?t\s+hurt\s+(anymore|now)\b", + r"\bfeeling\s+good\b", r"\bmuch\s+improved\b", + r"\bunder\s+control\b", r"\bmanaged\b", r"\bstable\b", + ] + + # "Still active" markers that OVERRIDE past tense (should still escalate) + still_active_markers = [ + r"\bstill\s+(have|having|feel|feeling|hurts?|experiencing)\b", + r"\bgetting\s+worse\b", r"\bnot\s+getting\s+better\b", + r"\bcame\s+back\b", r"\bback\s+again\b", r"\breturned\b", + r"\bwon'?t\s+(stop|go\s+away)\b", r"\bkeeps?\s+coming\b", + r"\bright\s+now\b", r"\bat\s+this\s+moment\b", + r"\bcurrently\b", r"\bpresently\b", + r"\bi'?m\s+having\b", r"\bi\s+have\b", r"\bi\s+feel\b", + r"\bworried\s+(it'?s|about)\b", r"\bscared\b", + r"\bworse\s+(than|today|now)\b", + # BUT-clause reversals: "felt better but now the pain is back" + r"\bbut\s+now\b", r"\bbut\s+today\b", r"\bbut\s+currently\b", + r"\bbut\s+(it'?s?|the|i'?m|i\s+am|i\s+have|they)\b", + r"\bhowever\s+(now|today|it'?s?|the|i'?m)\b", + r"\bexcept\s+(now|today|it'?s?|the)\b", + # Recurrence patterns + r"\b(it'?s?|pain|symptoms?)\s+(is\s+)?back\b", + r"\bflaring\s+up\b", r"\bacting\s+up\b", + r"\bstarted\s+again\b", r"\bhappening\s+again\b", + ] + + # Check for "still active" signals first — if present, do NOT suppress + for pattern in still_active_markers: + if re.search(pattern, text_lower): + return False + + # Check for past-tense prefix near the keyword + has_past = any(re.search(p, window) for p in past_prefixes) + + # Check for resolution markers anywhere in full text + has_resolution = any(re.search(p, text_lower) for p in resolution_markers) + + # Need BOTH past tense AND resolution to suppress escalation + # This is the conservative approach — just past tense alone is not enough + return has_past and has_resolution + + +def check_clinical_safety_keywords(text: str) -> Dict[str, List[str]]: + """ + Check text for clinical safety keywords with temporal context awareness. + + Returns dict of category -> matched keywords. + Suppresses matches when keywords appear in clearly resolved/historical context. + """ + text_lower = text.lower() + matches = {} + + for category, keywords in CLINICAL_SAFETY_KEYWORDS.items(): + found = [] + for kw in keywords: + if kw in text_lower: + # Check if keyword is in a resolved/historical context + if _has_temporal_resolution(text_lower, kw): + continue # Suppress — past/resolved + found.append(kw) + if found: + matches[category] = found + + return matches + + +# ============================================================================= +# COMPLIANCE CHECKLIST +# ============================================================================= + +def get_compliance_status() -> Dict[str, Any]: + """ + Get current HIPAA compliance configuration status. + + Returns a dict indicating which controls are enabled. + """ + return { + "authentication_required": os.getenv("REQUIRE_AUTH", "true").lower() == "true", + "tls_required": REQUIRE_TLS, + "phi_logging_disabled": not LOG_PHI, + "phi_redaction_enabled": REDACT_PHI_IN_LOGS, + "session_timeout_configured": SESSION_TIMEOUT_SECONDS > 0, + "audit_logging_enabled": True, + "rate_limiting_enabled": True, + "input_sanitization_enabled": True, + "security_headers_configured": True, + "min_tls_version": MIN_TLS_VERSION, + "audit_retention_days": AUDIT_LOG_RETENTION_DAYS, + } + + +# Global audit logger instance +hipaa_audit = HIPAAAuditLogger() diff --git a/service/run.bat b/service/run.bat new file mode 100644 index 0000000000000000000000000000000000000000..7089a680ebcb6ec747ce12cad02a14da1afde512 --- /dev/null +++ b/service/run.bat @@ -0,0 +1,35 @@ +@echo off +REM Start DCE Intent Classifier Service (Windows) +REM Usage: service\run.bat + +setlocal + +REM Default configuration +if "%HOST%"=="" set HOST=0.0.0.0 +if "%PORT%"=="" set PORT=8000 +if "%MODEL_DIR%"=="" set MODEL_DIR=artifacts\onnx_int8 +if "%POLICY_PATH%"=="" set POLICY_PATH=artifacts\config\decision_policy.json +if "%MAX_LENGTH%"=="" set MAX_LENGTH=64 + +echo ============================================== +echo DCE Intent Classifier Service +echo ============================================== +echo Host: %HOST% +echo Port: %PORT% +echo Model: %MODEL_DIR% +echo Policy: %POLICY_PATH% +echo Max Length: %MAX_LENGTH% +echo ============================================== + +REM Check if model exists +if not exist "%MODEL_DIR%\model.onnx" ( + echo ERROR: Model not found at %MODEL_DIR%\model.onnx + echo Run 'task_runner.bat train' and 'task_runner.bat export_onnx' first + exit /b 1 +) + +REM Start server +echo Starting server... +uvicorn service.app:app --host %HOST% --port %PORT% + +endlocal diff --git a/service/run.sh b/service/run.sh new file mode 100644 index 0000000000000000000000000000000000000000..d203cbe70a5f1185c444b80b6e5cf30343404c99 --- /dev/null +++ b/service/run.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# Start DCE Intent Classifier Service +# Usage: ./service/run.sh [--reload] [--production] + +set -e + +# Default configuration +HOST="${HOST:-0.0.0.0}" +PORT="${PORT:-8000}" +WORKERS="${WORKERS:-1}" +MODEL_DIR="${MODEL_DIR:-artifacts/onnx_int8}" +POLICY_PATH="${POLICY_PATH:-artifacts/config/decision_policy.json}" +MAX_LENGTH="${MAX_LENGTH:-64}" + +# Scalability configuration +INFERENCE_WORKERS="${INFERENCE_WORKERS:-4}" +ONNX_INTRA_OP_THREADS="${ONNX_INTRA_OP_THREADS:-4}" +ONNX_INTER_OP_THREADS="${ONNX_INTER_OP_THREADS:-1}" +ENABLE_METRICS="${ENABLE_METRICS:-true}" + +# Security configuration +REQUIRE_AUTH="${REQUIRE_AUTH:-true}" +API_KEY="${API_KEY:-}" + +# Export environment variables +export MODEL_DIR +export POLICY_PATH +export MAX_LENGTH +export INFERENCE_WORKERS +export ONNX_INTRA_OP_THREADS +export ONNX_INTER_OP_THREADS +export ENABLE_METRICS +export REQUIRE_AUTH +export API_KEY + +echo "==============================================" +echo "DCE Intent Classifier Service" +echo "==============================================" +echo "Host: $HOST" +echo "Port: $PORT" +echo "Workers: $WORKERS" +echo "Model: $MODEL_DIR" +echo "Policy: $POLICY_PATH" +echo "Max Length: $MAX_LENGTH" +echo "Inference Workers: $INFERENCE_WORKERS" +echo "ONNX Intra-Op Threads: $ONNX_INTRA_OP_THREADS" +echo "Auth Required: $REQUIRE_AUTH" +echo "Metrics Enabled: $ENABLE_METRICS" +echo "==============================================" + +# Check if model exists +if [ ! -f "$MODEL_DIR/model.onnx" ]; then + echo "ERROR: Model not found at $MODEL_DIR/model.onnx" + echo "Run 'make train && make export_onnx && make quantize' first" + exit 1 +fi + +# Check API key in production +if [ "$REQUIRE_AUTH" = "true" ] && [ -z "$API_KEY" ]; then + echo "WARNING: REQUIRE_AUTH=true but API_KEY is not set!" + echo "Set API_KEY environment variable or set REQUIRE_AUTH=false for development" +fi + +# Start server +if [ "$1" = "--reload" ]; then + echo "Starting with hot reload (development mode)..." + uvicorn service.app:app --host "$HOST" --port "$PORT" --reload +elif [ "$1" = "--production" ]; then + echo "Starting production server with Gunicorn..." + gunicorn service.app:app \ + -w "$WORKERS" \ + -k uvicorn.workers.UvicornWorker \ + --bind "$HOST:$PORT" \ + --timeout 30 \ + --graceful-timeout 10 \ + --access-logfile - \ + --error-logfile - +else + echo "Starting server with Uvicorn..." + uvicorn service.app:app --host "$HOST" --port "$PORT" --workers "$WORKERS" +fi diff --git a/service/taxonomy_scorer.py b/service/taxonomy_scorer.py new file mode 100644 index 0000000000000000000000000000000000000000..6fb2bcb019d4da379a0671978b99ef79e22d9103 --- /dev/null +++ b/service/taxonomy_scorer.py @@ -0,0 +1,150 @@ +""" +Taxonomy Scorer — deterministic scoring for all taxonomy domains. + +Converts the TaxonomyTriggerEngine match results into a flat dict of +domain_name → float score (0.0–1.0) for every known domain, plus +detailed match info for domains that actually triggered. +""" + +from __future__ import annotations + +import logging +from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional, Tuple + +logger = logging.getLogger("service.taxonomy_scorer") + +# Score mapping for confidence tiers +_TIER_SCORES = { + "high": 0.95, + "medium": 0.65, + "low": 0.30, + "none": 0.0, +} + + +@dataclass +class TaxonomyDomainResult: + """Detailed result for a single taxonomy domain.""" + domain: str + score: float + confidence_tier: str # "high", "medium", "low", "none" + priority: int + is_negated: bool + negation_action: Optional[str] # "suppress", "downgrade_confidence", None + target_risk_class: Optional[str] + recommended_flow: Optional[str] + trigger_count: int + matched_phrases: List[str] = field(default_factory=list) + + +@dataclass +class TaxonomyScoreResult: + """Full taxonomy scoring result across all domains.""" + scores: Dict[str, float] # domain → score (ALL domains) + matched_domains: List[TaxonomyDomainResult] # Only domains with score > 0, sorted desc + top_domain: Optional[str] # Highest-scoring domain name + top_score: float # Highest score + domain_count: int # Total number of known domains + + +def score_taxonomy( + text: str, + trigger_engine: Any, + decision_config: Any, +) -> TaxonomyScoreResult: + """ + Score text against ALL taxonomy domains deterministically. + + Args: + text: Patient utterance + trigger_engine: TaxonomyTriggerEngine instance + decision_config: DecisionConfigLoader instance + + Returns: + TaxonomyScoreResult with scores for every domain + """ + all_domain_names = sorted(decision_config.taxonomy_triggers.keys()) + + # Run deterministic trigger matching against all domains + match_results = trigger_engine.match_all(text) + + scores: Dict[str, float] = {} + matched_domains: List[TaxonomyDomainResult] = [] + + for domain_name in all_domain_names: + if domain_name in match_results: + result = match_results[domain_name] + + # Convert effective confidence tier to score + tier_value = result.effective_confidence.value # "high", "medium", "low", "none" + score = _TIER_SCORES.get(tier_value, 0.0) + + # Get negation info + is_negated = False + negation_action = None + if result.negation_result and result.negation_result.is_negated: + is_negated = True + negation_action = result.negation_result.action.value if hasattr(result.negation_result.action, 'value') else str(result.negation_result.action) + + # Get target risk class from rules + target_risk = decision_config.get_domain_target_risk(domain_name) + + # Get recommended flow from rules + recommended_flow = _resolve_flow_for_tier( + decision_config, domain_name, tier_value + ) + + # Collect matched phrases + matched_phrases = [] + for m in result.matches: + if hasattr(m, 'matched_span') and m.matched_span: + matched_phrases.append(m.matched_span) + elif hasattr(m, 'matched_text') and m.matched_text: + matched_phrases.append(m.matched_text) + + domain_result = TaxonomyDomainResult( + domain=domain_name, + score=score, + confidence_tier=tier_value, + priority=result.priority, + is_negated=is_negated, + negation_action=negation_action, + target_risk_class=target_risk, + recommended_flow=recommended_flow, + trigger_count=len(result.matches), + matched_phrases=matched_phrases[:5], # Limit to top 5 + ) + matched_domains.append(domain_result) + scores[domain_name] = score + else: + scores[domain_name] = 0.0 + + # Sort matched domains by score descending, then by priority descending + matched_domains.sort(key=lambda d: (d.score, d.priority), reverse=True) + + top_domain = matched_domains[0].domain if matched_domains else None + top_score = matched_domains[0].score if matched_domains else 0.0 + + return TaxonomyScoreResult( + scores=scores, + matched_domains=matched_domains, + top_domain=top_domain, + top_score=top_score, + domain_count=len(all_domain_names), + ) + + +def _resolve_flow_for_tier( + config: Any, domain_name: str, tier_value: str +) -> Optional[str]: + """Resolve recommended flow from domain rules based on confidence tier.""" + rules = config.get_domain_decision_rules(domain_name) + if not rules: + return None + for rule in rules: + conditions = rule.get("if", {}) + conf_required = conditions.get("confidence") + if conf_required and conf_required == tier_value: + return rule.get("then", {}).get("flow") + return None diff --git a/service/temporal_preprocessor.py b/service/temporal_preprocessor.py new file mode 100644 index 0000000000000000000000000000000000000000..1bf5d3ed3bdd23e167125ac7fc8faa3175201835 --- /dev/null +++ b/service/temporal_preprocessor.py @@ -0,0 +1,299 @@ +""" +Temporal Preprocessor for Clinical Intent Classification. + +Rule-based preprocessing layer that runs BEFORE the ML model to handle +temporal context that BERT struggles with: + +1. BUT-clause reversals: "I felt better but now the pain is back" + → Extracts the active complaint, discards the resolved prefix. + +2. Proxy/third-party urgency: "My mom says her chest hurts really bad" + → Detects active urgency even when reported through a third party. + +3. Still-active markers after past tense: "I had pain and it's getting worse" + → Flags as active despite past-tense opener. + +Returns: + TemporalSignal with: + - processed_text: cleaned text for model input + - is_active_emergency: True if active urgency detected despite temporal markers + - temporal_tag: "active" | "resolved" | "mixed" | "neutral" + - confidence: how confident the preprocessor is in its tag + - reason: human-readable explanation +""" + +import re +from dataclasses import dataclass, field +from typing import Optional, List + + +@dataclass +class TemporalSignal: + """Result of temporal preprocessing.""" + processed_text: str # Text after preprocessing (may be modified) + original_text: str # Original unmodified text + is_active_emergency: bool # True if active urgency detected + temporal_tag: str # "active" | "resolved" | "mixed" | "neutral" + confidence: float # 0.0-1.0 confidence in the tag + reason: Optional[str] = None # Human-readable explanation + proxy_report: bool = False # True if someone reporting for another person + matched_rules: List[str] = field(default_factory=list) + + +# ── BUT-clause reversal patterns ── +# These indicate the speaker HAD a resolved condition but it's NOW active again +BUT_CLAUSE_PATTERNS = [ + # "felt better but now..." + re.compile( + r"(?P.+?)\b(?:but|however|except|although|though|yet)\b\s+" + r"(?P(?:now|today|currently|right now|at this moment|this morning|tonight|again)" + r".+)", + re.IGNORECASE + ), + # "was fine but started..." + re.compile( + r"(?P.+?)\b(?:but|however|except)\b\s+" + r"(?P(?:it'?s?|the pain|the symptoms?|i'?m|i am|i feel|i have|it has|they)" + r"\s+(?:back|returned|worse|coming back|started|acting up|flaring).+)", + re.IGNORECASE + ), + # "...but now I can't..." + re.compile( + r"(?P.+?)\b(?:but|however|except)\b\s+" + r"(?P(?:now\s+)?i\s+(?:can'?t|cannot|am having|have|feel|'m).+)", + re.IGNORECASE + ), + # "...but then I started / but woke up with / but noticed..." + re.compile( + r"(?P.+?)\b(?:but|however|except)\b\s+" + r"(?P(?:then|woke up|noticed|started|began|suddenly|this morning)\b.+)", + re.IGNORECASE + ), +] + +# ── General contrastive marker ── +# Detects ANY contrastive clause to split and re-evaluate +CONTRASTIVE_MARKER = re.compile( + r"\b(?:but|however|yet|still|though|although|except)\b", + re.IGNORECASE +) + +# ── Still-active markers ── +# If these appear AFTER past-tense language, the condition is STILL active +STILL_ACTIVE_PATTERNS = [ + re.compile(r"\b(?:still|again|keeps?|won'?t stop|getting worse|not getting better)\b", re.IGNORECASE), + re.compile(r"\b(?:came back|come back|coming back|returned|recurring|back again)\b", re.IGNORECASE), + re.compile(r"\b(?:right now|at this moment|currently|presently|as we speak)\b", re.IGNORECASE), + re.compile(r"\b(?:worse than|worse today|worse now|escalating|intensifying)\b", re.IGNORECASE), + re.compile(r"\b(?:i'?m (?:still |now )?(?:having|experiencing))\b", re.IGNORECASE), + re.compile(r"\bi'?m feeling\b(?!\s*(?:better|fine|good|okay|ok|great|alright|normal|well))", re.IGNORECASE), + re.compile(r"\b(?:it'?s (?:back|worse|not going away|spreading))\b", re.IGNORECASE), + re.compile(r"\b(?:hasn'?t (?:gone away|stopped|improved|gotten better))\b", re.IGNORECASE), +] + +# ── Past-tense / resolved markers ── +PAST_TENSE_PATTERNS = [ + re.compile(r"\bi (?:had|used to have|was having|experienced|went through|suffered)\b", re.IGNORECASE), + re.compile(r"\b(?:last (?:week|month|year|night|time)|yesterday|\d+ (?:days?|weeks?|months?|years?) ago)\b", re.IGNORECASE), + re.compile(r"\b(?:in the past|previously|formerly|back in|when i was)\b", re.IGNORECASE), +] + +RESOLVED_PATTERNS = [ + re.compile(r"\b(?:feeling (?:much )?better|improved|resolved|went away|gone now)\b", re.IGNORECASE), + re.compile(r"\b(?:no longer|stopped|cleared up|fine now|okay now|recovered)\b", re.IGNORECASE), + re.compile(r"\b(?:been treated|got (?:it )?checked|under control|managed|stable)\b", re.IGNORECASE), + re.compile(r"\b(?:i'?m fine|i am fine|i'?m okay|i'?m ok|i'?m good|i'?m alright)\b", re.IGNORECASE), + re.compile(r"\b(?:checked (?:me |it )?out|doctor (?:checked|said|cleared)|all clear)\b", re.IGNORECASE), +] + +# ── Proxy/third-party reporting patterns ── +PROXY_PATTERNS = [ + re.compile( + r"\b(?:my\s+)?(?:mom|mother|dad|father|wife|husband|son|daughter|child|kid|" + r"grandma|grandmother|grandpa|grandfather|brother|sister|friend|neighbor|" + r"partner|spouse|baby|toddler|infant)\b", + re.IGNORECASE + ), +] + +# Active urgency markers that override third-party suppression +PROXY_ACTIVE_URGENCY = [ + re.compile(r"\b(?:says?|told me|telling me|texted|called|screaming)\b.*\b(?:hurts?|pain|can'?t breathe|bleeding|fell|fainted|passed out|unconscious|chest|heart|seizure)\b", re.IGNORECASE), + re.compile(r"\b(?:hurts?|pain|can'?t breathe|bleeding|fell|fainted|passed out|unconscious|chest|heart|seizure)\b.*\b(?:really|very|so|extremely|terribly|awful|bad)\b", re.IGNORECASE), + re.compile(r"\b(?:need|needs?|rush|hurry|emergency|ambulance|911|help)\b", re.IGNORECASE), + re.compile(r"\b(?:right now|just now|just happened|happening)\b", re.IGNORECASE), +] + +# ── Intermittent/recurring symptom patterns ── +# Ambiguous intermittent phrasing with dangerous symptoms should bias toward +# escalation unless the patient's record shows chronic, stable baseline. +INTERMITTENT_ACTIVE = [ + re.compile(r"\b(?:sometimes|occasionally|on and off|comes and goes|every now and then|once in a while|from time to time|intermittent)\b.*\b(?:trouble breathing|chest pain|can'?t breathe|difficulty breathing|hard to breathe|dizzy|faint|pass out|black out|seizure|heart races|heart pounds|palpitation)\b", re.IGNORECASE), + re.compile(r"\b(?:trouble breathing|chest pain|can'?t breathe|difficulty breathing|hard to breathe|dizzy|faint|pass out|black out|seizure|heart races|heart pounds|palpitation)\b.*\b(?:sometimes|occasionally|on and off|comes and goes|every now and then|once in a while|from time to time|intermittent)\b", re.IGNORECASE), + re.compile(r"\b(?:sometimes|occasionally|on and off|every now and then)\b.*\b(?:pain in my chest|pressure in my chest|tightness in my chest|left arm goes numb|vision goes|lose consciousness|feel like i.{0,10}(?:faint|pass out))\b", re.IGNORECASE), +] + + +def preprocess_temporal(text: str, context: Optional[str] = None) -> TemporalSignal: + """ + Analyze and preprocess text for temporal context before ML classification. + + This is the main entry point. Call this BEFORE tokenization/inference. + + Args: + text: Patient's current utterance + context: Optional conversation history + + Returns: + TemporalSignal with preprocessing results + """ + original = text + matched_rules = [] + + # ── Step 1: Check for BUT-clause reversals ── + for i, pattern in enumerate(BUT_CLAUSE_PATTERNS): + m = pattern.search(text) + if m: + active_part = m.group("active").strip() + if len(active_part) >= 10: # Sanity check: active part is meaningful + matched_rules.append(f"but_clause_reversal_{i}") + return TemporalSignal( + processed_text=active_part, + original_text=original, + is_active_emergency=True, + temporal_tag="active", + confidence=0.90, + reason=f"BUT-clause reversal detected: resolved prefix discarded, active complaint extracted: '{active_part[:60]}'", + matched_rules=matched_rules, + ) + + # ── Step 2: Check for proxy/third-party with active urgency ── + is_proxy = any(p.search(text) for p in PROXY_PATTERNS) + if is_proxy: + has_active_urgency = any(p.search(text) for p in PROXY_ACTIVE_URGENCY) + if has_active_urgency: + matched_rules.append("proxy_active_urgency") + return TemporalSignal( + processed_text=text, + original_text=original, + is_active_emergency=True, + temporal_tag="active", + confidence=0.85, + reason="Third-party report with active urgency — treat as emergency", + proxy_report=True, + matched_rules=matched_rules, + ) + + # ── Step 3: Check for intermittent symptoms with dangerous conditions ── + # Moved BEFORE past-tense analysis: "sometimes I have chest pain" should + # bias toward escalation regardless of temporal framing. + for p in INTERMITTENT_ACTIVE: + if p.search(text): + matched_rules.append("intermittent_dangerous") + return TemporalSignal( + processed_text=text, + original_text=original, + is_active_emergency=True, + temporal_tag="active", + confidence=0.75, + reason="Intermittent/recurring dangerous symptom — should escalate", + matched_rules=matched_rules, + ) + + # ── Step 4: Check for past-tense + still-active markers ── + has_past = any(p.search(text) for p in PAST_TENSE_PATTERNS) + has_still_active = any(p.search(text) for p in STILL_ACTIVE_PATTERNS) + has_resolved = any(p.search(text) for p in RESOLVED_PATTERNS) + + if has_past and has_still_active: + matched_rules.append("past_but_still_active") + return TemporalSignal( + processed_text=text, + original_text=original, + is_active_emergency=True, + temporal_tag="active", + confidence=0.85, + reason="Past-tense language detected BUT still-active markers present — active condition", + matched_rules=matched_rules, + ) + + # ── Step 5: Contrastive clause analysis ── + # When but/however/yet splits a sentence, prioritize the post-contrastive + # clause — contrast often reverses clinical polarity. + contrastive_match = CONTRASTIVE_MARKER.search(text) + if contrastive_match and has_past: + post_contrastive = text[contrastive_match.end():].strip() + # Check if post-contrastive clause contains resolution markers + post_has_resolved = any(p.search(post_contrastive) for p in RESOLVED_PATTERNS) + # Check if post-contrastive clause contains active markers + post_has_active = any(p.search(post_contrastive) for p in STILL_ACTIVE_PATTERNS) + + if post_has_active and not post_has_resolved: + # "I had chest pain yesterday but it's getting worse" → active + matched_rules.append("contrastive_post_active") + return TemporalSignal( + processed_text=text, + original_text=original, + is_active_emergency=True, + temporal_tag="active", + confidence=0.90, + reason=f"Contrastive clause reversal: post-contrastive is active — '{post_contrastive[:50]}'", + matched_rules=matched_rules, + ) + + if post_has_resolved and not post_has_active: + # "I had chest pain yesterday but I'm feeling better now" + # → resolved, but app.py enforces R2 minimum for R3 domains + matched_rules.append("contrastive_post_resolved") + return TemporalSignal( + processed_text=text, + original_text=original, + is_active_emergency=False, + temporal_tag="resolved", + confidence=0.80, + reason="Past symptom with contrastive resolution — resolved but warrants clinical follow-up", + matched_rules=matched_rules, + ) + + # ── Step 6: Past + explicit resolution (no contrastive) ── + if has_past and has_resolved and not has_still_active: + matched_rules.append("past_and_resolved") + return TemporalSignal( + processed_text=text, + original_text=original, + is_active_emergency=False, + temporal_tag="resolved", + confidence=0.80, + reason="Past-tense + resolution markers, no active signals — resolved but warrants follow-up", + matched_rules=matched_rules, + ) + + # ── Step 7: Past tense only — NO resolution evidence ── + # SAFETY: Past tense alone does NOT mean resolved. "I had chest pain + # yesterday" without saying they're better is a RED FLAG, not a reason + # to suppress. Tag as neutral and let the safety system handle it. + # Proxy reports are also NOT automatically suppressed — caregivers are + # authoritative reporters of acute symptoms. + if has_past and not has_still_active and not has_resolved: + matched_rules.append("past_no_resolution") + return TemporalSignal( + processed_text=text, + original_text=original, + is_active_emergency=False, + temporal_tag="neutral", + confidence=0.50, + reason="Past-tense language but NO resolution evidence — cannot confirm resolved", + proxy_report=is_proxy, + matched_rules=matched_rules, + ) + + # ── Step 8: No temporal signals detected — neutral ── + return TemporalSignal( + processed_text=text, + original_text=original, + is_active_emergency=False, + temporal_tag="neutral", + confidence=0.5, + reason="No temporal signals detected", + matched_rules=matched_rules, + ) diff --git a/streaming_intent/__init__.py b/streaming_intent/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..983c9a984e8085977a8e0ef6600aa9957c600ff7 --- /dev/null +++ b/streaming_intent/__init__.py @@ -0,0 +1,19 @@ +""" +Streaming Intent Router Module + +HMM-style belief updating for processing STT chunks with stable intent decisions. +""" + +from .tracker import StreamingIntentTracker, Decision, Chunk, DecisionMode +from .belief import BeliefUpdater, EmissionTransform +from .config import StreamingConfig + +__all__ = [ + "StreamingIntentTracker", + "Decision", + "Chunk", + "DecisionMode", + "BeliefUpdater", + "EmissionTransform", + "StreamingConfig", +] diff --git a/streaming_intent/belief.py b/streaming_intent/belief.py new file mode 100644 index 0000000000000000000000000000000000000000..48f2f2d7cfc4f9816a144f7836c28acd1487b4f8 --- /dev/null +++ b/streaming_intent/belief.py @@ -0,0 +1,300 @@ +""" +HMM Belief Updater for streaming intent classification. + +Implements Markov filtering in LOG-SPACE for numerical stability: +- Predict step: log_b_pred = logsumexp(log_T + log_b_prev) +- Update step: log_b = log_b_pred + log_emission - logsumexp(...) + +Supports multiple emission transforms for ablation: +- 'power': emission = (p + eps)^alpha (sharpening) +- 'temperature': emission = softmax(logits / T) +- 'isotonic': calibrated probabilities (requires calibrator) +- 'raw': pass-through neural posteriors +""" + +import numpy as np +from enum import Enum +from typing import Dict, Optional, Tuple, Callable +from .config import StreamingConfig + + +class EmissionTransform(Enum): + """Emission transform methods for ablation studies.""" + POWER = "power" # (p + eps)^alpha sharpening + TEMPERATURE = "temperature" # softmax(logits / T) + RAW = "raw" # Pass-through neural posteriors + ISOTONIC = "isotonic" # Calibrated (requires external calibrator) + + +def logsumexp(log_vec: np.ndarray) -> float: + """ + Numerically stable log-sum-exp. + + Edge cases: + - If all values are -inf, returns -inf (empty probability mass) + - If any value is +inf, returns +inf (handles numerical overflow gracefully) + """ + max_val = np.max(log_vec) + if np.isinf(max_val): + return max_val + return max_val + np.log(np.sum(np.exp(log_vec - max_val))) + + +def log_normalize(log_vec: np.ndarray) -> np.ndarray: + """Normalize log-probabilities to sum to 1 in probability space.""" + return log_vec - logsumexp(log_vec) + + +class BeliefUpdater: + """ + HMM-style belief state updater with log-space arithmetic. + + Maintains a probability distribution over intents and updates it + using transition dynamics and emission observations from neural model. + + All internal computations are done in log-space to prevent underflow + in long sequences. Probabilities are converted only for output. + + Supports ablation modes: + - use_hmm=False: Raw neural posteriors (no temporal smoothing) + - emission_transform: Different emission sharpening methods + """ + + def __init__( + self, + config: StreamingConfig, + use_hmm: bool = True, + emission_transform: EmissionTransform = EmissionTransform.POWER, + isotonic_calibrator: Optional[Callable] = None, + ): + """ + Initialize belief updater. + + Args: + config: Streaming configuration with intents, transitions, thresholds. + use_hmm: If False, bypass HMM and return raw neural posteriors. + emission_transform: Method for transforming neural outputs to emissions. + isotonic_calibrator: Optional calibrator function for ISOTONIC mode. + """ + self.config = config + self.n_intents = len(config.intents) + self.use_hmm = use_hmm + self.emission_transform = emission_transform + self.isotonic_calibrator = isotonic_calibrator + + # Initialize log-space belief + prior = config.get_prior_vector() + self.log_belief = np.log(prior + config.epsilon) + self.log_belief = log_normalize(self.log_belief) + + # Pre-compute log transition matrix + self.log_T = np.log(config.transition_matrix + config.epsilon) + + self._step_count = 0 + self._last_raw_probs: Optional[Dict[str, float]] = None + + def reset(self) -> None: + """Reset belief to prior distribution.""" + prior = self.config.get_prior_vector() + self.log_belief = np.log(prior + self.config.epsilon) + self.log_belief = log_normalize(self.log_belief) + self._step_count = 0 + self._last_raw_probs = None + + def predict(self) -> np.ndarray: + """ + Prediction step in log-space: propagate belief through transition matrix. + + log_b_pred[j] = logsumexp_i(log_T[i,j] + log_b[i]) + + Returns: + Log-space predicted belief state. + """ + log_b_pred = np.zeros(self.n_intents) + for j in range(self.n_intents): + # Sum over all previous states i: T[i,j] * b[i] + log_terms = self.log_T[:, j] + self.log_belief + log_b_pred[j] = logsumexp(log_terms) + + return log_normalize(log_b_pred) + + def compute_log_emission( + self, + neural_probs: Dict[str, float], + logits: Optional[Dict[str, float]] = None, + ) -> np.ndarray: + """ + Compute log-emission likelihood from neural network outputs. + + Supports multiple transform methods for ablation: + - POWER: log_emission = alpha * log(p + eps) + - TEMPERATURE: log_emission = logits / T - logsumexp(logits / T) + - RAW: log_emission = log(p + eps) + - ISOTONIC: log_emission = log(calibrate(p) + eps) + + Args: + neural_probs: Dict mapping intent names to probabilities. + logits: Optional dict of raw logits for temperature scaling. + + Returns: + Log-emission likelihood vector. + """ + log_emission = np.full(self.n_intents, np.log(self.config.epsilon)) + + if self.emission_transform == EmissionTransform.POWER: + # Power transform: sharpen probabilities + for intent, prob in neural_probs.items(): + if intent in self.config.intent_to_idx: + idx = self.config.intent_to_idx[intent] + log_emission[idx] = self.config.alpha * np.log(prob + self.config.epsilon) + + elif self.emission_transform == EmissionTransform.TEMPERATURE: + # Temperature scaling on logits + if logits is None: + # Fallback: invert softmax approximately + logits = {k: np.log(v + self.config.epsilon) for k, v in neural_probs.items()} + + temp = self.config.temperature + scaled_logits = np.full(self.n_intents, -np.inf) + for intent, logit in logits.items(): + if intent in self.config.intent_to_idx: + idx = self.config.intent_to_idx[intent] + scaled_logits[idx] = logit / temp + + log_emission = log_normalize(scaled_logits) + + elif self.emission_transform == EmissionTransform.RAW: + # Pass-through: no sharpening + for intent, prob in neural_probs.items(): + if intent in self.config.intent_to_idx: + idx = self.config.intent_to_idx[intent] + log_emission[idx] = np.log(prob + self.config.epsilon) + + elif self.emission_transform == EmissionTransform.ISOTONIC: + # Isotonic calibration + if self.isotonic_calibrator is not None: + calibrated = self.isotonic_calibrator(neural_probs) + for intent, prob in calibrated.items(): + if intent in self.config.intent_to_idx: + idx = self.config.intent_to_idx[intent] + log_emission[idx] = np.log(prob + self.config.epsilon) + else: + # Fallback to raw if no calibrator + for intent, prob in neural_probs.items(): + if intent in self.config.intent_to_idx: + idx = self.config.intent_to_idx[intent] + log_emission[idx] = np.log(prob + self.config.epsilon) + + return log_emission + + def update( + self, + neural_probs: Dict[str, float], + logits: Optional[Dict[str, float]] = None, + ) -> np.ndarray: + """ + Full belief update in log-space. + + If use_hmm=True: + 1. log_b_pred = predict() (transition dynamics) + 2. log_emission = compute_log_emission(neural_probs) + 3. log_b = normalize(log_b_pred + log_emission) + + If use_hmm=False (ablation mode): + Directly use neural posteriors as belief. + + Args: + neural_probs: Dict mapping intent names to probabilities from neural model. + logits: Optional dict of raw logits for temperature scaling. + + Returns: + Updated belief state (in probability space). + """ + self._last_raw_probs = neural_probs.copy() + + if not self.use_hmm: + # Ablation: bypass HMM, use raw neural posteriors + for intent, prob in neural_probs.items(): + if intent in self.config.intent_to_idx: + idx = self.config.intent_to_idx[intent] + self.log_belief[idx] = np.log(prob + self.config.epsilon) + self.log_belief = log_normalize(self.log_belief) + self._step_count += 1 + return self.belief + + # Predict step + log_b_pred = self.predict() + + # Compute log-emission likelihood + log_emission = self.compute_log_emission(neural_probs, logits) + + # Update step: element-wise addition in log-space and normalize + log_b_updated = log_b_pred + log_emission + self.log_belief = log_normalize(log_b_updated) + self._step_count += 1 + + return self.belief + + def update_with_log_emission(self, log_emission: np.ndarray) -> np.ndarray: + """ + Update belief with pre-computed log-emission vector. + + Args: + log_emission: Pre-computed log-emission likelihood vector. + + Returns: + Updated belief state (in probability space). + """ + if not self.use_hmm: + self.log_belief = log_normalize(log_emission) + self._step_count += 1 + return self.belief + + log_b_pred = self.predict() + log_b_updated = log_b_pred + log_emission + self.log_belief = log_normalize(log_b_updated) + self._step_count += 1 + return self.belief + + @property + def belief(self) -> np.ndarray: + """Get current belief in probability space.""" + return np.exp(self.log_belief) + + def get_belief_dict(self) -> Dict[str, float]: + """Get current belief as dictionary.""" + probs = self.belief + return { + self.config.idx_to_intent[i]: float(probs[i]) + for i in range(self.n_intents) + } + + def get_top_intent(self) -> Tuple[str, float]: + """Get intent with highest belief probability.""" + probs = self.belief + idx = int(np.argmax(probs)) + return self.config.idx_to_intent[idx], float(probs[idx]) + + def get_intent_prob(self, intent: str) -> float: + """Get belief probability for specific intent.""" + if intent in self.config.intent_to_idx: + idx = self.config.intent_to_idx[intent] + return float(np.exp(self.log_belief[idx])) + return 0.0 + + def get_log_belief(self) -> np.ndarray: + """Get current log-belief (for debugging/analysis).""" + return self.log_belief.copy() + + def get_last_raw_probs(self) -> Optional[Dict[str, float]]: + """Get last raw neural probabilities (before HMM filtering).""" + return self._last_raw_probs + + @property + def step_count(self) -> int: + """Number of update steps performed.""" + return self._step_count + + def is_normalized(self, tol: float = 1e-6) -> bool: + """Check if belief state is properly normalized.""" + return abs(self.belief.sum() - 1.0) < tol diff --git a/streaming_intent/config.py b/streaming_intent/config.py new file mode 100644 index 0000000000000000000000000000000000000000..d54f52cbb1d33322496869edfbd277db4884a7e7 --- /dev/null +++ b/streaming_intent/config.py @@ -0,0 +1,172 @@ +""" +Configuration loader for streaming intent router. +""" + +import os +from pathlib import Path +from typing import Dict, List, Optional +from dataclasses import dataclass, field + +import yaml +import numpy as np + + +@dataclass +class StreamingConfig: + """Configuration for streaming intent router.""" + + intents: List[str] = field(default_factory=list) + prior: Dict[str, float] = field(default_factory=dict) + transition_matrix: np.ndarray = field(default_factory=lambda: np.array([])) + intent_to_idx: Dict[str, int] = field(default_factory=dict) + idx_to_intent: Dict[int, str] = field(default_factory=dict) + + # Emission parameters + alpha: float = 1.5 + epsilon: float = 1e-8 + + # Decision thresholds + theta_hi: float = 0.85 + theta_med: float = 0.60 + theta_lock: float = 0.70 + K: int = 3 + + # Window parameters + max_tokens: int = 64 + max_tokens_limit: int = 128 + + # Debounce parameters + debounce_ms: int = 150 + min_change_chars: int = 3 + + # Model parameters + model_max_length: int = 48 + + # Emission temperature (for temperature scaling transform) + temperature: float = 1.0 + + # SPRT parameters + sprt_alpha: float = 0.05 + sprt_beta: float = 0.10 + sprt_p0: float = 0.20 + sprt_p1: float = 0.60 + + @classmethod + def from_yaml(cls, path: Optional[str] = None) -> "StreamingConfig": + """Load configuration from YAML file.""" + if path is None: + path = Path(__file__).parent.parent / "config" / "streaming_intent.yaml" + + with open(path, "r") as f: + data = yaml.safe_load(f) + + config = cls() + config.intents = data.get("intents", []) + config.prior = data.get("prior", {}) + + # Build intent index mappings + config.intent_to_idx = {intent: i for i, intent in enumerate(config.intents)} + config.idx_to_intent = {i: intent for i, intent in enumerate(config.intents)} + + # Build transition matrix as numpy array + n = len(config.intents) + config.transition_matrix = np.zeros((n, n)) + trans_dict = data.get("transition_matrix", {}) + for from_intent, to_probs in trans_dict.items(): + if from_intent in config.intent_to_idx: + i = config.intent_to_idx[from_intent] + for to_intent, prob in to_probs.items(): + if to_intent in config.intent_to_idx: + j = config.intent_to_idx[to_intent] + config.transition_matrix[i, j] = prob + + # Normalize rows (ensure they sum to 1) + row_sums = config.transition_matrix.sum(axis=1, keepdims=True) + row_sums[row_sums == 0] = 1 # Avoid division by zero + config.transition_matrix = config.transition_matrix / row_sums + + # Emission parameters + emission = data.get("emission", {}) + config.alpha = emission.get("alpha", 1.5) + config.epsilon = emission.get("epsilon", 1e-8) + + # Decision thresholds + thresholds = data.get("thresholds", {}) + config.theta_hi = thresholds.get("theta_hi", 0.85) + config.theta_med = thresholds.get("theta_med", 0.60) + config.theta_lock = thresholds.get("theta_lock", 0.70) + config.K = thresholds.get("K", 3) + + # Window parameters + window = data.get("window", {}) + config.max_tokens = window.get("max_tokens", 64) + config.max_tokens_limit = window.get("max_tokens_limit", 128) + + # Debounce parameters + debounce = data.get("debounce", {}) + config.debounce_ms = debounce.get("debounce_ms", 150) + config.min_change_chars = debounce.get("min_change_chars", 3) + + # Model parameters + model = data.get("model", {}) + config.model_max_length = model.get("max_length", 64) + + # SPRT parameters + sprt = data.get("sprt", {}) + config.sprt_alpha = sprt.get("alpha", 0.05) + config.sprt_beta = sprt.get("beta", 0.10) + config.sprt_p0 = sprt.get("p0", 0.20) + config.sprt_p1 = sprt.get("p1", 0.60) + + # Emission temperature + config.temperature = emission.get("temperature", 1.0) + + # Validate configuration + if not config.intents: + raise ValueError( + f"No intents found in config file: {path}. " + "The 'intents' list must contain at least one intent." + ) + + return config + + def get_prior_vector(self) -> np.ndarray: + """Get prior distribution as numpy array.""" + if not self.intents: + raise ValueError( + "Cannot compute prior vector: intents list is empty. " + "Ensure streaming_intent.yaml contains valid intent definitions." + ) + + prior = np.zeros(len(self.intents)) + for intent, prob in self.prior.items(): + if intent in self.intent_to_idx: + prior[self.intent_to_idx[intent]] = prob + + # Normalize + if prior.sum() > 0: + prior = prior / prior.sum() + else: + # Fallback to uniform distribution + prior = np.ones(len(self.intents)) / len(self.intents) + return prior + + def save_transition_matrix(self, path: Optional[str] = None) -> None: + """Save current transition matrix back to config file.""" + if path is None: + path = Path(__file__).parent.parent / "config" / "streaming_intent.yaml" + + with open(path, "r") as f: + data = yaml.safe_load(f) + + # Update transition matrix in data + trans_dict = {} + for i, from_intent in enumerate(self.intents): + trans_dict[from_intent] = {} + for j, to_intent in enumerate(self.intents): + trans_dict[from_intent][to_intent] = float(self.transition_matrix[i, j]) + + data["transition_matrix"] = trans_dict + + with open(path, "w") as f: + yaml.dump(data, f, default_flow_style=False, sort_keys=False) diff --git a/streaming_intent/metrics.py b/streaming_intent/metrics.py new file mode 100644 index 0000000000000000000000000000000000000000..c97aa950d50dbc4993e691b547c965ccab0a9f7e --- /dev/null +++ b/streaming_intent/metrics.py @@ -0,0 +1,196 @@ +""" +Metrics counters for streaming intent tracking. + +Tracks escalation frequency, gray zone hits, decision timing, and near-misses. +Thread-safe for use in concurrent request handling. + +Near-miss tracking: +- Cases where escalation probability exceeded threshold but never committed +- Critical for operational monitoring and safety validation +""" + +import threading +import time +import numpy as np +from dataclasses import dataclass, field +from typing import Dict, Any, List, Optional, Tuple +from collections import defaultdict + + +@dataclass +class MetricsCounter: + """ + Thread-safe metrics tracking for streaming intent router. + + Tracks: + - Total steps processed + - Escalation count and rate + - Gray zone hits (neither escalate nor commit) + - Average steps to decision + - Intent commitment distribution + - Time-to-escalation distribution (percentiles) + - Near-miss rate and peak probabilities + """ + + total_steps: int = 0 + escalation_count: int = 0 + gray_zone_count: int = 0 + commitment_count: int = 0 + commitment_by_intent: Dict[str, int] = field(default_factory=lambda: defaultdict(int)) + steps_to_escalation: List[int] = field(default_factory=list) + steps_to_commitment: List[int] = field(default_factory=list) + _current_session_steps: int = 0 + _session_count: int = 0 + _lock: threading.Lock = field(default_factory=threading.Lock) + + # Near-miss tracking + near_miss_count: int = 0 + near_miss_peak_probs: List[float] = field(default_factory=list) + + # Time-to-escalation in milliseconds (for distribution analysis) + escalation_latencies_ms: List[float] = field(default_factory=list) + _session_start_time_ms: float = 0.0 + + def record_step(self) -> None: + """Record a processing step (thread-safe).""" + with self._lock: + self.total_steps += 1 + self._current_session_steps += 1 + + def record_escalation(self) -> None: + """Record an escalation event (thread-safe).""" + with self._lock: + self.escalation_count += 1 + self.steps_to_escalation.append(self._current_session_steps) + + # Record time-to-escalation + if self._session_start_time_ms > 0: + latency_ms = time.time() * 1000 - self._session_start_time_ms + self.escalation_latencies_ms.append(latency_ms) + + def record_commitment(self, intent: str) -> None: + """Record an intent commitment (thread-safe).""" + with self._lock: + self.commitment_count += 1 + self.commitment_by_intent[intent] += 1 + self.steps_to_commitment.append(self._current_session_steps) + + def record_gray_zone(self) -> None: + """Record a gray zone hit (no decision made) (thread-safe).""" + with self._lock: + self.gray_zone_count += 1 + + def record_near_miss(self, peak_prob: float) -> None: + """ + Record a near-miss event (thread-safe). + + A near-miss is when escalation probability exceeded threshold + at some point but escalation was never triggered. + + Args: + peak_prob: Peak escalation probability observed in session. + """ + with self._lock: + self.near_miss_count += 1 + self.near_miss_peak_probs.append(peak_prob) + + def start_session(self) -> None: + """Start a new tracking session (thread-safe).""" + with self._lock: + self._current_session_steps = 0 + self._session_count += 1 + self._session_start_time_ms = time.time() * 1000 + + def reset(self) -> None: + """Reset all counters (thread-safe).""" + with self._lock: + self.total_steps = 0 + self.escalation_count = 0 + self.gray_zone_count = 0 + self.commitment_count = 0 + self.commitment_by_intent = defaultdict(int) + self.steps_to_escalation = [] + self.steps_to_commitment = [] + self._current_session_steps = 0 + self._session_count = 0 + # Reset near-miss tracking + self.near_miss_count = 0 + self.near_miss_peak_probs = [] + # Reset time-to-escalation tracking + self.escalation_latencies_ms = [] + self._session_start_time_ms = 0.0 + + def _compute_percentiles(self, data: List[float], percentiles: Optional[List[int]] = None) -> Dict[str, float]: + """Compute percentiles for a list of values.""" + if percentiles is None: + percentiles = [50, 90, 95, 99] + if not data: + return {f"p{p}": 0.0 for p in percentiles} + arr = np.array(data) + return {f"p{p}": float(np.percentile(arr, p)) for p in percentiles} + + def get_summary(self) -> Dict[str, Any]: + """Get metrics summary (thread-safe).""" + with self._lock: + total_decisions = self.escalation_count + self.commitment_count + + avg_steps_to_escalation = ( + sum(self.steps_to_escalation) / len(self.steps_to_escalation) + if self.steps_to_escalation else 0.0 + ) + avg_steps_to_commitment = ( + sum(self.steps_to_commitment) / len(self.steps_to_commitment) + if self.steps_to_commitment else 0.0 + ) + + # Time-to-escalation distribution + escalation_latency_distribution = self._compute_percentiles( + self.escalation_latencies_ms + ) + + # Near-miss statistics + near_miss_rate = ( + self.near_miss_count / self._session_count + if self._session_count > 0 else 0.0 + ) + avg_near_miss_peak = ( + sum(self.near_miss_peak_probs) / len(self.near_miss_peak_probs) + if self.near_miss_peak_probs else 0.0 + ) + + return { + "total_steps": self.total_steps, + "total_sessions": self._session_count, + "escalation_count": self.escalation_count, + "escalation_rate": ( + self.escalation_count / total_decisions if total_decisions > 0 else 0.0 + ), + "commitment_count": self.commitment_count, + "commitment_by_intent": dict(self.commitment_by_intent), + "gray_zone_count": self.gray_zone_count, + "gray_zone_rate": ( + self.gray_zone_count / self.total_steps if self.total_steps > 0 else 0.0 + ), + "avg_steps_to_escalation": avg_steps_to_escalation, + "avg_steps_to_commitment": avg_steps_to_commitment, + "avg_steps_to_decision": ( + (sum(self.steps_to_escalation) + sum(self.steps_to_commitment)) / + max(1, len(self.steps_to_escalation) + len(self.steps_to_commitment)) + ), + # Time-to-escalation distribution (ms) + "escalation_latency_ms": escalation_latency_distribution, + # Near-miss metrics + "near_miss_count": self.near_miss_count, + "near_miss_rate": near_miss_rate, + "near_miss_avg_peak_prob": avg_near_miss_peak, + } + + def __repr__(self) -> str: + summary = self.get_summary() + return ( + f"MetricsCounter(" + f"steps={summary['total_steps']}, " + f"escalations={summary['escalation_count']}, " + f"commitments={summary['commitment_count']}, " + f"gray_zone={summary['gray_zone_count']})" + ) diff --git a/streaming_intent/tracker.py b/streaming_intent/tracker.py new file mode 100644 index 0000000000000000000000000000000000000000..b607e39a7400cd6546e0fc31eb064558d0da4154 --- /dev/null +++ b/streaming_intent/tracker.py @@ -0,0 +1,510 @@ +""" +Streaming Intent Tracker with HMM belief updating and SPRT stopping rules. + +Maintains rolling text window, debounce logic, and statistically-principled +decision rules using Sequential Probability Ratio Test (SPRT). + +Key features: +- Log-space HMM belief filtering (numerical stability) +- SPRT-based escalation decisions (explicit error rate bounds) +- Near-miss tracking for operational monitoring +- Ablation support for comparing decision strategies +""" + +import time +import math +from dataclasses import dataclass, field +from typing import Dict, List, Optional, Callable, Any, Tuple +from collections import deque +from enum import Enum + +import numpy as np + +from .config import StreamingConfig +from .belief import BeliefUpdater, EmissionTransform +from .metrics import MetricsCounter + + +class DecisionMode(Enum): + """Decision rule strategies for ablation studies.""" + K_CONSECUTIVE = "k_consecutive" # Original: K steps above threshold + SPRT = "sprt" # Sequential Probability Ratio Test + HYBRID = "hybrid" # SPRT + K-consecutive fallback + + +@dataclass +class Chunk: + """Input chunk from STT system.""" + text: str + is_final: bool = False + timestamp_ms: Optional[int] = None + + +@dataclass +class Decision: + """Output decision from tracker.""" + current_belief: Dict[str, float] + top_intent: str + top_intent_prob: float + should_escalate: bool + should_commit: bool + committed_intent: Optional[str] + escalation_reason: Optional[str] = None + step_latency_ms: float = 0.0 + step_count: int = 0 + window_text: str = "" + # SPRT diagnostics + sprt_llr: Optional[float] = None # Log-likelihood ratio + sprt_upper_bound: Optional[float] = None # Upper decision boundary + sprt_lower_bound: Optional[float] = None # Lower decision boundary + + +class StreamingIntentTracker: + """ + Streaming intent classifier with HMM-style belief updating and SPRT decisions. + + Features: + - Rolling window of recent text (max_tokens configurable) + - Debounce logic to prevent thrashing on partial updates + - SPRT-based decision rules with explicit error rate bounds + - Near-miss tracking for operational monitoring + - Ablation support (use_hmm, decision_mode, emission_transform) + + SPRT (Sequential Probability Ratio Test): + Tests H0: P(ESCALATION) = p0 vs H1: P(ESCALATION) = p1 + - Upper boundary A = log((1-beta)/alpha) → decide H1 (escalate) + - Lower boundary B = log(beta/(1-alpha)) → decide H0 (don't escalate) + - Continue if B < LLR < A + + Usage: + tracker = StreamingIntentTracker(model_fn=my_inference) + + for chunk in stt_stream: + decision = tracker.update(chunk) + if decision.should_escalate: + handle_escalation() + elif decision.should_commit: + handle_intent(decision.committed_intent) + """ + + def __init__( + self, + config: Optional[StreamingConfig] = None, + model_fn: Optional[Callable[[str], Dict[str, float]]] = None, + config_path: Optional[str] = None, + use_hmm: bool = True, + decision_mode: DecisionMode = DecisionMode.HYBRID, + emission_transform: EmissionTransform = EmissionTransform.POWER, + # SPRT parameter overrides (None = use config values) + sprt_alpha: Optional[float] = None, + sprt_beta: Optional[float] = None, + sprt_p0: Optional[float] = None, + sprt_p1: Optional[float] = None, + ): + """ + Initialize streaming intent tracker. + + Args: + config: StreamingConfig instance (loads default if None) + model_fn: Function that takes text and returns intent probabilities. + config_path: Path to config YAML (used if config is None) + use_hmm: If False, bypass HMM filtering (ablation mode). + decision_mode: K_CONSECUTIVE, SPRT, or HYBRID. + emission_transform: How to transform neural outputs. + sprt_alpha: Target false escalation rate (overrides config). + sprt_beta: Target missed escalation rate (overrides config). + sprt_p0: Null hypothesis escalation probability (overrides config). + sprt_p1: Alternative hypothesis escalation probability (overrides config). + """ + if config is None: + self.config = StreamingConfig.from_yaml(config_path) + else: + self.config = config + + self.model_fn = model_fn + self.use_hmm = use_hmm + self.decision_mode = decision_mode + + # Initialize belief updater with ablation options + self.belief_updater = BeliefUpdater( + self.config, + use_hmm=use_hmm, + emission_transform=emission_transform, + ) + self.metrics = MetricsCounter() + + # SPRT parameters (use config values, allow overrides) + self.sprt_alpha = sprt_alpha if sprt_alpha is not None else self.config.sprt_alpha + self.sprt_beta = sprt_beta if sprt_beta is not None else self.config.sprt_beta + self.sprt_p0 = sprt_p0 if sprt_p0 is not None else self.config.sprt_p0 + self.sprt_p1 = sprt_p1 if sprt_p1 is not None else self.config.sprt_p1 + + # Compute SPRT boundaries (Wald's approximation) + # A = log((1-beta)/alpha) - upper boundary → escalate + # B = log(beta/(1-alpha)) - lower boundary → don't escalate + self.sprt_upper_bound = math.log((1 - self.sprt_beta) / self.sprt_alpha) + self.sprt_lower_bound = math.log(self.sprt_beta / (1 - self.sprt_alpha)) + + # State + self._text_buffer: List[str] = [] + self._window_text: str = "" + self._top_intent_history: deque = deque(maxlen=self.config.K + 5) + self._escalation_history: deque = deque(maxlen=self.config.K + 5) + self._last_update_ms: int = 0 + self._last_text_hash: int = 0 + self._committed: bool = False + self._committed_intent: Optional[str] = None + self._escalated: bool = False + + # SPRT state + self._sprt_llr: float = 0.0 # Cumulative log-likelihood ratio + + # Near-miss tracking + self._peak_escalation_prob: float = 0.0 + self._near_miss_threshold: float = self.config.theta_med + + def reset(self) -> None: + """Reset tracker state for new conversation.""" + # Track near-miss BEFORE reset (only if we actually processed data) + had_data = self.belief_updater.step_count > 0 + if had_data: + if self._peak_escalation_prob >= self._near_miss_threshold and not self._escalated: + self.metrics.record_near_miss(self._peak_escalation_prob) + + # Now reset all state + self.belief_updater.reset() + self._text_buffer = [] + self._window_text = "" + self._top_intent_history.clear() + self._escalation_history.clear() + self._last_update_ms = 0 + self._last_text_hash = 0 + self._committed = False + self._committed_intent = None + self._escalated = False + + # Reset SPRT state + self._sprt_llr = 0.0 + self._peak_escalation_prob = 0.0 + + self.metrics.start_session() + + def update(self, chunk: Chunk) -> Decision: + """ + Process a chunk and return decision. + + Args: + chunk: Input chunk with text, is_final flag, and optional timestamp. + + Returns: + Decision with current belief, escalation status, and commitment status. + """ + start_time = time.perf_counter() + + # Get current timestamp + current_ms = chunk.timestamp_ms or int(time.time() * 1000) + + # Check debounce conditions + if not self._should_update(chunk, current_ms): + # Return current state without update + top_intent, top_prob = self.belief_updater.get_top_intent() + return Decision( + current_belief=self.belief_updater.get_belief_dict(), + top_intent=top_intent, + top_intent_prob=top_prob, + should_escalate=self._escalated, + should_commit=self._committed, + committed_intent=self._committed_intent, + step_latency_ms=0.0, + step_count=self.belief_updater.step_count, + window_text=self._window_text, + ) + + # Update text buffer and window + self._update_text_buffer(chunk) + + # Run model inference + if self.model_fn is None: + raise ValueError("model_fn must be set before calling update()") + + drivehealthbert_probs = self.model_fn(self._window_text) + + # Update belief state + self.belief_updater.update(drivehealthbert_probs) + + # Track history + top_intent, top_prob = self.belief_updater.get_top_intent() + self._top_intent_history.append(top_intent) + + escalation_prob = self.belief_updater.get_intent_prob("ESCALATION") + self._escalation_history.append(escalation_prob) + + # Update timestamps + self._last_update_ms = current_ms + self._last_text_hash = hash(self._window_text) + + # Make decisions + should_escalate, escalation_reason = self._check_escalation() + should_commit, committed_intent = self._check_commitment(top_intent, top_prob) + + # Update metrics + self.metrics.record_step() + if should_escalate and not self._escalated: + self.metrics.record_escalation() + self._escalated = True + if should_commit and not self._committed: + self.metrics.record_commitment(committed_intent) + self._committed = True + self._committed_intent = committed_intent + + # Check gray zone + if not should_escalate and not should_commit: + self.metrics.record_gray_zone() + + elapsed_ms = (time.perf_counter() - start_time) * 1000 + + return Decision( + current_belief=self.belief_updater.get_belief_dict(), + top_intent=top_intent, + top_intent_prob=top_prob, + should_escalate=should_escalate or self._escalated, + should_commit=should_commit or self._committed, + committed_intent=self._committed_intent if (should_commit or self._committed) else None, + escalation_reason=escalation_reason, + step_latency_ms=elapsed_ms, + step_count=self.belief_updater.step_count, + window_text=self._window_text, + # SPRT diagnostics + sprt_llr=self._sprt_llr, + sprt_upper_bound=self.sprt_upper_bound, + sprt_lower_bound=self.sprt_lower_bound, + ) + + def _should_update(self, chunk: Chunk, current_ms: int) -> bool: + """Check if we should process this chunk (debounce logic).""" + # Always update on final segments + if chunk.is_final: + return True + + # Check time-based debounce + elapsed = current_ms - self._last_update_ms + if elapsed < self.config.debounce_ms: + return False + + # Check if text changed significantly + new_text = self._compute_window_text(chunk.text) + text_change = abs(len(new_text) - len(self._window_text)) + if text_change < self.config.min_change_chars: + # Also check hash for content changes + if hash(new_text) == self._last_text_hash: + return False + + return True + + def _update_text_buffer(self, chunk: Chunk) -> None: + """Update text buffer and compute rolling window.""" + if chunk.is_final: + # Final segment - append to buffer + self._text_buffer.append(chunk.text) + else: + # Partial - replace last entry if buffer not empty, otherwise append + if self._text_buffer: + self._text_buffer[-1] = chunk.text + else: + self._text_buffer.append(chunk.text) + + self._window_text = self._compute_window_text() + + def _compute_window_text(self, pending_text: str = "") -> str: + """Compute rolling window text (last N tokens).""" + # Combine buffer with pending text + full_text = " ".join(self._text_buffer) + if pending_text: + full_text = full_text + " " + pending_text if full_text else pending_text + + # Simple token approximation: split on whitespace + tokens = full_text.split() + + # Keep last max_tokens + max_tokens = min(self.config.max_tokens, self.config.max_tokens_limit) + if len(tokens) > max_tokens: + tokens = tokens[-max_tokens:] + + return " ".join(tokens) + + def _update_sprt(self, escalation_prob: float) -> None: + """ + Update SPRT log-likelihood ratio. + + LLR_n = LLR_{n-1} + log(P(x|H1) / P(x|H0)) + + For continuous probability observations, we use a Bernoulli likelihood + where the observation is treated as a soft indicator: + LLR contribution = p * log(p1/p0) + (1-p) * log((1-p1)/(1-p0)) + + This is equivalent to expected log-likelihood ratio under the + observed probability distribution. + """ + eps = 1e-10 + + # Bernoulli log-likelihood ratio with soft observation + # This correctly handles the full [0,1] range of escalation_prob + log_ratio_escalate = math.log((self.sprt_p1 + eps) / (self.sprt_p0 + eps)) + log_ratio_no_escalate = math.log((1 - self.sprt_p1 + eps) / (1 - self.sprt_p0 + eps)) + + # Expected LLR contribution = p * log(p1/p0) + (1-p) * log((1-p1)/(1-p0)) + llr_contribution = ( + escalation_prob * log_ratio_escalate + + (1 - escalation_prob) * log_ratio_no_escalate + ) + + self._sprt_llr += llr_contribution + + def _check_escalation_sprt(self) -> Tuple[bool, Optional[str]]: + """ + Check escalation using SPRT (Sequential Probability Ratio Test). + + Decision boundaries (Wald's approximation): + - Upper: A = log((1-beta)/alpha) → decide H1 (escalate) + - Lower: B = log(beta/(1-alpha)) → decide H0 (don't escalate) + + Returns: + (should_escalate, reason) + """ + if self._sprt_llr >= self.sprt_upper_bound: + return True, f"sprt_upper_bound_crossed_llr_{self._sprt_llr:.3f}" + + # Note: we don't use lower bound to "commit" to non-escalation + # because safety requires we keep checking until conversation ends + return False, None + + def _check_escalation_k_consecutive(self, escalation_prob: float) -> Tuple[bool, Optional[str]]: + """ + Check escalation using K-consecutive rule (original method). + + Rules: + 1. Immediate if belief[ESCALATION] >= theta_hi + 2. Escalate if belief[ESCALATION] >= theta_med for K consecutive steps + + Returns: + (should_escalate, reason) + """ + # Rule 1: Immediate escalation + if escalation_prob >= self.config.theta_hi: + return True, f"immediate_high_prob_{escalation_prob:.3f}" + + # Rule 2: Consecutive steps above theta_med + if len(self._escalation_history) >= self.config.K: + recent = list(self._escalation_history)[-self.config.K:] + if all(p >= self.config.theta_med for p in recent): + return True, f"consecutive_{self.config.K}_steps_above_theta_med" + + return False, None + + def _check_escalation(self) -> Tuple[bool, Optional[str]]: + """ + Check escalation decision rules based on decision_mode. + + Modes: + - K_CONSECUTIVE: Original threshold-based rules + - SPRT: Sequential Probability Ratio Test only + - HYBRID: SPRT with K-consecutive as fast-path fallback + + Returns: + (should_escalate, reason) + """ + if self._escalated: + return True, "previously_escalated" + + escalation_prob = self.belief_updater.get_intent_prob("ESCALATION") + + # Track peak for near-miss detection + self._peak_escalation_prob = max(self._peak_escalation_prob, escalation_prob) + + # Update SPRT state + self._update_sprt(escalation_prob) + + if self.decision_mode == DecisionMode.K_CONSECUTIVE: + return self._check_escalation_k_consecutive(escalation_prob) + + elif self.decision_mode == DecisionMode.SPRT: + return self._check_escalation_sprt() + + elif self.decision_mode == DecisionMode.HYBRID: + # Fast-path: immediate high probability (K-consecutive rule 1) + if escalation_prob >= self.config.theta_hi: + return True, f"hybrid_immediate_high_prob_{escalation_prob:.3f}" + + # SPRT for statistical rigor + sprt_result, sprt_reason = self._check_escalation_sprt() + if sprt_result: + return True, f"hybrid_{sprt_reason}" + + # Fallback: K-consecutive as safety net + k_result, k_reason = self._check_escalation_k_consecutive(escalation_prob) + if k_result: + return True, f"hybrid_{k_reason}" + + return False, None + + # Default fallback + return self._check_escalation_k_consecutive(escalation_prob) + + def _check_commitment(self, top_intent: str, top_prob: float) -> Tuple[bool, Optional[str]]: + """ + Check non-escalation intent commitment rules. + + Rules: + - Commit only if top_prob >= theta_lock AND stable top intent for K steps + + Returns: + (should_commit, committed_intent) + """ + if self._committed: + return True, self._committed_intent + + # Don't commit to ESCALATION through this path + if top_intent == "ESCALATION": + return False, None + + # Check probability threshold + if top_prob < self.config.theta_lock: + return False, None + + # Check stability: same top intent for K steps + if len(self._top_intent_history) < self.config.K: + return False, None + + recent = list(self._top_intent_history)[-self.config.K:] + if all(intent == top_intent for intent in recent): + return True, top_intent + + return False, None + + def get_metrics(self) -> Dict[str, Any]: + """Get current metrics.""" + return self.metrics.get_summary() + + def set_model_fn(self, model_fn: Callable[[str], Dict[str, float]]) -> None: + """Set or update the model inference function.""" + self.model_fn = model_fn + + @property + def window_text(self) -> str: + """Current rolling window text.""" + return self._window_text + + @property + def belief(self) -> Dict[str, float]: + """Current belief state.""" + return self.belief_updater.get_belief_dict() + + @property + def is_committed(self) -> bool: + """Whether a final intent has been committed.""" + return self._committed + + @property + def is_escalated(self) -> bool: + """Whether escalation has been triggered.""" + return self._escalated