#!/usr/bin/env bash ############################################################################# VERSION 2.1 ### SOF echo -e '\033[0;31m'" .:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::. " echo -e '\033[0;31m'" /mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNd- " echo -e '\033[0;31m'"-MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN." echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmNMMMMMMMMMMMmMMMMMMMMMMMMMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh:NMMMMMMMMMMoyMMMMMMMMMMMMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMm -NMMMMMMMMMs.NMMMMMMMMMMMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy -hmmmmmNNm- sMMMMMMMMMMMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmdyo+:. ......... .NMMMymMMMMMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmy+-.. -hNm-+MMMMMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMms:. ... /MMMMMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh/. /MMMMMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMmMMMMMMMMMMMmhN:. /MMMMMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMM+sNMMMMMMMMMN-h: .-+syyys/- -NMMMMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMs +NMMMMMMMhm--d. :. -sdNMMMMMNNmy. :ydMMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMM+ :yhyyyhhso. os yhshNMMMMMMMh+:-:. :s- .NMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMmho. . .yo.h:sMMMMMMMMMMNd+. -NNs- yMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMNh/. :++.-MMMMMMMMMMMMMm+. :ymds. -NMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMmo- .MMMMMMMMMMMMMMMdo. ..-. yMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMmo. .NMMMMMMMMMMMMMMMMNy/.. .mMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMNs. hMMMMMMMMMMMMMMMMMMMNho-. :NMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMm: ./syyyo- -hmNMMMMMMMMMMMMMMMMMMMMmho:.. /NMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMd. .smMMMNNNms. . .+MMMMMMMMMMMMMMMMMMMMMMMMNdy/ ..yMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMd. /mMMMMMy/:--. so. .mMMMMMMMMMMMMMMMMMMMMMMMNdo--:+sdNMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMN- /NMMMMMMMMdo. oMm+. /MMMMMMMMMMMMMMMMdNMMMMMMNNNMMmMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMMo -NMMMMMMMMMMdso-. /hmm+ sMMMMMMMMMMMMMMMs-mMMMMMMMMMM:dMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMN. sMMMMMMMMMMMo .os/..... .dMMMMMMMMMMMMMMs -NMMMMMMMMM-:MMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMd mMMMMMMMMMMM/ .:os+-. .dMMMMMMMMMMMNm. -soosyhdms .mMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"/MMs mMMMMMMMMMMM: .hNhs/.. .dMMMMNmhs+:-. +MMMNoMMMMMMMMMM-" echo -e '\033[0;31m'"/MMy hMMMMMMMMMMM: oMMMMMNdyo/. .mNh+-. +mNy.mMMMMMMMMM-" echo -e '\033[0;31m'"/MMd +MMMMMMMMMMM/ :MMMMMMMMNs...:ohh/. . mMMMMMMMMM-" echo -e '\033[0;31m'"/MMN. .mMMMMMMMMMMo .NMMMMMMNhhdNMMh: mMMMMMMMMM-" echo -e '\033[0;31m'"/MMM+ /MMMMMMMMMMh yMMMMMMMMMMMN+ .NMMMMMMMMM-" echo -e '\033[0;31m'"/MMMm. +MMMMMMMMMN. .NMMMMMMMMMN- :sdmNNNdy+. dMMMMMMMMM-" echo -e '\033[0;31m'"/MMMMo +MMMMMMMMM+ +MMMMMMMMM/ -dMMMMMMNmmNN/ .sdMMMMMMM-" echo -e '\033[0;31m'"/MMMMN: :mMMMMMMMm. oMMMMMMMh .mMMMMMMMms- .. /o. .mMMMMMM-" echo -e '\033[0;31m'"/MMMMMm. .yMMMMMMMo oMMMMMM/ sMMMMMMMMMMMh: :NNo. sMMMMMM-" echo -e '\033[0;31m'"/MMMMMMm. -hMMMMMN: /NMMMM. dMMMMMMMMMMMMMh- :hmNy. .NMMMMM-" echo -e '\033[0;31m'"/MMMMMMMm- -yNMMMm. .yMMM. dMMMMMMMMMMMMMMNh:. .... yMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMN+ .+hNMd. :hM: dMMMMMMMMMMMMMMMMNmo- .NMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMh- ./ss. .:: sMMMMMMMMMMMMMMMMMMMNms/. /MMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMNo. . :MMMMMMMMMMMMMMMMMMMMMMMNdo:.. oMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMmo. .mMMMMMMMMMMMMMMMMMMMMMMMMMMNmh: .dMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMNy:. +MMMMMMMMMMMMMMMMMMMMMMMMMMNh+::/+sdNMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMNdo- .dMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNMMMMMMMM-" echo -e '\033[0;31m'"/MMMMMMMMMMMMMMMMMMMMNd+-. -NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM-" echo -e '\033[0;31m'"-NMMMMMMMMMMMMMMMMMMMMMMNdo:. /NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd." echo -e '\033[0;31m'" -ymNNNNNNNNNNNNNNNNNNNNNNNNdo-. +NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNmy. " echo -e '\033[0;31m'" ............................ .-................................ " echo -e '\033[0;31m'" ...... ......... .............. .......... ...... " ##################################################################################################################### DP3PWD="$PWD" DP3RUN="$PWD/$0" REDOWNLOAD_COUNT=0 REDOWNLOAD_LIMIT=3 PLAYLIST_URL=$3 PLAYLIST_NAME="$1" PLAYLIST_GENRE="$2" PLAYLIST_ARTWORK="_cover.png" PLAYLIST_ARTWORK_PATH="$DP3PWD/$PLAYLIST_ARTWORK" PLAYLIST_URLBATCH="_url_batch.log" PLAYLIST_URLSTEXT="_playlist_urls.txt" PREFIX="dr1p__" THREADS=20 ##################################################################################################################### usage () { echo -e "\n\t\033[0;31m INFO: \033[0;91m[\033[0m COMMAND LINE HELP \033[0;91m]\033[0m" echo -e "\n\t\033[0;31m USAGE: \033[0;91m./$0 name_of_playlist genre_of_playlist url_of_playlist\033[0m" echo -e "\t\033[0;31mEXAMPLE: \033[0;91m./$0 dr1pp1ng rap https://www.youtu.be/playlist?list=BLABLABLABLABLA\033[0m" echo -e "\n\t\033[0;31m INFO: \033[0;91m[\033[0m MULTI-LINE HELP \033[0;91m]\033[0m" echo -e "\n\033[0;31m USAGE_LINE_1:\033[0;91m first line: what to name this playlist, it's just a chosen name\033[0m" echo -e "\033[0;31m USAGE_LINE_2: \033[0;91msecond line: genre of this playlist, can be anything you want \033[0m" echo -e "\033[0;31m USAGE_LINE_3: \033[0;91mthird line and more: a url to a song, playlist, set or channel \033[0m\n" echo -e "\t\033[0;31mEXAMPLE: \033[0;91m[\033[0m TRY THE SIX LINE BATCH BELOW IF YOU ARE UNSURE\033[0;91m ]\033[0m\n" echo -e "\033[0;31m EXAMPLE_LINE_1: \033[0;91mdr1pp1ng_m1x3s\033[0m" echo -e "\033[0;31m EXAMPLE_LINE_2: \033[0;91mindustrial\033[0m" echo -e "\033[0;31m EXAMPLE_LINE_3: \033[0;91mwww.youtube.com/playlist?list=PLrdcKN79B4UG1xoQ8-L3eiaI1cYzFCiWD\033[0m" echo -e "\033[0;31m EXAMPLE_LINE_4: \033[0;91mhttps://soundcloud.com/vanta_sec/sets/dr1pp1ng\033[0m" echo -e "\033[0;31m EXAMPLE_LINE_5: \033[0;91mhttps://the--hacker.bandcamp.com/\033[0m" echo -e "\033[0;31m EXAMPLE_LINE_6: \033[0;91mhttps://soundcloud.com/user-786674423\033[0m" } ##################################################################################################################### goto() { label=$1 cmd=$(sed -En "/^[[:space:]]*#[[:space:]]*$label:[[:space:]]*#/{:a;n;p;ba};" "$DP3RUN") eval "$cmd" exit } ##################################################################################################################### if [ $# -lt 3 ]; then echo -e "\n\t\033[0;31m ERROR: \033[0;91m[\033[0m NOT ENOUGH PARAMETERS SUPPLIED \033[0;91m]"; usage fi ##################### if [ $# -lt 3 ]; then echo -e "\n\033[0;91m[ \033[0;31mMULTI-LINE MODE, PRESS CTRL+D WHEN DONE OR CTRL+C TO ABORT\033[0;91m ]\033[0;91m\n"; DP3=$(cat); fi ##################################################################################################################### echo -e "\033[0;33m\n[ PREREQUISITES CHECK ]\033[0;91m\n" ##################################################################################################################### [ -e _cover.png ] || wget https://ansibomb.com/assets/dr1p.pentagram.png -O $PLAYLIST_ARTWORK ##################################################################################################################### PREREQUISITES_PROGS=(tmux parallel jq elinks ffmpeg youtube-dl) PREREQUISITES_PMODS=("pip eyed3") FOUND_PROGS=() ##################################################################################################################### for p in ${PREREQUISITES_PROGS[@]}; do which $p >> /dev/null 2>&1 if [ $? -eq 0 ]; then echo -e "\033[0;32mlocated $p\033[0m" [ "parallel" == $p ] && (echo -e "nosite\r\n"|parallel --citation > /dev/null 2>&1) else FOUND_PROGS+=("$p") [ "youtube-dl" == $p ] && PREREQUISITES_PMODS+=("youtube-dl") fi done ##################################################################################################################### MISSING_PMODS=() ################ for p in ${PREREQUISITES_PMODS[@]}; do sp=$p [ "youtube-dl" == $sp ] && ( sp=youtube_dl ) python3 -c "import $sp" >> /dev/null 2>&1 [ $? -eq 0 ] || MISSING_PMODS+=("$p") done ##################################################################################################################### for ap in ${MISSING_PMODS[@]}; do echo -e "\033[0;33m[ automating $ap ]\033[0;34m" ################################################ [ "pip" == $ap ] && ( wget https://bootstrap.pypa.io/get-pip.py; python3 get-pip.py ) [ "eyed3" == $ap ] && ( python3 -m pip install --user $ap ) [ "youtube-dl" == $ap ] && ( python3 -m pip install --user $ap ) done ##################################################################################################################### for p in ${PREREQUISITES_PMODS[@]}; do python3 -c "import $p" >> /dev/null 2>&1 ######################################## [ $? -eq 0 ] && echo -e "\033[0;32mlocated $p\033[0m" || ( echo -e "\033[0;31mmissing $p python3 module\033[0m") done ##################################################################################################################### for p in ${FOUND_PROGS[@]}; do MESSAGE="\033[0;91minstallation required\033[0;0m" ################################################## [ "tmux" == $p ] && echo -e "\033[0;31mmissing $p -\033[0;34m $MESSAGE" [ "parallel" == $p ] && echo -e "\033[0;31mmissing $p -\033[0;34m $MESSAGE" [ "jq" == $p ] && echo -e "\033[0;31mmissing $p -\033[0;34m $MESSAGE" [ "elinks" == $p ] && echo -e "\033[0;31mmissing $p -\033[0;34m $MESSAGE" [ "ffmpeg" == $p ] && echo -e "\033[0;31mmissing $p -\033[0;34m $MESSAGE" done ##################################################################################################################### [ 0 -ne "${#FOUND_PROGS[@]}" ] && echo -e "\n\033[0;33m[ PREREQUISITES CHECK - \033[0;33mFAILED \033[0;33m]\033[0m\n" ###################################### [ 0 -ne "${#FOUND_PROGS[@]}" ] && exit ##################################################################################################################### echo -e "\033[0;33m\n[ PREREQUISITES CHECK - \033[0;34mPASSED \033[0;33m]\033[0m" ##################################################################################################################### if [ -z "$DP3" ]; then ###################################################################################################### COMMAND LINE echo -e "\033[0;33m[ FETCHING CONTENT IDS FROM PLAYLISTS ]\033[0m" ################################################################## youtube-dl -j --flat-playlist $PLAYLIST_URL | jq -r '.url' > $PLAYLIST_URLSTEXT ################################################################################################################### echo -e "\033[0;33m[ REBUILDING URLS FOR DOWNLOAD BATCHLIST ]\033[0m" ##################################################################### cat $PLAYLIST_URLSTEXT|grep -v "bcbits.com\|sndcdn.com\|soundcloud\|bandcamp"|xargs -n 1|sed 's_^_https://youtu.be/_' > $PLAYLIST_URLBATCH cat $PLAYLIST_URLSTEXT|grep "bcbits.com\|sndcdn.com\|soundcloud\|bandcamp" >> $PLAYLIST_URLBATCH #################################################################################### if [ $(cat $PLAYLIST_URLBATCH|grep youtu.be|wc -c) -eq 18 ]; then cat $PLAYLIST_URLBATCH|grep -v youtu.be >> buffer && mv buffer $PLAYLIST_URLBATCH; fi #################################################################################### echo -e "\033[0;34m[ `cat $PLAYLIST_URLSTEXT|wc -l` OF `cat $PLAYLIST_URLBATCH|wc -l` URLS PARSED ]\033[0m" rm $PLAYLIST_URLSTEXT else ######################################################################################################## MULTILINE PLAYLIST_NAME=$(echo $DP3|xargs -n1|sed -n 1p) PLAYLIST_GENRE=$(echo $DP3|xargs -n1|sed -n 2p) PLAYLIST_URL=$(echo $DP3|xargs -n1|sed -n '3,$p') #################################################################################### echo -e "\033[0;33m[ FETCHING CONTENT IDS FROM PLAYLISTS ]\033[0m" #################################################################################### echo $PLAYLIST_URL|xargs -n1|grep youtube|xargs -I{} youtube-dl -j --flat-playlist {}|jq -r '.url'|grep -v \ youtube|sed 's_^_https://youtu.be/_' > $PLAYLIST_URLBATCH echo $PLAYLIST_URL|xargs -n1|grep youtube|xargs -I{} youtube-dl -j --flat-playlist {}| jq -r '.url'|grep \ youtube|xargs -I{} youtube-dl -j --flat-playlist {}|jq -r '.id'|sed 's_^_https://youtu.be/_' >> $PLAYLIST_URLBATCH & disown YOUTUBE_PID=$! #################################################################################### echo $PLAYLIST_URL|xargs -n1|grep "sndcdn.com\|soundcloud"|xargs -I{} youtube-dl -j \ --flat-playlist {}|jq -r '.url' >> $PLAYLIST_URLBATCH & disown SOUNDCLOUD_PID=$! #################################################################################### echo $PLAYLIST_URL|xargs -n1|grep "bcbits.com\|bandcamp"| awk -F[/:] '{print $4}'|xargs -I{} elinks --dump --no-numbering \ {}|grep -e '.com/album' -e '.com/track'|sed 's/.*https/https/g'|uniq|xargs -I{} youtube-dl -j --flat-playlist \ {}|jq -r '.url' >> $PLAYLIST_URLBATCH & disown BANDCAMP_PID=$! #################################################################################### [ -e dp3_finished_yt ] && rm dp3_finished_yt; [ -e dp3_finished_sc ] && rm dp3_finished_sc; [ -e dp3_finished_bc ] && rm dp3_finished_bc while [ -z $YOUTUBE_TRAP ]; do if [ $(ps -aux|grep $YOUTUBE_PID|grep -v "grep" > /dev/null 2>&1;echo $?) -eq 1 ]; then YOUTUBE_TRAP=1; touch dp3_finished_yt; echo -e "\n\033[0;31m[\033[0m YOUTUBE INDEX DONE \033[0;31m]\n"; fi; done & disown while [ -z $SOUNDCLOUD_TRAP ]; do if [ $(ps -aux|grep $SOUNDCLOUD_PID|grep -v "grep" > /dev/null 2>&1;echo $?) -eq 1 ]; then SOUNDCLOUD_TRAP=1; touch dp3_finished_sc; echo -e "\n\033[0;31m[\033[0m SOUNDCLOUD INDEX DONE \033[0;31m]\n"; fi; done & disown while [ -z $BANDCAMP_TRAP ]; do if [ $(ps -aux|grep $BANDCAMP_PID|grep -v "grep" > /dev/null 2>&1;echo $?) -eq 1 ]; then BANDCAMP_TRAP=1; touch dp3_finished_bc; echo -e "\n\033[0;31m[\033[0m BANDCAMP INDEX DONE \033[0;31m]\n"; fi; done & disown #################################################################################### echo -e "\033[0;31m" && tail -f $PLAYLIST_URLBATCH & disown && TAIL_PID=$! #################################################################################### FINITE_TRAP=0 while [ $FINITE_TRAP == 0 ]; do if [ -e dp3_finished_yt ] && [ -e dp3_finished_sc ] && [ -e dp3_finished_bc ]; then FINITE_TRAP=1; sleep .1; echo -e "\n\033[0;31m[\033[0m JOBS FINITE \033[0;31m]" rm dp3_finished_* > /dev/null 2>&1; kill -9 $TAIL_PID; echo -e "\033[0;31m[\033[0m FINISHED INDEXING \033[0;31m-\033[0m `wc -l $PLAYLIST_URLBATCH` ITEMS SORTED \033[0;31m]\033[0m\n" else sleep 1; echo -n . fi done #################################################################################### fi ##################################################################################################################### [ -d "$PLAYLIST_NAME" ] || mkdir "$PLAYLIST_NAME" ################################################## mv "$PLAYLIST_URLBATCH" "$PLAYLIST_NAME/url_batch.log"; cd "$PLAYLIST_NAME" ##################################################################################################################### ENABLED_YOUTUBE=0; ENABLED_BANDCAMP=0; ENABLED_SOUNDCLOUD=0; cat "url_batch.log"|grep "youtu.\|YOUTU.\|youtube.\|YOUTUBE." 2>&1>/dev/null ############################################################################ if [ $? -eq 0 ]; then cat "url_batch.log"|grep "youtu.\|YOUTU.\|youtube.\|YOUTUBE."|grep -v "youtu.be/null" > "youtube_url_batch.log" ENABLED_YOUTUBE=1 fi ##################################################################################################################### cat "url_batch.log"|grep "sndcdn.com\|soundcloud.\|SOUNDCLOUD." 2>&1>/dev/null ################################################################## if [ $? -eq 0 ]; then cat "url_batch.log"|grep "sndcdn.com\|soundcloud.\|SOUNDCLOUD." > "soundcloud_url_batch.log" ENABLED_SOUNDCLOUD=1 fi ##################################################################################################################### cat "url_batch.log"|grep "bcbits.com\|bandcamp.\|BANDCAMP." 2>&1>/dev/null ############################################################## if [ $? -eq 0 ]; then cat "url_batch.log"|grep "bcbits.com\|bandcamp.\|BANDCAMP." > "bandcamp_url_batch.log" ENABLED_BANDCAMP=1 fi ##################################################################################################################### echo -e "\033[0;33m[ STARTING PARALLEL DOWNLOADS ]\033[0m\n" ##################################################################################################################### if [ -f "youtube_url_batch.log" ]; then [ ! -d "rips_youtube" ] && mkdir "rips_youtube" mv "youtube_url_batch.log" "rips_youtube/youtube_url_batch.log" echo 'cd rips_youtube; touch youtube_downloaded.log; clear; echo -e "\033[0;3mls window - \ youtube - [ initializing ]"; while :; do clear; [ $(ps -aux|grep youtube_download.sh|grep -v \ "eval\|grep" > /dev/null 2>&1;echo $?) -eq 1 ] && exit; echo -e "\033[0;31mprogress window -\ youtube - \033[0;92m`cat youtube_downloaded.log|wc -l`\033[0;31m/\033[0;92m\ `cat youtube_url_batch.log|wc -l`\033[0;31m files downloaded - \033[0;92m`ls -al *|grep \ -v "log\|mp3"|wc -l`\033[0;31m files actively downloading\033[0;94m"; ls -al|grep "webm\|m4a"; sleep 0.3; \ done' > youtube_progress.sh fi ##################################################################################################################### if [ -f "soundcloud_url_batch.log" ]; then [ ! -d "rips_soundcloud" ] && mkdir "rips_soundcloud" mv "soundcloud_url_batch.log" "rips_soundcloud/soundcloud_url_batch.log" echo 'cd rips_soundcloud; touch soundcloud_downloaded.log; clear; echo -e "\033[0;3mprogress window - \ soundcloud - [ initializing ]"; while :; do clear; [ $(ps -aux|grep soundcloud_download.sh|grep -v \ "eval\|grep" > /dev/null 2>&1;echo $?) -eq 1 ] && exit;echo -e "\033[0;31mprogress window -\ soundcloud - \033[0;92m `cat soundcloud_downloaded.log|wc -l`\033[0;31m/\033[0;92m\ `cat soundcloud_url_batch.log|wc -l`\033[0;31m files downloaded - \033[0;92m`ls -al *|grep \ -v "log\|mp3"|wc -l`\033[0;31m files actively downloading\033[0;94m"; ls -al|grep wav; sleep 0.3; \ done' > soundcloud_progress.sh fi ##################################################################################################################### if [ -f "bandcamp_url_batch.log" ]; then [ ! -d "rips_bandcamp" ] && mkdir "rips_bandcamp" mv "bandcamp_url_batch.log" "rips_bandcamp/bandcamp_url_batch.log" echo 'cd rips_bandcamp; touch bandcamp_downloaded.log; clear; echo -e "\033[0;3mprogress window - \ bandcamp - [ initializing ]"; while :; do clear; [ $(ps -aux|grep bandcamp_download.sh|grep -v \ "eval\|grep" > /dev/null 2>&1;echo $?) -eq 1 ] && exit;echo -e "\033[0;31mprogress window -\ bandcamp - \033[0;92m `cat bandcamp_downloaded.log|wc -l`\033[0;31m/\033[0;92m\ `cat bandcamp_url_batch.log|wc -l`\033[0;31m files downloaded - \033[0;92m`ls -al *|grep \ -v "log\|mp3"|wc -l`\033[0;31m files actively downloading\033[0;94m"; ls -al|grep aiff; sleep 0.3; \ done' > bandcamp_progress.sh fi ##################################################################################################################### echo "cd rips_youtube; clear; echo -e '\033[0;31mdownload window - youtube\033[0;94m'; parallel \ -j $THREADS youtube-dl -f bestaudio -i --download-archive youtube_downloaded.log \ --socket-timeout 180 --fragment-retries 10 --abort-on-unavailable-fragment --no-part --no-post-overwrites \ -ciw --extract-audio --audio-format mp3 --audio-quality 0 < youtube_url_batch.log" > youtube_download.sh ##################################################################################################################### CMD_YT_D="bash youtube_download.sh" ##################################################################################################################### echo "cd rips_soundcloud; clear; echo -e '\033[0;31mdownload window - soundcloud\033[0;94m'; \ parallel -j $THREADS youtube-dl -f bestaudio -i --download-archive soundcloud_downloaded.log \ --socket-timeout 180 --fragment-retries 10 --abort-on-unavailable-fragment --no-part --no-post-overwrites \ -ciw -o '%\(uploader\)s-%\(title\)s-%\(id\)s.%\(ext\)s' --extract-audio --audio-format mp3 --audio-quality \ 0 < soundcloud_url_batch.log" > soundcloud_download.sh ##################################################################################################################### CMD_SC_D="bash soundcloud_download.sh" ##################################################################################################################### echo "cd rips_bandcamp; clear; echo -e '\033[0;31mdownload window - bandcamp\033[0;94m'; parallel \ -j $THREADS youtube-dl -f bestaudio -i --download-archive bandcamp_downloaded.log \ --socket-timeout 180 --fragment-retries 10 --abort-on-unavailable-fragment --no-part --no-post-overwrites \ -ciw --extract-audio --audio-format mp3 --audio-quality 0 < bandcamp_url_batch.log" > bandcamp_download.sh ##################################################################################################################### CMD_BC_D="bash bandcamp_download.sh" ##################################################################################################################### ##################################################################################################################### ##################################################################################################################### CMD_YT_P="bash youtube_progress.sh" #################################### CMD_SC_P="bash soundcloud_progress.sh" ###################################### CMD_BC_P="bash bandcamp_progress.sh" ##################################################################################################################### ##################################################################################################################### ##################################################################################################################### goto skip redownload=${1:-redownload} #redownload:# echo "redownload missing files - cycle: $REDOWNLOAD_COUNT / $REDOWNLOAD_LIMIT" REDOWNLOAD_COUNT=$((REDOWNLOAD_COUNT+1)) sleep 2 cd "$PLAYLIST_NAME" goto end #skip:# echo "redownload skipped" #end:# ##################################################################################################################### ##################################################################################################################### ##################################################################################################################### COUNT=0; TASKS=(); LENGTH=() if [ $ENABLED_YOUTUBE -eq 1 ]; then COUNT=$((COUNT+2)) LENGTH+=(${#TASKS[@]}); TASKS+=($CMD_YT_D); LENGTH+=(${#TASKS[@]}); TASKS+=($CMD_YT_P); fi ############################################################################################### if [ $ENABLED_SOUNDCLOUD -eq 1 ]; then COUNT=$((COUNT+2)) LENGTH+=(${#TASKS[@]}); TASKS+=($CMD_SC_D); LENGTH+=(${#TASKS[@]}); TASKS+=($CMD_SC_P); fi ############################################################################################### if [ $ENABLED_BANDCAMP -eq 1 ]; then COUNT=$((COUNT+2)) LENGTH+=(${#TASKS[@]}); TASKS+=($CMD_BC_D); LENGTH+=(${#TASKS[@]}); TASKS+=($CMD_BC_P); fi ##################################################################################################################### if [ $COUNT -eq 2 ]; then DYNARGS_A=$(echo ${TASKS[@]}|cut -d ' ' -f 1-${LENGTH[1]}) DYNARGS_B=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[1]+1))-${LENGTH[2]}) tmux \ new-session "eval $DYNARGS_A; exit; read" \; \ split-window "eval $DYNARGS_B; exit; read" \; \ select-layout tiled fi ################################################ if [ $COUNT -eq 4 ]; then DYNARGS_A=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[0]+1))-${LENGTH[1]}) DYNARGS_B=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[1]+1))-${LENGTH[2]}) DYNARGS_C=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[2]+1))-${LENGTH[3]}) DYNARGS_D=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[3]+1))-${LENGTH[4]}) tmux \ new-session "eval $DYNARGS_A; exit; read" \; \ split-window "eval $DYNARGS_B; exit; read" \; \ split-window "eval $DYNARGS_C; exit; read" \; \ split-window "eval $DYNARGS_D; exit; read" \; \ select-layout tiled fi ################################################ if [ $COUNT -eq 6 ]; then DYNARGS_A=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[0]+1))-${LENGTH[1]}) DYNARGS_B=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[1]+1))-${LENGTH[2]}) DYNARGS_C=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[2]+1))-${LENGTH[3]}) DYNARGS_D=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[3]+1))-${LENGTH[4]}) DYNARGS_E=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[4]+1))-${LENGTH[5]}) DYNARGS_F=$(echo ${TASKS[@]}|cut -d ' ' -f $((LENGTH[5]+1))-${LENGTH[6]}) tmux \ new-session "eval $DYNARGS_B; exit; read" \; \ select-pane -t 0 \; \ split-window -h "eval $DYNARGS_A; exit; read" \; \ split-window -v -p 33 "eval $DYNARGS_C; exit; read" \; \ select-pane -t 0 \; \ split-window -v -p 33 "eval $DYNARGS_D; exit; read" \; \ select-pane -t 0 \; \ split-window -v -p 50 "eval $DYNARGS_F; exit; read" \; \ select-pane -t 3 \; \ split-window -v -p 50 "eval $DYNARGS_E; exit; read" \; \ select-layout default fi ##################################################################################################################### if [ $ENABLED_YOUTUBE -eq 1 ]; then echo -e "youtube - redownload count: $REDOWNLOAD_COUNT / $REDOWNLOAD_LIMIT" cd rips_youtube if [ $REDOWNLOAD_COUNT -le $REDOWNLOAD_LIMIT ]; then ytb=$(wc -l youtube_url_batch.log|awk '{print $1}') ytd=$(wc -l youtube_downloaded.log|awk '{print $1}') if [ $ytd -lt $ytb ]; then echo "missing youtube downloads: redownloading" DP3PWDBAK="$PWD" cd "$DP3PWD" goto redownload else echo "youtube downloads finished" echo "PWD: $PWD" ls *.mp3|xargs -I{} -d"\n" mv {} youtube_{} mv *.{mp3,log} .. && cd .. rm -Rf rips_youtube && rm -f youtube_progress.sh fi else echo "redownload limit exceeded" ls *.mp3|xargs -I{} -d"\n" mv {} youtube_{} mv *.{mp3,log} .. && cd .. rm -Rf rips_youtube && rm -f youtube_progress.sh fi fi ######################################################## if [ $ENABLED_SOUNDCLOUD -eq 1 ]; then echo -e "soundcloud - redownload count: $REDOWNLOAD_COUNT / $REDOWNLOAD_LIMIT" cd rips_soundcloud if [ $REDOWNLOAD_COUNT -le $REDOWNLOAD_LIMIT ]; then scb=$(wc -l soundcloud_url_batch.log|awk '{print $1}') scd=$(wc -l soundcloud_downloaded.log|awk '{print $1}') if [ $scd -lt $scb ]; then echo "missing soundcloud downloads: redownloading" DP3PWDBAK="$PWD"cd cd "$DP3PWD" goto redownload else echo "soundcloud downloads finished" ls *.mp3|xargs -I{} -d"\n" mv {} soundcloud_{} mv *.{mp3,log} .. && cd .. rm -Rf rips_soundcloud && rm -f soundcloud_progress.sh fi else echo "redownload limit exceeded" ls *.mp3|xargs -I{} -d"\n" mv {} soundcloud_{} mv *.{mp3,log} .. && cd .. rm -Rf rips_soundcloud && rm -f soundcloud_progress.sh fi fi ######################################################## if [ $ENABLED_BANDCAMP -eq 1 ]; then echo -e "bandcamp - redownload count: $REDOWNLOAD_COUNT / $REDOWNLOAD_LIMIT" cd rips_bandcamp if [ $REDOWNLOAD_COUNT -le $REDOWNLOAD_LIMIT ]; then bcb=$(wc -l bandcamp_url_batch.log|awk '{print $1}') bcd=$(wc -l bandcamp_downloaded.log|awk '{print $1}') if [ $bcd -lt $bcb ]; then echo "missing bandcamp downloads: redownloading" DP3PWDBAK="$PWD" cd "$DP3PWD" goto redownload else echo "bandcamp downloads finished" ls *.mp3|xargs -I{} -d"\n" mv {} bandcamp_{} mv *.{mp3,log} .. && cd .. rm -Rf rips_bandcamp && rm -f bandcamp_progress.sh fi else echo "redownload limit exceeded" ls *.mp3|xargs -I{} -d"\n" mv {} bandcamp_{} mv *.{mp3,log} .. && cd .. rm -Rf rips_bandcamp && rm -f bandcamp_progress.sh fi fi ##################################################################################################################### cd $DP3PWD ################################################################################# DP3 TOOL ENCODED BELOW # ##################################################################################################################### echo "IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" > dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBWRVJTSU9OIDIuMCAj" >> dr1p echo "IyMgU09GDQpfX2RvY19fID0gJycnOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6" >> dr1p echo "Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Lg0KIC9tTU1NTU1NTU1N" >> dr1p echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU5kLQ0KLU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p echo "TU1NTU1NTi4NCi9NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0tDQovTU1NTU1N" >> dr1p echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1tTk1NTU1NTU1NTU1N" >> dr1p echo "bU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NLQ0KL01NTU1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NaDpOTU1NTU1NTU1NTW95TU1NTU1NTU1NTU1NTU1N" >> dr1p echo "TU1NTU1NTU1NTU1NTS0NCi9NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p echo "TU1NTU1NTU1NTW0gLU5NTU1NTU1NTU1zLk5NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0tDQov" >> dr1p echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU15ICAtaG1t" >> dr1p echo "bW1tTk5tLSBzTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NLQ0KL01NTU1NTU1NTU1NTU1NTU1N" >> dr1p echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NbWR5bys6LiAgIC4uLi4uLi4uLiAgLk5NTU15bU1N" >> dr1p echo "TU1NTU1NTU1NTU1NTU1NTU1NTS0NCi9NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p echo "TU1NTU1NbXkrLS4uICAgICAgICAgICAgICAgICAgICAtaE5tLStNTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p echo "TU0tDQovTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTW1zOi4gICAgICAgICAg" >> dr1p echo "ICAgICAgICAgICAgICAgIC4uLiAvTU1NTU1NTU1NTU1NTU1NTU1NTU1NLQ0KL01NTU1NTU1NTU1N" >> dr1p echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NaC8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg" >> dr1p echo "ICAgL01NTU1NTU1NTU1NTU1NTU1NTU1NTS0NCi9NTU1NTU1NTU1NTU1NTU1NTU1NbU1NTU1NTU1N" >> dr1p echo "TU1NbWhOOi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9NTU1NTU1NTU1NTU1N" >> dr1p echo "TU1NTU1NTU0tDQovTU1NTU1NTU1NTU1NTU1NTU1NTStzTk1NTU1NTU1NTU4taDogICAgICAgICAu" >> dr1p echo "LStzeXl5cy8tICAgICAgICAgICAgICAgICAtTk1NTU1NTU1NTU1NTU1NTU1NTU1NLQ0KL01NTU1N" >> dr1p echo "TU1NTU1NTU1NTU1NTU1zICtOTU1NTU1NTWhtLS1kLiAgOi4gIC1zZE5NTU1NTU5ObXkuICAgICAg" >> dr1p echo "ICAgICAgICAgIDp5ZE1NTU1NTU1NTU1NTU1NTU1NTS0NCi9NTU1NTU1NTU1NTU1NTU1NTU1NKyAg" >> dr1p echo "OnloeXl5aGhzby4gb3MgIHloc2hOTU1NTU1NTWgrOi06LiAgOnMtICAgICAgICAgICAgIC5OTU1N" >> dr1p echo "TU1NTU1NTU1NTU1NTU0tDQovTU1NTU1NTU1NTU1NTU1NTW1oby4gICAgICAgICAgLiAgIC55by5o" >> dr1p echo "OnNNTU1NTU1NTU1NTmQrLiAgIC1OTnMtICAgICAgICAgICAgeU1NTU1NTU1NTU1NTU1NTU1NLQ0K" >> dr1p echo "L01NTU1NTU1NTU1NTU1OaC8uICAgICAgICAgICAgICAgICAgIDorKy4tTU1NTU1NTU1NTU1NTW0r" >> dr1p echo "LiAgOnltZHMuICAgICAgICAgIC1OTU1NTU1NTU1NTU1NTU1NTS0NCi9NTU1NTU1NTU1NTW1vLSAg" >> dr1p echo "ICAgICAgICAgICAgICAgICAgICAgICAgLk1NTU1NTU1NTU1NTU1NTWRvLiAgLi4tLiAgICAgICAg" >> dr1p echo "ICAgeU1NTU1NTU1NTU1NTU1NTU0tDQovTU1NTU1NTU1NbW8uICAgICAgICAgICAgICAgICAgICAg" >> dr1p echo "ICAgICAgIC5OTU1NTU1NTU1NTU1NTU1NTU55Ly4uICAgICAgICAgICAgIC5tTU1NTU1NTU1NTU1N" >> dr1p echo "TU1NLQ0KL01NTU1NTU1Ocy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaE1NTU1NTU1N" >> dr1p echo "TU1NTU1NTU1NTU1OaG8tLiAgICAgICAgICAgOk5NTU1NTU1NTU1NTU1NTS0NCi9NTU1NTU1tOiAg" >> dr1p echo "ICAgICAgLi9zeXl5by0gICAgICAgICAgICAgICAgIC1obU5NTU1NTU1NTU1NTU1NTU1NTU1NTW1o" >> dr1p echo "bzouLiAgICAgICAvTk1NTU1NTU1NTU1NTU0tDQovTU1NTU1kLiAgICAgICAuc21NTU1OTk5tcy4g" >> dr1p echo "IC4gICAgICAgICAgICAgIC4rTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTmR5LyAgICAuLnlNTU1N" >> dr1p echo "TU1NTU1NTU1NLQ0KL01NTU1kLiAgICAgICAvbU1NTU1NeS86LS0uICBzby4gICAgICAgICAgICAg" >> dr1p echo "Lm1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU5kby0tOitzZE5NTU1NTU1NTU1NTU1NTS0NCi9NTU1O" >> dr1p echo "LSAgICAgICAvTk1NTU1NTU1NZG8uICAgb01tKy4gICAgICAgICAgICAvTU1NTU1NTU1NTU1NTU1N" >> dr1p echo "TWROTU1NTU1NTk5OTU1tTU1NTU1NTU1NTU1NTU1NTU0tDQovTU1NbyAgICAgICAtTk1NTU1NTU1N" >> dr1p echo "TU1kc28tLiAvaG1tKyAgICAgICAgICAgIHNNTU1NTU1NTU1NTU1NTU1zLW1NTU1NTU1NTU1NOmRN" >> dr1p echo "TU1NTU1NTU1NTU1NTU1NLQ0KL01NTi4gICAgICAgc01NTU1NTU1NTU1NbyAub3MvLi4uLi4gICAg" >> dr1p echo "ICAgICAgICAuZE1NTU1NTU1NTU1NTU1NcyAtTk1NTU1NTU1NTS06TU1NTU1NTU1NTU1NTU1NTS0N" >> dr1p echo "Ci9NTWQgICAgICAgIG1NTU1NTU1NTU1NTS8gICAuOm9zKy0uICAgICAgICAgICAgIC5kTU1NTU1N" >> dr1p echo "TU1NTU1ObS4gIC1zb29zeWhkbXMgLm1NTU1NTU1NTU1NTU1NTU0tDQovTU1zICAgICAgICBtTU1N" >> dr1p echo "TU1NTU1NTU06ICAgICAgIC5oTmhzLy4uICAgICAgICAgLmRNTU1NTm1ocys6LS4gICAgICAgICAg" >> dr1p echo "ICAgICArTU1NTm9NTU1NTU1NTU1NLQ0KL01NeSAgICAgICAgaE1NTU1NTU1NTU1NOiAgICAgICAg" >> dr1p echo "b01NTU1NTmR5by8uICAgICAubU5oKy0uICAgICAgICAgICAgICAgICAgICAgICttTnkubU1NTU1N" >> dr1p echo "TU1NTS0NCi9NTWQgICAgICAgICtNTU1NTU1NTU1NTS8gICAgICAgIDpNTU1NTU1NTU5zLi4uOm9o" >> dr1p echo "aC8uICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gIG1NTU1NTU1NTU0tDQovTU1OLiAgICAg" >> dr1p echo "ICAubU1NTU1NTU1NTU1vICAgICAgICAuTk1NTU1NTU5oaGROTU1oOiAgICAgICAgICAgICAgICAg" >> dr1p echo "ICAgICAgICAgICAgICAgICBtTU1NTU1NTU1NLQ0KL01NTSsgICAgICAgIC9NTU1NTU1NTU1NaCAg" >> dr1p echo "ICAgICAgIHlNTU1NTU1NTU1NTU4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu" >> dr1p echo "Tk1NTU1NTU1NTS0NCi9NTU1tLiAgICAgICAgK01NTU1NTU1NTU4uICAgICAgICAuTk1NTU1NTU1N" >> dr1p echo "TU4tICAgICAgICAgOnNkbU5OTmR5Ky4gICAgICAgICAgICAgICAgIGRNTU1NTU1NTU0tDQovTU1N" >> dr1p echo "TW8gICAgICAgICArTU1NTU1NTU1NKyAgICAgICAgICtNTU1NTU1NTU0vICAgICAgICAtZE1NTU1N" >> dr1p echo "TU5tbU5OLyAgICAgICAgICAgICAgICAuc2RNTU1NTU1NLQ0KL01NTU1OOiAgICAgICAgIDptTU1N" >> dr1p echo "TU1NTW0uICAgICAgICAgb01NTU1NTU1oICAgICAgICAubU1NTU1NTU1tcy0gLi4gIC9vLiAgICAg" >> dr1p echo "ICAgICAgICAubU1NTU1NTS0NCi9NTU1NTW0uICAgICAgICAgLnlNTU1NTU1NbyAgICAgICAgICBv" >> dr1p echo "TU1NTU1NLyAgICAgICAgc01NTU1NTU1NTU1NaDogICA6Tk5vLiAgICAgICAgICAgIHNNTU1NTU0t" >> dr1p echo "DQovTU1NTU1NbS4gICAgICAgICAgLWhNTU1NTU46ICAgICAgICAgIC9OTU1NTS4gICAgICAgIGRN" >> dr1p echo "TU1NTU1NTU1NTU1NaC0gIDpobU55LiAgICAgICAgICAuTk1NTU1NLQ0KL01NTU1NTU1tLSAgICAg" >> dr1p echo "ICAgICAgLXlOTU1NbS4gICAgICAgICAgLnlNTU0uICAgICAgICBkTU1NTU1NTU1NTU1NTU1OaDou" >> dr1p echo "IC4uLi4gICAgICAgICAgIHlNTU1NTS0NCi9NTU1NTU1NTU4rICAgICAgICAgICAgLitoTk1kLiAg" >> dr1p echo "ICAgICAgICAgOmhNOiAgICAgICAgZE1NTU1NTU1NTU1NTU1NTU1ObW8tICAgICAgICAgICAgICAu" >> dr1p echo "Tk1NTU0tDQovTU1NTU1NTU1NTWgtICAgICAgICAgICAgIC4vc3MuICAgICAgICAgICAuOjogICAg" >> dr1p echo "ICAgIHNNTU1NTU1NTU1NTU1NTU1NTU1NTm1zLy4gICAgICAgICAgIC9NTU1NLQ0KL01NTU1NTU1N" >> dr1p echo "TU1NTm8uICAgICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICA6TU1NTU1NTU1NTU1N" >> dr1p echo "TU1NTU1NTU1NTU1OZG86Li4gICAgICAgb01NTS0NCi9NTU1NTU1NTU1NTU1NbW8uICAgICAgICAg" >> dr1p echo "ICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU5t" >> dr1p echo "aDogICAgIC5kTU0tDQovTU1NTU1NTU1NTU1NTU1NTnk6LiAgICAgICAgICAgICAgICAgICAgICAg" >> dr1p echo "ICAgICAgICAgICArTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1OaCs6Oi8rc2ROTU1NLQ0KL01N" >> dr1p echo "TU1NTU1NTU1NTU1NTU1NTmRvLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRNTU1N" >> dr1p echo "TU1NTU1NTU1NTU1NTU1NTU1NTU1NTk5OTk5NTU1NTU1NTS0NCi9NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p echo "TU5kKy0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtTk1NTU1NTU1NTU1NTU1NTU1NTU1N" >> dr1p echo "TU1NTU1NTU1NTU1NTU1NTU0tDQotTk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1OZG86LiAgICAgICAg" >> dr1p echo "ICAgICAgICAgICAgICAgICAgIC9OTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1k" >> dr1p echo "Lg0KIC15bU5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTmRvLS4gICAgICAgICAgICAgICAgICAgICAg" >> dr1p echo "ICAgK05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTm15Lg0KICAgLi4uLi4uLi4uLi4u" >> dr1p echo "Li4uLi4uLi4uLi4uLi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4tLi4uLi4uLi4uLi4u" >> dr1p echo "Li4uLi4uLi4uLi4uLi4uLi4uLi4NCiAgICAuLi4uLi4gICAgICAgLi4uLi4uLi4uICAgICAgICAg" >> dr1p echo "IC4uLi4uLi4uLi4uLi4uICAgICAgICAgIC4uLi4uLi4uLi4gICAgICAgICAgICAgIC4uLicnJw0K" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmltcG9ydCBvcyxzeXMscmUs" >> dr1p echo "c3RyaW5nLHNodXRpbCxleWVkMw0KZnJvbSBleWVkMy5pZDMgaW1wb3J0IElEM19WMV8xLCBJRDNf" >> dr1p echo "VjJfMywgSUQzX1YyXzQNCmZyb20gZXllZDMuaWQzLmZyYW1lcyBpbXBvcnQgSW1hZ2VGcmFtZQ0K" >> dr1p echo "ZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUNCmZyb20gZ2xvYiBpbXBvcnQgZ2xvYg0KIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmV5ZWQzLmxvZy5zZXRMZXZlbCgi" >> dr1p echo "RVJST1IiKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmlmIF9fbmFt" >> dr1p echo "ZV9fPT0nX19tYWluX18nOg0KICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMN" >> dr1p echo "CiAgICBlbW9qaV9wYXR0ZXJuID0gcmUuY29tcGlsZSgiWyINCiAgICAgICAgdSJcVTAwMDFGNjAw" >> dr1p echo "LVxVMDAwMUY2NEYiICAjIGVtb3RpY29ucw0KICAgICAgICB1IlxVMDAwMUYzMDAtXFUwMDAxRjVG" >> dr1p echo "RiIgICMgc3ltYm9scyAmIHBpY3RvZ3JhcGhzDQogICAgICAgIHUiXFUwMDAxRjY4MC1cVTAwMDFG" >> dr1p echo "NkZGIiAgIyB0cmFuc3BvcnQgJiBtYXAgc3ltYm9scw0KICAgICAgICB1IlxVMDAwMUYxRTAtXFUw" >> dr1p echo "MDAxRjFGRiIgICMgZmxhZ3MgKGlPUykNCiAgICAgICAgIl0rIiwgZmxhZ3M9cmUuVU5JQ09ERSkN" >> dr1p echo "CiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgdHJ5Og0KICAgICAg" >> dr1p echo "ICBzb25nX2FsYnVtPXN0cihzeXMuYXJndlsxXSkNCiAgICBleGNlcHQ6DQogICAgICAgIHByaW50" >> dr1p echo "KCdubyBhbGJ1bSBzcGVjaWZpZWQnKQ0KICAgICAgICBzeXMuZXhpdCgxKQ0KICAgICMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICB0cnk6DQogICAgICAgIHNvbmdfZ2VucmU9" >> dr1p echo "c3RyKHN5cy5hcmd2WzJdKQ0KICAgIGV4Y2VwdDoNCiAgICAgICAgcHJpbnQoJ25vIGdlbnJlIHNw" >> dr1p echo "ZWNpZmllZCcpDQogICAgICAgIHN5cy5leGl0KDEpDQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIw0KICAgIHRyeToNCiAgICAgICAgcGF0aF90b19pbWFnZT1zdHIoc3lzLmFy" >> dr1p echo "Z3ZbM10pDQogICAgZXhjZXB0Og0KICAgICAgICBwcmludCgibm8gcGF0aCB0byAnY292ZXIuanBn" >> dr1p echo "JyBzcGVjaWZpZWQiKQ0KICAgICAgICBzeXMuZXhpdCgxKQ0KICAgICMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMNCiAgICBzaHV0aWwuY29weShwYXRoX3RvX2ltYWdlLHNvbmdfYWxi" >> dr1p echo "dW0pDQogICAgb3MuY2hkaXIoc29uZ19hbGJ1bSkNCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjDQogICAgZXhwb3J0X3RpbWU9ZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoJyVt" >> dr1p echo "JWQlWS4lSCVNJVMnKQ0KICAgIGV4cG9ydF90aW1lWzo0XStleHBvcnRfdGltZVs2Ol0NCiAgICBl" >> dr1p echo "eHBvcnRfZGlyZWN0b3J5PWYiZHIxcF9fe3NvbmdfYWxidW19Ig0KICAgIHRyeToNCiAgICAgICAg" >> dr1p echo "c2h1dGlsLnJtdHJlZShleHBvcnRfZGlyZWN0b3J5KQ0KICAgIGV4Y2VwdDoNCiAgICAgICAgcGFz" >> dr1p echo "cw0KICAgIG9zLm1rZGlyKGV4cG9ydF9kaXJlY3RvcnkpDQogICAgcHJpbnQoZiJcblx4MWJbOTBt" >> dr1p echo "WyBceDFiWzMxbWV4cG9ydCBkaXJlY3RvcnlceDFiWzkwbTogXHgxYls5MW17ZXhwb3J0X2RpcmVj" >> dr1p echo "dG9yeX0gXHgxYls5MG1dIikNCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "DQogICAgZmlsZWxpc3Q9Z2xvYignKi5tcDMnKQ0KICAgIHRyYWNrX2NvdW50PWxlbihmaWxlbGlz" >> dr1p echo "dCkNCiAgICBwcmludChmIlx4MWJbOTBtWyBceDFiWzkxbXt0cmFja19jb3VudH0gXHgxYlszMW1z" >> dr1p echo "b25ncyBkaXNjb3ZlcmVkIFx4MWJbOTBtXSIpDQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIw0KICAgIHBsYXlsaXN0PSJfcGxheWxpc3QubTN1Ig0KICAgIHBsYXlsaXN0X3Bh" >> dr1p echo "dGgyZmlsZT1mJ3tleHBvcnRfZGlyZWN0b3J5fS97cGxheWxpc3R9Jw0KICAgIGY9b3BlbihwbGF5" >> dr1p echo "bGlzdF9wYXRoMmZpbGUsJ3cnKQ0KICAgIGYud3JpdGUoIiNFWFRNM1VcbiIpDQogICAgZi5jbG9z" >> dr1p echo "ZSgpDQogICAgcHJpbnQoZiJceDFiWzkwbVsgXHgxYlszMW1wbGF5bGlzdCBjcmVhdGVkXHgxYls5" >> dr1p echo "MG06IFx4MWJbOTFte3BsYXlsaXN0fSBceDFiWzkwbV1ceDFiWzBtXG4iKQ0KICAgICMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICB0cnk6DQogICAgICAgIGZvciB0cmFja19p" >> dr1p echo "bmRleCx0aGVtcDMgaW4gZW51bWVyYXRlKGZpbGVsaXN0KToNCiAgICAgICAgICAgICMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICB0cmFja19wYWQ9bGVuKHN0cih0cmFja19j" >> dr1p echo "b3VudCkpDQogICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAg" >> dr1p echo "ICAgcHJpbnQoZiJceDFiWzkwbVsgXHgxYlszMW1wcm9jZXNzaW5nIHNvbmcgXHgxYls5MW17c3Ry" >> dr1p echo "KHRyYWNrX2luZGV4KzEpLnpmaWxsKHRyYWNrX3BhZCl9IFx4MWJbOTBtLyBceDFiWzkxbXtzdHIo" >> dr1p echo "dHJhY2tfY291bnQpLnpmaWxsKHRyYWNrX3BhZCl9IFx4MWJbOTBtXVx4MWJbMG0iKQ0KICAgICAg" >> dr1p echo "ICAgICAgcHJpbnQoZiJceDFiWzkwbVx0ZmlsZW5hbWU6IHt0aGVtcDN9XHgxYlswbSIpDQogICAg" >> dr1p echo "ICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgc2h1dGlsLmNv" >> dr1p echo "cHkodGhlbXAzLGYne2V4cG9ydF9kaXJlY3Rvcnl9JykNCiAgICAgICAgICAgIHNvbmc9ZXllZDMu" >> dr1p echo "bG9hZChmJ3tleHBvcnRfZGlyZWN0b3J5fS97dGhlbXAzfScpDQogICAgICAgICAgICAjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgaWYgbm90IHNvbmcudGFnOg0KICAgICAg" >> dr1p echo "ICAgICAgICAgIHNvbmcuaW5pdFRhZygpDQogICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIw0KICAgICAgICAgICAgc29uZ19maWxlbmFtZT10aGVtcDMNCiAgICAgICAgICAgIHNv" >> dr1p echo "bmdfZXh0ZW5zaW9uPXNvbmdfZmlsZW5hbWVbLTM6XQ0KICAgICAgICAgICAgIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgIGlmIHNvbmdfZmlsZW5hbWUuZmluZCgnUFJFTUlF" >> dr1p echo "UkUgLSAnKT4tMToNCiAgICAgICAgICAgICAgICBzb25nX2ZpbGVuYW1lPXNvbmdfZmlsZW5hbWUu" >> dr1p echo "cmVwbGFjZSgnUFJFTUlFUkUgLSAnLCcnKQ0KICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMNCiAgICAgICAgICAgIGlmIHNvbmdfZmlsZW5hbWUuZmluZCgnUFJFTUlFUkUgXyAn" >> dr1p echo "KT4tMToNCiAgICAgICAgICAgICAgICBzb25nX2ZpbGVuYW1lPXNvbmdfZmlsZW5hbWUucmVwbGFj" >> dr1p echo "ZSgnUFJFTUlFUkUgXyAnLCcnKQ0KICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMgPDw8IFlPVVRVQkUgPDw8IFlPVVRVQkUNCiAgICAgICAgICAgIGlmIHNvbmdfZmlsZW5hbWUu" >> dr1p echo "c3RhcnRzd2l0aCgneW91dHViZV8nKToNCiAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjDQogICAgICAgICAgICAgICAgc29uZ192aWRlb2lkPXNvbmdfZmlsZW5hbWVbLTE1Oi00" >> dr1p echo "XQ0KICAgICAgICAgICAgICAgIHNvbmdfYXJ0aXN0PXNvbmdfZmlsZW5hbWVbOi0xNl0uc3BsaXQo" >> dr1p echo "JyAtICcpWzBdLnN0cmlwKClbbGVuKCd5b3V0dWJlXycpOl0NCiAgICAgICAgICAgICAgICAjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgdHJ5Og0KICAgICAgICAgICAgICAg" >> dr1p echo "ICAgICBzb25nX3RpdGxlPXNvbmdfZmlsZW5hbWVbOi0xNl0uc3BsaXQoJyAtICcpWzFdLnN0cmlw" >> dr1p echo "KCkNCiAgICAgICAgICAgICAgICBleGNlcHQ6DQogICAgICAgICAgICAgICAgICAgIHNvbmdfdGl0" >> dr1p echo "bGU9JycNCiAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAg" >> dr1p echo "ICAgICAgdXJsPWYiaHR0cDovL3lvdXR1LmJlL3tzb25nX3ZpZGVvaWR9Ig0KICAgICAgICAgICAg" >> dr1p echo "ICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIDw8PCBCQU5EQ0FNUCA8PDwgQkFORENBTVANCiAgICAgICAgICAgIGlmIHNvbmdf" >> dr1p echo "ZmlsZW5hbWUuc3RhcnRzd2l0aCgnYmFuZGNhbXBfJyk6DQogICAgICAgICAgICAgICAgIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgIHNvbmdfdmlkZW9pZD1zb25nX2ZpbGVu" >> dr1p echo "YW1lLnNwbGl0KCctJylbLTFdWzotNF0NCiAgICAgICAgICAgICAgICBidWZmZXI9c29uZ19maWxl" >> dr1p echo "bmFtZS5yZXBsYWNlKCItIitzb25nX2ZpbGVuYW1lLnNwbGl0KCctJylbLTFdLCcnKVtsZW4oJ2Jh" >> dr1p echo "bmRjYW1wXycpOl0uc3BsaXQoJyAtICcpDQogICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIw0KICAgICAgICAgICAgICAgIGlmIGxlbihidWZmZXIpPT0zOg0KICAgICAgICAgICAg" >> dr1p echo "ICAgICAgICBpZiBidWZmZXJbMF0gPT0gYnVmZmVyWzFdOg0KICAgICAgICAgICAgICAgICAgICAg" >> dr1p echo "ICAgc29uZ19hcnRpc3Q9YnVmZmVyWzFdDQogICAgICAgICAgICAgICAgICAgICAgICBzb25nX3Rp" >> dr1p echo "dGxlPWJ1ZmZlclsyXQ0KICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAg" >> dr1p echo "ICAgICAgICAgICAgICBpZiBsZW4oYnVmZmVyKT09MjoNCiAgICAgICAgICAgICAgICAgICAgc29u" >> dr1p echo "Z19hcnRpc3Q9YnVmZmVyWzBdDQogICAgICAgICAgICAgICAgICAgIHNvbmdfdGl0bGU9YnVmZmVy" >> dr1p echo "WzFdDQogICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAg" >> dr1p echo "ICAgIHVybD1mImh0dHBzOi8vYmFuZGNhbXAuY29tL0VtYmVkZGVkUGxheWVyL3Y9Mi90cmFjaz17" >> dr1p echo "c29uZ192aWRlb2lkfSINCiAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQog" >> dr1p echo "ICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyA8PDwgU09VTkRDTE9VRCA8PDwg" >> dr1p echo "U09VTkRDTE9VRA0KICAgICAgICAgICAgaWYgc29uZ19maWxlbmFtZS5zdGFydHN3aXRoKCdzb3Vu" >> dr1p echo "ZGNsb3VkXycpOg0KICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAg" >> dr1p echo "ICAgICAgICAgICBzb25nX3ZpZGVvaWQ9c29uZ19maWxlbmFtZS5zcGxpdCgnLScpWy0xXVs6LTRd" >> dr1p echo "DQogICAgICAgICAgICAgICAgYnVmZmVyPXNvbmdfZmlsZW5hbWVbbGVuKCdzb3VuZGNsb3VkXycp" >> dr1p echo "Oi1sZW4oc29uZ19maWxlbmFtZS5zcGxpdCgnLScpWy0xXSktMV0NCiAgICAgICAgICAgICAgICB1" >> dr1p echo "bmNsb3NlZF9jb3VudD0wDQogICAgICAgICAgICAgICAgaWYgYnVmZmVyLmZpbmQoJygnKT4tMTog" >> dr1p echo "dW5jbG9zZWRfY291bnQrPTENCiAgICAgICAgICAgICAgICBpZiBidWZmZXIuZmluZCgnKScpPi0x" >> dr1p echo "OiB1bmNsb3NlZF9jb3VudCs9MQ0KICAgICAgICAgICAgICAgIGlmIHVuY2xvc2VkX2NvdW50PT0x" >> dr1p echo "OiBidWZmZXI9YnVmZmVyLnJlcGxhY2UoJygnLCcgLSAnKS5yZXBsYWNlKCcpJywnIC0gJykNCiAg" >> dr1p echo "ICAgICAgICAgICAgICBpZiAodW5jbG9zZWRfY291bnQgJSAyKSA9PSAwOg0KICAgICAgICAgICAg" >> dr1p echo "ICAgICAgICBidWZmZXI9c29uZ19maWxlbmFtZVs6LWxlbihzb25nX3ZpZGVvaWQpLWxlbihzb25n" >> dr1p echo "X2V4dGVuc2lvbiktbGVuKCcuJyktbGVuKCctJyldLnJlcGxhY2UoJyggJywnJykucmVwbGFjZSgn" >> dr1p echo "ICknLCcnKS5sb3dlcigpLnJlcGxhY2UoJ3NvdW5kY2xvdWRfJywnJykuc3BsaXQoJy0nKQ0KICAg" >> dr1p echo "ICAgICAgICAgICAgICAgICBidWZmZXINCiAgICAgICAgICAgICAgICBpZiBsZW4oYnVmZmVyKT09" >> dr1p echo "MzoNCiAgICAgICAgICAgICAgICAgICAgaWYgYnVmZmVyWzBdPT1idWZmZXJbMV06DQogICAgICAg" >> dr1p echo "ICAgICAgICAgICAgICAgICBzb25nX2FydGlzdD1idWZmZXJbMV0uc3RyaXAoKQ0KICAgICAgICAg" >> dr1p echo "ICAgICAgICAgICAgICAgc29uZ190aXRsZT1idWZmZXJbMl0uc3RyaXAoKQ0KICAgICAgICAgICAg" >> dr1p echo "ICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgICAgICAgICAgc29uZ19hcnRpc3Q9YnVmZmVy" >> dr1p echo "WzBdLnN0cmlwKCkrYnVmZmVyWzFdLnN0cmlwKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHNv" >> dr1p echo "bmdfdGl0bGU9YnVmZmVyWzJdLnN0cmlwKCkNCiAgICAgICAgICAgICAgICBlbGlmIGxlbihidWZm" >> dr1p echo "ZXIpPT0yOg0KICAgICAgICAgICAgICAgICAgICBzb25nX2FydGlzdD1idWZmZXJbMF0uc3RyaXAo" >> dr1p echo "KQ0KICAgICAgICAgICAgICAgICAgICBzb25nX3RpdGxlPWJ1ZmZlclsxXS5zdHJpcCgpDQogICAg" >> dr1p echo "ICAgICAgICAgICAgZWxpZiBsZW4oYnVmZmVyKT49NDoNCiAgICAgICAgICAgICAgICAgICAgdHJ5" >> dr1p echo "Og0KICAgICAgICAgICAgICAgICAgICAgICAgc29uZ19hcnRpc3Q9YnVmZmVyLnNwbGl0KCctJylb" >> dr1p echo "MF0uc3RyaXAoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgc29uZ190aXRsZT1idWZmZXIuc3Bs" >> dr1p echo "aXQoJy0nKVsxXS5zdHJpcCgpLnJlcGxhY2UoJ18nLCcuJykNCiAgICAgICAgICAgICAgICAgICAg" >> dr1p echo "ICAgIHNvbmdfdGl0bGUrPSJfXyIrJycuam9pbihidWZmZXIuc3BsaXQoJy0nKVsyOl0pLnN0cmlw" >> dr1p echo "KCkucmVwbGFjZSgnICcsJy4nKQ0KICAgICAgICAgICAgICAgICAgICBleGNlcHQ6DQogICAgICAg" >> dr1p echo "ICAgICAgICAgICAgICAgICBzb25nX2FydGlzdD1idWZmZXJbMF0uc3BsaXQoJy0nKVswXS5zdHJp" >> dr1p echo "cCgpDQogICAgICAgICAgICAgICAgICAgICAgICBzb25nX3RpdGxlPWJ1ZmZlclsxXS5zcGxpdCgi" >> dr1p echo "LSIpWzBdLnN0cmlwKCkucmVwbGFjZSgiXyIsICIuIikucmVwbGFjZSgiWyIsIi4iKS5yZXBsYWNl" >> dr1p echo "KCJdIiwiLiIpDQogICAgICAgICAgICAgICAgICAgICAgICBzb25nX3RpdGxlKz1zdHIoIl9fIiAr" >> dr1p echo "ICIiLmpvaW4oYnVmZmVyWzI6XSkpLnN0cmlwKCkucmVwbGFjZSgiICIsICIuIikNCiAgICAgICAg" >> dr1p echo "ICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgaWYgc29uZ19h" >> dr1p echo "cnRpc3QuZmluZCgnZnJlZSBkbCcpID4gLTE6DQogICAgICAgICAgICAgICAgICAgIHNvbmdfYXJ0" >> dr1p echo "aXN0PXNvbmdfYXJ0aXN0LnJlcGxhY2UoJ2ZyZWUgZGwnLCcnKQ0KICAgICAgICAgICAgICAgIGlm" >> dr1p echo "IHNvbmdfdGl0bGUuZmluZCgnZnJlZSBkbCcpID4gLTE6DQogICAgICAgICAgICAgICAgICAgIHNv" >> dr1p echo "bmdfdGl0bGU9c29uZ190aXRsZS5yZXBsYWNlKCdmcmVlIGRsJywnJykNCiAgICAgICAgICAgICAg" >> dr1p echo "ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgdXJsPWYiaHR0cHM6Ly93" >> dr1p echo "LnNvdW5kY2xvdWQuY29tL3BsYXllci8/dXJsPWh0dHBzOi8vYXBpLnNvdW5kY2xvdWQuY29tL3Ry" >> dr1p echo "YWNrcy97c29uZ192aWRlb2lkfSINCiAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjDQogICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAg" >> dr1p echo "aWYgc29uZ19hcnRpc3QuZmluZCgnWycpID4gLTE6DQogICAgICAgICAgICAgICAgIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgIHN4PXNvbmdfYXJ0aXN0LmZpbmQoJ1snKQ0K" >> dr1p echo "ICAgICAgICAgICAgICAgIHN5PXNvbmdfYXJ0aXN0LmZpbmQoJ10nKSsxDQogICAgICAgICAgICAg" >> dr1p echo "ICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgIGlmIGxlbihzb25nX2Fy" >> dr1p echo "dGlzdFtzeDpzeV0pID4gNToNCiAgICAgICAgICAgICAgICAgICAgc29uZ19hcnRpc3Q9c29uZ19h" >> dr1p echo "cnRpc3QucmVwbGFjZShzb25nX2FydGlzdFtzeDpzeV0sJycpLnN0cmlwKCkNCiAgICAgICAgICAg" >> dr1p echo "ICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIw0KICAgICAgICAgICAgaWYgc29uZ190aXRsZS5maW5kKCdbJykgPiAtMToNCiAg" >> dr1p echo "ICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAgICAgc3g9" >> dr1p echo "c29uZ190aXRsZS5maW5kKCdbJykNCiAgICAgICAgICAgICAgICBzeT1zb25nX3RpdGxlLmZpbmQo" >> dr1p echo "J10nKSsxDQogICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAg" >> dr1p echo "ICAgICAgIGlmIGxlbihzb25nX3RpdGxlW3N4OnN5XSkgPiA1Og0KICAgICAgICAgICAgICAgICAg" >> dr1p echo "ICBzb25nX3RpdGxlPXNvbmdfdGl0bGUucmVwbGFjZShzb25nX3RpdGxlW3N4OnN5XSwnJykuc3Ry" >> dr1p echo "aXAoKQ0KICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAg" >> dr1p echo "ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICBpZiBzb25nX2FydGlzdC5m" >> dr1p echo "aW5kKCcoJykgPiAtMToNCiAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQog" >> dr1p echo "ICAgICAgICAgICAgICAgc3g9c29uZ19hcnRpc3QuZmluZCgnKCcpDQogICAgICAgICAgICAgICAg" >> dr1p echo "c3k9c29uZ19hcnRpc3QuZmluZCgnKScpKzENCiAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjDQogICAgICAgICAgICAgICAgaWYgc29uZ19hcnRpc3Rbc3g6c3ldLmxvd2VyKCku" >> dr1p echo "ZmluZCgnb2ZmaWNpYWwnKSA+IC0xOg0KICAgICAgICAgICAgICAgICAgICBpZiBzb25nX2FydGlz" >> dr1p echo "dFtzeDpzeV0ubG93ZXIoKS5maW5kKCdhdWRpbycpID4gLTEgb3Igc29uZ19hcnRpc3Rbc3g6c3ld" >> dr1p echo "Lmxvd2VyKCkuZmluZCgndmlkZW8nKSA+IC0xOg0KICAgICAgICAgICAgICAgICAgICAgICAgc29u" >> dr1p echo "Z19hcnRpc3Q9c29uZ19hcnRpc3QucmVwbGFjZShzb25nX2FydGlzdFtzeDpzeV0sJycpLnN0cmlw" >> dr1p echo "KCkNCiAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAg" >> dr1p echo "ICAgaWYgc29uZ19hcnRpc3Rbc3g6c3ldLmxvd2VyKCkuZmluZCgnIycpID4gLTE6DQogICAgICAg" >> dr1p echo "ICAgICAgICAgICAgIHNvbmdfYXJ0aXN0PXNvbmdfYXJ0aXN0LnJlcGxhY2Uoc29uZ19hcnRpc3Rb" >> dr1p echo "c3g6c3ldLCcnKS5zdHJpcCgpDQogICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "Iw0KICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgIGlm" >> dr1p echo "IHNvbmdfdGl0bGUuZmluZCgnKCcpID4gLTE6DQogICAgICAgICAgICAgICAgIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIw0KICAgICAgICAgICAgICAgIHN4PXNvbmdfdGl0bGUuZmluZCgnKCcpDQogICAg" >> dr1p echo "ICAgICAgICAgICAgc3k9c29uZ190aXRsZS5maW5kKCcpJykrMQ0KICAgICAgICAgICAgICAgICMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAgICAgICAgICBpZiBzb25nX3RpdGxlW3N4OnN5" >> dr1p echo "XS5sb3dlcigpLmZpbmQoJ29mZmljaWFsJykgPiAtMToNCiAgICAgICAgICAgICAgICAgICAgaWYg" >> dr1p echo "c29uZ190aXRsZVtzeDpzeV0ubG93ZXIoKS5maW5kKCdhdWRpbycpID4gLTEgb3Igc29uZ190aXRs" >> dr1p echo "ZVtzeDpzeV0ubG93ZXIoKS5maW5kKCd2aWRlbycpID4gLTE6DQogICAgICAgICAgICAgICAgICAg" >> dr1p echo "ICAgICBzb25nX3RpdGxlPXNvbmdfdGl0bGUucmVwbGFjZShzb25nX3RpdGxlW3N4OnN5XSwnJyku" >> dr1p echo "c3RyaXAoKQ0KICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgICAg" >> dr1p echo "ICAgICAgICBpZiBzb25nX3RpdGxlW3N4OnN5XS5sb3dlcigpLmZpbmQoJyMnKSA+IC0xOg0KICAg" >> dr1p echo "ICAgICAgICAgICAgICAgICBzb25nX3RpdGxlPXNvbmdfdGl0bGUucmVwbGFjZShzb25nX3RpdGxl" >> dr1p echo "W3N4OnN5XSwnJykuc3RyaXAoKQ0KICAgICAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMNCiAgICAgICAgICAgICAgICBpZiBzb25nX3RpdGxlW3N4OnN5XS5sb3dlcigpLmZpbmQoJ2V4" >> dr1p echo "Y2x1c2l2ZScpID4gLTE6DQogICAgICAgICAgICAgICAgICAgIGlmIHNvbmdfdGl0bGVbc3g6c3ld" >> dr1p echo "Lmxvd2VyKCkuZmluZCgnYm9udXMnKSA+IC0xIG9yIHNvbmdfdGl0bGVbc3g6c3ldLmxvd2VyKCku" >> dr1p echo "ZmluZCgndmlkZW8nKSA+IC0xOg0KICAgICAgICAgICAgICAgICAgICAgICAgc29uZ190aXRsZT1z" >> dr1p echo "b25nX3RpdGxlLnJlcGxhY2Uoc29uZ190aXRsZVtzeDpzeV0sJycpLnN0cmlwKCkNCiAgICAgICAg" >> dr1p echo "ICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgICAgICAgICAjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgc29uZy50YWcuYXJ0aXN0PXNvbmdfYXJ0aXN0DQog" >> dr1p echo "ICAgICAgICAgICBzb25nLnRhZy5hbGJ1bT1zb25nX2FsYnVtDQogICAgICAgICAgICBzb25nLnRh" >> dr1p echo "Zy5nZW5yZT1zb25nX2dlbnJlDQogICAgICAgICAgICBzb25nLnRhZy50cmFja19udW09KHRyYWNr" >> dr1p echo "X2luZGV4KzEsdHJhY2tfY291bnQpDQogICAgICAgICAgICBzb25nLnRhZy5kaXNjX251bT0oMSwx" >> dr1p echo "KQ0KICAgICAgICAgICAgc29uZy50YWcudGl0bGU9c29uZ190aXRsZQ0KICAgICAgICAgICAgc29u" >> dr1p echo "Zy50YWcuY29tbWVudHMuc2V0KHUiLltkXS4gaXJjZC5jaGF0LzY2OTcjdGNwZGlyZWN0XG5cbnt9" >> dr1p echo "IHBsYXlsaXN0Ii5mb3JtYXQoc29uZ19hbGJ1bSkpDQogICAgICAgICAgICBzb25nLnRhZy51c2Vy" >> dr1p echo "X3VybF9mcmFtZXMuc2V0KGJ5dGVzKHVybC5lbmNvZGUoKSkpDQogICAgICAgICAgICBzb25nLnRh" >> dr1p echo "Zy5yZWNvcmRpbmdfZGF0ZT1kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVktJW0tJWQnKQ0KICAg" >> dr1p echo "ICAgICAgICAgc29uZy50YWcub3JpZ2luYWxfcmVsZWFzZV9kYXRlPWRhdGV0aW1lLm5vdygpLnN0" >> dr1p echo "cmZ0aW1lKCclWScpDQogICAgICAgICAgICBzb25nLnRhZy5wb3B1bGFyaXRpZXMuc2V0KGVtYWls" >> dr1p echo "PSJkQGFvbC5jb20iLHJhdGluZz01LHBsYXlfY291bnQ9MCkNCiAgICAgICAgICAgIHNvbmcudGFn" >> dr1p echo "LmltYWdlcy5zZXQoSW1hZ2VGcmFtZS5GUk9OVF9DT1ZFUiwgb3BlbihwYXRoX3RvX2ltYWdlLCdy" >> dr1p echo "YicpLnJlYWQoKSwgJ2ltYWdlL2pwZWcnKQ0KICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMNCiAgICAgICAgICAgIHNvbmcudGFnLnNhdmUodmVyc2lvbj1JRDNfVjJfNCkNCiAg" >> dr1p echo "ICAgICAgICAgIHNvbmcudGFnLnNhdmUodmVyc2lvbj1JRDNfVjJfMykNCiAgICAgICAgICAgIHNv" >> dr1p echo "bmcudGFnLnNhdmUodmVyc2lvbj1JRDNfVjFfMSkNCiAgICAgICAgICAgICMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjDQogICAgICAgICAgICBmaWxlcmVuYW1lZD1mJ3tzb25nX2FydGlzdH0nLmxv" >> dr1p echo "d2VyKCkucmVwbGFjZSgnICcsJy4nKQ0KICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMNCiAgICAgICAgICAgIGlmIHNvbmdfdGl0bGU6DQogICAgICAgICAgICAgICAgZmlsZXJl" >> dr1p echo "bmFtZWQrPSJfXyIrZiJ7c29uZ190aXRsZX0iLmxvd2VyKCkucmVwbGFjZSgnICcsJy4nKQ0KICAg" >> dr1p echo "ICAgICAgICAgZmlsZXJlbmFtZWQrPWYiLntzb25nX2V4dGVuc2lvbn0iDQogICAgICAgICAgICBm" >> dr1p echo "aWxlcmVuYW1lZD1maWxlcmVuYW1lZC5yZXBsYWNlKCcmJywnYW5kJykNCiAgICAgICAgICAgIGZp" >> dr1p echo "bGVyZW5hbWVkPWZpbGVyZW5hbWVkLnJlcGxhY2UoJy4oJywnX18nKQ0KICAgICAgICAgICAgZmls" >> dr1p echo "ZXJlbmFtZWQ9ZmlsZXJlbmFtZWQucmVwbGFjZSgnKS4nLCcuJykNCiAgICAgICAgICAgIGZpbGVy" >> dr1p echo "ZW5hbWVkPWZpbGVyZW5hbWVkLnJlcGxhY2UoJywuJywnLmFuZC4nKQ0KICAgICAgICAgICAgZmls" >> dr1p echo "ZXJlbmFtZWQ9ZmlsZXJlbmFtZWQucmVwbGFjZSgnLl8uJywnX18nKQ0KICAgICAgICAgICAgZmls" >> dr1p echo "ZXJlbmFtZWQ9ZmlsZXJlbmFtZWQucmVwbGFjZSgnwqknLCcnKQ0KICAgICAgICAgICAgZmlsZXJl" >> dr1p echo "bmFtZWQ9ZmlsZXJlbmFtZWQucmVwbGFjZSgiJyIsIiIpDQogICAgICAgICAgICBmaWxlcmVuYW1l" >> dr1p echo "ZD1maWxlcmVuYW1lZC5yZXBsYWNlKCciJywnJykNCiAgICAgICAgICAgIGZpbGVyZW5hbWVkPWVt" >> dr1p echo "b2ppX3BhdHRlcm4uc3ViKHInJywgZmlsZXJlbmFtZWQpDQogICAgICAgICAgICAjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgb3MucmVuYW1lKGYne2V4cG9ydF9kaXJlY3Rv" >> dr1p echo "cnl9L3t0aGVtcDN9JyxmJ3tleHBvcnRfZGlyZWN0b3J5fS97ZmlsZXJlbmFtZWR9JykNCiAgICAg" >> dr1p echo "ICAgICAgIHByaW50KGYnXHgxYls5MG1cdCByZW5hbWVkOiB7ZmlsZXJlbmFtZWR9XHgxYlswbScp" >> dr1p echo "DQogICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICAgICAgICAgc29u" >> dr1p echo "Z19sZW5ndGg9c29uZy5pbmZvLnRpbWVfc2Vjcw0KICAgICAgICAgICAgZHVyYXRpb25fbWluLGR1" >> dr1p echo "cmF0aW9uX3NlYz0iezouMmZ9Ii5mb3JtYXQoNTY1LjAzMi82MCkuc3BsaXQoJy4nKQ0KICAgICAg" >> dr1p echo "ICAgICAgcHJpbnQoZidceDFiWzkwbVx0ZHVyYXRpb246IHtkdXJhdGlvbl9taW59bXtkdXJhdGlv" >> dr1p echo "bl9zZWN9c1x4MWJbMG0nKQ0KICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMN" >> dr1p echo "CiAgICAgICAgICAgIGY9b3BlbihwbGF5bGlzdF9wYXRoMmZpbGUsJ2EnKQ0KICAgICAgICAgICAg" >> dr1p echo "YXJ0aXN0X3JlbmFtZWQ9c29uZ19hcnRpc3QubG93ZXIoKQ0KICAgICAgICAgICAgdGl0bGVfcmVu" >> dr1p echo "YW1lZD1zb25nX3RpdGxlLmxvd2VyKCkNCiAgICAgICAgICAgIGYud3JpdGUoZiIjRVhUSU5GOntp" >> dr1p echo "bnQoc29uZ19sZW5ndGgpfSx7YXJ0aXN0X3JlbmFtZWR9IC0ge3RpdGxlX3JlbmFtZWR9XG4iKQ0K" >> dr1p echo "ICAgICAgICAgICAgZi53cml0ZShmIntmaWxlcmVuYW1lZH1cbiIpDQogICAgICAgICAgICBmLmNs" >> dr1p echo "b3NlKCkNCiAgICAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToN" >> dr1p echo "CiAgICAgICAgcHJpbnQoZiJlcnJvcjoge2V9IikNCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjDQogICAgdHJ5Og0KICAgICAgICBmaWxlbGlzdD1nbG9iKCcqLm1wMycpDQog" >> dr1p echo "ICAgICAgIGZvciBfIGluIGZpbGVsaXN0OiBvcy5yZW1vdmUoXykNCiAgICBleGNlcHQ6DQogICAg" >> dr1p echo "ICAgIHBhc3MNCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgdHJ5" >> dr1p echo "Og0KICAgICAgICBsb2dzPVsnYmFuZGNhbXBfZG93bmxvYWRlZC5sb2cnLCdzb3VuZGNsb3VkX2Rv" >> dr1p echo "d25sb2FkZWQubG9nJywneW91dHViZV9kb3dubG9hZGVkLmxvZycsIFwNCiAgICAgICAgICAgICAg" >> dr1p echo "J2JhbmRjYW1wX3VybF9iYXRjaC5sb2cnLCdzb3VuZGNsb3VkX3VybF9iYXRjaC5sb2cnLCd5b3V0" >> dr1p echo "dWJlX3VybF9iYXRjaC5sb2cnXQ0KICAgICAgICBmaWxlbGlzdD1nbG9iKCcqLmxvZycpDQogICAg" >> dr1p echo "ICAgIGxvZ2ZpbGVzPVtdDQogICAgICAgIGZvciBfIGluIGZpbGVsaXN0Og0KICAgICAgICAgICAg" >> dr1p echo "Zj1vcGVuKF8sJ3InKQ0KICAgICAgICAgICAgbD1mLnJlYWQoKS5zcGxpdGxpbmVzKCkNCiAgICAg" >> dr1p echo "ICAgICAgIGYuY2xvc2UoKQ0KICAgICAgICAgICAgbG9nZmlsZXMuYXBwZW5kKFtfLGxdKQ0KICAg" >> dr1p echo "ICAgICAgICAgaWYgbm90IF8gaW4gbG9nczoNCiAgICAgICAgICAgICAgICBvcy5yZW1vdmUoXykN" >> dr1p echo "CiAgICBleGNlcHQ6DQogICAgICAgIHBhc3MNCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjDQogICAgdHJ5Og0KICAgICAgICBsb2drZXk9W10NCiAgICAgICAgZm9yIGksXyBp" >> dr1p echo "biBlbnVtZXJhdGUobG9nZmlsZXMpOg0KICAgICAgICAgICAgaWYgX1swXSA9PSAidXJsX2JhdGNo" >> dr1p echo "LmxvZyI6DQogICAgICAgICAgICAgICAgbG9na2V5LmFwcGVuZChpKQ0KICAgIGV4Y2VwdDoNCiAg" >> dr1p echo "ICAgICAgcGFzcw0KICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICB0" >> dr1p echo "cnk6DQogICAgICAgIGZvciBpLF8gaW4gZW51bWVyYXRlKGxvZ2ZpbGVzKToNCiAgICAgICAgICAg" >> dr1p echo "IGlmIF9bMF0gPT0gInlvdXR1YmVfdXJsX2JhdGNoLmxvZyI6DQogICAgICAgICAgICAgICAgbG9n" >> dr1p echo "a2V5LmFwcGVuZChpKQ0KICAgIGV4Y2VwdDoNCiAgICAgICAgcGFzcw0KICAgICMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICB0cnk6DQogICAgICAgIGZvciBpLF8gaW4gZW51" >> dr1p echo "bWVyYXRlKGxvZ2ZpbGVzKToNCiAgICAgICAgICAgIGlmIF9bMF0gPT0gInlvdXR1YmVfZG93bmxv" >> dr1p echo "YWRlZC5sb2ciOg0KICAgICAgICAgICAgICAgIGxvZ2tleS5hcHBlbmQoaSkNCiAgICBleGNlcHQ6" >> dr1p echo "DQogICAgICAgIHBhc3MNCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQog" >> dr1p echo "ICAgdHJ5Og0KICAgICAgICBmb3IgaSxfIGluIGVudW1lcmF0ZShsb2dmaWxlcyk6DQogICAgICAg" >> dr1p echo "ICAgICBpZiBfWzBdID09ICJzb3VuZGNsb3VkX3VybF9iYXRjaC5sb2ciOg0KICAgICAgICAgICAg" >> dr1p echo "ICAgIGxvZ2tleS5hcHBlbmQoaSkNCiAgICBleGNlcHQ6DQogICAgICAgIHBhc3MNCiAgICAjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgdHJ5Og0KICAgICAgICBmb3IgaSxf" >> dr1p echo "IGluIGVudW1lcmF0ZShsb2dmaWxlcyk6DQogICAgICAgICAgICBpZiBfWzBdID09ICJzb3VuZGNs" >> dr1p echo "b3VkX2Rvd25sb2FkZWQubG9nIjoNCiAgICAgICAgICAgICAgICBsb2drZXkuYXBwZW5kKGkpDQog" >> dr1p echo "ICAgZXhjZXB0Og0KICAgICAgICBwYXNzDQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIw0KICAgIHRyeToNCiAgICAgICAgZm9yIGksXyBpbiBlbnVtZXJhdGUobG9nZmlsZXMp" >> dr1p echo "Og0KICAgICAgICAgICAgaWYgX1swXSA9PSAiYmFuZGNhbXBfdXJsX2JhdGNoLmxvZyI6DQogICAg" >> dr1p echo "ICAgICAgICAgICAgbG9na2V5LmFwcGVuZChpKQ0KICAgIGV4Y2VwdDoNCiAgICAgICAgcGFzcw0K" >> dr1p echo "ICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICB0cnk6DQogICAgICAg" >> dr1p echo "IGZvciBpLF8gaW4gZW51bWVyYXRlKGxvZ2ZpbGVzKToNCiAgICAgICAgICAgIGlmIF9bMF0gPT0g" >> dr1p echo "ImJhbmRjYW1wX2Rvd25sb2FkZWQubG9nIjoNCiAgICAgICAgICAgICAgICBsb2drZXkuYXBwZW5k" >> dr1p echo "KGkpDQogICAgZXhjZXB0Og0KICAgICAgICBwYXNzDQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIw0KICAgIGxvZ2NtcD1bXTsgbG9nY2xyPVtdOyBwcmludCgnJykNCiAgICAj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgZm9yIGQsXyBpbiBlbnVtZXJh" >> dr1p echo "dGUobG9na2V5KToNCiAgICAgICAgb2Zmc2V0PWxlbihmIntzdHIoXykuemZpbGwoMil9L3tzdHIo" >> dr1p echo "bGVuKGxvZ2ZpbGVzKS0xKS56ZmlsbCgyKX0ge2xvZ2ZpbGVzW19dWzBdfSBpRHIxcCIpDQogICAg" >> dr1p echo "ICAgIGxvZ2Nsci5hcHBlbmQoIlx4MWJbOTBtIikNCiAgICAgICAgbG9nY2xyLmFwcGVuZCgiXHgx" >> dr1p echo "Yls5MG0iKQ0KICAgICAgICBsb2djbXAuYXBwZW5kKGYiLlNPRi4geycjJyppbnQoMTAwLW9mZnNl" >> dr1p echo "dCl9IHtsb2dmaWxlc1tfXVswXX0ge3N0cihkKzEpLnpmaWxsKDIpfS97c3RyKGxlbihsb2dmaWxl" >> dr1p echo "cykpLnpmaWxsKDIpfSIpDQogICAgICAgIGxvZ2NtcC5hcHBlbmQoIiIpDQogICAgICAgIGZvciBf" >> dr1p echo "XyBpbiByYW5nZShsZW4obG9nZmlsZXNbX11bMV0pKToNCiAgICAgICAgICAgIGxvZ2Nsci5hcHBl" >> dr1p echo "bmQoIlx4MWJbMzFtIikNCiAgICAgICAgICAgIGxvZ2NtcC5hcHBlbmQoIGYie3N0cihfXysxKS56" >> dr1p echo "ZmlsbCgyKX0ve3N0cihsZW4obG9nZmlsZXNbX11bMV0pKS56ZmlsbCgyKX0ge2xvZ2ZpbGVzW19d" >> dr1p echo "WzFdW19fXX0iICkNCiAgICAgICAgbG9nY2xyLmFwcGVuZCgiXHgxYls5MG0iKQ0KICAgICAgICBs" >> dr1p echo "b2djbHIuYXBwZW5kKCJceDFiWzkwbSIpDQogICAgICAgIGxvZ2Nsci5hcHBlbmQoIlx4MWJbOTBt" >> dr1p echo "IikNCiAgICAgICAgbG9nY21wLmFwcGVuZCgiIikNCiAgICAgICAgbG9nY21wLmFwcGVuZChmIntz" >> dr1p echo "dHIoZCsxKS56ZmlsbCgyKX0ve3N0cihsZW4obG9nZmlsZXMpKS56ZmlsbCgyKX0ge2xvZ2ZpbGVz" >> dr1p echo "W19dWzBdfSB7JyMnKmludCgxMDAtb2Zmc2V0KX0gLkVPRi4iKQ0KICAgICAgICBsb2djbXAuYXBw" >> dr1p echo "ZW5kKCIiKQ0KICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICBmPW9w" >> dr1p echo "ZW4oZid7ZXhwb3J0X2RpcmVjdG9yeX0vX3Byb2Nlc3NlZF9iYXRjaC5sb2cnLCd3JykNCiAgICBm" >> dr1p echo "b3IgaSxfIGluIGVudW1lcmF0ZShsb2djbXApOg0KICAgICAgICBwcmludChmIntsb2djbHJbaV19" >> dr1p echo "e199IikNCiAgICAgICAgZi53cml0ZShmJ3tffVxuJykNCiAgICBmLmNsb3NlKCkNCiAgICAjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgcHJpbnQoJ2ZpbmlzaGVkJykNCiMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj" >> dr1p echo "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRU9GDQo=" >> dr1p ##################################################################################################################### base64 -d <<< cat dr1p > dp3.py && python3 dp3.py "$PLAYLIST_NAME" "$PLAYLIST_GENRE" "$PLAYLIST_ARTWORK" ############ ##################################################################################################################### cp "$PLAYLIST_ARTWORK" "$PLAYLIST_NAME/$PREFIX$PLAYLIST_NAME/_folder.png" && rm "dr1p" && rm "dp3.py" ############### ##################################################################################################################### cd "$PLAYLIST_NAME" && ls *.log|grep -v processed|xargs -I {} mv {} "$PREFIX$PLAYLIST_NAME/"___{} && cd .. ######### ##################################################################################################################### mv "$PLAYLIST_NAME/$PREFIX$PLAYLIST_NAME" "." && rm -Rf "$PLAYLIST_NAME" ############################################ ##################################################################################################################### echo -e "\n\033[0;31m[\033[0m DIRECTORY LISTING \033[0;31m]\n"; ls -al "$PREFIX$PLAYLIST_NAME" ###################### ##################################################################################################################### echo -e "\n\033[0;31m[\033[0m PLAYLIST CREATED \033[0;31m]\n"; cat "$PREFIX$PLAYLIST_NAME/_playlist.m3u" ############ ##################################################################################################################### echo "$PLAYLIST_URL" >> "$PREFIX$PLAYLIST_NAME/_processed_batch.log" ################################################ ##################################################################################################################### mv "$PREFIX$PLAYLIST_NAME/_processed_batch.log" "$PREFIX$PLAYLIST_NAME/__processed_batch.log" ####################### ##################################################################################################################### echo -e "\n\033[0;31m[\033[0m ARCHIVING PLAYLIST \033[0;31m]\n" ##################################################### ##################################################################################################################### tar cvfz "dr1p__$PLAYLIST_NAME.tar.gz" "$PREFIX$PLAYLIST_NAME" ###################################################### ##################################################################################################################### echo -e "\n\033[0;31m[\033[0m FILENAME OF PLAYLIST ARCHIVE \033[0;31m]\n" ########################################### ##################################################################################################################### ls -al "$PREFIX$PLAYLIST_NAME.tar.gz" ############################################################################### ##################################################################################################################### echo -e "\n\033[0;31m[\033[0m OPERATION COMPLETE \033[0;31m]" ####################################################### ################################################################################################# VERSION 2.1 ### EOF