├── musicbot-config ├── autoplaylist.txt ├── blacklist.txt ├── whitelist.txt ├── i18n │ ├── ja.json │ ├── kr.json │ └── en.json ├── example_permissions.ini ├── example_options.ini └── _autoplaylist.txt ├── images └── snowball.png ├── .joker ├── .lvimrc ├── .gitignore ├── .dockerignore ├── Dockerfile ├── run.sh ├── src ├── clojure │ └── snowball │ │ ├── main.clj │ │ ├── config.clj │ │ ├── stream.clj │ │ ├── audio.clj │ │ ├── util.clj │ │ ├── presence.clj │ │ ├── speech.clj │ │ ├── discord.clj │ │ ├── command.clj │ │ └── comprehension.clj ├── java │ └── snowball │ │ └── porcupine │ │ └── Porcupine.java └── c │ └── porcupine.c ├── deps.edn ├── UNLICENSE ├── Makefile ├── config.base.edn ├── CODE_OF_CONDUCT.md ├── KUBE_NOTES.md └── README.md /musicbot-config/autoplaylist.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /musicbot-config/blacklist.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /musicbot-config/whitelist.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/snowball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Olical/snowball/HEAD/images/snowball.png -------------------------------------------------------------------------------- /.joker: -------------------------------------------------------------------------------- 1 | {:known-macros [bounce.system/defcomponent] 2 | :ignored-unused-namespaces [cider.nrepl]} 3 | -------------------------------------------------------------------------------- /.lvimrc: -------------------------------------------------------------------------------- 1 | nnoremap rc :call conjure#connect("default", "127.0.0.1:5005", "cljc?$", "clj") 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | /.cpcache/ 3 | /config/ 4 | /musicbot-config/options.ini 5 | /musicbot-config/permissions.ini 6 | /wake-word-engine/ 7 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | /.git/ 2 | /config/ 3 | /musicbot-config/ 4 | /.cpcache/ 5 | /wake-word-engine/Porcupine/ 6 | !/wake-word-engine/Porcupine/lib/common/porcupine_params.pv 7 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM clojure:tools-deps-1.9.0.394 2 | 3 | RUN mkdir -p /usr/snowball 4 | WORKDIR /usr/snowball 5 | 6 | COPY deps.edn /usr/snowball 7 | RUN clojure -e :ready 8 | 9 | COPY . /usr/snowball 10 | 11 | CMD ["./run.sh"] 12 | -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | GOOGLE_APPLICATION_CREDENTIALS="$(pwd)/config/google.json" \ 4 | LD_LIBRARY_PATH="wake-word-engine/jni" \ 5 | clojure -J-Dclojure.server.snowball="{:port 5005 :accept clojure.core.server/io-prepl}" \ 6 | -m snowball.main 7 | -------------------------------------------------------------------------------- /src/clojure/snowball/main.clj: -------------------------------------------------------------------------------- 1 | (ns snowball.main 2 | (:require [bounce.system :as b] 3 | [taoensso.timbre :as log])) 4 | 5 | (defn -main [] 6 | (log/info "Starting components...") 7 | (b/set-opts! #{'snowball.config/value 8 | 'snowball.discord/audio-chan 9 | 'snowball.comprehension/phrase-text-chan 10 | 'snowball.speech/synthesiser 11 | 'snowball.presence/poller 12 | 'snowball.command/dispatcher}) 13 | (b/start!) 14 | (log/info "Everything's up and running!")) 15 | -------------------------------------------------------------------------------- /src/clojure/snowball/config.clj: -------------------------------------------------------------------------------- 1 | (ns snowball.config 2 | (:require [clojure.edn :as edn] 3 | [clojure.java.io :as io] 4 | [bounce.system :as b] 5 | [taoensso.timbre :as log] 6 | [snowball.util :as util])) 7 | 8 | (defn path->data [path] 9 | (->> path 10 | (slurp) 11 | (edn/read-string))) 12 | 13 | (b/defcomponent value 14 | (let [base-path "config.base.edn" 15 | user-path "config/config.edn"] 16 | (log/info "Loading base config from" base-path "and user config from" user-path) 17 | (util/deep-merge (path->data base-path) 18 | (path->data user-path)))) 19 | -------------------------------------------------------------------------------- /src/clojure/snowball/stream.clj: -------------------------------------------------------------------------------- 1 | (ns snowball.stream 2 | (:require [clojure.java.io :as io]) 3 | (:import [java.io 4 | PipedInputStream 5 | PipedOutputStream 6 | ByteArrayOutputStream])) 7 | 8 | (defn size [s] 9 | (.size s)) 10 | 11 | (defn output [] 12 | (PipedOutputStream.)) 13 | 14 | (defn byte-array-output [] 15 | (ByteArrayOutputStream.)) 16 | 17 | (defn ->bytes [s] 18 | (.toByteArray s)) 19 | 20 | (defn ->input-stream [x] 21 | (io/input-stream x)) 22 | 23 | (def stream-size (* 64 1024)) 24 | 25 | (defn input [output-stream] 26 | (PipedInputStream. output-stream stream-size)) 27 | 28 | (defn write [s bs] 29 | (.write s bs 0 (count bs))) 30 | -------------------------------------------------------------------------------- /src/clojure/snowball/audio.clj: -------------------------------------------------------------------------------- 1 | (ns snowball.audio 2 | (:require [clojure.java.io :as io] 3 | [snowball.stream :as stream]) 4 | (:import [java.io ByteArrayInputStream] 5 | [javax.sound.sampled 6 | AudioSystem 7 | AudioInputStream 8 | AudioFormat 9 | AudioFileFormat])) 10 | 11 | (def file-type 12 | javax.sound.sampled.AudioFileFormat$Type/WAVE) 13 | 14 | (defn input->audio [input-stream] 15 | (AudioSystem/getAudioInputStream input-stream)) 16 | 17 | (defn stream->audio [s] 18 | (let [bs (stream/->bytes s)] 19 | (AudioInputStream. (ByteArrayInputStream. bs) 20 | (AudioFormat. 16000 16 1 true false) 21 | (count bs)))) 22 | 23 | (defn write [audio-stream target] 24 | (AudioSystem/write audio-stream file-type (io/output-stream target))) 25 | -------------------------------------------------------------------------------- /deps.edn: -------------------------------------------------------------------------------- 1 | {:paths ["src/clojure" "src/java"] 2 | :deps {org.clojure/clojure {:mvn/version "1.10.0"} 3 | org.clojure/core.async {:mvn/version "0.4.474"} 4 | org.clojure/tools.namespace {:mvn/version "0.2.11"} 5 | 6 | camel-snake-kebab {:mvn/version "0.4.0"} 7 | com.taoensso/timbre {:mvn/version "4.10.0"} 8 | com.discord4j/Discord4J {:mvn/version "2.10.1"} 9 | jarohen/bounce {:mvn/version "0.0.1-rc1"} 10 | digest {:mvn/version "1.4.8"} 11 | 12 | com.google.cloud/google-cloud-storage {:mvn/version "1.46.0"} 13 | com.google.cloud/google-cloud-speech {:mvn/version "0.56.0-beta"} 14 | com.google.cloud/google-cloud-texttospeech {:mvn/version "0.56.0-beta"} 15 | net.sourceforge.argparse4j/argparse4j {:mvn/version "0.8.1"}} 16 | 17 | :aliases {:outdated {:extra-deps {olical/depot {:mvn/version "1.2.0"}} 18 | :main-opts ["-m" "depot.outdated.main"]}} 19 | 20 | :mvn/repos {"spring-plugins" {:url "http://repo.spring.io/plugins-release/"}}} 21 | -------------------------------------------------------------------------------- /src/java/snowball/porcupine/Porcupine.java: -------------------------------------------------------------------------------- 1 | // Copied and modified from the Porcupine project Android binding. 2 | // https://github.com/Picovoice/Porcupine 3 | 4 | package snowball.porcupine; 5 | 6 | public class Porcupine { 7 | private final long object; 8 | 9 | static { 10 | System.loadLibrary("pv_porcupine"); 11 | } 12 | 13 | public Porcupine(String modelFilePath, String keywordFilePath, float sens) throws Exception { 14 | try { 15 | object = init(modelFilePath, keywordFilePath, sens); 16 | } catch (Exception e) { 17 | throw new Exception(e); 18 | } 19 | } 20 | 21 | public boolean processFrame(short[] pcm) throws Exception { 22 | try { 23 | return process(object, pcm); 24 | } catch (Exception e) { 25 | throw new Exception(e); 26 | } 27 | } 28 | 29 | public void delete() { 30 | delete(object); 31 | } 32 | 33 | public native int getFrameLength(); 34 | 35 | public native int getSampleRate(); 36 | 37 | private native long init(String modelFilePath, String keywordFilePaths, float sensitivitie); 38 | 39 | private native boolean process(long object, short[] pcm); 40 | 41 | private native void delete(long object); 42 | } 43 | -------------------------------------------------------------------------------- /UNLICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | 26 | -------------------------------------------------------------------------------- /src/clojure/snowball/util.clj: -------------------------------------------------------------------------------- 1 | (ns snowball.util 2 | (:require [clojure.string :as str] 3 | [clojure.core.async :as a] 4 | [taoensso.timbre :as log])) 5 | 6 | (defn poll-while [poll-ms pred-fn body-fn] 7 | (loop [] 8 | (when (try 9 | (pred-fn) 10 | (catch Exception e 11 | (log/error "Caught an error in poll-while pred" e) 12 | (.printStackTrace e) 13 | true)) 14 | (try 15 | (body-fn) 16 | (catch Exception e 17 | (log/error "Caught an error in poll-while body" e) 18 | (.printStackTrace e))) 19 | (Thread/sleep poll-ms) 20 | (recur)))) 21 | 22 | ;; https://gist.github.com/scttnlsn/9744501 23 | (defn debounce [in ms] 24 | (let [out (a/chan)] 25 | (a/go-loop [last-val nil] 26 | (let [val (if (nil? last-val) (a/! out val) 32 | (recur nil)) 33 | in (when new-val 34 | (recur new-val))))) 35 | out)) 36 | 37 | ;; https://github.com/clojure-cookbook/clojure-cookbook/blob/master/02_composite-data/2-23_combining-maps.asciidoc 38 | (defn deep-merge-with [f & maps] 39 | (apply 40 | (fn m [& maps] 41 | (if (every? map? maps) 42 | (apply merge-with m maps) 43 | (apply f maps))) 44 | maps)) 45 | 46 | (defn deep-merge [& maps] 47 | (apply deep-merge-with (fn [_ v] v) maps)) 48 | 49 | (defn sanitise-entity [entity] 50 | (-> entity 51 | (str/lower-case) 52 | (str/replace #"[^\w\d-\s]" "") 53 | (str/trim))) 54 | -------------------------------------------------------------------------------- /src/c/porcupine.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | JNIEXPORT jlong JNICALL Java_snowball_porcupine_Porcupine_init 6 | (JNIEnv *env, jobject obj, jstring model_raw, jstring keyword_raw, jfloat sens) { 7 | const char *model = (*env)->GetStringUTFChars(env, model_raw, 0); 8 | const char *keyword = (*env)->GetStringUTFChars(env, keyword_raw, 0); 9 | pv_porcupine_object_t *handle; 10 | 11 | const pv_status_t status = pv_porcupine_init(model, keyword, sens, &handle); 12 | 13 | if (status != PV_STATUS_SUCCESS) { 14 | printf("Error: Failed to initialise Snowball's Porcupine instance."); 15 | } 16 | 17 | (*env)->ReleaseStringUTFChars(env, model_raw, model); 18 | (*env)->ReleaseStringUTFChars(env, keyword_raw, keyword); 19 | 20 | return (long)handle; 21 | } 22 | 23 | JNIEXPORT void JNICALL Java_snowball_porcupine_Porcupine_delete 24 | (JNIEnv *env, jobject obj, jlong handle) { 25 | pv_porcupine_delete((pv_porcupine_object_t*)handle); 26 | } 27 | 28 | JNIEXPORT jint JNICALL Java_snowball_porcupine_Porcupine_getFrameLength 29 | (JNIEnv *env, jobject obj) { 30 | return pv_porcupine_frame_length(); 31 | } 32 | 33 | JNIEXPORT jint JNICALL Java_snowball_porcupine_Porcupine_getSampleRate 34 | (JNIEnv *env, jobject obj) { 35 | return pv_sample_rate(); 36 | } 37 | 38 | JNIEXPORT jboolean JNICALL Java_snowball_porcupine_Porcupine_process 39 | (JNIEnv *env, jobject obj, jlong handle, jshortArray pcm_raw) { 40 | jshort *pcm = (*env)->GetShortArrayElements(env, pcm_raw, 0); 41 | bool result; 42 | 43 | pv_porcupine_process((pv_porcupine_object_t*)handle, pcm, &result); 44 | 45 | (*env)->ReleaseShortArrayElements(env, pcm_raw, pcm, 0); 46 | 47 | return result; 48 | } 49 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: default run run-container build push outdated 2 | 3 | WAKE_PHRASE := hey snowball 4 | NAME := olical/snowball 5 | TAG := $$(git log -1 --pretty=%H) 6 | IMG := ${NAME}:${TAG} 7 | LATEST := ${NAME}:latest 8 | 9 | default: wake-word-engine run 10 | 11 | run: 12 | ./run.sh 13 | 14 | run-container: 15 | docker run -p 9045:9045 -v $(shell pwd)/config:/usr/snowball/config -ti --rm olical/snowball 16 | 17 | build: wake-word-engine 18 | docker build -t ${IMG} . 19 | docker tag ${IMG} ${LATEST} 20 | 21 | push: 22 | docker push ${NAME} 23 | 24 | outdated: 25 | clojure -Aoutdated 26 | 27 | wake-word-engine: wake-word-engine/Porcupine wake-word-engine/wake_phrase.ppn wake-word-engine/jni/libpv_porcupine.so src/java/snowball/porcupine/Porcupine.class 28 | 29 | wake-word-engine/Porcupine: 30 | mkdir -p wake-word-engine 31 | cd wake-word-engine && git clone git@github.com:Picovoice/Porcupine.git 32 | 33 | wake-word-engine/wake_phrase.ppn: wake-word-engine/Porcupine 34 | cd wake-word-engine/Porcupine && tools/optimizer/linux/x86_64/pv_porcupine_optimizer -r resources/ -w "$(WAKE_PHRASE)" -p linux -o ../ 35 | mv "wake-word-engine/$(WAKE_PHRASE)_linux.ppn" wake-word-engine/wake_phrase.ppn 36 | 37 | src/java/snowball/porcupine/Porcupine.class wake-word-engine/jni/snowball_porcupine_Porcupine.h: src/java/snowball/porcupine/Porcupine.java 38 | mkdir -p wake-word-engine/jni 39 | javac -h wake-word-engine/jni src/java/snowball/porcupine/Porcupine.java 40 | 41 | wake-word-engine/jni/libpv_porcupine.so: wake-word-engine/jni/snowball_porcupine_Porcupine.h src/c/porcupine.c 42 | gcc -shared -O3 \ 43 | -I/usr/include \ 44 | -I/usr/lib/jvm/default/include \ 45 | -I/usr/lib/jvm/default/include/linux \ 46 | -Iwake-word-engine/Porcupine/include \ 47 | -Iwake-word-engine/jni \ 48 | src/c/porcupine.c \ 49 | wake-word-engine/Porcupine/lib/linux/x86_64/libpv_porcupine.a \ 50 | -o wake-word-engine/jni/libpv_porcupine.so 51 | -------------------------------------------------------------------------------- /config.base.edn: -------------------------------------------------------------------------------- 1 | ;; Override this with your own `config/config.edn`. 2 | 3 | {:discord {:token nil ;; Your Discord bot token. 4 | :poll-ms 1000} ;; How long we should wait before asking Discord if we're connected again. 5 | 6 | :presence {:poll-ms 1000 ;; How long we should wait before checking if we should join another channel. 7 | :blacklist #{} ;; Voice channel IDs that we're not allowed to see / join. 8 | :whitelist #{}} ;; Voice channel IDs that we're _only_ allowed to see / join. 9 | ;; ex: #{492031890262589440}, use either the whitelist or the blacklist, not both. 10 | 11 | :comprehension {:phrase-debounce-ms 350 ;; How long can someone not speak for before we cut it as a phrase and try to comprehend it. 12 | :stream-bytes-cutoff 1000000 ;; How many bytes can we hold for any given user before we cute it into a phrase. 13 | :post-wake-timeout-ms 12000 ;; How long do we wait for a user to speak after they say the wake phrase. 14 | :language-code "en-GB" ;; Language code to send to Google for comprehension. You could try en-US. 15 | :sensitivity 0.5} ;; Sensitivity for Porcupine between 0 and 1, where 1 is most sensitive. 16 | 17 | :speech {:cache {:bucket nil} ;; A bucket that the speech synthesiser can use to store pre-rendered audio for reuse. 18 | :language-code "en_us" ;; Let Google know what accent we want, "en_gb" would also work. 19 | :gender :male} ;; Use a :female or :male voice. 20 | 21 | :command {:music {:channel nil ;; The channel ID that commands for the music bot should be sent to. 22 | :user nil}}} ;; The user to check for, if it's not in voice it'll be summoned. 23 | -------------------------------------------------------------------------------- /src/clojure/snowball/presence.clj: -------------------------------------------------------------------------------- 1 | (ns snowball.presence 2 | (:require [clojure.core.async :as a] 3 | [bounce.system :as b] 4 | [taoensso.timbre :as log] 5 | [snowball.config :as config] 6 | [snowball.discord :as discord] 7 | [snowball.speech :as speech])) 8 | 9 | (defn allowed-to-join? [channel] 10 | (let [{:keys [whitelist blacklist]} (get config/value :presence) 11 | cid (discord/->id channel)] 12 | (cond 13 | (seq whitelist) (whitelist cid) 14 | (seq blacklist) (not (blacklist cid)) 15 | :default true))) 16 | 17 | (b/defcomponent poller {:bounce/deps #{discord/client config/value speech/synthesiser}} 18 | (log/info "Starting presence poller") 19 | (let [closed?! (atom false)] 20 | (-> (a/go-loop [] 21 | (when-not @closed?! 22 | (try 23 | (a/> (discord/channels) 25 | (sequence 26 | (comp 27 | (filter allowed-to-join?) 28 | (filter discord/has-speaking-users?))) 29 | (first)) 30 | current-channel (discord/current-channel)] 31 | (cond 32 | (and current-channel (nil? desired-channel)) 33 | (discord/leave! current-channel) 34 | 35 | (and (or (nil? current-channel) 36 | (not (discord/has-speaking-users? current-channel))) 37 | desired-channel) 38 | (do 39 | (discord/join! desired-channel) 40 | 41 | ;; This hack gets around a bug in Discord's API. 42 | ;; You need to send some audio to start receiving audio. 43 | (speech/say! "")))) 44 | (catch Exception e 45 | (log/error "Caught an error in presence loop" e))) 46 | (recur))) 47 | (b/with-stop 48 | (log/info "Stopping presence poller") 49 | (reset! closed?! true))))) 50 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. 6 | 7 | ## Our Standards 8 | 9 | Examples of behavior that contributes to creating a positive environment include: 10 | 11 | * Using welcoming and inclusive language 12 | * Being respectful of differing viewpoints and experiences 13 | * Gracefully accepting constructive criticism 14 | * Focusing on what is best for the community 15 | * Showing empathy towards other community members 16 | 17 | Examples of unacceptable behavior by participants include: 18 | 19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances 20 | * Trolling, insulting/derogatory comments, and personal or political attacks 21 | * Public or private harassment 22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission 23 | * Other conduct which could reasonably be considered inappropriate in a professional setting 24 | 25 | ## Our Responsibilities 26 | 27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. 28 | 29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 30 | 31 | ## Scope 32 | 33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 34 | 35 | ## Enforcement 36 | 37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at olliec87@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 38 | 39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. 40 | 41 | ## Attribution 42 | 43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] 44 | 45 | [homepage]: http://contributor-covenant.org 46 | [version]: http://contributor-covenant.org/version/1/4/ 47 | -------------------------------------------------------------------------------- /src/clojure/snowball/speech.clj: -------------------------------------------------------------------------------- 1 | (ns snowball.speech 2 | (:require [clojure.string :as str] 3 | [digest] 4 | [bounce.system :as b] 5 | [taoensso.timbre :as log] 6 | [snowball.audio :as audio] 7 | [snowball.stream :as stream] 8 | [snowball.discord :as discord] 9 | [snowball.config :as config]) 10 | (:import [com.google.cloud.texttospeech.v1beta1 11 | TextToSpeechClient 12 | SynthesisInput 13 | VoiceSelectionParams 14 | AudioConfig 15 | SynthesizeSpeechResponse 16 | SsmlVoiceGender 17 | AudioEncoding] 18 | [com.google.cloud.storage 19 | Storage 20 | StorageOptions 21 | BlobInfo 22 | BlobId])) 23 | 24 | (def storage (.. StorageOptions 25 | getDefaultInstance 26 | getService)) 27 | 28 | (defn object-name [s] 29 | (let [slug (-> s 30 | (str/trim) 31 | (str/lower-case) 32 | (str/replace #"\s+" "-") 33 | (str/replace #"[^\w\d\-]" ""))] 34 | (-> slug 35 | (subs 0 (min (count slug) 21)) 36 | (str "-" (digest/sha-256 s))))) 37 | 38 | (defn write-cache! [message data] 39 | (when-let [bucket (get-in config/value [:speech :cache :bucket])] 40 | (future 41 | (.. storage 42 | (create 43 | (.. BlobInfo (newBuilder bucket (object-name message)) build) 44 | data 45 | (make-array com.google.cloud.storage.Storage$BlobTargetOption 0)))))) 46 | 47 | (defn read-cache [message] 48 | (when-let [bucket (get-in config/value [:speech :cache :bucket])] 49 | (let [blob-id (.. BlobId (of bucket (object-name message))) 50 | blob (.. storage (get blob-id))] 51 | (when blob 52 | (.. blob 53 | (getContent (make-array com.google.cloud.storage.Blob$BlobSourceOption 0))))))) 54 | 55 | (b/defcomponent synthesiser {:bounce/deps #{discord/client config/value}} 56 | (log/info "Starting up speech client") 57 | (let [language-code (get-in config/value [:speech :language-code]) 58 | gender (case (get-in config/value [:speech :gender]) 59 | :male SsmlVoiceGender/MALE 60 | :female SsmlVoiceGender/FEMALE)] 61 | (-> {:client (TextToSpeechClient/create) 62 | :voice (.. VoiceSelectionParams 63 | newBuilder 64 | (setLanguageCode language-code) 65 | (setSsmlGender gender) 66 | build) 67 | :audio-config (.. AudioConfig 68 | newBuilder 69 | (setAudioEncoding AudioEncoding/MP3) 70 | build)} 71 | (b/with-stop 72 | (log/info "Shutting down speech client") 73 | (.close (:client synthesiser)))))) 74 | 75 | (defn synthesise [message] 76 | (if-let [cache-input-stream (read-cache message)] 77 | (-> cache-input-stream 78 | (stream/->input-stream) 79 | (audio/input->audio)) 80 | (let [{:keys [client voice audio-config]} synthesiser 81 | input (.. SynthesisInput newBuilder (setText (str message)) build) 82 | response (.synthesizeSpeech client input voice audio-config) 83 | contents (.getAudioContent response) 84 | input-stream (.newInput contents)] 85 | (write-cache! message (stream/->bytes contents)) 86 | (audio/input->audio input-stream)))) 87 | 88 | (defn say! [message] 89 | (future 90 | (log/info "Saying" message) 91 | (->> (synthesise message) 92 | (discord/play!)))) 93 | -------------------------------------------------------------------------------- /KUBE_NOTES.md: -------------------------------------------------------------------------------- 1 | # Snowball on GCP via Kube 2 | 3 | This file is a list of steps I had to take to get Snowball running on Google Cloud Platform through their managed Kubernetes infrastructure. It's partially for my future reference but it may help you out if you're trying to do something similar. 4 | 5 | ```bash 6 | # Basic settings 7 | gcloud config set project snowball-[redacted] 8 | gcloud config set compute/zone europe-west4-b 9 | 10 | # Create a minimal cluster 11 | # TODO: Use a smaller disk 12 | gcloud container clusters create snowball-cluster --num-nodes=1 --disk-size=20 --preemptible 13 | 14 | # Configure kubectl for the new cluster 15 | gcloud container clusters get-credentials snowball-cluster 16 | 17 | # Add the config to the new cluster 18 | # Make sure you've created config/config.edn and config/google.json first! 19 | kubectl create configmap snowball-config --from-file config/ 20 | 21 | # You can update that config with this 22 | # I suppose you could also just delete it and re-create it too 23 | kubectl create configmap snowball-config --from-file config/ -o yaml --dry-run | kubectl replace -f - 24 | 25 | # Deploy the container 26 | kubectl run snowball --image=olical/snowball:... 27 | 28 | # Update the deployment and add the YAML below, it maps the config into the container 29 | # I've also set some lower CPU requirements in this YAML to get them to fit 30 | kubectl edit deployments snowball 31 | 32 | # Check the logs with this 33 | kubectl logs deployment/snowball -f 34 | 35 | # Update to another sha with this 36 | kubectl set image deployment/snowball snowball=olical/snowball:... 37 | ``` 38 | 39 | ## YAML for `kubectl edit deployments snowball` 40 | 41 | We add `volumeMounts` and `volumes`. 42 | 43 | ```yaml 44 | spec: 45 | containers: 46 | - image: olical/snowball:... 47 | imagePullPolicy: IfNotPresent 48 | name: snowball 49 | resources: {} 50 | terminationMessagePath: /dev/termination-log 51 | terminationMessagePolicy: File 52 | volumeMounts: 53 | - name: config-volume 54 | mountPath: /usr/snowball/config 55 | resources: 56 | requests: 57 | cpu: "50m" 58 | dnsPolicy: ClusterFirst 59 | restartPolicy: Always 60 | schedulerName: default-scheduler 61 | securityContext: {} 62 | terminationGracePeriodSeconds: 30 63 | volumes: 64 | - name: config-volume 65 | configMap: 66 | name: snowball-config 67 | ``` 68 | 69 | ## MusicBot 70 | 71 | The music commands are designed for [MusicBot][], you can run that on your Kubernetes cluster too. 72 | 73 | ```bash 74 | # Create some configuration 75 | # You must create musicbot-config/options.ini and musicbot-config/permissions.ini 76 | kubectl create configmap musicbot-config --from-file musicbot-config/ 77 | kubectl create configmap musicbot-i18n --from-file musicbot-config/i18n 78 | 79 | # Deploy the container 80 | kubectl run musicbot --image=justsomebots/musicbot:review 81 | 82 | # Update the YAML just like snowball and add the new config map, example below 83 | kubectl edit deployments musicbot 84 | ``` 85 | 86 | ## MusicBot deployment YAML for config mounting 87 | 88 | ```yaml 89 | spec: 90 | containers: 91 | - image: justsomebots/musicbot:review 92 | imagePullPolicy: IfNotPresent 93 | name: musicbot 94 | resources: {} 95 | terminationMessagePath: /dev/termination-log 96 | terminationMessagePolicy: File 97 | volumeMounts: 98 | - name: config-volume 99 | mountPath: /usr/src/musicbot/config 100 | - name: i18n-volume 101 | mountPath: /usr/src/musicbot/config/i18n 102 | resources: 103 | requests: 104 | cpu: "50m" 105 | dnsPolicy: ClusterFirst 106 | restartPolicy: Always 107 | schedulerName: default-scheduler 108 | securityContext: {} 109 | terminationGracePeriodSeconds: 30 110 | volumes: 111 | - name: config-volume 112 | configMap: 113 | name: musicbot-config 114 | - name: i18n-volume 115 | configMap: 116 | name: musicbot-i18n 117 | ``` 118 | 119 | [MusicBot]: https://github.com/Just-Some-Bots/MusicBot 120 | -------------------------------------------------------------------------------- /musicbot-config/i18n/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd-resetplaylist-response": "オートプレイリストがリセットされました", 3 | "cmd-help-invalid": "コマンドが見つかりません", 4 | "cmd-help-no-perms": "コマンドを実行する権限がありません。 `{}help all` ですべてのコマンドを確認することができます。", 5 | "cmd-help-response": "特定のコマンドのヘルプは `{}help [command]` で確認できます。\n詳細: https://just-some-bots.github.io/MusicBot/", 6 | "cmd-help-all": "\nあなたが実行できるコマンドのみを表示しています。 `{}help all` ですべてのコマンドを確認することができます。", 7 | "cmd-blacklist-invalid": "無効なオプション '{0}' が指定されました。 +, -, add, remove を使用してください。", 8 | "cmd-blacklist-added": "{0} ユーザーがブラックリストに追加されました", 9 | "cmd-blacklist-none": "これらのユーザーはブラックリストに追加されていません", 10 | "cmd-blacklist-removed": "{0} ユーザーがブラックリストから除外されました", 11 | "cmd-id-self": "あなたのIDは `{0}` です", 12 | "cmd-id-other": "**{0}** のIDは `{1}` です", 13 | "cmd-save-exists": "既にオートプレイリストに存在しています", 14 | "cmd-save-invalid": "再生できる曲がありません", 15 | "cmd-save-success": "{0} 曲をオートプレイリストに追加しました", 16 | "cmd-joinserver-response": "ここをクリックしてボットをサーバーに招待: \n{}", 17 | "cmd-play-spotify-album-process": "アルバム `{0}` を処理しています", 18 | "cmd-play-spotify-album-queued": "`{0}` から **{1}** 曲をキューに追加しました", 19 | "cmd-play-spotify-playlist-process": "プレイリスト `{0}` を処理しています", 20 | "cmd-play-spotify-playlist-queued": "`{0}` から **{1}** 曲をキューに追加しました", 21 | "cmd-play-spotify-unsupported": "Spotify URIではありません", 22 | "cmd-play-spotify-invalid": "無効なURI、または問題があります", 23 | "cmd-play-spotify-unavailable": "Spotify URIの設定が行われていません。ボットの設定を確認してください。", 24 | "cmd-play-limit": "あなたのキュー数が上限に達しました ({0})", 25 | "cmd-play-noinfo": "この動画は再生できません。 {0}stream をお試しください。", 26 | "cmd-play-nodata": "検索に失敗しました。youtube-dl がデータを送信していません。問題が継続的に発生する場合は、ボットの再起動が必要です。", 27 | "cmd-play-playlist-error": "キューの追加に失敗しました:\n`{0}`", 28 | "cmd-play-playlist-gathering-1": "プレイリストから {0} 曲の情報を取得しています{1}", 29 | "cmd-play-playlist-gathering-2": "、 完了まで: {0} 秒", 30 | "cmd-play-playlist-maxduration": "曲は追加されませんでした。すべての曲が長さの上限を超えています (%ss)", 31 | "cmd-play-playlist-reply": "**%s** 曲をキューに追加しました。キューの位置: %s", 32 | "cmd-play-playlist-invalid": "このプレイリストは再生できません", 33 | "cmd-play-playlist-process": "{0} 曲を処理中...", 34 | "cmd-play-playlist-queueerror": "プレイリスト {0} のキュー追加に失敗しました", 35 | "cmd-play-playlist-skipped": "\nまた、現在の曲は長すぎるためスキップされました", 36 | "cmd-play-playlist-reply-secs": "{0} 曲がキューに追加されました。処理時間: {1}", 37 | "cmd-play-song-limit": "曲の長さが上限を超えています ({0} > {1})", 38 | "cmd-play-song-reply": "`%s` をキューに追加しました。キューの位置: %s", 39 | "cmd-play-next": "次に再生!", 40 | "cmd-play-eta": " - 再生まで: %s", 41 | "cmd-play-badextractor": "このサービスから曲を再生する権限がありません", 42 | "cmd-stream-limit": "あなたのキュー数が上限に達しました ({0})", 43 | "cmd-stream-success": "ストリーム再生中", 44 | "cmd-search-limit": "あなたのプレイリスト項目数の上限に達しました ({0})", 45 | "cmd-search-noquery": "検索クエリを指定してください\n%s", 46 | "cmd-search-noquote": "検索クエリを正しく入力してください", 47 | "cmd-search-searchlimit": "%s 本より多くの動画を検索することはできません", 48 | "cmd-search-searching": "動画を検索しています...", 49 | "cmd-search-none": "動画が見つかりませんでした", 50 | "cmd-search-result": "結果 {0}/{1}: {2}", 51 | "cmd-search-accept": "了解、再生します!", 52 | "cmd-search-decline": "はーい :(", 53 | "cmd-np-action-streaming": "ストリーム再生中", 54 | "cmd-np-action-playing": "再生中", 55 | "cmd-np-reply-author": "{action}: **{title}** - **{author}** が追加\n再生位置: {progress_bar} {progress}\n:point_right: <{url}>", 56 | "cmd-np-reply-noauthor": "{action}: **{title}**\n再生位置: {progress_bar} {progress}\n:point_right: <{url}>", 57 | "cmd-np-none": "キューに曲がありません! {0}play で曲を追加できます。", 58 | "cmd-summon-novc": "ボイスチャンネルに参加していません!", 59 | "cmd-summon-noperms-connect": "ボイスチャンネル `{0}` に参加できません。権限がありません。", 60 | "cmd-summon-noperms-speak": "ボイスチャンネル `{0}` に参加できません。発言の権限がありません。", 61 | "cmd-summon-reply": "`{0.name}` に接続しました", 62 | "cmd-pause-reply": "`{0.name}` で再生が一時停止されました", 63 | "cmd-pause-none": "プレイヤーが再生中ではありません", 64 | "cmd-resume-reply": "`{0.name}` で再生が再開されました", 65 | "cmd-resume-none": "プレイヤーが一時停止中ではありません", 66 | "cmd-shuffle-reply": "`{0}` のキューがシャッフルされました", 67 | "cmd-clear-reply": "`{0}` のキューがクリアされました", 68 | "cmd-remove-none": "削除するものがありません!", 69 | "cmd-remove-reply": "`{1}` が追加した `{0}` を削除しました", 70 | "cmd-remove-missing": "ユーザー `%s` が追加したキューは見つかりませんでした", 71 | "cmd-remove-noperms": "キューからこの項目を削除する権限がありません。あなたが追加した項目である、または強制スキップの権限があることを確認してください。", 72 | "cmd-remove-invalid": "無効な数字です。 {}queue でキューの位置を確認してください。", 73 | "cmd-remove-reply-author": "`{1}` が追加した `{0}` を削除しました", 74 | "cmd-remove-reply-noauthor": "`{0}` を削除しました。", 75 | "cmd-skip-none": "スキップできません!プレイヤーが再生中ではありません!", 76 | "cmd-skip-dl": "次の曲 (`%s`) はダウンロード中です。しばらくお待ちください。", 77 | "cmd-skip-force": "`{}` を強制スキップしました", 78 | "cmd-skip-force-noperms": "強制スキップの権限がありません", 79 | "cmd-skip-reply-skipped-1": "`{0}` のスキップをリクエストしました。\n投票により曲がスキップされました。{1}", 80 | "cmd-skip-reply-skipped-2": " まもなく次の曲が再生されます!", 81 | "cmd-skip-reply-voted-1": "`{0}` のスキップをリクエストしました。\nスキップには残り **{1}** {2}賛成が必要です。", 82 | "cmd-skip-reply-voted-2": "人の", 83 | "cmd-skip-reply-voted-3": "人の", 84 | "cmd-volume-current": "現在の音量: `%s%%`", 85 | "cmd-volume-invalid": "`{0}` は無効な数字です", 86 | "cmd-volume-reply": "音量が **%d** から **%d** に変更されました", 87 | "cmd-volume-unreasonable-relative": "音量の変更ができません: {}{:+} -> {}%。 {} から {:+} の間の値を指定してください。", 88 | "cmd-volume-unreasonable-absolute": "音量の変更ができません: {}%。 1 から 100 の間の値を指定してください。", 89 | "cmd-option-autoplaylist-enabled": "オートプレイリストは既に有効です!", 90 | "cmd-option-autoplaylist-disabled": "オートプレイリストは既に無効です!", 91 | "cmd-option-autoplaylist-none": "オートプレイリストに曲がありません", 92 | "cmd-option-invalid-value": "指定された値は無効です", 93 | "cmd-option-invalid-param": "指定されたパラメータは無効です", 94 | "cmd-queue-more": "\n... 他 %s 曲", 95 | "cmd-queue-none": "キューに曲がありません! {}play で曲を追加できます。", 96 | "cmd-queue-playing-author": "再生中: `{0}` - `{1}` が追加{2}\n", 97 | "cmd-queue-playing-noauthor": "再生中: `{0}` {1}\n", 98 | "cmd-queue-entry-author": "{0} -- `{1}` - `{2}` が追加", 99 | "cmd-queue-entry-noauthor": "{0} -- `{1}`", 100 | "cmd-clean-invalid": "無効なパラメータです。削除する件数を入力してください。", 101 | "cmd-clean-reply": "{0} 件のメッセージを削除しました{1}", 102 | "playlists-noperms": "プレイリストを追加する権限がありません", 103 | "playlists-big": "プレイリストの曲数が多すぎます ({0} > {1})", 104 | "playlists-limit": "プレイリストの曲数 と あなたが既にキューに追加した曲数の合計が上限を超えています ({0} + {1} > {2})", 105 | "karaoke-enabled": "カラオケモードが有効です。無効にしてからお試しください!" 106 | } -------------------------------------------------------------------------------- /musicbot-config/example_permissions.ini: -------------------------------------------------------------------------------- 1 | ; DON'T OPEN THIS FILE WITH NOTEPAD. If you don't have a preferred text editor, use notepad++ or any other modern text editor. 2 | ; 3 | ; If you edit this file, Save-As permissions.ini 4 | ; 5 | ; 6 | ; Basics: 7 | ; - Semicolons are comment characters, any line that starts with one is ignored. 8 | ; - Sections headers are permissions groups, they're the lines that have a word in [Brackets]. You can add more for more permissions groups. 9 | ; - Options with a semicolon before them will be ignored. 10 | ; - Add whatever permissions you want, but always have at least one. 11 | ; - Never have an options without a value, i.e. "CommandBlacklist = " 12 | ; - [Default] is a special section. Any user that doesn't get assigned to a group via role or UserList gets assigned to this group. 13 | ; 14 | ; 15 | ; Option info: 16 | ; 17 | ; [Groupname] 18 | ; This is the section header. The word is the name of the group, just name it something appropriate for its permissions. 19 | ; 20 | ; CommandWhitelist = command1 command2 21 | ; List of commands users are allowed to use, separated by spaces. Don't include the prefix, i.e. ! Overrides CommandBlacklist if set. 22 | ; 23 | ; CommandBlacklist = command1 command2 24 | ; List if commands users are not allowed to use. You don't need to use both 25 | ; whitelist and blacklist since blacklist gets overridden. Just pick one. 26 | ; 27 | ; IgnoreNonVoice = command1 command2 28 | ; List of commands that the user is required to be in the same voice channel as the bot to use. 29 | ; For example, if you don't want the user to be able to voteskip songs while not in the voice channel, add skip to this option. 30 | ; 31 | ; GrantToRoles = 111222333444555 999888777000111 32 | ; List of ids to automatically grant this group to. To get the id of a role, use the listids command. 33 | ; 34 | ; UserList = 21343341324 321432413214321 35 | ; List of user ids to grant this group to. This option overrides the role granted by the GrantToRoles option. 36 | ; 37 | ; MaxSongLength = 600 38 | ; Maximum length of a song in seconds. Note: This won't always work if the song data doesn't have duration listed. 39 | ; This doesn't happen often, but youtube, soundcloud, etc work fine though. This will be fixed in a future update. 40 | ; A value of 0 means unlimited. 41 | ; 42 | ; MaxSongs = 5 43 | ; Maximum number of songs a user is allowed to queue. A value of 0 means unlimited. 44 | ; 45 | ; MaxPlaylistLength = 10 46 | ; Maximum number of songs a playlist is allowed to have to be queued. A value of 0 means unlimited. 47 | ; 48 | ; MaxSearchItems = 10 49 | ; The maximum number of items that can be returned in a search. 50 | ; 51 | ; AllowPlaylists = yes 52 | ; Whether or not the user is allowed to queue entire playlists. 53 | ; 54 | ; InstaSkip = no 55 | ; Allows the user to skip a song without having to vote, like the owner. 56 | ; 57 | ; Remove = no 58 | ; Allows the user to remove any song from the queue at any point. 59 | ; 60 | ; SkipWhenAbsent = yes 61 | ; Tells the bot to automatically skip songs queued by people in this group who have left the voice channel after queueing. 62 | ; Will only skip once the song is about to play. 63 | ; 64 | ; BypassKaraokeMode = no 65 | ; Allows the user to queue songs even when karaoke mode is activated. 66 | ; 67 | ; Extractors = example1 example2 68 | ; Specify the name of youtube-dl extractors that people will be able to play using the bot. Seperated by spaces. 69 | ; This is to allow restriction of playing porn videos through the bot, as these are supported by yt-dl. Leave blank to allow all. 70 | ; For a list of possible extractors, see https://github.com/rg3/youtube-dl/tree/master/youtube_dl/extractor 71 | ; 72 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 73 | 74 | 75 | ; I've set some example groups, these should be fine. Just add your roles or users and you should be good to go. 76 | 77 | ;;;;;;;;;;;;;;;;;;; 78 | ; 79 | ; AND HEY. 80 | ; Before you ask any dumb "how do I do this" questions in the help server, you should probably read that big comment I put time 81 | ; into writing for this exact purpose. It tells you how to use every option. Your question is probably answered there. 82 | ; 83 | ;;;;;;;;;;;;;;;;;;; 84 | 85 | ; This is the fallback group for any users that don't get assigned to another group. Don't remove/rename this group. 86 | ; You cannot assign users or roles to this group. Those options are ignored. 87 | [Default] 88 | CommandWhitelist = play perms queue np skip search id help clean 89 | ; CommandBlacklist = 90 | IgnoreNonVoice = play skip search 91 | MaxSongLength = 1200 92 | MaxSongs = 0 93 | MaxSearchItems = 10 94 | AllowPlaylists = yes 95 | ; MaxPlaylistLength = 20 96 | InstaSkip = no 97 | Remove = no 98 | SkipWhenAbsent = no 99 | BypassKaraokeMode = no 100 | Extractors = generic youtube soundcloud 101 | 102 | ; This group has full permissions. 103 | [MusicMaster] 104 | ; GrantToRoles = 105 | ; UserList = 106 | MaxSongLength = 0 107 | MaxSongs = 0 108 | MaxPlaylistLength = 0 109 | MaxSearchItems = 20 110 | AllowPlaylists = yes 111 | InstaSkip = yes 112 | Remove = yes 113 | SkipWhenAbsent = no 114 | BypassKaraokeMode = yes 115 | Extractors = 116 | 117 | ; This group can't use the blacklist and listids commands, but otherwise has full permissions. 118 | [DJ] 119 | CommandBlacklist = blacklist listids 120 | ; GrantToRoles = 121 | ; UserList = 122 | MaxSongLength = 0 123 | MaxSongs = 0 124 | MaxPlaylistLength = 0 125 | MaxSearchItems = 20 126 | AllowPlaylists = yes 127 | InstaSkip = yes 128 | Remove = yes 129 | SkipWhenAbsent = no 130 | BypassKaraokeMode = yes 131 | Extractors = generic youtube soundcloud 132 | 133 | ; This group can only use the listed commands, can only use play/skip when in the bot's voice channel, 134 | ; can't request songs longer than 3 and a half minutes, and can only request a maximum of 8 songs at a time. 135 | [Limited] 136 | CommandWhitelist = play queue np perms help skip 137 | ; CommandBlacklist = 138 | IgnoreNonVoice = play skip 139 | ; GrantToRoles = 140 | MaxSongLength = 210 141 | MaxSongs = 8 142 | MaxSearchItems = 10 143 | AllowPlaylists = yes 144 | InstaSkip = no 145 | Remove = no 146 | SkipWhenAbsent = yes 147 | BypassKaraokeMode = no 148 | Extractors = youtube 149 | -------------------------------------------------------------------------------- /musicbot-config/i18n/kr.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd-resetplaylist-response": "서버의 자동재생리스트가 리셋되었습니다.", 3 | "cmd-help-invalid": "명령어를 찾을 수 없습니다.", 4 | "cmd-help-no-perms": "당신은 안타깝지만 명령어를 사용할 권한이 없어요.. 그나저나 {}help all 명령어를 통해서 명령어 리스트를 볼 수 있답니다", 5 | "cmd-help-response": "특정 명령어에 대한 정보는, {}help [명령어] 형식으로 사용하세요\n더 많은 도움이 필요하다면, 깃허브를 참고하세요 (: https://just-some-bots.github.io/MusicBot/", 6 | "cmd-help-all": "\n보여지는 명령어들만 사용할 수 있습니다. 명령어 목록이 필요하다면, `{}help all` 를 쳐보세요", 7 | "cmd-blacklist-invalid": "잘못된 옵션 '{0}' , +, -, add, 또는 remove를 사용해보세요", 8 | "cmd-blacklist-added": "사용자 {0}가 블랙리스트에 추가되었습니다.", 9 | "cmd-blacklist-none": "블랙리스트에 존재하지 않는 사용자들입니다.", 10 | "cmd-blacklist-removed": "사용자 {0}가 블랙리스트에서 제거되었습니다.", 11 | "cmd-id-self": "당신의 ID는 `{0}`입니다", 12 | "cmd-id-other": "**{0}**의 ID 는 `{1}`입니다", 13 | "cmd-save-exists": "이 노래는 이미 자동재생에 있어요.", 14 | "cmd-save-invalid": "유효하는 노래가 없습니다.", 15 | "cmd-save-success": "<{0}>가 자동재생 리스트에 추가되었습니다.", 16 | "cmd-joinserver-response": "여기를 클릭해 서버에 추가하세요!: \n{}", 17 | "cmd-play-spotify-album-process": "재생중인 앨범 `{0}`", 18 | "cmd-play-spotify-album-queued": "추가됨 `{0}`, **{1}** ", 19 | "cmd-play-spotify-playlist-process": "재생중인 재생목록 `{0}`", 20 | "cmd-play-spotify-playlist-queued": "추가됨 `{0}` , **{1}** ", 21 | "cmd-play-spotify-unsupported": "지원하는 Spotify URL이 아니에요.", 22 | "cmd-play-spotify-invalid": "잘못된 URL이거나, 뭔가 문제가 있는 것 같네요.", 23 | "cmd-play-spotify-unavailable": "봇이 Spotify URL을 지원하도록 설정되지 않았네요. 설정을 확인해보세요.", 24 | "cmd-play-limit": "설정한 최대 곡수에 도달했어요 ({0})", 25 | "cmd-play-noinfo": "그 영상은 플레이될 수 없어요. {0}stream 명령어를 이용해보세요.", 26 | "cmd-play-nodata": "검색에 실패했습니다 .youtube-dl이 데이터를 전송하지 않습니다. 문제가 지속적으로 발생하는 경우에는 봇을 다시 시작해야합니다..", 27 | "cmd-play-playlist-error": "에러로 인해 대기열 추가 실패:\n`{0}`", 28 | "cmd-play-playlist-gathering-1": "재생 목록에서 {0} 곡의 정보를 얻을 수 있습니다 {1}", 29 | "cmd-play-playlist-gathering-2": ", 완료까지 : {0} 초", 30 | "cmd-play-playlist-maxduration": "모든 노래가 길이 제한을 초과했기 때문에 추가되지 않았습니다. (%ss)", 31 | "cmd-play-playlist-reply": "**%s** 가 대기열에 추가됨. 위치: %s", 32 | "cmd-play-playlist-invalid": "재생목록을 재생할 수 없습니다.", 33 | "cmd-play-playlist-process": "{0} 처리중...", 34 | "cmd-play-playlist-queueerror": "재생목록 {0} 대기열 추가 실패.", 35 | "cmd-play-playlist-skipped": "\n또한, 현재 노래는 길이제한을 초과하므로 생략되었음.", 36 | "cmd-play-playlist-reply-secs": "{0} 곡이 대기열에 추가되었습니다. 재생까지 남은 시간 : {1}", 37 | "cmd-play-song-limit": "곡의 길이를 초과합니다 ({0} > {1})", 38 | "cmd-play-song-reply": "`%s` 를 대기열에 추가함. 위치 : %s", 39 | "cmd-play-next": "다음!", 40 | "cmd-play-eta": " - 재생까지 남은 시간 : %s", 41 | "cmd-play-badextractor": "이 서비스에서 음악을 재생할 수있는 권한이 없습니다.", 42 | "cmd-stream-limit": "설정한 최대 곡수에 도달했어요 ({0})", 43 | "cmd-stream-success": "스트리밍중.", 44 | "cmd-search-limit": "설정한 재생항목의 항목 수 제한을 초과했어요 ({0})", 45 | "cmd-search-noquery": "검색어를 지정해주세요.\n%s", 46 | "cmd-search-noquote": "더 정확하게 검색어를 지정해주세요.", 47 | "cmd-search-searchlimit": " %s 보다 더 많은 영상을 검색할수는 없습니다", 48 | "cmd-search-searching": "영상 검색중...", 49 | "cmd-search-none": "검색결과 없음.", 50 | "cmd-search-result": "결과 {0}/{1}: {2}", 51 | "cmd-search-accept": "좋아, 가즈아ㅏㅏ!", 52 | "cmd-search-decline": "헐, 이런 :(", 53 | "cmd-np-action-streaming": "스트리밍 중", 54 | "cmd-np-action-playing": "재생 중", 55 | "cmd-np-reply-author": "{action}: **{title}** - **{author}**이 추가\n진행 상황: {progress_bar} {progress}\n:point_right: <{url}>", 56 | "cmd-np-reply-noauthor": "{action}: **{title}**\n진행 상황: {progress_bar} {progress}\n:point_right: <{url}>", 57 | "cmd-np-none": "큐에 곡이없잖아! 재생할 노래를 줘 {0}play.", 58 | "cmd-summon-novc": "먼저 음성 채널에 들어가!", 59 | "cmd-summon-noperms-connect": "`{0}`에 참여할 수가 없어요... `{0}`, 권한이 없네요", 60 | "cmd-summon-noperms-speak": "`{0}`에 참여할 수가 없어요..., 나에게 발언권을 주세요...", 61 | "cmd-summon-reply": "`{0.name}`로 간드아ㅏㅏㅏ", 62 | "cmd-pause-reply": "`{0.name}`에서 틀던노래 멈췄어요", 63 | "cmd-pause-none": "플레이어가 재생중이 아니에요.", 64 | "cmd-resume-reply": "다시 재생! `{0.name}`", 65 | "cmd-resume-none": "플레이어가 정지되지않았어요.", 66 | "cmd-shuffle-reply": "대기열 `{0}` 쉐낏쉐낏", 67 | "cmd-clear-reply": "대기열 `{0}`을 다 갖다버렸어요", 68 | "cmd-remove-none": "지울게 없는데요?", 69 | "cmd-remove-reply": "`{1}`가 추가한 `{0}`을 삭제했어요", 70 | "cmd-remove-missing": "`%s`가 추가한게 대기열에 없는 것 같네요", 71 | "cmd-remove-noperms": "당신은 대기열에 있는 항목을 삭제할 수 있는 권한이 없어요, 당신이 추가 한 항목이거나 강제 스킵 권한이 있는지 확인해주세요", 72 | "cmd-remove-invalid": "잘못된 숫자에요. {}queue 를 사용해서 대기열 번호를 확인해주세요.", 73 | "cmd-remove-reply-author": "`{1}`가 추가 한`{0}`을 삭제했습니다", 74 | "cmd-remove-reply-noauthor": "`{0}` 삭제했어요", 75 | "cmd-skip-none": "재생중이 아니라 스킵할 수 없어요!", 76 | "cmd-skip-dl": "다음 노래 (`%s`) 가 다운로드 중이에요 기다려 주세요 (:.", 77 | "cmd-skip-force": "강제로 건너뛰었습니다 `{}`.", 78 | "cmd-skip-force-noperms": "강제 스킵 권한이 없습니다.", 79 | "cmd-skip-reply-skipped-1": "당신의 `{0}` 건너뛰기가 성공적이었어요.\n투표가 통과되어 노래가 스킵되었습니다.{1}", 80 | "cmd-skip-reply-skipped-2": " 다음 노래 가즈아ㅏ!", 81 | "cmd-skip-reply-voted-1": "당신의 `{0}` 건너뛰기 요청은 성공적이었어요.\n이제는 **{1}** {2} 표가 필요해요.", 82 | "cmd-skip-reply-voted-2": "사람의", 83 | "cmd-skip-reply-voted-3": "사람들의", 84 | "cmd-volume-current": "현재 볼륨: `%s%%`", 85 | "cmd-volume-invalid": "`{0}` 유효한 숫자가 아니네요 :(", 86 | "cmd-volume-reply": "볼륨 설정이 변경되었습니다 **%d** 에서 **%d** 으로.", 87 | "cmd-volume-unreasonable-relative": "볼륨 설정을 변경할 수 없습니다: {}{:+} -> {}%. {} 에서 {:+} 사이의 값으로 조절해주세요.", 88 | "cmd-volume-unreasonable-absolute": "볼륨 설정을 변경할 수 없습니다: {}%. 1에서 100까지의 값으로 조절해주세요.", 89 | "cmd-option-autoplaylist-enabled": "자동재생목록은 이미 쌩쌩합니다!", 90 | "cmd-option-autoplaylist-disabled": "자동재생목록은 이미 죽었어요..", 91 | "cmd-option-autoplaylist-none": "자동재생목록에 아무것도 없네요..", 92 | "cmd-option-invalid-value": "지정된 값이 잘못되었어요.", 93 | "cmd-option-invalid-param": "잘못된 파라미터에요.", 94 | "cmd-queue-more": "\n... 다른 %s 곡", 95 | "cmd-queue-none": "대기열에 노래가 없어요! {}play로 추가해주세요.", 96 | "cmd-queue-playing-author": "재생 중: `{0}` - `{1}` 이 추가 {2}\n", 97 | "cmd-queue-playing-noauthor": "재생 중: `{0}` {1}\n", 98 | "cmd-queue-entry-author": "{0} -- `{1}`, `{2}`가 추가", 99 | "cmd-queue-entry-noauthor": "{0} -- `{1}`", 100 | "cmd-clean-invalid": "잘못된 파라미터 입니다. 메시지의 개수를 입력하세요.", 101 | "cmd-clean-reply": "삭제됨 {0}개의 메시지{1}.", 102 | "playlists-noperms": "재생목록을 추가할 권한이 없음", 103 | "playlists-big": "재생목록에 항목이 너무 많아요 ({0} > {1})", 104 | "playlists-limit": "재생 목록의 곡 수와 당신이 이미 큐에 추가 한 곡수의 합계가 상한을 초과합니다 ({0} + {1} > {2})", 105 | "karaoke-enabled": "노래방 모드가 활성화되어있어요. 해제하고 시도해주세요" 106 | } -------------------------------------------------------------------------------- /src/clojure/snowball/discord.clj: -------------------------------------------------------------------------------- 1 | (ns snowball.discord 2 | (:require [clojure.string :as str] 3 | [clojure.core.async :as a] 4 | [bounce.system :as b] 5 | [taoensso.timbre :as log] 6 | [camel-snake-kebab.core :as csk] 7 | [snowball.config :as config] 8 | [snowball.util :as util]) 9 | (:import [sx.blah.discord.api ClientBuilder] 10 | [sx.blah.discord.util.audio AudioPlayer] 11 | [sx.blah.discord.handle.audio IAudioReceiver] 12 | [sx.blah.discord.api.events IListener])) 13 | 14 | (defn event->keyword [c] 15 | (-> (str c) 16 | (str/split #"\.") 17 | (last) 18 | (str/replace #"Event.*$" "") 19 | (csk/->kebab-case-keyword))) 20 | 21 | (defmulti handle-event! (fn [c] (event->keyword c))) 22 | (defmethod handle-event! :default [_] nil) 23 | 24 | (declare client) 25 | 26 | (defn ready? [] 27 | (some-> client .isReady)) 28 | 29 | (defn poll-until-ready [] 30 | (let [poll-ms (get-in config/value [:discord :poll-ms])] 31 | (log/info "Connected, waiting until ready") 32 | (util/poll-while poll-ms (complement ready?) #(log/info "Not ready, sleeping for" (str poll-ms "ms"))) 33 | (log/info "Ready"))) 34 | 35 | (defn channels [] 36 | (some-> client .getVoiceChannels seq)) 37 | 38 | (defn channel-users [channel] 39 | (some-> channel .getConnectedUsers seq)) 40 | 41 | (defn current-channel [] 42 | (some-> client .getConnectedVoiceChannels seq first)) 43 | 44 | (defn ->name [entity] 45 | (some-> entity .getName)) 46 | 47 | (defn ->id [entity] 48 | (some-> entity .getLongID)) 49 | 50 | (defn leave! [channel] 51 | (when channel 52 | (log/info "Leaving" (->name channel)) 53 | (.leave channel))) 54 | 55 | (defn join! [channel] 56 | (when channel 57 | (log/info "Joining" (->name channel)) 58 | (.join channel))) 59 | 60 | (defn bot? [user] 61 | (some-> user .isBot)) 62 | 63 | (defn muted? [user] 64 | (when user 65 | (let [voice-state (first (.. user getVoiceStates values))] 66 | (or (.isMuted voice-state) 67 | (.isSelfMuted voice-state) 68 | (.isSuppressed voice-state))))) 69 | 70 | (defn can-speak? [user] 71 | (not (or (bot? user) (muted? user)))) 72 | 73 | (defn has-speaking-users? [channel] 74 | (->> (channel-users channel) 75 | (filter can-speak?) 76 | (seq) 77 | (boolean))) 78 | 79 | (defn default-guild [] 80 | (some-> client .getGuilds seq first)) 81 | 82 | (defn guild-users [] 83 | (some-> (default-guild) .getUsers)) 84 | 85 | (defn guild-text-channels [] 86 | (some-> (default-guild) .getChannels)) 87 | 88 | (defn guild-voice-channels [] 89 | (some-> (default-guild) .getVoiceChannels)) 90 | 91 | (defn move-user-to-voice-channel [user channel] 92 | (when (and user channel) 93 | (try 94 | (.moveToVoiceChannel user channel) 95 | (catch Exception e 96 | (log/warn "Tried to move a user to a voice channel that isn't connected to voice already"))))) 97 | 98 | (defn play! [audio] 99 | (when audio 100 | (when-let [guild (default-guild)] 101 | (doto (AudioPlayer/getAudioPlayerForGuild guild) 102 | (.clear) 103 | (.queue audio))))) 104 | 105 | (defn send! [channel-id message] 106 | (when-let [channel (.getChannelByID (default-guild) channel-id)] 107 | (log/info "Sending message to" channel-id "-" message) 108 | (.sendMessage channel message))) 109 | 110 | (defmethod handle-event! :reconnect-success [_] 111 | (log/info "Reconnection detected, leaving any existing voice channels to avoid weird state") 112 | (poll-until-ready) 113 | (when-let [channel (current-channel)] 114 | (leave! channel))) 115 | 116 | (defn audio-manager [] 117 | (some-> (default-guild) .getAudioManager)) 118 | 119 | (defrecord AudioEvent [audio user]) 120 | 121 | (defn subscribe-audio! [f] 122 | (let [sub! (atom nil) 123 | closed?! (atom false) 124 | sub-chan (a/go-loop [] 125 | (when-not @closed?! 126 | (a/id %)) (discord/channel-users (discord/current-channel)))) 30 | (discord/send! channel "!summon")) 31 | 32 | (discord/send! channel (str "!" command))) 33 | (do 34 | (log/info "Tried to use a music bot command without {:command {:music {:channel ...}}} being set") 35 | (speech/say! "You need to set the command music channel setting if you want me to control the music bot")))) 36 | (catch Exception e 37 | (log/error "Error while executing music command" e)))) 38 | 39 | (defn handle-command! [{:keys [phrase user]}] 40 | (condp re-find phrase 41 | 42 | #"say (.*)" :>> 43 | (fn [[_ content]] 44 | (log/info "Saying:" content) 45 | (speech/say! content)) 46 | 47 | #"who's a good boy" :>> 48 | (fn [_] 49 | (log/info "Acknowledging that I'm a good boy") 50 | (speech/say! "I'm a good boy! It's me! I'm the good boy! Woof!")) 51 | 52 | #"play (.*)" :>> 53 | (fn [[_ song]] 54 | (music-command! (str "play " song))) 55 | 56 | #"(pause|stop)" :>> 57 | (fn [_] 58 | (music-command! "pause")) 59 | 60 | #"(resume|unpause)" :>> 61 | (fn [_] 62 | (music-command! "resume")) 63 | 64 | #"skip" :>> 65 | (fn [_] 66 | (music-command! "skip")) 67 | 68 | #"summon" :>> 69 | (fn [_] 70 | (music-command! "summon")) 71 | 72 | #"dismiss" :>> 73 | (fn [_] 74 | (music-command! "disconnect")) 75 | 76 | #"clear" :>> 77 | (fn [_] 78 | (music-command! "clear")) 79 | 80 | #".*volume.*" :>> 81 | (fn [command] 82 | (condp re-find command 83 | #"(increase|up|raise).*?(\d+)" :>> 84 | (fn [[_ _ amount]] 85 | (music-command! (str "volume +" amount))) 86 | 87 | #"(decrease|down|lower).*?(\d+)" :>> 88 | (fn [[_ _ amount]] 89 | (music-command! (str "volume -" amount))) 90 | 91 | #"(increase|up|raise)" :>> 92 | (fn [_] 93 | (music-command! "volume +15")) 94 | 95 | #"(decrease|down|lower)" :>> 96 | (fn [_] 97 | (music-command! "volume -15")) 98 | 99 | #"(\d+)" :>> 100 | (fn [[_ amount]] 101 | (music-command! (str "volume " amount))) 102 | 103 | (speech/say! "I need at least a number to set the volume."))) 104 | 105 | #".*move.*" :>> 106 | (fn [command] 107 | (letfn [(->name [x] (when x (-> x (cond-> (not (string? x)) discord/->name) util/sanitise-entity))) 108 | (->names-list [xs] (str/join ", " (map discord/->name xs))) 109 | (included [s targets] (filter #(str/includes? s (->name %)) targets))] 110 | (let [channels (discord/channels) 111 | users (into #{} (mapcat discord/channel-users) channels) 112 | target-channel (->> (included command (conj channels "this channel" "my channel" "our channel" "here")) 113 | (map (fn [x] 114 | (case x 115 | ("this channel" "my channel" "our channel" "here") (discord/current-channel) 116 | x))) 117 | (first)) 118 | target-users (into #{} 119 | (mapcat (fn [x] 120 | (case x 121 | ("me" "myself") [user] 122 | "everyone" users 123 | [x]))) 124 | (included command (conj users "me" "myself" "everyone")))] 125 | (if (and target-channel (seq target-users)) 126 | (do 127 | (log/info "Moving" (->names-list target-users) "to" (->name target-channel)) 128 | (doseq [user target-users] 129 | (discord/move-user-to-voice-channel user target-channel))) 130 | (do 131 | (log/info "Invalid move for users" (->names-list target-users) "to" (->name target-channel)) 132 | (speech/say! "I need usernames and a channel name to do that.")))))) 133 | 134 | #"(ignore|no|nevermind|fuck off|go away|get lost|fuck you)" :>> 135 | (fn [_] 136 | (log/info "Going back to sleep") 137 | (acknowledge!)) 138 | 139 | (do 140 | (log/info "Couldn't find a matching command") 141 | (speech/say! "Sorry, I didn't recognise that command.")))) 142 | 143 | (b/defcomponent dispatcher {:bounce/deps #{comprehension/phrase-text-chan speech/synthesiser config/value}} 144 | (log/info "Starting command dispatcher loop") 145 | 146 | (swap! comprehension/extra-phrases! into 147 | #{"say" "play" "pause" "pause the music" "stop" 148 | "stop the music" "resume" "resume the music" 149 | "unpause" "unpause the music" "skip" "skip this song" 150 | "summon" "dismiss" "clear" "clear the queue" "reduce" 151 | "increase" "volume" "music" "up" "down" "move" 152 | "everyone" "me" "myself" "here" "this" "my" "our" "channel"}) 153 | 154 | (a/go-loop [] 155 | (when-let [{:keys [user phrase] :as command} (a/name user)] 158 | (log/info (str "Handling phrase from " user-name ": " phrase))) 159 | (handle-command! command) 160 | (catch Exception e 161 | (log/error "Caught error in dispatcher loop" e))) 162 | (recur)))) 163 | -------------------------------------------------------------------------------- /musicbot-config/example_options.ini: -------------------------------------------------------------------------------- 1 | [Credentials] 2 | # This is your Discord bot account token. 3 | # Find your bot's token here: https://discordapp.com/developers/applications/me/ 4 | # Create a new application, with no redirect URI or boxes ticked. 5 | # Then click 'Create Bot User' on the application page and copy the token here. 6 | Token = bot_token 7 | 8 | # The bot supports converting Spotify links and URIs to YouTube videos and 9 | # playing them. To enable this feature, please fill in these two options with valid 10 | # details, following these instructions: https://just-some-bots.github.io/MusicBot/using/spotify/ 11 | Spotify_ClientID = 12 | Spotify_ClientSecret = 13 | 14 | [Permissions] 15 | # This option determines which user has full permissions and control of the bot. 16 | # You can only set one owner, but you can use permissions.ini to give other 17 | # users access to more commands. 18 | # Setting this option to 'auto' will set the owner of the bot to the person who 19 | # created the bot application, which is usually what you want. Else, change it 20 | # to another user's ID. 21 | OwnerID = auto 22 | 23 | # This option determines which users have access to developer-only commands. 24 | # Developer only commands are very dangerous and may break your bot if used 25 | # incorrectly, so it's highly recommended that you ignore this option unless you 26 | # are familiar with Python code. 27 | DevIDs = 28 | 29 | [Chat] 30 | # Determines the prefix that must be used before commands in the Discord chat. 31 | # e.g if you set this to *, the play command would be triggered using *play. 32 | CommandPrefix = ! 33 | 34 | # Restricts the bot to only listening to certain text channels. To use this, add 35 | # the IDs of the text channels you would like the bot to listen to, seperated by 36 | # a space. 37 | BindToChannels = 38 | 39 | # Allows the bot to automatically join servers on startup. To use this, add the IDs 40 | # of the voice channels you would like the bot to join on startup, seperated by a 41 | # space. Each server can have one channel. If this option and AutoSummon are 42 | # enabled, this option will take priority. 43 | AutojoinChannels = 44 | 45 | [MusicBot] 46 | # The volume of the bot, between 0.01 and 1.0. 47 | DefaultVolume = 0.25 48 | 49 | # Only allows whitelisted users (in whitelist.txt) to use commands. 50 | # WARNING: This option has been deprecated and will be removed in a future version 51 | # of the bot. Use permissions.ini instead. 52 | WhiteListCheck = no 53 | 54 | # The number of people voting to skip in order for a song to be skipped successfully, 55 | # whichever value is lower will be used. Ratio refers to the percentage of undefeaned, non- 56 | # owner users in the channel. 57 | SkipsRequired = 1 58 | SkipRatio = 0.5 59 | 60 | # Determines if downloaded videos will be saved to the audio_cache folder. If this is yes, 61 | # they will not be redownloaded if found in the folder and queued again. Else, videos will 62 | # be downloaded to the folder temporarily to play, then deleted after to avoid filling space. 63 | SaveVideos = yes 64 | 65 | # Mentions the user who queued a song when it starts to play. 66 | NowPlayingMentions = no 67 | 68 | # Automatically joins the owner's voice channel on startup, if possible. The bot must be on 69 | # the same server and have permission to join the channel. 70 | AutoSummon = no 71 | 72 | # Start playing songs from the autoplaylist.txt file after joining a channel. This does not 73 | # stop users from queueing songs, you can do that by restricting command access in permissions.ini. 74 | UseAutoPlaylist = no 75 | 76 | # Sets if the autoplaylist should play through songs in a random order when enabled. If no, 77 | # songs will be played in a sequential order instead. 78 | AutoPlaylistRandom = yes 79 | 80 | # Pause the music when nobody is in a voice channel, until someone joins again. 81 | AutoPause = yes 82 | 83 | # Automatically cleanup the bot's messages after a small period of time. 84 | DeleteMessages = yes 85 | 86 | # If this and DeleteMessages is enabled, the bot will also try to delete messages from other 87 | # users that called commands. The bot requires the 'Manage Messages' permission for this. 88 | DeleteInvoking = no 89 | 90 | # Regularly saves the queue to the disk. If the bot is then shut down, the queue will 91 | # resume from where it left off. 92 | PersistentQueue = yes 93 | 94 | # Determines what messages are logged to the console. The default level is INFO, which is 95 | # everything an average user would need. Other levels include CRITICAL, ERROR, WARNING, 96 | # DEBUG, VOICEDEBUG, FFMPEG, NOISY, and EVERYTHING. You should only change this if you 97 | # are debugging, or you want the bot to have a quieter console output. 98 | DebugLevel = INFO 99 | 100 | # Specify a custom message to use as the bot's status. If left empty, the bot 101 | # will display dynamic info about music currently being played in its status instead. 102 | StatusMessage = 103 | 104 | # Write what the bot is currently playing to the data//current.txt FILE. 105 | # This can then be used with OBS and anything else that takes a dynamic input. 106 | WriteCurrentSong = no 107 | 108 | # Allows the person who queued a song to skip their OWN songs instantly, similar to the 109 | # functionality that owners have where they can skip every song instantly. 110 | AllowAuthorSkip = yes 111 | 112 | # Enables experimental equalization code. This will cause all songs to sound similar in 113 | # volume at the cost of higher processing consumption when the song is initially being played. 114 | UseExperimentalEqualization = no 115 | 116 | # Enables the use of embeds throughout the bot. These are messages that are formatted to 117 | # look cleaner, however they don't appear to users who have link previews disabled in their 118 | # Discord settings. 119 | UseEmbeds = yes 120 | 121 | # The amount of items to show when using the queue command. 122 | QueueLength = 10 123 | 124 | # Remove songs from the autoplaylist if an error occurred while trying to play them. 125 | # If enabled, unplayable songs will be moved to another file and out of the autoplaylist. 126 | # You may want to disable this if you have internet issues or frequent issues playing songs. 127 | RemoveFromAPOnError = yes 128 | 129 | # Whether to show the configuration for the bot in the console when it launches. 130 | ShowConfigOnLaunch = no 131 | 132 | # Whether to use leagcy skip behaviour. This will change it so that those with permission 133 | # do not need to use "skip f" to force-skip a song, they will instead force-skip by default. 134 | LegacySkip = no 135 | 136 | [Files] 137 | # Path to your i18n file. Do not set this if you do not know what it does. 138 | i18nFile = 139 | -------------------------------------------------------------------------------- /musicbot-config/i18n/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmd-resetplaylist-response": "The server's autoplaylist has been reset.", 3 | "cmd-help-invalid": "No such command", 4 | "cmd-help-no-perms": "You don't have permission to use any commands. Run `{}help all` list every command anyway", 5 | "cmd-help-response": "For information about a particular command, run `{}help [command]`\nFor further help, see https://just-some-bots.github.io/MusicBot/", 6 | "cmd-help-all": "\nOnly showing commands you can use, for a list of all commands, run `{}help all`", 7 | "cmd-blacklist-invalid": "Invalid option '{0}' specified, use +, -, add, or remove", 8 | "cmd-blacklist-added": "{0} users have been added to the blacklist", 9 | "cmd-blacklist-none": "None of those users are in the blacklist.", 10 | "cmd-blacklist-removed": "{0} users have been removed from the blacklist", 11 | "cmd-id-self": "Your ID is `{0}`", 12 | "cmd-id-other": "**{0}**s ID is `{1}`", 13 | "cmd-save-exists": "This song is already in the autoplaylist.", 14 | "cmd-save-invalid": "There is no valid song playing.", 15 | "cmd-save-success": "Added <{0}> to the autoplaylist.", 16 | "cmd-joinserver-response": "Click here to add me to a server: \n{}", 17 | "cmd-play-spotify-album-process": "Processing album `{0}` (`{1}`)", 18 | "cmd-play-spotify-album-queued": "Enqueued `{0}` with **{1}** songs.", 19 | "cmd-play-spotify-playlist-process": "Processing playlist `{0}` (`{1}`)", 20 | "cmd-play-spotify-playlist-queued": "Enqueued `{0}` with **{1}** songs.", 21 | "cmd-play-spotify-unsupported": "That is not a supported Spotify URI.", 22 | "cmd-play-spotify-invalid": "You either provided an invalid URI, or there was a problem.", 23 | "cmd-play-spotify-unavailable": "The bot is not setup to support Spotify URIs. Check your config.", 24 | "cmd-play-limit": "You have reached your enqueued song limit ({0})", 25 | "cmd-play-noinfo": "That video cannot be played. Try using the {0}stream command.", 26 | "cmd-play-nodata": "Error extracting info from search string, youtubedl returned no data. You may need to restart the bot if this continues to happen.", 27 | "cmd-play-playlist-error": "Error queuing playlist:\n`{0}`", 28 | "cmd-play-playlist-gathering-1": "Gathering playlist information for {0} songs{1}", 29 | "cmd-play-playlist-gathering-2": ", ETA: {0} seconds", 30 | "cmd-play-playlist-maxduration": "No songs were added, all songs were over max duration (%ss)", 31 | "cmd-play-playlist-reply": "Enqueued **%s** songs to be played. Position in queue: %s", 32 | "cmd-play-playlist-invalid": "That playlist cannot be played.", 33 | "cmd-play-playlist-process": "Processing {0} songs...", 34 | "cmd-play-playlist-queueerror": "Error handling playlist {0} queuing.", 35 | "cmd-play-playlist-skipped": "\nAdditionally, the current song was skipped for being too long.", 36 | "cmd-play-playlist-reply-secs": "Enqueued {0} songs to be played in {1} seconds", 37 | "cmd-play-song-limit": "Song duration exceeds limit ({0} > {1})", 38 | "cmd-play-song-reply": "Enqueued `%s` to be played. Position in queue: %s", 39 | "cmd-play-next": "Up next!", 40 | "cmd-play-eta": " - estimated time until playing: %s", 41 | "cmd-play-badextractor": "You do not have permission to play media from this service.", 42 | "cmd-stream-limit": "You have reached your enqueued song limit ({0})", 43 | "cmd-stream-success": "Streaming.", 44 | "cmd-search-limit": "You have reached your playlist item limit ({0})", 45 | "cmd-search-noquery": "Please specify a search query.\n%s", 46 | "cmd-search-noquote": "Please quote your search query properly.", 47 | "cmd-search-searchlimit": "You cannot search for more than %s videos", 48 | "cmd-search-searching": "Searching for videos...", 49 | "cmd-search-none": "No videos found.", 50 | "cmd-search-result": "Result {0}/{1}: {2}", 51 | "cmd-search-accept": "Alright, coming right up!", 52 | "cmd-search-decline": "Oh well :(", 53 | "cmd-np-action-streaming": "Streaming", 54 | "cmd-np-action-playing": "Playing", 55 | "cmd-np-reply-author": "Now {action}: **{title}** added by **{author}**\nProgress: {progress_bar} {progress}\n:point_right: <{url}>", 56 | "cmd-np-reply-noauthor": "Now {action}: **{title}**\nProgress: {progress_bar} {progress}\n:point_right: <{url}>", 57 | "cmd-np-none": "There are no songs queued! Queue something with {0}play.", 58 | "cmd-summon-novc": "You are not in a voice channel!", 59 | "cmd-summon-noperms-connect": "Cannot join channel `{0}`, no permission to connect.", 60 | "cmd-summon-noperms-speak": "Cannot join channel `{0}`, no permission to speak.", 61 | "cmd-summon-reply": "Connected to `{0.name}`", 62 | "cmd-pause-reply": "Paused music in `{0.name}`", 63 | "cmd-pause-none": "Player is not playing.", 64 | "cmd-resume-reply": "Resumed music in `{0.name}`", 65 | "cmd-resume-none": "Player is not paused.", 66 | "cmd-shuffle-reply": "Shuffled `{0}`'s queue.", 67 | "cmd-clear-reply": "Cleared `{0}`'s queue", 68 | "cmd-remove-none": "There's nothing to remove!", 69 | "cmd-remove-reply": "Removed `{0}` added by `{1}`", 70 | "cmd-remove-missing": "Nothing found in the queue from user `%s`", 71 | "cmd-remove-noperms": "You do not have the valid permissions to remove that entry from the queue, make sure you're the one who queued it or have instant skip permissions", 72 | "cmd-remove-invalid": "Invalid number. Use {}queue to find queue positions.", 73 | "cmd-remove-reply-author": "Removed entry `{0}` added by `{1}`", 74 | "cmd-remove-reply-noauthor": "Removed entry `{0}`", 75 | "cmd-skip-none": "Can't skip! The player is not playing!", 76 | "cmd-skip-dl": "The next song (`%s`) is downloading, please wait.", 77 | "cmd-skip-force": "Force skipped `{}`.", 78 | "cmd-skip-force-noperms": "You do not have permission to force skip.", 79 | "cmd-skip-reply-skipped-1": "Your skip for `{0}` was acknowledged.\nThe vote to skip has been passed.{1}", 80 | "cmd-skip-reply-skipped-2": " Next song coming up!", 81 | "cmd-skip-reply-voted-1": "Your skip for `{0}` was acknowledged.\n**{1}** more {2} required to vote to skip this song.", 82 | "cmd-skip-reply-voted-2": "person is", 83 | "cmd-skip-reply-voted-3": "people are", 84 | "cmd-volume-current": "Current volume: `%s%%`", 85 | "cmd-volume-invalid": "`{0}` is not a valid number", 86 | "cmd-volume-reply": "Updated volume from **%d** to **%d**", 87 | "cmd-volume-unreasonable-relative": "Unreasonable volume change provided: {}{:+} -> {}%. Provide a change between {} and {:+}.", 88 | "cmd-volume-unreasonable-absolute": "Unreasonable volume provided: {}%. Provide a value between 1 and 100.", 89 | "cmd-option-autoplaylist-enabled": "The autoplaylist is already enabled!", 90 | "cmd-option-autoplaylist-disabled": "The autoplaylist is already disabled!", 91 | "cmd-option-autoplaylist-none": "There are no entries in the autoplaylist file.", 92 | "cmd-option-invalid-value": "The value provided was not valid.", 93 | "cmd-option-invalid-param": "The parameters provided were invalid.", 94 | "cmd-queue-more": "\n... and %s more", 95 | "cmd-queue-none": "There are no songs queued! Queue something with {}play.", 96 | "cmd-queue-playing-author": "Currently playing: `{0}` added by `{1}` {2}\n", 97 | "cmd-queue-playing-noauthor": "Currently playing: `{0}` {1}\n", 98 | "cmd-queue-entry-author": "{0} -- `{1}` by `{2}`", 99 | "cmd-queue-entry-noauthor": "{0} -- `{1}`", 100 | "cmd-clean-invalid": "Invalid parameter. Please provide a number of messages to search.", 101 | "cmd-clean-reply": "Cleaned up {0} message{1}.", 102 | "playlists-noperms": "You are not allowed to request playlists", 103 | "playlists-big": "Playlist has too many entries ({0} > {1})", 104 | "playlists-limit": "Playlist entries + your already queued songs reached limit ({0} + {1} > {2})", 105 | "karaoke-enabled": "Karaoke mode is enabled, please try again when its disabled!" 106 | } 107 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > WARNING: This repository is unmaintained, it worked last time I was running it though. If it works for you, then yay! If it doesn't I won't really be able to help you out, I have far too much to do when I'm not at work these days. You're free to do whatever you want with the code, but I won't be able to support you. Good luck! 2 | 3 | # Snowball 4 | 5 | A voice activated bot that sits in a [Discord][] server and joins audio channels with users. 6 | 7 | > Note: Most free and easy to use music bots will ignore commands from other bots, if not all of them. I host my own [MusicBot][] which works great. 8 | 9 | ## Example 10 | 11 | This would take place entirely over voice, I'd just join a voice channel and Snowball would turn up. 12 | 13 | > Olical: Hey Snowball 14 | > 15 | > Snowball: Hey Olical 16 | > 17 | > Olical: Move everyone to my channel 18 | > 19 | > Snowball: You got it. 20 | > 21 | > [everyone is moved to my channel] 22 | > 23 | > Olical: Hey Snowball 24 | > 25 | > Snowball: Hey Olical 26 | > 27 | > Olical: Play Darude Sandstorm 10 hours bass boosted 28 | > 29 | > Snowball: Sure 30 | > 31 | > [beautiful music starts playing] 32 | 33 | ## Key features 34 | 35 | * Control your music: `play hurricane highlife`, `turn the volume down`. 36 | * Move users around: `move me to channel 2`, `move everyone to my channel`, `move Olical and Photan to channel 1`. 37 | * Minimal required configuration. 38 | * Woken by "hey snowball", uses very little CPU. 39 | * Automatic joining and leaving of channels as users join, move and leave. 40 | * Easily runnable [Docker container][docker]. 41 | 42 | ## Technology used 43 | 44 | * Main language: [Clojure][] 45 | * Discord API: [Discord4J][] 46 | * Wake word detection: [Porcupine][] 47 | * Speech comprehension, synthesis and cache: [Google Cloud Platform][gcp] 48 | * Music bot: [github.com/Just-Some-Bots/MusicBot][MusicBot] 49 | 50 | > I wrote about how I got Porcupine working in Clojure in my post: [Wake word detection with Clojure (or Java)][wake-word-post]. 51 | 52 | ## Running 53 | 54 | You can run Snowball in two ways: Directly through the [Clojure CLI][cljcli] or by running the pre-built [Docker container][docker]. Before you start the application you need to create `config/config.edn` (which is merged on top of `config.base.edn`) and `config/google.json` which you can get from a service account in [GCP][]. 55 | 56 | Once you have your Google Cloud Platform account up and running you need to ensure the following services are activated for your account: 57 | 58 | * [Cloud Speech API][cloud-speech] 59 | * [Cloud Text-to-Speech API][cloud-text-to-speech] 60 | 61 | You can also optionally activate [Cloud Storage][cloud-storage] and create a bucket that will be used for caching text to speech audio results. 62 | 63 | Here's an example `config.edn` but you should be able to work this out yourself from the `nil` values in `config.base.edn`. 64 | 65 | ```edn 66 | {:discord {:token "dkjdfd-my-discord-token-djslksdj"} ;; This is the only required value. 67 | :speech {:cache {:bucket "your-speech-cache-bucket-name"}} 68 | :presence {:whitelist #{492031893908249384}} 69 | :command {:music {:channel 127661586692963623 70 | :user 892362784653922700}}} 71 | ``` 72 | 73 | The presence whitelist and blacklist allow you to restrict what channels Snowball will join. The music and speech cache keys are completely optional, the only essential configuration is the discord token. 74 | 75 | ### Clojure 76 | 77 | Once you have the CLI installed (it's available in most package managers) you can simply execute `make` to build and run the entire application. The first run will take a while because it has to download the [Porcupine][] repository which is fairly large. Make sure you have the core C build tools installed, a very small library is compiled for linking the JVM into Porcupine. 78 | 79 | ### Docker 80 | 81 | If you know how to use Docker this'll be really straightforward, if you don't, go learn how to use Docker first. The tag in this block is the currently recommended version. 82 | 83 | ```bash 84 | docker run -ti --rm -v $(pwd)/config:/usr/snowball/config olical/snowball:2df16192172f5b7b645939fe0c1b09a38c442b4b 85 | ``` 86 | 87 | I run my instance on a Kubernetes cluster I created within GCP, I noted the steps I took in [`KUBE_NOTES.md`][kube-notes] which may help others get their own instances running cheaply. 88 | 89 | ## Commands 90 | 91 | To give a command you need to say "hey snowball" and wait for acknowledgement, Snowball will say "hey [your name]" when it's ready. Then you can issue one of these commands. The matching is performed via regular expressions ([`snowball.command`][commands]) so you can use any sentence you want as long as the key words are present. 92 | 93 | * "say ..." - Repeats back to you whatever came after "say". 94 | * "ignore me", "nevermind", "go away" etc - Sends Snowball back to sleep if it was woken accidentally. 95 | * "who's a good boy?" - Confirms that Snowball, is indeed, a good boy. 96 | * "play ..." - Sends the `!play` command to the music bot with the song name that came after "play". 97 | * "volume" - Any sentence with volume in it triggers volume modification. 98 | * Including "increase", "up" or "raise" will raise the volume. 99 | * Including "decrease", "down" or "lower" will lower the volume. 100 | * Including a number will set the volume to that value. 101 | * Including an up / down word as well as a number will modify the volume by that amount. 102 | * "turn the volume up" 103 | * "lower the volume by 30" 104 | * "set the volume to 20" 105 | * "move" - Any sentence with move in it triggers channel movement. 106 | * You need to provide some users to move and a channel to move them to. 107 | * Usernames or "me", "myself" or "everyone" can be used to select people. 108 | * A channel name, "this channel", "my channel", "our channel" or "here" can be used to select a channel. 109 | * "move everyone to this channel" 110 | * "move me to channel 2" 111 | * "could you move Photan to the naughty corner" 112 | 113 | There's a few more very obvious music bot commands. 114 | 115 | * pause / stop 116 | * resume / unpause 117 | * skip 118 | * summon 119 | * dismiss 120 | * clear 121 | 122 | ## Issues 123 | 124 | If something isn't working quite right and there isn't an existing similar issue, please feel free to raise one with as mush information as you can provide. Logs, versions and system information all help. 125 | 126 | Contributions are entirely welcome but also feel free to fork and modify this project to suit _your_ needs. Not every change needs to go into this repository, especially if you want to add meme commands that maybe only your Discord will appreciate. 127 | 128 | ![](images/snowball.png) 129 | 130 | ## Author 131 | 132 | Built by [Oliver Caldwell][homepage] ([@OliverCaldwell][twitter]). Feel free to message me if you've got any feedback or questions. 133 | 134 | ## Unlicenced 135 | 136 | Find the full [unlicense][] in the `UNLICENSE` file, but here's a snippet. 137 | 138 | >This is free and unencumbered software released into the public domain. 139 | > 140 | >Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. 141 | 142 | Do what you want. Learn as much as you can. Unlicense more software. 143 | 144 | [unlicense]: http://unlicense.org/ 145 | [Porcupine]: https://github.com/picovoice/porcupine 146 | [Discord]: https://discordapp.com/ 147 | [Clojure]: https://clojure.org/ 148 | [gcp]: https://cloud.google.com/ 149 | [homepage]: https://oli.me.uk/ 150 | [twitter]: https://twitter.com/OliverCaldwell 151 | [Discord4J]: https://github.com/Discord4J/Discord4J 152 | [MusicBot]: https://github.com/Just-Some-Bots/MusicBot 153 | [docker]: https://hub.docker.com/r/olical/snowball/ 154 | [cljcli]: https://clojure.org/guides/getting_started 155 | [cloud-speech]: https://console.cloud.google.com/apis/api/speech.googleapis.com/overview 156 | [cloud-text-to-speech]: https://console.cloud.google.com/apis/api/texttospeech.googleapis.com/overview 157 | [cloud-storage]: https://console.cloud.google.com/storage/browser 158 | [kube-notes]: KUBE_NOTES.md 159 | [commands]: src/clojure/snowball/command.clj 160 | [wake-word-post]: https://oli.me.uk/2018-10-12-wake-word-detection-with-clojure-or-java/ 161 | -------------------------------------------------------------------------------- /src/clojure/snowball/comprehension.clj: -------------------------------------------------------------------------------- 1 | (ns snowball.comprehension 2 | (:require [clojure.string :as str] 3 | [clojure.core.async :as a] 4 | [taoensso.timbre :as log] 5 | [bounce.system :as b] 6 | [snowball.discord :as discord] 7 | [snowball.config :as config] 8 | [snowball.stream :as stream] 9 | [snowball.util :as util] 10 | [snowball.speech :as speech]) 11 | (:import [snowball.porcupine Porcupine] 12 | [com.google.protobuf ByteString] 13 | [com.google.cloud.speech.v1p1beta1 14 | SpeechClient 15 | SpeechContext 16 | RecognitionConfig 17 | RecognitionAudio])) 18 | 19 | (b/defcomponent phrase-audio-chan {:bounce/deps #{discord/audio-chan config/value}} 20 | (log/info "Starting phrase channel") 21 | (let [phrase-audio-chan (a/chan (a/sliding-buffer 100)) 22 | state! (atom {})] 23 | 24 | (a/go-loop [] 25 | ;; Pull a single audio packet out of Discord. 26 | ;; We receive one every 20ms and know which user it came from. 27 | (when-let [{:keys [user audio]} (a/short [[a b]] 62 | (bit-or (bit-shift-left a 8) (bit-and b 0xFF))) 63 | 64 | ;; Notes on audio formats: 65 | ;; Discord provides audio as `48KHz 16bit stereo signed BigEndian PCM`. 66 | ;; Porcupine requires `16KHz 16bit mono signed LittleEndian PCM` but in 512 length short-array frames (a short is two bytes). 67 | ;; GCP speech recognition requires the same as Porcupine but as byte pairs and without the 512 frames. 68 | 69 | (defn resample-for-porcupine [byte-stream] 70 | (->> byte-stream 71 | (stream/->bytes) 72 | (partition 2) 73 | (sequence (comp (take-nth 6) (map byte-pair->short))) 74 | (partition 512 512 (repeat 0)) 75 | (map short-array))) 76 | 77 | (defn resample-for-google [byte-stream] 78 | (->> byte-stream 79 | (stream/->bytes) 80 | (partition 2) 81 | (sequence (comp (take-nth 6) (map reverse))) 82 | (flatten) 83 | (byte-array))) 84 | 85 | (def extra-phrases! (atom nil)) 86 | 87 | (defn sanitised-entities [] 88 | (letfn [(trim [entity] (subs entity 0 (min (count entity) 100))) 89 | (sanitised-map [entities] (into {} (map (juxt (comp util/sanitise-entity discord/->name) identity)) entities))] 90 | {:users (sanitised-map (discord/guild-users)) 91 | :text-channels (sanitised-map (discord/guild-text-channels)) 92 | :voice-channels (sanitised-map (discord/guild-voice-channels))})) 93 | 94 | (defn speech-context-entities [] 95 | (let [entity-map (sanitised-entities) 96 | users (-> entity-map :users keys) 97 | text-channels (-> entity-map :text-channels keys) 98 | voice-channels (-> entity-map :voice-channels keys)] 99 | (loop [entities (concat (take 50 @extra-phrases!) 100 | (take 350 users) 101 | (take 50 text-channels) 102 | (take 50 voice-channels))] 103 | (if (< (reduce + (map count entities)) 10000) 104 | (vec entities) 105 | (recur (rest entities)))))) 106 | 107 | (defn init-porcupine [] 108 | (let [porcupine (Porcupine. "wake-word-engine/Porcupine/lib/common/porcupine_params.pv" 109 | "wake-word-engine/wake_phrase.ppn" 110 | (get-in config/value [:comprehension :sensitivity])) 111 | frame-length (.getFrameLength porcupine) 112 | sample-rate (.getSampleRate porcupine)] 113 | 114 | (when (or (not= frame-length 512) (not= sample-rate 16000)) 115 | (throw (Error. (str "Porcupine frame length and sample rate should be 512 / 16000, got " frame-length " / " sample-rate " instead!")))) 116 | 117 | porcupine)) 118 | 119 | (b/defcomponent phrase-text-chan {:bounce/deps #{phrase-audio-chan speech/synthesiser}} 120 | (log/info "Starting speech to text systems") 121 | (reset! extra-phrases! #{}) 122 | (let [speech-client (.. SpeechClient (create)) 123 | phrase-text-chan (a/chan (a/sliding-buffer 100)) 124 | language-code (get-in config/value [:comprehension :language-code])] 125 | 126 | (a/go-loop [] 127 | ;; Wait for audio from a user in the voice channel. 128 | (when-let [{:keys [user byte-stream]} (a/name user) 135 | timeout-chan (a/timeout (get-in config/value [:comprehension :post-wake-timeout-ms]))] 136 | (log/info "Woken by" user-name) 137 | (speech/say! (str "Hey " user-name ".")) 138 | 139 | ;; Wake phrase was spotted, so now we wait for a timeout or some more audio from that user. 140 | (loop [] 141 | (if-let [phrase (a/alt! 142 | timeout-chan nil 143 | phrase-audio-chan ([phrase] phrase))] 144 | (if (= user (:user phrase)) 145 | (do 146 | ;; Audio received from the wake phrase user, send it off to Google for recognition. 147 | (log/info "Audio from" user-name "- sending to Google for speech recognition") 148 | (let [proto-bytes (.. ByteString (copyFrom (resample-for-google (:byte-stream phrase)))) 149 | speech-context (.. SpeechContext 150 | (newBuilder) 151 | (addAllPhrases (speech-context-entities)) 152 | (build)) 153 | recognition-config (.. RecognitionConfig 154 | (newBuilder) 155 | (setEncoding (.. com.google.cloud.speech.v1p1beta1.RecognitionConfig$AudioEncoding LINEAR16)) 156 | (setSampleRateHertz 16000) 157 | (setLanguageCode language-code) 158 | (addSpeechContexts speech-context) 159 | (build)) 160 | recognition-audio (.. RecognitionAudio 161 | (newBuilder) 162 | (setContent proto-bytes) 163 | (build)) 164 | results (-> (.. speech-client 165 | (recognize recognition-config recognition-audio) 166 | (getResultsList)) 167 | (.iterator) 168 | (iterator-seq))] 169 | ;; If we have a transcription result, put it onto the output channel. 170 | (if (seq results) 171 | (doseq [result results] 172 | (let [transcript (-> (.. result (getAlternativesList) (get 0) (getTranscript)) 173 | (str/lower-case))] 174 | (log/info "Speech recognition transcript result:" transcript) 175 | (a/put! phrase-text-chan {:user user 176 | :phrase transcript}))) 177 | (do 178 | (log/info "No results from Google speech recognition") 179 | (speech/say! "I can't understand you, please try again."))))) 180 | (recur)) 181 | (do 182 | (log/info user-name "didn't say anything after the wake word") 183 | (speech/say! "I didn't hear anything, please try again.")))))) 184 | (.delete porcupine)) 185 | (catch Exception e 186 | (log/error "Caught error in phrase-text-chan loop" e))) 187 | (recur))) 188 | 189 | (b/with-stop phrase-text-chan 190 | (log/info "Shutting down speech to text systems") 191 | (.shutdownNow speech-client)))) 192 | -------------------------------------------------------------------------------- /musicbot-config/_autoplaylist.txt: -------------------------------------------------------------------------------- 1 | ## https://temp.discord.fm/ 2 | 3 | # Generated by Discord.FM - electro-hub 4 | https://youtube.com/watch?v=nEt1bKGlCpM 5 | https://youtube.com/watch?v=wNwY8JCBm6o 6 | https://youtube.com/watch?v=nedAfpJV53w 7 | https://youtube.com/watch?v=Xq-knHXSKYY 8 | https://youtube.com/watch?v=ovrGzbsQZqc 9 | https://youtube.com/watch?v=jK2aIUmmdP4 10 | https://youtube.com/watch?v=7m_QZZTb6Xc 11 | https://youtube.com/watch?v=pisxxUpS7o8 12 | https://youtube.com/watch?v=UwbVx-XTubM 13 | https://youtube.com/watch?v=2YVtby__ZS0 14 | https://youtube.com/watch?v=PKfxmFU3lWY 15 | https://youtube.com/watch?v=ngsGBSCDwcI 16 | https://youtube.com/watch?v=EfR2OXNECWo 17 | https://youtube.com/watch?v=IzIHf1EToTE 18 | https://youtube.com/watch?v=oC-GflRB0y4 19 | https://youtube.com/watch?v=AJh1o0wvqKI 20 | https://youtube.com/watch?v=bTNTNxZaTp0 21 | https://youtube.com/watch?v=MwSkC85TDgY 22 | https://youtube.com/watch?v=8RTR1Ag0rhQ 23 | https://youtube.com/watch?v=GzataxzdwIs 24 | https://youtube.com/watch?v=n3uQghHbcaQ 25 | https://youtube.com/watch?v=RvJYIGJilG0 26 | https://youtube.com/watch?v=ARgdBb2Go0w 27 | https://youtube.com/watch?v=du8iQQ0zoRc 28 | https://youtube.com/watch?v=x-4O0y3rDW4 29 | https://youtube.com/watch?v=IKKXdjRXsXQ 30 | https://youtube.com/watch?v=4QTh79V696Q 31 | https://youtube.com/watch?v=dXpFEgi43lU 32 | https://youtube.com/watch?v=ClM5UqKQvEk 33 | https://youtube.com/watch?v=0t2tjNqGyJI 34 | https://youtube.com/watch?v=oMf4ap3OrO8 35 | https://youtube.com/watch?v=60ItHLz5WEA 36 | https://youtube.com/watch?v=cNxNDWWwC9w 37 | https://youtube.com/watch?v=JA7bmiafKNM 38 | https://youtube.com/watch?v=usXhiWE2Uc0 39 | https://youtube.com/watch?v=5lLclBfKj48 40 | https://youtube.com/watch?v=FYyCbKZIkgc 41 | https://youtube.com/watch?v=S5_Mf04nbLw 42 | https://youtube.com/watch?v=ou03DhIp3zI 43 | https://youtube.com/watch?v=13TIWyeuY4w 44 | https://youtube.com/watch?v=C_fpzKoHyw8 45 | https://youtube.com/watch?v=WbksTnQVqyI 46 | https://youtube.com/watch?v=pAGVvPfwdCY 47 | https://youtube.com/watch?v=hgKDu5pp_fU 48 | https://youtube.com/watch?v=YaHw1lYbE7I 49 | https://youtube.com/watch?v=UifuuynvrlY 50 | https://youtube.com/watch?v=pe6du2o_vdc 51 | https://youtube.com/watch?v=3FPwcaflCS8 52 | https://youtube.com/watch?v=WPNq_VJOSxU 53 | https://youtube.com/watch?v=Rns6bSR_OFQ 54 | https://youtube.com/watch?v=J9nMlGRDXlw 55 | https://youtube.com/watch?v=dS5UpPflmnM 56 | https://youtube.com/watch?v=lznKG_PovSo 57 | https://youtube.com/watch?v=Pk7b7YC93qQ 58 | https://youtube.com/watch?v=44PO8jPGvsE 59 | https://youtube.com/watch?v=m-tjK8hQwrU 60 | https://youtube.com/watch?v=F0uBAB0i1uY 61 | https://youtube.com/watch?v=FMUf8K-dkIk 62 | https://youtube.com/watch?v=cGAU_Xa-Xl0 63 | https://youtube.com/watch?v=ZH2DMNk6udI 64 | https://youtube.com/watch?v=QHfCeR8cXvc 65 | https://youtube.com/watch?v=5QQ0ebVrLQw 66 | https://youtube.com/watch?v=cIbqvbwI5Pg 67 | https://youtube.com/watch?v=7DZ-alFDXns 68 | https://youtube.com/watch?v=sH0BPn2jkP4 69 | https://youtube.com/watch?v=0K3p26aj6jE 70 | https://youtube.com/watch?v=L_pqQBKt-dM 71 | https://youtube.com/watch?v=XZy5dQH0xZs 72 | https://youtube.com/watch?v=sEX98pH5qIA 73 | https://youtube.com/watch?v=ux9vr4xfWj4 74 | https://youtube.com/watch?v=YlXRq9-0alw 75 | https://youtube.com/watch?v=e4dZoM5kAfU 76 | https://youtube.com/watch?v=3x5eFVWfcVA 77 | https://youtube.com/watch?v=7lI2HST_lvA 78 | https://youtube.com/watch?v=qEdf1qdO3_c 79 | https://youtube.com/watch?v=BWuHMes6kag 80 | https://youtube.com/watch?v=_eaIurlPB7w 81 | https://youtube.com/watch?v=3j1U0Io65Ds 82 | https://youtube.com/watch?v=X62lV9WdVmo 83 | https://youtube.com/watch?v=3FMfZbdvX9A 84 | https://youtube.com/watch?v=ZN4NxYy3vVQ 85 | https://youtube.com/watch?v=MQ0hFNd5aaU 86 | https://youtube.com/watch?v=574LrnfW2_s 87 | https://youtube.com/watch?v=h8NwXM6SNbU 88 | https://youtube.com/watch?v=EZ7zIrNMIH8 89 | https://youtube.com/watch?v=vbjoupCWk_M 90 | https://youtube.com/watch?v=H_tgomTUiWY 91 | https://youtube.com/watch?v=g2rdrNONy7k 92 | https://youtube.com/watch?v=n5vdgTt9VPU 93 | https://youtube.com/watch?v=QSb46QzHlWg 94 | https://youtube.com/watch?v=WSb6HYnFT3Q 95 | https://youtube.com/watch?v=lJ1NYJQnJTI 96 | https://youtube.com/watch?v=34thwBLMe4g 97 | https://youtube.com/watch?v=Q1DvVzKXktY 98 | https://youtube.com/watch?v=hwywsmBbPIQ 99 | https://youtube.com/watch?v=dDnwuokL07o 100 | https://youtube.com/watch?v=qC4NdLg_05c 101 | https://youtube.com/watch?v=R0P_f0gXXqs 102 | https://youtube.com/watch?v=fnQgDgB5kbw 103 | https://youtube.com/watch?v=Lc14Z1kgTb8 104 | https://youtube.com/watch?v=s1IrZxUYw5Q 105 | https://youtube.com/watch?v=cWsDw8sDTJ4 106 | https://youtube.com/watch?v=kMHFn4Ra7uk 107 | https://youtube.com/watch?v=TJUVNg5zxAs 108 | https://youtube.com/watch?v=C9Bv1DiDZTM 109 | https://youtube.com/watch?v=i78U3VEAwK8 110 | https://youtube.com/watch?v=PM98IHH0rfE 111 | https://youtube.com/watch?v=9PB30JUOncw 112 | https://youtube.com/watch?v=QIMlGbv9K9w 113 | https://youtube.com/watch?v=d3Oc26AFDdU 114 | https://youtube.com/watch?v=VGh5DV0D3wk 115 | https://youtube.com/watch?v=71rSc6LXlSo 116 | https://youtube.com/watch?v=phn2JZ2xTz4 117 | https://youtube.com/watch?v=xshEZzpS4CQ 118 | https://youtube.com/watch?v=5tAsUGEqob4 119 | https://youtube.com/watch?v=FtveSk1N7Uo 120 | https://youtube.com/watch?v=zGERGT06AsM 121 | https://youtube.com/watch?v=3_-a9nVZYjk 122 | https://youtube.com/watch?v=B7xai5u_tnk 123 | https://youtube.com/watch?v=jqkPqfOFmbY 124 | https://youtube.com/watch?v=v5a0YGaVS0I 125 | https://youtube.com/watch?v=cIe6x_s14Is 126 | https://youtube.com/watch?v=qDcFryDXQ7U 127 | https://youtube.com/watch?v=TKZUhs9Gcdo 128 | https://youtube.com/watch?v=T8fcbqDUwbU 129 | https://youtube.com/watch?v=IIrCDAV3EgI 130 | https://youtube.com/watch?v=HAIDqt2aUek 131 | https://youtube.com/watch?v=ONoNjKtf3z8 132 | https://youtube.com/watch?v=mFQ_5dmzFsU 133 | https://youtube.com/watch?v=-kAsZVn44aI 134 | https://youtube.com/watch?v=vARpxoSM0kU 135 | https://youtube.com/watch?v=6vUjU3_YS1k 136 | https://youtube.com/watch?v=ZXI-LXszvkQ 137 | https://youtube.com/watch?v=X3LInDIIU0U 138 | https://youtube.com/watch?v=T_XHUA9G2zU 139 | https://youtube.com/watch?v=-CzBYn7iRSI 140 | https://youtube.com/watch?v=bzrtS_IuNGw 141 | https://youtube.com/watch?v=2-DJeXSWrCg 142 | https://youtube.com/watch?v=OVMuwa-HRCQ 143 | https://youtube.com/watch?v=4lXBHD5C8do 144 | https://youtube.com/watch?v=EfOn2yyKz1g 145 | https://youtube.com/watch?v=czd0Er-_qI8 146 | https://youtube.com/watch?v=g2Sh7SANjng 147 | https://youtube.com/watch?v=saAHXkRh6ms 148 | https://youtube.com/watch?v=7BhYmwFSOas 149 | https://youtube.com/watch?v=w_r-y92gmPI 150 | https://youtube.com/watch?v=DljSVcwVImU 151 | https://youtube.com/watch?v=Kky7rIEePQk 152 | https://youtube.com/watch?v=FdznALpbovU 153 | https://youtube.com/watch?v=cNT3q6tO-ZY 154 | https://youtube.com/watch?v=_jU2V8sT_pE 155 | https://youtube.com/watch?v=Gqw62pN960U 156 | https://youtube.com/watch?v=_ud3mOQxWYo 157 | https://youtube.com/watch?v=2EsdeUWAD34 158 | https://youtube.com/watch?v=ZHZxmp88Ts8 159 | https://youtube.com/watch?v=T3wvPpVOL04 160 | https://youtube.com/watch?v=NeVqF1pBEbU 161 | https://youtube.com/watch?v=pfHM9HyRnRc 162 | https://youtube.com/watch?v=TLkYY4lcNE0 163 | https://youtube.com/watch?v=0LWHowDwKn4 164 | https://youtube.com/watch?v=US7wauHA8MI 165 | https://youtube.com/watch?v=EpiWHALFH-U 166 | https://youtube.com/watch?v=WEhpAg1jLEQ 167 | https://youtube.com/watch?v=Al23Vj-YPn8 168 | https://youtube.com/watch?v=hQsozlJv20k 169 | https://youtube.com/watch?v=WK1OFAiCg9g 170 | https://youtube.com/watch?v=2Q4KLb3CqOA 171 | https://youtube.com/watch?v=7PRrzMWECeU 172 | https://youtube.com/watch?v=39b3zjk_hKg 173 | https://youtube.com/watch?v=7-W-djGV6og 174 | https://youtube.com/watch?v=z269QQh7ano 175 | https://youtube.com/watch?v=TEyndDhVZUg 176 | https://youtube.com/watch?v=-pbsYf4Dc7w 177 | https://youtube.com/watch?v=gZ11wHTS0Bk 178 | https://youtube.com/watch?v=GN8zUPYivuQ 179 | https://youtube.com/watch?v=hNNwtDgQf_0 180 | https://youtube.com/watch?v=CI9sIgU-WNY 181 | https://youtube.com/watch?v=feQhtf-KJvw 182 | https://youtube.com/watch?v=T6kG5vuPVSs 183 | https://youtube.com/watch?v=RkqdK0Yiyh8 184 | https://youtube.com/watch?v=5tfZAyNYWN4 185 | https://youtube.com/watch?v=nVDQfKk_E2g 186 | https://youtube.com/watch?v=69yieWP0g10 187 | https://youtube.com/watch?v=fcYazsR6w-k 188 | https://youtube.com/watch?v=FHccClTAdzc 189 | https://youtube.com/watch?v=phhPSwFdgS8 190 | https://youtube.com/watch?v=OX3eAI0eZqE 191 | https://youtube.com/watch?v=W-5OUle-U3c 192 | https://youtube.com/watch?v=qYk7Ko9QY-E 193 | https://youtube.com/watch?v=cXER29tPVow 194 | https://youtube.com/watch?v=QVkGFtSTwis 195 | https://youtube.com/watch?v=NZhFMC0_mTk 196 | https://youtube.com/watch?v=dFEBpDW-K7E 197 | https://youtube.com/watch?v=6nRy10_iOPc 198 | https://youtube.com/watch?v=Kji10fsHyVs 199 | https://youtube.com/watch?v=oiWzM3zUvF8 200 | https://youtube.com/watch?v=c29bgvu4egI 201 | https://youtube.com/watch?v=rkJy9feER_o 202 | https://youtube.com/watch?v=tfpVib0ji54 203 | https://youtube.com/watch?v=xfEtO5Zs8Zk 204 | https://youtube.com/watch?v=duTPsznmSlU 205 | https://youtube.com/watch?v=stGTBsIyYZQ 206 | https://youtube.com/watch?v=e_aioZQA3kk 207 | https://youtube.com/watch?v=ZXKexscG5u8 208 | https://youtube.com/watch?v=2MG74eZfkJ4 209 | https://youtube.com/watch?v=xMz3AwBE4ZQ 210 | https://youtube.com/watch?v=c0ubrGE1Egk 211 | https://youtube.com/watch?v=qqZp8FEKCB4 212 | https://youtube.com/watch?v=3i-VrbTFIWI 213 | https://youtube.com/watch?v=aN_ZCMOx0lo 214 | https://youtube.com/watch?v=W_5unoZTpoQ 215 | https://youtube.com/watch?v=94M_tkjf-JA 216 | https://youtube.com/watch?v=HaxVJg4WiXw 217 | https://youtube.com/watch?v=qDm3Dtr_LR4 218 | https://youtube.com/watch?v=Tcq55RDiVqw 219 | https://youtube.com/watch?v=As-uiQ7Tvoo 220 | https://youtube.com/watch?v=a52Ul2AM92c 221 | https://youtube.com/watch?v=_mwL6R-Z1e4 222 | https://youtube.com/watch?v=7fugVGRFqe0 223 | https://youtube.com/watch?v=lABPt0CRO_U 224 | https://youtube.com/watch?v=paWIfLD4S2o 225 | https://youtube.com/watch?v=BL_0sHPMrQI 226 | https://youtube.com/watch?v=Ygf_yk5QJXY 227 | https://youtube.com/watch?v=ip4Q1pbrYDg 228 | https://youtube.com/watch?v=J2X5mJ3HDYE 229 | https://youtube.com/watch?v=yrEbCGtZFAQ 230 | https://youtube.com/watch?v=1dcXmkco5ko 231 | https://youtube.com/watch?v=6nuOSTiFNO0 232 | https://youtube.com/watch?v=5HQefcytyhk 233 | https://youtube.com/watch?v=bSfpSOBD30U 234 | https://youtube.com/watch?v=x_OwcYTNbHs 235 | https://youtube.com/watch?v=vxOewDbARxk 236 | https://youtube.com/watch?v=_cb0O-pRdF0 237 | https://youtube.com/watch?v=ZtaRRcoTQ4E 238 | https://youtube.com/watch?v=8U2rKAnyyDE 239 | https://youtube.com/watch?v=NV2qji32jic 240 | https://youtube.com/watch?v=BUV2sRIcnqw 241 | https://youtube.com/watch?v=hf4IxNNiqbU 242 | https://youtube.com/watch?v=-mSRraXCY9w 243 | https://youtube.com/watch?v=GWVd1Db16uE 244 | https://youtube.com/watch?v=tyrUaI4KBRk 245 | https://youtube.com/watch?v=eUL6AKzJQw8 246 | https://youtube.com/watch?v=c6P7iqvq1Og 247 | https://youtube.com/watch?v=2sh0ENwPGXw 248 | https://youtube.com/watch?v=Byuhn6hkJbM 249 | https://youtube.com/watch?v=R7-hFVbDiIo 250 | https://youtube.com/watch?v=gJeh_dLjPN4 251 | https://youtube.com/watch?v=SyggBM8Bqls 252 | https://youtube.com/watch?v=yXLL46xkdlY 253 | https://youtube.com/watch?v=7TsLBmXNKeo 254 | https://youtube.com/watch?v=iN_Vzi5DVhY 255 | https://youtube.com/watch?v=vBdnfyfBSKg 256 | https://youtube.com/watch?v=OLGN9_mycsU 257 | https://youtube.com/watch?v=FYh29RMpmAc 258 | https://youtube.com/watch?v=lbV-YwTwkTI 259 | https://youtube.com/watch?v=Qn5sYvn_H2w 260 | https://youtube.com/watch?v=ivLdLtOtOzU 261 | https://youtube.com/watch?v=j2BAT1UqoHE 262 | https://youtube.com/watch?v=9Mlvjb5aoq4 263 | https://youtube.com/watch?v=9d4il0lDszg 264 | https://youtube.com/watch?v=pa9DAW7PtFA 265 | https://youtube.com/watch?v=p6XagVe8bmw 266 | https://youtube.com/watch?v=fDZIHq0D6vc 267 | https://youtube.com/watch?v=tI2LwQGZTDA 268 | https://youtube.com/watch?v=njckdova0bY 269 | https://youtube.com/watch?v=Zv1QV6lrc_Y 270 | https://youtube.com/watch?v=m3T9JgHLIAk 271 | https://youtube.com/watch?v=Ey1_nkmS54g 272 | https://youtube.com/watch?v=a7cGKQeqfrI 273 | https://youtube.com/watch?v=0mOqIsnqSqM 274 | https://youtube.com/watch?v=pTBQRFWiiHo 275 | https://youtube.com/watch?v=PwY-PlXdK6M 276 | https://youtube.com/watch?v=ivY2Kfhw31Q 277 | https://youtube.com/watch?v=aVzh-b7HenE 278 | https://youtube.com/watch?v=z872doHfVXs 279 | https://youtube.com/watch?v=zIjKbIdJ82w 280 | https://youtube.com/watch?v=8sxAeb9BTKY 281 | https://youtube.com/watch?v=Pw_Fq8pjQE4 282 | https://youtube.com/watch?v=5txjj5awqS0 283 | https://youtube.com/watch?v=LAoZSikvqz8 284 | https://youtube.com/watch?v=5aQqJLHpTqw 285 | https://youtube.com/watch?v=4Um6HAbXYnY 286 | https://youtube.com/watch?v=qoQLxO54JZY 287 | https://youtube.com/watch?v=hGdU7vPWPMc 288 | https://youtube.com/watch?v=mSU-TWxNjJA 289 | https://youtube.com/watch?v=m8UjXEnSNIg 290 | https://youtube.com/watch?v=Q0vmiuBdYH0 291 | https://youtube.com/watch?v=iafxqkKZacA 292 | https://youtube.com/watch?v=cFIR80BZ0sM 293 | https://youtube.com/watch?v=zkl3-BqhfRU 294 | https://youtube.com/watch?v=V0tiM_RLXCs 295 | https://youtube.com/watch?v=d01XRSB-7dA 296 | https://youtube.com/watch?v=15ry8nvYLdQ 297 | https://youtube.com/watch?v=G1k9Ag69LI8 298 | https://youtube.com/watch?v=ZqJiXLJs_Pg 299 | https://youtube.com/watch?v=5hd53EIKRXI 300 | https://youtube.com/watch?v=p13lhwtSaQc 301 | https://youtube.com/watch?v=K1xrQcbAwgE 302 | https://youtube.com/watch?v=unx9er0sG6o 303 | https://youtube.com/watch?v=IAAh4s5JrAs 304 | https://youtube.com/watch?v=91wK-WFHAhQ 305 | https://youtube.com/watch?v=0rLAIF4JhHs 306 | https://youtube.com/watch?v=VHMG0tQ1sq0 307 | https://youtube.com/watch?v=mc9LKJMedaY 308 | https://youtube.com/watch?v=QNfQq_z255c 309 | https://youtube.com/watch?v=B88mv0dhYwc 310 | https://youtube.com/watch?v=eeKjgkveAh0 311 | https://youtube.com/watch?v=5ejWHwI72bU 312 | https://youtube.com/watch?v=oRrq6zXFUKg 313 | https://youtube.com/watch?v=9rixtkYjbRQ 314 | https://youtube.com/watch?v=aUGA-RJoqNA 315 | https://youtube.com/watch?v=4oQ7VTB5zqs 316 | https://youtube.com/watch?v=VPxUQiH--kU 317 | https://youtube.com/watch?v=BNFcrNX_hOE 318 | https://youtube.com/watch?v=IkDj2D3KiPc 319 | https://youtube.com/watch?v=qpx8HJAYb8k 320 | https://youtube.com/watch?v=v0g1xzCpEOM 321 | https://youtube.com/watch?v=oRV5DbcLivs 322 | https://youtube.com/watch?v=LjFSPklTE8w 323 | https://youtube.com/watch?v=KR-eV7fHNbM 324 | https://youtube.com/watch?v=e6LUWscWEw4 325 | https://youtube.com/watch?v=UVnn6ueVs9A 326 | https://youtube.com/watch?v=lAivBjfVH0o 327 | https://youtube.com/watch?v=pkmrSXtSt84 328 | https://youtube.com/watch?v=f_DX1A7f43o 329 | https://youtube.com/watch?v=_qg0j-mCCwc 330 | https://youtube.com/watch?v=RO3V1V5Valk 331 | https://youtube.com/watch?v=kn9_rgoX14A 332 | https://youtube.com/watch?v=ow4i6I-OptM 333 | https://youtube.com/watch?v=hGxUXFlSvbU 334 | https://youtube.com/watch?v=9NwZdxiLvGo 335 | https://youtube.com/watch?v=TPZnDVnNZ6E 336 | https://youtube.com/watch?v=wltiSg6O0PY 337 | https://youtube.com/watch?v=Ve1N7hShM7M 338 | https://youtube.com/watch?v=0O2aH4XLbto 339 | https://youtube.com/watch?v=ttFyuRmFgZY 340 | https://youtube.com/watch?v=5tp8iVL9LPc 341 | https://youtube.com/watch?v=AyBYKl8SyK8 342 | https://youtube.com/watch?v=XgvIBouzEso 343 | https://youtube.com/watch?v=-uEkDyHp4vA 344 | https://youtube.com/watch?v=_9eHO1V-EYw 345 | https://youtube.com/watch?v=Lq6n7Hlgjw4 346 | https://youtube.com/watch?v=eqsXMVobPZM 347 | https://youtube.com/watch?v=XhohLI1Rupc 348 | https://youtube.com/watch?v=-iYzuc_gM9U 349 | https://youtube.com/watch?v=DWLz0yJegtA 350 | https://youtube.com/watch?v=8Gbop-ZLUfA 351 | https://youtube.com/watch?v=u01YGBPh-YQ 352 | https://youtube.com/watch?v=F41lj80297E 353 | https://youtube.com/watch?v=ImXmEPGKljI 354 | https://youtube.com/watch?v=c3Lui73UEk4 355 | https://youtube.com/watch?v=RQoUnnsa_xg 356 | https://youtube.com/watch?v=3D_fiyrxSIs 357 | https://youtube.com/watch?v=Nqqc2FHf9Ug 358 | https://youtube.com/watch?v=EIwtr-VqwcM 359 | https://youtube.com/watch?v=0ZgNpboHPMI 360 | https://youtube.com/watch?v=jWBP05rL36U 361 | https://youtube.com/watch?v=6y_NJg-xoeE 362 | https://youtube.com/watch?v=0BH7XF117Ek 363 | https://youtube.com/watch?v=dfO4aOcf4F8 364 | https://youtube.com/watch?v=-WR0o7NWUy8 365 | https://youtube.com/watch?v=BQX9x6P5w7k 366 | https://youtube.com/watch?v=a0Aauep0VWs 367 | https://youtube.com/watch?v=DytrHrwoG4k 368 | https://youtube.com/watch?v=GhKm_SdHsLs 369 | https://youtube.com/watch?v=4eGk7KVTRSk 370 | https://youtube.com/watch?v=As_4MEJUzeY 371 | https://youtube.com/watch?v=mpQeKHrZGWU 372 | https://youtube.com/watch?v=GnqSIa0GNSA 373 | https://youtube.com/watch?v=C-x7ZJ5aMNM 374 | https://youtube.com/watch?v=hPpK_GkAK30 375 | https://youtube.com/watch?v=dba3MYL6Nzc 376 | https://youtube.com/watch?v=BQrNh80N6Hg 377 | https://youtube.com/watch?v=QBXrhgg9s0c 378 | https://youtube.com/watch?v=OilPvUo2vac 379 | https://youtube.com/watch?v=qTPqCUyLLhA 380 | https://youtube.com/watch?v=UkC5uVSfa7k 381 | https://youtube.com/watch?v=RhzJGZ5lzgM 382 | https://youtube.com/watch?v=eLBozbquURs 383 | https://youtube.com/watch?v=FsQjo7Z11_Q 384 | https://youtube.com/watch?v=fIpCwYJnYLg 385 | https://youtube.com/watch?v=dNLOZjCWTs4 386 | https://youtube.com/watch?v=rpkDl6UN4a8 387 | https://youtube.com/watch?v=kw8xqJ7SXmY 388 | https://youtube.com/watch?v=_cB3HXVvm0g 389 | https://youtube.com/watch?v=YBlrSdfUgPI 390 | https://youtube.com/watch?v=110csW7KUbM 391 | https://youtube.com/watch?v=Xz5qHx-MHDo 392 | https://youtube.com/watch?v=Iaa03itxNZ0 393 | https://youtube.com/watch?v=9W8Q9FvH1XA 394 | https://youtube.com/watch?v=ijfNbbcP2k0 395 | https://youtube.com/watch?v=I5z2--4O7sA 396 | https://youtube.com/watch?v=j8F1NwrHBIU 397 | https://youtube.com/watch?v=Z--UAlidTyI 398 | https://youtube.com/watch?v=Y-fYkVi3HjQ 399 | https://youtube.com/watch?v=ztsrgkKUctk 400 | https://youtube.com/watch?v=LdG3aC95P7w 401 | https://youtube.com/watch?v=Mv0g-j0iL-s 402 | https://youtube.com/watch?v=uqzQfOKZoPc 403 | https://youtube.com/watch?v=5LM4zck0LJ0 404 | https://youtube.com/watch?v=NwYlewhSkBQ 405 | https://youtube.com/watch?v=C9FNqHTq8aU 406 | https://youtube.com/watch?v=BxmZovupVYU 407 | https://youtube.com/watch?v=UlBrE-4NBzs 408 | https://youtube.com/watch?v=a59gmGkq_pw 409 | https://youtube.com/watch?v=SqVSMucFDWk 410 | https://youtube.com/watch?v=fBOPmzfBAnc 411 | https://youtube.com/watch?v=awimSQD2Dyo 412 | https://youtube.com/watch?v=jBmxH56XQBw 413 | https://youtube.com/watch?v=9-VL30-Bn48 414 | https://youtube.com/watch?v=GaxEm9MPlzM 415 | https://youtube.com/watch?v=AIkM352LpN8 416 | https://youtube.com/watch?v=UaerdFeq32E 417 | https://youtube.com/watch?v=YcK3XCEeTsg 418 | https://youtube.com/watch?v=rgc_lIMkRzc 419 | https://youtube.com/watch?v=aq9YpxZiHY4 420 | https://youtube.com/watch?v=ztV9Z1T04RE 421 | https://youtube.com/watch?v=SCD2tB1qILc 422 | https://youtube.com/watch?v=PFKCFewHMc4 423 | https://youtube.com/watch?v=hImf920RCGI 424 | https://youtube.com/watch?v=9xx69FxiZrc 425 | https://youtube.com/watch?v=KWyhhDi5n8g 426 | 427 | # Generated by Discord.FM - chill-corner 428 | https://youtube.com/watch?v=SfVBQ_0CsFo 429 | https://youtube.com/watch?v=6e3QMgWuWi0 430 | https://youtube.com/watch?v=ezenAqbiBxY 431 | https://youtube.com/watch?v=BJxGx2IIIwU 432 | https://youtube.com/watch?v=Fd96lH5-RzY 433 | https://youtube.com/watch?v=vTpZdfm7iuk 434 | https://youtube.com/watch?v=TQxp1aP_IaE 435 | https://youtube.com/watch?v=GfTBEZP09D8 436 | https://youtube.com/watch?v=phXRX1p8woY 437 | https://youtube.com/watch?v=DeOnsIBXtz8 438 | https://youtube.com/watch?v=rHuUJqNsezg 439 | https://youtube.com/watch?v=ZH8VGGvZBok 440 | https://youtube.com/watch?v=Fptml7Dgp4E 441 | https://youtube.com/watch?v=_GdOhROdh9c 442 | https://youtube.com/watch?v=Pe7ZzNx-FTE 443 | https://youtube.com/watch?v=-MrwLLxyPGc 444 | https://youtube.com/watch?v=gUAWeM28wjQ 445 | https://youtube.com/watch?v=nOnrDAjdr7s 446 | https://youtube.com/watch?v=oXhYxDWgk9c 447 | https://youtube.com/watch?v=NhFRmebmwWc 448 | https://youtube.com/watch?v=4fC67Kjsf4k 449 | https://youtube.com/watch?v=lRGPbaFy8hw 450 | https://youtube.com/watch?v=mkMVyw-7avI 451 | https://youtube.com/watch?v=O1RHkPGb31Q 452 | https://youtube.com/watch?v=Pryb1VugJq4 453 | https://youtube.com/watch?v=j9FfYWp_d5w 454 | https://youtube.com/watch?v=SM27KSKeiA4 455 | https://youtube.com/watch?v=-1H6usve0nY 456 | https://youtube.com/watch?v=-HFQs_2Uy1w 457 | https://youtube.com/watch?v=xfaHZXWV0g8 458 | https://youtube.com/watch?v=cOy222ay7nc 459 | https://youtube.com/watch?v=QrC7UUcUW1s 460 | https://youtube.com/watch?v=Q_Qst39q6jw 461 | https://youtube.com/watch?v=PwIYdaplcv4 462 | https://youtube.com/watch?v=4mHW3eGF3Mw 463 | https://youtube.com/watch?v=gx4rsZkCCss 464 | https://youtube.com/watch?v=acHKPu4oIro 465 | https://youtube.com/watch?v=5Y5xjtNltJA 466 | https://youtube.com/watch?v=fn_amMJehPU 467 | https://youtube.com/watch?v=FpQY90M-hww 468 | https://youtube.com/watch?v=b8PPap4dJog 469 | https://youtube.com/watch?v=9K09Ra2l0G8 470 | https://youtube.com/watch?v=0guABiTAbBk 471 | https://youtube.com/watch?v=v9U0qMHHkSo 472 | https://youtube.com/watch?v=6nc8PJvkU2E 473 | https://youtube.com/watch?v=Obx3e7MfEaI 474 | https://youtube.com/watch?v=BVomQtrtMTM 475 | https://youtube.com/watch?v=71rSc6LXlSo 476 | https://youtube.com/watch?v=EkTHpKKD7N0 477 | https://youtube.com/watch?v=7PClJma9Q8U 478 | https://youtube.com/watch?v=cIzM9p3dUm8 479 | https://youtube.com/watch?v=Q1DvVzKXktY 480 | https://youtube.com/watch?v=pk5tpGclppc 481 | https://youtube.com/watch?v=jUqN1Jfw1cA 482 | https://youtube.com/watch?v=Q2gFi6R_h-I 483 | https://youtube.com/watch?v=H-KCI6bsN6E 484 | https://youtube.com/watch?v=vW8Qcgo7X8A 485 | https://youtube.com/watch?v=TsBXn4M9dJE 486 | https://youtube.com/watch?v=ZhzN7-Q00KU 487 | https://youtube.com/watch?v=dfBj4i8MKH4 488 | https://youtube.com/watch?v=jLzuObMhVAI 489 | https://youtube.com/watch?v=7tkPp0YO4lw 490 | https://youtube.com/watch?v=OrcVS3s5D34 491 | https://youtube.com/watch?v=_BJDK15HhV4 492 | https://youtube.com/watch?v=F-wNjIgdgXU 493 | https://youtube.com/watch?v=z_axLG1szU8 494 | https://youtube.com/watch?v=BkTTWqGFywo 495 | https://youtube.com/watch?v=TD51KO-gCtQ 496 | https://youtube.com/watch?v=mPDLoGm6E-Q 497 | https://youtube.com/watch?v=2WTtz0rpYAk 498 | https://youtube.com/watch?v=LLyXx7Zmxkg 499 | https://youtube.com/watch?v=XektDORSOQs 500 | https://youtube.com/watch?v=zE-qxNVoUSo 501 | https://youtube.com/watch?v=It42TsD7_sI 502 | https://youtube.com/watch?v=gmBRRaqGYNw 503 | https://youtube.com/watch?v=NhK8Ehv6aPI 504 | https://youtube.com/watch?v=JtimyzJYUgc 505 | https://youtube.com/watch?v=AMzjbyZhM5U 506 | https://youtube.com/watch?v=qQfteZb53RM 507 | https://youtube.com/watch?v=_UMK9RrdnnM 508 | https://youtube.com/watch?v=Ox25h4qUgOw 509 | https://youtube.com/watch?v=YthChN1Wq8M 510 | https://youtube.com/watch?v=lABPt0CRO_U 511 | https://youtube.com/watch?v=K8_xAAX92BE 512 | https://youtube.com/watch?v=V5-AQTPFJSg 513 | https://youtube.com/watch?v=wd3NsE5wxX0 514 | https://youtube.com/watch?v=m6bNfhj0_nA 515 | https://youtube.com/watch?v=vi7wzz9kXxg 516 | https://youtube.com/watch?v=s8yyuv3eJKM 517 | https://youtube.com/watch?v=OqYCwK4BZK0 518 | https://youtube.com/watch?v=W6Hy0G0R3AQ 519 | https://youtube.com/watch?v=in7CifqoM-M 520 | https://youtube.com/watch?v=eH2Aibf2Fxc 521 | https://youtube.com/watch?v=dBJvstD7khU 522 | https://youtube.com/watch?v=IRhS4Iux50E 523 | https://youtube.com/watch?v=s8XIgR5OGJc 524 | https://youtube.com/watch?v=pgQF1QznOQ8 525 | https://youtube.com/watch?v=NY8IS0ssnXQ 526 | https://youtube.com/watch?v=ngKBxTFplLg 527 | https://youtube.com/watch?v=px9RtIj2tsA 528 | https://youtube.com/watch?v=HEg7lQhRdyw 529 | https://youtube.com/watch?v=Ut-Rk8cYaHA 530 | https://youtube.com/watch?v=Bj6TiOJi1tI 531 | https://youtube.com/watch?v=p_6In1gr36A 532 | https://youtube.com/watch?v=0g2fKSkaSx4 533 | https://youtube.com/watch?v=8HFAARSfmrQ 534 | https://youtube.com/watch?v=Lx2zzIkaUZQ 535 | https://youtube.com/watch?v=Nrx6JIdMB8Y 536 | https://youtube.com/watch?v=EHIiUS6TfXI 537 | https://youtube.com/watch?v=94GmmzhZsko 538 | https://youtube.com/watch?v=8nW1c_li-uw 539 | https://youtube.com/watch?v=tB1Ge-s5bH4 540 | https://youtube.com/watch?v=DUK5v7itSxU 541 | https://youtube.com/watch?v=BKkoRfaUiv0 542 | https://youtube.com/watch?v=vocE5gcqNDk 543 | https://youtube.com/watch?v=qn4hQufHVsE 544 | https://youtube.com/watch?v=4xiZRYEasvY 545 | https://youtube.com/watch?v=LO3uqkaFRkY 546 | https://youtube.com/watch?v=Nh0uMweFR10 547 | https://youtube.com/watch?v=nbbeMhDsoY8 548 | https://youtube.com/watch?v=FXZeZz0kPq0 549 | https://youtube.com/watch?v=jWEw6k6MDhM 550 | https://youtube.com/watch?v=KEVEFgmuBFQ 551 | https://youtube.com/watch?v=7_VR3trN82M 552 | https://youtube.com/watch?v=_3h_n2seS1g 553 | https://youtube.com/watch?v=NuK56z2FaK4 554 | https://youtube.com/watch?v=jfSc58Jk4zg 555 | https://youtube.com/watch?v=Xda_K7abC2I 556 | https://youtube.com/watch?v=KJdO6aFlKCU 557 | https://youtube.com/watch?v=AL4Tc7jLuK4 558 | https://youtube.com/watch?v=lIhvOOT2zbQ 559 | https://youtube.com/watch?v=zJZu54gtmNc 560 | https://youtube.com/watch?v=rloprnff9iM 561 | https://youtube.com/watch?v=cqkzoskWfww 562 | https://youtube.com/watch?v=QVkGFtSTwis 563 | https://youtube.com/watch?v=E2JQxgffxKg 564 | https://youtube.com/watch?v=-yfI6KAPTPU 565 | https://youtube.com/watch?v=45pBJzi_YaY 566 | https://youtube.com/watch?v=iGZC5w_Qosc 567 | https://youtube.com/watch?v=fcsDG_jVYbc 568 | https://youtube.com/watch?v=TzFZTqIesYM 569 | https://youtube.com/watch?v=v7Srbp8WPMY 570 | https://youtube.com/watch?v=FZWHVo-t2Vo 571 | https://youtube.com/watch?v=1hJKhiew2O0 572 | https://youtube.com/watch?v=9VPfprmtSF4 573 | https://youtube.com/watch?v=Erj8GpZFQnM 574 | https://youtube.com/watch?v=SWMG9xA2OJQ 575 | https://youtube.com/watch?v=9EgLB1_FXqg 576 | https://youtube.com/watch?v=R27SK1s1FAg 577 | https://youtube.com/watch?v=j4n7fWjmomA 578 | https://youtube.com/watch?v=WZNHgs8QIs8 579 | https://youtube.com/watch?v=IufdJpZT_ak 580 | https://youtube.com/watch?v=F7khiq25Xr0 581 | https://youtube.com/watch?v=ksNBf8kXpqQ 582 | https://youtube.com/watch?v=_aIOM9_8I8U 583 | https://youtube.com/watch?v=IRD7WylAfkw 584 | https://youtube.com/watch?v=5LWj1MFUTrk 585 | https://youtube.com/watch?v=uNgqPMI3jQk 586 | https://youtube.com/watch?v=_ILsdcs__ME 587 | https://youtube.com/watch?v=gEhNQGBlxBI 588 | https://youtube.com/watch?v=WinkoZiOYQc 589 | https://youtube.com/watch?v=bzXJv7gTjeg 590 | https://youtube.com/watch?v=UVnn6ueVs9A 591 | https://youtube.com/watch?v=3gxNW2Ulpwk 592 | https://youtube.com/watch?v=f_DX1A7f43o 593 | https://youtube.com/watch?v=HNuqVGGNr04 594 | https://youtube.com/watch?v=uLUbpz8AOoI 595 | https://youtube.com/watch?v=D3fHXpgqGEc 596 | https://youtube.com/watch?v=Cy8duEIHEig 597 | https://youtube.com/watch?v=s0aMSTtI8nE 598 | https://youtube.com/watch?v=wltiSg6O0PY 599 | https://youtube.com/watch?v=PnfkZrbqqVs 600 | https://youtube.com/watch?v=2ApY1nY6IYg 601 | https://youtube.com/watch?v=cElu1JcNqfg 602 | https://youtube.com/watch?v=O8tIRYECJbk 603 | https://youtube.com/watch?v=MRHojNbDEUg 604 | https://youtube.com/watch?v=6tpGC4lgpMg 605 | https://youtube.com/watch?v=ioMq8f_UUX4 606 | https://youtube.com/watch?v=eD6MeGYG7Ok 607 | https://youtube.com/watch?v=WZdH6rvhKd8 608 | https://youtube.com/watch?v=sNAQ6Y7VXsQ 609 | https://youtube.com/watch?v=1adJmULQiAI 610 | https://youtube.com/watch?v=ijlJjrk0rTk 611 | https://youtube.com/watch?v=nLZvnaP0h9g 612 | 613 | # Generated by Discord.FM - country-countdown 614 | https://youtube.com/watch?v=gju4CyAsMhI 615 | https://youtube.com/watch?v=w9PXnACu9jo 616 | https://youtube.com/watch?v=f2Exzqu2ocs 617 | https://youtube.com/watch?v=TIwKZLcQM0E 618 | https://youtube.com/watch?v=fQPS2sk1VTY 619 | https://youtube.com/watch?v=3tthIHXUsPs 620 | https://youtube.com/watch?v=hRjQmIqA1dY 621 | https://youtube.com/watch?v=vvgLilGV-es 622 | https://youtube.com/watch?v=CbxuXq_981s 623 | https://youtube.com/watch?v=lB8Nkn3Xjes 624 | https://youtube.com/watch?v=m3auI7AYoZA 625 | https://youtube.com/watch?v=kc823UD0LeU 626 | https://youtube.com/watch?v=61KfoldSxOA 627 | https://youtube.com/watch?v=xH8R1Mt7IA8 628 | https://youtube.com/watch?v=a_2P4gxO7yo 629 | https://youtube.com/watch?v=YbAE9HWha-k 630 | https://youtube.com/watch?v=YWBZM5mztE4 631 | https://youtube.com/watch?v=zPIuQcr6SsQ 632 | https://youtube.com/watch?v=r9_0u0porO8 633 | https://youtube.com/watch?v=A_wbMkk0gSs 634 | https://youtube.com/watch?v=ODRWKGIxB4M 635 | https://youtube.com/watch?v=l3zhOoDKVvs 636 | https://youtube.com/watch?v=ckt4ScASUhg 637 | https://youtube.com/watch?v=lrzd6R0PyoM 638 | https://youtube.com/watch?v=3-FjESLZytk 639 | https://youtube.com/watch?v=tLKA3CE_fsQ 640 | https://youtube.com/watch?v=3B_UiWgbMRg 641 | https://youtube.com/watch?v=TJJgWAqTHMU 642 | https://youtube.com/watch?v=_yQl3C52Smw 643 | https://youtube.com/watch?v=6OwYVg4n1Qk 644 | https://youtube.com/watch?v=4IIgzZpuv6A 645 | https://youtube.com/watch?v=OU87ugesC3Q 646 | https://youtube.com/watch?v=0fpyrHJwag8 647 | https://youtube.com/watch?v=IX5P2v9jcQ0 648 | https://youtube.com/watch?v=xscn7s0PEcY 649 | https://youtube.com/watch?v=RwPLmiwf9fM 650 | https://youtube.com/watch?v=UL_7LMXHEyw 651 | https://youtube.com/watch?v=gFccdvKehQI 652 | https://youtube.com/watch?v=-tcAwyNlSjs 653 | https://youtube.com/watch?v=oew35i9czi8 654 | https://youtube.com/watch?v=3R422tahouA 655 | https://youtube.com/watch?v=PcvN28p7Fzc 656 | https://youtube.com/watch?v=NoSD5rloyCI 657 | https://youtube.com/watch?v=Sf6Ivae_88s 658 | https://youtube.com/watch?v=j0bADL4UhBc 659 | https://youtube.com/watch?v=jRAKHoKzgNg 660 | https://youtube.com/watch?v=9eiOjNVdJmk 661 | https://youtube.com/watch?v=otdh67EINMU 662 | https://youtube.com/watch?v=BAMQ9QBgSdc 663 | https://youtube.com/watch?v=IJ5jIOl957M 664 | https://youtube.com/watch?v=ifwhV0FJiaY 665 | https://youtube.com/watch?v=6TZvzU1MPM4 666 | https://youtube.com/watch?v=Fy15IulKtjw 667 | https://youtube.com/watch?v=UIJRVG8yD1M 668 | https://youtube.com/watch?v=1GqhBP2Pp6o 669 | https://youtube.com/watch?v=enEZjjk77Nk 670 | https://youtube.com/watch?v=AA8O9hvHPUo 671 | https://youtube.com/watch?v=OHwm_TLgYJA 672 | https://youtube.com/watch?v=JIRfMD9lvLg 673 | https://youtube.com/watch?v=lHEZ3bQAUCU 674 | https://youtube.com/watch?v=a633nyqWA48 675 | https://youtube.com/watch?v=8a3jr-Xn1GM 676 | https://youtube.com/watch?v=8m4Uwttzuy4 677 | https://youtube.com/watch?v=9TL7Eo04a3A 678 | https://youtube.com/watch?v=y3MeFrri9YI 679 | https://youtube.com/watch?v=v5ZKmEjNnTw 680 | https://youtube.com/watch?v=bz_bUjPMAAM 681 | https://youtube.com/watch?v=hYkfQa3ZHM4 682 | https://youtube.com/watch?v=Pkb7d1gdBoM 683 | https://youtube.com/watch?v=fyfMZSaw0i0 684 | https://youtube.com/watch?v=ddaKazRHyzU 685 | https://youtube.com/watch?v=aw-PTVoblRk 686 | https://youtube.com/watch?v=fGj77BrEgj4 687 | https://youtube.com/watch?v=irxgOdaykPE 688 | https://youtube.com/watch?v=k4bBu9HD_Qo 689 | https://youtube.com/watch?v=PwmXO0J-PAA 690 | https://youtube.com/watch?v=Wz5_ktnCbvo 691 | https://youtube.com/watch?v=uyGSe76rAJc 692 | https://youtube.com/watch?v=JM07F5bYRhc 693 | https://youtube.com/watch?v=r4byIiHc5Eg 694 | https://youtube.com/watch?v=lECJ2bu0Kv8 695 | https://youtube.com/watch?v=hPn-TCxXjn0 696 | https://youtube.com/watch?v=Qq1nGVSRx4g 697 | https://youtube.com/watch?v=J8YvzZsXghQ 698 | https://youtube.com/watch?v=C1fU7KkI1Y0 699 | https://youtube.com/watch?v=LP5JaEJ5jHY 700 | https://youtube.com/watch?v=DQYNM6SjD_o 701 | https://youtube.com/watch?v=kyFD-YevcEM 702 | https://youtube.com/watch?v=rRcSdOcUQPk 703 | https://youtube.com/watch?v=z2uPKDXS8BA 704 | https://youtube.com/watch?v=fbp8-Yr0gPs 705 | https://youtube.com/watch?v=SkWOaOAd924 706 | https://youtube.com/watch?v=MH0lI2TSEVU 707 | https://youtube.com/watch?v=Q8XkLrErSHw 708 | https://youtube.com/watch?v=X09s37tJ09s 709 | https://youtube.com/watch?v=dbAp5nphTz4 710 | https://youtube.com/watch?v=Pskx1w4rOEg 711 | https://youtube.com/watch?v=Ai4kVwg1kkc 712 | https://youtube.com/watch?v=ysqX8YKvtmU 713 | https://youtube.com/watch?v=yhPNZKdVRh8 714 | https://youtube.com/watch?v=1SCOimBo5tg 715 | https://youtube.com/watch?v=MgJ7v8D8iFE 716 | https://youtube.com/watch?v=55EARrP_1w8 717 | https://youtube.com/watch?v=el9WpGaoLFw 718 | https://youtube.com/watch?v=2t3z1jISiVc 719 | https://youtube.com/watch?v=yi8ypj_2acE 720 | https://youtube.com/watch?v=p4nhRyDZX90 721 | https://youtube.com/watch?v=FLQATzCyxfE 722 | https://youtube.com/watch?v=FAsQ4nOJgO4 723 | https://youtube.com/watch?v=nujTVzx3hQU 724 | https://youtube.com/watch?v=rReQoBp5d5c 725 | https://youtube.com/watch?v=G_lNXzdowlU 726 | https://youtube.com/watch?v=yOPLHA133m0 727 | https://youtube.com/watch?v=B1xyoRXt7K4 728 | https://youtube.com/watch?v=PFcboZcAzqg 729 | https://youtube.com/watch?v=7K0akU-Rdv8 730 | https://youtube.com/watch?v=4zAThXFOy2c 731 | https://youtube.com/watch?v=HP6qPkJq2hM 732 | https://youtube.com/watch?v=H5jSwgcS7rY 733 | https://youtube.com/watch?v=BrPK4huvorI 734 | https://youtube.com/watch?v=jjm5p2zgQYo 735 | https://youtube.com/watch?v=8_DqQ7CuCuQ 736 | https://youtube.com/watch?v=tD3IVvPJUYs 737 | https://youtube.com/watch?v=RWSaZ1ivz2M 738 | https://youtube.com/watch?v=6ab86ynfedQ 739 | https://youtube.com/watch?v=GwHpiBXDaj8 740 | https://youtube.com/watch?v=kWBNRCZlEk0 741 | https://youtube.com/watch?v=XOmI-7yVNNE 742 | https://youtube.com/watch?v=m9lDtvaGQio 743 | https://youtube.com/watch?v=eR8lqZuOCOg 744 | https://youtube.com/watch?v=tghmK218P5E 745 | https://youtube.com/watch?v=WSRVbSGacqs 746 | https://youtube.com/watch?v=bozmKNFYaHQ 747 | https://youtube.com/watch?v=OWSq240NXEY 748 | https://youtube.com/watch?v=BlOk5wV0DRo 749 | https://youtube.com/watch?v=DLokeU1Ck-Q 750 | https://youtube.com/watch?v=9YyGCwvFm-U 751 | https://youtube.com/watch?v=DRjOBvnpXVU 752 | https://youtube.com/watch?v=Ja7PhPTG1JE 753 | https://youtube.com/watch?v=ouWQ25O-Mcg 754 | https://youtube.com/watch?v=_VVtOIzPg9Q 755 | https://youtube.com/watch?v=rOuF3k_-asA 756 | https://youtube.com/watch?v=HUAUsbbhRmc 757 | https://youtube.com/watch?v=iYVPkqpS_Dw 758 | https://youtube.com/watch?v=pyBNd_-F5Ts 759 | https://youtube.com/watch?v=vwkYxPpmEPE 760 | https://youtube.com/watch?v=FiyXZhhqWqc 761 | https://youtube.com/watch?v=cgPRvCA5-PM 762 | https://youtube.com/watch?v=My7bYa3podM 763 | https://youtube.com/watch?v=awzNHuGqoMc 764 | https://youtube.com/watch?v=zY6cMMtLCcQ 765 | https://youtube.com/watch?v=KRw-55l_hw0 766 | https://youtube.com/watch?v=pxdOHJjjNek 767 | https://youtube.com/watch?v=w2CELiObPeQ 768 | https://youtube.com/watch?v=4Phu1jJhVT4 769 | https://youtube.com/watch?v=GzMJ6DvrXKE 770 | https://youtube.com/watch?v=K8WlCqZPTeg 771 | https://youtube.com/watch?v=Gdu8M2val_w 772 | https://youtube.com/watch?v=8N8_CRpL6wk 773 | https://youtube.com/watch?v=mpc3ffTLm_g 774 | https://youtube.com/watch?v=zY9es8R4PD4 775 | https://youtube.com/watch?v=25AEc6dJbws 776 | https://youtube.com/watch?v=EQY87ZICa9E 777 | https://youtube.com/watch?v=heyIXXCfyaM 778 | https://youtube.com/watch?v=KfDr_7LN-Ew 779 | https://youtube.com/watch?v=GWVBRuGVlHI 780 | https://youtube.com/watch?v=VrgCwAM06Yg 781 | https://youtube.com/watch?v=3ealNayCkaU 782 | https://youtube.com/watch?v=8IMn4c4MwM0 783 | https://youtube.com/watch?v=0uPHfQSe5rI 784 | https://youtube.com/watch?v=QWVAJ7xqqGU 785 | https://youtube.com/watch?v=Gz2oHRD2pF4 786 | https://youtube.com/watch?v=iUgQLz5y7QI 787 | https://youtube.com/watch?v=vuha_SUwoBU 788 | https://youtube.com/watch?v=cacL5jNJ87c 789 | https://youtube.com/watch?v=hxcmik9Rs40 790 | https://youtube.com/watch?v=1FhRhzAWzLA 791 | https://youtube.com/watch?v=wQfP1lcJ_eo 792 | https://youtube.com/watch?v=cd1HS2Yf7Yw 793 | https://youtube.com/watch?v=rNJwu-YkQlc 794 | https://youtube.com/watch?v=h9YEWIpBQco 795 | https://youtube.com/watch?v=gDWepmUXk3w 796 | https://youtube.com/watch?v=UL0TTihpfxA 797 | https://youtube.com/watch?v=e3lCzEOy5xs 798 | https://youtube.com/watch?v=56m-t2PeKg8 799 | https://youtube.com/watch?v=k8JN4T8p8Pg 800 | https://youtube.com/watch?v=0-yBejAuns4 801 | https://youtube.com/watch?v=YeLqgmVJk0Y 802 | https://youtube.com/watch?v=l2gGXlW6wSY 803 | https://youtube.com/watch?v=xQDbjIh3_Ts 804 | https://youtube.com/watch?v=6LPDBZXgdA0 805 | https://youtube.com/watch?v=s-F0US5eKnY 806 | https://youtube.com/watch?v=KoQrH6EMnas 807 | https://youtube.com/watch?v=UkLp4S-x5b4 808 | https://youtube.com/watch?v=dV0eMaIFlvA 809 | https://youtube.com/watch?v=6VQJHSnGIXk 810 | https://youtube.com/watch?v=H10IyxaVwx8 811 | https://youtube.com/watch?v=-hVqG44A6No 812 | https://youtube.com/watch?v=-GUWXF3LIy8 813 | https://youtube.com/watch?v=aRh-vBOS-dU 814 | https://youtube.com/watch?v=dCN4QH2peJQ 815 | https://youtube.com/watch?v=FDUOcHg5ijg 816 | https://youtube.com/watch?v=xZjosn2u1gA 817 | https://youtube.com/watch?v=4tjg5c7Wo4g 818 | https://youtube.com/watch?v=TEotikBN5Bw 819 | https://youtube.com/watch?v=-NPqM3vPDg8 820 | https://youtube.com/watch?v=QsRMlR0CUt8 821 | https://youtube.com/watch?v=_rHuitW9xDc 822 | https://youtube.com/watch?v=eHVax41cwcM 823 | https://youtube.com/watch?v=9n5G0qFBsHM 824 | https://youtube.com/watch?v=hpKFRP05Po4 825 | https://youtube.com/watch?v=-XC3kiW6UNE 826 | https://youtube.com/watch?v=o1C3mVUkAt8 827 | https://youtube.com/watch?v=31KOGb1MU4g 828 | https://youtube.com/watch?v=wA0jkVfrhuI 829 | https://youtube.com/watch?v=ZV1oQiRdoPc 830 | https://youtube.com/watch?v=JXAgv665J14 831 | https://youtube.com/watch?v=ZhcjZjLOv38 832 | https://youtube.com/watch?v=3YfNFR6gh2E 833 | https://youtube.com/watch?v=KmxaY_OVvWA 834 | https://youtube.com/watch?v=usGv0gB2zEU 835 | https://youtube.com/watch?v=ukick72Qafc 836 | https://youtube.com/watch?v=T1pMmg4_FWU 837 | https://youtube.com/watch?v=RYKnP-6cDWE 838 | https://youtube.com/watch?v=gq2ZJ418ad8 839 | https://youtube.com/watch?v=I4keD5Qvya4 840 | https://youtube.com/watch?v=e4ujS1er1r0 841 | https://youtube.com/watch?v=eiBinM-f-Pk 842 | https://youtube.com/watch?v=RM5aW83L_DE 843 | https://youtube.com/watch?v=F7v2TmV3Zuc 844 | https://youtube.com/watch?v=-R9GrGheMRw 845 | https://youtube.com/watch?v=9RWm-IXjYz0 846 | https://youtube.com/watch?v=yHGPmbu3QNk 847 | https://youtube.com/watch?v=DY9D01WPIN0 848 | https://youtube.com/watch?v=x5XvT8NMI8g 849 | https://youtube.com/watch?v=etr7UtnUflM 850 | https://youtube.com/watch?v=D6ablYH-rpw 851 | https://youtube.com/watch?v=G2BWyY4B36Y 852 | https://youtube.com/watch?v=lJIB_s_7dcw 853 | https://youtube.com/watch?v=qebEy8p6pAY 854 | https://youtube.com/watch?v=py5VdvxO9cE 855 | https://youtube.com/watch?v=02J61h9eqAM 856 | https://youtube.com/watch?v=7dtfBxUTXRY 857 | https://youtube.com/watch?v=oiG-4-V7Xd0 858 | https://youtube.com/watch?v=R-onRguTLz0 859 | https://youtube.com/watch?v=JpZ82oU_UQc 860 | https://youtube.com/watch?v=YNXq6Jxp3dM 861 | https://youtube.com/watch?v=nTE4IS0NXxo 862 | https://youtube.com/watch?v=Qt0_oPPK6eA 863 | https://youtube.com/watch?v=ppC5bfJduhE 864 | https://youtube.com/watch?v=7bRJLkNqNXI 865 | https://youtube.com/watch?v=aFkcAH-m9W0 866 | https://youtube.com/watch?v=lALI9UXOv18 867 | https://youtube.com/watch?v=PMqUat-Oqsk 868 | 869 | # Generated by Discord.FM - rock-n-roll 870 | https://youtube.com/watch?v=pR30knJs4Xk 871 | https://youtube.com/watch?v=o1tj2zJ2Wvg 872 | https://youtube.com/watch?v=nf0oXY4nDxE 873 | https://youtube.com/watch?v=xhgE5bfcFTU 874 | https://youtube.com/watch?v=KCy7lLQwToI 875 | https://youtube.com/watch?v=7wRHBLwpASw 876 | https://youtube.com/watch?v=Mke9EHMQMYI 877 | https://youtube.com/watch?v=Qq4j1LtCdww 878 | https://youtube.com/watch?v=hTWKbfoikeg 879 | https://youtube.com/watch?v=BWrtrK1Q2EQ 880 | https://youtube.com/watch?v=auLBLk4ibAk 881 | https://youtube.com/watch?v=f3t9SfrfDZM 882 | https://youtube.com/watch?v=ZXhuso4OTG4 883 | https://youtube.com/watch?v=zUwEIt9ez7M 884 | https://youtube.com/watch?v=s4nWy8pmIM4 885 | https://youtube.com/watch?v=ye5BuYf8q4o 886 | https://youtube.com/watch?v=TcJ-wNmazHQ 887 | https://youtube.com/watch?v=qFhM1XZsh6o 888 | https://youtube.com/watch?v=XwqMKf7r7Xg 889 | https://youtube.com/watch?v=2X_2IdybTV0 890 | https://youtube.com/watch?v=MbXWrmQW-OE 891 | https://youtube.com/watch?v=kyXz6eMCj2k 892 | https://youtube.com/watch?v=BPwZaQfoIbU 893 | https://youtube.com/watch?v=mAxUIjJrFKQ 894 | https://youtube.com/watch?v=pEyBu0OiWtg 895 | https://youtube.com/watch?v=dZEnQogAd8U 896 | https://youtube.com/watch?v=qGaOlfmX8rQ 897 | https://youtube.com/watch?v=TuCGiV-EVjA 898 | https://youtube.com/watch?v=Vppbdf-qtGU 899 | https://youtube.com/watch?v=aIM4gmho8P0 900 | https://youtube.com/watch?v=S7q_12tYZdA 901 | https://youtube.com/watch?v=PdLIerfXuZ4 902 | https://youtube.com/watch?v=2Dq-k_jzEtI 903 | https://youtube.com/watch?v=AQ4xwmZ6zi4 904 | https://youtube.com/watch?v=jACrmwTsi08 905 | https://youtube.com/watch?v=VZ5bS3_BCDs 906 | https://youtube.com/watch?v=uXFxPN7Sqxo 907 | https://youtube.com/watch?v=-jB_QM73Slk 908 | https://youtube.com/watch?v=bJ9r8LMU9bQ 909 | https://youtube.com/watch?v=8Zx6RXGNISk 910 | https://youtube.com/watch?v=d8ekz_CSBVg 911 | https://youtube.com/watch?v=ixZDTiXiHsc 912 | https://youtube.com/watch?v=-U98qkjbYek 913 | https://youtube.com/watch?v=okC4hw8IPYg 914 | https://youtube.com/watch?v=QkSASi_eN_k 915 | https://youtube.com/watch?v=A_WjRhKVftQ 916 | https://youtube.com/watch?v=x7bIbVlIqEc 917 | https://youtube.com/watch?v=d2GCp8vs168 918 | https://youtube.com/watch?v=uijnGTq4wgI 919 | https://youtube.com/watch?v=P2LDMT7DsJ8 920 | https://youtube.com/watch?v=8Zf7lgMpTXA 921 | https://youtube.com/watch?v=rKhQ2HZi8g8 922 | https://youtube.com/watch?v=jFi2ZM_7FnM 923 | https://youtube.com/watch?v=yNnH1sN0dw8 924 | https://youtube.com/watch?v=lZiNtbgm9oM 925 | https://youtube.com/watch?v=rDbVY3gCJgg 926 | https://youtube.com/watch?v=acLYS3oDLEg 927 | https://youtube.com/watch?v=sFz678yh_6U 928 | https://youtube.com/watch?v=8-r-V0uK4u0 929 | https://youtube.com/watch?v=l5Zpmaz2OKE 930 | https://youtube.com/watch?v=qHFxncb1gRY 931 | https://youtube.com/watch?v=O7GroZ60UYc 932 | https://youtube.com/watch?v=Dqok5m4lqeE 933 | https://youtube.com/watch?v=GOJk0HW_hJw 934 | https://youtube.com/watch?v=76k95Je3daw 935 | https://youtube.com/watch?v=vpEwKz6YCEs 936 | https://youtube.com/watch?v=5XfRjVo5wOE 937 | https://youtube.com/watch?v=5MnDbWqe_kQ 938 | https://youtube.com/watch?v=ZBsFntczDoM 939 | https://youtube.com/watch?v=lrXIQQ8PeRs 940 | https://youtube.com/watch?v=HndTMmVIKRc 941 | https://youtube.com/watch?v=btPJPFnesV4 942 | https://youtube.com/watch?v=G-FpHV3xCJI 943 | https://youtube.com/watch?v=v3H7oanysGg 944 | https://youtube.com/watch?v=iC8oP4Z_xPw 945 | https://youtube.com/watch?v=OjyZKfdwlng 946 | https://youtube.com/watch?v=OuJUq58VQXQ 947 | https://youtube.com/watch?v=fr6KVNt-1Ek 948 | https://youtube.com/watch?v=3MutXUvS37k 949 | https://youtube.com/watch?v=rMbATaj7Il8 950 | https://youtube.com/watch?v=1XHcPYorSJw 951 | https://youtube.com/watch?v=fhxFXi4IQzE 952 | https://youtube.com/watch?v=nEIcTstEmnQ 953 | https://youtube.com/watch?v=Haypxj24_Uw 954 | https://youtube.com/watch?v=KUv2zaj9mPs 955 | https://youtube.com/watch?v=1etbYLm05W4 956 | https://youtube.com/watch?v=eHKqA5mkT7I 957 | https://youtube.com/watch?v=UJor2jV_czE 958 | https://youtube.com/watch?v=GqH21LEmfbQ 959 | https://youtube.com/watch?v=cibZydv3XLM 960 | https://youtube.com/watch?v=7mdIWaRi-7c 961 | https://youtube.com/watch?v=gxEPV4kolz0 962 | https://youtube.com/watch?v=EErSKhC0CZs 963 | https://youtube.com/watch?v=Red3R17FlUQ 964 | https://youtube.com/watch?v=JsntlJZ9h1U 965 | https://youtube.com/watch?v=cjqOsYRQI0o 966 | https://youtube.com/watch?v=qYkbTyHXwbs 967 | https://youtube.com/watch?v=fyHXlE9Z3m8 968 | https://youtube.com/watch?v=dJe1iUuAW4M 969 | https://youtube.com/watch?v=_3rVtcm6pBE 970 | https://youtube.com/watch?v=vFUJrg5GAvs 971 | https://youtube.com/watch?v=LatorN4P9aA 972 | https://youtube.com/watch?v=tNG62fULYgI 973 | https://youtube.com/watch?v=MxGEVIvSFeY 974 | https://youtube.com/watch?v=OMD8hBsA-RI 975 | https://youtube.com/watch?v=2lLmYLw0WRI 976 | https://youtube.com/watch?v=WhnZdSU2OlY 977 | https://youtube.com/watch?v=5QkoOHvrViM 978 | https://youtube.com/watch?v=2rxWPEdYCnI 979 | https://youtube.com/watch?v=yK0P1Bk8Cx4 980 | https://youtube.com/watch?v=N4d7Wp9kKjA 981 | https://youtube.com/watch?v=LD1BWcf8vhE 982 | https://youtube.com/watch?v=OyQVjGdJ60g 983 | https://youtube.com/watch?v=T3phscjgc_A 984 | https://youtube.com/watch?v=ltrMfT4Qz5Y 985 | https://youtube.com/watch?v=3pYNd0MSVXs 986 | https://youtube.com/watch?v=eFTLKWw542g 987 | https://youtube.com/watch?v=zpOULjyy-n8 988 | https://youtube.com/watch?v=5c1m2BAg2Sc 989 | https://youtube.com/watch?v=XKc7z-enzmA 990 | https://youtube.com/watch?v=SECVGN4Bsgg 991 | https://youtube.com/watch?v=_izt7vlJKM0 992 | https://youtube.com/watch?v=BqDjMZKf-wg 993 | https://youtube.com/watch?v=8ZIOkbrX_uU 994 | https://youtube.com/watch?v=cOeKidp-iWo 995 | https://youtube.com/watch?v=YkADj0TPrJA 996 | https://youtube.com/watch?v=R-O3kYrDPbI 997 | https://youtube.com/watch?v=OMOGaugKpzs 998 | https://youtube.com/watch?v=KNIZofPB8ZM 999 | https://youtube.com/watch?v=7v2GDbEmjGE 1000 | https://youtube.com/watch?v=aENX1Sf3fgQ 1001 | https://youtube.com/watch?v=svWINSRhQU0 1002 | https://youtube.com/watch?v=ZfNR98ajB1U 1003 | https://youtube.com/watch?v=0Uc3ZrmhDN4 1004 | https://youtube.com/watch?v=LTCyZvb2Uzw 1005 | https://youtube.com/watch?v=RKox6__hziY 1006 | https://youtube.com/watch?v=ZaLI1pRL11Y 1007 | https://youtube.com/watch?v=ayE6Shlv598 1008 | https://youtube.com/watch?v=rGvR6s0yF3k 1009 | https://youtube.com/watch?v=8NsJ84YV1oA 1010 | https://youtube.com/watch?v=FTQbiNvZqaY 1011 | https://youtube.com/watch?v=MV0F_XiR48Q 1012 | https://youtube.com/watch?v=quMlRhlVR3I 1013 | https://youtube.com/watch?v=IwSTe9uit48 1014 | https://youtube.com/watch?v=i3MXiTeH_Pg 1015 | https://youtube.com/watch?v=ij1AJRymxvA 1016 | https://youtube.com/watch?v=jxcZAHTyVCI 1017 | https://youtube.com/watch?v=62XB9IbMnxQ 1018 | https://youtube.com/watch?v=raNGeq3_DtM 1019 | https://youtube.com/watch?v=Th3ycKQV_4k 1020 | https://youtube.com/watch?v=r3g1kPGDcbc 1021 | https://youtube.com/watch?v=p5rQHoaQpTw 1022 | https://youtube.com/watch?v=buadfz2qcbY 1023 | https://youtube.com/watch?v=qqszqHKIqEk 1024 | https://youtube.com/watch?v=CdqoNKCCt7A 1025 | https://youtube.com/watch?v=t1TcDHrkQYg 1026 | https://youtube.com/watch?v=IAmgTNATJkk 1027 | https://youtube.com/watch?v=5eAQa4MOGkE 1028 | https://youtube.com/watch?v=Sx3kpa51EyY 1029 | https://youtube.com/watch?v=SRvCvsRp5ho 1030 | https://youtube.com/watch?v=lDK9QqIzhwk 1031 | https://youtube.com/watch?v=RY7S6EgSlCI 1032 | https://youtube.com/watch?v=ye-MwxuXfeo 1033 | https://youtube.com/watch?v=QGTzMvXTUiY 1034 | https://youtube.com/watch?v=fwtzUvcJIPw 1035 | https://youtube.com/watch?v=K1b8AhIsSYQ 1036 | https://youtube.com/watch?v=FgDU17xqNXo 1037 | https://youtube.com/watch?v=c1f7eZ8cHpM 1038 | https://youtube.com/watch?v=VMnjF1O4eH0 1039 | https://youtube.com/watch?v=0CVLVaBECuc 1040 | https://youtube.com/watch?v=h04CH9YZcpI 1041 | https://youtube.com/watch?v=C11MzbEcHlw 1042 | https://youtube.com/watch?v=3QGMCSCFoKA 1043 | https://youtube.com/watch?v=YoDh_gHDvkk 1044 | https://youtube.com/watch?v=9TcztyNlFx0 1045 | https://youtube.com/watch?v=u4xp2lgiAjY 1046 | https://youtube.com/watch?v=JSUIQgEVDM4 1047 | https://youtube.com/watch?v=Sx3Tv0ESXOM 1048 | https://youtube.com/watch?v=rrSdXtFJG20 1049 | https://youtube.com/watch?v=xl7Hd2r0LOs 1050 | https://youtube.com/watch?v=pJyQpAiMXkg 1051 | https://youtube.com/watch?v=rnKFtJB0ALc 1052 | https://youtube.com/watch?v=6VxoXn-0Ezs 1053 | https://youtube.com/watch?v=xF9J06CAXm8 1054 | https://youtube.com/watch?v=eyhMgXmR3w4 1055 | https://youtube.com/watch?v=zg21Rkew874 1056 | https://youtube.com/watch?v=lNDe0kEKrqY 1057 | https://youtube.com/watch?v=eYEgYVyBDuM 1058 | https://youtube.com/watch?v=mjwV5w0IrcA 1059 | https://youtube.com/watch?v=deB_u-to-IE 1060 | https://youtube.com/watch?v=Ww-qVcLm97c 1061 | https://youtube.com/watch?v=RbMS0BzOMV0 1062 | https://youtube.com/watch?v=KUwjNBjqR-c 1063 | https://youtube.com/watch?v=x2KRpRMSu4g 1064 | https://youtube.com/watch?v=zSQp7YOPdJ8 1065 | https://youtube.com/watch?v=Eab_beh07HU 1066 | https://youtube.com/watch?v=T0spkrwl9Qk 1067 | https://youtube.com/watch?v=Al8UHnjusq0 1068 | https://youtube.com/watch?v=DDOL7iY8kfo 1069 | https://youtube.com/watch?v=nA7ZyJqq5WI 1070 | https://youtube.com/watch?v=NsLyI1_R01M 1071 | https://youtube.com/watch?v=QQLWF_ItzYs 1072 | https://youtube.com/watch?v=ooYjf95rATg 1073 | https://youtube.com/watch?v=rgczlrYM4eI 1074 | https://youtube.com/watch?v=oOg5VxrRTi0 1075 | https://youtube.com/watch?v=Bl4dEAtxo0M 1076 | https://youtube.com/watch?v=2OlAx4Dok38 1077 | https://youtube.com/watch?v=OCwigPhpiXs 1078 | https://youtube.com/watch?v=2MVplfdNC6E 1079 | https://youtube.com/watch?v=pQ9pYwCKopE 1080 | https://youtube.com/watch?v=oYXqb6x50lA 1081 | https://youtube.com/watch?v=1VaEdKwXJhM 1082 | https://youtube.com/watch?v=sZLKtjATZt0 1083 | https://youtube.com/watch?v=vyGzPmgR1QY 1084 | https://youtube.com/watch?v=i2RKWJD5ops 1085 | https://youtube.com/watch?v=rsMW3VSHAKg 1086 | https://youtube.com/watch?v=rCp2h5jslKY 1087 | https://youtube.com/watch?v=y2oKRKZnEoA 1088 | https://youtube.com/watch?v=wdCJRybAtso 1089 | https://youtube.com/watch?v=ttR9Hek6MyA 1090 | https://youtube.com/watch?v=oxKCPjcvbys 1091 | https://youtube.com/watch?v=D2qAj2XnLYo 1092 | https://youtube.com/watch?v=6Whgn_iE5uc 1093 | https://youtube.com/watch?v=aS_sAa37xag 1094 | https://youtube.com/watch?v=lrfhf1Gv4Tw 1095 | https://youtube.com/watch?v=YH5Arbm47IQ 1096 | https://youtube.com/watch?v=82cJgPXU-ik 1097 | https://youtube.com/watch?v=ZDwotNLyz10 1098 | https://youtube.com/watch?v=XjV0z3Rf-ac 1099 | https://youtube.com/watch?v=4PvN7ujfj2w 1100 | https://youtube.com/watch?v=e5MAg_yWsq8 1101 | https://youtube.com/watch?v=p1Y-rfbzmgY 1102 | https://youtube.com/watch?v=Oextk-If8HQ 1103 | https://youtube.com/watch?v=bjPqsDU0j2I 1104 | https://youtube.com/watch?v=OZuW6BH_Vak 1105 | https://youtube.com/watch?v=3T1c7GkzRQQ 1106 | https://youtube.com/watch?v=siMFORx8uO8 1107 | https://youtube.com/watch?v=LFQMk6WWcoM 1108 | https://youtube.com/watch?v=SSR6ZzjDZ94 1109 | https://youtube.com/watch?v=Dy4HA3vUv2c 1110 | https://youtube.com/watch?v=DohRa9lsx0Q 1111 | https://youtube.com/watch?v=rwYU8jq6Qw0 1112 | https://youtube.com/watch?v=9jK-NcRmVcw 1113 | https://youtube.com/watch?v=CQ5_QxwFjNI 1114 | https://youtube.com/watch?v=wIjUY3pjN8E 1115 | https://youtube.com/watch?v=mIjZE4kcg_Q 1116 | https://youtube.com/watch?v=wyQUCYl-ocs 1117 | https://youtube.com/watch?v=FQ2yXWi0ppw 1118 | https://youtube.com/watch?v=djV11Xbc914 1119 | https://youtube.com/watch?v=HP_NE4XZGAc 1120 | https://youtube.com/watch?v=htgr3pvBr-I 1121 | https://youtube.com/watch?v=hQo1HIcSVtg 1122 | https://youtube.com/watch?v=RVJiwyg0iDM 1123 | https://youtube.com/watch?v=hHRNSeuvzlM 1124 | https://youtube.com/watch?v=6ul-cZyuYq4 1125 | https://youtube.com/watch?v=EvuL5jyCHOw 1126 | https://youtube.com/watch?v=0j6d7VeYvdQ 1127 | https://youtube.com/watch?v=LcMSFZZ-erw 1128 | https://youtube.com/watch?v=FsglRLoUdtc 1129 | https://youtube.com/watch?v=4dOsbsuhYGQ 1130 | https://youtube.com/watch?v=s71Em_Po2ZY 1131 | https://youtube.com/watch?v=9meo3vazXcw 1132 | https://youtube.com/watch?v=iP8_Dbvpi-A 1133 | https://youtube.com/watch?v=rj__jhmPMgI 1134 | https://youtube.com/watch?v=JE-dqW4uBEE 1135 | https://youtube.com/watch?v=jlV3zeWnWZY 1136 | https://youtube.com/watch?v=zSAJ0l4OBHM 1137 | https://youtube.com/watch?v=9C1BCAgu2I8 1138 | https://youtube.com/watch?v=mrZRURcb1cM 1139 | https://youtube.com/watch?v=ySWVxTNUu0c 1140 | https://youtube.com/watch?v=waLhF-tFv-Q 1141 | https://youtube.com/watch?v=MNqqs4h4M7c 1142 | https://youtube.com/watch?v=OlKaVFqxERk 1143 | https://youtube.com/watch?v=-sftw5k_JRs 1144 | https://youtube.com/watch?v=ztYl3nmq3uM 1145 | https://youtube.com/watch?v=aUzBgeI5dpc 1146 | https://youtube.com/watch?v=Ygv7C3nyN0w 1147 | https://youtube.com/watch?v=fjgCqbPGq2A 1148 | https://youtube.com/watch?v=4fWyzwo1xg0 1149 | https://youtube.com/watch?v=k_0U3DlLFSU 1150 | https://youtube.com/watch?v=Gu2pVPWGYMQ 1151 | https://youtube.com/watch?v=clJb4zx0o1o 1152 | https://youtube.com/watch?v=BOKQFTH5w5I 1153 | https://youtube.com/watch?v=46Cfrl7hMoQ 1154 | https://youtube.com/watch?v=oZdiXvDU4P0 1155 | https://youtube.com/watch?v=SBjQ9tuuTJQ 1156 | https://youtube.com/watch?v=77R1Wp6Y_5Y 1157 | https://youtube.com/watch?v=7uy0ldI_1HA 1158 | https://youtube.com/watch?v=bNCT6pA5I9A 1159 | https://youtube.com/watch?v=RRKJiM9Njr8 1160 | https://youtube.com/watch?v=_FrOQC-zEog 1161 | https://youtube.com/watch?v=yvPr9YV7-Xw 1162 | https://youtube.com/watch?v=hMr3KtYUCcI 1163 | https://youtube.com/watch?v=BGBM5vWiBLo 1164 | https://youtube.com/watch?v=yjoPWxmOCtc 1165 | https://youtube.com/watch?v=nDbeqj-1XOo 1166 | https://youtube.com/watch?v=DVQ3-Xe_suY 1167 | https://youtube.com/watch?v=ZiRuj2_czzw 1168 | https://youtube.com/watch?v=jQUDiCiNlqQ 1169 | https://youtube.com/watch?v=nEVDZl5UvN4 1170 | https://youtube.com/watch?v=gDbAtWpoA6k 1171 | https://youtube.com/watch?v=K_PQ4fRQ5Kc 1172 | https://youtube.com/watch?v=La4Dcd1aUcE 1173 | https://youtube.com/watch?v=SEb8tuYhDBI 1174 | https://youtube.com/watch?v=8x2tG4X0cdc 1175 | https://youtube.com/watch?v=wV0ff1puRUg 1176 | https://youtube.com/watch?v=Z5-rdr0qhWk 1177 | https://youtube.com/watch?v=jl067ilGr54 1178 | https://youtube.com/watch?v=X9FyQNx8oyU 1179 | https://youtube.com/watch?v=WwqHarJnQP8 1180 | https://youtube.com/watch?v=LB5YkmjalDg 1181 | https://youtube.com/watch?v=97ECZMvbLxg 1182 | https://youtube.com/watch?v=x0q8Oho_RjM 1183 | https://youtube.com/watch?v=G9tenSy-vzo 1184 | https://youtube.com/watch?v=iPUmE-tne5U 1185 | https://youtube.com/watch?v=Hn-enjcgV1o 1186 | https://youtube.com/watch?v=bjrOcrisGyI 1187 | https://youtube.com/watch?v=IZr6AE-u2UM 1188 | https://youtube.com/watch?v=13GD78Bmo8s 1189 | https://youtube.com/watch?v=zueQ7Hz7l8s 1190 | https://youtube.com/watch?v=kLoskF32tCU 1191 | 1192 | # Generated by Discord.FM - metal-mix 1193 | https://youtube.com/watch?v=Hj2vU2nr5Jw 1194 | https://youtube.com/watch?v=gkhwK6Wlod8 1195 | https://youtube.com/watch?v=Fq3QmtV8vT0 1196 | https://youtube.com/watch?v=_yNAABKD4IA 1197 | https://youtube.com/watch?v=iOKV9Stri_M 1198 | https://youtube.com/watch?v=jRGrNDV2mKc 1199 | https://youtube.com/watch?v=VAWjsVoDpm0 1200 | https://youtube.com/watch?v=3moLkjvhEu0 1201 | https://youtube.com/watch?v=3VNUyjRRjxM 1202 | https://youtube.com/watch?v=ySdLh_B3HjA 1203 | https://youtube.com/watch?v=5i7qZxICwgQ 1204 | https://youtube.com/watch?v=gqI-6xag8Mg 1205 | https://youtube.com/watch?v=zUzd9KyIDrM 1206 | https://youtube.com/watch?v=iywaBOMvYLI 1207 | https://youtube.com/watch?v=CSvFpBOe8eY 1208 | https://youtube.com/watch?v=8nW-IPrzM1g 1209 | https://youtube.com/watch?v=6fVE8kSM43I 1210 | https://youtube.com/watch?v=EqQuihD0hoI 1211 | https://youtube.com/watch?v=BvsMPOfblfg 1212 | https://youtube.com/watch?v=uY3LAFJbKyY 1213 | https://youtube.com/watch?v=xnKhsTXoKCI 1214 | https://youtube.com/watch?v=2vObp0vBDOY 1215 | https://youtube.com/watch?v=3IHWKU9V1lA 1216 | https://youtube.com/watch?v=wJuEjAo4ues 1217 | https://youtube.com/watch?v=gy8HPSIFXEM 1218 | https://youtube.com/watch?v=liW-kWFiXtQ 1219 | https://youtube.com/watch?v=BHRyMcH6WMM 1220 | https://youtube.com/watch?v=CSJXle3LP_Q 1221 | https://youtube.com/watch?v=tczU6OWoUkI 1222 | https://youtube.com/watch?v=K5jvUXij7nU 1223 | https://youtube.com/watch?v=Evc3Xtc84N0 1224 | https://youtube.com/watch?v=9ZGt4JVX860 1225 | https://youtube.com/watch?v=OLqNFjLsJLk 1226 | https://youtube.com/watch?v=qw2LU1yS7aw 1227 | https://youtube.com/watch?v=emNahB_96JY 1228 | https://youtube.com/watch?v=LEb2ap6rELA 1229 | https://youtube.com/watch?v=1Qt3QbEzq7Q 1230 | https://youtube.com/watch?v=9YGL3amPmyc 1231 | https://youtube.com/watch?v=kOaqcfTZgno 1232 | https://youtube.com/watch?v=ZkW-K5RQdzo 1233 | https://youtube.com/watch?v=YIqbdnaPcT8 1234 | https://youtube.com/watch?v=D79peD6i-rw 1235 | https://youtube.com/watch?v=01fttIlMgIg 1236 | https://youtube.com/watch?v=VDsaNnQnd7U 1237 | https://youtube.com/watch?v=IHS3qJdxefY 1238 | https://youtube.com/watch?v=86iJ-JbP9xo 1239 | https://youtube.com/watch?v=5abamRO41fE 1240 | https://youtube.com/watch?v=AGzIcLfRMcY 1241 | https://youtube.com/watch?v=1JZGFjufJEY 1242 | https://youtube.com/watch?v=Z5ou8N3U8yg 1243 | https://youtube.com/watch?v=RFc-2aNZ6VY 1244 | https://youtube.com/watch?v=pwu4v7VV5Hc 1245 | https://youtube.com/watch?v=7q2bNqe0Xyk 1246 | https://youtube.com/watch?v=A-TO-L1Escc 1247 | https://youtube.com/watch?v=b1RKaRgVFKk 1248 | https://youtube.com/watch?v=E-S9ErhqPSo 1249 | https://youtube.com/watch?v=U400PmUJWXs 1250 | https://youtube.com/watch?v=IxhtvzzfstE 1251 | https://youtube.com/watch?v=89q0LjmwXwk 1252 | https://youtube.com/watch?v=Auuqlcom6tM 1253 | https://youtube.com/watch?v=0pKlvG4XWAg 1254 | https://youtube.com/watch?v=36PSBsiSszw 1255 | https://youtube.com/watch?v=vcf7DnHi54g 1256 | https://youtube.com/watch?v=71BCqL2ecoE 1257 | https://youtube.com/watch?v=9gsAz6S_zSw 1258 | https://youtube.com/watch?v=xJzE1m9aELk 1259 | https://youtube.com/watch?v=l9VFg44H2z8 1260 | https://youtube.com/watch?v=mk0PdLZqZqU 1261 | https://youtube.com/watch?v=heDGwljdmvM 1262 | https://youtube.com/watch?v=sXYIxJScSik 1263 | https://youtube.com/watch?v=9WjNGF9_go0 1264 | https://youtube.com/watch?v=DelhLppPSxY 1265 | https://youtube.com/watch?v=UcGvCE0nGG4 1266 | https://youtube.com/watch?v=x3HRaDov0Qg 1267 | https://youtube.com/watch?v=yg8VFMZ6_g8 1268 | https://youtube.com/watch?v=aUWCrCXiVpA 1269 | https://youtube.com/watch?v=4ACe9IDkJo0 1270 | https://youtube.com/watch?v=5c2nqRf1QOY 1271 | https://youtube.com/watch?v=bFGbVCs9Awo 1272 | https://youtube.com/watch?v=qBCMg6R2bwA 1273 | https://youtube.com/watch?v=aRL7P_D1dOo 1274 | https://youtube.com/watch?v=3Ji17cLVsUU 1275 | https://youtube.com/watch?v=xETgd1pROaA 1276 | https://youtube.com/watch?v=B66l1S0E70I 1277 | https://youtube.com/watch?v=u_VsvZmIWxY 1278 | https://youtube.com/watch?v=S9Qrvxa-n20 1279 | https://youtube.com/watch?v=sqLdyZBjZeo 1280 | https://youtube.com/watch?v=LydRLQnXZmc 1281 | https://youtube.com/watch?v=He4YV1uqwfs 1282 | https://youtube.com/watch?v=RqD09X6KlEw 1283 | https://youtube.com/watch?v=81S2mEHkTwg 1284 | https://youtube.com/watch?v=xmOOGeZE-aE 1285 | https://youtube.com/watch?v=TkzK2jubKeA 1286 | https://youtube.com/watch?v=4Rog8XY8oxg 1287 | https://youtube.com/watch?v=ijPWBALdFcY 1288 | https://youtube.com/watch?v=qw5G6fF-wqQ 1289 | https://youtube.com/watch?v=TZnjF8c1lEY 1290 | https://youtube.com/watch?v=qRF0aAGnJOw 1291 | https://youtube.com/watch?v=71tyUqMZOSc 1292 | https://youtube.com/watch?v=MiCPrYdraL4 1293 | https://youtube.com/watch?v=xqKwozw9Tww 1294 | https://youtube.com/watch?v=B1Bi1c9LmhU 1295 | https://youtube.com/watch?v=0Hvv6BXdQiU 1296 | https://youtube.com/watch?v=LrKMDRBQgaI 1297 | https://youtube.com/watch?v=L182WF235i4 1298 | https://youtube.com/watch?v=I4KXMyb-aGY 1299 | https://youtube.com/watch?v=-oVW8gcse4g 1300 | https://youtube.com/watch?v=8ZmAKMtd58w 1301 | https://youtube.com/watch?v=hNmW-QA_kmU 1302 | https://youtube.com/watch?v=Yvwo8f3SXKA 1303 | https://youtube.com/watch?v=ZVinwOpllQk 1304 | https://youtube.com/watch?v=vpL2sWLwEtU 1305 | https://youtube.com/watch?v=NSPv6Fa0cyY 1306 | https://youtube.com/watch?v=lo62kvjLHvY 1307 | https://youtube.com/watch?v=BSINdbWPtss 1308 | https://youtube.com/watch?v=QrV61ATP3Ec 1309 | https://youtube.com/watch?v=bg92QpjRcJk 1310 | https://youtube.com/watch?v=9opx_afte0I 1311 | https://youtube.com/watch?v=1FCyvV5V8Jo 1312 | https://youtube.com/watch?v=GM_qKlltwt4 1313 | https://youtube.com/watch?v=E8zlthr2-xA 1314 | https://youtube.com/watch?v=du9LCbYq9Wo 1315 | https://youtube.com/watch?v=a_7TMeDTX_U 1316 | https://youtube.com/watch?v=EjP1w3MIZsg 1317 | https://youtube.com/watch?v=_lAsCaj_nVs 1318 | https://youtube.com/watch?v=J51LPlP-s9o 1319 | https://youtube.com/watch?v=zr-j001aHE0 1320 | https://youtube.com/watch?v=f0Hm79q4M-U 1321 | https://youtube.com/watch?v=ECQ2kVpzpLA 1322 | https://youtube.com/watch?v=I-QaFWURsMU 1323 | https://youtube.com/watch?v=bXbTtU252yM 1324 | https://youtube.com/watch?v=c8qrwON1-zE 1325 | https://youtube.com/watch?v=9sTQ0QdkN3Q 1326 | https://youtube.com/watch?v=cU4GXgaCFTI 1327 | https://youtube.com/watch?v=lRt54xjIq7w 1328 | https://youtube.com/watch?v=CGC2YvtXiRc 1329 | https://youtube.com/watch?v=3kLafYgKCTU 1330 | https://youtube.com/watch?v=am-Y0cuz0mw 1331 | https://youtube.com/watch?v=xo-1iAsqmQI 1332 | https://youtube.com/watch?v=lQ4IRzwi_Gg 1333 | https://youtube.com/watch?v=qrVKmTPFYZ8 1334 | https://youtube.com/watch?v=ZNbaZMMCaD8 1335 | https://youtube.com/watch?v=MmAtwvZYTe8 1336 | https://youtube.com/watch?v=EK4Wd8mD8CA 1337 | https://youtube.com/watch?v=m0J7XnbUN5o 1338 | https://youtube.com/watch?v=EhGEGIBGLu8 1339 | https://youtube.com/watch?v=rjCBV6o_DSE 1340 | https://youtube.com/watch?v=5hDs6mCVAKs 1341 | https://youtube.com/watch?v=u5Xe4EvTN_U 1342 | https://youtube.com/watch?v=uyj8j8Yaeeg 1343 | https://youtube.com/watch?v=NbLMrce7OJI 1344 | https://youtube.com/watch?v=9d4ui9q7eDM 1345 | https://youtube.com/watch?v=MVM8DUhdLyo 1346 | https://youtube.com/watch?v=cSOnn1gspjs 1347 | https://youtube.com/watch?v=82CTtc72s4k 1348 | https://youtube.com/watch?v=NPX5H8N1a94 1349 | https://youtube.com/watch?v=NUDls2PgDUY 1350 | https://youtube.com/watch?v=ZPzsx3AdHpw 1351 | https://youtube.com/watch?v=sIPdH7vLmgQ 1352 | https://youtube.com/watch?v=gbw62iCsS34 1353 | https://youtube.com/watch?v=GTN2oKj4kmM 1354 | https://youtube.com/watch?v=L397TWLwrUU 1355 | https://youtube.com/watch?v=QdGD3Ukb3Q0 1356 | https://youtube.com/watch?v=QIFVzhWRjDM 1357 | https://youtube.com/watch?v=433S3tuuB94 1358 | https://youtube.com/watch?v=5s7_WbiR79E 1359 | https://youtube.com/watch?v=hkXHsK4AQPs 1360 | https://youtube.com/watch?v=9MKJNZS3kGk 1361 | https://youtube.com/watch?v=6WEHRveRhU4 1362 | https://youtube.com/watch?v=-w2m-TeLi6I 1363 | https://youtube.com/watch?v=NmIBSeFhnfc 1364 | https://youtube.com/watch?v=qUlK3S_9IOo 1365 | https://youtube.com/watch?v=iVzahm7HAJg 1366 | https://youtube.com/watch?v=C7NSUFDHFgg 1367 | https://youtube.com/watch?v=EMHLXMt-6Og 1368 | https://youtube.com/watch?v=dIs04P-B20Q 1369 | https://youtube.com/watch?v=NGTyKh_EqIc 1370 | https://youtube.com/watch?v=68SgSalvrVY 1371 | https://youtube.com/watch?v=y-LJIWMeLNY 1372 | https://youtube.com/watch?v=ThwSWIXhiRw 1373 | https://youtube.com/watch?v=3LlPC_PGgfQ 1374 | https://youtube.com/watch?v=5Hpa6MfcY8U 1375 | https://youtube.com/watch?v=YV4oYkIeGJc 1376 | https://youtube.com/watch?v=Z83TPaV_w74 1377 | https://youtube.com/watch?v=WnAvNdVyJB0 1378 | https://youtube.com/watch?v=5DccN_SId6A 1379 | https://youtube.com/watch?v=iVvXB-Vwnco 1380 | https://youtube.com/watch?v=757SiXkPlH4 1381 | https://youtube.com/watch?v=d1lQ6E1a_-I 1382 | https://youtube.com/watch?v=46MALEk-7cE 1383 | https://youtube.com/watch?v=RZ_arKTDkmA 1384 | https://youtube.com/watch?v=a8BrqjFj48A 1385 | https://youtube.com/watch?v=66R8ayavwR4 1386 | https://youtube.com/watch?v=DFdHhYha9t4 1387 | https://youtube.com/watch?v=mS8LvHT_zcQ 1388 | https://youtube.com/watch?v=K6KSx3QO2DU 1389 | https://youtube.com/watch?v=W6CjO0H2j0s 1390 | https://youtube.com/watch?v=9P4Xcl2njCU 1391 | https://youtube.com/watch?v=IoX98MOBFHc 1392 | https://youtube.com/watch?v=1FirtNx9YR0 1393 | https://youtube.com/watch?v=DECp8LKurKs 1394 | https://youtube.com/watch?v=DaHe4z9mA74 1395 | https://youtube.com/watch?v=qdDOWUPzrWA 1396 | https://youtube.com/watch?v=fyRwfUw7ayg 1397 | https://youtube.com/watch?v=UwuDhK_EV5k 1398 | https://youtube.com/watch?v=2Kx1qiyK-Uo 1399 | https://youtube.com/watch?v=lSOMf8VTqnw 1400 | https://youtube.com/watch?v=oX4KTg3W3Bc 1401 | https://youtube.com/watch?v=N5irNnMNJqk 1402 | https://youtube.com/watch?v=0IxiUognQe0 1403 | https://youtube.com/watch?v=eQcLWjHnBp0 1404 | https://youtube.com/watch?v=pvkxxaFaT5Y 1405 | https://youtube.com/watch?v=bNY3pKJ0A-A 1406 | https://youtube.com/watch?v=VSKhPqvb0jw 1407 | https://youtube.com/watch?v=ZpbpOgUybBM 1408 | https://youtube.com/watch?v=DQ47U0sH3hY 1409 | https://youtube.com/watch?v=r-NhWrpfZQM 1410 | https://youtube.com/watch?v=CXHd-nsw6XY 1411 | https://youtube.com/watch?v=4vDjoLOAA6k 1412 | https://youtube.com/watch?v=VoAXB_Swj-Y 1413 | https://youtube.com/watch?v=V6BifoKqR-o 1414 | https://youtube.com/watch?v=qc98u-eGzlc 1415 | https://youtube.com/watch?v=vOd-T58qHLA 1416 | https://youtube.com/watch?v=2-DVhzFGXjE 1417 | https://youtube.com/watch?v=3y87bEqMUsw 1418 | https://youtube.com/watch?v=_Vq6NevcLOQ 1419 | https://youtube.com/watch?v=L0VPVawpN8E 1420 | https://youtube.com/watch?v=sOOebk_dKFo 1421 | https://youtube.com/watch?v=fNPGhxfbQxk 1422 | https://youtube.com/watch?v=1oTEQf1d9Iw 1423 | https://youtube.com/watch?v=7tNVaV96PuI 1424 | https://youtube.com/watch?v=j-qQ_brIsfY 1425 | https://youtube.com/watch?v=z-UJoY5WP5s 1426 | https://youtube.com/watch?v=tysmwGx7TNU 1427 | https://youtube.com/watch?v=3gmmi2SvMMk 1428 | https://youtube.com/watch?v=2DfYLar2QGI 1429 | https://youtube.com/watch?v=8CoGDjtBtVE 1430 | https://youtube.com/watch?v=FdBqOCS8LmM 1431 | https://youtube.com/watch?v=SMwT2V6TUSA 1432 | https://youtube.com/watch?v=HK_tNFzXmmI 1433 | https://youtube.com/watch?v=uivxr3O6rSE 1434 | https://youtube.com/watch?v=6WXBob7a9go 1435 | https://youtube.com/watch?v=FRW1mdm3CaI 1436 | https://youtube.com/watch?v=VNBWgtCTLfw 1437 | https://youtube.com/watch?v=-N0UcnswlUQ 1438 | https://youtube.com/watch?v=GVYl_hiD1oQ 1439 | https://youtube.com/watch?v=DEwk1ZEnBWE 1440 | https://youtube.com/watch?v=6NzD7zLww2A 1441 | https://youtube.com/watch?v=CW7OXRF7yGY 1442 | https://youtube.com/watch?v=fUja-wrQVgs 1443 | https://youtube.com/watch?v=mofmOWY3SKc 1444 | https://youtube.com/watch?v=fNWrgH6sVjc 1445 | https://youtube.com/watch?v=ORsGOVtRH5A 1446 | https://youtube.com/watch?v=aXzIeI0mkFI 1447 | https://youtube.com/watch?v=gx4jaqmTVRE 1448 | https://youtube.com/watch?v=NolrcYGVJ_A 1449 | https://youtube.com/watch?v=3nJrkXwAD3I 1450 | https://youtube.com/watch?v=KFFtzy1G27c 1451 | https://youtube.com/watch?v=ZDJEuZXw7ao 1452 | https://youtube.com/watch?v=qceX99lxee8 1453 | https://youtube.com/watch?v=EC6gds4QVQE 1454 | https://youtube.com/watch?v=Z590mDXHpLk 1455 | https://youtube.com/watch?v=7RJsRQOneMY 1456 | https://youtube.com/watch?v=PL5ZyYJBU4c 1457 | https://youtube.com/watch?v=89rvBQwWUOc 1458 | https://youtube.com/watch?v=cvNaHKw9ydk 1459 | https://youtube.com/watch?v=iHKqbc_9Rc8 1460 | https://youtube.com/watch?v=-TTaay0Z7Lw 1461 | https://youtube.com/watch?v=01uzWZsTH-M 1462 | https://youtube.com/watch?v=gA4E_2A4L3s 1463 | https://youtube.com/watch?v=BPjVLEaExTY 1464 | https://youtube.com/watch?v=iBdxN2oy8xM 1465 | https://youtube.com/watch?v=Uw1TGRj77kU 1466 | https://youtube.com/watch?v=1OK1HRqP-fg 1467 | https://youtube.com/watch?v=SeYpVif6AaI 1468 | https://youtube.com/watch?v=C-qXym0teh8 1469 | https://youtube.com/watch?v=4YHu_DH1zfs 1470 | https://youtube.com/watch?v=BJXfe4eHDnQ 1471 | https://youtube.com/watch?v=5PyQ-e9lBdw 1472 | https://youtube.com/watch?v=XV_RZvtWNiM 1473 | https://youtube.com/watch?v=ATc8Jefnl-U 1474 | https://youtube.com/watch?v=1AfNOKQdY-U 1475 | https://youtube.com/watch?v=3ZlDZPYzfm4 1476 | https://youtube.com/watch?v=3K_0GhyaTJc 1477 | https://youtube.com/watch?v=rWpTr-vVT-0 1478 | https://youtube.com/watch?v=xO0scDfrcR0 1479 | https://youtube.com/watch?v=1CcKbWhEluE 1480 | https://youtube.com/watch?v=SDDn4Kh65MA 1481 | https://youtube.com/watch?v=gRnWPnY1dgk 1482 | https://youtube.com/watch?v=8O317T6Zlno 1483 | https://youtube.com/watch?v=0L_iOnLNt9M 1484 | https://youtube.com/watch?v=f1PdUMHQAFE 1485 | https://youtube.com/watch?v=nq9j1qkj2Vc 1486 | https://youtube.com/watch?v=0K67veEPOYM 1487 | https://youtube.com/watch?v=SdJBgidYc0k 1488 | https://youtube.com/watch?v=Ax7cdHiZ010 1489 | https://youtube.com/watch?v=Z4UfIAsnBBE 1490 | https://youtube.com/watch?v=Us2ylGAwBnk 1491 | https://youtube.com/watch?v=X-2yuGgp_U8 1492 | https://youtube.com/watch?v=OzvasAJIHb4 1493 | 1494 | # Generated by Discord.FM - retro-renegade 1495 | https://youtube.com/watch?v=c2orBsXp4HM 1496 | https://youtube.com/watch?v=ekawaLsryiU 1497 | https://youtube.com/watch?v=_sC6epraFkY 1498 | https://youtube.com/watch?v=Cao09dP7gM0 1499 | https://youtube.com/watch?v=nw2qiR6f05Q 1500 | https://youtube.com/watch?v=mabK8AEGY3s 1501 | https://youtube.com/watch?v=e9f2sX3_JzM 1502 | https://youtube.com/watch?v=6hqxj-I9f8o 1503 | https://youtube.com/watch?v=LvcRvOp4Y8g 1504 | https://youtube.com/watch?v=xRkczJrr5mI 1505 | https://youtube.com/watch?v=5UUwc0llyEk 1506 | https://youtube.com/watch?v=wjKHEXsA7lg 1507 | https://youtube.com/watch?v=33dNh9H-o5c 1508 | https://youtube.com/watch?v=RF1rFSoN3JQ 1509 | https://youtube.com/watch?v=Em_B1AcfJL0 1510 | https://youtube.com/watch?v=dnwdYWXuU4s 1511 | https://youtube.com/watch?v=YWQ0dBnl_7k 1512 | https://youtube.com/watch?v=yhviMWU_AxM 1513 | https://youtube.com/watch?v=9OquWmdUYXw 1514 | https://youtube.com/watch?v=ALq1ENqfu8E 1515 | https://youtube.com/watch?v=3bZfVORx54g 1516 | https://youtube.com/watch?v=eGynKE9eRAs 1517 | https://youtube.com/watch?v=1vBxDS0lliQ 1518 | https://youtube.com/watch?v=joNX2QJ7jto 1519 | https://youtube.com/watch?v=py_I6a9rUUI 1520 | https://youtube.com/watch?v=yRDmUeM4PQI 1521 | https://youtube.com/watch?v=TF5IETKtvGg 1522 | https://youtube.com/watch?v=kmI_VYPXub0 1523 | https://youtube.com/watch?v=KGO0RcIDR8U 1524 | https://youtube.com/watch?v=5Unwj0PFwf4 1525 | https://youtube.com/watch?v=izMEU4orFBU 1526 | https://youtube.com/watch?v=xPmAHhcWEvE 1527 | https://youtube.com/watch?v=ryhybXuK1r0 1528 | https://youtube.com/watch?v=00vYncpl0pk 1529 | https://youtube.com/watch?v=hzGmbwS_Drs 1530 | https://youtube.com/watch?v=Zpu861-LpCE 1531 | https://youtube.com/watch?v=4ILeW9CMfBA 1532 | https://youtube.com/watch?v=VUTUuAoBFPk 1533 | https://youtube.com/watch?v=55mbyhqIcNo 1534 | https://youtube.com/watch?v=wkFhhnApeF4 1535 | https://youtube.com/watch?v=1VNyQgGSXzQ 1536 | https://youtube.com/watch?v=O9WPbCmLmD4 1537 | https://youtube.com/watch?v=C8uAc-oCtR8 1538 | https://youtube.com/watch?v=4qsWFFuYZYI 1539 | https://youtube.com/watch?v=4Yi9fb4pyTc 1540 | https://youtube.com/watch?v=9TTnTu3ql_g 1541 | https://youtube.com/watch?v=iCNfYjZ26ow 1542 | https://youtube.com/watch?v=oSeQ1_QNf-c 1543 | https://youtube.com/watch?v=euTyRhnqFtA 1544 | https://youtube.com/watch?v=I7e-65ziIe0 1545 | https://youtube.com/watch?v=6kHckkkJI9o 1546 | https://youtube.com/watch?v=nY3ac_FkoSw 1547 | https://youtube.com/watch?v=tU5zyCQb1Wk 1548 | https://youtube.com/watch?v=cUDuKLNB8Ec 1549 | https://youtube.com/watch?v=c92bEgiFAF4 1550 | https://youtube.com/watch?v=9BoWlVmlQa0 1551 | https://youtube.com/watch?v=o0vDydAHGp0 1552 | https://youtube.com/watch?v=wuCHmGbve0c 1553 | https://youtube.com/watch?v=mgE398yDoPA 1554 | https://youtube.com/watch?v=IcYpQLyHsxc 1555 | https://youtube.com/watch?v=s7RRgF5Ve_E 1556 | https://youtube.com/watch?v=QyPR77rg1to 1557 | https://youtube.com/watch?v=OSPbX0lkTmQ 1558 | https://youtube.com/watch?v=JRU6GnETSN4 1559 | https://youtube.com/watch?v=W1i4mTyidOc 1560 | https://youtube.com/watch?v=xflkF-sqNaM 1561 | https://youtube.com/watch?v=FKdtstAo6iU 1562 | https://youtube.com/watch?v=woPff-Tpkns 1563 | https://youtube.com/watch?v=zdeZwAk6ULE 1564 | https://youtube.com/watch?v=Zzo6L3wsf8c 1565 | https://youtube.com/watch?v=dtYwq4aBr0E 1566 | https://youtube.com/watch?v=ShK_Tj-Ee3Y 1567 | https://youtube.com/watch?v=JQ8bpWkoC7A 1568 | https://youtube.com/watch?v=VH6HIHmhvQU 1569 | https://youtube.com/watch?v=PPapt88_3aU 1570 | https://youtube.com/watch?v=XxMf4BdVq_g 1571 | https://youtube.com/watch?v=eijdNQMYikY 1572 | https://youtube.com/watch?v=Z51lfE2k7jU 1573 | https://youtube.com/watch?v=N3epEVMNJdY 1574 | https://youtube.com/watch?v=nu_ruGyTNEs 1575 | https://youtube.com/watch?v=ewxyxByJPP0 1576 | https://youtube.com/watch?v=PLDyWLbuptQ 1577 | https://youtube.com/watch?v=qrBB3_rFPjg 1578 | https://youtube.com/watch?v=xG2AtyD3elY 1579 | https://youtube.com/watch?v=9uwEAugeH8w 1580 | https://youtube.com/watch?v=P0PpyUsvT9w 1581 | https://youtube.com/watch?v=qzQyP99Q0pE 1582 | https://youtube.com/watch?v=YZ3XjVVNagU 1583 | https://youtube.com/watch?v=gTCSQevpuOg 1584 | https://youtube.com/watch?v=tDuEWw648jo 1585 | https://youtube.com/watch?v=2TgO-tN5wAM 1586 | https://youtube.com/watch?v=YivzBeEwzWI 1587 | https://youtube.com/watch?v=hMa4hZQbrms 1588 | https://youtube.com/watch?v=yWjavxcGfqM 1589 | https://youtube.com/watch?v=tz82xbLvK_k 1590 | https://youtube.com/watch?v=mZRP7nQkfrM 1591 | https://youtube.com/watch?v=WgRfPc1lfJk 1592 | https://youtube.com/watch?v=x_P5smsopK0 1593 | https://youtube.com/watch?v=aWBtpBwzzdM 1594 | https://youtube.com/watch?v=VM83BpH2_3U 1595 | https://youtube.com/watch?v=Qet3zBfaM78 1596 | https://youtube.com/watch?v=G8DpAL2B9MQ 1597 | https://youtube.com/watch?v=PThRzauX8pk 1598 | https://youtube.com/watch?v=lC_RwbN8h9s 1599 | https://youtube.com/watch?v=ZSEmhhyuktU 1600 | https://youtube.com/watch?v=EnDBauPSjLI 1601 | https://youtube.com/watch?v=1DWD_hEz4HI 1602 | https://youtube.com/watch?v=7SY2zTT9tos 1603 | https://youtube.com/watch?v=8zuiIENc7lE 1604 | https://youtube.com/watch?v=Ixb08g2ND5M 1605 | https://youtube.com/watch?v=tOlsYflFiEE 1606 | https://youtube.com/watch?v=85K4BI-GsGw 1607 | https://youtube.com/watch?v=WptSlwpJ5Jk 1608 | https://youtube.com/watch?v=ukVp9AN219A 1609 | https://youtube.com/watch?v=8JHiCljnMVs 1610 | https://youtube.com/watch?v=tqLgJ9puo_c 1611 | https://youtube.com/watch?v=eW6RBQQEfQM 1612 | https://youtube.com/watch?v=Y5ZMPJyxNLI 1613 | https://youtube.com/watch?v=UbHmYTbHlmA 1614 | https://youtube.com/watch?v=UyNllqk-4iM 1615 | https://youtube.com/watch?v=7en8t8gZBlo 1616 | https://youtube.com/watch?v=YfScJUuSV68 1617 | https://youtube.com/watch?v=ddQpf8m4ij0 1618 | https://youtube.com/watch?v=Bl62_UMR0qI 1619 | https://youtube.com/watch?v=kEE3LDIcXxk 1620 | https://youtube.com/watch?v=0CoZG3S_JzA 1621 | https://youtube.com/watch?v=ztOR6RpWjgY 1622 | https://youtube.com/watch?v=rrMueRMVsTM 1623 | https://youtube.com/watch?v=kcPtMyOPgBw 1624 | https://youtube.com/watch?v=JHqMxtYEArY 1625 | https://youtube.com/watch?v=36Yh5PMynrg 1626 | https://youtube.com/watch?v=cAMumZKiKRQ 1627 | https://youtube.com/watch?v=Zmd2nbHP5kQ 1628 | https://youtube.com/watch?v=wPqwxBnNxWU 1629 | https://youtube.com/watch?v=Y46QKkIjZwc 1630 | https://youtube.com/watch?v=V_c2pjuxWMM 1631 | https://youtube.com/watch?v=sSjyrEtVb6U 1632 | https://youtube.com/watch?v=jy1scistRy0 1633 | https://youtube.com/watch?v=J67nkzoJ_2M 1634 | https://youtube.com/watch?v=OFgGAVBA2NY 1635 | https://youtube.com/watch?v=C4RkHNgUcxM 1636 | https://youtube.com/watch?v=umdi-RZ8ntM 1637 | https://youtube.com/watch?v=YjQ0tFIpAn8 1638 | https://youtube.com/watch?v=o1ZNxTyD93Q 1639 | https://youtube.com/watch?v=nY9WcDbjMmE 1640 | https://youtube.com/watch?v=I9T4S2VbDw0 1641 | https://youtube.com/watch?v=NF2ok3ktsl4 1642 | https://youtube.com/watch?v=jPXGELbDmqA 1643 | https://youtube.com/watch?v=ojS_e7URi10 1644 | https://youtube.com/watch?v=NLTkBltKlrM 1645 | https://youtube.com/watch?v=eLibL3JuhrA 1646 | https://youtube.com/watch?v=UvvsZalq5QA 1647 | https://youtube.com/watch?v=knPVJ9rj5dM 1648 | https://youtube.com/watch?v=_UZwzA9qr2I 1649 | https://youtube.com/watch?v=C68qUfkJYSI 1650 | https://youtube.com/watch?v=-C_7CHq6XsQ 1651 | https://youtube.com/watch?v=rT8k9N_K0Q8 1652 | https://youtube.com/watch?v=JtnYO3-4zMg 1653 | https://youtube.com/watch?v=oge5XXXMcys 1654 | https://youtube.com/watch?v=N2P7nkAf030 1655 | https://youtube.com/watch?v=MIe1LMMQ5m4 1656 | https://youtube.com/watch?v=HWbE2mz68ZE 1657 | https://youtube.com/watch?v=J5fo4XpIYNk 1658 | https://youtube.com/watch?v=A_E-QcfWwSs 1659 | https://youtube.com/watch?v=d-DKo_pDaNE 1660 | https://youtube.com/watch?v=Y_XxFAJanhE 1661 | https://youtube.com/watch?v=EcTl3TFZwFg 1662 | https://youtube.com/watch?v=Zp9bb3MB4Qc 1663 | https://youtube.com/watch?v=LCP6ZviZjb0 1664 | https://youtube.com/watch?v=jvPIdPSmf2A 1665 | https://youtube.com/watch?v=UXD6rTBj8ek 1666 | https://youtube.com/watch?v=hewBOkOuSts 1667 | https://youtube.com/watch?v=vhDToOmsKUo 1668 | https://youtube.com/watch?v=83jGCWCcBzc 1669 | https://youtube.com/watch?v=jCFdBhby0jc 1670 | https://youtube.com/watch?v=NnVx_6Mdsj4 1671 | https://youtube.com/watch?v=aTBSQKh8teE 1672 | https://youtube.com/watch?v=FTrumdi55tA 1673 | https://youtube.com/watch?v=ObclY0UOj3c 1674 | https://youtube.com/watch?v=A4wYdsQ8_JY 1675 | https://youtube.com/watch?v=y0zqju5Eevc 1676 | https://youtube.com/watch?v=WYZs4ExdlfA 1677 | https://youtube.com/watch?v=h848dMB0LgU 1678 | https://youtube.com/watch?v=d7hghjDM7_I 1679 | https://youtube.com/watch?v=4X6UqQDmjBk 1680 | https://youtube.com/watch?v=OJvNVDn7BgU 1681 | https://youtube.com/watch?v=TyLNQsGTby8 1682 | https://youtube.com/watch?v=bFQmrye0jss 1683 | https://youtube.com/watch?v=25m3Gk7mRQM 1684 | https://youtube.com/watch?v=uxiaYyRkxMQ 1685 | https://youtube.com/watch?v=JfxM1QCtvb4 1686 | https://youtube.com/watch?v=1MVAIf-leiQ 1687 | https://youtube.com/watch?v=eA36OFxe-uY 1688 | https://youtube.com/watch?v=kRTJoouX2z8 1689 | https://youtube.com/watch?v=C0j6pe043L4 1690 | https://youtube.com/watch?v=Tp3qiOKuEBM 1691 | https://youtube.com/watch?v=twPSaCABakA 1692 | https://youtube.com/watch?v=P1YBW-rj_jk 1693 | https://youtube.com/watch?v=96AzlkwtRmc 1694 | https://youtube.com/watch?v=kMmpRcld1FU 1695 | https://youtube.com/watch?v=kDssUvBiHFk 1696 | https://youtube.com/watch?v=xYtBAbqJO9k 1697 | https://youtube.com/watch?v=D5o_UOPNaQQ 1698 | https://youtube.com/watch?v=avyasO9uqfo 1699 | https://youtube.com/watch?v=wAPpVplHiDE 1700 | https://youtube.com/watch?v=9lyRI_M8ZXE 1701 | https://youtube.com/watch?v=lS7_tcwsj4E 1702 | https://youtube.com/watch?v=TY-mhdPdtq0 1703 | https://youtube.com/watch?v=8ir0d7bjMIk 1704 | https://youtube.com/watch?v=eV7YovopMxw 1705 | https://youtube.com/watch?v=slKNBP7VEvI 1706 | https://youtube.com/watch?v=zLcyg4Tq5uY 1707 | https://youtube.com/watch?v=wGFpMPgSbB4 1708 | https://youtube.com/watch?v=iPe3LT37h-Y 1709 | https://youtube.com/watch?v=TNh7wxRsOyE 1710 | https://youtube.com/watch?v=ICJezWy9m8g 1711 | https://youtube.com/watch?v=KUTHBCpiU8Y 1712 | https://youtube.com/watch?v=CIZ1FIK3-HU 1713 | https://youtube.com/watch?v=PaQxdGtSjVA 1714 | https://youtube.com/watch?v=Xu04qI3BsBA 1715 | https://youtube.com/watch?v=P5ChKb_9JoY 1716 | https://youtube.com/watch?v=TVyBV_HC8eg 1717 | https://youtube.com/watch?v=Pb6KyewC_Vg 1718 | https://youtube.com/watch?v=afwK743PL2Y 1719 | https://youtube.com/watch?v=SIPGFhFPJhg 1720 | https://youtube.com/watch?v=wqAYMZSOQao 1721 | https://youtube.com/watch?v=uv85Ai8bwfA 1722 | https://youtube.com/watch?v=DI9weHFUtuk 1723 | https://youtube.com/watch?v=nUf07IdSPFQ 1724 | https://youtube.com/watch?v=4hAz3oI-VD0 1725 | https://youtube.com/watch?v=336OIKnPA54 1726 | https://youtube.com/watch?v=4rJFgTNiRuQ 1727 | https://youtube.com/watch?v=Q1kf-OJdvb4 1728 | https://youtube.com/watch?v=WdVfnKCYdJ8 1729 | https://youtube.com/watch?v=Yr0chA6MNAI 1730 | https://youtube.com/watch?v=zKtJHPSv0pI 1731 | https://youtube.com/watch?v=VM2UJ6E5D-U 1732 | https://youtube.com/watch?v=pfshXZRcQ2c 1733 | https://youtube.com/watch?v=6DB6hBRPsWc 1734 | https://youtube.com/watch?v=RzrT1iK2B0s 1735 | https://youtube.com/watch?v=8nBgXXHvKHU 1736 | https://youtube.com/watch?v=CZMWszd5SRk 1737 | https://youtube.com/watch?v=BxYzjjs6d1s 1738 | https://youtube.com/watch?v=Jxk9DqdYsJ4 1739 | https://youtube.com/watch?v=2AZnFWbQB_Q 1740 | https://youtube.com/watch?v=-4vpdkEkup8 1741 | https://youtube.com/watch?v=rq_F7lGOj7I 1742 | https://youtube.com/watch?v=Fupfr_eVLPo 1743 | https://youtube.com/watch?v=z26SXn-J9NY 1744 | https://youtube.com/watch?v=RJKIrqO1Zas 1745 | https://youtube.com/watch?v=gBC5cnFjPpU 1746 | https://youtube.com/watch?v=69wxutaRWO4 1747 | https://youtube.com/watch?v=rt_H9qkzeMQ 1748 | https://youtube.com/watch?v=CaG0lnjaYNs 1749 | https://youtube.com/watch?v=nXgAj5KdAC0 1750 | https://youtube.com/watch?v=Qd78OMGLkVA 1751 | https://youtube.com/watch?v=2sH-l2xN3gU 1752 | https://youtube.com/watch?v=decbYrsCjOk 1753 | https://youtube.com/watch?v=B7D0GKJDU3I 1754 | https://youtube.com/watch?v=ibjNly0E_gk 1755 | https://youtube.com/watch?v=ixA3SzX6uUc 1756 | https://youtube.com/watch?v=1yfxp1NhLIs 1757 | https://youtube.com/watch?v=8Tj3-bmDnS8 1758 | https://youtube.com/watch?v=IbFEEfNE1YQ 1759 | https://youtube.com/watch?v=9NcPvmk4vfo 1760 | https://youtube.com/watch?v=jRpPp0RCh-4 1761 | https://youtube.com/watch?v=Zjgst_cWtrs 1762 | https://youtube.com/watch?v=2SYYM78rjYQ 1763 | https://youtube.com/watch?v=e5lcETwAItA 1764 | https://youtube.com/watch?v=VQWeJYI033Q 1765 | https://youtube.com/watch?v=Q88wKrzj3QM 1766 | https://youtube.com/watch?v=wR3gaYTqkDQ 1767 | https://youtube.com/watch?v=f4ERRGkGtpo 1768 | https://youtube.com/watch?v=z6oOVUyCi6Y 1769 | https://youtube.com/watch?v=1MR5xe1z-eU 1770 | https://youtube.com/watch?v=aDlNMawir4o 1771 | https://youtube.com/watch?v=eZq5DdR_Aq4 1772 | https://youtube.com/watch?v=9IPBuQI1GG0 1773 | https://youtube.com/watch?v=oBllGsz-6Os 1774 | https://youtube.com/watch?v=ghPbv7HiNzY 1775 | https://youtube.com/watch?v=ZS5oJ2-MmEU 1776 | https://youtube.com/watch?v=_-NcLHvn2I0 1777 | https://youtube.com/watch?v=LE_Lrs8LomE 1778 | https://youtube.com/watch?v=xLsuam9o9BA 1779 | https://youtube.com/watch?v=dBgfMPLX4GA 1780 | 1781 | # Generated by Discord.FM - hip-hop 1782 | https://youtube.com/watch?v=jvEQD2pzPBY 1783 | https://youtube.com/watch?v=REaZpu0_4WQ 1784 | https://youtube.com/watch?v=Wfsm9VrVsco 1785 | https://youtube.com/watch?v=kHhOfdLpKCg 1786 | https://youtube.com/watch?v=MmUeuXNtTDY 1787 | https://youtube.com/watch?v=tBQemP6AKSg 1788 | https://youtube.com/watch?v=QU4MkRugX2E 1789 | https://youtube.com/watch?v=WgEtUuEK-to 1790 | https://youtube.com/watch?v=G0qUMwlc9wM 1791 | https://youtube.com/watch?v=2Y5J3VUC9qM 1792 | https://youtube.com/watch?v=lsJLLEwUYZM 1793 | https://youtube.com/watch?v=paaFchdXAbc 1794 | https://youtube.com/watch?v=oeMCcZfhRqk 1795 | https://youtube.com/watch?v=fBOucGAkFAw 1796 | https://youtube.com/watch?v=YLs1oVbbaEg 1797 | https://youtube.com/watch?v=KTC72QoifDQ 1798 | https://youtube.com/watch?v=kiOZHPf3hYg 1799 | https://youtube.com/watch?v=K65gJEsqegE 1800 | https://youtube.com/watch?v=zIrhcTkHX_A 1801 | https://youtube.com/watch?v=ZFqw6zxd7J8 1802 | https://youtube.com/watch?v=I2wrBy6PAxM 1803 | https://youtube.com/watch?v=46n2V4Py0Og 1804 | https://youtube.com/watch?v=4CZR50b3A9g 1805 | https://youtube.com/watch?v=Tp8h7L8Fi0o 1806 | https://youtube.com/watch?v=qiFHp-Ik3MQ 1807 | https://youtube.com/watch?v=hLj_n0pP7MM 1808 | https://youtube.com/watch?v=yHMuIDpL6KM 1809 | https://youtube.com/watch?v=jAVMElUXLi0 1810 | https://youtube.com/watch?v=o59U6zVVnkU 1811 | https://youtube.com/watch?v=Lv-If1xZx80 1812 | https://youtube.com/watch?v=A9nz5UxBZNc 1813 | https://youtube.com/watch?v=C8jRc7LWxB0 1814 | https://youtube.com/watch?v=pJMtm4PuFwg 1815 | https://youtube.com/watch?v=omowNsoplUM 1816 | https://youtube.com/watch?v=dQlU0bJjQdU 1817 | https://youtube.com/watch?v=kufiqwix0tc 1818 | https://youtube.com/watch?v=EkkpRE660Ls 1819 | https://youtube.com/watch?v=i-zF8XQView 1820 | https://youtube.com/watch?v=HdWatPF782g 1821 | https://youtube.com/watch?v=d4GBuzLaz8c 1822 | https://youtube.com/watch?v=5RoUHTB8Ivc 1823 | https://youtube.com/watch?v=drsJ50vH6ro 1824 | https://youtube.com/watch?v=wk4ftn4PArg 1825 | https://youtube.com/watch?v=G_Alt8lzKcU 1826 | https://youtube.com/watch?v=rivFCwwvoh8 1827 | https://youtube.com/watch?v=10yrPDf92hY 1828 | https://youtube.com/watch?v=ISy0Hl0SBfg 1829 | https://youtube.com/watch?v=XbGs_qK2PQA 1830 | https://youtube.com/watch?v=X1ZwaRVlNVY 1831 | https://youtube.com/watch?v=6Un9HLDCTCs 1832 | https://youtube.com/watch?v=eJO5HU_7_1w 1833 | https://youtube.com/watch?v=jh-cryHRew4 1834 | https://youtube.com/watch?v=ICQ7JSCBZn0 1835 | https://youtube.com/watch?v=_xAWiV4drB4 1836 | https://youtube.com/watch?v=fJT3b4urwcU 1837 | https://youtube.com/watch?v=F4DSyzonCZc 1838 | https://youtube.com/watch?v=yQ84j8HuojY 1839 | https://youtube.com/watch?v=SvqoKFI7tfw 1840 | https://youtube.com/watch?v=sC2n3oOPOH4 1841 | https://youtube.com/watch?v=i_gg9ttaaxI 1842 | https://youtube.com/watch?v=0b_9VQcnQZY 1843 | https://youtube.com/watch?v=JNrD-_VH0qM 1844 | https://youtube.com/watch?v=aeSA2kh9fhg 1845 | https://youtube.com/watch?v=ytQ5CYE1VZw 1846 | https://youtube.com/watch?v=r0_AmbzMedE 1847 | https://youtube.com/watch?v=Tz6OUIjtM6E 1848 | https://youtube.com/watch?v=ZEBGCOCxLgA 1849 | https://youtube.com/watch?v=jCDSZr2zzws 1850 | https://youtube.com/watch?v=-c3X91Ld-GU 1851 | https://youtube.com/watch?v=xRRen4nuVkg 1852 | https://youtube.com/watch?v=NnkLcBY8o1I 1853 | https://youtube.com/watch?v=PFVvgETFoUk 1854 | https://youtube.com/watch?v=fzSQG472L9k 1855 | https://youtube.com/watch?v=oUvQvP0FyJU 1856 | https://youtube.com/watch?v=4UXpe2n9TtM 1857 | https://youtube.com/watch?v=M2NIMHVmGwk 1858 | https://youtube.com/watch?v=pDlbsFmMB3E 1859 | https://youtube.com/watch?v=e6zqnVo4ArQ 1860 | https://youtube.com/watch?v=8mtA9GvpzwU 1861 | https://youtube.com/watch?v=8p9jSRxguAA 1862 | https://youtube.com/watch?v=UvVuEEPM3j0 1863 | https://youtube.com/watch?v=mzGwHKIYo9c 1864 | https://youtube.com/watch?v=AfuCLp8VEng 1865 | https://youtube.com/watch?v=OG4ROzg78Bo 1866 | https://youtube.com/watch?v=xDDnSWdZJqM 1867 | https://youtube.com/watch?v=zpNrrdLo4Wk 1868 | https://youtube.com/watch?v=YbnhUVTTdHE 1869 | https://youtube.com/watch?v=6sRQ9q4hzv4 1870 | https://youtube.com/watch?v=AlgvnoigyLE 1871 | https://youtube.com/watch?v=ZtdRdbjgPBc 1872 | https://youtube.com/watch?v=ExVtrghW5Y4 1873 | https://youtube.com/watch?v=PobrSpMwKk4 1874 | https://youtube.com/watch?v=pJJyKlRxyvA 1875 | https://youtube.com/watch?v=odBpBp3j1tI 1876 | https://youtube.com/watch?v=XbZR9JhGJ0Q 1877 | https://youtube.com/watch?v=QkZurfE8Gbc 1878 | https://youtube.com/watch?v=6MS-JqECvf4 1879 | https://youtube.com/watch?v=8uC35poq1Zs 1880 | https://youtube.com/watch?v=1AZsIIX4k1c 1881 | https://youtube.com/watch?v=rT4wUByldo4 1882 | https://youtube.com/watch?v=ERnVdMkIJtc 1883 | https://youtube.com/watch?v=oCd6SQ67k-Y 1884 | https://youtube.com/watch?v=XSbZidsgMfw 1885 | https://youtube.com/watch?v=TErySTMbFlk 1886 | https://youtube.com/watch?v=lj3eZQigvsI 1887 | https://youtube.com/watch?v=NtxmnBQmfZs 1888 | https://youtube.com/watch?v=yRfQGXFRr30 1889 | https://youtube.com/watch?v=AGbMQ2efZPU 1890 | https://youtube.com/watch?v=h9_31bUYHvA 1891 | https://youtube.com/watch?v=czBPOwSZVys 1892 | https://youtube.com/watch?v=BQFrezbeL10 1893 | https://youtube.com/watch?v=OwSpn4pmv9Q 1894 | https://youtube.com/watch?v=DnedDvXYr8A 1895 | https://youtube.com/watch?v=BLR_wRa0hXo 1896 | https://youtube.com/watch?v=JnNzq5Nl-dE 1897 | https://youtube.com/watch?v=VOL0-EE3ieY 1898 | https://youtube.com/watch?v=mOmsU91AxVg 1899 | https://youtube.com/watch?v=HkytRz29bE0 1900 | https://youtube.com/watch?v=pcGGfojS58U 1901 | https://youtube.com/watch?v=q0rYiIiJusQ 1902 | https://youtube.com/watch?v=8uUk691o8BI 1903 | https://youtube.com/watch?v=L_Rn7UvP0yo 1904 | https://youtube.com/watch?v=B6-wjxeaTOY 1905 | https://youtube.com/watch?v=oihGlmD1r24 1906 | https://youtube.com/watch?v=3jkb1dN3Ot8 1907 | https://youtube.com/watch?v=MLedibUShaY 1908 | https://youtube.com/watch?v=Et_E4M4JgIU 1909 | https://youtube.com/watch?v=acdtvO-yHqQ 1910 | https://youtube.com/watch?v=jRn9BRo4Igw 1911 | https://youtube.com/watch?v=CxnaPa8ohmM 1912 | https://youtube.com/watch?v=LQrJHsWN7hc 1913 | https://youtube.com/watch?v=VRa_PwL2aws 1914 | https://youtube.com/watch?v=nYQPcD8MOoc 1915 | https://youtube.com/watch?v=0twahcMCgss 1916 | https://youtube.com/watch?v=cixIP4uv270 1917 | https://youtube.com/watch?v=PqX1SkYpNJQ 1918 | https://youtube.com/watch?v=zOXaouay5Jk 1919 | https://youtube.com/watch?v=89F5fpvwPr0 1920 | https://youtube.com/watch?v=ydWjQwvzxKw 1921 | https://youtube.com/watch?v=byODfQUUsEI 1922 | https://youtube.com/watch?v=monkG1OWZXA 1923 | https://youtube.com/watch?v=fV80H9rScSQ 1924 | https://youtube.com/watch?v=Lk1POuNuCnI 1925 | https://youtube.com/watch?v=b0g4BDl8ZiE 1926 | https://youtube.com/watch?v=rCpoMFbDAdM 1927 | https://youtube.com/watch?v=vtgZsq_oUvw 1928 | https://youtube.com/watch?v=P2rT2vw9i_k 1929 | https://youtube.com/watch?v=bQXj4ZtuwuI 1930 | https://youtube.com/watch?v=E4jkMB3OV_g 1931 | https://youtube.com/watch?v=-9r7ezjl1us 1932 | https://youtube.com/watch?v=K533gW3boIY 1933 | https://youtube.com/watch?v=pKh_ZHexNZQ 1934 | https://youtube.com/watch?v=ijy2GFWqeAs 1935 | https://youtube.com/watch?v=A2B5clYLtOc 1936 | https://youtube.com/watch?v=q0tnCdJQwTE 1937 | https://youtube.com/watch?v=imgYGfH2yNM 1938 | https://youtube.com/watch?v=lTpaBK5HYz4 1939 | https://youtube.com/watch?v=9Zw2qMXqvxU 1940 | https://youtube.com/watch?v=SXEo-Z6JFVU 1941 | https://youtube.com/watch?v=B51pw1teuSg 1942 | https://youtube.com/watch?v=NK2FqPNIT_U 1943 | https://youtube.com/watch?v=fyfOvJ6ByIY 1944 | https://youtube.com/watch?v=QJQtXeUEH6s 1945 | https://youtube.com/watch?v=PGpgdQc4e0c 1946 | https://youtube.com/watch?v=qggxTtnKTMo 1947 | https://youtube.com/watch?v=yf9OAFML_Eg 1948 | https://youtube.com/watch?v=s9_HY6uZwVc 1949 | https://youtube.com/watch?v=LQLD3S8nhvs 1950 | https://youtube.com/watch?v=_srvHOu75vM 1951 | https://youtube.com/watch?v=FCbWLSZrZfw 1952 | https://youtube.com/watch?v=stoLqWXsIOY 1953 | https://youtube.com/watch?v=jId1L0gmoDY 1954 | https://youtube.com/watch?v=zVnlyC0ytgY 1955 | https://youtube.com/watch?v=aES4SbFTH2Y 1956 | https://youtube.com/watch?v=YPCwL__3Lss 1957 | https://youtube.com/watch?v=_KMywQHeDWI 1958 | https://youtube.com/watch?v=CtRbEgoTqQs 1959 | https://youtube.com/watch?v=igUsHrFqegE 1960 | https://youtube.com/watch?v=RMizZU12awo 1961 | https://youtube.com/watch?v=1ewkF_Al52o 1962 | https://youtube.com/watch?v=9rKmdRdNO7s 1963 | https://youtube.com/watch?v=8CPlF-IEkXQ 1964 | https://youtube.com/watch?v=cKutTL_KLig 1965 | https://youtube.com/watch?v=qjeAx2rSPy8 1966 | https://youtube.com/watch?v=SW9H1b7zXUY 1967 | https://youtube.com/watch?v=J7IMwop3RHs 1968 | https://youtube.com/watch?v=sy7JwllhUR8 1969 | https://youtube.com/watch?v=DWuBTLJdoJY 1970 | https://youtube.com/watch?v=-cDEQKl2EWM 1971 | https://youtube.com/watch?v=rZJXpZPFQaI 1972 | https://youtube.com/watch?v=nmte57oKe6U 1973 | https://youtube.com/watch?v=w_nGIhgggiM 1974 | https://youtube.com/watch?v=GwTmJ9KptfI 1975 | https://youtube.com/watch?v=OG6OWMsc4z0 1976 | https://youtube.com/watch?v=gc2NgotkfWE 1977 | https://youtube.com/watch?v=JEHc4u-1QIk 1978 | https://youtube.com/watch?v=WUH9NaZI9eA 1979 | https://youtube.com/watch?v=wRZ6QyjGIEM 1980 | https://youtube.com/watch?v=pwHuEDCM7xs 1981 | https://youtube.com/watch?v=3mpAJjXSVUE 1982 | https://youtube.com/watch?v=F-4KiszXxHM 1983 | https://youtube.com/watch?v=T6QKqFPRZSA 1984 | https://youtube.com/watch?v=pR0VsbyZxWg 1985 | https://youtube.com/watch?v=CQkVPtWjfUk 1986 | https://youtube.com/watch?v=1plPyJdXKIY 1987 | https://youtube.com/watch?v=zQrdKtPJxI0 1988 | https://youtube.com/watch?v=cg0XOi8AxJo 1989 | https://youtube.com/watch?v=gG_dA32oH44 1990 | https://youtube.com/watch?v=nFF66bVgqvw 1991 | https://youtube.com/watch?v=67sDhNyuzLU 1992 | https://youtube.com/watch?v=hRK7PVJFbS8 1993 | https://youtube.com/watch?v=i-YykLXxTzk 1994 | https://youtube.com/watch?v=m_ZDBLjicDw 1995 | https://youtube.com/watch?v=7LnEeRidcXw 1996 | https://youtube.com/watch?v=0eiJsI4kVJs 1997 | https://youtube.com/watch?v=A66LmUwXnGA 1998 | https://youtube.com/watch?v=E5s6jcuw6NM 1999 | https://youtube.com/watch?v=6jd0VICL4og 2000 | https://youtube.com/watch?v=uNTpPNo3LBg 2001 | https://youtube.com/watch?v=rKWjsa3fwpE 2002 | https://youtube.com/watch?v=_L2vJEb6lVE 2003 | https://youtube.com/watch?v=2lzD5NTs3l0 2004 | https://youtube.com/watch?v=tNRAuzj2ImA 2005 | https://youtube.com/watch?v=SiYDJ432b0U 2006 | https://youtube.com/watch?v=9-kWlUbkHS4 2007 | https://youtube.com/watch?v=AE0GC4tGZW0 2008 | https://youtube.com/watch?v=Rv6bRHM8YMc 2009 | https://youtube.com/watch?v=oyveOd7jOx4 2010 | https://youtube.com/watch?v=n1CLmap_CVU 2011 | https://youtube.com/watch?v=HDSksIctszk 2012 | https://youtube.com/watch?v=uPqnrQfm8oU 2013 | https://youtube.com/watch?v=TMZi25Pq3T8 2014 | https://youtube.com/watch?v=PMbELEUfmIA 2015 | https://youtube.com/watch?v=t8gdslsaCkM 2016 | https://youtube.com/watch?v=duU1wKYexs4 2017 | https://youtube.com/watch?v=lVehcuJXe6I 2018 | https://youtube.com/watch?v=WUN04IC9L3Y 2019 | https://youtube.com/watch?v=Be8nu4w-NS0 2020 | https://youtube.com/watch?v=5souw4K5UQc 2021 | https://youtube.com/watch?v=QMdeUooDwzs 2022 | https://youtube.com/watch?v=wZYt2GTH5cs 2023 | https://youtube.com/watch?v=kWXAYDQ_K7k 2024 | https://youtube.com/watch?v=7l48bfQuJeE 2025 | https://youtube.com/watch?v=PlBTqsWJyas 2026 | https://youtube.com/watch?v=XsZDWNk_RIA 2027 | https://youtube.com/watch?v=kqjeNSNuNPM 2028 | https://youtube.com/watch?v=LsfoI96_rSo 2029 | https://youtube.com/watch?v=Gwfm9wuIj40 2030 | https://youtube.com/watch?v=QsLAm_nrSyY 2031 | https://youtube.com/watch?v=p1h9PBQSCDY 2032 | https://youtube.com/watch?v=-4zXv6ys2t4 2033 | https://youtube.com/watch?v=AmSvsQn2CP8 2034 | https://youtube.com/watch?v=0_xZt5rt4u0 2035 | https://youtube.com/watch?v=Y-PRLKaFU-M 2036 | https://youtube.com/watch?v=5aDpLYTcfVc 2037 | https://youtube.com/watch?v=oWNCXxBlZCw 2038 | https://youtube.com/watch?v=1dLTKcGx76w 2039 | https://youtube.com/watch?v=RnDwKSAp-Qs 2040 | https://youtube.com/watch?v=3LRmrpUV6iQ 2041 | https://youtube.com/watch?v=JiqNwliG0jo 2042 | https://youtube.com/watch?v=60l9vZf65AI 2043 | https://youtube.com/watch?v=ltGltaUs_S4 2044 | https://youtube.com/watch?v=rz-_mstXfr0 2045 | https://youtube.com/watch?v=gNPIOi2LiQk 2046 | https://youtube.com/watch?v=-59jGD4WrmE 2047 | 2048 | # Generated by Discord.FM - coffee-house-jazz 2049 | https://youtube.com/watch?v=vmDDOFXSgAs 2050 | https://youtube.com/watch?v=RPfFhfSuUZ4 2051 | https://youtube.com/watch?v=ZrfzenYhv9w 2052 | https://youtube.com/watch?v=CWeXOm49kE0 2053 | https://youtube.com/watch?v=qWG2dsXV5HI 2054 | https://youtube.com/watch?v=T5jFPrx51Dc 2055 | https://youtube.com/watch?v=WqEweV0eScg 2056 | https://youtube.com/watch?v=TDETNk20Vkc 2057 | https://youtube.com/watch?v=xISaCzXYYg8 2058 | https://youtube.com/watch?v=N76ErzOdk9g 2059 | https://youtube.com/watch?v=Cx-TxiBi43c 2060 | https://youtube.com/watch?v=KV8Hj_E8LJc 2061 | https://youtube.com/watch?v=HmroWIcCNUI 2062 | https://youtube.com/watch?v=ujChUYkPvec 2063 | https://youtube.com/watch?v=h6NCx0wcrC4 2064 | https://youtube.com/watch?v=xlAwFV0clcM 2065 | https://youtube.com/watch?v=I777BcgQL9o 2066 | https://youtube.com/watch?v=yXK0pZx92MU 2067 | https://youtube.com/watch?v=jUN01HYwRX4 2068 | https://youtube.com/watch?v=KsAf0ra6Vd4 2069 | https://youtube.com/watch?v=JIfdYs8WErM 2070 | https://youtube.com/watch?v=CTzRHq_cH5E 2071 | https://youtube.com/watch?v=mP0flneNfaQ 2072 | https://youtube.com/watch?v=6tBJa8Ew6fQ 2073 | https://youtube.com/watch?v=u23Etcb-L9M 2074 | https://youtube.com/watch?v=YjRbmtrDJI4 2075 | https://youtube.com/watch?v=0rjP5MPA3qs 2076 | https://youtube.com/watch?v=fvJzCdgB3Tc 2077 | https://youtube.com/watch?v=1OKduoWWWsE 2078 | https://youtube.com/watch?v=36wafFjFdYs 2079 | https://youtube.com/watch?v=M69YdmAJoLs 2080 | https://youtube.com/watch?v=YmtHdBPzi_w 2081 | https://youtube.com/watch?v=FGT67EzVcfs 2082 | https://youtube.com/watch?v=qlIbs0mZYSA 2083 | https://youtube.com/watch?v=AL5G6QnW-ek 2084 | https://youtube.com/watch?v=J4X5folutT8 2085 | https://youtube.com/watch?v=RJEjFh2FOzA 2086 | https://youtube.com/watch?v=2vOWMz1z7rk 2087 | https://youtube.com/watch?v=9b2AOlCGpKY 2088 | https://youtube.com/watch?v=p0PlMNt02Ck 2089 | https://youtube.com/watch?v=3rSNqhEWH9M 2090 | https://youtube.com/watch?v=iqhN6rvfJt4 2091 | https://youtube.com/watch?v=a1WDW-swiAA 2092 | https://youtube.com/watch?v=8TdY6iqV2k0 2093 | https://youtube.com/watch?v=IrVnm66joQk 2094 | https://youtube.com/watch?v=fvRkGglLe-U 2095 | https://youtube.com/watch?v=UA2XIWZxMKM 2096 | https://youtube.com/watch?v=s4rXEKtC8iY 2097 | https://youtube.com/watch?v=EMuyV5jSKl4 2098 | https://youtube.com/watch?v=CsHtO_i4qzM 2099 | https://youtube.com/watch?v=5m2HN2y0yV8 2100 | https://youtube.com/watch?v=p0AGYvMFdNo 2101 | https://youtube.com/watch?v=6WjW5orDM2c 2102 | https://youtube.com/watch?v=YjRWditGKRY 2103 | https://youtube.com/watch?v=jsFST-7Hx-Y 2104 | https://youtube.com/watch?v=eNWDwOsQqlw 2105 | https://youtube.com/watch?v=FB2P1oaP-gk 2106 | https://youtube.com/watch?v=W985hWD5KYg 2107 | https://youtube.com/watch?v=0Q7J4PgrRsY 2108 | https://youtube.com/watch?v=dH3GSrCmzC8 2109 | https://youtube.com/watch?v=kOO8Gzr__zc 2110 | https://youtube.com/watch?v=q1z2BdvHVCk 2111 | https://youtube.com/watch?v=wylto0E63Q8 2112 | https://youtube.com/watch?v=_3vpiTgG59A 2113 | https://youtube.com/watch?v=K_h1geOaLvY 2114 | https://youtube.com/watch?v=rsz6TE6t7-A 2115 | https://youtube.com/watch?v=KAlVasHbipo 2116 | https://youtube.com/watch?v=2FaMtXw2mRE 2117 | https://youtube.com/watch?v=Bm1NxfevGro 2118 | https://youtube.com/watch?v=w3TMe98FJDw 2119 | https://youtube.com/watch?v=II_LtoZGSVg 2120 | https://youtube.com/watch?v=or5qBh8Xbpc 2121 | https://youtube.com/watch?v=wA1ZelIbUfI 2122 | https://youtube.com/watch?v=Ae0nwSv6cTU 2123 | https://youtube.com/watch?v=lBbGRxSiYBs 2124 | https://youtube.com/watch?v=f60JYoHdfVM 2125 | https://youtube.com/watch?v=Lo18F5ObPng 2126 | https://youtube.com/watch?v=qagOblqhBhk 2127 | https://youtube.com/watch?v=JMiLAxMnoqE 2128 | https://youtube.com/watch?v=tNR7822K_40 2129 | https://youtube.com/watch?v=CkyTS_-Pqqw 2130 | https://youtube.com/watch?v=0yQyjcpnx3g 2131 | https://youtube.com/watch?v=x8UcxgE21kM 2132 | https://youtube.com/watch?v=tu4o65SwUIw 2133 | https://youtube.com/watch?v=hbreWwFKQNg 2134 | https://youtube.com/watch?v=hLUyVyM626A 2135 | https://youtube.com/watch?v=zre0u5XyNfY 2136 | https://youtube.com/watch?v=k0FJ1SdS-ts 2137 | https://youtube.com/watch?v=fKb0Sc2lYVU 2138 | https://youtube.com/watch?v=x8cFdZyWOOs 2139 | https://youtube.com/watch?v=BO_Lfk-8P5c 2140 | https://youtube.com/watch?v=ADPgTmca6Zs 2141 | https://youtube.com/watch?v=hkyJQcmVtZQ 2142 | https://youtube.com/watch?v=BqLDTKun4so 2143 | https://youtube.com/watch?v=Oi4G6UmYK9U 2144 | https://youtube.com/watch?v=3XvJFW0DHbU 2145 | https://youtube.com/watch?v=O6oA9MBb1-Q 2146 | https://youtube.com/watch?v=dqn3PF_DcSg 2147 | https://youtube.com/watch?v=C-o8EeITzYM 2148 | https://youtube.com/watch?v=SRFhsMvWKmM 2149 | https://youtube.com/watch?v=xSaPCoTZr-8 2150 | https://youtube.com/watch?v=8CsKnTUbth0 2151 | https://youtube.com/watch?v=1z88Vc1oyvU 2152 | https://youtube.com/watch?v=lLkFCavQGrc 2153 | https://youtube.com/watch?v=BQYXn1DP38s 2154 | https://youtube.com/watch?v=ZbHJHPTikQA 2155 | https://youtube.com/watch?v=BhqQFs7huwU 2156 | https://youtube.com/watch?v=-mZ54FJ6h-k 2157 | https://youtube.com/watch?v=83Cn2UU79F8 2158 | https://youtube.com/watch?v=iqtmUC6L9fc 2159 | https://youtube.com/watch?v=qiy9dCCnG10 2160 | https://youtube.com/watch?v=_Ago8dP4fFA 2161 | https://youtube.com/watch?v=St6bhwx7WDo 2162 | https://youtube.com/watch?v=ba7vMzLbU7w 2163 | https://youtube.com/watch?v=yjj9Dgd6vRU 2164 | https://youtube.com/watch?v=D-CNZxoethA 2165 | https://youtube.com/watch?v=hwmRQ0PBtXU 2166 | https://youtube.com/watch?v=S4mRaEzwTYo 2167 | https://youtube.com/watch?v=xCqRYneOdIM 2168 | https://youtube.com/watch?v=ryNtmkfeJk4 2169 | https://youtube.com/watch?v=M7HYVow1kHQ 2170 | https://youtube.com/watch?v=0CmftpbG4ig 2171 | https://youtube.com/watch?v=8zFgtqK39Zg 2172 | https://youtube.com/watch?v=7UAWVM5aMUw 2173 | https://youtube.com/watch?v=8696ckI64Vs 2174 | https://youtube.com/watch?v=AGB_fNG0R94 2175 | https://youtube.com/watch?v=DldxgV41SYM 2176 | https://youtube.com/watch?v=xOeDdS7Ic1Q 2177 | https://youtube.com/watch?v=rLwZ0QnwUBg 2178 | https://youtube.com/watch?v=CAeO7nicvns 2179 | https://youtube.com/watch?v=0dGFeIcGb_4 2180 | https://youtube.com/watch?v=6_YG9XBX04Y 2181 | https://youtube.com/watch?v=1MCGweQ8Oso 2182 | https://youtube.com/watch?v=YI5fU6ZbyaA 2183 | https://youtube.com/watch?v=g3JyQnYPkZk 2184 | https://youtube.com/watch?v=PoPL7BExSQU 2185 | https://youtube.com/watch?v=CEmq2V1IMkk 2186 | https://youtube.com/watch?v=zpzOFpPum6w 2187 | https://youtube.com/watch?v=59aXJ8GvMYE 2188 | https://youtube.com/watch?v=oslMFOeFoLI 2189 | https://youtube.com/watch?v=XpueyrkcMyQ 2190 | https://youtube.com/watch?v=eUSYlOTP2_k 2191 | https://youtube.com/watch?v=DAsUNTHRjaM 2192 | https://youtube.com/watch?v=5eSzsJKn8FM 2193 | https://youtube.com/watch?v=CpaBpm3_R-8 2194 | https://youtube.com/watch?v=c8teZAt66jo 2195 | https://youtube.com/watch?v=HLzqjmoZZAc 2196 | https://youtube.com/watch?v=X9qgI95n6rM 2197 | https://youtube.com/watch?v=gzU0PLa9-9I 2198 | https://youtube.com/watch?v=lcKQ3wGI8ZQ 2199 | https://youtube.com/watch?v=gg1Wl-NmzWg 2200 | https://youtube.com/watch?v=7myLXPUBB_w 2201 | https://youtube.com/watch?v=qDQpZT3GhDg 2202 | https://youtube.com/watch?v=uRIaFOKYN0k 2203 | https://youtube.com/watch?v=kqwdRBWvPs0 2204 | https://youtube.com/watch?v=3kOWGBDJALY 2205 | https://youtube.com/watch?v=sOES7AZ-d60 2206 | https://youtube.com/watch?v=Z9IFiHiSq88 2207 | https://youtube.com/watch?v=P__YyaRlym8 2208 | https://youtube.com/watch?v=jSxY4OwV8vg 2209 | https://youtube.com/watch?v=cIrE6sZduWo 2210 | https://youtube.com/watch?v=-vl4_f8Emtw 2211 | https://youtube.com/watch?v=0HUEiUOCLeI 2212 | https://youtube.com/watch?v=73g2Vw_gpkQ 2213 | https://youtube.com/watch?v=pCpekvOkwNM 2214 | https://youtube.com/watch?v=b80myMYmboY 2215 | https://youtube.com/watch?v=8B1oIXGX0Io 2216 | https://youtube.com/watch?v=fpDa0kaV6hQ 2217 | https://youtube.com/watch?v=6sfe_8RAaJ0 2218 | https://youtube.com/watch?v=rG9myp90oM4 2219 | https://youtube.com/watch?v=DlAEdcMy_0A 2220 | https://youtube.com/watch?v=IxlL8l48qcM 2221 | https://youtube.com/watch?v=xKGeUPRjNZ8 2222 | https://youtube.com/watch?v=Tnygv7J6VNg 2223 | https://youtube.com/watch?v=Gsz3mrnIBd0 2224 | https://youtube.com/watch?v=khby51sf82s 2225 | https://youtube.com/watch?v=0izjSUqCcSQ 2226 | https://youtube.com/watch?v=RckKPzpU1eo 2227 | https://youtube.com/watch?v=OkbwGv3QKQc 2228 | https://youtube.com/watch?v=Z_1LfT1MvzI 2229 | https://youtube.com/watch?v=tpILJTxT1_s 2230 | https://youtube.com/watch?v=JXwMgIlmoaM 2231 | https://youtube.com/watch?v=IQaM-SqDqSY 2232 | https://youtube.com/watch?v=fBQxsQlPDkU 2233 | https://youtube.com/watch?v=llPQnwDAIVU 2234 | https://youtube.com/watch?v=iRdlvzIEz-g 2235 | https://youtube.com/watch?v=RABTXslPaS8 2236 | https://youtube.com/watch?v=dvdQYSWOobc 2237 | https://youtube.com/watch?v=MV5apkGSkfM 2238 | https://youtube.com/watch?v=x6zypc_LhnM 2239 | https://youtube.com/watch?v=XX6TpqRmeJ0 2240 | https://youtube.com/watch?v=qeJ9NEyxk8I 2241 | https://youtube.com/watch?v=Jv5j_Lx2R4g 2242 | https://youtube.com/watch?v=yIlpEnsa2d8 2243 | https://youtube.com/watch?v=WMW3RloxEyA 2244 | https://youtube.com/watch?v=PygdDdJ0IRY 2245 | https://youtube.com/watch?v=FhZ-yTIXXYI 2246 | https://youtube.com/watch?v=s0igE09HI1U 2247 | https://youtube.com/watch?v=iB2Z2DY17yQ 2248 | https://youtube.com/watch?v=oLaIrVB1av4 2249 | https://youtube.com/watch?v=KcoqwKEtYDs 2250 | https://youtube.com/watch?v=rjU0Gryw8LY 2251 | https://youtube.com/watch?v=x5gAl119keA 2252 | https://youtube.com/watch?v=zNcPnEc99UE 2253 | https://youtube.com/watch?v=O6pSffe4k60 2254 | https://youtube.com/watch?v=KX_iUXGk0js 2255 | https://youtube.com/watch?v=uKpK8RbGlO4 2256 | https://youtube.com/watch?v=5M7LdviC2IQ 2257 | https://youtube.com/watch?v=lN1iQQS5E_A 2258 | https://youtube.com/watch?v=8fY5oRxwCoM 2259 | https://youtube.com/watch?v=a6KDpB6skA4 2260 | https://youtube.com/watch?v=jmwjpHJHolM 2261 | https://youtube.com/watch?v=_li7u9X3F3c 2262 | https://youtube.com/watch?v=KDrxzKYdwsA 2263 | https://youtube.com/watch?v=d3qSLlk8ruE 2264 | https://youtube.com/watch?v=GslhRUBgXNI 2265 | https://youtube.com/watch?v=gCbdDLa8Z-0 2266 | https://youtube.com/watch?v=9pUKEqpHGA8 2267 | https://youtube.com/watch?v=sztK_qd1Pjc 2268 | https://youtube.com/watch?v=j0Jb72PZAls 2269 | https://youtube.com/watch?v=KfFBdViZHzk 2270 | https://youtube.com/watch?v=CqybaIesbuA 2271 | https://youtube.com/watch?v=AKTwwGh8gMo 2272 | https://youtube.com/watch?v=FKsfvx5h_jg 2273 | https://youtube.com/watch?v=d5SBYhZyo1s 2274 | https://youtube.com/watch?v=KntkqJAoHFk 2275 | https://youtube.com/watch?v=z2_WYOLnrzQ 2276 | https://youtube.com/watch?v=ih0c1UeFC_4 2277 | https://youtube.com/watch?v=LDnJPW-PYgA 2278 | https://youtube.com/watch?v=GvkS0P2a2-U 2279 | https://youtube.com/watch?v=xDW4AuHl-kM 2280 | https://youtube.com/watch?v=n_aVFVveJNs 2281 | https://youtube.com/watch?v=sYiM-sOC6nE 2282 | https://youtube.com/watch?v=xPpEOUVpxrM 2283 | https://youtube.com/watch?v=_Gs3fg_WsEg 2284 | https://youtube.com/watch?v=baflobFjTwk 2285 | https://youtube.com/watch?v=N3TGcG9k2aA 2286 | https://youtube.com/watch?v=q7MH68ayDXY 2287 | https://youtube.com/watch?v=pZQI1jgOC_g 2288 | https://youtube.com/watch?v=YZNx5S5zuqs 2289 | https://youtube.com/watch?v=Y4UZROmf3GQ 2290 | https://youtube.com/watch?v=7-RlcOPNb6A 2291 | https://youtube.com/watch?v=KUBw0B6RdBQ 2292 | https://youtube.com/watch?v=UuhYZrn4flo 2293 | https://youtube.com/watch?v=xvIaD14LsAs 2294 | https://youtube.com/watch?v=wNLKkYEzbb0 2295 | https://youtube.com/watch?v=ZBiA8XvkLoo 2296 | https://youtube.com/watch?v=UyyNbsNKWcQ 2297 | https://youtube.com/watch?v=sR13ECD71xU 2298 | https://youtube.com/watch?v=3ZyHNyVgaqA 2299 | https://youtube.com/watch?v=KGBXVsdY9hw 2300 | https://youtube.com/watch?v=SkrKBmnZtB0 2301 | https://youtube.com/watch?v=LA-CBTXvHHY 2302 | https://youtube.com/watch?v=ylXk1LBvIqU 2303 | https://youtube.com/watch?v=aOwYA_vEZYo 2304 | https://youtube.com/watch?v=4bjPlBC4h_8 2305 | https://youtube.com/watch?v=KU70hNzHZRY 2306 | https://youtube.com/watch?v=n2wr9FR-m70 2307 | https://youtube.com/watch?v=XPACdaj3t0Q 2308 | https://youtube.com/watch?v=_wcbUAFirUE 2309 | https://youtube.com/watch?v=48eAYnfgrAo 2310 | https://youtube.com/watch?v=yzsWc5mYWGI 2311 | https://youtube.com/watch?v=icuMgDWZw2A 2312 | https://youtube.com/watch?v=jNnplwRbS8U 2313 | https://youtube.com/watch?v=tr72UkaBdtk 2314 | https://youtube.com/watch?v=nf0_s-Ijl3A 2315 | https://youtube.com/watch?v=_O-wMuGt63c 2316 | https://youtube.com/watch?v=cb2w2m1JmCY 2317 | https://youtube.com/watch?v=_xuowwzjmTI 2318 | https://youtube.com/watch?v=8-jfsUusSDQ 2319 | https://youtube.com/watch?v=GW2pFhSo8Cg 2320 | https://youtube.com/watch?v=jTuBTsyXbc4 2321 | https://youtube.com/watch?v=53645-blv5o 2322 | https://youtube.com/watch?v=eMBZHUhBAYU 2323 | https://youtube.com/watch?v=fvgf0yPAqGI 2324 | https://youtube.com/watch?v=7sgNYrz0b4o 2325 | https://youtube.com/watch?v=CCVp_X9YquA 2326 | https://youtube.com/watch?v=eYEl4EaCPJs 2327 | https://youtube.com/watch?v=n7Vbps6GLoI 2328 | https://youtube.com/watch?v=ZueOBSGhCEw 2329 | https://youtube.com/watch?v=hRIXys1xMGc 2330 | https://youtube.com/watch?v=X8Ooy2mzrRk 2331 | https://youtube.com/watch?v=9Nn_Nghem60 2332 | https://youtube.com/watch?v=62p-CXrYmf4 2333 | https://youtube.com/watch?v=sgn7VfXH2GY 2334 | https://youtube.com/watch?v=1EjBJvYIj5Q 2335 | https://youtube.com/watch?v=bJULMOw69EI 2336 | https://youtube.com/watch?v=zUFg6HvljDE 2337 | https://youtube.com/watch?v=Ga7Hh6EzV0o 2338 | https://youtube.com/watch?v=UiQcYNEFx_E 2339 | https://youtube.com/watch?v=ObtLNz7NQuQ 2340 | https://youtube.com/watch?v=WzSQsl2C5dM 2341 | https://youtube.com/watch?v=x0f5dcOWsNU 2342 | https://youtube.com/watch?v=Q-kOFFCkhu0 2343 | https://youtube.com/watch?v=DggGN8E2vx0 2344 | https://youtube.com/watch?v=KxadblDT6zI 2345 | https://youtube.com/watch?v=rdeuQChFJAg 2346 | https://youtube.com/watch?v=oQ3C8fjqu_A 2347 | https://youtube.com/watch?v=dVZWSnD15t4 2348 | https://youtube.com/watch?v=N_Q5LnUXiNA 2349 | https://youtube.com/watch?v=INskc6SaCu0 2350 | https://youtube.com/watch?v=1jccsHMOdZo 2351 | https://youtube.com/watch?v=DNbD1JIH344 2352 | https://youtube.com/watch?v=BA9BK71KoIc 2353 | https://youtube.com/watch?v=sOd5Ot5-cXE 2354 | https://youtube.com/watch?v=rMTlthu5V0g 2355 | https://youtube.com/watch?v=xr0Tfng9SP0 2356 | https://youtube.com/watch?v=G5odaPQ0eVo 2357 | https://youtube.com/watch?v=1a1Ph-ioxoA 2358 | https://youtube.com/watch?v=hyb_wr40pog 2359 | https://youtube.com/watch?v=dnK6OHPQZbA 2360 | https://youtube.com/watch?v=dtiSA2RKDzc 2361 | https://youtube.com/watch?v=Djcti31JFGg 2362 | https://youtube.com/watch?v=f0mSDdncUVw 2363 | https://youtube.com/watch?v=7tnPkQufnZY 2364 | https://youtube.com/watch?v=nPHUz8apHjY 2365 | https://youtube.com/watch?v=_lzwSBF2gIA 2366 | https://youtube.com/watch?v=VBY3WI7DyV4 2367 | https://youtube.com/watch?v=jqqwb5FYifo 2368 | https://youtube.com/watch?v=uH_-w-NeDiU 2369 | https://youtube.com/watch?v=4WPCBieSESI 2370 | https://youtube.com/watch?v=lbjC6Q6OLvU 2371 | https://youtube.com/watch?v=M8JUWVgIYgM 2372 | https://youtube.com/watch?v=5Pi5ZJZ07ME 2373 | https://youtube.com/watch?v=Q8QNzvtnOHc 2374 | https://youtube.com/watch?v=AaTVbFyynI4 2375 | https://youtube.com/watch?v=FycpDrxdr2o 2376 | https://youtube.com/watch?v=PQyzK7XJQ0s 2377 | https://youtube.com/watch?v=qEjGhOdFfYo 2378 | https://youtube.com/watch?v=Us0EU-yXAlg 2379 | https://youtube.com/watch?v=myUuXffyu_k 2380 | https://youtube.com/watch?v=7toKjKtbeeI 2381 | https://youtube.com/watch?v=8urhUop-ouI 2382 | https://youtube.com/watch?v=sPbi1YWjox4 2383 | https://youtube.com/watch?v=smJ617KKpcA 2384 | https://youtube.com/watch?v=P5OQIm2MI1s 2385 | https://youtube.com/watch?v=SgxlkyqN_Js 2386 | https://youtube.com/watch?v=g-jsW61e_-w 2387 | https://youtube.com/watch?v=lZbahdBHv9E 2388 | https://youtube.com/watch?v=DyAY4QA2unY 2389 | https://youtube.com/watch?v=Nv2GgV34qIg 2390 | https://youtube.com/watch?v=xRvdCRM_jzk 2391 | https://youtube.com/watch?v=sxz9eZ1Aons 2392 | https://youtube.com/watch?v=1SW2HlX94eg 2393 | https://youtube.com/watch?v=iD6k2E61ABY 2394 | https://youtube.com/watch?v=c16m8xspz8U 2395 | https://youtube.com/watch?v=IKayR1oqC7w 2396 | https://youtube.com/watch?v=65lEbMkxO1I 2397 | https://youtube.com/watch?v=svpPe1tlKlY 2398 | https://youtube.com/watch?v=RbaGDDbpcQ4 2399 | https://youtube.com/watch?v=bbw1r32MJpY 2400 | https://youtube.com/watch?v=yOsTPyBSoKU 2401 | https://youtube.com/watch?v=jmovwneQ7iQ 2402 | https://youtube.com/watch?v=rKtqLZQaszE 2403 | https://youtube.com/watch?v=izO68Vu2sx8 2404 | https://youtube.com/watch?v=9rv0EwudrIc 2405 | https://youtube.com/watch?v=hvdOgM9wsrw 2406 | https://youtube.com/watch?v=aUmOqNU3cqw 2407 | https://youtube.com/watch?v=nmLsA1z68VQ 2408 | https://youtube.com/watch?v=wqHe50_tBVc 2409 | https://youtube.com/watch?v=FuKF-nGpvFA 2410 | https://youtube.com/watch?v=v6UZTw1uHmk 2411 | https://youtube.com/watch?v=wOuNZMNGwWo 2412 | https://youtube.com/watch?v=ZBI9DexZJRo 2413 | https://youtube.com/watch?v=sBhbCjSnemE 2414 | https://youtube.com/watch?v=yQgljgngO14 2415 | https://youtube.com/watch?v=qkogQxKXwZc 2416 | https://youtube.com/watch?v=H2Kme_AXBgU 2417 | https://youtube.com/watch?v=ru3sxF4KxHU 2418 | https://youtube.com/watch?v=HhndO6GdAHg 2419 | https://youtube.com/watch?v=-ZHYfjSg7A4 2420 | https://youtube.com/watch?v=_J0ZpJMQjDo 2421 | https://youtube.com/watch?v=qceZZhvelqU 2422 | https://youtube.com/watch?v=keJQiIHaIWA 2423 | https://youtube.com/watch?v=LDYkdd1FkaA 2424 | https://youtube.com/watch?v=aUZ7T636aks 2425 | https://youtube.com/watch?v=29J0Qsp3yns 2426 | https://youtube.com/watch?v=Y9rxeyzyKVw 2427 | https://youtube.com/watch?v=vy2q5qM2tzk 2428 | https://youtube.com/watch?v=xafJW_VtA8w 2429 | https://youtube.com/watch?v=3ktfwLMivUw 2430 | https://youtube.com/watch?v=G6gQbM4VjV4 2431 | https://youtube.com/watch?v=tpGOXpvqtbY 2432 | https://youtube.com/watch?v=gXYrCfP3hX0 2433 | https://youtube.com/watch?v=X_AOwrXev60 2434 | https://youtube.com/watch?v=4_iC0MyIykM 2435 | https://youtube.com/watch?v=ZICaUybMucY 2436 | https://youtube.com/watch?v=YLKJASUKB0g 2437 | https://youtube.com/watch?v=2KaeXksNA1o 2438 | https://youtube.com/watch?v=D27zVtVPWnQ 2439 | https://youtube.com/watch?v=mCscZ2tPFmI 2440 | https://youtube.com/watch?v=C4zw9qvo4PQ 2441 | https://youtube.com/watch?v=J4iapfF2BCc 2442 | https://youtube.com/watch?v=R0H4mL3OW-4 2443 | https://youtube.com/watch?v=Tyt_4N4LNz4 2444 | https://youtube.com/watch?v=fHfH1hRmB78 2445 | https://youtube.com/watch?v=TxH9Dg1JLio 2446 | https://youtube.com/watch?v=4WtmkES0X48 2447 | https://youtube.com/watch?v=FU89y-AWDSg 2448 | https://youtube.com/watch?v=B0x1zzQBeX0 2449 | https://youtube.com/watch?v=0UWBO4r11AY 2450 | https://youtube.com/watch?v=0lv8cNsmVJo 2451 | https://youtube.com/watch?v=G5zPqgQ67yo 2452 | https://youtube.com/watch?v=Z7dFA3hoAwQ 2453 | https://youtube.com/watch?v=X-lUHu_oGe8 2454 | https://youtube.com/watch?v=aWA5f1l3ulg 2455 | https://youtube.com/watch?v=WkM9T1IoQgI 2456 | https://youtube.com/watch?v=T9pd8VWyibA 2457 | https://youtube.com/watch?v=Y3ohZjCKzjg 2458 | https://youtube.com/watch?v=i_LfbN1EG3c 2459 | https://youtube.com/watch?v=iM-eewbBOCA 2460 | https://youtube.com/watch?v=Q-Yp9AlifJg 2461 | https://youtube.com/watch?v=-m91DYI0--I 2462 | https://youtube.com/watch?v=nsyK9_iaCoA 2463 | https://youtube.com/watch?v=Bg4UjKYHMuM 2464 | https://youtube.com/watch?v=QQKmh3RsRgg 2465 | https://youtube.com/watch?v=qCp6ZWSPo-4 2466 | https://youtube.com/watch?v=Dp_Ms6Q-zO8 2467 | https://youtube.com/watch?v=AvXroQ5zMhE 2468 | https://youtube.com/watch?v=LR82f0GJgXg 2469 | https://youtube.com/watch?v=IhSG1deLTmY 2470 | https://youtube.com/watch?v=ZHBvFDPz0J0 2471 | https://youtube.com/watch?v=BpDnB_9fPbU 2472 | https://youtube.com/watch?v=RzBS0H75D1U 2473 | https://youtube.com/watch?v=bogGO4UUxvo 2474 | https://youtube.com/watch?v=haVlcMsRIHE 2475 | https://youtube.com/watch?v=JFv_rFiYGzQ 2476 | https://youtube.com/watch?v=uD73uTlu708 2477 | https://youtube.com/watch?v=ocEsAH40fWs 2478 | https://youtube.com/watch?v=of4oefTUY-8 2479 | https://youtube.com/watch?v=wUp3OhwksUM 2480 | https://youtube.com/watch?v=_H1ktl3onMQ 2481 | https://youtube.com/watch?v=ONcXJljaoyE 2482 | https://youtube.com/watch?v=Ea06lSzLvBo 2483 | https://youtube.com/watch?v=VgvJrWwbW-k 2484 | https://youtube.com/watch?v=gQ3YJh_jUFc 2485 | https://youtube.com/watch?v=iWEkIVi7FKo 2486 | https://youtube.com/watch?v=Yqln3nmwS90 2487 | https://youtube.com/watch?v=SPedPSBreNk 2488 | https://youtube.com/watch?v=_pbIj-2vak4 2489 | https://youtube.com/watch?v=mDQHqNf-IEg 2490 | https://youtube.com/watch?v=71LUw5iKoiw 2491 | https://youtube.com/watch?v=OvHcHQ9-jdo 2492 | https://youtube.com/watch?v=ajRPpn5CYFE 2493 | https://youtube.com/watch?v=ZIGxnhQDjh8 2494 | https://youtube.com/watch?v=oA7VV2z2K1o 2495 | https://youtube.com/watch?v=NlpgFuhpgmk 2496 | https://youtube.com/watch?v=uTnxi7i_yWg 2497 | https://youtube.com/watch?v=-lxIzlHAJTw 2498 | https://youtube.com/watch?v=lxBCEuHQVms 2499 | https://youtube.com/watch?v=71QmMPEnDBI 2500 | https://youtube.com/watch?v=opXvrMQEXUk 2501 | https://youtube.com/watch?v=3yeEUpRnyV4 2502 | https://youtube.com/watch?v=aFuYIkYx3EY 2503 | https://youtube.com/watch?v=-BIlJRa-1pw 2504 | https://youtube.com/watch?v=Pq9VEnUc1sw 2505 | https://youtube.com/watch?v=GYhDtr-HTps 2506 | https://youtube.com/watch?v=Wl2eEI7a46A 2507 | https://youtube.com/watch?v=P-a6c1b0qCs 2508 | https://youtube.com/watch?v=2MferjKXc1c 2509 | https://youtube.com/watch?v=VGA_Y6YZLhM 2510 | https://youtube.com/watch?v=ls3jLz5GK-k 2511 | https://youtube.com/watch?v=g4az93FLo9s 2512 | https://youtube.com/watch?v=lZbgyKJkHxQ 2513 | https://youtube.com/watch?v=eiNHxi6YPEU 2514 | https://youtube.com/watch?v=ptdDbLKDHwo 2515 | https://youtube.com/watch?v=Pssb8lCRjnQ 2516 | https://youtube.com/watch?v=VhbG1JPe_JI 2517 | https://youtube.com/watch?v=ycslsuleRCA 2518 | https://youtube.com/watch?v=BQCx1kW3kMc 2519 | https://youtube.com/watch?v=jQH0GPL33uc 2520 | https://youtube.com/watch?v=H5qgwnfvf1c 2521 | https://youtube.com/watch?v=M47Bsg6Bt3M 2522 | https://youtube.com/watch?v=69oNGLx0Sxg 2523 | https://youtube.com/watch?v=WBIsw5rtWjk 2524 | https://youtube.com/watch?v=bw1ArZ3zLDg 2525 | https://youtube.com/watch?v=77dxA6S_BpY 2526 | https://youtube.com/watch?v=oGDS_xiHHCM 2527 | https://youtube.com/watch?v=k0kI8tcFxM8 2528 | https://youtube.com/watch?v=qQMUWlse5I8 2529 | https://youtube.com/watch?v=mDmbKzaCkGY 2530 | https://youtube.com/watch?v=yis_itRsT_8 2531 | https://youtube.com/watch?v=ClE5MBXh4rg 2532 | https://youtube.com/watch?v=gnxbNaW4vDk 2533 | https://youtube.com/watch?v=rWm41a4hyw8 2534 | https://youtube.com/watch?v=flWB-WaKm5U 2535 | https://youtube.com/watch?v=AtxRk7kzU0Q 2536 | https://youtube.com/watch?v=rYNIs6HnyMY 2537 | https://youtube.com/watch?v=LWay7pPEWeg 2538 | https://youtube.com/watch?v=HMnrl0tmd3k 2539 | https://youtube.com/watch?v=Uv3FQb2AvZM 2540 | https://youtube.com/watch?v=yeJx04_47Lc 2541 | https://youtube.com/watch?v=TYRDgd3Tb44 2542 | https://youtube.com/watch?v=bLo5pj04wag 2543 | https://youtube.com/watch?v=KEXQkrllGbA 2544 | https://youtube.com/watch?v=hwZNL7QVJjE 2545 | https://youtube.com/watch?v=rF2UauLtZag 2546 | https://youtube.com/watch?v=wEA5Xuc4-a4 2547 | https://youtube.com/watch?v=lRgGiS2CHec 2548 | https://youtube.com/watch?v=7uy0ldI_1HA 2549 | --------------------------------------------------------------------------------