diff --git a/examples/BuddyBert/bert-main.cpp b/examples/BuddyBert/bert-main.cpp index c75ea9d8a9..d3f0075491 100644 --- a/examples/BuddyBert/bert-main.cpp +++ b/examples/BuddyBert/bert-main.cpp @@ -93,7 +93,7 @@ int main() { /// Execute forward inference of the model. _mlir_ciface_forward(&result, &arg0, &arg1, &pureStrContainer, - &attention_mask, &token_type_ids); + &token_type_ids, &attention_mask); const auto inferenceEnd = std::chrono::high_resolution_clock::now(); const std::chrono::duration inferenceTime = diff --git a/examples/BuddyLeNet/CMakeLists.txt b/examples/BuddyLeNet/CMakeLists.txt index b765218c68..d460d0e345 100644 --- a/examples/BuddyLeNet/CMakeLists.txt +++ b/examples/BuddyLeNet/CMakeLists.txt @@ -57,6 +57,62 @@ SET_TARGET_PROPERTIES(LENET PROPERTIES LINKER_LANGUAGE C) add_executable(buddy-lenet-run buddy-lenet-main.cpp) target_link_directories(buddy-lenet-run PRIVATE ${LLVM_LIBRARY_DIR}) -set(BUDDY_LENET_LIBS LENET mlir_c_runner_utils ${PNG_LIBRARIES}) +if(NOT DEFINED BUDDY_ENABLE_PNG) + message(FATAL_ERROR "To run LeNet inference, the png library is required. Please define BUDDY_ENABLE_PNG for CMake.") +endif() +set(BUDDY_LENET_LIBS LENET mlir_c_runner_utils mlir_async_runtime mlir_runner_utils ${PNG_LIBRARIES}) target_link_libraries(buddy-lenet-run ${BUDDY_LENET_LIBS}) + +set(ONE_SHOT_BUFFERIZE_OPTION "bufferize-function-boundaries=1 function-boundary-type-conversion=identity-layout-map") +set(LOWER_TO_NVVM_OPTION "cubin-chip=sm_80 cubin-features=+ptx71 cubin-format=fatbin") +set(CONVERT_MEMCPY_TO_GPU_OPTION "process-args=1") +set(CONVERT_MEMCPY_TO_GPU_OPTION_DISABLE_PROCESS_ARG "process-args=0") + +add_custom_command( + OUTPUT forward_gpu.o + COMMAND ${BUDDY_BINARY_DIR}/buddy-opt ${BUDDY_EXAMPLES_DIR}/BuddyLeNet/forward.mlir + -buffer-deallocation + -canonicalize -cse -expand-strided-metadata -convert-memcpy-to-gpu -gpu-async-region | + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -llvm-request-c-wrappers --gpu-to-llvm | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${BUDDY_BINARY_DIR}/../examples/BuddyLeNet/forward_gpu.o + DEPENDS ${BUDDY_EXAMPLES_DIR}/BuddyLeNet/forward.mlir + COMMENT "Building forward_gpu.o" + VERBATIM) + +add_custom_command( + OUTPUT subgraph0_gpu.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyLeNet/subgraph0.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith))" | + ${BUDDY_BINARY_DIR}/buddy-opt + -one-shot-bufferize + -func-bufferize-dynamic-offset + -convert-linalg-to-parallel-loops + -canonicalize + -gpu-map-parallel-loops + -convert-parallel-loops-to-gpu + -gpu-kernel-outlining + -buffer-deallocation + -canonicalize + -cse | + ${BUDDY_BINARY_DIR}/buddy-opt -convert-memcpy-to-gpu=${CONVERT_MEMCPY_TO_GPU_OPTION_DISABLE_PROCESS_ARG} -gpu-async-region -canonicalize | + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt -llvm-request-c-wrappers --test-lower-to-nvvm=${LOWER_TO_NVVM_OPTION} | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O0 -o ${BUDDY_BINARY_DIR}/../examples/BuddyLeNet/subgraph0_gpu.o + DEPENDS ${BUDDY_EXAMPLES_DIR}/BuddyLeNet/subgraph0.mlir + COMMENT "Building subgraph0_gpu.o" + VERBATIM) + +add_library(LENET_GPU STATIC subgraph0_gpu.o forward_gpu.o) + +SET_TARGET_PROPERTIES(LENET_GPU PROPERTIES LINKER_LANGUAGE C) + +add_executable(buddy-lenet-run-gpu buddy-lenet-main.cpp) +target_link_directories(buddy-lenet-run-gpu PRIVATE ${LLVM_LIBRARY_DIR}) + +set(BUDDY_LENET_LIBS_GPU LENET_GPU mlir_c_runner_utils mlir_async_runtime mlir_runner_utils mlir_cuda_runtime ${PNG_LIBRARIES}) + +target_link_libraries(buddy-lenet-run-gpu ${BUDDY_LENET_LIBS_GPU}) diff --git a/examples/BuddyLeNet/README.md b/examples/BuddyLeNet/README.md index 989be19712..8ddab714b4 100644 --- a/examples/BuddyLeNet/README.md +++ b/examples/BuddyLeNet/README.md @@ -12,11 +12,47 @@ $ python pytorch-lenet-train.py ## LeNet Model Inference -0. Activate your python environment. +### Activate your python environment. -1. Build buddy-mlir +```bash +$ conda activate +``` + +### Build LLVM + +```bash +$ cd buddy-mlir +$ mkdir llvm/build +$ cd llvm/build + +// CPU +$ cmake -G Ninja ../llvm \ + -DLLVM_ENABLE_PROJECTS="mlir;clang;openmp" \ + -DLLVM_TARGETS_TO_BUILD="host;RISCV" \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DOPENMP_ENABLE_LIBOMPTARGET=OFF \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DMLIR_ENABLE_BINDINGS_PYTHON=ON \ + -DPython3_EXECUTABLE=$(which python3) + +// GPU +$ cmake -G Ninja ../llvm \ + -DLLVM_ENABLE_PROJECTS="mlir;clang;openmp" \ + -DLLVM_TARGETS_TO_BUILD="host;RISCV;NVPTX" \ + -DMLIR_ENABLE_CUDA_RUNNER=ON \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DOPENMP_ENABLE_LIBOMPTARGET=OFF \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DMLIR_ENABLE_BINDINGS_PYTHON=ON \ + -DPython3_EXECUTABLE=$(which python3) + +$ ninja check-clang check-mlir omp +``` + +### Build buddy-mlir ```bash +$ cd buddy-mlir $ mkdir build && cd build $ cmake -G Ninja .. \ -DMLIR_DIR=$PWD/../llvm/build/lib/cmake/mlir \ @@ -31,7 +67,7 @@ $ ninja $ ninja check-buddy ``` -2. Set the `PYTHONPATH` environment variable. +### Set the `PYTHONPATH` environment variable. Make sure you are in the build directory. @@ -41,19 +77,26 @@ $ export LLVM_MLIR_BUILD_DIR=$PWD/../llvm/build $ export PYTHONPATH=${LLVM_MLIR_BUILD_DIR}/tools/mlir/python_packages/mlir_core:${BUDDY_MLIR_BUILD_DIR}/python_packages:${PYTHONPATH} ``` -3. Set the `LENET_EXAMPLE_PATH` environment variable. +### Set the `LENET_EXAMPLE_PATH` environment variable. ```bash $ export LENET_EXAMPLE_PATH=${BUDDY_MLIR_BUILD_DIR}/../examples/BuddyLeNet/ ``` -4. Build and run the LeNet example +### Build and run the LeNet example ```bash $ cmake -G Ninja .. -DBUDDY_LENET_EXAMPLES=ON + +// CPU $ ninja buddy-lenet-run $ cd bin $ ./buddy-lenet-run + +// GPU +$ ninja buddy-lenet-run-gpu +$ cd bin +$ ./buddy-lenet-run-gpu ``` ## Debug the Lowering Pass Pipeline with Fake Parameters. diff --git a/examples/BuddyLeNet/buddy-lenet-import.py b/examples/BuddyLeNet/buddy-lenet-import.py index 95e76de253..c787061a55 100644 --- a/examples/BuddyLeNet/buddy-lenet-import.py +++ b/examples/BuddyLeNet/buddy-lenet-import.py @@ -23,7 +23,6 @@ import numpy as np import torch -from torch._inductor.decomposition import decompositions as inductor_decomp from buddy.compiler.frontend import DynamoCompiler from buddy.compiler.graph import GraphDriver @@ -39,13 +38,12 @@ ) model = LeNet() -model = torch.load(model_path + "/lenet-model.pth") +model = torch.load(model_path + "/lenet-model.pth", weights_only=False) model = model.eval() # Initialize Dynamo Compiler with specific configurations as an importer. dynamo_compiler = DynamoCompiler( primary_registry=tosa.ops_registry, - aot_autograd_decomposition=inductor_decomp, ) data = torch.randn([1, 1, 28, 28]) diff --git a/examples/BuddyLlama/CMakeLists.txt b/examples/BuddyLlama/CMakeLists.txt index a6bfc2f742..6953b7de7d 100644 --- a/examples/BuddyLlama/CMakeLists.txt +++ b/examples/BuddyLlama/CMakeLists.txt @@ -53,6 +53,7 @@ add_custom_command( COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyLlama/subgraph0.mlir -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" | ${BUDDY_BINARY_DIR}/buddy-opt + -convert-elementwise-to-linalg -arith-expand -eliminate-empty-tensors -empty-tensor-to-alloc-tensor diff --git a/examples/BuddyLlama/import-llama2.py b/examples/BuddyLlama/import-llama2.py index 2903d6bd81..d893ee87f6 100644 --- a/examples/BuddyLlama/import-llama2.py +++ b/examples/BuddyLlama/import-llama2.py @@ -38,7 +38,7 @@ ) # Initialize the tokenizer and model from the specified model path. -tokenizer = LlamaTokenizer.from_pretrained(model_path) +tokenizer = LlamaTokenizer.from_pretrained(model_path, legacy=True) model = LlamaForCausalLM.from_pretrained(model_path, torchscript=True) model.config.use_cache = False diff --git a/examples/BuddyLlama/llama-main.cpp b/examples/BuddyLlama/llama-main.cpp index 0bfc1e5d2f..61c42f0db2 100644 --- a/examples/BuddyLlama/llama-main.cpp +++ b/examples/BuddyLlama/llama-main.cpp @@ -24,7 +24,7 @@ using namespace buddy; -constexpr size_t ParamsSize = 6755192832; +constexpr size_t ParamsSize = 6738415680; constexpr size_t MaxVocabSize = 32000; constexpr size_t MaxTokenLength = 40; constexpr size_t HiddenSize = 4096; diff --git a/examples/BuddyLlama/llama_annotation.mlir b/examples/BuddyLlama/llama_annotation.mlir index acb735d128..b2c9ccd307 100644 --- a/examples/BuddyLlama/llama_annotation.mlir +++ b/examples/BuddyLlama/llama_annotation.mlir @@ -206,10 +206,9 @@ module { %113 = "tosa.const"() <{value = dense<0.000000e+00> : tensor<1x32x40x128xf32>}> : () -> tensor<1x32x40x128xf32> %114 = tosa.add %65, %113 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> %115 = tosa.reshape %114 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> - // %116 = tosa.matmul %112, %115 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> - // complete one head Softmax(QK/sqrt(d_k)), collect all heads. %117 = tosa.reshape %116 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> + // complete one head Softmax(QK/sqrt(d_k)), collect all heads. %118 = "tosa.const"() <{value = dense<[0, 2, 1, 3]> : tensor<4xi32>}> : () -> tensor<4xi32> %119 = tosa.transpose %117, %118 : (tensor<1x32x40x128xf32>, tensor<4xi32>) -> tensor<1x40x32x128xf32> %120 = tosa.identity %119 : (tensor<1x40x32x128xf32>) -> tensor<1x40x32x128xf32> diff --git a/examples/BuddyMatmul/linalg-batchmatmul-f32.mlir b/examples/BuddyMatmul/linalg-batchmatmul-f32.mlir index 58c9142398..ca132cb863 100644 --- a/examples/BuddyMatmul/linalg-batchmatmul-f32.mlir +++ b/examples/BuddyMatmul/linalg-batchmatmul-f32.mlir @@ -18,11 +18,24 @@ // RUN: | FileCheck %s func.func private @printMemrefF32(memref<*xf32>) +func.func private @rtclock() -> f64 func.func @batch_matmul(%arg0: memref, %arg1: memref, %arg2: memref) { + %t_start = call @rtclock() : () -> f64 + linalg.batch_matmul ins(%arg0, %arg1 : memref, memref) outs(%arg2 : memref) + + %t_end = call @rtclock() : () -> f64 + %time = arith.subf %t_end, %t_start : f64 + + %printed_output = memref.cast %arg2 : memref to memref<*xf32> + call @printMemrefF32(%printed_output) : (memref<*xf32>) -> () + + // Print timings. + vector.print %time : f64 + return } @@ -54,29 +67,21 @@ func.func @main(){ %m1 = call @alloc_f32(%c1, %c576, %c1024, %f3) : (index, index, index, f32) -> memref %m2 = call @alloc_f32(%c1, %c1, %c1024, %f0) : (index, index, index, f32) -> memref - call @batch_matmul(%m0, %m1, %m2) : (memref, memref, memref) -> () - - %printed_m2 = memref.cast %m2 : memref to memref<*xf32> - // CHECK: Unranked Memref base@ = {{.*}} rank = 3 offset = 0 sizes = [1, 1, 1024] strides = [1024, 1024, 1] data = // CHECK-NEXT: [ // CHECK: [ // CHECK: [3456{{(, 3456)*}}] - call @printMemrefF32(%printed_m2) : (memref<*xf32>) -> () + call @batch_matmul(%m0, %m1, %m2) : (memref, memref, memref) -> () %m3 = call @alloc_f32(%c1, %c1, %c1024, %f2) : (index, index, index, f32) -> memref %m4 = call @alloc_f32(%c1, %c1024, %c1000, %f3) : (index, index, index, f32) -> memref %m5 = call @alloc_f32(%c1, %c1, %c1000, %f0) : (index, index, index, f32) -> memref - call @batch_matmul(%m3, %m4, %m5) : (memref, memref, memref) -> () - - %printed_m5 = memref.cast %m5 : memref to memref<*xf32> - // CHECK: Unranked Memref base@ = {{.*}} rank = 3 offset = 0 sizes = [1, 1, 1000] strides = [1000, 1000, 1] data = // CHECK-NEXT: [ // CHECK: [ // CHECK: [6144{{(, 6144)*}}] - call @printMemrefF32(%printed_m5) : (memref<*xf32>) -> () + call @batch_matmul(%m3, %m4, %m5) : (memref, memref, memref) -> () return } diff --git a/examples/BuddyMatmul/makefile b/examples/BuddyMatmul/makefile index 0940d608da..1242f22467 100644 --- a/examples/BuddyMatmul/makefile +++ b/examples/BuddyMatmul/makefile @@ -11,6 +11,7 @@ OPT_FLAG := -O0 ifeq ($(shell uname),Linux) MLIR_RUNNER_UTILS := ${LLVM_BUILD_DIR}/lib/libmlir_runner_utils.so MLIR_C_RUNNER_UTILS := ${LLVM_BUILD_DIR}/lib/libmlir_c_runner_utils.so +LIB_OMP := ${LLVM_BUILD_DIR}/lib/libomp.so MTRIPLE := x86_64-unknown-linux-gnu else ifeq ($(shell uname),Darwin) MLIR_RUNNER_UTILS := ${LLVM_BUILD_DIR}/lib/libmlir_runner_utils.dylib @@ -36,6 +37,52 @@ linalg-batchmatmul-f32-run: ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void \ -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} +linalg-batchmatmul-f32-omp-lower: + @${BUDDY_OPT} ./linalg-batchmatmul-f32.mlir \ + -batchmatmul-optimize \ + -convert-linalg-to-affine-loops \ + -affine-parallelize \ + -lower-affine \ + -convert-scf-to-openmp \ + -convert-vector-to-scf \ + -expand-strided-metadata \ + -convert-vector-to-llvm \ + -memref-expand \ + -arith-expand \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -convert-scf-to-cf \ + -convert-openmp-to-llvm \ + -convert-math-to-llvm \ + -convert-math-to-libm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts \ + -o log.mlir + +linalg-batchmatmul-f32-omp-run: + @${BUDDY_OPT} ./linalg-batchmatmul-f32.mlir \ + -batchmatmul-optimize \ + -convert-linalg-to-affine-loops \ + -affine-parallelize \ + -lower-affine \ + -convert-scf-to-openmp \ + -convert-vector-to-scf \ + -expand-strided-metadata \ + -convert-vector-to-llvm \ + -memref-expand \ + -arith-expand \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -convert-scf-to-cf \ + -convert-openmp-to-llvm \ + -convert-math-to-llvm \ + -convert-math-to-libm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void \ + -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} \ + -shared-libs=${LIB_OMP} + linalg-matmul-transpose-b-f32-run: @${BUDDY_OPT} ./linalg-transposematmulb-f32.mlir\ -matmul-transpose-b-vectorization \ diff --git a/examples/BuddyMobileNetV3/buddy-mobilenetv3-import.py b/examples/BuddyMobileNetV3/buddy-mobilenetv3-import.py index 704b8fc2e3..062d7cb653 100644 --- a/examples/BuddyMobileNetV3/buddy-mobilenetv3-import.py +++ b/examples/BuddyMobileNetV3/buddy-mobilenetv3-import.py @@ -23,6 +23,7 @@ from pathlib import Path import numpy as np import torch +import torch._inductor.lowering import torchvision.models as models from torch._inductor.decomposition import decompositions as inductor_decomp diff --git a/examples/BuddyNext/makefile b/examples/BuddyNext/makefile index 29d022fdc9..3ee282499c 100644 --- a/examples/BuddyNext/makefile +++ b/examples/BuddyNext/makefile @@ -490,6 +490,84 @@ next-mhsa-qkv-parallel-vec-run: ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void \ -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} +next-mhsa-qkv-fusion-lower: + @${MLIR_OPT} ./next-mhsa-qkv-fusion.mlir \ + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" | \ + ${BUDDY_OPT} \ + -arith-expand \ + -eliminate-empty-tensors \ + -empty-tensor-to-alloc-tensor \ + -one-shot-bufferize="bufferize-function-boundaries=1 function-boundary-type-conversion=identity-layout-map" \ + -matmul-transpose-b-vectorization \ + -o log.mlir + +next-mhsa-qkv-fusion-run: + @${MLIR_OPT} ./next-mhsa-qkv-fusion.mlir \ + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" | \ + ${MLIR_OPT} \ + -arith-expand \ + -eliminate-empty-tensors \ + -empty-tensor-to-alloc-tensor \ + -one-shot-bufferize \ + -convert-linalg-to-affine-loops \ + -affine-loop-fusion \ + -lower-affine \ + -func-bufferize \ + -arith-bufferize \ + -tensor-bufferize \ + -buffer-deallocation \ + -finalizing-bufferize \ + -convert-vector-to-scf \ + -expand-strided-metadata \ + -convert-vector-to-llvm \ + -memref-expand \ + -arith-expand \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -convert-scf-to-cf \ + -convert-openmp-to-llvm \ + -convert-arith-to-llvm \ + -convert-math-to-llvm \ + -convert-math-to-libm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void \ + -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} + +next-mhsa-qkv-fusion-vec-run: + @${MLIR_OPT} ./next-mhsa-qkv-fusion.mlir \ + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" | \ + ${BUDDY_OPT} \ + -arith-expand \ + -eliminate-empty-tensors \ + -empty-tensor-to-alloc-tensor \ + -one-shot-bufferize="bufferize-function-boundaries=1 function-boundary-type-conversion=identity-layout-map" \ + -matmul-transpose-b-vectorization \ + -convert-linalg-to-affine-loops \ + -affine-loop-fusion \ + -lower-affine \ + -func-bufferize \ + -arith-bufferize \ + -tensor-bufferize \ + -buffer-deallocation \ + -finalizing-bufferize \ + -convert-vector-to-scf \ + -expand-strided-metadata \ + -convert-vector-to-llvm \ + -memref-expand \ + -arith-expand \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -convert-scf-to-cf \ + -convert-openmp-to-llvm \ + -convert-arith-to-llvm \ + -convert-math-to-llvm \ + -convert-math-to-libm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void \ + -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} + next-mhsa-core-run: @${MLIR_OPT} ./next-mhsa-core.mlir \ -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" | \ @@ -556,6 +634,74 @@ next-mhsa-context-run: ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void \ -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} +next-ffn-run: + @${MLIR_OPT} ./next-ffn.mlir \ + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" | \ + ${BUDDY_OPT} \ + -arith-expand \ + -eliminate-empty-tensors \ + -empty-tensor-to-alloc-tensor \ + -one-shot-bufferize \ + -convert-linalg-to-affine-loops \ + -affine-loop-fusion \ + -lower-affine \ + -func-bufferize \ + -arith-bufferize \ + -tensor-bufferize \ + -buffer-deallocation \ + -finalizing-bufferize \ + -convert-vector-to-scf \ + -expand-strided-metadata \ + -convert-vector-to-llvm \ + -memref-expand \ + -arith-expand \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -convert-scf-to-cf \ + -convert-openmp-to-llvm \ + -convert-arith-to-llvm \ + -convert-math-to-llvm \ + -convert-math-to-libm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void \ + -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} + +next-ffn-parallel-vec-run: + @${MLIR_OPT} ./next-ffn.mlir \ + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" | \ + ${BUDDY_OPT} \ + -arith-expand \ + -eliminate-empty-tensors \ + -empty-tensor-to-alloc-tensor \ + -one-shot-bufferize \ + -matmul-parallel-vectorization-optimize \ + -batchmatmul-optimize \ + -convert-linalg-to-affine-loops \ + -affine-loop-fusion \ + -lower-affine \ + -func-bufferize \ + -arith-bufferize \ + -tensor-bufferize \ + -buffer-deallocation \ + -finalizing-bufferize \ + -convert-vector-to-scf \ + -expand-strided-metadata \ + -convert-vector-to-llvm \ + -memref-expand \ + -arith-expand \ + -convert-arith-to-llvm \ + -finalize-memref-to-llvm \ + -convert-scf-to-cf \ + -convert-openmp-to-llvm \ + -convert-arith-to-llvm \ + -convert-math-to-llvm \ + -convert-math-to-libm \ + -convert-func-to-llvm \ + -reconcile-unrealized-casts | \ + ${MLIR_CPU_RUNNER} ${OPT_FLAG} -e main -entry-point-result=void \ + -shared-libs=${MLIR_RUNNER_UTILS} -shared-libs=${MLIR_C_RUNNER_UTILS} + pooling-nhwc-max-vec-run: @${BUDDY_OPT} ./pooling-nhwc-max-vec.mlir \ -convert-linalg-to-loops \ diff --git a/examples/BuddyNext/next-ffn.mlir b/examples/BuddyNext/next-ffn.mlir new file mode 100644 index 0000000000..1ec81744e8 --- /dev/null +++ b/examples/BuddyNext/next-ffn.mlir @@ -0,0 +1,119 @@ +// RUN: buddy-opt %s \ +// RUN: -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" \ +// RUN: | buddy-opt \ +// RUN: -arith-expand \ +// RUN: -eliminate-empty-tensors \ +// RUN: -empty-tensor-to-alloc-tensor \ +// RUN: -one-shot-bufferize \ +// RUN: -matmul-parallel-vectorization-optimize \ +// RUN: -convert-linalg-to-affine-loops \ +// RUN: -affine-loop-fusion \ +// RUN: -lower-affine \ +// RUN: -func-bufferize \ +// RUN: -arith-bufferize \ +// RUN: -tensor-bufferize \ +// RUN: -buffer-deallocation \ +// RUN: -finalizing-bufferize \ +// RUN: -convert-vector-to-scf \ +// RUN: -expand-strided-metadata \ +// RUN: -convert-vector-to-llvm \ +// RUN: -memref-expand \ +// RUN: -arith-expand \ +// RUN: -convert-arith-to-llvm \ +// RUN: -finalize-memref-to-llvm \ +// RUN: -convert-scf-to-cf \ +// RUN: -convert-openmp-to-llvm \ +// RUN: -convert-arith-to-llvm \ +// RUN: -convert-math-to-llvm \ +// RUN: -convert-math-to-libm \ +// RUN: -convert-func-to-llvm \ +// RUN: -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +func.func private @rtclock() -> f64 +func.func private @printMemrefF32(%ptr : tensor<*xf32>) + +#map = affine_map<(d0, d1, d2) -> (d1)> +#map1 = affine_map<(d0, d1, d2) -> (d0, d2)> +#map2 = affine_map<(d0, d1, d2) -> (d0, d1)> +#map3 = affine_map<(d0, d1) -> (d0, d1)> +#map4 = affine_map<(d0, d1, d2, d3) -> (d0, d1, d2, d3)> +#map5 = affine_map<(d0, d1, d2) -> (d0, d1, d2)> +#map6 = affine_map<(d0, d1, d2) -> (d0, 0, d1, d2)> +#map7 = affine_map<(d0, d1) -> (0, d0, d1)> + +func.func @kernel(%t0: tensor<1x40x4096xf32>, %t1: tensor<4096xf32>, %t2: tensor<11008x4096xf32>, %t3: tensor<11008x4096xf32>, %t4: tensor<4096x11008xf32>) { + %t_start = call @rtclock() : () -> f64 + + %128 = tensor.empty() : tensor<1x40x4096xf32> + %c2_i32_23 = arith.constant 2 : i32 + %129 = linalg.generic {indexing_maps = [#map5, #map5], iterator_types = ["parallel", "parallel", "parallel"]} ins(%t0 : tensor<1x40x4096xf32>) outs(%128 : tensor<1x40x4096xf32>) { + ^bb0(%in: f32, %out: f32): + %4175 = math.fpowi %in, %c2_i32_23 : f32, i32 + linalg.yield %4175 : f32 + } -> tensor<1x40x4096xf32> + %130 = tosa.reduce_sum %129 {axis = 2 : i32} : (tensor<1x40x4096xf32>) -> tensor<1x40x1xf32> + %131 = "tosa.const"() <{value = dense<4.096000e+03> : tensor<1xf32>}> : () -> tensor<1xf32> + %132 = tosa.reciprocal %131 : (tensor<1xf32>) -> tensor<1xf32> + %133 = tosa.mul %132, %130 {shift = 0 : i8} : (tensor<1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %134 = "tosa.const"() <{value = dense<9.99999974E-6> : tensor<1x40x1xf32>}> : () -> tensor<1x40x1xf32> + %135 = tosa.add %133, %134 : (tensor<1x40x1xf32>, tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %136 = tosa.rsqrt %135 : (tensor<1x40x1xf32>) -> tensor<1x40x1xf32> + %137 = tosa.mul %t0, %136 {shift = 0 : i8} : (tensor<1x40x4096xf32>, tensor<1x40x1xf32>) -> tensor<1x40x4096xf32> + %138 = tosa.reshape %t1 {new_shape = array} : (tensor<4096xf32>) -> tensor<1x1x4096xf32> + %139 = tosa.mul %138, %137 {shift = 0 : i8} : (tensor<1x1x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + %140 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %141 = tosa.transpose %t2, %140 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %142 = tosa.reshape %139 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_24 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %143 = linalg.matmul {cast = #linalg.type_fn} ins(%142, %141 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_24 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %144 = tosa.reshape %143 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %145 = tosa.sigmoid %144 : (tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %146 = tosa.mul %144, %145 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %147 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %148 = tosa.transpose %t3, %147 : (tensor<11008x4096xf32>, tensor<2xi32>) -> tensor<4096x11008xf32> + %149 = tosa.reshape %139 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_25 = arith.constant dense<0.000000e+00> : tensor<40x11008xf32> + %150 = linalg.matmul {cast = #linalg.type_fn} ins(%149, %148 : tensor<40x4096xf32>, tensor<4096x11008xf32>) outs(%cst_25 : tensor<40x11008xf32>) -> tensor<40x11008xf32> + %151 = tosa.reshape %150 {new_shape = array} : (tensor<40x11008xf32>) -> tensor<1x40x11008xf32> + %152 = tosa.mul %146, %151 {shift = 0 : i8} : (tensor<1x40x11008xf32>, tensor<1x40x11008xf32>) -> tensor<1x40x11008xf32> + %153 = "tosa.const"() <{value = dense<[1, 0]> : tensor<2xi32>}> : () -> tensor<2xi32> + %154 = tosa.transpose %t4, %153 : (tensor<4096x11008xf32>, tensor<2xi32>) -> tensor<11008x4096xf32> + %155 = tosa.reshape %152 {new_shape = array} : (tensor<1x40x11008xf32>) -> tensor<40x11008xf32> + %cst_26 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %156 = linalg.matmul {cast = #linalg.type_fn} ins(%155, %154 : tensor<40x11008xf32>, tensor<11008x4096xf32>) outs(%cst_26 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %157 = tosa.reshape %156 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + %158 = tosa.add %t0, %157 : (tensor<1x40x4096xf32>, tensor<1x40x4096xf32>) -> tensor<1x40x4096xf32> + + %t_end = call @rtclock() : () -> f64 + %time = arith.subf %t_end, %t_start : f64 + + %tensor_unranked = tensor.cast %158 : tensor<1x40x4096xf32> to tensor<*xf32> + + // All the elements of the MemRef are the same, + // only check the first line to verify the correctness. + // CHECK: Unranked Memref base@ = {{.*}} rank = 3 offset = 0 sizes = [1, 40, 4096] strides = [163840, 4096, 1] data = + + // Print results. + call @printMemrefF32(%tensor_unranked) : (tensor<*xf32>) -> () + // Print timings. + vector.print %time : f64 + + return +} + +func.func @main() { + + %c0 = arith.constant dense<2.0> : tensor<1x40x4096xf32> + %c1 = arith.constant dense<3.0> : tensor<4096xf32> + %c2 = arith.constant dense<4.0> : tensor<11008x4096xf32> + %c3 = arith.constant dense<5.0> : tensor<11008x4096xf32> + %c4 = arith.constant dense<6.0> : tensor<4096x11008xf32> + + call @kernel(%c0, %c1, %c2, %c3, %c4) : (tensor<1x40x4096xf32>, tensor<4096xf32>, tensor<11008x4096xf32>, tensor<11008x4096xf32>, tensor<4096x11008xf32>) -> () + + return +} diff --git a/examples/BuddyNext/next-mhsa-context.mlir b/examples/BuddyNext/next-mhsa-context.mlir index 5bcbecd549..e1eb0a0290 100644 --- a/examples/BuddyNext/next-mhsa-context.mlir +++ b/examples/BuddyNext/next-mhsa-context.mlir @@ -45,17 +45,19 @@ func.func @kernel(%t0: tensor<1x32x40x40xf32>, %t1: tensor<1x32x40x128xf32>) { %114 = tosa.add %t1, %113 : (tensor<1x32x40x128xf32>, tensor<1x32x40x128xf32>) -> tensor<1x32x40x128xf32> %115 = tosa.reshape %114 {new_shape = array} : (tensor<1x32x40x128xf32>) -> tensor<32x40x128xf32> %116 = tosa.matmul %112, %115 : (tensor<32x40x40xf32>, tensor<32x40x128xf32>) -> tensor<32x40x128xf32> + %117 = tosa.reshape %116 {new_shape = array} : (tensor<32x40x128xf32>) -> tensor<1x32x40x128xf32> %t_end = call @rtclock() : () -> f64 %time = arith.subf %t_end, %t_start : f64 - %tensor_unranked = tensor.cast %116 : tensor<32x40x128xf32> to tensor<*xf32> + %tensor_unranked = tensor.cast %117 : tensor<1x32x40x128xf32> to tensor<*xf32> // All the elements of the MemRef are the same, // only check the first line to verify the correctness. - // CHECK: Unranked Memref base@ = {{.*}} rank = 3 offset = 0 sizes = [32, 40, 128] strides = [5120, 128, 1] data = + // CHECK: Unranked Memref base@ = {{.*}} rank = 4 offset = 0 sizes = [1, 32, 40, 128] strides = [163840, 5120, 128, 1] data = // CHECK-NEXT: [ // CHECK-SAME: [ + // CHECK-SAME: [ // CHECK-SAME: [240{{(, 240)*}}], // Print results. diff --git a/examples/BuddyNext/next-mhsa-qkv-fusion.mlir b/examples/BuddyNext/next-mhsa-qkv-fusion.mlir new file mode 100644 index 0000000000..2a9b155301 --- /dev/null +++ b/examples/BuddyNext/next-mhsa-qkv-fusion.mlir @@ -0,0 +1,106 @@ +// RUN: buddy-opt %s \ +// RUN: -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" \ +// RUN: | buddy-opt \ +// RUN: -arith-expand \ +// RUN: -eliminate-empty-tensors \ +// RUN: -empty-tensor-to-alloc-tensor \ +// RUN: -one-shot-bufferize \ +// RUN: -convert-linalg-to-affine-loops \ +// RUN: -affine-loop-fusion \ +// RUN: -lower-affine \ +// RUN: -func-bufferize \ +// RUN: -arith-bufferize \ +// RUN: -tensor-bufferize \ +// RUN: -buffer-deallocation \ +// RUN: -finalizing-bufferize \ +// RUN: -convert-vector-to-scf \ +// RUN: -expand-strided-metadata \ +// RUN: -convert-vector-to-llvm \ +// RUN: -memref-expand \ +// RUN: -arith-expand \ +// RUN: -convert-arith-to-llvm \ +// RUN: -finalize-memref-to-llvm \ +// RUN: -convert-scf-to-cf \ +// RUN: -convert-openmp-to-llvm \ +// RUN: -convert-arith-to-llvm \ +// RUN: -convert-math-to-llvm \ +// RUN: -convert-math-to-libm \ +// RUN: -convert-func-to-llvm \ +// RUN: -reconcile-unrealized-casts \ +// RUN: | mlir-cpu-runner -e main -entry-point-result=void \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_runner_utils%shlibext \ +// RUN: -shared-libs=%mlir_runner_utils_dir/libmlir_c_runner_utils%shlibext \ +// RUN: | FileCheck %s + +func.func private @rtclock() -> f64 +func.func private @printMemrefF32(%ptr : tensor<*xf32>) + +func.func @kernel(%t0: tensor<1x40x4096xf32>, %t1: tensor<4096x4096xf32>, %t2: tensor<4096x4096xf32>, %t3: tensor<4096x4096xf32>) { + %t_start = call @rtclock() : () -> f64 + + %42 = tosa.reshape %t0 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_6 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %43 = linalg.matmul_transpose_b {cast = #linalg.type_fn} ins(%42, %t1 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_6 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %44 = tosa.reshape %43 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + + %45 = tosa.reshape %t0 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_7 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %46 = linalg.matmul_transpose_b {cast = #linalg.type_fn} ins(%45, %t2 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_7 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %47 = tosa.reshape %46 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + + %48 = tosa.reshape %t0 {new_shape = array} : (tensor<1x40x4096xf32>) -> tensor<40x4096xf32> + %cst_8 = arith.constant dense<0.000000e+00> : tensor<40x4096xf32> + %49 = linalg.matmul_transpose_b {cast = #linalg.type_fn} ins(%48, %t3 : tensor<40x4096xf32>, tensor<4096x4096xf32>) outs(%cst_8 : tensor<40x4096xf32>) -> tensor<40x4096xf32> + %50 = tosa.reshape %49 {new_shape = array} : (tensor<40x4096xf32>) -> tensor<1x40x4096xf32> + + %t_end = call @rtclock() : () -> f64 + %time = arith.subf %t_end, %t_start : f64 + + %tensor_unranked_q = tensor.cast %44 : tensor<1x40x4096xf32> to tensor<*xf32> + + // All the elements of the MemRef are the same, + // only check the first line to verify the correctness. + // CHECK: Unranked Memref base@ = {{.*}} rank = 3 offset = 0 sizes = [1, 40, 4096] strides = [163840, 4096, 1] data = + // CHECK-NEXT: [ + // CHECK-SAME: [ + // CHECK-SAME: [24576{{(, 24576)*}}], + + %tensor_unranked_k = tensor.cast %47 : tensor<1x40x4096xf32> to tensor<*xf32> + + // All the elements of the MemRef are the same, + // only check the first line to verify the correctness. + // CHECK: Unranked Memref base@ = {{.*}} rank = 3 offset = 0 sizes = [1, 40, 4096] strides = [163840, 4096, 1] data = + // CHECK-NEXT: [ + // CHECK-SAME: [ + // CHECK-SAME: [32768{{(, 32768)*}}], + + %tensor_unranked_v = tensor.cast %50 : tensor<1x40x4096xf32> to tensor<*xf32> + + // All the elements of the MemRef are the same, + // only check the first line to verify the correctness. + // CHECK: Unranked Memref base@ = {{.*}} rank = 3 offset = 0 sizes = [1, 40, 4096] strides = [163840, 4096, 1] data = + // CHECK-NEXT: [ + // CHECK-SAME: [ + // CHECK-SAME: [40960{{(, 40960)*}}], + + // Print results. + call @printMemrefF32(%tensor_unranked_q) : (tensor<*xf32>) -> () + call @printMemrefF32(%tensor_unranked_k) : (tensor<*xf32>) -> () + call @printMemrefF32(%tensor_unranked_v) : (tensor<*xf32>) -> () + // Print timings. + vector.print %time : f64 + + return +} + +func.func @main() { + + %c0 = arith.constant dense<2.0> : tensor<1x40x4096xf32> + %c1 = arith.constant dense <3.0> : tensor<4096x4096xf32> + %c2 = arith.constant dense <4.0> : tensor<4096x4096xf32> + %c3 = arith.constant dense <5.0> : tensor<4096x4096xf32> + + call @kernel(%c0, %c1, %c2, %c3) : (tensor<1x40x4096xf32>, tensor<4096x4096xf32>, tensor<4096x4096xf32>, tensor<4096x4096xf32>) -> () + + return +} diff --git a/examples/BuddyResNet18/CMakeLists.txt b/examples/BuddyResNet18/CMakeLists.txt new file mode 100644 index 0000000000..034012c9ef --- /dev/null +++ b/examples/BuddyResNet18/CMakeLists.txt @@ -0,0 +1,74 @@ +add_custom_command( + OUTPUT ${BUDDY_EXAMPLES_DIR}/BuddyResNet18/arg0.data + ${BUDDY_EXAMPLES_DIR}/BuddyResNet18/forward.mlir + ${BUDDY_EXAMPLES_DIR}/BuddyResNet18/subgraph0.mlir + COMMAND python3 ${BUDDY_EXAMPLES_DIR}/BuddyResNet18/buddy-resnet-import.py + COMMENT "Generating forward.mlir, subgraph0.mlir and parameter files" +) + + +add_custom_command( + OUTPUT forward.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyResNet18/forward.mlir + -pass-pipeline + "builtin.module(func.func(tosa-to-linalg-named, tosa-to-linalg, tosa-to-tensor, tosa-to-arith), \ + empty-tensor-to-alloc-tensor, convert-elementwise-to-linalg, arith-bufferize, \ + func.func(linalg-bufferize, tensor-bufferize), func-bufferize)" | + ${LLVM_TOOLS_BINARY_DIR}/mlir-opt + -pass-pipeline + "builtin.module(func.func(buffer-deallocation-simplification, convert-linalg-to-loops), \ + eliminate-empty-tensors, func.func(llvm-request-c-wrappers), \ + convert-math-to-llvm, convert-math-to-libm, convert-scf-to-cf, \ + convert-arith-to-llvm, expand-strided-metadata, finalize-memref-to-llvm, \ + convert-func-to-llvm, reconcile-unrealized-casts)" | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O3 + -o ${BUDDY_BINARY_DIR}/../examples/BuddyResNet18/forward.o + DEPENDS ${BUDDY_EXAMPLES_DIR}/BuddyResNet18/forward.mlir + COMMENT "Building forward.o" + VERBATIM) + + +add_custom_command( + OUTPUT subgraph0.o + COMMAND ${BUDDY_BINARY_DIR}/buddy-opt ${BUDDY_EXAMPLES_DIR}/BuddyResNet18/subgraph0.mlir + -pass-pipeline + "builtin.module(func.func(tosa-to-linalg-named, tosa-to-arith, tosa-to-linalg, tosa-to-tensor))" | + ${BUDDY_BINARY_DIR}/buddy-opt + -convert-elementwise-to-linalg + -func-bufferize-dynamic-offset + -arith-bufferize + -func-bufferize + -tensor-bufferize + -linalg-bufferize + -finalizing-bufferize + -convert-linalg-to-loops + -lower-affine + -convert-scf-to-cf + -llvm-request-c-wrappers + -convert-math-to-llvm + -convert-math-to-libm + -convert-arith-to-llvm + -convert-func-to-llvm + -expand-strided-metadata + -finalize-memref-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O3 + -o ${BUDDY_BINARY_DIR}/../examples/BuddyResNet18/subgraph0.o + DEPENDS ${BUDDY_EXAMPLES_DIR}/BuddyResNet18/subgraph0.mlir + buddy-opt + COMMENT "Building subgraph0.o" + VERBATIM) + +add_library(RESNET STATIC subgraph0.o forward.o) + +SET_TARGET_PROPERTIES(RESNET PROPERTIES LINKER_LANGUAGE C) + +add_executable(buddy-resnet-run buddy-resnet-main.cpp) +target_link_directories(buddy-resnet-run PRIVATE ${LLVM_LIBRARY_DIR}) + +set(BUDDY_RESNET_LIBS RESNET mlir_c_runner_utils BuddyLibDIP ${PNG_LIBRARIES}) +target_link_libraries(buddy-resnet-run ${BUDDY_RESNET_LIBS}) diff --git a/examples/BuddyResNet18/Labels.txt b/examples/BuddyResNet18/Labels.txt new file mode 100644 index 0000000000..8bdc20a086 --- /dev/null +++ b/examples/BuddyResNet18/Labels.txt @@ -0,0 +1,1000 @@ +tench +goldfish +great white shark +tiger shark +hammerhead +electric ray +stingray +cock +hen +ostrich +brambling +goldfinch +house finch +junco +indigo bunting +robin +bulbul +jay +magpie +chickadee +water ouzel +kite +bald eagle +vulture +great grey owl +European fire salamander +common newt +eft +spotted salamander +axolotl +bullfrog +tree frog +tailed frog +loggerhead +leatherback turtle +mud turtle +terrapin +box turtle +banded gecko +common iguana +American chameleon +whiptail +agama +frilled lizard +alligator lizard +Gila monster +green lizard +African chameleon +Komodo dragon +African crocodile +American alligator +triceratops +thunder snake +ringneck snake +hognose snake +green snake +king snake +garter snake +water snake +vine snake +night snake +boa constrictor +rock python +Indian cobra +green mamba +sea snake +horned viper +diamondback +sidewinder +trilobite +harvestman +scorpion +black and gold garden spider +barn spider +garden spider +black widow +tarantula +wolf spider +tick +centipede +black grouse +ptarmigan +ruffed grouse +prairie chicken +peacock +quail +partridge +African grey +macaw +sulphur-crested cockatoo +lorikeet +coucal +bee eater +hornbill +hummingbird +jacamar +toucan +drake +red-breasted merganser +goose +black swan +tusker +echidna +platypus +wallaby +koala +wombat +jellyfish +sea anemone +brain coral +flatworm +nematode +conch +snail +slug +sea slug +chiton +chambered nautilus +Dungeness crab +rock crab +fiddler crab +king crab +American lobster +spiny lobster +crayfish +hermit crab +isopod +white stork +black stork +spoonbill +flamingo +little blue heron +American egret +bittern +crane bird +limpkin +European gallinule +American coot +bustard +ruddy turnstone +red-backed sandpiper +redshank +dowitcher +oystercatcher +pelican +king penguin +albatross +grey whale +killer whale +dugong +sea lion +Chihuahua +Japanese spaniel +Maltese dog +Pekinese +Shih-Tzu +Blenheim spaniel +papillon +toy terrier +Rhodesian ridgeback +Afghan hound +basset +beagle +bloodhound +bluetick +black-and-tan coonhound +Walker hound +English foxhound +redbone +borzoi +Irish wolfhound +Italian greyhound +whippet +Ibizan hound +Norwegian elkhound +otterhound +Saluki +Scottish deerhound +Weimaraner +Staffordshire bullterrier +American Staffordshire terrier +Bedlington terrier +Border terrier +Kerry blue terrier +Irish terrier +Norfolk terrier +Norwich terrier +Yorkshire terrier +wire-haired fox terrier +Lakeland terrier +Sealyham terrier +Airedale +cairn +Australian terrier +Dandie Dinmont +Boston bull +miniature schnauzer +giant schnauzer +standard schnauzer +Scotch terrier +Tibetan terrier +silky terrier +soft-coated wheaten terrier +West Highland white terrier +Lhasa +flat-coated retriever +curly-coated retriever +golden retriever +Labrador retriever +Chesapeake Bay retriever +German short-haired pointer +vizsla +English setter +Irish setter +Gordon setter +Brittany spaniel +clumber +English springer +Welsh springer spaniel +cocker spaniel +Sussex spaniel +Irish water spaniel +kuvasz +schipperke +groenendael +malinois +briard +kelpie +komondor +Old English sheepdog +Shetland sheepdog +collie +Border collie +Bouvier des Flandres +Rottweiler +German shepherd +Doberman +miniature pinscher +Greater Swiss Mountain dog +Bernese mountain dog +Appenzeller +EntleBucher +boxer +bull mastiff +Tibetan mastiff +French bulldog +Great Dane +Saint Bernard +Eskimo dog +malamute +Siberian husky +dalmatian +affenpinscher +basenji +pug +Leonberg +Newfoundland +Great Pyrenees +Samoyed +Pomeranian +chow +keeshond +Brabancon griffon +Pembroke +Cardigan +toy poodle +miniature poodle +standard poodle +Mexican hairless +timber wolf +white wolf +red wolf +coyote +dingo +dhole +African hunting dog +hyena +red fox +kit fox +Arctic fox +grey fox +tabby +tiger cat +Persian cat +Siamese cat +Egyptian cat +cougar +lynx +leopard +snow leopard +jaguar +lion +tiger +cheetah +brown bear +American black bear +ice bear +sloth bear +mongoose +meerkat +tiger beetle +ladybug +ground beetle +long-horned beetle +leaf beetle +dung beetle +rhinoceros beetle +weevil +fly +bee +ant +grasshopper +cricket +walking stick +cockroach +mantis +cicada +leafhopper +lacewing +dragonfly +damselfly +admiral +ringlet +monarch +cabbage butterfly +sulphur butterfly +lycaenid +starfish +sea urchin +sea cucumber +wood rabbit +hare +Angora +hamster +porcupine +fox squirrel +marmot +beaver +guinea pig +sorrel +zebra +hog +wild boar +warthog +hippopotamus +ox +water buffalo +bison +ram +bighorn +ibex +hartebeest +impala +gazelle +Arabian camel +llama +weasel +mink +polecat +black-footed ferret +otter +skunk +badger +armadillo +three-toed sloth +orangutan +gorilla +chimpanzee +gibbon +siamang +guenon +patas +baboon +macaque +langur +colobus +proboscis monkey +marmoset +capuchin +howler monkey +titi +spider monkey +squirrel monkey +Madagascar cat +indri +Indian elephant +African elephant +lesser panda +giant panda +barracouta +eel +coho +rock beauty +anemone fish +sturgeon +gar +lionfish +puffer +abacus +abaya +academic gown +accordion +acoustic guitar +aircraft carrier +airliner +airship +altar +ambulance +amphibian +analog clock +apiary +apron +ashcan +assault rifle +backpack +bakery +balance beam +balloon +ballpoint +Band Aid +banjo +bannister +barbell +barber chair +barbershop +barn +barometer +barrel +barrow +baseball +basketball +bassinet +bassoon +bathing cap +bath towel +bathtub +beach wagon +beacon +beaker +bearskin +beer bottle +beer glass +bell cote +bib +bicycle-built-for-two +bikini +binder +binoculars +birdhouse +boathouse +bobsled +bolo tie +bonnet +bookcase +bookshop +bottlecap +bow +bow tie +brass +brassiere +breakwater +breastplate +broom +bucket +buckle +bulletproof vest +bullet train +butcher shop +cab +caldron +candle +cannon +canoe +can opener +cardigan +car mirror +carousel +carpenter's kit +carton +car wheel +cash machine +cassette +cassette player +castle +catamaran +CD player +cello +cellular telephone +chain +chainlink fence +chain mail +chain saw +chest +chiffonier +chime +china cabinet +Christmas stocking +church +cinema +cleaver +cliff dwelling +cloak +clog +cocktail shaker +coffee mug +coffeepot +coil +combination lock +computer keyboard +confectionery +container ship +convertible +corkscrew +cornet +cowboy boot +cowboy hat +cradle +crane +crash helmet +crate +crib +Crock Pot +croquet ball +crutch +cuirass +dam +desk +desktop computer +dial telephone +diaper +digital clock +digital watch +dining table +dishrag +dishwasher +disk brake +dock +dogsled +dome +doormat +drilling platform +drum +drumstick +dumbbell +Dutch oven +electric fan +electric guitar +electric locomotive +entertainment center +envelope +espresso maker +face powder +feather boa +file +fireboat +fire engine +fire screen +flagpole +flute +folding chair +football helmet +forklift +fountain +fountain pen +four-poster +freight car +French horn +frying pan +fur coat +garbage truck +gasmask +gas pump +goblet +go-kart +golf ball +golfcart +gondola +gong +gown +grand piano +greenhouse +grille +grocery store +guillotine +hair slide +hair spray +half track +hammer +hamper +hand blower +hand-held computer +handkerchief +hard disc +harmonica +harp +harvester +hatchet +holster +home theater +honeycomb +hook +hoopskirt +horizontal bar +horse cart +hourglass +iPod +iron +jack-o'-lantern +jean +jeep +jersey +jigsaw puzzle +jinrikisha +joystick +kimono +knee pad +knot +lab coat +ladle +lampshade +laptop +lawn mower +lens cap +letter opener +library +lifeboat +lighter +limousine +liner +lipstick +Loafer +lotion +loudspeaker +loupe +lumbermill +magnetic compass +mailbag +mailbox +maillot +maillot tank suit +manhole cover +maraca +marimba +mask +matchstick +maypole +maze +measuring cup +medicine chest +megalith +microphone +microwave +military uniform +milk can +minibus +miniskirt +minivan +missile +mitten +mixing bowl +mobile home +Model T +modem +monastery +monitor +moped +mortar +mortarboard +mosque +mosquito net +motor scooter +mountain bike +mountain tent +mouse +mousetrap +moving van +muzzle +nail +neck brace +necklace +nipple +notebook +obelisk +oboe +ocarina +odometer +oil filter +organ +oscilloscope +overskirt +oxcart +oxygen mask +packet +paddle +paddlewheel +padlock +paintbrush +pajama +palace +panpipe +paper towel +parachute +parallel bars +park bench +parking meter +passenger car +patio +pay-phone +pedestal +pencil box +pencil sharpener +perfume +Petri dish +photocopier +pick +pickelhaube +picket fence +pickup +pier +piggy bank +pill bottle +pillow +ping-pong ball +pinwheel +pirate +pitcher +plane +planetarium +plastic bag +plate rack +plow +plunger +Polaroid camera +pole +police van +poncho +pool table +pop bottle +pot +potter's wheel +power drill +prayer rug +printer +prison +projectile +projector +puck +punching bag +purse +quill +quilt +racer +racket +radiator +radio +radio telescope +rain barrel +recreational vehicle +reel +reflex camera +refrigerator +remote control +restaurant +revolver +rifle +rocking chair +rotisserie +rubber eraser +rugby ball +rule +running shoe +safe +safety pin +saltshaker +sandal +sarong +sax +scabbard +scale +school bus +schooner +scoreboard +screen +screw +screwdriver +seat belt +sewing machine +shield +shoe shop +shoji +shopping basket +shopping cart +shovel +shower cap +shower curtain +ski +ski mask +sleeping bag +slide rule +sliding door +slot +snorkel +snowmobile +snowplow +soap dispenser +soccer ball +sock +solar dish +sombrero +soup bowl +space bar +space heater +space shuttle +spatula +speedboat +spider web +spindle +sports car +spotlight +stage +steam locomotive +steel arch bridge +steel drum +stethoscope +stole +stone wall +stopwatch +stove +strainer +streetcar +stretcher +studio couch +stupa +submarine +suit +sundial +sunglass +sunglasses +sunscreen +suspension bridge +swab +sweatshirt +swimming trunks +swing +switch +syringe +table lamp +tank +tape player +teapot +teddy +television +tennis ball +thatch +theater curtain +thimble +thresher +throne +tile roof +toaster +tobacco shop +toilet seat +torch +totem pole +tow truck +toyshop +tractor +trailer truck +tray +trench coat +tricycle +trimaran +tripod +triumphal arch +trolleybus +trombone +tub +turnstile +typewriter keyboard +umbrella +unicycle +upright +vacuum +vase +vault +velvet +vending machine +vestment +viaduct +violin +volleyball +waffle iron +wall clock +wallet +wardrobe +warplane +washbasin +washer +water bottle +water jug +water tower +whiskey jug +whistle +wig +window screen +window shade +Windsor tie +wine bottle +wing +wok +wooden spoon +wool +worm fence +wreck +yawl +yurt +web site +comic book +crossword puzzle +street sign +traffic light +book jacket +menu +plate +guacamole +consomme +hot pot +trifle +ice cream +ice lolly +French loaf +bagel +pretzel +cheeseburger +hotdog +mashed potato +head cabbage +broccoli +cauliflower +zucchini +spaghetti squash +acorn squash +butternut squash +cucumber +artichoke +bell pepper +cardoon +mushroom +Granny Smith +strawberry +orange +lemon +fig +pineapple +banana +jackfruit +custard apple +pomegranate +hay +carbonara +chocolate sauce +dough +meat loaf +pizza +potpie +burrito +red wine +espresso +cup +eggnog +alp +bubble +cliff +coral reef +geyser +lakeside +promontory +sandbar +seashore +valley +volcano +ballplayer +groom +scuba diver +rapeseed +daisy +yellow lady's slipper +corn +acorn +hip +buckeye +coral fungus +agaric +gyromitra +stinkhorn +earthstar +hen-of-the-woods +bolete +ear +toilet tissue diff --git a/examples/BuddyResNet18/README.md b/examples/BuddyResNet18/README.md index 09a6669b7f..7813e98255 100644 --- a/examples/BuddyResNet18/README.md +++ b/examples/BuddyResNet18/README.md @@ -31,15 +31,16 @@ $ ninja check-clang check-mlir omp ``` $ cd buddy-mlir -$ mkdir build -$ cd build +$ mkdir build && cd build $ cmake -G Ninja .. \ -DMLIR_DIR=$PWD/../llvm/build/lib/cmake/mlir \ -DLLVM_DIR=$PWD/../llvm/build/lib/cmake/llvm \ -DLLVM_ENABLE_ASSERTIONS=ON \ -DCMAKE_BUILD_TYPE=RELEASE \ -DBUDDY_MLIR_ENABLE_PYTHON_PACKAGES=ON \ - -DPython3_EXECUTABLE=$(which python3) + -DPython3_EXECUTABLE=$(which python3) \ + -DBUDDY_MLIR_ENABLE_DIP_LIB=ON \ + -DBUDDY_ENABLE_PNG=ON $ ninja $ ninja check-buddy ``` @@ -57,4 +58,17 @@ $ export LLVM_MLIR_BUILD_DIR=$PWD/../llvm/build $ export PYTHONPATH=${LLVM_MLIR_BUILD_DIR}/tools/mlir/python_packages/mlir_core:${BUDDY_MLIR_BUILD_DIR}/python_packages:${PYTHONPATH} ``` - +4.Set the `RESNET_EXAMPLE_PATH` environment variable. + +```bash +$ export RESNET_EXAMPLE_PATH=${BUDDY_MLIR_BUILD_DIR}/../examples/BuddyResNet18/ +``` + +4. Build and run the ResNet example + +```bash +$ cmake -G Ninja .. -DBUDDY_RESNET_EXAMPLES=ON +$ ninja buddy-resnet-run +$ cd bin +$ ./buddy-resnet-run +``` \ No newline at end of file diff --git a/examples/BuddyResNet18/buddy-resnet-import.py b/examples/BuddyResNet18/buddy-resnet-import.py new file mode 100644 index 0000000000..725c1ab3a1 --- /dev/null +++ b/examples/BuddyResNet18/buddy-resnet-import.py @@ -0,0 +1,91 @@ +# ===- buddy-resnet-import.py -------------------------------------------------- +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ===--------------------------------------------------------------------------- +# +# This is the ResNet18 model AOT importer. +# +# ===--------------------------------------------------------------------------- + +import os + +from pathlib import Path +import numpy as np +import torch +import torchvision.models as models +import torch._inductor.lowering +from torch._inductor.decomposition import decompositions as inductor_decomp +from torch._decomp import remove_decompositions + +from buddy.compiler.frontend import DynamoCompiler +from buddy.compiler.graph import GraphDriver +from buddy.compiler.graph.transform import simply_fuse +from buddy.compiler.ops import tosa + +# Retrieve the ResNet18 model path from environment variables. +model_path = os.environ.get("RESNET_EXAMPLE_PATH") +if model_path is None: + raise EnvironmentError( + "The environment variable 'RESNET_MODEL_PATH' is not set or is invalid." + ) + +model = models.resnet18(weights=models.ResNet18_Weights.DEFAULT) +model = model.eval() + +# Remove the num_batches_tracked attribute. +for layer in model.modules(): + if isinstance(layer, torch.nn.BatchNorm2d): + if hasattr(layer, "num_batches_tracked"): + del layer.num_batches_tracked + +DEFAULT_DECOMPOSITIONS = [ + torch.ops.aten.max_pool2d_with_indices.default, +] + +remove_decompositions(inductor_decomp, DEFAULT_DECOMPOSITIONS) + +# Initialize Dynamo Compiler with specific configurations as an importer. +dynamo_compiler = DynamoCompiler( + primary_registry=tosa.ops_registry, + aot_autograd_decomposition=inductor_decomp, +) +data = torch.randn([1, 3, 224, 224]) +# Import the model into MLIR module and parameters. +with torch.no_grad(): + graphs = dynamo_compiler.importer(model, data) +assert len(graphs) == 1 +graph = graphs[0] +params = dynamo_compiler.imported_params[graph] +pattern_list = [simply_fuse] +graphs[0].fuse_ops(pattern_list) +driver = GraphDriver(graphs[0]) +driver.subgraphs[0].lower_to_top_level_ir() +path_prefix = os.path.dirname(os.path.abspath(__file__)) +with open(os.path.join(path_prefix, "subgraph0.mlir"), "w") as module_file: + print(driver.subgraphs[0]._imported_module, file=module_file) +with open(os.path.join(path_prefix, "forward.mlir"), "w") as module_file: + print(driver.construct_main_graph(True), file=module_file) + +params = dynamo_compiler.imported_params[graph] +current_path = os.path.dirname(os.path.abspath(__file__)) + + +float32_param = np.concatenate( + [ + param.detach().numpy().reshape([-1]) + for param in params + if param.dtype == torch.float32 + ] +) +float32_param.tofile(Path(current_path) / "arg0.data") diff --git a/examples/BuddyResNet18/buddy-resnet-main.cpp b/examples/BuddyResNet18/buddy-resnet-main.cpp new file mode 100644 index 0000000000..43933b6e49 --- /dev/null +++ b/examples/BuddyResNet18/buddy-resnet-main.cpp @@ -0,0 +1,148 @@ +//===- buddy-resnet-main.cpp ----------------------------------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +constexpr size_t ParamsSize = 11699112; +const std::string ImgName = "dog-224*224.png"; + +// Declare the resnet C interface. +extern "C" void _mlir_ciface_forward(MemRef *output, + MemRef *arg0, + MemRef *input); + +/// Print [Log] label in bold blue format. +void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } + +/// Load parameters into data container. +void loadParameters(const std::string ¶mFilePath, + MemRef ¶ms) { + const auto loadStart = std::chrono::high_resolution_clock::now(); + // Open the parameter file in binary mode. + std::ifstream paramFile(paramFilePath, std::ios::in | std::ios::binary); + if (!paramFile.is_open()) { + throw std::runtime_error("[Error] Failed to open params file!"); + } + printLogLabel(); + std::cout << "Loading params..." << std::endl; + printLogLabel(); + // Print the canonical path of the parameter file. + std::cout << "Params file: " << std::filesystem::canonical(paramFilePath) + << std::endl; + // Read the parameter data into the provided memory reference. + paramFile.read(reinterpret_cast(params.getData()), + sizeof(float) * (params.getSize())); + if (paramFile.fail()) { + throw std::runtime_error("Error occurred while reading params file!"); + } + paramFile.close(); + const auto loadEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration loadTime = + loadEnd - loadStart; + printLogLabel(); + std::cout << "Params load time: " << (double)(loadTime.count()) / 1000 + << "s\n" + << std::endl; +} + + +// Softmax function. +void softmax(float *input, size_t size) { + size_t i; + float max_value = -INFINITY; + double sum = 0.0; + // Find the maximum value in the input array for numerical stability. + for (i = 0; i < size; ++i) { + if (max_value < input[i]) { + max_value = input[i]; + } + } + // Calculate the sum of the exponentials of the input elements, normalized by + // the max value. + for (i = 0; i < size; ++i) { + sum += exp(input[i] - max_value); + } + // Normalize the input array with the softmax calculation. + for (i = 0; i < size; ++i) { + input[i] = exp(input[i] - max_value) / sum; + } +} + +std::string getLabel(int idx) { + std::string resnetDir = getenv("RESNET_EXAMPLE_PATH"); + std::ifstream in(resnetDir + "Labels.txt"); + assert(in.is_open() && "Could not read the label file."); + std::string label; + for (int i = 0; i < idx; ++i) + std::getline(in, label); + std::getline(in, label); + in.close(); + return label; +} + +int main() { + // Print the title of this example. + const std::string title = "ResNet Inference Powered by Buddy Compiler"; + std::cout << "\033[33;1m" << title << "\033[0m" << std::endl; + + // Define the sizes of the input and output tensors. + intptr_t sizesOutput[2] = {1, 1000}; + + // Create input and output containers for the image and model output. + std::string resnetDir = getenv("RESNET_EXAMPLE_PATH"); + std::string imgPath = resnetDir + "/images/" + ImgName; + dip::Image input(imgPath, dip::DIP_RGB, true /* norm */); + MemRef inputResize = dip::Resize4D_NCHW( + &input, dip::INTERPOLATION_TYPE::BILINEAR_INTERPOLATION, + {1, 3, 224, 224} /*{image_cols, image_rows}*/); + + MemRef output(sizesOutput); + + // Load model parameters from the specified file. + std::string paramsDir = resnetDir + "/arg0.data"; + MemRef paramsContainer({ParamsSize}); + loadParameters(paramsDir, paramsContainer); + // Call the forward function of the model. + _mlir_ciface_forward(&output, ¶msContainer, &inputResize); + + auto out = output.getData(); + softmax(out, 1000); + // Find the classification and print the result. + float maxVal = 0; + float maxIdx = 0; + for (int i = 0; i < 1001; ++i) { + if (out[i] > maxVal) { + maxVal = out[i]; + maxIdx = i; + } + } + std::cout << "Classification Index: " << maxIdx << std::endl; + std::cout << "Classification: " << getLabel(maxIdx) << std::endl; + std::cout << "Probability: " << maxVal << std::endl; + + return 0; +} diff --git a/examples/BuddyResNet18/images/curtain-224*224.png b/examples/BuddyResNet18/images/curtain-224*224.png new file mode 100644 index 0000000000..2fa9c06449 Binary files /dev/null and b/examples/BuddyResNet18/images/curtain-224*224.png differ diff --git a/examples/BuddyResNet18/images/curtain.png b/examples/BuddyResNet18/images/curtain.png new file mode 100644 index 0000000000..67a54dbdde Binary files /dev/null and b/examples/BuddyResNet18/images/curtain.png differ diff --git a/examples/BuddyResNet18/images/dog copy.png b/examples/BuddyResNet18/images/dog copy.png new file mode 100644 index 0000000000..4c6000a1fa Binary files /dev/null and b/examples/BuddyResNet18/images/dog copy.png differ diff --git a/examples/BuddyResNet18/images/dog-224*224.png b/examples/BuddyResNet18/images/dog-224*224.png new file mode 100644 index 0000000000..4c6649714c Binary files /dev/null and b/examples/BuddyResNet18/images/dog-224*224.png differ diff --git a/examples/BuddyResNet18/images/dog-32bit_224*224.bmp b/examples/BuddyResNet18/images/dog-32bit_224*224.bmp new file mode 100644 index 0000000000..201f030d7c Binary files /dev/null and b/examples/BuddyResNet18/images/dog-32bit_224*224.bmp differ diff --git a/examples/BuddyResNet18/images/dog.bmp b/examples/BuddyResNet18/images/dog.bmp new file mode 100644 index 0000000000..12f0e0dd11 Binary files /dev/null and b/examples/BuddyResNet18/images/dog.bmp differ diff --git a/examples/BuddyResNet18/images/dog.png b/examples/BuddyResNet18/images/dog.png new file mode 100644 index 0000000000..12f0e0dd11 Binary files /dev/null and b/examples/BuddyResNet18/images/dog.png differ diff --git a/examples/BuddyResNet18/images/ice-cream-224*224.png b/examples/BuddyResNet18/images/ice-cream-224*224.png new file mode 100644 index 0000000000..1cd06efd4e Binary files /dev/null and b/examples/BuddyResNet18/images/ice-cream-224*224.png differ diff --git a/examples/BuddyResNet18/images/ice-cream-24bit-224*224.bmp b/examples/BuddyResNet18/images/ice-cream-24bit-224*224.bmp new file mode 100644 index 0000000000..75ad4012e0 Binary files /dev/null and b/examples/BuddyResNet18/images/ice-cream-24bit-224*224.bmp differ diff --git a/examples/BuddyResNet18/images/ice-cream.png b/examples/BuddyResNet18/images/ice-cream.png new file mode 100644 index 0000000000..9bb408cea7 Binary files /dev/null and b/examples/BuddyResNet18/images/ice-cream.png differ diff --git a/examples/BuddyResNet18/images/kite.png b/examples/BuddyResNet18/images/kite.png new file mode 100644 index 0000000000..51912cddc6 Binary files /dev/null and b/examples/BuddyResNet18/images/kite.png differ diff --git a/examples/BuddyResNet18/images/traffic-light-24bit-224*224.bmp b/examples/BuddyResNet18/images/traffic-light-24bit-224*224.bmp new file mode 100644 index 0000000000..948a1ea796 Binary files /dev/null and b/examples/BuddyResNet18/images/traffic-light-24bit-224*224.bmp differ diff --git a/examples/BuddyResNet18/images/traffic-light-32bit-224*224.bmp b/examples/BuddyResNet18/images/traffic-light-32bit-224*224.bmp new file mode 100644 index 0000000000..c415c8dc32 Binary files /dev/null and b/examples/BuddyResNet18/images/traffic-light-32bit-224*224.bmp differ diff --git a/examples/BuddyResNet18/images/traffic-light.png b/examples/BuddyResNet18/images/traffic-light.png new file mode 100644 index 0000000000..3fa00918da Binary files /dev/null and b/examples/BuddyResNet18/images/traffic-light.png differ diff --git a/examples/BuddyStableDiffusion/.gitignore b/examples/BuddyStableDiffusion/.gitignore new file mode 100644 index 0000000000..ffee494f37 --- /dev/null +++ b/examples/BuddyStableDiffusion/.gitignore @@ -0,0 +1,5 @@ +# model params file +*.data + +# model mlir file +*.mlir diff --git a/examples/BuddyStableDiffusion/CMakeLists.txt b/examples/BuddyStableDiffusion/CMakeLists.txt new file mode 100644 index 0000000000..10ce9f1a85 --- /dev/null +++ b/examples/BuddyStableDiffusion/CMakeLists.txt @@ -0,0 +1,308 @@ +add_custom_command( + OUTPUT ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/arg0_text_encoder.data + ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/arg1_text_encoder.data + ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/arg0_unet.data + ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/arg0_vae.data + ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/forward_text_encoder.mlir + ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/subgraph0_text_encoder.mlir + ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/forward_unet.mlir + ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/subgraph0_unet.mlir + ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/forward_vae.mlir + ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/subgraph0_vae.mlir + COMMAND python3 ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/import-stable-diffusion.py + COMMENT "Generating forward.mlir, subgraph0.mlir and parameter files" +) + +add_custom_command( + OUTPUT forward_text_encoder.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/forward_text_encoder.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" | + ${BUDDY_BINARY_DIR}/buddy-opt + -arith-expand + -eliminate-empty-tensors + -empty-tensor-to-alloc-tensor + -one-shot-bufferize + -matmul-parallel-vectorization-optimize + -batchmatmul-optimize + -convert-linalg-to-affine-loops + -affine-loop-fusion + -affine-parallelize + -lower-affine + -convert-scf-to-openmp + -func-bufferize + -arith-bufferize + -tensor-bufferize + -buffer-deallocation + -finalizing-bufferize + -convert-vector-to-scf + -expand-strided-metadata + -convert-vector-to-llvm + -memref-expand + -arith-expand + -convert-arith-to-llvm + -finalize-memref-to-llvm + -convert-scf-to-cf + -llvm-request-c-wrappers + -convert-openmp-to-llvm + -convert-arith-to-llvm + -convert-math-to-llvm + -convert-math-to-libm + -convert-func-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O3 + -o ${BUDDY_BINARY_DIR}/../examples/BuddyStableDiffusion/forward_text_encoder.o + DEPENDS buddy-opt ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/forward_text_encoder.mlir + COMMENT "Building forward_text_encoder.o " + VERBATIM) + +add_custom_command( + OUTPUT subgraph0_text_encoder.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/subgraph0_text_encoder.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" | + ${BUDDY_BINARY_DIR}/buddy-opt + -convert-elementwise-to-linalg + -arith-expand + -eliminate-empty-tensors + -empty-tensor-to-alloc-tensor + -one-shot-bufferize + -matmul-parallel-vectorization-optimize + -batchmatmul-optimize + -convert-linalg-to-affine-loops + -affine-loop-fusion + -affine-parallelize + -lower-affine + -convert-scf-to-openmp + -func-bufferize-dynamic-offset + -tensor-bufferize + -arith-bufferize + -buffer-deallocation + -finalizing-bufferize + -convert-vector-to-scf + -expand-strided-metadata + -cse + -convert-vector-to-llvm + -memref-expand + -arith-expand + -convert-arith-to-llvm + -finalize-memref-to-llvm + -convert-scf-to-cf + -llvm-request-c-wrappers + -convert-openmp-to-llvm + -convert-arith-to-llvm + -convert-math-to-llvm + -convert-math-to-libm + -convert-func-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O3 + -o ${BUDDY_BINARY_DIR}/../examples/BuddyStableDiffusion/subgraph0_text_encoder.o + DEPENDS buddy-opt ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/subgraph0_text_encoder.mlir + COMMENT "Building subgraph0_text_encoder.o " + VERBATIM) + +add_custom_command( + OUTPUT forward_unet.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/forward_unet.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" | + ${BUDDY_BINARY_DIR}/buddy-opt + -arith-expand + -eliminate-empty-tensors + -empty-tensor-to-alloc-tensor + -one-shot-bufferize + -matmul-parallel-vectorization-optimize + -batchmatmul-optimize + -convert-linalg-to-affine-loops + -affine-loop-fusion + -affine-parallelize + -lower-affine + -convert-scf-to-openmp + -func-bufferize + -arith-bufferize + -tensor-bufferize + -buffer-deallocation + -finalizing-bufferize + -convert-vector-to-scf + -expand-strided-metadata + -convert-vector-to-llvm + -memref-expand + -arith-expand + -convert-arith-to-llvm + -finalize-memref-to-llvm + -convert-scf-to-cf + -llvm-request-c-wrappers + -convert-openmp-to-llvm + -convert-arith-to-llvm + -convert-math-to-llvm + -convert-math-to-libm + -convert-func-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O3 + -o ${BUDDY_BINARY_DIR}/../examples/BuddyStableDiffusion/forward_unet.o + DEPENDS buddy-opt ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/forward_unet.mlir + COMMENT "Building forward_unet.o " + VERBATIM) + +add_custom_command( + OUTPUT subgraph0_unet.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/subgraph0_unet.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" | + ${BUDDY_BINARY_DIR}/buddy-opt + -convert-elementwise-to-linalg + -arith-expand + -eliminate-empty-tensors + -empty-tensor-to-alloc-tensor + -one-shot-bufferize + -matmul-parallel-vectorization-optimize + -batchmatmul-optimize + -convert-linalg-to-affine-loops + -affine-loop-fusion + -affine-parallelize + -lower-affine + -convert-scf-to-openmp + -func-bufferize-dynamic-offset + -tensor-bufferize + -arith-bufferize + -buffer-deallocation + -finalizing-bufferize + -convert-vector-to-scf + -expand-strided-metadata + -cse + -convert-vector-to-llvm + -memref-expand + -arith-expand + -convert-arith-to-llvm + -finalize-memref-to-llvm + -convert-scf-to-cf + -llvm-request-c-wrappers + -convert-openmp-to-llvm + -convert-arith-to-llvm + -convert-math-to-llvm + -convert-math-to-libm + -convert-func-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O3 + -o ${BUDDY_BINARY_DIR}/../examples/BuddyStableDiffusion/subgraph0_unet.o + DEPENDS buddy-opt ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/subgraph0_unet.mlir + COMMENT "Building subgraph0_unet.o " + VERBATIM) + +add_custom_command( + OUTPUT forward_vae.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/forward_vae.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" | + ${BUDDY_BINARY_DIR}/buddy-opt + -arith-expand + -eliminate-empty-tensors + -empty-tensor-to-alloc-tensor + -one-shot-bufferize + -matmul-parallel-vectorization-optimize + -batchmatmul-optimize + -convert-linalg-to-affine-loops + -affine-loop-fusion + -affine-parallelize + -lower-affine + -convert-scf-to-openmp + -func-bufferize + -arith-bufferize + -tensor-bufferize + -buffer-deallocation + -finalizing-bufferize + -convert-vector-to-scf + -expand-strided-metadata + -convert-vector-to-llvm + -memref-expand + -arith-expand + -convert-arith-to-llvm + -finalize-memref-to-llvm + -convert-scf-to-cf + -llvm-request-c-wrappers + -convert-openmp-to-llvm + -convert-arith-to-llvm + -convert-math-to-llvm + -convert-math-to-libm + -convert-func-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O3 + -o ${BUDDY_BINARY_DIR}/../examples/BuddyStableDiffusion/forward_vae.o + DEPENDS buddy-opt ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/forward_vae.mlir + COMMENT "Building forward_vae.o " + VERBATIM) + +add_custom_command( + OUTPUT subgraph0_vae.o + COMMAND ${LLVM_TOOLS_BINARY_DIR}/mlir-opt ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/subgraph0_vae.mlir + -pass-pipeline "builtin.module(func.func(tosa-to-linalg-named),func.func(tosa-to-linalg),func.func(tosa-to-tensor),func.func(tosa-to-arith))" | + ${BUDDY_BINARY_DIR}/buddy-opt + -convert-elementwise-to-linalg + -arith-expand + -eliminate-empty-tensors + -empty-tensor-to-alloc-tensor + -one-shot-bufferize + -matmul-parallel-vectorization-optimize + -batchmatmul-optimize + -convert-linalg-to-affine-loops + -affine-loop-fusion + -affine-parallelize + -lower-affine + -convert-scf-to-openmp + -func-bufferize-dynamic-offset + -tensor-bufferize + -arith-bufferize + -buffer-deallocation + -finalizing-bufferize + -convert-vector-to-scf + -expand-strided-metadata + -cse + -convert-vector-to-llvm + -memref-expand + -arith-expand + -convert-arith-to-llvm + -finalize-memref-to-llvm + -convert-scf-to-cf + -llvm-request-c-wrappers + -convert-openmp-to-llvm + -convert-arith-to-llvm + -convert-math-to-llvm + -convert-math-to-libm + -convert-func-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llvm-as | + ${LLVM_TOOLS_BINARY_DIR}/llc -filetype=obj -relocation-model=pic -O3 + -o ${BUDDY_BINARY_DIR}/../examples/BuddyStableDiffusion/subgraph0_vae.o + DEPENDS buddy-opt ${BUDDY_EXAMPLES_DIR}/BuddyStableDiffusion/subgraph0_vae.mlir + COMMENT "Building subgraph0_vae.o " + VERBATIM) + + +add_library(TEXTENCODER STATIC subgraph0_text_encoder.o forward_text_encoder.o) +add_library(UNET STATIC subgraph0_unet.o forward_unet.o) +add_library(VAE STATIC subgraph0_vae.o forward_vae.o) + +SET_TARGET_PROPERTIES(TEXTENCODER PROPERTIES LINKER_LANGUAGE C) +SET_TARGET_PROPERTIES(UNET PROPERTIES LINKER_LANGUAGE C) +SET_TARGET_PROPERTIES(VAE PROPERTIES LINKER_LANGUAGE C) + +add_executable(buddy-stable-diffusion-run buddy-stable-diffusion-main.cpp) +target_link_directories(buddy-stable-diffusion-run PRIVATE ${LLVM_LIBRARY_DIR}) + +set(BUDDY_STABLE_DIFFUSION_LIBS TEXTENCODER UNET VAE mlir_c_runner_utils omp) + +if(BUDDY_MLIR_USE_MIMALLOC) + list(APPEND BUDDY_LLAMA_LIBS mimalloc) +endif() + +find_package(JPEG REQUIRED) +find_package(PNG REQUIRED) + +target_link_libraries(buddy-stable-diffusion-run ${BUDDY_STABLE_DIFFUSION_LIBS} ${JPEG_LIBRARIES} ${PNG_LIBRARIES}) + diff --git a/examples/BuddyStableDiffusion/README.md b/examples/BuddyStableDiffusion/README.md new file mode 100644 index 0000000000..a114cbef41 --- /dev/null +++ b/examples/BuddyStableDiffusion/README.md @@ -0,0 +1,71 @@ +# Buddy Compiler Stable Diffusion Example +1. Enter Python virtual environment + +We recommend you to use anaconda3 to create python virtual environment. You should install python packages as buddy-mlir/requirements. + +``` +$ conda activate +$ cd buddy-mlir +$ pip install -r requirements.txt +``` + +2. Build and check LLVM/MLIR + +``` +$ cd buddy-mlir +$ mkdir llvm/build +$ cd llvm/build +$ cmake -G Ninja ../llvm \ + -DLLVM_ENABLE_PROJECTS="mlir;clang;openmp" \ + -DLLVM_TARGETS_TO_BUILD="host;RISCV" \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DOPENMP_ENABLE_LIBOMPTARGET=OFF \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DMLIR_ENABLE_BINDINGS_PYTHON=ON \ + -DPython3_EXECUTABLE=$(which python3) +$ ninja check-clang check-mlir omp +``` + +3. Build and check buddy-mlir + +``` +$ cd buddy-mlir +$ mkdir build +$ cd build +$ cmake -G Ninja .. \ + -DMLIR_DIR=$PWD/../llvm/build/lib/cmake/mlir \ + -DLLVM_DIR=$PWD/../llvm/build/lib/cmake/llvm \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DCMAKE_BUILD_TYPE=RELEASE \ + -DBUDDY_MLIR_ENABLE_PYTHON_PACKAGES=ON \ + -DPython3_EXECUTABLE=$(which python3) +$ ninja +$ ninja check-buddy +``` + +Set the `PYTHONPATH` environment variable. Make sure that the `PYTHONPATH` variable includes the directory of LLVM/MLIR python bindings and the directory of Buddy MLIR python packages. + +``` +$ export PYTHONPATH=/path-to-buddy-mlir/llvm/build/tools/mlir/python_packages/mlir_core:/path-to-buddy-mlir/build/python_packages:${PYTHONPATH} + +// For example: +// Navigate to your buddy-mlir/build directory +$ cd buddy-mlir/build +$ export BUDDY_MLIR_BUILD_DIR=$PWD +$ export LLVM_MLIR_BUILD_DIR=$PWD/../llvm/build +$ export PYTHONPATH=${LLVM_MLIR_BUILD_DIR}/tools/mlir/python_packages/mlir_core:${BUDDY_MLIR_BUILD_DIR}/python_packages:${PYTHONPATH} +``` + +6. Build and run Stable Diffusion example + +``` +$ cmake -G Ninja .. -DBUDDY_STABLE_DIFFUSION_EXAMPLES=ON +$ ninja buddy-stable-diffusion-run +$ cd bin +$ ./buddy-stable-diffusion-run +``` +This build will spend a few minutes. We recommend you to use better cpu such as server-level cpu to run buddy-stable-diffusion-run. + +If you wish to utilize `mimalloc` as a memory allocator, you need to set `BUDDY_MLIR_USE_MIMALLOC` and `MIMALLOC_BUILD_DIR`. +For more details, please see [here](../../thirdparty/README.md#the-mimalloc-allocator). + diff --git a/examples/BuddyStableDiffusion/buddy-stable-diffusion-main.cpp b/examples/BuddyStableDiffusion/buddy-stable-diffusion-main.cpp new file mode 100644 index 0000000000..712bed26eb --- /dev/null +++ b/examples/BuddyStableDiffusion/buddy-stable-diffusion-main.cpp @@ -0,0 +1,504 @@ +//===- buddy-stable-diffusion-main.cpp-------------------------------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace buddy; + +// Capture input message. +void getUserInput(std::string &inputStr) { + std::cout << "\nPlease input your prompt:" << std::endl; + std::cout << ">>> "; + getline(std::cin, inputStr); + std::cout << std::endl; +} + +void getInferenceSteps(int &input) { + std::cout << "Please enter the number of inference steps:" << std::endl; + std::cout << ">>> "; + std::cin >> input; + std::cout << std::endl; +} + +void getFileName(std::string &input) { + std::cout << "Please enter the file name of the generated image:" + << std::endl; + std::cout << ">>> "; + std::cin >> input; + std::cout << std::endl; +} + +void printIterInfo(size_t iterIdx, double time) { + std::cout << "\033[32;1m[Denoising steps " << iterIdx << "] \033[0m"; + std::cout << "Time: " << time << "s" << std::endl; +} + +// Print [Log] label in bold blue format. +void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } + +// Load parameters into data container. +void loadParametersInt64(const std::string &int64ParamPath, + MemRef &int64Param) { + + std::ifstream int64ParamFile(int64ParamPath, std::ios::in | std::ios::binary); + if (!int64ParamFile.is_open()) { + std::string errMsg = "Failed to open int64 param file: " + + std::filesystem::canonical(int64ParamPath).string(); + throw std::runtime_error(errMsg); + } + int64ParamFile.read(reinterpret_cast(int64Param.getData()), + int64Param.getSize() * sizeof(long long)); + if (int64ParamFile.fail()) { + throw std::runtime_error("Failed to read int64 param file"); + } + int64ParamFile.close(); +} + +// Load parameters into data container. +void loadParametersFloat(const std::string &floatParamPath, + MemRef &floatParam) { + std::ifstream floatParamFile(floatParamPath, std::ios::in | std::ios::binary); + if (!floatParamFile.is_open()) { + std::string errMsg = "Failed to open float param file: " + + std::filesystem::canonical(floatParamPath).string(); + throw std::runtime_error(errMsg); + } + floatParamFile.read(reinterpret_cast(floatParam.getData()), + floatParam.getSize() * sizeof(float)); + if (floatParamFile.fail()) { + throw std::runtime_error("Failed to read float param file"); + } + floatParamFile.close(); +} + +void fill_random_normal(MemRef &input, size_t size, unsigned seed) { + std::mt19937 generator(seed); + std::normal_distribution distribution(0.0f, 1.0f); + for (size_t i = 0; i < size; i++) { + input.getData()[i] = distribution(generator); + } +} + +// SchedulerConfig structure, which contains the necessary configuration +// information +struct SchedulerConfig { + std::string prediction_type; // Prediction type: 'epsilon' or 'v_prediction' + MemRef alphas_cumprod; // Store alpha t + MemRef cur_sample; + float final_alpha_cumprod; // Final alpha + + SchedulerConfig(const MemRef &alphas, + const MemRef &sample) + : alphas_cumprod(alphas), cur_sample(sample) {} +}; + +MemRef generate_betas(float beta_start, float beta_end, + size_t num_train_timesteps) { + MemRef betas({num_train_timesteps}); + + // Calculate the square root range + float start_sqrt = std::sqrt(beta_start); + float end_sqrt = std::sqrt(beta_end); + for (size_t i = 0; i < num_train_timesteps; i++) { + float t = static_cast(i) / + (num_train_timesteps - 1); // Calculate the scale + float value = + start_sqrt + t * (end_sqrt - start_sqrt); // Linear interpolation + betas[i] = value * value; // square + } + return betas; +} + +// Auxiliary function: scalar multiplication of multidimensional arrays +MemRef memref_mul_scalar(const MemRef &memref, + float scalar) { + MemRef result({1, 4, 64, 64}); + for (int i = 0; i < 1 * 4 * 64 * 64; ++i) { + result[i] = memref[i] * scalar; + } + return result; +} + +// Auxiliary function: Addition of multi-dimensional arrays +MemRef memref_add(const MemRef &a, + const MemRef &b) { + MemRef result({1, 4, 64, 64}); + for (int i = 0; i < 1 * 4 * 64 * 64; ++i) { + result[i] = a[i] + b[i]; + } + return result; +} + +// get_prev_sample function implementation +MemRef get_prev_sample(const MemRef &sample, int timestep, + int prev_timestep, + const MemRef &model_output, + SchedulerConfig &config) { + float alpha_prod_t = config.alphas_cumprod.getData()[timestep]; + float alpha_prod_t_prev = (prev_timestep >= 0) + ? config.alphas_cumprod.getData()[prev_timestep] + : config.final_alpha_cumprod; + float beta_prod_t = 1.0f - alpha_prod_t; + float beta_prod_t_prev = 1.0f - alpha_prod_t_prev; + MemRef prev_sample({1, 4, 64, 64}); + + // Processing prediction type + if (config.prediction_type == "v_prediction") { + // v_prediction formula + for (int i = 0; i < 1 * 4 * 64 * 64; ++i) { + prev_sample[i] = std::sqrt(alpha_prod_t) * model_output[i] + + std::sqrt(beta_prod_t) * sample[i]; + } + } else if (config.prediction_type != "epsilon") { + throw std::invalid_argument( + "prediction_type must be one of `epsilon` or `v_prediction`"); + } + + // Calculate sample_coeff + float sample_coeff = std::sqrt(alpha_prod_t_prev / alpha_prod_t); + + // Calculate model_output_denom_coeff + float model_output_denom_coeff = + alpha_prod_t * std::sqrt(beta_prod_t_prev) + + std::sqrt(alpha_prod_t * beta_prod_t * alpha_prod_t_prev); + // Apply formula (9) to calculate prev_sample + for (int i = 0; i < 1 * 4 * 64 * 64; ++i) { + prev_sample[i] = sample_coeff * sample[i] - + (alpha_prod_t_prev - alpha_prod_t) * model_output[i] / + model_output_denom_coeff; + } + + return prev_sample; +} + +// The core function step_plms performs the inference step +MemRef step_plms(const MemRef model_output, int timestep, + MemRef sample, int num_inference_steps, + SchedulerConfig &config, int &counter, + std::vector> &ets) { + int prev_timestep = timestep - 1000 / num_inference_steps; + if (counter != 1) { + if (ets.size() > 3) + ets.erase(ets.begin(), ets.begin() + ets.size() - 3); + ets.push_back(model_output); + } else { + prev_timestep = timestep; + timestep += 1000 / num_inference_steps; + } + + MemRef updated_model_output({1, 4, 64, 64}); + + if (ets.size() == 1 && counter == 0) { + updated_model_output = model_output; + config.cur_sample = sample; + } else if (ets.size() == 1 && counter == 1) { + updated_model_output = + memref_mul_scalar(memref_add(model_output, ets.back()), 0.5); + sample = config.cur_sample; + } else if (ets.size() == 2) { + updated_model_output = memref_mul_scalar( + memref_add(memref_mul_scalar(ets.back(), 3.0), + memref_mul_scalar(ets[ets.size() - 2], -1.0)), + 0.5); + } else if (ets.size() == 3) { + updated_model_output = memref_mul_scalar( + memref_add(memref_add(memref_mul_scalar(ets.back(), 23.0), + memref_mul_scalar(ets[ets.size() - 2], -16.0)), + memref_mul_scalar(ets[ets.size() - 3], 5.0)), + 1.0 / 12.0); + } else { + updated_model_output = memref_mul_scalar( + memref_add(memref_add(memref_add(memref_mul_scalar(ets.back(), 55.0), + memref_mul_scalar(ets[ets.size() - 2], + -59.0)), + memref_mul_scalar(ets[ets.size() - 3], 37.0)), + memref_mul_scalar(ets[ets.size() - 4], -9.0)), + 1.0 / 24.0); + } + + MemRef prev_sample = get_prev_sample( + sample, timestep, prev_timestep, updated_model_output, config); + + return prev_sample; +} + +std::vector set_timesteps(int num_inference_steps) { + std::vector timesteps; + std::vector prk_timesteps; + std::vector plms_timesteps; + int step_ratio = 1000 / num_inference_steps; + timesteps.resize(num_inference_steps); + for (int i = 0; i < num_inference_steps; ++i) { + timesteps[i] = static_cast(round(i * step_ratio)) + 1; + } + + prk_timesteps.clear(); + plms_timesteps.resize(timesteps.size() - 1 + 2); + std::copy(timesteps.begin(), timesteps.end() - 1, plms_timesteps.begin()); + if (num_inference_steps > 1) + plms_timesteps[plms_timesteps.size() - 2] = timesteps[timesteps.size() - 2]; + plms_timesteps[plms_timesteps.size() - 1] = timesteps.back(); + std::reverse(plms_timesteps.begin(), plms_timesteps.end()); + + timesteps = prk_timesteps; // Adjust as needed + timesteps.insert(timesteps.end(), plms_timesteps.begin(), + plms_timesteps.end()); + if (num_inference_steps == 1) + timesteps.resize(1); + return timesteps; +} + +struct MemRefContainer { + MemRef memRef3D; + MemRef memRef2D; + + MemRefContainer(MemRef m1, MemRef m2) + : memRef3D(m1), memRef2D(m2) {} +}; + +extern "C" void _mlir_ciface_forward_text_encoder(MemRefContainer *result, + MemRef *arg0, + MemRef *arg1, + MemRef *arg2); + +extern "C" void _mlir_ciface_forward_unet(MemRef *result, + MemRef *arg0, + MemRef *arg1, + MemRef *arg2, + MemRef *arg3); + +extern "C" void _mlir_ciface_forward_vae(MemRef *result, + MemRef *arg0, + MemRef *arg1); + +int main() { + const std::string title = + "Stable Diffusion Inference Powered by Buddy Compiler"; + std::cout << "\033[33;1m" << title << "\033[0m" << std::endl; + + // Define directories of vacabulary and parameter file. + const std::string vocabDir = "../../examples/BuddyStableDiffusion/vocab.txt"; + const std::string TextEncoderParamsDir1 = + "../../examples/BuddyStableDiffusion/arg0_text_encoder.data"; + const std::string TextEncoderParamsDir2 = + "../../examples/BuddyStableDiffusion/arg1_text_encoder.data"; + const std::string UnetParamsDir = + "../../examples/BuddyStableDiffusion/arg0_unet.data"; + const std::string VaeParamsDir = + "../../examples/BuddyStableDiffusion/arg0_vae.data"; + + // Get user message. + std::string inputStr; + std::string image_name; + int InferenceSteps; + getUserInput(inputStr); + getInferenceSteps(InferenceSteps); + getFileName(image_name); + // Define the text_encoder parameter + MemRef myMemRef1({1, 77, 1024}); + MemRef myMemRef2({1, 1024}); + MemRefContainer resultTextEncoderPos(myMemRef1, myMemRef2); + MemRefContainer resultTextEncoderNeg(myMemRef1, myMemRef2); + MemRef TextEncoderOut({2, 77, 1024}); + MemRefContainer *ptrPos = &resultTextEncoderPos; + MemRefContainer *ptrNeg = &resultTextEncoderNeg; + MemRef arg0_text_encoder({340387840}); + MemRef arg1_text_encoder({77}); + Text TextEncoderInputIDsPos(inputStr); + TextEncoderInputIDsPos.tokenizeStableDiffusion(vocabDir, 77); + Text TextEncoderInputIDsNeg(""); + TextEncoderInputIDsNeg.tokenizeStableDiffusion(vocabDir, 77); + // Define unet parameters + MemRef resultUnet({1, 4, 64, 64}); + MemRef arg0_unet({865910724}); + MemRef latents({1, 4, 64, 64}); + MemRef timestep({1}); + // Define vae parameters + MemRef resultVae({1, 3, 512, 512}); + MemRef arg0_vae({49490199}); + + // Output directory information + printLogLabel(); + std::cout << "Vocab file: " << std::filesystem::canonical(vocabDir) + << std::endl; + printLogLabel(); + std::cout << "Params file: " << std::endl + << std::filesystem::canonical(TextEncoderParamsDir1) << std::endl + << std::filesystem::canonical(TextEncoderParamsDir2) << std::endl + << std::filesystem::canonical(UnetParamsDir) << std::endl + << std::filesystem::canonical(VaeParamsDir) << std::endl; + + // Loading model parameters + printLogLabel(); + std::cout << "Loading params..." << std::endl; + const auto loadStart = std::chrono::high_resolution_clock::now(); + loadParametersFloat(TextEncoderParamsDir1, arg0_text_encoder); + loadParametersInt64(TextEncoderParamsDir2, arg1_text_encoder); + loadParametersFloat(UnetParamsDir, arg0_unet); + loadParametersFloat(VaeParamsDir, arg0_vae); + const auto loadEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration loadTime = + loadEnd - loadStart; + printLogLabel(); + std::cout << "Params load time: " << (double)(loadTime.count()) / 1000 + << "s\n" + << std::endl; + + // Encode prompt + printLogLabel(); + std::cout << "Encoding prompt..." << std::endl; + const auto encodeStart = std::chrono::high_resolution_clock::now(); + _mlir_ciface_forward_text_encoder( + ptrPos, &arg0_text_encoder, &arg1_text_encoder, &TextEncoderInputIDsPos); + _mlir_ciface_forward_text_encoder( + ptrNeg, &arg0_text_encoder, &arg1_text_encoder, &TextEncoderInputIDsNeg); + const auto encodeEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration encodeTime = + encodeEnd - encodeStart; + printLogLabel(); + std::cout << "Prompt encode time: " << (double)(encodeTime.count()) / 1000 + << "s\n" + << std::endl; + // Concatenation of Positive and Negative embeddings + auto TextEncoderOutPos = ptrPos->memRef3D; + auto TextEncoderOutNeg = ptrNeg->memRef3D; + for (int i = 0; i < 2 * 77 * 1024; i++) { + if (i < 1 * 77 * 1024) + TextEncoderOut.getData()[i] = TextEncoderOutNeg.getData()[i]; + else + TextEncoderOut.getData()[i] = + TextEncoderOutPos.getData()[i % (1 * 77 * 1024)]; + } + // Generate initial noise + fill_random_normal(latents, 1 * 4 * 64 * 64, 42); + + printLogLabel(); + std::cout << "Start denoising..." << std::endl; + // Set config + MemRef alphas_cumprod({1000}); + MemRef cur_sample({1, 4, 64, 64}); + SchedulerConfig config(alphas_cumprod, cur_sample); + alphas_cumprod = generate_betas(0.00085, 0.012, 1000); + for (int i = 0; i < 1000; i++) { + alphas_cumprod.getData()[i] = 1.0 - alphas_cumprod.getData()[i]; + if (i >= 1) + alphas_cumprod.getData()[i] = + alphas_cumprod.getData()[i] * alphas_cumprod.getData()[i - 1]; + config.alphas_cumprod.getData()[i] = alphas_cumprod.getData()[i]; + } + config.final_alpha_cumprod = config.alphas_cumprod.getData()[0]; + config.prediction_type = "epsilon"; + std::vector> ets; + auto timesteps = set_timesteps(InferenceSteps); + + // Denoising loop + const auto inferenceTotalStart = std::chrono::high_resolution_clock::now(); + for (int i = 0; i < (int)timesteps.size(); i++) { + MemRef noise({2, 4, 64, 64}); + for (int j = 0; j < 2 * 4 * 64 * 64; j++) + noise.getData()[j] = latents.getData()[j % (1 * 4 * 64 * 64)]; + + timestep.getData()[0] = timesteps[i]; + const auto inferenceStart = std::chrono::high_resolution_clock::now(); + _mlir_ciface_forward_unet(&resultUnet, &arg0_unet, &noise, ×tep, + &TextEncoderOut); + const auto inferenceEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration inferenceTime = + inferenceEnd - inferenceStart; + printIterInfo(i, inferenceTime.count() / 1000); + MemRef pred_noise({2, 4, 64, 64}); + for (int j = 0; j < 1 * 4 * 64 * 64; j++) { + pred_noise.getData()[j] = + resultUnet.getData()[j] + + 7.5 * (resultUnet.getData()[j + 1 * 4 * 64 * 64] - + resultUnet.getData()[j]); + } + latents = step_plms(pred_noise, timesteps[i], latents, InferenceSteps, + config, i, ets); + } + const auto inferenceTotalEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration inferenceTotalTime = + inferenceTotalEnd - inferenceTotalStart; + printLogLabel(); + std::cout << "Denoising complete." << std::endl; + printLogLabel(); + std::cout << "Total time spent on denoising: " + << (double)(inferenceTotalTime.count()) / 1000 << "s" << std::endl; + + for (int i = 0; i < 1 * 4 * 64 * 64; i++) { + latents.getData()[i] = latents.getData()[i] / 0.18215; + } + + // Decode + std::cout << std::endl; + printLogLabel(); + std::cout << "Start decoding..." << std::endl; + const auto decodeStart = std::chrono::high_resolution_clock::now(); + _mlir_ciface_forward_vae(&resultVae, &arg0_vae, &latents); + const auto decodeEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration decodeTime = + decodeEnd - decodeStart; + printLogLabel(); + std::cout << "Decode time: " << (double)(decodeTime.count()) / 1000 << "s\n" + << std::endl; + + for (int i = 0; i < 1 * 3 * 512 * 512; i++) { + resultVae.getData()[i] = (resultVae.getData()[i] + 1) / 2; + // clamp(0, 1) + if (resultVae.getData()[i] < 0) + resultVae.getData()[i] = 0; + if (resultVae.getData()[i] > 1) + resultVae.getData()[i] = 1; + resultVae.getData()[i] = resultVae.getData()[i] * 255; + } + intptr_t sizes[4] = {512, 512, 3, 1}; + Img img(sizes); + + // Rearrange the images + for (int i = 0; i < 3 * 512 * 512; i += 3) { + img.getData()[i] = resultVae.getData()[i / 3 + 512 * 512 * 2]; + img.getData()[i + 1] = resultVae.getData()[i / 3 + 512 * 512 * 1]; + img.getData()[i + 2] = resultVae.getData()[i / 3 + 512 * 512 * 0]; + } + + String Imgfilename = + "../../examples/BuddyStableDiffusion/" + image_name + ".bmp"; + // Call the imwrite function + bool success = imwrite(Imgfilename, img); + + printLogLabel(); + std::cout << "The prompt used to generate the image:" << inputStr + << std::endl; + + printLogLabel(); + if (success) { + std::cout << "Image saved successfully to " + << std::filesystem::canonical(Imgfilename) << std::endl; + } else { + std::cerr << "Failed to save the image." << std::endl; + } + + return 0; +} + diff --git a/examples/BuddyStableDiffusion/import-stable-diffusion.py b/examples/BuddyStableDiffusion/import-stable-diffusion.py new file mode 100644 index 0000000000..e39b08366a --- /dev/null +++ b/examples/BuddyStableDiffusion/import-stable-diffusion.py @@ -0,0 +1,194 @@ +# ===- import-stable-diffusion.py ---------------------------------------------- +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ===--------------------------------------------------------------------------- +# +# This is the Stable Diffusion model AOT importer. +# +# ===--------------------------------------------------------------------------- +import os + +from pathlib import Path +import numpy +import torch +import torchvision.models as models +from torch._inductor.decomposition import decompositions as inductor_decomp + +from buddy.compiler.frontend import DynamoCompiler +from buddy.compiler.graph import GraphDriver +from buddy.compiler.graph.transform import simply_fuse +from buddy.compiler.ops import tosa +from diffusers import StableDiffusionPipeline + +device = torch.device("cpu") +model_id = "stabilityai/stable-diffusion-2-1-base" + +pipe = StableDiffusionPipeline.from_pretrained( + model_id, torch_dtype=torch.float32 +) +pipe = pipe.to(device) +pipe.text_encoder.eval() +pipe.unet.eval() +pipe.vae.eval() + +text_encoder = pipe.text_encoder.forward +unet = pipe.unet.forward +vae = pipe.vae.decode + + +# Initialize Dynamo Compiler with specific configurations as an importer. +dynamo_compiler_text_encoder = DynamoCompiler( + primary_registry=tosa.ops_registry, + aot_autograd_decomposition=inductor_decomp, + func_name="forward_text_encoder", +) + +dynamo_compiler_unet = DynamoCompiler( + primary_registry=tosa.ops_registry, + aot_autograd_decomposition=inductor_decomp, + func_name="forward_unet", +) + +dynamo_compiler_vae = DynamoCompiler( + primary_registry=tosa.ops_registry, + aot_autograd_decomposition=inductor_decomp, + func_name="forward_vae", +) + +data_text_encoder = torch.ones((1, 77), dtype=torch.int64).to(device) +data_unet = { + "sample": torch.ones((2, 4, 64, 64), dtype=torch.float32).to(device), + "timestep": torch.tensor([1], dtype=torch.float32).to(device), + "encoder_hidden_states": torch.ones((2, 77, 1024), dtype=torch.float32).to( + device + ), +} +data_vae = torch.ones((1, 4, 64, 64), dtype=torch.float32).to(device) + + +# Import the model into MLIR module and parameters. +with torch.no_grad(): + graphs_text_encoder = dynamo_compiler_text_encoder.importer( + text_encoder, data_text_encoder, None + ) + graphs_unet = dynamo_compiler_unet.importer(unet, **data_unet) + graphs_vae = dynamo_compiler_vae.importer(vae, data_vae, return_dict=False) + + +assert len(graphs_text_encoder) == 1 +assert len(graphs_unet) == 1 +assert len(graphs_vae) == 1 + +graph_text_encoder = graphs_text_encoder[0] +graph_unet = graphs_unet[0] +graph_vae = graphs_vae[0] + +params_text_encoder = dynamo_compiler_text_encoder.imported_params[ + graph_text_encoder +] +params_unet = dynamo_compiler_unet.imported_params[graph_unet] +params_vae = dynamo_compiler_vae.imported_params[graph_vae] + +pattern_list = [simply_fuse] + +graphs_text_encoder[0].fuse_ops(pattern_list) +graphs_unet[0].fuse_ops(pattern_list) +graphs_vae[0].fuse_ops(pattern_list) + +driver_text_encoder = GraphDriver(graphs_text_encoder[0]) +driver_unet = GraphDriver(graphs_unet[0]) +driver_vae = GraphDriver(graphs_vae[0]) + +driver_text_encoder._subgraphs[ + "subgraph0_text_encoder" +] = driver_text_encoder._subgraphs.pop("subgraph0") +driver_text_encoder._subgraphs_inputs[ + "subgraph0_text_encoder" +] = driver_text_encoder._subgraphs_inputs.pop("subgraph0") +driver_text_encoder._subgraphs_outputs[ + "subgraph0_text_encoder" +] = driver_text_encoder._subgraphs_outputs.pop("subgraph0") +driver_unet._subgraphs["subgraph0_unet"] = driver_unet._subgraphs.pop( + "subgraph0" +) +driver_unet._subgraphs_inputs[ + "subgraph0_unet" +] = driver_unet._subgraphs_inputs.pop("subgraph0") +driver_unet._subgraphs_outputs[ + "subgraph0_unet" +] = driver_unet._subgraphs_outputs.pop("subgraph0") +driver_vae._subgraphs["subgraph0_vae"] = driver_vae._subgraphs.pop("subgraph0") +driver_vae._subgraphs_inputs[ + "subgraph0_vae" +] = driver_vae._subgraphs_inputs.pop("subgraph0") +driver_vae._subgraphs_outputs[ + "subgraph0_vae" +] = driver_vae._subgraphs_outputs.pop("subgraph0") + +driver_text_encoder.subgraphs[0]._func_name = "subgraph0_text_encoder" +driver_unet.subgraphs[0]._func_name = "subgraph0_unet" +driver_vae.subgraphs[0]._func_name = "subgraph0_vae" + +driver_text_encoder.subgraphs[0].lower_to_top_level_ir() +driver_unet.subgraphs[0].lower_to_top_level_ir() +driver_vae.subgraphs[0].lower_to_top_level_ir() + +path_prefix = os.path.dirname(os.path.abspath(__file__)) + +with open( + os.path.join(path_prefix, "subgraph0_text_encoder.mlir"), "w" +) as module_file: + print(driver_text_encoder.subgraphs[0]._imported_module, file=module_file) +with open( + os.path.join(path_prefix, "forward_text_encoder.mlir"), "w" +) as module_file: + print(driver_text_encoder.construct_main_graph(True), file=module_file) + +with open(os.path.join(path_prefix, "subgraph0_unet.mlir"), "w") as module_file: + print(driver_unet.subgraphs[0]._imported_module, file=module_file) +with open(os.path.join(path_prefix, "forward_unet.mlir"), "w") as module_file: + print(driver_unet.construct_main_graph(True), file=module_file) + +with open(os.path.join(path_prefix, "subgraph0_vae.mlir"), "w") as module_file: + print(driver_vae.subgraphs[0]._imported_module, file=module_file) +with open(os.path.join(path_prefix, "forward_vae.mlir"), "w") as module_file: + print(driver_vae.construct_main_graph(True), file=module_file) + +float32_param_text_encoder = numpy.concatenate( + [ + param.detach().cpu().numpy().reshape([-1]) + for param in params_text_encoder[:-1] + ] +) +float32_param_text_encoder.tofile( + os.path.join(path_prefix, "arg0_text_encoder.data") +) + +int64_param_text_encoder = ( + params_text_encoder[-1].detach().cpu().numpy().reshape([-1]) +) +int64_param_text_encoder.tofile( + os.path.join(path_prefix, "arg1_text_encoder.data") +) + +param_unet = numpy.concatenate( + [param.detach().cpu().numpy().reshape([-1]) for param in params_unet] +) +param_unet.tofile(os.path.join(path_prefix, "arg0_unet.data")) + +param_vae = numpy.concatenate( + [param.detach().cpu().numpy().reshape([-1]) for param in params_vae] +) +param_vae.tofile(os.path.join(path_prefix, "arg0_vae.data")) + diff --git a/examples/BuddyStableDiffusion/vocab.txt b/examples/BuddyStableDiffusion/vocab.txt new file mode 100644 index 0000000000..4490271485 --- /dev/null +++ b/examples/BuddyStableDiffusion/vocab.txt @@ -0,0 +1,49408 @@ +! +" +# +$ +% +& +' +( +) +* ++ +, +- +. +/ +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 +[ +\ +] +^ +_ +` +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 +{ +| +} +~ +¡ +¢ +£ +¤ +¥ +¦ +§ +¨ +© +ª +« +¬ +® +¯ +° +± +² +³ +´ +µ +¶ +· +¸ +¹ +º +» +¼ +½ +¾ +¿ +À +Á + +à +Ä +Å +Æ +Ç +È +É +Ê +Ë +Ì +Í +Î +Ï +Ð +Ñ +Ò +Ó +Ô +Õ +Ö +× +Ø +Ù +Ú +Û +Ü +Ý +Þ +ß +à +á +â +ã +ä +å +æ +ç +è +é +ê +ë +ì +í +î +ï +ð +ñ +ò +ó +ô +õ +ö +÷ +ø +ù +ú +û +ü +ý +þ +ÿ +Ā +ā +Ă +ă +Ą +ą +Ć +ć +Ĉ +ĉ +Ċ +ċ +Č +č +Ď +ď +Đ +đ +Ē +ē +Ĕ +ĕ +Ė +ė +Ę +ę +Ě +ě +Ĝ +ĝ +Ğ +ğ +Ġ +ġ +Ģ +ģ +Ĥ +ĥ +Ħ +ħ +Ĩ +ĩ +Ī +ī +Ĭ +ĭ +Į +į +İ +ı +IJ +ij +Ĵ +ĵ +Ķ +ķ +ĸ +Ĺ +ĺ +Ļ +ļ +Ľ +ľ +Ŀ +ŀ +Ł +ł +Ń +! +" +# +$ +% +& +' +( +) +* ++ +, +- +. +/ +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 +[ +\ +] +^ +_ +` +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 +{ +| +} +~ +¡ +¢ +£ +¤ +¥ +¦ +§ +¨ +© +ª +« +¬ +® +¯ +° +± +² +³ +´ +µ +¶ +· +¸ +¹ +º +» +¼ +½ +¾ +¿ +À +Á + +à +Ä +Å +Æ +Ç +È +É +Ê +Ë +Ì +Í +Î +Ï +Ð +Ñ +Ò +Ó +Ô +Õ +Ö +× +Ø +Ù +Ú +Û +Ü +Ý +Þ +ß +à +á +â +ã +ä +å +æ +ç +è +é +ê +ë +ì +í +î +ï +ð +ñ +ò +ó +ô +õ +ö +÷ +ø +ù +ú +û +ü +ý +þ +ÿ +Ā +ā +Ă +ă +Ą +ą +Ć +ć +Ĉ +ĉ +Ċ +ċ +Č +č +Ď +ď +Đ +đ +Ē +ē +Ĕ +ĕ +Ė +ė +Ę +ę +Ě +ě +Ĝ +ĝ +Ğ +ğ +Ġ +ġ +Ģ +ģ +Ĥ +ĥ +Ħ +ħ +Ĩ +ĩ +Ī +ī +Ĭ +ĭ +Į +į +İ +ı +IJ +ij +Ĵ +ĵ +Ķ +ķ +ĸ +Ĺ +ĺ +Ļ +ļ +Ľ +ľ +Ŀ +ŀ +Ł +ł +Ń +in +th +an +re +ar +er +the +ing +ou +on +st +or +en +on +al +at +er +it +in +to +ro +is +le +ic +at +and +ed +of +ch +or +es +il +el +st +ac +om +am +lo +an +ay +sh +ri +li +ti +for +ne +ðŁ +ra +ha +de +ol +ve +si +ur +al +se +'s +un +di +be +la +wh +oo +day +en +ma +no +le +to +our +ir +gh +wit +it +yo +as +sp +this +ts +ati +you +with +ad +is +ab +ly +we +the +te +as +ag +vi +pp +su +ho +my +.. +bu +com +se +ers +me +me +all +con +mo +ke +ge +out +ent +co +fe +ver +ar +fro +au +po +ce +ght +are +ss +from +ch +tr +oun +one +by +do +th +wor +ere +ke +pro +for +ds +bo +ta +we +go +he +ter +ing +de +be +ation +mor +ay +ex +ill +pe +ks +sc +lu +fu +qu +ver +ðŁĺ +ju +mu +ate +and +ve +king +mar +op +hi +... +pre +ad +ru +that +jo +of +ce +new +am +ap +gre +ss +du +now +ye +ting +your +ity +ni +ci +par +gu +fi +af +per +ter +up +so +gi +ons +gr +ge +br +pl +'t +mi +ine +wee +bi +us +sho +have +today +av +man +ent +ack +ure +our +âĢ +cu +ld +loo +im +ice +som +fin +red +ren +ood +was +tion +pi +ir +ther +ty +ph +ard +ec +!! +mon +more +will +tra +can +col +pu +te +wn +mb +so +iti +just +ning +here +tu +pa +pr +but +what +ally +fir +min +ca +ant +sa +ted +ev +ment +fa +get +ame +about +gra +not +happ +ays +man +his +time +like +gh +has +than +love +art +ste +ding +he +cre +ws +wat +der +ite +ser +ace +age +end +str +aw +stor +re +car +ell +all +ps +fri +pho +por +do +ak +wi +fre +who +shi +boo +son +ell +when +ill +how +great +win +el +bl +ssi +ali +some +ðŁĴ +ton +der +les +pla +ï¸ +ed +sch +hu +ong +don +ki +sh +ann +cor +.. +ound +az +ine +ary +ful +stu +ould +sti +go +see +able +ars +ll +mis +ber +ck +wa +ents +no +sig +fe +first +et +spe +ack +if +ous +'m +ster +app +ang +ance +ans +good +bre +ever +they +tic +come +off +back +ase +ings +old +ight +fo +her +happy +pic +its +ving +us +mat +hom +dy +em +sk +ying +their +led +ry +ul +har +ck +ton +onal +hel +ric +bir +vie +way +tri +da +ple +bro +sto +ool +night +tru +ba +read +res +year +fr +tor +als +coun +cla +ture +vel +ated +lec +end +thing +vo +ici +best +can +work +last +after +ence +pri +pe +es +il +âĢ¦ +dre +ys +over +ies +ðŁij +comm +tw +ink +sun +cl +life +tt +ach +land +sy +tre +tal +pol +sm +duc +sal +ft +'re +che +war +tur +ations +ach +ms +ile +pm +ough +ate +star +week +!!! +clu +there +ner +tom +sel +ï¸ı +world +ves +cam +got +inter +off +um +tonight +other +hou +look +je +id +sion +beau +att +eli +ort +rec +ff +ster +supp +gen +been +ily +team +mm +ic +peop +itt +ats +only +mber +eng +bri +mp +know +bur +bar +ins +low +she +row +âĿ +tro +people +via +low +aga +bet +xt +fac +char +ear +wal +sen +fam +ble +nati +ish +nor +game +live +sco +ley +don +ick +ball +very +these +pan +ia +ating +cr +are +gir +make +stre +show +." +fl +up +dr +thanks +illi +wom +sts +ig +sur +every +cur +view +let +into +most +na +indi +gar +had +sou +ved +ant +ition +made +fol +uni +ited +ðŁı +ical +thr +ready +chec +dra +kes +book +ep +sic +morning +news +cau +ct +well +anc +photo +than +ors +birth +gg +out +next +some +ening +story +chri +down +home +ffe +free +da +bor +fil +cial +thank +side +lear +que +line +ten +ates +years +my +photo +beauti +right +nu +form +ship +ban +ther +days +gam +ason +gy +ðŁİ +birthday +set +ick +et +still +coming +take +ðŁĩ +bb +sol +son +den +ep +music +them +den +why +foo +cra +amaz +wn +hol +tting +wr +ue +mag +cro +lan +clo +bra +ak +sing +cal +read +'ve +joh +bab +dri +blo +big +eric +int +tor +try +la +leg +house +mic +val +beautiful +litt +check +new +vers +sw +ari +play +her +âĢĵ +win +ma +congr +school +fun +.@ +heal +ich +del +where +lon +ket +two +much +watch +ven +ded +ast +ked +bas +going +mp +ever +ways +roo +desig +ly +sed +top +lin +chan +too +iting +dent +ghts +ty +spo +need +blu +inst +being +âĿ¤ +wel +ls +him +may +sting +na +ely +little +ga +nat +tomor +mc +hon +want +air +pic +americ +per +less +week +vel +ah +cap +cham +ger +tim +tomorrow +ness +state +hal +serv +ze +os +pat +vis +exc +sin +ff +city +cen +any +bel +summ +tin +would +looking +ko +cele +family +mer +pow +help +bus +co +cle +self +ens +ics +tho +ani +cho +lead +bs +twee +think +fore +chil +vide +did +ale +chi +vil +ends +wing +pas +'ll +vol +sa +gs +many +jec +before +graph +ny +uring +wil +dd +buil +fav +sted +tran +ling +oud +dge +fiel +national +sta +cer +were +ina +season +cou +ned +amazing +tions +celebr +ns +ath +head +sday +dar +loc +vin +another +goo +sat +ny +join +pres +ses +sing +ana +ining +.... +cour +ï¸ı +act +cause +light +ams +ta +bal +fc +high +offici +tt +christ +dic +day +ral +hor +:) +visi +nam +ob +mas +ght +really +tun +find +through +port +ut +tive +sty +ne +ore +ðŁĺĤ +support +never +even +ðŁĶ +ha +ya +ld +uk +ran +jam +with +medi +des +ney +ching +ale +hy +kin +!! +dy +place +also +ble +which +black +bli +say +park +play +ire +video +weekend +ail +key +pt +ward +friday +din +iness +gro +ben +always +tball +ago +mil +cy +produc +disc +under +please +spor +full +ey +ðŁĻ +ise +ities +cat +kno +use +fore +ker +art +high +open +san +ef +ours +shed +stri +dro +again +im +ðŁĵ +enjo +fun +getting +pen +ger +cli +any +every +eu +women +âľ +est +could +ry +"@ +thou +sha +commun +ber +dents +dis +while +away +dio +ham +gla +date +ka +miss +unch +won +inf +room +ga +real +exper +direc +should +spr +gol +long +better +ori +ey +ience +ils +zz +han +found +vs +âĻ +post +tic +part +men +rence +cess +vic +sil +shop +ðŁĺĤ +food +val +stic +you +says +elec +star +oc +land +id +ction +field +sof +start +water +friends +ones +ðŁĮ +fla +far +white +party +inst +grou +tv +everyone +ment +ja +cha +prin +ants +during +lat +lar +west +then +ka +youn +insp +inte +ween +visit +against +rele +head +ces +town +looks +thre +regi +rent +projec +girl +sear +wo +mom +car +hun +publi +di +ple +call +cri +um +ford +perfe +friend +hard +ssion +test +playing +around +because +kets +meet +satur +arti +work +jun +ven +run +member +port +super +twit +sam +els +tly +adv +ative +ath +sure +avail +lar +squ +ards +event +men +ll +over +logy +ital +times +mal +back +coo +making +stru +âģ +itu +shar +gan +cas +sn +summer +picture +fan +hin +christmas +cy +proud +champi +design +pping +hope +ca +available +may +wed +photograph +special +sale +stop +ery +awe +ality +history +ama +presi +bru +working +done +dr +ken +feat +wood +atest +sunday +movi +vely +sle +face +spec +students +by +ham +spon +business +dat +ie +ip +soci +glo +hand +recor +rs +mee +keep +pur +health +she +comple +god +davi +collec +list +ra +club +ters +inclu +things +plan +âĺ +john +shing +atul +soon +blue +gor +saturday +won +congratul +see +âĿ¤ï¸ı +those +ðŁĺį +final +dou +ith +own +road +tour +ast +india +til +nd +fer +favor +sul +learn +fire +just +group +ah +rac +body +ur +care +ภ+plo +oh +pos +give +tech +sub +cent +ering +ym +ility +fic +london +vir +guys +ba +ðŁ¤ +baby +scre +ðŁĺį +trump +under +change +ian +colle +sses +ler +ssed +nice +announ +power +sar +aking +mini +sli +swee +kar +ful +cru +action +ather +). +stand +devel +aa +gan +left +lol +rel +trans +ments +int +ef +manag +dig +gener +down +pau +tiv +ku +thur +ken +ston +fans +talk +tweet +too +style +prote +secon +fron +awesome +gl +pal +net +sor +lau +gon +since +tty +series +memor +beli +film +did +dies +ot +congratulations +pra +eve +woo +official +suc +incre +bon +part +pped +class +sive +boy +cul +perfect +tou +dam +welcome +football +hi +pap +wait +ada +congrats +young +excited +rece +jan +va +red +stra +media +'d +does +let +mul +ills +green +mel +toge +future +yester +versity +form +tain +ide +ches +kids +qui +haha +deta +big +favorite +girls +contin +dom +search +ual +air +ders +month +cer +yesterday +community +ade +dog +ville +ices +deli +syste +run +ism +heart +cup +enti +few +president +eds +until +festi +ok +flo +said +ole +med +travel +£ +phone +together +fast +lot +games +shir +between +yes +thers +doing +mac +ator +band +follow +project +develop +diffe +confe +speci +cast +ys +board +rd +ial +shoo +ram +having +share +follow +one +name +mr +put +discu +ory +came +ous +site +twitter +tb +tit +finally +zed +super +compan +using +alls +list +ris +shot +gal +tar +del +john +âĢĶ +something +ram +intere +whe +bit +ðŁį +street +ound +ai +tickets +movie +real +ky +taking +opp +cc +lam +moun +inve +black +used +online +yor +local +gue +cks +ow +gest +boys +illion +cont +reci +ined +euro +now +seen +ph +teach +def +south +such +award +must +issu +care +feel +plu +latest +sports +web +tex +ement +sk +fic +wan +tech +ot +box +ner +free +tal +ash +case +hot +wonder +meeting +era +chall +ðŁIJ +job +ili +cool +jour +ths +mo +fel +die +micha +ele +team +service +stand +makes +ping +early +comes +ek +holi +vers +ague +sau +three +monday +fashi +someone +thro +sea +bad +suppor +turn +ury +ming +photography +nic +mark +pretty +ssing +watching +memb +arri +county +beach +fran +center +police +bat +public +tan +press +saf +sy +gets +roy +ners +your +buy +sters +show +ased +childre +afric +ines +space +scri +hall +pain +aring +home +mur +health +ched +sand +recei +guy +ea +american +resi +children +-- +iri +ington +country +ross +len +anna +books +bc +ece +dom +lovely +kh +pet +gy +gri +stage +office +rock +mon +bay +table +sun +med +thin +lor +flow +(@ +university +store +front +good +za +vote +north +hey +anim +order +mid +without +ade +remember +market +?? +mus +training +educ +but +cover +stan +scen +bla +break +lou +same +gold +ain +os +both +lit +vern +ai +albu +pa +enjoy +beg +elling +thursday +info +san +america +hair +tel +march +concer +college +conference +app +hour +chang +âļ +sour +ols +weather +war +phi +festival +second +cute +prac +ener +stry +lea +polit +sav +sen +ow +mi +near +ought +ze +coffe +willi +dan +sey +david +ese +fan +deci +theat +nov +ation +trac +sci +review +cel +em +un +july +orig +tion +dru +former +stay +after +inv +took +data +bal +tues +dan +evening +ðŁĺĤðŁĺĤ +dol +ures +provi +ts +est +sign +jac +uk +song +yet +bow +indu +jap +hoo +point +anyone +zy +ist +hur +ital +building +woman +chur +jer +perfor +coach +league +cess +net +imag +nation +brit +que +awards +ages +works +ced +mance +late +ign +money +true +ii +tell +plac +pac +asy +world +behin +import +reading +gram +giving +met +hit +forward +stom +present +june +social +noon +mart +half +swe +govern +ker +details +lish +__ +acy +sia +bert +fall +!!!! +), +thi +diti +sport +king +fit +staf +cat +muse +centr +yer +contro +bloo +walk +actu +didn +lim +learning +research +wedne +auth +hours +ky +far +hen +.... +itch +ril +strong +sky +questi +james +ron +dg +fur +cin +does +appro +marke +tures +fully +chat +behind +tem +fini +mission +batt +feel +heav +everything +bar +wish +premi +ima +experience +each +report +sweet +tics +spring +respon +system +victor +lin +saw +already +ghter +fle +ãĥ +bring +album +-- +ells +stan +tom +international +went +anni +match +pper +stone +small +rain +fashion +area +van +agram +ko +thought +worth +van +mer +coffee +ites +gn +artist +con +arch +cir +secre +ground +iso +hand +com +bridge +hs +xi +link +pul +spl +race +fli +river +gas +disco +dal +player +fit +photos +ity +ok +jor +tra +april +ads +adi +solu +beauty +door +mess +update +alia +scho +ened +moment +scot +science +ior +ties +across +ously +shes +doesn +page +water +million +classi +lic +cast +formation +michael +ello +smo +ints +vision +opening +ldn +austr +tuesday +winner +possi +round +shirt +dit +bo +ues +illed +along +trip +starting +impro +kan +person +not +reco +needs +cle +lie +rest +ring +winter +simp +mom +beer +face +tors +usa +collection +geor +session +trying +las +lake +jen +origin +student +secur +vin +pics +expe +comp +gonna +equ +bad +ley +au +members +break +wall +gic +dinner +bul +inspir +ri +mind +ica +winning +talking +tren +sis +ten +wonderful +snow +hear +thom +nothing +gui +stin +blog +fest +bun +lee +wards +chance +dress +ren +paul +pes +techno +russi +card +east +mari +wine +ti +law +stric +ki +ape +augu +profe +ash +course +mail +rently +dun +mun +love +island +drive +sl +ended +main +lost +nature +âĿ¤ï¸ı +chic +repor +pin +pro +station +cep +takes +company +goes +ond +mach +radio +dad +rock +ja +pay +champion +ee +inde +tta +atic +tab +believe +energy +zi +tat +word +once +resul +yl +andre +ano +instagram +close +tam +custom +wa +conom +shows +life +kin +rob +tage +nation +almost +listen +save +reli +ace +mary +tree +forget +jack +waiting +director +hill +born +temp +fl +ste +ona +single +wednesday +united +ino +@_ +nel +celebrate +ending +deal +ji +canada +huge +track +âĢ¢ +fy +fanta +ang +york +release +pun +episo +words +tour +pack +igh +classic +performance +ket +afternoon +record +wins +proble +âĿ¤ +four +bed +bank +dance +sla +called +might +ap +past +ðŁļ +different +ite +gift +ssive +church +cus +program +hotel +ice +mad +security +enge +dc +enough +sta +ety +dead +gun +hear +mir +human +gress +ounds +piece +breaking +garden +fight +views +fish +started +running +green +seri +sm +ask +dor +death +econom +eri +ird +ser +lunch +âģ¦ +box +natu +base +ban +fal +global +wild +wow +outside +move +lead +anal +museum +ong +haw +power +thank +bac +charac +campa +digital +ro +oper +dev +wol +pati +fa +male +paper +illing +cs +âĥ +education +taken +effe +mou +sad +". +based +staff +including +living +ac +china +mob +storm +luck +phil +oo +yn +travel +kel +tial +price +book +important +bio +pool +nyc +fab +load +?! +challenge +cry +serve +wear +bus +tain +number +ror +kat +iz +though +hosp +mm +fair +utes +hot +pop +fied +camp +development +libr +cali +ems +âģ¦@ +bol +ised +standing +model +ita +gle +brown +image +vered +force +oil +partic +shu +daily +law +sec +class +camp +holiday +clin +kers +present +game +incredi +ership +interview +bill +due +andy +abo +innov +key +acade +pil +moder +stars +brand +fer +weeks +consi +pre +safe +writ +dium +launch +marketing +annual +assi +court +lady +cted +anda +inside +child +oppor +smith +centre +gue +âģ© +fren +sty +fort +ently +isn +keep +tober +ony +boy +ald +colla +demo +level +compet +ado +bour +fantastic +mate +su +south +opportun +versary +later +bud +facebook +laun +stern +pit +!" +maj +gram +tbt +fire +happy +aks +whole +actually +iller +ella +lots +alex +ange +lands +ðŁĺŃ +enter +rou +episode +ped +inten +shire +who +plan +ho +cake +west +magaz +fresh +cc +nar +chris +writing +wer +nom +lo +midd +dream +ol +tional +deb +>> +become +si +grand +alling +histor +ride +ired +safe +queen +cil +intro +vil +dani +... +artic +stat +short +oring +selfi +missi +doc +bit +gall +bom +ire +selec +dition +ðŁĶ¥ +friend +beat +ghting +ðŁĺĬ +peace +exhi +anta +ability +illu +jon +quality +tribu +mes +players +fair +cut +cab +success +bi +sus +promo +sche +ange +ico +commit +catch +illa +kind +feeling +quo +say +anniversary +spot +mother +ane +pend +yourself +ops +apple +minutes +po +grand +ries +haha +career +edition +dec +rick +ami +concert +itive +geous +dly +tte +advent +ig +lights +aker +sky +âĥ£ +ray +finished +way +sd +accoun +ðŁĴķ +cky +chel +liter +painting +los +stun +technology +nas +mar +bil +africa +kie +eyes +golf +plus +nia +itec +services +wedding +known +tele +..... +starts +paren +wants +ational +months +windo +favour +ert +magazine +exclu +reve +bc +original +ess +nal +anti +stro +tice +study +ठ+vac +national +five +rain +vement +ute +verse +emer +army +possible +guess +valley +thern +crow +mr +color +onto +pick +clear +dark +tac +wanted +itting +cancer +government +die +rise +zing +cold +foun +studio +stration +brother +ahead +shel +micro +ically +dau +signed +viol +ax +asse +io +wre +splay +chick +august +plat +tips +spi +human +easy +logi +mike +grow +agre +ww +shad +motiv +wide +turns +omg +var +defin +sug +jim +ðŁĶ¥ +td +campaign +named +retweet +cop +tv +leav +kis +double +smar +issue +villa +information +lies +stock +nt +distric +shor +mix +ero +sep +mex +seeing +live +remin +code +gur +sc +wild +lun +hood +spot +father +forever +upd +traf +fly +need +gradu +train +make +sab +bey +size +leader +talks +eu +log +fox +gorgeous +less +lets +surpri +myself +note +lives +fru +loved +sever +dem +ji +soc +hold +dogs +ni +âŀ +leave +airport +benef +expl +ships +complete +achi +great +vintage +jack +roc +wood +priv +offer +eye +version +tea +coach +offic +well +gen +sat +hh +youth +ox +?" +mt +mix +gg +dle +natural +build +breakfast +thinking +theatre +moon +berg +goals +george +ene +excell +iling +tune +yed +gate +mit +network +joe +hello +fb +tube +wearing +athle +struc +hard +glass +gers +throw +ges +bt +industry +management +alist +goal +stream +yel +avi +icious +others +ski +christi +bird +esc +min +tro +lt +jan +imp +rights +sha +organ +central +ara +roll +favourite +chester +else +pay +cars +mine +step +practice +major +hang +ðŁĺĺ +non +vari +engine +volun +dia +iled +architec +pink +ds +thy +wash +website +bag +control +elli +fra +answ +dence +yu +ron +ola +gin +drin +lic +couple +spar +gon +create +ct +celebrating +deep +eat +tee +voice +drop +visit +ators +stadium +ft +wis +rol +grade +famil +points +repre +was +traffic +japan +org +honor +texas +manu +âĻ¥ +safety +rer +bag +emplo +released +regu +aka +nav +role +senior +spect +cross +lines +best +pack +sin +tie +missing +sunset +liber +ising +jay +ski +championship +activ +ladies +played +yy +publ +alo +pride +sr +paki +lux +survi +cked +ets +chocol +australia +paris +miles +hat +mental +ala +mean +mobile +ena +insi +found +chief +tag +incredible +return +é +google +french +crew +hallo +alian +jaz +cher +silver +north +english +baseball +caf +limited +following +appreci +earth +kir +vember +wed +ption +ged +october +flori +cr +ency +gave +lord +stuff +berry +post +smile +broad +state +gger +means +icy +gun +yo +master +burg +hands +nie +// +union +british +biggest +district +aming +hil +oce +person +pass +envir +schools +arrived +ances +inspired +expla +ben +library +bott +amp +steph +contact +bang +ms +califor +told +battle +bb +chicago +⾨ +strate +shi +dece +-) +add +lab +jones +legend +castle +inger +stance +bel +ura +refu +leaders +pot +sex +hic +article +kid +france +xx +exe +guide +volunte +print +ali +ceo +tweets +wx +scene +volu +anti +han +associ +sharing +rose +minister +sher +inste +clean +democr +poster +skin +psy +proper +crazy +iam +ore +ini +anything +pod +moving +click +explo +comb +craft +fi +blood +isra +public +dent +olym +england +asi +cher +fact +environ +harry +gone +medic +enjoying +justice +jr +indian +wife +sound +tes +drawing +pal +idea +crit +juli +iler +warm +clar +thoughts +defen +council +introduc +died +janu +ani +send +lier +ml +interesting +trade +wind +bay +sac +ancy +source +bes +organi +arly +large +ffici +tag +ut +desp +oes +title +sym +pictures +open +women +showing +ria +least +leadership +current +electr +valent +listening +ckey +general +deser +duce +;) +cent +ðŁĺįðŁĺį +scott +poor +selfie +events +ion +wrong +dev +hill +septe +culture +line +sorry +sent +sister +cept +kri +november +ari +announce +zation +bran +gent +du +len +pers +fm +martin +op +emb +ome +middle +success +peter +january +flu +racing +dav +bike +ðŁı» +pet +shoot +professi +featuring +september +nowplaying +staur +za +onic +quick +baske +speaking +milit +zer +chicken +bell +sad +coast +loving +yers +dj +panel +verage +swit +icks +bou +california +sam +parents +ero +killed +phys +jobs +migr +anth +emo +halloween +ander +cm +competition +eag +sket +spir +maybe +exclusive +appe +journey +screen +ford +io +hate +ug +soul +hero +society +syn +guit +nh +dj +ases +impre +time +sales +dd +fts +summit +stunning +oms +turned +clean +soft +beat +restaur +dered +ences +magic +dio +shine +guest +healthy +exhib +stories +popu +nis +ela +below +funny +results +sne +currently +ard +download +flight +mal +fine +pad +chu +ented +hat +ðŁijı +steve +jo +mark +rat +ball +pc +pon +bby +oli +arts +asure +bowl +attack +mic +dear +range +enter +chocolate +brilli +access +," +??? +chap +const +tn +matter +blue +gallery +emp +workshop +leading +yours +basketball +wanna +thu +__ +marri +sleep +bia +che +mad +impact +own +sir +channel +europe +esp +kitch +hospital +wra +royal +fs +neu +quar +ney +acks +chase +ppy +stal +ately +tim +december +rare +perform +cream +weight +choo +night +haven +franc +khan +built +helping +trust +type +golden +tax +snow +swi +disa +questions +vey +light +cn +cloud +thomas +aged +shou +teams +gran +reason +aa +youtube +vp +pizz +manager +bury +credit +treat +max +ik +main +ging +dead +probab +yeah +ãĤ +brand +soli +plant +tayl +girl +ðŁĺŃ +nament +auto +message +kore +nur +terr +agu +map +senting +loves +gives +gab +zen +robert +confir +wars +om +stain +camera +ander +wonder +ab +cap +sold +suit +walking +continue +effec +daughter +danc +chain +multi +kid +yan +champion +vo +tains +host +mini +missed +resc +lyn +finish +delicious +sas +taylor +ib +promis +products +mountain +florida +register +treat +recent +female +booth +matt +vehic +sop +motor +supporting +phic +extre +drink +lane +third +ps +constru +cere +farm +ðŁİī +tured +ðŁijī +cats +aj +gie +shooting +asked +pakistan +ame +mb +gil +legal +square +invol +draw +oooo +!!!! +opportunity +py +ei +bts +teacher +character +johnson +bron +lywood +chine +cing +cine +dge +gaming +russia +cia +quote +rich +gov +flowers +spiri +stin +growth +ðŁı¼ +commer +juni +mum +ran +sna +aren +cb +actor +color +sit +pair +chi +bow +academy +held +rang +metal +yl +active +probably +tch +needed +spee +choice +italy +ryan +ðŁĩº +flower +vit +mn +foundation +bak +sions +neigh +floo +heard +remo +fresh +inging +ref +town +clou +jesus +spirit +couldn +zes +ðŁĴĻ +williams +proce +modern +process +shoes +created +tric +issues +anne +atten +debut +hr +nit +stig +apo +eps +zu +ãĢ +six +cards +langu +famous +tournament +sel +ebay +yn +ston +kick +announced +kam +voc +brilliant +house +cheese +warri +music +hockey +ðŁĺĤðŁĺĤ +skills +autom +smart +medical +mony +ex +guar +give +personal +vention +alli +press +floor +mc +victory +him +simple +thor +ðŁĩºðŁĩ +tail +lucky +alex +quite +bot +ssions +challeng +cann +amazon +hell +bought +): +edy +secret +production +independ +defe +added +pr +pag +bed +greatest +within +jay +ðŁ¥ +ireland +rely +sd +text +driving +program +speed +colum +stron +é +forest +âĸ +machine +coin +scar +ount +bie +¡ï¸ı +portra +common +wrest +received +know +invest +plans +accor +adop +tery +reali +pp +kal +artwork +mean +god +instead +anci +motivation +asing +inspiration +upcoming +political +europe +mers +heavy +ðŁijį +febru +scotland +ough +bt +boss +schedu +speak +nick +ured +ino +ek +risk +tory +presents +bon +rug +states +exhibition +ilo +mill +brought +:-) +touri +come +officially +champions +doors +rep +pose +extra +kings +soccer +squad +applic +ata +sometimes +tari +excellent +ðŁĺĺ +straight +carol +rip +âĢį +graphic +mol +election +february +asons +li +dir +mt +nick +usu +mrs +comics +institu +corpor +vi +ðŁĻı +tural +dise +acci +weare +among +shopping +till +what +chair +span +chinese +innovation +joy +kit +century +obama +phili +fc +reach +citi +ulous +non +dang +happening +burn +pel +orange +dv +kick +claim +ingham +phy +nov +podcast +whi +nights +earlier +bear +lah +exciting +ora +given +slo +memories +continues +product +gho +cd +knows +ðŁİī +published +discuss +yard +iphone +tries +wall +feb +aren +truth +winners +ture +ditional +military +problem +mand +dog +loss +cric +canadi +veter +village +", +yr +ung +donald +aging +birds +scienti +les +this +region +tical +itten +ila +ðŁĺİ +dad +diam +above +stren +lit +pir +lab +focus +busy +dur +apply +sma +author +aci +execu +domin +rela +jackson +ato +washington +ðŁĻĮ +kill +popular +cement +road +eating +location +vent +arre +nan +custo +adventure +ordin +sport +ult +lock +question +driver +landsc +oni +kins +pd +jordan +tered +kk +af +child +sp +justin +eni +selling +zo +whit +boston +particip +signing +happened +heat +mam +dreams +lows +graph +theday +heading +bro +blessed +vic +vegas +hd +inning +roman +andro +denti +use +cit +progress +writer +bob +ffs +growing +bly +aware +exam +spent +bet +score +beyond +docu +adel +sf +coura +collabor +inc +private +boat +** +zone +pha +bill +total +planning +towards +places +preview +creative +damn +ideas +seems +poten +saying +display +sw +aqu +louis +bye +lil +email +western +germany +eller +res +fant +mentary +deals +richard +jersey +streng +rad +pizza +mond +ware +lac +gi +archi +cd +yellow +recently +reach +๠+kitchen +designed +try +gal +restaurant +ature +ww +jas +lma +ðŁijĮ +pain +avo +minute +schol +therap +ticket +dry +japan +ditions +terri +selves +happen +tup +mag +copy +sher +freedom +file +specially +toronto +load +gary +rey +answer +loy +caught +prize +une +fication +niger +syd +touch +feature +jazz +records +himself +dish +rober +spotted +master +wave +finals +bull +forum +ald +recomm +cha +ae +doo +instru +truly +lg +ink +brothers +dest +jim +mit +closed +ison +tried +santa +affe +wan +horse +grow +campus +relation +native +journ +gov +oct +kit +bound +partner +rema +crowd +!) +calls +rail +quali +solution +contest +convers +snap +base +initi +tax +ye +entrepre +itor +construction +food +presented +nings +climate +km +model +bj +block +presentation +dream +fix +calling +busine +congress +understand +web +value +ï¸ıâĥ£ +mexico +itely +kim +charity +reflec +blan +flying +analy +families +band +recipe +celebration +accep +ary +tot +gb +interested +captain +âĻ¥ +tip +absol +braz +investig +ology +dec +truck +vering +clear +dont +gotta +advis +begins +mass +descri +block +kim +david +songs +memorial +features +sustain +'. +grab +jose +va +conserv +sets +manchester +fighting +degre +aga +ind +sleep +position +hair +signs +policy +ito +alert +stam +spend +wy +absolut +dm +animal +myster +successful +problems +robo +kay +garden +pd +mayor +dale +tol +offers +visiting +friendly +trees +officer +account +kevin +ðŁijį +giant +continu +consu +tract +nfl +ðŁĺĬ +hq +bility +aar +disney +teen +oned +white +trailer +dedic +alone +absolutely +digital +william +ination +swa +ee +entire +german +roll +hits +cost +stay +tha +alive +according +cot +literally +herit +reti +hahaha +experi +likes +gt +steel +____ +chair +christian +tower +difference +md +tress +mid +prince +african +feder +foot +carri +served +rice +shall +featured +cker +recru +poe +sense +nific +comedy +content +fat +posted +contribu +timate +liver +mble +internet +age +european +cling +glad +ffic +sco +akes +elle +termin +tony +pale +colour +serious +patri +movies +bm +professional +ado +alu +bringing +falls +israel +term +language +brook +mann +communic +cannot +acti +phe +yan +entreprene +turkey +logical +long +arm +urs +workers +ingly +ggs +ric +tual +receive +opens +gear +social +feet +cking +adver +finan +feels +spla +hr +easter +brain +ãģ +fig +ledge +nearly +protect +massive +eth +awa +ðŁĺģ +yrs +awareness +definitely +kn +imagine +ku +systems +ðŁijı +fas +lik +provide +amo +discover +influ +maker +gaz +fitness +street +ers +ted +wc +ysis +positive +helped +quest +andrew +brad +bin +hanging +ling +bright +section +mass +ðŁĻĮ +followers +hosting +tempor +flag +ave +letter +kur +requi +often +cryp +suff +âļ½ +russian +treatment +alle +hay +lan +keeping +holy +powerful +predic +fund +especially +window +jewel +ily +ðŁĴľ +generation +appa +seriously +od +ðŁĺĤðŁĺĤðŁĺĤ +certi +irish +ðŁijĮ +miami +beth +vity +secu +chef +crime +graphy +max +artists +revolu +guard +speech +uc +updates +faces +stant +changed +reports +lower +pear +nc +kil +looked +speaker +sf +respect +okay +ocean +sitting +architecture +trail +seat +ira +leg +japanese +dam +ular +swim +politics +financial +old +mouth +attemp +destin +fishing +attention +mem +changes +decided +religi +gin +cav +zz +adam +mac +write +begin +scul +alter +iss +athon +images +moo +joined +ðŁĺī +âŀ¡ï¸ı +passed +musli +hir +largest +camer +comic +ghted +rugby +burgh +gging +testing +prepar +laugh +aled +improve +believ +advice +shares +heart +turning +sb +tel +cafe +nes +daniel +patter +tz +sett +park +cand +stick +happens +brian +newest +epic +ador +kies +warning +animals +custom +arc +dian +gold +core +tf +city +pants +reality +confi +inju +fox +guil +knew +âĺº +correc +itude +dden +.# +reduc +pass +fon +ya +owner +returns +nc +east +apol +insur +tho +sim +junior +bee +angel +attle +electric +horror +crash +eye +path +southern +employe +geo +tan +haz +rally +ðŁı» +property +wasn +enjoyed +grey +gas +brew +northern +holding +gp +take +chart +lyn +drama +zo +paid +throwback +cup +discussion +downtown +will +lew +bis +tary +bread +upon +rate +teachers +itation +anced +cycle +choose +dc +iran +cow +dave +raise +princess +faith +-> +industri +spain +guitar +facts +mn +spen +courte +gott +projects +audi +osc +peter +sand +interest +happiness +venue +soldi +surprise +potential +perio +customer +ii +gni +manufac +eco +broken +singer +vels +wales +hus +inj +four +talent +dying +matthe +film +joining +sell +jar +lmao +surger +bbc +sources +austin +nik +charles +fam +princi +angel +cash +lot +ored +plays +plate +done +memory +brings +nba +solutions +teaching +grace +circu +helps +founder +mary +explore +decor +parts +cho +integr +hau +ises +putting +iner +rit +vy +michel +blues +everyday +forms +bio +year +pin +tter +spring +)) +pot +aling +performing +shan +planet +musical +heads +italian +strugg +âĢįâĻ +wings +pump +hh +trou +aid +prime +earth +paint +mont +amy +bbc +fabulous +fruit +android +bourne +ceremony +ential +?? +debate +oning +draft +solar +tx +jam +corn +!!!!! +broo +milk +posed +ohi +movement +bren +partner +pg +ette +aries +shout +ng +leaving +tells +sens +taste +kelly +worl +gym +rich +egy +pid +mas +âĤ +courtesy +frank +increase +written +ppers +rel +hai +sas +sound +tti +wich +river +..." +ag +fellow +rome +small +gency +ican +luxury +proof +met +wildlife +moments +rather +corner +compe +canadian +likely +therapy +liam +economic +indie +route +fight +hope +setting +antly +cross +fantasy +dee +sketch +compli +ymi +rules +engineering +figure +row +., +fw +sydney +wou +tation +drew +uses +there +spread +structure +patrick +apparently +ros +hills +wwe +anny +commission +div +fying +consul +analysis +exi +tennis +vehicle +ðŁĺŃðŁĺŃ +ass +highly +opened +bann +ðŁĴĻ +mph +wishing +vor +fif +giveaway +rr +ray +jess +gat +icymi +xit +highest +york +pie +involved +higher +rie +malay +intelli +despite +chee +sarah +bean +recogni +arsen +talented +passion +ich +abc +leads +disease +vis +sec +presenting +milli +hole +shots +depart +surgery +govt +bin +dual +evi +longer +evol +screen +portrait +etc +lose +chat +pen +pi +oma +sick +erc +companies +entry +plane +gry +vene +liverpool +premiere +shared +ared +films +ira +holidays +cricket +ician +ving +.) +ultimate +division +conduc +sept +forces +mont +smart +disapp +sunshine +ind +bless +made +colors +frank +iron +bottle +sgo +mood +jason +eric +birth +teen +response +target +statement +fear +thel +alum +arab +blin +direction +steps +erial +worked +atl +ðŁĴķ +felt +poli +scenes +homes +bell +eat +ateful +tin +lace +folks +pse +ann +wisdom +fav +butter +sr +areas +smoo +biz +dges +appo +more +them +effect +windows +sunny +capital +totally +cities +grant +mbers +slow +autu +ilities +wro +rising +stics +violence +igh +quot +hit +tc +heritage +buff +nes +zar +dential +exac +edge +deep +arena +became +benefits +marks +mber +az +ames +preci +dragon +reg +dings +dos +ðŁĴª +nel +sity +meal +dist +legend +purchase +pical +stick +fat +duba +profess +carto +prof +countries +responsi +sequ +fab +tribute +honored +practic +purple +anton +pared +tough +summer +environment +sons +ðŁĻı +mps +gies +heroes +telling +henry +fen +knowledge +Ģï¸ı +fr +neg +ure +acking +hearts +soo +hollywood +jump +sauce +schedule +turn +yoga +creating +cket +creek +âŃ +customers +madri +gul +assemb +mount +cell +top +stal +davis +twi +sign +premier +itions +hearing +unk +patients +appear +heaven +alty +doctor +ae +platform +jeff +ðŁĵ· +regional +bid +boxing +exten +ority +aw +wise +ille +several +bie +situ +syria +âľħ +reminder +entertain +lion +partners +inn +phar +fau +pls +expected +sugar +decision +sb +chron +association +leaves +visited +shap +ðŁĴĸ +further +hann +wi +runs +ler +funding +filled +...... +tiny +hang +org +cool +semin +ðŁıĨ +spons +navy +saint +drug +dal +roun +covered +traditional +investment +dete +alism +flow +nis +sunrise +feat +fted +weird +jere +vegan +medicine +ano +accu +delivery +temple +changing +wilson +philipp +refe +nd +iser +gay +rand +atives +tely +pand +intellig +gare +ambas +demon +committee +strategy +refuge +budget +protec +pier +express +nomin +economy +allow +icon +galax +oh +indivi +demand +virgin +luke +alists +mani +smi +judge +enty +michi +result +amed +speaks +', +houston +shin +bing +fly +chem +auto +vas +get +arm +thanks +din +gang +xx +sion +located +pl +josh +info +joins +adverti +otd +eld +sie +reasons +vent +ðŁĩºðŁĩ¸ +âł +conversation +studi +ðŁĶ¥ðŁĶ¥ +gos +sounds +unit +musc +gel +acked +paci +cos +dere +uu +ao +lam +inspiring +arms +tware +matters +addic +dude +ext +crisis +bath +meet +singh +expect +delhi +rescue +worst +aug +shipping +serving +sto +dark +aces +historic +landscape +designer +billion +grateful +wake +eve +miller +housing +dynam +isco +beha +shop +prou +eas +asia +eding +kon +department +awar +marine +inci +photographer +tape +logo +rings +dit +---- +vinyl +wc +voting +seven +ambassad +dallas +tu +comment +kra +bles +wag +ud +audio +strike +official +ots +metho +tools +radi +alan +hunt +watched +ake +fake +drinking +merry +ml +bday +rio +nike +cant +repe +costu +murder +akers +chers +outs +beginning +sos +ades +nin +notes +wrote +solo +ci +lighting +urban +brexit +attend +shirts +playo +actress +plic +standard +quotes +parade +ancient +© +turing +ree +primary +flash +citiz +mates +stein +zi +clinton +skin +gene +hum +gar +tle +yi +focu +dean +plants +cyber +bu +ome +hop +address +tix +gifts +relationship +subscri +feed +exactly +hawks +exo +stress +sn +arrested +ane +software +zero +theme +mumb +immigr +mia +makeup +pleasure +univers +harb +engine +aper +rin +bra +institute +leather +alth +singing +cos +ghty +meas +stic +side +insurance +cot +pitch +mountains +crimin +supre +valentine +ater +wouldn +scale +related +regar +startup +packed +mike +weekly +pts +count +har +gotten +mind +berlin +conditions +switch +corn +save +gli +emergency +tuned +stock +discussing +everybody +sday +whether +wrestling +eces +gender +chen +ðŁijĢ +madrid +marathon +egg +ier +thx +asking +korea +wolf +aya +gm +gau +atory +vr +grass +killing +bble +uro +uni +eth +shore +then +reale +bottom +exerc +kar +ories +adri +sands +sex +.' +volunteers +perform +parliam +include +delighted +executive +fuel +kiss +ãħ +charge +hu +cakes +vet +glu +agree +prices +nau +hl +gru +raj +strength +bic +spending +ales +aven +blast +:( +yof +normal +six +quick +sea +daw +meets +lovers +updated +potat +completed +cook +opportunities +pure +organic +temper +cam +avoid +parking +dubai +ando +distri +toy +completely +donald +trial +bass +boun +background +vas +marvel +lum +rus +tool +commissi +throwback +finding +islam +!? +stop +evil +oral +residents +identi +oak +ðŁİ¶ +lil +spanish +chapter +stopped +direct +hosted +picked +labour +lewis +defense +à® +healthcare +whis +math +peak +raised +fix +bull +thir +chelsea +folk +tre +candi +paul +either +adam +poetry +jewelry +ðŁ¦ +pray +ا +gc +oz +wishes +foreign +sung +learned +ene +ning +michael +illustration +legendary +wav +bau +ðŁļ¨ +calend +streets +âĨ +monster +buck +gr +school +bath +waste +neck +hawa +beach +replac +ject +oner +factory +count +ðŁĵ¸ +morgan +dering +sean +stephen +dep +novel +videos +ical +pressure +arsenal +expre +irs +trending +ssa +flash +resear +through +professor +sculp +tos +gged +mma +bee +ape +hunter +ami +hei +plastic +bucks +universe +legen +nigeria +pleased +ris +thinks +autumn +ids +dis +anthony +ðŁı½ +aked +glasses +finance +zer +kas +contract +numbers +shaw +partnership +til +launched +sal +victoria +theater +usual +names +period +eliza +ith +barcel +rocks +bags +mate +distribu +jon +diffic +alized +curren +scored +bha +dublin +rose +inted +solid +behavi +walker +simply +gardens +headed +ini +ohio +weap +fo +glen +estate +random +thunder +thru +kill +jacket +iti +entertainment +thanksgiving +ental +encoura +elo +ather +tank +highlights +fting +rule +models +border +bjp +husband +indone +kenya +bears +alo +ninten +pix +stro +orders +salad +roads +nor +lation +sophi +ðŁı¼ +pieces +bone +mins +includes +nutr +phil +sent +fundra +gain +borough +nad +monday +activity +items +becoming +kenne +detro +cardi +guests +ux +worldwide +severe +news +thankful +fiction +vege +mall +sian +eral +injury +lee +menu +dancing +scotti +example +(# +nai +studios +bai +ðŁĴĽ +jav +diamond +vince +rick +protection +lincol +champs +approach +dar +mile +clouds +jeff +infin +lers +ples +peace +gop +âĻ¡ +techn +stra +average +effort +introducing +diversity +australian +amp +boost +ske +patient +appreciate +icians +pur +fell +woods +illustr +ðŁĸ +agency +actions +britain +underway +seattle +eland +ago +fill +streaming +protest +challenges +kyo +etsy +cooking +expert +russ +rainbow +commercial +spin +beats +cry +valu +eli +throw +grams +levels +michigan +cad +adorable +constitu +ws +pub +midnight +that +netfli +brazil +diego +regular +joy +âĤ¬ +liqu +eastern +kni +flat +np +brown +wer +sey +tters +acting +vanc +cycling +programme +raw +complex +tattoo +throwbackthursday +sessions +rooms +sight +species +bomb +laugh +keeps +moon +officers +conver +tr +hash +tack +rious +adap +aj +recogn +expo +sugge +confirmed +rolling +dressing +ict +friday +phones +ridge +concept +roy +keys +effor +cate +kne +even +lay +communities +mod +naz +everywhere +alab +bitcoin +banks +outdoor +federal +stores +hp +cal +mely +signific +bear +republic +closer +allah +pick +xd +palace +chill +bam +erous +una +allen +outstanding +olympic +supply +figu +vau +lp +charlie +unes +>>> +legends +icial +coast +benefit +multi +fits +farmers +amount +sisters +harve +honey +queen +bers +plann +âŃIJ +mu +barcelona +alber +status +remain +extra +candy +vious +âľĮ +ov +warriors +--> +jump +amar +xmas +studies +iors +kor +donate +prep +fish +ima +painted +admini +cosplay +sports +drops +fighter +evidence +ðŁĴª +lake +rob +cinema +profile +ñ +stands +legacy +shape +roof +civil +ians +syl +sham +voted +retail +philli +listed +duty +nb +thes +fare +auction +fficial +storms +dp +loun +shops +aly +anime +multiple +ðŁĺįðŁĺį +psycho +jean +apart +candidate +ggy +conf +joseph +wick +meat +frame +cl +forgot +phy +fing +lied +rep +seed +fall +ufc +nut +lind +mode +fields +ence +sley +ðŁ¤Ķ +chill +followed +announces +corru +trophy +themselves +acle +aldu +kong +lon +sv +broke +anderson +tai +story +temporary +activities +kati +ariz +crystal +spoke +extremely +trading +ðŁĴļ +ü +inch +edin +outfit +equip +madi +formed +beef +pop +tiger +thisday +tired +neighb +retro +isa +unt +tas +kansas +dest +seconds +tay +hurric +ou +galaxy +daddy +brow +burger +enced +desk +accur +secretary +elite +kab +chin +tourism +buddy +icide +dressed +ud +vacation +cheers +comfor +characters +jet +buying +lins +nap +realestate +lie +afc +iii +fame +nr +bat +agent +makers +âĢ¼ +sector +opti +leon +diet +prayer +hip +mir +lex +bry +ana +passing +wen +recovery +aki +popul +resort +maria +stuck +reads +tier +perfec +netflix +poo +champ +oc +reduce +wered +comments +claim +accident +sag +hack +salt +kinda +killer +ios +zy +exchange +lecture +enger +icking +tau +reveals +prison +zom +ghan +ul +journal +iot +trin +jona +governor +cape +quarter +spective +impressive +babies +tx +mill +oy +harri +joint +sue +collaboration +trend +revolution +renew +alumni +gett +shell +sunday +entu +nic +donaldtrump +blockchain +pacific +explains +spy +advoc +paradi +tof +starring +pav +feed +brac +smoke +hamp +yam +tokyo +simon +dh +effici +physical +nj +elli +slow +graduate +americans +tify +fred +apore +finds +robin +wet +notice +semi +unve +kom +pilot +screening +daily +ðŁĴĹ +royal +spa +votes +nag +whate +attending +experim +addition +kate +stol +mali +foot +christ +chan +dee +licen +global +moore +tia +brigh +mystery +yay +âĿ¤ï¸ıâĿ¤ï¸ı +creati +mechan +clock +dic +âĢĶ +pper +alph +throughout +allow +resources +selection +hamil +bbq +aaaa +virginia +disney +eng +sored +drinks +fancy +consider +enda +jane +handmade +dul +ontari +ius +sville +colorado +whatever +wheel +promise +never +designs +ably +sexual +vancou +ati +convention +cultural +singapore +promo +loaded +glasgo +ppl +noo +kee +stem +mention +ido +cruise +riding +becomes +bey +âļ½ï¸ı +twin +dedicated +nash +desi +workout +jenni +iv +groups +relax +phoeni +lift +mixed +mck +pc +must +metro +cies +yar +aim +anger +ie +recy +married +dropped +engag +lest +ambassador +oph +des +wick +assistant +natur +fail +ltd +short +kap +shaw +bigger +remains +critical +survey +coverage +erson +wind +nb +billy +letes +acts +jimmy +atlan +aland +tc +importance +damage +fg +storage +twt +bond +balance +crying +puppy +vote +push +ðŁĴľ +poly +mel +london +terrori +effective +corporate +atlanta +jaco +nasa +greek +senate +ish +eva +intelligence +efforts +alco +kun +hall +diag +claims +first +hb +bae +vul +pull +° +separ +speed +victi +onthisday +audience +rates +teach +filming +bush +song +yum +brun +raine +awa +parks +ðĿ +rabb +rach +raid +reached +rail +moves +selected +fri +raising +omy +stones +suk +francisco +cases +capit +confu +wtf +poke +equipment +greg +essential +offering +nex +pies +bec +creation +chairman +crown +wal +johnny +shift +neck +bang +bird +ðŁĺı +duck +reserve +depu +masters +overall +notic +juice +sneak +cheer +classes +eagles +nca +carpet +civil +coaches +harris +ups +balls +decor +martin +ros +vice +announcement +whose +tigers +stered +cts +dram +steel +young +install +suppo +recording +deck +seats +lder +angle +bot +styles +elections +fortun +nab +butter +arian +kash +inner +oured +beast +wei +iconic +experts +necess +beng +james +lia +greece +ðŁĵ· +ðŁĺģ +goodbye +mitch +twice +mumbai +steam +rush +medal +nett +fashion +tar +rs +saving +ricul +lm +sleeping +brooklyn +miss +sending +discovered +sphere +oftheday +kicks +missions +wright +ern +ghtly +ious +melbourne +startu +moved +carry +dak +agues +belgi +ema +wayne +dot +erie +pel +itunes +matthew +nobody +estab +calm +winds +luc +prepare +trends +exercise +advant +ðŁĴ¯ +athletics +apps +ctions +advance +launches +little +realdonaldtrump +elizabeth +carolina +hub +hidden +nw +user +poll +greater +most +fed +pat +lifestyle +sati +scores +marriage +lr +avenue +deserve +rif +ðŁĹ +watch +championships +gray +enni +cotton +gom +where +package +sum +absolu +newly +foods +tyler +assembly +muslim +bank +rememb +options +producer +lando +funds +upper +shadow +progre +cop +inge +legs +detroit +hillary +jose +giants +soup +sustainable +tus +clothes +rocking +nz +minne +materi +bruce +eart +casting +independent +thousands +tah +decl +veterans +lions +wrap +âĢ¦ +dess +bling +stine +eggs +oon +closing +zay +att +bacon +fail +arizona +depre +ghost +newsp +wers +vip +liked +ident +volunteer +adult +pupp +circle +material +degree +grown +boom +calendar +sur +viewing +athletes +chand +rell +asian +entr +volley +victims +body +mama +transfer +geek +indic +saved +mai +gent +its +lounge +kol +theory +situation +islands +arth +zoo +flood +viously +showed +parliament +chev +eline +attrac +abad +tail +hrs +lus +portu +gory +provides +toys +death +infe +ance +gle +liam +lover +hud +dvd +revealed +gw +rement +cathe +lying +radio +derby +stors +chemi +hospit +⾨ +': +ilove +lemon +republic +sni +ness +door +reaction +pregn +flav +scholar +spotify +isation +visual +aware +sponsored +joke +lessons +legis +lock +simil +ðŁĺĭ +kind +lay +mah +hoping +vancouver +aser +cleaning +gala +threat +lap +ache +romance +expen +repost +zam +epi +mirror +oak +adul +batman +slu +lc +viewed +reviews +dates +indonesia +activi +offen +leaf +isi +agricul +costume +sites +spiritu +appearance +iry +stair +application +spectac +icity +skies +handle +punk +paradise +tn +deal +providing +doc +receiving +brew +microsoft +ö +ferr +metro +thail +yum +carter +á +gentle +breaks +cooper +showcase +cutting +egypt +baby +seminar +glori +sson +fave +rehear +lotte +lady +alas +prep +delivered +nuclear +iro +engagement +atta +conven +zan +glory +holds +businesses +strange +sche +itself +grad +markets +falling +stats +geon +budd +lis +sheet +thisi +colo +desert +registration +ign +explain +interior +laws +writers +springs +kr +fried +bloom +infra +ao +cred +past +lineup +boo +brea +boots +celebrity +attacks +brook +eves +excu +cherry +oop +fascin +boyfriend +seas +nine +effects +powered +kha +ðŁĺĢ +shout +condition +ij +hero +enterpri +winter +applications +shoe +gel +battle +programs +wart +ðŁĴ¥ +rap +hol +dangerous +dia +counter +rics +ior +knight +coat +emotional +atures +das +wheel +forecast +transport +glasgow +kingdom +preparing +immedi +ffin +awarded +printing +roman +fighters +anymore +belt +pine +wine +xi +employees +logies +alled +demo +birthday +angeles +log +drivers +necklace +kath +sit +athlete +efs +sburg +purpose +resistance +releases +tis +various +deliver +chal +sanc +oppo +craw +neuro +dra +supporters +snap +difficult +swear +logist +path +attempt +ॠ+swimming +steve +hurt +included +bap +ware +ðŁĴĭ +enders +jake +leeds +climb +lb +imple +lisa +clothing +ðŁĺİ +dt +compla +swing +straw +vals +kle +users +storm +cuts +ontario +pan +handsome +iow +argu +checking +scottish +Ķï¸ı +sier +emma +pod +pattern +desh +enh +edward +ting +kh +half +lincoln +mother +alleg +rc +volleyball +dn +gay +ally +leton +grove +loud +advanced +respec +client +supreme +thailand +how +gig +toi +dot +dollar +ðŁijĩ +pit +rb +hn +produced +ggers +âĨĴ +mlb +canvas +fineart +usd +inthe +pson +actual +sl +tb +ipad +ensure +umb +wd +ska +mars +kend +feli +thing +countdown +absolute +rout +dral +py +injured +mint +hunting +mmer +sage +ligh +acity +expan +murray +aro +secure +fourth +eagle +relief +stakes +industrial +clark +understanding +seem +plenty +silver +clau +threat +sail +produce +abstr +isis +br +engers +worry +bieber +sj +justin +realize +kyle +espn +filter +sch +types +gamedev +ding +twitter +soldiers +pom +carbon +yards +childhood +ried +kel +eleph +tons +keynote +quiet +wire +posting +issa +representing +backs +alexander +celebrates +taining +|| +chor +escape +peek +tives +field +ssie +impac +sponsor +rc +wedd +cannab +sides +tracks +compar +contrac +technical +bible +exploring +share +trav +nate +illo +scru +mingham +guns +ofthe +shame +sees +catho +access +cel +reported +» +mario +pad +hopefully +ouse +yon +disappo +olo +pitt +pac +gap +crush +sg +kle +gem +empire +dirty +ais +aviation +zealand +facing +highway +danny +spider +otta +ðŁĺĦ +wy +colours +infl +costs +olympics +aus +hm +howard +passes +lauren +mush +opin +rho +discount +operation +emily +mmm +chamber +dil +toyo +ship +samu +pictured +unic +pol +keeper +cartoon +sten +ignor +nations +nl +tasting +detail +officials +motor +francis +editor +ðŁijĩ +pets +rangers +tg +rn +wri +nichol +ise +spots +anie +check +triple +kumar +speakers +icing +prepared +abuse +friendship +month +swim +aire +scent +hamilton +indian +jes +yummy +tears +dawn +ized +worlds +ðŁķ +billi +stone +nhs +basic +por +stle +iron +older +clevel +eing +ðŁĺįðŁĺįðŁĺį +prints +firm +aircraft +finest +develop +aaron +tz +graham +owners +foli +lesson +ques +babe +craft +phen +jun +birmingham +vine +ller +ian +fineartamerica +evolu +stab +imper +ward +comic +wiz +invited +duke +match +ports +roger +diagno +kept +test +visu +rhy +soc +tox +baker +surface +covers +mans +bits +xbox +ffle +nan +gard +hart +waters +villa +retro +lightning +catholic +democracy +neighbor +penn +cran +jonathan +laura +vibes +sub +coaching +clearly +ukraine +brave +commitment +tall +mart +rap +modi +scott +bros +shower +ðŁı¾ +âĺºï¸ı +cousin +approach +bre +compos +hilari +philly +gad +quickly +rian +tm +virtual +houses +kt +phoenix +wire +ffy +bunch +ancing +tale +snapchat +starter +ht +kicking +apart +thy +)! +blogger +itz +comfort +angels +wash +": +argent +request +honest +mighty +bobby +kg +rol +thouse +expo +hc +tables +magical +posts +dem +nw +orlando +aber +*** +ðŁĺľ +environmental +transformation +mile +wic +hiring +maine +boar +rying +tis +niture +tweeted +antonio +opinion +finale +diy +fis +thin +trouble +lego +files +quart +spa +currency +climate +fanart +railway +space +bands +daniel +motion +leng +holder +occu +marie +cathedral +buzz +bies +nascar +bmw +battery +charlotte +doctor +zzle +seven +insan +ddy +sten +labor +thrilled +seren +documentary +waves +certain +candid +allowed +nintendo +starwars +tap +homemade +dles +thering +bree +empty +piano +positi +country +pork +puts +perry +matic +spotlight +tist +orities +wealth +cp +barbar +committed +assau +profit +eight +hul +finishing +runner +sso +inspec +charged +christop +losing +coal +hoo +elev +dele +moham +donation +cable +clinic +jin +managed +tering +⬠+urban +deputy +bber +burn +academic +ott +stake +iter +stown +acker +adventures +adams +greg +prom +vol +acqu +congre +paint +citizens +call +afford +vc +asks +thetic +independence +⼠+hitting +blon +future +âı +inno +gene +boards +distance +set +remem +thal +prevent +lang +objec +susp +matt +induc +boro +pione +redi +virtu +printed +scope +shark +succe +astron +illegal +jag +cting +inee +ato +robin +nutrition +bf +dutch +bn +furniture +forgotten +atar +rup +hyper +branch +communication +degrees +onia +uncle +promote +orche +wii +js +button +major +cbs +bristol +premium +ordinary +edit +mg +weed +steven +:' +gus +tes +captured +drugs +dow +writes +bishop +wheels +alization +discovery +wr +rachel +neil +hydr +cutest +entrepreneur +korean +oregon +ulty +perfectly +supported +historical +twins +elly +wel +devil +income +scientists +deleg +hen +oni +iced +gio +curry +reveal +eg +buffalo +nol +opera +cameron +hahahaha +jab +graduation +craig +ral +if +organization +lege +gang +sud +edinburgh +lack +flies +gate +thrones +qb +thereal +eleg +ppin +cles +jamie +tnam +crypto +oul +pages +ase +roots +stupid +adid +boot +protein +sap +sium +sus +endor +function +dont +enna +chy +sque +worker +mtv +ea +kan +ðŁĴļ +mus +profession +tto +operations +allo +ctor +invite +scand +outh +zim +links +clients +samsung +discusses +nell +ultra +somewhere +stewart +inet +dez +bout +factor +tian +trans +jeremy +db +ðŁĩ¬ +orn +developing +spol +cooper +mau +remembering +trek +family +seniors +foster +attended +wing +transform +elementary +horiz +listing +malaysia +itch +warrior +philippines +russell +mend +initiative +creep +tops +briti +aur +sharp +advertising +ugly +achiev +materials +bug +device +bonus +facility +cole +nhl +yas +planned +pole +excellence +trick +confl +rp +achieve +loan +swag +jessica +howe +pour +scu +zoo +rated +dresses +rebel +mexican +coordin +mess +atlantic +tl +oscar +walks +pharmac +investigation +...# +cci +easily +mondaymotivation +yment +auti +forced +armed +colleagues +papers +proper +shake +buc +lean +exhibit +evement +cott +biz +sper +kent +swan +/@ +girlfriend +hawk +âĺĢï¸ı +mono +ðŁĴĽ +statue +ðŁĺ³ +ras +teeth +precious +tile +pam +swift +vali +nose +drunk +experiences +comeback +genius +worse +shef +rad +edit +honour +auspol +larry +hire +gordon +achievement +........ +suicide +alternative +sup +surroun +shake +keith +pepper +turk +criminal +beck +sum +walls +cnn +antic +offe +colli +wines +highlight +hawaii +embar +lfc +ðŁĩ® +mv +>> +atmo +word +carl +shoutout +brewing +ìĿ +dof +sic +hottest +colon +hhh +shut +lowing +volume +apartment +agreement +destro +wee +religious +iowa +rod +landing +represent +ðŁĵ·: +las +usually +hl +cac +salv +along +laughing +beans +reminds +phase +somebody +mask +ranked +destroy +sci +âĢ¼ï¸ı +gabri +leo +roa +failed +sil +refugees +revi +ring +berries +cookies +yy +conservation +shab +humans +determin +ain +niall +assu +mba +from +extreme +vices +commerce +ghtful +ordered +supports +recap +vor +dropping +correct +paying +meaning +nj +quiz +"# +business +ðŁĩ®ðŁĩ +indigen +dust +boxes +blind +xxx +zzy +ðŁĩ¬ðŁĩ +ssels +sant +ddle +hilarious +design +wondering +vehicles +kre +jud +reception +parker +ÃŃ +privi +hydro +softball +pollu +locked +bah +ear +script +divi +brace +george +theast +belo +jal +tionary +dental +rocket +purch +shak +manufacturing +ez +itis +concep +tball +chs +directed +prayers +ook +philos +variety +chess +server +gand +balti +ðŁĵ¸ +sely +cruz +spectacular +burning +represent +iz +tone +merce +hell +bedroom +establi +bol +common +ãĥ» +abor +kitty +heights +repair +william +quake +alabama +population +rev +rett +ists +nite +lem +aha +cleveland +rm +pover +obse +montre +mania +® +conne +carni +shah +fy +ua +scor +struggle +bob +'' +appropri +decide +ffed +caster +sort +hungry +drag +ا٠+grounds +dw +slightly +cardin +deadline +bronze +webin +barry +silence +euro +option +earn +ðŁĴĸ +however +naren +nails +bathroom +vine +phd +mining +garage +() +shoulder +defeat +dir +ov +liberty +pleas +xon +compre +av +jin +ables +silent +famili +visits +dipl +habit +millions +regarding +innovative +senator +rts +von +kl +whil +required +âĿĦ +luv +presidential +pocket +hundre +shown +frozen +toward +fast +confidence +rough +individual +quet +ðŁı½ +dome +fifa +engineer +zen +remix +ðŁĺĥ +plant +minor +robinson +asy +pulled +certain +potato +(: +pres +occa +wit +item +sie +dating +thompson +owned +anu +vie +tedly +goodnight +except +ðŁĮŁ +iraq +kie +rences +lip +similar +saudi +vig +arthur +picks +milan +honda +maxi +og +stest +arch +analytics +basti +pearl +terry +horse +astro +acce +launching +international +sno +tasty +denver +irl +pete +torn +advantage +varsity +"" +sole +gc +lang +demonstr +olds +unity +nets +inspire +crete +nashville +nelson +eter +walk +hyun +mack +treas +seeking +rage +brush +aband +whilst +cocon +hong +shelter +ip +possibly +soo +ited +âĦ +races +warming +quin +television +matches +rapi +mental +palm +jennifer +rolls +indiana +bars +catching +rescu +candidates +fare +âłĢ +seo +vietnam +alpha +michelle +visible +regre +wned +apple +lip +ffe +liz +yorkshire +hail +seasons +began +md +kc +lap +fascinating +help +ury +ums +nuts +sem +alongside +bridge +orial +ove +worldcup +british +comfortable +ive +hotels +fairs +horri +sox +dining +stream +barri +ssy +wim +terms +vu +pere +lens +walked +ror +lars +shield +doubt +proto +crossing +meant +medium +adding +eb +cheap +func +paper +brands +ryan +feedback +collins +unknown +tropical +sandwich +fallen +formu +select +loads +answers +ori +maga +dor +duo +alie +drum +uri +deer +soul +shut +âĺº +stolen +donated +buzz +patriots +hal +nasty +nominated +monte +kia +thri +ingu +tests +petro +ðŁijij +hosts +nest +topic +patch +mmy +hugh +abilities +mathe +smiles +gb +agenda +insights +chip +phan +failure +dgers +hai +significant +shock +rural +glam +figures +potus +ota +ministry +appears +fear +rh +american +hatt +sony +fires +edi +nou +equi +when +universal +madness +ix +sculpture +bach +tto +sweden +eta +ento +developed +monthly +maps +rah +led +delta +saints +islam +bench +fifth +vard +socks +welcoming +je +turner +vb +adi +norway +ady +hurricane +porsche +tradition +exam +newspaper +luci +aver +ideal +dna +madison +ðŁ§ +witness +acou +insight +simon +robot +snake +nbc +aco +ross +shment +religion +chann +insu +campbell +installed +weather +horses +oli +robert +kaz +ðŁıĢ +veteran +thread +quarter +easier +capture +hipho +lawrence +romantic +passion +clay +oxford +thai +studying +fia +elected +mostly +cb +tumb +âĢįâĻĤ +xl +shan +faster +evans +slide +shri +seek +mies +chemistry +pumpkin +tum +,, +room +fired +lips +presence +aff +brewery +arrive +swag +photograph +pengu +chips +attor +values +accurate +contemporary +principal +cannabis +ario +anywhere +gia +democrats +buildings +lived +aps +negative +mare +ballo +lion +diamon +look +reform +tommy +illa +treats +hundreds +portland +worthy +excep +aria +idol +beer +cdn +yu +awk +ðŁĩ¨ +cells +ó +identity +drawn +devil +finger +tham +ðŁijĬ +earned +fintech +dolph +tweeting +evolution +ðŁĵį +estim +mvp +none +ðŁĩºðŁĩ¸ +toyota +aux +marin +bold +lbs +steak +murphy +itable +louis +solve +pia +skir +illino +webinar +banana +lov +thon +voters +affordable +defeated +lmfa +airlines +superb +anyway +debt +bored +versi +metal +responsible +mk +sse +fay +caused +fp +recommend +plaza +sporting +alliance +austri +nn +tours +surprised +artif +thunder +surve +wore +brief +necessary +zie +ashley +drake +rt +knife +immun +charges +athe +bride +reply +gav +broadcast +puer +bracelet +capacity +harvest +idk +performan +dding +ilers +para +jama +province +chin +iders +hari +teaser +chen +restor +rat +flat +colom +ðŁĴŀ +ðŁĩ¨ðŁĩ +smooth +rt +pitch +staying +israeli +tcot +perspective +dock +opener +lovel +xo +classroom +lington +goal +kennedy +sham +spaces +mitchell +homecoming +uki +claimed +recruit +ingo +mufc +monit +groo +resident +percent +perman +ottawa +intment +anxi +standards +worship +scheme +fx +potter +bian +athletic +afgh +sse +satell +parties +âĿ¤âĿ¤ +infrastructure +relax +modu +worn +smoking +yach +practices +wcw +amb +domestic +taylor +kentu +provided +modi +veg +"... +observ +ðŁĺ© +beard +mour +angry +ðŁĺ± +startups +wooden +dive +nail +antique +roses +tornado +mat +^^ +suspect +farm +devices +mega +tul +scholarship +gee +disaster +arrival +poin +marc +katie +bbed +false +deserves +richard +juana +frey +tioned +hybri +rw +sarah +achi +cure +ole +morris +chic +broadway +label +pak +poverty +golf +ered +fu +eries +bees +alogue +stel +wireless +jewish +tide +blocked +lifetime +bhar +split +amster +thi +joshu +brunch +haps +sfor +oops +kapoor +hiking +supposed +roof +reas +train +tight +trump +basically +rr +eared +seeds +entrance +cp +wie +sonic +victim +here +eh +earrings +salmon +arctic +anne +dougla +corruption +hannah +hasn +voices +conce +atta +fleet +clinical +democratic +tony +stood +lef +twitch +ail +honestly +increased +drome +donna +accepted +visitors +apar +ador +par +jerry +rai +brandon +abu +!!!!!! +meme +ingh +glorious +bhu +pump +jol +like +fisher +maz +agan +destination +playlist +letters +genu +brace +celebrated +banner +rhe +dragon +ðŁĺħ +signature +grey +âľĶï¸ı +alice +bered +pher +bern +cath +gathering +scoring +influence +smiling +dept +local +ax +acu +retirement +honor +herself +chemical +assess +yall +frequ +appreciation +aca +choir +cuz +soil +cil +reporting +uh +enterprise +grat +jacob +rum +fee +jak +spin +bikes +phia +stere +pis +blood +tatt +raft +warren +sheri +backstage +marsh +hashtag +therine +rein +gameday +guaran +recipes +minds +stronger +issued +bicy +nak +mented +scary +ux +previous +ttle +thats +actors +uma +tina +bunny +promotion +uss +oliver +montreal +whats +appreciated +lakes +excuse +knowing +prizes +muscle +shades +scot +ingredi +electronic +juan +combat +sri +eh +turkish +lom +strikes +prison +ree +pope +vid +oldest +doll +swiss +certified +clip +returning +lator +leigh +ttes +watson +healing +elim +perhaps +hass +kau +dder +mouse +newcastle +indigenous +welcomes +cole +taught +noise +appear +joe +canon +wednesday +utah +ctive +driven +iv +cell +strip +acc +focused +arrest +stocks +woo +âĹ +noticed +shado +displa +terror +borne +second +queens +woke +jail +nott +cambridge +hart +seaf +fax +accept +âĺħ +goods +kat +twin +hs +thousand +sins +suite +ampton +arn +relev +richar +hoops +nbc +classic +pab +soldier +deplo +leans +installation +clash +leban +eee +tire +beloved +fusion +traveling +nei +cookie +globe +physics +sq +col +wolves +dl +exit +"- +football +leaf +sterling +hide +minneso +freshman +nature +indie +supplies +bris +irish +inktober +doodle +icop +messages +adults +recorded +fixed +ardo +offered +underground +drone +pine +mainten +andre +hammer +sx +round +hike +brad +rome +full +oney +rows +columbia +archives +approved +batch +illinois +recognition +shouldn +fog +ncaa +kevin +humanity +although +powers +pou +sar +pest +alcohol +consci +philadel +eno +tm +okla +category +participate +accused +brief +poem +clubs +consult +jab +bigdata +amsterdam +acing +certific +nu +dat +improved +andy +campaig +palestin +pace +mobi +feelings +wolf +brain +propos +interactive +prince +index +cis +chae +peaceful +covering +aco +courses +monkey +replace +bl +bloody +tales +brighton +neighborhood +gates +spiritual +afraid +breast +bones +ðŁijī +video +wau +touch +injuries +carl +rix +unex +âĢ¢ +fred +considered +thusi +anch +ony +usa +graphics +acre +ðŁĺ© +commemor +commod +goti +guardian +starbucks +prevention +hahahaha +administration +portugal +faculty +beta +ula +albert +breath +eri +letting +tric +mentation +incredibly +tennes +vd +ðŁĻĪ +eddie +brick +grill +btw +watches +researchers +tney +nie +pas +aster +vibr +pokemon +chrome +goat +pitts +illy +festive +yd +canal +ðŁĨ +fies +carlos +reque +partici +trains +sample +temperature +symph +picking +indoor +zers +playoffs +________ +apes +lyrics +islamic +performances +dick +spark +seas +homa +ground +disci +employee +commu +alaska +alan +feast +dging +banking +manuel +slowly +trucks +mccar +ooo +scrat +orchestra +individu +mx +breath +stairs +equality +blake +locations +coconut +baltimore +aaa +lc +ðŁıĨ +harvey +resist +immigration +adidas +fili +ref +lgbt +mos +ppi +kenny +terror +bane +apolis +sg +socialmedia +kai +honest +assas +bollywood +âĢįâĻĢï¸ı +ferrari +horn +crypto +boom +maintenance +idi +sman +wl +extended +insul +ves +gosp +tri +pig +targe +celer +stati +smh +ridic +appeal +?) +conclu +cosme +sheep +christopher +enthusi +polish +mets +ounded +sustainability +creativity +concrete +rai +alien +bless +tees +club +rot +bos +exist +perfection +luck +rocky +expensive +meanwhile +happybirthday +pret +thriller +cave +playoff +somer +lu +lex +defence +amwriting +homeless +prophe +chet +pastor +ðŁ¤£ +lander +www +Ģï¸ı +tica +!# +otic +radar +posters +powder +poli +haun +trap +blin +assault +shorts +rey +shy +squir +racist +garlic +fur +remote +smell +impressed +fingers +âłĢ +dino +lement +snu +promoting +string +productive +bage +mason +raz +directly +jk +eval +ðŁijĬ +doctors +cow +rider +stv +remove +wu +nathan +rod +nr +=> +affected +invest +mption +ginger +od +agriculture +sque +mug +counting +kee +magnific +cook +anistan +root +placed +sympo +ghana +und +cheer +throwing +secrets +filling +optimi +butterfly +bubb +ðŁĺī +terrible +dg +silk +obsessed +lou +aide +salute +monu +philadelphia +scientific +ist +uae +dessert +bottles +canyon +ðŁĺĪ +carib +other +wich +resource +guilty +und +leon +ess +kane +ele +trainer +heim +ante +manage +rookie +treated +poses +rsvp +causes +awak +jewell +lett +onics +titles +cardiff +gaga +bump +useful +?! +loose +bbing +:: +argentina +debu +cycl +whel +disgu +jel +kills +biology +exter +trash +bodies +tram +circuit +expect +lads +wells +shot +gee +narendr +fastest +bent +bills +marshall +hats +introduce +citizen +impossible +gib +azz +networking +rant +think +indy +stops +ftheday +brian +** +amodi +dome +courage +packing +affairs +gn +sized +entary +poland +switzer +afghanistan +wu +tender +subscribe +mosco +attend +republican +honey +âĢĭ +simul +wester +foodie +oro +middle +abt +copies +maje +narendramodi +typical +inspirational +vitam +wiscon +cubs +tivity +hali +ears +kay +dare +marijuana +curious +ania +tomato +remind +ðŁĩ· +scared +coup +poet +landed +rid +wrapped +morri +climbing +ews +feeding +contra +thology +grid +tively +reader +laser +diving +dig +latin +tied +shakespe +oci +adm +showers +chuck +marcus +oos +knee +olive +owl +dylan +anno +gym +decisions +wellness +arrives +satis +chris +thurs +ðŁ¤£ +interviews +thankyou +switzerland +overnight +journalist +serves +volcan +....... +plot +nicol +carrying +magne +treasure +exp +bever +ðŁĺ¢ +marty +mole +donations +recognized +bh +dus +shann +aldo +successfully +ente +ðŁĺĤðŁĺĤðŁĺĤðŁĺĤ +cabinet +cuis +titled +das +sol +strategies +delivering +adds +anian +nether +ðŁĴĥ +contain +suits +pairs +todd +rella +rope +cio +crop +paintings +suz +rejec +bust +dh +fraud +mh +control +jeal +destroyed +allows +wool +minnesota +omen +ju +symposium +daf +limit +accounts +loading +intern +resolution +holland +qual +meetings +grave +camping +vam +renov +liberal +amber +gree +humb +fever +eling +brooks +ಠ+beth +aded +alt +roe +performed +josh +franklin +nicole +dess +bbs +mg +networks +minim +alt +weapons +guy +jason +gha +harbour +aton +praise +kentucky +belfast +sticks +bloss +hopes +anthro +familiar +wait +chile +depression +lax +jets +leice +receives +sier +ank +dex +indeed +flexi +fabric +lamb +helicop +amanda +âĢĶâĢĶ +compete +snack +technologies +syrian +moms +muham +chosen +anat +devon +sharks +ret +fundraiser +selfies +stations +communications +tennessee +tutor +rot +valuable +dynamic +nurse +ied +earthquake +deserved +ave +sara +stretch +douglas +nepal +ç +obviously +dame +rape +anybody +kw +patrol +holders +hanna +infographic +eco +beating +stanley +boats +ribb +ez +witch +inva +acid +boarding +-@ +gil +dave +careers +oppos +lloy +inter +dope +resu +jagu +shade +indy +onist +relations +agen +able +incident +meter +sharma +idr +prove +immediately +troops +aman +glow +gaza +blocks +personal +chronic +aller +sid +shr +whatsapp +lucy +archae +hou +journalism +ourselves +got +themed +shaped +weak +casual +length +slam +abbey +ev +counter +esta +recipi +chapel +expansion +self +suffering +spice +nz +spart +desper +booking +quarters +yon +ðŁĴĹ +pk +continued +-# +manhatt +talked +shen +combo +hybrid +jeans +liquid +seal +retweets +acceler +collective +tas +:)) +professionals +raw +ott +susan +iring +oklahoma +reven +survival +creator +transit +stac +surf +ik +editing +chilling +bailey +steal +rable +parent +hunger +snapp +collect +philosoph +dedication +cf +cm +leep +repeat +reha +unfortun +aer +aero +abstract +monitor +agents +bul +science +harbor +dragons +flooding +accompli +dash +julia +thered +tuesday +cyber +blow +tained +lem +reference +ppo +negoti +charle +connor +ault +accessories +commissioner +rainy +rear +advisory +lucas +maid +coal +kav +polo +ðŁı¾ +transport +margare +strawberry +burns +greens +nev +participants +colin +belgium +colour +inform +dell +bron +caly +kickoff +strategic +reunion +honors +lib +egyp +âŃIJï¸ı +hypo +sizes +registered +betes +relaxing +bloom +intense +valentines +insane +wwii +px +trio +blade +wisconsin +cone +platin +alize +raven +increasing +indians +ilian +blu +rabbit +extension +jef +audi +ferry +sell +aday +usb +sweat +champag +method +memph +assist +sby +cape +removed +magn +vt +rams +fbi +tackle +phew +hon +motorcycle +suspec +elephant +subject +lette +dairy +wheat +awkward +act +trol +mitted +zayn +sheriff +enemy +cons +kett +bulls +evalu +btc +satellite +holo +porter +diabetes +better +releasing +surf +:- +sebasti +collecting +encing +ethi +gods +alley +healthy +mills +smash +copper +crack +readers +spac +license +basket +bangla +entic +omi +mere +sively +animation +lanes +dentally +chillin +fie +karen +depth +lipse +ng +rip +melo +sandy +ðŁijıðŁijı +vincent +nut +hug +whole +creates +???? +âĿ¤ï¸ıâĿ¤ï¸ı +baked +upgrade +roberts +hara +caribbean +authentic +mbs +moscow +attorney +wiki +chlo +hull +cork +"! +stylish +ðŁĵ¸: +diary +improving +expand +bright +pollution +knights +personality +checked +facilities +zel +bowling +guer +ðŁİĤ +ongoing +units +hook +beck +conflict +todd +farming +educational +kak +clay +stroke +belly +explore +millenni +thm +loop +sms +consist +circa +bryan +dab +younger +solidar +ppa +experienced +bella +board +sheffield +stephen +consumer +submit +sponsor +tang +aggre +combined +tracking +sanders +baz +survive +ferred +equal +sep +reed +strong +privacy +stap +ung +acry +pasta +pirates +ager +fairy +dup +introduced +wip +lets +spray +ðŁĵº +grew +asts +pittsburgh +newyork +joey +lauren +trade +chop +pipe +claire +behavior +vap +crews +laptop +ðŁ¤Ĺ +chester +discipl +df +outdoors +ks +gover +superstar +casino +farmer +;-) +returned +ðŁıĪ +mail +roasted +costa +vill +pez +gardening +distribution +shining +investors +rasp +decades +realized +barn +pti +stable +utd +panthers +mens +bn +cade +bucket +ynn +whenever +wake +dais +bernie +lodge +julie +atmosphere +ðŁĺĺðŁĺĺ +majority +parti +excit +cut +meh +muslims +begun +flights +veness +ceme +posing +sole +gou +darkness +peach +celtic +authority +grandma +fulness +smith +specific +garcia +coins +goodness +aldub +recruiting +dennis +gary +sleeve +weapon +plz +discover +harrison +recruitment +jai +chim +compared +toms +mothers +amy +archive +task +benjam +seg +lawyer +alum +investing +mie +chez +jp +ake +flam +wallpaper +âĻ¥ï¸ı +tton +chest +favorites +weigh +coolest +rating +relevant +logan +maple +runners +prior +people +maur +terrorist +tested +carnival +suspen +measure +mv +cybersecurity +appren +terrorism +oz +vital +nies +gonz +funded +twist +assessment +diesel +enfor +column +addressing +casts +payment +xton +fier +,' +last +nee +unless +close +skill +cuisine +funeral +tiles +aun +kru +relationships +ðŁĴ¯ +event +âĢįâĻĤï¸ı +kindness +proposed +acoustic +aes +defender +dance +htt +wat +voy +ðŁ¤ĺ +aus +cliff +searching +beautifully +inqu +atl +specialist +ðŁIJ¶ +dai +trails +classics +instant +vous +revenue +march +kirk +fringe +fireworks +trivia +âĺħ +traction +walter +moto +lily +attitude +climb +scan +savings +cw +faith +credits +abled +graff +autograph +hehe +ranch +had +rogers +ðŁĮ¹ +fin +requ +folk +additional +lynn +uber +dollars +logic +worth +som +thesis +pound +bic +stur +ceram +spencer +entered +vamp +organized +âľĪ +pps +tron +mercedes +noti +competitive +dow +ousness +victor +grilled +nai +putin +abra +blame +alexand +animal +decent +pent +interior +:') +butler +ballet +ðŁĴĶ +albums +downs +lad +sir +plain +pers +blonde +disc +pakistan +sement +gaa +wage +chas +mani +cops +territ +lol +laughter +rivers +magnificent +lamp +wb +newsle +charts +blessing +punch +longest +floral +cutie +farewell +stopping +mbb +bud +cheese +decla +sim +mcdonald +deter +youth +tch +freder +kindle +fern +ator +asleep +pond +sprint +pounds +lazy +ghe +fundraising +deadly +grande +doug +hey +linda +considering +ium +golden +vik +authors +diss +ually +appropriate +morning +yle +honoring +folio +bec +rebec +finland +formula +cornwall +shay +causing +blend +signal +tent +kashmir +nationals +harmony +scout +accessi +height +medieval +improvement +kees +practical +card +depar +hun +oming +calgary +stel +bubble +guru +mah +unexpe +nh +eda +meat +ige +sio +goddess +inches +tunes +britt +stion +raj +âĻ« +mercy +ðŁĴĺ +sends +iest +polici +vale +reduced +asap +vijay +defensive +celebrations +riders +meditation +harmon +ging +¡ +programming +inau +sudden +mh +replacement +sku +jar +grades +tast +kitt +branding +kaw +boot +fought +pays +gf +ization +hop +kk +activist +vend +coastal +chaos +ðŁĶ´ +seme +billboard +lifting +cumb +scal +ðŁĸ¤ +struck +lv +indiedev +beaten +jungle +alright +destiny +ming +kc +chances +oman +qatar +craf +trained +prix +charm +otive +smu +ec +anders +handed +alban +certainly +arriving +ize +sai +track +painter +humble +appointment +headline +managing +mod +aspe +andrea +ä +ethiop +united +exist +bali +kad +nt +dred +rex +recognize +tampa +beers +atia +heels +note +transportation +turtle +rede +hiphop +spicy +spurs +â¬ĩ +corp +thern +toast +hurry +properties +mage +marco +elements +bouti +syndrome +msg +developer +graders +heim +resil +offices +delay +dimen +vintag +barbara +ðŁĺ± +venezu +cular +faced +barn +ðŁĺĨ +survivor +worm +confused +passionate +ر +identify +electricity +souls +bradley +reportedly +lunch +shelf +elia +sweet +smooth +employment +amel +manhattan +steam +ounts +yep +living +une +describe +cares +manila +shawn +acted +bash +steven +rest +petition +divine +welsh +race +platinum +ðŁĮ¸ +pb +extraordinary +solidarity +mall +onion +scheduled +gameof +fergu +dems +norm +pk +trials +policies +publishing +stole +front +character +vania +exce +stie +sca +residential +sailing +ðŁĶ¥ðŁĶ¥ðŁĶ¥ +sponsors +thick +champagne +shepher +continuing +venice +perth +nap +aster +yak +unlimited +choices +neo +hiv +reporter +brussels +fold +dys +semi +lawn +italia +wifi +ask +emed +frame +monitoring +stead +ida +grin +isa +flip +restric +offensive +attached +dish +why +phillips +greet +pals +mixtape +vou +fielder +spark +alberta +glen +cash +sri +uri +rodri +entrepreneurs +climatechange +psy +dle +ements +linked +netherlands +accidentally +opposition +velvet +rays +cw +omo +mf +lmfao +newsletter +:) +toilet +literature +disp +philip +uniform +suddenly +header +cooler +--- +proud +brig +nissan +scientist +jah +concentr +packs +appointed +soap +engage +chose +âĻ¡ +setup +jealous +harry +gation +tunnel +temp +oscars +decade +recommended +children +aba +anxiety +vements +salon +photoo +organiz +machines +abs +ville +hype +tiff +emerging +avgeek +[# +contribution +brady +resto +gmail +fitz +photoshoot +helmet +ht +elegant +uganda +nursing +orleans +penn +nah +footage +ema +wo +wad +concerns +vere +remark +whoever +strang +pt +quit +shang +history +sick +permanent +illness +cold +vision +hem +arrow +convic +pink +occup +bald +exhau +uof +amo +ont +ãĥ» +adopt +laid +smoked +interpre +essenti +associated +bd +bby +fier +install +diplom +conditi +cf +wak +anya +graci +fisher +sss +apr +ilit +musician +symphony +cord +hack +legi +lv +blessings +humor +scra +eti +minster +travelling +bush +jewellery +lime +!!! +pregnant +pee +lob +capital +ipa +pencil +labor +ducks +proudly +wedding +derek +mw +peg +valentine +angu +retreat +prospect +danger +vulner +upset +,# +srk +xim +thursday +nfl +kisses +reds +crack +reward +cu +kok +mete +abandoned +itt +meals +spell +stanbul +delays +rum +leop +gum +nova +superman +chick +mis +dramatic +innocent +rounds +rec +autism +bangladesh +moral +movie +spoo +kla +âĥ£ +outing +messi +abroad +lookin +aim +qi +stack +collage +௠+hudson +scan +hoe +chau +occur +commander +holes +ðŁİĦ +bias +von +sticker +mak +responsibility +columbus +saint +edmon +racism +farms +wen +gulf +mayo +!!!!!!!! +corporation +bachel +ela +internal +jeep +follows +dialogue +derer +smartphone +helen +richmond +equity +sland +bg +near +avi +memphis +weir +discussed +badge +pup +mistake +phenomen +unite +ðŁĽ +depic +rides +inaugu +nat +softwitter +combination +gospel +âļ¾ +admission +retrogaming +ðŁIJ¾ +schu +mbo +junction +alarm +ঠ+grac +khali +kul +male +caption +wish +tere +corps +rubber +playstation +erin +efficient +lor +jokes +inary +norman +luis +inaugural +ched +âļ½ï¸ı +dip +toe +strat +aac +amu +pier +cott +command +tten +snoo +cube +closes +classical +sword +expression +reaching +napp +cost +affect +rico +gif +breathe +tribe +ortho +hay +lg +fries +nm +hiding +richards +ende +micro +capitol +copy +rom +regime +maryland +taxi +dial +embarra +unbeliev +cht +vs +elimin +odd +penny +soundtrack +lings +transition +remaining +ais +malik +?!? +random +defend +ultra +trum +dancer +stol +drive +aver +roast +definition +sean +excitement +particul +surely +shav +bery +dishes +comm +isol +iam +obli +ghost +hughes +chiefs +bas +conservative +special +femin +shri +nancy +intel +tune +ðŁĩª +joel +ggle +moto +ðŁĺĶ +buck +dag +anticip +montana +guid +frog +ecraft +ope +drives +numer +xy +colorful +wednesdaywisdom +illumin +beyon +inaugur +deeply +prefer +fortune +cooked +tible +âĺķ +sweater +itter +tty +ui +gie +complic +~~ +taxes +cups +diverse +samanth +âłĢâłĢ +baking +symp +wai +behalf +mercur +travels +ðŁİīðŁİ +oria +engaged +jumping +retired +naked +puni +speedway +sciences +rehearsal +onym +dyou +plates +rati +krish +jazz +carol +raf +penalty +timeline +ruby +engineers +raf +belle +dose +cheon +escap +meg +rank +ord +megan +merch +eclipse +âĺºï¸ı +pledge +kirk +persi +leicester +sak +wk +safely +yyy +jet +promised +jc +enne +noah +reno +rea +ðŁĺĤðŁĺĤðŁĺĤðŁĺĤ +trail +ðŁijĢ +fd +sooo +rimin +wk +า +ial +xox +biscu +dale +fandom +participating +flag +privilege +peach +machine +boston +gross +og +miracle +adoption +uss +monsters +beij +clarke +pushing +praying +aro +dn +ellis +apollo +odds +refugee +tow +bp +ðŁĩ¬ðŁĩ§ +hend +appeared +membership +pean +dum +violent +vy +potatoes +aww +greetings +tts +acon +shane +photographed +crab +temperatures +cuba +cfc +welcom +hel +innings +mk +code +knock +grass +swedish +pta +icky +vat +lining +sq +sap +arc +announcing +skins +cityof +bring +cox +gamer +itarian +ida +hd +rosse +sadly +geo +âļ¡ï¸ı +tags +father +change +lance +whiskey +adelaide +tec +stickers +market +classy +badass +florence +liner +frost +kate +acon +scandal +essex +ðŁĺı +vivi +drill +bloggers +recommend +dha +acres +roma +buy +grocer +eria +mahar +ffer +patterns +veri +compu +stev +anga +mentor +doo +itali +cdnpoli +only +conduct +electro +def +whale +preparation +bicycle +viral +turnout +brass +quad +hospitality +packaging +dency +cemetery +aboard +dreaming +picture +tall +invent +admi +oe +temps +quan +fundam +promp +residence +mud +souri +âĦ¢ +graffiti +gif +dnd +comp +swar +peeps +palestine +devils +sang +assistance +bike +mississi +interviewed +nephew +drums +vand +gentlemen +nsw +insta +lebanon +eeee +olivia +very +rough +industries +mation +ðŁĺĴ +barrel +nay +pops +modern +illy +arest +onents +protecting +vans +eo +vikings +restaurants +reck +jackie +andrew +willing +heath +citizen +discrimin +à¹Ī +stuart +mys +hip +transp +"? +tex +sushi +ked +crossed +distur +pedia +fate +somehow +moth +processing +iss +rin +uts +yyc +vert +lgbt +reid +onto +arabia +habitat +== +streak +simpson +addiction +wimble +delivers +challenging +ðŁİ¶ +franch +edu +sme +aids +hurst +tham +tarian +remembered +palestinian +fees +trum +sketch +uru +fitting +jesse +ðŁĶ¥ðŁĶ¥ +-------- +bach +icia +colored +dah +associate +intel +seller +pu +stuffed +acs +bs +shin +cooperation +certificate +abu +ingredients +rev +inge +elder +christian +bundle +thic +dirt +beijing +commit +teddy +edu +today +sfield +wyn +confirms +loo +jv +eness +alpha +virus +arium +grind +bridges +introduction +polls +bacter +zach +terminal +raiders +flavor +zombie +vod +spreading +gameofthrones +efficiency +lately +alem +tweet +crimes +cler +dey +dged +hyun +payments +circus +ðŁĺŃðŁĺŃ +missouri +lub +episodes +cage +pos +matching +tumblr +lined +gest +ambi +narr +ington +regul +blown +isle +coco +ondon +joshua +touring +sma +sausage +bestfriend +boeing +desire +savage +rapper +devo +tear +takeover +cowboys +poker +parag +ppe +hint +wears +seth +roles +lanc +manga +format +flyer +cay +moor +bake +splash +vad +kerala +proceeds +silly +reflection +distr +wid +suit +civic +yankees +byn +migration +distin +orch +femini +qualifying +turi +obe +hundred +crap +wang +mathemat +bure +exposure +ferguson +semester +reserv +plym +ahu +facial +wax +worried +cab +vio +asa +cod +topics +pcs +halo +rescued +horizon +ark +âļª +holly +elf +ulti +pup +qualified +attendance +atively +destroy +yc +forth +photooftheday +cents +iceland +measures +desk +portfolio +articles +directors +datab +ew +creepy +ounding +honoured +mist +jit +mentioned +portable +itic +dann +fridayfeeling +amid +tiger +scrip +helicopter +hardware +explor +workplace +austria +beatles +bernar +spider +disco +cult +limits +shortly +final +ninja +luke +lebron +walmart +oil +vanilla +shire +yeg +aky +cs +bler +collected +tg +rolled +specials +bff +pierre +shim +vier +flashback +restoration +individuals +prod +freaking +turer +oa +refre +moroc +greet +reyn +careful +ouring +ush +isd +gill +view +thunderstorm +bled +picnic +guardi +pig +ark +sylvania +banned +ucl +vijay +orium +avengers +believes +eur +monument +concerned +labs +berg +aap +vish +singles +cancel +zel +arab +ruth +tooth +arta +shaf +chairs +rack +diseases +crowd +cly +flex +christma +artificial +tomat +fine +draws +advocate +france +ÙĬ +ðŁĺ³ +heavy +sour +comprehen +noble +aap +hindu +coral +gars +owen +nl +stall +yellow +marina +inver +support +tough +promises +pie +masterpiece +score +force +mortg +cryptocurrency +ox +rors +rockin +provin +hog +nostal +oakland +patrick +inclusion +traffic +ahmed +aha +luxury +consecu +demon +âĸº +blowing +stag +:" +encourage +bene +skull +dodge +buster +kinson +witne +error +lowest +fellow +à° +shre +blur +virgin +composer +slip +mornings +gains +table +grain +arist +brazilian +wwe +tues +ribbon +anag +dist +sacrif +embrace +entrepreneur +affili +deo +tali +tourist +fatal +ìĬ +automatic +ðŁĩµ +weak +welfare +confirm +benjamin +fights +alleged +mead +struggling +prosecu +chef +è +proposal +ern +ðŁĺĦ +dyk +ongs +hong +mack +melon +onent +rush +dap +toler +propag +cze +translation +wallet +cottage +sail +constitution +ðŁĴĢ +munici +favor +stormhour +ih +ðŁĺĮ +approaching +pinned +jed +nigerian +nach +shat +particularly +mcdon +cameras +annie +administr +heat +electrical +charming +gibson +boutique +exposed +actor +pillow +beaches +genuine +margaret +bennett +louisi +positions +ely +shiny +tention +architect +rental +acqui +google +subway +moment +ðŁļ¨ +rim +methods +cycli +norfolk +ÙĪ +overwhel +rapid +wear +happybirthday +progressive +ðŁĴ¥ +cogn +papa +fool +philosophy +polar +jimmy +wig +ðŁĴĭ +operating +reduction +phi +flags +tothe +odi +ares +koo +kang +arkansas +ashton +wimbledon +scifi +attractive +mississippi +logists +ralph +label +graduates +maha +hometown +âľĮï¸ı +founded +onthe +liz +transl +minimum +presti +tam +generations +rebel +journalists +param +mcm +acrylic +deaths +tesla +wt +bryant +jerus +istanbul +muhammad +riley +kris +workshops +iso +counts +stret +protected +trinity +manual +rhin +ril +pleasant +lemon +nerd +harder +darren +bury +rah +basis +migu +occasion +lists +âĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ı +eb +decre +hampton +ìĿ´ +travis +transform +puerto +nhl +avoc +trips +unexpected +vet +didyou +barber +stages +mson +represented +fort +lal +pple +nicely +ignore +quil +quinn +hk +carrier +reminded +among +passenger +ellen +guez +scape +mural +youngest +mash +dill +routine +stainless +jackson +gandhi +thal +oners +editorial +conversations +sdale +automation +ike +าภ+ðŁĩª +haul +laying +mentions +amen +abortion +ibi +counties +catherine +mands +jame +roller +aut +nam +ological +ception +ranking +toxic +snacks +victorian +bangkok +psychology +reg +angela +respond +style +sophie +dakota +achieved +marked +imperial +inas +gloves +slim +confident +attacked +gger +lonely +valentinesday +reb +craftbeer +origin +zimbab +ceiling +teens +otherwise +wb +fers +daysof +advisor +yah +âĻª +ender +republicans +ava +skirt +pipel +chie +jane +jax +ðŁĺĭ +âľĬ +jays +brett +balo +crucial +dhar +asis +deau +lloyd +chatting +âĿĦï¸ı +relay +remarkable +ns +wet +brisbane +ðŁĶ´ +tionally +fk +layer +household +consecutive +esis +pendant +stir +critic +sugar +photoshop +pares +artistic +dodgers +cun +crafted +amend +boat +âŃIJï¸ı +egyptian +saw +trage +smaller +oxy +paired +next +ires +taco +oy +uc +sti +aerial +:// +dro +dotcom +ggins +rpg +aye +lean +striker +lobby +protests +priority +congress +amate +invit +rington +mommy +thus +allowing +pioneer +enforcement +gori +talk +drag +dumb +bullet +sange +ery +targets +ðŁĩ¦ +heather +consider +seafood +vest +risks +%. +pg +sacred +heating +kicked +ttot +.- +chandi +coven +pool +pulse +ia +roster +shakespeare +esa +cargo +peanut +troop +action +tablet +homework +castle +struction +musicians +freezing +butt +justinbieber +jj +bahrain +anthem +audit +didyouknow +navig +guidance +âĸ¶ +turf +nun +fications +yemen +charging +xc +broncos +subur +pale +boring +amongst +forthe +emper +omfg +pj +expecting +ðŁĴ« +stl +admin +expectations +swan +shoot +ooooo +minent +ãĢIJ +wallace +stang +saturday +adopted +doubles +homie +omez +dhan +venture +surrounding +file +mobility +dees +wski +brooke +embro +remembers +kara +testim +botan +mtv +sacrifice +jerusalem +dl +´ +properly +ilion +asi +legit +cope +mcla +recycling +larger +ðŁĴĵ +patric +generous +jared +pf +molly +thomas +judges +hb +sorts +blvd +oven +entering +planes +beet +integration +booked +freed +vern +ashes +topped +depot +welcomed +rena +mick +dand +seeks +gamer +rankings +rene +mut +whisky +firefighters +gues +gather +tourney +demen +yang +newton +automotive +backyard +detailed +mist +tobac +fiber +unusual +gratitude +spare +neys +:* +peri +floating +finalist +donating +dress +broad +bethe +economics +taiwan +edwards +plug +prairi +valen +baba +fad +anas +harper +disorder +applied +patt +bikin +liver +curi +caroline +anner +julian +walking +malcol +screenshot +coding +skincare +activists +mysterious +exact +blocking +mercury +batter +dump +âľĮ +ense +lish +ridiculous +protesters +ðŁĻĪ +lust +sweat +ass +alike +cody +rements +winds +aspir +vienna +pray +...@ +boi +candle +assists +tee +derson +pony +fence +conspir +âĺħâĺħ +ooth +epic +barely +aunt +bam +diamonds +endless +screens +cancer +gro +pst +prospec +mosque +helpful +ouri +brother +gujar +cristi +inez +towers +addresses +gray +burton +retweeted +ðŁ¤Ķ +nity +duck +supervis +joan +kinder +sanctu +pied +âı° +łï¸ı +mati +revenge +cester +elife +designers +backed +boli +weight +couch +sures +sits +shrimp +lagos +authorities +osity +holly +computing +factors +abe +panels +ramad +sentence +mission +holm +rb +dads +shanghai +money +sheets +skate +threw +cupcakes +infinite +lis +practicing +essay +kai +asci +mob +ugh +holmes +regg +ikh +mock +collections +pep +ova +salt +nandez +coy +threats +texts +cinnam +pregnancy +pending +stamp +flower +gis +agreed +payne +rover +phra +soft +ffin +fathers +passengers +aways +ala +hes +livan +ins +samuel +ingui +hof +jj +chennai +catal +omic +heath +niece +pumped +integrated +arel +nom +productivity +wanting +visa +diana +twil +itv +camps +rowing +dley +blackand +guards +bells +reverse +vibe +ricky +moss +nyt +âĺĢï¸ı +elle +troy +cudd +evan +womens +foto +mistakes +wicked +mil +cled +memes +cosmo +scholar +reno +ðŁĺĢ +vents +#âĢ¦ +terrorists +casey +cardinals +ðŁĺĬðŁĺĬ +venezuela +bola +literacy +tw +eno +contains +austin +financi +evan +harvard +originally +chevro +herald +nottingham +managers +âŀ¡ +accepting +walsh +tutorial +entrepreneurship +yacht +requirements +glenn +pede +unfortunately +aching +daisy +gian +nightmare +âĿĹ +rina +bart +emails +opposite +whom +sake +puzzle +dashi +party +blanket +buses +lore +beauty +reason +punjab +windsor +functional +existing +hello +glimp +convin +lak +screaming +rebecca +bliss +northwest +infinity +cosmetics +pulling +coffee +pling +opho +colombia +interiordesign +(+ +emotions +sac +sunglasses +saves +df +sixth +aly +ðŁĺ» +deen +devast +politicians +lacrosse +gu +pei +java +combine +coalition +erts +surviv +chad +strian +nn +devi +counc +concern +controller +breast +jury +tum +introduces +ladi +mobile +alz +steady +nurses +hacking +online +ocean +ðŁİĦ +aam +juven +icc +louisiana +arte +streetart +ison +wns +frm +panda +noir +maintain +delay +symptoms +thorn +geome +tern +carried +pru +panor +assy +peru +cloud +spra +pedi +este +tagged +ðŁĺĿ +shadows +nazi +اÙĦ +corri +âĻ¥âĻ¥ +jad +ðŁĩ« +formal +spoken +ðŁĮŀ +enjoy +lopez +outlook +inho +wander +Ùħ +maya +pee +dine +ãĢij +briefing +supporter +arily +ghters +naturally +doctorwho +jen +var +newyear +rese +simm +rex +consequ +tomatoes +burst +bravo +burgers +cracking +northeast +biom +mushroom +marque +double +nier +vag +twenty +keyboard +winni +jamaica +parish +:- +mentalhealth +alizing +render +waking +ðŁİĤ +gly +nathan +washing +melissa +jung +loyal +chili +songwriter +guitarist +bowie +neighbors +onymous +asset +tai +headquarters +ðŁĮĪ +ihear +cigare +surg +)" +repl +darling +ðŁĻĦ +zak +sare +ãħĭ +mickey +warehouse +massage +inees +didnt +iw +hurts +engaging +magic +womenin +kitten +mors +cart +titans +colleague +competing +eran +khal +marble +demand +delight +etary +blizz +louise +mls +finishes +experiment +conducted +electronics +itters +caring +whats +symbol +jung +ecu +pix +context +charger +ðŁĺĩ +reig +frag +ëĭ +chad +true +kerry +defending +aint +auton +checkout +barnes +lessly +dt +mme +cloudy +secondary +arez +_: +appa +constant +") +vets +job +ient +ðŁĺŃðŁĺŃðŁĺŃ +mj +french +diver +davies +hhhh +ebook +à¹ī +mariti +breeze +suspended +mato +viet +rahu +sei +bolt +enary +leis +karl +framed +explaining +abc +dealing +nato +jake +expand +leonard +established +dub +armen +elled +vocal +nicholas +orient +kyo +illustrated +ahh +dancers +million +geta +popp +asu +murdered +gible +stoked +griffin +maximum +adrian +encounter +thero +davidson +ðŁį» +holiday +evo +assets +carson +memorable +âļ½ +obam +representative +cbd +tricks +vogue +voice +mmmm +sebastian +clif +athy +paralle +ðŁ¤· +pak +evacu +eats +Ø§Ø +touched +organised +spirits +canad +guided +framework +ðŁĮŁ +ped +natural +agar +replaced +anchor +tit +shah +organis +superior +rn +chro +erica +still +coron +chuck +locks +organ +rosen +scam +bened +/# +keen +trevor +vampire +sorted +!' +afford +intro +grace +ðŁĺľ +saur +kickstarter +influen +vu +yup +poc +ðŁİ¥ +aar +sang +trek +etsy +tbh +scream +chevrolet +pixel +shepherd +anor +gabriel +twood +sdcc +meters +developers +closure +vw +twitch +ìĹ +seoul +price +hog +nish +hillary +scratch +incen +wagon +disability +panther +chats +gd +witz +sussex +late +denmark +gerald +cancelled +nette +ix +naval +baptist +tet +yad +math +hoy +randy +point +intellec +fruits +wool +guin +pron +theft +condem +marry +nola +architects +cincin +rockets +gentleman +explan +tate +doe +raises +wildlife +wl +insider +blanc +wp +forsale +nyc +powell +unbelievable +pens +goodies +mustang +pens +stays +squash +xoxo +nearby +everton +coco +leagu +khan +stud +southwest +construc +sworth +croatia +lea +sums +aims +ean +vaness +itious +pathy +arcade +bend +suggests +sacram +royals +rier +emir +incl +ank +clark +right +vacc +ा +tane +lib +usc +sales +huh +sally +vera +pga +grows +drum +tree +ethics +suggest +isab +sealed +previously +animated +abdu +rises +glob +predat +scarf +delic +omar +lli +sxsw +python +nebra +funk +reflect +pavilion +tically +chasing +bakery +invasion +koh +believed +cohen +conqu +crafts +nati +clever +governance +samples +fails +âĶ +timo +ritu +striking +inclusive +shocking +cant +requires +drawings +à¸Ń +purchased +dum +zach +warner +console +mansion +fountain +circum +esh +island +milk +profits +halifax +rival +âľĪï¸ı +jenny +sandra +nye +kelly +yal +quad +nos +instein +finalists +midfielder +cue +exceptional +aan +sapp +gettin +saa +fati +slice +volk +swal +lasting +summary +itas +smo +sz +âĺĨ +ipl +flames +enews +hav +hoodie +pitcher +windy +revol +central +tonite +ðŁİīðŁİī +solved +milwau +organizations +weets +refin +sth +ãĥ¼ +elin +tona +cinnamon +ðŁİ¨ +ðŁİģ +ronaldo +peninsu +omega +elds +designing +eigh +bluet +benz +nug +asha +robots +sudan +choosing +endo +serge +closely +handy +finger +being +arte +survived +flame +milestone +gut +dwar +futures +ée +elo +fridge +elic +ouch +ub +pv +titan +collar +station +nevada +aurora +rd +duncan +âģł +brien +marsh +о +total +chry +sers +suffe +rachel +college +todays +courts +chit +reunited +gymna +genesis +beside +representation +chant +collector +rak +athens +nigh +munich +languages +flu +participation +___ +cv +spectrum +soda +cover +referen +abbo +apa +publication +edm +monica +army +ðŁļĢ +divor +dry +streams +robotics +cider +bullying +approval +stoke +platforms +sierra +extin +ib +hayes +succeed +suffer +atically +dai +lynch +hound +delines +acknow +dated +exclusively +heres +facilit +damaged +charter +lakers +falcon +unveiled +welove +ease +patience +lone +gentle +genetic +producing +gour +shannon +bilities +zimbabwe +pint +daughters +literary +belle +clam +surrounded +kany +neil +pirate +ranger +hbd +natalie +belong +olympi +embassy +scol +ener +akin +loren +bh +:/ +diva +denim +hipp +ðŁĩµðŁĩ +arnold +?' +weren +empower +disabled +manor +raspberry +baf +awful +drummer +kardashi +nash +machinelearning +chu +rebels +timing +monroe +tongue +range +pupils +ress +amazon +bz +harley +palmer +balloon +sings +icec +jb +cers +gps +whist +rise +lt +oooo +cattle +shooter +vodka +ucl +mtg +lesli +jonas +dispo +atric +stein +vintage +firms +floyd +cowboy +soooo +isaac +warcraft +disneyland +beautiful +beam +franchise +bun +kag +anon +turbo +sweep +madein +karachi +detective +pennsylvania +controversi +vitamin +aside +chronic +describes +removal +hah +aper +tened +uto +badly +mirac +fry +yea +injec +thermal +compact +thor +teed +urgent +lite +gilli +sophom +ico +chem +pm +fork +freak +chak +recipient +iy +nik +modeling +cans +ðŁıĢ +delux +seam +survivors +radical +investigating +reliable +fm +turt +lighthouse +tool +gown +)) +bots +autograph +aid +buffe +hmm +horrible +ssional +anni +à¹Ģ +kits +schi +eternal +huss +sensitive +ru +tastes +checks +imo +portion +skate +eden +halftime +fried +rihanna +tise +flick +cain +sgt +âľĶ +shau +stained +raffle +drove +salman +principles +sho +aru +jess +guine +garbage +myan +jelly +disru +zia +qld +entries +lav +flew +admit +objects +compare +nytimes +cannes +pn +suffol +roc +dana +egg +hist +counsel +'! +physi +imagination +adjust +explosion +plymouth +horror +elliott +bourne +dex +breed +audio +lobster +disappointed +nationwide +(( +increases +australi +cedar +staring +racial +eis +gmt +visions +stayed +discussions +dean +curtis +maiden +stellar +happiest +hwy +preseason +carav +mondays +hospitals +glimpse +scholars +jai +terrace +anna +goose +graded +lotus +hung +grocery +stamps +emperor +scoop +inser +cas +existence +heal +falcons +marvel +reducing +terrific +magnetic +performs +barre +pus +treating +icon +wh +declared +trauma +dod +comedian +nikon +bugs +asm +montgom +ibiza +comprehensive +has +santi +fellowship +dash +psal +louisville +spy +fault +dthe +filed +vista +desc +fears +youtu +sps +esp +rig +crime +berger +wonderland +kent +informed +stevens +myth +aston +iri +visitor +atri +producers +alla +personally +separate +agencies +afri +ilan +spoke +nina +squad +dives +depend +liv +fierce +entertaining +chain +scat +borders +palette +spro +osis +derby +tobacco +zio +willie +juvent +zoom +holy +entirely +afe +martinez +beds +pea +bulldogs +ðŁĩªðŁĩ +ibm +neon +ethiopia +teammates +planting +twer +anytime +forbes +ón +runway +nervous +roger +pile +chanc +apocaly +uw +oi +drought +territory +brick +creatures +goin +waff +gren +southeast +jean +ambul +edited +strap +cv +aaron +ãĥ»ãĥ» +tsu +description +kindly +clutch +immer +enor +womensday +orange +rag +obvious +hyder +channels +mango +meyer +raining +getty +pilgri +coordinator +upload +nintendo +donuts +sanchez +apparel +jr +zzi +,@ +jefferson +accessible +greatly +eid +initial +buddha +paris +mascot +â¬ĩï¸ı +schwar +siri +spinning +mortgage +echo +endange +gedly +chloe +enhance +karnat +kry +explores +ðŁĴģ +affair +icals +alla +dart +dolphins +differences +squirrel +augh +drones +ellen +restore +paw +unfor +pike +hilton +collab +consumers +coinci +outcomes +ppp +aq +coupon +liest +sims +kho +aves +spoon +pudding +corbyn +haters +exams +slave +.! +psa +apples +tamil +sed +coke +zzo +losange +carbon +clair +...) +khu +craig +exploration +sanctuary +sue +alway +dementia +wonders +superhero +pakistani +browns +bluetooth +locker +marc +eventu +deluxe +rodriguez +âĿ¤âĿ¤ +robb +ðŁĴ¦ +linux +tens +intelligent +seed +voter +sler +peaks +intern +teenage +peninsula +handling +tie +cousins +wendy +mee +à¹Ģภ+dino +ðŁĴ° +ðŁĺĥ +zee +sbury +tragedy +bk +bore +zin +warns +idiot +touching +continental +tacos +safari +washed +podium +morrison +forests +cbc +alon +particular +beads +invented +loch +lighter +wherever +ide +documents +awe +kr +nowhere +miner +stit +rox +contribute +hardy +clan +object +cait +ðŁĴķðŁĴķ +happier +vegetables +tart +gag +nominee +heavily +panic +jd +theresa +atm +uph +sfc +suri +drink +nal +revel +kl +avocado +nomination +madonna +sharon +malcolm +controlled +shers +revival +legislation +shoots +nin +commentary +pros +humanrights +stranger +mitch +pipeline +legally +thu +gilbert +toll +granted +ghs +iranian +refreshing +duk +abi +prime +joseph +mosa +statistics +productions +merry +patel +sax +humanitarian +structures +emissions +towns +freel +stering +ratings +allegedly +cabin +stl +wade +flyers +trim +promising +zu +ballot +comparison +freeze +outer +greatness +assign +snowy +rale +tories +mediter +knock +consultant +cincinnati +analyst +scoo +jews +approxim +pure +portraits +cyrus +ational +loans +acquis +elu +acceptable +union +watercolor +rust +battles +perfu +seasonal +serial +mindset +riot +feld +ennial +closet +priest +tanks +intl +screw +bum +abdul +oux +explained +rica +imaging +lawyers +buried +ãĥ»ãĥ»ãĥ» +earl +âĢķ +lton +restored +stripes +foss +demands +stealing +alexis +mund +aker +urus +wardro +hugs +genre +ego +ÙĦ +participated +babes +banquet +tious +hemi +dsb +lost +milwaukee +jenner +gem +outra +loses +idi +reps +ðŁİ§ +regulation +flaw +fang +vibrant +ramp +rains +wellbeing +soviet +viewers +depo +libraries +bigo +sery +gill +destruction +coz +cx +bridal +alds +planted +amateur +lud +cheering +showcas +profile +iu +vertical +packers +wizard +skip +slight +beau +airways +much +rera +ðŁĮĬ +absor +patio +packages +sells +mentally +ðŁĺ¢ +reynolds +kare +tribun +walt +knit +taste +surrey +bounce +creature +bare +betting +sure +miley +laughs +alore +cyn +tl +artist +annah +warmer +dynamics +lunchtime +maritime +vulnerable +ðŁĴĥ +wolver +durham +constantly +amin +sibl +:@ +bullet +kach +angelo +wilder +doom +desktop +lawsuit +kca +henderson +inviting +betty +tawards +rafa +leaked +andi +gems +afl +velo +mediterran +probe +totten +stephanie +snation +combe +qs +overcome +assassin +rav +filip +winnipeg +shil +determined +kas +outre +regret +guides +aaa +ðŁĺĪ +wives +manife +erly +smy +shima +xing +pixel +jacob +accommod +toy +ono +poo +tier +answe +ðŁĴģ +rosa +lease +belongs +thar +eventually +neither +goa +skiing +atra +agh +broadcasting +fury +pyram +dice +volkswag +womens +provider +bombs +missile +whip +dick +norwe +backup +elder +mature +concerts +gious +squee +goodmorning +braves +^_ +aussie +luna +males +heck +fortn +romeo +steelers +pn +peer +represents +« +katy +miguel +require +chains +lur +immediate +timber +âĸ¶ï¸ı +advocacy +export +anz +tiffany +author +ðŁİĪ +dudes +chilly +hid +harm +bug +monster +terrier +tuc +storytelling +tak +inti +immigrants +bis +reaches +compassion +johnny +contributions +ðŁIJ¶ +mechanical +impression +ranks +kobe +menting +blossom +pablo +builder +bombing +twel +sullivan +omo +pete +demi +kudos +wbb +tgif +massach +neighbor +chefs +engines +pune +gained +phantom +sdays +extend +gran +centers +jacqu +datasci +sleepy +elvis +answered +slot +cony +flexible +tially +letics +%, +andrews +sible +momma +vino +dox +invitational +twilight +jade +illery +johns +fou +pv +---> +breakdown +billion +printer +mond +cbc +maggie +legion +dub +kurt +poor +parenting +regions +bikini +beware +sional +auburn +kidding +amples +span +contempor +cic +habits +ako +prefe +buddies +itz +emily +personnel +mountain +versus +ðŁĺ¬ +earning +sink +dari +uu +swin +ister +brutal +nac +kata +cloth +amand +ðŁĶĹ +neo +alumin +weekends +nebraska +codes +delayed +bruno +proven +inc +ight +flan +oro +lambert +regulat +wf +massachuse +kardashian +bernard +fiesta +volcano +grandpa +anca +dre +stitu +meaning +foam +auck +ated +rl +hotel +persons +dynasty +ellor +mai +amne +styling +avier +eg +vegetarian +,âĢ¦ +founders +stain +gd +cycles +skyline +tractor +exists +tral +kidney +maril +instag +sette +addict +triangle +flashback +controversial +zon +pins +ias +tray +township +delegates +spam +hms +crane +peoples +olo +faction +butes +onica +delegation +newprofile +elier +mca +wand +gely +losangeles +berke +tive +disrup +zza +casa +jordan +fordshire +gathered +ichi +attendees +à¸Ńภ+peppers +coin +bourbon +ernity +rotary +behaviour +jeremy +teamwork +compliance +tremend +ðŁĩ§ +buhari +cambo +buyers +hagen +buds +bayern +monte +smells +anza +athlon +described +workforce +giving +api +investments +dail +selena +database +thum +mortal +student +buyer +dover +garten +attle +loyalty +genoci +holocau +theaters +ruling +venus +patent +chun +abby +awake +massacre +bangalore +breaking +simmons +justi +hale +edchat +ggles +hawk +marking +headlines +strom +cove +breathtaking +medals +haircut +christine +telegraph +gujarat +jura +cane +shore +propaganda +mueller +........ +savi +stomach +throws +tab +warm +jong +renowned +hir +rais +mushrooms +guaranteed +boa +mj +revolutionary +certification +bruins +join +wes +passport +cg +sexu +capable +wv +tones +jackets +accompan +spinach +forever +blair +watts +gl +couples +prairie +newprofilepic +logistics +massachusetts +jaguar +oid +weal +underwater +moz +yi +maths +myanmar +preps +suffered +trace +wali +ahhh +borg +stitch +culin +realise +infection +discrimination +shame +ankle +humid +yt +bracket +truck +triu +easter +community +postcard +involving +tyler +caramel +overview +examples +integrity +basement +instruments +anium +atus +gher +laundry +achieve +geneva +pricing +hyderabad +belief +meta +jaw +accounting +leader +cristiano +couture +cyp +vised +,,, +knu +hick +breaker +bram +rab +moor +hamas +graduating +puppies +akh +tah +aches +rie +opini +gta +reign +tragic +rever +pill +pineapple +touches +dare +leys +ilo +interiors +scouts +bart +enzie +dono +brock +christians +ensemble +· +cinemas +newport +airline +winston +leigh +contents +prescri +urge +trout +fically +ilia +subsi +arer +âļ¾ï¸ı +wounded +ðŁĻĤ +pepper +ðŁĴŀ +fitted +aff +resur +thursdaythoughts +zero +archaeology +div +jee +ion +awaiting +cozy +beauties +bald +data +grizz +stalk +kinds +cleared +jessic +regular +aliens +place +bos +bizar +thisis +ðŁĴĢ +tottenham +mafia +slam +ariana +carroll +backpack +carey +univ +rg +pep +digit +tattoos +agon +volunteering +differen +consumption +kathr +headphones +tshirt +ob +element +retail +shru +algori +container +conscious +fil +coming +rash +urope +define +gior +feminist +flowing +routes +glaci +fert +somerset +antes +tweeps +$$ +hour +endangered +yearsof +roh +popped +backing +basil +brake +monaco +lgbtq +prague +utility +cassi +gateway +haunted +schul +ðŁİµ +should +walkingdead +completing +danny +montgomery +penguin +ssi +merchandi +ðŁijij +church +hates +captain +breathing +cet +fairly +approaches +companion +surprising +kanye +pey +hindi +targeted +lords +deut +digging +german +rut +energy +closest +yun +apologi +ั +sack +rup +ddy +portal +dough +bats +ðŁĵ° +atur +grapher +pires +motors +ðŁĮ¹ +jc +dang +tuk +clue +usc +page +dless +brows +jus +ading +remarks +oom +cardio +stefan +armstrong +âĢ¢âĢ¢ +niest +belgian +biop +soy +lof +íĥ +qt +flashbackfriday +cee +ģภ+wreck +marines +amendment +wardrobe +voy +burned +guitars +rainf +lifel +ssil +ounce +external +ckey +mesh +sheikh +invitation +suggesti +popcorn +phenomenal +anonymous +tuna +chicago +oval +dely +locals +(& +prof +novel +finder +sparks +laven +infu +nicks +quant +rae +exec +distingui +stances +mutual +shal +unveils +edmonton +zania +adio +viewer +bradford +auditorium +quis +react +http +lero +cheeky +impacts +tak +edt +desperate +tay +ìĦ +settle +bargain +resume +unite +thrown +kest +seys +marching +amit +decline +schar +metr +stanford +linke +berra +dolls +rugby +jami +bor +roadtrip +dinosaur +mik +sunder +rem +bk +overseas +naughty +implementation +iamsrk +luncheon +firing +miami +perez +thee +zon +gifted +conversion +ceramic +¡ï¸ı +pedro +ìĨ +vick +!@ +heed +sid +bw +document +plun +grants +fantasy +predictions +valid +carved +graduated +ðŁijįðŁı» +nationally +chy +afl +resso +blank +rivals +jig +eties +omics +unemp +bound +sko +inspection +paral +highs +crisp +bans +oba +[@ +cospla +costumes +recall +mouth +nigel +bts +tera +kov +docs +westminster +dict +gravity +kari +rogue +tted +wark +idaho +wend +awi +queensland +processes +cliffe +mick +compens +opol +they +clari +wikipedia +salmankhan +hazard +preston +sweetest +pdf +chees +trilo +southafrica +burnt +($ +contain +tp +submitted +soundcloud +atu +rez +wordpress +corrupt +nf +maker +íķ +paras +advent +rial +cafe +fossil +!!!!!!! +cows +cj +spur +institutions +landmark +entit +reut +his +alzheim +wemb +reggae +mosqu +stat +identified +dealer +ream +reland +tension +ðŁĩ© +wrapping +deeper +frat +reddit +aris +morocco +.." +blow +mapping +priorities +inga +swap +rewards +conspiracy +creative +cj +congressional +vault +plex +sophomore +shadow +eless +ðŁĺħ +darts +aldub +annoying +props +nas +aluminum +hbo +offense +jill +onions +laur +tae +hardest +shro +gaining +measure +edtech +cyprus +tara +angeli +carlo +goon +alli +implic +jupit +resilience +hail +balanced +)... +joyce +gra +theli +defined +shipped +mainly +mina +lm +sacri +ober +pim +claiming +enters +corey +bok +cried +cooling +danielle +pharmacy +thorough +cake +klo +outreach +zens +digitalmarketing +valent +snp +herb +mrw +café +captures +notre +triumph +pancakes +cumber +spike +dation +bigg +sper +critical +amal +tooth +founding +astro +'# +quantum +thames +unc +pride +airbus +knocked +undefeated +mediterranean +calcu +clown +sensor +hammer +forgive +cushi +berry +majestic +elect +politan +gta +kari +burke +seahawks +volkswagen +rei +landscapes +casu +grandfather +listened +// +startrek +rainfall +furry +vier +stark +rifle +ffa +leges +hillaryclinton +minus +correctly +architectural +prece +upside +boxer +ðŁĻĮðŁı¼ +isai +det +provo +tissue +spooky +veled +recon +prospects +quebec +âļ« +igno +anatomy +shapes +wp +pinterest +hore +anes +pickup +tip +pradesh +hugh +coe +pok +grammy +wellington +stigate +righ +leap +kingston +scenic +gosh +vani +aug +sary +zier +bureau +linson +conte +fragr +allan +gaw +lana +collision +surveill +renais +arrange +sali +doin +brance +brendan +ourse +incoming +suspension +à´ +lla +educators +intri +dae +biography +bulgar +villain +gothic +rwanda +ew +mayor +meetup +democrat +morgan +sudden +tesco +carrot +bomber +mckin +rene +funday +agricultural +hahah +showtime +forming +cola +scorpi +quote +poppy +slife +daz +tub +nen +mot +ðŁĺ» +sore +elderly +ove +skinny +umi +anco +manship +were +gv +kah +folding +neat +samantha +danish +ukrain +humidity +nutri +jakarta +candles +oooooooo +atile +strength +ibra +bapti +charleston +frames +girls +clearing +gluten +## +supernatural +jubi +phone +hein +drun +leak +investor +yer +domain +ballroom +mish +appli +offshore +blaze +doro +âĺķï¸ı +winery +sharif +adore +nir +safer +sigh +ascri +strongly +tracy +cker +oll +faithful +eyed +delightful +vism +karnataka +titan +whar +jerseys +refur +heaven +grip +panama +preli +gluten +odd +content +ponti +tioning +ecommerce +federation +flawless +gear +tires +byr +police +cuban +tributes +ticul +churches +nursery +diaries +museums +snapped +ivan +wight +tourists +ramadan +trent +prophet +wondered +focusing +hid +icons +iq +ambulance +pist +funniest +timeless +srilan +buys +kids +colourful +ashi +chir +mum +ðŁĵļ +letter +xen +reuters +preserve +inting +step +fuji +univer +iu +showdown +poems +surveillance +suspected +tae +solving +tomb +mothersday +carpen +recruit +pilots +broc +mixing +fridays +tyr +representatives +trapped +abdul +freestyle +cluster +âļłï¸ı +kd +skill +pitt +exo +commerci +museum +locally +gina +nobel +immune +frac +capsu +mained +attempts +bulldog +bespoke +singers +spelling +segment +natures +tick +lipstick +cleaner +gettable +precision +âĢ¼ï¸ı +thood +reef +nope +billy +digi +musi +rival +figured +tality +sunny +berk +awww +awaits +unreal +copen +asylum +exotic +buen +mock +enable +archy +fra +plastic +almond +ampli +displays +abbott +sme +xp +ðŁĻĥ +graphic +ived +mara +caution +leaks +enberg +ulu +unicorn +cannon +apprentic +ðŁĺĺðŁĺĺ +bball +willow +atics +amas +manufacturer +campaigns +porters +floors +lsu +type +kej +honorary +itim +tole +minecraft +dx +mash +rio +consequences +ronald +gossi +suffolk +muse +rbi +livemusic +ivan +ðŁİ¤ +leu +patriot +manit +lanca +homedecor +dear +sigma +tide +strings +vita +sequel +tryna +investigate +boris +vegan +barrier +mindfulness +webb +hustle +inda +tanzania +stray +texas +cag +diagnosis +woman +gw +obsession +lative +nufc +flynn +momentum +sofa +wald +vegetable +tucker +supper +seab +arro +seag +venting +councill +splat +calcul +..# +comfy +odisha +stopp +warfare +caes +ਠ+coy +priceless +insec +ðŁĺĽ +controls +empowerment +datascience +perpe +genic +eres +trudeau +mano +slavery +expanding +mahe +failing +saga +photographs +crest +reon +surfing +hie +ðŁįĢ +jae +fellows +southampton +solom +cester +tability +horn +sect +hee +coleman +atlas +explorer +consultation +copyright +organizing +denied +monkeys +noodles +bris +flor +dough +bonds +shocked +ecosystem +carefully +wm +apartments +curve +sandiego +mustard +commen +ceremon +ech +ruth +ðŁĻĮðŁı» +hawai +filmed +tear +asingly +cair +watt +instrument +outta +yeol +riverside +ë° +.: +norwich +alog +migrants +newman +ride +sprink +targeting +believe +torch +reflects +permission +ffman +enemies +basics +seized +sundays +lei +hassan +endo +hc +stad +lements +kkkk +nano +shark +mana +onic +treatments +early +collaborative +shuttle +branches +misses +mainedcm +apers +kyle +carrie +leisure +shet +birding +advances +ðŁĵĿ +popular +diane +abe +rewar +neighbour +kpop +remembrance +playground +rub +krishna +ebola +inquiry +epa +lumin +organisation +abraham +normally +preten +janet +wt +ðŁĴİ +encouraging +astic +bump +sydney +sz +ssss +garrett +ðŁĵ» +consulting +romania +spotting +chancellor +arma +prestigious +ðĿIJ +tad +cryst +competit +ratio +cataly +brow +jur +viking +commute +yday +layers +dumb +escal +genocide +fill +gupta +stepping +sei +foto +wildcats +coli +project +earnings +str +geons +completion +bm +decorated +crawford +afghan +scare +visibility +hib +direction +stroll +christina +alternate +clare +stylist +behold +sance +leopard +acquired +narrative +ashi +thea +???? +peas +atch +slides +leen +renewable +english +quir +coaster +rx +fools +matchday +mism +amazing +zig +keting +wont +towel +diab +stake +nm +melt +ethan +grape +politician +smen +íĺ +reo +weddings +catcher +oracle +memo +ðŁĮ´ +eck +robbie +norwegian +operator +amor +sewing +jul +xie +uv +fifty +mega +tattoo +liberals +upri +trafficking +richardson +suv +kip +messy +tremendous +glou +courtney +lad +stereo +myers +idio +^_^ +manning +dye +wd +throne +junk +asu +provincial +kook +wrc +fineart +hampshire +renaissance +bred +fallout +sj +snl +alam +torture +fyi +shines +paw +char +henry +crow +acious +dian +paige +bare +stockholm +scenery +ðŁĩ· +jeffrey +push +decoration +ned +cute +brigade +lavender +invites +esports +voir +dried +transpl +surgeon +novels +pulls +sony +lunar +mane +ivy +frustr +dorset +sai +torres +ssion +shutdown +suggestions +writing +eo +battlefield +uga +ðŁIJ¾ +vacu +splac +git +ug +highland +%) +mermaid +sacramento +tails +pw +kah +tell +enhanced +ìķ +auckland +cruel +ðŁ¤© +audre +sailor +grammar +glove +deon +inflam +freshly +kell +zip +christie +mild +dixon +instructor +gence +ãħł +subjec +constitutional +crowds +invisible +ruins +dak +sip +plaque +pouring +complex +zine +stead +flet +transmission +loway +arun +increasingly +aud +transparen +crowned +scoun +blizzard +luxu +fiers +achievements +hunters +rocked +basin +violet +proves +achieving +prosper +sega +float +vian +xiv +polic +tura +approximately +wanderlust +keepers +getaway +cod +polis +bryan +colts +talents +yogur +glutenfree +wrist +gry +czech +ðŁİĪ +eville +ðŁıĪ +tox +daniels +amer +bids +weareone +metab +gt +boyz +pdx +possession +pushed +shrine +realistic +trigger +navi +rumors +naf +jenkins +trun +communi +ÃĹ +gamers +armor +mohammed +balcony +yah +strongest +rhythm +unforgettable +kp +hobb +custody +gregor +rita +aesthetic +ilation +sponsoring +nay +kidnapp +shs +rajas +meg +significantly +buttons +lac +versions +essentials +opinions +kro +dprinting +widely +dk +uran +yal +requested +cn +curric +plum +grun +vm +devon +myo +relation +juventus +rouge +minority +mines +jupiter +nine +oxygen +frankie +unesco +fabric +disgusting +salman +detection +lanka +dac +ðŁĩ«ðŁĩ· +argument +shelves +celtics +roberto +pigs +hedge +faul +powering +butterflies +fir +remake +atti +como +empha +kendall +pokemon +seating +dans +baldwin +ðŁij» +leslie +onedirection +timber +iman +font +eder +dion +steph +format +gregory +prop +hex +ruin +sory +infer +naw +barak +sdgs +karao +lush +vander +endent +gis +afro +soccer +ayan +tuni +lung +dayof +alexa +marath +addicted +agile +hygi +lightweight +ì§ +mandela +joey +ancy +hum +bir +memorial +jimin +ginger +vak +javascri +crops +origins +dari +piper +import +aggressive +prediction +repairs +cracker +voyage +nike +mummy +linkedin +countryside +border +glass +pert +sals +shoe +autographed +walnut +collegi +salary +pairing +ðŁĮ¸ +cathol +sweethe +defeats +strengthen +rooftop +improvements +barriers +uru +tally +ruled +ðŁĨļ +naija +emoji +percent +gio +probs +once +admits +paths +liar +daytona +peters +cali +calli +mug +osa +aph +aby +hyde +ethnic +plains +olf +hahahahaha +holic +?!?! +subli +blacks +mot +ghton +lovin +brent +baru +lati +dew +ateau +qa +painful +busters +static +ðŁĩ¨ðŁĩ¦ +notebook +outfits +sies +rf +floods +ÑĢ +throat +suici +rovers +bengal +prepares +blog +miniature +ب +amphi +comb +rsp +intimate +greene +Ìĩ +altar +surgical +vessel +...? +gavin +gator +threatened +zar +robbery +dier +promoted +yg +xs +subs +interviewing +threatening +dozen +meado +waterfall +nintendoswitch +calum +ministers +drop +universities +warned +tactics +ðŁĩ² +refuse +adju +vast +ðŁĺ´ +mcfc +libya +nofilter +distributed +reser +ronnie +deco +javascript +monk +interests +flex +martha +sties +ood +ðŁ¤£ðŁ¤£ +eun +bali +gomez +stimul +moderate +dity +iris +straw +consistent +directions +adopt +salsa +croo +recovered +blackfriday +lancaster +accept +weareoneexo +builds +freeman +airplane +dition +belong +jamie +pitching +lif +omin +crispy +prepping +veg +chang +accomplished +gracias +dolphin +elector +culinary +superbowl +wala +pursuit +blackberry +bean +cardinal +proved +immigrant +strictly +holocaust +passage +haus +coup +purse +harass +<< +leed +adobe +stad +legislat +parked +priyan +silva +krist +sthe +funky +iga +settlement +phs +tmrw +stressed +hunt +hockey +treasures +chambers +olu +hut +marley +texture +wilderness +mming +potentially +omaha +judy +toes +spoiler +distinguished +felix +ahu +recommendations +zombies +hitler +triple +collapse +motivated +ultimat +ggling +soy +cigar +foren +vineyard +glitter +findings +colonial +hunter +erik +dens +beetle +lotte +subtle +smatter +trusted +experimental +naments +ðŁĺĨ +region +acquisition +breeding +quarterback +amreading +ootd +rude +initiatives +stout +hyung +outcome +alfred +mics +expertise +bacteria +penguins +jumper +valencia +bark +ingday +sellers +contracts +houston +commissioned +adaptation +swansea +santiago +commonwealth +judging +submission +scorer +tommy +ño +exquis +filing +explanation +allison +wembley +ridge +chevy +santos +ownership +cognitive +favourites +shed +philanthro +deleted +godd +snor +guidelines +ffing +jeep +clips +swamp +anor +guild +bolton +springfield +municipal +goalkeeper +yeon +ðŁĺįðŁĺįðŁĺįðŁĺį +ãħĭãħĭ +waterfront +grave +contemporary +arity +ÃŃa +sleeps +syrup +alam +pire +coyo +motogp +tyson +kejri +circul +singly +crunch +complicated +nostalgia +kop +move +kale +macro +midwest +hans +tribal +nude +à¯į +beyonce +congratulate +cater +league +ðŁĻĬ +ladder +crashed +technic +karaoke +harassment +rots +experiencing +kristen +ðŁĩ³ +ðŁ¤Ĺ +reflections +guinness +illustrator +ðŁĻıðŁı» +center +narrow +commons +regulations +ÙĨ +harm +croft +cussion +hongkong +stical +internship +zoe +chop +hoods +estimated +batteries +berkeley +smoothie +shaun +cros +~~ +campe +hump +bg +prototype +click +shawn +reviewed +templ +pf +jedi +blogs +raymond +asth +bah +avail +scotch +leafs +nikki +tok +hollow +urges +oft +unlike +latin +ue +catering +mili +alternati +maver +и +agle +preorder +lux +cucu +ðŁijıðŁijı +tart +âĿ¤âĿ¤âĿ¤ +arabic +rapidly +arrang +allen +traveltuesday +paws +flows +stability +fluid +capp +canberra +uuuu +spani +demonstration +mla +placement +mw +presidents +awesom +beverly +anist +neal +fathersday +referendum +lahore +oaks +debbie +halfway +ghosts +debor +matthews +fiat +tfw +presen +robi +ded +brock +laughed +amounts +bamboo +kindergarten +eaten +mtvhottest +breakout +usic +fraser +legislative +pang +module +sammy +gover +earns +expedition +garh +concepts +charlie +lava +bachelor +veggies +determine +ellie +unlocked +fruit +dalla +coupe +washington +deposit +ivory +paula +chicag +gucci +ðŁİĥ +cultiv +pierce +lifted +stumb +recover +muscles +conducting +cbs +mclaren +sophia +cellu +oceans +uploaded +gameplay +maldives +kimber +avoi +racer +caine +cavs +hana +liga +raven +intervention +inauguration +ooh +attraction +merchandise +tunein +liking +juniors +intended +attacking +aquarium +iwd +components +suring +centu +yogurt +ðŁıĥ +showroom +optical +tyour +judge +yield +anto +plc +transparency +recycled +chief +arom +ambassadors +planet +âĿĦï¸ı +omed +vanessa +court +margar +haley +vr +regina +pdates +hispan +livestream +âģ£ +yahoo +galla +secured +wir +beneath +offl +nil +amb +yeg +outlet +ute +peep +lindsay +bentley +...! +heel +trilogy +vos +tyre +therefore +toronto +abi +simpli +jae +extensive +elephants +sor +orientation +impeach +replay +constructed +peterson +pais +ported +customs +collap +adu +highlands +salem +shelby +kovic +strain +rosie +senators +snaps +bobb +suzuki +blades +kp +lolo +generate +sight +mae +structural +predict +jumped +ahmad +sung +justice +glam +volvo +jubilee +detention +losses +puri +everytime +а +rao +edge +limer +resemb +harold +retri +sacrific +surprises +amc +srilanka +barbie +mens +finn +ags +ukrainian +embrac +îIJ +flavors +homer +laure +outh +priced +verde +firm +ahs +cub +trey +paranor +profit +indv +whoa +harsh +alot +critics +hubby +figur +gira +castro +chanel +input +originals +tenant +yyyy +turers +lincoln +coon +learn +chou +acare +oles +diner +hyp +bizarre +mcr +letsgo +decorating +ðŁĮİ +alison +arvin +fd +rehab +mccarthy +lottery +dah +minneapolis +eligible +diagnosed +emerald +destinations +sans +ory +blazers +nv +bail +digitalart +noc +malta +solar +pipes +allegations +nock +pope +brid +premier +nx +presentations +efa +bows +valve +opponent +Įë +visual +ingle +categor +eter +pois +dani +attract +neutral +thene +crashes +freddie +utili +cst +awakening +sloven +qualify +proof +fairy +lev +freight +enjoys +cupcake +flavour +âķ +protective +ðŁijıðŁı» +isu +admir +hmmm +continuous +aires +raptors +showcasing +yuk +paste +follower +instructions +spru +@__ +theo +debuts +vette +stow +esof +ached +sultan +sandwich +somalia +franco +carne +fluffy +alpine +jasmine +heated +violin +pless +divorce +performer +phies +portsm +dara +kirby +lop +chilli +forth +skype +ðŁĩ®ðŁĩ¹ +celebrities +edy +vee +poison +eyel +grabs +ssic +uno +western +railroad +amer +numerous +sv +fow +fist +âĢĭ +requests +martial +emmy +acceptance +laura +ิ +erup +hyundai +outlander +utt +wrestle +espresso +demanding +gdp +geography +saskat +troll +confeder +sues +sem +bets +tful +tosh +teaches +coloured +galway +macy +disorders +bbcra +atem +fender +litter +esh +providers +renovation +nominate +psg +nominations +jenna +sharp +someday +zur +brains +cheshire +prey +hugo +¿ +token +rv +carr +tactical +zelda +kayla +fernando +photographers +jour +umbrella +woody +congressman +dump +levy +juan +dazz +signals +lain +anu +michel +porch +alden +siblings +yale +peel +swick +ggin +llc +kale +scon +ild +patreon +reel +quin +witt +marty +moody +toni +dery +gators +specifically +ddin +lyon +trick +meadows +pj +borgh +vik +tur +bronx +puff +lantern +ðŁ¤¦ +gently +bestie +fact +refused +fasci +mpy +ðŁĶµ +crossover +meadow +indianapolis +ducation +sley +loom +mixer +newmusic +filmmaker +prosperity +lim +weekend +creamy +neutr +luther +hv +northern +two +hra +catches +appearances +habit +kittens +nv +illac +infan +regardless +lizard +dunk +curtain +acom +intu +vez +emin +flats +calendars +empower +ruined +hungary +vid +wex +ulum +aberdeen +osa +kt +massi +seemed +sden +'? +telephone +defi +inspires +meow +zones +blind +ply +tucson +adventure +ged +oyster +ðŁijıðŁijıðŁijı +output +ttt +metallic +smash +ucla +scots +perfect +lucy +regularly +spic +relative +athers +mise +battling +decides +mata +occupied +randomly +catsoftwitter +gian +bally +alties +allies +immen +syrac +ðŁĴľðŁĴľ +llan +aur +kut +lamar +affects +nra +starwar +ðŁ¤ĺ +scram +enchan +process +luxurious +array +sherlock +compati +dorf +stress +msu +swith +sala +sofinstagram +foil +understood +quay +rp +cade +jaw +enab +encoun +ðŁİī: +dock +saturn +mull +layout +rarely +happily +fixture +orph +overlooking +herbs +mitt +pillar +nolan +petty +stry +ui +muk +ores +overs +áµ +recreation +wesley +rit +kejriwal +stocking +gv +subscribers +moose +mae +bert +oppre +assignment +uro +highlighting +calvin +weigh +cambodia +avon +kem +disabilities +ready +chargers +pads +izing +illian +truste +colleges +associates +albany +milton +cron +bur +hardly +sights +antiques +echo +surprisingly +haiti +capt +php +opio +inequality +equal +keny +schmid +autographs +rent +quer +citrus +challenged +tec +epide +fest +zhou +lime +citizenship +crystal +convinced +messenger +copenhagen +âĿĹï¸ı +warran +developments +ï¸ıâĥ£ +forex +hiro +sneakers +xide +viva +stereo +batting +ssel +host +bengal +criticism +qc +crun +attempted +rye +determination +creations +dread +labels +posse +ancer +johan +sister +partnerships +lesbian +kst +guarantee +baro +fixing +mason +mous +chemicals +tless +biodiversity +paro +bharat +acol +refuge +ente +titi +dyssey +responds +lefto +iner +sevel +rahul +oline +frankfur +choreo +enjoyable +cto +struggles +woodland +heavyweight +gens +recep +accred +ðŁĺ¡ +transformed +listen +atop +nk +surge +bere +governor +prisoners +claude +till +mulator +emotion +waterloo +start +ðŁĩº +cleaned +grandmother +fearless +african +astronomy +ðŁıģ +à¸Ļ +theworld +suitable +anthony +kand +tten +meaningful +disclo +jacobs +ø +tomlinson +ghetti +typho +substan +asco +tek +nagar +mud +amon +vaccine +fty +flesh +noel +inflation +portugue +glamour +tram +vre +tequ +roundup +wyn +rejected +mosaic +sighting +calf +ota +composition +gopro +gonzale +eed +bard +tue +effectively +ween +alto +ribs +relate +thirsty +furious +dim +chard +perfume +sny +churchill +kof +masterclass +wave +ðŁĶµ +erin +owns +tobe +skilled +tem +gof +eni +tori +crazy +lick +resistant +icial +agar +!: +gali +delaware +blitz +kohli +puck +availability +himalay +influential +crochet +victori +reading +hobby +viet +jas +engra +skul +ðŁĩ²ðŁĩ +educate +techno +districts +blues +sett +seventh +learns +eeee +apocalypse +hangout +cruel +mutu +bruh +helen +sheer +ction +klein +texans +cereal +shine +nered +gras +ambro +fella +hindu +matthew +lima +miranda +jewel +soho +eurovision +neighbours +chandler +besides +ðŁ¥° +astros +thumbs +renault +rave +hired +ðŁĸ¤ +itary +zor +blazer +kine +eau +katy +dccomics +pec +rodgers +waterproof +killers +superint +preserv +asso +brewers +promotional +scam +villages +sketches +juicy +forlife +audit +solo +fundamental +lene +philippine +tend +conservatives +sponsorship +ddle +aine +htc +osi +hulk +waf +à¸Ļ +evaluation +antine +slee +robertson +roosevel +agi +sophistic +employers +bubbles +kowski +interaction +shu +boule +ican +jare +hank +legitim +knicks +karma +receiver +perks +uh +stair +suni +laboratory +graves +vocals +oot +cture +thrive +tico +ãĥ³ +bw +cartoons +mcdonalds +draw +yung +pler +lid +ethical +groove +enta +internationalwomensday +patron +worries +ðŁİħ +ðŁijĭ +katherine +diaz +tori +bachchan +trust +mineral +icom +builders +born +coloring +latte +case +revolution +trader +oxid +chipot +instantly +southern +sehun +prob +hernandez +lisbon +huawe +pong +mea +rooney +wheelchair +keen +bett +corin +regulatory +displac +karen +schem +sunsets +whales +reminis +hep +hide +marcel +pandora +doyle +thfc +otto +nokia +transgender +kov +hawaiian +shave +sovere +excer +nicki +pug +stor +roth +weet +legal +dignity +pow +homage +ðŁĩ³ðŁĩ +sre +canon +lax +woah +quartz +ña +greeting +flickr +nairobi +advocates +anc +vii +eugene +thra +cre +elan +pension +thletics +toni +reagan +xv +store +bench +harlem +toddler +sentenced +âĻ¥ï¸ı +globally +cheaper +uf +mam +nico +iku +thou +nist +dami +thala +rhodes +sale +bowls +âĪ +lasvegas +sanctions +admire +matched +unable +traveler +eleven +strawberries +âĢĶâĢĶâĢĶâĢĶ +studio +jacques +ims +valued +sno +cheesecake +nxt +eos +sx +fx +tonic +hatch +chicks +grads +handic +rory +asp +ripped +dentist +nen +lufc +âľĬ +dige +hopkins +sherman +fda +forall +ashley +strand +hy +liquor +buffet +essence +pharma +suriya +ðŁĴĻðŁĴĻ +festivals +zan +refresh +purple +uniforms +kenneth +=) +asan +helsin +transformers +kali +personalized +chalk +bobby +âĮ +themes +departure +print +illustrations +quiet +agrees +griff +س +miti +together +convenience +abar +carlo +turtles +infosec +somewhat +arlington +scholarships +emirates +mums +stella +autonom +feather +gore +nominees +fragrance +ÑĤ +wong +theastern +gre +zilla +isi +bumper +goo +dozens +abduc +âļªï¸ı +oils +donors +silicon +ipod +fortnite +ðŁĴ¨ +toro +sparkling +consciousness +pala +num +mounted +ffins +thieves +teammate +prab +omer +tapes +bod +mitsu +stew +ere +pbs +tusc +lowe +rade +parliamentary +hm +edgar +ðŁijĩðŁijĩ +toa +agh +honi +slate +geek +apt +hardt +tap +horizon +growth +makeover +hil +paperback +idan +rehabil +giu +possibilities +lettu +franco +boss +acher +doesnt +moe +taker +hussain +mlk +dil +thia +hama +realised +ravens +curriculum +mith +knight +tedx +rv +isaiah +cumbria +birthdays +fing +prez +mubarak +exquisite +clearance +yen +pari +evo +ú +modified +applying +implement +discovering +chapman +indiegame +disk +crowdfunding +machin +livel +styled +âĿĮ +making +rehearsals +nutriti +subscription +andro +creators +carries +kylie +camden +apprentice +taxpay +cca +tuesdaythoughts +pissed +erman +detec +freedom +meri +..! +psalm +sunlight +perspec +beings +bookstore +rockstar +functions +pence +faves +zn +obamacare +spill +coventry +pigeon +pivo +bait +kolkata +aval +donor +wah +privileg +traditions +rajasthan +teness +portuguese +ynes +tackles +defic +torn +polling +thorne +ina +benedict +barry +calories +verdict +savethe +norton +office +mainstream +improves +fron +responding +realtor +scottish +declar +rl +shiv +supplier +resting +sweets +qui +.âĢ¦ +whitney +startup +thankyou +teacher +halls +have +handmade +proving +quartet +rochester +lian +virtual +mendes +oficial +midlands +xbox +measuring +ovo +accommodation +brides +collegiate +intellectual +incar +niag +ðŁį· +sfw +cocoa +coats +civilians +presidency +matrix +sweetheart +triathlon +wagner +radic +planner +theo +execution +kum +thewalkingdead +scar +rotation +blogging +bomb +reson +bbles +stare +assisted +edo +branded +warnings +thorpe +acknowle +satisfied +shores +rid +dora +physically +bigh +approves +hah +rical +versatile +pretend +lum +abhi +yee +spit +ãĢĮ +djs +ashtra +jt +venues +grammys +cyclo +tracker +overwatch +replica +elyn +nrl +lindsey +homo +balloons +kitchen +sis +amos +endeav +ðŁĴ» +arec +thug +hooked +hrc +newyork +burgh +americas +patricia +ugu +apathy +hast +psychi +cork +petrol +ðŁİ¬ +aku +popping +psychological +aux +gma +cadillac +waste +authent +bristol +name +queer +tober +jerry +comin +chant +privileged +opar +loser +text +marker +stries +equally +aki +christmas +gareth +blew +emma +imagin +seals +cheat +conditioning +jana +rens +daries +oasis +discounts +council +ika +shirley +voucher +alps +wx +qr +drift +attempting +utc +ت +gonzalez +mf +joker +parallel +pare +aspects +procedu +np +ama +raleigh +brighten +guire +radiation +crescent +hob +ille +strand +vore +nard +chest +diwali +avatar +alder +dling +pathetic +ðŁĴĺ +spirit +jorge +filmmaking +ðŁĻıðŁĻı +challenger +bj +downtown +html +adequ +twisted +inely +(' +wraps +operational +yne +nus +magnet +marketplace +healthier +snapshot +damon +interven +federer +owls +biscuits +jp +rodeo +blueberry +lection +frontier +summers +reyes +pedestrian +gol +caffe +refurbi +boulder +meghan +specialty +lass +ei +suspects +approx +rrr +rath +stim +crushed +hed +whun +loaf +crore +rivera +genetics +sock +wasted +nypd +answering +dove +bella +olin +dun +fiji +pretty +sparkle +yun +jd +europa +lifts +amber +mur +tek +boyd +royalty +indo +rib +gotham +tiest +installing +kemp +thephoto +cosmic +))) +wholesale +loyment +easy +suing +settled +afp +prover +supportive +rees +neath +deliber +cé +welcome +picoftheday +newborn +patty +suns +siest +flint +differently +spoilers +trooper +gins +cory +lookout +equipped +tape +toby +researcher +ush +keyes +alma +induction +kw +khar +slick +bride +eur +craving +bookings +ches +trunk +vernon +spher +crystals +relatively +pompe +unions +valley +para +want +okc +deaf +sergio +lennon +shay +cra +vat +hee +twe +liquid +poly +ðŁİģ +bent +bearing +motorsport +barbe +testi +hani +financing +astronaut +watercolour +rish +comiccon +gart +wrong +bern +itan +stepped +filters +clow +mex +demons +allo +expanded +command +eters +goats +siri +yr +pottery +marion +ile +elan +santo +persona +duke +homeless +lighted +wheeler +changer +cabbage +surreal +hamburg +smashed +stran +knot +iart +obi +bedro +dial +thick +bingo +fus +vacuum +conve +ative +accuracy +account +refer +riz +spiderman +bana +rite +ub +abs +medical +link +siem +>>>> +betra +glowing +reactions +puppet +spaghetti +angs +remedi +prayfor +royce +charlotte +£ï¸ı +ghet +affecting +rode +socialist +moses +azi +oit +reporters +cdt +aping +snat +minimal +waist +siege +>>>> +rig +schmidt +hare +eca +thorn +hemp +esthe +clyde +tha +donut +mohamed +lingerie +legg +carpenter +performers +dea +imagined +curse +lash +ctr +agua +roar +gri +role +jfk +resurrec +roosevelt +marilyn +smalle +willis +waited +charities +theres +lik +original +cari +cough +cruci +lagun +contrast +kou +armour +removing +tent +mazda +brighter +thief +corner +tequila +buzzing +albi +pam +azure +discoun +pixelart +possibility +hamont +trades +buda +hive +versy +finch +transpa +emi +terrifying +inqui +gba +substitu +collecti +placing +cindy +kann +patho +diamond +mourinho +guinea +anthropo +airs +pumps +ìļ +paso +curling +anita +residency +newh +joon +cigarette +queue +extrac +games +splen +express +publicly +bonnie +tribune +baek +reasonable +cor +timothy +sheeran +ı +fdn +sutton +concentration +caravan +xavier +alger +cylin +frederick +nerve +peak +lettuce +jail +pregame +kavan +upgraded +ecology +squadron +grapes +goog +pastry +ðŁĹ£ +ãĥ¼ãĥ +milano +awaz +presenter +ðŁĮ¿ +herd +kings +template +flour +hv +kley +iya +spec +ater +frankfurt +coch +texting +deli +communist +regiment +eleanor +anticipated +ðŁijĮðŁı» +thephotohour +rano +surviving +simulation +dawson +arin +aqua +mor +âĢ¦. +cino +iraqi +shaz +dundee +wes +drau +hannah +snews +occupation +steen +xm +angles +settings +guru +knox +orca +shaping +went +drilling +zzie +bri +kissing +find +maine +âŃIJï¸ıâŃIJï¸ı +ðŁĮį +larry +busted +tavern +actively +-" +replacing +nod +unlock +." +âŀ¤ +affiliate +tow +ln +happynewyear +dif +jm +greenwich +controversy +dawg +condol +savannah +compensation +touchdown +teo +ambitious +embroi +convicted +iartg +barack +trance +testimony +audition +thumb +myths +bex +quez +orchid +deny +entitled +hood +grant +inbox +bluejays +rilla +smallest +burden +infamous +divided +boundaries +tter +elt +wyoming +beverage +mesm +onews +buddhist +yana +assad +isms +barrett +predicted +backto +twit +ethere +captains +escaped +ayo +lamborgh +gardner +laps +kal +advertisement +insects +napo +amen +acy +rand +gk +teh +kathle +tridge +pancake +atro +pyramid +bula +paralym +gauge +encies +tomy +biscuit +butcher +qualifier +county +kei +pools +darker +shoulders +ðŁĩºðŁĩ¸ðŁĩºðŁĩ¸ +spre +(" +writers +gm +ðŁİĵ +knit +huff +mtb +phillies +ost +denis +gart +licensed +interface +excel +dwell +fromthe +cofficial +azzi +appearing +forest +nana +keith +manufacturers +beckham +)? +ese +colony +delicate +utter +mcin +transplant +preferred +pard +arie +hub +pods +perspectives +pict +delu +apper +bethan +pmo +criminals +feminism +shack +circumstances +fellas +protesting +wax +suggested +tator +drew +omni +fake +kathy +reb +deline +berni +misty +ðŁij© +erable +breakthrough +menswear +millennials +chanyeol +laz +insert +replies +phrase +nx +iheartawards +audrey +granite +racec +orie +terra +innovations +brittany +ateral +pear +biological +shments +institution +msn +frequency +dman +neglec +tf +stefan +foxnews +typo +comms +sequence +carmen +whites +economist +exeter +seum +resorts +casually +bunde +divide +ع +gag +creed +retire +caucus +rapids +wrestlemania +tulsa +sunderland +fundament +odi +yamaha +vary +intrigu +else +beacon +angie +traded +transm +gents +knitting +galac +ðĿĹ +uto +seaside +holt +rers +fargo +trainers +monsoon +bale +sought +maddie +hw +coli +fran +favs +ðŁĴĶ +intent +rally +sbs +lemonade +barackobama +bread +sticky +explosive +chelten +tj +assoc +ramen +homies +vlog +mister +lord +âĢįâĻĢï¸ı +alyssa +sketchbook +rumble +catch +migrant +discipline +unlikely +chronicles +flora +slams +amid +sboro +coop +jumps +tranqu +melis +sofia +enri +gabe +syri +nicolas +chai +wv +becky +footy +tao +suppose +ðŁĺįðŁĺįðŁĺįðŁĺį +plush +rish +ðŁ¤ĵ +kha +saturdays +accent +hec +limit +carlton +wired +taylorswift +ðŁĺij +sql +harro +recipients +gat +gop +thof +amazed +ghan +ðŁıĨðŁıĨ +porto +clare +distant +nac +ohio +ðŁĻıðŁı¼ +mtn +antibio +dinosa +mesa +partial +bv +learnt +lovato +question +extract +gossip +gibb +niagara +ðŁij¨ +displayed +sooner +stevie +nuggets +mln +brom +turb +giveaways +stupi +blink +cili +convenient +moh +vive +fric +cause +chamber +cules +nearest +isse +smallbiz +tj +canadians +smarter +brasil +rare +quette +wha +candle +atomic +ðŁijįðŁijį +warrior +relaxed +strips +neur +kka +rfc +jensen +recovering +responses +salam +orthodox +active +ellers +nit +âŃIJ +metropolitan +centuries +vida +grading +transparent +simple +dots +superintendent +elevator +automated +redskins +imam +summertime +jonathan +gearing +michelle +conflic +mice +tote +publish +pax +)- +nailed +á´ +telescope +serbia +bab +apeu +stically +senti +rats +isolated +group +hatred +paranormal +stanley +alion +safety +ls +र +nexus +alexandra +masks +++ +tron +auk +brotherhood +browse +mixes +simone +musk +approve +lola +exp +perth +futuri +unseen +dm +chelse +scouting +owe +portsmouth +kram +mize +dispen +sup +dlc +advert +teresa +isle +cycle +metall +shields +mariners +raz +ingen +fund +ango +jones +oka +madden +broccoli +dominic +situations +mero +cricke +punishment +db +shaking +ðŁĺļ +mq +arians +leh +claw +weds +dure +niel +jelly +gourmet +traders +levi +wages +knees +wise +heavenly +avid +melody +zack +bananas +apprentice +prop +funny +ode +respected +megan +fewer +drafted +medit +grape +usarmy +crusad +vocali +preparations +nonsense +usage +thr +roth +wizards +inside +promotions +mona +redsox +sig +elegance +chia +universal +ãĢį +raja +unga +pollin +filipino +aka +tsun +ikon +biking +decorations +zac +cadets +humour +agm +reppin +vaccin +elove +uw +diabe +gallagher +azer +dol +awhile +prominent +welsh +tann +') +bien +wag +inal +cwc +wicket +urst +qanon +xe +outdoor +dunn +starr +cology +ricky +uefa +rebounds +smusic +infant +ðŁĻĭ +sop +umber +handing +begin +sorting +hash +spati +rek +budapest +blackhawks +delete +rom +candid +authori +debris +specul +intersection +marriott +imran +ðŁĺģðŁĺģ +cruises +ramsey +rafael +awareness +vascular +beyoncé +rug +ðŁĺĮ +festiv +aram +sable +basil +pill +flooring +unbeaten +implications +uf +wound +forge +pointing +pots +popularity +ðŁijıðŁı» +manipul +slots +debates +absence +vermont +neverforget +wrist +gloria +rence +husk +melting +ðŁİŁ +braces +timely +transforming +amps +mak +poe +ahan +generally +ndp +aleppo +unicef +profs +nord +mask +jacksonville +vv +shells +blooming +operators +charcoal +neville +magi +chip +sama +iran +reforms +accumul +rue +æľ +websites +gaon +devastating +stos +glacier +rapp +chipotle +pra +orous +romney +season +decorative +cisco +ditch +complain +llo +assume +ðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤ +nels +centric +ftw +carrots +tata +canter +perience +liers +demos +blunt +operate +reservations +leah +substance +dison +ante +election +vue +square +nonprofit +caa +fsu +yam +ãĤ¤ +vladi +completes +mari +phillip +neill +eras +kait +mendo +maharashtra +gp +dane +providence +therapeu +juvenile +memo +incorpor +aaaa +seventeen +teenager +ã +orns +wide +cuteness +twd +ffles +bara +comedy +overtime +yaz +baron +unemployment +ðŁijĭ +exterior +dense +centres +matchup +historymonth +artificial +quit +esk +warn +critic +jaf +ðŁĵ² +informative +fuels +recycle +naming +stripe +solic +molecular +deepi +convo +ssel +nae +descent +tiz +accountability +terry +rito +slay +emo +demol +sensation +cov +tore +roundtable +yol +excuses +à¥į +turquo +hhhh +podcasts +celeb +messi +lio +mann +contributed +uz +generator +elets +veggie +indul +ensuring +detroit +punjab +transpor +instruction +add +porcel +paneli +circles +persist +clayton +spn +dogsoftwitter +isnt +spr +retailers +pw +hungar +elena +monaster +guatem +jessie +anz +rashi +flee +carving +faux +lal +henri +djo +dull +sana +lara +globe +crimson +compass +pause +nab +lionel +baths +ufo +inventory +singh +satan +ðŁĩ¸ +cements +inform +generated +biden +avg +tasks +deer +sau +jailed +pastel +scc +nail +steele +peris +lamborghini +pursue +margin +uch +bosch +drain +clara +bom +latino +webster +rosemary +rha +soun +billionaire +notch +percentage +conor +'" +homes +earthday +hort +biggest +disin +walton +editors +imma +omar +equivalent +pharmaceu +ahmed +cameo +hanni +underrated +gement +microbi +voo +honorable +obesity +âļ¡ï¸ı +limerick +involvement +stagram +boulevard +burg +blackandwhite +liberation +five +interim +smm +rivalry +capabilities +statements +thumb +ved +swans +barber +eque +serena +helm +noodle +sampling +nawaz +single +thunderstorms +shon +inev +ë¯ +topp +orchard +bian +ðŁĺĶ +doorstep +salvation +marketing +rons +clemson +ravi +intake +standwith +sina +haiku +pley +electoral +philly +lays +electric +capturing +upp +ergy +believing +cultures +esday +invasive +eded +speech +endur +vietnam +boycott +pede +deliver +ðŁĴĸðŁĴĸ +merchant +stir +denies +pockets +oti +cuddle +roland +mmed +dened +learners +hoop +sourcing +hacked +dim +environments +benson +judicial +worcester +pearls +governments +arrivals +corners +tuning +labour +ym +ordering +lewi +ife +hygiene +thoughtful +indonesian +campaigning +principle +assaul +rubb +atv +willy +entre +ili +phon +duties +âĻ¥âĻ¥ +snakes +loop +amar +convertible +bonding +mentoring +maxwell +ethereum +destroying +axis +cairo +finnish +shock +ðŁĺIJ +caleb +coma +pedal +core +continent +elson +tempo +helsinki +acp +tackling +stated +bla +doub +smashing +aja +cameron +disruption +warmth +beingsalmankhan +bulletin +ode +syracuse +aran +mcgregor +bulk +anton +confirmation +spine +imran +instruc +jacks +chio +palm +stre +embarrassing +unt +eliminate +toss +cise +aws +onists +shinee +jos +hose +lively +opponents +movements +recognizing +sandwiches +shakes +exercises +seat +profession +merrychristmas +lugg +adoptdont +marvin +byrne +unle +het +kuwait +rahman +aspect +humbled +genes +fand +longtime +); +campu +angus +ðŁijįðŁı¼ +quran +sleeves +slic +¸ë +twelve +youre +ike +gogh +bst +dictionary +reflecting +toon +yarn +embed +ðŁı´ +reserves +flooded +veriz +dusk +establish +proli +aud +ritual +orbit +declaration +recordings +camo +cassette +goodluck +cutter +bop +bho +cheating +pacific +mares +timer +colt +trous +tomorrow +hansen +cie +wang +bani +circular +acute +farmer +coys +pse +irving +wj +hawkins +bison +urday +cruising +ote +kath +whistle +yourselves +antis +slash +thoroughly +kesh +serie +exem +enig +guild +shred +hogan +apo +ä¸ +puzz +netball +aussi +panorama +wsj +avis +arming +humph +browser +cries +foggy +matte +ðŁĮ» +iter +tallest +byron +captiv +jesu +anyways +flagship +pton +wey +fayette +financial +foul +solomon +jennifer +cucumber +argue +textile +wrestler +johnston +pastor +ðŁĺŃðŁĺŃðŁĺŃðŁĺŃ +cactus +edible +reserved +richie +metres +ingredient +hella +unto +chol +celebs +poets +graham +hayden +coincidence +baw +communicate +fletcher +/- +toledo +ecuador +counsel +slaughter +linear +atp +osu +joel +eved +conquer +rustic +plicity +recognise +roommate +cracked +jasper +pher +ðŁĮº +woven +moist +ffc +steering +nish +standings +frequent +ardi +hazel +asmsg +baum +dart +sidd +nath +chero +cardboard +css +nsfw +pair +ðŁĺįðŁĺĺ +occurred +homelessness +malone +phe +xia +paddy +declare +theatre +bf +persian +tad +axe +suspicious +lamb +mucho +senior +stas +kite +sting +grad +kaf +watering +د +spiral +thms +educator +jerome +ofc +clock +sul +pemb +......... +parkway +deaux +restrictions +mons +needle +ej +leagues +watermelon +aman +plenary +maxim +wab +comingsoon +bryce +vigil +supermarket +fortunate +turquoise +president +liv +interns +feelin +fixtures +stunt +staged +premieres +lok +practiti +shortage +logne +vec +concor +rocke +lig +composed +synthetic +dip +camila +chis +jou +susan +eyebrows +supplement +satisfaction +mohammad +tibet +houseof +pun +assam +shadowhun +psyched +seduc +mandatory +herbert +scallo +streamers +protocol +blockbuster +produces +schnei +laurel +tribe +timehop +pla +modelling +tvtime +mtvstars +widow +metric +cham +condo +flowering +alec +dms +intensity +¨ +mccartney +islamabad +kb +ffi +phal +analog +fond +hacks +positivity +treaty +submarine +connect +selen +categories +cub +organize +sik +quoteoftheday +reminding +amor +locking +ðŁijıðŁı¼ +compound +ette +bout +recur +ference +mizz +trend +hipster +fortress +forthcoming +prelimin +odyssey +angp +delici +evenings +ðŁĶ¹ +iq +dw +dair +kathryn +christianity +moonlight +hab +whoo +fbf +seth +genuinely +pax +charity +deployed +bnb +bucs +judg +conge +plantation +impress +cara +sclub +scopy +landers +complaints +bama +rebuild +xy +realism +shour +lein +bracelets +mera +assassin +anchor +ðŁijĮðŁı¼ +linen +confron +chronicle +comment +catalog +illes +gorge +metry +jungkook +lovemy +sentin +seem +fitness +allied +tsman +digitaltransformation +pran +loft +minton +aldenrichards +envel +cherish +certainty +zzz +rhino +perkins +enrich +capetown +ometer +sections +skeleton +defenders +ðŁĺĿ +penc +brit +jah +capitalism +ðŁ¥ĩ +bazaar +reme +ext +kkk +convert +stormy +bye +karan +chrysler +ados +pressed +sync +ationday +danger +badges +refuses +empowering +lym +exports +adoptdontshop +ðŁĩ¯ +thc +awaited +focuses +fined +oat +hahahah +âģ© +nfamily +fiona +luckily +thrilling +typing +outbreak +dies +heu +crawl +nesses +oath +scripts +geeks +ðŁIJĿ +pb +mathematics +alis +________________ +gymnastics +activism +recommendation +gren +wain +courty +napol +cauli +hornets +gals +jockey +dirty +atar +enormous +pest +gregation +anos +iiii +defends +blackhistorymonth +atx +mbc +luggage +witch +cob +lasts +cum +ggg +bathing +nar +cebu +ðŁįĥ +navigation +mine +rejo +ðŁİĢ +giftide +reta +useless +pull +deficit +allu +atime +itv +trillion +pue +acies +procedure +lori +jenny +cad +ulously +drac +promotes +ingthe +canu +woohoo +naomi +zardari +tsu +beir +sdg +lever +weber +abud +lund +crowded +deployment +terrain +kenny +hof +witnessed +loch +jk +bully +wren +poetry +doff +wwi +mored +dini +culture +prompt +Â¥ +maurice +topps +rm +correspon +about +jewels +gibr +eagle +ðŁĺĺðŁĺĺðŁĺĺ +lending +souven +çĶ +contemporaryart +establishment +jong +âĢ¦" +gator +patriotic +mccoy +vape +humane +feliz +coachella +reposting +steals +fuller +nering +atra +(- +blake +heather +worms +disciplinary +redemption +yard +amin +"@_ +dnc +tds +kappa +newark +commits +spears +jams +tand +msnbc +intermedi +aimed +atic +teenth +observation +kashmir +kavanaugh +oul +sanfrancisco +reu +belated +chow +password +stills +detained +sari +dayton +darren +italian +arth +amusic +arbit +wm +vm +hem +doug +myr +asho +prev +vind +brah +stag +ี +previews +guk +containing +leonardo +saddle +rushing +stav +longh +gambling +vegas +reservation +endale +bala +fla +variant +hedge +bulgaria +natali +weaver +solst +encouraged +apc +asparag +nest +cyclists +fel +ìĬ¤ +overwhelming +peyton +jit +apost +mble +bleeding +neighbourhood +avery +expressions +macdonald +gigs +monds +illusion +nct +camero +overhead +myth +oly +vio +etv +laurie +unveiling +prior +conn +ironman +diff +dayin +critici +congo +revision +wale +director +pines +blackpink +garner +curated +manitoba +hac +commonly +barton +....# +mortality +livesmatter +philosop +shorter +convince +freak +vendors +insightful +elly +sensors +eled +sberg +weightloss +ukip +spur +private +qua +ssc +,... +supervisor +adviser +amazingly +lesser +ates +mahon +oooooo +saras +pmoindia +waffle +unders +tolerance +sculptures +hersh +knocking +smoke +catholic +grim +traveled +flip +geoff +dinosaurs +slept +scarlet +oki +complaint +obsc +nami +lag +crossfit +ufc +mccain +referee +sadness +penny +lieu +mode +kier +vols +wis +elon +shea +bao +sonia +claire +emmanuel +moisture +digest +viii +teller +chon +accessory +nightclub +fossil +awan +husky +aboriginal +brandon +fficient +cougars +sted +admitted +ignored +contentmarketing +agas +vase +executed +negotiations +shead +nand +tablets +goth +tsal +dfw +onep +protector +spho +gazette +andreas +sser +compilation +hav +containers +broker +socal +porcelain +hyuk +airing +ðŁĴ° +publisher +scenario +spartans +reviewing +itudes +edel +pearson +bash +maui +aad +ðŁĮĬ +liu +ulate +programmes +favour +webdesign +realty +motivational +crosses +'... +busch +adjustable +arjun +mistak +dimension +pistol +weighs +eny +unveil +indycar +gordon +fade +franken +qualities +bett +locate +kerr +spc +confusion +nee +lucky +bases +depends +firefighter +ola +ret +maroon +ðŁĶĬ +wam +defining +wheat +bil +és +bhai +psych +tau +icans +thik +obile +inspector +ìĨĮë +illon +gos +evangel +fai +sist +vocation +burge +chistan +renewed +enthusiasm +enting +agri +ikea +msc +aerospace +sensiti +memoir +hospice +cocaine +derry +mechanics +Ħภ+tino +reduces +collectors +injustice +suppre +vana +abun +napa +susa +oslo +eff +encore +licence +cheddar +zal +mount +ðŁĴIJ +threatens +!!" +archie +futsal +scuba +jos +gnon +sexi +sofficial +comparing +dominant +toftheday +fait +proposals +gift +yas +cnc +lr +hab +reservoir +beliefs +general +marti +td +este +ìł +wil +ðŁij¯ +ðŁĶ« +spx +etwork +excerpt +einstein +hiro +silhou +teamed +perception +corridor +mentalhealth +hints +benny +inducted +swx +widesp +speak +cheryl +drug +ðŁĺķ +hf +asparagus +mysteries +fitzgerald +offer +therapist +career +damaging +tsd +peru +weibo +yay +phoenix +discre +macbook +barker +stigma +spread +rockies +kangar +bridg +pai +bishop +tailed +capsule +ðŁĴĵ +geof +royale +shortlisted +oste +ashamed +chapp +keye +cla +screenshot +austrian +native +enight +juliet +michele +ðŁĮ´ +travelers +pil +footballer +winchester +ðŁĻĦ +azerbai +goldeng +organisations +interpretation +predator +oftheweek +logan +poké +marie +calla +tnt +cinde +getic +fitfam +grav +owens +ðŁĮ± +shootout +salis +commissions +cohe +ptic +nixon +hia +ambition +marine +cruelty +tk +crude +salty +jima +mongo +irony +onwards +arrests +strangers +iger +cyclist +rag +extends +tradio +bourg +moi +ella +eable +lexus +aul +dera +historian +morton +tiff +manner +kot +dk +pointed +marqu +aan +eney +dublin +onpoli +emili +secret +flo +âļ¡ +baj +steep +accompanied +rumours +devi +purchasing +fig +pub +schoo +autonomous +goalie +xia +automatically +revers +tero +fuku +titanic +shook +sandals +seekers +excav +nordic +bigolive +bake +ratt +zak +nep +ðŁĺ¤ +candy +billions +bookworm +ppet +à³ +surfaces +scars +philip +dogg +cigars +cote +translated +curator +sindh +hangover +brewer +ones +elton +ðŁĴªðŁı¼ +marcu +elliot +righte +dioce +russ +railways +grandson +ascen +apology +await +mobili +respir +partisan +olivi +strike +yoo +whitehouse +expressed +pups +bedford +cultur +frogs +flying +cavali +cds +friger +streetphotography +resolve +taliban +kang +crushing +jum +ðŁĺĴ +williamson +tang +curly +tman +veteran +faire +artificialintelligence +unanim +pren +backdrop +frances +occer +dorothy +working +arthr +converted +daylight +servant +paddle +complaining +thirty +nadal +aku +ibrahim +addressed +piss +greenhouse +battalion +simulator +outlets +embroidery +ðŁĵ± +fiscal +gerard +sassy +ðŁİīðŁİīðŁİī +ventures +merit +publicity +ðŁijĪ +sophisticated +ctu +conventional +condolences +israel +tradition +aran +tess +glad +ðŁĺĬðŁĺĬ +correction +geon +amd +orship +beast +chment +ìŀ +nico +wknd +wels +cushion +belie +voc +idiots +underneath +puma +cornell +enation +lul +swach +abig +urer +mie +formerly +caf +ernal +chorus +julius +senator +âľį +whir +salvador +phd +unified +booster +graphical +wrec +sonny +miz +derers +sall +vens +tuscany +wid +yong +kurds +waz +trolls +macro +caturday +pressing +sasha +centennial +gusts +emc +before +denise +cust +ðŁĵ¢ +looo +basel +england +yolo +ardu +manifesto +doha +ìľ +knives +bournemouth +bibl +barb +alicia +Ø© +comer +cyclone +git +anews +characteri +ventura +intra +sfgiants +hut +bea +darwin +eller +alv +reese +bly +karan +conclusion +manny +flakes +uniteblue +nadu +copp +edges +lancashire +ials +otta +philippe +lent +chee +mentors +festival +anism +complimentary +rj +pug +dine +wei +cliffs +sarmy +tiveness +treasury +iland +aftermath +rabbi +oun +bouquet +heritage +zion +surrender +shenan +inks +karl +ghty +policing +examination +cey +persu +measurement +hydrogen +luhan +âłĢâłĢâłĢâłĢ +wari +оР+jy +fowler +mish +alfre +âĺij +bbnaija +catalogue +recognised +saver +huskies +colin +mundo +siva +png +discounted +manutd +fresno +devin +preliminary +trophies +plastics +dug +procu +indigo +gard +dylan +pitches +groundbreaking +inson +blac +anthology +fh +explic +rard +admiral +sochi +lashes +splendid +envy +adv +sexy +festivities +sticking +bib +thrill +opp +ariel +botanical +endurance +females +bricks +vatican +blackpool +bermu +brough +roller +bid +suede +slovenia +mming +mlb +medalist +dians +rehabilitation +neon +sgo +lithu +ramos +zed +pianist +intensive +broadband +study +petersburg +luca +ahhhh +physician +dillon +telecom +grief +mun +acro +sided +sly +blows +classiccars +trium +argy +?: +hri +marshmal +âĢĵ +topping +warsaw +transc +preservation +bav +refriger +experiments +äº +glit +sliga +gage +factor +flavours +brony +spo +cookbook +carriage +away +nyfw +onian +wg +simpsons +rolex +ðŁı¿ +crosby +ãħ¤ +credi +syndic +pubs +alife +poorly +maced +ðŁĺŀ +behindthe +wenger +nats +ðŁİŁ +rubbish +procedures +typhoon +ophobia +erdo +fuel +viera +bumps +millennium +newzealand +lectures +iton +milky +responded +ê° +landscape +..@ +bother +âĸ¶ +zhang +huawei +tuition +sworn +inu +yor +paolo +auditions +abil +malaysian +hops +feathers +mple +auts +ão +bounty +iche +ìĺ +shq +pinot +gears +disappear +videogames +tna +alzheimer +ðŁĮŀ +aji +underwear +switching +signage +oscar +econ +drow +clint +plated +gundy +emblem +hoes +icist +nelly +junior +roadshow +minerals +atle +alexandria +acclaimed +vell +shiva +adhe +enne +amnesty +hounds +councillor +ðŁĴ¦ +aesthe +partnering +influenced +magno +flare +extinction +civilian +majesty +vail +lawmakers +racks +mcc +orian +spices +errors +mayer +coca +pai +sooooo +retiring +bathro +ðŁĻĮðŁĻĮ +âĸª +suf +endorsement +building +brooch +palla +arvind +agent +karate +rhi +ctv +taine +umm +bax +reigns +uniof +enterprises +adele +flake +attire +bruce +bahamas +gravy +sain +cheek +trivi +lov +een +bblo +ladygaga +itta +."- +dustin +observatory +eighth +bloomberg +khs +fcc +gist +commemorate +veer +sexuality +edc +nicole +vacancy +user +sona +:'( +diploma +tend +upgrades +ÅŁ +jurassic +cardiac +drs +widespread +Ãł +dailies +vendor +simplicity +wider +lenses +supplements +depos +observed +vines +partially +renewal +collaborate +alig +finity +phu +zzy +petit +ðŁĵħ +zin +igu +smack +fallon +ðŁĵ£ +backwards +component +oso +compatible +binding +zurich +thome +wounds +lyric +freshmen +sneaky +fibro +diet +employer +insect +hated +scher +razor +nsw +booker +californi +avfc +° +pretending +pepsi +alis +untitled +kart +grandparents +ethe +ock +luxemb +visuals +smallbusiness +abdullah +minho +subaru +hra +revealing +heartbreaking +clarity +amg +slr +**** +âŀĸ +record +iciary +minded +yeh +excessive +knuck +icecream +truth +evic +tastic +antarc +rendering +,, +mitt +lorenzo +stpatrick +boundary +zig +vocab +osaka +furn +tun +gul +sounding +blogger +utterly +gaf +advancing +lcd +margin +lifelong +solstice +shra +waits +plear +breach +enligh +ader +ittle +cation +hoon +studied +????? +kash +evangeli +psl +weights +metals +tyres +turno +wie +carb +gale +seal +sunite +amic +patterson +án +euph +upstairs +qualifiers +khalifa +applemusic +ìĨĮëħ +vaughan +alter +cruiser +mua +tana +katrina +idols +spoiled +secretly +fibre +partnered +umes +giov +comet +screenshotsaturday +keller +filtr +fet +conway +peu +badminton +gid +mound +donkey +buff +leather +largely +broch +intments +amuse +rk +stove +impacted +cont +cracks +prisoner +bari +contractor +orioles +dominate +polar +amelia +drc +ðŁijĮðŁijĮ +vist +suarez +injection +blooms +ðŁļ¨ðŁļ¨ +stiff +paypal +snowing +thursdays +goose +wedge +educated +weakness +decker +abudha +breezy +ÛĮ +hopeful +obi +raider +gham +deu +seve +partly +fut +infused +merri +thane +sometime +hue +mein +credit +sliding +rande +cherry +deadpool +shol +aram +underwood +skye +disturbing +mnt +polished +guardians +hadn +picasso +arius +akshay +irri +jh +happen +lakh +dalton +atthe +swell +marsha +reh +cours +jkt +topus +service +rink +hackers +donovan +horo +tcm +mayhem +chase +devops +kensing +scup +shere +qualification +clive +tong +nancy +maris +derdale +berman +cinderella +jolly +cic +loot +collectibles +homicide +gge +epidemic +suites +muddy +gimme +erec +-* +talla +lisle +embroide +ðŁĩ©ðŁĩª +verizon +vector +beanie +artisan +gain +flores +vigil +uso +ðŁĻıðŁı½ +grinding +gher +airports +responsive +shaft +cancel +ceremonies +eme +atari +brushes +eager +bohemi +childrens +yankee +maa +suspense +moran +macar +sunflower +crew +void +kear +fashioned +jennings +sundayfunday +submissions +mead +herman +wai +critically +leum +baekhyun +forcing +cobra +ãģ® +acquire +alk +geology +primar +importantly +irez +bundesliga +curiosity +sena +strict +consoli +winters +venom +cheltenham +ðŁįº +cena +tat +bain +glover +undercover +asses +carn +memorialday +ameli +irene +chon +synthesis +speedy +mitsubi +slayer +composite +understands +pew +interrup +henri +morrow +anom +thofjuly +glee +three +ðŁĺ® +andhi +chatt +renewables +yes +transfers +!!!!!!!! +babu +duter +loops +peers +oilers +paulo +ication +hmu +wara +mercer +homeland +fuji +aley +yearbook +rem +reen +absur +bois +]: +caesar +shotgun +kurdish +oren +rae +ancies +typic +fh +default +replic +luk +transactions +rys +infantry +ðŁį¾ +chow +chickens +bagh +wyatt +aye +ggi +brews +editions +mira +commencement +presu +periscope +ichi +guatemala +zambia +paints +witches +wani +undere +croy +vows +usmc +hearted +theatres +shuffle +level +multic +squeeze +fern +appet +postal +malt +onboard +ldnt +coo +ssc +kac +ðŁĺĩ +scrap +marcos +dealers +annu +miller +cove +ulary +vladimir +beef +thur +pickled +sesame +bengaluru +mott +kathleen +hist +notor +drank +duchess +snowfall +eff +tiny +jn +syour +specialists +scotus +baylor +everest +malibu +prem +harmful +lali +bates +gye +differenti +andra +geometry +elover +blackout +==== +kota +interact +asian +layo +samurai +fidel +exhausted +gladi +pdt +spheric +antiqu +guitar +sturi +hopper +angle +fills +slap +mith +rodney +ongi +insom +preventing +cassidy +apho +oregon +loin +hammond +contributing +fn +garri +orion +compelling +escaping +aiming +plumb +bistro +beasts +concerning +boe +dopp +shoplocal +stumbled +âĤ¹ +nazis +âĢįâĻĤï¸ı +gesture +warts +usopen +higgins +charli +hangs +bombers +°: +feeds +cch +stil +nicola +ðŁĵº +clamation +tropic +afro +ouk +expenses +derrick +aline +faw +regard +imer +satin +thium +ryder +pearl +tess +mmmmm +senses +ðŁĩ¹ +positive +exhaust +occur +norris +lilly +isles +directing +yofficial +countless +samar +onstage +flock +mirrors +archer +moi +kd +viv +inos +sikh +lei +sensory +brits +knox +chestnut +opy +coliseum +zaf +divin +adapter +:))) +temple +kun +helmets +tdf +guide +mold +oids +luther +heis +monastery +spree +klu +britney +jaguars +greats +ccc +kyrie +machinery +cricket +rero +abo +aspiring +semifinals +aless +signatures +vard +meth +herbal +holden +kingdom +apor +reggie +oreo +palestinians +emmys +sectional +roi +neymar +quel +cull +lka +hazel +estimate +ulties +gow +bea +purchases +belts +protects +mé +guessing +bbo +claudia +fracking +jonny +elk +celtic +almighty +raje +courtyard +igi +canes +ðŁĴªðŁı» +bankrup +lethal +âľĮï¸ı +graphicdesign +vader +pencils +roughly +dante +mfg +constell +camel +jb +blossoms +ento +balochistan +cinemato +illard +jersey +consent +dented +contempl +scher +holi +lough +stour +ayo +beginners +curb +vhs +ajax +duff +aveng +domest +committing +aired +chap +hedgehog +disappointing +freelance +inland +charms +ðŁĺįâĿ¤ï¸ı +aish +mx +buckle +tidal +permit +boating +racha +kendrick +bello +bhi +plea +estimates +lb +apologies +jaya +bbl +astoni +interstate +maintaining +elbow +mup +epit +ðŁĺ¡ +violations +defend +beh +slc +amir +puri +tium +fifa +blurry +scrim +ðŁĻıðŁı¾ +maple +relatives +âĺĿ +choc +connor +⾨⾨ +whisp +listings +maze +thanking +ridd +grassroots +shifting +desperately +gorilla +deni +jules +strath +gley +jain +buick +tanner +ðŁĴĿ +gae +prim +itors +nano +separation +armenia +bordeaux +ðŁħ +pjnet +burial +ebon +gloss +renew +grier +speeds +comicbooks +symboli +purposes +ãħłãħł +spatial +notable +cion +nps +hoffman +norman +rtg +dusty +situated +tran +kfc +emen +nickel +hastings +settling +grit +lena +waw +arts +gum +caregi +lewis +sapphire +remember +embedded +tlc +blat +sergeant +elsa +bootcamp +bowman +photographic +pillars +directioners +classified +nois +veer +barrels +whoop +ðŁĺ±ðŁĺ± +female +petroleum +media +efc +pokémon +à¤ķ +enthusiastic +varun +profiles +pediatric +accidents +conrad +jang +jojo +acor +observer +lf +livestock +forgi +fos +elm +anand +goe +cere +avoiding +grit +oman +thankfully +scattered +nicky +cylinder +cheesy +diver +mahesh +caves +earliest +quinte +subjects +bend +gulf +vocalist +glue +patches +unstopp +snyder +demonstrating +pio +horns +wickets +andthe +rama +yoon +straight +bedtime +orang +bullets +saurus +miners +incidents +!... +ðŁİ¸ +agers +handles +states +inity +dons +incredible +eminem +aviv +rudy +mozart +folklore +appliances +mtl +frey +dias +hua +pageant +strive +imprison +bullish +rana +alerts +bbmas +hyper +derbyshire +recre +redd +deborah +cosmos +lawson +melanie +psycho +hoor +doodles +sniper +shady +mantle +canadian +newyear +interactions +separated +cords +spirituality +apu +ito +pct +pelosi +rebellion +seiz +worcester +sectors +uli +santa +е +ðŁĩªðŁĩ¸ +biased +classical +gamma +deeplear +emerge +backer +surance +handcrafted +ðŁİ¥ +francis +millan +ici +crown +wow +striped +unfair +relaxation +³ï¸ı +embracing +shealth +paleo +martini +distillery +wrink +ork +nath +hayley +courthouse +siber +sadi +quietly +melt +msm +meh +smartphones +relent +pping +warwick +cologne +glia +cotton +prog +lone +ipsw +starters +expands +ump +sued +skipper +infections +ingle +á +clerk +demonstrate +acar +ðŁĺĤðŁĺĤðŁĺĤ +tibet +buns +alom +demolition +ssia +gst +[] +soar +âĺĢ +ðŁĺª +ðŁĵĬ +deepest +beyond +aret +attends +activated +dimit +âļªï¸ı +highlighted +magazines +rumor +azza +stephens +dolph +shockey +mats +weav +melan +servers +traum +kush +æĹ +babys +paz +aal +lause +breakers +canterbury +ulture +miri +euros +taneous +impressions +dutch +ild +ghi +purdue +adequate +lp +syner +angler +durable +galore +rown +mgmt +ðŁĵĮ +lucia +âĺijï¸ı +zayn +borrow +.( +northumber +crush +enga +sush +extravag +tout +mahal +alistic +thermo +galleries +esse +chibi +attractions +lexington +legislature +documented +residen +brownies +wf +stool +planets +shoppers +conductor +msp +tricky +fruity +endra +feelthe +whipped +hairstyle +refer +ook +octopus +audiences +kumar +afterno +optim +cfl +nip +geni +alphabet +annab +lamin +accepts +lng +ðŁĺ« +tine +acom +cheerleaders +tk +gron +vg +kung +jax +dhabi +rss +mackenzie +beirut +cleanup +gypsy +stell +burger +hurricanes +education +stina +âĻ¡âĻ¡ +unfortunate +jeremi +badger +aters +:âĢ¦ +terra +sublime +stud +ymca +mru +duterte +brennan +bulb +melo +ylon +hacker +cred +gud +asan +padilla +embroidered +vietnamese +pioneers +projection +reboot +idc +aney +primer +suffers +winding +pon +stoday +morn +uch +allin +adidas +elizabeth +tuck +ography +ðŁļĢ +beg +osborne +ghetto +rh +cnn +irma +makin +cables +murders +ocks +insta +alas +sik +cuff +lare +foodies +ovic +atom +geometric +empathy +ี +centenary +newspapers +administrative +ðŁİĬ +stive +contractors +lett +tasmania +awesomeness +density +veen +princeton +frequently +reject +ghi +modular +ceramics +shag +kiwi +canvas +sweatshirt +anj +timm +napoli +iler +appeals +hamilton +mayo +weave +arranged +wharf +occupy +bvb +asaki +otter +norm +vies +detox +tional +derek +idad +admissions +constituency +upper +woot +alloy +seve +lub +uncomfortable +edwin +abre +dwight +arche +virtually +spol +prie +aii +err +switch +barack +seok +coul +wnt +poul +olive +caffeine +cardiff +notorious +demp +excess +barr +tford +ajay +bumped +mythology +shelley +falcon +shakespeare +mustangs +noted +bone +civilization +syd +parsons +unofficial +hyped +spends +opposed +vings +spacex +notification +deciding +biotech +outsi +salah +!. +fed +ssy +cms +badgers +cro +elaine +nba +dyour +nant +honeymoon +climbed +conomy +atha +mell +nebula +naturephotography +julie +bmx +invested +mono +lieutenant +watkins +technician +ose +kae +ìĽ +mcqueen +preach +traveller +flexibility +zebra +retailer +pant +bender +brandt +squid +warrant +verified +cass +piercing +honours +tying +morris +kissed +oprah +panoramic +mei +splatoon +wichita +arias +galli +indyref +goodtimes +atheist +confession +owski +repping +additions +mechanism +zim +jans +suf +chopped +beginnings +vitamins +ãħ¤ãħ¤ +orth +poles +rub +antarctica +indiefilm +webcam +ketch +brett +clement +heron +defeating +hydro +bucket +wandering +sidney +futureof +binge +onies +knockout +administrator +synthe +lent +jani +barley +premierleague +nerds +crm +bras +botany +evolved +rotter +rowed +tumor +wealthy +ÂŃ +monarch +lished +dahl +ðŁİĥ +buch +kenyan +ا +redness +assembled +semit +hudder +shrop +rani +learning +mory +itia +geographic +worldof +fb +phosp +boogie +amped +?... +chew +dwarf +arus +ssen +rusty +recruits +hk +garde +applause +volumes +involves +tac +handbag +translate +ffel +seym +aquatic +transfer +zodi +andr +academia +crater +tez +arse +adapt +coloni +snowman +mali +hangin +dischar +oysters +phoe +colonel +wba +hispanic +thriving +shy +agles +salesforce +creme +soles +lafayette +âī +teria +acha +sperson +gogo +carly +theore +amore +vox +aft +ãĤ¹ +staple +muffin +diagram +inox +sustained +avent +meta +arbitr +decay +adole +н +ecol +pho +nk +ocu +granny +ça +luxembour +stadt +alberto +levit +amas +dx +orphan +cobb +asc +logy +immense +chants +offline +pent +brex +winger +plane +iel +nichols +cathy +naruto +lowed +/// +ignorance +catastro +youts +schen +build +hazi +sine +criticalrole +dug +detect +logs +enamel +stpatricksday +eddie +copa +cigarettes +hoff +kaya +lagoon +rapha +airborne +choose +puertor +kev +guiding +frosty +borough +mira +ðŁİĬ +cadet +anush +yogi +eger +fling +slope +ninth +weston +footwear +fn +mayweather +aam +plain +staircase +witnesses +workouts +robust +dexter +cohort +ðŁļĹ +spell +haze +oom +organising +wildfire +contacts +avon +mino +updating +ðŁį» +lithium +ingual +kis +auga +locom +deduc +uda +thak +boyle +mper +hottie +erik +revised +isla +travelphotography +ooza +enqui +conferences +clover +groom +curves +liveon +perf +displaced +bolog +xxxx +ðŁĺ©ðŁĺ© +teal +vessels +rainforest +calci +panther +giraffe +tasted +imagery +padres +daytime +bass +ripe +opioid +nue +vinyl +inventor +sens +processor +mut +gadgets +biblical +shannon +jacqueline +cary +theresistance +alien +nvi +cosy +bihar +foley +rend +mugs +faken +clone +niallo +grabbed +chihu +powerhouse +ntt +cherokee +sponge +implementing +rhine +leone +ðŁįĢ +prettiest +infrared +improv +switched +tubes +contr +blk +projected +beaver +yot +bbcradio +thigh +persecu +apologize +wack +poster +oliver +aza +loud +(?) +fthe +womenshi +sparrow +blush +usable +scales +itative +peuge +needing +leggings +glamorous +matur +cz +watt +dab +tamar +etsym +bauer +heartfelt +hn +elsewhere +birch +alumini +huck +eme +jl +trafford +dz +portions +anasta +arthritis +espn +bergen +violation +yoshi +cz +northumberland +closures +ðŁĩ¯ðŁĩ +smiley +rw +telugu +intensi +gregg +vega +dungeon +southbound +bail +dominican +semifinal +chapters +hitch +vanity +transiti +recommends +satisf +barca +queens +(( +destruc +strait +ravi +desserts +intru +haram +kos +foe +fatty +paisley +magnitude +dridge +comey +schemes +visionary +ourt +downloaded +ðŁĻĮðŁı½ +gdpr +lani +pwc +guad +nicest +stakeholders +referred +georgetown +arvindkejriwal +schneider +indoors +allstar +stranded +gender +zepp +masses +ðŁIJ± +patiently +bldg +zab +wearab +vivid +heck +della +symb +jeopar +lager +ઠ+combines +nec +bray +flop +txwx +joys +pont +profound +surround +madhu +mable +ayr +teas +nsa +openly +ernest +ãĥ© +topo +gna +antioxid +tian +etr +cello +mathi +generosity +biting +manic +kelsey +cheeks +tender +wth +pronoun +ultimately +gusta +arianag +gerry +bleed +reddy +mich +mitsubishi +operated +sexually +mau +cllr +vids +coc +melted +ðŁĮĪ +qld +itech +instrumental +endgame +ðŁĵĸ +energi +brownie +tamil +atin +dominated +praises +fireplace +sensational +mena +karti +unprece +rupt +oriental +mccor +tournaments +scenter +reeves +prescription +same +frau +truffle +embo +romans +blasts +technological +prat +bsb +yar +trendy +acl +alad +ðŁįģ +ohh +bankrupt +thoven +regards +iser +warwick +vineyards +realm +niallofficial +dota +gemini +todo +vable +¨¨ +lau +wreath +juve +natasha +lever +lori +horser +cctv +airbnb +esanders +sinclair +emabiggest +highschool +contest +optimistic +tte +ðŁĴķðŁĴķ +ssd +yee +helena +consen +ricks +jesse +anic +ðŁİ¯ +reacts +robe +independence +voltage +mington +sant +à¸Ļภ+---------------- +sentinel +kett +rehearsing +aaaaaaaa +softhe +stirling +search +wigan +standout +snail +pentagon +Äģ +chlor +crust +netany +chemist +disappeared +ricardo +spiders +bose +warren +messing +banners +guel +parach +maid +counted +epile +bonfire +speechless +setter +measured +rejects +nikki +lester +forensic +fabrics +aloha +preserved +watford +detailing +darth +bou +carly +...' +tailgate +notifications +å¤ +passive +trousers +baloch +rother +typically +Ã¥ +spit +wiz +sicily +technically +expose +stage +hubb +cream +caps +poke +sleek +june +temporarily +dez +awakens +lame +_- +jiha +tuesdays +advised +advisors +existed +disagree +newsroom +losers +worldtour +drying +aldi +harness +footprint +hobbit +pmln +iro +quered +assess +gaze +sab +thian +íĬ +tif +observe +evil +drawer +sweep +cory +cody +kyoto +callum +ninj +laurent +bei +sketching +customized +dur +regrets +knoxville +ìķĦ +messaging +gracie +abundance +bidding +brewed +flouri +therapeutic +altitude +hogs +burner +electro +wonderfully +heater +postpon +livery +rall +adas +aac +saul +brooklyn +playhouse +âĻ¥âĻ¥âĻ¥ +charitable +iny +zah +competitions +beav +plugged +ois +doom +astronom +specialized +maxi +taps +cellular +depressed +folklorethursday +crib +emul +ë°© +figh +ruz +carlisle +spear +sidewalk +dei +dependent +laces +nhs +ðŁĮĻ +realizing +network +riche +regin +refresh +stral +pathology +plaid +psychedelic +hind +uka +algorithm +linking +progressi +fey +dade +hydrated +bant +famed +cotsw +boise +asc +racing +javier +wwen +marlins +poop +swept +tonights +wef +anime +slovak +âŀĸâŀĸ +claus +lemme +clippers +rels +arianagrande +rte +kot +thalapathy +hungarian +zuma +yvon +isu +journeys +clinics +bebe +wwf +nws +superheroes +erit +sleague +identification +motto +bai +sourced +iller +api +prise +unprecedented +damas +tunisia +drain +underestim +ether +quarterly +rewarding +alham +wolverine +cabine +hypno +nadine +havana +dae +ðŁĵĪ +dron +readings +bati +pico +merci +itian +walkers +elope +mikey +godzilla +burlington +abuja +socialism +atility +shell +harrypotter +gno +abur +releg +felici +rogen +neuroscience +instin +atham +vouchers +jarre +fuse +defici +monterey +deport +midday +ppard +freed +ameter +wilt +ningham +pratt +liberty +slogan +oto +pri +coated +cpd +nett +illas +malawi +evolve +accessibility +ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ +ornament +bp +elis +sonline +chiro +flick +ibm +arak +enables +garland +sane +cuties +trip +rotterdam +nys +lamps +lucas +bog +rails +travelled +hicks +enu +sabha +scrub +hier +hartford +foo +fernandez +trevor +mattress +appointments +alej +fei +ologist +safar +octa +src +shaun +ambient +dric +biker +shee +mustache +hta +boone +herty +cardio +brakes +recital +consists +overwhelmed +caul +robbins +imit +alth +url +bibli +onne +blacklivesmatter +difficulties +telang +taller +ðŁĵĨ +debating +burrito +movember +strengthening +boe +testam +miracles +baseball +renee +ðŁijīðŁı» +alfa +âĺĺ +unstoppable +ecs +gmo +giftideas +pathway +fencing +ðŁİ¤ +bham +ras +sko +dled +thelast +magnum +binary +wilde +wilder +whati +barbecue +hism +canoe +kurdi +elive +advantages +madame +bier +missing +entertain +airforce +yama +cis +hashtags +jis +veil +dreamy +tense +mayward +chateau +huntington +âļĵ +vall +upon +blouse +dunes +ðŁĺ´ +fertility +mole +currencies +stu +berlin +toasted +divas +walt +lark +pora +hitter +umer +chilled +balancing +fais +yin +ortiz +eastenders +hate +ural +april +timel +à± +pero +stocked +respects +tht +bestfriends +givingtuesday +bead +invent +imi +naples +combining +tokens +thirst +masc +parrot +spu +denton +*-* +tres +suburban +width +sive +contender +sirius +lok +troopers +outrage +turbo +fragile +messed +doh +discord +netanyahu +resign +forgiveness +mohan +munch +camou +identifying +enabling +hotter +thornton +jaipur +arya +ðŁı»âĢįâĻĢï¸ı +mustaf +majors +oke +duffy +rohing +tilt +ðŁĩ®ðŁĩ³ +rockstar +sheep +hendrix +rav +invention +dou +laguna +grumpy +swis +impe +)' +youths +bunker +stache +oppose +indies +accelerate +mlp +eden +wann +kail +akshaykumar +supt +polym +middleton +extraordin +wilson +australian +aluminium +wayne +alumnus +matics +grim +ernie +oppa +competitors +randall +hence +declares +preaching +shahe +cane +sustainable +staples +ledge +adena +doctoral +burgundy +decorate +rendered +risen +prank +dior +beethoven +floor +accom +tot +hodg +tourism +sayin +objective +markers +premiership +enabled +camoufla +giant +Ñģ +smokey +ricket +pang +depending +sation +evolving +intercep +census +tofthe +reen +mendoza +trumpet +marketers +anit +ðŁĻĬ +northwestern +vla +fotogra +blackandwhite +chewan +wig +troom +gingerbread +kn +romero +nfc +orchi +funko +source +fs +raped +ost +tarot +annually +ðŁĺ¬ +rill +delav +..!! +ses +cann +medicare +phel +apex +guardian +remained +rpm +añ +storymonth +instagood +neighbour +ping +semite +mystic +ascot +mater +handful +dangers +tid +anaheim +opoly +shallow +namibia +toria +procurement +bigbang +announcements +prosecutor +bengals +salle +enroll +gastro +suggestion +bak +haul +buddhism +berniesanders +flute +fatigue +cynthia +choi +irwin +gua +strous +hp +bap +satisfying +playa +ðŁİ¼ +instap +alice +tp +irrigation +ðŁĩ¬ðŁĩ§ +intric +clues +plex +sax +hepat +dumped +significance +byu +medication +prov +toughest +cornish +âŀľ +kelley +uv +sizz +sibling +mest +distor +diplomatic +auntie +bhat +sonic +brenda +pumpkins +roch +blackburn +urged +shia +arrangements +flood +saunders +lecturer +nouri +populations +diplomacy +consistently +ðŁ¤Ļ +tmund +cauliflower +lily +vocabulary +varieties +cooker +uptown +quent +mosa +reinde +velocity +spruce +socialmedi +iber +voluntary +processed +baltic +yang +lebanese +dp +dolly +arrangement +yuri +cranberry +kalyan +elevation +cliff +pushes +ìĬ¤ +silic +cowx +eternity +slaves +vinegar +gloucester +contained +breakingnews +against +renovated +normandy +heroin +ysm +mods +greek +undi +trench +vh +encourages +headache +grange +:' +evergreen +ÙĬ +reckon +abused +thru +choice +tidy +colder +schoice +hain +brum +liars +breit +yorker +shack +heidi +michaels +scopic +fascist +playful +cac +yasss +shad +..? +quen +ramirez +clifton +prs +bestfan +âģł +generating +headset +disappointment +abstract +boiled +parenthood +azerbaijan +exhibiting +bombay +olivier +koso +unlea +maternity +izer +sives +rhu +coll +saskatchewan +freakin +dek +nag +stabili +ðŁįķ +organizer +bosses +aru +uva +atable +taun +afterwards +fertili +verge +azi +morph +à¹ģภ+jerk +cosmetic +kow +strust +apache +postcards +formul +ìĭ +spinal +jackpot +electri +ÃŃ +loy +grader +diablo +ardi +hesit +fw +archery +pash +theories +repeal +relive +percy +âĺĨ +imin +synchron +shampoo +coupons +oto +lai +thought +luxembourg +mov +ðŁĺ¥ +gemma +seated +mga +stratford +uncertainty +shifts +esto +fool +firearms +corrie +kiki +apparent +pills +olympia +fid +elevated +decks +ignoring +avalan +rov +whistle +ptsd +militants +robotic +pacers +quilt +bankruptcy +lich +percussion +celebrity +als +(; +sut +pokemongo +hg +offs +gibraltar +screams +billie +genome +marin +beams +archbishop +emin +bedrooms +gated +olly +warranty +atown +cuddles +gunna +kic +vive +cymru +narrow +prob +leo +references +manufactured +chopper +brunswick +semis +donia +rye +mano +hurting +?# +holli +investigations +cels +ðŁĵŀ +lester +temples +storey +mcmahon +toilets +woof +ï¸İ +leverage +atom +nightmares +victorious +haunting +customer +agi +yoongi +monty +veronica +wur +intimid +blankets +volution +jm +âĺİ +amon +judith +ðŁĺİðŁĺİ +distracted +drip +hurricane +andes +revelation +troop +ableg +collin +tibetan +worrying +internationally +eater +cameroon +brador +yuk +ðŁĴĹðŁĴĹ +trak +slopes +cier +nea +oler +taka +albion +volcanic +amn +afi +obstac +facetime +gering +npr +metallica +organic +ðŁĴ¡ +kidd +dances +pembro +washer +mits +omer +emotionally +tango +ipo +docks +scanning +specs +thom +theology +emergen +omi +gpa +selections +unnecessary +image +ters +induced +gigan +rentals +supplied +mfa +shankar +later +pajam +clave +Ùģ +mahin +carlson +avian +anova +katie +ajith +designated +chocolates +investigators +glazed +princess +erry +ragn +ourable +hru +sundance +peugeot +steampunk +ghlin +grease +hires +zap +perce +jill +tome +hehehe +joyful +maestro +nished +genealo +vich +pits +foxes +goodman +emerson +lobes +converse +oats +thomson +rahim +malware +ahi +mankind +resin +img +swood +kinder +scroll +ara +sakura +robbed +xion +nya +cism +cedar +bein +mourning +torto +heathrow +donegal +barb +hydration +kor +elimination +supdates +hills +appeti +starred +kom +gwen +ddd +cray +scanner +personalised +serenity +redesign +metaph +boxed +judgment +nose +ë¹ +erad +acne +suppliers +energetic +vom +asap +ðŁĶ¸ +irvine +hatch +lass +adren +waffles +accurately +icio +ittle +seun +occupy +webcam +thenew +entes +gai +jw +accountable +visor +irrit +licensing +huddersfield +genie +ðŁİ¾ +atmospheric +tensions +spartan +clifford +olan +northbound +ameen +censor +uel +stery +$$ +farrell +hyster +clt +sedan +replied +describing +microwave +slab +prosp +assisting +rubio +ethan +hhhhh +guay +zman +raise +rolling +oe +nile +ambrose +scarborough +heroic +cooks +mort +chopra +ðŁĮ· +tob +shaving +stacey +dorm +motorsports +wiki +folds +spiced +stressful +literal +fudge +peggy +waite +tresses +sesh +pric +ðŁİħ +fright +rva +mumbai +pom +ttv +cellar +tome +android +doris +tsunami +tinder +oec +mwc +dortmund +nothin +liti +sou +believein +atu +knocks +magni +sssss +rohit +inews +angi +mandy +kettle +intermediate +avant +curl +endorsed +orio +urt +consideration +wires +shelters +bino +vikram +implemented +lydia +buk +parody +cnews +undergraduate +canucks +sami +politically +rotten +ghz +textiles +overload +moderni +recreational +flir +baton +typography +ovation +intriguing +pilgrimage +alge +adays +tcmparty +spelled +curls +booze +stem +annes +irls +sponge +shopper +signation +brass +mistress +leah +beginner +lauderdale +august +preschool +taping +taipei +executives +bd +rhetor +escor +immuno +deeplearning +statues +itus +manuscript +lyric +corvette +molly +lage +dep +cnbc +lest +jessi +fife +griffith +opposing +rang +drills +respectful +pity +dell +harding +playboy +bloke +shutout +kili +osp +seattle +bcpoli +mises +journals +teaming +esther +freddy +Ķï¸ı +metrics +notre +garry +forty +navigate +periods +benedic +jid +daw +ancestors +restoring +cong +allergy +titanium +cence +leaning +abbas +vast +ucf +roofing +eman +severely +vogue +veau +inbound +dz +taneously +stretching +manchester +dryer +davis +kanth +thegame +itted +retain +elles +congestion +fraternity +ollie +loki +freely +choo +pony +scep +tably +balt +rockn +dime +logging +ðŁį· +adu +havoc +waterford +charis +sweetie +running +nerd +erdogan +zara +weighing +fifty +precise +lowell +kurdistan +ryo +orth +synth +liners +phenomenon +artillery +illegally +construct +nostalgic +garth +alta +shelton +asean +wander +durban +diversi +bono +clon +leman +shun +obstacles +appetite +feeder +respiratory +dixie +formula +anto +sober +extinct +auc +ingles +legitimate +;; +minnie +ipswich +dramatically +ðŁijıðŁı¼ +ingham +military +monet +usnavy +fork +dunno +player +qotd +stoo +exor +ethiopian +filmfest +pered +cate +saudi +inner +sincere +tionality +alee +deeds +cooperative +ironic +crocod +brary +postseason +camper +canary +ein +extensions +nbd +sherwood +spokane +hump +jitsu +ê¹ +daryl +psi +stabbed +offerings +expects +caval +bodybuilding +framing +fca +yearly +bombed +skil +researching +judiciary +greeted +tudor +milo +innovate +ðŁĺĽ +rhs +ruby +contributor +famer +socially +mlin +fiery +utter +beaut +itos +devoted +rainbow +barney +peren +arjun +rna +gabby +uti +hannity +pickle +serv +quakes +ppe +fem +whitec +jn +victories +ðŁ§¡ +golfer +congratulates +resulting +mechanic +urve +centered +kiev +ans +incub +<< +cmo +bestfanarmy +daph +enham +oncology +kush +txt +oriented +fashionable +csr +sahara +rack +pdp +hanson +à¸ĩ +tiers +rar +panam +insky +sahi +testament +asthma +inher +fisheries +order +howe +gallon +epis +suzanne +drowning +panelists +ðŁĺ² +ë¦ +alach +commemorative +attribu +ðŁij» +moo +visional +weeksary +gust +akin +pointe +eee +dispar +nipp +dental +stall +pian +bore +ulster +tick +irr +taehyung +microphone +bermuda +gaard +eler +plumbing +hugely +âļ«ï¸ı +raceway +cambridge +marcel +burnley +toast +hollywood +fasting +mered +hibition +capped +beneficial +owning +contamin +arabian +toon +capac +hulu +smir +nutrients +sein +graphs +conditional +ðŁijħ +orac +playin +northe +tornad +marian +jumbo +lexi +incredibleindia +roadto +ukone +confusing +sph +shank +pied +mqm +positively +sherry +pathways +considers +tofu +arguments +resilient +chett +withdra +tero +atedly +swana +heb +flight +harley +decrease +kindle +bookshop +³ï¸ı +martyrs +smur +mccl +concerto +stime +rejoice +applau +clement +merkel +jaime +immortal +isleof +marco +youtuber +stalking +metoo +stack +spouse +ust +luv +âļ¾ï¸ı +equestrian +eving +flin +nickname +thebig +asar +stacks +walker +bora +kidnapped +hurling +humbold +recalls +copper +annis +seo +merger +muir +addy +ðŁĴªðŁĴª +bex +cracy +conan +congratulation +midst +âĻ¬ +forbi +optic +crate +crocodile +madagas +securing +aston +ogue +savior +salisbury +loveit +fujifilm +castles +asst +arrows +spacious +trs +polyvore +progression +mri +nelson +bim +indicator +oda +pepe +resignation +gut +sneaker +logically +azy +arella +tearing +joshi +ssionism +qpr +mariah +px +bleed +mian +medley +weiss +kerry +gatory +atal +madison +avenger +naby +pland +giles +freshwater +dington +taj +demonstrates +ntv +bulbs +sundaymorning +peake +souvenir +wah +tonnes +mkt +complexity +conden +rossi +bing +yds +suk +ngo +midland +oly +lifeis +ripple +moreno +dders +tus +áĥ +boul +xa +holdings +wny +shadowhunters +kei +aspire +mous +owen +soak +skirts +mountaine +storming +chrome +riots +sarato +amaze +lessness +navar +criteria +rafa +indulge +ayer +porto +namo +................ +yields +valle +jh +macron +sains +durant +trailers +wot +confederate +shrin +idol +formally +tene +motorcycles +thang +node +banger +daly +pats +enrollment +auctions +atal +arbor +logos +dearest +transaction +domingo +flea +sermon +deck +sincere +questioning +julio +wasp +pretz +armenian +kham +inflammation +picturesque +accidental +filmmakers +ðŁĺļ +ðŁĴį +casey +sob +yeezy +goodwill +paragra +ssly +feather +dyed +assassination +nade +bcs +applies +feminine +feu +extent +deputies +lack +psychic +goi +killings +pseu +ðŁ¤ª +unc +marl +tane +mckenna +surfer +influences +freeway +hackney +malaria +eland +teau +remastered +ر +razor +ggy +corro +laksh +flair +honesty +hooray +depp +amc +wednesdays +qa +edits +-$ +sevilla +doubled +humanities +ccot +somos +rine +afa +sioux +reconstruction +welding +threads +amish +encouragement +poder +bock +balm +ptions +standup +accomplishments +guarding +conviction +acion +napoleon +depicting +attack +sui +wearable +âĸªï¸ı +potter +escort +vise +tots +boon +eventprofs +angular +womenshistorymonth +barrow +schi +accomp +tik +lend +kensington +wolfe +stacked +crashing +exhibit +winged +sabrina +masa +kms +always +ett +plasma +counseling +pickles +nfldraft +mrs +inevitable +courageous +stafford +writerslife +hos +ej +ghyun +trademark +adrian +influencer +coronation +raging +explored +usaf +exception +eux +tanker +swami +packet +ðŁij¨âĢį +fen +sheen +aero +jl +regal +nwt +auster +mehta +charge +aste +bate +infeld +racecourse +collapsed +fleece +zil +allie +alternatives +georges +ðŁĵį +quirky +fcb +natgeo +philanthropy +brai +everyday +ðŁIJ° +achers +jaan +fines +qi +fisherman +distinct +grimes +nationalist +commence +rown +âĢ³ +zing +fter +hrw +baroque +blender +kitty +hooks +cited +wanda +consensus +reindeer +anand +supply +meds +vn +olph +ratchet +sheldon +securities +ë°©íĥ +crom +mosquito +jeric +immac +dimensions +⤠+dissi +spongebob +damien +stevenson +joanne +delish +yikes +thanx +surveys +postponed +alcoholic +alised +ðŁĻıðŁı» +doch +sentim +meredith +compares +bago +happydays +moss +ãħĭ +nec +gnment +frustrated +combin +riv +eclec +collo +compliment +actorslife +ctto +nicar +ophon +aparthe +mant +jade +trolley +optimization +eyeon +ecological +quist +ephe +à¥ĩ +cinco +appoints +oldschool +cpr +behavioral +minaj +:-( +tagging +eval +joaqu +ðŁĺ« +hak +deme +jamaican +sos +hyatt +handbook +librarian +hannibal +pumping +chom +fman +gai +hull +responders +greenville +nus +vaugh +ðŁİīðŁİī +taxi +goldberg +mantra +tease +forbidden +methodist +ativity +**** +ect +mcgr +Ħëĭ +seb +amidst +disappear +thyro +philips +erina +vicious +streamer +millionaire +map +strick +hackathon +gha +edic +mika +peck +illi +antoine +arca +optic +maure +ðŁĩ¦ðŁĩº +clashes +manly +âĺģ +alvar +andres +mei +elm +wwww +altered +lte +ê¹Ģ +mojo +forrest +thalai +nont +speeches +acknowledge +ignite +xfactor +ðŁ¥Ĥ +meadow +disrupt +debuted +scrimmage +pharmaceutical +fidd +foundations +philosopher +etal +publishers +boys +cke +rugged +optimism +rebe +philharmon +narcis +rallies +luis +goblue +folded +unacceptable +optimal +lisa +polaro ++. +enza +âĿ£ï¸ı +monopoly +graceful +dairy +dua +difficulty +judgement +osi +mersey +flux +newfound +terns +dimensional +invic +alba +amit +abudhabi +algeria +automobile +thead +lotion +accelerator +vacant +ition +luf +alic +pll +blazing +baz +sene +ðŁij¼ +villains +directory +eisen +tock +brochure +ripp +hbd +zaynmalik +niche +lolol +certificates +morse +facup +xham +unwanted +imports +carnegie +fansign +mou +ralph +destroyer +swing +trekking +ciliation +pitbull +gaps +howell +definitive +mcle +fps +etz +bolly +lynn +gano +ature +fursuit +coil +nav +butts +trojans +eure +enko +schumer +horrific +installment +brb +suburbs +abel +vir +desh +cunningham +ðŁIJ» +spann +schwe +kemp +tru +stealth +ques +lew +delights +koch +humili +criti +ilt +spells +miley +caric +ðŁį´ +lcfc +substitute +oung +?!! +affir +predictable +classof +err +cypress +chandra +ageing +____ +therland +doncaster +elin +yoshi +sailors +harris +joanna +nigerians +hers +plague +procra +kno +canton +busines +unh +prakash +cin +bowen +coating +mals +begging +smithson +pontiac +spies +damian +pline +undant +alta +oness +shameless +daq +bbm +wales +stampede +serum +ÙĨ +catalyst +xn +absc +freezer +chun +arios +mccre +forehead +hears +damascus +tacoma +arduino +encounters +stanton +lgb +abas +".. +kete +dracula +elem +gne +zeppelin +labrador +pulp +optional +orn +russians +sanitation +hilary +etsymntt +penalties +aust +igans +olympian +medicaid +versace +vape +restra +peep +sexiest +stalls +dile +thea +punjabi +puppy +tuesdaymotivation +ðŁĵļ +theflash +rocket +modest +chihuahu +onna +ksa +hurdles +cave +failures +split +boho +gurl +disappoint +howard +nugget +franz +stalert +kazakh +forgetting +schri +agate +amat +everett +duet +veterinary +julian +chills +brave +ghostbusters +lando +greets +profitable +dé +tir +zee +omen +pdx +grayson +hari +fixes +stabbing +swimmer +symbols +compliments +pose +functioning +thnx +gir +corporations +barlow +loe +offseason +distinctive +marvelous +nikon +enrique +kyu +jaws +amoto +lombar +travelblogger +fah +ourism +tristan +soe +cease +ðŁıħ +zac +mckenzie +taxpayers +swimsuit +blo +lesley +kansas +wks +kiel +provoking +myles +string +kangaroo +galactic +fifth +ske +weir +llis +matory +ðŁĩ¿ +unci +reproductive +rooting +tides +gadget +.......... +alexander +bowler +screw +apolog +erika +walters +shetty +lane +banter +asant +meso +vain +""" +usi +ferdin +accomplish +mansfield +bombar +collaborating +clap +iture +sda +smoky +nak +imperson +carla +comra +burgl +loco +ties +inhi +tracey +seis +disser +rrrr +dray +protect +corona +hunger +cken +celi +troubled +predators +fictional +shaved +richest +metaboli +fulham +grooming +monochrome +wasting +asco +aste +tista +remedies +ungsoo +southend +permanently +bumble +procrastin +identical +practically +mascul +suke +assured +valerie +deviant +grizzlies +thier +pura +nepal +notts +bilateral +spoil +carmel +cinematic +phl +nifty +mao +hypocri +laser +pantry +mathematical +elisa +coordination +belmont +ait +radiant +boiler +mang +fag +crc +hams +brin +â¬ĩï¸ı +familia +âĿ£ +saber +rupert +ggan +ritz +mich +salford +levi +gral +ðŁĴ¤ +nino +ced +businessman +ultr +simply +compression +pains +halt +ë°©íĥĦ +landscaping +nf +crooked +erd +ittin +ddleston +surpassed +inoa +dag +blen +extending +ating +algae +baller +umar +snooker +collu +flown +thub +ridiculously +kish +ople +dire +asser +aristo +sciss +hating +trouble +sylvia +succul +plots +sincerely +aler +laureate +brack +attn +rifles +meto +collectible +cuomo +contestant +consistency +antz +ranges +abigail +deb +minister +growers +anoo +hoover +dreamer +nucle +research +miy +shahid +mav +dhoni +cini +doj +hindus +partying +dali +alonso +informal +clarkson +itton +kian +cityo +mori +lasted +aspen +library +suspici +quat +denial +folder +chori +sweeping +enix +ðŁįĤ +ØŃ +nascar +handmadehour +moul +heatwave +emer +examine +ibn +grind +pov +tionist +mbo +sheila +integrate +omes +takeaway +cerv +connie +ticket +celed +bien +visually +madagascar +sorry +gui +parkrun +traits +labe +poisoning +à¥Ģ +viable +bohemian +dentistry +bados +sprouts +masked +teddy +ðŁĺ· +saf +saas +jiang +tight +speaker +withdrawal +bcn +assigned +classrooms +fleming +ðŁĴ« +supergirl +totals +tabletop +ebooks +horizontal +craz +flush +jard +cdc +erson +ãħł +greenwood +nih +cox +ada +litre +going +vicky +curved +louie +grains +hye +longe +remedy +trainee +sanjay +superstars +maser +manu +sage +whl +ðŁĺĤðŁĺŃ +ðŁijįðŁı» +msd +enz +rabhu +joo +ghu +acer +epo +resurrection +justicefor +blended +moda +avalanche +francesco +respective +gs +yeast +welch +devotion +getin +atheism +amic +carolyn +loc +ldnont +avec +usda +legged +bravery +blower +cowboy +heh +stible +buffal +channel +runchat +âĺķï¸ı +ideology +bestseller +yoo +peanu +bonne +felic +edison +fractu +narendra +ppets +seymour +riviera +hector +necessarily +bianca +societies +thebest +wg +sentences +wink +vaccines +palooza +jamming +asf +mpus +agreements +eck +bac +honore +compul +wildcat +imposed +yoga +hudson +canceled +lich +fuzzy +esque +chuk +wvu +sek +flipping +rhon +wished +wha +capability +lenovo +ìĨĮëħĦëĭ +vivo +tvd +nora +silk +pasadena +yosemite +valuation +clocks +uber +mrc +darkest +aubre +sso +belly +wrestlers +killin +louder +buckley +geel +adon +uns +appealing +ðŁij¯ +semitism +listens +fitz +ãĥ³ãĥ +nylon +arty +seemingly +hala +suited +ety +sheds +muffins +apric +uments +uta +jammu +chelseafc +starz +yoko +root +cleansing +diar +pioneering +iheartradio +digiti +findyour +cano +ðŁĴİ +zol +spacecraft +sixers +moisturi +bile +tists +horton +ranging +columbi +meteoro +sentiment +epl +footh +textbook +drainage +rly +scue +imrankhan +ðŁĴ¸ +margarita +eddy +predicts +gamergate +advise +growthhacking +loveyou +ugand +vf +benghazi +slater +newor +chel +independenceday +pnp +cullen +hoodies +numbered +britt +tsa +kltu +sages +momo +oneplus +coll +guts +wta +mesmeri +enhancing +chiroprac +jis +teenagers +mone +constellation +sweepstakes +eze +slovakia +laye +pearce +waver +pogba +kron +surgeons +marx +tid +gga +descend +pours +uprising +walla +sabbath +bachelore +mackin +kam +peterborough +hora +ðŁĮŁðŁĮŁ +thinkbig +rj +hydrau +spal +universit +ðŁıī +mailonline +leagueof +tenants +wally +lance +heavens +ddr +bolts +amir +iphone +cigar +endu +rei +elabor +ringing +johnson +characteristics +saloon +algorithms +talkin +mtn +dive +regionals +ffice +hati +deviantart +sotto +shiro +lama +kwe +faded +porting +tummy +estates +buenos +ðŁ¦ģ +believer +penetr +darn +spite +canopy +fashioni +tilla +petals +elijah +brawl +martyr +ë°©íĥĦìĨĮëħĦëĭ +midtown +erich +dapper +smtown +megam +www +lele +ons +catfish +firth +fossilfriday +ballpark +thaw +potent +illie +creep +carp +soap +gundam +infec +yyyyy +न +zag +ritt +calculator +boca +oko +toad +threaten +refined +olympic +accomplishment +bacterial +aji +tatum +feliz +sheed +jat +thic +jamal +ðĿĺ +lina +ðŁIJ¯ +joking +yotpo +pinch +akron +herb +motivation +lia +hostage +creek +gamble +russell +patti +fotos +cpc +broken +backthe +clays +umm +stockton +maternal +ür +lakel +century +bek +infected +ม +smackdown +manned +tahoe +smes +basa +sula +augusta +.* +rohingya +greed +counselor +silhouette +gravit +clause +'- +bobc +occasions +nowadays +dictat +beard +nally +brightest +kabul +incindia +dhanush +archaeological +cheape +mizzou +dhi +ovski +baxter +assemble +â +gigi +acam +wisely +hazard +northampton +âľĪï¸ı +meth +blasting +reunite +mulus +alizes +tread +mila +edward +kova +pesto +ðŁij¶ +vitz +hydraulic +refurbished +motel +isabella +homme +severance +uphol +miserable +fari +latter +efer +crackers +esl +acio +yyj +inan +ecb +zind +panas +trucking +reed +shaker +burgess +empire +agnes +nington +artworks +frs +tile +biome +eun +chong +americana +godfather +goblin +ishi +!). +tempted +genomics +mandate +cky +ðŁĴĻðŁĴĽ +somali +brandy +inven +spokesperson +pcb +yuan +hg +faz +starwars +rowan +bluegrass +dong +dday +trinidad +erton +banning +retention +cured +toberfest +reset +weis +detached +behindthescenes +immunity +pha +bray +ðŁij½ +rancho +ramsay +estonia +ndtv +]. +cabaret +taro +dv +showcases +plum +ðŁij¸ +sonoma +prepa +memorab +estu +driveway +ules +magnus +xr +nnn +muchas +enge +streamed +forestry +audiobook +troy +reckless +kilom +ruler +rak +procession +ions +poole +noctur +whs +farmhouse +pera +parme +hypocrisy +sics +vant +cask +holistic +aust +п +indo +ðŁij©âĢį +diso +dispatch +olsen +makeit +ennis +centre +arrange +ðŁĮ¼ +salted +easiest +fate +regatta +mozz +acan +sini +gically +chops +chicken +workin +hagg +involve +weeds +bookday +wakeup +kyr +michelin +fuss +rejuven +vacancies +incarcer +mst +scents +sovereign +kicker +ৠ+bod +âĢĶ> +sah +mobil +shropshire +ophone +dresser +missuni +hepburn +imo +foliage +diagnostic +assan +cycling +guilt +csa +puertorico +winelover +wakefield +doggy +khe +papp +cog +allot +cuck +poetic +mio +revit +magician +ç¥ +antenna +westwood +mberg +luxe +oatmeal +ج +teat +ffee +searches +lly +pluto +elon +lettering +innocence +fai +annon +telangana +mait +neural +canni +aroma +astor +fex +cocac +monetary +fent +unsure +'@ +indirec +tehran +isolation +libs +makeup +mercedes +ffy +hetero +deo +scom +cursed +veteransday +frankenstein +shrews +deco +geese +leftover +hadid +variable +academics +carolin +undergoing +variation +nah +ssier +gamersunite +pursuing +emerged +llers +controlling +roaring +meteor +volt +dawgs +beaver +islife +bathrooms +acional +prevent +lakedistrict +inals +yani +grabbing +sacks +lez +sway +kool +times +klopp +lade +concord +resulted +revive +reconciliation +oland +azz +giro +mandarin +deen +nutritional +iscoming +vani +awwww +derived +loveyour +stopthe +shouting +novak +ðŁĻĮðŁı¾ +loaf +displaying +sundaywith +maguire +cheri +ðŁıŁ +rematch +quic +Ú© +yin +ðŁĺ¹ +ilive +zip +ourke +downloads +swat +mississ +carers +tment +property +hahahahahaha +gibbs +surrey +arise +ticism +stia +irling +frog +cose +bassist +foreig +leau +pillows +holla +elie +disclosure +peanuts +intech +wwc +plunge +triumph +cori +slippers +ðŁĻıðŁĻı +neutrality +mare +hairy +gangster +humming +custard +merlin +alea +sby +damp +mohan +verbal +jst +gutted +bjor +unfinished +ðŁĩ¯ðŁĩµ +unhappy +âļ«ï¸ı +bypass +atsu +fischer +sav +africans +reuse +midway +demolished +gerrard +hercules +ÄŁ +medicines +clicking +surround +joong +waving +tribes +wetlands +officiel +arguing +lle +dova +suzy +clubhouse +negro +obtain +gao +glance +assist +chos +ãĤ¢ +âĺķ +adrid +occurs +stans +pardon +liveli +employed +revisit +ffxiv +bble +nearing +miner +ðŁĺ¹ +giovanni +upto +marvell +marse +towels +cbn +engineered +yelling +spartan +sians +ðŁĻĮðŁı¼ +sev +coyote +stadi +tcm +appen +shenanigans +openaccess +soaked +masqu +levine +strokes +lk +apartheid +hiphop +chardon +maymay +haasan +stripped +fro +scription +fton +hf +prisons +marshal +ķãĤ +ancho +compromise +classification +buzzfeed +bbloggers +deserving +)/ +sway +obo +campers +podernfamily +poured +brie +squirrels +seize +:# +lek +timb +stacy +nasdaq +repeatedly +brat +mighty +competitor +mahone +desi +oke +bmw +shie +fcb +cheapest +minimalist +paramount +nate +haras +insanity +lateral +mentality +mozam +tapped +yadav +usp +bway +theod +bilt +raids +empress +adapted +patron +nutshell +agra +beaded +sundaywithmarsha +viking +proceed +maintained +thinkbigsundaywithmarsha +snes +musica +tower +chab +bok +smt +insult +harvesting +window +ruther +beige +decal +indicate +mailing +rift +pole +anderson +choral +spride +lili +evelyn +imrankhanpti +...." +kered +undp +waterfalls +sears +lemans +worldseries +riel +anie +appar +scorers +lamp +athan +physicians +quinoa +refusing +vuitton +unleash +sla +pati +shouts +intentions +foamed +european +neighborhoods +meer +manson +duh +brat +cones +bowl +kazakhstan +ि +inappropriate +delhi +ketchup +fulton +sys +consult +garfield +togo +fml +fled +bds +facilitate +reebok +selfie +elevate +activate +bible +cawx +bys +camille +syou +skool +hert +wbc +pledges +recorder +posh +acre +soaking +matil +vsco +shootings +plar +econ +ðŁĻĮðŁı» +rashid +ubi +ðŁ¤¤ +swinging +wipe +raptor +msu +musicvideo +durham +attic +aparty +fetus +activation +aaz +motivate +ðŁĴķðŁĴķðŁĴķ +jal +म +agon +scheer +stalker +foster +azzo +telegram +vigor +slaugh +screenshots +entrepreneu +kristin +intention +chilli +fraction +dona +gea +tcu +site +lak +emil +dnt +boro +wilkinson +recu +atoday +tanya +blanco +cdn +brilliantly +gcc +acc +evacuated +therine +denny +caitlin +shepard +pouch +handheld +southeastern +haa +ô +resolutions +ledger +srin +rar +shattered +chimney +imwith +meteor +handled +rake +townsend +enhan +shipy +duct +twx +inflammatory +warhammer +theatrical +gros +skar +scotty +niel +tito +tini +connection +_. +goldenglobes +shaq +ðŁı³ï¸ı +hallway +fronts +effectiveness +glaston +dhs +expi +toh +cpl +scs +reo +hag +resemblance +horan +abusive +quer +virtue +cholester +aq +shane +mce +carriers +distress +rewind +¡ +voodoo +intact +anno +ðŁĺ¤ +piled +adia +ãĥ³ +enow +digs +lightly +goofy +turbine +governors +conte +reopen +pah +ive +crafting +sweeps +jodi +ande +zucker +kawaii +oko +vai +outline +kristi +tsn +inspo +quint +filthy +lynne +listeners +departing +ord +tweed +,& +alek +selfish +norther +recognizes +ips +bes +aed +wills +peat +surroundings +monuments +aisle +becker +lav +quantity +vah +helicopters +tucked +alvarez +shape +obey +additi +roadside +mite +blers +epage +jau +ignorant +bins +lulu +xo +cfo +eeeee +apprenticeship +sheffiel +toi +hok +fakenews +deploy +aidan +huskers +ãĢİ +westbrook +mister +configur +carr +fica +proceedings +haw +steak +murderer +payday +ajo +pvc +donates +biaf +nomnom +beit +kali +xrp +ahmedabad +semic +chey +xtra +antwer +headlining +squares +rounded +fluore +bold +disasters +amoo +generic +cranes +briefly +gig +austerity +anticipation +forti +treasurer +canny +cecil +detected +checklist +ว +pamela +barbados +anfield +hearty +txlege +perenni +arrog +ingram +âĹı +tyne +spoon +ration +amba +mbe +camel +hhs +yorkshire +reflective +freaks +tok +judo +particles +dubs +banjo +accreditation +proverbs +overdose +integral +guang +mcs +supercar +afb +alvin +ails +xtre +staging +twent +rabbits +maro +instem +doll +cray +santana +bleach +minions +cheap +mant +divers +catalonia +lois +matri +cougar +kayak +egre +pso +aia +å® +charlton +tracked +scari +pett +fwd +xin +gravel +bric +biggboss +arden +hugging +palms +stv +limb +themovie +handicap +rime +zai +stub +india +lithuania +rhyth +pita +macedonia +highered +bridget +schwarz +skelet +hikes +antarctic +cps +mashup +а +nell +chandra +heir +anus +sheridan +mimi +museu +becca +anir +barrie +diocese +comparable +ðŁı³ï¸ıâĢį +yukon +mep +hormon +meric +alf +conquered +christchurch +ðŁĴĻðŁĴĻ +hazardous +pooh +conting +retrospective +parame +nair +consor +hotra +astonishing +caterpillar +uman +tism +tvs +servic +croydon +morales +cg +cum +teur +scanada +sall +magnolia +elise +thour +ி +agomez +phelps +ë°©íĥĦìĨĮëħĦëĭ¨ +whos +weaving +sisd +proposes +crows +presale +economies +bernardo +shahid +airshow +mccann +horticul +nrl +duel +mongolia +toulou +requirement +structured +edi +olives +hea +cuter +к +enthusiast +harriet +dominion +submer +ðŁįĥ +saab +nesburg +moff +defended +burt +rewarded +goldman +optics +khalid +households +buckets +cecil +chess +substantial +efl +operation +evaluate +stn +recession +lll +tomas +truths +akbar +swords +pact +embarrass +hao +ayurve +scripture +nycc +opt +diameter +scented +organizers +relat +hae +dreamers +dese +ðŁĮ» +restricted +nale +rhp +dolan +munster +haired +consultants +joints +humil +dill +relentless +té +afil +utilities +japanese +condemn +petite +collide +qf +peaches +courier +lore +âĺİï¸ı +reliability +chuk +ðŁĻĥ +stures +gether +hostel +bier +-_- +âĩ +eze +tailo +dient +bluff +chuffed +pilip +monarch +eem +buchan +bick +opau +kups +ย +pistons +spins +mand +cest +burne +vile +cherries +beckett +needles +panch +ëĤ +hahah +troubles +insists +doyou +gmc +mortar +delegate +inn +ganda +sinatra +त +speeding +pupil +premises +alignment +pikach +asus +jalan +ص +limestone +folkl +parmesan +ceil +moy +shawnmendes +acup +hust +otes +medina +madi +gtav +censorship +arg +sweeney +sykes +colo +footsteps +canned +advance +gtaonline +healthyliving +ðŁį¾ +aig +pality +ocs +hebrew +imminent +berkshire +jeremiah +outgoing +baker +entrata +maids +groves +boc +adel +mfw +conscience +armys +nutella +contestalert +novelist +lah +banker +marquez +ðŁı¡ +toff +outage +grp +ðŁĺŃðŁĺŃðŁĺŃðŁĺŃ +muscle +dudley +nvidia +midi +muni +essays +datac +carter +ร +tans +ives +publications +aler +okwx +ilu +cutt +harp +outlaw +lutheran +brill +bolic +dowell +greenland +besties +pathi +payton +guest +harden +ðŁ¤© +anned +evacuation +poised +mcder +bhan +oi +envelope +cid +cavi +tapas +bookreview +greyhound +âĻª +feud +lungs +forte +raider +ffer +onix +depend +ynwa +relating +devs +ðŁĴIJ +acquires +dha +jyo +privati +canine +kb +crab +sardin +imagining +kj +empor +downhill +nez +taeyeon +nickimin +gbp +ൠ+wap +secco +mashed +ðŁĴ¥ðŁĴ¥ +augustine +dissol +dictator +âĵ +viper +edfringe +vaux +hardwork +booklet +nox +chiff +ðŁĴ¨ +observations +xboxone +usher +keer +lup +dallas +calgary +madra +dious +kbs +woodward +heroine +lumber +seaworld +ows +mcke +maverick +gula +crossroads +fang +sade +nikol +cheetah +mec +ppg +erick +ðŁİµ +toxic +bjj +viola +spire +chino +travis +institutional +haas +lowry +wac +eae +humid +mpton +ruck +jew +cine +zimmer +sef +bharat +frees +aamir +ðŁĴħ +zinc +wane +multiplayer +royalwedding +eel +precipit +query +kimberly +isabel +fulfill +igan +vaul +pane +scy +digit +gunn +utah +dogday +fion +xiaomi +dac +elast +chavez +roblo +gine +tenth +abh +keto +hurdle +nadia +memorabilia +habs +quan +hw +hvac +pixar +eccle +kramer +accuses +ðŁĴļðŁĴļ +perse +meantime +wahl +atletico +âĢ¢âĢ¢âĢ¢âĢ¢ +ottoman +novo +kus +connected +trusts +dmv +spencer +rahulg +dove +stokes +bologna +enthusiasts +ê +rockstargames +tedcruz +duras +sacked +latex +immersive +cert +lucin +principals +fares +sails +farn +ament +saffron +quentin +checkpoint +ferris +excur +ðŁijīðŁı¼ +bailey +seh +terre +madam +sband +wanderers +cumberbatch +yyc +digitally +blackandwhitephotography +rollin +moroccan +ðŁĮħ +dinner +dwell +toom +mye +ezra +cpfc +warhol +meer +jonah +noaa +sgate +soon +secular +gating +tio +driver +sissy +assange +tath +edmund +bobcats +raji +postage +studs +mgm +kato +edinburgh +meetthe +shirt +faa +mensfashion +spreads +wim +carts +phoebe +jars +botswana +ÙĤ +edwar +skar +rive +gusty +ctv +ferdinand +sutherland +nickiminaj +kv +sius +beech +rez +desires +onial +campo +quarry +lorraine +gilmore +iggy +µï¸ı +hopping +aviz +ðŁĮº +unisex +dedicate +attitudes +steer +junkie +railway +yb +whisper +keyan +kus +jug +dix +ains +summon +ovich +syed +herald +maison +meded +wildflower +mainland +risky +rukh +overlooked +kic +destroys +naman +kip +zano +championsleague +bandit +quincy +smile +calvin +openings +tapp +olulu +spectro +accredited +apk +praised +barnett +pollen +premiered +selenagomez +toured +screenings +uuu +miso +ense +adamlambert +guelph +haryana +hutto +lear +ltc +poached +brexit +æĿ +ttc +pavement +mongers +roe +aders +lington +participant +cared +gail +yates +lantic +dashboard +joo +felipe +ssionist +bum +send +aeri +thugs +lucifer +ahe +detector +filly +gasoline +hamper +humpday +theta +theband +forecasts +ohhh +lobb +holl +cpu +azu +adar +hailey +bub +cart +quoted +anarchy +pancre +twitart +alden +stash +theless +orni +beliebers +mormon +particle +aviation +â¬Ĩ +webcamtoy +saddened +cruis +hamlet +nct +rollins +marquee +sawyer +reliance +aura +diec +soothing +signings +akis +ó +atkins +aerop +ðŁĮ¿ +yab +shari +connol +dubbed +manufacture +convincing +feelthebern +rau +pulit +onec +gemstone +urging +bagu +gah +acids +fianc +zodiac +snoop +herrera +initiated +venge +professors +prodi +stronger +emission +bba +halle +tapp +hawan +whim +competed +myrtle +irport +coldplay +ache +skep +mson +ssic +calligraphy +swimmers +mey +ppc +thrift +poc +replaces +commuter +âģ¦âģ¦@ +goers +logue +paradig +baskets +sensitivity +johan +atlantis +&& +suitcase +anxious +lh +stri +galloway +stread +warden +grounded +fficiency +lifeat +relic +disguise +islanders +fcofficial +classicalmusic +bmc +enfield +bique +oakley +batman +slaying +nerves +multit +calcium +projector +scottsdale +antino +grips +kimmel +desmond +protestors +hiatus +metabolism +concluded +presser +tipping +slide +eto +hunting +ausopen +rik +ppery +innovators +pitchers +agger +fungi +zad +prolific +rocknroll +blames +ctar +stamford +qad +mozzarella +insanely +denver +phouse +nomad +ï¿ +sris +produ +henley +pagan +amtrak +rubi +incl +tutor +scotia +woes +singapo +funnel +turnbull +knowledge +grimm +realmadrid +weare +missiles +consol +emojis +sneak +smiths +ruiz +brou +iel +haver +ðŁĮļ +kingof +basilica +circulation +printers +tapping +ridley +dragged +haj +writer +fundamentals +personalities +metre +stereotypes +burle +bestof +nffc +hath +ministries +aali +tracing +paved +łï¸ı +gic +inspire +tug +hare +repeated +expon +lolli +rhode +precin +installations +instagram +azar +ies +solely +dukes +missionary +vanguard +fursuitfriday +ond +polari +mast +haran +josé +jacked +ecoun +alities +neph +ravel +moderated +scow +sfb +uruguay +aso +nig +audu +pints +latina +benz +mitting +charted +matology +citro +biopic +ðŁijŃ +djokovic +foxy +aguil +soto +anada +sinking +scrap +hairs +bethany +factfriday +ðŁIJIJ +unleashed +)( +contradic +ramon +coastline +yong +snsd +ligan +pome +mitage +gett +wati +risk +soaring +brush +fpl +avan +åĨ +larson +shear +multil +blur +multimedia +chunky +pari +nani +weird +cholesterol +charles +dreamed +tanning +puzzles +fram +handball +chag +belize +alu +bangs +ÑĦ +detectives +mcg +ishq +bothered +safc +mping +teneri +gays +sailor +angi +multicul +guessed +rosé +highways +broom +chattanoo +-' +seeker +oned +atf +luc +>< +bari +percep +jewelry +asph +sorrow +sling +mammoth +jackie +ë§ +wiltshire +sao +cancell +impaired +torial +breed +guyen +judice +title +prospective +applicants +ðŁįĬ +episcop +eid +byo +stockings +ðŁĴĥðŁĴĥ +llp +snag +keepit +lough +olson +maturity +!!!" +copter +isha +bli +wilmington +tryouts +thai +ðŁ¥³ +pebble +kraft +fp +º +ssively +livin +contestants +textures +joan +hdr +filmfestival +provence +wido +opend +csi +stown +croati +adjust +hostile +analysts +ilan +cuppa +brum +newfoundland +goodwin +mett +mallorca +plugs +buk +bbhutto +wrestle +saire +shopped +forza +lehead +vivo +bast +roxy +regis +hardworking +honolulu +despair +youngsters +nig +impromp +rolltide +deemed +treason +rushed +forged +fff +pikachu +briggs +doit +accent +laus +glaze +competent +aho +photog +midfield +lego +harvard +minorities +reilly +sliced +onceupon +initially +financially +landscapephotography +hardro +quo +mmers +parkinson +smugg +readiness +brutally +gloucester +mped +bbhuttozardari +murder +yed +dataviz +srt +downing +bians +mü +fleck +flipped +sly +brilliance +rim +kum +bubba +koi +knitted +sorg +mais +ðŁĮ² +tiss +sustain +sensu +akhan +ziest +examines +chardonnay +username +shortlist +rebs +ono +daring +hardwood +cheque +righteous +lightening +dirk +shradd +dura +downstairs +shal +amigos +ruff +slaw +ries +rednation +manus +ðŁĩ§ðŁĩ· +distinction +ubun +duran +migra +thians +laver +domestic +kx +jazzy +justify +belonging +insulation +colorstv +drunken +channeling +quand +xiii +enlighten +kano +fatima +teenchoice +terrified +pba +asley +metmuseum +dune +packer +kio +ðŁĴľðŁĴľ +boiler +fascism +armored +backgrounds +inmates +embarrassed +defines +thd +wego +silicone +loon +elding +borrowed +hemp +aksh +kawasaki +bry +deaf +killer +disposal +ðŁĩ° +glastonbury +uncovered +oxide +poff +dant +kj +kuro +drizzle +peoples +fee +propri +ddlovato +piggy +otis +allergies +ubis +penguin +sera +viz +prosperous +icides +tornadoes +senegal +webcast +stored +enchanted +bbcone +bayarea +entrepreneurial +rednationrising +experimenting +angan +lotto +theyre +pore +erp +serene +eastwood +brokers +barge +stallion +timberlake +tailored +dystop +bate +lators +dixit +branson +dynamo +kylie +shameful +btwn +springtime +mixture +sounded +luton +dades +mala +opra +enic +rahulgandhi +sewer +~~~~ +kyu +northeastern +caer +bcu +nirvana +kitchens +ousy +alm +riverdale +hidden +flint +spd +patrons +katyperry +augh +exhibitions +smc +shuts +atore +dain +something +berth +bog +porter +gento +concussion +anglic +rowe +grilling +scarlett +mastering +mornin +commented +sime +sizing +christy +ceos +stm +atry +tariffs +vacation +prejudice +psu +parental +farage +cana +capcom +kosovo +youre +menstru +stalin +grapefruit +bran +chesa +daven +excel +!!) +à¹Į +distributor +cea +bridesma +millennial +wain +observing +misery +planetary +exposing +braised +compton +dongha +ql +springsteen +thul +sylve +cabo +palad +nielsen +gazing +baja +roud +orchids +johannesburg +seman +dji +operative +affection +eclectic +atc +mutant +awx +nice +melbourne +indulg +tulip +diaspora +welp +biggie +mississauga +retriever +oran +tammy +cta +hippo +seasoned +germans +engv +marvellous +imf +relays +montan +mauriti +meister +assurance +reigning +sufficient +hane +nothing +posse +navy +inlove +brighton +enqu +chung +sweaty +esc +caled +mans +nicaragua +slices +mocha +washingtonpost +bbn +damned +growing +enburg +loan +mes +whoops +believers +spiel +vodaf +lat +sled +cricketer +browne +golfers +barra +watchers +luigi +swamy +moms +pitched +santor +crs +sire +scamp +bode +stewar +jonny +entity +pacqui +mindful +minindia +bearded +tempt +scorpion +eaton +authorized +arto +svp +opathy +cchini +housemusic +disneyworld +âĢĶ@ +propose +diy +expense +teng +puppets +smel +daca +perry +finn +boosting +leftovers +cougs +satellites +many +aze +gong +fie +methodo +ferries +ðŁ¤ĶðŁ¤Ķ +explorers +loader +attracted +ilton +goddamn +piazza +doctr +saving +paragraph +visualization +mayors +workflow +ackles +ðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤ +स +twerk +clut +lover +teases +sian +ote +deterior +accord +lfw +swarovski +natal +traps +kina +analyze +layered +beverages +unit +ransom +peshaw +destined +astrology +sipping +mileycyrus +camino +marshmallow +bliss +outback +faq +intoler +humility +poppin +halloween +montene +ophy +nun +tattooed +aas +ðŁĮ³ +daley +quality +dusa +fishermen +swif +terrac +stau +lein +trolling +shipment +gardener +marchmadness +headband +grt +burnett +wand +!!!!!!!!! +ghe +dux +hud +warner +ðŁĩ¦ +exile +rescue +rata +dhan +ducati +drown +blends +spie +alligator +simultaneously +brooke +uke +khar +communion +rika +fordfc +chinatown +yourown +mey +canal +systematic +depri +oxford +anil +wut +equation +bez +fleur +thegood +langley +adity +edith +alfie +оÑĤ +encry +brill +exemp +cesar +mbling +abri +scicom +jing +schooling +mika +mechanisms +impromptu +rhea +moore +crimea +besto +wright +elders +rods +kamal +folklore +beet +minion +relieve +thro +teamusa +pascal +madewith +bolivia +itti +freebies +desired +bestselling +liness +laden +keane +mists +hippie +attachment +@/ +sew +flanagan +âĿĹï¸ı +supremac +stlcards +sias +qu +rhys +steep +valleys +vw +paving +dispat +alison +porte +idu +newsc +socket +mos +costar +revo +proteins +stanleycup +mcal +earring +secs +mclean +capric +nickelo +aden +vc +shouse +adaptive +maximize +entertainer +prose +griffi +sixteen +lamar +mirage +saudiarabia +aweather +rust +infiltr +fashionweek +ðŁĺĬðŁĺĬðŁĺĬ +selective +bubble +aden +fennel +decisive +mta +mocking +mbles +stamp +mule +bernardo +grin +pott +jingle +vettel +colombian +camo +motivationmonday +bahan +ply +dhary +kami +xmen +sleeper +gara +mysti +confidential +conflicts +pneu +ces +insurtech +cleanse +merely +vais +tux +thegreat +sharon +maj +hola +ecosystems +ajay +aaj +hush +harmon +backtoschool +wikileaks +reflected +ðŁĺĵ +commemorating +acet +buckingham +messiah +tuous +hornet +tobe +dq +heine +mig +plate +nicholson +spie +cumberland +normal +phobia +happyhalloween +cityfc +mcel +gillian +keto +lude +demise +suga +strate +mcgrath +visitscotland +fooled +cbr +gcse +colori +potd +missuniverse +finances +mapoli +forks +Ø´ +cannon +medicinal +ðŁĹĵ +kho +wreck +panto +bagel +gull +syndicate +icy +prc +kien +zika +tish +peta +cco +liza +chut +extraction +elg +gli +fueled +posit +respectively +leicester +brink +vulnerability +imported +esha +ðŁ¦ħ +rural +rell +gaming +atlantic +abandon +noah +resolved +prostate +allergic +psd +âĺ¹ +dungeon +fangirl +illuminated +mhs +whitesox +dently +cko +endorse +overly +dazzling +prioriti +nightlife +util +behave +flamen +eastbound +ðŁĴŁ +iloveyou +govuk +mozambique +allegi +dri +testimonial +aths +ì§Ģ +mmy +shabby +prosecco +friendships +calam +damages +offset +jurassic +juno +arrell +ðŁĴ© +interventions +daredevil +carver +runaway +rane +trustees +haute +depths +ðŁİŃ +mein +sacrifices +concier +nesting +izzy +metam +ilovemy +urine +dulu +malhotra +veins +nightly +coat +andi +hewitt +lonel +cible +write +jennie +santac +ĸï¸ı +strato +singapore +soprano +kristen +cheerful +fleetwood +fairi +meli +wast +turnt +sforsale +scrolling +angelina +rendition +jericho +nicky +orb +flavo +patriot +asheville +sickness +refund +aggression +bpl +ãĥĥ +elusive +thistory +hanger +buffs +villas +atkinson +sph +jait +declined +wok +supremacy +ootball +eyang +ðŁİĵ +sford +athi +consume +roadster +eso +upro +recipe +auf +uci +aron +oooh +csgo +reich +mcd +minute +ladies +punk +rutgers +meek +arizon +taj +landlord +degra +autumn +lynx +usf +bhi +fairytale +donghae +betsy +exploded +chennai +opa +protag +brant +ðŁĵ°: +gf +palli +ðŁı¼âĢįâĻĢï¸ı +sut +illini +columnist +shirtless +decentr +searched +ecor +buggy +sack +ðŁĺĤðŁĺŃ +det +theri +ornaments +bringback +tov +quarterfinals +iche +constra +gier +buchanan +vix +kayaking +mustread +swallow +melb +scaf +opal +mayoral +harat +ðŁ¦ĭ +schedules +idf +hague +roz +aah +dmc +duplic +cache +orphan +fracture +recon +chav +bunnies +alain +mustafa +ðŁİĻ +vacations +dynamite +texted +broadcaster +ðŁĴ£ +steamed +rocker +dietary +luxurytravel +inaugurated +sawards +vaughn +lincolnshire +clicked +kraja +fanc +removes +layoffs +mcfar +breeds +winnie +jonghyun +incentive +variations +patton +aturday +persistent +prun +piers +dales +æĸ +breastfeeding +rance +tawa +Ĥâĸ +murdoch +captive +thistle +nica +commodity +couldnt +boardwalk +gracious +practitioners +ngc +scrum +nero +camouflage +colon +hei +physicist +saturdaymorning +tener +siwon +columns +brune +yvr +bair +retires +halam +caber +shazam +minu +cascade +milkshake +grid +dren +vincent +sodium +platter +cheerleader +chenko +yak +eliminated +typo +yman +rethink +âĿĹ +tsville +bernardokath +extr +ðŁĺģðŁĺģðŁĺģ +tao +reper +moths +empowered +citing +transported +monks +sanat +clears +bachelorette +campbell +rachael +harle +handler +climbs +interference +release +shand +rbs +hrh +ãģª +valle +ré +slime +wakes +chubby +sloan +elves +athen +attorneys +microscope +stoner +scaling +obe +cout +seman +midweek +balsam +ðŁĺįâĿ¤ +tiful +vish +lotta +ripping +remn +tire +leap +havent +laby +himach +whispers +wein +ðŁİ¸ +wildflowers +sele +ucc +liability +azine +swings +kya +tair +remain +edo +flops +pocket +grandad +examiner +gris +ffect +ðŁijĬðŁı» +studded +heartbeat +deacon +firmly +infectious +stef +outlines +leasing +claws +sense +tabs +hoot +mosul +spawn +coa +hogwarts +vein +albania +manuel +bino +vauxhall +scotland +gobucks +matty +physio +torino +constable +investigated +slower +mistaken +bayer +wildfires +voic +xon +timeto +chassis +barric +pion +baldhead +wook +registr +drafts +bhs +ligue +lick +staffordshire +bafta +darry +jeanne +vending +corp +âĽ³ï¸ı +kiddos +fenway +cao +westbound +ðŁĺĻ +dvr +quicker +blah +goodie +ðŁĴĭðŁĴĭ +vox +esper +facade +correlation +redbull +roup +declining +chive +mcgee +turo +inder +feller +fug +ilysm +mardi +peshawar +kieran +inema +meatballs +peck +depressing +sensing +giz +ddington +springwatch +roaming +yellowstone +horseshoe +amman +weekday +olor +ðŁ¥° +boosts +sprint +scarves +jee +beetro +clan +allthe +ìĦ¸ë +enlightenment +adobe +regeneration +?@ +contag +yachts +tou +mora +envoy +rani +goli +dhanushkraja +woodworking +strengths +sedi +discs +arina +scon +lite +another +ðŁ¥Ĭ +yemen +guern +savvy +loyed +biomed +heartbreak +comrades +millie +patch +unf +jarvis +blaming +commemoration +gey +å¥ +cardiovascular +aligned +document +.? +aesthetics +emu +theirs +leh +psic +sif +plateau +expend +dominating +robes +mauritius +exceptionally +homer +discoveries +braun +tennant +insulin +ðŁİ® +carbs +teas +?!" +zie +francois +browsing +thol +clarence +helper +obtained +cassie +lees +!, +pomegran +hubs +prestige +][ +macher +bottled +punch +pipe +och +gallons +deliveries +ura +unday +monde +depicts +regency +outrageous +khaled +caro +hearti +zag +developmental +overcoming +statistical +flavored +fords +creatives +laurence +dias +sunscreen +inked +preacher +nul +impacting +autistic +âļĶï¸ı +oss +pelicans +celeste +vb +rump +mcgra +fairfax +humor +bbcnews +rowling +calder +seamless +agne +pti +mixed +tshirts +merci +btob +womeninstem +genealogy +preven +lour +cradle +giuse +о +chrono +fairness +chocolate +tory +asda +prescott +stretched +alman +uil +recharge +intre +obst +hospital +hayward +tenerife +friedman +vaping +confessions +yeah +balli +lucknow +corpse +sculptor +ampton +tpp +indicates +surplus +truman +ðĿĻ +sinha +invo +sovereign +kev +establishing +engraved +assuming +ðŁıģ +souza +fabi +toned +ounge +deloit +downey +noble +omor +cartridge +ðŁıIJ +uhur +holloway +successes +rsa +âĦ¢ +mazz +twd +discourse +.< +yat +satisfy +compri +ह +graphite +dissertation +arter +íĶ +bally +zombi +lyons +aic +ubc +prada +eil +dax +clai +granddaughter +extravaganza +challenge +ðŁ¤ŀ +pover +primarily +daddy +mana +bikers +inquiries +daun +feline +generative +hef +benefiting +lindsey +polka +demonstrated +alle +randy +osu +lowkey +weirdest +redbull +oury +nous +woodstock +credenti +nicer +gado +alyss +aph +preparedness +stationary +incorporated +dyer +saratoga +celesti +:" +antibiotics +orgs +indefin +apron +иР+fifteen +nof +ðŁĶĿ +phx +tega +mz +organizational +onair +bandung +pleasures +mori +secretari +raccoon +cashi +pilates +kon +geoffrey +lao +kamp +departments +backpacking +anam +ë +crackdown +aunty +ondo +lizzie +phers +cun +ðŁĩ± +kpop +put +intentional +connolly +barclays +hsfb +swindon +uku +sally +aint +âľħ +penang +uplifting +epilepsy +interro +bungal +goku +blueberries +द +ussia +silky +moured +istic +briefs +meats +gob +chaser +statewide +prasad +glitch +arin +banff +member +ðŁĺŃâĿ¤ï¸ı +loving +halla +ม +smokers +yaku +scicomm +physio +swol +lemons +gelato +chool +capitals +kistan +tights +spikes +travellers +iklan +commissioning +arine +emabiggestfans +emphasis +frontline +paddock +destructive +baha +linger +jewish +shetland +mcgin +monkey +koz +sone +rajini +teh +yen +cvs +masquer +girly +wesle +wasnt +brody +terminator +gille +maggi +birdie +jeopardy +cubic +vmware +intricate +anup +topia +easton +sabres +investigates +busting +bilingual +valentino +informat +ferre +adventur +hydrate +forsy +aziz +santo +ede +whistler +continuously +dham +unused +jihad +addictive +vidy +dob +ido +fied +niversary +none +fuer +ðŁĺįðŁĺĺ +covenant +printable +immaculate +oem +clt +servants +consumed +unreleased +scum +packaged +mere +ìĦ¸ë¸ +toby +taf +spoons +meal +fball +fairfield +janet +silverstone +dartmouth +followme +voyager +kombat +anniver +enew +magdal +hove +sath +grizzly +cardi +gartner +sandy +kanye +posture +poign +impulse +radiology +horizons +siam +aishwar +==> +noche +tris +elyn +comme +dui +cec +councillors +cuddling +creeping +locke +manages +transferred +necks +dier +dano +vick +lunches +dhe +ensures +criss +ulster +bannon +contenders +spam +sweetness +medal +honduras +arctic +ultrasound +infr +discovers +eiffel +casters +ruben +dust +aweed +atrium +lestwe +seared +ðŁĵº: +tyne +exchanges +littlemix +lle +astronauts +hershey +workday +knob +sov +resigns +todayshow +derman +anth +afc +taster +swoo +saeed +pering +narrowly +rnli +bestbuy +panasonic +obstacle +farmers +ðŁİĻ +pawan +kiest +angers +absurd +ohmy +sino +pistachi +spice +giuli +primetime +kow +kens +exagger +!?! +uba +middles +judd +ejec +slammed +pensions +ofa +recreate +bhp +xxl +liverpool +thresh +purity +nieu +holics +wrath +rado +glio +amma +dilemma +cru +letsgo +....@ +âĿĵ +suggesting +trumps +horus +fv +icom +referring +predictive +tarts +gette +sock +glossy +pinky +alec +thyme +oura +theroad +petr +cram +pfi +dvn +meier +incentives +tunnels +mobil +recap +extras +upright +revamp +perseverance +,- +otp +mirror +arwx +gerry +maher +gor +homepage +amis +agra +madele +bestfriend +siriusxm +bundles +admiring +tdsb +ðŁįģ +chas +slowing +roh +wallpapers +âĢ¦/ +tekken +gangs +tala +lindsay +shoul +linebacker +toolkit +uranium +calyp +abrams +matthi +ðŁı¿ +honourable +dayo +versail +tank +stc +fritz +splend +patag +annoyed +onday +devastated +chattanooga +nationalism +massey +jenn +tailor +devgn +organs +zucchini +onfox +satire +wexford +disgrace +noto +volta +âĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ı +ච+homeowners +pointer +mcr +austen +daysto +moons +palma +grazing +eso +influencers +shahidkapoor +compliant +measurements +develops +yd +parl +pvt +randolph +tortured +gerald +elias +deepikap +warmup +hickory +gap +coffin +amour +reneg +mounting +sevens +igle +hier +decad +tright +escapes +werner +tfl +fulfilled +niger +sourdough +reaper +chooses +spinner +weeknd +filtered +shuk +kati +oldham +opensource +khanna +atelier +connec +ophobic +glas +complications +arson +councils +smol +assy +lurking +lingui +hanks +ein +Ùħ +rugs +nguyen +nouveau +menace +lev +aladdin +ruining +roundabout +km +conor +shoops +mayday +traumatic +prabhas +kaiser +kita +router +pedro +retar +stunner +spanish +disturbed +academy +elearning +witty +seng +feral +avy +stab +keaton +urdu +koto +hui +cooke +arian +thepersonal +uma +seap +asting +rhetoric +handwriting +municipality +consortium +ðŁIJŁ +glasgow +raya +eliza +polymer +broth +practi +correspondent +addicts +gayle +ailing +ofe +pli +heartw +stitch +sightings +priests +samo +sloth +goodwood +rocco +sabc +summit +lace +presley +itten +cincy +thepersonalnetwork +sweek +pegas +afcon +registry +cim +leth +dicap +candice +fluent +smack +pedestri +aloud +carac +priyankach +pgh +irons +dolce +latvia +deceased +therock +clap +cene +foam +morrissey +gret +essentially +comcast +beagle +argues +inged +-âĢ¦ +sag +hasan +ðŁĻĨ +ðŁį° +nhra +kannada +indicators +oner +brixton +atas +screenplay +sorority +shaheed +heem +classmates +tainment +esi +breastcancer +zuckerberg +auror +encia +refers +kaeper +vortex +compart +lymph +photographing +steff +restling +parsley +momento +thman +lacking +dutt +oculus +fino +frenzy +rasc +dern +dismissed +nook +metgala +shill +raphael +mavericks +exhibits +eagerly +cpa +amenities +.âłĢ +exodus +ernst +lita +dealt +womensmarch +iain +scoreboard +campeones +cen +tiki +garrison +fidelity +brag +roadmap +psychop +loe +bleu +ðŁijĬðŁı¼ +sauvi +springer +temptation +rudolph +acura +wicz +parachute +strol +lenny +zik +doms +nbaf +alpac +vivian +rove +preet +perpetu +snake +airsoft +inflatable +princes +atie +ffey +patient +mire +chelle +slack +groovy +#: +uploading +!!!!!!!!!!!!!!!! +siemens +provision +vfx +needy +fats +topoli +bhutto +sathletics +alums +twinning +southwestern +adopting +lastnight +manne +laga +twell +acia +---- +eyewear +hurley +flee +sach +pecker +costly +isk +crates +policy +erosion +ingo +werk +ðŁIJį +tortoise +therapies +internet +chihuahua +rips +frei +edor +taiji +tfc +dod +dempsey +christin +cheng +hips +graeme +compassionate +cavaliers +historic +soulful +criminal +jac +vinci +expired +surat +turismo +kona +seaweed +berts +leica +expressing +aal +wort +breakfast +herring +amused +rhubarb +martian +cosplayer +yash +strial +raul +referral +dwts +jw +adler +curtains +gur +valence +tyrone +swfc +coached +reborn +diabetic +choke +norfolk +investigative +ðŁĴ¯ðŁĴ¯ +zid +vmas +phie +objectives +âľĭ +overdue +divers +matsu +ðŁİŁï¸ı +casualties +ว +alk +standardi +realist +artifacts +pandor +kex +invin +(!) +iney +paraly +mrt +faye +thevoice +onga +deed +skinner +azwx +specimen +priyankachopra +nuevo +barkley +toulouse +resumes +footballers +citi +fetch +ère +lestweforget +ðŁĻĭ +chunk +drifting +manipulation +equals +putt +kyungsoo +âĿ¤ï¸ı# +elastic +parano +foy +doping +cincy +ssler +interrupted +alay +adores +amethy +convoy +ãĢı +Ĭãģ +blacklist +generals +sachin +brushed +ounces +nonstop +illiams +btsarmy +uav +ruff +burma +bik +defence +schultz +boasts +loneliness +gore +transforms +alumna +@@ +rappers +nehru +caro +himalayan +wearables +geh +peppermint +redevelopment +flamingo +cosby +bigbaldhead +agri +barefoot +scopes +regram +ghana +ðŁİ« +iheart +sadie +carrie +microbial +kuala +skater +querque +âĻ© +genres +reasoning +chased +aso +slipped +encan +vamos +kers +adverse +moil +commodities +withyou +silent +hype +ande +amination +whispe +litz +âļ½ï¸ıâļ½ï¸ı +riff +ppy +lambs +ganesh +absent +regulator +marseille +enroll +parcel +wap +byrd +ðŁĩŃ +tuber +countrymusic +parl +controllers +responsibilities +wey +chate +montenegro +chico +milan +lms +trainees +appropriately +uncertain +poppies +edsheeran +nutritious +garo +deutsch +awesome +ãĥ¼ +comfortably +landmarks +eti +reusable +danielle +rosal +coles +justic +ccs +fanny +nim +mcu +clinch +atene +merge +imdb +anglo +uccino +panini +annot +burberry +feature +predicting +fashionista +sask +imaginary +mmo +southsudan +spear +hubble +jointhe +coyotes +sligo +kodak +sitcom +polaroid +rooted +corrup +ðŁĻĮðŁĻĮ +brisban +atz +ahl +remy +talent +avalon +rada +pauline +locomotive +goons +nemo +maserati +icu +stutt +historically +smb +presby +avoid +sooners +rhinestone +wad +rising +trot +modes +regent +optimize +reece +smu +verti +newyorkcity +cortez +rac +incase +sinc +fielding +etta +tiffany +almonds +saddle +krat +matter +glow +starving +glo +crappy +slur +std +monitors +receipt +maymayentrata +mcil +unis +rainbows +caldwell +pacquiao +jop +afe +hook +essen +wizard +median +flaws +coms +âĿĦ +ingh +haynes +antonio +templates +outer +naw +cardigan +belgrade +ðŁĴī +homo +aise +ropes +nove +whatyou +trigge +conception +adukone +nadi +friars +swer +adjusted +hotline +sanity +kaur +downloading +cgi +tenor +ethnic +appalach +ุ +pag +golds +onset +investigator +cartel +peacefully +jarrett +catalan +polio +num +frustration +dharma +mylife +âľĮðŁı» +aberdeen +musa +binder +sparkly +fleeing +instinct +coping +dominance +illers +era +uconn +looms +livingston +gali +hes +cma +bela +seley +monk +lach +marx +´ +merica +womanin +essex +raina +jimi +neptune +zack +chinese +martins +chandelier +hern +withus +earl +asphalt +modules +stp +ulla +psychiatric +mileage +captivating +sider +mento +mort +trance +talbot +abby +ìĥ +âľĮðŁı¼ +jak +dawn +turnup +screwed +feds +blueprint +ðŁĴĸðŁĴĸ +harsh +eros +insomnia +bankers +taemin +misconduct +humber +gidi +eduardo +cona +muscular +consuming +rash +donnie +dipped +collie +samuel +meltdown +ðŁĺįðŁĺįðŁĺį +mez +examining +schwartz +pristine +ðŁIJĿ +veit +fulfilling +anesthe +guesses +draft +somme +solid +pational +hoped +evolutionary +aller +entertained +slips +ludwig +concludes +sensible +bonnet +craze +tras +hazards +constantine +edics +startrek +toc +occupational +incheon +deepikapadukone +pizzas +newcomer +depart +oppression +ebony +fossils +trojan +elen +steaks +khou +positioning +ugby +redcross +akh +dolce +usmnt +ppen +dilig +mavs +caller +costello +âĽĦ +dyn +things +rhinos +axi +sarkar +convocation +atters +ssss +fungus +eugen +russo +squat +wsb +elion +williamsburg +soff +deficiency +bearer +okin +keystone +twain +calming +breakable +wares +horseracing +combs +bunting +uit +tland +ðŁĴĻðŁĴĻðŁĴĻ +gastron +sabot +ickers +commissioners +senate +iiot +athena +nitrogen +antony +erotic +dialo +missou +hypocr +âľĪ +kaepernick +canv +droo +cleveland +osh +monsta +stefano +^) +shul +poison +hae +commercials +maul +nitro +coworker +aloe +vapor +tents +russian +quid +questionable +midget +poker +girlfriends +sinthe +eritrea +tenure +deposits +buckeyes +spotter +theodore +trinity +joaquin +ucci +followthe +cafc +mpa +ðŁIJ» +plotting +domino +taek +sionally +dicaprio +pap +carmel +iger +btcc +bethle +wwwbigbaldhead +foodie +baghdad +masonry +offended +à· +à¸ģ +scro +verses +orient +arches +piyu +knowyour +gree +takers +guard +dishon +bucketlist +bhafc +wardly +ðŁİīðŁİĬ +leighton +pew +stray +assaulted +inhal +lyfe +amarketing +lx +katz +ubuntu +meo +cartoonist +turnover +miz +dislike +mullen +mof +bland +hides +emerges +chorizo +trustee +mahog +lansing +paralympic +faint +fauna +chal +snar +cath +benton +castillo +slippery +apricot +oecd +baro +lz +heming +clowns +coworkers +peruvian +commuters +yell +ðŁļ´ +undering +vj +ttp +flipk +wana +socent +ĤâĸĤâĸ +à¤Ĥ +oosa +jagger +dism +eless +dham +calif +aofficial +eclip +harrogate +grapp +comrade +ntr +concentrate +thighs +bitcoin +belarus +ëĵ +enduring +nowwatching +industrial +pip +aron +arat +® +whitby +ooooooo +saree +ticals +misleading +yoon +years +sleigh +romanian +scissors +vampires +acup +abba +thweeksary +centri +flye +uo +cbi +buena +sind +marino +burr +rebuilding +ल +anniversaire +acca +ðŁĴĢðŁĴĢ +getting +tulips +wolfpack +âľįï¸ı +morethan +takin +ðŁ¤ĺðŁı» +ube +monic +doubts +mower +cobalt +donne +speculation +arguably +kaku +https +prosecution +dinah +stamatic +disclosed +beverly +flwx +crabs +extraordinaire +warmest +imperi +ologists +traces +parc +lakeside +amr +teri +hourly +domination +arrow +shrewsbury +ancestry +wrangler +triggered +pensac +rooster +survives +aon +boko +valor +loveis +lag +pey +focal +outlaws +blanc +articho +wits +marshall +diego +supportsmall +uca +sah +jeet +synago +governing +ðŁĴ¬ +salads +create +miriam +censored +amide +nou +zeta +allegiance +*) +blm +rican +pastors +olympus +bloc +whirl +starry +prone +yk +pne +congratulating +bev +sober +loveisland +sair +aning +tutorials +qe +lund +inist +clever +taxpayer +aliz +wrench +ddling +capri +hpa +ðŁı»âĢįâĻĤï¸ı +naj +oj +futuristic +jellyfish +ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ +celery +plank +fila +neme +unhealthy +lections +ðŁ§¡ +ritchie +nws +mikha +wonderwoman +âĢİ +hipstamatic +kag +ðŁĴľðŁĴľðŁĴľ +poultry +mow +words +loff +ðŁ¤£ðŁ¤£ +relatable +remixes +kenyatta +kem +resigned +fod +straigh +jlo +hutch +boxers +colleen +mags +instructional +kol +attracts +prag +accountant +goggles +bru +thole +marrow +leuke +octo +ponds +bubbly +heist +ìĹij +imp +ahar +haunt +hallmark +psych +kkkkkkkk +columb +jumpsuit +costco +sidelines +aggies +overturned +nib +keychain +fuk +faf +miam +assistants +cycled +rider +dammit +redwings +mages +kins +ìĤ +hod +sont +caroline +"' +cule +braid +felony +arities +rutherford +depiction +isabelle +roach +kday +fifthharmony +emy +ligam +barista +albuquerque +gross +ðŁįº +ooks +ðŁij¼ +duncan +tryin +jags +gould +litho +âģ£ +аР+sammy +tung +casser +apolo +aaaaa +mang +asics +shen +pye +turbul +ssp +saintsfc +onlin +nanny +hester +doz +à¸Ķ +thread +rents +khand +ðŁĴªðŁı½ +unconditional +robson +carre +phon +sacrificed +£ +autos +parker +oca +login +keegan +hardcover +doughnuts +ðŁĮİ +spitfire +refreshments +saskatoon +commodore +jf +rubber +halamadrid +childcare +strada +iom +rik +dakar +thermom +cropped +garu +alik +veni +ift +sika +rituals +zul +ech +© +sudan +lland +ime +docker +ì¤ +feared +fao +walter +nog +mutuals +lh +align +monia +conceptart +ðŁĻıðŁı¼ +scoe +competence +swine +lyme +launch +greener +abstractart +inquis +granada +gaelic +fluff +dbacks +graveyard +babe +academic +adventurous +johann +~! +bibi +|# +plings +getty +asb +âĿ¤ï¸ı@ +staff +religions +bangor +worldbookday +megh +devin +ashore +meridian +github +quiz +allstars +bestest +irresi +acker +dote +warrington +polly +neworleans +crou +wigs +chey +smithsonian +lasag +detour +boris +straps +mariah +intentionally +koh +ðŁį¸ +ssian +marissa +coral +episcopal +casualty +tomo +supplychain +samp +ongo +roo +caviar +pfw +claudio +buffalo +sations +matty +snapback +lds +alarms +matte +âĺĶï¸ı +conditioner +dors +hex +fizz +astri +sussex +security +qaeda +allstar +cocacola +asone +clicks +scans +mute +heavier +ðŁİ§ +âĺŀ +lvl +bookboost +youtube +flashes +fjor +csu +explode +dodge +cairn +gonzales +thill +pelle +hartley +renewable +retin +estre +costarica +shipyard +ncfc +priya +aghan +anath +plugin +corey +rebound +oru +katrin +hormone +gim +mahindra +ssus +parkland +harper +fantastic +inferno +epilo +wrestling +fect +cit +acoun +tossed +monumental +chartered +bust +petra +âĮļ +wildflowerhour +sweaters +*. +bler +atech +gowan +demographic +bral +suicide +renovations +vuel +sinister +armani +misogy +pharrell +naps +uniting +crusaders +corgi +insured +thani +noor +gq +dada +bicycles +snuggle +schan +tenberg +ssal +femme +boil +½ï¸ı +reap +occurring +hussein +divid +stoke +shalom +naia +olic +frustrating +Ùĩ +igs +grover +scenarios +nds +brutality +medalli +buon +sass +skateboarding +onyx +lorry +nyu +gautam +mmings +gug +endi +lothian +commando +chalk +phora +assessing +tigh +crunchy +aday +isl +ciara +pilgrims +kamal +pto +britanni +tani +smc +lure +appstore +aby +golfing +clc +fau +anas +shutting +regulated +carnage +scowboys +allenge +cma +humboldt +relle +kumb +heri +refinery +soundcheck +dwayne +bosnia +isp +thealth +anniv +relevance +mya +baggage +dread +sbc +thed +buh +hijab +loid +kew +cte +respect +lovelies +cubes +celebrate +dirt +savers +_, +garment +pulitzer +masjid +beatport +alarts +encryption +sner +pleads +foundry +symmetry +rumi +birthplace +scallops +supple +pivotal +tati +node +sod +proxim +trics +coldest +brent +mandu +clair +each +andalu +hiddleston +ðŁIJº +melts +vance +pinn +sements +screened +sachs +obl +icha +âĺĺï¸ı +schoolers +healed +logged +ðŁ¤ĺðŁı¼ +icus +boredom +bish +bffs +talking +suresh +hookem +deon +defl +eileen +ðŁįķ +womenintech +risotto +ranger +advertise +à¸ģภ+telly +lago +dartmoor +dong +skates +logo +unner +mailbox +masala +looooo +amethyst +chewing +cbb +australians +rcmp +gameart +#... +korn +extremism +fruitful +ancient +pubg +polite +whit +murals +mgr +lineman +davao +stems +tennis +avage +tupac +gigantic +hsbc +autobiography +upthe +ีà¹Ī +regal +figuring +kul +missy +hoop +gras +forums +backlash +abducted +pnw +minic +butt +bottoms +aton +veng +ðŁĮı +delaney +prabhu +fanclub +overhaul +healthye +syno +aaf +renamed +kimi +uncle +mancity +seu +quanti +esteem +umin +enzo +melvin +undergo +jhar +farah +coasters +humphrey +mhz +childrens +^. +dhi +disruptive +integrating +rnb +oversized +aide +neau +documentation +ðŁijĢðŁijĢ +palo +hearth +riyad +punctu +abcnews +secures +boyband +birch +juco +traff +legislators +baya +ãĤ¯ +noises +collects +swarm +kner +bishops +sturgeon +snapping +mol +freaky +chairperson +trop +lynch +carcin +artsy +esto +chai +flur +invali +sausages +imel +jor +funfact +witter +punished +acons +hya +reversi +emc +diffu +zx +spaw +clad +dmit +holland +fresco +payroll +abundant +stuffing +moro +cny +boycott +wendy +eleven +provoc +pilot +trx +bead +climateaction +rion +assie +ìĸ +osm +islamic +hoar +goodreads +alici +afternoons +spokesman +jolie +itas +mascara +âĻ©âĻ« +prevail +beetroot +lujah +kli +dodger +» +rule +ln +scream +hobart +colbert +rtc +erm +patro +quoting +slive +quest +nonfiction +seminary +prosecutors +vest +expressway +gge +nautical +etf +ðŁİīðŁİĬ +duration +chaired +thefilm +fabio +sheh +cano +ðŁĴªðŁı» +withdraw +!:) +corpus +phenom +yelp +lawn +entom +snapper +butte +pinball +proxy +libre +allevi +nada +gabriel +fowl +eureka +daphne +tunes +punched +whore +jog +rential +manners +ope +whufc +guth +revolt +sneaker +philharmonic +hoste +sovereignty +ðŁĻıðŁĻıðŁĻı +fishing +sciart +feta +ipp +dumping +kelown +giri +digits +salu +sanjay +tweeters +spas +colchester +scab +madd +à¹Ħภ+Äĩ +geddon +marchfor +dop +maureen +unplugged +dido +fashionblogger +upa +mexic +tary +polye +jameson +vt +grinder +maddy +consultancy +¬ë +leagueoflegends +accents +umni +janeiro +tuss +hens +amplifier +toshi +prettier +prevents +newtown +redwood +vantage +ballard +artof +ashe +asion +lacey +apat +grove +à¸Ħ +rwand +realtors +traitor +bedding +ör +zion +flashing +campan +boomer +secretariat +abol +litigation +contamination +sedly +shredded +infor +doherty +benchmark +roche +skateboard +shovel +izz +topper +oster +labyrin +autum +kong +hummus +viz +technews +klaus +amusing +socialmediamarketing +ides +castell +stee +underestimate +calab +paign +billing +unanimously +gmb +flyfishing +hathaway +commercial +colouring +skulls +pivot +tep +tbc +motorway +xpress +constructive +puk +underlying +kirsten +maniac +chao +sema +chiffon +ðŁijĮðŁı» +verona +komo +standoff +wiped +cated +blair +workin +msc +bethlehem +swipe +unexpec +pees +petri +origami +ðŁijħ +mexico +flavor +rudd +cannabis +maru +riddle +worshi +silon +schat +apse +tanger +bious +eer +questioned +ozar +dank +anglesey +charan +baku +competen +repri +batter +saxon +calves +lengths +$$$ +âŀ¡ï¸ı +immersion +gaunt +carry +cyto +banda +shutt +experience +elgin +mousse +taz +êµ +incorrect +enz +bham +moron +sover +arun +tipped +lable +dearly +bautista +íĻ +mortal +woop +dtla +shocks +davos +ðŁĵĿ +swimwear +herman +ðŁijĩðŁijĩ +zir +neglected +graced +campuses +avs +arora +swachhb +livepd +accra +enquiries +shooters +kurt +vancouver +bradley +garda +gü +olla +attracting +upton +newin +lumia +furnace +evers +eon +swa +rookies +aoc +vss +brisket +torch +yoda +heartland +taco +phony +foodbank +abbey +babylon +uy +greate +expresses +dandy +scapes +survivor +rond +eci +havin +abel +childish +torque +wavy +urself +kanyewest +yearof +alestine +obrien +alfon +skag +korean +anchorage +valeri +dew +ðŁİ¨ +landslide +carole +christen +gophers +afi +priyanka +qq +powerof +itte +pcso +twol +pry +intellectu +guerrero +piles +wishlist +wren +timetable +ëı +prodigy +gibbons +./ +neur +anzac +murray +viest +plaster +lair +artgallery +intercontinental +gbr +bellator +namjoon +mammals +amel +yaw +sarasota +camar +budding +summari +acosta +lash +eyou +postgraduate +instructors +tig +constant +werewolf +icos +clas +glenn +budge +ðŁĻĤ +erta +stains +persecution +cumbri +och +synergy +huang +scandin +midterms +commentator +regarded +perpetual +boiling +alp +lange +schle +faceli +tweeta +ridden +oktoberfest +charlottesville +iklan +jou +chatham +bsc +ðŁį¦ +strauss +mellow +xxxx +happyhour +reactor +wwer +distraction +atorial +ðŁĴªðŁı¼ +twinpeaks +fayette +aor +kok +broom +syfy +ouse +amag +Ø· +ubisoft +lulu +hallmark +stuart +itya +sideline +vengeance +relu +sexism +bouncing +unites +gustav +tessa +stump +proclamation +imax +dividend +colby +ðŁįİ +playwright +unsafe +cosmo +ðŁĩ²ðŁĩ½ +cupboard +constituents +anglia +rampage +ðŁĺįðŁĺįðŁĺįðŁĺįðŁĺį +thanked +takeaways +shroff +debat +khur +conducts +formats +à© +portage +graphers +uten +prem +moines +condemns +sous +lps +fcs +dealership +leukemia +bureau +skid +guardiola +caster +third +avoided +encyclo +csr +vixx +analyzing +shear +duluth +shapiro +chanting +stresses +asbe +militia +ãĥª +collin +arsene +suresh +teachings +yixing +shill +nudes +svu +clearwater +warped +prolife +artistson +itu +versailles +galaxy +axel +springst +cala +huhu +scu +commitments +exeter +poignant +motion +conservatory +rowdy +recalled +musk +embelli +sothe +âĺĢ +stopper +schild +tope +elmo +ziel +jom +barnsley +snowden +ontour +journey +hillsborough +parole +wts +moving +agility +tivo +ffers +kindleunlimited +gwen +annan +ahmad +textured +hepatitis +dram +insiders +tissues +ãĥĦ +fcbarcelona +cratic +naacp +pecan +fgm +customize +concert +gsm +peg +pone +justintrudeau +supercars +happyholidays +bular +adox +laptops +digitalhealth +destination +gradually +áĥ¦ +poppy +ssl +inhibit +starlight +offro +gloomy +xper +halder +implants +leto +hassel +aas +untold +enci +liberia +oran +contests +ilah +smag +scout +marianne +cryo +scheduling +los +kane +stuttgart +nese +lawrence +dain +photom +carou +ร +gwy +nationaldogday +roasting +bandcamp +kentucky +stretches +kerel +cashe +ãĤ¸ +stax +transi +doggie +atric +halle +civic +browning +leinster +catday +highland +joyous +incumb +orlando +romo +colton +delta +carab +rotc +asteroid +goosebumps +mology +yoko +ands +tomorrows +redcarpet +smp +casio +ðŁ¤£ðŁ¤£ðŁ¤£ +seau +rejection +rotating +bipartisan +thun +mati +boni +oll +energye +doit +lj +motherhood +louise +necklaces +elite +nix +lcs +env +glu +lesh +crank +susie +mclau +sotu +crowley +ratri +used +breton +alfredo +yeo +travelpics +tipp +ellison +saxophone +mered +heughan +taine +fes +viro +supposedly +ias +digestive +yle +lizzy +wildlifephotography +brianna +westfield +rained +amher +ðŁĺĦðŁĺĦ +distribute +bottom +preserving +oiland +crafty +descen +colling +shakespearesunday +rwc +angled +cian +tations +montage +meyers +francesca +ðŁĮ· +wiggins +sanford +volunteer +carra +bark +varied +plin +amu +kapil +rockers +quind +brane +inmate +ental +improvis +michigan +retweeting +progressing +mercedesbenz +smoker +physiology +dorado +wattpad +hwa +srbachchan +wga +volatility +hire +acap +wnba +heinz +stitches +kidnapping +burys +limb +fitters +thumbnail +tone +mirand +desirable +addison +taran +tamilnadu +spectator +sociology +amitshah +remotely +âĻ¦ +hamid +rds +glee +smoothly +schro +erc +laliga +heals +usf +nishi +dhu +unil +hle +tromb +bhutan +pilipinas +seung +whitman +tey +mince +snowboarding +reau +kker +avo +zachary +ranveer +tik +govern +qual +becky +anthropology +atten +groceries +debit +warp +silicon +hawaii +ðŁĴħ +pomegranate +peer +oranges +peopleschoice +endure +ðŁĴĽðŁĴĽ +ãĤ¹ãĥ +acial +ahaha +stuk +imperial +blond +powder +knots +vince +woodlands +dena +watchin +matcha +mahat +galaxies +middlesbrough +kö +stree +rescues +waldo +leroy +despic +realities +tmnt +haq +uno +pec +bollywood +blinds +designthinking +hems +andhra +absen +fans +stech +shirehour +blaine +shakti +purely +ðŁıı +trafal +keynes +grate +tobias +spontaneous +saturated +cavalry +prisc +ðŁĺij +wht +passi +~~~ +virat +pattinson +lao +weirdo +sympathy +juda +occasionally +credited +statu +esco +hilly +escape +discharge +seer +maynard +sudbury +zlat +oral +weer +encountered +smelling +oversight +ê¸ +thatcher +mackay +youcan +freep +freedoms +prophecy +hoe +ishqba +drake +quits +pelled +turk +ovi +wesleyan +newmusic +legg +cheng +hilli +ayy +panties +adversity +adjac +vaccination +juke +gac +exceed +timesof +staining +epcot +vital +upward +bethesda +apark +mahi +campfire +enchanting +rhapso +hz +naver +fax +validation +acad +nyr +asym +coordinated +departed +allery +varies +sprite +chaplin +ssoccer +swat +bret +reluct +tunesapp +superstar +reminiscing +oco +homegrown +doughnut +uncanny +lapd +thyroid +!âĿ¤ï¸ı +botanic +bres +spade +iste +echoes +dulil +bursting +quiero +ðŁijİ +loyola +amusement +hails +sleepy +burglary +âľı +rogue +cotland +moors +lower +wicked +ðŁĶĬ +competiti +argentine +yvonne +kartikeyan +iliary +gatsby +precinct +sixty +naji +cams +practitioner +ðŁĺ³ðŁĺ³ +pune +negli +julien +invaded +calibr +clam +dubai +muk +lantic +product +fedex +ï¸ı: +eura +darius +sling +virtualreality +homestead +ðŁı³ï¸ıâĢįðŁĮĪ +paced +inha +pulmon +lazy +premiering +mastered +inhe +congregation +bajo +sporting +newjersey +horny +lmaoo +lengthy +dut +yogh +swearing +philosophical +papua +inski +knowles +dyke +âĢ² +token +mcguire +riot +probability +mccon +gros +sumat +cite +daa +onda +maddow +chew +boardgames +sparked +reclaimed +adhd +nyse +imwithher +equinox +booths +balsamic +hazy +dorchester +agos +seaw +moderator +seriea +andersen +pilgrim +âŃIJâŃIJ +itchen +halli +xton +nathaniel +munition +celestial +gaf +zoom +markle +penthouse +cale +sfa +barking +tucket +emery +calorie +lique +adar +mcnam +tortilla +woodpecker +motown +badger +ayrshire +scramble +dday +craziest +perrie +choco +caste +iot +wrecked +selecting +ussr +graft +punt +labou +irst +baek +ÛĮ +suki +queu +achat +tester +augmented +wcvb +sinks +ðŁĵ» +rake +interne +because +bellevue +unearth +lighten +ðŁĺ£ +turnaround +labeled +unemployed +twitterkurds +leia +hye +greater +ðŁIJİ +timed +ired +ett +limitations +cabe +sout +beech +annihil +retrac +yoona +anger +dennis +supplying +diz +"( +scur +gunman +suho +sauvignon +ล +wiley +landon +choreography +prehistoric +ðŁıĥ +vargas +assessments +pinnacle +dii +chamberlain +ìĪ +vp +presenters +deutsche +sunshine +salutes +rone +busiest +-.- +motorists +hemisphere +alwx +psp +owa +denying +choc +gutier +hanuk +muskete +jaitley +sewage +tame +thinkers +shim +sequo +papar +middleeast +kwa +keg +patagonia +noy +barça +takeoff +hea +ଠ+nsc +gdc +ðŁijĪ +moustache +melania +thra +â¬Ĩï¸ı +pierced +zeus +fonts +bera +itiner +qatar +contrary +ireland +ify +oulos +communal +fins +unpaid +paa +ðŁijĩðŁı» +rios +oup +filler +cafeteria +à¸Ń +kasi +caliber +zulu +vsco +tsford +dragonfly +smokin +pist +psychologist +diplomat +webs +buccane +ா +motivational +dune +bae +cfs +without +eron +iac +atee +pension +frazier +ensis +skis +parting +gery +territories +nachos +enight +everlasting +msdhoni +tele +spun +podi +sabah +environmentally +cease +beaumont +marta +kelvin +hoff +sunil +nda +cob +shale +reedus +unboxing +ubio +reopened +nall +capsules +marr +himalayas +sweeter +jaz +fmr +tweeter +dhaka +nau +demi +dfs +taurus +fading +itutes +cip +overflow +jeffrey +donny +cartunesapp +ðŁįij +prefecture +danced +cpt +pleasing +italk +earthquakes +ulation +hio +ãĢĭ +antan +nutrient +deere +selects +enrichment +riti +trampol +blamed +jia +contributors +chesapeake +pigeons +tribunal +maduro +wsu +ilove +efficiently +darcy +warms +arra +ecu +hower +struggled +rajinikanth +ðŁĺ¢ðŁĺ¢ +housing +strat +elix +dispro +raffic +thierry +nasty +cfb +staffing +alma +backers +henson +skywalker +realestate +roos +nessy +chance +cairns +cci +pedal +lyft +crossword +waiter +onlyin +kruger +kir +alejandro +cartier +carrera +repaired +ouat +unclear +unbreakable +todayin +queries +jody +genital +winner +tol +kelowna +fascinated +ãĥ¬ +srisri +squared +sprung +negotiate +privately +aven +>>>>> +gical +gavin +chesterfield +zumba +orr +natalia +impeachment +mnl +carat +critique +credible +tracy +tani +musik +jigsaw +gambia +tolkien +feu +asper +savory +foxx +fitt +marlon +lrt +vell +pbr +imprisoned +iom +chul +windshield +kaye +baa +chord +sart +algon +ministerial +natgeo +lazio +norms +ðŁijįðŁijį +licking +futbol +unsung +dallascowboys +shred +disturb +devine +beards +chf +bday +rosso +igor +ayi +siren +kair +stiles +rof +magnets +uncover +mouse +banging +sighted +speople +impact +rowland +kira +environment +lovethe +psis +mishra +glendale +cajun +oche +deception +sexist +straws +sga +buffer +apostle +spl +popup +ðŁļĹ +rg +uper +ballin +idy +occasional +nationalpark +ðŁıĬ +uan +innovation +ห +teaparty +rette +counterfe +bha +recs +igen +ðŁĮIJ +hummingbird +cur +haven +lazar +pueblo +:: +zionist +opath +inverness +promoter +cartoon +cabinets +mahogany +surveying +rational +feeling +testify +sow +ocon +ย +neel +maris +solitary +chemo +radcliffe +simons +rosary +newer +jodie +retali +prawn +paddy +henge +kala +implant +aty +brentwood +paradox +enez +redesigned +pour +wyd +alde +à¯ģ +sold +biomedical +à¹Ĥ +tttt +matteo +yser +newton +debun +nerdy +lool +woon +elisabeth +ecc +whi +acho +salvage +salaries +quity +navigating +ophthal +consoles +rebuilt +opec +asters +shored +setlist +kathryn +rhymes +revisiting +ashish +lift +repost +soleil +âı± +wealth +saat +wec +kingjames +flipkart +fieldwork +segu +modal +bub +arers +ðŁįĴ +clooney +paddington +necessity +guthrie +pente +limo +josie +artin +enc +lhs +betrayal +infographics +ier +moa +hearings +bonjour +symbolic +agro +wedges +kristina +wildflower +athletic +photography +pesh +cahill +chilean +goul +fioren +ðŁij¶ +zil +skim +badoo +delia +treble +ncc +ðŁĩ¦ðŁĩ +ahouse +bullock +solitude +اÙĨ +cancers +futureofwork +hutch +watershed +warmongers +spilled +colombo +moth +associations +weighed +globalgoals +notjust +christi +torg +sweating +maneu +clusters +âĢ¼ï¸ıâĢ¼ï¸ı +taped +uly +trusting +yusuf +tein +rab +,,,, +sinai +audible +explicit +crowns +schiz +atleast +ðŁĹ£ +debra +jesuit +enegger +zhen +onesie +iit +ssf +gurgaon +chakra +bearcats +kran +kawa +requesting +hanover +gend +soros +mercy +lovely +doomed +timmy +kuz +ull +abram +saison +ãĥ« +cleaners +remo +circuits +barred +oth +moist +madeleine +gallo +uj +permits +heaviest +carols +azte +giorgio +floats +declaring +usrc +minat +crafts +prima +conveni +nickelodeon +dancing +ceremonial +blogg +twp +anglican +shek +knick +((( +hubbard +harvey +hitman +feng +wesome +forza +sword +opus +brom +gibility +zal +munch +dancehall +greedy +hdmi +rebirth +ðŁĺĭðŁĺĭ +sworld +figurine +compost +kf +engraving +giorno +stana +kman +hamster +composers +aje +functionality +polk +isons +airplanes +tese +horrors +muscat +given +spence +ðŁĩ¸ðŁĩ +eliot +achilles +freck +cryptocurrencies +souther +halo +borneo +politic +hahahahah +upstate +siena +obscure +hausen +lloyd +happyfriday +motorbike +bona +americas +hols +-( +sporty +unaware +revenues +christopher +banksy +avan +evapor +compress +eyeliner +todos +buffy +renewableenergy +lyrical +archan +rapist +fairtrade +lmaooo +beatz +proactive +lapse +irical +reversal +pode +mcintyre +macau +ãĥķãĤ +nashgrier +fsa +gall +çĶŁ +perpetr +ilya +configuration +%; +strange +raci +à¸ĩ +pickups +kovsky +mammal +wps +gable +comparative +zh +saveour +davey +onetsy +mussels +miser +cristina +electron +crave +loren +precipitation +mz +ðŁį« +vincen +snowboard +noida +ahn +marinated +gtr +townhall +minis +bethel +advan +sura +shiel +furry +ðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤ +lynd +soil +scence +seneca +sharjah +dickens +credentials +avar +perk +requiring +prefer +jian +deca +rach +ingfor +dele +beep +ðŁĴ» +cisely +huddle +greensboro +hawking +hoax +hangar +çľ +miso +lovin +greta +abad +logie +atan +snowflake +mahesh +fearthe +alkal +bobblehead +bahn +judged +futu +felix +ðŁįĵ +pike +deriv +notices +auer +dissuper +orda +wipes +amino +strikers +footb +dramas +punching +scoreless +hemingway +bih +ballad +chatter +ammo +klein +fabrication +karim +zend +histo +volta +rocky +marketer +xtreme +sequencing +paradigm +cleats +booming +âģłâģł +blockade +prompts +yoghurt +purpose +nur +regulate +noisy +ingrid +birdwatching +bartender +Ùĥ +wordof +chaotic +shorty +eldest +zapp +onceuponatime +flyo +ritos +mikequind +ðŁIJ´ +registering +.] +adol +gggg +purge +kidlit +arbor +valves +synagogue +oth +unanimous +verification +darrell +ãģĦ +vanderbilt +tapestry +prosper +diddy +drafting +decep +marquis +stint +michaeljackson +peeled +menus +bbb +scare +email +wrigley +itis +fell +somethin +barra +edgar +dipping +puddle +slade +learner +jalen +ðŁ§IJ +thedaily +mikequindazzi +jux +iqbal +mckinney +raiser +efan +drone +cato +picket +crowe +latt +uko +giuseppe +hini +synthesi +pontifex +songwriting +tod +switches +dinners +hq +gabrielle +pensacola +circle +exposes +evs +riyadh +promen +ock +saj +citation +brewco +josi +epaper +drif +pointless +tangled +cripp +lineups +fairies +daze +mourn +bladder +salz +burundi +bookmark +thepeople +subsequ +principal +sker +courtney +aoki +racers +adm +moma +criticalrole +houn +shedding +saka +aceous +mckay +husbands +½ +meda +accusations +rosel +ncis +witnessing +orama +gods +hilton +elman +ÃŃn +megap +craven +announcer +criteri +sheffieldissuper +militant +consul +hooded +abyss +bx +madam +locu +maryam +manicure +gratis +actresses +rosario +thisdayin +kingly +gnome +celine +rous +heel +lilac +vishal +abh +thorns +sls +neal +constructing +beren +slang +mains +farra +sarko +paige +guiller +lala +iceberg +noun +planners +ummm +ouses +illary +maan +boxing +zipper +srinagar +miguel +ostr +mpo +responsibly +lanterns +appliance +xb +grenade +neglect +dysle +hammock +nectar +witcher +rgv +dience +serbian +seeded +cruz +bish +sphe +eq +skyrim +algebra +philately +bungalow +geoff +yves +demanded +considerations +thevamp +pawankalyan +coded +gritty +eruption +seinfeld +unidenti +ëĭĪ +worm +acus +seung +dung +roland +sud +divisions +ablanc +shortest +jf +poun +plantbased +beto +tougher +mco +donet +markus +vfl +ðŁıł +opening +coward +cabernet +oxi +burlesque +sandra +sumo +consist +thot +cayman +motorola +gutierrez +dslr +yw +nobel +novice +momsdemand +grunge +spor +dcc +presses +slist +allotment +vocational +ftc +puja +loven +uttarak +tandem +shep +comedians +anatom +cantwait +healthyeating +westside +margins +chiang +asbestos +stupidity +problematic +fitbit +:$ +ceilings +shua +protections +biotic +bengali +rests +biennale +timo +culmin +eminent +affection +unbelievably +individually +canvassing +whitt +novasco +chinson +hpe +gow +gloucestershire +pao +threshold +chevron +sine +wether +ppie +aquino +antwerp +âĸ¬ +poon +instaf +equine +cinematography +nbafinals +valiant +kilkenny +terence +systemic +srl +pound +madeira +plough +trecht +mated +mpd +ransomware +phin +liqui +bbce +boomer +istandwith +conju +rte +nara +foolish +dashing +viernes +brite +dau +juniper +aida +younow +razer +dei +repeating +comforting +adjacent +eto +casted +chatur +muer +synth +sanitary +macle +independent +lawful +eerie +hor +ðŁĴŃ +amrit +velo +stationery +muf +maymay +contemplating +elaborate +gregor +dries +accol +à¸ļ +schwarzenegger +illnesses +daybreak +followback +collusion +electronic +jovi +hiroshima +taw +homec +micah +quitting +frosting +benfica +heli +sical +piccad +corporate +mentorship +youare +singer +shiva +rune +inger +rium +playable +doop +willow +terre +nip +atd +warbler +professionally +erase +proceed +pedestrians +mischief +bending +alaskan +ckett +mop +ddles +shutter +geared +ateneo +madeline +gations +osha +derick +swild +angry +patents +hunk +decreased +fry +ðŁĴĸðŁĴĸðŁĴĸ +salon +quantities +dario +nigel +kuma +jenn +happye +xxx +rexperience +pros +ausch +relessly +hamburger +fukushima +erne +statec +rend +mayfield +jone +lefty +bernstein +smil +generates +forestation +bandits +tayo +rca +acci +rodrigo +knapp +elovers +vegetation +ural +left +ħï¸ı +worldre +suri +embark +wson +bayou +muller +movers +ðŁķº +presbyter +lf +cree +batb +salam +demonstrations +anec +npc +itics +tography +reinst +thurst +tale +offences +smartcity +brotha +oftheyear +invaluable +earn +ðŁijıðŁı½ +kremlin +grady +townfc +guernsey +maha +contagious +drex +been +(£ +nativity +ktm +somerhalder +compounds +íķĺ +"âĢ¦ +afg +ottnews +hound +firefly +cilan +donetsk +volunteered +akira +èª +singul +sth +drowned +mando +heir +ðŁİīðŁİĪ +taxis +yuki +veld +kans +elk +rants +hashtag +teng +rog +aat +grub +eber +inindia +colossus +signi +soever +milestones +dero +differential +phuket +mastermind +angh +melani +broker +actorvijay +stunned +continuity +affl +vocal +perennial +fiancé +incomplete +hunts +reissue +dominates +turmeric +roam +rion +bagged +nassau +fut +xox +nationaltrust +joye +sano +hearthstone +disrespect +lees +hse +siberian +offee +restock +wolfgang +regan +plano +unwind +repar +mille +], +skull +fatally +conceptual +ðŁĮ² +fé +berto +bms +ua +magna +notredame +lete +laundering +heartwarming +buffett +goat +peabo +windmill +vac +continually +azalea +membrane +cancels +makeyourown +athered +pto +torpe +ðŁĺł +ðŁĴ§ +scares +leaking +zet +pixels +aci +khil +marathi +ðŁĻıðŁı½ +ula +tamu +chandigarh +zagre +aab +pronounced +aubrey +sander +punta +harlow +icelan +celebratory +sot +unciation +struly +mcdowell +deepika +reminders +mystical +ctc +chatted +sica +bargains +chhat +rubin +mnet +oilandgas +pelican +oat +morality +kour +ih +nuclear +gcu +richer +venezia +mma +leith +accompany +richmond +sportsnet +baahu +smuggling +mmi +ðŁĩ®ðŁĩª +twists +sahib +..... +ambitions +illo +historical +forec +showbiz +ponies +chasers +remodel +willing +princesses +ample +cushions +acles +lotr +dach +anthe +incorporate +newbury +kiri +friedrich +abv +ballers +albert +ðŁijŃ +leti +nanop +cide +analo +nsf +)))) +griffiths +valenci +roano +funrun +babysitting +caday +entre +uck +slug +tical +thesims +roar +carney +gam +stowe +fid +bunny +shamrock +pecu +molina +gocougs +contributes +transformation +moy +vaj +severy +antioxidants +thirteen +sightseeing +lj +reversible +oddly +hookah +nouvel +halal +fei +stables +mult +hopped +braids +interchange +ghanaian +wwww +ethno +conjunction +agov +yeti +earthand +tsp +conserve +heirloom +metaphor +woof +torio +selfless +nwa +emilia +ylene +yxe +giar +moderating +probz +bfi +neer +dummy +hanukkah +webber +kv +eyebrow +dagger +sump +rages +orkney +tbo +halsey +assignments +tronic +scrib +coon +anwar +#âĢİ +jalape +florida +quaid +hawkeyes +âĻ¡âĻ¡ +streetcar +rog +datlantic +granola +unchanged +expectation +Ùĩ +marlin +gummy +ðŁĻıðŁı¾ +awarenessmonth +oilpainting +muth +perch +junto +villagers +morg +cheated +webcomic +thefuture +dps +lakings +mentioning +voor +identities +accord +mcgu +lpga +rumour +massively +mpls +healy +date +spoli +revisited +ont +aland +scrutiny +lakeland +blending + +ankara +jamiedor +metabolic +fences +anny +åħ +semicon +oott +spaceship +wacky +leta +apac +shee +inherit +dores +ðŁĩ¨ðŁĩ¦ +gente +twick +rims +galve +deville +kingfisher +scorpio +owl +alar +varian +ðŁĹĵ +venetian +stardust +thenorth +qing +harrington +consulate +spectacle +hobbs +turks +greer +mating +ðŁİĢ +ðŁĮĢ +directs +íĭ +pompeo +voiced +laos +tzu +prome +prism +merc +fortunately +bcfc +mcdonnell +notsorry +smiled +tba +forwar +midterm +darby +weinstein +upgrading +wolff +bronco +cabello +ðŁ¥ĩ +fiable +sharpe +battered +sato +mythical +instapic +prepped +enium +espo +diaper +explanations +whopping +ragnar +peel +antibiotic +lacks +harrison +lism +aul +quail +martina +sentencing +scams +didi +tronics +ãħłãħł +goff +zain +paramore +chained +clinton +liff +cottages +emon +reverend +consumer +cean +tany +lumpur +ebay +stool +ðŁĺ»ðŁĺ» +tapro +hath +modernart +justine +proverb +appy +trax +manifest +ambu +naik +pepp +rsd +merchants +kitchener +shifted +lizz +âĺħâĺħâĺħâĺħ +âĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶâĢĶ +utopia +tomo +outed +comers +chiropractic +bookclub +cindy +prohibition +seuss +민 +thinkin +rrrr +gofund +tack +omb +catastrophic +lingu +guildford +botd +à¥ĭ +planter +^^ +wink +kathmandu +stoppers +smoothies +reefs +hind +bellamy +Ħë +wastewater +voor +natl +!] +reel +yap +scooby +workspace +corinthians +blun +obligation +gbbo +dyson +cravings +ellington +dapl +wrexham +earthandclouds +ukrunchat +positioned +kalb +foursquare +jock +impending +evening +athy +proclaimed +cites +annapolis +sani +marth +irl +accommo +kaa +fina +yaa +disper +ecar +bhak +willy +ðŁĺĢðŁĺĢ +mcdermott +moj +generational +usaid +training +lonely +lores +impecc +âĢIJ +beavers +maki +heb +aapl +åı +wolverhampton +leaderboard +meu +cfa +eastern +hur +civilwar +ourage +horned +lehigh +awards +evident +gigab +rous +madel +robyn +urgently +kors +enas +heisman +bambam +fabian +fom +evaluating +assembly +outsourcing +huntsville +ðŁĶª +justified +cashier +spaper +buckeye +analytical +illuminati +autho +oj +shade +geelong +whey +heaton +terribly +elek +uncharted +sdlive +motocross +hermes +darshan +darlington +cashmere +gripping +cilantro +punish +...: +ðŁĴĦ +instance +deri +lobal +mukher +spar +thinker +fremont +compiled +colorado +vigne +smd +whead +village +leek +formulae +tares +persistence +?????? +pedago +hez +alzheimers +vulture +offence +isgreat +suffra +kickin +hmmmm +broadway +ï¸ı@ +arti +allison +endorses +ryu +lollipop +soybean +kendall +cera +invade +(ðŁĵ·: +converter +carpets +hobo +frit +peac +esqu +ernan +ouf +anil +differ +ching +brecht +spg +davenport +strava +severn +ngos +storians +fete +paramedic +jhb +alamo +sneaking +goldcoast +roofs +isil +depicted +projections +numb +oss +epi +glucose +zidane +infiniti +íĺĦ +ransom +tonics +falk +gler +outw +ress +weekly +theon +nole +ðŁĩªðŁĩº +volley +summar +negativity +samson +yew +ausvotes +jul +judy +fart +prayed +palate +multicultural +doubleheader +cyclones +pierre +ãģ¨ +âĺłï¸ı +rtw +converting +wirral +lari +irrelevant +austinmahone +anche +yaan +sdf +$. +exploding +ultimate +profici +gofundme +cellence +epstein +bullied +septic +த +lumber +cuff +vscocam +plor +ล +seok +roto +venezuelan +sorta +spirited +danielpadilla +teamsisd +radioactive +icelandic +ðŁĴ¤ +vere +accommodate +shipp +otter +olina +ego +sula +sanantonio +deas +similarities +âļ¾ +yom +broward +å° +cancun +verify +onte +candlelight +ìłķ +infants +azam +ðŁĺ° +leven +unstable +bloomington +xford +contour +yp +innovator +histories +poy +lololol +expires +catalo +billboards +anab +elic +novascotia +faire +ìĿ´ +rockwell +grille +aztec +johor +urstruly +firen +dunlop +idle +portman +joes +txhsfb +holm +chamele +underworld +loss +tiem +therapists +pasture +paste +ingnow +vulcan +ragon +larkin +oshi +hoco +childhood +umbrel +successor +kathy +izen +°ï¸ı +shareholders +olga +aib +heap +flaming +rou +airtel +ratt +zane +vow +thorough +snag +parth +unconscious +vey +newrelease +ghee +croatian +facilitating +swanson +astoria +tology +mastery +ðŁ¤ij +bilbao +troupe +theori +cheyenne +rott +shoreline +grasso +masterchef ++) +vix +ellenshow +asg +anak +kuya +safarilive +debuting +blum +listener +vins +bookshelf +smartcities +makeyourownlane +;; +ðŁIJ¯ +rizz +onward +bulldog +bearish +viruses +frigh +linden +weiser +snt +gona +dresden +flanders +cuk +wheeling +bau +atuesday +surfers +swift +mccall +arbitration +awd +monc +bine +atx +refr +miro +posey +nare +ritter +âģ¦ +playbook +blowout +sportsmanship +soooooo +malayalam +grims +burbank +infinity +sargent +oitnb +josephine +skipping +parkin +excursion +seminars +johar +partridge +postgame +llll +blanche +tempting +mna +luka +isers +toffee +barron +hemmings +sae +gohawks +cupid +limbs +conse +uncommon +zada +headshot +soils +pioneer +mamma +semitic +pandey +jamiedornan +splits +vela +soni +raff +tmobile +âŀĸ +prawns +liter +enjoyment +eggplant +tub +cultural +usic +suspicion +sycam +summed +madu +hock +upwards +eyeing +rive +assassins +âĤ¬ +outfy +chives +tner +lais +porridge +saddest +wcc +vicki +snails +bizitalk +millan +ðŁĮį +samoa +jing +mikey +guj +chelms +eligibility +armada +throp +surgeries +ãĤ¿ +mohawk +exits +mem +islington +cme +landfill +kaitlyn +ðŁİ¼ +combinations +tomorrowland +verb +cora +precisely +naom +ðŁĨķ +shrink +softly +mercede +mandel +poodle +ballerina +soph +juxta +yat +aryan +hesitate +lowered +gular +dungeonsand +ronan +myri +spf +menopau +grasp +pathi +feasi +flaw +shistory +steward +ggle +fayre +clique +credibility +yog +section +musko +seville +nott +calm +mateo +indicted +fiba +byl +lino +ukin +!!# +enigma +sirius +busc +ðŁįĬ +mackerel +psalms +aat +tomorrowspaper +ðŁĺĸ +pfc +........... +shrek +mullet +osh +dangerously +immensely +amur +ðŁįĤ +propor +sya +londonmarathon +above +obligatory +prov +racha +alexis +primary +shh +ethernet +dstv +cougar +unlucky +nil +steakhouse +mela +fcbayern +causeway +catherine +fluorescent +nxt +tokyo +ausp +relegation +quizz +shoreditch +proudtobe +promos +interacting +homebrew +daesh +wpg +steadily +provinces +ballots +iah +alto +<<< +youu +riley +preference +traverse +incense +ammunition +hodges +#@ +hailstate +tartan +witchcraft +ventilation +libertarian +!âĢ¦ +owes +%! +ongchang +brushing +leic +fiber +underattack +download +expir +hyo +pompey +mcbride +yag +stree +combat +tending +aira +guggen +abra +inna +flips +awal +mach +dollar +inspirations +zum +odu +itty +videogame +aquaman +haru +belfast +jeb +butch +usgs +calculus +goyal +morgen +xfinity +standup +contracep +sabre +nabe +insecure +generously +epitome +lw +tca +narratives +donnell +pandas +bergh +tut +keral +felicity +brampton +quintet +nomore +ðŁĶij +loi +alhamdulil +ðŁĶ¥ðŁĶĹ +stoner +shawl +clinical +brendan +gone +flawed +trippy +jg +allocation +poaching +vevo +mocks +leftist +bonuses +condemned +ability +stating +microbiome +biologist +foryou +wahlberg +ssor +iftar +wul +ÑĦоÑĤ +pomer +meme +verte +trell +trait +inlet +hormones +deliberately +villar +battleship +pbl +twenti +hokies +dalail +saya +mayfair +hans +diets +⾨⾨ +odin +hotspur +papi +kana +kamp +finna +flotus +tians +unicorns +tribeca +changers +foreground +outa +invaders +gettys +tomorrowspaperstoday +macmillan +handwritten +wfp +ude +stateof +based +âĺģï¸ı +casm +psyched +historians +fold +dda +aggrav +pans +greenway +ausv +ðŁĺ¶ +shraddha +index +besti +zimmer +tness +eyeshadow +otte +gots +distributing +promin +yol +acea +tramrahim +hooper +supreme +jammin +intuitive +qualifications +slim +siddi +jayne +tripping +gtx +puns +emanuel +omg +midsummer +into +succulent +rien +newmexico +oor +hooking +inf +ðŁ¤Ŀ +flirting +nahi +gfriend +tps +helix +zs +onie +ctf +kris +irresistible +flap +ðŁijıðŁı»ðŁijıðŁı» +uswnt +rud +ramps +pinoy +otw +lolz +lowering +favorite +tmc +phrases +hermi +averaging +embr +beno +estuary +sleeve +ribbons +tash +ู +xf +awgs +sunited +breweries +anirud +punches +oldie +ipads +wifey +landlords +dji +gunner +íķ´ +texan +exop +cassandra +soff +ðŁļ« +ighton +bakers +awarenessweek +vall +earp +btsbbmas +apologizes +âļĵï¸ı +wasps +statesman +snatch +watchdog +rafi +afterparty +spike +jer +periph +rnc +mull +leen +shies +lieu +urstrulymahesh +merton +desai +shif +ðŁĮ± +pedic +gosling +arranging +wwg +geny +youuu +netflix +ettes +kwi +bernardino +amiga +ب +kashmiri +tings +emeritus +decat +abdomin +dci +phases +djan +beam +opry +ished +theellenshow +thest +habitats +toons +mclaughlin +ripper +microbiology +talaga +clueless +ssu +croche +bromance +longevity +zagreb +prevented +trave +spoilt +darryl +migraine +alcat +dddd +viv +serpent +mattel +jama +conquest +îĦ +samsung +presbyterian +ketch +firefox +motif +lec +chopping +cherno +jann +ðŁIJ° +prolon +wakeup +convergence +merseyside +heartbroken +looming +hallucin +maize +communism +moh +twitterstorians +sergey +reseller +favorable +edgy +reiter +malaga +liveme +kahn +pulsion +bigg +kimkardashian +atio +tyranny +ruption +qant +proven +byz +pushaw +kristin +eer +tardis +riz +awaken +miko +undocumented +pathfinder +indirect +resembles +hler +concealed +scandal +reim +dnb +critters +attendant +apprenticeships +aau +screamed +lsu +fah +harbour +edd +batsman +liss +misha +spaniel +itf +advancement +fac +closeup +cecilia +medic +narcissi +lavish +giac +mays +leit +winewednesday +pushaward +letto +currents +bugatti +outine +wj +undo +lerosis +devotional +ðŁij« +onna +faisal +sauna +himachal +amii +à®® +dizzy +screenwriting +phx +spn +icki +agirl +fishes +wbz +pim +boar +acid +!.. +rockefeller +nga +drastically +simplify +drumming +autumnal +gurmee +lorde +joann +giveup +bour +amura +derland +simpler +watson +trident +concordia +bellum +brek +dumplings +vion +dungeonsanddragons +spri +ascension +wildatlantic +ust +robins +legion +insist +jaro +guess +sob +bighit +poolside +negotiating +mcgill +bild +technicians +mitigation +ajaydevgn +bto +anten +cosmopolitan +ðŁĺĬðŁĺĬðŁĺĬðŁĺĬ +patrioti +temper +promenade +navajo +namm +wrinkles +dcfc +leach +brunette +rf +coutinho +alti +traditionally +optome +naz +accordingly +recard +deets +swell +posure +whitening +stranger +illion +hereford +uwu +robber +cotswolds +clen +gorge +namaste +relish +griff +adrenaline +blasio +vale +ê² +tolerate +railminindia +jensen +hoven +ellu +obsole +eisenhower +unidentified +thanniversary +bodyguard +د +idge +schal +stockport +sni +retaining +popo +pixie +olithic +kier +hajj +saz +corbin +!!!!!!!!!! +vit +megat +deh +circuit +affleck +theoretical +hopeless +uab +slump +bice +jammed +letstalk +cani +sideways +labyrinth +refs +hahn +jared +ðŁį¹ +jambo +phyl +enhancement +ctr +fullest +seye +doba +choic +yos +cbj +andré +rewatch +prima +doctrine +forgets +uhm +around +ule +artlovers +shiraz +harth +extor +Å¡ +unexpectedly +elius +yx +emmy +seac +ðŁijĩðŁijĩðŁijĩ +corrected +combu +womanc +cough +whatson +publishes +diversity +backbone +lockdown +mesmerizing +norte +mab +designer +íģ +ragh +molecules +getoutside +thebeatles +semiconduc +nacho +lunes +hammers +sultan +oon +feren +attach +arqu +uttarakhand +sash +;- +tread +iko +arthur +scandinavian +ration +gael +chargeable +fishy +vma +handbags +chara +ayne +defam +settlers +qadri +palais +inwx +apocalyptic +pooja +aes +atories +proofing +nlp +tsla +vina +lido +deephouse +informatics +vv +ppings +diss +ï +uhuru +stony +betrayed +baff +myra +aspen +allowance +tamara +cif +corbett +serge +digo +ambigu +painters +pcr +pca +noms +loft +vee +opendata +ðŁIJ± +alexandre +identifies +fantasyfootball +reproduction +bromley +wareagle +mmer +pss +cues +ayat +hutchinson +sarac +jackman +irah +apink +cols +aussies +execs +dayton +ðŁĻĨ +imv +haram +chuckle +authenticity +ardo +incubator +ส +photoshopped +embraced +fightfor +gorman +zzzz +scholastic +crisps +teapo +midnight +gaine +collier +sate +dette +åŃ +imagine +iff +twili +ification +teatro +norma +esur +emergencies +riseup +ringer +hassle +caitlyn +tranquil +versa +seb +overlook +gini +bogo +sere +mayne +henrik +contaminated +rhapsody +proportion +wildatlanticway +âģ©. +organisers +trane +standard +sperm +launcher +ricci +herts +paperwork +showcased +meryl +pena +pimp +disastrous +^.^ +phara +xis +frontal +swirl +spills +swagger +smartwatch +sizzling +saviour +catar +bbcr +refurbishment +dris +citroen +absorb +patriotism +illeg +chromo +freshers +rus +limiting +efish +downed +mandir +hazelnut +pall +macon +disappearing +qualifies +boon +barracks +amine +gendere +ðŁļĺ +jes +ãĥŃ +quito +middleweight +schau +quadru +aciones +limitless +ðŁijĮðŁı½ +chman +arav +regulators +itup +battersea +milford +gz +ticking +ghou +crushes +tutu +dreadful +famine +forchange +dalailama +ðŁĴį +whitaker +hashmi +hus +vod +bette +aaah +isoo +ðŁ¥Ī +haar +laine +bv +allday +sprout +indiegames +freebie +greeks +butler +illin +haal +wareness +sima +publichealth +gama +waa +oung +goooo +okinawa +offenders +impose +hoc +youngster +storyteller +scap +fighter ++, +whites +musicmonday +reza +goducks +bria +mium +casper +crumbs +aad +martialarts +chp +rigged +tng +harvested +sak +dojo +millwall +bnw +ocd +historyof +tmr +sirens +fanci +caregivers +vira +soni +recurring +acknowledged +ðŁıŁ +ophile +bucky +stressing +rook +digger +vival +sando +fleet +siers +selcaday +refreshed +antifa +aque +polo +disappearance +demb +âĮļï¸ı +rented +berger +gmb +cula +ssal +goody +uhh +marcelo +wanna +software +shopsmall +turtle +tomas +frisco +ðŁĺįðŁĴķ +jimenez +csu +dayz +ando +wynne +choreographer +cervical +trailblazers +edg +zendaya +travelblog +els +wholesome +cog +labout +arney +delle +suisse +masi +inese +ombe +fiddle +reclaim +pau +watcher +slain +berty +optimum +elites +minis +turkey +patrols +gerard +aureli +wildly +waltz +brgy +wob +crest ++++ +vez +frosted +davido +thex +paramedics +pinto +hank +dupont +urg +fostering +micropoetry +spectre +----> +neuro +frida +musical +galveston +effic +scape +palazzo +thall +provisional +pjs +aure +ðŁĶľ +mamamoo +kitties +cree +wak +loool +lupus +cnblue +ú +ðŁİ¬ +raced +trose +omas +stride +coors +⤵ï¸ı +incomparable +cyril +broader +areclipse +ðŁįĶ +interval +tiru +coworking +waco +aham +abee +flourish +thetimes +olini +kickboxing +lucer +atla +asun +casserole +miaw +lobbying +janice +cirque +reflex +leary +sanatomy +tempest +semb +murdering +usav +robo +onet +pcc +natives +lifeof +saha +ruthless +relates +appetizer +pyeongchang +nord +eru +athing +ugly +plying +brance +organise +kendra +dato +cheeses +parma +burnout +astra +pretoria +adjustment +uku +slo +liken +favors +clive +beets +snowdonia +gotv +syn +openhouse +pani +portrayed +slated +mecca +renal +supportsmallstreamers +staffs +dao +biker +viktor +titus +admired +ðŁĵ± +hurrican +heats +glory +photogenic +meri +depor +burnham +orangu +djing +impressionism +ignition +cai +wynn +depe +coveted +collagen +saus +ornam +administrators +sson +nhpolitics +hahahahahahahaha +aspirations +rgb +swollen +sowe +scr +divergent +houghton +hanoi +dory +niki +landry +bcci +ðŁijĮðŁijĮ +ismail +tripod +herd +bhatt +dressage +tabby +inguish +huron +à³į +Ãł +todas +evangelical +chords +stjohn +sloppy +martyr +facebook +alight +sensei +kathniel +rites +zione +uo +revelations +weightlifting +pano +ncwx +acton +à®ķ +ز +soma +à¸Ĺ +respecting +marche +foreman +betty +kik +shibu +poon +argyle +kswx +etz +marbella +brackets +standby +fireside +defiance +vex +britannia +inhabit +appoint +piyush +leash +sciento +flask +senna +>: +atroc +sanderson +idlib +dhanush +ðŁĺĻ +enthr +hitch +dedly +alley +dork +mondo +cuddly +missin +yesss +nighting +jpn +wary +umpire +maz +ê³ +babs +ĭãģ +stanford +possessed +exceeded +ðŁĶ¶ +wallart +trap +jil +hibis +spying +scribe +khalil +translator +lumb +dized +chc +supervision +shutter +jag +_* +yesterdays +msf +hihi +gonzaga +gillespie +vivek +ecstatic +thismorning +chus +edes +stoned +bees +ðŁĩ¹ðŁĩ +turin +hover +atrics +stern +samheughan +autism +miya +eyewitness +writings +traveltips +chutney +pxrtg +kenyans +mystic +krit +/$ +redhead +worldly +amus +opla +leve +gabbana +seen +oclock +ganga +keenan +scent +oldies +gogreen +cornerstone +comply +concours +ðŁİ¶ðŁİ¶ +haan +confis +awson +cleop +îĢ +suzu +sauté +algar +subscriber +esteemed +ãĤ¤ãĥ +worthwhile +melrose +flock +brightly +violinist +pere +slipping +andco +sigh +havan +culo +msa +fibrosis +matilda +rafting +award +ëª +mmmm +geaux +steiner +sinn +helpers +beetles +aimee +taiwan +pistachio +macbeth +mzan +descendants +onsale +inr +ilm +grouse +saig +mow +bigre +adjustments +tula +mathew +translates +muh +bollah +ðŁĴĽðŁĴĻ +amores +abouts +bombshell +blaster +xavi +sns +kroger +gather +eradic +daft +chemo +benches +ðŁĩ©ðŁĩ +utv +oura +nko +gatorade +biafra +okstate +imdanielpadilla +domains +openingday +kiddo +doi +rice +daycare +macmillan +bathurst +cheerleading +ðŁ¦ģ +cashback +kwon +hobbies +exempl +riesling +âļª +agles +nys +everything +navis +addi +magnesium +facelift +arkham +grandes +extremist +donat +vitality +pumpkin +betta +sltd +artisan +liby +peaked +ahhhhh +maryam +assim +unsc +mente +alaya +lowers +aras +griev +leip +grati +crises +sprints +execute +wto +msd +magical +reviewer +sparkles +jukebox +ðŁĺĤâĿ¤ï¸ı +payback +licenses +dunkin +belt +lakewood +hateful +budgets +revamped +pherson +kyiv +wentworth +rosen +cruise +giggle +defstar +assassinscre +ymouth +winkle +wfc +bandwagon +bkk +wiring +kearney +southside +petit +!ðŁĺį +nordic +mirza +mugabe +vl +scones +ktv +sandal +duc +malls +ðŁĴŀðŁĴŀ +itc +alay +impair +unrest +floss +cé +abou +varying +museo +server +diya +hibiscus +eroy +merritt +findom +fpp +unusually +gott +contingent +aliaa +ballon +jol +hiked +zyme +ayr +agn +gaz +periodic +sparty +practising +linton +talis +cypri +womaninbiz +radiodisney +ðŁĮ¼ +jumpers +endocr +ðŁļ¨ðŁļ¨ +andon +sharapo +mier +masonic +factories +vien +bbers +ìĽIJ +hold +kebab +beak +approached +acmilan +munro +kosher +excellency +negotiation +waltdisneyworld +crouch +teasing +suppression +enya +bce +transformationtuesday +callie +viswas +pgat +icted +endings +escu +recruited +itfc +collaborations +gino +snuck +auschwitz +ifc +xii +kesha +gervais +cloak +xl +saad +probation +precau +macin +anastasi +lek +eazy +daysofcode +mariahcarey +yog +stitched +boyfriends +shar +phile +agu +twinkle +phishing +weekender +icton +gurmeetramrahim +alton +leness +allan +penultimate +krystal +gou +lande +dismant +abusing +norse +paterson +edmun +apan +xiumin +skel +catwalk +react +walled +tangle +bryn +veto +supermoon +casablanc +appreciates +skid +both +catalina +eleague +cybermonday +cautious +ðŁ¤ĵ +novo +hampton +haye +josef +varan +lobos +roanoke +orphans +ttin +squads +ishqbaaaz +blackpanther +etu +ksh +crumble +cessna +relieved +scully +pollinators +explorecanada +kies +kamloops +kiran +primal +settlements +hotspot +brainstorming +cedric +biennial +shant +âĻ¡âĻ¡âĻ¡ +doon +hearn +walkway +fem +veal +deportation +toxins +eliminating +descending +bythe +blasphe +hasta +complement +ascent +riga +provost +âĸª +weeping +antisemitism +employee +unearthed +pino +natalie +blad +angola +lockheed +inian +agr +nister +impala +mke +fanatic +âĺħâĺħ +ðŁij¸ +luch +simplified +gallery +economic +cyborg +coni +selma +inception +koala +dvds +crested +mmor +visible +nsd +ðŁĻĮðŁı½ +wunder +refrigerator +reopening +eera +carousel +asp +ballistic +victory +motive +trey +sharapova +sii +monter +intend +westchester +spe +cymb +vidal +llama +univ +finer +craftsmanship +jazzfest +bch +aggio +ncc +lambda +tranquility +cisco +baden +sobbing +ofi +gota +rumored +warmed +orean +acton +marci +ghani +âľĵ +assorted +pembroke +penelope +daf +atty +aimo +pretzel +carnival +thanos +kochi +mersal +hamradio +artwit +casc +guerrilla +kushner +kapp +alise +toddlers +stewardship +otti +terri +tempe +restless +vito +zayed +rspb +pion +hippo +hawthorne +inas +amily +nutcracker +lop +dali +tropic +ðŁ¤ł +ulo +jaredle +pyrene +paleo +usair +mould +itated +genetically +biomass +ðŁĩ³ðŁĩ± +dodd +practiced +monarchs +unmanned +mbuhari +amal +photogra +kool +brendon +juices +cure +worldbank +pointers +ðŁĴĿ +turf +leds +borussia +baptism +warwickshire +mounts +gayo +begg +copied +asians +kg +modernist +gid +frontman +concentrated +yt +scavenger +ironically +adic +psn +ðŁ¥ī +culturally +yuv +macarthur +fertilizer +bewithyou +rigor +minors +zoning +âĸł +rir +adolescent +vinny +reng +sandstone +guet +westh +pledged +laced +spide +vai +tycoon +seizure +dup +appalachian +rok +catholics +seychel +possess +lager +jodi +champ +stras +dina +centuri +calder +bluray +ðŁĩ¨ðŁĩ³ +modo +annette +youtubers +chaps +angling +labeling +aqui +pkwy +lyle +bisexual +litur +dugout +libby +greysanatomy +substances +augustus +rallying +fidel +ingue +人 +hallmarkchannel +toothbrush +má +adirond +aggi +ðŁĵį: +crusade +taxation +kz +iver +doubling +roomie +wab +enrolled +azon +aju +grandchildren +asdf +ðŁ¥º +matic +oughton +utilize +ðŁĴ£ +ponder +raisin +dysfunction +cobain +butternut +eman +sured +drian +andfriends +withthe +onomy +heineken +bridal +leadership +pyramids +deutschland +jocel +bowel +yqr +horsepower +beacon +ingeni +gradient +fermented +moom +thingy +potassi +wristband +bord +bodied +ðŁĺŃðŁĺį +mapp +kau +cyberpunk +phish +looking +coates +apur +amie +uklabour +atin +gla +adoptable +shelby +villi +riya +mingly +climber +bumblebee +ðŁĺ¸ +csd +âĿ¥ +hospitalized +cki +hater +chr +retina +ita +fanbase +beatrice +gwyne +goss +fos +favorited +swachhbharat +malade +monmouth +"[ +sivan +shhh +commanding +sainsburys +weed +gman +ssw +reptile +ivy +tropics +rollers +overcast +exposition +masquerade +mancrush +waist +sprinter +sleet +levin +jpg +_( +opel +exploit +apa +powe +wrecking +jongin +orb +erick +bosco +praising +bertr +towing +insecurity +kut +restocked +rrp +prescribed +trafalgar +pert +gases +apprais +ghar +musicals +âĸ¬âĸ¬ +mcfad +agony +condition +equip +shik +atravel +ðŁĩ¿ðŁĩ¦ +keh +abduction +peoria +wilkins +gms +asd +evi +ðŁĴĹðŁĴĹðŁĴĹ +uz +moc +hallelujah +guadalu +louvre +drawing +gove +phant +frie +webdev +programmer +zable +gamescom +clarify +lith +kinky +âĿ£ +labourdoorstep +sonata +juris +maiden +viadu +bucharest +conditioned +capitalist +ude +psb +spca +lulla +foothills +kayo +bond +womb +rounder +cesar +bursts +apra +swoon +sabrin +fragrant +clearer +kubrick +climax +journo +agle +ðŁı½âĢįâĻĢï¸ı +pooch +hale +solit +salmon +organisms +bronson +arten +hodgson +alove +venture +bbi +aea +ðŁIJ¢ +ldn +dnr +ozone +ellas +manny +azzur +unbeat +truffles +thong +mañ +lasers +leye +gettysburg +backpacks +oris +maison +crawling +labra +cling +dragging +steal +doubt +devan +ckers +agentsof +photobomb +elonmusk +aboy +distances +storyline +spi +northan +europeans +whale +serpent +ðŁļ² +fior +trit +oxo +awarding +classmate +sufc +smartest +riches +prk +bigfoot +armb +bipolar +dwelling +omars +kwan +grime +meng +frederick +navarro +sorrynotsorry +jaredleto +pave +slack +barnsley +attar +eviction +accumulation +oir +catchy +welter +vikas +hassee +nikita +moyes +mathews +shiv +gatwick +profiling +companions +marrake +antics +ðŁĻĮðŁĻĮðŁĻĮ +sese +boi +bartlett +poisonous +abuses +ymm +kampala +guggenheim +imvkohli +dolom +bree +throttle +gareth +fitzpatrick +unya +parad +margot +jnr +wea +potassium +pnc +disguised +crash +renergy +illic +coupled +niels +ciones +æĹ¥ +iment +despicable +dye +whatcha +connections +paralympics +gauntlet +waitrose +suicidal +starship +vapor +stou +lawmaker +cooled +simo +theno +offroad +jaden +basque +vicky +lukaku +centro +trish +strategist +medications +horst +bfc +grail +sharply +aditya +tomb +kaufman +tripad +samba +pastoral +britney +sagan +hillside +masons +sara +zone +xu +totes +robbie +appen +montag +dero +shortfilm +charismatic +tators +kiba +andri +alarming +splitting +icar +thug +scariest +sylvester +anan +utrecht +adifference +meade +buster +airstrikes +cuffs +accountants +ðŁĺ¡ðŁĺ¡ +newt +bott +issuing +clancy +wwenetwork +kyuhyun +resemble +pajamas +sink +kinney +sulph +ork +lies +lagh +orton +rahul +dsc +wewill +ream +colloqui +sharia +hectic +sarcasm +lander +tmz +endorf +roz +hammered +fris +wadi +popefrancis +heit +flashlight +unborn +opes +holiness +ðŁIJ¦ +nacht +imsa +gracing +bjp +verts +csc +homeowner +aque +bigotry +annie +bagh +âĿ¤ï¸ıðŁĺį +cari +thomp +disposable +cardiology +patented +hhhhhh +ldr +stephenson +crores +fanning +climat +ðŁijįðŁijįðŁijį +ðŁijįðŁı¼ +aeron +piccadilly +bankrupt +silvia +employ +donny +commenting +screenwriter +iota +cean +ancers +tuan +streetwear +य +skine +espa +asif +osce +sheppard +morecam +bottle +ders +oracle +googleplay +averaged +edmonton +stephan +sisterhood +crusted +staggering +methodology +congresswoman +cabo +triggers +milky +glide +toothpaste +roommates +nuff +guam +sprinkles +alternative +watfordfc +uoft +haley +contacted +bundy +prostitu +ghar +preston +onsite +hilar +gts +catt +hampstead +??! +ðŁĩ§ðŁĩ +bbcqt +alessandro +resist +maidan +tko +shading +pinup +gallo +sinu +atec +funk +aclu +strides +rhyme +wetland +bbcspringwatch +tins +wildcard +stour +flamenco +paula +ontology +gangsta +amade +ãĤ« +tbs +skeletal +runner +jardin +harrier +hunted +zhen +believeinfilm +demean +auditi +restart +chondri +âĿ¤ï¸ıðŁĴĻ +mclaren +gab +shum +ausa +lewisham +ypg +kjv +furnished +doro +bonded +morty +latitude +_) +lova +waterways +vinai +shorth +drunk +cay +ayana +kaplan +cappuccino +spro +lifeboat +hasbro +spolice +toron +doing +damn +shree +fountains +entation +maru +boarder +topless +jada +channing +ulls +enclosure +gibson +fractured +britton +ö +tous +porth +draf +trailing +margate +elife +downward +linn +glades +girlpower +akrish +uki +ronda +tsc +appreciationday +vising +loom +ðŁį³ +mexican +argos +yya +jadine +southport +dend +sista +redeem +meng +braxton +antioxidant +skey +mpg +finding +vibration +ceu +khart +dimini +cline +shelly +hines +īï¸ı +topical +nover +maxx +primitive +illustrate +bounds +trenton +jointly +breeders +uchi +wakeupamerica +bada +ðŁĹ£ï¸ı +guacam +spheres +peregr +youthful +lolo +birmin +tly +jeremycorbyn +defects +cosm +arent +vaa +bagels +mediac +coriander +icago +ghaz +abbas +remodel +structuring +pum +outlaw +adani +rbc +gulls +nli +confuse +ðŁijĩðŁı¼ +vila +mcnamara +corrections +mughal +seri +regain +ssb +leave +hahahah +grande +distressed +rechargeable +hoa +housed +stil +attributed +opathic +dips +prit +headphone +conclude +pilo +het +utsa +nitin +jem +snippet +tutoring +oper +sunk +ensla +chau +acorn +quintess +rankin +affiliated +ourlives +clint +seater +isaac +bashing +smear +nurse +doodling +"; +saku +atrocities +imam +gfs +violating +commend +bradshaw +erville +billed +bbe +thulhu +iphones +moose +dios +rew +methane +strangely +whisky +tightly +spielberg +radius +noticing +wif +ignati +ifa +apis +wali +haitian +bushes +yz +vl +exited +assel +truec +domen +asher +inking +newyearseve +hendricks +bati +ìĿ´ì +richter +monsanto +conline +agreat +ðŁ¤¯ +masterpieces +arn +roughs +cleve +sev +fashions +toya +shail +copeland +aquari +decals +areyou +yaya +astr +font +mlm +arca +ppor +pollock +xperia +conservation +chainsaw +aggie +?!?!? +sile +shon +ìĹIJ +notebooks +marquette +deus +bbled +spicer +mccabe +norwich +modification +boosted +strum +salesman +bangle +nissan +hezbollah +breasts +aaf +anthus +sker +owed +heros +gifs +fosters +eaters +dues +_/ +lymphoma +sfam +megal +afridi +agic +pamp +jealousy +ðŁijĮðŁı¼ +calculate +napping +gale +ðŁ¦Ħ +lubbock +assumed +renting +íĥľ +suburb +ãĤ· +technic +ucla +infront +garnet +steroids +striving +howar +mover +leton +bulldo +isin +ciao +snz +forefront +dams +midwife +mawards +clapton +wein +subsidies +sproud +rotherham +phantom +arach +spiel +racket +selamat +noon +lbc +entially +ðŁĴ¸ +silve +moud +kinetic +yasi +ðŁİ© +ool +miku +iza +fera +floren +barbershop +groot +zest +nears +stanis +zand +policeman +jurisdic +formations +apparatus +spd +artifact +tosc +motivating +womancrush +redro +diagnostics +raza +outfitters +elxn +dodgy +ryn +shd +orthodon +olde +jayanti +balances +quickest +canton +fridayreads +!* +naa +aak +ðŁĶ· +behaviors +raspberries +ä» +political +camil +åľ +dik +astounding +liebe +novelty +turmoil +sully +springbreak +honouring +ccg +ðŁıĴ +mylittle +kyc +proms +ðŁķĬ +è +bige +avril +ðŁĩµðŁĩ° +marion +asants +surya +octag +lufthan +acron +fayetteville +tique +loves +enca +dekalb +taver +devote +auxiliary +johannes +treadmill +ayan +qur +donaldson +cheryl +".... +sven +kirsty +gunners +radish +oahu +vsky +ible +concourse +bps +eloqu +ashford +tebow +roblox +mada +driving +thday +sproject +mms +banded +.!! +librarians +flannel +intolerance +heral +çµ +nemesis +lista +tarak +crypt +starplus +vishnu +scale +cris +%), +jillian +reggae +pegasus +olin +ipment +manic +lfc +goddard +iteam +parlour +anchors +leeminho +tallahassee +antit +dho +kidney +yash +battled +azad +garis +faulkner +sniff +paparazzi +edm +phyllis +contested +aaay +seca +kton +velve +rainier +forum +tampab +hosp +tractors +oxfordshire +notion +guangzhou +ðŁĺ¯ +refill +wednesdaymotivation +slider +mukherjee +pratt +fontaine +alphon +afar +tsi +pesticides +fiends +mocking +braw +transat +doses +cores +homophobia +documenting +zlatan +condoms +sé +sunset +kunst +tonga +ส +vation +spray +chowder +raps +palladium +norwood +musichistory +hooker +sisi +osprey +phys +conceded +bobcat +armad +zeit +ÙĦ +ðŁĺģðŁĺģ +meridi +ðŁĩ·ðŁĩº +cornwall +!), +touchdowns +zeit +chalet +mmm +alche +gorilla +foss +atiku +luminous +ivanka +beek +stares +swiss +âĿ¤âĿ¤âĿ¤âĿ¤ +scrubs +meath +gustav +jogging +confetti +asos +ersfc +breitbart +applicable +authored +yaho +hin +displacement +jv +ðŁĮ¹ðŁĮ¹ +otc +nonprofits +diecast +gusto +intestin +cages +meen +lukas +mooney +ðŁĺ· +veryday +torah +ission +wac +leveraging +ishable +cuse +lewood +mayan +turntable +juice +trusty +tup +etiquette +supervisors +stun +guzman +conferen +rico +feast +backward +polaris +miche +jog +hing +fieldhouse +veling +shocker +escence +ा +vibe +anastasia +marched +killing +Ķë +fett +exoplan +...( +snowday +loh +irani +lakhs +dela +pocaly +boomers +dictatorship +acer +turkeys +quarterfinal +musketeers +ðŁĴĽðŁĴļ +sfx +museumweek +scala +risis +(ðŁĵ· +ãĢĤ +zies +boeh +hues +lusci +dola +impeachtrump +rood +doncaster +torre +heroes +foyer +tari +blurred +kew +frankly +droid +apal +м +yaf +bret +paragu +cacao +ðŁĻĮðŁı¾ +rue +headaches +shawty +charley +paler +gowns +correctional +ðŁĺ©ðŁĺ© +breakingbad +oling +dap +endeavour +citadel +trad +incumbent +meditate +footed +ðŁĴµ +shabbat +dayofthe +willem +galway +tored +marriage +fillion +sleeveless +auditor +jinyoung +invincible +kaduna +aand +volcanoes +moneti +indiegogo +buccaneers +ðŁijīðŁı½ +ãĢĤ +layton +cuckoo +humber +buzzer +Ïī +tore +strains +stom +paine +swe +duff +zou +simi +lipp +urn +seagu +ðŁĶ® +sundae +hic +ðŁĺ¨ +bullpen +uper +flyover +aldridge +globes +alies +kenzie +gees +ycle +splin +magenta +jha +balu +ghorn +tipper +wicker +tasteof +conclave +chale +invasi +cater +dioxide +megab +winn +atp +transformative +nestled +hig +bridging +lilies +cheered +baddest +scrolls +realis +diplo +ðŁĶ« +concession +preferences +explodes +ergon +introductory +ineau +chaf +somes +landrover +spiration +sexy +scorecard +illustrates +soulmate +wien +interdisciplinary +forecasting +entities +glued +enlar +curt +perceptions +bootleg +mire +ashok +vaz +horne +calle +aculture +theroy +nighttime +ocal +characterdesign +armist +ðŁĺıðŁĺı +yahoo +aceae +tose +evento +sout +nayanth +whom +vare +rigging +genus +hive +commands +stie +daya +ethanol +enf +hifi +fluence +clemson +reinvent +thermometer +humorous +emerging +ación +ðŁĺĺðŁĺį +sity +hawke +accompanying +tility +ðŁĺª +recess +protagonist +lery +dundal +intl +brittany +qbs +offthe +marriages +howto +violated +adelaide +witt +lancer +pakv +hume +stade +bragging +outright +adc +superst +realtime +cures +gardeners +erock +dalejr +vero +bartol +moti +mcfly +vpn +stink +overrated +guerra +etis +athome +twdfamily +thab +tnx +rafael +familytravel +xley +satanic +equations +rudy +waldorf +stani +tube +measles +zimmerman +obligations +iously +bowser +transformer +shoppe +shaken +ghouse +tod +ketball +shareholder +marca +kpmg +akan +givenchy +coastal +auth +rollercoaster +marches +coordinate +cinema +apprentices +parlor +mito +menon +considerable +barre +gloss +enhances +jazeera +falmouth +thrash +staten +kzn +engel +samanthap +floppy +salom +ðŁıĨðŁıĨ +wack +deliberate +oscill +heritag +dusted +ornithology +paddle +ferns +barun +clans +anticipate +aay +matically +éĩ +tumble +postman +unicef +trotter +opd +leaflet +geist +ceasefire +screws +creation +walnuts +longhorns +understatement +abb +proximity +nax +unity +turnpike +ordained +dubstep +chakra +mech +loveher +lookalike +donnein +viron +ÙĪ +bangers +variants +outdated +inta +cristo +spelt +foodand +fon +stefani +marginal +hutton +tiara +telford +quen +fairgrounds +quetta +mikhail +healer +vball +tyre +undergrad +glend +homers +scribed +maintains +poche +missal +marko +uas +án +shp +convey +padre +saba +puglia +madhuri +paxton +chaplain +nago +casi +...!!! +flirt +saleh +kare +dire +stamped +extreme +ðŁĺĥðŁĺĥ +hoppy +guadalupe +advantaged +euchar +plow +unn +macqu +portland +clash +pes +loubout +yp +keeping +arcadia +frankie +fiu +deth +encyclopedia +size +invests +ðŁį© +geological +franç +confront +ðŁĺ¥ +dys +afm +texan +graphene +repostapp +acf +ursula +gaza +ddled +fum +wsbtv +mbe +frontiers +chronograph +kes +interfaith +taboo +sparta +wondo +florist +embraces +caw +noel +archers +ðŁIJ· +romano +banan +shakers +melodies +geothermal +sephora +ìļ° +од +proc +handshake +pande +populated +slowdown +hortons +registrations +undeni +lants +passover +thakur +lief +adhesive +petal +microscopy +memphis +confirming +airdrop +mesmer +perceived +mingle +lifeline +ghj +worcestershire +passions +acher +ellar +aho +firenze +barang +letterman +hatfield +lucha +jeter +eshop +williams +horoscope +prede +eastbourne +durga +diversion +altrin +seismic +premiosm +narco +tir +orig +orm +landfall +cious +lindo +maxine +xico +tray +oswald +cba +ricotta +ncr +marau +า +gladiator +chery +lung +ume +popsic +longing +canals +taya +decentralized +shopp +pressures +maharaj +etihad +walgreens +succession +signaling +lig +staffer +northkorea +defying +asma +deg +perimeter +oakville +msk +baltimore +receip +deple +ðŁĺŃðŁĺĤ +jamboree +>.< +rspb +punisher +considerably +intothe +parisian +accelerated +polyester +lowes +frying +sautéed +mouths +seychelles +rax +godis +dakota +housewives +theme +matinee +blackbird +yesung +prefers +pellegr +inated +trunks +strongertogether +repet +repairing +pedals +tolerant +herr +dunne +indication +decatur +btv +exhibitors +ikon +fridaymotivation +bragg +livetweet +alves +womensart +foreigners +wallets +mindy +laney +bbin +tvmiaw +lifter +target +tame +drou +astrophotography +mpc +gpu +nordstrom +friction +runoff +lovable +spnfamily +extingui +bloody +schel +artistry +swish +scarce +phils +maxim +possum +compromised +styli +scfc +issa +birmingham +sketched +angelica +ordinance +jets +conquer +ðŁĺIJ +onlineshopping +sori +reasonably +nuestro +arturo +chl +benefici +sphoto +welt +nikk +ðŁ¤ŀ +danao +formid +asse +afirst +âľĤ +gillette +assor +anonym +selca +femi +bearable +yand +armory +crepe +celticfc +bravo +inexpensive +delec +gecko +newmarket +snowflakes +kabir +contra +canning +morpho +garwal +ðŁĴĥðŁı» +fighting +mutation +woody +jugg +graces +premiosmtvmiaw +kennedy +gup +sae +opha +offspring +finisher +betts +spanning +marj +hone +shing +continents +samanthaprabhu +unrelated +lacy +explosions +benjamin +sophie +noting +microsoft +assen +ahoy +iker +hofer +moe +ahmadi +yann +anak +mahi +beu +ahah +creeper +baahubali +amat +priory +hawkeye +deloitte +skoda +printmaking +assembling +miraculous +noch +swo +lega +operates +borderlands +elie +strongh +reptiles +pirate +unfold +¯ +qualcomm +unpredictable +otr +rosewood +directional +counselors +cornell +liberated +jad +irregular +bulgarian +highness +vodafone +swild +minimize +grazie +à¹ĩ +rstats +streep +ometric +humble +lump +lille +bü +homedepot +tripadvisor +kiwan +avia +erz +exico +duf +blumen +mizing +arma +inim +constan +sora +jual +aun +twell +trenches +hera +rk +poplar +recipeoftheday +llan +bhuban +shortages +ingdon +bridgewater +ðŁIJĺ +fortnite +camden +uncture +prow +colonies +tks +ngo +bhm +livepd +splace +slike +happyeaster +terrence +revolver +jed +yyyy +officeof +mts +existential +rourke +explorebc +ssed +priest +vixen +siding +kpa +ahar +juic +obstruc +forensics +ukmfg +cancellation +weary +abq +elec +prized +debts +mezz +salvatore +mdc +grette +cgc +thon +snowstorm +tsch +cookery +å¹ +waxing +nacional +murs +rave +capes +germain +dripping +submitting +omelette +iteration +ajes +shimmer +fueling +ðŁĩ§ðŁĩª +lipo +bobble +unfollow +islamist +hiber +cats +agentsofshield +sensi +_____ +steria +instal +auspicious +harrow +overland +feminists +instant +chariot +blindness +sped +scarec +nuit +miniatures +hoseok +glock +fifaworldcup +ete +dism +weiner +exfoli +earts +à¸Ķ +myart +manil +issant +forma +incu +buffalob +intim +mccul +anjali +popo +undoub +hila +fungal +thankful +futur +endish +rends +thar +sheff +ringo +nicholls +iowa +potom +clams +ãģĦ +aconf +stadiums +dimp +dik +residences +dov +caricature +seagull +klm +confess +slapped +celeb +turbines +ppv +nurture +elab +.....# +tuff +depress +alfar +amiibo +dispon +ewing +queer +friends +forre +âĺ¼ +swt +aquarius +headliner +curd +figs +otters +lovefl +kareem +govegan +friyay +consolation +atri +ì§Ħ +âĺĿï¸ı +polyne +gued +oya +laus +intestinal +camilla +scalp +pir +leeds +horrifying +boretum +dandelion +ferrer +ellic +asx +soren +reloaded +aleague +navigator +inette +addams +alchemist +akshay +dystopian +awec +naya +alisa +ailed +agor +aviator +alizer +smobile +findyourpark +copying +toddy +shti +monger +calhoun +napkin +breakup +yatra +sethu +richi +erasmus +ferry +amore +practise +bobo +powerpoint +oose +liffe +china +shka +fadnavis +duane +waron +false +ðŁļĤ +washes +discip +======== +gk +abb +stubborn +medieval +pci +ðŁįª +marilyn +hyo +mandi +cri +predecess +continuation +omusic +slat +whal +mallory +bonn +shenzhen +cai +âĺĥ +safest +forwards +drawers +blasted +slee +morphe +mbta +dumbass +ÑĦоÑĤо +alhamdulillah +eclub +albeit +healey +ayurveda +advertised +crocs +ittles +bryson +bei +njpw +honoree +fused +ðŁĶĺ +multin +naga +departs +kop +kino +jharkhand +edna +axle +milton +supremacist +marrakech +dominic +transcript +][# +:). +woc +surrounds +ogil +leaflets +cowell +whew +trude +prolifer +succes +sportsman +condom +poche +kup +imprisonment +{} +scrambled +åĽ +kaine +cellphone +metamor +coni +remnants +eez +downpour +afternoon +exercising +berser +architecture +wicklow +mns +isp +boc +niss +mnwild +stumble +rsi +luffy +silen +ddad +bullies +hawker +bbcc +scuba +epp +quets +foraging +pallet +hadi +cinematographer +catchers +toaster +khi +litecoin +kidlit +amherst +mauricio +ipad +marmalade +fey +donnelly +gto +estas +cerebral +antgrasso +zzled +virgil +swapped +ðŁĺħðŁĺħ +nodapl +greatest +nhlbruins +fraser +bmo +anew +.âĿ¤ï¸ı +segregation +remarkably +mccormick +logger +eras +contracting +âłĢâłĢ +yorks +ukulele +touchscreen +decked +benn +southwark +ravin +numis +ðŁ¤Ļ +rut +greco +ethic +redneck +arr +tcs +ihri +ðŁĩ«ðŁĩ· +lk +inherited +zyk +viaduct +martyred +higu +ssn +bein +streetstyle +fergie +bankof +æĹ¥ +stakeholder +exemplary +cress +essa +erotica +intrepid +gomes +braun +bethany +bangtan +pulmonary +milling +doctorate +trumprussia +र +sani +blatt +plau +deprived +tle +fully +bourn +stak +lufthansa +kiosk +faroo +defy +badan +ðŁĺĺâĿ¤ï¸ı +ritz +trisha +rands +middlesex +arabs +proj +sportscenter +repeats +ivf +bleedblue +assure +obs +territorial +elen +beverley +annah +âĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ıâĿ¤ï¸ı +zl +forgood +sciencefiction +glau +sonya +prith +stweets +mixers +mario +antelope +writingcommunity +wentz +denham +bedi +sfo +harleydavidson +lookbook +immunotherapy +orphe +esville +edged +task +sbball +corrosion +kilometers +costing +playback +keke +divisi +uter +relocation +yelled +peng +upbeat +serve +âļł +halen +stirring +rehman +env +schumacher +fragment +alkaline +sbk +resili +sharepoint +rollover +trash +counterpart +âĻ« +obitu +འ+ãĤ¹ +mulberry +ðŁİĨ +autonomy +spraying +natl +loveyou +franki +nuk +escar +canteen +alibaba +deplor +molecule +pud +fortnight +blondie +sphin +portrayal +tache +bute +consisting +freepalestine +csp +immort +dns +ðŁĴ¥ðŁĴ¥ +tourde +cooking +archival +gathers +bitt +banc +premature +snowball +poetryday +loudly +fugitive +eday +emra +ðŁĩ¸ðŁĩª +scien +nodejs +jurgen +jeong +bandana +unis +foxsports +vandy +provisions +weep +tuk +iko +houn +ziggy +zr +fillet +bata +tink +cone +wewant +kilo +horace +slt +sct +staytuned +victoria +umbria +attacker +inghamshire +frightening +noir +frat +contempt +liaison +hoi +brink +trill +niagar +kickass +dundas +notmy +rhode +bumble +noxi +fag +spectators +mancrushmonday +jinping +distract +daisy +walden +portrait +arthistory +voltron +evel +isc +acm +rite +nao +deported +sweats +rufus +lobo +laborday +gamo +ihrithik +blit +abdominal +ãħ¤ãħ¤ãħ¤ãħ¤ +iit +eq +busy +alluarjun +undisclosed +deton +procreate +kil +ðŁİĤðŁİĤ +mitchell +kii +inheritance +alp +joburg +patrolling +compulsory +unsigned +niam +lga +eshopsuk +trilli +maw +appreciating +rockab +mañana +antal +malvern +royo +grandprix +sutton +goftheday +digi +ãħĭãħĭãħĭãħĭ +tles +varanasi +erected +disciples +contact +ðŁĺµ +lid +â¬ĩ +scentre +radiator +ingtips +transitions +thursdaymotivation +chemical +separati +salis +mim +geographical +bookfest +/. +âľĭ +vae +currie +aggarwal +acceleration +theses +lgm +umass +proportions +nata +anians +kuch +beacons +apr +@# +ðŁĴªðŁı¾ +nuke +sheraton +kio +makati +politico +morale +ìĻ +economically +ggly +ssen +pastries +internships +vicente +fantaken +avengers +accuse +sleepover +indicated +thedream +sterone +renders +frost +oui +gregg +dore +⾨⾨⾨ +pugs +saty +numb +hemsworth +tami +lassic +schiff +iglesias +agawa +]" +reshi +gamestop +divorced +theater +claudi +unconventional +prophets +acin +twelf +towering +tml +sclerosis +kwan +gets +disturb +naira +energ +piracy +pruitt +notified +henna +bram +groundwater +bls +optimis +$) +lucie +bizhour +fangirling +grills +orl +verse +cina +lawless +artistsontwitter +televised +marshmallows +radiohead +barr +mfc +brevi +mmorpg +gaya +âĸ« +subtitles +jt +disneyland +tobago +nhm +groove +fiawec +"/ +bao +scrabble +omni +ffl +umc +simba +alier +terrell +plume +midi +dignit +coc +brut +adata +alchemy +dsm +ðŁĺĨðŁĺĨ +wintry +spares +cuer +conclusions +toys +odor +flann +garvey +scriptions +inspections +catap +anglo +stlouis +heimer +atay +trich +enyc +childs +ventil +montp +guillermo +circulare +zell +modeled +craftsman +alina +stimulation +cashew +judas +bestof +toire +suspends +scollege +realising +bytes +bloods +assi +ðŁĴ¿ +ohs +ðŁįĭ +scallop +व +gifting +camogie +wilkes +ozzy +ðŁ¤¤ +veronic +savoy +demetri +babygirl +ðŁĺįðŁĺŃ +sox +clyde +inductee +countdown +selfcare +à¤ľ +vika +torre +phdchat +pears +awh +suffrage +lesn +admiration +mpp +sharkweek +schulz +santorini +clover +(* +strasbourg +exiting +soyu +fingerprint +chea +ãĢľ +vindic +songwriters +soa +prouder +nama +=)) +simplest +deliciously +gilles +uq +mnwx +epp +shun +kennel +fallon +ðŁIJ£ +sind +tragically +outes +modernism +coke +gyn +spion +âĺ¹ï¸ı +leam +compressor +apologise +twentyon +fanatics +âĻ» +scotsman +sawa +kou +aser +à¸ļ +welterweight +phenom +twickenham +stria +pout +kaz +giam +cdp +hoy +employ +redmond +à¸Ħภ+smere +trancefamily +protocols +piece +luiz +iteracy +carls +unitedstates +harmed +phdlife +chaw +footprints +lé +choker +zana +slipper +ericsson +insulting +artichoke +advising +acquisitions +opor +mutations +rear +à¥ģ +podcast +wither +kung +íĺ¸ +winslow +diapers +ðŁĵ¸@ +ecker +collar +huey +giro +monogram +kasich +siveness +malaysi +aromatic +gres +galileo +uji +robb +drm +nonetheless +asa +:> +loa +lnp +atwork +agt +lakshmi +pipelines +idal +strel +reall +chainz +stonewall +sansk +ðŁı´ +piedmont +hostess +ciu +té +analyses +wilhelm +scotty +rwby +mosquit +usemb +quins +ðŁijİ +tucker +sconf +specifications +psychiatry +brookes +sils +olaf +deto +codi +clip +filth +womancrushwednesday +goto +angerous +beale +wtc +panelist +nex +larsen +emilio +tableau +hitters +conceived +americani +ortega +mardi +Ñĥ +paintball +thirsty +newyorker +etisation +goss +weaker +ugh +troll +harga +dual +ghtning +atine +ðŁĺİðŁĺİðŁĺİ +cookout +pyrenees +poss +authentication +sportswear +yunho +kiro +archipel +shenko +render +novation +divinity +ðŁij£ +sufi +humbling +geopol +devotees +waitress +trough +pyro +iba +bling +graf +epilots +btr +oftball +basking +dominos +soom +rath +sheryl +quel +astronomical +weld +tracklist +signee +sleepless +comman +chron +summon +puremichigan +crispr +slip +lagi +raq +umu +thalap +charmed +scrump +quadcopter +skip +petersen +muni +ðŁĮ¾ +monaghan +trays +icked +canadaday +tegr +� +hotness +heavymetal +abar +gopdebate +azul +spiderman +sunflowers +ľë +webcomics +bard +в +nicholas +slush +raman +markham +fficial +ffler +íĬ¸ +pless +anushka +toto +skaters +prowrestling +competes +ayala +mystery +thrills +mpg +independently +yul +imperative +formidable +tireless +stacking +tongues +maltese +potts +matti +charting +chillout +supernova +omeo +skysports +nutty +ðŁĹĵï¸ı +rohan +inspired +concierge +serra +makk +galat +chipp +yev +ì£ +reimbur +opul +kimberley +ieee +bremen +chitec +orin +naku +bonkers +footy +emergence +ðŁĨĺ +stip +sergei +zoey +aime +would +dyes +destiny +vinaigrette +drier +circulareconomy +anarchi +ssr +schel +ciner +groom +determining +garmin +calais +incarceration +bukit +noi +chelmsford +mckinley +chipped +belonged +tumors +stroud +mii +influenza +wwenxt +tundra +telecommunications +catsofinstagram +tages +beatty +odu +mlkday +ooper +dangle +akley +crumb +antigua +timbers +rouhani +ðŁĴªðŁĴªðŁĴª +hafi +...!! +wcs +coop +snc +litres +ãĢĬ +haz +coz +kant +greenfield +curti +yale +flyeagles +whatsoever +worthing +roulette +flyeaglesfly +unda +ainted +standing +luscious +hpc +efficacy +ashland +meghan +kywx +npr +bathtub +acos +hani +marcor +mantis +daisi +boba +abbie +mutil +vial +spyder +poz +gti +elfie +nightw +metroid +antoni +maddie +dhry +darlings +tends +taekwondo +atlanta +meow +chloe +ãĥİ +ymes +siberia +kcon +gues +mariner +facil +azzle +[... +hannover +bavaria +virgo +teuk +usps +)# +walla +sampson +needless +verbally +hayley +bowled +pius +lampard +hamstring +volvo +roadsafety +choking +sorbet +ahem +healthyfood +braided +horticulture +crative +cheek +addo +theforce +koko +schizoph +jie +wada +twentyonepilots +hbcu +proton +pauls +louisa +latam +kyrgy +compac +sdk +sapi +??? +liberalism +epsilon +aiden +wusa +sprayed +basketball +kimono +bluewave +alias +ë§Ī +mugshot +cec +dogre +adora +ðŁĵ·@ +krakow +intrigued +exhausting +astronomer +venison +ladybug +civ +brae +usm +bribe +acupuncture +pembroke +keating +chie +yad +tsi +smi +seeding +gateshead +lisboa +gyp +canvass +ðŁĶ´âļªï¸ı +opi +nir +societal +lyte +aties +csm +artery +alin +akapoor +abstracts +âĢ¦âĢ¦ +teenwolf +newe +travelgram +sentimental +perched +handel +hoek +fay +coordinating +animate +manian +effort +jerky +fck +adrienne +mably +trading +myel +spiro +sola +storing +overdrive +mondaymorning +dreamteam +pulse +bondi +bernie +pgatour +tripoli +sonam +platt +âļ¡ +agroup +îIJĴ +invading +vcu +kell +ños +undead +podcasting +mercedesam +manafort +cortex +queso +impeccable +palmer +wildoz +sportsc +guacamole +dispenser +categori +stunts +peril +invitations +dunedin +xie +achieves +safer +preds +phan +knuckles +kak +ignores +lovemyjob +aruba +oundation +datacenter +covert +gring +couple +ار +voli +mccle +artisans +ludo +kalam +aroma +undertaker +hula +wizkid +gumb +godfrey +bakersfield +kern +engineer +carve +palin +guarantees +pebbles +bays +zieg +fink +â¬ĩï¸ıâ¬ĩï¸ı +downpours +rochelle +raspberry +ðŁĺ® +graphies +stomp +cafes +arized +uttar +calvary +drie +crusader +busan +tuxedo +siu +seamus +cultured +blanchard +townhouse +gered +buttermilk +fluctu +rogerfederer +heli +ðŁ¦ĥ +uous +ramesh +muppets +emailmarketing +yess +brice +rizio +pelo +donneinarte +urable +investin +bumping +rajiv +sava +thrower +forex +ohhhh +thrust +pullman +rfid +sepsis +leed +fright +rounding +neb +phins +aisha +utilizing +squats +goldsmith +jic +boks +vaus +ipo +exclusion +tariff +pokes +minal +lands +enforce +washingtondc +orchar +gx +marys +eyour +aussie +bakers +unpopular +latinos +large +putnam +bolo +wade +pelo +dizz +obstruction +flappy +wearethe +dependence +pajama +ete +yann +ewan +discla +aay +karina +eic +antrim +wsoc +negatively +kaido +fotografia +dhru +colossal +mcleod +kwang +manipu +exhilar +usatoday +summerslam +coles +taproom +unbeatable +dema +ticks +kling +fils +campaigners +à¸ķ +brewster +audubon +quay +chs +kigali +dler +strengthens +somal +signingday +golds +pigment +orchestral +gq +linkin +ðŁıĩ +taw +algarve +hov +earle +goldfish +amig +exer +benin +druid +ðŁIJ¸ +shem +quattro +mercen +mente +incorporating +bonanza +statefair +ende +conceptions +ees +âĻ¥ï¸ıâĻ¥ï¸ı +dson +firearm +orbital +weh +multip +fob +requiem +plight +thouse +said +ocre +remembrance +nold +chipping +bev +ert +cathy +sym +riggs +mley +dialogues +slender +howl +gauteng +wdw +tobi +smokes +implo +bpm +adn +mombasa +capsul +bloomfield +articul +cleo +googled +fluffy +lard +enzyme +vesti +ibrahi +flame +emea +outages +dispropor +bleak +ansel +icker +stlouis +stockmarket +goodfriday +sault +stalled +prom +epsom +bé +these +sauces +mew +litfest +pred +reu +karak +sienna +ellin +biotechnology +ï¸ıâĥ£- +tactic +sain +pork +monza +kaj +lush +compartment +changing +shraddhakapoor +foal +artem +cuando +canola +oriente +messe +dited +brc +boxer +bbctwo +sst +mentday +eming +dewey +kofi +âŀĸâŀĸâŀĸâŀĸ +realization +smol +twood +sanje +flagstaff +berwick +corset +canary +whistleblower +etched +composing +squeezed +bower +autodesk +neh +mathieu +baja +ÅĤ +hydra +daim +ameri +insisted +merlot +garros +heartnews +gainesville +cutler +bode +ðŁĺīðŁĺī +lewes +scountry +gsa +usu +ccm +godawgs +pharaoh +crae +morley +hypnoti +fades +neurons +fuzz +ingco +highlanders +stark +vigne +packets +amarillo +reuben +insults +basic +vector +nme +acruz +tros +transmitter +ðŁĺŀ +interpret +ðŁĺ² +prequel +mcgowan +dissemin +ðŁĴĺðŁĴĺ +masculinity +indiegamedev +alive +tet +petal +emailed +armed +koo +heer +baird +superjunior +metropolis +delavin +declines +stitutes +Ûģ +ptbo +glan +chores +ealing +chrissy +stemc +vian +assassinated +pronounce +illegals +discovery +cavill +frifotos +fal +soi +sabotage +tint +pdc +ðŁİīðŁİĪ +ãĤĬãģ +jio +endeavor +insig +committees +shearer +metz +marrying +hdd +gby +fret +trish +pul +scripted +saki +lw +keye +shimi +nanaimo +cah +ë +tempered +ician +dugg +dishwasher +airfield +srugby +grinch +yst +rms +mahatma +lankan +discar +digestion +nodes +lls +omic +gutter +tisgarh +federico +electionday +bohe +mastercard +fireball +âľĶï¸ı +oyster +pong +dok +enroute +mvc +beatthe +alistair +shub +shaming +chernobyl +ghibli +thes +pinion +dbs +salts +iction +epiph +ncpol +inconvenience +whitley +inspecting +woodley +wiener +skillet +noles +mca +hina +asha +willingness +wellness +tamed +showtime +disadvantaged +bernat +usn +missionaries +counselling +arrogant +quantitative +legalization +hodge +energyefficiency +camerondallas +possessions +pbb +harrisburg +vg +hinduism +happythanksgiving +fib +reacting +tweetapicture +politi +muppet +hurrah +pace +coastguard +guarded +asam +parry +forevery +xq +oomf +keanu +jind +rist +customerservice +sacred +ðŁĺº +toner +occurrence +matu +valdez +redd +isak +powerrangers +peasant +rajini +abraham +emil +cardo +tril +hairstyles +obsolete +sampler +directive +delavinkisses +verton +glos +spay +palermo +comets +manziel +chicagof +skipped +pictorial +hant +bmi +aol +reopens +paddling +devos +fraud +baseline +queues +spired +snare +euve +descriptions +daisies +caching +galleria +trimmed +stino +recycla +icular +birken +rawlings +flix +chicas +bgt +likeli +argyll +thelove +gaston +blanca +hak +fone +sailormoon +haci +imac +flyn +decan +belles +apic +zog +taunton +constance +lasagna +kernel +inka +harbor +collectively +calculated +aville +shilpa +purdu +gimm +funer +aest +pembrokeshire +nightingale +nunes +hypertension +hubert +sliders +infertility +commended +transatlantic +metrical +!!@ +ÅŁ +ssg +bacca +inverted +funfactfriday +itans +album +acquainted +rier +whelan +sarab +mue +snooze +piff +agreeing +spitting +jermaine +nye +âľıï¸ı +ambush +zeph +congreg +university +sapp +wannabe +patrice +ibd +doglo +fridges +sund +kingston +argon +kamen +hardrock +dsley +dolores +ì° +otaku +piping +behaving +âŃIJï¸ıâŃIJï¸ıâŃIJï¸ı +bluebird +ansari +teapot +firework +crop +logans +typed +thickness +igers +cfp +dysfunctional +contrasting +etty +astonmartin +txst +dragrace +attributes +marathon +manuscripts +johnstone +ðŁĺ±ðŁĺ± +boer +ayu +arugula +poorest +condu +assumption +anagh +noh +delavin +sitter +gö +morow +kickstart +comi +glacial +ghead +bain +kershaw +endof +freud +omat +iaf +hug +signup +eachother +definite +tubing +shakira +ðŁijıðŁı½ +uuuu +swin +shambles +olas +skell +britain +knw +clutter +omy +jens +hanged +cityscape +scraps +unlocking +deadliest +erno +breastcancer +ait +inspect +furi +ðŁĴĮ +kud +jule +orah +mids +mdt +burgring +rattle +pusa +stalk +cleans +issance +zek +worthit +nameis +muskoka +councilman +urbanart +barrac +unsolved +tul +gita +whiteboard +soybeans +ement +conti +saturdaymotivation +conveniently +docking +tado +âı© +spino +puppylove +pof +fabricated +robbers +adopts +tified +kkr +indulgence +noticeable +macquarie +chapel +sensual +kiko +melanoma +loretta +liance +aben +splus +gaal +acele +libdems +comparisons +ðŁĮµ +rhythms +mery +encapsul +napier +ðŁijĮðŁijĮðŁijĮ +ðŁijIJ +platz +fresno +reformed +ranbir +elit +thebest +bhushan +vinnie +improvised +sittin +recreated +eba +ecker +acrob +ponte +cord +giddy +eurusd +fever +intuition +gari +dummies +budweiser +amendments +tetra +schnit +ayas +marys +cist +kani +kermit +ðŁĺ±ðŁĺ±ðŁĺ± +tinker +strolling +divisional +nigeri +ominous +menstrual +karab +khy +bwfc +panhandle +lilli +weller +strapped +sonthe +transferring +ethereal +sneaks +rudol +gables +jacking +cincode +fortune +canadiens +confor +abnormal +franklin +tita +mula +persist +cuties +kiel +ðŁĩ±ðŁĩ +hermann +awk +fiasco +koto +weta +hiker +buddy +preventive +mcgraw +gameboy +forsyth +topshop +siob +sadh +intram +followart +soaps +dragonball +oux +morrison +à¹ĥ +lubric +adulthood +morrisons +âļłï¸ı +hermo +taka +stallone +misuse +teamgb +ragha +confined +aty +homophobic +nwo +skynews +hoya +acrosse +wiiu +purée +jeddah +ðŁ¤§ +advisers +phine +anis +scrumptious +ë°ķ +cke +viny +term +sdc +odo +homeschool +vasc +leopards +deborah +illicit +curran +asroma +naught +marig +brandi +emp +ðŁĺįðŁijĮ +îĮ +suspend +luz +initiation +schaft +jensenackles +crawler +postdoc +desks +trailblazer +denomin +trix +noise +poet +±ï¸ı +smug +volatile +proofs +pharmacist +sardinia +mashable +kimchi +coed +schalke +doodled +csw +shur +rox +dok +chrisbrown +mathematician +abound +angelic +rockford +dole +yorkers +msn +gman +xavier +borrowing +markings +longhorn +kja +diverted +mmit +euphoria +ayyy +tea +pah +cki +uncut +liven +kyung +fanart +mering +redding +amovie +gridi +cthulhu +scholarly +judah +thbewithyou +eucalyp +ðŁIJķ +hertfordshire +courtroom +byu +auctioned +please +marcia +ê°ĵ +succeeded +elas +arvind +tlot +saigon +rett +rakesh +fdny +asen +sebring +gladiators +youknow +vlad +gola +parap +ÑĢи +sabcnews +oneteam +ohl +sune +rij +cdc +stargate +rundown +plato +phc +chatter +raviol +mnf +mandala +liet +à¸ķ +maria +hungover +consolidation +ferrell +traditional +iloveart +galap +ðŁıĮ +quezon +españa +ðŁĩ¨ðŁĩŃ +hobby +steamboat +malign +guillau +prohi +itsme +íĥĢ +inscription +alz +marian +kade +mmon +adjusting +nests +internally +cir +vikram +malala +kph +felicia +thereal +captivity +atis +marcorubio +kaleido +chev +manoj +lemore +gentri +vips +trope +"âĢĶ +pairings +malnutrition +fray +designation +brunomars +aze +torrential +panzer +gail +underthe +theological +schizophre +dazzle +frederic +mopar +adilla +soggy +raun +mediocre +colorec +ife +pinst +bluef +² +worldwater +giroud +clarinet +adolf +tarantino +receipts +assump +ðŁijŁ +coffees +âľĬðŁı¾ +duplex +sof +rx +lino +timberwolves +pandit +motm +ega +ayama +achs +outsider +llen +coer +tilly +cheeseburger +mads +pledis +empty +nationalparks +aziz +pmi +junkies +fener +sqn +ès +generation +cleopatra +bhubanes +mosques +tyfree +poppins +twc +orwell +nage +kawhi +hollow +dalai +¨¨¨¨ +ouro +mhealth +gion +azo +visas +renegade +reic +wsop +ðŁĴļðŁĴĽ +echel +toxicity +mün +bunk +stimulating +asthour +\' +eph +endemic +cnbc +shrinking +peabody +michelangelo +canyon +wale +sumi +siders +inuit +?. +professionalism +dracing +platoon +pons +outbound +mapleleafs +desol +cency +athan +verma +rubbing +okan +ðŁijł +mullins +authentic +Åį +almanac +gaia +bbq +onimo +keh +tya +touts +yav +reposit +,. +wight +seeyou +callof +donesia +bargaining +granth +sdsu +amphitheater +psu +rewatching +winetasting +peakdistrict +detecting +thurman +phee +èªķ +umich +rer +sculpted +gole +namesake +ðŁĶģ +servicing +baugh +pugh +pencil +darth +munchkin +atorium +teners +suny +rollingstones +maging +starrer +idris +feinstein +agron +âĺºï¸ıâĺºï¸ı +supervised +chameleon +aggregate +successive +mogul +instyle +poldark +custome +ohiostate +haya +cides +brokerage +angelou +fifawwc +deforestation +alton +pamph +hugged +hobo +changeable +kuber +burroughs +demonetisation +capecod +versatility +orice +leila +womeninscience +tua +hedges +embarrassment +alife +soars +nighter +hymn +gipp +chasu +techs +niall +killa +hika +camels +value +¢ +scoops +mahmoud +clusive +adriana +paco +ozil +unas +translations +whisperer +sbi +buxton +biotics +indiffe +kenney +klar +etching +barrabest +instability +seine +votel +blogged +whiskey +myspace +tant +landia +giveback +illus +awak +acab +fbloggers +cloudcomputing +blatant +syrians +bandra +styn +anem +keted +karthik +barunsob +pinot +gubernat +gaye +artiste +ified +conventions +huan +geniuses +eeeeee +folly +somerville +pridemonth +ðŁĩºðŁĩ¸ðŁĩºðŁĩ¸ +chemotherapy +pauls +bakar +ìĦ¸ë¸IJ +taiwanese +follo +css +reign +nnnn +flaun +catastrophe +ities +fragments +extremists +ymoun +carmen +ezekiel +connecting +seh +manta +remodeling +weymouth +atoms +cem +newell +lumi +theopen +moc +miliband +gland +zshq +maggie +maniacs +msp +ady +creams +leanne +esta +pyg +affinity +prayer +dunbar +lightroom +acadi +wynonna +romantic +statedept +sickle +whos +lamo +etour +finity +shrub +sharpen +pundit +edon +afore +mars +jeffery +terps +medallist +katharine +accusing +taz +royd +fromhome +confrontation +allegh +ðŁijīðŁijī +refresher +ranveer +neverland +jojo +lucrative +enam +caver +paedi +manjaro +fluids +thessal +oppressed +muss +johanna +Ø® +cng +buildthe +settles +sith +fuego +clamp +arag +payer +tedx +mandy +interstellar +frc +chand +bcc +molo +lentil +johansson +grimsby +naturelovers +ðŁļ¨ðŁļ¨ðŁļ¨ +shinde +xin +internationaldayof +transitional +sata +caddy +wod +ifu +hays +hollyo +jang +irc +coim +gradable +"" +ðŁį´ +া +ael +nyo +westlake +timeout +sofi +phenomena +cultivation +agno +unarmed +sot +conj +geno +royalnavy +nutrition +fairmont +tirelessly +sng +rety +mica +lucent +sloane +drool +rizal +odell +criticized +.'" +laze +deserted +coder +pras +lillian +itinerary +davy +anap +whipping +hoboken +kareena +羣 +vius +tern +nantucket +misunderstood +bulaga +stant +chinook +zam +relies +dss +edmond +sketchy +mell +fex +rector +distill +daydream +winemaker +ripley +billionaires +helene +atif +culprit +bertrand +wouldnt +mapped +vak +gladly +parliament +kidlitart +wareness +goliath +âĨĵ +viewpoint +tatted +fuls +dorsey +anglers +lids +kiya +bowles +beh +bite +compatibility +ancestral +prox +behaved +gubernatorial +chfield +saban +zh +teeny +shibuya +holliday +pancy +âĿĦï¸ıâĿĦï¸ı +seungri +?, +ðŁĩ¦ðŁĩ· +imitation +impactful +anyi +genevie +años +bateman +glider +afar +rasheed +effortless +shwar +dachsh +erun +atos +kini +chd +khaki +klin +felicidades +belo +asl +toppers +finley +stacey +rigorous +karting +leppard +carmichael +beret +cse +akhi +meringue +aban +hake +geri +erjee +resto +commanders +prit +flor +adven +extermin +remainder +åIJ +esg +martino +lullaby +|@ +mign +instore +bigbang +cordi +cauley +antebellum +dgate +crock +spandex +scaffolding +oreos +ê°ĵìĦ¸ë¸IJ +pomona +mauro +universi +remi +afootball +tant +smalls +neh +worldo +tropical +morph +javelin +glar +arquitec +reminiscent +tubs +spidey +makeu +sylla +progressives +blot +shorten +keepin +chak +angst +superfood +decadent +stony +neurological +arboretum +annak +fema +percu +disrespectful +smallbiz +lox +coom +csc +bsbi +prevalence +himss +espan +moga +frampton +skymap +masse +leviathan +(). +nocturnal +carameli +angor +amnesia +outsiders +shealth +rhino +antag +agio +ðŁĴ°ðŁĴ° +takeme +kabaddi +csi +msh +cochrane +thessaloni +sila +haus +dusting +obese +macklemore +manish +lenin +mdc +grown +sheffield +srs +kele +carson +chum +dahlia +cantore +oppo +howling +cybercrime +surrealism +scran +faiz +thren +racists +rout +pknot +semana +sini +mccull +machi +alfonso +yb +sardar +kendrick +deng +recipro +onf +doomsday +bribery +customiz +artis +cpi +ðŁĻĪðŁĻĪ +slava +lette +ens +âĿ¤ï¸ıðŁĺĺ +crayon +adan +trc +migrate +simpson +rowers +kingsley +farmersmarket +sheehan +nephe +bornon +carton +mickey +allure +ulu +slipknot +hebdo +guido +dogcelebration +onlinemarketing +accelerating +).. +originated +macaroni +edtech +outfield +mitz +discus +advertiser +manor +hashi +descrip +capita +fulbright +receptor +conn +coney +spionage +rattle +prest +uli +blogpost +ackeray +)âĢ¦ +redvelvet +matth +inspiring +bsd +kerri +pocon +millar +repur +accenture +ä¹ +rambo +ragnarok +deleting +britishmuseum +patory +leipzig +florian +scifi +iners +brate +yoy +melissa +aber +masa +pote +mosquitoes +transplant +rpa +;)) +bastille +ylan +joyeux +melodic +captions +atrist +rochdale +gotti +pewdie +cutiesaturday +whois +aquaculture +tiva +spel +hess +haji +freddie +coper +brando +vk +photobook +*, +mydayin +michaela +brunei +srini +inte +ı +deol +dfc +separately +bund +vests +toc +meck +reinforced +constraints +carroll +sqft +rever +camper +birdman +inaction +generators +triumphant +pests +ovo +gypt +alamo +scaled +sureshpp +sdn +ismo +gios +)@ +justiceleague +restaurant +gabi +dengue +nextgen +exempli +apex +inspirational +downside +kidz +upl +etna +alvaro +feldman +barnet +mha +esch +blooded +>>>>>>>> +kani +hofficial +casablanca +birds +tyga +swamp +oday +newcastle +nbap +cision +chools +aflo +nep +monton +akb +supermodel +downtime +thos +scwx +snoopy +aggreg +yoke +norcal +wett +prolonged +metast +beater +fta +tlap +disgusted +yh +voiceover +itchy +ipc +ðŁİ¾ +pheasant +straits +rampant +jg +fertil +assures +fortunes +salinas +lizards +kettle +ibs +cynthi +heg +mccr +socceroos +happenings +corden +ðŁĺĤðŁijĮ +tches +egret +wolverines +congratulated +hogg +bottling +wri +ferri +bosch +afire +ogden +sjo +jdm +svt +contex +tollywood +mink +mese +supersonic +opoulos +å¸ +âĶģ +knuckle +guise +gami +chucky +zinger +radial +complained +boda +fetal +disciplines +corro +ðŁĩ®ðŁĩ¹ +opted +filtration +adnan +emcee +mistre +insomni +fergus +trajec +ondon +medtech +tangerine +madras +grue +cabs +zhu +sureshpprabhu +insulated +dayswild +ppm +bandai +vday +sff +squid +lothing +notdead +expressive +cull +alastair +xu +upfront +fishers +enes +umd +dismissal +stier +sels +lust +reactive +protester +eyelashes +alim +goode +greeng +dair +compen +anushka +prototyping +mapu +bearings +ðŁIJŁ +forme +bsbibotany +timothy +outskirts +ambed +aretha +wendell +streaks +nim +kpk +snee +fitter +quota +pate +winning +ðŁįŃ +shopping +mainst +culver +stevie +mcfadden +counterparts +grenfell +folsom +dorset +techcrunch +â¬ħï¸ı +tiptuesday +usl +trex +georgie +ranveerofficial +licks +sewn +kf +'âĢ¦ +japs +pate +orthop +festa +stras +montal +hammersmith +foremost +widows +madre +itez +mitochondri +ligans +zona +caribou +mss +andrei +weatherchannel +ghc +:... +taft +aweather +alisation +brutal +blissful +nikola +malicious +qm +mpgvip +brodie +blitz +applaud +dribb +vague +doggo +translating +interpreted +hatched +getyour +beneficiaries +sparring +caesars +awilliams +lahat +broke +timp +virtues +relying +pietro +ktn +icists +pablo +loui +aag +pnpp +chast +pulses +finish +usairforce +typewriter +thompson +dogs +utto +ãģį +sandal +newly +doge +zw +wankers +negr +mucha +determines +blackfish +skunk +mups +instrument +phyto +daystogo +skinned +haider +conten +ðŁIJ¾ðŁIJ¾ +weiler +undoubtedly +chairing +wallis +shard +zindabad +adult +absorption +presto +deploying +drummond +battlefront +seagulls +howdy +judaism +desde +partition +âľĿ +nology +nationalbestfriend +lesnar +filmfare +coasts +christensen +acan +mbu +copped +rubble +swc +funnier +farther +whereas +nanotechnology +withstand +pillow +bowers +tope +itly +confit +makar +comforts +bosh +clipper +balla +stik +milb +safeguard +musique +easport +yaz +padded +bader +foreign +chopin +archive +oka +transporting +tmltalk +ajit +consequence +scroo +ffo +collaborated +pugchat +yemi +javed +auburn +oof +maw +saucer +mitigate +iles +evangelist +terie +recl +indictment +cata +brightness +maythe +whimsical +unlv +keyword +cumin +medway +westworld +traw +imposing +formity +coulter +abz +nypd +grassi +kelsey +qldpol +clockwork +fdr +dianne +âĺij +adh +pann +bravely +aege +unlawful +verdi +pocalypse +pharo +karla +resonance +mastiff +ladak +buu +mailed +hii +crawley +torrent +machado +libyan +effortlessly +falsely +qvist +keef +crafthour +cherished +valkyrie +sari +kalamaz +behe +ðŁĮĻ +thim +roddy +coltrane +butchers +achim +wkend +awkward +cabrera +:)))) +franc +declan +condos +aja +pandoramusic +charter +phill +montrose +hatchback +handicapp +greaves +eucalyptus +utmost +tson +burton +midwives +incur +ðŁĺį# +mood +compressed +toma +mustang +mog +asana +testic +shotel +insol +corsair +nhq +benny +smma +kapur +incon +jonas +energies +donal +asad +sez +npa +archived +stimulate +dop +hyd +grieving +ãĥĪ +rona +whyte +treehouse +ssell +sandro +kobo +thermost +seclu +hiya +geez +mamas +priscilla +flavoured +fass +wold +makerspace +cosplay +ptv +happyvalentinesday +sequoia +lovecraft +guan +dtm +cii +yokohama +posthum +req +ðŁĶµâļªï¸ı +galatasar +dolby +hamptons +disturbance +stonehenge +okc +disrupting +monthsary +jungle +headlights +dustin +microsof +happymothersday +koko +grazi +testo +naidu +malay +arial +rumb +aboo +harman +trape +spoils +jeho +godly +lockscreen +zun +pious +magento +lenders +probable +corporal +mour +awal +sua +callme +tonne +govin +devastation +xj +gearbox +warlock +perme +itate +gazaunderattack +duval +parasite +clemente +leth +iva +frozen +tholes +tobin +cairn +sill +luckiest +converts +stale +pancra +europale +wisdom +schur +ì¶ +vertigo +bij +ubc +nure +righteousness +mtc +factory +verst +reversed +huri +heechul +faber +arr +ulous +venom +phat +greenery +brady +æ +:(( +nevergiveup +disha +mota +healthcare +dunham +dexpo +denzel +bbins +fics +wham +mcg +elian +wata +stralia +tellu +pesky +spinoff +armoured +reacted +dofficial +tedu +sagar +morally +paralleled +fios +downer +daugh +redo +worldcup +tariq +barne +glaciers +occult +barbarian +hermosa +!!!) +yur +internation +pss +situ +pint +americanair +swam +doppler +ðŁĴĻðŁĴľ +cincodemayo +levan +hellenic +mcne +judi +yuh +stx +quare +ðŁĺĤ. +stig +gels +motley +hardwork +eurozone +ead +ç¥Ń +seabir +cius +laid +alpaca +presumably +pewdiepie +booted +amari +tamine +solace +barrow +academies +xian +omination +dungeons +bma +deity +aik +stabil +hira +affectionate +vingne +newport +ãħĭãħĭ +thirds +retains +aromatherapy +skier +nima +dope +cringe +condomin +toor +animator +saraj +seascape +minimalism +lakeshore +callaway +bergman +à¤Ĺ +whispering +stupid +rightful +requis +irn +seva +utpol +tuberculo +squish +debut +governmental +christine +allman +weapon +sito +buri +lolita +leafy +fuch +tinted +mcken +ahahaha +ðŁĩµðŁĩ¹ +repeal +negan +ðŁķĬ +tailgating +gameinsight +ðŁıŁï¸ı +yakuza +zt +tiring +proposing +bowlers +traitors +akshi +clergy +cito +upsets +tuscal +symphonic +silently +shuff +blackwell +ðŁĺĤ) +kobe +roberto +ridg +dcu +merino +ftp +eastside +.~ +nbl +mnleg +tsfor +fraudul +capping +inmy +gymnast +stones +ssin +tweaks +shaggy +oakland +demsin +sangria +mmva +hennessy +downton +rightly +init +agave +oblast +northeast +friendship +dala +trophy +ðŁij½ +magin +margaritas +ê· +wwfc +fash +dike +cud +chart +ðŁij® +refugees +joplin +ncs +impy +firmware +pascu +flamin +healthtech +bellletstalk +waka +olls +lago +cowan +bombardier +shome +ðŁĻħ +mcmaster +nave +wells +uta +tellers +misfits +kapil +faceoff +affirm +apro +whitepaper +superyacht +specimens +allocated +..., +-__ +kaw +dachshund +djoker +swork +quiere +orum +ðŁIJł +somm +cmt +inghour +skinny +lgbti +giggles +breakaway +researched +parity +myal +msl +retained +sivity +makeinindia +solves +defamation +waltham +sriracha +roadway +conceptu +alin +iwant +åĪ +delft +tenderloin +gains +faults +swire +stellen +pollo +dyne +bornonthisday +asdfghj +sql +salim +advises +voip +ìĹijìĨ +untouched +sheil +ontario +uphill +sobre +deshi +novella +dutton +crawfish +اÙĨ +maa +twine +kalin +ðŁĩµðŁĩŃ +yess +brooks +hoosiers +tonka +umbrellas +ayers +ateam +acquiring +suction +än +wies +tarians +socio +mattb +shepherds +oso +charitytuesday +slogans +ninjas +albat +byte +bashir +trampoline +mydayinla +ija +basel +rory +goldie +firec +unnoticed +peculiar +scha +kerson +mourns +liquidity +quipment +hibs +ars +aeronau +slideshow +slabs +deliciousness +skitchen +htafc +fullerton +creighton +aerob +procrastination +azores +whitehall +ussoccer +mediation +djokernole +andme +umen +noxious +joss +ilife +annivers +sudanese +etres +undermine +wholefoods +disobe +kori +adele +eliz +canti +alon +gymnasium +sarkodie +meteorologist +ylde +steen +stampcollecting +nasal +lott +franks +exol +acki +goodyear +animalrights +yles +violets +mmes +sthel +rapping +tuscan +waiver +turner +eatlocal +northeasthour +animations +tommorow +tsh +ffame +brae +petron +glamour +bryn +dcs +bales +ðŁĶ¶ +brov +brev +bons +physique +carne +xe +elixir +volved +loma +ìľł +æĺ +vanu +rigs +balance +vares +bonita +sprinkle +perfecto +dion +leak +calcutta +oba +dma +cmon +tuner +pneumonia +bogus +apologe +clough +borne +)))) +revived +ovarian +nerf +clegg +fanfest +chou +realizes +mcn +ligu +legalize +justsaying +forster +bosni +khi +indom +heidel +encryp +siss +eddi +marbles +brisbane +ying +prepaid +walsall +cooperate +orchestr +marisa +howie +chewy +brenner +andromeda +egan +stocki +cavendish +agan +bano +deir +gog +blk +rethinking +chig +rheu +snip +peng +seminole +mswx +annex +lynda +lewishamilton +cumul +tbl +dolphin +aguero +............ +prelude +atour +granger +tooting +rotun +disar +homeitems +dares +******** +ðŁijĨ +compreh +jinx +aswell +irie +circulating +ðŁIJ¥ +overboard +cultivate +rhett +orienteering +cak +balkans +sitt +jasmin +britneyspears +rotor +sealing +gbc +occi +fas +emancip +comer +wartime +tickle +sonny +paces +logg +atrix +srp +gwin +dobbs +uzbe +thewanted +drush +extru +micky +honorees +darwin +redux +mmj +rami +jalapeño +ioc +dover +juju +whitney +seng +enly +auch +archipelago +vigilant +mangal +wildest +paranoid +hali +bbly +sanctioned +realms +conco +uddin +csk +playtime +libra +savag +octane +rectan +return +parrish +morrha +ccp +cmu +sailed +sevent +rosie +piling +hew +boarded +segments +nephro +(. +crats +bakes +ðŁį¸ +backtothe +sibling +kirkland +keo +guwa +breads +ðŁĺľðŁĺľ +tq +harassed +gau +wilbur +jisoo +eper +lisam +trippin +shino +rukh +beastmode +choa +instaweather +richland +gari +fez +cowboysnation +fursuit +krun +aen +sycamore +segun +entennial +dih +oax +demsinphilly +ðŁĻĢ +snhl +pennies +passwords +makin +tye +deng +knigh +jeeplife +helpline +afor +zzzz +steamy +picker +iterate +happeningnow +kib +bloomberg +martyrdom +bully +assortment +ahora +zoe +noi +illustri +agarwal +psc +electronica +recruiter +gardiner +radha +nafta +dotnet +piero +georg +bels +ðŁĺĤðŁĺį +tuberculosis +runnin +moris +hauling +evoc +brethren +shair +frameworks +astu +rigid +kuma +kreme +jinnah +insurers +nyu +fere +nollywood +goodvibes +-... +toile +skril +instaweatherpro +czech +pavel +onepiece +nikeplus +filet +cavity +ðŁı½âĢįâĻĤï¸ı +ðŁİ£ +drastic +dailys +siamese +rebu +osteo +lark +fre +shelling +pé +gladys +ðŁıĢðŁıĢ +gustave +submerged +grandstand +attu +wont +fpv +bley +joni +angames +weighted +alou +श +lesbians +fj +annies +aml +doria +davin +beta +canc +madewithunity +haj +badlands +mul +bluec +pawn +covington +neurology +httweets +dyslexia +thelove +neat +forklift +automate +uneven +montess +hein +hag +relics +competitiveness +canelo +martens +bulletproof +skittles +gya +primo +americafirst +wooo +abortions +??!! +mache +lders +rlly +prelims +direct +course +swain +supercell +eccentric +stingray +plets +wilcox +westin +okanagan +kiran +carbo +bombings +rarest +boh +gawd +digg +moana +entirety +enclosed +dodgeball +parton +milkyway +atr +thoroughbred +really +qantas +epiphany +inee +aerosmith +spieth +arthro +ellini +dubu +braving +âļ½âļ½ +restructuring +illuminate +equili +mpi +ashton +ponytail +mascots +flattering +crum +asta +à®° +strangerthings +barnab +رÙĬ +makeshift +gotcha +willam +choirs +kilometres +ghosh +euthan +dolly +unning +thear +crewe +wsw +jace +dismiss +kean +hota +khat +~> +thiru +rendez +hartman +teessi +casca +zah +hydrange +fod +awp +mzansi +thicker +nagoya +neva +stique +castel +damian +thereby +jiang +alek +musicislife +raq +callahan +gouache +somaliland +seanhannity +raheem +lose +elove +wharton +rectangular +illustrating +harne +autisma +scrapped +elland +decree +nagpur +kipp +sore +nmd +maas +guna +gartner +belli +thenight +jeon +genderequality +giver +ael +garments +neu +mardigras +marsden +rower +polluted +cameraman +vinod +beasley +croc +jiu +hollyoaks +anesthesia +alles +steward +latimes +ðŁĩºðŁĩ¸ðŁĩºðŁĩ¸ðŁĩºðŁĩ¸ +tician +goria +comedic +ðŁ¤ĶðŁ¤ĶðŁ¤Ķ +naive +slions +łĪ +burglar +ðŁĺŃðŁĺŃðŁĺŃðŁĺŃðŁĺŃ +yorkshi +señ +fanboy +laurel +incidence +potomac +roberta +presiden +pryor +osbourne +wku +teme +palae +ðŁ¥º +reboun +itude +reddish +khand +colonialism +northcarolina +ðĿĴ +mannequin +ladybird +tasty +knowledgeable +gshore +ðŁĮĮ +ன +quaker +salzburg +medalists +chyna +bridesmaid +maori +rop +outraged +inadequate +truckers +alana +ìĿ¼ +rix +oooooooo +commandments +lambeth +aaj +ecofriendly +blaz +morecambe +bouncy +roux +raided +mized +shc +gawx +laboratories +rubs +restroom +consultations +cajun +virgini +soir +revue +plein +wager +ç¹ +wedo +growingup +!ðŁĺĬ +faceted +sinners +hovering +tiene +seasoning +anja +leggo +ilis +flax +devo +ashram +matisse +keri +gower +botox +marshes +unhcr +tsm +optimus +duni +stuffs +sok +orderly +nbad +islamophobia +ravioli +faber +creds +wonka +infusion +overweight +dailynews +assimil +acollege +medallion +kilimanjaro +stiff +thames +sunken +thard +mydubai +hilariously +hannel +plumber +fairview +separating +rascal +quien +necessities +confederation +llll +:] +weaknesses +bronco +raffles +elot +ãĤ¸ãĥ +adventcalendar +ðŁİ¹ +stravel +tunic +ksu +impeach +espionage +!- +diment +currant +biode +commuting +byron +ðŁĴĵðŁĴĵ +shaded +truro +crayons +arne +hsc +freaked +dramati +fleek +ucd +marlborough +^- +crossings +malo +blackops +binance +choked +cheney +plo +gestures +valedic +ryanair +remington +vcs +mckee +ecz +begs +nailart +mayorof +happyfathersday +wart +petitions +ningly +cleanenergy +brox +slalom +existent +abay +ugliest +tomp +stoma +selby +goalscorer +benji +overwhelmingly +lans +semiconductor +southkorea +rescheduled +skyl +enlisted +dowski +sidel +rosenberg +nasser +whitehead +prius +harare +enn +ryder +íĤ +mong +clasico +transporter +potty +isme +***** +vice +skit +odessa +lmp +hern +racially +pinoy +paraguay +obituary +goes +bucha +sidewalks +angular +unconstitutional +transitioning +ibu +guys +unpacking +oooooo +blackgirl +bergs +¯ +wordoftheday +trumptrain +thunderbolt +msi +fascists +ब +tsk +collapses +rajesh +loveislove +migrating +setback +ðŁĺĬâĿ¤ï¸ı +tels +safetyfirst +narrated +jaejoong +unanswered +liqueur +ennes +dalgo +billings +saltwater +mermaids +longs +clapham +wearec +piccollage +nach +hace +poisoned +loth +agna +adelrey +guardia +polishing +peacekeeping +dall +pisa +lapland +processors +deandre +sobs +ponce +drains +cbe +ðŁİ¥: +splash +meatball +fontana +worcestershirehour +nev +brisk +bint +acr +pox +cayenne +skrillex +jfc +hahahahahahaha +glas +engul +temporal +onized +concre +compose +vibrations +planters +fert +criticalrolefanart +tbli +schallenge +huckabee +municipal +iambic +radios +nevis +durability +mccla +horseback +institutes +fulfill +attach +ateur +akan +resisting +illumination +handle +haircare +oment +macleod +kaiser +gno +beardown +lyf +glomer +distortion +zm +sank +roosters +isnow +asports +agen +woken +stgeorge +romper +myle +economists +ruto +twill +healthand +dito +wsl +tairp +prakash +micheal +hts +wrights +katsu +fiorentina +defenseman +ditch +varsity +texanscheer +baham +scanned +weil +seductive +ðŁijįðŁı½ +fue +erwin +davison +terran +moods +woolf +resource +@. +cush +ðŁį° +regression +curled +lazer +joanne +abbott +moz +downers +mmmmmm +valentina +khair +dreamt +crook +chek +steaming +nephews +cleric +asober +indefinitely +wye +usnews +joyce +flushing +wynonnaearp +rondo +kiss +hotdog +barns +saxophon +farley +gasp +decreasing +alway +pex +lsd +shift +poutine +razz +rescuing +niko +hoch +ccl +uaap +nts +mcar +ilwx +conquering +kettering +sturdy +delaying +stok +vanished +cathar +bingham +inv +ichiro +hemo +budgeting +[...] +bess +sebastian +slowed +ðĿij +muslim +stuns +actonclimate +vea +seton +rosetta +ount +hardin +fluid +caw +ðŁ¥Ĥ +yacht +unl +sphy +provocative +oric +isback +___ +nicolas +gyan +loose +flin +rebate +::: +!"@ +comicon +sheff +downstream +chichester +beachlife +momlife +diabete +arra +vane +oku +yeo +mango +tryout +appell +heirs +arjuna +ddu +naveen +movic +socialists +sback +criterion +soyuz +kher +daz +yolanda +wineoclock +reina +onew +leonard +endez +ubs +supportlocal +facilitated +caramelized +bpa +vuelta +mytho +mami +speare +nbaplayoffs +fevre +nickjonas +imprint +cso +craigslist +lasalle +gideon +hadoop +disregard +wud +tuc +magee +acoustics +taa +quie +pola +crt +dwyer +dissec +capitol +mention +knoll +heigh +finders +placements +lse +indira +guri +madhuridixit +kingdoms +iambicpent +georgina +jeky +conflicting +bayan +agatha +uphold +dron +vicar +expat +peripheral +pessi +faf +ancestor +?.. +widget +punc +commenced +beavs +airwaves +addis +poa +desses +coden +vue +rupee +karin +spock +msy +ะ +prick +fillmore +tification +thingsto +sarde +emile +pereira +nad +brightening +arresting +woking +uscg +spill +raspberrypi +hugo +itec +isma +cufflinks +optimized +occ +miwx +enka +elited +affordable +sakh +coronado +hoh +atul +aioli +jimcantore +accounted +vinay +hermit +grooves +ranch +rilla +wetter +outof +veterin +nikov +kian +fairbanks +ramapho +niti +kko +rusty +nestle +tvxq +shaheer +âĿ¤âĿ¤âĿ¤âĿ¤ +pennant +gemstones +demdebate +ðŁIJĬ +autonews +supportindiefilm +macho +vex +newsat +neti +concessions +candied +yofthe +macau +dends +cricketers +saniti +mariano +ghat +artoftheday +¡ľ +egos +genoa +chatbots +brier +allabout +monty +spied +rtr +comfort +snippets +realtime +grain +examined +enlightening +ttu +godbless +releasethe +singular +kians +haka +sorren +defect +marg +equities +dorian +suka +perl +aishwarya +pullover +precision +fairway +neve +riveting +villanova +encom +ako +passionately +europaleague +siempre +xvi +enlightened +cfr +âĺħâĺħâĺħâĺħ +wasteland +isf +newcomers +emergency +amphitheatre +-. +textbooks +figurative +tremb +pesc +abhin +abbot +acacia +hards +porsche +kauai +elisa +carrick +abou +ellier +bech +neutron +galapagos +ruben +innis +howto +nuns +sabine +iac +clinched +notori +fives +cairngor +peri +grc +ðŁĴ¯ðŁĴ¯ +malm +twelfth +diff +routines +martyn +linden +synthesizer +number +gamecube +falkirk +byzantine +queuing +grill +scalable +charred +routing +herbali +grizz +ðŁĺŃðŁĺŃðŁĺŃ +toll +terminals +lpc +abd +warmups +removable +¯\ +vigo +papaya +neve +lovingly +jokers +ibles +ssett +potenti +pele +gigi +sadiq +legacy +sono +rupees +retarded +elee +parr +fiance +eyre +sayers +pendants +maknae +albans +adapting +pff +puberty +jiu +ingrad +hypocrite +diplomats +physical +robby +bonsai +ãģ· +fatt +catalunya +âľĸï¸ı +roma +moreland +soe +conversions +stlblues +sholm +grassy +prado +onu +assaulting +>_ +settes +disgraceful +aphra +âļ½ï¸ıâļ½ï¸ı +प +kiln +goaltender +sru +philanthropist +bals +thn +studen +sandoval +dogrescue +elions +assessed +largo +hectares +shrm +saif +cleavage +noches +nene +fatalities +curing +cleanser +ales +pvp +southbank +pizzeria +marshals +knife +andover +tblightning +srsly +oute +digimon +timesofindia +promethe +lebo +fsu +witz +revere +manas +mamba +chica +guan +exhibitor +csrracing +dere +xxxxx +gusta +storytime +stoney +organics +andu +seam +minogue +anushkasharma +aba +ðŁİĻï¸ı +ugandan +chromatic +assn +documentaries +sht +rupaul +loyd +kats +eus +itech +medusa +panty +kellogg +etto +tallade +shaa +dost +pms +mariana +jester +crooks +ðŁĶ¬ +mindanao +indhoven +ðŁ¤ª +lexi +tvn +janis +cote +ãģĨ +serrano +iwm +ðŁIJ¬ +kke +distributors +capu +counterfeit +campsite +aggie +ðŁĺ¼ +chhattisgarh +~@ +stateu +sandi +preventable +cls +canne +mmc +iver +saharan +palis +nightout +dos +apia +abscbn +managerial +arose +mowx +arosa +ðŁĮ³ +underdog +remover +astronomers +lentils +suscep +smoother +pendleton +faucet +emory +dalmati +afcb +ticus +exempt +enrol +dheim +ðŁIJº +restriction +starfish +stow +snorkel +thunderbirds +shead +homosexual +dyn +asli +andretti +douche +domo +tarmac +slumber +pronto +firstdayof +miniature +mariachi +argus +recommending +mobiles +ince +illustrious +orc +adverts +grits +weasel +pagoda +overpass +greys +maximus +armagh +woodland +sunni +ðŁĴī +ëĿ +tione +socio +hos +ðŁ¤ĹðŁ¤Ĺ +windsor +subsequent +munchies +idh +excluding +emi +cuth +zai +weekdays +lawsuits +barnard +ت +petting +netes +mulligan +pharmacists +raquel +eton +cranston +gilded +cleary +ceph +raa +pamper +lombardi +asin +sherry +prod +forte +arianism +buffalobills +æľ¬ +ðŁĶ¥# +uuu +justices +carina +natin +maslow +drooling +cognac +camber +elong +rdr +inen +convictions +amuse +trock +harmless +visitation +genomic +bland +benoit +chimp +tuscaloosa +greasy +xpo +gilt +seq +permitted +christmaseve +books +mue +oldschool +humanright +beati +ðŁĶĿ +shat +sculpting +hwan +fernandes +sciutto +fuentes +endeavors +maidstone +unparalleled +shouted +queenof +merc +bandic +veda +selangor +pile +jahan +intimidating +disappears +clich +zaha +wurst +hiv +fodils +cordless +aaaaaa +hydra +belinda +eels +buf +sustaining +rugbyleague +noc +brigitte +(ðŁĵ¸: +trombone +soothe +smog +adp +stable +ingley +diagnose +msg +wess +ticketing +onee +nswpol +eup +autopsy +adityanath +sundown +riverfront +siya +pis +hierarchy +durango +dijk +renshaw +heaps +epidemi +davidbowie +internetof +ddi +nationality +mbar +airy +winder +walia +elliott +cx +bavarian +platt +antw +wiwx +softer +neha +heller +thand +daniela +boast +degradation +ðŁĴ¦ðŁĴ¦ +transforming +mane +avut +ðŁĺĪðŁĺĪ +voter +thee +tate +puff +indoor +soproud +boyce +borisjohnson +waitin +immunology +ðŁıĨðŁıĨðŁıĨ +âĿĮ +streetfood +lizasober +cavalier +celia +needle +motoring +gato +,) +rade +harvest +tms +jarpad +oney +airmen +vre +impairment +abhishek +snoop +lant +famously +blou +sze +gander +untouch +tuf +deejay +collateral +bind +ðŁļ© +pinning +icn +'; +theeconomist +ultram +worldwaterday +tipoff +thei +feeders +campaign +scumb +dayweekend +yom +pedic +hough +psv +plin +onde +bostonmarathon +azzy +*_* +conley +thiago +hooo +galerie +lucid +jett +glitz +finalfantasy +achievers +yung +peregrine +ophi +dames +biomar +âĺĢï¸ıâĺĢï¸ı +skc +lics +flank +arrahman +hoof +upholstery +tats +woz +¿ +snoring +raer +lju +apd +plating +kanu +imation +fragrances +mra +moray +mott +immuni +hearties +bhopal +timers +gata +colorway +carnation +winget +sighs +sville +optimist +chateau +olympians +cio +singersongwriter +nyo +fibers +burch +agro +milne +igbo +cramer +ationals +danube +padma +normani +enforced +breck +boehner +arden +surrendered +prosthetic +oma +hailed +calculations +wfa +bib +fcblive +fonda +westcoast +quests +friendly +towie +fitch +balot +stardom +scratching +hosa +thika +oven +stroke +outpost +pharmaceuticals +hikari +muy +afd +fallontonight +squat +oru +drained +chocolat +민 +worths +rib +muj +thats +residente +itel +boost +migos +mulled +laa +etsyshop +donkeys +mek +ptc +flinders +ehs +rohit +muir +gad +compositions +åĨĻ +combustion +ikh +yemeni +waved +garci +akos +oods +fusion +seque +slan +plur +kicchasu +shenando +sams +worlden +horowitz +withme +microbes +kki +ðŁĴĶðŁĴĶ +wsu +patchwork +freer +yaki +theart +symbolism +miler +btn +mabu +sidekick +motivates +sagitt +naturals +serviced +psori +paola +quig +ibadan +giggs +ë³ +scientology +sioux +salamat +dres +cadbury +dhawan +ción +_' +swapping +mariska +jamesbond +explosives +ayles +afer +sagu +censor +toma +jefferson +ringed +partist +irresponsible +aguilar +vacay +equitable +altrincham +acur +manish +germin +schooled +putter +edad +naval +toasty +solareclipse +dishu +coyne +acco +muck +maran +elos +lender +croix +worthless +haber +gunmen +ðŁįĵ +zenith +tenders +hurst +holtz +italians +carlow +ucd +characteristic +bung +avl +uth +sasia +rsl +redman +neighboring +greenpeace +stips +followparty +ygk +enos +omnibus +naissance +chrissy +secure +callback +jihoon +memory +blocker +lanta +daffodils +bilt +fferty +faust +iec +nipples +sog +mnd +jaguar +boldly +abpoli +proposition +gunsense +evansville +cutters +wego +doun +dox +stallions +kaj +shippers +jawa +volo +leven +paprika +kovich +jordi +inductees +appalling +dialysis +alleviate +âĢĶâĢĶ +pieter +midwi +qtr +juliette +intermission +hawks +actment +oneill +klin +vamps +famous +could +automobi +daan +westend +ellip +nhc +melanch +webseries +tongue +snatched +smyth +tangible +sli +easing +barstool +overlay +affordability +tinged +teras +ayush +wannaone +rhine +dana +shana +kendal +fertile +wir +repleni +larvae +isro +convos +abbrevi +ucc +hungry +burrows +ager +navi +matin +duper +cern +madon +ķï¸ı +éģ +tups +hyatt +shep +fridaynight +wiser +heidi +hatton +pgh +fountain +wristbands +ahmadiyya +aerial +subscribed +solos +mace +slayed +forfe +dulce +christmass +arunjaitley +violate +obstru +nieces +wvu +idyl +faze +preserves +infringe +premiers +intervals +agency +(© +standalone +dimes +boer +parameters +getit +ðŁĺĺðŁĺĺðŁĺĺðŁĺĺ +tulane +forgiven +scoll +mbps +smashbros +robbi +primavera +alist +ghostly +ayat +yeats +impressionist +earphones +caulfield +waikiki +salute +scou +muay +louisvuitton +bakhta +adog +inventions +hurd +foreclo +streamline +thalaivar +chsnews +willard +tsn +europarl +crusher +mysore +grower +raping +patti +gden +smw +mufti +kidman +abr +sounders +skeptical +ðŁĶİ +sundar +ime +ferg +featherweight +arlington +pasqu +agazine +wearable +natic +mcclure +intermitt +horde +sixties +carte +bhav +zeal +experiential +adorned +sommer +enote +hypothesis +stinky +proto +deadlines +vogel +musings +moncton +guter +fle +acion +voiceof +tasha +inhabitants +typeface +sba +btsx +ðŁĶĴ +worx +uhc +joko +cellars +goro +continuum +...& +weathercee +hap +srk +risers +lonelyplanet +unnamed +coeur +ðŁįĮ +theworld +ilike +fasten +amigo +riba +ramaphosa +staffers +hadley +??" +fiore +salut +huff +bezos +Ñĭ +rader +kamala +inline +fillers +umatic +allin +shatter +rein +oku +chases +flagged +babymetal +waterstones +tsb +cutout +ophel +aama +rockabilly +stolic +jetblue +ichick +downton +uzbekistan +patna +laq +grange +)_/ +subsidi +scp +newscast +itsa +tweetyour +emor +archaeologists +unification +porta +qx +protectors +prohib +charisma +cartag +renfre +sculpt +guwahati +dema +boop +unfpa +dexter +layla +alleges +soups +neveragain +lys +calc +baroness +visualize +gerber +absorbed +iers +ahan +fontein +detectors +verstappen +svc +formulated +acdc +lix +incompetent +bhk +lourdes +waterhouse +snowed +appreciative +sigma +lizasoberano +penned +paycheck +tallinn +fancafe +parisi +avalley +vig +rufc +hardship +socute +poise +ì¹ +rothschild +kly +???????? +lhp +ilay +fhs +amad +ideals +bradbury +balboa +nicot +kidnap +wolve +tasmanian +opt +matthias +ãĥ³ãĤ +supermarkets +mylittlepony +melee +lister +groun +fedora +kindness +enen +brahms +¯\_( +roswell +marlene +icu +reformation +orail +hebrides +disparities +terracotta +swallows +reid +influencing +fluor +dene +tumour +blondes +thunderbird +sheva +mogadishu +kab +creeps +iving +eneed +annoy +âĶĢ +intrigue +enquiry +araj +tural +kubernetes +endlessly +dividends +tora +tish +commemorates +unra +trib +ponty +nem +dissent +brewingco +ðŁĺ½ +normali +biof +(... +chillen +주 +mellon +avis +mccormack +ingra +enriched +customerexperience +testosterone +snug +setti +geronimo +inquirer +breaches +verything +blooming +mura +dispos +bide +deva +shadesof +intrin +shev +sven +nayanthara +ganesha +cws +berta +labelled +useum +nicknamed +mahan +caruso +apur +ðŁijĨ +wq +orphanage +discarded +magnu +lue +jeon +bridgeport +pacing +mercury +(ðŁĵ¸ +marxist +amphibious +transplantation +stitching +thenburg +gradual +ãĤĮ +roft +mails +inec +guyana +doppelg +vero +rewrite +headless +harbaugh +gateway +carsforsale +swi +stis +macht +unde +surabaya +stapleton +nurturing +milner +yao +lmaoooo +kosh +arsenal +kame +erry +arroyo +dismisses +rubbed +rcb +lewd +dilu +andor +vide +urin +intersec +haar +alb +yearswith +appleton +éal +ullivan +succu +monterrey +dmx +artemis +ronnie +farmland +sfootball +grotto +anthi +ãĢģ +à®Ł +vidya +jimmyfallon +àµį +tzer +gravitational +wthr +uhhh +ehr +tinker +tijuana +scranton +ramcharan +barclay +revan +msi +kap +wrs +wethenorth +toral +satu +grom +facep +erickson +zyn +sedge +oodle +spursofficial +dsp +sicilian +solihull +receivers +ladakh +hendrick +theri +presiding +mcguinness +litters +gunnar +ghoul +wib +ntv +karo +frock +blau +amplify +allis +ullah +memoirs +khloe +interceptions +petday +looney +confin +chay +piyushgoyal +frequencies +utz +eventual +warmly +oblivion +anka +tait +âĿ¤ï¸ı. +directorial +rulers +princes +muck +sturridge +deuce +abridged +baguette +uncles +pendu +minding +forrester +avila +waller +wallstreet +mentor +hino +highway +cromwell +fanartfriday +mbi +coyle +ahi +trove +spiegel +paytm +mcintosh +jansen +niti +nashville +leno +leicestershire +legos +dict +ðŁĵ½ +spad +beverlyhills +syrah +separates +zain +unfit +drags +tania +overflowing +hrithik +hawthorn +zani +macfar +fide +totem +peds +fundamentally +calico +sinner +jä +hilde +dsd +tenay +tahit +milf +lieb +informing +uplift +rael +mortgages +lect +iiii +guillaume +composites +oldsmobile +lend +garth +commish +baptized +scorpions +rucker +bringbackour +alliance +thalapathy +tali +spans +eridge +witherspoon +linda +skylar +korn +homs +Äį +silenced +caffe +arty +distinguish +towed +pung +jessica +earnest +beaufort +tama +studyabroad +sikhs +newbie +navratri +marble +lounging +litter +dalit +sosa +izes +grade +compromising +triton +detta +vj +chauffe +spectral +powered +montessori +articulate +halton +alco +yey +mntwins +acounty +ðŁijıðŁı¾ +âīĪ +madmen +kala +grum +chik +atis +sume +akhtar +jobsearch +highlighter +boath +âĦ¹ +tarzan +lambo +âĽĦï¸ı +oxfam +dumpster +pretzels +macos +inclined +factual +advertisers +shui +puree +mlpfi +antidote +capo +pastr +mercado +button +armin +agg +lolla +horribly +errands +christophe +timesnow +mondaymotiv +liss +scandals +mci +disproportion +âĺİ +surpass +samaritan +sotho +purest +flatt +triviatuesday +delectable +leopold +hermione +choudhary +enrich +¡¡ +subsidiary +inequalities +bachelor +autoimmune +lakota +ihop +adjec +thesimpsons +shes +sek +gretchen +upstream +hinakhan +copernic +xtina +lug +toughness +ead +clipped +bius +slv +fahren +deepak +cau +xan +immature +digni +bobs +shredding +buttery +accommodations +deven +chunks +superleague +skybet +kildare +jeet +ëį +cek +wrecks +propane +ohl +tbd +quoi +trumpp +mimo +reluctant +verne +oic +magh +arnau +sever +lidge +stairway +kicchasudeep +ðŁĶº +machining +aamaadmi +oti +cda +alit +pany +installs +acct +eshop +diem +hardwell +fulfillment +scafe +quack +extracts +sweetened +fighton +fdi +dinger +waltham +usur +referees +seokjin +grann +afrin +thn +schaf +parcels +betis +amarine +noman +khtar +moritz +coupling +barons +ðŁIJ¸ +ø +slp +sadler +xander +triad +mcmillan +khz +dividing +ìĹijìĨĮ +daryl +zedd +leys +plaques +fluori +tipperary +onnell +didier +langford +imc +thesun +birdies +archa +yessss +tdi +daria +candace +altam +palaces +chit +santam +eventful +bookof +adb +monstax +creole +coel +âĸ½ +wearen +stennis +sheath +atism +groningen +mlpfim +lepre +wrongly +rspca +rendezvous +acknowledging +pelvic +solicitor +slays +nuestra +lod +islander +feroci +fashionshow +rass +dgeon +adolescents +smashes +negligence +grateful +vedere +swoop +ingl +apolice +vandalism +gann +joao +disupdates +zimbabwe +underage +radiance +wof +bourgeo +plas +crani +ghue +wreckem +warrants +reform +jimmie +atwood +ysl +neilhimself +lbj +iman +tanto +noisse +verbs +equipo +altogether +mament +lice +douglass +tierney +primed +jhal +furnitu +brazili +vill +pastels +nison +uff +paralysis +jaye +impo +ðŁijģ +strategically +pakistanis +wassup +superbike +thanku +truelove +shaikh +israelis +vip +tog +lien +laker +greyhounds +culars +bianchi +balotelli +arran +loos +strates +hebron +arvo +sunderland +theal +tombstone +sandman +cpac +thanksgiving +lovehim +latino +anin +akaif +ĭãĤ +torquay +diest +allianz +ðŁĺķ +golfclub +cllr +walcott +schnau +prompted +nominating +lennox +valet +monro +mayward +eph +ðŁĶĶ +interoper +rda +reflex +armchair +ê°ķ +stripper +porti +pharm +hamza +nireland +neue +hpv +portfoli +sunburn +frisbee +beal +baptiste +xh +tym +prati +overs +hazrat +desert +derry +usky +emmett +acharya +)_/¯ +shud +maya +hamill +raim +nrc +fittings +curvy +ðŁıĩ +sterling +à¥Ģ +walkin +shortcuts +milly +astur +alphabe +pli +pez +missyou +radford +mlg +taeyang +notjustlakes +dumps +serendip +leur +raving +ester +depriv +abscbn +ðŁijĩðŁı» +scarcity +ocr +meanings +capt +dahl +fermentation +brioche +towin +outlander +massimo +encro +ðŁ¥³ +built +potam +kiri +tmw +monitored +kites +peoplesvote +grayson +íģ¬ +afrika +adies +ivote +gyne +gannon +dix +cmc +oural +foxandfriends +beli +igne +glan +katrinakaif +copolitics +qualitative +psi +lucci +discoura +âĺ® +kelli +gautam +caracas +realest +pula +inus +hilltop +makeaw +attenborough +twy +rarity +peckham +mahon +cornelius +clinicians +tonline +tbi +paradise +kasi +inevit +freshness +collingwood +lunatic +defense +copd +infra +wainwright +sainsbury +alabam +tema +laco +checker +relegated +trent +stalks +huffpost +bhubaneswar +astral +shareyour +primrose +hime +catan +endment +endow +clemens +maloney +hilary +gametime +denise +collaborators +bwo +radicals +guetta +icion +aua +snapmatic +satchel +excavation +baseman +são +gnation +feld +survey +shahzad +mast +anirudhofficial +trucker +otago +geograph +ethel +âļ¡ï¸ıâļ¡ï¸ı +sver +mutt +internetofthings +anchored +whouse +bangla +balmain +ç¹ĭãģ +breakfa +áĢ +twister +tetris +cav +stags +gz +aub +stormed +helens +yarmouth +stasy +gustavo +cosc +vinson +upp +scricket +assumptions +appe +nuh +uer +premise +naga +eamon +coronary +naf +northside +elmer +rotar +outlining +elf +resurg +katelyn +incan +hysteria +cee +ambani +prolly +ĮãĤĬãģ +axes +sanjose +rembrandt +magpie +evenly +scorsese +quaint +fg +bbuk +indianfootball +weareall +spdwy +pisces +ecg +âĺħâĺħâĺħâĺħâĺħ +preorders +:| +nipple +salazar +jume +jailbreak +minn +bassett +zetta +jeffree +adjun +ticon +sandiego +drinklocal +cholera +solicitors +obo +compost +nian +wra +treach +icic +professional +delve +legate +historia +croissant +connoisse +namo +palliative +chemtrails +iority +globalwarming +comicart +behavioural +rested +lias +climates +ŁãģĦ +rutland +nourish +menopause +hotties +dementi +vespa +melville +analogue +tzman +strung +imperfect +glare +circling +rosberg +reco +ocity +loire +embe +dossier +neel +nando +mea +galvani +finesse +agp +berkeley +asim +âĺºâĺº +quilted +ishere +unmatched +potion +forz +atre +selfies +juliana +ðŁļ¶ +âĸº +melton +âłĢâłĢâłĢâłĢâłĢâłĢâłĢâłĢ +spinrilla +purcell +edp +atleti +tonyawards +raja +progno +molten +stuff +pally +nobelprize +âĻ»ï¸ı +spiritual +speake +sasha +brium +truss +criticize +assassinscreed +yoruba +ulo +fireman +workinprogress +efcc +flares +robot +hikers +cll +shadowing +patsy +lehman +cns +å± +guadal +à±į +rape +rhonda +parallels +sonja +language +landings +zola +cramps +burning +appraisal +jolla +hamm +kasa +gully +fgo +ulysses +ribe +ðŁĴĦ +ibu +etienne +briar +finely +combating +yql +gotham +wechat +topaz +primaries +lse +izz +hele +disponible +cystic +belichick +thrush +kansascity +geom +solidi +redbubble +bystand +cambridgeshire +parfait +astle +owo +indore +stomping +smelly +ðŁ¤ĸ +locomo +admitting +holme +clockwise +minsk +mcco +forget +evp +camra +abella +yotes +universityof +méxico +silverado +ricket +crombie +puj +eradicate +delight +ygo +glamping +vica +duggan +counters +cfd +scour +reactjs +puram +parasites +inki +villen +stella +limbo +angas +kcr +ðŁĴļðŁĴļðŁĴļ +vapori +mumford +oligar +༠+aloo +booties +adr +kelli +drummers +avici +natureuk +ronal +intrac +unsplash +leche +goma +eline +enviro +bionic +bueno +mik +avin +starling +empowers +cakeday +boycot +ðŁĴļðŁĴļ +ðŁĮ¸ðŁĮ¸ +vach +mci +fractures +geri +sking +excluded +luce +jave +iggy +eviden +akistan +awn +morals +lucifer +haban +tumbling +sundaymotivation +mosley +captainamerica +schicago +theone +motd +dts +ðŁIJ¼ +repell +iii +locust +geospatial +mersey +immerse +descend +bernade +js +boatsales +winder +crank +singleton +candidacy +bena +ðŁı»âĢį +highlander +olt +kprs +healthylifestyle +fourteen +endthe +ithaca +circulated +rans +prevalent +havas +splendor +rooster +kalamazoo +jewellers +ennedy +rousey +esy +cannons +ornamental +//// +rendon +winne +molding +eidmubarak +countess +simona +hawa +foes +duster +sbu +portray +marries +goodday +choco +achiever +ðŁĺ¹ðŁĺ¹ +preneur +tramp +tomi +nbat +gardenchat +farrakhan +everglades +abru +sousa +sece +homeswee +terrestrial +barit +sridevi +olu +melinda +frick +candies +ðŁĺŃðŁĴķ +qureshi +familyfun +exorcist +cardinal +nyt +diesel +cumulus +capricorn +siology +lorna +dougie +andie +supersport +cfl +пÑĢи +sayang +peek +à¸Ĭ +lobe +jem +inglis +ggled +csn +amnesty +chups +baes +sauer +ðŁıIJ +mongolian +enet +backstreet +drilled +accessing +ceo +bse +aiken +purr +worsen +wheres +wark +testifying +buri +blast +awg +ðŁĵĭ +redefining +hearing +uci +cmp +boni +tailoring +taji +nocchi +emt +stephenking +neet +complains +campaigner +luciano +twilight +tiesto +passports +floyd +cathedr +naked +caregiver +bcoz +adecides +kuri +lyk +braries +drenched +disclose +ðŁĴªðŁı½ +leblanc +jetty +garty +chipmun +bsu +rhythmic +icz +frid +annex +amex +soloist +lancers +arrowhead +specification +simulated +nais +inverte +bowing +worship +fz +aboss +shaq +ì¶ķ +challengers +anarch +aamaadmiparty +ãħĭãħĭãħĭ +suffolk +socorro +snell +cladding +absorbing +shawa +participates +ðŁįĶ +bookstores +baku +seaport +kojima +gaby +packard +electrician +letit +mowing +fawad +youngjae +hotmail +mening +urie +intimacy +conti +:") +lifeisgood +inciner +idri +craziness +journos +franchi +bottlen +alda +ffes +kx +southwe +aira +clayton +scoti +fj +briga +ðŁ¤ĺðŁı» +demonstrators +yz +stork +naq +cascades +travelchat +plata +padma +franci +attain +batgirl +lombard +hoos +ddos +neonatal +disclaimer +rss +rant +disen +texaste +socal +fractal +camry +strife +snacking +muh +santander +morons +graf +parades +huston +drupal +miento +kirstel +hyde +vomit +fortified +sphinx +dav +biryani +winnings +sbaseball +merged +lovelondon +lingering +dreambig +carleton +livelihood +django +astrid +grids +downe +bruised +sne +scarecrow +helium +fnc +biggs +anter +restorative +empires +abdel +lifestyle +kiwanis +colloquium +meen +prick +antique +zeb +mimic +edmonds +ðŁijĬðŁijĬ +qing +ppel +mcgill +interpreting +âŀķ +rashad +doka +narrator +electromagnetic +ashby +saura +irandeal +âģīï¸ı +krishnan +indi +ffen +brea +osman +multinational +chippe +recruiters +ausbiz +pounding +regen +cursor +refusal +macs +inak +axial +waifu +upcycled +hindustan +cassini +carlyle +scratches +reef +manatee +eatery +ðŁĵ¢ +uncondition +senpai +onther +comicbook +prosciutto +demar +mise +mage +freec +ayesha +alder +androidgames +leyton +hock +doorway +chicagofire +aaliyah +swelling +bix +.ðŁĺĤ +evankirstel +torpedo +konstant +genevieve +maia +hauser +dotorg +hideous +fik +spraw +eek +zappa +wandered +'' +rajan +bambi +($) +widening +toolbox +sair +illuminating +prays +outpatient +iw +dayo +lob +swfl +shades +gums +cookin +kodi +griffin +traumati +stea +slaughtered +godbless +airtime +pseudo +bsa +hauled +arif +à¸Ńà¸ĩ +lel +wcpo +militi +charters +worlda +ruk +kgs +digitalindia +isable +idyllic +espino +marietta +ebo +teamcanada +abour +wilton +rockstars +favored +physic +wrinkle +tbr +dprint +ballarat +adal +zey +ðŁĺįðŁĶ¥ +tomlin +mtr +palsy +fenerbah +tighten +philia +ironing +ryu +bant +enquire +cair +aburger +trun +greenberg +chauhan +irina +shani +trendsetter +prett +zafar +alove +vici +panic +noo +lustre +disrupted +ballis +sonsof +monsi +instac +akest +ëĭ¤ +kwame +horrormovies +district +saucy +mban +armies +withdrawn +medics +loftus +eroom +bekind +arns +allon +unison +davids +crat +nicotine +soor +smx +onco +cosplaying +zombies +harms +eger +rosy +moonshine +fein +cett +dubrov +regents +benitez +ðŁijıðŁı¼ðŁijıðŁı¼ +stec +malia +prioritize +iceland +ftse +vamo +lamont +homosexuality +brees +regui +cbp +tej +skysports +detergent +shasta +derel +conservancy +colorized +accolades +viso +showyour +nanow +biceps +usability +bim +dailysketch +pearljam +strangest +megadeth +broadcasts +barren +arton +chriss +configu +lures +isthe +eul +railwayana +globalhealth +gianni +uaap +slum +consciously +abre +nup +budget +vada +esch +realness +erased +thunt +bez +armistice +ðŁij¹ +shrun +oled +driverless +ðŁ¤·ðŁı»âĢįâĻĢï¸ı +wondr +skan +salaam +motherland +hwang +geno +gangnam +twright +endorsing +enic +adoration +paused +patricks +docked +platte +ffxv +ethnicity +autoshow +sideshow +afterlife +relocated +orphaned +foodnetwork +dareto +andra +slaps +vlive +swims +reimagined +mistle +revise +reality +bharti +ðŁĴĻðŁĴĽ +latest +proudest +grasses +lanyard +freshest +carcinoma +anomaly +ziegler +sumner +lyrix +gorg +isd +avel +swildlife +mesqu +johncena +euroleague +saber +masterful +yarra +cognition +jacobson +abolic +sirloin +shukla +mojito +supere +stweet +mez +esa +rudolf +gura +whereyou +ttm +wins +trustworthy +nyk +braden +tabletop +goodfood +eson +bek +linguistic +grays +chath +hcs +moni +deans +cussions +chell +slows +hemi +dapp +sharpie +boosters +aos +strack +sedona +mueller +hardwick +ornate +thora +salud +otwol +chum +miho +forage +thelittle +tearful +oneself +mindy +smg +gmbh +emerald +ðŁĶ´âļªï¸ı +tutti +receptions +revising +ibrox +topeka +salami +expanse +ibooks +dobson +clio +ats +ðŁļĮ +moha +isance +shutters +moot +janine +marvelcomics +jordani +poser +kenneth +hyung +deja +aseball +speciality +euston +classiccar +hadith +ðŁIJī +chasing +izo +grosven +aglia +thisdayinhistory +trow +omile +huar +byn +saline +divine +demonic +tyran +handover +revitalization +paella +cryptic +sedg +mend +dunkirk +bred +wald +sportscar +aard +wheaton +daener +klan +brt +bakhtawar +spires +schubert +roti +polish +ose +agame +wondercon +protestant +bosa +ðŁĺŁ +dü +joyride +gertrude +âĿĿ +gila +vh +twa +trav +swallowed +starve +lain +entren +reiki +sukh +craic +azu +webpage +keefe +hypothe +hirsch +helle +campground +wamy +travi +shahi +sandeep +rui +hanuman +dwp +repository +noor +noff +unreal +pell +blackhistory +harvick +mascar +payee +pasha +gastronomy +dÃŃ +aig +rosenthal +openday +embellished +ttip +sunbathing +gopack +endome +ï¸ı# +invalid +finalfour +stfu +squishy +rasta +mosch +jamesc +dietrich +sela +melb +elvi +tdp +suni +slit +jha +biza +spiked +lli +lillard +vampi +synopsis +azhar +kendricklamar +ĮãĤĬãģŁãģĦ +heartless +countryfile +airplay +arrogance +pree +virtuoso +ãħłãħłãħłãħł +raju +lebu +forward +tug +dros +mondaymotivaton +concepcion +thelo +padi +looool +ÑĢод +itss +ethical +enduro +__: +expenditure +monste +masking +terriers +ibis +ember +cumple +punctuation +piper +irvin +adee +yyyyyy +flashbacks +celsius +donnie +bogota +benevol +thescript +shilpa +prose +findia +zeke +neko +doves +blueslyrix +frosh +soweto +mplo +alai +sabi +raqqa +wftv +stroller +iansomerhalder +ðŁĶª +anon +moseley +!?!? +staking +moly +cartri +csg +astor +transcend +maer +deux +cowgirl +sask +punter +maken +oates +lovett +growler +sagin +vn +ssible +officeofrg +ymc +sabar +faulty +apha +akon +ðŁij« +snowdon +aew +raisethe +ðĿĵ +gruesome +clementine +sping +lata +worldenviron +mimic +canaria +bakhtawarbz +aoa +fala +ãĤŃ +aviva +youuuu +thigh +ladders +gumbo +tzky +fuzz +plasticpollution +estate +strengthened +kant +drin +calvert +transformational +frightened +maclean +elitedangerous +earthy +tson +toda +jnu +.., +michal +iban +jeong +isreal +simcoe +exclusives +bluebells +bene +teu +pilsner +penske +atheists +mpu +cartagena +ðŁĴĹðŁĴĹ +millionaires +kkkk +itar +subscriptions +remote +mafi +hinton +wcc +hok +dsb +ableton +seventy +punks +eindhoven +shone +mcfarlane +limpopo +emphasi +ü +sinfo +petre +mangrove +chino +bertie +playlists +pushawards +paf +debbie +cdo +rino +ðŁı¾âĢįâĻĤï¸ı +folke +bonnar +thine +slan +halter +evie +awsome +vultures +sparky +seizures +âľĶ +ramone +ineffe +aln +proctor +astra +thevoice +grote +scion +deadline +amaya +tainted +patterned +exceeding +crossfit +kaylee +dropbox +rushes +tackled +moby +retrogamer +ncbd +benefitting +shaykh +guildhall +gentry +dreamcast +dreaded +bundled +thaw +revolving +npt +kyliejenner +imaginative +roni +overcame +familytime +dsburg +carnaval +relationship +recognizable +coroner +hole +fanfic +emirates +burritos +analyse +thinner +nees +gallipoli +blr +catwoman +-->> +ault +adaily +naughty +ilio +solitaire +mtvbr +jocelyn +arunach +repent +southgate +hyacin +essential +fenton +andum +itor +gopal +slinger +posei +awil +wielding +raila +elias +asto +ä +tendency +strata +kert +<- +imacele +daes +stimulus +hanley +fitnes +ecstasy +limous +hailing +ðŁ¤Ń +chiswick +taries +slav +puli +modernization +blackmail +bingham +hfx +++ +ðŁĩ®ðŁĩ³ +niv +wea +professor +koff +bolster +suave +sequences +pepperoni +notte +dren +ãģ¨ç¹ĭãģ +hsv +oga +aptly +zad +excelsi +rinka +moldova +minn +mabel +conferencing +basing +ofer +obsi +hamillhimself +careless +briefed +inherent +parish +dubnation +townsville +sarawak +geeky +doncasterisgreat +wasabi +gup +pheno +drainthe +carrieunderwood +bleeds +bbcworld +anew +altaf +dulwich +aniston +wti +sumatra +grafton +bln +mester +bodega +rego +esq +anjo +sumptuous +maisie +� +wilt +jakob +elvis +sepul +muster +airpollution +presidente +happymonday +extensively +flondon +tls +playing +peed +dinho +vardy +pika +niro +aucus +ðŁį¦ +null +elondon +juventus +imagines +disab +lito +dura +workplaces +promote +mccaf +woodwork +wawx +ப +ttino +shari +semper +bettertogether +ðŁijĬðŁı» +zebra +pondering +enchil +hom +cosmic +tanz +mocked +eccc +athed +abolish +propeller +parisagreement +assemblies +industry +fraudulent +pesa +changmin +axx +ðŁĴµ +irrational +cusa +ramadhan +octavia +onelove +jacki +barak +taxider +serious +nathanfillion +mcen +chk +popart +gravity +coppola +readingfc +illusions +jig +wwx +resh +exporting +buzzard +âĻ¤ +pcm +lanapar +kos +aromas +antalya +wwdc +vena +phila +ballin +ðŁijĦ +quinta +mao +fery +eighty +sentiments +safeguarding +rwa +puffs +lucille +decath +slu +nugent +deter +brazil +zeiss +superbowl +subsidy +altern +hidalgo +enzymes +ä½ +tagne +hairdresser +adrien +walkout +opposes +cantina +bedside +afan +ðŁĶĹ +prophetic +danes +unsuccessful +supercharged +pkk +exemption +hartle +secular +clipping +brs +unitedway +cnet +patchy +hagan +een +âļľ +vara +sympathi +nevertrump +affirmation +omf +nycfc +maja +surro +keerth +upscale +sandalwood +monarchy +knobs +åĭ +potholes +hungergames +terraces +nasir +counsell +welcometo +waq +seaman +mita +stunningly +ontheroad +inability +)!! +bongo +antv +sput +worldenvironmentday +resusc +ytd +fim +eunhyuk +sachin +roseanne +clermont +apec +amina +vening +nantes +almost +sinus +exas +tyl +tien +plead +lancs +burnaby +rek +joom +observers +discography +clg +âĻ¦ +snack +rti +oily +crystalli +brute +webdevelopment +toppings +laf +anis +adder +reliving +carlin +battleof +weg +syrian +pont +ndc +laghate +yuma +spp +piti +robbing +marting +reykja +rajput +ncds +kiewicz +âĢ¢âĢ¢ +vampire +substantially +opioids +nepali +kline +aroo +understand +litt +uit +thrombo +saries +quot +balling +ttr +sgh +philipp +brant +acl +mello +whittaker +.; +defiant +bgc +replying +mirren +metamorpho +schwab +bulge +utilized +pickering +pardon +dsa +à¸Ī +dooley +cumulative +л +urgency +emir ++/- +¦Ī +otas +âı³ +stationed +grapevine +arac +karanjohar +fancy +saul +coogs +lgbtq +اÙħ +javi +ummer +pll +denis +daipur +puffin +lewisham +fandom +cope +vesmatter +sve +helpless +deodor +ostrich +kazan +fridaythe +condor +vx +sophomores +robles +cutt +climbers +리 +sleg +snf +macys +hydrating +groupe +poyn +moulin +hgtv +lmfaooo +sulphur +asdfghjkl +annabelle +humpback +braved +viswasam +multipurpose +humidi +escorted +barbican +fad +corsa +ðŁ¤« +pippa +hereto +cany +sergi +orcas +ovie +edou +sany +globalization +mancini +foodtruck +fis +defibrill +schre +smafia +lovewins +laut +kaka +hollande +gameon +resurgence +outside +olympiad +intan +abstraction +rapid +palom +calle +jasmin +attackers +swagg +mitra +kylo +ல +hermitage +gordo +eira +sosfam +rollout +excite +synod +merrill +cals +assa +livelihoods +juve +theblack +gopackgo +antlers +albanian +woolly +quiche +purification +areth +smarthome +nek +allblacks +mexicans +ism +germs +complexion +marck +ushi +ðŁIJIJ +charl +castic +tillerson +giuliani +biodegradable +malbec +bois +jubil +imes +rame +genetic +espnu +chley +soho +gopher +gsc +buuren +cube +bridesmaids +webinars +toe +manipur +violently +noticias +exchanging +chiev +replaceable +muaythai +buss +spil +instalment +divya +caitlin +olim +filtering +whirlwind +stared +priorit +pram +pompeii +monologue +kite +buka +âĢ¦.. +vaccine +brero +wozni +solent +referr +myrt +gridiron +galatasaray +froze +claremont +ðŁ¥ĥ +victorias +sseldorf +pastures +netneutrality +chor +ðŁijģ +ಿ +weho +symptom +josel +inous +dragoncon +powerball +pte +fourthofjuly +ecla +earbuds +whereabouts +saltlife +deprivation +chter +wiggle +system +psst +chaz +dany +rimo +oaxaca +lanaparrilla +barcelon +melancholy +wayback +hotro +nsi +lilly +kuro +jahan +intellect +boardgame +ðŁıĬ +sneakpeek +kprc +jails +candel +zanzi +mortimer +starch +rags +pfa +longlive +kart +girona +crocker +christoph +precautions +warship +perm +parent +vangogh +gifford +allegheny +rayn +utm +stencil +recalling +penney +zazzle +ìĥĿ +hinds +arenas +nuev +lawler +guin +dothis +ðŁijķ +ì¶ķíķĺ +weg +tib +ridin +complexes +turbulent +pesos +demarcus +vallarta +samsun +kisses +heinrich +deportes +wilms +urd +thenext +inkigayo +howi +firsts +carriage +cleanliness +maswar +isch +axel +sizzle +roadhouse +frans +entourage +cobble +booth +benedict +talon +fcu +yearofthe +rayon +raidernation +foyle +koval +pianos +lpg +burmese +manure +geocaching +coscino +bnp +ferra +strophy +marais +cees +legendof +katniss +enoch +aved +youknow +dprk +ðŁĺ¢ðŁĺ¢ +spun +prost +sorrows +centred +kea +galicia +?ðŁ¤Ķ +ÑĢода +bouchard +ðŁĴĻðŁĴľ +yui +seedlings +jonah +recovers +nyrd +boardroom +suma +myjaps +tung +shai +irgc +elio +wagons +kashi +policemen +johnnie +alecoscino +shopify +dotted +detri +vaw +tofficial +inyour +chalmers +traced +novi +byes +ariel +nippon +lapel +griez +bgs +fooling +dita +vijaysethu +nmwx +asot +kranti +helm +vedi +sickest +mochi +kabo +shrubs +hered +bsp +sqm +hamr +dulkar +antha +nrf +avoidance +aten +publix +bearers +nasi +hap +hells +ðŁĸ¥ +ื +thelastjedi +ohwx +ðŁį« +wahoo +therese +recaps +ssnhq +birdphotography +vay +petti +paulo +belvedere +(* +grl +duvet +cpec +sait +porsch +measurable +aviators +fremantle +breen +onom +meand +lifesaving +euref +endon +embaras +airasia +elis +dunkin +starmagic +sill +portobello +kiefer +exe +muted +ãģ¦ +wethepeople +logia +liberal +theforceawakens +mined +haunts +freckles +caretaker +sindia +âķIJ +devlin +liston +directioner +ohn +figaro +emmanuel +dubois +clones +bruise +ðŁİĪðŁİī +disinfe +dermatology +asr +swatch +discomfort +tamanna +piday +macken +katic +delusional +shawnee +gud +albino +pali +dingh +cucumbers +coffey +anticipating +treasured +websummit +sheltered +savor +pedagogy +mgs +shma +sbu +denali +campos +bubblegum +oir +leaps +yler +rone +sanskrit +mint +meatless +futurist +dude +avel +protested +squire +zaki +szn +harcourt +cyclone +bourdain +gatherings +dant +adventurer +paragon +altman +dding +banerjee +snorkeling +motherwell +missy +ender +glows +kiwis +chickpea +poro +efron +appt +uy +specified +gabby +estrada +combos +bourbon +vini +varun +stephani +keywords +carvings +amitabh +wrought +twal +reels +clubbing +ubiquit +crit +ambedkar +æĻ +pruning +vaccinated +boeing +sks +loona +hypnosis +edelman +phol +hew +colosse +mckinsey +uon +tote +sacrificing +oxi +nang +emu +пÑĢиÑĢода +mth +kerswednesday +argued +timelapse +risking +regulating +nigh +likelihood +cubic +auction +reinfor +pistor +noses +yel +snuggles +pei +jeanette +taku +rith +guyz +à¸ŀ +yte +verted +paysoff +jauregui +hooligans +procedural +mib +hardy +eleng +checkers +alline +themet +proudof +keerthyofficial +collaborator +niu +inflicted +advani +retwee +memoriam +ficial +tighter +salem +reviewers +brics +bendigo +amell +turkish +sushmaswar +paulson +palawan +mollie +stitcher +sburgh +iru +haydn +eners +aroa +uzzi +sarajevo +hela +apollo +ninety +vaca +spon +ventu +jelena +heifer +avoids +spine +prize +marist +recreating +mede +wooden +findlay +rofl +ndi +comprehend +yugo +yü +towork +ufos +sonar +piston +recording +tentative +artforsale +pellets +fredo +ÙĪر +muses +customization +profound +isner +ideally +siam +plankton +cmdr +manger +franken +customizable +म +walkaway +swivel +vastly +noton +lexa +exmoor +zas +tante +reductions +lolly +hipsters +benefited +ë² +wwwww +masculine +fiji +drey +phill +aneous +nicol +mendez +disappro +chner +throughs +shenmue +eastman +ðŁIJİ +yuck +undertale +reys +gobeavs +engen +cna +merr +birk +ãģ¨ç¹ĭãģĮãĤĬãģŁãģĦ +âĥ£@ +ynna +steed +offender +atum +vanishing +presidenti +lovethem +gnocchi +friggin +peril +madhya +agne +deejay +marnock +mtb +foldable +@___ +standre +bronx +bowski +finite +crockett +bsf +getit +serenawilliams +miro +ignatius +slay +rinse +fondue +seldom +smore +gani +dyce +dmitry +crumb +latepost +primark +ohana +florals +doa +remembranceday +dds +azione +toonami +airport +æĿ± +thad +fist +dinesh +drwho +adwords +admirer +proje +kyrgyz +à« +manifestation +lewan +jic +thibau +leased +vanity +nourished +nevertheless +augmente +fuelled +chead +wilshere +rudi +pz +myco +morro +herbalife +hardrock +deman +dreality +spades +cevic +bhai +baron +ultimatefan +hounews +tobi +strut +keel +affiliation +themasters +smal +hue +esteban +conv +omnic +databases +cov +terti +stg +snoopdogg +metabol +lethbridge +ðŁı»âĢįâĻĢï¸ı +yearling +residentevil +nwsl +iyaki +griezmann +cous +ðŁĵĿ: +torian +sami +ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ðŁĶ¥ +gare +alliances +whitfield +wether +refining +coyi +kraken +ðŁĺĺâĿ¤ +singularity +lili +hns +boldand +wawrinka +misogyny +lovers +cq +bdg +adona +garter +womenof +scd +recognising +muna +strou +signalling +laredo +hellboy +aleksand +unavailable +pediatric +asin +meria +rishi +futurism +wye +polarized +ewe +propel +informs +crease +~" +artiston +likefor +heidelberg +erra +lifein +lenny +interrupt +coherent +caz +vickers +leveled +fbs +cabins +bummed +apostles +weh +tendon +souvenirs +infuri +pierce +asset +mlas +goth +diggin +annas +ylor +thwaite +swel +panera +murderers +crooked +bsgo +acu +aon +rean +oneof +kohl +bloodh +pesticide +lostdog +flexing +ëĤĺ +supra +eternally +ðŁļĻ +paolo +olan +momo +iselle +captainmarvel +slou +mistakenly +akhilesh +mert +ilinan +buon +balkan +mirro +millen +derail +damon +titi +bios +redon +picard +parte +ðŁ¤Ł +غ +sonics +firsth +ddc +vegans +turban +nigan +lottie +lyndon +starbuck +pinkfloyd +lifestyles +amara +ashe +rsc +vala +smer +cwgc +client +buenas +jagan +coops +ðŁijijðŁijij +specializes +snagged +glar +bennet +wildlifewednesday +bowden +pik +artin +emporium +arl +reba +passer +disappoints +additive +âľĬðŁı½ +bayer +missoula +haskell +commences +nix +neman +exploited +plasticsurgery +ccd +asocial +vot +siegel +froome +kapam +fara +eha +probes +mwf +meeting +pbb +akins +mistletoe +kingdomhearts +forkids +ecr +bale +escorts +adidasoriginals +kwa +kts +halloffame +ðŁĺį. +wags +potted +owing +honeycomb +hefty +urology +merle +bpd +stripping +reich +kstate +guay +yonge +shakti +gloom +batt +sonom +nery +elba +blanks +helle +triplets +bombay +akarta +abia +transmitted +rolf +jais +angularjs +fierc +mss +trace +à¥ĩ +tombs +oldman +kombucha +fol +ehealth +cereals +arelli +inari +ðŁĴ© +wol +liberties +fawn +affirm +nunavut +hysterical +kdrama +artes +âĢ¢âĢ¢âĢ¢âĢ¢âĢ¢âĢ¢âĢ¢âĢ¢ +valentin +manslaughter +gales +eoin +energized +dels +withdraws +stles +sarcastic +ramesh +incredibles +lockhart +yawn +ultimatefanlive +oooooooooooooooo +muen +gurudev +teer +peeling +newsnow +linguistics +directv +agend +unilever +ruger +handedly +erose +limel +thec +royalties +finishers +nrg +mgt +fidget +comps +bacon +aggressively +abit +châ +tarde +slugger +qanda +greening +dats +enslaved +spector +oye +freef +bhand +stopbrexit +misconceptions +cava +ðŁĺįðŁĺįðŁĺįðŁĺįðŁĺįðŁĺįðŁĺįðŁĺį +multitasking +housel +ferreira +centime +ankles +jodh +helly +frome +outtuesday +narnia +balaji +lbloggers +jyoti +ðŁįĩ +lancia +capri +yap +natash +downfall +."âĢĶ +î +ligament +coatings +aided +hiko +falling +encrypted +yegfood +infringement +cudi +cep +ðŁĺįðŁĺĤ +trad +superrugby +edwin +whiche +vimeo +layne +invigor +hehe +dubrovnik +bieber +utr +shaman +opers +hamill +enig +dif +arum +scrapbook +minh +divergence +mckinnon +lifetime +guterres +wille +pleas +patty +micron +kz +domaine +rusher +mds +chesney +screwdriver +âģ©, +sledge +hauer +chana +stamina +sprinkler +pln +heff +bolton +omon +carrington +accordion +jorge +interception +inputs +gull +transcription +vanuatu +itical +ethos +tich +spacey +peeking +umi +hager +psychotic +illian +illia +bonnaroo +anese +puc +laghateparth +enhall +economical +dredge +%- +uwe +tubular +scouncil +peasants +fler +tumbler +hep +fordham +rowley +initials +evasion +ernation +plugins +cochran +cattle +acidity +ðŁİĬðŁİī +regrann +jumpman +eface +xma +patriarchy +escobar +cristian +tipton +nueva +hackney +backseat +killarney +aidan +stadion +simultaneous +idaho +aje +uth +figure +clos +burk +voluntar +recite +macfarlane +curfew +boudo +wgn +stix +slap +scratched +phillip +journe +expelled +waz +uke +tatiana +oue +hopp +dimitri +ðŁĵ£ +matologist +electrifying +bluffs +billsmafia +azcardinals +yaa +xmas +shara +rith +gills +dres +barton +authorization +imperialism +homeof +todo +footpath +bandwidth +visitspain +mohsin +erupted +miki +insignia +mikel +ssh +gera +bankholiday +awan +tweak +starcraft +eal +construction +skeletons +leep +inem +barclay +shipwreck +monsieur +yoh +ront +formative +sero +lep +horseman +hoosier +hazmat +cylinders +centi +ðŁĴ¥ðŁĴ¥ðŁĴ¥ +reem +naire +musically +grasshopper +estonian +terminology +romain +bloggerrt +toxin +stance +cultivated +anast +ðŁIJį +shimano +gopher +enei +recyclable +gamification +fightfor +cq +avocados +keys +elike +glycer +shakur +mobilization +galley +explain +exchanged +peth +obedience +illage +ennis +ãĥŀ +wiv +wallabies +maar +igers +fintech +finalized +woj +meaningless +infield +onnaise +eet +bronte +passages +ðŁij§ +strickland +northernlights +lomond +htc +wray +shifter +dialog +ðŁįį +>>>>>> +teatime +stech +sichuan +quill +franca +complementary +barrington +marcus +malam +goooo +forsa +electra +afs +âĹĨ +trife +snazzy +folia +andolan +afterdark +woodson +strade +littlest +ogun +conwy +cowards +ðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤðŁĺĤ +íĬ¸ +seul +murphy +dunks +kapilshar +joachim +womack +equality +averages +aine +ðŁ¦Ī +tacular +disability +uked +midcentury +barthol +teasers +tabern +njcaa +spout +opi +kubball +blom +soar +populism +methyl +ðŁijĬðŁı¼ +ospre +aloils +ðŁĵĸ +ðŁĮļ +xer +spilling +publica +cardam +adish +sacha +pkg +buda +lyricist +ibc +grump +hover +halep +antibody +anemone +âĻ¥âĻ¥âĻ¥âĻ¥ +mcl +lithograph +ccu +sfest +pathic +callister +ottawa +gunsn +rutger +halibut +envision +differentiate +ðŁļĢðŁļĢ +piran +latel +ucn +troubad +raine +fiercely +learnenglish +lease +wexmondays +emit +drayton +burrell +scubadiving +holler +dru +clocked +wral +apro +translucent +wbo +patriarch +moja +lannister +fishery +nederland +mildly +mirai +mako +jap +ðŁĺ©ðŁĺ©ðŁĺ© +prostatec +panna +arama +undertaking +tompkins +neop +solids +savoury +eames +cutlery +woodbridge +steamer +rizzo +wildcat +ratna +laminated +kineni +jalap +aides +acknowledges +?!?!?! +!ðŁİī +wafc +maggio +haves +darje +ofi +gril +vasi +brux +mohd +fakespeare +arnold +rmb +forbe +walleye +rodi +therapeutics +strategi +obste +mudder +downloadable +ddings +dca +asiangames +campeon +appropriation +thcentury +ramatta +draped +bullion +muc +onex +segreg +ophelia +bodily +âĿ¤ðŁĺį +wizar +teased +ademy +toid +sura +lazarus +snickers +mase +loh +bowed +biblio +xchange +harlan +ghoshal +flavorful +bhagat +allez +whichever +tenstein +discer +organiser +mtg +dreamliner +tse +hokkaido +mok +indulgent +hickman +blinded +alyn +aaaah +spool +loughborough +interpret +etv +aristotle +optimizing +avicii +madurai +juli +nawaz +matchups +abide +painting +welling +veli +octagon +inscribed +poking +placer +lifecycle +kilig +gsp +elives +clements +nasheed +mesut +incarcerated +distilled +walang +delicacy +delgado +chez +chita +adero +tux +patil +odo +abhcosmetics +tvc +pbc +inaccurate +hardworkpaysoff +baller +quotation +merchandising +gastri +defenses +drogba +bexhill +bankno +winona +sieg +pgs +hahahha +aguchi +subram +miracle +desch +libre +bacher +entine +bbcradi +loudest +rps +pierc +fryer +stormtrooper +rafaelnadal +pasco +exhaustion +epiconetsy +rctid +kellie +gaines +dbz +smriti +sbridge +limited +claw +technical +biographical +adored +ะ +exclude +acadia +keyboards +furman +soca +suru +nips +swaps +serverless +rune +puffy +northampton +nishings +hender +cartridges +gunshot +ðŁĵ¹ +filament +respondents +peyton +mountaineer +merging +lifespan +intimidation +pafc +nlwx +expansive +purr +fck +cae +atti +telethon +sohn +mendel +lopes +dori +unbroken +tered +tastings +inactive +disintegr +tassel +sharethe +piano +islay +airspace +zawa +ricciardo +mington +fresher +curry +revs +pharoah +hmv +exhilarating +whoo +linkin +krispy +competency +stewards +nebu +katsu +admins +bazar +asar +givingback +ssummit +songz +linus +rajkumar +farmington +fantasia +ðŁĺ´ðŁĺ´ +sobri +lisse +barrymore +prism +blob +senew +monoxide +expire +eighteen +dipper +xiao +kilt +hinch +bbcsport +bamboo +pter +exal +ðŁ¦ĭ +hamlin +expeditions +stargazing +foodsecurity +wylie +ulf +stingly +onstorm +loeb +broome +bnha +pancreatic +elive +!!!!!!!!!!! +therapper +orthopedic +avengersendgame +antitrust +ìļ° +gote +omd +offside +gyllen +wineries +whitewater +adl +lupita +exceeds +consisted +chewbacca +ashleigh +nhljets +issan +shld +hayat +cranberries +ðŁ¤ĺðŁı½ +rockthe +springtraining +fallout +dairyfree +waj +undecided +sown +rcn +northwales +httr +fumble +dits +compelled +populist +minted +blanchett +.'' +propulsion +milla +auberg +hertz +hta +udaipur +serendipity +aztecs +alsace +ðŁIJij +lun +shoes +charli +garza +ðŁĴŁ +probiotics +foxtv +olis +miff +localized +diffuser +sigue +funko +rendous +ðŁĴij +jekyll +<|startoftext|> +<|endoftext|> diff --git a/examples/BuddyWhisper/whisper-main.cpp b/examples/BuddyWhisper/whisper-main.cpp index 7d69ea3074..011b5c847e 100644 --- a/examples/BuddyWhisper/whisper-main.cpp +++ b/examples/BuddyWhisper/whisper-main.cpp @@ -33,7 +33,7 @@ using namespace std; using namespace buddy; using namespace dap; -constexpr size_t ParamsSize = 99148800; +constexpr size_t ParamsSize = 72593920; constexpr size_t MaxVocabSize = 51865; constexpr size_t MaxTokenLength = 448; @@ -180,4 +180,4 @@ int main() { << std::endl; return 0; -} +} \ No newline at end of file diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 3aa1195d10..9f1b566801 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -24,6 +24,14 @@ if (BUDDY_MOBILENETV3_EXAMPLES) add_subdirectory(BuddyMobileNetV3) endif() +if (BUDDY_RESNET_EXAMPLES) + add_subdirectory(BuddyResNet18) +endif() + +if (BUDDY_STABLE_DIFFUSION_EXAMPLES) + add_subdirectory(BuddyStableDiffusion) +endif() + if(BUDDY_DSL_EXAMPLES) add_subdirectory(ToyDSL) endif() diff --git a/examples/DAPDialect/CMakeLists.txt b/examples/DAPDialect/CMakeLists.txt index 96b921ee3a..8ff8b619df 100644 --- a/examples/DAPDialect/CMakeLists.txt +++ b/examples/DAPDialect/CMakeLists.txt @@ -16,9 +16,16 @@ message(STATUS "Spliting size: ${SPLITING_SIZE}") # Buddy DAP Dialect FIR operation #------------------------------------------------------------------------------- -add_executable(buddy-fir FIRLowpass.cpp) -add_dependencies(buddy-fir buddy-opt) -target_link_libraries(buddy-fir +add_executable(buddy-fir-scalar FIRLowpass.cpp) +add_dependencies(buddy-fir-scalar buddy-opt) +target_link_libraries(buddy-fir-scalar + BuddyLibDAP + mlir_c_runner_utils +) + +add_executable(buddy-fir-vectorization FIRVectorization.cpp) +add_dependencies(buddy-fir-vectorization buddy-opt) +target_link_libraries(buddy-fir-vectorization BuddyLibDAP mlir_c_runner_utils ) diff --git a/examples/DAPDialect/FIRLowpass.cpp b/examples/DAPDialect/FIRLowpass.cpp index 3a8217730a..e88b83f26a 100644 --- a/examples/DAPDialect/FIRLowpass.cpp +++ b/examples/DAPDialect/FIRLowpass.cpp @@ -62,7 +62,7 @@ int main() { printLogLabel(); std::cout << "Running FIR operation..." << std::endl; const auto loadStart = std::chrono::high_resolution_clock::now(); - dap::fir(&inputContainer, &kernel, &outputMemRef); + dap::FIR(&inputContainer, &kernel, &outputMemRef); const auto loadEnd = std::chrono::high_resolution_clock::now(); const std::chrono::duration loadTime = loadEnd - loadStart; diff --git a/examples/DAPDialect/FIRVectorization.cpp b/examples/DAPDialect/FIRVectorization.cpp new file mode 100644 index 0000000000..3f35e11b72 --- /dev/null +++ b/examples/DAPDialect/FIRVectorization.cpp @@ -0,0 +1,91 @@ +//===- FIRVectorization.cpp - Example of DAP FIR Vectorization ------------===// +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//===----------------------------------------------------------------------===// +// +// An end-to-end example of the vectorized FIR (Finite Impulse Response) +// operation in buddy-mlir. +// +//===----------------------------------------------------------------------===// + +#include +#include +#include + +using namespace dap; +using namespace std; + +// Print [Log] label in bold blue format. +void printLogLabel() { std::cout << "\033[34;1m[Log] \033[0m"; } + +int main() { + // Print the title of this example. + const std::string title = + "Vectorized FIR Operation Powered by Buddy Compiler"; + std::cout << "\033[33;1m" << title << "\033[0m" << std::endl; + + // Generate the kernel for a FIR filter operation. + // Params: + // Input kernel: Stores generated kernel data. + // Type: Specifies the window type from the WINDOW_TYPE enum class. + // Length: The length of the filter. + // Cutoff: The lowpass cutoff frequency. + // Argument: Filter-specific arguments, with size limited by the + // WINDOW_TYPE. + intptr_t kernelSize = 100; + MemRef kernel(&kernelSize); + dap::firLowpass(/*input=*/kernel, + /*type=*/dap::WINDOW_TYPE::BLACKMANHARRIS7, + /*len=*/kernelSize, /*cutoff=*/0.3, + /*args=*/nullptr); + + // Initialize data containers. + // Params: + // Input container: Stores the raw audio data. + // Returns: + // Output memory reference: Provides a MemRef for saving the output. + Audio inputContainer("../../tests/Interface/core/TestAudio.wav"); + intptr_t samplesNum = static_cast(inputContainer.getSamplesNum()); + MemRef outputMemRef(&samplesNum); + + // Apply vectorized FIR operation to the audio data. + printLogLabel(); + std::cout << "Running vectorized FIR operation..." << std::endl; + const auto loadStart = std::chrono::high_resolution_clock::now(); + dap::FIR(&inputContainer, &kernel, &outputMemRef, + /*isVectorization=*/true); + const auto loadEnd = std::chrono::high_resolution_clock::now(); + const std::chrono::duration loadTime = + loadEnd - loadStart; + printLogLabel(); + std::cout << "Audio processing time: " << (double)(loadTime.count()) / 1000 + << "s\n" + << std::endl; + + // Convert a MemRef object to an Audio object and set the metadata. + Audio outputContainer(std::move(outputMemRef)); + outputContainer.setBitDepth(inputContainer.getBitDepth()); + outputContainer.setSamplesNum(inputContainer.getSamplesNum()); + outputContainer.setChannelsNum(inputContainer.getChannelsNum()); + outputContainer.setSampleRate(inputContainer.getSampleRate()); + + // Save the processed data to an audio file. + std::string saveFileName = "VectorizedFIRTestAudio.wav"; + outputContainer.saveToFile(saveFileName, "wave"); + printLogLabel(); + std::cout << "Processed audio data saved in: " << saveFileName << "\n" + << std::endl; + + return 0; +} diff --git a/examples/DIPDialect/resize4D_nchw.cpp b/examples/DIPDialect/resize4D_nchw.cpp index 95d77cc27d..ffa4234bff 100644 --- a/examples/DIPDialect/resize4D_nchw.cpp +++ b/examples/DIPDialect/resize4D_nchw.cpp @@ -23,9 +23,9 @@ //===----------------------------------------------------------------------===// #include "buddy/DIP/imgcodecs/loadsave.h" #include -#include #include #include +#include #include #include @@ -33,7 +33,7 @@ using namespace std; void testImplementation(int argc, char *argv[]) { // Read as colar image. - dip::Image inputBatch(argv[1], dip::DIP_RGB, true); + dip::Image inputBatch(argv[1], dip::DIP_RGB); // Note : Both values in output image dimensions and scaling ratios must be // positive numbers. @@ -42,12 +42,12 @@ void testImplementation(int argc, char *argv[]) { {1, 3, 224, 224} /*{image_cols, image_rows}*/); // Define Img with the output of Resize4D. - intptr_t outSizes[3] = {output.getSizes()[2], output.getSizes()[3], - output.getSizes()[1]}; + intptr_t outSizes[4] = {output.getSizes()[0], output.getSizes()[1], + output.getSizes()[2], output.getSizes()[3]}; - Img outputImageResize4D(output.getData(), outSizes); + dip::Image outputImageResize4D(output.getData(), outSizes); - // dip::imwrite(argv[2], outputImageResize4D); + dip::imageWrite(argv[2], outputImageResize4D); return; } diff --git a/examples/GemminiDialect/makefile b/examples/GemminiDialect/makefile index cba84b780a..6be7693262 100644 --- a/examples/GemminiDialect/makefile +++ b/examples/GemminiDialect/makefile @@ -4,6 +4,25 @@ BUDDY_TRANSLATE := ../../build/bin/buddy-translate BUDDY_LLC := ../../build/bin/buddy-llc INTERFACES:= ../../frontend/Interfaces +mvin-mvout-lower: + @${BUDDY_OPT} ./mvin-mvout.mlir \ + -lower-gemmini \ + -o log.mlir + +mvin-mvout-translate: + @${BUDDY_OPT} ./mvin-mvout.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +mvin-mvout-asm: + @${BUDDY_OPT} ./mvin-mvout.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + mvin-mvout-run: @${BUDDY_OPT} ./mvin-mvout.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -13,6 +32,25 @@ mvin-mvout-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +matrix-add-lower: + @${BUDDY_OPT} ./matrix-add.mlir \ + -lower-gemmini \ + -o log.mlir + +matrix-add-translate: + @${BUDDY_OPT} ./matrix-add.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +matrix-add-asm: + @${BUDDY_OPT} ./matrix-add.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + matrix-add-run: @${BUDDY_OPT} ./matrix-add.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -22,6 +60,25 @@ matrix-add-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +matrix-add-scale-lower: + @${BUDDY_OPT} ./matrix-add-scale.mlir \ + -lower-gemmini \ + -o log.mlir + +matrix-add-scale-translate: + @${BUDDY_OPT} ./matrix-add-scale.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +matrix-add-scale-asm: + @${BUDDY_OPT} ./matrix-add-scale.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + matrix-add-scale-run: @${BUDDY_OPT} ./matrix-add-scale.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -31,6 +88,25 @@ matrix-add-scale-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +transpose-lower: + @${BUDDY_OPT} ./transpose.mlir \ + -lower-gemmini \ + -o log.mlir + +transpose-translate: + @${BUDDY_OPT} ./transpose.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +transpose-asm: + @${BUDDY_OPT} ./transpose.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + transpose-run: @${BUDDY_OPT} ./transpose.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -40,6 +116,25 @@ transpose-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +matmul-os-lower: + @${BUDDY_OPT} ./matmul-os.mlir \ + -lower-gemmini \ + -o log.mlir + +matmul-os-translate: + @${BUDDY_OPT} ./matmul-os.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +matmul-os-asm: + @${BUDDY_OPT} ./matmul-os.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + matmul-os-run: @${BUDDY_OPT} ./matmul-os.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -49,6 +144,25 @@ matmul-os-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +compute-accumulated-lower: + @${BUDDY_OPT} ./compute-accumulated.mlir \ + -lower-gemmini \ + -o log.mlir + +compute-accumulated-translate: + @${BUDDY_OPT} ./compute-accumulated.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +compute-accumulated-asm: + @${BUDDY_OPT} ./compute-accumulated.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + compute-accumulated-run: @${BUDDY_OPT} ./compute-accumulated.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -58,6 +172,25 @@ compute-accumulated-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +matmul-ws-lower: + @${BUDDY_OPT} ./matmul-ws.mlir \ + -lower-gemmini \ + -o log.mlir + +matmul-ws-translate: + @${BUDDY_OPT} ./matmul-ws.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +matmul-ws-asm: + @${BUDDY_OPT} ./matmul-ws.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + matmul-ws-run: @${BUDDY_OPT} ./matmul-ws.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -67,6 +200,25 @@ matmul-ws-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +tile-matmul-lower: + @${BUDDY_OPT} ./tile-matmul.mlir \ + -lower-gemmini \ + -o log.mlir + +tile-matmul-translate: + @${BUDDY_OPT} ./tile-matmul.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +tile-matmul-asm: + @${BUDDY_OPT} ./tile-matmul.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + tile-matmul-run: @${BUDDY_OPT} ./tile-matmul.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -76,6 +228,25 @@ tile-matmul-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +tile-matmul-os-lower: + @${BUDDY_OPT} ./tile-matmul-os.mlir \ + -lower-gemmini \ + -o log.mlir + +tile-matmul-os-translate: + @${BUDDY_OPT} ./tile-matmul-os.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +tile-matmul-os-asm: + @${BUDDY_OPT} ./tile-matmul-os.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + tile-matmul-os-run: @${BUDDY_OPT} ./tile-matmul-os.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -85,6 +256,25 @@ tile-matmul-os-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +tile-matmul-ws-igelu-lower: + @${BUDDY_OPT} ./tile-matmul-ws-igelu.mlir \ + -lower-gemmini \ + -o log.mlir + +tile-matmul-ws-igelu-translate: + @${BUDDY_OPT} ./tile-matmul-ws-igelu.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +tile-matmul-ws-igelu-asm: + @${BUDDY_OPT} ./tile-matmul-ws-igelu.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + tile-matmul-ws-igelu-run: @${BUDDY_OPT} ./tile-matmul-ws-igelu.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -94,6 +284,25 @@ tile-matmul-ws-igelu-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +tile-matmul-ws-relu-lower: + @${BUDDY_OPT} ./tile-matmul-ws-relu.mlir \ + -lower-gemmini \ + -o log.mlir + +tile-matmul-ws-relu-translate: + @${BUDDY_OPT} ./tile-matmul-ws-relu.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +tile-matmul-ws-relu-asm: + @${BUDDY_OPT} ./tile-matmul-ws-relu.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + tile-matmul-ws-relu-run: @${BUDDY_OPT} ./tile-matmul-ws-relu.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -103,6 +312,25 @@ tile-matmul-ws-relu-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +tile-matmul-ws-softmax-lower: + @${BUDDY_OPT} ./tile-matmul-ws-softmax.mlir \ + -lower-gemmini \ + -o log.mlir + +tile-matmul-ws-softmax-translate: + @${BUDDY_OPT} ./tile-matmul-ws-softmax.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +tile-matmul-ws-softmax-asm: + @${BUDDY_OPT} ./tile-matmul-ws-softmax.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + tile-matmul-ws-softmax-run: @${BUDDY_OPT} ./tile-matmul-ws-softmax.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -112,6 +340,25 @@ tile-matmul-ws-softmax-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +tile-matmul-ws-layernorm-lower: + @${BUDDY_OPT} ./tile-matmul-ws-layernorm.mlir \ + -lower-gemmini \ + -o log.mlir + +tile-matmul-ws-layernorm-translate: + @${BUDDY_OPT} ./tile-matmul-ws-layernorm.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +tile-matmul-ws-layernorm-asm: + @${BUDDY_OPT} ./tile-matmul-ws-layernorm.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + tile-matmul-ws-layernorm-run: @${BUDDY_OPT} ./tile-matmul-ws-layernorm.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -121,6 +368,25 @@ tile-matmul-ws-layernorm-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +tile-conv-lower: + @${BUDDY_OPT} ./tile-conv.mlir \ + -lower-gemmini \ + -o log.mlir + +tile-conv-translate: + @${BUDDY_OPT} ./tile-conv.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +tile-conv-asm: + @${BUDDY_OPT} ./tile-conv.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + tile-conv-run: @${BUDDY_OPT} ./tile-conv.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -130,6 +396,25 @@ tile-conv-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +tile-conv-igelu-lower: + @${BUDDY_OPT} ./tile-conv-igelu.mlir \ + -lower-gemmini \ + -o log.mlir + +tile-conv-igelu-translate: + @${BUDDY_OPT} ./tile-conv-igelu.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +tile-conv-igelu-asm: + @${BUDDY_OPT} ./tile-conv-igelu.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + tile-conv-igelu-run: @${BUDDY_OPT} ./tile-conv-igelu.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -139,6 +424,25 @@ tile-conv-igelu-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +tile-conv-softmax-lower: + @${BUDDY_OPT} ./tile-conv-softmax.mlir \ + -lower-gemmini \ + -o log.mlir + +tile-conv-softmax-translate: + @${BUDDY_OPT} ./tile-conv-softmax.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +tile-conv-softmax-asm: + @${BUDDY_OPT} ./tile-conv-softmax.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + tile-conv-softmax-run: @${BUDDY_OPT} ./tile-conv-softmax.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -148,6 +452,25 @@ tile-conv-softmax-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +tile-conv-relu-lower: + @${BUDDY_OPT} ./tile-conv-relu.mlir \ + -lower-gemmini \ + -o log.mlir + +tile-conv-relu-translate: + @${BUDDY_OPT} ./tile-conv-relu.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +tile-conv-relu-asm: + @${BUDDY_OPT} ./tile-conv-relu.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + tile-conv-relu-run: @${BUDDY_OPT} ./tile-conv-relu.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -157,6 +480,25 @@ tile-conv-relu-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +tile-conv-layernorm-lower: + @${BUDDY_OPT} ./tile-conv-layernorm.mlir \ + -lower-gemmini \ + -o log.mlir + +tile-conv-layernorm-translate: + @${BUDDY_OPT} ./tile-conv-layernorm.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +tile-conv-layernorm-asm: + @${BUDDY_OPT} ./tile-conv-layernorm.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + tile-conv-layernorm-run: @${BUDDY_OPT} ./tile-conv-layernorm.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -166,6 +508,25 @@ tile-conv-layernorm-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +tile-rect-conv-lower: + @${BUDDY_OPT} ./tile-rect-conv.mlir \ + -lower-gemmini \ + -o log.mlir + +tile-rect-conv-translate: + @${BUDDY_OPT} ./tile-rect-conv.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +tile-rect-conv-asm: + @${BUDDY_OPT} ./tile-rect-conv.mlir \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + tile-rect-conv-run: @${BUDDY_OPT} ./tile-rect-conv.mlir -lower-gemmini | \ ${BUDDY_TRANSLATE} --buddy-to-llvmir | \ @@ -175,6 +536,31 @@ tile-rect-conv-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +gemmini-linalg-matmul-lower: + @${BUDDY_OPT} ./matmul.mlir \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-linalg-matmul-translate: + @${BUDDY_OPT} ./matmul.mlir \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-linalg-matmul-asm: + @${BUDDY_OPT} ./matmul.mlir \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-linalg-matmul-run: @${BUDDY_OPT} ./matmul.mlir \ -convert-linalg-to-gemmini \ @@ -187,6 +573,31 @@ gemmini-linalg-matmul-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +gemmini-linalg-conv2d-nchw-fchw-i8-lower: + @${BUDDY_OPT} ./conv_2d_nchw_fchw_i8.mlir \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-linalg-conv2d-nchw-fchw-i8-translate: + @${BUDDY_OPT} ./conv_2d_nchw_fchw_i8.mlir \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-linalg-conv2d-nchw-fchw-i8-asm: + @${BUDDY_OPT} ./conv_2d_nchw_fchw_i8.mlir \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-linalg-conv2d-nchw-fchw-i8-run: @${BUDDY_OPT} ./conv_2d_nchw_fchw_i8.mlir \ -convert-linalg-to-gemmini \ @@ -199,6 +610,31 @@ gemmini-linalg-conv2d-nchw-fchw-i8-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +gemmini-linalg-conv2d-nchw-fchw-f32-lower: + @${BUDDY_OPT} ./conv_2d_nchw_fchw_f32.mlir \ + -convert-linalg-to-gemmini="acc_t=f32" \ + -convert-linalg-to-loops \ + -lower-gemmini="dim=4 acc_t=f32 elem_t=f32" \ + -o log.mlir + +gemmini-linalg-conv2d-nchw-fchw-f32-translate: + @${BUDDY_OPT} ./conv_2d_nchw_fchw_f32.mlir \ + -convert-linalg-to-gemmini="acc_t=f32" \ + -convert-linalg-to-loops \ + -lower-gemmini="dim=4 acc_t=f32 elem_t=f32" | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-linalg-conv2d-nchw-fchw-f32-asm: + @${BUDDY_OPT} ./conv_2d_nchw_fchw_f32.mlir \ + -convert-linalg-to-gemmini="acc_t=f32" \ + -convert-linalg-to-loops \ + -lower-gemmini="dim=4 acc_t=f32 elem_t=f32" | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-linalg-conv2d-nchw-fchw-f32-run: @${BUDDY_OPT} ./conv_2d_nchw_fchw_f32.mlir \ -convert-linalg-to-gemmini="acc_t=f32" \ @@ -211,6 +647,31 @@ gemmini-linalg-conv2d-nchw-fchw-f32-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +gemmini-linalg-conv2d-nhwc-hwcf-i8-lower: + @${BUDDY_OPT} ./conv_2d_nhwc_hwcf_i8.mlir \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-linalg-conv2d-nhwc-hwcf-i8-translate: + @${BUDDY_OPT} ./conv_2d_nhwc_hwcf_i8.mlir \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-linalg-conv2d-nhwc-hwcf-i8-asm: + @${BUDDY_OPT} ./conv_2d_nhwc_hwcf_i8.mlir \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-linalg-conv2d-nhwc-hwcf-i8-run: @${BUDDY_OPT} ./conv_2d_nhwc_hwcf_i8.mlir \ -convert-linalg-to-gemmini \ @@ -223,6 +684,31 @@ gemmini-linalg-conv2d-nhwc-hwcf-i8-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +gemmini-linalg-conv2d-nhwc-hwcf-f32-lower: + @${BUDDY_OPT} ./conv_2d_nhwc_hwcf_f32.mlir \ + -convert-linalg-to-gemmini="acc_t=f32" \ + -convert-linalg-to-loops \ + -lower-gemmini="dim=4 acc_t=f32 elem_t=f32" \ + -o log.mlir + +gemmini-linalg-conv2d-nhwc-hwcf-f32-translate: + @${BUDDY_OPT} ./conv_2d_nhwc_hwcf_f32.mlir \ + -convert-linalg-to-gemmini="acc_t=f32" \ + -convert-linalg-to-loops \ + -lower-gemmini="dim=4 acc_t=f32 elem_t=f32" | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-linalg-conv2d-nhwc-hwcf-f32-asm: + @${BUDDY_OPT} ./conv_2d_nhwc_hwcf_f32.mlir \ + -convert-linalg-to-gemmini="acc_t=f32" \ + -convert-linalg-to-loops \ + -lower-gemmini="dim=4 acc_t=f32 elem_t=f32" | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-linalg-conv2d-nhwc-hwcf-f32-run: @${BUDDY_OPT} ./conv_2d_nhwc_hwcf_f32.mlir \ -convert-linalg-to-gemmini="acc_t=f32" \ @@ -235,6 +721,33 @@ gemmini-linalg-conv2d-nhwc-hwcf-f32-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +gemmini-linalg-batch-matmul-lower: + @${BUDDY_OPT} ./batch_matmul.mlir \ + -convert-linalg-to-gemmini \ + -expand-strided-metadata\ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-linalg-batch-matmul-translate: + @${BUDDY_OPT} ./batch_matmul.mlir \ + -convert-linalg-to-gemmini \ + -expand-strided-metadata\ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-linalg-batch-matmul-asm: + @${BUDDY_OPT} ./batch_matmul.mlir \ + -convert-linalg-to-gemmini \ + -expand-strided-metadata\ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s gemmini-linalg-batch-matmul-run: @${BUDDY_OPT} ./batch_matmul.mlir \ @@ -249,6 +762,34 @@ gemmini-linalg-batch-matmul-run: @riscv64-unknown-linux-gnu-gcc log.o -O2 -static -o a.out @spike --extension=gemmini pk a.out +linalg-matmul-32x32-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +linalg-matmul-32x32-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-matmul-32x32-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-matmul-32x32-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -270,7 +811,7 @@ c-matmul-32x32-gemmini-run: -DMATMUL=1 -O2 -static @spike --extension=gemmini pk a.out -linalg-matmul-32x32-cpu-run: +linalg-matmul-32x32-cpu-lower: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ -convert-linalg-to-loops \ @@ -278,21 +819,83 @@ linalg-matmul-32x32-cpu-run: -convert-vector-to-llvm -finalize-memref-to-llvm \ -convert-arith-to-llvm \ -lower-gemmini \ - -convert-func-to-llvm -reconcile-unrealized-casts | \ - ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ - ${BUDDY_LLC} -filetype=obj -mtriple=riscv64 \ - -mattr=+buddyext,+D -float-abi=hard \ - -o log.o - @riscv64-unknown-linux-gnu-g++ log.o -DMATMUL=1 \ - -DDIALECT=1 performance-test.cpp \ - -O2 -static -o a.out -I${INTERFACES} - @spike --extension=gemmini pk a.out + -convert-func-to-llvm -reconcile-unrealized-casts \ + -o log.mlir -gemmini-matmul-32x32-gemmini-run: +linalg-matmul-32x32-cpu-translate: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ -convert-linalg-to-loops \ - -lower-gemmini | \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-matmul-32x32-cpu-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + +linalg-matmul-32x32-cpu-run: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=obj -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.o + @riscv64-unknown-linux-gnu-g++ log.o -DMATMUL=1 \ + -DDIALECT=1 performance-test.cpp \ + -O2 -static -o a.out -I${INTERFACES} + @spike --extension=gemmini pk a.out + +gemmini-matmul-32x32-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-matmul-32x32-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-matmul-32x32-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + +gemmini-matmul-32x32-gemmini-run: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ ${BUDDY_LLC} -filetype=obj -mtriple=riscv64 \ -mattr=+buddyext,+D -float-abi=hard \ @@ -302,6 +905,34 @@ gemmini-matmul-32x32-gemmini-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +linalg-matmul-64x64-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +linalg-matmul-64x64-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-matmul-64x64-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-matmul-64x64-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -323,6 +954,43 @@ c-matmul-64x64-gemmini-run: -DMATMUL=2 -O2 -static @spike --extension=gemmini pk a.out +linalg-matmul-64x64-cpu-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts \ + -o log.mlir + +linalg-matmul-64x64-cpu-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-matmul-64x64-cpu-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-matmul-64x64-cpu-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -341,6 +1009,31 @@ linalg-matmul-64x64-cpu-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +gemmini-matmul-64x64-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-matmul-64x64-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-matmul-64x64-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-matmul-64x64-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -355,6 +1048,34 @@ gemmini-matmul-64x64-gemmini-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +linalg-matmul-128x128-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +linalg-matmul-128x128-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-matmul-128x128-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-matmul-128x128-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -376,6 +1097,43 @@ c-matmul-128x128-gemmini-run: -DMATMUL=3 -O2 -static @spike --extension=gemmini pk a.out +linalg-matmul-128x128-cpu-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts \ + -o log.mlir + +linalg-matmul-128x128-cpu-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-matmul-128x128-cpu-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-matmul-128x128-cpu-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -394,6 +1152,31 @@ linalg-matmul-128x128-cpu-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +gemmini-matmul-128x128-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-matmul-128x128-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-matmul-128x128-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-matmul-128x128-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -408,6 +1191,34 @@ gemmini-matmul-128x128-gemmini-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +linalg-matmul-256x256-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +linalg-matmul-256x256-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-matmul-256x256-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-matmul-256x256-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -429,6 +1240,43 @@ c-matmul-256x256-gemmini-run: -DMATMUL=4 -O2 -static @spike --extension=gemmini pk a.out +linalg-matmul-256x256-cpu-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts \ + -o log.mlir + +linalg-matmul-256x256-cpu-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-matmul-256x256-cpu-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-matmul-256x256-cpu-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -447,6 +1295,31 @@ linalg-matmul-256x256-cpu-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +gemmini-matmul-256x256-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-matmul-256x256-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-matmul-256x256-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-matmul-256x256-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -461,26 +1334,91 @@ gemmini-matmul-256x256-gemmini-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out -linalg-matmul-512x512-gemmini-run: +linalg-matmul-512x512-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +linalg-matmul-512x512-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-matmul-512x512-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + +linalg-matmul-512x512-gemmini-run: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=obj -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.o + @riscv64-unknown-linux-gnu-g++ log.o -DMATMUL=5 -DDIALECT=1 \ + performance-test.cpp -O2 -static -o a.out -I${INTERFACES} + @spike --extension=gemmini pk a.out + +c-matmul-512x512-gemmini-run: + @riscv64-unknown-linux-gnu-gcc performance-test.c \ + -I${RISCV}/../../generators/gemmini/software/gemmini-rocc-tests/include \ + -I${RISCV}/../../generators/gemmini/software/gemmini-rocc-tests \ + -DMATMUL=5 -O2 -static + @spike --extension=gemmini pk a.out + +linalg-matmul-512x512-cpu-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts \ + -o log.mlir + +linalg-matmul-512x512-cpu-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-matmul-512x512-cpu-asm: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ - -convert-linalg-to-gemmini \ - -convert-linalg-to-loops \ - -lower-gemmini | \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ - ${BUDDY_LLC} -filetype=obj -mtriple=riscv64 \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ -mattr=+buddyext,+D -float-abi=hard \ - -o log.o - @riscv64-unknown-linux-gnu-g++ log.o -DMATMUL=5 -DDIALECT=1 \ - performance-test.cpp -O2 -static -o a.out -I${INTERFACES} - @spike --extension=gemmini pk a.out - -c-matmul-512x512-gemmini-run: - @riscv64-unknown-linux-gnu-gcc performance-test.c \ - -I${RISCV}/../../generators/gemmini/software/gemmini-rocc-tests/include \ - -I${RISCV}/../../generators/gemmini/software/gemmini-rocc-tests \ - -DMATMUL=5 -O2 -static - @spike --extension=gemmini pk a.out + -o log.s linalg-matmul-512x512-cpu-run: @${BUDDY_OPT} ./ciface.mlir \ @@ -500,6 +1438,31 @@ linalg-matmul-512x512-cpu-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +gemmini-matmul-512x512-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-matmul-512x512-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-matmul-512x512-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-matmul-512x512-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -514,6 +1477,34 @@ gemmini-matmul-512x512-gemmini-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +linalg-matmul-1024x1024-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +linalg-matmul-1024x1024-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-matmul-1024x1024-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-matmul-1024x1024-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -535,6 +1526,43 @@ c-matmul-1024x1024-gemmini-run: -DMATMUL=6 -O2 -static @spike --extension=gemmini pk a.out +linalg-matmul-1024x1024-cpu-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts \ + -o log.mlir + +linalg-matmul-1024x1024-cpu-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-matmul-1024x1024-cpu-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-matmul-1024x1024-cpu-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -553,6 +1581,31 @@ linalg-matmul-1024x1024-cpu-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +gemmini-matmul-1024x1024-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-matmul-1024x1024-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-matmul-1024x1024-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-matmul-1024x1024-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -567,6 +1620,34 @@ gemmini-matmul-1024x1024-gemmini-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +linalg-conv-3x3-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +linalg-conv-3x3-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-conv-3x3-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-conv-3x3-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -589,6 +1670,43 @@ c-conv-3x3-gemmini-run: -DCONV=1 -O2 -static @spike --extension=gemmini pk a.out +linalg-conv-3x3-cpu-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts \ + -o log.mlir + +linalg-conv-3x3-cpu-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-conv-3x3-cpu-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-conv-3x3-cpu-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -607,6 +1725,31 @@ linalg-conv-3x3-cpu-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +gemmini-conv-3x3-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-conv-3x3-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-conv-3x3-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-conv-3x3-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -621,6 +1764,34 @@ gemmini-conv-3x3-gemmini-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +linalg-conv-5x5-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +linalg-conv-5x5-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-conv-5x5-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-conv-5x5-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -643,6 +1814,43 @@ c-conv-5x5-gemmini-run: -DCONV=2 -O2 -static @spike --extension=gemmini pk a.out +linalg-conv-5x5-cpu-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts \ + -o log.mlir + +linalg-conv-5x5-cpu-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-conv-5x5-cpu-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-conv-5x5-cpu-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -661,19 +1869,72 @@ linalg-conv-5x5-cpu-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out -gemmini-conv-5x5-gemmini-run: +gemmini-conv-5x5-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-conv-5x5-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-conv-5x5-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + +gemmini-conv-5x5-gemmini-run: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=obj -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.o + @riscv64-unknown-linux-gnu-g++ log.o -DCONV=2 \ + -DDIALECT=2 performance-test.cpp \ + -O2 -static -o a.out -I${INTERFACES} + @spike --extension=gemmini pk a.out + +linalg-conv-7x7-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +linalg-conv-7x7-gemmini-translate: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ - -convert-linalg-to-loops \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-conv-7x7-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ -lower-gemmini | \ ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ - ${BUDDY_LLC} -filetype=obj -mtriple=riscv64 \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ -mattr=+buddyext,+D -float-abi=hard \ - -o log.o - @riscv64-unknown-linux-gnu-g++ log.o -DCONV=2 \ - -DDIALECT=2 performance-test.cpp \ - -O2 -static -o a.out -I${INTERFACES} - @spike --extension=gemmini pk a.out + -o log.s linalg-conv-7x7-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ @@ -697,6 +1958,43 @@ c-conv-7x7-gemmini-run: -DCONV=3 -O2 -static @spike --extension=gemmini pk a.out +linalg-conv-7x7-cpu-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts \ + -o log.mlir + +linalg-conv-7x7-cpu-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-conv-7x7-cpu-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-conv-7x7-cpu-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -715,6 +2013,31 @@ linalg-conv-7x7-cpu-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +gemmini-conv-7x7-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-conv-7x7-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-conv-7x7-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-conv-7x7-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -729,6 +2052,34 @@ gemmini-conv-7x7-gemmini-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +linalg-conv-9x9-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +linalg-conv-9x9-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-conv-9x9-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-conv-9x9-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -751,6 +2102,43 @@ c-conv-9x9-gemmini-run: -DCONV=4 -O2 -static @spike --extension=gemmini pk a.out +linalg-conv-9x9-cpu-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts \ + -o log.mlir + +linalg-conv-9x9-cpu-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-conv-9x9-cpu-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-conv-9x9-cpu-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -769,6 +2157,31 @@ linalg-conv-9x9-cpu-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +gemmini-conv-9x9-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-conv-9x9-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-conv-9x9-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-conv-9x9-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -783,6 +2196,34 @@ gemmini-conv-9x9-gemmini-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +linalg-conv-11x11-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +linalg-conv-11x11-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-conv-11x11-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-conv-11x11-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -805,6 +2246,43 @@ c-conv-11x11-gemmini-run: -DCONV=5 -O2 -static @spike --extension=gemmini pk a.out +linalg-conv-11x11-cpu-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts \ + -o log.mlir + +linalg-conv-11x11-cpu-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-conv-11x11-cpu-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-conv-11x11-cpu-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -823,6 +2301,31 @@ linalg-conv-11x11-cpu-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +gemmini-conv-11x11-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-conv-11x11-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-conv-11x11-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-conv-11x11-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -838,6 +2341,34 @@ gemmini-conv-11x11-gemmini-run: @spike --extension=gemmini pk a.out +linalg-conv-13x13-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +linalg-conv-13x13-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-conv-13x13-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-gemmini \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-conv-13x13-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -860,6 +2391,43 @@ c-conv-13x13-gemmini-run: -DCONV=6 -O2 -static @spike --extension=gemmini pk a.out +linalg-conv-13x13-cpu-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts \ + -o log.mlir + +linalg-conv-13x13-cpu-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +linalg-conv-13x13-cpu-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-affine -convert-scf-to-cf \ + -convert-vector-to-llvm -finalize-memref-to-llvm \ + -convert-arith-to-llvm \ + -lower-gemmini \ + -convert-func-to-llvm -reconcile-unrealized-casts | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + linalg-conv-13x13-cpu-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ @@ -878,6 +2446,31 @@ linalg-conv-13x13-cpu-run: -O2 -static -o a.out -I${INTERFACES} @spike --extension=gemmini pk a.out +gemmini-conv-13x13-gemmini-lower: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini \ + -o log.mlir + +gemmini-conv-13x13-gemmini-translate: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir \ + -o log.ll + +gemmini-conv-13x13-gemmini-asm: + @${BUDDY_OPT} ./ciface.mlir \ + -llvm-request-c-wrappers \ + -convert-linalg-to-loops \ + -lower-gemmini | \ + ${BUDDY_TRANSLATE} -buddy-to-llvmir | \ + ${BUDDY_LLC} -filetype=asm -mtriple=riscv64 \ + -mattr=+buddyext,+D -float-abi=hard \ + -o log.s + gemmini-conv-13x13-gemmini-run: @${BUDDY_OPT} ./ciface.mlir \ -llvm-request-c-wrappers \ diff --git a/examples/README.md b/examples/README.md index fc551ccdd6..c00a03c60e 100644 --- a/examples/README.md +++ b/examples/README.md @@ -172,10 +172,12 @@ $ cmake -G Ninja .. \ -DMLIR_DIR=$PWD/../llvm/build/lib/cmake/mlir \ -DLLVM_DIR=$PWD/../llvm/build/lib/cmake/llvm \ -DLLVM_ENABLE_ASSERTIONS=ON \ + -DBUDDY_EXAMPLES=ON \ -DCMAKE_BUILD_TYPE=RELEASE -$ ninja firLowpass +$ ninja buddy-fir-scalar buddy-fir-vectorization $ cd bin -$ ./firLowpass [input_file] [output_dest] +$ ./buddy-fir-scalar +$ ./buddy-fir-vectorization ``` Specify nothing to process default NASA audio. @@ -195,9 +197,9 @@ $ cmake -G Ninja .. \ -DLLVM_ENABLE_ASSERTIONS=ON \ -DBUDDY_EXAMPLES=ON \ -DCMAKE_BUILD_TYPE=RELEASE -$ ninja biquad +$ ninja buddy-biquad $ cd bin -$ ./biquad [input_file] [output_dest] +$ ./buddy-biquad ``` You can also use your own configuration assigning values `-DBUDDY_DAP_OPT_VECTOR_SPLITTING` (e.g. 64) and `-DBUDDY_OPT_ATTR` (e.g. avx2). @@ -219,9 +221,10 @@ $ cmake -G Ninja .. \ -DLLVM_ENABLE_ASSERTIONS=ON \ -DBUDDY_EXAMPLES=ON \ -DCMAKE_BUILD_TYPE=RELEASE -$ ninja iirLowpass +$ ninja buddy-iir-scalar buddy-iir-vectorization $ cd bin -$ ./iirLowpass [input_file] [output_dest] +$ ./buddy-iir-scalar +$ ./buddy-iir-vectorization ``` You can also use your own configuration assigning values `-DBUDDY_DAP_OPT_VECTOR_SPLITTING` (e.g. 64) and `-DBUDDY_OPT_ATTR` (e.g. avx2). diff --git a/examples/lit.cfg.py b/examples/lit.cfg.py index c1c4c05bd6..5988051497 100644 --- a/examples/lit.cfg.py +++ b/examples/lit.cfg.py @@ -42,6 +42,7 @@ 'BuddyWhisper', 'BuddyBert', 'BuddyMobileNetV3', + 'BuddyStableDiffusion', 'BuddyResNet18', 'BuddyGPU', 'ConvOpt', diff --git a/frontend/Interfaces/buddy/DAP/DSP/FIR.h b/frontend/Interfaces/buddy/DAP/DSP/FIR.h index 0963a5295c..485bdcc7b8 100644 --- a/frontend/Interfaces/buddy/DAP/DSP/FIR.h +++ b/frontend/Interfaces/buddy/DAP/DSP/FIR.h @@ -30,9 +30,12 @@ namespace detail { // Declare the Fir C interface. extern "C" { // TODO: support both float and double. -void _mlir_ciface_buddy_fir(MemRef *inputBuddyConv1D, - MemRef *kernelBuddyConv1D, - MemRef *outputBuddyConv1D); +void _mlir_ciface_buddy_fir(MemRef *inputBuddyFIR, + MemRef *kernelBuddyFIR, + MemRef *outputBuddyFIR); +void _mlir_ciface_buddy_fir_vectorization(MemRef *inputBuddyFIR, + MemRef *kernelBuddyFIR, + MemRef *outputBuddyFIR); } } // namespace detail @@ -67,11 +70,14 @@ void firLowpass(MemRef &input, WINDOW_TYPE type, size_t len, T cutoff, } template -void fir(MemRef *input, MemRef *filter, - MemRef *output) { +void FIR(MemRef *input, MemRef *filter, + MemRef *output, bool isVectorization = false) { if (N != 1) assert(0 && "Only mono audio is supported for now."); - detail::_mlir_ciface_buddy_fir(input, filter, output); + if (!isVectorization) + detail::_mlir_ciface_buddy_fir(input, filter, output); + else + detail::_mlir_ciface_buddy_fir_vectorization(input, filter, output); } } // namespace dap diff --git a/frontend/Interfaces/buddy/DIP/ImgContainer.h b/frontend/Interfaces/buddy/DIP/ImgContainer.h index 2525641bff..82a6ca5ad0 100644 --- a/frontend/Interfaces/buddy/DIP/ImgContainer.h +++ b/frontend/Interfaces/buddy/DIP/ImgContainer.h @@ -42,6 +42,28 @@ inline bool ifBigEndian() { return (*ptr == 0); } +inline int validToInt(size_t sz) { + int valueInt = (int)sz; + assert((size_t)valueInt == sz); + return valueInt; +} + +struct PaletteBlock { + unsigned char b, g, r, a; +}; + +// file bmp image palette +void FillPalette(PaletteBlock *palette, int bpp, bool negative = false) { + int i, length = 1 << bpp; + int xor_mask = negative ? 255 : 0; + + for (i = 0; i < length; i++) { + int val = (i * 255 / (length - 1)) ^ xor_mask; + palette[i].b = palette[i].g = palette[i].r = (unsigned char)val; + palette[i].a = 0; + } +} + template class Image : public MemRef { public: // Constructor initializes the image by loading from a file. @@ -51,6 +73,9 @@ template class Image : public MemRef { // norm: Indicates whether to normalize pixel values (default is false). Image(std::string filename, ImageModes mode, bool norm = false); + // from data to initialize image + Image(T *data, intptr_t sizes[N]); + // Retrieves the name of the current image format as a string. std::string getFormatName() const { switch (this->imageFormat) { @@ -68,6 +93,8 @@ template class Image : public MemRef { size_t getHeight() const { return this->height; } // Returns the bit depth of the image. int getBitDepth() const { return this->bitDepth; } + // Write a image + static void imageWrite(const std::string &filename, Image &image); private: // Enum to represent supported image formats. @@ -90,12 +117,19 @@ template class Image : public MemRef { void determineFormat(const std::vector &fileData); // Decodes a BMP image from raw file data. bool decodeBMP(const std::vector &fileData); - // Decodes a PNG image from raw file data. + // encode image format + int findFormat(const std::string &_ext); + // BMP image encode + void BMPEncode(const std::string &filename, Image &image); #ifdef BUDDY_ENABLE_PNG + // Decodes a PNG image from raw file data. bool decodePNG(const std::vector &fileData); #endif }; +template +Image::Image(T *data, intptr_t sizes[N]): MemRef(data, sizes) {} + // Image Container Constructor // Constructs an image container object from the image file path. template @@ -616,6 +650,102 @@ bool Image::decodePNG(const std::vector &fileData) { } #endif +template +int findFormat(const std::string &_ext){ + if (_ext.size() <= 1) + return 0; + + const char *ext = strrchr(_ext.c_str(), '.'); + if (!ext) + return 0; + + if (strcmp(ext, ".bmp") == 0) { + return 1; + } else { + std::cerr << "Unsupported to generate" << ext << "format image" << std::endl; + return 0; + } +} + +template +static void imageWrite(const std::string &filename, Image &image){ + int imformat = findFormat(filename); + switch (imformat) { + case 1: + BMPEncode(filename, image); + break; + default: + return; + } + return; +} + +template +void BMPEncode(const std::string &filename, Image &image){ + std::ofstream bmp(filename, std::ios::binary); + if (!bmp) { + std::cerr << "Failed to create file" << std::endl; + return; + } + int width = image.getSizes()[3]; + int height = image.getSizes()[2]; + int channels = image.getSizes()[1]; + // Align each row of data with 4 bytes + int fileStep = (width * channels + 3) & -4; + int bitmapHeaderSize = 40; + int paletteSize = channels > 1 ? 0 : 1024; + int headerSize = 14 /* fileheader */ + bitmapHeaderSize + paletteSize; + size_t fileSize = (size_t)fileStep * height + headerSize; + PaletteBlock palette[256]; + // Fixed value in BMP + int zero = 0; + int one = 1; + char zeropad[] = "\0\0\0\0"; + + // Write file header + bmp.write("BM", 2); + int fileSizeInt = validToInt(fileSize); + bmp.write(reinterpret_cast(&fileSizeInt), 4); + bmp.write(reinterpret_cast(&zero), 4); + bmp.write(reinterpret_cast(&headerSize), 4); + + // Write bitmap header + bmp.write(reinterpret_cast(&bitmapHeaderSize), 4); + bmp.write(reinterpret_cast(&width), 4); + bmp.write(reinterpret_cast(&height), 4); + bmp.write(reinterpret_cast(&one), 2); + int bitDepth = channels << 3; + bmp.write(reinterpret_cast(&(bitDepth)), 2); + bmp.write(reinterpret_cast(&zero), 4); + bmp.write(reinterpret_cast(&zero), 4); + bmp.write(reinterpret_cast(&zero), 4); + bmp.write(reinterpret_cast(&zero), 4); + bmp.write(reinterpret_cast(&zero), 4); + bmp.write(reinterpret_cast(&zero), 4); + + // Write palette + if (channels == 1) { + FillPalette(palette, 8); + bmp.write(reinterpret_cast(&palette), sizeof(palette)); + } + + // Write image data + int step = width * height; + T *data = image.getData(); + for (int y = height - 1; y >= 0; y--) { + for (int i = 0; i < width; i++) { + for (int t = channels - 1; t >= 0; t--) { + unsigned char pixel= static_cast(data[y * width + i + t * step]); + bmp.write(reinterpret_cast(&pixel), 1); + } + } + if (fileStep > width * channels) + bmp.write(zeropad, fileStep - width * channels); + } + + bmp.close(); +} + } // namespace dip #endif // FRONTEND_INTERFACES_BUDDY_DIP_IMGCONTAINER diff --git a/frontend/Interfaces/buddy/LLM/TextContainer.h b/frontend/Interfaces/buddy/LLM/TextContainer.h index 30adb2742c..45800b4c07 100644 --- a/frontend/Interfaces/buddy/LLM/TextContainer.h +++ b/frontend/Interfaces/buddy/LLM/TextContainer.h @@ -73,6 +73,9 @@ template class Text : public MemRef { // Read the string at once, and replace all whitespace with a special // mark — thick underline. void tokenizeLlama(const std::string &vocab, size_t length); + // Stable Diffusion Tokenizer + // This function is designed for tokenizing input text for Stable Diffusion models. + void tokenizeStableDiffusion(const std::string &vocab, size_t length); // Revert the ids into tokens. // This function initializes the conversion from Text memref to a string. @@ -161,6 +164,7 @@ template class Text : public MemRef { void tokenizeWithAffix(const std::string &token, size_t &tokenCnt); std::string findLongestSubToken(const std::string &token, size_t start); void assignTokenId(const std::string &token, size_t &tokenCnt); + void assignTokenIdSD(const std::string &token, size_t &tokenCnt); // [UNK] NLP Padding Marker int pad; // [UNK] NLP Unknown Marker @@ -169,6 +173,10 @@ template class Text : public MemRef { int cls; // [SEP] NLP Separator Marker int sep; + // [BOS] NLP Begin of Sentence Marker + int bos; + // [EOS] NLP End of Sentence Marker + int eos; // The maximum number of input characters that can be accepted in one word. size_t maxInputChars = 200; // The string member of the text container. @@ -317,6 +325,86 @@ void Text::tokenizeBert(const std::string &vocab, size_t length, } } +// StableDiffusion Tokenizer +template +void Text::tokenizeStableDiffusion(const std::string &vocab, size_t length) { + // Initialize MemRef container members. + this->offset = 0; + this->sizes[0] = 1; + this->sizes[1] = length; + this->setStrides(); + size_t size = this->product(this->sizes); + this->allocated = (T *)malloc(sizeof(T) * size); + this->aligned = this->allocated; + this->pad = 0; + this->unk = 49407; + this->bos = 49406; + this->eos = 49407; + loadVocab(vocab); + // Tokenize string and convert to MemRef container object. + // Mark the beginning of our token. + this->aligned[0] = bos; + tokenCnt = 1; + std::string token; + + for (size_t i = 0; i < str.size(); ++i) { + char c = tolower(str[i]); + // Special match cases + if (str.substr(i, 15) == "<|startoftext|>" || str.substr(i, 13) == "<|endoftext|>") { + if (!token.empty()) { + assignTokenIdSD(token, tokenCnt); + token.clear(); + } + size_t len = (str.substr(i, 15) == "<|startoftext|>") ? 15 : 13; + assignTokenIdSD(str.substr(i, len), tokenCnt); + i += len - 1; + } + // Handle contractions + else if (c == '\'' && (str.substr(i, 2) == "'s" || str.substr(i, 2) == "'t" || + str.substr(i, 3) == "'re" || str.substr(i, 3) == "'ve" || + str.substr(i, 2) == "'m" || str.substr(i, 3) == "'ll" || + str.substr(i, 2) == "'d")) { + if (!token.empty()) { + assignTokenIdSD(token, tokenCnt); + token.clear(); + } + size_t len = (str.substr(i, 3) == "'re" || str.substr(i, 3) == "'ve" || + str.substr(i, 3) == "'ll") ? 3 : 2; + assignTokenIdSD(str.substr(i, len), tokenCnt); + i += len - 1; + } + // Handle letters + else if (std::isalpha(static_cast(c))) { + token += c; + } + // Handle digits + else if (std::isdigit(static_cast(c))) { + token += c; + } + // Handle other characters + else { + if (!token.empty()) { + assignTokenIdSD(token, tokenCnt); + token.clear(); + } + token += c; + if (token != " ") assignTokenIdSD(token, tokenCnt); + token.clear(); + } + } + // Parse the last token if exists. + if (!token.empty()) { + assignTokenIdSD(token, tokenCnt); + } + + // Mark the end of token stream. + this->aligned[tokenCnt++] = eos; + // Padding the rest text container. + for (size_t i = tokenCnt; i < length; i++) { + this->aligned[i] = pad; + } +} + // The revert function is used to convert the tokenized sequence back to a // full string. template std::string Text::revertLlama() { @@ -453,6 +541,18 @@ void Text::assignTokenId(const std::string &token, size_t &tokenCnt) { this->aligned[tokenCnt++] = unk; } } + +template +void Text::assignTokenIdSD(const std::string &token, size_t &tokenCnt) { + const std::string token_suffixed = token + ""; + if (tokenToIdMap.count(token_suffixed)) { + this->aligned[tokenCnt++] = tokenToIdMap[token_suffixed]; + } else { + //The BPE encoding needs to be implemented here. + this->aligned[tokenCnt++] = unk; + } +} + } // namespace buddy #endif // FRONTEND_INTERFACES_BUDDY_LLM_TEXTCONTAINER diff --git a/frontend/Interfaces/lib/CMakeLists.txt b/frontend/Interfaces/lib/CMakeLists.txt index 6a98a18b93..c4172a8b23 100644 --- a/frontend/Interfaces/lib/CMakeLists.txt +++ b/frontend/Interfaces/lib/CMakeLists.txt @@ -10,6 +10,10 @@ elseif (HAVE_NEON) set(SPLITING_SIZE 16) endif () +#------------------------------------------------------------------------------- +# Generate Buddy DIP Library: BuddyLibDIP +#------------------------------------------------------------------------------- + add_custom_command(OUTPUT DIP.o COMMAND ${CMAKE_BINARY_DIR}/bin/buddy-opt ${CMAKE_CURRENT_SOURCE_DIR}/DIP.mlir -lower-dip="DIP-strip-mining=${SPLITING_SIZE}" @@ -37,87 +41,97 @@ SET_TARGET_PROPERTIES(BuddyLibDIP PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_DIRECTORY} ) -add_custom_command(OUTPUT DAP.o - COMMAND ${CMAKE_BINARY_DIR}/bin/buddy-opt ${CMAKE_CURRENT_SOURCE_DIR}/DAP.mlir - -lower-dap="DAP-vector-splitting=${SPLITING_SIZE}" - --convert-linalg-to-affine-loops - -arith-expand - -lower-affine - -convert-scf-to-cf - -convert-math-to-llvm - -convert-vector-to-llvm - -finalize-memref-to-llvm - -llvm-request-c-wrappers - -convert-func-to-llvm - -reconcile-unrealized-casts | - ${LLVM_TOOLS_BINARY_DIR}/mlir-translate --mlir-to-llvmir | - ${LLVM_TOOLS_BINARY_DIR}/llc - -mtriple=${BUDDY_TARGET_TRIPLE} - -mattr=${BUDDY_OPT_ATTR} - --filetype=obj - -o ${CMAKE_CURRENT_BINARY_DIR}/DAP.o +#------------------------------------------------------------------------------- +# Generate Buddy DAP Library: BuddyLibDAP +#------------------------------------------------------------------------------- + +add_custom_command( + OUTPUT DAP.o + COMMAND + ${CMAKE_BINARY_DIR}/bin/buddy-opt ${CMAKE_CURRENT_SOURCE_DIR}/DAP.mlir + -lower-dap="DAP-vector-splitting=${SPLITING_SIZE}" + --convert-linalg-to-affine-loops + -arith-expand + -lower-affine + -convert-scf-to-cf + -convert-math-to-llvm + -convert-vector-to-llvm + -finalize-memref-to-llvm + -llvm-request-c-wrappers + -convert-func-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate --mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llc + -mtriple=${BUDDY_TARGET_TRIPLE} + -mattr=${BUDDY_OPT_ATTR} + --filetype=obj + -o ${CMAKE_CURRENT_BINARY_DIR}/DAP.o DEPENDS mlir-translate llc buddy-opt - ) +) -add_custom_command(OUTPUT DAP-extend.o - COMMAND ${CMAKE_BINARY_DIR}/bin/buddy-opt ${CMAKE_CURRENT_SOURCE_DIR}/DAP-extend.mlir - -extend-dap - -one-shot-bufferize - -convert-linalg-to-loops - -convert-scf-to-cf - -expand-strided-metadata - -lower-affine - -convert-vector-to-llvm - -memref-expand - -arith-expand - -convert-arith-to-llvm - -finalize-memref-to-llvm - -convert-math-to-llvm - -llvm-request-c-wrappers - -convert-func-to-llvm - -reconcile-unrealized-casts | - ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | - ${LLVM_TOOLS_BINARY_DIR}/llc - -mtriple=${BUDDY_TARGET_TRIPLE} - -mattr=${BUDDY_OPT_ATTR} - -filetype=obj -relocation-model=pic - -o ${CMAKE_CURRENT_BINARY_DIR}/DAP-extend.o +add_custom_command( + OUTPUT DAP-extend.o + COMMAND + ${CMAKE_BINARY_DIR}/bin/buddy-opt ${CMAKE_CURRENT_SOURCE_DIR}/DAP-extend.mlir + -extend-dap + -one-shot-bufferize + -convert-linalg-to-loops + -convert-scf-to-cf + -expand-strided-metadata + -lower-affine + -convert-vector-to-llvm + -memref-expand + -arith-expand + -convert-arith-to-llvm + -finalize-memref-to-llvm + -convert-math-to-llvm + -llvm-request-c-wrappers + -convert-func-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llc + -mtriple=${BUDDY_TARGET_TRIPLE} + -mattr=${BUDDY_OPT_ATTR} + -filetype=obj -relocation-model=pic + -o ${CMAKE_CURRENT_BINARY_DIR}/DAP-extend.o DEPENDS mlir-translate llc buddy-opt - ) +) -add_custom_command(OUTPUT DAPVectorization.o - COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/DAP.mlir | - sed 's/buddy_fir/buddy_fir_vectorization/' | - sed 's/buddy_iir/buddy_iir_vectorization/' | - sed 's/buddy_biquad/buddy_biquad_vectorization/' | - ${CMAKE_BINARY_DIR}/bin/buddy-opt - -vectorize-dap - -convert-linalg-to-affine-loops - -arith-expand - -lower-affine - -convert-scf-to-cf - -convert-math-to-llvm - -convert-vector-to-llvm - -finalize-memref-to-llvm - -llvm-request-c-wrappers - -convert-func-to-llvm - -reconcile-unrealized-casts | - ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | - ${LLVM_TOOLS_BINARY_DIR}/llc - -mtriple=${BUDDY_TARGET_TRIPLE} - -mattr=${BUDDY_OPT_ATTR} - -filetype=obj - -o ${CMAKE_CURRENT_BINARY_DIR}/DAPVectorization.o +add_custom_command( + OUTPUT DAPVectorization.o + COMMAND + cat ${CMAKE_CURRENT_SOURCE_DIR}/DAP.mlir | + sed -e 's/@buddy_fir/@buddy_fir_vectorization/' + -e 's/@buddy_iir/@buddy_iir_vectorization/' + -e 's/@buddy_biquad/@buddy_biquad_vectorization/' | + ${CMAKE_BINARY_DIR}/bin/buddy-opt + -vectorize-dap + -convert-linalg-to-affine-loops + -arith-expand + -lower-affine + -convert-scf-to-cf + -convert-math-to-llvm + -convert-vector-to-llvm + -finalize-memref-to-llvm + -llvm-request-c-wrappers + -convert-func-to-llvm + -reconcile-unrealized-casts | + ${LLVM_TOOLS_BINARY_DIR}/mlir-translate -mlir-to-llvmir | + ${LLVM_TOOLS_BINARY_DIR}/llc + -mtriple=${BUDDY_TARGET_TRIPLE} + -mattr=${BUDDY_OPT_ATTR} + -filetype=obj + -o ${CMAKE_CURRENT_BINARY_DIR}/DAPVectorization.o DEPENDS mlir-translate llc buddy-opt - ) +) add_library(BuddyLibDAP STATIC DAP.o DAP-extend.o DAPVectorization.o - ) +) SET_TARGET_PROPERTIES(BuddyLibDAP PROPERTIES LINKER_LANGUAGE CXX ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_DIRECTORY} - ) +) diff --git a/frontend/Python/frontend.py b/frontend/Python/frontend.py index 9d8c80f014..f5a17a1c31 100644 --- a/frontend/Python/frontend.py +++ b/frontend/Python/frontend.py @@ -124,6 +124,7 @@ def __init__( "mean.dim": MeanOp, "rsqrt.default": RsqrtOp, "mul.Tensor": MulOp, + "mul.Scalar": MulOp, "t.default": TOp, "mm.default": MatmulOp, "transpose.int": TransposeOp, @@ -167,6 +168,10 @@ def __init__( "split.Tensor":SplitOp, "max.default":MaxOp, "gt.Scalar":GtOp, + "_scaled_dot_product_flash_attention_for_cpu.default": ScaledDotProductFlashAttentionForCpuOp, + "ge.Scalar": GeOp, + "gt.Tensor": GreaterThanOp, + "_unsafe_index.Tensor": UnsafeIndexOp, } @property @@ -185,6 +190,8 @@ def _torch_dtype_translate(self, dtype): return TensorDType.Int64 case "torch.int32": return TensorDType.Int32 + case "torch.int8": + return TensorDType.Int8 case "torch.float16": return TensorDType.Float16 case "torch.float32": @@ -257,11 +264,26 @@ def _compile_fx( return for torchdynamo's call. """ - params = { - **dict(gm.named_parameters(remove_duplicate=False)), - **dict(gm.named_buffers(remove_duplicate=False)), - } - params_flat, _ = pytree.tree_flatten(params) + # params = { + # # **dict(gm.named_parameters(remove_duplicate=False)), + # **dict(gm.named_buffers(remove_duplicate=False)), + # } + # print(len(params)) + # params_flat, _ = pytree.tree_flatten(params) + inputs_pos = [] + params_pos = [] + buffers_pos = [] + for i, node in enumerate(gm.graph.nodes): + if i >= len(inputs): + break + if not str(node).startswith("l_self"): + inputs_pos.append(i) + elif "buffer" in str(node): + buffers_pos.append(i) + else: + params_pos.append(i) + + params_flat = [inputs[i] for i in params_pos + buffers_pos] if self._verbose: print("Graph in tabular form:") @@ -271,7 +293,9 @@ def _compiler(_gm: torch.fx.GraphModule, _inputs: List[torch.Tensor]): """Compile a FX graph in Aten/Prims IR to MLIR.""" nonlocal params_flat func_inputs = [] - for inp in _inputs[len(params_flat) :]: + for i in inputs_pos: + # for inp in _inputs[len(params_flat) :]: + inp = _inputs[i] inp_shape = inp.shape inp_dtype = self._torch_dtype_translate(str(inp.dtype)) func_inputs.append(TensorMeta(inp_shape, inp_dtype)) @@ -286,7 +310,22 @@ def _compiler(_gm: torch.fx.GraphModule, _inputs: List[torch.Tensor]): self._func_name, self._verbose ) - for gm_node in _gm.graph.nodes: + param_nodes = [] + buffers_nodes = [] + input_nodes = [] + other_nodes = [] + for i, node in enumerate(_gm.graph.nodes): + if i in params_pos: + param_nodes.append(node) + elif i in buffers_pos: + buffers_nodes.append(node) + elif i in inputs_pos: + input_nodes.append(node) + else: + other_nodes.append(node) + gm_nodes = param_nodes + buffers_nodes + input_nodes + other_nodes + + for gm_node in gm_nodes: node_users = [] for user in gm_node.users.keys(): node_users.append(str(user)) diff --git a/frontend/Python/graph/graph.py b/frontend/Python/graph/graph.py index ce35693efd..88c6a85df6 100644 --- a/frontend/Python/graph/graph.py +++ b/frontend/Python/graph/graph.py @@ -253,6 +253,8 @@ def lower_to_top_level_ir(self): match str(dtype): case "i1": np_type = np.dtype(np.bool_) + case "i8": + np_type = np.dtype(np.int8) case "i32": np_type = np.dtype(np.int32) case "i64": @@ -390,6 +392,8 @@ def _str_to_mlir_dtype(self, dtype: str) -> ir.Type: NotImplementedError: If the given dtype is not supported. """ match dtype: + case TensorDType.Int8: + return ir.IntegerType.get_signless(8) case TensorDType.Int32: return ir.IntegerType.get_signless(32) case TensorDType.Int64: diff --git a/frontend/Python/graph/operation.py b/frontend/Python/graph/operation.py index 0eb31fd961..c1a7b09746 100644 --- a/frontend/Python/graph/operation.py +++ b/frontend/Python/graph/operation.py @@ -534,3 +534,27 @@ class GtOp(Op): def __init__(self) -> None: super().__init__() self._op_type = OpType.ElementwiseType + + +class ScaledDotProductFlashAttentionForCpuOp(Op): + def __init__(self) -> None: + super().__init__() + self._op_type = OpType.ElementwiseType + + +class GeOp(Op): + def __init__(self) -> None: + super().__init__() + self._op_type = OpType.ElementwiseType + + +class GreaterThanOp(Op): + def __init__(self) -> None: + super().__init__() + self._op_type = OpType.BroadcastType + + +class UnsafeIndexOp(Op): + def __init__(self) -> None: + super().__init__() + self._op_type = OpType.ReshapeType diff --git a/frontend/Python/graph/type.py b/frontend/Python/graph/type.py index 5e42f6fc74..7b89c55a4b 100644 --- a/frontend/Python/graph/type.py +++ b/frontend/Python/graph/type.py @@ -35,7 +35,8 @@ class TensorDType(Enum): - Bool: str Represents the boolean data type. """ - + + Int8 = "int8" Int32 = "int32" Int64 = "int64" Float16 = "float16" diff --git a/frontend/Python/ops/linalg.py b/frontend/Python/ops/linalg.py index b561b3433a..ec6c827e6c 100644 --- a/frontend/Python/ops/linalg.py +++ b/frontend/Python/ops/linalg.py @@ -1073,6 +1073,26 @@ def mul_op( element = mlir_element_attr_get(dtype, node.args[1]) attr = ir.DenseElementsAttr.get_splat(tensor_type, element) input2 = arith.ConstantOp(tensor_type, attr).result + + input1_dtype = ir.RankedTensorType(input1.type).element_type + input2_dtype = ir.RankedTensorType(input2.type).element_type + if input1_dtype != mlir_dtype: + input1 = tosa.CastOp( + ir.RankedTensorType.get( + ir.RankedTensorType(input1.type).shape, + mlir_dtype, + ), + input1, + ) + if input2_dtype != mlir_dtype: + input2 = tosa.CastOp( + ir.RankedTensorType.get( + ir.RankedTensorType(input2.type).shape, + mlir_dtype, + ), + input2, + ) + if input1 is None or input2 is None: return mul_result_tensor_type = ir.RankedTensorType.get(shape, mlir_dtype) @@ -1211,28 +1231,51 @@ def index_op( return input1_shape = ir.RankedTensorType(input1.type).shape input2 = node.args[1] + input2_dim_sum = 0 + for i in range(len(input2)): + input2_dim_sum += len(symbol_table.get((str(input2[i]), 0)).type.shape) output_shape = list(node.tensor_meta["shape"]) + input_shape = input1.type.shape dtype = node.tensor_meta["dtype"] mlir_dtype = mlir_element_type_get(dtype) if len(input2) < len(input1_shape): tensor_type = ir.RankedTensorType.get(output_shape, mlir_dtype) output = tensor.EmptyOp(output_shape, mlir_dtype) - loops = ir.RankedTensorType( - symbol_table.get((str(input2[0]), 0)).type - ).shape generic_map = ir.AffineMap.get_permutation( - [i for i in range(len(output_shape))] + [i for i in range(max(len(output_shape), len(input_shape)))] ) - input_map = [ - ir.AffineMapAttr.get( - generic_map.get_submap([j for j in range(len(loops))]) + input_map = [] + for i in range(len(input2)): + input2_shape = symbol_table.get((str(input2[i]), 0)).type.shape + input_map.append( + ir.AffineMapAttr.get( + generic_map.get_submap( + [j for j in range(i, i + len(input2_shape))] + ) + ) + ) + if len(input_shape) > len(output_shape): + input_map.append( + ir.AffineMapAttr.get( + generic_map.get_submap( + [ + j + for j in range( + len(input_shape) - len(output_shape), + len(input_shape), + ) + ] + ) + ) ) - for i in range(len(input2)) - ] + [ - ir.AffineMapAttr.get( - generic_map.get_submap([j for j in range(len(output_shape))]) + else: + input_map.append( + ir.AffineMapAttr.get( + generic_map.get_submap( + [j for j in range(len(output_shape))] + ) + ) ) - ] operands = [symbol_table.get((str(i), 0)) for i in input2] op = linalg.GenericOp( [tensor_type], @@ -1241,7 +1284,7 @@ def index_op( ir.ArrayAttr.get(input_map), ir.ArrayAttr.get( [ir.Attribute.parse("#linalg.iterator_type")] - * len(output_shape) + * max(len(output_shape), len(input_shape)) ), ) arguments = [ @@ -1253,7 +1296,9 @@ def index_op( indexcast_op = arith.IndexCastOp(ir.IndexType.get(), i) block.append(indexcast_op) index.append(indexcast_op.result) - for i in range(len(loops), len(output_shape) - len(input2) + 1): + for i in range( + input2_dim_sum, max(len(input_shape), len(output_shape)) + ): index_op = linalg.IndexOp(ir._i64Attr(i, None)) block.append(index_op) index.append(index_op.result) @@ -1553,6 +1598,9 @@ def softmax_op( if dim < 0: dim += len(output_shape) mlir_dtype = mlir_element_type_get(dtype) + max_vals = tosa.ReduceMaxOp(input1, dim) + sub_op_output = ir.RankedTensorType.get(input1.type.shape, mlir_dtype) + input1 = tosa.SubOp(sub_op_output, input1, max_vals) # tensor_type = ir.RankedTensorType.get(output_shape, mlir_dtype) # output = tensor.EmptyOp(output_shape, mlir_dtype) # op = linalg.softmax( @@ -1781,18 +1829,23 @@ def where_op( input3 = symbol_table.get((str(node.args[2]), 0)) if input1 is None or input2 is None or input3 is None: return - output_shape = list(node.tensor_meta["shape"]) dtype = node.tensor_meta["dtype"] mlir_dtype = mlir_element_type_get(dtype) tensor_type = ir.RankedTensorType.get(output_shape, mlir_dtype) output = tensor.EmptyOp(output_shape, mlir_dtype) + + if not isinstance(input2.type, ir.RankedTensorType): + input2 = tensor.SplatOp(tensor_type, input2).result + if not isinstance(input3.type, ir.RankedTensorType): + input3 = tensor.SplatOp(tensor_type, input3).result + generic_map = ir.AffineMap.get_permutation( [i for i in range(len(output_shape))] ) op = linalg.GenericOp( [tensor_type], - [input1, input3], + [input1, input2, input3], [output], ir.ArrayAttr.get( [ @@ -1811,6 +1864,11 @@ def where_op( [i for i in range(len(output_shape))] ) ), + ir.AffineMapAttr.get( + generic_map.get_submap( + [i for i in range(len(output_shape))] + ) + ), ] ), ir.ArrayAttr.get( @@ -1822,11 +1880,14 @@ def where_op( op.region, [ ir.RankedTensorType(input1.type).element_type, + ir.RankedTensorType(input2.type).element_type, ir.RankedTensorType(input3.type).element_type, ir.RankedTensorType(output.result.type).element_type, ], ) - select_op = arith.SelectOp(block.arguments[0], input2, block.arguments[1]) + select_op = arith.SelectOp( + block.arguments[0], block.arguments[1], block.arguments[2] + ) block.append(select_op) block.append(linalg.YieldOp([select_op.result])) @@ -1966,6 +2027,321 @@ def gt_op(node: GtOp, symbol_table): return cmp_op +def ge_op( + node: GeOp, + symbol_table: Dict[Tuple[str, int], ir.Operation], +): + """ + Import the tensor greater equal operation. + From buddy GreaterEqualOp to MLIR arith `constant` operation. + Note: This op, campare two input nodes, and output bool tensor to represent + compare result. + Args: + node: Containing information from the input graph node. + symbol_table: A dictionary mapping symbols to their corresponding + operations. + Returns: + op: The operation return the linalg.generic op. + """ + input_tensor = symbol_table.get((str(node.args[0]), 0), node.args[0]) + input_dtype = ir.RankedTensorType(input_tensor.type).element_type + input_shape = ir.RankedTensorType(input_tensor.type).shape + tensor_type = ir.RankedTensorType.get(input_shape, input_dtype) + + scalar = arith.ConstantOp(input_dtype, node.args[1]) + rhs = tensor.SplatOp(tensor_type, scalar) + + if str(input_dtype).find("i") != -1: + cmp_op = arith.CmpIOp(5, input_tensor, rhs) + else: + cmp_op = arith.CmpFOp(3, input_tensor, rhs) + + return cmp_op + + +def greater_than_op( + node: GreaterThanOp, + symbol_table: Dict[Tuple[str, int], ir.Operation], +): + """ + Import the tensor greater than operation. + From buddy GreaterThanOp to MLIR arith `constant` operation. + Note: This op, campare two input nodes, and output bool tensor to represent + compare result. + Args: + node: Containing information from the input graph node. + symbol_table: A dictionary mapping symbols to their corresponding + operations. + Returns: + op: The operation return the linalg.generic op. + """ + input1 = symbol_table.get((str(node.args[0]), 0)) + input2 = symbol_table.get((str(node.args[1]), 0)) + output_shape = list(node.tensor_meta["shape"]) + dtype = node.tensor_meta["dtype"] + # value = ir.IntegerAttr.get(ir.IntegerType.get_signless(64), 4) + shp1 = list(ir.RankedTensorType(ir.Value(input1).type).shape) + shp2 = list(ir.RankedTensorType(ir.Value(input2).type).shape) + dtype = mlir_element_type_get(dtype) + tensor_type = ir.RankedTensorType.get(output_shape, dtype) + output = tensor.EmptyOp(output_shape, dtype) + if len(shp1) < len(shp2): + if int(shp1[-1]) > 1 and shp2[-1] == 1: + generic_map = ir.AffineMap.get_permutation( + [i for i in range(len(shp2) + 1)] + ) + op = linalg.GenericOp( + [tensor_type], + [input1, input2], + [output], + ir.ArrayAttr.get( + [ + ir.AffineMapAttr.get( + generic_map.get_submap( + [ + i + for i in range( + len(shp2) - len(shp1), len(shp2) + ) + ] + ) + ), + ir.AffineMapAttr.get( + generic_map.get_submap( + [i for i in range(0, len(shp2) - 1)] + + [len(shp2)] + ) + ), + ir.AffineMapAttr.get( + generic_map.get_submap( + [i for i in range(0, len(shp2))] + ) + ), + ] + ), + ir.ArrayAttr.get( + [ir.Attribute.parse("#linalg.iterator_type")] + * len(shp2) + + [ir.Attribute.parse("#linalg.iterator_type")] + ), + ) + block = ir.Block.create_at_start( + op.region, + [ + ir.RankedTensorType(input2.type).element_type, + ir.RankedTensorType(input2.type).element_type, + dtype, + ], + ) + if ( + str(ir.RankedTensorType(input2.type).element_type).find("i") + != -1 + ): + cmpop = arith.CmpIOp(4, block.arguments[0], block.arguments[1]) + else: + cmpop = arith.CmpFOp(2, block.arguments[0], block.arguments[1]) + block.append(cmpop) + block.append(linalg.YieldOp([cmpop.result])) + + return op + + +def unsafe_index_op( + node: UnsafeIndexOp, + symbol_table: Dict[Tuple[str, int], ir.Operation], +): + """ + Import the tensor _unsafe_index operation. + From buddy UnsafeIndexOp to MLIR linalg `generic` + operation. + Note: This op, get input node slice result by input index. + Args: + node: Containing information from the input graph node. + symbol_table: A dictionary mapping symbols to their corresponding + operations. + Returns: + op: The operation return the linalg.generic op. + """ + assert len(node.args) == 2 + input1 = symbol_table.get((str(node.args[0]), 0)) + if input1 is None: + return + input1_shape = ir.RankedTensorType(input1.type).shape + input2 = node.args[1] + have_none = False + for i in input2: + if i == None: + have_none = True + break + input2_dim_sum = 0 + for i in range(len(input2)): + input2_dim_sum += ( + len(symbol_table.get((str(input2[i]), 0)).type.shape) + if input2[i] != None + else 0 + ) + output_shape = list(node.tensor_meta["shape"]) + input_shape = input1.type.shape + dtype = node.tensor_meta["dtype"] + mlir_dtype = mlir_element_type_get(dtype) + if len(input2) < len(input1_shape): + tensor_type = ir.RankedTensorType.get(output_shape, mlir_dtype) + output = tensor.EmptyOp(output_shape, mlir_dtype) + generic_map = ir.AffineMap.get_permutation( + [i for i in range(max(len(output_shape), len(input_shape)))] + ) + input_map = [] + for i in range(len(input2)): + input2_shape = symbol_table.get((str(input2[i]), 0)).type.shape + input_map.append( + ir.AffineMapAttr.get( + generic_map.get_submap( + [j for j in range(i, i + len(input2_shape))] + ) + ) + ) + if len(input_shape) > len(output_shape): + input_map.append( + ir.AffineMapAttr.get( + generic_map.get_submap( + [ + j + for j in range( + len(input_shape) - len(output_shape), + len(input_shape), + ) + ] + ) + ) + ) + else: + input_map.append( + ir.AffineMapAttr.get( + generic_map.get_submap( + [j for j in range(len(output_shape))] + ) + ) + ) + operands = [symbol_table.get((str(i), 0)) for i in input2] + op = linalg.GenericOp( + [tensor_type], + operands, + [output], + ir.ArrayAttr.get(input_map), + ir.ArrayAttr.get( + [ir.Attribute.parse("#linalg.iterator_type")] + * max(len(output_shape), len(input_shape)) + ), + ) + arguments = [ + ir.RankedTensorType(i.type).element_type for i in operands + ] + [ir.RankedTensorType(output.result.type).element_type] + block = ir.Block.create_at_start(op.region, arguments) + index = [] + for i in block.arguments[:-1]: + indexcast_op = arith.IndexCastOp(ir.IndexType.get(), i) + block.append(indexcast_op) + index.append(indexcast_op.result) + for i in range( + input2_dim_sum, max(len(input_shape), len(output_shape)) + ): + index_op = linalg.IndexOp(ir._i64Attr(i, None)) + block.append(index_op) + index.append(index_op.result) + value = tensor.ExtractOp(input1, index) + block.append(value) + block.append(linalg.YieldOp([value.result])) + else: + tensor_type = ir.RankedTensorType.get(output_shape, mlir_dtype) + output = tensor.EmptyOp(output_shape, mlir_dtype) + generic_map = ir.AffineMap.get_permutation( + [i for i in range(max(len(output_shape), len(input_shape)))] + ) + input_map = [] + for i in range(len(input2)): + if input2[i] == None: + continue + input2_shape = symbol_table.get((str(input2[i]), 0)).type.shape + if have_none: + input_map.append( + ir.AffineMapAttr.get( + generic_map.get_submap([j for j in range(i, i + 1)]) + ) + ) + if len(input_shape) > len(output_shape): + input_map.append( + ir.AffineMapAttr.get( + generic_map.get_submap( + [ + j + for j in range( + len(input_shape) - len(output_shape), + len(input_shape), + ) + ] + ) + ) + ) + else: + input_map.append( + ir.AffineMapAttr.get( + generic_map.get_submap( + [j for j in range(len(output_shape))] + ) + ) + ) + if have_none: + operands = [] + for i in input2: + if i == None: + continue + input2_ = symbol_table.get((str(i), 0)) + input2_shape = input2_.type.shape + if i != None and len(input2_shape) > 1: + total_size = 1 + for x in input2_shape: + total_size *= x + reshape_op = tosa.ReshapeOp( + input2_, memoryview(array.array("i", [total_size])) + ) + operands.append(reshape_op.result) + + else: + operands = [symbol_table.get((str(i), 0)) for i in input2] + op = linalg.GenericOp( + [tensor_type], + operands, + [output], + ir.ArrayAttr.get(input_map), + ir.ArrayAttr.get( + [ir.Attribute.parse("#linalg.iterator_type")] + * max(len(output_shape), len(input_shape)) + ), + ) + arguments = [ + ir.RankedTensorType(i.type).element_type for i in operands + ] + [ir.RankedTensorType(output.result.type).element_type] + block = ir.Block.create_at_start(op.region, arguments) + index = [] + None_count = 0 + for i in range(len(input2)): + if input2[i] == None: + None_count += 1 + index_op = linalg.IndexOp(ir._i64Attr(i, None)) + block.append(index_op) + index.append(index_op.result) + else: + indexcast_op = arith.IndexCastOp( + ir.IndexType.get(), block.arguments[i - None_count] + ) + block.append(indexcast_op) + index.append(indexcast_op.result) + value = tensor.ExtractOp(input1, index) + block.append(value) + block.append(linalg.YieldOp([value.result])) + return op + + ops_registry = { "MatmulOp": matmul_op, "ArangeOp": arange_op, @@ -2001,4 +2377,7 @@ def gt_op(node: GtOp, symbol_table): "SplitOp": split_op, "MaxOp": max_op, "GtOp": gt_op, + "GeOp": ge_op, + "GreaterThanOp": greater_than_op, + "UnsafeIndexOp": unsafe_index_op, } diff --git a/frontend/Python/ops/tosa.py b/frontend/Python/ops/tosa.py index 797fdfd6d2..8ba1a834ec 100644 --- a/frontend/Python/ops/tosa.py +++ b/frontend/Python/ops/tosa.py @@ -18,13 +18,13 @@ # # ===--------------------------------------------------------------------------- -import array +import array, copy from typing import Dict, List, Tuple, Union import numpy import sys import mlir.ir as ir -from mlir.dialects import tensor, tosa, arith, linalg +from mlir.dialects import tensor, tosa, arith, linalg, math from ..graph import TensorDType from ..graph import ( @@ -62,6 +62,7 @@ ClampMaxOp, RandIntLowOp, ArgMaxOp, + ScaledDotProductFlashAttentionForCpuOp, ) from .utils import * @@ -273,8 +274,48 @@ def _inner_op(result_type, input1, input2): ir.IntegerAttr.get(ir.IntegerType.get_signless(8), 0), ) - input1 = symbol_table.get((str(node.args[0]), 0), node.args[0]) - input2 = symbol_table.get((str(node.args[1]), 0), node.args[1]) + output_shape = list(node.tensor_meta["shape"]) + dtype = node.tensor_meta["dtype"] + mlir_dtype = mlir_element_type_get(dtype) + + if isinstance(node.args[0], str): + input1 = symbol_table.get((str(node.args[0]), 0), node.args[0]) + else: + data = [node.args[0]] + input1_shape = numpy.array(data).shape + tensor_type = ir.RankedTensorType.get(input1_shape, mlir_dtype) + element = mlir_element_attr_get(dtype, node.args[0]) + attr = ir.DenseElementsAttr.get_splat(tensor_type, element) + input2 = arith.ConstantOp(tensor_type, attr).result + + if isinstance(node.args[1], str): + input2 = symbol_table.get((str(node.args[1]), 0), node.args[1]) + else: + data = [node.args[1]] + input2_shape = numpy.array(data).shape + tensor_type = ir.RankedTensorType.get(input2_shape, mlir_dtype) + element = mlir_element_attr_get(dtype, node.args[1]) + attr = ir.DenseElementsAttr.get_splat(tensor_type, element) + input2 = arith.ConstantOp(tensor_type, attr).result + + input1_dtype = ir.RankedTensorType(input1.type).element_type + input2_dtype = ir.RankedTensorType(input2.type).element_type + if input1_dtype != mlir_dtype: + input1 = tosa.CastOp( + ir.RankedTensorType.get( + ir.RankedTensorType(input1.type).shape, + mlir_dtype, + ), + input1, + ).result + if input2_dtype != mlir_dtype: + input2 = tosa.CastOp( + ir.RankedTensorType.get( + ir.RankedTensorType(input2.type).shape, + mlir_dtype, + ), + input2, + ).result return _gen_arith_binary_op(input1, input2, _inner_op) @@ -522,9 +563,67 @@ def convert_element_type_op(node: ConvertElementTypeOp, symbol_table): } input_tensor = symbol_table.get((str(node.args[0]), 0)) to_cast_type = types_mapping[node.args[1]] - sizes = ir.RankedTensorType(input_tensor.type).shape - output_type = ir.RankedTensorType.get(sizes, to_cast_type) - return tosa.CastOp(output_type, input_tensor) + input_type = ir.RankedTensorType(input_tensor.type).element_type + # When converting float to int, tosa.cast lowers to math.roundeven, but we don't need rounding. + if str(to_cast_type).find("i") != -1 and str(input_type).find("f") != -1: + output_shape = list(node.tensor_meta["shape"]) + tensor_type = ir.RankedTensorType.get(output_shape, to_cast_type) + output = tensor.EmptyOp(output_shape, to_cast_type) + + if str(to_cast_type) == "i1": + false_val = arith.ConstantOp(to_cast_type, 0) + true_val = arith.ConstantOp(to_cast_type, 1) + zero_val = arith.ConstantOp(input_type, 0.0) + + generic_map = ir.AffineMap.get_permutation( + [i for i in range(len(output_shape))] + ) + op = linalg.GenericOp( + [tensor_type], + [input_tensor], + [output], + ir.ArrayAttr.get( + [ + ir.AffineMapAttr.get( + generic_map.get_submap( + [i for i in range(len(output_shape))] + ) + ), + ir.AffineMapAttr.get( + generic_map.get_submap( + [i for i in range(len(output_shape))] + ) + ), + ] + ), + ir.ArrayAttr.get( + [ir.Attribute.parse("#linalg.iterator_type")] + * len(output_shape) + ), + ) + block = ir.Block.create_at_start( + op.region, + [ + input_type, + to_cast_type, + ], + ) + if str(to_cast_type) == "i1": + is_zero = arith.CmpFOp(1, block.arguments[0], zero_val) + result = arith.SelectOp(is_zero, false_val, true_val) + block.append(is_zero) + block.append(result) + block.append(linalg.YieldOp([result.result])) + else: + fptosi_op = arith.FPToSIOp(to_cast_type, block.arguments[0]) + block.append(fptosi_op) + block.append(linalg.YieldOp([fptosi_op.result])) + else: + sizes = ir.RankedTensorType(input_tensor.type).shape + output_type = ir.RankedTensorType.get(sizes, to_cast_type) + op = tosa.CastOp(output_type, input_tensor) + + return op def clone_op(node: CloneOp, symbol_table): @@ -800,6 +899,7 @@ def expand_op(node: ExpandOp, symbol_table) -> ir.Operation: the result. """ to_expand_tensor = symbol_table.get((str(node.args[0]), 0)) + original_size = to_expand_tensor.type.shape new_size = node.args[1] result_element_type = ir.RankedTensorType( to_expand_tensor.type @@ -813,8 +913,14 @@ def expand_op(node: ExpandOp, symbol_table) -> ir.Operation: element = ir.FloatAttr.get(result_element_type, 0.0) else: raise NotImplementedError("Unsupported element type!") + expanded_size = [] + for dim, size in zip(original_size, new_size): + if size == -1: + expanded_size.append(dim) + else: + expanded_size.append(size) new_size_tensor_type = ir.RankedTensorType.get( - new_size, result_element_type + expanded_size, result_element_type ) new_size_attr = ir.DenseElementsAttr.get_splat( new_size_tensor_type, element @@ -1479,6 +1585,196 @@ def argmax_op(node: ArgMaxOp, symbol_table): return op +def scaled_dot_product_flash_attention_for_cpu_op( + node: ScaledDotProductFlashAttentionForCpuOp, symbol_table +): + """ + Perform scaled dot-product attention computation. + Args: + node (ScaledDotProductFlashAttentionForCpuOp): The scaled dot-product attention operation node with metadata. + symbol_table: Mapping of variable names to tensor references. + Returns: + result_reshape_op: Reshaped result tensor of the attention operation. + log_sumexp_op: Log-sum-exp constant operation. + """ + query = symbol_table.get((str(node.args[0]), 0), node.args[0]) + key = symbol_table.get((str(node.args[1]), 0), node.args[1]) + value = symbol_table.get((str(node.args[2]), 0), node.args[2]) + + if len(node.args) == 4: + dropout_p = node.args[3] + assert dropout_p != 0.0 + if len(node.args) == 5: + dropout_p = node.args[3] + is_causal = node.args[4] + assert dropout_p != 0.0 + assert is_causal == True + + attn_mask = node.kwargs.get("attn_mask", None) + scale = node.kwargs.get("scale", None) + + query_shape = query.type.shape + key_shape = key.type.shape + value_shape = value.type.shape + output_shape = list(node.tensor_meta["shape"]) + L, S = query_shape[-2], key_shape[-2] + scale_factor = ( + 1 / numpy.sqrt(query.type.shape[-1]) if scale is None else scale + ) + + # Initialize attention bias + dtype = node.tensor_meta["dtype"][0] + attn_bias_shape = [L, S] + mlir_dtype = mlir_element_type_get(dtype) + attn_bias_type = ir.RankedTensorType.get(attn_bias_shape, mlir_dtype) + zero_constant = arith.ConstantOp(mlir_dtype, 0.0) + attn_bias = tensor.SplatOp(attn_bias_type, zero_constant) + if attn_mask is not None: + attn_mask = symbol_table.get((str(attn_mask), 0), attn_mask) + if attn_mask.type.element_type == ir.IntegerType.get_signless(1): + assert attn_mask.type.element_type == ir.IntegerType.get_signless(1) + tensor_type = ir.RankedTensorType.get( + attn_mask.type.shape, ir.IntegerType.get_signless(1) + ) + true_tensor = arith.ConstantOp( + tensor_type, + ir.DenseElementsAttr.get_splat( + tensor_type, ir.BoolAttr.get(True) + ), + ) + attn_mask = arith.XOrIOp(attn_mask, true_tensor) + minus_inf_tensor = arith.ConstantOp( + attn_mask.type, + ir.DenseElementsAttr.get_splat( + attn_mask.type, ir.FloatAttr.get(f32_type, float("-inf")) + ), + ) + attn_bias = tensor.SelectOp(attn_mask, minus_inf_tensor, attn_bias) + else: + if attn_mask.type.shape != attn_bias.result.type.shape: + attn_mask = tosa.ReshapeOp( + attn_mask, + memoryview(array.array("i", attn_bias.result.type.shape)), + ) + attn_bias = tosa.AddOp(attn_bias.result.type, attn_bias, attn_mask) + + # Transpose key tensor + key_shape = list(key.type.shape) + perm_list = list(range(len(key_shape))) + perm_list[-1], perm_list[-2] = perm_list[-2], perm_list[-1] + perm_const_op = tosa.ConstOp( + ir.DenseElementsAttr.get(memoryview(array.array("i", perm_list))) + ) + perm_shape = [] + perm_shape.append(key_shape[0]) + perm_shape.append(key_shape[1]) + perm_shape.append(key_shape[3]) + perm_shape.append(key_shape[2]) + permute_result_type = ir.RankedTensorType.get(perm_shape, mlir_dtype) + key = tosa.TransposeOp( + permute_result_type, key, perm_const_op.results[0] + ).result + + # Matrix multiplication of query and key + query_reshape_op = tosa.ReshapeOp( + query, + memoryview( + array.array( + "i", + [ + query_shape[0] * query_shape[1], + query_shape[2], + query_shape[3], + ], + ) + ), + ) + key_reshape_op = tosa.ReshapeOp( + key, + memoryview( + array.array( + "i", [key_shape[0] * key_shape[1], key_shape[3], key_shape[2]] + ) + ), + ) + matmul_result_shp = [ + key_shape[0] * key_shape[1], + query_shape[2], + key_shape[2], + ] + matmul_result_type = ir.RankedTensorType.get(matmul_result_shp, mlir_dtype) + matmul_op = tosa.MatMulOp( + matmul_result_type, query_reshape_op.result, key_reshape_op.result + ) + # Multiply result by scale factor + scale_factor_constant = arith.ConstantOp(mlir_dtype, scale_factor) + scale_factor = tensor.SplatOp(matmul_result_type, scale_factor_constant) + mul_op = tosa.MulOp( + matmul_result_type, + matmul_op, + scale_factor, + ir.IntegerAttr.get(ir.IntegerType.get_signless(8), 0), + ) + + # Add attention bias to the result + add_op = tosa.AddOp(matmul_result_type, mul_op.result, attn_bias) + # Apply softmax to the result + softmax_output_shape = list(add_op.result.type.shape) + softmax_dim = len(softmax_output_shape) - 1 + + # Subtract the maximum value along the dimension where softmax is applied to prevent overflow during the exp operation. + max_vals = tosa.ReduceMaxOp(add_op.result, softmax_dim) + sub_op = tosa.SubOp(add_op.result.type, add_op, max_vals) + exp_op = math.ExpOp(sub_op) + reduce_sum_op = tosa.ReduceSumOp(exp_op, softmax_dim) + log_op = tosa.LogOp(reduce_sum_op.result.type, reduce_sum_op) + log_sumexp = tosa.AddOp(max_vals.result.type, max_vals, log_op) + log_weights = tosa.SubOp(add_op.result.type, add_op, log_sumexp) + softmax_result = math.ExpOp(log_weights) + log_sumexp = tosa.ReshapeOp( + log_sumexp, + memoryview( + array.array( + "i", + output_shape[1], + ) + ), + ) + + # This step includes dropout during training. + # Multiply the result by the value tensor. + value_reshape_op = tosa.ReshapeOp( + value, + memoryview( + array.array( + "i", + [key_shape[0] * key_shape[1], value_shape[2], value_shape[3]], + ) + ), + ) + matmul_result_shp = matmul_result_shp = [ + key_shape[0] * key_shape[1], + query_shape[2], + value_shape[3], + ] + matmul_result_type = ir.RankedTensorType.get(matmul_result_shp, mlir_dtype) + matmul_op = tosa.MatMulOp( + matmul_result_type, softmax_result.result, value_reshape_op.result + ) + + result_reshape_op = tosa.ReshapeOp( + matmul_op.result, + memoryview( + array.array( + "i", + [key_shape[0], key_shape[1], query_shape[2], value_shape[3]], + ) + ), + ) + + return result_reshape_op, log_sumexp + + ops_registry = { "AddOp": add_op, "MulOp": mul_op, @@ -1515,4 +1811,5 @@ def argmax_op(node: ArgMaxOp, symbol_table): "ClampMaxOp": clamp_max_op, "RandIntLowOp": randint_low_op, "ArgMaxOp": argmax_op, + "ScaledDotProductFlashAttentionForCpuOp": scaled_dot_product_flash_attention_for_cpu_op, } diff --git a/midend/lib/Conversion/ConvOptimization/ConvNhwcFhwcOptimize.cpp b/midend/lib/Conversion/ConvOptimization/ConvNhwcFhwcOptimize.cpp index e4bc67e361..81f76f66b2 100644 --- a/midend/lib/Conversion/ConvOptimization/ConvNhwcFhwcOptimize.cpp +++ b/midend/lib/Conversion/ConvOptimization/ConvNhwcFhwcOptimize.cpp @@ -105,7 +105,7 @@ class ConvNhwcFhwcOptimizePattern : public ConversionPattern { // clang format off // Step 1: Create outer most loops. // Create the scf::ForallOp operation For N,OH,OW,OC - auto outputForAllOp = rewriter.create( + rewriter.create( loc, SmallVector({N, OH, OW, OC}), ValueRange{}, std::nullopt, // No mapping specified in this example [&](OpBuilder &nestedBuilder, Location nestedLoc, diff --git a/midend/lib/Conversion/DAPVectorization/DAPVectorization.cpp b/midend/lib/Conversion/DAPVectorization/DAPVectorization.cpp index 8c3eb3069e..cdd182b445 100644 --- a/midend/lib/Conversion/DAPVectorization/DAPVectorization.cpp +++ b/midend/lib/Conversion/DAPVectorization/DAPVectorization.cpp @@ -43,6 +43,153 @@ using namespace mlir::linalg; //===----------------------------------------------------------------------===// namespace { + +class DAPFIRVectorization : public OpRewritePattern { +public: + using OpRewritePattern::OpRewritePattern; + + explicit DAPFIRVectorization(MLIRContext *context) + : OpRewritePattern(context) {} + + LogicalResult matchAndRewrite(dap::FirOp op, + PatternRewriter &rewriter) const override { + auto loc = op->getLoc(); + auto ctx = op->getContext(); + + Value input = op->getOperand(0); + Value kernel = op->getOperand(1); + Value output = op->getOperand(2); + + Value c0 = rewriter.create(loc, 0); + Value c1 = rewriter.create(loc, 1); + Value c2 = rewriter.create(loc, 2); + + // 1. Get the total length of the workload. + Value inputSize = rewriter.create(loc, input, c0); + Value kernelSize = rewriter.create(loc, kernel, c0); + + // 2. Set the iteration step (tile size and vector size). + Value tileStep = rewriter.create(loc, 2048); + Value vlStep = rewriter.create(loc, 16); + Value vlStepMinusOne = rewriter.create(loc, vlStep, c1); + FloatType f32 = FloatType::getF32(ctx); + VectorType vecTy = VectorType::get(16, f32); + + // 3. Calculate full vectorization part. + + // 3.1 Calculate upbound for outer loop(tile input). + // `lastKernelElementUsedInputSize` = `inputSize` - `kernelSize` + 1 + // `inputUpbound` = `lastKernelElementUsedInputSize` - `tileStep` + 1 + Value lastKernelElementUsedInputSize_ = + rewriter.create(loc, inputSize, kernelSize); + Value inputUpbound_ = rewriter.create( + loc, lastKernelElementUsedInputSize_, tileStep); + Value inputUpbound = rewriter.create(loc, inputUpbound_, c2); + + Value inputOffset = + rewriter + .create( + loc, c0, inputUpbound, tileStep, ValueRange{c0}, + [&](OpBuilder &builder, Location loc, Value address, + ValueRange iargs) { + Value upbound = + builder.create(loc, address, tileStep); + // 3.2 Broadcast each kernel element to a vector. + builder.create( + loc, c0, kernelSize, c1, ValueRange{std::nullopt}, + [&](OpBuilder &b, Location loc, Value iv_n, + ValueRange iargs) { + Value kElem = + b.create(loc, kernel, iv_n); + Value kVec = + b.create(loc, vecTy, kElem); + // 3.3 Vectorized computation. + b.create( + loc, address, upbound, vlStep, + ValueRange{std::nullopt}, + [&](OpBuilder &b, Location loc, Value iv_i, + ValueRange iargs) { + Value inVec = b.create( + loc, vecTy, input, ValueRange{iv_i}); + Value outOffset = + b.create(loc, iv_i, iv_n); + Value outVec = b.create( + loc, vecTy, output, ValueRange{outOffset}); + Value fmaVec = b.create( + loc, kVec, inVec, outVec); + b.create(loc, fmaVec, output, + ValueRange{outOffset}); + b.create(loc); + }); + + b.create(loc); + }); + builder.create(loc, ValueRange{upbound}); + }) + .getResult(0); + + // 4. Calculate tail processing part. + // 4.1 Calculate upbound for tail processing + Value tailUpbound_ = rewriter.create(loc, inputSize, vlStep); + Value tailUpboundInit = + rewriter.create(loc, tailUpbound_, c1); + + // 4.2 Loop through each kernel element. + rewriter.create( + loc, c0, kernelSize, c1, ValueRange{tailUpboundInit}, + [&](OpBuilder &builder, Location loc, Value iv_n, ValueRange iargs) { + Value kElem = builder.create(loc, kernel, iv_n); + Value kVec = builder.create(loc, vecTy, kElem); + + // 4.3 Perform the vectorization body (for tail process). + Value iterIdx = + builder + .create( + loc, inputOffset, iargs[0], vlStep, + ValueRange{inputOffset}, + [&](OpBuilder &b, Location loc, Value iv_i, + ValueRange iargs) { + Value inVec = b.create( + loc, vecTy, input, ValueRange{iv_i}); + Value outOffset = + b.create(loc, iv_i, iv_n); + Value outVec = b.create( + loc, vecTy, output, ValueRange{outOffset}); + Value fmaVec = + b.create(loc, kVec, inVec, outVec); + b.create(loc, fmaVec, output, + ValueRange{outOffset}); + Value iNext = + b.create(loc, iv_i, vlStep); + b.create(loc, ValueRange{iNext}); + }) + .getResult(0); + + // 4.4 Process the remainder of tail process with scalar operations. + Value tailUpboundScalar = + builder.create(loc, iargs[0], vlStepMinusOne); + builder.create( + loc, iterIdx, tailUpboundScalar, c1, ValueRange{std::nullopt}, + [&](OpBuilder &b, Location loc, Value iv_i, ValueRange iargs) { + Value inElem = b.create(loc, input, iv_i); + Value outOffset = b.create(loc, iv_i, iv_n); + Value outElem = + b.create(loc, output, outOffset); + Value mulElem = b.create(loc, inElem, kElem); + Value addElem = b.create(loc, mulElem, outElem); + b.create(loc, addElem, output, outOffset); + b.create(loc); + }); + Value tailUpboundNext = + builder.create(loc, iargs[0], c1); + builder.create(loc, ValueRange{tailUpboundNext}); + }); + + rewriter.eraseOp(op); + return success(); + } +}; + class DAPIirVectorization : public OpRewritePattern { public: using OpRewritePattern::OpRewritePattern; @@ -162,6 +309,7 @@ class DAPIirVectorization : public OpRewritePattern { } // end anonymous namespace void populateVectorizeDAPConversionPatterns(RewritePatternSet &patterns) { + patterns.add(patterns.getContext()); patterns.add(patterns.getContext()); } diff --git a/midend/lib/Conversion/DepthwiseConvOptimization/DepthwiseConvNhwcHwc.cpp b/midend/lib/Conversion/DepthwiseConvOptimization/DepthwiseConvNhwcHwc.cpp index 04bf76f769..dea3046cab 100644 --- a/midend/lib/Conversion/DepthwiseConvOptimization/DepthwiseConvNhwcHwc.cpp +++ b/midend/lib/Conversion/DepthwiseConvOptimization/DepthwiseConvNhwcHwc.cpp @@ -59,7 +59,8 @@ class DepthwiseConv2DNhwcHwcOptimizePattern : public ConversionPattern { rewriter.create(loc, rewriter.getIndexAttr(vecSize)); const AffineExpr d0 = rewriter.getAffineDimExpr(0); const AffineExpr d1 = rewriter.getAffineDimExpr(1); - const AffineExpr s0 = rewriter.getAffineSymbolExpr(0); + // TODO: remove s0? + // const AffineExpr s0 = rewriter.getAffineSymbolExpr(0); Value input = op->getOperand(0); Value filter = op->getOperand(1); @@ -122,7 +123,7 @@ class DepthwiseConv2DNhwcHwcOptimizePattern : public ConversionPattern { // clang format off // Step 1: Create outer most loops. // Create the scf::ForallOp operation For N,OH,OW - auto outputForAllOp = rewriter.create( + rewriter.create( loc, SmallVector({N, OH, OW}), ValueRange{}, std::nullopt, // No mapping specified in this example [&](OpBuilder &nestedBuilder, Location nestedLoc, diff --git a/midend/lib/Conversion/ExtendDAP/ExtendDAPPass.cpp b/midend/lib/Conversion/ExtendDAP/ExtendDAPPass.cpp index 32fc42fcf7..9e67b0446a 100644 --- a/midend/lib/Conversion/ExtendDAP/ExtendDAPPass.cpp +++ b/midend/lib/Conversion/ExtendDAP/ExtendDAPPass.cpp @@ -929,13 +929,15 @@ void radfgExtend(OpBuilder &opBuilder, Location loc, Value cc, Value ch, Value c1 = opBuilder.create(loc, 1); Value c2 = opBuilder.create(loc, 2); Value c3 = opBuilder.create(loc, 3); - Value c4 = opBuilder.create(loc, 4); + // TODO: remove c4? + // Value c4 = opBuilder.create(loc, 4); Value cdim = opBuilder.create(loc, ip, c0); Value tmp0 = opBuilder.create(loc, ip, c1); Value ipph = opBuilder.create(loc, tmp0, c2); Value idom1 = opBuilder.create(loc, ido, c1); - Value idom2 = opBuilder.create(loc, ido, c2); + // TODO: remove the following values? + // Value idom2 = opBuilder.create(loc, ido, c2); Value idl1 = opBuilder.create(loc, ido, l1); opBuilder.create( @@ -1095,13 +1097,15 @@ void radfg(OpBuilder &opBuilder, Location loc, Value cc, Value ch, Value wa, Value ipm1 = opBuilder.create(loc, ip, c1); Value ipm2 = opBuilder.create(loc, ip, c2); - Value cdim = opBuilder.create(loc, ip, c0); + // TODO: remove the following values? + // Value cdim = opBuilder.create(loc, ip, c0); Value tmp = opBuilder.create(loc, ip, c1); Value ipph = opBuilder.create(loc, tmp, c2); Value idl1 = opBuilder.create(loc, ido, l1); Value idom1 = opBuilder.create(loc, ido, c1); - Value idom2 = opBuilder.create(loc, ido, c2); + // TODO: remove idom2? + // Value idom2 = opBuilder.create(loc, ido, c2); Value condition = opBuilder.create(loc, arith::CmpIPredicate::sgt, ido, l1); @@ -1317,9 +1321,10 @@ void radfg(OpBuilder &opBuilder, Location loc, Value cc, Value ch, Value wa, Value jp1 = b2.create(loc, j, c1); Value jp2 = b2.create(loc, j, c2); Value jp3 = b2.create(loc, j, c3); - Value jm1 = b2.create(loc, j, c1); - Value jm2 = b2.create(loc, j, c2); - Value jm3 = b2.create(loc, j, c3); + // TODO: remove the following values? + // Value jm1 = b2.create(loc, j, c1); + // Value jm2 = b2.create(loc, j, c2); + // Value jm3 = b2.create(loc, j, c3); Value c2ikj = C2(b2, loc, cc, ik_c, j, idl1); Value c2ikjp1 = C2(b2, loc, cc, ik_c, jp1, idl1); @@ -1405,7 +1410,8 @@ void radfg(OpBuilder &opBuilder, Location loc, Value cc, Value ch, Value wa, [&](OpBuilder &b2, Location loc, Value ik_d, ValueRange ik_d_args) { Value jp1 = b2.create(loc, j, c1); - Value jm1 = b2.create(loc, j, c1); + // TODO: remove jm1? + // Value jm1 = b2.create(loc, j, c1); Value c2ikj = C2(b2, loc, cc, ik_d, j, idl1); Value c2ikjp1 = C2(b2, loc, cc, ik_d, jp1, idl1); @@ -1447,7 +1453,7 @@ void radfg(OpBuilder &opBuilder, Location loc, Value cc, Value ch, Value wa, Value jc_2_c = loop2.getResults()[1]; Value iang2_c = loop2.getResults()[2]; - auto loop3 = builder.create( + builder.create( loc, j_2_c, ipph, c1, ValueRange{j_2_c, jc_2_c, iang2_c}, [&](OpBuilder &b, Location loc, Value j_loop, ValueRange j_loop_args) { @@ -1494,16 +1500,18 @@ void radfg(OpBuilder &opBuilder, Location loc, Value cc, Value ch, Value wa, void radf2Extend(OpBuilder &opBuilder, Location loc, Value cc, Value ch, Value wa, Value ido, Value l1, Value cdim) { - FloatType f64Ty = opBuilder.getF64Type(); + // TODO: remove f64Ty? + // FloatType f64Ty = opBuilder.getF64Type(); Value c0 = opBuilder.create(loc, 0); Value c1 = opBuilder.create(loc, 1); Value c2 = opBuilder.create(loc, 2); - Value c3 = opBuilder.create(loc, 3); - Value c4 = opBuilder.create(loc, 4); - Value c20 = opBuilder.create(loc, 20); + // TODO: remove the following values? + // Value c3 = opBuilder.create(loc, 3); + // Value c4 = opBuilder.create(loc, 4); + // Value c20 = opBuilder.create(loc, 20); - Value idom1 = opBuilder.create(loc, ido, c1); + // Value idom1 = opBuilder.create(loc, ido, c1); opBuilder.create( loc, c0, l1, c1, std::nullopt, @@ -1542,16 +1550,17 @@ void radf2Extend(OpBuilder &opBuilder, Location loc, Value cc, Value ch, // Handle radix-2 FFT computation void radf2(OpBuilder &opBuilder, Location loc, Value cc, Value ch, Value wa, Value ido, Value l1) { - - FloatType f64Ty = opBuilder.getF64Type(); + // TODO: remove the f64Ty? + // FloatType f64Ty = opBuilder.getF64Type(); Value cdim = opBuilder.create(loc, 2); Value c0 = opBuilder.create(loc, 0); Value c1 = opBuilder.create(loc, 1); Value c2 = opBuilder.create(loc, 2); - Value c3 = opBuilder.create(loc, 3); - Value c4 = opBuilder.create(loc, 4); - Value c20 = opBuilder.create(loc, 20); + // TODO: remove the following values? + // Value c3 = opBuilder.create(loc, 3); + // Value c4 = opBuilder.create(loc, 4); + // Value c20 = opBuilder.create(loc, 20); Value idom1 = opBuilder.create(loc, ido, c1); @@ -1606,8 +1615,9 @@ void radf3Extend(OpBuilder &opBuilder, Location loc, Value cc, Value ch, Value c0 = opBuilder.create(loc, 0); Value c1 = opBuilder.create(loc, 1); Value c2 = opBuilder.create(loc, 2); - Value c3 = opBuilder.create(loc, 3); - Value c4 = opBuilder.create(loc, 4); + // TODO: remove c3 and c4? + // Value c3 = opBuilder.create(loc, 3); + // Value c4 = opBuilder.create(loc, 4); opBuilder.create( loc, c0, l1, c1, std::nullopt, @@ -1687,8 +1697,9 @@ void radf3(OpBuilder &opBuilder, Location loc, Value cc, Value ch, Value wa, Value c0 = opBuilder.create(loc, 0); Value c1 = opBuilder.create(loc, 1); Value c2 = opBuilder.create(loc, 2); - Value c3 = opBuilder.create(loc, 3); - Value c4 = opBuilder.create(loc, 4); + // TODO: remove c3 and c4? + // Value c3 = opBuilder.create(loc, 3); + // Value c4 = opBuilder.create(loc, 4); Value idom1 = opBuilder.create(loc, ido, c1); @@ -2072,10 +2083,11 @@ Value rfftp_factorize(OpBuilder &opBuilder, Location loc, Value c2 = opBuilder.create(loc, 2); Value c3 = opBuilder.create(loc, 3); Value c4 = opBuilder.create(loc, 4); - Value c_neg1 = opBuilder.create(loc, -1); - Value NFCT = opBuilder.create(loc, 25); + // TODO: remove the following values? + // Value c_neg1 = opBuilder.create(loc, -1); + // Value NFCT = opBuilder.create(loc, 25); - FloatType f64Ty = opBuilder.getF64Type(); + // FloatType f64Ty = opBuilder.getF64Type(); IndexType indexTy = opBuilder.getIndexType(); Value length = @@ -2088,7 +2100,7 @@ Value rfftp_factorize(OpBuilder &opBuilder, Location loc, opBuilder.create(loc, c0, nfct, c0); - auto loop = opBuilder.create( + opBuilder.create( loc, TypeRange{indexTy}, ValueRange{length_1}, [&](OpBuilder &builder, Location loc, ValueRange args) { Value length_while = args[0]; @@ -2136,8 +2148,9 @@ Value rfftp_factorize(OpBuilder &opBuilder, Location loc, builder.create(loc, std::nullopt); }); - TypeRange type1 = TypeRange{f64Ty}; - TypeRange type2 = TypeRange{indexTy}; + // TODO: remove type1 and type2? + // TypeRange type1 = TypeRange{f64Ty}; + // TypeRange type2 = TypeRange{indexTy}; Value maxl = opBuilder.create(loc, MemRefType::get(1, indexTy)); @@ -2253,7 +2266,8 @@ Value rfftp_factorize(OpBuilder &opBuilder, Location loc, } Value index_to_f64(OpBuilder &opBuilder, Location loc, Value n) { - TypeRange type = TypeRange{opBuilder.getF64Type()}; + // TODO: remove the following values? + // TypeRange type = TypeRange{opBuilder.getF64Type()}; Value n_i32 = opBuilder.create(loc, opBuilder.getI32Type(), n); Value n_f64 = @@ -2262,7 +2276,8 @@ Value index_to_f64(OpBuilder &opBuilder, Location loc, Value n) { } Value f64_to_index(OpBuilder &opBuilder, Location loc, Value n_f64) { - TypeRange type = TypeRange{opBuilder.getI32Type()}; + // TODO: remove type? + // TypeRange type = TypeRange{opBuilder.getI32Type()}; Value n_i32 = opBuilder.create(loc, opBuilder.getI32Type(), n_f64); Value n_index = opBuilder.create( @@ -2355,8 +2370,9 @@ void calc_first_octant_extend2(OpBuilder &opBuilder, Location loc, Value den, Value c2 = opBuilder.create(loc, 2); Value c3 = opBuilder.create(loc, 3); Value c4 = opBuilder.create(loc, 4); - Value c5 = opBuilder.create(loc, 5); - Value c50 = opBuilder.create(loc, 50); + // TODO: remove c5 and c50? + // Value c5 = opBuilder.create(loc, 5); + // Value c50 = opBuilder.create(loc, 50); Value den_plus_4 = opBuilder.create(loc, den, c4); Value n = opBuilder.create(loc, den_plus_4, c3); @@ -2382,8 +2398,9 @@ void calc_first_octant_extend2(OpBuilder &opBuilder, Location loc, Value den, opBuilder.create(loc, APFloat(double(2.0)), f64Ty); Value f1 = opBuilder.create(loc, APFloat(double(1.0)), f64Ty); - Value f0 = - opBuilder.create(loc, APFloat(double(0.0)), f64Ty); + // TODO: remove f0? + // Value f0 = + // opBuilder.create(loc, APFloat(double(0.0)), f64Ty); Value n_f64 = index_to_f64(opBuilder, loc, n); Value l1_f64 = opBuilder.create(loc, n_f64); @@ -2490,10 +2507,11 @@ void calc_first_octant_extend1(OpBuilder &opBuilder, Location loc, Value den, Value res, Value bias) { Value c0 = opBuilder.create(loc, 0); Value c1 = opBuilder.create(loc, 1); - Value c2 = opBuilder.create(loc, 2); + // TODO: remove c2 and c5? + // Value c2 = opBuilder.create(loc, 2); Value c3 = opBuilder.create(loc, 3); Value c4 = opBuilder.create(loc, 4); - Value c5 = opBuilder.create(loc, 5); + // Value c5 = opBuilder.create(loc, 5); Value den_plus_4 = opBuilder.create(loc, den, c4); Value n = opBuilder.create(loc, den_plus_4, c3); @@ -2536,11 +2554,12 @@ void calc_first_octant_extend1(OpBuilder &opBuilder, Location loc, Value den, void calc_first_octant(OpBuilder &opBuilder, Location loc, Value den, Value res, Value bias) { Value c0 = opBuilder.create(loc, 0); - Value c1 = opBuilder.create(loc, 1); - Value c2 = opBuilder.create(loc, 2); + // TODO: remove c1, c2, and c5? + // Value c1 = opBuilder.create(loc, 1); + // Value c2 = opBuilder.create(loc, 2); Value c3 = opBuilder.create(loc, 3); Value c4 = opBuilder.create(loc, 4); - Value c5 = opBuilder.create(loc, 5); + // Value c5 = opBuilder.create(loc, 5); Value den_plus_4 = opBuilder.create(loc, den, c4); Value n = opBuilder.create(loc, den_plus_4, c3); @@ -2561,8 +2580,9 @@ void calc_first_quadrant(OpBuilder &opBuilder, Location loc, Value n, Value c1 = opBuilder.create(loc, 1); Value c2 = opBuilder.create(loc, 2); Value c3 = opBuilder.create(loc, 3); - Value c4 = opBuilder.create(loc, 4); - Value c5 = opBuilder.create(loc, 5); + // TODO: remove c4 and c5? + // Value c4 = opBuilder.create(loc, 4); + // Value c5 = opBuilder.create(loc, 5); Value size = opBuilder.create(loc, res, c0); Value remaining_size = opBuilder.create(loc, size, n); @@ -2628,7 +2648,8 @@ void calc_first_quadrant(OpBuilder &opBuilder, Location loc, Value n, Value i_v = loop.getResults()[0]; Value idx1_v = loop.getResults()[1]; - Value idx2_v = loop.getResults()[2]; + // TODO: remove idx2_v? + // Value idx2_v = loop.getResults()[2]; Value condition = opBuilder.create( loc, arith::CmpIPredicate::ne, i_v, ndone); @@ -2655,15 +2676,17 @@ void calc_first_half(OpBuilder &opBuilder, Location loc, Value n, Value res) { Value c2 = opBuilder.create(loc, 2); Value c3 = opBuilder.create(loc, 3); Value c4 = opBuilder.create(loc, 4); - Value c5 = opBuilder.create(loc, 5); + // TODO: remove c5? + // Value c5 = opBuilder.create(loc, 5); IndexType indexTy = opBuilder.getIndexType(); FloatType f64Ty = opBuilder.getF64Type(); Value f0 = opBuilder.create(loc, APFloat(double(0.0)), f64Ty); - Value f1 = - opBuilder.create(loc, APFloat(double(1.0)), f64Ty); + // TODO: remove f1? + // Value f1 = + // opBuilder.create(loc, APFloat(double(1.0)), f64Ty); Value n_plus_1 = opBuilder.create(loc, n, c1); Value ndone = opBuilder.create(loc, n_plus_1, c1); @@ -2802,7 +2825,7 @@ void calc_first_half(OpBuilder &opBuilder, Location loc, Value n, Value res) { Value final_i4_2 = loop2.getResults()[0]; Value final_i_2 = loop2.getResults()[1]; - auto loop3 = opBuilder.create( + opBuilder.create( loc, TypeRange{indexTy, indexTy}, ValueRange{final_i4_2, final_i_2}, [&](OpBuilder &builder, Location loc, ValueRange args) { Value i4 = args[0]; @@ -2847,9 +2870,10 @@ void fill_first_quadrant(OpBuilder &opBuilder, Location loc, Value n, Value c0 = opBuilder.create(loc, 0); Value c1 = opBuilder.create(loc, 1); Value c2 = opBuilder.create(loc, 2); - Value c3 = opBuilder.create(loc, 3); - Value c4 = opBuilder.create(loc, 4); - Value c5 = opBuilder.create(loc, 5); + // TODO: remove c3, c4, and c5? + // Value c3 = opBuilder.create(loc, 3); + // Value c4 = opBuilder.create(loc, 4); + // Value c5 = opBuilder.create(loc, 5); Value c8 = opBuilder.create(loc, 8); FloatType f64Ty = opBuilder.getF64Type(); @@ -2899,9 +2923,10 @@ void fill_first_half(OpBuilder &opBuilder, Location loc, Value n, Value res) { Value c0 = opBuilder.create(loc, 0); Value c1 = opBuilder.create(loc, 1); Value c2 = opBuilder.create(loc, 2); - Value c3 = opBuilder.create(loc, 3); + // TODO: remove c3 and c5? + // Value c3 = opBuilder.create(loc, 3); Value c4 = opBuilder.create(loc, 4); - Value c5 = opBuilder.create(loc, 5); + // Value c5 = opBuilder.create(loc, 5); FloatType f64Ty = opBuilder.getF64Type(); Value c_1 = @@ -2966,12 +2991,13 @@ void fill_first_half(OpBuilder &opBuilder, Location loc, Value n, Value res) { void sincos_2pibyn_half(OpBuilder &opBuilder, Location loc, Value n, Value res) { Value c0 = opBuilder.create(loc, 0); - Value c1 = opBuilder.create(loc, 1); - Value c2 = opBuilder.create(loc, 2); - Value c3 = opBuilder.create(loc, 3); + // TODO: remove the following values? + // Value c1 = opBuilder.create(loc, 1); + // Value c2 = opBuilder.create(loc, 2); + // Value c3 = opBuilder.create(loc, 3); Value c4 = opBuilder.create(loc, 4); - Value c5 = opBuilder.create(loc, 5); - Value c50 = opBuilder.create(loc, 50); + // Value c5 = opBuilder.create(loc, 5); + // Value c50 = opBuilder.create(loc, 50); Value n_mod_4 = opBuilder.create(loc, n, c4); @@ -2988,9 +3014,12 @@ void sincos_2pibyn_half(OpBuilder &opBuilder, Location loc, Value n, builder.create(loc, std::nullopt); }, [&](OpBuilder &builder, Location loc) { - Value n_mod_2 = builder.create(loc, n, c2); - Value condition1 = builder.create( - loc, arith::CmpIPredicate::eq, n_mod_2, c0); + // TODO: remove the following values? + // Value n_mod_2 = builder.create(loc, n, c2); + + // TODO: remove condition1? + // Value condition1 = builder.create( + // loc, arith::CmpIPredicate::eq, n_mod_2, c0); opBuilder.create( loc, condition, @@ -3013,12 +3042,13 @@ Value rfftp_comp_twiddle(OpBuilder &opBuilder, Location loc, Value length, Value Rfftp_fctdata_tws, Value Rfftp_plan_length, Value Rfftp_plan_nfct, Value Rfftp_plan_mem) { Value c0 = opBuilder.create(loc, 0); + // TODO: remove the following values? Value c1 = opBuilder.create(loc, 1); Value c2 = opBuilder.create(loc, 2); - Value c3 = opBuilder.create(loc, 3); - Value c4 = opBuilder.create(loc, 4); + // Value c3 = opBuilder.create(loc, 3); + // Value c4 = opBuilder.create(loc, 4); Value c5 = opBuilder.create(loc, 5); - Value c50 = opBuilder.create(loc, 50); + // Value c50 = opBuilder.create(loc, 50); Value length_2 = opBuilder.create(loc, length, c2); FloatType f64Ty = opBuilder.getF64Type(); @@ -3167,9 +3197,10 @@ std::vector make_rfftp_plan(OpBuilder &opBuilder, Location loc, Value c0 = opBuilder.create(loc, 0); Value c1 = opBuilder.create(loc, 1); Value c2 = opBuilder.create(loc, 2); - Value c3 = opBuilder.create(loc, 3); - Value c4 = opBuilder.create(loc, 4); - Value c5 = opBuilder.create(loc, 5); + // TODO: remove the following values? + // Value c3 = opBuilder.create(loc, 3); + // Value c4 = opBuilder.create(loc, 4); + // Value c5 = opBuilder.create(loc, 5); int64_t NFCT_num = 25; Value NFCT = opBuilder.create(loc, NFCT_num); @@ -3216,7 +3247,8 @@ std::vector make_rfftp_plan(OpBuilder &opBuilder, Location loc, opBuilder.create( loc, condition, [&](OpBuilder &builder, Location loc) { - Value xxx = builder.create(loc, 1); + // TODO: remove xxx? + // Value xxx = builder.create(loc, 1); rfftp_factorize(builder, loc, Rfftp_fctdata_fct, Rfftp_fctdata_tw, Rfftp_fctdata_tws, Rfftp_plan_length, Rfftp_plan_nfct, Rfftp_plan_mem); @@ -3233,10 +3265,11 @@ std::vector make_rfftp_plan(OpBuilder &opBuilder, Location loc, void memref_SWAP(OpBuilder &opBuilder, Location loc, Value p, Value p1) { Value c0 = opBuilder.create(loc, 0); Value c1 = opBuilder.create(loc, 1); - Value c2 = opBuilder.create(loc, 2); - Value c3 = opBuilder.create(loc, 3); - Value c4 = opBuilder.create(loc, 4); - Value c5 = opBuilder.create(loc, 5); + // TODO: remove the following values? + // Value c2 = opBuilder.create(loc, 2); + // Value c3 = opBuilder.create(loc, 3); + // Value c4 = opBuilder.create(loc, 4); + // Value c5 = opBuilder.create(loc, 5); Value length = opBuilder.create(loc, p, c0); @@ -3269,8 +3302,9 @@ void copy_and_norm(OpBuilder &opBuilder, Location loc, Value c, Value p1, Value n, Value fct, Value flag) { Value c0 = opBuilder.create(loc, 0); Value c1 = opBuilder.create(loc, 1); - Value c2 = opBuilder.create(loc, 2); - Value c3 = opBuilder.create(loc, 3); + // TODO: remove the following values? + // Value c2 = opBuilder.create(loc, 2); + // Value c3 = opBuilder.create(loc, 3); FloatType f64Ty = opBuilder.getF64Type(); Value f1 = opBuilder.create(loc, APFloat(double(1.0)), f64Ty); @@ -3340,7 +3374,8 @@ void rfftp_forward(OpBuilder &opBuilder, Location loc, Value Rfftp_fctdata_fct, Value c3 = opBuilder.create(loc, 3); Value c4 = opBuilder.create(loc, 4); Value c5 = opBuilder.create(loc, 5); - Value c20 = opBuilder.create(loc, 20); + // TODO: remove the following values? + // Value c20 = opBuilder.create(loc, 20); FloatType f64Ty = opBuilder.getF64Type(); Value n = opBuilder.create(loc, Rfftp_plan_length, c0); @@ -3643,19 +3678,21 @@ class DAPRFFTLowering : public OpRewritePattern { LogicalResult matchAndRewrite(dap::RFFTOp op, PatternRewriter &rewriter) const override { auto loc = op->getLoc(); - auto ctx = op->getContext(); + // TODO: remove the following values? + // auto ctx = op->getContext(); Value bufferMem = op->getOperand(0); Value c0 = rewriter.create(loc, 0); - Value c1 = rewriter.create(loc, 1); - Value c2 = rewriter.create(loc, 2); - Value c3 = rewriter.create(loc, 3); - Value c4 = rewriter.create(loc, 4); - Value c5 = rewriter.create(loc, 5); - Value c9 = rewriter.create(loc, 9); - Value c24 = rewriter.create(loc, 24); - Value c25 = rewriter.create(loc, 25); - Value c50 = rewriter.create(loc, 50); + // TODO: remove the following values? + // Value c1 = rewriter.create(loc, 1); + // Value c2 = rewriter.create(loc, 2); + // Value c3 = rewriter.create(loc, 3); + // Value c4 = rewriter.create(loc, 4); + // Value c5 = rewriter.create(loc, 5); + // Value c9 = rewriter.create(loc, 9); + // Value c24 = rewriter.create(loc, 24); + // Value c25 = rewriter.create(loc, 25); + // Value c50 = rewriter.create(loc, 50); Value inputFeatures = rewriter.create( loc, bufferMem, /*restrict=*/true, /*writable=*/true); @@ -3664,8 +3701,9 @@ class DAPRFFTLowering : public OpRewritePattern { FloatType f64Ty = rewriter.getF64Type(); - Value f0 = - rewriter.create(loc, APFloat(double(0.0)), f64Ty); + // TODO: remove the following values? + // Value f0 = + // rewriter.create(loc, APFloat(double(0.0)), f64Ty); Value f1 = rewriter.create(loc, APFloat(double(1.0)), f64Ty); diff --git a/midend/lib/Conversion/LowerDAP/LowerDAPPass.cpp b/midend/lib/Conversion/LowerDAP/LowerDAPPass.cpp index bf77f358bb..7a028b2a1f 100644 --- a/midend/lib/Conversion/LowerDAP/LowerDAPPass.cpp +++ b/midend/lib/Conversion/LowerDAP/LowerDAPPass.cpp @@ -51,13 +51,67 @@ class DAPFirLowering : public OpRewritePattern { LogicalResult matchAndRewrite(dap::FirOp op, PatternRewriter &rewriter) const override { auto loc = op->getLoc(); - // auto ctx = op->getContext(); + auto ctx = op->getContext(); Value input = op->getOperand(0); Value kernel = op->getOperand(1); Value output = op->getOperand(2); - rewriter.create(loc, ValueRange{input, kernel}, - ValueRange{output}); + Value c0 = rewriter.create(loc, 0); + Value c1 = rewriter.create(loc, 1); + FloatType f32 = FloatType::getF32(ctx); + Value f0 = + rewriter.create(loc, APFloat(float(0.0)), f32); + + Value kernelSize = rewriter.create(loc, kernel, c0); + Value dataLen = rewriter.create(loc, output, c0); + + // Populate the FIR pipeline by padding the `input` with [`kernelSize`-1] + // zeros at the beginning. Compute only the padding section of the input + // data. + Value fillInLen = rewriter.create(loc, kernelSize, c1); + rewriter.create( + loc, c0, fillInLen, c1, ValueRange{std::nullopt}, + [&](OpBuilder &b, Location loc, Value iv_n, ValueRange iargs) { + Value upperBound = b.create(loc, iv_n, c1); + Value outFinal = + b.create( + loc, c0, upperBound, c1, ValueRange{f0}, + [&](OpBuilder &b, Location loc, Value iv_k, + ValueRange iargs) { + Value i = b.create(loc, iv_n, iv_k); + Value in = b.create(loc, input, i); + Value k = b.create(loc, kernel, iv_k); + Value mul = b.create(loc, in, k); + Value outNext = + b.create(loc, iargs[0], mul); + b.create(loc, outNext); + }) + .getResult(0); + b.create(loc, outFinal, output, ValueRange{iv_n}); + b.create(loc, std::nullopt); + }); + + // Compute the input data following the padding section. + rewriter.create( + loc, fillInLen, dataLen, c1, ValueRange{std::nullopt}, + [&](OpBuilder &b, Location loc, Value iv_n, ValueRange iargs) { + Value outFinal = + b.create( + loc, c0, kernelSize, c1, ValueRange{f0}, + [&](OpBuilder &b, Location loc, Value iv_k, + ValueRange iargs) { + Value i = b.create(loc, iv_n, iv_k); + Value in = b.create(loc, input, i); + Value k = b.create(loc, kernel, iv_k); + Value mul = b.create(loc, in, k); + Value outNext = + b.create(loc, iargs[0], mul); + b.create(loc, outNext); + }) + .getResult(0); + b.create(loc, outFinal, output, ValueRange{iv_n}); + b.create(loc, std::nullopt); + }); rewriter.eraseOp(op); return success(); diff --git a/midend/lib/Conversion/LowerDIP/LowerDIPPass.cpp b/midend/lib/Conversion/LowerDIP/LowerDIPPass.cpp index 6118ecc1c3..ebbf3ffa48 100644 --- a/midend/lib/Conversion/LowerDIP/LowerDIPPass.cpp +++ b/midend/lib/Conversion/LowerDIP/LowerDIPPass.cpp @@ -409,7 +409,8 @@ class DIPResize4D_NHWCOpLowering // Value inputBatch = rewriter.create(loc, input, c0); Value inputRow = rewriter.create(loc, input, c1); Value inputCol = rewriter.create(loc, input, c2); - Value inputColor = rewriter.create(loc, input, c3); + // TODO: remove inputColor? + // Value inputColor = rewriter.create(loc, input, c3); Value outputBatch = rewriter.create(loc, output, c0); Value outputRow = rewriter.create(loc, output, c1); @@ -547,7 +548,8 @@ class DIPResize4D_NCHWOpLowering Value c0F32 = indexToF32(rewriter, loc, c0); // Value inputBatch = rewriter.create(loc, input, c0); - Value inputColor = rewriter.create(loc, input, c1); + // TODO: remove inputColor? + // Value inputColor = rewriter.create(loc, input, c1); Value inputRow = rewriter.create(loc, input, c2); Value inputCol = rewriter.create(loc, input, c3); diff --git a/midend/lib/Conversion/MLIRGPU/ConvertMemcpyToGPU.cpp b/midend/lib/Conversion/MLIRGPU/ConvertMemcpyToGPU.cpp index dd50feccf8..69908c497e 100644 --- a/midend/lib/Conversion/MLIRGPU/ConvertMemcpyToGPU.cpp +++ b/midend/lib/Conversion/MLIRGPU/ConvertMemcpyToGPU.cpp @@ -18,21 +18,20 @@ // //===---------------------------------------------------------------------===// -#include "mlir/Dialect/Arith/IR/Arith.h" #include "mlir/Dialect/GPU/IR/GPUDialect.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" +#include "mlir/IR/AffineMap.h" #include "mlir/IR/Builders.h" -#include "mlir/IR/BuiltinOps.h" #include "mlir/IR/BuiltinTypes.h" #include "mlir/IR/OperationSupport.h" #include "mlir/IR/TypeRange.h" +#include "mlir/IR/Types.h" #include "mlir/IR/ValueRange.h" #include "mlir/IR/Visitors.h" #include "mlir/Support/LLVM.h" +#include "llvm/ADT/SmallVector.h" #include "llvm/Support/Casting.h" -#include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" -#include "llvm/Support/raw_ostream.h" #include #include #include @@ -42,11 +41,8 @@ #include #include -#include -#include -#include -#include -#include +#include + using namespace mlir; using namespace vector; @@ -79,9 +75,17 @@ class ConvertMemcpyToGPUPass } }; +MemRefType stripMemRefLayout(const MemRefType &base) { + return MemRefType::get(base.getShape(), base.getElementType(), AffineMap(), + base.getMemorySpace()); +} + void ConvertMemcpyToGPUPass::runOnOperation() { auto funcOp = getOperation(); + if (funcOp.isDeclaration() || funcOp.isExternal()) + return; + // Make sure the gpu function is already outlined. funcOp->walk([&](Operation *nestedOp) { if (auto gpuLaunchOp = dyn_cast(nestedOp)) { @@ -90,8 +94,9 @@ void ConvertMemcpyToGPUPass::runOnOperation() { return WalkResult::advance(); }); - std::set unDeallocatedOperations; + std::vector unDeallocatedValue; OpBuilder builder(funcOp->getContext()); + // Copy all function arguments to gpu, needs deallocation if (processArgs) { builder.setInsertionPointToStart(&(funcOp.getBody().front())); @@ -101,25 +106,15 @@ void ConvertMemcpyToGPUPass::runOnOperation() { // Create a gpu.alloc op, then copy memory to it // TODO: Move this out of operation, make the copy process async auto memrefType = dyn_cast(arg.getType()); + auto gpuAllocOp = builder.create( - builder.getUnknownLoc(), TypeRange({memrefType}), ValueRange({})); - unDeallocatedOperations.insert(&gpuAllocOp); + builder.getUnknownLoc(), TypeRange({stripMemRefLayout(memrefType)}), + ValueRange({})); + unDeallocatedValue.push_back(gpuAllocOp->getResult(0)); auto gpuMemcpyOp = builder.create( gpuAllocOp.getLoc(), TypeRange(), ValueRange(), gpuAllocOp.getResult(0), arg); - // Replace all users with GPU memory - auto users = arg.getUsers(); - std::vector usersVec(users.begin(), users.end()); - for (auto user : usersVec) { - // Don't replace memcpy's operand - if (isa(user)) - continue; - for (size_t j = 0; j < user->getNumOperands(); j++) { - if (user->getOperand(j) == arg) { - user->setOperand(j, gpuAllocOp.getResult(0)); - } - } - } + arg.replaceAllUsesExcept(gpuAllocOp->getResult(0), gpuMemcpyOp); } } @@ -148,20 +143,20 @@ void ConvertMemcpyToGPUPass::runOnOperation() { } auto gpuAllocOp = builder.create( - allocOp->getLoc(), TypeRange({memrefType}), ValueRange({})); - auto users = result.getUsers(); - std::vector usersVec(users.begin(), users.end()); - for (auto user : usersVec) { - for (size_t j = 0; j < user->getNumOperands(); j++) { - // Only the return value will not have dealloc op - if (auto deallocOp = dyn_cast(user)) { - builder.setInsertionPointAfter(deallocOp); - auto gpuDeallocOp = builder.create( - deallocOp->getLoc(), TypeRange(), ValueRange(), - gpuAllocOp.getResult(0)); - deallocOp->erase(); - } else if (user->getOperand(j) == result) { - user->setOperand(j, gpuAllocOp.getResult(0)); + allocOp->getLoc(), TypeRange({stripMemRefLayout(memrefType)}), + ValueRange({})); + + for (auto user : llvm::make_early_inc_range(result.getUsers())) { + if (auto deallocOp = dyn_cast(user)) { + builder.setInsertionPointAfter(deallocOp); + builder.create(deallocOp->getLoc(), TypeRange(), + ValueRange(), gpuAllocOp.getResult(0)); + deallocOp->erase(); + } else { + for (auto &opOperand : user->getOpOperands()) { + if (opOperand.is(result)) { + opOperand.set(gpuAllocOp.getResult(0)); + } } } } @@ -175,28 +170,8 @@ void ConvertMemcpyToGPUPass::runOnOperation() { builder.setInsertionPointAfter(copyOp); auto gpuMemcpyOp = builder.create( copyOp->getLoc(), TypeRange(), ValueRange(), dst, src); - { - auto users = src.getUsers(); - std::vector usersVec(users.begin(), users.end()); - for (auto user : usersVec) { - for (size_t j = 0; j < user->getNumOperands(); j++) { - if (user->getOperand(j) == src) { - user->setOperand(j, gpuMemcpyOp.getOperand(1)); - } - } - } - } - { - auto users = dst.getUsers(); - std::vector usersVec(users.begin(), users.end()); - for (auto user : usersVec) { - for (size_t j = 0; j < user->getNumOperands(); j++) { - if (user->getOperand(j) == src) { - user->setOperand(j, gpuMemcpyOp.getOperand(0)); - } - } - } - } + src.replaceAllUsesWith(gpuMemcpyOp->getResult(1)); + dst.replaceAllUsesWith(gpuMemcpyOp->getResult(0)); copyOp->erase(); } // Allocate space on GPU and copy global memrefs to GPU, needs deallocation @@ -205,49 +180,43 @@ void ConvertMemcpyToGPUPass::runOnOperation() { auto result = getGlobalOp->getResult(0); auto memrefType = dyn_cast(result.getType()); auto gpuAllocOp = builder.create( - getGlobalOp->getLoc(), TypeRange({memrefType}), ValueRange({})); - unDeallocatedOperations.insert(&gpuAllocOp); + getGlobalOp->getLoc(), TypeRange({stripMemRefLayout(memrefType)}), + ValueRange({})); + unDeallocatedValue.push_back(gpuAllocOp->getResult(0)); + auto src = result; auto dst = gpuAllocOp->getResult(0); auto gpuMemcpyOp = builder.create( gpuAllocOp->getLoc(), TypeRange(), ValueRange(), dst, src); - { - auto users = src.getUsers(); - std::vector usersVec(users.begin(), users.end()); - for (auto user : usersVec) { - if (isa(user)) - continue; - // TODO: replace with src.replaceAllUsesExcept() - for (size_t j = 0; j < user->getNumOperands(); j++) { - if (user->getOperand(j) == src) { - user->setOperand(j, dst); - } - } - } - } + src.replaceAllUsesExcept(dst, gpuMemcpyOp); } // Copy data back to CPU, deallocate GPU, then return else if (auto returnOp = dyn_cast(nestedOp)) { builder.setInsertionPoint(returnOp); - - for (auto *gpuAllocOp : unDeallocatedOperations) { - auto gpuDeallocOp = builder.create( - builder.getUnknownLoc(), TypeRange(), ValueRange(), - gpuAllocOp->getResult(0)); - } - builder.setInsertionPoint(returnOp); + llvm::SmallVector outputTypes( + funcOp.getFunctionType().getResults()); for (unsigned i = 0; i < returnOp.getNumOperands(); ++i) { auto val = returnOp->getOperand(i); - auto memRefType = dyn_cast(val.getType()); - auto allocOp = builder.create(builder.getUnknownLoc(), - memRefType); - auto gpuMemcpyOp = builder.create( - allocOp.getLoc(), TypeRange(), ValueRange(), allocOp->getResult(0), - val); - auto gpuDeallocOp = builder.create( - gpuMemcpyOp->getLoc(), TypeRange(), ValueRange(), val); - returnOp->setOperand(i, allocOp->getResult(0)); + if (auto memrefType = dyn_cast(val.getType())) { + auto identityMemrefType = stripMemRefLayout(memrefType); + auto allocOp = builder.create(returnOp->getLoc(), + identityMemrefType); + builder.create(allocOp.getLoc(), TypeRange(), + ValueRange(), allocOp->getResult(0), + val); + // FIXME: may be leak memory + // auto gpuDeallocOp = builder.create( + // gpuMemcpyOp->getLoc(), TypeRange(), ValueRange(), val); + outputTypes[i] = identityMemrefType; + returnOp->setOperand(i, allocOp->getResult(0)); + } + } + for (auto value : unDeallocatedValue) { + builder.create(returnOp->getLoc(), TypeRange(), + ValueRange(), value); } + funcOp.setType( + builder.getFunctionType(funcOp.getArgumentTypes(), outputTypes)); } return WalkResult::advance(); }); diff --git a/midend/lib/Conversion/MatMulOptimization/BatchMatMulSCFOptimize.cpp b/midend/lib/Conversion/MatMulOptimization/BatchMatMulSCFOptimize.cpp index a3d079be22..30b7cc9420 100644 --- a/midend/lib/Conversion/MatMulOptimization/BatchMatMulSCFOptimize.cpp +++ b/midend/lib/Conversion/MatMulOptimization/BatchMatMulSCFOptimize.cpp @@ -81,10 +81,11 @@ class BatchMatMuSCFOptimizePattern : public ConversionPattern { const Value cVecSize = rewriter.create(loc, rewriter.getIndexAttr(vecSize)); const AffineExpr d0 = rewriter.getAffineDimExpr(0); - const AffineExpr d1 = rewriter.getAffineDimExpr(1); - const AffineExpr d2 = rewriter.getAffineDimExpr(2); - const AffineExpr s0 = rewriter.getAffineSymbolExpr(0); - const AffineExpr zeroAffine = rewriter.getAffineConstantExpr(0); + // TODO: remove the following values? + // const AffineExpr d1 = rewriter.getAffineDimExpr(1); + // const AffineExpr d2 = rewriter.getAffineDimExpr(2); + // const AffineExpr s0 = rewriter.getAffineSymbolExpr(0); + // const AffineExpr zeroAffine = rewriter.getAffineConstantExpr(0); const Value zeroElementType = rewriter.create( loc, rewriter.getZeroAttr(elementType)); diff --git a/midend/lib/Conversion/MatMulOptimization/MatMulTransposeBVec.cpp b/midend/lib/Conversion/MatMulOptimization/MatMulTransposeBVec.cpp index 4500119d76..345de4c1de 100644 --- a/midend/lib/Conversion/MatMulOptimization/MatMulTransposeBVec.cpp +++ b/midend/lib/Conversion/MatMulOptimization/MatMulTransposeBVec.cpp @@ -127,7 +127,10 @@ class MatMulTransposeBVecPattern : public ConversionPattern{ }, // The else branch [&](OpBuilder &builder, Location loc) { - Value aVec = builder.create( + // TODO: remove this value and operation? + // Value aVec = builder.create( + // loc, vectorTy, A, AVectorMap, ValueRange{ivs[0], ivs[1], iv}); + builder.create( loc, vectorTy, A, AVectorMap, ValueRange{ivs[0], ivs[1], iv}); // Create mask according to the tail. Value maskVec = builder.create( diff --git a/requirements.txt b/requirements.txt index 9818b8ec74..55726a11f8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,9 @@ --pre --extra-index-url https://download.pytorch.org/whl/cpu -torch == 2.1.2 +torch == 2.5.1 numpy < 2 -transformers == 4.33.1 -tokenizers == 0.13.3 -sentencepiece == 0.1.99 +transformers == 4.46.2 +tokenizers >= 0.20 +sentencepiece == 0.2.0 accelerate protobuf pybind11 == 2.11.1 @@ -12,3 +12,8 @@ tabulate datasets soundfile librosa +PyYAML +certifi +idna +diffusers + diff --git a/tests/Conversion/convert-memcpy-to-gpu.mlir b/tests/Conversion/convert-memcpy-to-gpu.mlir index 63edfd8d02..65e9301e4a 100644 --- a/tests/Conversion/convert-memcpy-to-gpu.mlir +++ b/tests/Conversion/convert-memcpy-to-gpu.mlir @@ -1,22 +1,68 @@ -// RUN: buddy-opt -convert-memcpy-to-gpu -canonicalize %s | FileCheck %s +// RUN: buddy-opt -convert-memcpy-to-gpu="process-args=1" %s | FileCheck %s -// CHECK: %memref = gpu.alloc () : memref<32x32xf32> -// CHECK: %memref_0 = gpu.alloc () : memref<32x32xf32> -// CHECK: gpu.dealloc %memref : memref<32x32xf32> -// CHECK: %alloc = memref.alloc() : memref<32x32xf32> -// CHECK: gpu.memcpy %alloc, %memref_0 : memref<32x32xf32>, memref<32x32xf32> -// CHECK: gpu.dealloc %memref_0 : memref<32x32xf32> +#map = affine_map<(d0)[s0, s1] -> (d0 * s0 + s1)> module attributes {gpu.container_module} { - func.func @matmul(%arg0: memref<32x32xf32>, %arg1: memref<32x32xf32>) -> memref<32x32xf32> { - %c2 = arith.constant 2 : index - %c64 = arith.constant 64 : index + memref.global "private" constant @__constant_1x10x10xf32 : memref<1x10x10xf32> = dense<1.000000e+00> {alignment = 64 : i64} + func.func @matmul(%arg0: memref<1x10x10xf32>, %arg1: memref<1x10x10xf32>) -> memref<1x10x10xf32> { + // CHECK: %[[d_arg0:.*]] = gpu.alloc () : memref<1x10x10xf32> + // CHECK-NEXT: gpu.memcpy %[[d_arg0]], %arg0 : memref<1x10x10xf32>, memref<1x10x10xf32> + // CHECK: %[[d_arg1:.*]] = gpu.alloc () : memref<1x10x10xf32> + // CHECK-NEXT: gpu.memcpy %[[d_arg1:.*]], %arg1 : memref<1x10x10xf32>, memref<1x10x10xf32> + %c10 = arith.constant 10 : index + %c0 = arith.constant 0 : index %c1 = arith.constant 1 : index - %alloc = memref.alloc() {alignment = 64 : i64} : memref<32x32xf32> - gpu.launch_func @matmul_kernel::@matmul_kernel blocks in (%c1, %c1, %c1) threads in (%c64, %c2, %c1) - return %alloc : memref<32x32xf32> + %cst = arith.constant 0.000000e+00 : f32 + // CHECK: %[[h_global_data:.*]] = memref.get_global @__constant_1x10x10xf32 : memref<1x10x10xf32> + // CHECK: %[[d_global_data:.*]] = gpu.alloc () : memref<1x10x10xf32> + // CHECK: gpu.memcpy %[[d_global_data]], %[[h_global_data]] : memref<1x10x10xf32>, memref<1x10x10xf32> + %0 = memref.get_global @__constant_1x10x10xf32 : memref<1x10x10xf32> + // CHECK: %[[d_alloc0:.*]] = gpu.alloc () : memref<1x10x10xf32> + %alloc = memref.alloc() {alignment = 64 : i64} : memref<1x10x10xf32> + // CHECK: gpu.launch_func + gpu.launch_func @kernel::@fill blocks in (%c10, %c10, %c1) threads in (%c1, %c1, %c1) args(%c1 : index, %c0 : index, %cst : f32, %alloc : memref<1x10x10xf32>) + // CHECK: gpu.launch_func + // CHECK-SAME: %[[d_arg0]] + // CHECK-SAME: %[[d_arg1]] + // CHECK-SAME: %[[d_alloc0]] + gpu.launch_func @kernel::@matmul blocks in (%c10, %c10, %c1) threads in (%c1, %c1, %c1) args(%c1 : index, %c0 : index, %arg0 : memref<1x10x10xf32>, %arg1 : memref<1x10x10xf32>, %alloc : memref<1x10x10xf32>, %c10 : index) + // CHECK: %[[d_alloc1:.*]] = gpu.alloc () : memref<1x10x10xf32> + %alloc_0 = memref.alloc() {alignment = 64 : i64} : memref<1x10x10xf32> + // CHECK: gpu.launch_func + gpu.launch_func @kernel::@fill blocks in (%c10, %c10, %c1) threads in (%c1, %c1, %c1) args(%c1 : index, %c0 : index, %cst : f32, %alloc_0 : memref<1x10x10xf32>) + // CHECK: gpu.launch_func + // CHECK-SAME: %[[d_global_data]] + // CHECK-SAME: %[[d_alloc0]] + // CHECK-SAME: %[[d_alloc1]] + gpu.launch_func @kernel::@matmul blocks in (%c10, %c10, %c1) threads in (%c1, %c1, %c1) args(%c1 : index, %c0 : index, %0 : memref<1x10x10xf32>, %alloc : memref<1x10x10xf32>, %alloc_0 : memref<1x10x10xf32>, %c10 : index) + // CHECK: %[[d_result:.*]] = gpu.alloc () : memref<1x10x10xf32> + %alloc_1 = memref.alloc() {alignment = 64 : i64} : memref<1x10x10xf32> + // CHECK: gpu.launch_func + gpu.launch_func @kernel::@fill blocks in (%c10, %c10, %c1) threads in (%c1, %c1, %c1) args(%c1 : index, %c0 : index, %cst : f32, %alloc_1 : memref<1x10x10xf32>) + // CHECK: gpu.launch_func + // CHECK-SAME: %[[d_alloc0]] + // CHECK-SAME: %[[d_alloc1]] + // CHECK-SAME: %[[d_result]] + gpu.launch_func @kernel::@matmul blocks in (%c10, %c10, %c1) threads in (%c1, %c1, %c1) args(%c1 : index, %c0 : index, %alloc : memref<1x10x10xf32>, %alloc_0 : memref<1x10x10xf32>, %alloc_1 : memref<1x10x10xf32>, %c10 : index) + // CHECK: gpu.dealloc %[[d_alloc1]] : memref<1x10x10xf32> + memref.dealloc %alloc_0 : memref<1x10x10xf32> + // CHECK: gpu.dealloc %[[d_alloc0]] : memref<1x10x10xf32> + memref.dealloc %alloc : memref<1x10x10xf32> + + // CHECK: %[[h_alloc:.*]] = memref.alloc() : memref<1x10x10xf32> + // CHECK-NEXT: gpu.memcpy %[[h_alloc]], %[[d_result]] : memref<1x10x10xf32>, memref<1x10x10xf32> + + // CHECK: gpu.dealloc %[[d_arg0]] : memref<1x10x10xf32> + // CHECK: gpu.dealloc %[[d_arg1]] : memref<1x10x10xf32> + // CHECK: gpu.dealloc %[[d_global_data]] : memref<1x10x10xf32> + + // CHECK: return %[[h_alloc]] : memref<1x10x10xf32> + return %alloc_1 : memref<1x10x10xf32> } - gpu.module @matmul_kernel { - gpu.func @matmul_kernel() kernel attributes {gpu.known_block_size = array, gpu.known_grid_size = array} { + gpu.module @kernel { + gpu.func @fill(%arg0: index, %arg1: index, %arg2: f32, %arg3: memref<1x10x10xf32>) kernel attributes {gpu.known_block_size = array} { + gpu.return + } + gpu.func @matmul(%arg0: index, %arg1: index, %arg2: memref<1x10x10xf32>, %arg3: memref<1x10x10xf32>, %arg4: memref<1x10x10xf32>, %arg5: index) kernel attributes {gpu.known_block_size = array} { gpu.return } } diff --git a/tests/Python/test_convert_element_type.py b/tests/Python/test_convert_element_type.py index ca88384633..cf3cc7e941 100644 --- a/tests/Python/test_convert_element_type.py +++ b/tests/Python/test_convert_element_type.py @@ -29,7 +29,8 @@ def foo(x, to_cast_type): # CHECK: module { # CHECK-LABEL: func.func @forward -# CHECK: %{{.*}} = tosa.cast +# CHECK: %{{.*}} = tensor.empty +# CHECK: %{{.*}} = linalg.generic # CHECK: return %{{.*}} # CHECK: } # CHECK: } diff --git a/tests/Python/test_max_pool2d.py b/tests/Python/test_max_pool2d.py index eecfc73d93..cac892761d 100644 --- a/tests/Python/test_max_pool2d.py +++ b/tests/Python/test_max_pool2d.py @@ -1,7 +1,6 @@ # RUN: %PYTHON %s 2>&1 | FileCheck %s import torch -from torch._inductor.decomposition import decompositions as inductor_decomp from buddy.compiler.frontend import DynamoCompiler from buddy.compiler.ops import tosa @@ -19,7 +18,6 @@ def forward(self, a): model = TestModule() dynamo_compiler = DynamoCompiler( primary_registry=tosa.ops_registry, - aot_autograd_decomposition=inductor_decomp, ) in1 = torch.randn((1, 3, 640, 480)) @@ -27,7 +25,7 @@ def forward(self, a): model_opt = torch.compile(model, backend=dynamo_compiler) assert torch.allclose(model_opt(in1), model(in1), equal_nan=True) -graphs = dynamo_compiler.importer(model, in1) +graphs = dynamo_compiler._imported_graphs assert len(graphs) == 1 graph = graphs[0] graph.lower_to_top_level_ir() diff --git a/tests/Python/test_mean.py b/tests/Python/test_mean.py index 0595619d18..54cc092b48 100644 --- a/tests/Python/test_mean.py +++ b/tests/Python/test_mean.py @@ -24,7 +24,7 @@ def foo(x, y, keepdim): assert torch.allclose( foo_mlir(in1, in2, keepdim=in3), foo(in1, in2, keepdim=in3), equal_nan=True ) -graphs = dynamo_compiler.importer(foo, in1, in2, in3) +graphs = dynamo_compiler._imported_graphs assert len(graphs) == 1 graph = graphs[0] graph.lower_to_top_level_ir() diff --git a/tests/Python/test_reciprocal.py b/tests/Python/test_reciprocal.py index 9c31fb8b5b..427927c315 100644 --- a/tests/Python/test_reciprocal.py +++ b/tests/Python/test_reciprocal.py @@ -22,7 +22,7 @@ def foo(x): foo_mlir = torch.compile(foo, backend=dynamo_compiler) assert torch.allclose(foo_mlir(x), foo(x), equal_nan=True) -graphs = dynamo_compiler.importer(foo, x) +graphs = dynamo_compiler._imported_graphs assert len(graphs) == 1 graph = graphs[0] graph.lower_to_top_level_ir() diff --git a/tests/Python/test_sqrt.py b/tests/Python/test_sqrt.py index b929d11075..bd76a77928 100644 --- a/tests/Python/test_sqrt.py +++ b/tests/Python/test_sqrt.py @@ -22,7 +22,7 @@ def foo(x): foo_mlir = torch.compile(foo, backend=dynamo_compiler) assert torch.allclose(foo_mlir(x), foo(x), equal_nan=True) -graphs = dynamo_compiler.importer(foo, x) +graphs = dynamo_compiler._imported_graphs assert len(graphs) == 1 graph = graphs[0] graph.lower_to_top_level_ir()