Pasear then in this whole you are willing to go ahead and create another Android application.
And in this Hollier I want to talk about recycle view and how to connect our application to firebase
and actually get that data from the pirate base and populate our recycle view of it that data that you
receive from the firebase.
So now let's create our new Android studio project.
So just click on this start in your Android studio project and for the application and just type in
here app sixty eight.
And then here you can specify the company domain package name and pipe and project location and then
click on next and here choose.
AP A16 Android 4.1 Jelly Bean for a minimum SDK next.
And here choose empty activity next.
And here as you can see we have the activity name and the length name so don't change anything here
just leave things as default as you can see here and then click on finish.
So now let's actually connect our application to the firebase.
So at the top click on Tools here and then click on firebase.
So nice is going to open the assistant here.
Firebase assistant.
And then here click on real time database and then click on Save and retrieve data.
So here first we need to actually connect our application to firebase.
So just click on the spot in here.
So here let's actually connect our application to an already existing project.
OK so just click on this option here.
Just check this radio button here and select apps 65 right.
This is actually an already created Project so just select this project and then click on Connect to
firebase.
So as you can see here are firebase protected is created and connected locally to your app and now it's
disconnected.
So now it's time to add real time database to our Android application.
So just click on this button at the realtime database to your app and then here accept changes.
So now let's wait a little bit here.
So now our project is ready.
Right so now Arlott actually collapsed this assistance earlier this firebase assistant.
And here let's first about that actually are designed to use an interface or application.
So here just double click and this as for Dell double click on display out for that and then select
this activity on the line minute Semmel and then double click on this file.
So let me add to the double click on this tab here.
In order to make this area either select this hello world takes you here and in person delete key on
your keyboard and then here at the bottom selected the text tap and change the rel. out to linearly
out.
And now this actually specify the orientation of linear layout which is going to be vertical and it
hit at the bottom select Design tab and now inside this palette section we want to actually drag our
recycle view into this linear layout vertical.
As you can see here.
So now here inside these palettes extend to scroll down here and here are inside this custom as compact
here as you can see we have this folder custom Dasch compact just as you can see we have this recycle
view right.
If I selected here it's going to actually show us a dialog and it says at Project dependency.
So because we want to actually use the recycle view we have to use it.
We have to actually add project 3 dependency to our application to our project and it says this operation
requires that the right library recycle you dash 7.
Would you like to add this library now.
Yes if you want to add this library now to just click OK so it's going to actually add the library here
to our project.
And now we should wait a little bit here and it is refreshing.
Firebase.
So let's actually wait a little bit here and as you can see here we have rendering problems.
So in order to solve this problem I just click on this build here at the top and then click on clean
product.
And now as you can see here the problem is now solved.
OK so if you ever encounter these kinds of problems you just need to click on built at the top and then
click on a clean project or rebuild project.
Right.
So now of any to actually add to firebase you database dependency to our project.
So now let me show you.
So at the top just click on View and then to live indoors and then click on project so now as you can
see here we have these if you have the Android view here as you can see we have a great deal of scripts
here.
So now let me show you the web browser.
So as you can see here I open this up here and you just need to enter this you all inside the search
bar as you can say Good hop that can't slash firebase slash firebase you it that's android.
And then here here you will be our guide guide to this page.
So now let's scroll down here.
As you can see we have this installation right.
And here we have these dependencies.
So if you want to add this dependency firebase you are a database only right because you want to use
them firebase database.
So if you just need to actually copy this code here just select it and then right click on your and
this code and then click on copy.
So now let's go back to android studio and here as you can see here inside these great scripts we have
built that cradle project at 68 and we have that great module app.
So this is actually the app level that cradle.
And this is the project level build that cradle.
And if I show you the web browser now it says in your app there will be that cradle.
Here it is.
So it is actually DoubleClick and this bill that cradle here amongst your app and inside is dependences
bludge here.
I just need to actually paste this code here and in here I just need to click on synch now.
So now as you can see here it is actually synching our project.
So as you can see here are here as you can see we have this error and if we actually hover over this
error it says this support library should not use a different version 25 than the compiled SDK version
24.
So we can actually change this 24 25 to 24 and now we can actually a cinch.
Now at the top if you can you can sync now and now as you can see here the error is solved.
So let's wait a little bit here.
So now it actually sync our project.
So we have no errors here.
So let's go back to our activity under the limited example.
And here we have this recycle view.
Right.
So here inside as you can see here the recycle view is now gone because we actually changed the version
of the library here inside this the dependences block.
So let's go back to activity underlaid minute example here.
So now I can just select this recycle view here again.
And then I can just drag it and put it here Enceladus linearly out vertical.
So here we have this recycle view.
And again if I got it once inside this building great a file as you can see this error was because of
this version.
So let me actually open the Android SDK.
So at the top I just need to click on Android studio and then preferences.
And here I just need to just click on this appearance and behavior system settings and then click on
Android SDK and then I just click on launch standalone SDK manager and as you can see here I have these
Android 7 AP I-24 installed in my computer.
Right.
But if you have the Android seven point one point one AP I-285 you can actually use Ligny actually just
close this window.
You can use their religion at twenty five right.
You can use the combat Android that support the recycle of you.
That should be 725 that's 1.0 right.
But because we have the API 24 I can't just use the API this originate 24 data point.
That's zero.
So this is really important.
I just wanted to show you this very important feature or necessity of Android studio if you want to
actually use the recycle view inside your inside there are projects inside your projects so they actually
are close.
The Android is the key here.
So let's go back to actually with the underlying minute example and here is just select this recycle
view and you can specify an idea for this recycle view.
So here I can say recycle of you as an item recycle and then press that until she on your keyboard.
So now let's actually go inside our main activity that java file.
So first of all let's actually create a class a box or a class.
So now let me show you their web browser here.
Let me show it to firebase.
So here I just need to click on go to console and if you remember we actually connected our application
to an already created Project in firebase and that the project is at 65 right up 65.
We actually connected our application of sixty eight to the app sixty five projects that we have in
say the firebase.
So I just need to select this at 65 and then I can just click on database and then here we should see
we should actually see these data here.
As you can see we have lots of Buxar objects here.
So because we want to actually get these boxes objects of any to actually create about a boxer class
inside our project.
So if you or I actually have a box of class that you actually created in the previous projects we can
actually copy that file and paste it here inside your Java folder inside your inside this package.
Right.
As you can see here in say the package that this main activity is in this our main activity is actually
inside this package so you can't just copy that file that dogfight and paste it here inside this package.
So now I just want to actually create a new class so I can just click on this packet and then click
on dhaba class and it here for the name I can see Boxer and then click on.
OK so now we have this Buxar class so let me actually double click on this tab in order to make this
area there.
So now let me show you the web browser as you can see we have the boxer named Boxer power and punch
Boxer name punch power and punch speed.
So we have this instance variables.
So here I can't say private's strange Buxar name semi-colon private's and punch power semi-colon private
and punch speed semi-colon.
So now if you remember I told you that because I want to actually get box set objects from the server
here we must create an empty constructor here for our boxer class.
So I just need to right click here and then click on generate and then click on constructor.
So if you are using a Windows machine you can just hold the control key on your keyboard and then select
this instance variable in order to de-select this instance variable and if you are using a match you
can hold the command key on your keyboard and then press on and then select this box.
And in this instance variable in order to de-select this instance valuable.
Or you can actually select this package right in this way you are de-select in all these variables right.
In this way you are not selecting all these variables and then you can just click on.
OK so now you have this enty constructor here.
Right.
So we need to create another constructor in order to initialize our instance variables of every other
classes want to create a new object of type Buxar.
So here I can't say I can just right click here and then click on generate and then click on constructor
and then select all these instance variables and then click on OK.
So as you can see here we have this constructor here generated for us.
So we need to actually create getters for this instance variables.
So again inside this class just right click here and then click on generate and then click on get here
and then select all these instance variables and then click on OK.
So if we have this get here is here.
Right.
So hopefully that makes sense.
And now let's actually go to our main activity that are filed on here of when to actually first of all
create some valuables inside our main activity class.
So I'm going to actually paste in some lines of code here.
Inside this main activity class and then I'm gonna explain to you what's going on here.
So as you can see here these are the lines of code that I pasted here in line number 13.
As you can see here I actually declared a variable and the name of this rally is box set and this variable
is of type Boxer class right in line number 14.
I actually declare it another variable which its data type is database reference and its name is database
reference.
And here in line number 15 as you can see here we have this firebase data hub firebase recycle recycler
adapter as you can see here firebase recycler adapter.
So we use this class we use an instance of this class in order to populate our recycle you with that
data that you receive from the server.
Right.
Sort of from the firebase you are.
As you can see here.
Inside this bill that cradle here as you can see we actually added this dependency right firebase you
are right by your best database.
The inside is firebase you have this class right.
Firebase recycler adapter so and it is used to populate our recycle we recycle recycle view with that
data that we receive from the firebase database.
Right.
So here as you can see inside the angle brackets I provided to actually two data type here.
The first data type here is there a box of objects that we want to actually receive from the firebase
database.
Right.
And the second data type here as you can see is the view Holder.
Right.
So we use this view holder in order to hold the box of objects so it is necessary that you put these
two types here inside the angle brackets after this firebase recycler adapter.
This is really important.
And then in line number 16 as you can see here we have another Raddy airborne and it is of type recycler
view and its name is our recycler view right now.
Let's actually go inside this uncreate method.
And now let's actually initialize our valuables that we actually declared here inside our main activity
class.
So here again I'm going to pasting some lines of code and then you can actually stop the video and then
you can actually write your code here.
So as you can see here these are the lines of code that are in place here.
So as you can see here in line number 28 I am actually initializing this recycler view right.
We declared this recycle RVO in line number 18.
As you can see here an inline number is 28.
And inside this uncreate Smurfette we are initializing this recycler view.
So the circular view assignment operator and here I am actually has think this object recyclers view
to all recycle of view object so here so fine view by ID or that Id dot recycle view.
So let's actually go to activity underline main and examine and essentially change the ID of the recycle
view to recycle review right.
Re cycler view.
OK.
And then press on and tell on your keyboard.
I think it's better and it makes more sense.
So let's actually go to main activity that have a file.
And now there's actually a change here.
This recycle you to recycle out of you and now it's OK.
So in line number fretty as you can see here we need to actually set the layout manager on our recycle
view.
So if I go to our activity underline minute example here as you can see we have this activity underline
main here and it is actually a linearly out vertical right.
And we have this recycler view Enceladus linearly out vertical.
So let's go to main activity of a file.
So when we say setting the layout manager of this recycler view we are seeing that new.
Here we want to create a new instance of layout manager a new layout manager and as you can see here
it is actually a linear layout manager.
Right.
So here we are setting the layout manager of the recycler view and the layout manager of this recycler
view is actually a linearly out.
Why.
Because this recycler view is actually inside a linear layout.
So we're creating a new instance of linearly out of manager.
Right.
And here we need to pass the context main activity that this.
So this is very important and inline number 32 as you can see here.
I want to add to enable the offline capability of firebase Soulfire based database that get instance
that said persistence enable true.
So an inline number fretty free as you can see here I am initializing this database refence so database
of friends assignment operator firebase database that get instance that get reference.
So here as you can see it didn't actually create of a firebase database instance.
Right.
Got that reference directly from this instance.
So firebase database that get instance that gets a reference.
So in this way you can actually initialize your database or offense.
And here in line number 34 I am actually again we need to actually put this line of code here in order
to enable the offline capability of firebase.
So that database offense fence that keeps him through.
So these two lines of code here as you can see here are very that are necessary in order to actually
enable the offline capability of firebase.
And here you can see that we are getting the reference of our database for instance.
So now as you can see we have an error.
And as you can see we have this view holder here we passed this view Holder and this is actually an
argument right.
So we need this view holder in order to hold the Buxar objects that we received from the server.
So let's actually create a view holder that this is going to be actually of our type.
Right.
So then we want to create our own type.
We need to create a class.
But here we want to create an inner class.
So what do I mean by in a class and in a class is actually a class that is inside another class.
Right.
And and in a class is actually a class that is inside of another class.
So here we have this main activity class.
So after the end in curly brace of this uncreate Mefford and before the ending Crilley brace of this
mean activity the class are able to create another class here.
So here I can't say class right view holder view Holder right.
And then here I can just open and close this class by using these curly braces.
So here we have actually an inner class a class that is inside of another class and here.
Let's specify the access modifier of this class.
So this class is actually a public class and this class is actually a static class.
Right.
So for inner classes we use static.
Right.
And this in a class you hold there needs to extend from the recycler view dot view Holder.
Right.
So as you can see we have actually an inner class public static class view holder.
So because this is actually an inner class we use static.
Right.
And this class extends from the recycler view that view holder.
So now as you can see we have an error and it says there is no default constructor available in Android
that supports that B-7 that widget that recycle attribute that view holder.
So now we need to actually provide the constructor here.
Right.
And we need to actually initialize the constructor of the superclass.
So here I can say Puplick view holder public view holder view Holder right.
And then here I need to put a pair of prentices and then I need to open and close this constructed by
using these curly braces and opening curly brace followed by our closing curly brace.
So remember that I told you the name of the constructor must be the same as the name of the class.
Right.
And here inside is constructed as you can see.
First let me show you that we have an error here and if we actually hover over this right here it says
there is no default constructor here inside this recycle or you that you hold there.
So here we need to initialize the constructor of the superclass.
So here I can say super.
And now here we have a problem of we don't know what is the constructor of the superclass.
We don't know how the constructor of the superclass is actually structured.
And we also don't know how the constructor of the superclass actually exits arguments.
What kinds of arguments.
The constructor of the superclass accept.
So now in order to actually learn about the constructor of the superclass here I just need to hold the
comment key on my keyboard and then click on this view holder here.
And if you are using a Windows machine you need to hold the control Control-C on your keyboard and then
click on this view holder here.
Right.
So I just click on it here.
So here in order to find the constructor of this recycler view that the whole class.
I can't just hold the common key on my keyboard and then put this on the letter F key on my keyboard.
The letter F key on my keyboard.
And if you are using a Windows machine you need to hold the control on your keyboard and then press
on the leader F key on your keyboard.
And here I can actually except for the view holder view holder and now as you can see we have this new
holder class soulis scroll down here and that you can see here.
This is actually the constructor of this of your whole class.
Right.
It says public view Holder and this constructor actually accepts what argument of type review and its
name is item view.
So inside this main activity class and inside in a class as you can see we have this if you hold the
class this is actually a custom class that we created ourselves but this class is actually extending
the recycler view that view holder class.
So we must actually initialize the constructor of the superclass.
So as you can see when we are actually creating our own constructor here inside this constructor First
of all we need to initialize the constructor of the superclass.
So I actually showed you that the constructor of the superclass this one is actually accepts an argument
of type view.
So let's go back to our main activity class and let's go inside this inner class right view holder.
And here inside the apprentice's of this constructor let's specify that this constructor actually accepts
an argument of type view and its name is item view.
Right.
And here I can say super item view.
And in this way you are actually initializing the constructor of the superclass first.
Right.
And now we can actually put our own quotes here.
So.
So inside this whole there class let's actually declare somebody else here the first variable is going
to be of type takes the view and the name is takes the view semi-colon and then it and the next variable
that you want to declare here is actually the opposite view.
And here I want to name it as item view or here I can say View right semicolon.
So now as you can see look at this constructor here it is constructed is actually initializing the constructor
of the superclass and the constructor of the superclass actually accepts an argument of type view and
its name is item view right.
And here in line number 53 We are calling super item V so here is.
If you are actually initializing the constructor of the superclass we are calling the constructor of
the superclass superclass and it is necessary to do that right.
And why we have this argument here because in this way we have access to the view to the item view of
each cell of our recycler view.
Right.
So what does that mean we can actually use this item view in order to actually a set of click listener
for each item of view.
And we can be notified whenever the user clicks on an on one of those actually cells.
So let me show you that here.
First of all let me actually initialize this takes you so this takes you here.
I actually declare the stakes here in order to initialize it inside the constructor.
So whenever the user uses one of these.
One of the objects of this view Holder is going actually the access to the text view of that cell.
So now let me show you that here takes the view assignment operator and here I can say first I need
to cast this object to a text view object.
Right.
And here I want to access the text that is inside of that item view.
So here first we have actually the item view and inside of that item view we have actually a text a
text view.
So first if you need to actually access the item view dot find view by ID or Android dot or dot ID dot
text one semicolon.
So in this way we can actually access the text one of that and to the item view and we are assigning
that to the states the view.
So whenever we call the view we can actually have access to that text.
And now I want to actually allow the other classes for example this main activity class to access the
view of that item.
Right.
We can't just refer to this argument outside of this class.
For example in say this man with the class I can't just say if you hold that item view or I can't just
say actually I can't just create an object of view there and then call it the item view on that object.
It's not actually possible here because this is actually an argument.
This is not a valuable.
And here in line the other 49 I created are variable.
In order to do that.
So inside these constructed I can just initialize it is this variable of view.
So here I can say View assignment operator eiter view semi-colon.
So in this way we're actually assigning to this argument which is actually the view of that item right.
We are assigning the view to this view and we now we can actually create objects of type view whole
there.
And now we can access these variables.
For example I can say the object of that if you hold that dot takes the view or I can say the object
of that you hold that view.
Right.
So now let me show you how we can use this.
You hold a class and then it will make sense.
So let's go back to our uncreate method.
As you can see here we are as you can see before the end in curly brace of this uncreate my foot here
inside this uncreate my foot I turn the light some more lines of code here.
So inside this uncreate Smurfette.
First let me actually show you these variables that we declared inside the main activity class.
So inside this main activity class we actually didn't initialize the Buxar valuable as you can see here.
And this adapter this Firebrace recycling adapter.
So first let's actually to initialize this one here.
This box are valuable.
Right.
So let's go back let's go inside our uncreate method.
So I actually declare this valuable in order to show you that we can actually send lots of boxes objects
to the server by using a for loop.
So now let me show you how we can do that.
First I need to create a for loop here.
So as you can see here I am inside this uncreate MF'er right.
And here inside the Prentice's of this for loop for us I need to actually provide a valuable and initial
value right.
So in our assignment operator zero.
So I created a variable and its name is.
And initially I assigned the value zero to this value.
And here I am saying that Oh.
So here I need to specify the condition in which determines how many times this fall is going to be
executed.
So here I can say that this follow up here is going to be executed until the value of this variable
is actually less than 20 right semicolon.
And then here I need to say that after each execution of this follow up it's going to actually exec
is going to add one value to the value of this body.
So here as you can see we have this box right here right.
This is off the box.
So now here I can say boxer so here I can actually create a new object of the Buxar right assignment
operator and here I can see new.
So I need to create a new box set like a new instance of the box.
So I must put the new Q-Bot year new Buxar.
Right and now I need to specify some arguments so the box of name for example is my boxer right.
Comma the punch power for example.
Two hundred and fifty.
And the punch speed is three hundred and fifty right.
Semi-colon.
So this is our backs it up checked.
We could actually just create our Buxar object here.
I can I could just put the boxer type here.
And for example I could delete this valuable here inside R-Maine with the class.
Right.
So I just declared and created this Buxar variable sparks that object.
And I assigned this object to this box that roudy about right and now as you can see I can just send
this box that object to any times to the set.
So here I can say database reference dot for example typhoid.
And now I need to specify a unique ID for each actually height.
So for example if you have lots of time it's right we have lots of children in our database reference
and each child must have a unique name right.
Otherwise we cannot actually create children with the same name.
So here in order to actually create a unique name a unique ID for our child here I can say they have
friends that push that get.
Right.
And now I can actually create Actually I can send objects to each child so I can say that set value
Buxar semicolon.
So in this way we can actually send a to any instances of this type Buxar class to the server.
So you could use these codes in order to send the box that up text to the server.
But let me show you the web browser here.
And let's go to go to console
you know that we actually connected our application to the app 65 firebase project.
So I just need to click on it here and I just need to click on database and here is when I see the issuance
of a box of objects so we already have lots of box of objects with unique ID.
Here we don't have to actually send a box that objects to this database here.
So you can see these objects here right.
And you can see these unique IDs so I.
We don't need to use this for loop but I wanted to show you how we can actually send lots of Puckster
objects by using a for loop.
So this is very important.
This is actually a very important design pattern that you can use in order to actually create and send
objects to the server.
So and now you want to actually initialize this or firebase recycle or adapter.
Right.
As you can see we actually declared this variable of type firebase recycler adapter here in line number
19 and the same is Firebrace the second adapter right.
And we did it initialize it yet we haven't initialized it yet.
Right.
So let's go inside our uncreate method and initialize it here.
So here I can say firebase recycling after assignment operator and here I want to actually create a
new instance of type firebase recycler adapter.
Right.
So here I can just put the new word on and then here I can say firebase recycle an adapter.
Right.
So here just use the first option that appears here right now you fired a second or it and now you can
see he had the auto complete feature up and I stood your automatically provided these codes for us.
So first as you can see here we have this and then curly brace.
And here we have an error and it says we need to put a semicolon here.
So this error is gone and we have another error.
Right.
And it says that here.
This instance actually the constructor here needs some arguments.
The first one is actually the model class.
So we need to provide them with less.
And the next one is the model layout.
The first one is the view holder class so we actually we already created our view holder here.
Right.
And that's why I created this in a class here because this firebase cycle of it after constructor actually
needs of you there.
Right.
And we also need to specify the database reference.
So first as you can see here it says Model class right.
So for the first argument we need to specify the model class that the model class is Boxer's class.
Right.
This is the model class this is the class that we actually created objects from.
And we sense these objects to the server as you can see.
Here let me show you the web browser.
These are the box that updates right and now you want to actually get these objects here from the server.
Right so that's why it is called the Model class.
The model is that data the data source.
Right.
So now the second argument is the layout.
Right.
So here I can say Android dots are does layout dot to list a two line list item.
Right.
So this is going to be our layout if you want to use a tool list item lay out for our each for each
item view so that we can actually print so that we can actually output some lines to there and try to
each item view to each view.
So we used to line list like that we could use simple this item also.
So I use this one and for the first argument as you can see here we need to specify another argument
here right.
And the third argument is actually they view holding a class.
So here I can say we're holer right.
That class karma.
So as you can see here we actually refer to this in a class view holder that we created here inside
our main activity class right.
This is our view holder class.
So for the argument we need to specify the view the class and for the fourth argument which is actually
a final argument we need to say if we need to pass that database reference and now as you can see here
the error is gone.
Right.
So now let me actually create an ulang child actor here and now you can see that we have this firebase
the cycle of after instance.
So here as a case for the first argument we passed the box of that class for the sake of argument we
said and Royte that art that lay out the two line items so this is going to be the layout of each IDM
view as you can see here.
And for the first argument be passed if you hold that class that be created here.
Right.
And for the fourth argument to be passed the database reference.
So now we have this populate view Holder right.
So that populate view hall method is going to actually populate our view holders inside our recycle
or view with the objects of type Buxar right.
So we already have these arguments here so we can use these arguments here.
Right.
So let's go inside just populate you hold their method here aren't here inside this populate view method.
I can say for example as you can see we have an argument of type view hold right.
So this is actually an object of type view holder that we are receiving from the Smurfette and whenever
we use this object we are the author.
The constructor of this view here is actually automatically called and these values are actually initialized.
So for example this text the view is actually initialized and we have access to the text one of that
item view or we have access to that item view here itself.
Right.
So here I can say for example if you hold their right dot and as and now as you can see here I can access
the view and that he actually view.
So here I can say it takes the view that said text and inside the apprentice's I can say as you can
see here as the as the second argument we have this model which is of a boxer right.
So here I can see a model that gets Boxer name plus two double quotes backward slash and which is actually
a newline character plus model.
Does that Boxer get punch power.
Right.
So now let me create a new line character here a new line and then here I can't say plus two double
quotes by four slash n plus model that gets punch speed and here.
Now we can actually output these values to the screen to each item in view.
Right.
So now as you can see after the end the curly brace the ending curly brace of these firebase recycle
adapter here.
And before the end in calibers of this uncreate Smurfette all you need to do.
One more thing here I need to actually set the adapter.
I need to set the firebase cycle adapter for our recycler view.
Right.
So now the recycling view doesn't know anything about the firebase recycler adapter and the adapter.
The job of the adapter is going to is to actually get the data from the model and put those data inside
our recycler view and that's the only job of the adapter so we must actually set the adapter here.
So here I can say the recycler view.
Right.
That sets adapter firebase recycled adapter.
Right.
And now let's run our project and see what happens.
So now I need to actually select one of these virtual devices so I choose this one Nexus 6 AP I-24 and
then I need to click on.
OK so now as you can see here these are the data that we receive from the server.
Right.
So here we can see that a b c d.
Now let me show you a web browser here.
So for example the first object is a.
And the punch power is a 100 and the punt speed is actually 200 right so you can see these objects here.
Here inside our recycler view.
So I think that's enough for this year 30 or so if you have any questions please post a discussion in
the course and then I'll do my best to answer all of your questions.
Thank you very much for watching and I'll see you in the next year Tauriel.