Re: [AOLSERVER] Call for AOLserver Core Team Nominees
Hi folks, I know its been posted there, but I personally feel at least one of these individuals should come from the OpenACS community. I suspect we're a fairly significant 'other' project that depends heavily on it, and as its firmly part of future OpenACS strategy that kinda makes sense. I'm sure you'd agree, although I don't know who from the community would be able to take it on. Simon Nathan Folkman wrote: [EMAIL PROTECTED]"> We would like to establish an AOLserver core team made up of members from both here at AOL and the Open Source Community. The core team's main responsibility will be to lead the future direction of the AOLserver Open Source project, working to balance the internal requirements here at AOL with the requirements of the community at large. We've decided to adopt the core team principles currently in use by the Tcl core team - it seems to have worked well for them, and seems to also be a good fit for the AOLserver project. There will probably be a few slight modifications made, but essentially the core team will function as described by the following: http://www.scriptics.com/cgi-bin/tct/tip/0.html If you are interested in becoming a member of the AOLserver core team, please send me ([EMAIL PROTECTED]) an email with a brief paragraph or two describing your qualifications, and why you think you would be a good candidate. We will then post the names and descriptions and allow everyone to vote for the top three. Please let me know if there are any questions. Thanks! - Nathan -- Simon Millward Director OpenMSG Limited +44 (0) 7818 045 801 Tel: +44 (0)1225 48 48 05 Fax: +44 (0)1225 31 6789 Web http://www.open-msg.net Any views expressed in this message are those of the individual sender, except where the sender specifically states them to be the views of OpenMSG Ltd.
Re: [AOLSERVER] Input data verification
This sounds like your trying to create something very like what we have in the OpenACS i.e. the forms API and ad_page_contract. Both of which provide extensive and well organised facilites for doing this. Much of what goes on in the OpenACS' request broker is not database specific or dependent, and for that matter isn't all that dependent on the OpenACS datamodel in general. I'm wondering whether there's a case emerging here for creating the OpenACS request processor as an extension to AOLServer (rather than as a component of OpenACS) Thoughts? Patrick Spence wrote: 000801c2845e$1a0431f0$6a7ba8c0@ERIS"> why not the tcl command "string"like: string is integer $string:) http://tcl.activestate.com/man/tcl8.4/TclCmd/string.htm-- Patrick Spence arivenATarivenDOTcom www.RandomRamblings.com www.Ariven.com- Original Message -From: "Danil Mantione" [EMAIL PROTECTED]To: [EMAIL PROTECTED]Sent: Monday, November 04, 2002 2:41 PMSubject: [AOLSERVER] Input data verification Hello,You have propably all build a simple a html form and ascript that processes the form. Now how do you verify your input data?For example, you want the user to enter a number. How do you verify on theserver side that someone indeed sent a number?Usually I use the scan command, i.e.:set r [ns_conn form]set variabletxt [ns_set iget $r variable]if {[scan %d $variabletxt variable] == 0} then {ns_returnnotfoundreturn -code return} else {.}Now this is quite a lot of code for such a simple check and you write itin each form again. I got a bit bored and wrote a library for it. Now itis much easier, at the start of a script I just do:bind_form_vars {mode req num} {actionurl req} {tabledef req} {index num} {action} What does this do?- A form variable "mode" is assigned to the variable "mode". The variable is required ("req") and it must be numeric ("num").- The form variable "actionurl" is assign to the variable "actionurl" and it is required.- The same for "tabledef".- "index" is not required, if it is not present the variable "index" will be set to {}, but if it is present it should be numeric- "action" is not requiredNow, since it is a very basic task that allmost every AOLserver user hasto do, is it perhaps an idea to make such a library part of the standardAOLserver distribution?Danil . -- Simon Millward Director OpenMSG Limited +44 (0) 7818 045 801 Tel: +44 (0)1225 48 48 05 Fax: +44 (0)1225 31 6789 Web http://www.open-msg.net Any views expressed in this message are those of the individual sender, except where the sender specifically states them to be the views of OpenMSG Ltd.
Re: [AOLSERVER] Call for AOLserver Core Team Nominees
Title: Message If anyone from the OpenACS community would like to nominate themselves, please send your brief paragraph or two to Nathan. /s. -Original Message-From: AOLserver Discussion [mailto:[EMAIL PROTECTED]] On Behalf Of Simon MillwardSent: Tuesday, November 05, 2002 4:46 AMTo: [EMAIL PROTECTED]Subject: Re: [AOLSERVER] Call for AOLserver Core Team NomineesHi folks,I know its been posted there, but I personally feel at least one of these individuals should come from the OpenACS community. I suspect we're a fairly significant 'other' project that depends heavily on it, and as its firmly part of future OpenACS strategy that kinda makes sense.I'm sure you'd agree, although I don't know who from the community would be able to take it on.SimonNathan Folkman wrote: [EMAIL PROTECTED]" type="cite">We would like to establish an AOLserver core team made up of members from both here at AOL and the Open Source Community. The core team's main responsibility will be to lead the future direction of the AOLserver Open Source project, working to balance the internal requirements here at AOL with the requirements of the community at large. We've decided to adopt the core team principles currently in use by the Tcl core team - it seems to have worked well for them, and seems to also be a good fit for the AOLserver project. There will probably be a few slight modifications made, but essentially the core team will function as described by the following:http://www.scriptics.com/cgi-bin/tct/tip/0.html If you are interested in becoming a member of the AOLserver core team, please send me ([EMAIL PROTECTED]) an email with a brief paragraph or two describing your qualifications, and why you think you would be a good candidate. We will then post the names and descriptions and allow everyone to vote for the top three.Please let me know if there are any questions. Thanks!- Nathan-- Simon Millward Director OpenMSG Limited +44 (0) 7818 045 801 Tel: +44 (0)1225 48 48 05 Fax: +44 (0)1225 31 6789 Web http://www.open-msg.net Any views expressed in this message are those of the individual sender, except where the sender specifically states them to be the views of OpenMSG Ltd.
Re: [AOLSERVER] Input data verification
On Tue, 5 Nov 2002, Simon Millward wrote: This sounds like your trying to create something very like what we have in the OpenACS i.e. the forms API and ad_page_contract. Both of which provide extensive and well organised facilites for doing this. Much of what goes on in the OpenACS' request broker is not database specific or dependent, and for that matter isn't all that dependent on the OpenACS datamodel in general. I'm wondering whether there's a case emerging here for creating the OpenACS request processor as an extension to AOLServer (rather than as a component of OpenACS) Hmmm. At least OpenACS does not use it itself very well, I've yet to see an example of a page that does verify it's input data... But ok, we should take a look at it then. Daniël
Re: [AOLSERVER] Input data verification
Daniel, I'm surprised you say that, unless I'm missing what your trying to achieve. OpenACS has numerous mechanisms an opportunities for data validation. The ad_page_contract section offers a series of ways to restrict, validate and correct data posted between pages. The newer forms API offers a really simple way to create forms ina single tcl file, that can be defined as widget types, each conforming to a data standard, furthermore each widget can be customised to have further, bespoke validation applied and so on. I suspect that lack of documentation (hey ho, here I go again ;o), and also a lack of good exemplar code and practices in some packages has more to do with it. However,we may be discussing a different kind of issue here? I am understanding correctly? The introduction of a request processor/filter that might offer the chance to peform such validation is what your after? Cheers Simon Danil Mantione wrote: [EMAIL PROTECTED]"> On Tue, 5 Nov 2002, Simon Millward wrote: This sounds like your trying to create something very like what we havein the OpenACS i.e. the forms API and ad_page_contract. Both of whichprovide extensive and well organised facilites for doing this.Much of what goes on in the OpenACS' request broker is not databasespecific or dependent, and for that matter isn't all that dependent onthe OpenACS datamodel in general.I'm wondering whether there's a case emerging here for creating theOpenACS request processor as an extension to AOLServer (rather than as acomponent of OpenACS) Hmmm. At least OpenACS does not use it itself very well, I've yet to seean example of a page that does verify it's input data...But ok, we should take a look at it then.Danil. -- Simon Millward Director OpenMSG Limited +44 (0) 7818 045 801 Tel: +44 (0)1225 48 48 05 Fax: +44 (0)1225 31 6789 Web http://www.open-msg.net Any views expressed in this message are those of the individual sender, except where the sender specifically states them to be the views of OpenMSG Ltd.
[AOLSERVER] alloc: invalid block errors
Hi, I just had my production AOLserver croak on me. After driving the load up on the box to about 18.0 (on a 4-way E3800) it spat this out in the server.log: alloc: invalid block: ff2bb898: ff 70 0 alloc: invalid block: ff2bb898: ff 70 0 Then nsd died. The error is coming from Tcl's tclThreadAlloc.c it appears. Google turns up this: http://www.geocrawler.com/archives/3/7374/2002/4/0/8530518/ | (1) If tcl/tk is built with thread enabled, tcltest | passes tcl/tests. However, the interpreter crashes in | tktest like this. | | (in tk/unix) | make test | ... | config.test | alloc: invalid block: 1400a4430: 54 54 74 | /bin/sh: 680284 Abort - core dumped I'm on Solaris 2.8, AOLserver 3.5.0 and Tcl 8.4.1, gcc 2.95.3. The application makes heavy use of nsv's and periodic kickoffs of threads using ns_schedule_proc. Any thoughts? -- Dossy -- Dossy Shiobara mail: [EMAIL PROTECTED] Panoptic Computer Network web: http://www.panoptic.com/ He realized the fastest way to change is to laugh at your own folly -- then you can let go and quickly move on. (p. 70)
Re: [AOLSERVER] alloc: invalid block errors
On Tuesday 05 November 2002 16:59, you wrote: I'm on Solaris 2.8, AOLserver 3.5.0 and Tcl 8.4.1, gcc 2.95.3. You're sure you do not have any corpses of libtcl8.4.so build with some alpha release (Tcl8.4.0a4 or earlier) lying arround, eventually picked by the DSO loader? Just to make sure, because the bugreport you're reffering to is considered fixed and the 8.4.1 has the patch already applied. Cheers Zoran
Re: [AOLSERVER] alloc: invalid block errors
On 2002.11.05, Zoran Vasiljevic [EMAIL PROTECTED] wrote: On Tuesday 05 November 2002 16:59, you wrote: I'm on Solaris 2.8, AOLserver 3.5.0 and Tcl 8.4.1, gcc 2.95.3. You're sure you do not have any corpses of libtcl8.4.so build with some alpha release (Tcl8.4.0a4 or earlier) lying arround, eventually picked by the DSO loader? Nope, absolutely positive. The only Tcl on this system is the 8.4.1 that was built. Just to make sure, because the bugreport you're reffering to is considered fixed and the 8.4.1 has the patch already applied. That's why I'm asking. :-) -- Dossy -- Dossy Shiobara mail: [EMAIL PROTECTED] Panoptic Computer Network web: http://www.panoptic.com/ He realized the fastest way to change is to laugh at your own folly -- then you can let go and quickly move on. (p. 70)
Re: [AOLSERVER] alloc: invalid block errors
On Tuesday 05 November 2002 17:25, you wrote: Just to make sure, because the bugreport you're reffering to is considered fixed and the 8.4.1 has the patch already applied. That's why I'm asking. :-) Another try... Do you use clock format ... -gmt 1 somewhere in your Tcl code?
Re: [AOLSERVER] Input data verification
On Mon, 4 Nov 2002, Scott Goodwin wrote: Hi Daniël, Yes, this would be useful, maybe as a standard ns_* style command, something like an ns_bind_vars. Right now the focus is on setting up a core AOLserver team, getting AOLserver 3.5.0 fully documented, getting the current modules cleaned up/documented, getting AOLserver 4.0 released, and a few other things. When the majority of that work is done, I think we can look at improvements to the server and modules such as you've outlined below. How are your C skills? Your man page creation skills? Thats where we could use some help right now. Ehm, you are asking me to join the team? Well, I'm honoured but I'm also on of the main programmers of Free Pascal, a Pascal compiler, and I'm quite busy with that too. But if there is some work to do, I'm prepared to help. My C skills are ok and I haven't yet written a manpage, but I guess it's as easy as writing html. Daniël
Re: [AOLSERVER] Input data verification
Sure. I'm not going to say that a number of packages and areas of code aren't subject to fairly bad practice. Theres a lot of work gone into getting the core of the system right, and i accept there's still quite a bit to do going forward with many of the packages. However, in principle at least the function of much of what goes on in OpenACS's request broker is certainly something that might have a place both in the OpenACS community and the AOLServer one in the wider sense. Possibly not everything is there/done/correct, but my thinking is that surely there may be an opportunity to combine a degree of effort/common interest and possibly consider something that neither is 'dependent on' but both could use? Just thought it might be worthwhile taking a look at least to the principle of the way data validation in forms is handled via the 'form' command/API. Cheers Simon On Tuesday, November 5, 2002, at 05:10 pm, Daniël Mantione wrote: On Tue, 5 Nov 2002, Simon Millward wrote: I'm surprised you say that, unless I'm missing what your trying to achieve. I just checked again and I did found indeed validation code, so sorry about the my false claims, but the are many cases where it is omitted. For example take admin/bboard/administer.tcl, the variable topic_id is never checked if it is a proper integer. Also, the checking done in check_for_form_variable_naughtiness isn't a proper library, these are just OpenACS specific checks. Daniël
Re: [AOLSERVER] alloc: invalid block errors
On Tuesday 05 November 2002 18:06, you wrote: Another try... Do you use clock format ... -gmt 1 somewhere in your Tcl code? clock format, but not with -gmt 1. Hm, first line of defence did not hold :( So, somebody is freeing (or reallocating) already freed memory or just passing bogus address to the allocator. This *could* be tricky... I have extensively checked the new allocator with Purify since it was introduced in 8.4.0. It works fine. We did not have any memory-related problems reported since 8.4.0 AFAIK, but this should't be of much importance because majority of Tcl users run w/o threads. Hm... Do you have any home-brewn C-level extensions loaded? Or, better yet, what extensions do you have loaded? The problem is *probably* somewhere in thread-exit. You say, you kick a thread or two with ns_schedule_proc? There might be something bad happening during teardown. It would be interesting to know wether the same (core) happens when/if you (can) schedule a proc w/o extra thread (i.e. w/o -thread option)? Zoran
Re: [AOLSERVER] Input data verification
In a message dated 11/5/02 12:31:57 PM, [EMAIL PROTECTED] writes: Just thought it might be worthwhile taking a look at least to the principle of the way data validation in forms is handled via the 'form' command/API. If someone is willing to submit this as a slightly more formal request, the AOLserver Core Team can take look and make a determination about if/how to integrate into the AOLserver core. That said, the core team is still in the midst of being formed, so feel free to send directly to me ([EMAIL PROTECTED]). I'd also suggest taking a look at the TIP format used by the Tcl folks (http://www.scriptics.com/cgi-bin/tct/tip/3.html) as we'll most likely adopt that in the future. Let me know if there are any questions. Thanks! - Nathan
Re: [AOLSERVER] alloc: invalid block errors
On Tuesday 05 November 2002 18:06, you wrote: Another try... Do you use clock format ... -gmt 1 somewhere in your Tcl code? clock format, but not with -gmt 1. -- Dossy Ahhh... can you fire up the server with gdb, put a break-point on tclThreadAlloc.c:748 and give it a go? Maybe we'll see more on the backtrace... Zoran
Re: [AOLSERVER] Input data verification
On Tue, Nov 05, 2002 at 03:43:42PM +0100, Daniël Mantione wrote: Hmmm. At least OpenACS does not use it itself very well, I've yet to see an example of a page that does verify it's input data... On Tue, Nov 05, 2002 at 02:53:15PM +, Simon Millward wrote: Daniel, I'm surprised you say that, unless I'm missing what your trying to achieve. OpenACS has numerous mechanisms an opportunities for data validation. The ad_page_contract section offers a series of ways to restrict, I concur with Simon, OpenACS has LOTS of input validation, both tools to do it, and real live examples of those tools being used. Incidentally, virtually all of those validation (and other) utilities CAN be used in a non-OpenACS AOLserver environment (and I've done so in some cases), but they are not set up to be easily reused in a non-OpenACS environment - something I'd like to change in the future, when I have time. -- Andrew Piskorski [EMAIL PROTECTED] http://www.piskorski.com
[AOLSERVER] AOLSERVER and RH Linux 7.3 8
I originally used the AOLSERVER (and NaviServer) back in the mid-1990's and was wondering if I should bother to try it out on the new Linux distributions or if there is a better mousetrap. I'm hoping to do some medically related object file parsing and I remember that the illustra ordb had some nice features for handling objects. Any thoughts?
Re: [AOLSERVER] alloc: invalid block errors
On 2002.11.05, Zoran Vasiljevic [EMAIL PROTECTED] wrote: Do you have any home-brewn C-level extensions loaded? Or, better yet, what extensions do you have loaded? Nope. The only thing that's loaded is nssock. No nslog even! It's a series of Tcl proc's, some of which get registered as ns_register_proc to handle HTTP requests, one that gets scheduled using ns_schedule_proc, and others that get called by those procs. Extensive use of nsv's to persist memory in the running nsd, and the ns_schedule_proc'ed periodically goes through the memory stored in nsv's and persists it to disk and nsv_unset's things. The problem is *probably* somewhere in thread-exit. You say, you kick a thread or two with ns_schedule_proc? There might be something bad happening during teardown. It would be interesting to know wether the same (core) happens when/if you (can) schedule a proc w/o extra thread (i.e. w/o -thread option)? Since this is a production system, and this error only occured once so far, I'm not inclined to go tinkering with it. I've never been able to get this problem to occur in the dev. environment even under load, so I'm perplexed. I'm going to be keeping an eye on it. Hopefully if this happens again, it'll drop a core file -- previously, the directory I started nsd from was owned by root and not writable by the user nsd was -u'ed to run as. I've changed that, so hopefully I'll get a corefile next time. -- Dossy -- Dossy Shiobara mail: [EMAIL PROTECTED] Panoptic Computer Network web: http://www.panoptic.com/ He realized the fastest way to change is to laugh at your own folly -- then you can let go and quickly move on. (p. 70)
Re: [AOLSERVER] alloc: invalid block errors
On 2002.11.05, Zoran Vasiljevic [EMAIL PROTECTED] wrote: On Tuesday 05 November 2002 18:06, you wrote: Another try... Do you use clock format ... -gmt 1 somewhere in your Tcl code? clock format, but not with -gmt 1. -- Dossy Ahhh... can you fire up the server with gdb, put a break-point on tclThreadAlloc.c:748 and give it a go? Maybe we'll see more on the backtrace... Wish I could, but this is a production system. I just spotted the error in server.log by luck when I noticed that nsd had been restarted without anyone scheduling a restart. The best I can do is hope to get a usable corefile next time this happens. -- Dossy -- Dossy Shiobara mail: [EMAIL PROTECTED] Panoptic Computer Network web: http://www.panoptic.com/ He realized the fastest way to change is to laugh at your own folly -- then you can let go and quickly move on. (p. 70)
Re: [AOLSERVER] Input data verification
I was asking if you would be able to sign up for any tasks as they come up. Right now if you can identify a man page to document that hasn't been signed up for yet, we could use your help there. Go to the SourceForge Tasks section, Documentation. We're signing up for man pages by file (ns_sock.n for example). If you're in doubt about how to sign up for a man page, contant Nathan ([EMAIL PROTECTED]) or myself. Thanks, /s. -Original Message- From: AOLserver Discussion [mailto:AOLSERVER;LISTSERV.AOL.COM] On Behalf Of Daniël Mantione Sent: Tuesday, November 05, 2002 11:15 AM To: [EMAIL PROTECTED] Subject: Re: [AOLSERVER] Input data verification On Mon, 4 Nov 2002, Scott Goodwin wrote: Hi Daniël, Yes, this would be useful, maybe as a standard ns_* style command, something like an ns_bind_vars. Right now the focus is on setting up a core AOLserver team, getting AOLserver 3.5.0 fully documented, getting the current modules cleaned up/documented, getting AOLserver 4.0 released, and a few other things. When the majority of that work is done, I think we can look at improvements to the server and modules such as you've outlined below. How are your C skills? Your man page creation skills? Thats where we could use some help right now. Ehm, you are asking me to join the team? Well, I'm honoured but I'm also on of the main programmers of Free Pascal, a Pascal compiler, and I'm quite busy with that too. But if there is some work to do, I'm prepared to help. My C skills are ok and I haven't yet written a manpage, but I guess it's as easy as writing html. Daniël
Re: [AOLSERVER] alloc: invalid block errors
On Tuesday 05 November 2002 20:34, you wrote: The best I can do is hope to get a usable corefile next time this happens. Please do! In the meantime, I will try to exercise the 3.5.0/8.4.1 with Purify over the weekend. Maybe this will bring some results. Thanks, Zoran
Re: [AOLSERVER] alloc: invalid block errors
On 2002.11.05, Zoran Vasiljevic [EMAIL PROTECTED] wrote: On Tuesday 05 November 2002 20:34, you wrote: The best I can do is hope to get a usable corefile next time this happens. Please do! In the meantime, I will try to exercise the 3.5.0/8.4.1 with Purify over the weekend. Maybe this will bring some results. That'll be cool. Set something up to ns_schedule_proc -thread and see if your thread creation/cleanup shows anything funny going on. Throw in lots of nsv_set and nsv_unset in there. I'm going to get a copy of nstelemetry.adp and see if anything funny is happening. -- Dossy -- Dossy Shiobara mail: [EMAIL PROTECTED] Panoptic Computer Network web: http://www.panoptic.com/ He realized the fastest way to change is to laugh at your own folly -- then you can let go and quickly move on. (p. 70)
Re: [AOLSERVER] alloc: invalid block errors
On Tuesday 05 November 2002 20:32, you wrote: Extensive use of nsv's to persist memory in the running nsd, and the ns_schedule_proc'ed periodically goes through the memory stored in nsv's and persists it to disk and nsv_unset's things. Shouldn't be a problem at all. The problem is *probably* somewhere in thread-exit. You say, you kick a thread or two with ns_schedule_proc? There might be something bad happening during teardown. It would be interesting to know wether the same (core) happens when/if you (can) schedule a proc w/o extra thread (i.e. w/o -thread option)? Since this is a production system, and this error only occured once so far, I'm not inclined to go tinkering with it. I've never been able to get this problem to occur in the dev. environment even under load, so I'm perplexed. I understand. This might be one of the ugly race-conditions which is difficult to track. Usually, they appear first there where you do not expect them. Usually this is your first and maybe most important customer... (well, not in your case :) I'm going to be keeping an eye on it. Hopefully if this happens again, it'll drop a core file -- previously, the directory I started nsd from was owned by root and not writable by the user nsd was -u'ed to run as. I've changed that, so hopefully I'll get a corefile next time. This is very good. Don't forget to compile with -g and skip the -O opt, otherwise we'll be out of luck even with the corefile. Cheers Zoran
Re: [AOLSERVER] alloc: invalid block errors
In a message dated 11/5/2002 2:56:05 PM Eastern Standard Time, [EMAIL PROTECTED] writes: That'll be cool. Set something up to ns_schedule_proc -thread and see if your thread creation/cleanup shows anything funny going on. Throw in lots of nsv_set and nsv_unset in there. I'm going to get a copy of nstelemetry.adp and see if anything funny is happening. -- Dossy Perhaps these test scripts could form the foundation of a generic test suite. I know Scott has been thinking a lot about this. - n
Re: [AOLSERVER] alloc: invalid block errors
Title: Message I've been setting up a framework within which to consistently fit automated test scripts. I'm using nsopenssl as my first example. I will releasethe frameworkas soon as it is fully functional for community review and comment. Some features: It compiles all source code, configures all software, and run all tests in a fully automated way, all without being root. Don't let this stop you from writing manual or automated tests -- it should be fairly straightforward to migrate that code into the framework. /s. -Original Message-From: AOLserver Discussion [mailto:[EMAIL PROTECTED]] On Behalf Of Nathan FolkmanSent: Tuesday, November 05, 2002 1:57 PMTo: [EMAIL PROTECTED]Subject: Re: [AOLSERVER] alloc: invalid block errorsIn a message dated 11/5/2002 2:56:05 PM Eastern Standard Time, [EMAIL PROTECTED] writes: That'll be cool. Set something up to ns_schedule_proc -thread and seeif your thread creation/cleanup shows anything funny going on. Throw inlots of nsv_set and nsv_unset in there.I'm going to get a copy of nstelemetry.adp and see if anything funny ishappening.-- DossyPerhaps these test scripts could form the foundation of a generic test suite. I know Scott has been thinking a lot about this.- n
Re: [AOLSERVER] alloc: invalid block errors
On Tuesday, November 5, 2002, at 03:21 PM, Scott S. Goodwin wrote: Don't let this stop you from writing manual or automated tests -- it should be fairly straightforward to migrate that code into the framework. Or from using other quality management tools than testing -- those get forgotten a lot, and you can't test in quality.