SageTV Community  

Go Back   SageTV Community > SageTV Development and Customizations > SageTV Customizations
Forum Rules FAQs Community Downloads Today's Posts Search

Notices

SageTV Customizations This forums is for discussing and sharing user-created modifications for the SageTV application created by using the SageTV Studio or through the use of external plugins. Use this forum to discuss customizations for SageTV version 6 and earlier, or for the SageTV3 UI.

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 05-28-2008, 09:19 AM
Brent Brent is offline
SageTVaholic
 
Join Date: May 2006
Location: KC, Missouri
Posts: 3,695
Wanted: Developer for Web Interface Mobile

Interested in a mobile-version of the SageTV webadmin? Wanting to browse you're SageTV guide, see recorded show listings, upcoming recordings, manage recordings etc from your mobile device?
INSTRUCTIONS & DOWNLOAD LINK:
There is a working-alpha version of the SageTV Mobile Interface available now. Keep in mind it's in alpha and will have some bugs, but if you're interested in testing read the latest instructions in the wiki for more information and download.


Installation Instructions Follow (Read more at the Mobile Web Interface Wiki)


Below is the instructions for installing the mobile web interface as of 10/21/2008:

1. Make Sure you have Nielm's Web User Interface already installed and working properly. Note: Requires version 2.22 (or higher) of nielm's webserver
2. Download the Jetty Program From the Download Page
3. Shut Down SageTV and SageTV Services (if you run as service)
4. Unzip the jettystarter_1_2.zip file (this is the current version as of 06/13/08) into the SageTV/SageTV directory
5. Open up Sage.properties file and the following line (note: If the key has multiple values, they need to be separated by a semicolon)
Quote:
net.sf.sageplugins.jetty.starter.Main
should be added to this line:
Quote:
load_at_startup_runnable_classes
6. Decide what port you want to use for the mobile web app (default is 8080). Use a different, unused port (not the same port as neilms webadmin)
If you want to change the port, change it in JettyStarter.properties.
Assuming you wanted to change the port to 8500, you would Change
Quote:
#jetty.port=8080
To
Quote:
jetty.port=8500
Notice that you have to remove the # from that line or it won't work

NOTE: You will have to port forward this port to access outside your network
7. Download the mobile web server SageWebApp.zip. NOTE: Updated to new version 8/21/2008
8. Unzip the SageWebApp.zip into the SageTV/SageTV directory.
9. The default username and password is sage/frey. This can be changed in SAGE_HOME/jetty/etc/realm.properties.
10. Run SageTV
11. Point your browser to http://server/sage/m/menu.jsp. Note: the server you specify should include the port that you specified above in step 7




There's an introductory blog post on this you can read here for a peek at more screenshots and an overview.


ORIGINAL POST FOLLOWS.
Quote:
Originally Posted by Original Post
jreichen HAS TAKEN THE CHALLENGE AND BEGUN DEVELOPING A MOBILE-FRIENDLY SAGETV INTERFACE.
Are you using SageTV and happen to have experience with java, simple web design or even web design for mobile browsers? Want to improve an already awesome web interface and make it more mobile friendly?

If so, we (SageTV users) are "chomping at the bit" for this feature and I for one would be willing to contribute in testing and even beer money if you want to take on the challenge. I know this isn't much, but you can't blame me for trying

Neilm has done a great job with the SageTV web interface and would be willing to help someone who could integrate mobile-friendly versions of the current web interface pages into the current web interface. Some have been able to "hack" together placeshifting with their mobile phones, but we really need (okay want ) a more workable and usable solution.

Mobile-Friendly Improvements/Additions that would be nice to see:
  • Easy to browse (from mobile device) pages for the basic pages on the web interface
  • Compatibility with iPhone, iTouch, Windows Mobile, Blackberry, etc
  • Streaming capability for video, music and photos
  • Cross-Platform compatible (added by bcjenkins)
Anyone interested?

Last edited by Brent; 10-22-2008 at 09:58 PM. Reason: Updated with info & link for SageTV Mobile Interface
Reply With Quote
  #2  
Old 05-28-2008, 09:34 AM
bcjenkins bcjenkins is offline
SageTVaholic
 
Join Date: Jan 2006
Posts: 3,764
I would add in my support for this as well. I would also go as far as saying if anyone knows anyone who does this but does not use SageTV, I would chip in to buy a license.

B

Additional features, must be cross-platform capable.
__________________
Running SageTV on unRAID via Docker
Tuning handled by HDHR3-6CC-3X2 using OpenDCT
Reply With Quote
  #3  
Old 05-28-2008, 09:14 PM
Sparhawk6 Sparhawk6 is offline
Sage Aficionado
 
Join Date: Jan 2005
Posts: 323
here here
__________________
Server: Gigabyte EP43-UD3L; Intel Core2Duo E5200; 4 GB DDR2 RAM; NVidia GeForce 9400GT; 6 tuners: Hauppauge HVR-1600 NTSC/ATSC/QAM combo, Hauppauge WinTV-HVR-2250 Dual Hybrid QAM, HD Homerun Prime (using SageDCT); 3.06TB total space: Seagate 160 GB, Maxtor 500GB, Seagate Barracuda 400GB, Hitachi 2 TB
Extender: HD200
Netgear MCAB1001 MoCA Coax-Ethernet Adapter Kit
Reply With Quote
  #4  
Old 05-29-2008, 11:16 PM
jreichen's Avatar
jreichen jreichen is offline
Sage Icon
 
Join Date: Jul 2004
Posts: 1,192
Brent, you may have seen my post over on the web server thread by now. I did some work on mobile pages a few months ago but it's a pretty rough cut. It's enough to be addicting, though. It sounds like there are some details nielm and I need to iron out in the server engine to add JSP support. In the meantime, I could post what I have and those who are interested could check it out and provide feedback.
__________________
Server: Intel Core i5 760 Quad, Gigabyte GA-H57M-USB3, 4GB RAM, Gigabyte GeForce 210, 120GB SSD (OS), 1TB SATA, HD HomeRun.
Extender: STP-HD300, Harmony 550 Remote,
Netgear MCA1001 Ethernet over Coax.
SageTV: SageTV Server 7.1.8 on Ubuntu Linux 11.04, SageTV Placeshifter for Mac 6.6.2, SageTV Client 7.0.15 for Windows, Linux Placeshifter 7.1.8 on Server and Client
, Java 1.6.
Plugins: Jetty, Nielm's Web Server, Mobile Web Interface.

Reply With Quote
  #5  
Old 05-29-2008, 11:22 PM
Brent Brent is offline
SageTVaholic
 
Join Date: May 2006
Location: KC, Missouri
Posts: 3,695
Quote:
Originally Posted by jreichen View Post
Brent, you may have seen my post over on the web server thread by now. I did some work on mobile pages a few months ago but it's a pretty rough cut. It's enough to be addicting, though. It sounds like there are some details nielm and I need to iron out in the server engine to add JSP support. In the meantime, I could post what I have and those who are interested could check it out and provide feedback.
I did see it and you're on the right track. I'd love to see what you have so far.

Thanks
Reply With Quote
  #6  
Old 06-01-2008, 04:58 PM
jreichen's Avatar
jreichen jreichen is offline
Sage Icon
 
Join Date: Jul 2004
Posts: 1,192
Here's what I have at this point. It's mainly focused on managing recordings, since that's what I find myself wanting to do most with a mobile device. Some of the features are not functional yet or have limited functionality.

EDIT: As of June 21, the most current installation instructions are now on the SagePlugins wiki.

To install it:
  1. Install the Jetty plugin. I created a download page with instructions for it here. This is the web server engine.
  2. Download the mobile web server. The file is attached to this post. It will extract files to the SAGE_HOME/jetty folder. Point your browser to http://server/sage/m/menu.jsp. The default username and password is sage/frey. This can be changed in SAGE_HOME/jetty/etc/realm.properties.
If the page is displayed, go on a road trip and enjoy it from anywhere

EDIT: Default username and password was changed to sage/frey in version 1.0.02.

EDIT: As of October 21, the file mobile web interface zip file can be downloaded from the download page.
__________________
Server: Intel Core i5 760 Quad, Gigabyte GA-H57M-USB3, 4GB RAM, Gigabyte GeForce 210, 120GB SSD (OS), 1TB SATA, HD HomeRun.
Extender: STP-HD300, Harmony 550 Remote,
Netgear MCA1001 Ethernet over Coax.
SageTV: SageTV Server 7.1.8 on Ubuntu Linux 11.04, SageTV Placeshifter for Mac 6.6.2, SageTV Client 7.0.15 for Windows, Linux Placeshifter 7.1.8 on Server and Client
, Java 1.6.
Plugins: Jetty, Nielm's Web Server, Mobile Web Interface.


Last edited by jreichen; 10-22-2008 at 09:23 PM.
Reply With Quote
  #7  
Old 06-02-2008, 10:14 AM
Brent Brent is offline
SageTVaholic
 
Join Date: May 2006
Location: KC, Missouri
Posts: 3,695
jreichen,
I'll be giving this a try early this week. Thanks!
Reply With Quote
  #8  
Old 06-02-2008, 11:29 AM
rickw rickw is offline
Sage Advanced User
 
Join Date: Aug 2004
Location: Spring Hill, TN
Posts: 108
Really excited about have a mobile web solution.

Couple questions. First attempt at installation failed.

How to change the port it's listening on?
I need to change the port to 8082 (I did this in the JettyStarter.properties files. jetty.restart.port=8082) I was just guessing. But running netstat -a doesn't show anything listening on that port.

Second how to turn on logging?
I see a logs folder, but nothing is in there.

I'm very willing to test.

Thanks,
Rick...
Reply With Quote
  #9  
Old 06-02-2008, 12:56 PM
matt91's Avatar
matt91 matt91 is offline
Sage Icon
 
Join Date: Feb 2005
Location: Washington, DC
Posts: 1,185
Quote:
Originally Posted by rickw View Post
How to change the port it's listening on?
I need to change the port to 8082 (I did this in the JettyStarter.properties files. jetty.restart.port=8082) I was just guessing. But running netstat -a doesn't show anything listening on that port.
from the download instruction page:
To change the port on which Jetty listens, edit the jetty/etc/jetty.xml file.
__________________
Server: Ubuntu 16.04 running Sage for Linux v9
Reply With Quote
  #10  
Old 06-02-2008, 01:22 PM
jreichen's Avatar
jreichen jreichen is offline
Sage Icon
 
Join Date: Jul 2004
Posts: 1,192
Quote:
Originally Posted by rickw View Post
I need to change the port to 8082 (I did this in the JettyStarter.properties files. jetty.restart.port=8082) I was just guessing. But running netstat -a doesn't show anything listening on that port.
The restart properties in JettyStarter.properties aren't used right now. The only properties that are used are the ones for the config files and log files.
Quote:
Originally Posted by rickw View Post
Second how to turn on logging?
I see a logs folder, but nothing is in there.
The log file setting in JettyStarter.properties is only for request logging. Other logging can be found in Sage's log file, SAGE_HOME/sagetv_0.txt.

Right now the doc is a little thin. I'll put more on the wiki as the project moves along.

Jason
__________________
Server: Intel Core i5 760 Quad, Gigabyte GA-H57M-USB3, 4GB RAM, Gigabyte GeForce 210, 120GB SSD (OS), 1TB SATA, HD HomeRun.
Extender: STP-HD300, Harmony 550 Remote,
Netgear MCA1001 Ethernet over Coax.
SageTV: SageTV Server 7.1.8 on Ubuntu Linux 11.04, SageTV Placeshifter for Mac 6.6.2, SageTV Client 7.0.15 for Windows, Linux Placeshifter 7.1.8 on Server and Client
, Java 1.6.
Plugins: Jetty, Nielm's Web Server, Mobile Web Interface.

Reply With Quote
  #11  
Old 06-02-2008, 03:22 PM
rickw rickw is offline
Sage Advanced User
 
Join Date: Aug 2004
Location: Spring Hill, TN
Posts: 108
still not getting jetty to start listening.

Here's the log from sagetv_0.txt

Code:
Mon 6/2 16:17:50.024 Loading startup runnable:net.sf.sageplugins.jetty.starter.Main
Mon 6/2 16:17:50.040 Loaded startup runnable:net.sf.sageplugins.jetty.starter.Main
Mon 6/2 16:17:50.042 JettyStarter: Starting Jetty
Mon 6/2 16:17:50.048 JettyStarter properties before system property replace
Mon 6/2 16:17:50.049 -- listing properties --
Mon 6/2 16:17:50.050 jetty.logs=$(jetty.home)/logs
Mon 6/2 16:17:50.051 jetty.configfiles=$(jetty.home)/etc/jetty.xml
Mon 6/2 16:17:50.052 jetty.home property: jetty
Mon 6/2 16:17:50.053 jetty.home property is not absolute
Mon 6/2 16:17:50.054 jetty.home property: C:\Program Files\SageTV\SageTV\jetty
Mon 6/2 16:17:50.055 JettyStarter properties after system property replace
Mon 6/2 16:17:50.056 -- listing properties --
Mon 6/2 16:17:50.057 jetty.logs=C:\Program Files\SageTV\SageTV\jetty/...
Mon 6/2 16:17:50.058 jetty.configfiles=C:\Program Files\SageTV\SageTV\jetty/...
Mon 6/2 16:17:50.058 jetty.home=jetty
Mon 6/2 16:17:50.089 jetty.logs property: C:\Program Files\SageTV\SageTV\jetty/logs
Mon 6/2 16:17:50.090 JettyStarter: Printing JettyStarter properties
Mon 6/2 16:17:50.090 -- listing properties --
Mon 6/2 16:17:50.091 jetty.logs=C:\Program Files\SageTV\SageTV\jetty/...
Mon 6/2 16:17:50.092 jetty.configfiles=C:\Program Files\SageTV\SageTV\jetty/...
Mon 6/2 16:17:50.093 jetty.home=jetty
Mon 6/2 16:17:50.094 jetty.configfiles property: C:\Program Files\SageTV\SageTV\jetty/etc/jetty.xml
Mon 6/2 16:17:50.095 Starting Jetty from the following configuration files: C:\Program Files\SageTV\SageTV\jetty/etc/jetty.xml
Here's the section from jetty.xml that I've changed.

Code:
<Call name="addConnector">
      <Arg>
          <New class="org.mortbay.jetty.nio.SelectChannelConnector">
            <Set name="host"><SystemProperty name="jetty.host" /></Set>
            <Set name="port"><SystemProperty name="jetty.port" default="8082"/></Set>
            <Set name="maxIdleTime">30000</Set>
            <Set name="Acceptors">2</Set>
            <Set name="statsOn">false</Set>
            <Set name="confidentialPort">8443</Set>
	    <Set name="lowResourcesConnections">5000</Set>
	    <Set name="lowResourcesMaxIdleTime">5000</Set>
          </New>
      </Arg>
    </Call>
I'm using "netstat -a" to look for a listening port.

Thanks,
Rick...
Reply With Quote
  #12  
Old 06-02-2008, 03:57 PM
jreichen's Avatar
jreichen jreichen is offline
Sage Icon
 
Join Date: Jul 2004
Posts: 1,192
Here are a few things to check:
  1. Are the jar files from nielm's webserver in the JARs folder? Right now it depends on those. I forgot to mention that.
  2. Is there anything else in sagetv_0.txt after what you posted? Usually something in there tips me off to the problem.
  3. Make sure the paths in your log are valid and that everything in the zip file was extracted correctly.
  4. Try changing the forward slashes to back slashes in JettyServer.properties. I'm running on Linux. Java is pretty good about handling forward and back slashes, but maybe something is happening there.
Your jetty.xml looks correct. I'll look into Jetty's logging this evening and see if more detailed logging can be enabled.
__________________
Server: Intel Core i5 760 Quad, Gigabyte GA-H57M-USB3, 4GB RAM, Gigabyte GeForce 210, 120GB SSD (OS), 1TB SATA, HD HomeRun.
Extender: STP-HD300, Harmony 550 Remote,
Netgear MCA1001 Ethernet over Coax.
SageTV: SageTV Server 7.1.8 on Ubuntu Linux 11.04, SageTV Placeshifter for Mac 6.6.2, SageTV Client 7.0.15 for Windows, Linux Placeshifter 7.1.8 on Server and Client
, Java 1.6.
Plugins: Jetty, Nielm's Web Server, Mobile Web Interface.

Reply With Quote
  #13  
Old 06-02-2008, 08:06 PM
rickw rickw is offline
Sage Advanced User
 
Join Date: Aug 2004
Location: Spring Hill, TN
Posts: 108
Quote:
Originally Posted by jreichen View Post
Here are a few things to check:
1. Are the jar files from nielm's webserver in the JARs folder? Right now it depends on those. I forgot to mention that.
Yes...the nielm's webserver was working fine.


Quote:
2. Is there anything else in sagetv_0.txt after what you posted? Usually something in there tips me off to the problem.
That was the start and finish of anything mentioning jetty.

Quote:
3. Make sure the paths in your log are valid and that everything in the zip file was extracted correctly.
4. Try changing the forward slashes to back slashes in JettyServer.properties. I'm running on Linux. Java is pretty good about handling forward and back slashes, but maybe something is happening there.
I should be a able to make some changes now... had to wait for a recording to finish.

Rick...
Reply With Quote
  #14  
Old 06-02-2008, 08:07 PM
jreichen's Avatar
jreichen jreichen is offline
Sage Icon
 
Join Date: Jul 2004
Posts: 1,192
Rick,

I think your problem is due to the space in the path (C:\Program Files\....). Try changing that to the short filename and see if it works (It should be something like C:\Progra~1\.....).

EDIT: Change the value in JettyStarter.properties from
Code:
jetty.configfiles=$(jetty.home)/etc/jetty.xml
to
Code:
jetty.configfiles=C:\Progra~1\SageTV\SageTV\jetty\etc\jetty.xml
__________________
Server: Intel Core i5 760 Quad, Gigabyte GA-H57M-USB3, 4GB RAM, Gigabyte GeForce 210, 120GB SSD (OS), 1TB SATA, HD HomeRun.
Extender: STP-HD300, Harmony 550 Remote,
Netgear MCA1001 Ethernet over Coax.
SageTV: SageTV Server 7.1.8 on Ubuntu Linux 11.04, SageTV Placeshifter for Mac 6.6.2, SageTV Client 7.0.15 for Windows, Linux Placeshifter 7.1.8 on Server and Client
, Java 1.6.
Plugins: Jetty, Nielm's Web Server, Mobile Web Interface.


Last edited by jreichen; 06-02-2008 at 08:26 PM.
Reply With Quote
  #15  
Old 06-02-2008, 08:28 PM
rickw rickw is offline
Sage Advanced User
 
Join Date: Aug 2004
Location: Spring Hill, TN
Posts: 108
Quote:
Originally Posted by jreichen View Post
Rick,

I think your problem is due to the space in the path (C:\Program Files\....). Try changing that to the short filename and see if it works (It should be something like C:\Progra~1\.....).
ok...we're making good progress now.

Changed my JettyStarter.properties like this.

Code:
jetty.configfiles=C\:\\PROGRA~1\\SageTV\\SageTV\\jetty\\etc\\jetty.xml
jetty.logs=C\:\\PROGRA~1\\SageTV\\SageTV\\jetty\\logs
The webserver is now listening on the right port...but I got a 403 User not in role. Gonna try again to see if I fat finger the password.

Rick...
Reply With Quote
  #16  
Old 06-02-2008, 08:35 PM
rickw rickw is offline
Sage Advanced User
 
Join Date: Aug 2004
Location: Spring Hill, TN
Posts: 108
Tried a couple times...both on pc and on phone (PPC-6700). Login appears successful but get 403 User not in required role
Reply With Quote
  #17  
Old 06-02-2008, 08:37 PM
jreichen's Avatar
jreichen jreichen is offline
Sage Icon
 
Join Date: Jul 2004
Posts: 1,192
Quote:
Originally Posted by rickw View Post
The webserver is now listening on the right port...but I got a 403 User not in role. Gonna try again to see if I fat finger the password.

Rick...
Oops. In jetty/etc/realm.properties, change the line
Code:
user: password
to
Code:
user: password,user
Then restart Sage. I need to fix that. Somehow the realm.properties on my server and the one that got built into the zip are different.

EDIT: This has since been fixed and is configured with the correct value by default.
Code:
sage: frey,user
This means the username is 'sage', the password is 'frey', and 'sage' is a member of the 'user' role. New users can be added to this file, and the 'sage' user can even be removed, but all users must be a member of the 'user' role.
__________________
Server: Intel Core i5 760 Quad, Gigabyte GA-H57M-USB3, 4GB RAM, Gigabyte GeForce 210, 120GB SSD (OS), 1TB SATA, HD HomeRun.
Extender: STP-HD300, Harmony 550 Remote,
Netgear MCA1001 Ethernet over Coax.
SageTV: SageTV Server 7.1.8 on Ubuntu Linux 11.04, SageTV Placeshifter for Mac 6.6.2, SageTV Client 7.0.15 for Windows, Linux Placeshifter 7.1.8 on Server and Client
, Java 1.6.
Plugins: Jetty, Nielm's Web Server, Mobile Web Interface.


Last edited by jreichen; 06-15-2008 at 06:53 AM.
Reply With Quote
  #18  
Old 06-02-2008, 08:47 PM
rickw rickw is offline
Sage Advanced User
 
Join Date: Aug 2004
Location: Spring Hill, TN
Posts: 108
Quote:
Originally Posted by jreichen View Post
Oops. In jetty/etc/realm.properties, change the line
Code:
user: password
to
Code:
user: password,user
Then restart Sage. I need to fix that. Somehow the realm.properties on my server and the one that got built into the zip are different.
We have a winner!

I can test it from my PPC-6700 running WM6.0 (soon to be 6.1). If I find any issues how would like me to report them?

Rick...
Reply With Quote
  #19  
Old 06-02-2008, 08:55 PM
jreichen's Avatar
jreichen jreichen is offline
Sage Icon
 
Join Date: Jul 2004
Posts: 1,192
Sweet! To recap for the others out there, Rick had to modify the jetty.configfiles property in SAGE_HOME/JettyStarter.properties and modify SAGE_HOME/jetty/etc/realm.properties. I'll work on a fix but for now use the workarounds.

I'll create a new thread once the server is ready for GA (I don't have an estimate for when that will be), so go ahead and post to this thread for now. Don't worry about reporting issues in areas where there is a line through the text or if something has TODO in front of it. That's my way of reminding myself to work on that area.
__________________
Server: Intel Core i5 760 Quad, Gigabyte GA-H57M-USB3, 4GB RAM, Gigabyte GeForce 210, 120GB SSD (OS), 1TB SATA, HD HomeRun.
Extender: STP-HD300, Harmony 550 Remote,
Netgear MCA1001 Ethernet over Coax.
SageTV: SageTV Server 7.1.8 on Ubuntu Linux 11.04, SageTV Placeshifter for Mac 6.6.2, SageTV Client 7.0.15 for Windows, Linux Placeshifter 7.1.8 on Server and Client
, Java 1.6.
Plugins: Jetty, Nielm's Web Server, Mobile Web Interface.

Reply With Quote
  #20  
Old 06-03-2008, 04:17 AM
bcjenkins bcjenkins is offline
SageTVaholic
 
Join Date: Jan 2006
Posts: 3,764
I am seeing a

Quote:
Tue 6/3 6:03:28.963 Loading startup runnable:net.sf.sageplugins.jetty.starter.Main
Tue 6/3 6:03:29.021 ERROR Loading startup runnable extension of:java.lang.UnsupportedClassVersionError: Bad version number in .class file
Java 1.5_15

B
__________________
Running SageTV on unRAID via Docker
Tuning handled by HDHR3-6CC-3X2 using OpenDCT
Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
What transcoding target to I use for Windows Mobile? deria SageTV Software 1 07-25-2008 08:07 AM
HD Extender interface performance and video resolution MTuckman SageTV Media Extender 4 02-27-2008 09:57 AM
How fast is HD Extender's interface? Grasshopper SageTV Media Extender 11 02-20-2008 07:25 AM
SageTV with English User Interface to recognize media files written in cyrillic? krasev SageTV Software 9 09-11-2006 07:29 PM
Ambitious STV DEVELOPER wanted technix SageTV Customizations 4 02-09-2005 03:52 PM


All times are GMT -6. The time now is 01:27 PM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2023, vBulletin Solutions Inc.
Copyright 2003-2005 SageTV, LLC. All rights reserved.