<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Mosa Development</title>
	<atom:link href="http://mosadev.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mosadev.wordpress.com</link>
	<description>Screwing with code and stuff</description>
	<lastBuildDate>Wed, 21 Jan 2009 16:22:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mosadev.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Mosa Development</title>
		<link>http://mosadev.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mosadev.wordpress.com/osd.xml" title="Mosa Development" />
	<atom:link rel='hub' href='http://mosadev.wordpress.com/?pushpress=hub'/>
		<item>
		<title>ELF Linker Survey #3 &#8211; The Section Header</title>
		<link>http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-3-the-section-header/</link>
		<comments>http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-3-the-section-header/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 16:03:08 +0000</pubDate>
		<dc:creator>Kintaro</dc:creator>
				<category><![CDATA[Compiler]]></category>
		<category><![CDATA[Linker]]></category>
		<category><![CDATA[MOSA]]></category>

		<guid isPermaLink="false">http://mosadev.wordpress.com/?p=39</guid>
		<description><![CDATA[Piece by piece we&#8217;re hunting it down here. As we know from Survey #1, the ELF Header contains an offset to the section header table. The &#8220;table&#8221; is just an array of section header&#8217;s. What are they used for? As the sections may be spread throughout the file, we need some kind of information where [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mosadev.wordpress.com&#038;blog=6229486&#038;post=39&#038;subd=mosadev&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Piece by piece we&#8217;re hunting it down here. As we know from <a href="http://mosadev.wordpress.com/2009/01/20/elf-linker-survey-1-the-header-format/" target="_self">Survey #1</a>, the ELF Header contains an offset to the section header table. The &#8220;table&#8221; is just an array of section header&#8217;s. What are they used for? As the sections may be spread throughout the file, we need some kind of information where each section starts, ends, what type of section it is, and so on.</p>
<p>So ELF provides us with section headers. Their format looks like this:</p>
<p><img class="aligncenter size-full wp-image-40" title="elf32sectionheader" src="http://mosadev.files.wordpress.com/2009/01/classdiagram3.png?w=780" alt="elf32sectionheader"   /></p>
<p><span id="more-39"></span>Or in code:</p>
<p><pre class="brush: csharp;">
namespace Mosa.Runtime.Linker.Elf32.Sections
{
    public class Elf32SectionHeader
    {
        public uint Name;
        public Elf32SectionType Type; // uint enum
        public Elf32SectionAttribute Flags; // uint enum
        public uint Address;
        public uint Offset;
        public uint Size;
        public uint Link;
        public uint Info;
        public uint AddressAlignment;
        public uint EntrySize;
    }
}
</pre></p>
<p>As usual, I&#8217;ll explain the used variables piece by piece now:</p>
<ul>
<li><strong>Name</strong> &#8211; Each section has a name. Name is used as an index into the section header string table, which is<br />
just an array of chars. We&#8217;ll come to this in a later section.</li>
<li><strong>Type</strong> &#8211; Each section has to have a type, telling is whether it&#8217;s a code section, data section, etc.</li>
<li><strong>Flags</strong> &#8211; Through flags, one can modify the section. For example the Write-flag enables write access to the<br />
section&#8217;s data, and the ExecuteInstructions-Flag, which tells us that the section contains executable code.</li>
<li><strong>Address</strong> &#8211; Some sections will be loaded into memory (like e.g. data sections), so Address give the virtual<br />
address for the section&#8217;s data in memory.</li>
<li><strong>Offset</strong> &#8211; Gives an offset in bytes from the beginning of the file to the section&#8217;s actual data.</li>
<li><strong>Size</strong> -</li>
<li><strong>Link</strong> -</li>
<li><strong>Info</strong> -</li>
<li><strong>AddressAlignment</strong> -</li>
<li><strong>EntrySize</strong> -</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mosadev.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mosadev.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mosadev.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mosadev.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mosadev.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mosadev.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mosadev.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mosadev.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mosadev.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mosadev.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mosadev.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mosadev.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mosadev.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mosadev.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mosadev.wordpress.com&#038;blog=6229486&#038;post=39&#038;subd=mosadev&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-3-the-section-header/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Kintaro</media:title>
		</media:content>

		<media:content url="http://mosadev.files.wordpress.com/2009/01/classdiagram3.png" medium="image">
			<media:title type="html">elf32sectionheader</media:title>
		</media:content>
	</item>
		<item>
		<title>ELF Linker Survey #2 &#8211; The Program Header</title>
		<link>http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-2-the-program-header/</link>
		<comments>http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-2-the-program-header/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 13:01:49 +0000</pubDate>
		<dc:creator>Kintaro</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mosadev.wordpress.com/?p=29</guid>
		<description><![CDATA[Ok, we&#8217;ve covered the general file format and the ELF header in the previous section. So now we&#8217;ll take care of the program header. There&#8217;s not much in there, just take a look: ProgramHeaderType &#8211; Defines the program header&#8217;s type Offset &#8211; Offset inbytes to the segment start VirtualAddress - PhysicalAddress - FileSize &#8211; Size [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mosadev.wordpress.com&#038;blog=6229486&#038;post=29&#038;subd=mosadev&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ok, we&#8217;ve covered the general file format and the <a href="http://mosadev.wordpress.com/2009/01/20/elf-linker-survey-1-the-header-format" target="_self">ELF header</a> in the <a href="http://mosadev.wordpress.com/2009/01/20/elf-linker-survey-1-the-header-format" target="_self">previous section</a>. So now we&#8217;ll take care of the program header. There&#8217;s not much in there, just take a look:<img class="aligncenter size-full wp-image-34" title="elf32programheader" src="http://mosadev.files.wordpress.com/2009/01/classdiagram2.png?w=780" alt="elf32programheader"   /></p>
<p><span id="more-29"></span></p>
<p><pre class="brush: csharp;">namespace Mosa.Runtime.Linker.Elf32
{
    public class Elf32ProgramHeader
    {
        public Elf32ProgramHeaderType Type; // uint enum
        public uint Offset;        
        public uint VirtualAddress;
        public uint PhysicalAddress;
        public uint FileSize;
        public uint MemorySize;
        public Elf32ProgramHeaderFlags Flags; // uint enum
        public uint Alignment;
}</pre></p>
<ul>
<li><strong>ProgramHeaderType</strong> &#8211; Defines the program header&#8217;s type</li>
<li><strong>Offset</strong> &#8211; Offset inbytes to the segment start</li>
<li><strong>VirtualAddress</strong> -</li>
<li><strong>PhysicalAddress</strong> -</li>
<li><strong>FileSize</strong> &#8211; Size of the segment it takes up in the file in bytes.</li>
<li><strong>MemorySize</strong> &#8211; Size of the segment it takes up in memory in bytes.</li>
<li><strong>Flags</strong> &#8211; Defines some flags that modify the segment, e.g. Execute / Write / Read, etc.</li>
<li><strong>Alignment</strong> &#8211; The file alignment.</li>
</ul>
<p>I haven&#8217;t disassembled and understood every little thing about the program header. If you&#8217;re missing something here and know about it, please feel free to comment.</p>
<p>But for now, let&#8217;s move on to the <a href="http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-3-the-section-header/" target="_self">section header table</a> and the <a href="http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-3-the-section-header/" target="_self">section headers</a> themselves.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mosadev.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mosadev.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mosadev.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mosadev.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mosadev.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mosadev.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mosadev.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mosadev.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mosadev.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mosadev.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mosadev.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mosadev.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mosadev.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mosadev.wordpress.com/29/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mosadev.wordpress.com&#038;blog=6229486&#038;post=29&#038;subd=mosadev&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-2-the-program-header/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Kintaro</media:title>
		</media:content>

		<media:content url="http://mosadev.files.wordpress.com/2009/01/classdiagram2.png" medium="image">
			<media:title type="html">elf32programheader</media:title>
		</media:content>
	</item>
		<item>
		<title>ELF Linker Survey #1 &#8211; The Header Format</title>
		<link>http://mosadev.wordpress.com/2009/01/20/elf-linker-survey-1-the-header-format/</link>
		<comments>http://mosadev.wordpress.com/2009/01/20/elf-linker-survey-1-the-header-format/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 12:33:14 +0000</pubDate>
		<dc:creator>Kintaro</dc:creator>
				<category><![CDATA[Compiler]]></category>
		<category><![CDATA[Linker]]></category>
		<category><![CDATA[MOSA]]></category>

		<guid isPermaLink="false">http://mosadev.wordpress.com/?p=3</guid>
		<description><![CDATA[The MOSA compiler is already able to produce valid PE binaries. But as PE isn&#8217;t the only binary format that&#8217;s out there, we&#8217;re alo working on an ELF Linker. In this series of articles I&#8217;ll describe the format, occured problems, etc that I had to tackle during development. So let&#8217;s get this thing started with [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mosadev.wordpress.com&#038;blog=6229486&#038;post=3&#038;subd=mosadev&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The MOSA compiler is already able to produce valid PE binaries. But as PE isn&#8217;t the only binary format that&#8217;s out there, we&#8217;re alo working on an ELF Linker.</p>
<p>In this series of articles I&#8217;ll describe the format, occured problems, etc that I had to tackle during development. So let&#8217;s get this thing started with the format itself and especially it&#8217;s header. In picture 1 below, you can see a rough sketch for the ELF file format. Each ELF file contains a header, <a href="http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-2-the-program-header/" target="_self">program header</a>, a <a href="http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-3-the-section-header/" target="_self">section header table</a>, <a href="http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-3-the-section-header/" target="_self">section headers</a>, sections, and so on.</p>
<p><span id="more-3"></span></p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-27" title="elf_format" src="http://mosadev.files.wordpress.com/2009/01/picture-5.png?w=780" alt="elf_format"   /></p>
<p style="text-align:center;">Picture 1: ELF file format</p>
<p style="text-align:center;">The first one, the header, gives us general information about the file and it&#8217;s internal structure. We need this information first to be able to read out the rest of the file.</p>
<p><img class="aligncenter size-full wp-image-7" title="elf32header" src="http://mosadev.files.wordpress.com/2009/01/classdiagram1.png?w=780" alt="elf32header"   /></p>
<p>Don&#8217;t worry. We&#8217;ll get to every little component piece by piece. First of all, some code. Code tells more than 1000 lines of preaching <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><!--more--></p>
<p><pre class="brush: csharp;">

namespace Mosa.Runtime.Linker.Elf32
{
    public class Elf32Header
    {
        public byte[] Ident = new byte[16];
        public Elf32FileType Type;
        public Elf32MachineType Machine;
        public Elf32Version Version;
        public uint EntryAddress;
        public uint ProgramHeaderOffset;
        public uint SectionHeaderOffset;
        public uint Flags;
        public ushort ElfHeaderSize;
        public ushort ProgramHeaderEntrySize;
        public ushort ProgramHeaderNumber;
        public ushort SectionHeaderEntrySize;
        public ushort SectionHeaderNumber;
        public ushort SectionHeaderStringIndex;

        public static readonly byte[] MagicNumber = new byte[4] {
            (byte)0x7F,
            (byte)'E',
            (byte)'L',
            (byte)'F'
        };
}

</pre></p>
<ul>
<li><strong>Ident</strong> &#8211; The ident is a 16 byte long value that marks an ELF file and gives first hand information about the binary. It contains 4 initial bytes that contain a &#8220;magic number&#8221; so that it is recognized as an ELF binary. This magic number is 0x7F + &#8220;ELF&#8221;. <strong><br />
</strong></p>
<ul>
<li>0 &#8211; 3: The magic number</li>
<li>4: Ident class</li>
<li>5: Data flags</li>
<li>6: Version</li>
<li>7: Padding size</li>
<li>8-15: Left unused for later versions</li>
</ul>
</li>
<li><strong>Type</strong> &#8211; The type is an integral value determining the type of our object file, e.g. if it&#8217;s an executable, a library, an object file, etc.</li>
<li><strong>Machine</strong> &#8211; This marks what kind of machine our binary is for, e.g. whether it&#8217;s for Intel Architectures, MIPS, Sparc, etc.</li>
<li><strong>Version</strong> &#8211; To hold track what version of ELF we&#8217;re using. At the moment 1 is the only valid version.</li>
<li><strong>EntryAddress</strong> &#8211; This is the address where the code segment starts that should be first executed when the binary is invoked.</li>
<li><strong>ProgramHeaderOffset</strong> &#8211; Gives the offset in bytes from the beginning of the file to the start of the <a href="http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-2-the-program-header/" target="_self">program header</a>. Zero means that there is none (otherwise it&#8217;d file into the ELF header, which is something we don&#8217;t want).</li>
<li><strong>SectionHeaderOffset</strong> &#8211; Gives the offset in byte from the beginning of the file to the start of the <a href="http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-3-the-section-header/" target="_self">section header</a>. Zero means that there is none (otherwise it&#8217;d file into the ELF header, which is something we don&#8217;t want).</li>
<li>Flags -</li>
<li><strong>ElfHeaderSize</strong> &#8211; The size of our header. Just sum up all data type sizes contained and end up with 0&#215;34 bytes.</li>
<li><strong>ProgramHeaderEntrySize</strong> &#8211; Gives the size in bytes for the <a href="http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-2-the-program-header/" target="_self">program headers</a>. Every program header has to be the same size.</li>
<li><strong>ProgramHeaderNumber</strong> &#8211; Gives the amount of <a href="http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-2-the-program-header/" target="_self">program headers</a> available in this binary. Usually 1.</li>
<li><strong>SectionHeaderEntrySize</strong> &#8211; Gives the size in bytes for the <a href="http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-3-the-section-header/" target="_self">section headers</a>. Every <a href="http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-3-the-section-header/" target="_self">section header</a> has to be the same size.</li>
<li><strong>SectionHeaderNumber</strong> &#8211; Gives the amount of <a href="http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-3-the-section-header/" target="_self">section headers</a> available in this binary.</li>
<li>
<pre><strong>SectionHeaderStringIndex</strong> - Index into the <a href="http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-3-the-section-header/" target="_self">section header table</a> to the <a href="http://mosadev.wordpress.com/2009/01/21/elf-linker-survey-3-the-section-header/" target="_self">section header</a> that
contains information about the string table section.</pre>
</li>
</ul>
<p><strong>Write the Ident</strong></p>
<p>Writing the Ident is pretty simple and straightforward:</p>
<p><pre class="brush: csharp;">public void CreateIdent(Elf32IdentClass identClass, Elf32IdentData data, byte[] padding)
{
   // Store magic number
    Ident[0] = MagicNumber[0];
    Ident[1] = MagicNumber[1];
    Ident[2] = MagicNumber[2];
    Ident[3] = MagicNumber[3];

    // Store class
    Ident[4] = (byte)identClass;
    // Store data flags
    Ident[5] = (byte)data;
    // Version has to be current, otherwise the file won't load
    Ident[6] = (byte)Elf32Version.Current;
    Version = Elf32Version.Current;

    // Set padding byte to
    Ident[7] = 0x07;

    for (int i = 8; i &lt; 16; ++i)
        Ident[i] = 0x00;
 }
</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mosadev.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mosadev.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mosadev.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mosadev.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mosadev.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mosadev.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mosadev.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mosadev.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mosadev.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mosadev.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mosadev.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mosadev.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mosadev.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mosadev.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mosadev.wordpress.com&#038;blog=6229486&#038;post=3&#038;subd=mosadev&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mosadev.wordpress.com/2009/01/20/elf-linker-survey-1-the-header-format/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Kintaro</media:title>
		</media:content>

		<media:content url="http://mosadev.files.wordpress.com/2009/01/picture-5.png" medium="image">
			<media:title type="html">elf_format</media:title>
		</media:content>

		<media:content url="http://mosadev.files.wordpress.com/2009/01/classdiagram1.png" medium="image">
			<media:title type="html">elf32header</media:title>
		</media:content>
	</item>
	</channel>
</rss>
