<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Error Handling Template</title>
	<atom:link href="http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/</link>
	<description>Daily posts of Excel tips…and other stuff</description>
	<lastBuildDate>Thu, 09 Feb 2012 23:42:03 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Daily Dose of Excel &#187; Blog Archive &#187; Infinite Loop of Errors</title>
		<link>http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/#comment-73457</link>
		<dc:creator>Daily Dose of Excel &#187; Blog Archive &#187; Infinite Loop of Errors</dc:creator>
		<pubDate>Tue, 07 Feb 2012 16:33:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.dailydoseofexcel.com/?p=1666#comment-73457</guid>
		<description>[...] use the error handling system from Professional Excel Development. If you&#8217;re unfamiliar, here&#8217;s a short explanation.. One of the aspects of this error handling system is a global variable called gbDebug_Mode. It [...]</description>
		<content:encoded><![CDATA[<p>[...] use the error handling system from Professional Excel Development. If you&#8217;re unfamiliar, here&#8217;s a short explanation.. One of the aspects of this error handling system is a global variable called gbDebug_Mode. It [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Patrick O'Beirne</title>
		<link>http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/#comment-29626</link>
		<dc:creator>Patrick O'Beirne</dc:creator>
		<pubDate>Fri, 28 Dec 2007 12:53:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.dailydoseofexcel.com/?p=1666#comment-29626</guid>
		<description>&lt;p&gt;I&#039;ll post this under the Error Handling Template rather than starting a new thread.&lt;/p&gt;
&lt;p&gt;Here&#039;s a question for the &#039;good-practice&#039; experts:&lt;/p&gt;
&lt;p&gt;What is recommended and what is essential for correct error trapping?&lt;br&gt;
Take it that the reader knows the meaning of&lt;br&gt;
On Error Goto 0&#124;Goto Label&#124;Resume Next&lt;br&gt;
Resume [Next&#124;Label]&lt;/p&gt;
&lt;p&gt;The first question is on the need for a Resume. Quite a few authors omit one, such as PED page 393 ff.  They are assuming that all error handling is cancelled on exit from a procedure. Does that have any implications for the program stack?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/&quot; rel=&quot;nofollow&quot;&gt;http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/&lt;/a&gt;&lt;br&gt;
 Dick Kusleika uses a Resume&lt;/p&gt;
&lt;p&gt;The second question is on the use of GoTo in body code versus the desirability of one exit point for a procedure for cleanup.&lt;/p&gt;
&lt;p&gt;-----------------------------------&lt;/p&gt;
&lt;p&gt;Style 1 - no cleanup code needed and there is no Resume.&lt;/p&gt;
&lt;p&gt;Function SomeFunc&lt;br&gt;
On Error GoTo OnError&lt;br&gt;
{Body}&lt;br&gt;
ExitFunc:&lt;br&gt;
Exit Function&lt;br&gt;
OnError:&lt;br&gt;
{handling code}&lt;br&gt;
End Function&lt;/p&gt;
&lt;p&gt;-----------------------------------&lt;/p&gt;
&lt;p&gt;Style 2 - with Resume, without GoTo&lt;/p&gt;
&lt;p&gt;Function SomeFunc&lt;br&gt;
On Error GoTo OnError&lt;br&gt;
{Body}&lt;br&gt;
ExitFunc:&lt;br&gt;
{cleanup code}&lt;br&gt;
Exit Function&lt;br&gt;
OnError:&lt;br&gt;
{handling code}&lt;br&gt;
Resume ExitFunc&lt;br&gt;
End Function&lt;/p&gt;
&lt;p&gt;-----------------------------------&lt;/p&gt;
&lt;p&gt;Style 3 - with Resume, with GoTo&lt;/p&gt;
&lt;p&gt;Function SomeFunc&lt;br&gt;
On Error GoTo OnError&lt;br&gt;
{Body}&lt;br&gt;
GoTo ExitFunc&lt;br&gt;
OnError:&lt;br&gt;
{handling code}&lt;br&gt;
Resume ExitFunc&lt;br&gt;
ExitFunc:&lt;br&gt;
{cleanup code}&lt;br&gt;
End Function&lt;/p&gt;
&lt;p&gt;-----------------------------------&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>I&#8217;ll post this under the Error Handling Template rather than starting a new thread.</p>
<p>Here&#8217;s a question for the &#8216;good-practice&#8217; experts:</p>
<p>What is recommended and what is essential for correct error trapping?<br />
Take it that the reader knows the meaning of<br />
On Error Goto 0|Goto Label|Resume Next<br />
Resume [Next|Label]</p>
<p>The first question is on the need for a Resume. Quite a few authors omit one, such as PED page 393 ff.  They are assuming that all error handling is cancelled on exit from a procedure. Does that have any implications for the program stack?</p>
<p><a href="http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/" rel="nofollow">http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/</a><br />
 Dick Kusleika uses a Resume</p>
<p>The second question is on the use of GoTo in body code versus the desirability of one exit point for a procedure for cleanup.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Style 1 &#8211; no cleanup code needed and there is no Resume.</p>
<p>Function SomeFunc<br />
On Error GoTo OnError<br />
{Body}<br />
ExitFunc:<br />
Exit Function<br />
OnError:<br />
{handling code}<br />
End Function</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Style 2 &#8211; with Resume, without GoTo</p>
<p>Function SomeFunc<br />
On Error GoTo OnError<br />
{Body}<br />
ExitFunc:<br />
{cleanup code}<br />
Exit Function<br />
OnError:<br />
{handling code}<br />
Resume ExitFunc<br />
End Function</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Style 3 &#8211; with Resume, with GoTo</p>
<p>Function SomeFunc<br />
On Error GoTo OnError<br />
{Body}<br />
GoTo ExitFunc<br />
OnError:<br />
{handling code}<br />
Resume ExitFunc<br />
ExitFunc:<br />
{cleanup code}<br />
End Function</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nick Hendriksma</title>
		<link>http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/#comment-25850</link>
		<dc:creator>Nick Hendriksma</dc:creator>
		<pubDate>Tue, 24 Jul 2007 18:27:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.dailydoseofexcel.com/?p=1666#comment-25850</guid>
		<description>&lt;p&gt;For cases in which I need a function to return a non boolean value, I raise an error in the error handler of that function.  For example, suppose I have a function, vGetAndReturnValue, that is supposed to return a variant value.  I use normal error handling within vGetAndReturnValue so if an error occurs in the function it is trapped and an error message is assigned.  I also add an Err.Raise glHandled_Error statement within the error handler of vGetAndReturnValue.  This makes my function behave like a &quot;built-in&quot; VBA function.  I have two options to deal with the error in the calling routine.&lt;/p&gt;
&lt;p&gt;Option 1&lt;br&gt;
On Error GoTo ErrorHandler:&lt;br&gt;
vValue = vGetAndReturnValue()&lt;/p&gt;
&lt;p&gt;If an error occurs in the function, control passes to the calling routine&#039;s error handler (but the description, etc. was created in vGetAndReturnValue()&lt;/p&gt;
&lt;p&gt;Option 2&lt;br&gt;
On Error Resume Next&lt;br&gt;
vValue = vGetAndReturnValue()&lt;br&gt;
if Err.Number  0 Then&lt;br&gt;
   Take appropriate action.....&lt;br&gt;
End if&lt;/p&gt;
&lt;p&gt;With this approach I can modify or add to the error message generated by vGetAndReturnValue or ignore it or take some other action.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>For cases in which I need a function to return a non boolean value, I raise an error in the error handler of that function.  For example, suppose I have a function, vGetAndReturnValue, that is supposed to return a variant value.  I use normal error handling within vGetAndReturnValue so if an error occurs in the function it is trapped and an error message is assigned.  I also add an Err.Raise glHandled_Error statement within the error handler of vGetAndReturnValue.  This makes my function behave like a &#8220;built-in&#8221; VBA function.  I have two options to deal with the error in the calling routine.</p>
<p>Option 1<br />
On Error GoTo ErrorHandler:<br />
vValue = vGetAndReturnValue()</p>
<p>If an error occurs in the function, control passes to the calling routine&#8217;s error handler (but the description, etc. was created in vGetAndReturnValue()</p>
<p>Option 2<br />
On Error Resume Next<br />
vValue = vGetAndReturnValue()<br />
if Err.Number  0 Then<br />
   Take appropriate action&#8230;..<br />
End if</p>
<p>With this approach I can modify or add to the error message generated by vGetAndReturnValue or ignore it or take some other action.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: fzz</title>
		<link>http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/#comment-23983</link>
		<dc:creator>fzz</dc:creator>
		<pubDate>Thu, 10 May 2007 02:05:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.dailydoseofexcel.com/?p=1666#comment-23983</guid>
		<description>&lt;p&gt;Troll? Fine.&lt;/p&gt;
&lt;p&gt;FWIW, it was never a good idea to write volatile data to subdirectories under Program Files. And it looks like you&#039;re admitting you misstated users needing admin priviledges to read files in their own Application Data folders. Maybe I&#039;m a troll because I point out BS when I see it.&lt;/p&gt;
&lt;p&gt;I haven&#039;t used Vista, but if it works similar to XP for inhibiting access to various directories, it provides every bit as much security as worksheet-level passwords in Excel.&lt;/p&gt;
&lt;p&gt;Where I work, many applications are accessed through Terminal Services. One of those applications is Excel. In Excel on Terminal Server, I can&#039;t launch Explorer from VBA using a Shell statement, but I can launch it from Excel&#039;s File &gt; Open dialog by right clicking on a drive or directory and choosing Explore from the popup menu. Explorer doesn&#039;t show the Terminal Server&#039;s C: drive, but I can enter it in the address bar. I suspect it&#039;d be no more difficult to explore Application Data in Vista.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Troll? Fine.</p>
<p>FWIW, it was never a good idea to write volatile data to subdirectories under Program Files. And it looks like you&#8217;re admitting you misstated users needing admin priviledges to read files in their own Application Data folders. Maybe I&#8217;m a troll because I point out BS when I see it.</p>
<p>I haven&#8217;t used Vista, but if it works similar to XP for inhibiting access to various directories, it provides every bit as much security as worksheet-level passwords in Excel.</p>
<p>Where I work, many applications are accessed through Terminal Services. One of those applications is Excel. In Excel on Terminal Server, I can&#8217;t launch Explorer from VBA using a Shell statement, but I can launch it from Excel&#8217;s File &gt; Open dialog by right clicking on a drive or directory and choosing Explore from the popup menu. Explorer doesn&#8217;t show the Terminal Server&#8217;s C: drive, but I can enter it in the address bar. I suspect it&#8217;d be no more difficult to explore Application Data in Vista.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nicholas Hebb</title>
		<link>http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/#comment-23980</link>
		<dc:creator>Nicholas Hebb</dc:creator>
		<pubDate>Wed, 09 May 2007 23:56:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.dailydoseofexcel.com/?p=1666#comment-23980</guid>
		<description>&lt;p&gt;fzz,&lt;/p&gt;
&lt;p&gt;I typically don&#039;t respond to trolls, but just to clarify a few things I will.&lt;/p&gt;
&lt;p&gt;The CSIDL_* constants are used with SHGetFolderPath and related shell functions available through the API. When you use the %ENVIRONMENT_STRINGS%, I believe this invokes a dll which interprets the string then calls shell32.dll. Using SHGetFolderPath cuts out the middle step.&lt;/p&gt;
&lt;p&gt;AppData is the Microsoft recommended location for program data, whereas My Documents is recommended for user files. I don&#039;t know where the JRE or Dr Watson store their logs, but I imagine DrWatson does event logging anyway, which is different.&lt;/p&gt;
&lt;p&gt;My add-in is a COM add-in that requires admin privileges to install. Many users don&#039;t know where the application&#039;s folder is, and even if they did, Vista no longer permits writing to a Program Files sub-directory from an application with user-level permissions.&lt;/p&gt;
&lt;p&gt;Also, it&#039;s typically used in corporate environments where read/write access to AppData is permitted, but access to it via Windows Explorer is locked down. A savvy user could probably access the folder via the command line, but that would be a technical leap for many users.&lt;/p&gt;
&lt;p&gt;In the end, I&#039;ve decided to continue writing to AppData, but I will add a reader in my next release.&lt;/p&gt;
&lt;p&gt;P.S. Dick - sorry for turning your blog into a forum.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>fzz,</p>
<p>I typically don&#8217;t respond to trolls, but just to clarify a few things I will.</p>
<p>The CSIDL_* constants are used with SHGetFolderPath and related shell functions available through the API. When you use the %ENVIRONMENT_STRINGS%, I believe this invokes a dll which interprets the string then calls shell32.dll. Using SHGetFolderPath cuts out the middle step.</p>
<p>AppData is the Microsoft recommended location for program data, whereas My Documents is recommended for user files. I don&#8217;t know where the JRE or Dr Watson store their logs, but I imagine DrWatson does event logging anyway, which is different.</p>
<p>My add-in is a COM add-in that requires admin privileges to install. Many users don&#8217;t know where the application&#8217;s folder is, and even if they did, Vista no longer permits writing to a Program Files sub-directory from an application with user-level permissions.</p>
<p>Also, it&#8217;s typically used in corporate environments where read/write access to AppData is permitted, but access to it via Windows Explorer is locked down. A savvy user could probably access the folder via the command line, but that would be a technical leap for many users.</p>
<p>In the end, I&#8217;ve decided to continue writing to AppData, but I will add a reader in my next release.</p>
<p>P.S. Dick &#8211; sorry for turning your blog into a forum.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jkpieterse</title>
		<link>http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/#comment-23973</link>
		<dc:creator>jkpieterse</dc:creator>
		<pubDate>Wed, 09 May 2007 17:23:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.dailydoseofexcel.com/?p=1666#comment-23973</guid>
		<description>&lt;p&gt;I too write it to a text file to the foder the addin is in. I figure if the user could put it in that folder, he must have permission to write to it.&lt;/p&gt;
&lt;p&gt;I sometimes include a routine that prepares an email message to a configurable address after an error has been reported. I attach the text file to that msg. &lt;/p&gt;
&lt;p&gt;The mail code depends on my client, if they use Outlook, it uses that, if they have Notes, I include that version of my code.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>I too write it to a text file to the foder the addin is in. I figure if the user could put it in that folder, he must have permission to write to it.</p>
<p>I sometimes include a routine that prepares an email message to a configurable address after an error has been reported. I attach the text file to that msg. </p>
<p>The mail code depends on my client, if they use Outlook, it uses that, if they have Notes, I include that version of my code.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alex J</title>
		<link>http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/#comment-23971</link>
		<dc:creator>Alex J</dc:creator>
		<pubDate>Wed, 09 May 2007 15:50:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.dailydoseofexcel.com/?p=1666#comment-23971</guid>
		<description>&lt;p&gt;On the topic of error logs, my practice has been to write to a text file in a subdirectory of the application. Then, I automate the get external data dialog to display the contents of the text file in a hidden sheet of the application. The sheet is viewable by menu selection, and its data is automatically updated by the menu code.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>On the topic of error logs, my practice has been to write to a text file in a subdirectory of the application. Then, I automate the get external data dialog to display the contents of the text file in a hidden sheet of the application. The sheet is viewable by menu selection, and its data is automatically updated by the menu code.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: fzz</title>
		<link>http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/#comment-23965</link>
		<dc:creator>fzz</dc:creator>
		<pubDate>Wed, 09 May 2007 03:07:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.dailydoseofexcel.com/?p=1666#comment-23965</guid>
		<description>&lt;p&gt;Nicholas,&lt;/p&gt;
&lt;p&gt;Presumably CSIDL_APPDATA points to the same directory as the environment variable %APPDATA%, or %USERPROFILE%Application Data.&lt;/p&gt;
&lt;p&gt;No doubt this is an ignorant question, but user processes can write to that directory, and since it&#039;s used in part to store user settings, users would need read/write access to it. Or are you saying that user-initiated processes have higher file system priviledges than users at a console command prompt, for example?&lt;/p&gt;
&lt;p&gt;Whatever. Where does Dr Watson store its crash log files? If your users have Java Runtime Engines, where does it store its update log files? I suspect both are either in the directory pointed to by the %TEMP% environment variable or in subdirectories in it.&lt;/p&gt;
&lt;p&gt;But if the only place from which users can open files is their My Documents folders, and the error logs are intended for users&#039; benefit, then write them to My Documents. Necessity would dictate your design, no?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Nicholas,</p>
<p>Presumably CSIDL_APPDATA points to the same directory as the environment variable %APPDATA%, or %USERPROFILE%Application Data.</p>
<p>No doubt this is an ignorant question, but user processes can write to that directory, and since it&#8217;s used in part to store user settings, users would need read/write access to it. Or are you saying that user-initiated processes have higher file system priviledges than users at a console command prompt, for example?</p>
<p>Whatever. Where does Dr Watson store its crash log files? If your users have Java Runtime Engines, where does it store its update log files? I suspect both are either in the directory pointed to by the %TEMP% environment variable or in subdirectories in it.</p>
<p>But if the only place from which users can open files is their My Documents folders, and the error logs are intended for users&#8217; benefit, then write them to My Documents. Necessity would dictate your design, no?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nicholas Hebb</title>
		<link>http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/#comment-23960</link>
		<dc:creator>Nicholas Hebb</dc:creator>
		<pubDate>Tue, 08 May 2007 23:27:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.dailydoseofexcel.com/?p=1666#comment-23960</guid>
		<description>&lt;p&gt;One follow-up issue with this error handling mechanism - where are others here storing the error log?&lt;/p&gt;
&lt;p&gt;Previously, I just wrote to the program directory (in Program Files), but since the launch of Vista I changed it to a program sub-directory under CSIDL_APPDATA. The problem, though, is that users cannot access this folder without admin permissions. In a corporate environment, this can be a hassle.&lt;/p&gt;
&lt;p&gt;On the other hand, I hate to write this sort of thing to the My Documents folder, so I don&#039;t have a happy solution either way.&lt;/p&gt;
&lt;p&gt;Any thoughts?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>One follow-up issue with this error handling mechanism &#8211; where are others here storing the error log?</p>
<p>Previously, I just wrote to the program directory (in Program Files), but since the launch of Vista I changed it to a program sub-directory under CSIDL_APPDATA. The problem, though, is that users cannot access this folder without admin permissions. In a corporate environment, this can be a hassle.</p>
<p>On the other hand, I hate to write this sort of thing to the My Documents folder, so I don&#8217;t have a happy solution either way.</p>
<p>Any thoughts?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike Woodhouse</title>
		<link>http://www.dailydoseofexcel.com/archives/2007/05/04/error-handling-template/#comment-23953</link>
		<dc:creator>Mike Woodhouse</dc:creator>
		<pubDate>Tue, 08 May 2007 10:17:00 +0000</pubDate>
		<guid isPermaLink="false">http://www.dailydoseofexcel.com/?p=1666#comment-23953</guid>
		<description>&lt;p&gt;As a rule, I like Subs to be named in verb-object form and Functions to describe what they return. So when you have a GetSomething function, to me that&#039;s already a Sub... But I don&#039;t impose my standards on people who don&#039;t report to me (!) so I&#039;d say you&#039;re already 90% of the way to Option 2. Doing it consistently is far more important than doing it my way. Unless you work for me, of course! (And I&#039;ll admit to being very picky over this).&lt;/p&gt;
&lt;p&gt;All that said, in Stephen&#039;s taxonomy I&#039;m an optimist - I add error processing (pretty much as described) when it proves necessary. If I need to propagate errors back up the call stack then I Raise them. But I mostly write for local users, so I can afford it - if I was remote/disconnected then it would have to be a different story.&lt;/p&gt;
&lt;p&gt;And as I look, PED is on top of the pile of books on my desk...&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>As a rule, I like Subs to be named in verb-object form and Functions to describe what they return. So when you have a GetSomething function, to me that&#8217;s already a Sub&#8230; But I don&#8217;t impose my standards on people who don&#8217;t report to me (!) so I&#8217;d say you&#8217;re already 90% of the way to Option 2. Doing it consistently is far more important than doing it my way. Unless you work for me, of course! (And I&#8217;ll admit to being very picky over this).</p>
<p>All that said, in Stephen&#8217;s taxonomy I&#8217;m an optimist &#8211; I add error processing (pretty much as described) when it proves necessary. If I need to propagate errors back up the call stack then I Raise them. But I mostly write for local users, so I can afford it &#8211; if I was remote/disconnected then it would have to be a different story.</p>
<p>And as I look, PED is on top of the pile of books on my desk&#8230;</p>
]]></content:encoded>
	</item>
</channel>
</rss>

