From b3b2e6ed51a4dd9168888ca747ecd31f36b55665 Mon Sep 17 00:00:00 2001 From: Shabinder Date: Tue, 10 Nov 2020 14:13:41 +0530 Subject: [PATCH] Set Up base TrackListFragmentBaseClass and TrackListViewModelBase --- .idea/dictionaries/shabinder.xml | 1 + app/build.gradle | 3 +- .../com/shabinder/spotiflyer/MainActivity.kt | 6 +- .../recyclerView/TrackListAdapter.kt | 2 +- .../downloadrecord/DownloadRecordFragment.kt | 4 +- .../spotiflyer/ui/gaana/GaanaFragment.kt | 32 ++-- .../spotiflyer/ui/gaana/GaanaViewModel.kt | 4 +- .../ui/mainfragment/MainFragment.kt | 3 +- .../spotiflyer/ui/spotify/SpotifyFragment.kt | 33 ++-- .../spotiflyer/ui/spotify/SpotifyViewModel.kt | 5 +- .../spotiflyer/ui/youtube/YoutubeFragment.kt | 30 ++-- .../spotiflyer/ui/youtube/YoutubeViewModel.kt | 4 +- .../{BaseFragment.kt => TrackListFragment.kt} | 47 +++--- ...BaseViewModel.kt => TrackListViewModel.kt} | 2 +- app/src/main/res/drawable/gradient.xml | 3 +- app/src/main/res/font/nunito_sans.ttf | Bin 0 -> 95760 bytes app/src/main/res/font/nunito_sans_light.ttf | Bin 0 -> 94092 bytes .../res/layout/download_record_fragment.xml | 15 +- .../main/res/layout/download_record_item.xml | 146 ++++++++-------- app/src/main/res/layout/main_activity.xml | 61 ++++--- app/src/main/res/layout/main_fragment.xml | 124 +++++--------- .../main/res/layout/track_list_fragment.xml | 10 +- app/src/main/res/layout/track_list_item.xml | 157 ++++++++---------- app/src/main/res/values/colors.xml | 6 +- app/src/main/res/values/styles.xml | 53 +++++- 25 files changed, 365 insertions(+), 386 deletions(-) rename app/src/main/java/com/shabinder/spotiflyer/utils/{BaseFragment.kt => TrackListFragment.kt} (72%) rename app/src/main/java/com/shabinder/spotiflyer/utils/{BaseViewModel.kt => TrackListViewModel.kt} (97%) create mode 100644 app/src/main/res/font/nunito_sans.ttf create mode 100644 app/src/main/res/font/nunito_sans_light.ttf diff --git a/.idea/dictionaries/shabinder.xml b/.idea/dictionaries/shabinder.xml index b91cbc33..82062cc1 100755 --- a/.idea/dictionaries/shabinder.xml +++ b/.idea/dictionaries/shabinder.xml @@ -16,6 +16,7 @@ instagram jetbrains kotlinx + linkedin mainfragment maxresdefault moshi diff --git a/app/build.gradle b/app/build.gradle index 96594a07..7efce010 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,7 +28,8 @@ android { buildToolsVersion "30.0.2" buildFeatures{ - dataBinding = true + //dataBinding = true + viewBinding = true } defaultConfig { diff --git a/app/src/main/java/com/shabinder/spotiflyer/MainActivity.kt b/app/src/main/java/com/shabinder/spotiflyer/MainActivity.kt index 9ffe9cfc..3b32e10c 100755 --- a/app/src/main/java/com/shabinder/spotiflyer/MainActivity.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/MainActivity.kt @@ -30,7 +30,6 @@ import android.util.Log import android.view.View import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate -import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider import androidx.navigation.NavController import androidx.navigation.findNavController @@ -69,12 +68,13 @@ class MainActivity : AppCompatActivity(){ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + //Enabling Dark Mode AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) - binding = DataBindingUtil.setContentView(this, R.layout.main_activity) + binding = MainActivityBinding.inflate(layoutInflater) + setContentView(binding.root) sharedViewModel = ViewModelProvider(this).get(SharedViewModel::class.java) navController = findNavController(R.id.navHostFragment) snackBarAnchor = binding.snackBarPosition - //Enabling Dark Mode authenticateSpotify() diff --git a/app/src/main/java/com/shabinder/spotiflyer/recyclerView/TrackListAdapter.kt b/app/src/main/java/com/shabinder/spotiflyer/recyclerView/TrackListAdapter.kt index 00695c58..a2f4905f 100755 --- a/app/src/main/java/com/shabinder/spotiflyer/recyclerView/TrackListAdapter.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/recyclerView/TrackListAdapter.kt @@ -33,7 +33,7 @@ import com.shabinder.spotiflyer.models.spotify.Source import com.shabinder.spotiflyer.utils.* import kotlinx.coroutines.launch -class TrackListAdapter(private val viewModel :BaseViewModel): ListAdapter(TrackDiffCallback()) { +class TrackListAdapter(private val viewModel :TrackListViewModel): ListAdapter(TrackDiffCallback()) { var source:Source =Source.Spotify diff --git a/app/src/main/java/com/shabinder/spotiflyer/ui/downloadrecord/DownloadRecordFragment.kt b/app/src/main/java/com/shabinder/spotiflyer/ui/downloadrecord/DownloadRecordFragment.kt index 03ac9fdb..b48311e9 100755 --- a/app/src/main/java/com/shabinder/spotiflyer/ui/downloadrecord/DownloadRecordFragment.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/ui/downloadrecord/DownloadRecordFragment.kt @@ -21,11 +21,9 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import com.google.android.material.tabs.TabLayout -import com.shabinder.spotiflyer.R import com.shabinder.spotiflyer.databinding.DownloadRecordFragmentBinding import com.shabinder.spotiflyer.models.spotify.Source import com.shabinder.spotiflyer.recyclerView.DownloadRecordAdapter @@ -42,7 +40,7 @@ class DownloadRecordFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - binding = DataBindingUtil.inflate(inflater,R.layout.download_record_fragment,container,false) + binding = DownloadRecordFragmentBinding.inflate(inflater,container,false) downloadRecordViewModel = ViewModelProvider(this).get(DownloadRecordViewModel::class.java) adapter = DownloadRecordAdapter() binding.downloadRecordList.adapter = adapter diff --git a/app/src/main/java/com/shabinder/spotiflyer/ui/gaana/GaanaFragment.kt b/app/src/main/java/com/shabinder/spotiflyer/ui/gaana/GaanaFragment.kt index b407c4f9..330e741a 100644 --- a/app/src/main/java/com/shabinder/spotiflyer/ui/gaana/GaanaFragment.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/ui/gaana/GaanaFragment.kt @@ -23,24 +23,30 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.lifecycle.ViewModelProvider +import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.SimpleItemAnimator import com.shabinder.spotiflyer.SharedViewModel import com.shabinder.spotiflyer.downloadHelper.DownloadHelper import com.shabinder.spotiflyer.models.DownloadStatus import com.shabinder.spotiflyer.models.spotify.Source +import com.shabinder.spotiflyer.networking.GaanaInterface +import com.shabinder.spotiflyer.networking.YoutubeMusicApi import com.shabinder.spotiflyer.recyclerView.TrackListAdapter import com.shabinder.spotiflyer.utils.* +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import javax.inject.Inject -class GaanaFragment : BaseFragment() { +@AndroidEntryPoint +class GaanaFragment : TrackListFragment() { - override lateinit var baseViewModel: BaseViewModel + @Inject lateinit var youtubeMusicApi: YoutubeMusicApi + @Inject lateinit var gaanaInterface: GaanaInterface + override lateinit var viewModel: GaanaViewModel override lateinit var adapter: TrackListAdapter override var source: Source = Source.Gaana - private val viewModel:GaanaViewModel - get() = baseViewModel as GaanaViewModel - + override val args: GaanaFragmentArgs by navArgs() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -75,16 +81,16 @@ class GaanaFragment : BaseFragment() { binding.downloadingFab.visibility = View.VISIBLE rotateAnim(binding.downloadingFab) - for (track in baseViewModel.trackList.value!!){ + for (track in viewModel.trackList.value!!){ if(track.downloaded != DownloadStatus.Downloaded){ track.downloaded = DownloadStatus.Downloading - adapter.notifyItemChanged(baseViewModel.trackList.value!!.indexOf(track)) + adapter.notifyItemChanged(viewModel.trackList.value!!.indexOf(track)) } } showMessage("Processing!") sharedViewModel.uiScope.launch(Dispatchers.Default){ val urlList = arrayListOf() - baseViewModel.trackList.value?.forEach { urlList.add(it.albumArtURL) } + viewModel.trackList.value?.forEach { urlList.add(it.albumArtURL) } //Appending Source urlList.add("gaana") loadAllImages( @@ -92,12 +98,12 @@ class GaanaFragment : BaseFragment() { urlList ) } - baseViewModel.uiScope.launch { - val finalList = baseViewModel.trackList.value + viewModel.uiScope.launch { + val finalList = viewModel.trackList.value if(finalList.isNullOrEmpty())showMessage("Not Downloading Any Song") DownloadHelper.downloadAllTracks( - baseViewModel.folderType, - baseViewModel.subFolder, + viewModel.folderType, + viewModel.subFolder, finalList ?: listOf(), ) } @@ -112,7 +118,7 @@ class GaanaFragment : BaseFragment() { **/ private fun initializeAll() { sharedViewModel = ViewModelProvider(this.requireActivity()).get(SharedViewModel::class.java) - baseViewModel = ViewModelProvider(this).get(GaanaViewModel::class.java) + viewModel = ViewModelProvider(this).get(GaanaViewModel::class.java) viewModel.gaanaInterface = gaanaInterface adapter = TrackListAdapter(viewModel) DownloadHelper.youtubeMusicApi = youtubeMusicApi diff --git a/app/src/main/java/com/shabinder/spotiflyer/ui/gaana/GaanaViewModel.kt b/app/src/main/java/com/shabinder/spotiflyer/ui/gaana/GaanaViewModel.kt index a7717422..6e81a679 100644 --- a/app/src/main/java/com/shabinder/spotiflyer/ui/gaana/GaanaViewModel.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/ui/gaana/GaanaViewModel.kt @@ -27,15 +27,15 @@ import com.shabinder.spotiflyer.models.TrackDetails import com.shabinder.spotiflyer.models.gaana.* import com.shabinder.spotiflyer.models.spotify.Source import com.shabinder.spotiflyer.networking.GaanaInterface -import com.shabinder.spotiflyer.utils.BaseViewModel import com.shabinder.spotiflyer.utils.Provider +import com.shabinder.spotiflyer.utils.TrackListViewModel import com.shabinder.spotiflyer.utils.finalOutputDir import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.io.File -class GaanaViewModel @ViewModelInject constructor(val databaseDAO: DatabaseDAO) : BaseViewModel(){ +class GaanaViewModel @ViewModelInject constructor(val databaseDAO: DatabaseDAO) : TrackListViewModel(){ override var folderType:String = "" override var subFolder:String = "" diff --git a/app/src/main/java/com/shabinder/spotiflyer/ui/mainfragment/MainFragment.kt b/app/src/main/java/com/shabinder/spotiflyer/ui/mainfragment/MainFragment.kt index 6d5af994..6ad9a9c0 100755 --- a/app/src/main/java/com/shabinder/spotiflyer/ui/mainfragment/MainFragment.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/ui/mainfragment/MainFragment.kt @@ -25,7 +25,6 @@ import android.text.SpannableStringBuilder import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController @@ -57,7 +56,7 @@ class MainFragment : Fragment() { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - binding = DataBindingUtil.inflate(inflater,R.layout.main_fragment,container,false) + binding = MainFragmentBinding.inflate(inflater,container,false) initializeAll() binding.btnSearch.setOnClickListener { if(!isOnline()){ diff --git a/app/src/main/java/com/shabinder/spotiflyer/ui/spotify/SpotifyFragment.kt b/app/src/main/java/com/shabinder/spotiflyer/ui/spotify/SpotifyFragment.kt index 093fc854..cc7299a8 100755 --- a/app/src/main/java/com/shabinder/spotiflyer/ui/spotify/SpotifyFragment.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/ui/spotify/SpotifyFragment.kt @@ -24,26 +24,29 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.lifecycle.ViewModelProvider +import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.SimpleItemAnimator import com.shabinder.spotiflyer.MainActivity import com.shabinder.spotiflyer.downloadHelper.DownloadHelper import com.shabinder.spotiflyer.models.DownloadStatus import com.shabinder.spotiflyer.models.spotify.Source +import com.shabinder.spotiflyer.networking.YoutubeMusicApi import com.shabinder.spotiflyer.recyclerView.TrackListAdapter import com.shabinder.spotiflyer.utils.* import com.shabinder.spotiflyer.utils.Provider.mainActivity +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import javax.inject.Inject -@Suppress("DEPRECATION") -class SpotifyFragment : BaseFragment() { +@AndroidEntryPoint +class SpotifyFragment : TrackListFragment() { - override lateinit var baseViewModel: BaseViewModel + @Inject lateinit var youtubeMusicApi: YoutubeMusicApi + override lateinit var viewModel: SpotifyViewModel override lateinit var adapter: TrackListAdapter override var source: Source = Source.Spotify - private val viewModel: SpotifyViewModel - get() = baseViewModel as SpotifyViewModel - + override val args: SpotifyFragmentArgs by navArgs() @SuppressLint("SetJavaScriptEnabled") override fun onCreateView( @@ -53,7 +56,7 @@ class SpotifyFragment : BaseFragment() { super.onCreateView(inflater, container, savedInstanceState) initializeAll() - val spotifyLink = SpotifyFragmentArgs.fromBundle(requireArguments()).link.substringAfter("open.spotify.com/") + val spotifyLink = args.link.substringAfter("open.spotify.com/") val link = spotifyLink.substringAfterLast('/', "Error").substringBefore('?') val type = spotifyLink.substringBeforeLast('/', "Error").substringAfterLast('/') @@ -75,7 +78,7 @@ class SpotifyFragment : BaseFragment() { showMessage("Implementing Soon, Stay Tuned!") } else{ - viewModel.spotifySearch(type,link) + this.viewModel.spotifySearch(type,link) binding.btnDownloadAll.setOnClickListener { if(!isOnline()){ @@ -86,16 +89,16 @@ class SpotifyFragment : BaseFragment() { binding.downloadingFab.visibility = View.VISIBLE rotateAnim(binding.downloadingFab) - for (track in viewModel.trackList.value!!){ + for (track in this.viewModel.trackList.value!!){ if(track.downloaded != DownloadStatus.Downloaded){ track.downloaded = DownloadStatus.Downloading - adapter.notifyItemChanged(viewModel.trackList.value!!.indexOf(track)) + adapter.notifyItemChanged(this.viewModel.trackList.value!!.indexOf(track)) } } showMessage("Processing!") sharedViewModel.uiScope.launch(Dispatchers.Default){ val urlList = arrayListOf() - viewModel.trackList.value?.forEach { urlList.add(it.albumArtURL) } + this@SpotifyFragment.viewModel.trackList.value?.forEach { urlList.add(it.albumArtURL) } //Appending Source urlList.add("spotify") loadAllImages( @@ -103,7 +106,7 @@ class SpotifyFragment : BaseFragment() { urlList ) } - viewModel.uiScope.launch { + this.viewModel.uiScope.launch { val finalList = viewModel.trackList.value if(finalList.isNullOrEmpty())showMessage("Not Downloading Any Song") DownloadHelper.downloadAllTracks( @@ -124,10 +127,10 @@ class SpotifyFragment : BaseFragment() { * Basic Initialization **/ private fun initializeAll() { - baseViewModel = ViewModelProvider(this).get(SpotifyViewModel::class.java) - adapter = TrackListAdapter(viewModel) + this.viewModel = ViewModelProvider(this).get(SpotifyViewModel::class.java) + adapter = TrackListAdapter(this.viewModel) sharedViewModel.spotifyService.observe(viewLifecycleOwner, { - viewModel.spotifyService = it + this.viewModel.spotifyService = it }) DownloadHelper.youtubeMusicApi = youtubeMusicApi DownloadHelper.sharedViewModel = sharedViewModel diff --git a/app/src/main/java/com/shabinder/spotiflyer/ui/spotify/SpotifyViewModel.kt b/app/src/main/java/com/shabinder/spotiflyer/ui/spotify/SpotifyViewModel.kt index 07c1dfc8..f6f758d7 100755 --- a/app/src/main/java/com/shabinder/spotiflyer/ui/spotify/SpotifyViewModel.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/ui/spotify/SpotifyViewModel.kt @@ -26,15 +26,15 @@ import com.shabinder.spotiflyer.models.DownloadStatus import com.shabinder.spotiflyer.models.TrackDetails import com.shabinder.spotiflyer.models.spotify.* import com.shabinder.spotiflyer.networking.SpotifyService -import com.shabinder.spotiflyer.utils.BaseViewModel import com.shabinder.spotiflyer.utils.Provider +import com.shabinder.spotiflyer.utils.TrackListViewModel import com.shabinder.spotiflyer.utils.finalOutputDir import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.io.File -class SpotifyViewModel @ViewModelInject constructor(val databaseDAO: DatabaseDAO) : BaseViewModel(){ +class SpotifyViewModel @ViewModelInject constructor(val databaseDAO: DatabaseDAO) : TrackListViewModel(){ override var folderType:String = "" override var subFolder:String = "" @@ -145,6 +145,7 @@ class SpotifyViewModel @ViewModelInject constructor(val databaseDAO: DatabaseDAO } } + @Suppress("DEPRECATION") private fun List.toTrackDetailsList() = this.map { TrackDetails( title = it.name.toString(), diff --git a/app/src/main/java/com/shabinder/spotiflyer/ui/youtube/YoutubeFragment.kt b/app/src/main/java/com/shabinder/spotiflyer/ui/youtube/YoutubeFragment.kt index 1a9baa08..03cb626f 100755 --- a/app/src/main/java/com/shabinder/spotiflyer/ui/youtube/YoutubeFragment.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/ui/youtube/YoutubeFragment.kt @@ -22,31 +22,37 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.lifecycle.ViewModelProvider +import androidx.navigation.fragment.navArgs +import com.github.kiulian.downloader.YoutubeDownloader import com.shabinder.spotiflyer.downloadHelper.YTDownloadHelper import com.shabinder.spotiflyer.models.DownloadStatus import com.shabinder.spotiflyer.models.spotify.Source import com.shabinder.spotiflyer.recyclerView.TrackListAdapter import com.shabinder.spotiflyer.utils.* +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import javax.inject.Inject -class YoutubeFragment : BaseFragment() { +private const val sampleDomain2 = "youtu.be" +private const val sampleDomain1 = "youtube.com" - override lateinit var baseViewModel: BaseViewModel +@AndroidEntryPoint +class YoutubeFragment : TrackListFragment() { + + @Inject lateinit var ytDownloader: YoutubeDownloader + override lateinit var viewModel: YoutubeViewModel override lateinit var adapter : TrackListAdapter override var source: Source = Source.YouTube - private val viewModel: YoutubeViewModel - get() = baseViewModel as YoutubeViewModel - private val sampleDomain2 = "youtu.be" - private val sampleDomain1 = "youtube.com" + override val args: YoutubeFragmentArgs by navArgs() override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { super.onCreateView(inflater, container, savedInstanceState) - baseViewModel = ViewModelProvider(this).get(YoutubeViewModel::class.java) - adapter = TrackListAdapter(viewModel) + this.viewModel = ViewModelProvider(this).get(YoutubeViewModel::class.java) + adapter = TrackListAdapter(this.viewModel) binding.trackList.adapter = adapter val args = YoutubeFragmentArgs.fromBundle(requireArguments()) @@ -60,7 +66,7 @@ class YoutubeFragment : BaseFragment() { if(link.contains("playlist",true) || link.contains("list",true)){ // Given Link is of a Playlist val playlistId = link.substringAfter("?list=").substringAfter("&list=").substringBefore("&") - viewModel.getYTPlaylist(playlistId,ytDownloader) + this.viewModel.getYTPlaylist(playlistId,ytDownloader) }else{//Given Link is of a Video var searchId = "error" if(link.contains(sampleDomain1,true) ){ @@ -70,7 +76,7 @@ class YoutubeFragment : BaseFragment() { searchId = link.substringAfterLast("/","error") } if(searchId != "error") { - viewModel.getYTTrack(searchId,ytDownloader) + this.viewModel.getYTTrack(searchId,ytDownloader) }else{showMessage("Your Youtube Link is not of a Video!!")} } @@ -87,10 +93,10 @@ class YoutubeFragment : BaseFragment() { rotateAnim(binding.downloadingFab) - for (track in viewModel.trackList.value?: listOf()){ + for (track in this.viewModel.trackList.value?: listOf()){ if(track.downloaded != DownloadStatus.Downloaded){ track.downloaded = DownloadStatus.Downloading - adapter.notifyItemChanged(viewModel.trackList.value!!.indexOf(track)) + adapter.notifyItemChanged(this.viewModel.trackList.value!!.indexOf(track)) } } showMessage("Processing!") diff --git a/app/src/main/java/com/shabinder/spotiflyer/ui/youtube/YoutubeViewModel.kt b/app/src/main/java/com/shabinder/spotiflyer/ui/youtube/YoutubeViewModel.kt index 467442bf..e3e0e242 100755 --- a/app/src/main/java/com/shabinder/spotiflyer/ui/youtube/YoutubeViewModel.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/ui/youtube/YoutubeViewModel.kt @@ -27,8 +27,8 @@ import com.shabinder.spotiflyer.database.DownloadRecord import com.shabinder.spotiflyer.models.DownloadStatus import com.shabinder.spotiflyer.models.TrackDetails import com.shabinder.spotiflyer.models.spotify.Source -import com.shabinder.spotiflyer.utils.BaseViewModel import com.shabinder.spotiflyer.utils.Provider.defaultDir +import com.shabinder.spotiflyer.utils.TrackListViewModel import com.shabinder.spotiflyer.utils.finalOutputDir import com.shabinder.spotiflyer.utils.removeIllegalChars import com.shabinder.spotiflyer.utils.showMessage @@ -37,7 +37,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.io.File -class YoutubeViewModel @ViewModelInject constructor(val databaseDAO: DatabaseDAO) : BaseViewModel(){ +class YoutubeViewModel @ViewModelInject constructor(val databaseDAO: DatabaseDAO) : TrackListViewModel(){ /* * YT Album Art Schema * HI-RES Url: https://i.ytimg.com/vi/$searchId/maxresdefault.jpg" diff --git a/app/src/main/java/com/shabinder/spotiflyer/utils/BaseFragment.kt b/app/src/main/java/com/shabinder/spotiflyer/utils/TrackListFragment.kt similarity index 72% rename from app/src/main/java/com/shabinder/spotiflyer/utils/BaseFragment.kt rename to app/src/main/java/com/shabinder/spotiflyer/utils/TrackListFragment.kt index b9695857..60e4bd56 100644 --- a/app/src/main/java/com/shabinder/spotiflyer/utils/BaseFragment.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/utils/TrackListFragment.kt @@ -26,35 +26,27 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider -import com.github.kiulian.downloader.YoutubeDownloader +import androidx.navigation.NavArgs import com.shabinder.spotiflyer.R import com.shabinder.spotiflyer.SharedViewModel import com.shabinder.spotiflyer.databinding.TrackListFragmentBinding import com.shabinder.spotiflyer.models.DownloadStatus import com.shabinder.spotiflyer.models.TrackDetails import com.shabinder.spotiflyer.models.spotify.Source -import com.shabinder.spotiflyer.networking.GaanaInterface -import com.shabinder.spotiflyer.networking.YoutubeMusicApi import com.shabinder.spotiflyer.recyclerView.TrackListAdapter -import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject -@AndroidEntryPoint -abstract class BaseFragment : Fragment() { +abstract class TrackListFragment : Fragment() { - @Inject open lateinit var youtubeMusicApi: YoutubeMusicApi - @Inject open lateinit var ytDownloader: YoutubeDownloader - @Inject open lateinit var gaanaInterface: GaanaInterface - open lateinit var sharedViewModel: SharedViewModel - open lateinit var binding: TrackListFragmentBinding - abstract var baseViewModel: BaseViewModel - abstract var adapter: TrackListAdapter - abstract var source: Source + protected lateinit var sharedViewModel: SharedViewModel + protected lateinit var binding: TrackListFragmentBinding + protected abstract var viewModel: VM + protected abstract var adapter: TrackListAdapter + protected abstract var source: Source private var intentFilter: IntentFilter? = null private var updateUIReceiver: BroadcastReceiver? = null + protected abstract val args:NavArgs override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -66,7 +58,7 @@ abstract class BaseFragment : Fragment() { container: ViewGroup?, savedInstanceState: Bundle? ): View? { - binding = DataBindingUtil.inflate(inflater,R.layout.track_list_fragment, container, false) + binding = TrackListFragmentBinding.inflate(inflater,container,false) return binding.root } @@ -74,11 +66,12 @@ abstract class BaseFragment : Fragment() { super.onViewCreated(view, savedInstanceState) initializeLiveDataObservers() } + /** *Live Data Observers **/ - open fun initializeLiveDataObservers() { - baseViewModel.trackList.observe(viewLifecycleOwner, { + private fun initializeLiveDataObservers() { + viewModel.trackList.observe(viewLifecycleOwner, { if (it.isNotEmpty()){ Log.i("GaanaFragment","TrackList Updated") adapter.submitList(it, source) @@ -86,16 +79,16 @@ abstract class BaseFragment : Fragment() { } }) - baseViewModel.coverUrl.observe(viewLifecycleOwner, { + viewModel.coverUrl.observe(viewLifecycleOwner, { if(it!="Loading") bindImage(binding.coverImage,it, source) }) - baseViewModel.title.observe(viewLifecycleOwner, { + viewModel.title.observe(viewLifecycleOwner, { binding.titleView.text = it }) } - open fun initializeBroadcast() { + private fun initializeBroadcast() { intentFilter = IntentFilter() intentFilter?.addAction("track_download_completed") @@ -105,13 +98,13 @@ abstract class BaseFragment : Fragment() { if (intent != null){ val trackDetails = intent.getParcelableExtra("track") trackDetails?.let { - val position: Int = baseViewModel.trackList.value?.map { it.title }?.indexOf(trackDetails.title) ?: -1 + val position: Int = viewModel.trackList.value?.map { it.title }?.indexOf(trackDetails.title) ?: -1 Log.i("Track","Download Completed Intent :$position") if(position != -1) { - val track = baseViewModel.trackList.value?.get(position) + val track = viewModel.trackList.value?.get(position) track?.let{ it.downloaded = DownloadStatus.Downloaded - baseViewModel.trackList.value?.set(position, it) + viewModel.trackList.value?.set(position, it) adapter.notifyItemChanged(position) checkIfAllDownloaded() } @@ -133,8 +126,8 @@ abstract class BaseFragment : Fragment() { requireActivity().unregisterReceiver(updateUIReceiver) } - open fun checkIfAllDownloaded() { - if(!baseViewModel.trackList.value!!.any { it.downloaded != DownloadStatus.Downloaded }){ + private fun checkIfAllDownloaded() { + if(!viewModel.trackList.value!!.any { it.downloaded != DownloadStatus.Downloaded }){ //All Tracks Downloaded binding.btnDownloadAll.visibility = View.GONE binding.downloadingFab.apply{ diff --git a/app/src/main/java/com/shabinder/spotiflyer/utils/BaseViewModel.kt b/app/src/main/java/com/shabinder/spotiflyer/utils/TrackListViewModel.kt similarity index 97% rename from app/src/main/java/com/shabinder/spotiflyer/utils/BaseViewModel.kt rename to app/src/main/java/com/shabinder/spotiflyer/utils/TrackListViewModel.kt index c70a2223..1ab33bd8 100644 --- a/app/src/main/java/com/shabinder/spotiflyer/utils/BaseViewModel.kt +++ b/app/src/main/java/com/shabinder/spotiflyer/utils/TrackListViewModel.kt @@ -25,7 +25,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job -abstract class BaseViewModel:ViewModel() { +abstract class TrackListViewModel:ViewModel() { abstract var folderType:String abstract var subFolder:String open val trackList = MutableLiveData>() diff --git a/app/src/main/res/drawable/gradient.xml b/app/src/main/res/drawable/gradient.xml index 6177f9f4..b152852d 100755 --- a/app/src/main/res/drawable/gradient.xml +++ b/app/src/main/res/drawable/gradient.xml @@ -16,7 +16,8 @@ ~ along with this program. If not, see . --> - + + `|MNZn4)=8Rxpk|~Id$sP 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%0DTQ`v9NEH`D^GR%-~^flPq3vA7{umfnBVA0@p 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 PNE4rDR)LYIbo~1-Zuq$< literal 0 HcmV?d00001 diff --git a/app/src/main/res/font/nunito_sans_light.ttf b/app/src/main/res/font/nunito_sans_light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2f5d0493fcef3d63d21d4b404371293d12dcda8e GIT binary patch literal 94092 zcmd?S2bfev);C^Nx5MPr-P6N_o}TW>IS&joLz7`<7;=`JGa_c!LZkthgnQ7~;Y0CD3b|q(zGH?C8a$*<)qM_BIevdQbkxYP_iottu@K5GM9V!x z$BrK`v8Z&05N+FpNI5ieY*p=|3vV4P#KbhDXrnrT8t#IMI zS##shJG4m1s$sa_xDW{I?UoAsUW4EH3zw}v$5J$BH-6tCL_*Ti6?0}ibje4z2-){x zAuJioW}UOrG&%9Gko{i-y?gnrW%F9DoRx*&pW%Mp$`xmdhVJ? z61|MHNhFI*BW;FmWEp9TNQLBedaFniIYv50*ubfdj}>;2Yoz0ZL%2oWl6k9^i(L#~ zVYrXs0frwlJk0Q0f>JPyVVJ@YTC{43bTceuSkADPVQ+?Q37YBgz7+fv#MNV1d_txsf4arZZy=v2SSK8Wz1jHPMc{~DPT)PH-w1rbxR;TB z3BR5RJ{~xPyonlCS_}@ngw!*jz_;;<6|sRp;BKJ;pMfi?aXdr)whg%00Ok4y`dtfB zxq-h2J`L;#CR9h1_mZ#$_67ckhr)IEEbwJuCrW!6*R`S+={L}h#gIc4=v4W~+#X}9 zXQMUgDG9!w5jla!18eod8QSz513xflkYV{&wo{d2zPJK5_FL(agXCg)wR}|WS4tJD zF11?yR&7_Gs2{Z?&8^jHgS0W)TiDan*=Dl}D_+Dx6M z38tB*n@#)8nP%`P2Z&-h5Y~2(aLK_!lS6O~7qzlOq{Cj9$Szo(RPk8gVzCw1pfiWCxSsKc!L0N8;e+yL&OwVe zpq@if&!NJkx`abb6ob`dTvNqh#<+m#3rt^N`ZA^j7zK<1MlmKAm|S3TfywOwqv5^{ z_ieauI!`KGg4G;AC%h%<@Q0J8HsBYuF>QN;g`TKSeH?=wM$tLfA+Tk?%a@I}iEJgYPy<-Y7c6|Cdik%Od)hDte!+ zX4%T}xxy*DkdQs_QQ(KbA8|c{k>p{FB|8I;;nxxTJ&3z+!5aS{T);mFd;b~6uO2=+ zmPP{5eMRFSKEW~5%=jPl$AZrXzjbWz9*ty7eFPY8i;I18)q)`vQ zKG&ZxO4PGa;Qnaf3*7w%-#WkGh3N5#Gx(yqI~aozRR0DH@+<-`An%U@#|VcMazZK@ zxqL<=P~b!46NlX21Ga|p20z=0CrZ)CX_SWBdda{;ru>sUCVX@XhOxn4`W+p1mr&qc zP`ytVxcM$jiCdn`J;6F)<|5#&;4aCKo(XzQK?)s9Pa{PoaV-E3fz!{xC+4l- z@Q~;QPe%eC3G76xQteP5a7XP;T1J|v>zE{MHDrOd=B#Pnf_?-a8Qg-SqcnTbKX}UM z5kU-n>-8fpDQ_+#Kz3$`ytCcB0jJS zH4&)8%aCj>r2Ytc{2u`yp)|$`i4^G?$u&T}99m@`o~HHBu`h%0 zXYn-EkYL0|xxb>3#XG9#E@QU86H|a}2WMFXeBF%yvb69eRP`_gIrJcHD=^N#!+#5-63U4l&joCONLwHU?Q!u`A z37@m=j4mMR7h5GsBO>t>_$Ryt#Kj<)qolRCBCHlaSj&B4NZ?cONA@BY_MO_b78tS# z)O+KFNtXhC1)q<@+?m^#TTen#XieM?&_z@sN@~SeaPT?nJy{BjDj21y-|@wzP?_|p zV@M#_4|5sQ8p4MYhJK-}!?7PCi*p=~<% zgY3uT;1}ga*0=_??l3G1^~@gv{|#@}4qoX`W_M=KhJ+Ku7oxXNw$pz0Wx}%pF}d(H zN=Vy;&~MGQkkiVB7|_qYeu}@7<}KeyyCQ8<+KtZ5&dr><`Gl!EKzHK1l*@_l{?cbp zg}(|(si!%$3#pewsl7dQv~8k>AO4IhDJV%c+z`+=uh43~|pX{?$E~depR; z@A!}!5=wQRFg50+bdzv*u5CKt;!uikE4$&&vRz=ih|8eVrT=kiW49-+`vv*^7W{4D z{3vx7r+$yrpE&i`P>N)Ak?l#_P8+2z4W)G4?x?%naj)R+>-Fr|bzKy3pM)&Yp%RGU$mg&K9DxO|s|POYJUuHK!U+A+;D!oC+P~ z+!I|(s0=+t`JIph`vCA=%G^_`kyFEZz=iLIQm0U(ZoF{rT$&Afs+Y?tF1K5L-Ja#U zjI(#)*>RlL6r^TGr@}eg=i}~DzDuc9-BRcDaQEc63-QD{&V^DNLaD1msW1-u0Gghj zxT%L+!Z=Flx!i`-J)Fw}NNu%03`nW%p_Gn$E_AntRN58x7ioO6zsjkb|D)6$Cw~^U z9XSJDfeSeU-q8atd^aM6oKMP&ec#DA)$iKh0nPg?p-+%H97-KMg;ZE`Si1ZKOZOB~ zEay|83+MNvbF)M76O@WMQOc1Nq;uG97dSGB&f#_xI?6+-+7qUFgYLw4DVI~Z`@fgV zsqlPquG&!hL0n%-wR36|QWH3J8d9@Esf9hHPJUN^VmWd-&#~IE#t}}f58=Wo=&oav zPUpDMD0ewhMlSzxYW;uwL{FtrE_y9{x_crVdLC*+cR9tsy61wP?6{BbJc!hzq13jY znR*(zyzJNoxHps{+*{pn2OJ+dKI1aJLh9R4DvUeTlt22}bW>E$r<#jF2TsE&gR3Ae zJY`IfU5Y18g^qIW ziEd-43_V5porD8$e-_JSE>ah9>e3!?;kyy36L1jbsv9qyJD1iirI#CBqi)Z#{B+!P z;P1Db1AOB2ySk-*58R&!N1BuV*HG%o=oINj_q!*@rSHTOySX$C!75AEwtc-8s$+o$ErW4JS-p4Z0KGrCd(s?*Cpc zr^53|xkAivF(Pv^u$zRP9F<&tt(MtF^4zEb;=?=I76C}(XCj_Yy<)8D~&?_m0s zj9Ez-?IucVH}Tz-oc~Iq(YhGl#W|eM(tDq!!F8bUr^-%6Gj?@6|D!&qIuVh%t$r-pUe4A&r$OESW^6 z#9m)u?qd91jIUr!J!8^1ZRfO|@46Y|7NqTN!YezM?xx%{ZeOjLDbM2)?HcW`UQbVn z^_-7~bMWYCrli#)DKjWfp-U-)auX{wk|*~9aT(=?yU=jK@)Rp52hdRd%bA}0m-veD zU+Fn;o(~g;Vg+Ha`-jRJ!R6k~>ARVeyZLSgr!(lT+Cq2L7N$&P%2clPJg!$NQx0U9 zs?%@|sl<=`AEy5wzKh+?z_>U~`v}nQC@uJ|_#b*!(E79#-!T3g#{9SXlrUVo&$%w# z$HlE&qxI^1+kP9R7t%wDVnBsgWYUnA@0#+w?SZ4g{VRjJZIk zWc&sE?6-_LMt8+A=IvX;%UpiyV=gO~pUvf`a``FT6w-8#X#<{0zz$$5ewRmFwGruZ ztTSas{B^Unl%HvoX({LQoTx;`*}vd|{>h(v{ZzRp&$k-7e6qjQ;$(m4!RG3JYs8vR zI*8N1yNyZI9)ZOg^`gz(a+@iwnY3|XS&IE=iJyBN!m~g3`l&Kco^J~DAo{OfME{*g z7IfNTpc;r}w!sQ#UDOCQQpBh+YLbXoQ`8iZrcP5!u($FuwE;WrBz8*vK|P=zL8=nF zIv3+~$X1*V*@n^WN%53;L+lf8inqi+#D1Iy=`RP!fpV}MBHLw$?4(m6a+*9}ULb!Z zFO_YdTva`D~3;bhbuj)7ctXz*20avo(+`&eq^J&eq5cbhbubPG@W69dxz^ zlEK*;`8v3_;tb8-)QjpRIz>Y#XmE}|$LPOlpKY*SyHGDWUz5zWbD?%IJ=}Xwy(e7i z1NAX><$kKZ6kc^iVPAy$R(%J(!0sk~8iEo|=+zLEH&hM9{#dj&xM_!`X=wEkNOxgh za17diq=pSPZP`2%<{A{*B0hlV|gm(S~AzMGl z7KOkS;V%w%NassL1=3`J(s3RFrwd>ku;*J0Lk~8i2hYWbH&4vRUWWzvixms;XGM=# zhBWo;Snk;xG8Kpa=aG_{U&* zlEikg3wv)~5HI5-!{5d0NWTF~o+jSLpG~|YKEj@WkHu%;_H+DM*?y$6{YYo~VP(q^ z$Ce`w^&15KUFh3-ZK)=TYa+qr7Nm(M#oTDjhhjcV;Nx}FnaZ|s*;Xz)hRco>U&uI- zB@<+g$VRWO6$!FV_CcC#Ql1=zJ=l4294u2FdiX5BIdU=J5_u(PHp-1iUoEdj`Wks7 z(!askIvaZb?}bDDLE^lL+$moWPPtp|78&wyuxC!Lp^L3rwmga*>j`YjlG$2jvYpFg z&5C2qN@C6Oux6#8r?v|>YgP(tRx0b1hjq%%I+emYmBc!QUHa$=*ryMj%H^Jr#C{PF;kHSY@e-#6xrJi5g{<5{F|fe>fTwnH zU}PJKG_{sPj+SGQrZ#iP@z^_`&MoKQmUD2+#c<0xtrE>;6y1Ff`jofX$P0d;P}Q&i^!9xqKiUYdElv|zkkjJr$Z z6?p1OXsARzuR=Op!`O%#YM~lFg4`aJkBdaP4LX~^wM~ksZ4%crf$NjN^+`Y-YPfyU zn0qI;kAr!&Gp`PAA1AkrliS3}t>NSr&}Hvr&UC4#v(%l;QxbEK%p9b$yptp3?O=J^ zS>8^Tw<)5(ByfMxM>aF}7aR8%GxwLoh%wE|{l(1vCE)}%IDz|%#{DIp`-{f?C7%0> znfr@{`-_?TO9J;7D~}X0+&f|+DTmQJ$nNSEO4omlH9u14lUSyf9<-e-PK?o#WMyJm zQgJM)c$QQGODaA}C&>fT&txi$2xLF?K5FMaYLDoncJ8Bg?xPOwqjv72K_1C!o4I%D z{nE-jCUA?#8QMuaCNPf)tY<0AV;b{lV;<9)N1LHfWc}jwzQQdS!xk@|ZCxU_S|Ybv z5|5wBY~@n9)e^bY;L!@FGTw)8H+v62B6cifauD{q%G( zb~m=c!x#gPdZ9Q2R{t_Y->9xh@Gjk|H2u~8^n#XW-VQhMO7Q#PBwT_b_~b;lm8KGThGaxiikFuCctx@KuKU z7{0^seTJVfJk0PY!ygG+6~mY_&YXRQHHo2}VJ1U2!$OAT3~L$oX4uAX5X1H}&Rlth zbri!13{PV?o8dx+%Ned_cpk$w4A(Qf0(Mj3BK!Kk{VjQ3|4Sg|aqu^owmyjY zrQZ_s9IExthZ<%_Hq45MyZ`$soIqoKe+i^96448W2@L5h8SSAbXl6*URXV{$kamA4POO07L|Hj1pv2cu!iax4RZ(eY?wm*$P|dYs%^?o6zW(sg@$*isMj^^)41r&BS}hW^k$Dgiznn3dUJsG`-opsyAKviYIiWa zncYRG4GeLCR?^mmWK5U~aIK2Mv;(s`3ey`H z%nA%Hr8W~O@PgRsBY2;{5;X$%(-37-YNP0dNbp|untENmq4uda)m!QxYQK70y`$b$ z2h>4Cem~PRte==Qi)Phgv{_o*$?+(FgOCM|rXKT!3C!gtxSms8Xz6^!qvTQi~yN7fzX#Vzw~|v!c^5 zqgjpF$Q9y7$nAUi4?v$BD$L5M8dMp|PDDgILp7>$aFL|qai^DRQWfAR8R<;bTUCO$ z6r{6MA5{e|Q<2VA&8iywrXii9`l=dmZbRCoT2w9SU`IMvwW>PQ1~DP!R&A;t^-4$i z`$Z{94wsLlaDw{(3~fQ){m{Rt_eZQi@b4GY-(VnKQvU;O@4iCuq56ndC=|RO@}sE7 z3e4>N;uHMRcm+d{eu`vhXdI|W!=F++pvP}f8neFfD7in<61oYf1{1`5lkPqww#l3E z)(^Vd4>@AUP`XEfRRF>&9b2aA(U<6co+{;DMZA0g3Pd915~9THlybovMNkil!l9~4 zi7d2S64?pxhFACC*$eR}QSw8;ZNr}?z67;Nj)Z(%h+-|ln>%inHw(AC2b|^c^B(9! zz3{5R;J$+66_qT
oby&^faVJ${srpx7nH-UQhGipS#ONc7}3s6v-^rN?npkx!5 zZ02$-Tuus?kjf>ba|v!P!Gk)ORFNzvKMe7YN%-BNf6M83+l?2$xuW##7Ks1rR)~Iz z@f{Pp5IGk=DD7YVTR_)O+T227)(@f&u(D5&=zcVLtMpDkN%!79h4kk%?Oo>AC}PuE$V6S|5EIe#pmI%^HL_ z(xZqj{To^l4{yT;kE9lnEyS52`7wxIPM0$w{f&rlU4!`6orn$Zl+Plr^*8w%;!%G@ zH0lOa&j#<$i?NlWB+o);uunqxv4&`o$udip$Xr>7sOWHBiCrw0%5$-Y>P&f=d_X=d zAC!Mm4|O+$=qp<1LCt0iiqx>LR^ z4#HBNi|FQjima+XL#vh|zIg{Uu>rc%g1F6i#Hc1Cw)1Q8U+OMc!X4rntjYSY%J`i+ zs=iSF!b;;|^|ks2YmcTF>Y1;=Vp?E51tM8h=zBF-VZKUklDDFcFUprOzI+O6SPUy! z2U|HA{=`#Q5q%q@SAv$TrD<7OzE-SNYBgGecAa*+cCWTg+wO{WCA*xi99N#Jz*Xj| zay7a7x`w;Px~94oxmLK&cU|nd%5|;l2G`B5@7(e36t}~j>2|q2?m~C9yUyM09^_u> zKG%Jj`&RcI?z`Rhy8qz*llu|(R`(Nmw!HK_PhMeOrAK)zo@7s&$KlEJxIAT^VV;?u zc?G+_4g8=G&!SHvw5uAjtmhhSk$;39yo@pP6Zt)Ccqyzp)#!2cqaYg`*$o47_>+*Z^m&7I-S zcDuPoweCJ#qt)&;sL}22yHKP1-4CHgkGZ!+)yRw*rJ_c?LN%JpHKH@|GU7CI307YC z6DZcdjbFX|`=WmTCGcqAfxz8?y8^ccZVBAvU+ACWAMYRN_eD~jIQ^dO5Y0Npq0zX; zaLRjV^`VOol^^`!;IsI<;ox2&4*ugHzbWG2lSFaw7W`d)@T`OD4{Q)I?{=+I>(Z{)Hfc99{|PTQsJ#yj3V)IQeyCX*@7WH-@FQsDbJz!!17VgmQw zKXe!OcA9np?lSF;yl>hLoN?)R(^g=%62$2F|FAt&D`AbunwaToi0Cpk3^MM`8W~-V5yV?&uuK_k`nqiYl zU}vu&y9DcYsk&19Ry@zv=~?lvxD9JcQhbS>Yca6EwAz*o`MGdA47_92f>~-WX~z0)BKEALib9ztJTeJBm_wAwbTI&9 zY>mtot+EL3)vLnTnj<=7qZlshv7-eMe%U0($X4uY=__W-E-@2tVVfWah*{Y0H&y!h z?P2rfSUFBCk`u%dIY}(WE|{fqvREmni8Hb8e72k`&cX`jY;m4kAU4ajVvSrTu9N>o z7G2yaH;KFDb>c3J&wr4=6@QYqh=<^r{88Qnzv&+FINq7IRo*3DlTTw`-;?5L`A6(; z*?}E8+r%EZUA!fq7YF1^;-L5^_NRO*_o4T^AvR*?=?n5vQ7kI4vuB}LE~ml|K3^^r z?Xp4qMy|)YxfPyJocM2fsYnyYu(qw?U4sRpzbq4zm7B%= zSlNGA-YOoEw}}Vje~Sm@@5G~6fqN2fo_k9EUc8Pq(^v5x-TheUe^Wju{vmgXL-Oz9 zGwg)2!zoIaw3_oRqAA~Fp8W&-%O5fK{!UoM5qL-c!tDFsh>LxVIoemEO%@BEEEPj! zwP=)X(OY^%AL$j%GG8>wJTYCii__#Vak)H4Tq(~J7s(Z3ojhG!ELUOw>KS6KTq&-S z7l>=*g<_NZwYXNU5m(D!iRa{>#V+{>c4qxWyeJTJX+^d$U73y@gT&+^m*;kms-ogU-C4YuTa=yAyoda*-S8A=gKwYeUt=3>S^l#v4 z+@h|)TH6-(P440~T6*ism_R3Hu{+@VC8IC*LJuxM|LueIq+z0$FMVKJ-{#(p^`*u6 z?o4NTT1uP=p~C7inVOgC^g8MsxEj0-byof^a(Ej;Sh^RaK)S(52WhPIU{jr3;{WKi zO?{fL?c2BSq-*=Sa?ZN8xp`7wd`)(_Cg)sx?X@|R&$_m)?b@kr*l+&h<=UBjbMkU> z^2VR$%FWFkk72pZ+1F*OwU-Q?+c+Wsa)Q)5QzC!onwJ$D1yB0AKBD@T=((8SbKUrgjl`Qw zA->`w@ey)-HwwQjNU!z;@x&L}HYj(NS4i$bel_)4ke>OuF+~4P6#mi>{y-FdP6+=t z;Yp_g{SnRCfpv~7(Z|=AB`sPEX1f{EtTeoT81qC6Y?Y?jJ4~1eIXZ;djP+81RqD>P z{JhlE^gOFItITZidI}rr8=DM8^Li`}dwN|hY>1}bb=TDOD=8Wh(!02d%7WZ%*Rijl ze)py~R}{9S-pX27>CN?|$yKb2=)t?dHk-2{R_5C2%=bDy&b$I= z8rY7tW=65?Y^t;VH0wFN#&unsauW8FC#=eF^-zP5o~;S#$9_XUAYknt=tnYIp|7uZ z8XO$RAMp)n$vli9W-Z1%5Bgx8CahLF_H}BeX%=ZRIZT}}KKwy#a>^v;2M)eiMe?8+ z+CBcEz2!3hEq!IP|HfkfEh`4dd*ye>s$}D6b-Dj&qyN)JvQGXQjOS#7m>2F-baDW; zNnJwU*he5Ra_qn;mkv#7@YN>imJzWSvog&CPjG8+9H7G@p}o`aj6-xfoj4PhlkY9e z%eO*F1c}$1mzt-mNI_jKl*8*43{&e==D>4T_&<~>OV8@t;D3Dg_(^}*Eo;X=@aCIx z%H#plW~&`DC-)g+&loab?Xi0Y4&Lbh1TyjkzJ)*f0(w@ZuPnnE9|wC)!js&CvO8e1 zwHYR%axJZ9qUD^}b-p|Y~3vUtlio3<1qQOR;+K3HyUk{9HL83g3n9sefbneYD0 zcfA>T1eM-LA|GFp&@!i>I~J1goP=TD?u`XNW>M*Hq3; z`cK56UAuYnk2jsNOnT6ZeNp18(E6nni*X!(>pZ|c9X2Y)ZMPJZ#|qj$eI zefoP>fW_ONdFFPVOW9c`2OK+-c=i9g&i{$dtGX$~D|n=(58#75D)^*aCye@ZWe#Ct;7Jd^dSONDVZuBr0R{ta@r|7LlX+R@2W?KdUSB>X&yjC7loq={?m0K5jgAw4LKSv)rL#EoFHsCe|&jFLM? z%FalKwx*^eCnciLxcp=ok~El4vY!|nyw+2y^~+_I84daQ4H=c?XWaJ_642rn*~{|s z%Iu3SJc%emIuLH_eGxj)rjZ}cI-psDc<6pum&gw%-OyCzb4d};#RQ*2KTqcQfu3J% z1U`xVa2+2PiI33Pccbv+hwHkzCkjtCPRH*J;)!4Gt2&Vqhf zuQ?mb1w4~9TTJlgFnUkp=_GoYoM9ygmDDom_mkU?k3En4I>YmC3R(~P4mvDNs>)Lh z*Wdqq*rX&@)#T@9=aSpsfRnn0eW}QY;~%brMt-O+hy5f6!?u~gZ>%Ws(dmG_muU0#O-{lJPZo{?!d_}xJM1JJ z95cK}r4Y1{67CwtHJbY5V5UZIz4sPdTzC+;;lP+sB^~<9Bv}4r9LpCmvKoU(bFh=X8 zV&rb9bL8Q&Hsm>!e|nq0U+eVgt#U^jQmS9wv41lk33V6Y^W^21>tk+>qWXETen;~D zJJ!#GW7`dEKXm*)tg-9#T~YMAiC&kJ_zm*WDB1*!y#qeK9+F|-PlL&ZW05+wjpP9W z-G<0iE@K>*{W_wGzy~n8%U-MlI{qyKe;9aE1pPh(|1zH58G(OS$3xOWe5H}C)AQLA z#>-T;7lijB7J+ivwxqDV&?0OLt(x4Xk-q48>^1Tj8|V_ZvfOn1ZXM76r@(I_czMmB zuSP!aYGfC6`gaU^y{=>zb^HMX{~vp)994$brVcv0Oj+yI2$5fk zDhC*@gPKMqIe7MF7UtAc6Y4`+o9CF?CYM5U&uoNNO$~gHh&er*A_{yS?A|gSpMiO| z@q9{Bd>janhb5FpQ&UJV$gV5DX=UrUG0mK7r73oWavu9^^kiK=?9-ZAJ`0#{qi^VV zu8)p?(ufgIJ*hq(tiO{yUqqDL=wo3#bbLH^Sj@)wDdmH+L*pmL_{e8>2cHcL$J$Xa zPp=$>{V|mHR!z6bh>x>c%qDD&q5u}!k!UC`fyt30 zHATbRqlvt5%z+{4Ca3jQ#6~7`Wi4ubFmrcfqim?CXpy7*d*@Z0X|&tt$U8w4`w9}Q zCT#JbY;i})3r$gWISn48nMNrx%UBe)(PTzFR^R+h<#)1gy>yZ#QbYVDa?i0Rk^Y3` z1zAx39_(VEy6#rZ#4pQz9q_Tj<;#jiKm*0<4R6@FRFp<)Nu{x3O4Z(6?eE`QBPsKK zYVxtW@vZCR_uAuJ#u-$Gn4{hewbeRqbH*cHfssPDlPVJbW)P1yC!RdmZ^3OI#6$k; z*kOG@Km?J5XPsFO-YW6MJJH$kSsSAJ3;u57J2Yb5hD~^pZ+#iQ)m|qz@lTM-TtW)pnb%jnv z^7u-ScdirpM|z$1Gw&3~_!cLHUqGBLi`E99U`CM1jH$0gl!;!n(U}4>m6DZ`nT{86 zi=;ve2BUDSi6USYFN_v~qI&#RW^U~4ymHnoz>TxcUbps~v)8UY8*!%PD{h}S@is)8 zCN^!^wCR>D*IaWe)rooFcDs=4^13mG>Ui>Hbo^UUc=Ba*{Jtps;UHeKhVWhLkx>4a zGY}p!JJEA7q30kQo-=ScT5Keq=L|YNE)pLq2LbFTJdL9|zk4F_Ce6TO93?z#%-i@T zzuOcsjioS!c-RD8{{5gCMdFf<2XjVE zf~hwt(^@m^gqlIN9^Nha`mjdOlB|vgi$GHtK?8lt?jUk)1_oBxt_W&hJ`++?7&pyk zj)z5MI(f1$4wH0v$*HtrATS*03K#a9)9avoaNAT+{}3Bej|}fWXvm0-GiPiZ(RtOJ z%-YJdehp1NT@}w>r#|d7mEXLC^pUmFWRi6)Ng4hZSt++{;=UBt%Z=UilJuz`;YVn^iRU zEJ)D2E#0Byu(()-t$3k{8->_|GdH)}UF0q-E-fJA&9Oc>g+;L7q1hWoUhFJj6{P5Y zkxZ{s=QqOuP8nEQUe?qX265`3l8Q2a%P3ji)N%G&dHTAM{yk0YYU1^?z<1%$%=W5K z%HL;{(%f6F@xQ!f)0WZ4j=5Q1P!F~*zwM@vWT!}vbiIhuqlh+T{7KtC(a6J#{o1;& zkWJ$DSK)X;cUu&s4ce`cUXiY#0S;okqW|5b+1CUN&%hC64TcwEu|j|VV~iePOhs2p z%}90H)9^?#P0|ou?NwIG%W&afV_s9L*PV)`!lREqa*rD1zf8{Y|4yELY}+*({RghO z>aX|S`xhfb(4Z#zU%MU~9`$(h2=GGtdP{vp7~urgBskO?40W>inGg@}Gc^H4yJ;2N zrmyXIF;A4Ww78QxRmLwr_q=5D@8pgHt&PaJTDy zH5Qa(GHa%JSbRkP!z5LAD$GZ($l z+WN-G(WA%i*`qwOCQq4jzuIw&|H*-a2le;=OSjpr+&5`G5p_%_zm9wn=rxV!=!oc? z#vqS?1iEA)d0qMGPN%g9${SQ?HnP!O@t7ygS39C`3|Um}hf8PqZw&TB<#8>{xv(`f z#;<+E{d}kk8ZtQ>GO=Masr6N*NQw1WEcn5FGNA=vIHvIc0mqOgDGobUKC&EHhz6us zd9qT31udSb>kDmo#cUB8gK+BXL1$<9dSBZnGgq85V^U^G>ZK1%nDpkMN{|0#wPW6_ zF>~T$irnX4KYXYkvqkhHYM-;YAKjt%Bl%H}_&0-i_=&{32m5iM&X^nYO#f~WkMTE> zes>Vh<&yo@^EnX2!)J@6e}(W6ObvXqYK-G$v<}!S1M6wV93a?^G;)U50n0>bK?U2V zbXprTtY~3T4=ZC>!&L0Gy|<<|vtdccoZmKi?!OqN=8!V&#jrqotd)Krvo4(i*-Zn1lYwlq(wA-OWYEZ5%~a(#~F zs^hOiy$SC{400EbLwm7DWNyV-4IJhQa2DvIx>yQN%`Mf}oMnTJb3+Cjs#z{Ji{v0`?Ju4q~_$ zcoE!#SE$cWFrBS8*6UUFh{jpIy6FYIiiQ<-PM9)r{oJkz6FTS2Y?X4sISn;(=G4J` zr__3K>)bhAg9Z(595%3R=$wWAX8F<&b0_o}YtwD+x7bzo0(KGPP*mKOhT743J*>Xu zK(ICgV}O?3fdN3@1p~|L#Hmncjx#&67oKx??1j4F53*j^(2z$<_|_sUYNs_e<)J^z zC$1gYe%Wc$E^Al0F_)Zm(ag+>b?xgeH2ZVSzh0(Zz|3m-?UN?nx-5U~RTFEowOPXYA9!qUXc3 z2%6AHI>bD(jy}e=<4x?nn7kB!J-EW_o{WzC%9Kl$5YH#&xiM_8L~Ny`ByJd z;VXqAVhsu%O`6uyPA$^~-2!kM*CkVPk~+WPRTxdZgB6OEUiF}7tF^*zCPh;Z4mrp zETwkhu{7xGv#k4bo8^fnUws0+Ni0fZricA#Je}`pnuk2m+hC8qCHf*4q;4_x^#x~q zQB9!E9XF=DgeQ7=2&xxY^oBqbdgPLeGm}bljVWHOE224q^}u=AVEz6PB@dbp>Gh71 zAJ2#MdNZEpL&16n<1MJS6*lu$=&D6z`7$tDLAa7EC-*`GUSZ)V@QT(vr@>_*Z-&YN{mU;lnxZDk$oj^7uBr#`9E?}@@w ztU<@WMtJa!*&p^+(;5Zh`>_^GgfXO1#3#ItfcP*6Y$Y)+iSs%+TP6(u@Pl@laBSF{ zZw|#eyP4NL`+&5tsO`T zj!NXLCiuT>^&cMk&woNIuJ->Crx2F=cS@X>!8!})$+CC{4^w|++j<;+Ulg8Xq0{e) z!js>lH+^IcHf8bBom!}Zx9ce5N|>JZn>T5X>Dg1=TB>1cvVH5A{7 z3k1Hydq$wh|@Xoi@D@Zs?! z$lJkmJVkO#c!rLg9IU+;=M;I|C@srd=(WXSFhC3kK1sy-d!6nb8V*-O17g{1wB*8x zEsjz3Rb3UmFIw$rY%U*N<}8?B;~s09Ilt6bC6Amo&A)46MNQ$LlE#+If&s0)va7P( z{?6`9Jb+{OBlZga@6rVBJo%!3gUkV;k)EhDo9WJUvB68 zPW0T5q30lPEjN_ku_(MJg!f0{Blz8Z0{l~9yh@1RHxR-TzqI#^>KEoW;yLgYswd1r zST1je`NhZ{#y_Q11o_3eg$R7898EnJg?}(euO5rS|0#s0b4Pl6fM4ikQ0^?>9@_8m z5Iy9o{uQEsHVXf02>*N({>~77C*iq2^vBx^j^IseeZ*b*#K@MDjZP6OW31R^6H|eM zVW##hUnJISU?=MjVD&~=W0Y0zGnh{0V(Vf|jKow*O3Z4h_n@XgH zQI4XY>`Seztn5?S8~f!7yoJSiad7WLoA*!Di!e_Pua_6X%?fp?FDRf}RoX+hnl#Z= zTt}|J14jS47qQ*qmXyBTI~eu4ihOtm4}?2fsGU9y$@giNuZjELyV@vT=jts6iN}2@ zSRFTshI(a<$&>MMnqhdFV0dZEZX&iy2opq^AXTiUX!Ctsyfu#Y@5atZ!q(l~j$|1h zZ^qOPax+7ueNX*K7BxN26JECkW~!u5pX_W}XX`Vl&%m~p?B3Z;wbd161zvYzWU@=opp8P<#la!t-Tw|Ys+gKUTnZ zxt2G-BUW>qrDsE5>*PJ-j(m%irrQYIhm=$+^Z!PhGceX+6VYw8Ec!pplm?xr>D(qsm>`F)W6@5!hxk2 z6+DC58Zao#tgQXjimj8oMosjum@+I2!$Vo4E+4IoY?q8>TfR-fuR;GDg}6xq##lPX zvhdO5IAuo6RPX9Ja01|qVvjP17IKZy0*#Fbhh+Kky5C2Sc7)>(95S)n5WS!iFTI>7 zA~n_4Ed+rhYM3Q)_`wLAAl@!l&u(m-?dv-sy|p!cLf=8-$B*b7GqzJ6L7=enjDB@B zI8fn#v8K-7ws`vV1q)})Sb(aaW7J^0-;TEK`AkDDP1^Lyt-ITqhV)QGI(mN`ooRSw zLGL~bhty2Xb`}gS=$bmEt6*@U({);nwQW^<$Lf9_S9NaolIhbHWa9|F7i>V*%m>RF z5eN8++vI&c;nr*NHVgXI*V!0nRjJA`&ZmCBq*}BBu;Z5|21m5vZe%HlR{g z{bU1H!LT>dIN6YOGRmmf<78iaenAOuPo{7Rbo7K_ixUY+-Z8$i$8h7M`8`O^s|vd9 zSRR&e@%(O*gjk@PH37&4a@0hVxYOrsYAh|m`3Ic#uxL2#VYa04`3GGxwI?|S0U;Tu zARwghDTplJsXYXFg&&&i%fzXX+RE~xf^2M6NJ)x|v6#W3mKtxIoJjjQB79(N<=lb) zff&`7FT8N9>QrUfgHApbrIYYcq^_%5Stm*M-$~kIquYg4Ez&Mfppgv&t6QX9V4pd! z`+YQ~ZWqE1bF^JZEA*yPXc9BA$Z;M=j8auFph|Y(b210Mpm7*Gc1-7papSPz{aC+g zIL3EIXUFMnbv3g7*zyH4W-MGVea51o9(^bOt)AyS28b{uArLIvvod>Sq&sNGdK?ZB zV=TbLb3te|7RD<(JG&^m5bw+I(xDKchvR8fL~!0&$jh>b{W`HE8^zCy%k5am4o@t%_MX;VV$NnCn zcz4vym~rf-U`4slb#Wi^NDP7;t9#TK2c|~hU%{INjBx|8E*hhWp3cy;@^jnqHaFcK zeusCH9l^fREYawzvs!qEn{mh*VRB<<1k4>dFBt96ybgyW%aQ3QfWJb4vM7JWILsDw zOys-%YqTk2Ck@STOrrq6v*V0@7p!<}(#TO0 zgFMT3nP=F=Ze!iMG>4Qren*78iKN%ZK+^aA$Y&4sBlZ;o#CBh{!;Uu_RrgXc=Bfg? z&-v0~#aTCa$vC#6oBTdFfg<6~;Pgryx^Em-cg!NjYK~ce4chUsGhp-~3Yyx(hk@m{ zTG@6?UxF)j z>>A>QI);~c3ZrYVIo=(YUYXvMpWlT4)o*;m--2!9no`~4U^{bZbc3m(&29FY($X4R zTVMYj)Oy)ot^3eBG=A-phz2#riOBYe7$;N;&7qC<420UVE28~r?hRdr9z;AR-wi*9 zxp&wXI!JSGJwMF7!}xb;?rq>zBtAmVo{Pd`?rre(SQMVdHC_LBTr>J4^`Ri1`R$?J zk4NQ$xwnzevr%}=y$$^HQFzR~4gAhXy!McR_bSFCE=<1R)A~NCr^D;h=;uAq5>HXI zhL1$`DG=qN-8YnNLMqm*(lE&JA$dB3j)MwTD<6er+rS+HN=@!C`bVDDSy)(DURdTR zsP~q5cmxR9iQ}T`yt1L6f(>eF*l;A}*Oe9oH&Yc@Q+u)^RY|s-8kZ4nulC4jlM?iw z-&L5)88Uo^WQe*}!6$hebtU_UHPF+}V|2J7PY`~;;|3{eV?y0E8^H|sT$|x_B z-ge;R@({1HN-f5u(e@^|O9Xq~f?RSL_&t8_VN7*9H14hOV(2~E>rTkskUGB9ja@)TSu z7p-98&7APudm@S?Q{--cR+Wd3Ws=Ul3f>ZUywL0Pj8WHz1H%oOLNg!(L$?BiC*6u; z-BJp*F^nQkP}o!RXw}uJADy7x4p-h?ZYgi-)2iJSk5@37+ImY`WBEH07&dW*?z_=%HXp1JRbku`i0Y#^cIA1fAfKG4OV2DPw4)?b5O0?+- z%71V`@_9uM-hxZ{zo@q>*E^o&0Xzn;@$C_(rSRM^^rg+g`*?15@VUTnyw{H8NcrJh zi?J5ERldjV`H#R<^o`(sO})bP;j>cEFJqlrKPe@xZ0*A<%8oQTS0}Bo?8YG}nXtHZ zROaH=k@EUh|2?vyvZ76n^zW@i(R$mdV;IBTw0k!v1BauaB4)FbPpn#I#30CpIJ60( zBVEBGZjtMSlwibZh8}Ii!($0qagH~uW3Bal`j5~-i(_Q{nQq5~;LtL>|D+E8$Fj!w z{$Nx^)yxWvZPcb%b0xk!aykly?061pjCH`L(SDfFSjRo*KN;&HN0}Dq#6D4Do%~>I zWsRX%huGH5WFEE|V+HgIW5{9QQHOw6lI{leFp_?IkUk*gA+8HilK$`*#rkuI#~dBM zHHZ&jjEbP=F^bv>dPDdO+MnWpilC|3zfwwHn&D|?*tOEnVPyzsD)tNVA#604aTF_J z+}CAsce%N2WlQUj$*n|#4(JwrBk^cz3I|B?J)Ol7s+HpA7f5Z`nztA^{fRckcb zZfX?&uLSGGawC6QukSO2=efgo^d|G}=dyBfm?n5G3#;2boXZNw%k`~|2rp4Yqg zynzGeH#N;4&^bqL1Wi|`OpKtRROEfTZ(Ik_7NqV5Q#O6)M&RXMbSL6}|W333CV9BhGHr7SW zDYjQb#Rksn4X72R#@AN%t}1UdG)~^VbVx|!G_9d;qO*Qzl7GPobnpCbx<@**5Hiv6 z$IDR1A1^~4&oT_jocf)PeH(At@3RX%!E z>dmLayrym&@q#U>pZ6%__SAC>>rzP2df*7rm*$ID6%^W3v|>zQRVh_!w~C)7dMGt}t^v7e<)CeQIZ~ z5I)B7({ws}rC~wh`4T8!b5&lcx3C1v_pQh)%lH4iVtZ~y=lIXZRcv>c%ik^N54JO! zd$r^lsfYQdd>sDfSdO@_AJ~0p3k0`b1_Ra#bBcdU9~mgOMjX z1jj9c)gf)F|9Wlmm~q1qzOHFsoY`ycAbk`XG^bbQ{DIS!_`e!wl{Kn!p#N`U$MIT> zv4%ddt#yz-HVtTP8E8be{VT(^0)1jspi?EFuCyN3&(~rsl*6^uUU8YG>-}^9xU#z9hIlPwPIN`2SNv zGBg$yX|<4rXjl|Fz@RS_l5v4A6(z%nrNXEe+hFx3YH)~NDjb9D1D)VgesFAoOs%O4 zZX}rGZ>RN|#WSYke+gp0unYVpiX2~NEXP-{6B&zx68y0rp2}~}kQAshTCS-{c9o4B z+S-ynx+PO?GsR43^W%Sw8DCLhR_wE(7cAj^eT~tt7qIOf3jEXv{C2Ej5IyER_+Qh> z|JLb)a~^E*lU)(?&l&WX>qOB9=Q_2ZUy1)uJ($n)I(>lVIFb1qa~x3%KkQzVTOe=_ zj1HZ(^kv51-j;3&z#E=dm5{3lHV3tq$eEc+TTW zwvRaXrTbUVky@-%k(}CSuSRW+E5~HE{?uL#WAO+=#ELArMkm~>aU3P=NO)HV_G%QA z6`$H(jh}86dGEAQJ+363)^g&u8q$9J8d7ZINm?%?--xz*DkOKwvees-=4Wfe?ZNXL zy{)%~=)0omcZcYK57Cp4k9;tO@^d_Y`wss*(X-e^GUm~&OsskYSDVuzTy78;Njk|x z;R(!mvarV^e1ijBbQgAjH~S_uHP+SS=47PfB^!ufg2)L}=hPMF*STF4Io_fPqx=rkHwN$R@u~9>IGE$Z zwit^<6xu?OJlaB(1Hou`y8^~x>>!}=i?+P!YDv4gPI8}jbm0|K$k?t2lw)wtKEKII z!*m0d(|PqA!L0v7-FpDWRb2bSGqbB*^)9WtR@$O2ZCA0%s#mL8#YMJdNw#InvSSNu zh%vwh7gKrh7kHo2uUCiKfgeD2_b|4A;eyNzccr)w6bL|`G4>I zzt1qbcjwNXJ9FmDnKNfjAzh7v1WjUc?~>K4tM=|KFD=qIHA@%sc>DhScHhTU)u@EC z2(+^i?M!Doshy$J&QO0lb6AizXm>CaBk=^jG9l(x-S-;c)igA8uEnQSQno#w<{nE+ zPLlF)l8BQ(Mt=w7@&9Zm5^y*}9t5~e=}1S1?8@0^`#ZDRzMFcp+dd?_10F$vyOg1^ z%eTskW~1*fw~(voaneW#9~nqH<5so90x*~XPW1- zcUgS9a}J*YFKxaC>r^n-Z<>4A{B|^sXd0A|WIpDkCP&G~+VV@DHuEqGxsQv7W*(*m zN|x!I_wMtv?=I)-0_uE~@-ZHrShIf%`EMNScmUgMY|2%oZpiH=V@gB}5GDy?s@LGp z#cx_w<_H?x&7uyHElSsfvszfvfKBe!V)$<>4gH>h!K(7ArhYnc87#J~8s;|NYt8jb z+elvp?U(J5bpCGHcfa1Fl25W6CEu?La$$a z>Y4kA_4v>9m3)$UDD}uQeFdI~7_}Z2977N4;h%OEpfJt~5<$Baaw(UFS*WJXdvp?L zBLRpsmSzHM6QrS| zE2Pa1+JYtuM)k3@_4dz+Kr06F43vebk()IymVk2D9XNn3vR9i!f!IT3B=s8ZIpY03w@aWcVwhVM$BxF_2c$_@3Y?F!H3Ex?ajs6m|TaOCq#?8Ve(S*L{6uT)rF zE&Fm}{u4YfpJ1Ytf7qXo^@7^w&wrlpmG#g$&mU#|Uer%}$soGUo)bPw=Y&!|3f*Yz z0Z*kHjn2)=M@gCyun0@t=)mWw@ZZ&qcAu8O!>X9h@{^`7Y!dE5#;n{q&7x?DSm+)O+{2rMtPvc7Kxl+$F^YVW&oBy+U`82nc z@`ov3;(0B+PX7&-wI%F3%BmY>fJ=NGmR*Fc!6_k@U4M>N%~97~E7&C9xvF;NS5B83 z>{&60G!o1|p&+IXS=Z{J%1#^Zz`{^f2a8`~F1BJxhJhd*gfD0yNV?nsx+E|QoRt!b zR5JfB&JQ#s@GsAIt5QN*rgN&IYXj$vvPS=CR$3_Ok(?*ARx5COO2SR6%q!RdMuYV$ zVT;%gywPFgCAZiJO?S}-$s#nE$t_I@A{~H>foBmWXrnIpx^VOya0?EWy2`LbgCe^k zJxA131mlRKJefzy8X(XkJ(IC|c2?-tsFqLp0Y?xdxDJmAw zLP_;nptc#pf}7UbNIYsPz+5?MQk9LRv0tzwPe`s#)X6=6~rbcK(9+0 zR{%U7r(*VglGXd$6{X=N=|vS;9raNeMu#od;LVIG3Uj&RjLG8JvZ{kchE$h1%Mu-H z$~5Lh$N7#IS)xPZV-sL(PxL7X{dA+BVL17d9)mQXFB-HFS~Db7Xb?)63PU)e>7i7p zSrt&o;z^J1>SEtjo+1QTzPt!M;S5@q z;%D&xgz#WL&IrQ$Agy{JoI9Wk2K;o+dSZhR|7Y2~U5AcM^<93}*_SVwI`&v!PiD`) zHEXW!;g^qJywT&h?Jn=gmMtT72X1kA&bVl$qiaWP?T#+_y-x7Aw5N{8_h4c{VF;BG zRV+3EFY*MWhy|MSssiN#rdP$ab8-Q+JqZ39?5Haab>Tn-@PZpa$P2Mi@{}sBpyCa} zt}Fch{XsQ#joL90diItgrzY$UuJawc_pyK2Av4^9*#h{N!*5L{;6P)3YG1-KI!VB= zLrx0^Mt(`{ykUP}=g#fhkyZ>2u2?ZRv^@AH_uc=KpWJufL#5xo@y31oZoFZ?gak(B&%s#i{yd4K8g6!WC2l_fO|{q{WjNPpGV=0D2sS7UFl$M-D^ zk@eD2VPa|liJ-7BWHz9I&`$A|rUuaR3+f<7HAAP#3_H;jH5}2Lpe?`wT0pz_Gj%)G z)qlM(W!09>CHJ&f_API#LkkPes#~$C(#@9+)i2*rQef|IYrNdExVf^f-=1$<)mt@8 z!aV_*J%c|uf_nsmIX_v<>tO>c+TgfD?z*&6-&CqTOU=S?%ySkR3kfgzbcAXpCI!5e zz(0IejIeF0_TA5yI^lXg%40#?z`>a za~R6PyaU&zRyX^$4=?Umv9hgWCE!c=9tHU77<5$uQf!xrOcQ?l#||+AXv>UPeB8vd zTKTiS`|5ay?_BX@(eX)fDM|t_T^J{`oHr)e^ur3y5Jq@_%49%2a!Vl@$FzBhNMIWa z%=s2`PJTc@J)Bu!?e-s8(i95x3Jk9ertE}xCx5H?{O#M%Z>sUsoIN#lc8$mPhk?Gn z0ZM$$Pk;JTJ~&*vZ0*`*bt_`yhbjif#s(^e;z!!r>b%X(UZ3gmy?Za0c#LsNn;W-i z=vK?gCfYDam~BD8EWf3_>YQ-FakH3b?NiI{AIcF@3w2-dE{8_8?KBQ~pg1WupOXHc zmwtD#!{OlTdW#hLzZ5V13;jww1^rjGlji7uB1^PbXX(Fx)eoez|MG46(be^pCClxG zqRnN4W9NO#?Jiz&X`|bnmTAk(>S^oP3#|k6r4jZ+|G>BNi1r&ZLHqMS%m&jNOjHEiVXJQ(&nClt_D}fvbx%$rFKK% zCfADbMb4}HtIGOIvWz8}sm(RsMps8|X*HUhk-cnj*)m!NfCrV}pRy$UBS>R47;rubuBP2v=#&`1sAMxm5w)*PURbhR(JIGHceC&^DBLKrS}$n z;8|T=GvdZ!Z^d9s)6jCh$L0Gx6RbJlQ3raGF6l`wtpl+!Uuhl4P0PtP(mH^ko+qsX zssaZox&^KSileICYs$*Us?WZt=FC3Z`a;8S_o|JF8yf0{mNwZs3RbqwtpwZeT1E}O z^ZK-^7Fr3~R~9U`V<`as_06=4AW0KWS_>p3F?#dYf8Gv zlw&O*UN9M4jGfkkN66}TGABdWh{*}Y}U?iO!pZP~hp zhIM7NrM|xnb#x3-`q#>pgM&zXU`6fHb?cVaVp&*LUbdvTcu86LviQ;V_F83OXl-b0 zZEb95mAKs~3@|E5!;GXg9czQ?z4qj_0ZJs;uc>FI((71WI+^9c>zLI%-?kA72w>8o zIvZf+9_uF@@@V^ti)(iDD8pF2+>UXq87;-=I@=3Ywl-l%`3Lvhuh-~>g55L>xbMP=IZ=N~M z>*a6YGJfac`G_oUk-wdI-Yb7w`ed5=z?1$&K=V zThHKNclY3659WX$MklN%OtX8T^@KzVkZ93<;_q!Qwl$Kvu)Z}%irleP=4-7kU3vD^ZMU`k@PG!9%;}vIKX-#HQo*}ulwZv*M zX4}xpD!auQPV~}`V_&k5@E=Jmyn4V^4UCS{%|~j=pM0U@$vt~YmM(=S3EzJ{O>pqz zZ7R*;WJGx-4liI20Z$Dwh~eB`LY>OW4iDs5t{UL*PTpIQ5`)|-Ct&xWZ||+iS)7u* zs4U-Mx0YLSIR82JIALvzs@pS?^K8X=IrhSTlw6vD;X&X1^CtY# zeKZ-;(RLt>fPZ6k3o*NKkeUNu@LW-=Nlu2Mra9S^nGPEnQo{)3QD=7+{skp5Kpe{> zTe}vu53OvobfhGgmpQ5EK_&*h=5i>f=;t=+l>qiP#irpYk>-kzIlv*+Xz zZ>XFx5gpJm=xeHb3iKD9p~$kB&vUDY1_$tVp87=9<8Sfr7y7=zw*w#jbi)9tN`bVg zRo4$XQO3w&C#7sE0>NQ6CneElBG;N^O3Kd9mwol)?};0VK(A@B{tZP*eotFlPo5>y z+|kg`Va`0OsHm`@xTtUx|6VS&daA2EIi9d^SGKFN(v|HF`yO<`ELKbv-;dhxPZ?7` zjZ?=oa&AAN5V-Wfu~hdLbJzwouTwu?XiP22m_o28T^lP)i@LJV00)lg=jw1S^2p(= zzz73Pb0LJb^1J2@CynnB8crHk^b54x$`kp3cm^lfSW964A95cP5AhVK!bxL3%u_gQ z1i^VKl~M;exkH; z+~#13_f4pOseGSSEBRbA3u`>jME$+;Io9k2>ih2+@FrSeN~#I*kkYEBOKm3 z-)7fx7s@0NbBNFPQ$9Q&Grky7HW>F3J%KMm?ixU54;$i-@JAq*K&(Mo9{!M+G=gKC zMCcU5j+_*D=2<`KOs_Aom-IPpeGYq{eW;|zUfk;_>2cV4i2k9=4fuO4_C^|LmSA^8 z4I$1A`y$X4^2n^jKaf&p=|4ni6q@x;zwg-r6h&WV_Ool*fD#80%RFl)r(m)kh0{PB zVgt3Ul!RV6B!j;;Da~ls$b2{mi=$j#NsU%U z)g}Jap8%rY$^QrBKYyP4i{q;L`|lR< z$KM~MW>I}J9kVbBtZxoT$r|kc=hYVn146ws4g*+ija$sG=d1!5WQ+L*+PL8pdJ(V6g~~1R3e%LyqhlpmMAJi;j`5 z#i-@bA(F}M1bm&ayq8IXOi{6+F4M@%CHIu@xBljM z82=o9bKH-AzPJANH;JFX3po}_JXb%Xs-Pyp9&jHZ0HN_ff@=^9C5;&wVy9t8fIO0r zVlmQ4?PEGxhm?_2a)aQf1V_v1>FLIFV{Eb|k35u=;?!=TjRD1`G3f!ypCp?z%%-|B z$5?Sn!H&wlaquvBeirtzN2xgDd0wywnHj68?~9K$#AiSlNX5gp?HsG2om8^OG^O( zM2HOVR-`jM-hb8FBvVFFNszE4o6{|(y3+C0ICrR|(Leq`U!A2QKcle46B%3BU^C{H z=fQduEd~fd3mf?Tv>t*Ml1xa0zlU+f+~W7My%Lwm*Fxc$l$mGfMkrVG-xoH#?a`?#kn z7Q~IdjnmzkUrCo08fLvuH`buiD}}zH3m|YP=5PFcI@Vx-Yj+)gub`knzCX!+&7R~r zDDs80aS}u*ryJjM;_R@6U`PAGIFNIBR0a)NjgaTbg6#}AML`S6zdVFKS=QKuEJV>r zDS(?C$Y3CS2VQ3*ObyuSLFm0y%qN+^PB|}>BOV;3 zsExzx*(^INKg$xUDDo1n5jRX*RcaTVB&eJlH9gV5QBfO3H?(dJr5s3^d5_H_n932Y2i^ zs5!%N?5`xSrZMk;4;!k7RuOgWkS8s2e!;AcXg9@HFc6cB^f1+M(4mPz1)NR5&PgX; z!l@h1Z0WpNo}ZF8JL;PLyB^P?LPt@NqpFKwpqo;qpapSM2p<#-5P4Ff2g#TSV z-Zfz4FoZCOp#{ez-&=$lex$yI3h=*tm$8pE@9|9FntxqA1)d^yQG({Zk0pxYn|P0Z ze7f)Pk7wU&V;_si(|NBH-)rNCl^5mr{;hVlu@Ct&ZvOKADc_6!(B+c!$p4-Ys~7xT z$(Hdg@Jp4Ay)V(LarQ%5&W8LknNLDf4MeBN2fR?8{S5g!j4u@2Yz3v5U*6q zh*u%C*y3U80WI~{_8ZcT@i9WI81P!F(~=XciLyS$hm4E~EqNjO3{DDQeIw6p{k%}z ziM)__a*i4Le~YK$tbXQl;nKLkZB%;8W1~P{U|}M_^oHo9ojRHKB(FK?H4+ zEeO_$6(Oa-f?+;om!YD=|C-iaSUNZ{F<4sEotk86uyie3+6BMe6{*>pO;ZsUjj!Dk zv3ZloN|R2zSFBG1`^Q<)%!P=h;$r!T5|W;kiFoNbR&!!pNU$EU;Ughj(6lAQM@MOS zvuZ+zQ2|Ar!n!dVOc?bLQ$-Pqy|6hT8@q)cLz@hM&S!b?F&P$l0uigYOOPX~#(Sk* zj>6i2Z-kFw`a^^JPmEv@MmBfanGd^pXMR>?NsFW5+@X9AG?vOe_0cgj(Bf(uPmFY) zGwj@$^Wv@h;~rT4jj3A(#l|hchHu>&9)lrAE5MhO&m0r!;0`jOso3Fd%}4-7W*Xw7 zBZ3gNHcG+CG_vf{h}Lv4JS~y%2GNWKMRqs9hXQsMMx(LBSX@w?M;Iza8hUKlq!xtI zAEF%4esCyGlW9#Le5LLqjxA41OLphF>U#4#Gd($_E+?d5nVtE)b*^0ZB}?q~B@T!D z%eQnF6m%OsxgK|VN?C4c!@xj&S#DWMx*J)(TV2cC?qx3JFUHo1`DVn}mavW9*bHdG zWoLy1Yca&o*5`8wtp&F^g)zhe4Aw+LZZTyH)44&-gyReCZbFv}Pc9+P2tuqe>6Vx{ zc{-}%=}9)Ap4pkIOjKzuDvVznE^9cmD8;j(wtuCqsitGN)-zgDx@dh)%D`E@t8gIN zI#e||5wdAgV=J(iP;Mo#dy96sOMvg1o%0O%6h=`Eo;9)_dzoSf9u zocx^pyxe)-mnm)nKRxfudMvua-CmX0H8C`?$| z=@EkaNippMf!+pOU`cxCDr<^$YuWk>Vy7mAn3#&)y{>XYeu{OKy=!&U0}l)S$b%WT z5P{BfUcAd;jEyxq&bb(2Q1gn{uf@;oXvZsP2WQ1I%_1Li$zFqZ2D4_7Ut})}k38>^v8*c# z3vK1$qvu>4m35_f#_6c=+I>aWLkqYHawx>djlAoYa0sbS~A4rCJuTVemx*OH{VmaWXaxr*4oR2KtW_ ztH}Hq&=*Z%t*w=BSHZUE=C>;n+Kc)7?qzkpcW|in0I61fIyO)O>c?3bXhS||LpJDs zG6=m^1E)_X2EYALbgCZHi+q{hjS#th+c~ePgO+Hh|pMb z4u(Rye}zuk7p`ZeZWHf%%{Zzq;`VWKO72MUh8;ULG<4p8uxC%jrD+1zak~YGa_bdW ze9!nt!g-917h@B{O1y>8mcV=mXF(VbJwrHmSWBzZtdl=P_JZ=78c{O~>Q@9)Yzv$S zjK;G>y6^YAq22dH)x<;<_qIcO&I|*chj^Xu5O1;L_Ho$iC_YhfG9%-+nplgs5#WTa z02JPJp#Y~YXgrK-!|99(?n-B4;!5E?ZL)w9rtB;uZasO zC{55)ilIaIQc<}4J6+Y(o~lFmSCCUPQQWsImJcqfsMuIhQE~pN_2m;AC(0*$4}|6x zQF{QlWZJBSD9+<9$QUzm2GK5nRx61-%GyFKH(|bLwzrDXZYE^_x{F%xqWx&6qY*`Pg;Q| z$;|7m3g*EfXU-JltGf;WkN@nrW88l1_%mYBF*FC=T`}`dE%|69 zPfp#u&l}OyD8hup4zE)OisoT>B@EaU8mh)+jS7LhA#xRqj701t zy4NATL%XEe0PHA1_ ziSS%$b2-|a2njSKQ6Q0URE8BLXk1G(9)c;bBB7!BVVI^!>I2u|P%KMB93_NuMx0^! zFC6}y<0K87opLmmB$mpNz7I^MyB~T;Htp!9v(MRZ+jj?+-g7fA9=Bg}jeXp~M>ein zvB}ZVwjXWcpfF6-$+-s`g9z;P0Rv)Puu5T=VHOK^9bj;jBJ?BOWr?~Uxg$2M=i>t@ zxe3>`T%BI!zT%A^YJ6w&^OL^yhA0wOWY;@-#=?Rv#`ljFnLJlwvg14cH9|(QfB;*I zz$OYSCRc`81}t!8h>26y1bCSOs{j{mrwxF3PANcxE%)WHL&Um7I;^XMO~Q{1G8{WTgBv4b*Ez*79L2MJsf zF|t0(wR)8+Yhq1Ae`i)z%`*40n#!zBg%*O1RcPUdBKkOzq=%qcXycH?lWOmx1kOS@ zxDuvU5Cq;upuYr91>iHo@bzCUNVHne^amM!SyfZe)p`V*C zhc08e!YIfRhctO9j#WR!_{A`TC!o;mBx}`5X>=G1lPy<7t)#pGB<`~@385q_`GK@lVr9&D29af_tDa&pbKT} zCiLZ6`8`;M5Z4BBz{WAo5IOXdx*DW20NP@CC^A<&cAR8W%lVv2mmZn7KDFJVSKWh&G_CgE4JPA>1@U>u}CJv%# zk}#A#eYo@}<|Fl;sr81!wklY!0V`Rc)*XYLpi=+!zHxZNHauc~r0n_|d|A}J1>S}G zGQtD-EqWK<8|T-fd3d$#hU?27vHNb5ug<IhGjd=q~>$379=9-$78_CO8QDe+TwN>U!*^cYbj+xS?u)xSn-&-G%gUPS zH`U~t|7%mN$>=-c_HM}8>}|iG%aAyhHI}oXs^fwV>)H&VF;z|0x|SKMDktkp`m=nO z!<`mnPuGe({$23)WJw+RlU#FJ5_XZW;gc&h#@TNwNoyH)usS+SqRlPL?2M|m9GdOq z?=&=2m>Uxl8_gB7cfWThCb~1s&_v@#{K=3%`FGpP%Gz`B&wqWx>TsAH7K?+D+2Mei z56$KCao+Sg))%tP3sz_+eV8J90Hevq4=XHxy#PuI9fbvUTW>qI(6)->&vtaV?d77P zqg$!xf7?FsfBSo7us?uh3swRD8bd+{Bw?)ZT?P$;W0z{Gk3FS112FwRwe{4^ltHfY zDJ)F=-{K|>MgyyLlkZQC>xVDA{8RDiu{!>|(>J7pu``F^ z4kY$cD5UzLAa#;t(ojqDKa!Rcs*7e=-OI;{tU8{>n_^;N-vigaH0=mkzoHeWU{y1J z6RF~J%z+%xzKkSLR>FUE0!Udmh1DarlDwhLmko2*Wy>$v&^T4&-Bi1^JmK)|yR)aHq{k^f?|tE}+ivupJuvX~n&tb>DGoYbP`a_bc15vsthr&-393>F-K155 z^q-=j>yg8pY{*Nr1*}bw9;8mobQ-O09h?f0a{~>Co=}X4)8K86f+srU++2#F zt3?3eTm*qs4C<8Fx!NdgWNtWCVb}s281+cy#ARpH*?g*e9$x}gtmAJD4Rv-64Rw{e zaoX*6d-$Hg!LBYO`cdj~l}cqT--=BeNuzw@CekSH=^YsC@!dN~8Tf;&fgY)34!qD) zzqNm!*Y6tE&ZfK@)xL+&$&MCVCXJTjrXdnBLYV~iJ|-+$L%sx}^pP3~0k7BP@;Db)Xd9hDr@iy&*?gh16ZPVRjV&Pe6M* zELm6ua-42#)=ddHrf)VKdcSS)UmkCMsyj74E;2kUI65|1pA;64=y~DcVIgs_#!m^m zKCL(r|MMeP9Krt=S0%>AMh0ng2>BfzuMalF#zx_nUayZxKoIbjmJ3>1&{yZo2F*I0 z!+KdKTk0J!#)_a&$fLjnVRN(#YEnU1or8n;dZvfeUmr3G9!UzwaBL!DBZP)Z`EzDy zM{O-*wVkz#TbfW?O{~>wiMLp+RyqdI%AV3hq5h$R5TyIpLb+T+XG)_UkIg3ukg+*Y zQursAEX0>SzHaJ?GtYZqdF3*@r;>}LE=NtTdv%SyC6tG|ZJMmC%$kD5H-2sX_g4?y zv31}AQ**%&r*w<+7C9a5xs`?cH$1uPf@dZ-et-G+E>8*cmzMX|?`X4GT72)tMP;WI zZ&c%E8N9R-CW}xFI!YoHR7&mr17nQOz|@4U1i{SuauqTjn3jiTU?Z$ zWB>_)qX3l}n`x(`YG4tO!D$48!)QgxT=_vqqgnHcX&~2!;O)fl%B22KP+H*0wc@K8 zNd+d-yoU}Afs!VZ!ucqKNN*sR=^;Q+^f8DeL2j56pKX^skW7H*6+r)|HjDi=7_{h(xp;~kQsDuI#b>}uh8#%eZZn61Q0!U9E|T~JVwQWIz!snDC1FDUfeKoe1C zAXG$=96~ySfgedvi5~C&+Tx^wj*`l{BF{iyV@6Ws+WumAIc{mJsx6?LGcr?wi?x|4 zj+&nRwT7&s&SCO;Tvb+BnOcyyWRa=Pkcm8VddZ^7^1_O=!h*gEo6%BWDa$H^`->8D zS#}|C%rWyXaUAn93KG(Cwo>x!eI9pSF2w8TDL{dp4~#dZrO7%5!Mh%lo7Oe#S_g4~ zc{F*=<6TB0MfNb38_S&bq5`WqIx{*WDG?P%TFGZ9G504<&uWr;Spf>_c%oA!Q~tv) zqRyC>(8Vxu*Y{Sfylrgkdn;GoHac`gU*8o&Ls$0oT{$$capQ`-uCxSWWmbJ_YkgLw zF#+a9L94ze%hKOfxl68Gx|9mz?~=9CW24jQDFrD>u$&r7!c98SQtdoAIN)Pvy@bTD zg9qWj0V`S%lom9*aHhxLHV^>OGYIxWpvD;tzofxI>)>~XHZ{2TcQr02!K0$gxyZGs zh>rTu(Eyl4s4$r`?N^wV6M2}JFjMMRD->MYTMXvMm&hr%CD8A)z_%7$$9KPk; z^T~(4SNQF|*9q2w?tTH zEiEYUP+K@#4ZXG-(LaA&IOPZn%7b`{BLb-u1f95;)l~;IXB@kf+8OYUo+M8v>K{|% zp;otmJS7elX=G(pReT%o^xc2_xAYh7h-bI+9GoeKF{yz(E3!pMAW&)?t&zAEPv^u~ zQcerVlc3;%ty@dBZWTY@k?Y&ZFU;M6qG;#WXFlQ&0?z4@N6yI(As$%^twKm?X4y$S z06I6(G=45Afd@HVromEYQAtI4ye>5(Atxy#qtu+$oDiFo99iqS#B1E}*Tr3ntSuLG zq=Y?WwI(Lzq-FBkw{$0F*%#eLu=V#Tj^SK+At@tPq>y2G45X#r!Dp-#($OCZsjNt% zNz6DaVx*qRzAC-_L+*|px%i{>7qm>%f&Qjqw;ud}DGjH_)L%cIBqn4*&of@iLzLA% zjub7WP(-IE2w ztptax_)J1rPtcQK9k}CQ@H`s$jiRjqyh>pem%+{C$ylm4|Kx&nG#@W_5-O9V9-|?e zaCUZLB6LeFFoiTFW+ft)Fe#Lic?230Y9_i9xNE?HT8uoOb*f=jBnD_O!!=bM9kq3f z7uWe-tg!iNE9~Ou1^M~;g@ySS@~Am)M!x?LL&s~x(&OJ3Pv&_X&eBq+z0@~EdWOIO z2fGYB?lfe3S#qXBC7Ul&lw;qc}XG|48BbhFHJSwW@e6d>@H*Ge_ZTkLt6? z9>G!&JO_h9A=-(!bojNHSdLkV77&>9>3tuyx8L60F79n@ZIykRsT1QfSHaJ`h8bl| zI4_}!sJ{?g&)SI)Xh_(8sJk0M3*k2CRbibuAASHeEK|M*mj;~e2LH@S=haWOD^@cZX|tZH=a!^n*Z`GwD;WNvBh``55!F7>^pjvF5ilk z-NYy9y@0-I@TLLj@oc--f<)h?I$$p(v@<`DbT+`=02-6ZS4kSN)m$yKkD;vZ2>SOi z+Bl0dq$>!Vp_Zzjl%8GuZN*8_(dwBUgXcb zB>s%4X*i9wZ~?1v<%6^2eBMg#?@Gd2hm*(;?KgRR9CDyJJy^=w=M=}sMMN0l(~Xgq{6bfJd~B?+rpKqphR244M}+6bSkeutF_DT*gphOc0XeVq zEMK-FQ^7Tb;!H0wzaxg6nUNd}V-^_z^{qozwp>ZeclPCGf0r)F1s2S-p4_BcCFjA9V# z&__g`5Vl~o7yBOI>l^69P4FBM!yK{?IZe>qn{{76n_mf- z9rTUYXO_?SX7-*wT?$g^((QB-i1*psGd>=1`tMuR_unol!TSODru(rx>--W-lDMw1 z%pBEh!Z)#2lNSR5{erv+9k>VZC7Mkw5Y)+eR;Mw|T&3B9I!L7mL_{_(sL&soecM5(&;aJtkzrZ$`2B6<5nPCK*j17k7YWWG!x)*9Q{*xvMn{X|(J_gk!D0H4P;d^W^tgm@ePjsD*F$LA zK^3?2y*cydt7ILp4OoD8pb15M!;v-B&7C9FO%l=f1J7U3gaP070532$3cfAOGx!ls zsH(5T{A35>+nx<^gl}^#q9GmuIIN#sVl$@c zHH|Gr^|qvR6V=5g#3J?>;x5nf9jCXBsuopbUjCTEcI1i={cHzu7n7nMc7k7-pNX5} zXP#Jyp8?0RmFIsI{*>fnLS;_@yJOft-F;g7wKxpvxq_L^~^)_2eD zHL*9FVeE%9ccGVG%HxqL;clz7|1QF*-NMCwD2|-YdvVHp;>ZEK=LEj&2OW)I(3Ac$ z*q#K}v_yid<}#v;MMNuAxPHd|DeKJjT22q9C&QEIujb)d+FJ~p$XR$IvO*!g1iSK? ze~4zdd;TTVYo7Gyv2eiMNN^WVD0%2-BkXTO|8Mb_{$u%*dCa#@o5w`|=lb>dY+p0P zIvz>#7(~2QVZx@MVReY)Du~$UhtupF6p#4xSi2uT#bdL1vvXY>p3T$2{`h(Dwi@yB zY#vNoFn9ipyr=wmIISCi4eC?Kd)l9exvOQbk=#QZQu09aUl3WK(d5e~io6Vl!zzwP zkkC)e?vWs)Ae%_qv}#rZg@mSCt0j#93!P;d3W!zF2Cxd}6^^#~J}D?Ncq|r=p{Q`1 zxNPq~=Lq=xZ$dv9-$cATd{f;c?}iXtV0Sk6QSA5SM3&@gU-pJ*6ED#o2gqHCOO!M2b@ zgwPVhZilqQWViy2wu_E1Wf2Wo{V!YwTbz`X6ibS^2+K5WaZbHV2lfF=c6?;`?2?_B z7#(xzye>t@#0Bd@^r6b~9TOX-4-c81>!csP*-{q-@q8_2MDo<(tPo)Ki&6kloVnr* zO|RDtk_sT1S?Tm$O1yFl?7(6z(w<6TmofzH$5gROv7iG(lRr4B*vK8J)g{#wYBcxV-gi66z2%+da z<^sYP*lLg)+IR|l0UtZCzhvYh0Rl(|jUj==I?9 zdpArdpD!h&$Jy_Hg7L8a@6ai0isdWODV@nrsM52Py+uMGp_1J~6jGv8A)#S7mQ9O| z3(<#%ZVT+Fe|-N5T9wPbI<11Q->*umu$4UxVnxk=%1^CI{5RLnZ#(w!pjU*Op|qn8 zq*qu|O%w^w^+MpWuN)p<$qEI*nepi!9|XKzDG45J1qlW;Ghj zHQis8nBg43Ps{>tRbr-jK@u@PG0Tkoo@^oQ4G1Y}4~E`yHiB@}PK>`2))0e)fuc?aTOG|394aQ2#4v->K3^Y&jNS zoxs(f*vB|Gmucor_VLVzNH62JP*X3ieaQPSTy3~gnRjuo!SyX(I`a=o;Qg1&lz{r% zagXas>F;V@1~dj*P!37_9&kxiu5^E5(mWQB_X+y-|AB<|dcjOBmx1*denp~R|4T`; zlzAzMD%c;t$?T^}cy1T)J1?(vuO_Vx_mTgjse~_L!J-!5I90N=`VNomiiubQZUXIbdq{|A!hn`j4cK}~kvM|SBlHRIZdREpGs5<{#UX%A8>QZ-U3(f~NN zDmBlg=3Ry>C4c#)xNk(NL|Thfht!8e&nw|8*NQZZl!s(S%0+S_J{pn`F>}K!<|9~&Le=r+A6W>vj zzb$GT7#jn>_B)ktdk$CpL!I?VtC5P3XbhZ4loy3mjMR%%rvA3$O3&nT?Y(S;nongD zkmxzxqh9PrhS=3e^e!bDXaD`FuJpeDnHKjYNaqvYN!+7nz(eHeBpwd2D$Vt*GAKvl zl0#gD{mgY}{}sT~a#$;evqDV?bI5cl;5iA6(Bo`1CD8tO)bn+^La^r0=3;#ug5Dm+ zMUD^ieFRB!9b>*%aqUCOM8c_%?}(aSz;8Y7UqX5v_eNY%)<^kXB%D~z)Z;hRL%-qO z-}i>{oXX30kU#sKU!n|sCl7f?)U?ny4&j;n25@FV;!Pn0hlPmNQ3(7gWc!iMMcOS> zZD1aF#X=U2)TmxFaGg@$ZO1+8k+_I@5S0~m(YMt9j`--mmrnf6=--t3-_7g*dk8*W zUt>qu`|LBAp+`eFRmjVD1MlW5;JJF5pT{pl#L0I>rMN--KztxR*EDG^(d^gUs!h_~ zs=Y`1u=aiJv7ox3&Y*#yH9=EByMpcsdN}CWpkL@bx<_@->0Z@7~WrXF2RfIK# zO^4kUc5m40VMoJ02>U!-7akj)5xyjREPPA&&hSIw&xgMrel+}pa9>1dL}EmCL~%q# zM0dp6h^-O3A})yxjZBQpjx3I>h-`}Nja(VIA@aP){gEF;^+v6X+7NYK)c&XgQ6EKH zqsOA}js7%7#6-rV#8_h-G1W0`F}KFt6LUD`)tGlUE@baUsgPP#qP_xIqQRLbN0>I2eKc^KAin( z_V2RaGZ{^5O+f=mIkue2oR*wR za`xxknsZOi!#U6Ayqbxa+2l6BHQ}V6(mHEB->+|0(C@wg!;MIc93w4FDg&BqUg`UE?!p_2*3hyj@qVUDS zqeVN5_7v?ay1D2;(WAw#;yuM5maH!MsKjTBwx!u}ZCh+RZF_9{Y&Y8u*dDSSw!Lc4 zwY%(Idxw37>4!9n29d^CuI^ufY^_g4i zj&`THbKNet*WKYBa=+*P*mINT&eGu0_)=r3tMmt@M@xNW8D#@yJIih@d%Ij$-c){F z`O6jA6}u{Kt?(^cw&?6d*DZRxQdikfc~j+URo1EttA0=&UOiboUA?pV!s^Sa_f_9e zeOvW`>Vwsf*63;qYbI+B)qLo!^!~v6T&=bCs@hv?pR4^%U3Fb&-O9SDx?Od9>u##M zr|wYQ%XM$peNgACkF3wAFRrhy@2+26zoq`X`bXil;2d@w4!Oc>8a+}W>51#^K|o7&G$4v-~4WiXvt`?wiLHiv^2FWYnf^} zyXB&mt6CmzdAk*kO#=SwZG91uLmqDTv_INm?pWXP++xq-t&5-SjO=XdysGO!x30Up z`@-($dQy5;_DuDh*K?rf(VjPYV|%N6$9m81y`uM?-WU5=Ut8bazI*$QEooaawd9T^ zZ!h_{Kfb@Xe^>vZfr^16gKThM@WY|=hVEIKz4VS{j%6#B-MZ}2W$!MJUf#WY&+?a7 z^sYE_#Z@aFUU6i_vEh_q*YLpb8S66>H5;{^i(lD}eWO`)($ib0cjQG}6uGz6>-;resKKI_;cgG82{bc#I;M- zKD#b^UFW)8>yE51T)%$(4<^zk&Yrk!;x`-WHe5}TBTX21qEIAQDl;>4vrDmBTpE!G zTLF?#rE!V^p!~yHtKM_yanz~za4ij|tx6dUWVgNQy%sumo7DRtoMXcRPFACX^!`%y zKA45G>(%=Z+<#xa4};w9$Lf7J?q5{zBiI$#cPaHmvJ`#>Nkg?zSYa3PZ>jg3Ws5lV zUa&|({!*xnhIvH2dap&9v()<_$i_%_lgjA8M?aw62ZOKvm3kk7dy1<-Wx~L(kfRg2 z5669}dLO}!nhEtjlDV|sRPUo%BGku~@-Zw_`^);xTh7`#v2Oh|LP6U-#wF{=jh$yq zO-ye#c5mIhVSIGjSbN6w`psLn8FNQBPfd@EPJ6eFOl{k|E@vYk?HcuJlJ13UL!znzg9UIxSE%1K*^z@dB zl9KJ)w-?WE$|)Z#SwFGO*o5XA`!=tg-afK*+=z_HiP7^}f~) zW7n4PDW!0SQlQZ2Z>GK2UJMY;y-U@MoH;TvIkIMQ+_-&WdcASP*i_qN9GR{#s?FIp zx^-g9G&J5OCW|+3U02f8)N$%3tR7lcTi97_E1Q7&%6c}X&! zEVT(o`15P;Q_I2$-)x(D@y0rQWfIS}qJ70^A+>Q4g#Yc(T<*kOU@iVSiUR5gd~Sru zQfX1(R|fDE>cNC;J;A~MoxpefZwA(_yg8-5SBtI82&VrwxXPv)PtGSePXq21Fl8-a z+vR`7UkIhI{sxWR1nM-hCUrEZ*PGc|e0jTsBaN(5ViMO;IV#)mcMSP7-ea=$MwC~u zpbr6lJMgRvEvFF-teM7Yu7*N9I}w_8K$DV!RSSLB-xDtM@1H8NNe#gJ{P9Pr4;m{nO`p+q5 z9su$z@DJ+^soe`uL^Jz2&ReuNN!F3MJ^ZwX@K7Gc!+8XcWNUa7yBoWc7#_>x*eKkX z-@~rp36R)Xu|J$)V~C_=;7PFBOlJR$s7$Fm4IU3OF!jcHCiXO0JexhoP29{a+{$x! zE_kdUYrPk-`+SL4vX^-k z`*WU>sb+RV8y(VmGCAGNepl0ZHWHZ0eQ?(?D9Jy3F*R)ss|Ao`}h*x zkI0dOKs*O~l@GE1Kpe+qd^z@8!+a%M$5-*ye1!dyui>M7jF0oRd>wXT6MO^T$S3(G zKEsdLg;5YCa`AzWbvj{SbKSP@F2)~8j%D=~NVC@SpML_|Mr^{ycwyzsO(WFY{N}HvTIA z5B4?w3;s*~8vhl4o&TEuhW{4Rw2l3fzro++zvFK~PT3AO6-W4g@}ofeU$bfcU+hds zcDM6)_`Cd%>U=QUDMCc32xDi9a1kLQ5g9yM z#E4iCC*nndNE8N<#BPB^?;MdLQbiiO59H|sEIIv%d7FWluSSt2vV{p!JF~E`cc7PX zOyr1Mkq5uX1?-z_5WZcDM6oD=FIu~BupzcfIN5o^#m*OQ=;e7tsVEb0UnCY`H(w>H zMUC)^T2UwJMFU&PmWf8uB${y+v7D`7?~7K%(r6RyqC+eeouUi&h~4auqDS9-v zArFj&JnV;TC8SZ+%nPnB931KW;!bfF&Up@qyAfaFPIibr&Yoch*#qoB_7iqk+#`M@ z?iKfm`^AsNL3SZ{$;V*9_MrF)yMz5hJS2W99u|*?N5x~}ka%1?A)aL4fL`8y@w7P1 zBH3Trhmg$}*|%60%VghX``Fdsh)39M@PU05yFolFeun4~*RtE;|KS=I%${XG6+dSt z7Q*(hi@;M~f+*&@VRZ8zy8s@4pAs*K7g?=%NxUpx5wD8>5Wf(=6t9V2iPy!i#c#xK z#T(*H@jLOBcw78l91;I1j*9;he-Q78cf}vYd*Z*vpTwWV`{FN<0R2^bDE=ls5`PyT zi%-O-;veEO@lWx&_?I{aFAY91104sbP_fI|o9sVvQt}(N7jn#c_IvgQ-d@Dda%Rx#@a^ZTIW%( zHudUIuP)_U>%Z2kzt!@!W$N!*y4oBz_5E7^Rn~)ihrV{x$mrJ1Q~KJ?>o!k~Zw#&7 zIx)3wWb};baeZy0a+OW8m4(%hPHY`LW7FEn@g1S{W1GRAgQcC8U$ED^bPb~;s0f#> zn@41>z0sz&%O?9{v)8+Ijk24%Mp;;CokMM{T`gUw_P$>2O}*OcdbRiUve#(6E3|Q5 zGwh9ZYE^aqj(hZtY6oR6>}r*Em%dTyumY&MdR?<@QCRa_C&QbuzQ>RZ*Owkl22wN6h=j*W-4 z&D9*<9?&ESJ$rqru0xKKu0!@9yd$89wgatJn&XsR#~7&XaH`*TDY#&-uhn%b^>ixr zbOzL;RN<0P>xn#QSh>gVg!XJxvs+1}b48`LptP`}ooj$MOVMT62Bhk_wCheI7O zr+=(fT&Qmh>cWO_O8H2G+U7=oZEC3o6{d~0h_3Z#0Drfhv1xMT4B2x)wo%^|hy-r+ zZMXcE4bv^GYun_=w)Fw%?ow-ZDVXbU)a!Z`==3Vk={*5DHiunpx?Amv-T#?JU0*=W z9u)!}Pgq~T!1kR`pS{te*5^^{@u;9ISDIumYtk+O0_v8?1}USVlto)qKzY<|cp7#6 zv!jE@Y8x8;S5Hv?9F!Z?4>hR`X!Ju}t*o&zqW@$lV`}vWLb=|tP(RTWUBAR; zWgtt-bb}HmVS{rp2pJrk7~eX+ZDN~laNX9CGsnZ0&OKD#D^mx$$)#H=izwMmDmFP) zP&Jk5mdWZvmz^+c%N^0J^2w^U;>pdUlbsz6x{+DP02P{)8tY2ct6jZ1)vKGXm_=$s zYUOXd*PuMFRo|;ESAWat0UVU|0MGr;)p`-lOrg+D{fG*^5tR~;%u(Wz@c;y}m4}Va z!6kHbwuid0Sxf-wRU7pGbarjsZ5>ruvM$!ex7=K)N_*53n_wNOx>%Ccx`};`B$K*; z<0K%plopG1_&laQBovRAnWvpyU)v{zIz5him|?2wvIb zG3Zu-DXA?`Q05n^!6Ro?z@~Ip25m8LG>mRVtyNVit_-5BgjK5JM^8qVcAY!AMa)vw z_=v0Vk(1V$O0g8YBNOh<(D(2iryAdp)%f0UP-fnOTHtCvc+XvpRTkw`h^nRFeHI_N ze`+I_a#L*{dH20xHBNQA=}Z*YF5E#C=3p@%<7?b<)kT;^H<57@IX97a2rA!9OxZ)1 zoKY0>AuCmO_lR59a>+enIs{dFCMN7b2wh{@6CxyI)aLLxT+li+9pV(BP6)}SjtM3r zd{!`=93C4?M{QnciLVY%y=Z$FbI#gaX+Chhy}fHoN*-Y8oN0ydT)@-E2^@C1TTF%T zw+=c?G6VI84)4gG$l)y%Lmmuob&d`cYJVX6Lf!UV?uvBr$g?M5i(bx`jC*aRh)lu7 zneQQJc?Y27Qywkn7h1l>pymC8mTv=SIS;c)4v9zy^N|kblR6km9n8o&2+6nKn5((p|zq(N6>V^X(7jAVAaV&}d(%1P zbS_;C^KQn`u@UAfMu=vD#~kN#f_hT+4qJd;xo|o4FqBi40B-! zWz(|-GMMTwxtiLvyDdc&nV4{#mZamko7Hp^SvO(1iGrJ0W@5sLgnMkBiL)nS;vTQM zh)l*!NaY-Ytjwr%c5sCq+y>?C5dG@9AzzqCXD!Y|w48}(7dR5&8*0d!6(+*G-V{0+ z#&iMU%eZjbg-b4+QyA6X;U_%cCp_RMoSTwM!}3|Rt0R57qjb6>=k8#gr#nu_VC|S*Wap%`Ixv= zZ)|D3n>8^qWB(DKoZ#8q)Hh=BxbW14$I{F6xsX=FObV|dw8mCaj2K!|6OYz}fA+28 zOWuf8*{q0Qr4|>ynfm(MwYVOS^=g{HN1MjQQaz@L1wsq;y4IK6c2itJm!dS0rtvg! zK3c13u%>5gBC=L%phu&z2%!R@LL=6|_d&&kH&L(a!n0Ou)$2*&Gqj2({4+Kz3s`G4 z5ztK$)J^zN7v4rv_zfL)Y0Z9M!_;VmERIPF=%?^CDx1PL7ssHb^|T%o^wWVEIC-ts zSc}=~^_pIf*EO+py@s(Exu*0dMZgfFR^k}%b8)1CAazqm#C6jaBO6=7y9p~qU@j>} z4UJ62D~q4|JsV(wu}h6Qu{6qTYREVqje4w#ITv?gA2v>|MMO&RCSZaEzZ+Vmr`xnH z94}9dVk)#4j2u{r)zR&;R1tl~ba4^0Fxhdq85g!&irpN1Z@uV0x`XeJ1 z(X`7+F=4;~O%r3*8{`*&Zq~&(QR|?_K_$f`#7uEWG(=z%W{U}{q4gS?m_X2yV#-*( zQS1Ag<@!Z2-qP>6=i)l14KT8S#%T(+0*%(;$qMXWLGQ_>dd33w@hj#! zLTm}oj%6SDm4@`TEL7u zGEWX?4K2_1=D_EzJXsA;WS(js^?Rm2<%6btSzqX9y%)&2c?19!KXpz6yTV>bioB6} zZZRneU&e|I-UNFQYvP%n(Nfw9?R>=YYOlAVub|S@a73W8q8t?P9hc`3(gl>LX)y&h zKdR;ovx%^kX!TOMrY-g$uXK_{OG#P6k4fOvM1zXP(zV*d5zVK?9*)fVp0Ar!NJFT} z&qlfKgbtS=I0Nb`hMdz~F5Z(F*U;5U z!QP~JeV~n_ua>GoSAf$l50>{b3Pp;dSQS%NZ7qf)Q(LU3`YG>uY|twwM%QC&Cq|b} zj1K0y<(;0fY>0(~n_)0%pwKi#DbYjfQGWHXrJrRR7BnSNFwtU{DSZcPLTRaEU!}0m zq#I?_9ULK)>zwERe-f`eEv3Fn-cp3AL@nwIvA8Qk;&o+X1+{e{F^EGIR4EasRia2J zPaLOL;PeH#!ExQdUOtx+^VrYden$UQi1VI5C-UHV!w~qqX|YOit02Hy73b<8Qg0fR z!eSMH{f=?$@st6+3*aU2J>wW3rwp(Lz&+Q9r-Gh!;vsOIcnI7e9s)Owhp2nYK;H-Q zGWvmmug7Cl1Co7p;`0*UTg1ocZQ^6}L*irf4(YVO_9N0s;9b&5pg}qb*u+x>*dQJP zo5Vw)NjwBvY?leN#dZljGCXW. --> - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/download_record_item.xml b/app/src/main/res/layout/download_record_item.xml index d301d54e..2324b2de 100755 --- a/app/src/main/res/layout/download_record_item.xml +++ b/app/src/main/res/layout/download_record_item.xml @@ -17,89 +17,81 @@ ~ along with this program. If not, see . --> - - - - + - + - + - - - + - + - + - - + diff --git a/app/src/main/res/layout/main_activity.xml b/app/src/main/res/layout/main_activity.xml index 101b59cd..ee29bb7f 100755 --- a/app/src/main/res/layout/main_activity.xml +++ b/app/src/main/res/layout/main_activity.xml @@ -16,39 +16,36 @@ ~ along with this program. If not, see . --> - + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/mainActivity" + android:layout_width="match_parent" + android:layout_height="match_parent"> + - - + android:layout_height="0dp" + app:defaultNavHost="true" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:navGraph="@navigation/navigation" + tools:ignore="FragmentTagUsage" /> - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/main_fragment.xml b/app/src/main/res/layout/main_fragment.xml index 40240e42..07f71c93 100755 --- a/app/src/main/res/layout/main_fragment.xml +++ b/app/src/main/res/layout/main_fragment.xml @@ -15,47 +15,40 @@ ~ You should have received a copy of the GNU General Public License ~ along with this program. If not, see . --> - + + app:layout_constraintTop_toBottomOf="@+id/linkSearch" + tools:ignore="UnusedAttribute" /> + android:contentDescription="Open Download History Button" + app:srcCompat="@drawable/ic_history"/> + app:layout_constraintTop_toBottomOf="@id/appLogo" + /> - - - + android:padding="6dp" + app:layout_constraintHorizontal_chainStyle="packed" + app:layout_constraintStart_toStartOf="@+id/appSubTitle" + app:layout_constraintTop_toBottomOf="@+id/appSubTitle"/> + android:contentDescription="Open Github App Button" + app:layout_constraintVertical_chainStyle="packed"/> + android:contentDescription="Open LinkedIN App Button" + app:layout_constraintTop_toBottomOf="@+id/btn_github_spotify"/> - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/track_list_fragment.xml b/app/src/main/res/layout/track_list_fragment.xml index 7ea750a8..dfdfc714 100755 --- a/app/src/main/res/layout/track_list_fragment.xml +++ b/app/src/main/res/layout/track_list_fragment.xml @@ -16,16 +16,16 @@ ~ along with this program. If not, see . --> - - + diff --git a/app/src/main/res/layout/track_list_item.xml b/app/src/main/res/layout/track_list_item.xml index aa9de8b6..ba3a0c59 100755 --- a/app/src/main/res/layout/track_list_item.xml +++ b/app/src/main/res/layout/track_list_item.xml @@ -16,97 +16,84 @@ ~ You should have received a copy of the GNU General Public License ~ along with this program. If not, see . --> + - - - - - - - + android:contentDescription="Track Image" + android:scaleType="centerInside" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@+id/artist" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:srcCompat="@drawable/ic_song_placeholder" /> - + - - - + - + - + - - - - + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 2824d54a..a4088d8b 100755 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -20,10 +20,12 @@ #FC5C7D #CE1CFF - #799BFF + #9AB3FF #FFFFFF #99FFFFFF #000000 - + #121212 + #4BB543 + #FF9494 \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 1801bfbb..c3b734c0 100755 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -19,12 +19,22 @@ + + + + +