aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2014-02-11 16:09:16 +1100
committerDave Chinner <david@fromorbit.com>2014-02-11 16:09:16 +1100
commit8421062d4613f71f1c3fec2ee68b6a806cc40e3c (patch)
tree77cd8bab24dab654b3acd2b6aa52332620b8de5e
parent6274cfacddc4598c2bee871bab8c2d1b65038c0f (diff)
downloadxfs-documentation-8421062d4613f71f1c3fec2ee68b6a806cc40e3c.tar.gz
doc: import XFS Filesystem Structure documentation
This is pulled in from the xml format documents that are present in git://git.kernel.org/pub/scm/fs/xfs/xfsdocs-xml-dev.git. They are converted to asciidoc format and a makefile infrastructure is built around the newly imported design documentation. Signed-off-by: Dave Chinner <dchinner@redhat.com>
-rw-r--r--design/Makefile26
-rw-r--r--design/XFS_Filesystem_Structure/Makefile34
-rw-r--r--design/XFS_Filesystem_Structure/allocation_groups.asciidoc782
-rw-r--r--design/XFS_Filesystem_Structure/common_types.asciidoc49
-rw-r--r--design/XFS_Filesystem_Structure/data_extents.asciidoc247
-rw-r--r--design/XFS_Filesystem_Structure/directories.asciidoc1193
-rw-r--r--design/XFS_Filesystem_Structure/docinfo.xml72
-rw-r--r--design/XFS_Filesystem_Structure/extended_attributes.asciidoc609
-rw-r--r--design/XFS_Filesystem_Structure/images/15a.pngbin0 -> 50788 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/15b.pngbin0 -> 95395 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/16.pngbin0 -> 36702 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/18.pngbin0 -> 23260 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/20a.pngbin0 -> 72052 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/20b.pngbin0 -> 91930 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/23.pngbin0 -> 19185 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/28.pngbin0 -> 48498 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/30.pngbin0 -> 27246 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/31.pngbin0 -> 10652 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/32.pngbin0 -> 60716 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/35.pngbin0 -> 167184 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/36.pngbin0 -> 188957 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/39.pngbin0 -> 48607 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/43.pngbin0 -> 103425 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/48.pngbin0 -> 145519 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/54.pngbin0 -> 217092 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/6.pngbin0 -> 87067 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/61.pngbin0 -> 33415 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/62.pngbin0 -> 53958 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/64.pngbin0 -> 49003 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/69.pngbin0 -> 128382 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/72.pngbin0 -> 138179 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/76.pngbin0 -> 31266 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/code/33a.pngbin0 -> 106484 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/code/33b.pngbin0 -> 40229 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/code/40.pngbin0 -> 94094 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/code/46.pngbin0 -> 78484 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/code/57.pngbin0 -> 17987 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/code/60.pngbin0 -> 32907 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/code/61.pngbin0 -> 54687 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/code/65.pngbin0 -> 107515 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/code/66.pngbin0 -> 69316 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/code/67.pngbin0 -> 109738 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/code/71.pngbin0 -> 62675 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/code/73-74.pngbin0 -> 153732 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/code/74.pngbin0 -> 62210 bytes
-rw-r--r--design/XFS_Filesystem_Structure/images/code/SVG/33a.svg185
-rw-r--r--design/XFS_Filesystem_Structure/images/code/SVG/33b.svg158
-rw-r--r--design/XFS_Filesystem_Structure/images/code/SVG/40.svg177
-rw-r--r--design/XFS_Filesystem_Structure/images/code/SVG/46.svg197
-rw-r--r--design/XFS_Filesystem_Structure/images/code/SVG/57.svg129
-rw-r--r--design/XFS_Filesystem_Structure/images/code/SVG/60.svg182
-rw-r--r--design/XFS_Filesystem_Structure/images/code/SVG/61.svg157
-rw-r--r--design/XFS_Filesystem_Structure/images/code/SVG/65.svg233
-rw-r--r--design/XFS_Filesystem_Structure/images/code/SVG/66.svg260
-rw-r--r--design/XFS_Filesystem_Structure/images/code/SVG/67.svg232
-rw-r--r--design/XFS_Filesystem_Structure/images/code/SVG/71.svg150
-rw-r--r--design/XFS_Filesystem_Structure/images/code/SVG/73-74.svg364
-rw-r--r--design/XFS_Filesystem_Structure/images/code/SVG/74.svg201
-rw-r--r--design/XFS_Filesystem_Structure/images/icon.svg3936
-rw-r--r--design/XFS_Filesystem_Structure/internal_inodes.asciidoc182
-rw-r--r--design/XFS_Filesystem_Structure/journaling_log.asciidoc3
-rw-r--r--design/XFS_Filesystem_Structure/ondisk_inode.asciidoc448
-rw-r--r--design/XFS_Filesystem_Structure/symbolic_links.asciidoc81
-rw-r--r--design/XFS_Filesystem_Structure/xfs_filesystem_structure.asciidoc53
64 files changed, 10337 insertions, 3 deletions
diff --git a/design/Makefile b/design/Makefile
index eab25ba..29b9539 100644
--- a/design/Makefile
+++ b/design/Makefile
@@ -1,6 +1,12 @@
#
# design documentation build rules
#
+SUBDIRS=XFS_Filesystem_Structure
+
+# Never blow away subdirs
+.PRECIOUS: $(SUBDIRS)
+.PHONY: $(SUBDIRS)
+
DOCFILES=$(wildcard *.asciidoc)
HTML_TARGETS=$(addsuffix .html, $(basename $(DOCFILES)))
@@ -14,11 +20,25 @@ PDF_TARGETS=$(addsuffix .pdf, $(basename $(DOCFILES)))
@echo "[pdf] $*"
$(Q)a2x -f pdf $<
-all: html pdf
+default: html pdf $(SUBDIRS)
+
+$(SUBDIRS):
+ @echo "Building $@"
+ $(Q)$(MAKE) $(MAKEOPTS) -q -C $@ || $(MAKE) $(MAKEOPTS) -C $@
html: $(HTML_TARGETS)
pdf: $(PDF_TARGETS)
-clean:
- @rm -f *.html *.css
+# manually construct build dependencies for target builds so that modification
+# of individual files will trigger a rebuild of the document correctly.
+$(PDF_TARGETS): $(DOCFILES)
+
+$(HTML_TARGETS): $(DOCFILES)
+
+clean: $(addsuffix -clean, $(SUBDIRS))
+ $(Q)rm -f *.html *.pdf *.css
+
+%-clean:
+ @echo "Cleaning $*"
+ $(Q)$(MAKE) $(MAKEOPTS) -C $* clean
diff --git a/design/XFS_Filesystem_Structure/Makefile b/design/XFS_Filesystem_Structure/Makefile
new file mode 100644
index 0000000..359dd98
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/Makefile
@@ -0,0 +1,34 @@
+#
+# design documentation build rules
+#
+TARGET=xfs_filesystem_structure
+
+DOCFILES=$(wildcard *.asciidoc) \
+ docinfo.xml
+
+HTML_TARGET=$(addsuffix .html, $(TARGET))
+PDF_TARGET=$(addsuffix .pdf, $(TARGET))
+
+default: html pdf
+
+%.html: %.asciidoc
+ @echo "[html] $*"
+ $(Q)a2x -f xhtml -d book $<
+
+%.pdf: %.asciidoc
+ @echo "[pdf] $*"
+ $(Q)a2x -f pdf -d book $<
+
+html: $(HTML_TARGET)
+
+pdf: $(PDF_TARGET)
+
+# manually construct build dependencies for target builds so that modification
+# of individual files will trigger a rebuild of the document correctly.
+$(PDF_TARGET): $(DOCFILES)
+
+$(HTML_TARGET): $(DOCFILES)
+
+clean:
+ $(Q)rm -f *.html *.pdf *.css
+
diff --git a/design/XFS_Filesystem_Structure/allocation_groups.asciidoc b/design/XFS_Filesystem_Structure/allocation_groups.asciidoc
new file mode 100644
index 0000000..a3721c2
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/allocation_groups.asciidoc
@@ -0,0 +1,782 @@
+[[Allocation_Groups]]
+= Allocation Groups
+
+XFS filesystems are divided into a number of equally sized chunks called
+Allocation Groups. Each AG can almost be thought of as an individual filesystem
+that maintains it's own space usage. Each AG can be up to one terabyte in size
+(512 bytes * 2^31^), regardless of the underlying
+device's sector size.
+
+Each AG has the following characteristics:
+
+ * A super block describing overall filesystem info
+ * Free space management
+ * Inode allocation and tracking
+
+Having multiple AGs allows XFS to handle most operations in parallel without
+degrading performance as the number of concurrent accessing increases.
+
+The only global information maintained by the first AG (primary) is free spac e
+across the filesystem and total inode counts. If the
++XFS_SB_VERSION2_LAZYSBCOUNTBIT+ flag is set in the superblock, these are only
+updated on-disk when the filesystem is cleanly unmounted (umount or shutdown).
+
+Immediately after a mkfs.xfs, the primary AG has the following disk layout the
+subsequent AGs do not have any inodes allocated:
+
+.Allocation group layout
+image::images/6.png[]
+
+Each of these structures are expanded upon in the following sections.
+
+[[Superblocks]]
+== Superblocks
+
+Each AG starts with a superblock. The first one is the primary superblock that
+stores aggregate AG information. Secondary superblocks are only used by
+xfs_repair when the primary superblock has been corrupted.
+
+The superblock is defined by the following structure. The description of each
+field follows.
+
+TODO: update for v5 formats.
+
+[source, c]
+----
+struct xfs_sb
+{
+ __uint32_t sb_magicnum;
+ __uint32_t sb_blocksize;
+ xfs_drfsbno_t sb_dblocks;
+ xfs_drfsbno_t sb_rblocks;
+ xfs_drtbno_t sb_rextents;
+ uuid_t sb_uuid;
+ xfs_dfsbno_t sb_logstart;
+ xfs_ino_t sb_rootino;
+ xfs_ino_t sb_rbmino;
+ xfs_ino_t sb_rsumino;
+ xfs_agblock_t sb_rextsize;
+ xfs_agblock_t sb_agblocks;
+ xfs_agnumber_t sb_agcount;
+ xfs_extlen_t sb_rbmblocks;
+ xfs_extlen_t sb_logblocks;
+ __uint16_t sb_versionnum;
+ __uint16_t sb_sectsize;
+ __uint16_t sb_inodesize;
+ __uint16_t sb_inopblock;
+ char sb_fname[12];
+ __uint8_t sb_blocklog;
+ __uint8_t sb_sectlog;
+ __uint8_t sb_inodelog;
+ __uint8_t sb_inopblog;
+ __uint8_t sb_agblklog;
+ __uint8_t sb_rextslog;
+ __uint8_t sb_inprogress;
+ __uint8_t sb_imax_pct;
+ __uint64_t sb_icount;
+ __uint64_t sb_ifree;
+ __uint64_t sb_fdblocks;
+ __uint64_t sb_frextents;
+ xfs_ino_t sb_uquotino;
+ xfs_ino_t sb_gquotino;
+ __uint16_t sb_qflags;
+ __uint8_t sb_flags;
+ __uint8_t sb_shared_vn;
+ xfs_extlen_t sb_inoalignmt;
+ __uint32_t sb_unit;
+ __uint32_t sb_width;
+ __uint8_t sb_dirblklog;
+ __uint8_t sb_logsectlog;
+ __uint16_t sb_logsectsize;
+ __uint32_t sb_logsunit;
+ __uint32_t sb_features2;
+};
+----
+.sb_magicnum
+Identifies the filesystem. It's value is +XFS_SB_MAGIC = 0x58465342 "XFSB"+.
+
+.sb_blocksize
+The size of a basic unit of space allocation in bytes. Typically, this is 4096
+(4KB) but can range from 512 to 65536 bytes.
+
+.sb_dblocks
+Total number of blocks available for data and metadata on the filesystem.
+
+.sb_rblocks
+Number blocks in the real-time disk device. Refer to
+xref:Real-time_Devices[real-time sub-volumes] for more information.
+
+.sb_rextents
+Number of extents on the real-time device.
+
+.sb_uuid
+UUID (Universally Unique ID) for the filesystem. Filesystems can be mounted by
+the UUID instead of device name.
+
+.sb_logstart
+First block number for the journaling log if the log is internal (ie. not on a
+separate disk device). For an external log device, this will be zero (the log
+will also start on the first block on the log device).
+
+.sb_rootino
+Root inode number for the filesystem. Typically, this is 128 when using a
+4KB block size.
+
+.sb_rbmino
+Bitmap inode for real-time extents.
+
+.sb_rsumino
+Summary inode for real-time bitmap.
+
+.sb_rextsize
+Realtime extent size in blocks.
+
+.sb_agblocks
+Size of each AG in blocks. For the actual size of the last AG, refer to the
+xref:AG_Free_Space_Management[free space] +agf_length+ value.
+
+.sb_agcount
+Number of AGs in the filesystem.
+
+.sb_rbmblocks
+Number of real-time bitmap blocks.
+
+.sb_logblocks
+Number of blocks for the journaling log.
+
+.sb_versionnum
+Filesystem version number. This is a bitmask specifying the features enabled
+when creating the filesystem. Any disk checking tools or drivers that do not
+recognize any set bits must not operate upon the filesystem. Most of the flagsi
+indicate features introduced over time. The value must be 4 including the
+following flags:
+
+.Version 4 Superblock version flags
+[options="header"]
+|=====
+| Flag | Description
+| +XFS_SB_VERSION_ATTRBIT+ | Set if any inode have extended attributes.
+| +XFS_SB_VERSION_NLINKBIT+ | Set if any inodes use 32-bit di_nlink values.
+| +XFS_SB_VERSION_QUOTABIT+ |
+Quotas are enabled on the filesystem. This
+also brings in the various quota fields in the superblock.
+
+| +XFS_SB_VERSION_ALIGNBIT+ | Set if sb_inoalignmt is used.
+| +XFS_SB_VERSION_DALIGNBIT+ | Set if sb_unit and sb_width are used.
+| +XFS_SB_VERSION_SHAREDBIT+ | Set if sb_shared_vn is used.
+| +XFS_SB_VERSION_LOGV2BIT+ | Version 2 journaling logs are used.
+| +XFS_SB_VERSION_SECTORBIT+ | Set if sb_sectsize is not 512.
+| +XFS_SB_VERSION_EXTFLGBIT+ | Unwritten extents are used. This is always set.
+| +XFS_SB_VERSION_DIRV2BIT+ |
+Version 2 directories are used. This is always set.
+
+| +XFS_SB_VERSION_MOREBITSBIT+ |
+Set if the sb_features2 field in the superblock contains more flags.
+|=====
+
+.sb_sectsize
+Specifies the underlying disk sector size in bytes. Majority of the time, this
+is 512 bytes. This determines the minimum I/O alignment including Direct I/O.
+
+.sb_inodesize
+Size of the inode in bytes. The default is 256 (2 inodes per standard sector)
+but can be made as large as 2048 bytes when creating the filesystem.
+
+.sb_inopblock
+Number of inodes per block. This is equivalent to +sb_blocksize / sb_inodesize+.
+
+.sb_fname[12]
+Name for the filesystem. This value can be used in the mount command.
+
+.sb_blocklog
+log~2~ value of +sb_blocksize+. In other terms, +sb_blocksize = 2^sb_blocklog^+.
+
+.sb_sectlog
+log~2~ value of +sb_sectsize+.
+
+.sb_inodelog
+log~2~ value of +sb_inodesize+.
+
+.sb_inopblog
+log~2~ value of +sb_inopblock+.
+
+.sb_agblklog
+log~2~ value of +sb_agblocks+ (rounded up). This value is used to generate inode
+numbers and absolute block numbers defined in extent maps.
+
+.sb_rextslog
+log~2~ value of +sb_rextents+.
+
+.sb_inprogress
+Flag specifying that the filesystem is being created.
+
+.sb_imax_pct
+Maximum percentage of filesystem space that can be used for inodes. The default
+value is 5%.
+
+.sb_icount
+Global count for number inodes allocated on the filesystem. This is only
+maintained in the first superblock.
+
+.sb_ifree
+Global count of free inodes on the filesystem. This is only maintained in the
+first superblock.
+
+.sb_fdblocks
+Global count of free data blocks on the filesystem. This is only maintained in
+the first superblock.
+
+.sb_frextents
+Global count of free real-time extents on the filesystem. This is only
+maintained in the first superblock.
+
+.sb_uquotino
+Inode for user quotas. This and the following two quota fields only apply if
++XFS_SB_VERSION_QUOTABIT+ flag is set in +sb_versionnum+. Refer to
+xref:Quota_Inodes[quota inodes] for more information
+
+.sb_gquotino
+Inode for group or project quotas. Group and Project quotas cannot be used at
+the same time.
+
+.sb_qflags
+Quota flags. It can be a combination of the following flags:
+
+.Superblock quota flags
+[options="header"]
+|=====
+| Flag | Description
+| +XFS_UQUOTA_ACCT+ | User quota accounting is enabled.
+| +XFS_UQUOTA_ENFD+ | User quotas are enforced.
+| +XFS_UQUOTA_CHKD+ | User quotas have been checked.
+| +XFS_PQUOTA_ACCT+ | Project quota accounting is enabled.
+| +XFS_OQUOTA_ENFD+ | Other (group/project) quotas are enforced.
+| +XFS_OQUOTA_CHKD+ | Other (group/project) quotas have been checked.
+| +XFS_GQUOTA_ACCT+ | Group quota accounting is enabled.
+|=====
+
+.sb_flags
+Miscellaneous flags.
+
+.sb_shared_vn
+Reserved and must be zero ("vn" stands for version number).
+
+.sb_inoalignmt
+Inode chunk alignment in fsblocks.
+
+.sb_unit
+Underlying stripe or raid unit in blocks.
+
+.sb_width
+Underlying stripe or raid width in blocks.
+
+.sb_dirblklog
+log~2~ multiplier that determines the granularity of directory block allocations
+in fsblocks.
+
+.sb_logsectlog
+log~2~ value of the log subvolume's sector size. This is only used if the
+journaling log is on a separate disk device (i.e. not internal).
+
+.sb_logsectsize
+The log's sector size in bytes if the filesystem uses an external log device.
+
+.sb_logsunit
+The log device's stripe or raid unit size. This only applies to version 2 logs
++XFS_SB_VERSION_LOGV2BIT+ is set in +sb_versionnum+.
+
+.sb_features2
+Additional version flags if +XFS_SB_VERSION_MOREBITSBIT+ is set in
++sb_versionnum+. The currently defined additional features include:
+
+.Extended Version 4 Superblock flags
+[options="header"]
+|=====
+| Flag | Description
+| +XFS_SB_VERSION2_LAZYSBCOUNTBIT+ |
+Lazy global counters. Making a filesystem with this bit set can improve
+performance. The global free space and inode counts are only updated in the
+primary superblock when the filesystem is cleanly unmounted.
+
+| +XFS_SB_VERSION2_ATTR2BIT+ |
+Extended attributes version 2. Making a filesystem with this optimises the inode
+layout of extended attributes.
+
+| +XFS_SB_VERSION2_PARENTBIT+ |
+Parent pointers. All inodes must have an extended attribute that points back to
+its parent inode. The primary purpose for this information is in backup systems.
+|=====
+
+
+=== xfs_db superblock example
+
+A filesystem is made on a single SATA disk with the following command:
+
+----
+# mkfs.xfs -i attr=2 -n size=16384 -f /dev/sda7
+meta-data=/dev/sda7 isize=256 agcount=16, agsize=3923122 blks
+ = sectsz=512 attr=2
+data = bsize=4096 blocks=62769952, imaxpct=25
+ = sunit=0 swidth=0 blks, unwritten=1
+naming =version 2 bsize=16384
+log =internal log bsize=4096 blocks=30649, version=1
+ = sectsz=512 sunit=0 blks
+realtime =none extsz=65536 blocks=0, rtextents=0
+----
+
+And in xfs_db, inspecting the superblock:
+
+----
+xfs_db> sb
+xfs_db> p
+magicnum = 0x58465342
+blocksize = 4096
+dblocks = 62769952
+rblocks = 0
+rextents = 0
+uuid = 32b24036-6931-45b4-b68c-cd5e7d9a1ca5
+logstart = 33554436
+rootino = 128
+rbmino = 129
+rsumino = 130
+rextsize = 16
+agblocks = 3923122
+agcount = 16
+rbmblocks = 0
+logblocks = 30649
+versionnum = 0xb084
+sectsize = 512
+inodesize = 256
+inopblock = 16
+fname = "\000\000\000\000\000\000\000\000\000\000\000\000"
+blocklog = 12
+sectlog = 9
+inodelog = 8
+inopblog = 4
+agblklog = 22
+rextslog = 0
+inprogress = 0
+imax_pct = 25
+icount = 64
+ifree = 61
+fdblocks = 62739235
+frextents = 0
+uquotino = 0
+gquotino = 0
+qflags = 0
+flags = 0
+shared_vn = 0
+inoalignmt = 2
+unit = 0
+width = 0
+dirblklog = 2
+logsectlog = 0
+logsectsize = 0
+logsunit = 0
+features2 = 8
+----
+
+
+[[AG_Free_Space_Management]]
+== AG Free Space Management
+
+The XFS filesystem tracks free space in an allocation group using two B+trees.
+One B+tree tracks space by block number, the second by the size of the free
+space block. This scheme allows XFS to quickly find free space near a given
+block or of a given size.
+
+All block numbers, indexes and counts are AG relative.
+
+[[AG_Free_Space_Block]]
+=== AG Free Space Block
+
+The second sector in an AG contains the information about the two free space
+B+trees and associated free space information for the AG. The "AG Free Space
+Block", also knows as the +AGF+, uses the following structure:
+
+[source, c]
+----
+struct xfs_agf {
+ __be32 agf_magicnum;
+ __be32 agf_versionnum;
+ __be32 agf_seqno;
+ __be32 agf_length;
+ __be32 agf_roots[XFS_BTNUM_AGF];
+ __be32 agf_spare0;
+ __be32 agf_levels[XFS_BTNUM_AGF];
+ __be32 agf_spare1;
+ __be32 agf_flfirst;
+ __be32 agf_fllast;
+ __be32 agf_flcount;
+ __be32 agf_freeblks;
+ __be32 agf_longest;
+ __be32 agf_btreeblks;
+};
+----
+
+The rest of the bytes in the sector are zeroed. +XFS_BTNUM_AGF+ is set to 2,
+index 0 for the count B+tree and index 1 for the size B+tree.
+
+.agf_magicnum
+Specifies the magic number for the AGF sector: "XAGF" (0x58414746).
+
+.agf_versionnum
+Set to +XFS_AGF_VERSION+ which is currently 1.
+
+.agf_seqno
+Specifies the AG number for the sector.
+
+.agf_length
+Specifies the size of the AG in filesystem blocks. For all AGs except the last,
+This must be equal to the superblock's +sb_agblocks+ value. For the last AG,
+this could be less than the +sb_agblocks+ value. It is this value that should
+be used to determine the size of the AG.
+
+.agf_roots
+Specifies the block number for the root of the two free space B+trees.
+
+.agf_levels
+Specifies the level or depth of the two free space B+trees. For a fresh AG, this
+will be one, and the "roots" will point to a single leaf of level 0.
+
+.agf_flfirst
+Specifies the index of the first "free list" block. Free lists are covered in
+more detail later on.
+
+.agf_fllast
+Specifies the index of the last "free list" block.
+
+.agf_flcount
+Specifies the number of blocks in the "free list".
+
+.agf_freeblks
+Specifies the current number of free blocks in the AG.
+
+.agf_longest
+Specifies the number of blocks of longest contiguous free space in the AG.
+
+.agf_btreeblks
+Specifies the number of blocks used for the free space B+trees. This is only
+used if the +XFS_SB_VERSION2_LAZYSBCOUNTBIT+ bit is set in +sb_features2+.
+
+[[AG_Free_Space_Btrees]]
+=== AG Free Space B+trees
+
+The two Free Space B+trees store a sorted array of block offset and block
+counts in the leaves of the B+tree. The first B+tree is sorted by the offset,
+the second by the count or size.
+
+The trees use the following header:
+
+[source, c]
+----
+struct xfs_btree_sblock {
+ __be32 bb_magic;
+ __be16 bb_level;
+ __be16 bb_numrecs;
+ __be32 bb_leftsib;
+ __be32 bb_rightsib;
+};
+----
+
+Leaf nodes contain a sorted array of offset/count pairs which are also used for
+node keys:
+
+[source, c]
+----
+struct xfs_alloc_rec {
+ __be32 ar_startblock;
+ __be32 ar_blockcount;
+};
+----
+
+Node pointers are an AG relative block pointer:
+
+[source, c]
+----
+typedef __be32 xfs_alloc_ptr_t;
+----
+
+* As the free space tracking is AG relative, all the block numbers are only
+32-bits.
+* The +bb_magic+ value depends on the B+tree: "ABTB" (0x41425442) for the block
+offset B+tree, "ABTC" (0x41425443) for the block count B+tree.
+* The +xfs_btree_sblock_t+ header is used for intermediate B+tree node as well
+as the leaves.
+* For a typical 4KB filesystem block size, the offset for the +xfs_alloc_ptr_t+
+array would be +0xab0+ (2736 decimal).
+* There are a series of macros in +xfs_btree.h+ for deriving the offsets,
+counts, maximums, etc for the B+trees used in XFS.
+
+The following diagram shows a single level B+tree which consists of one leaf:
+
+.Freespace B+tree with one leaf.
+image::images/15a.png[]
+
+With the intermediate nodes, the associated leaf pointers are stored in a
+separate array about two thirds into the block. The following diagram
+illustrates a 2-level B+tree for a free space B+tree:
+
+.Multi-level freespace B+tree.
+image::images/15b.png[]
+
+[[AG_Free_List]]
+=== AG Free List
+
+The AG Free List is located in the 4^th^ sector of each AG and is known as the
+AGFL. It is an array of AG relative block pointers for reserved space for
+growing the free space B+trees. This space cannot be used for general user data
+including inodes, data, directories and extended attributes.
+
+With a freshly made filesystem, 4 blocks are reserved immediately after the free
+space B+tree root blocks (blocks 4 to 7). As they are used up as the free space
+fragments, additional blocks will be reserved from the AG and added to the free
+list array.
+
+As the free list array is located within a single sector, a typical device will
+have space for 128 elements in the array (512 bytes per sector, 4 bytes per AG
+relative block pointer). The actual size can be determined by using the
++XFS_AGFL_SIZE+ macro.
+
+Active elements in the array are specified by the
+xref:AG_Free_Space_Block[AGF's] +agf_flfirst+, +agf_fllast+ and +agf_flcount+
+values. The array is managed as a circular list.
+
+.AG Free List layout
+image::images/16.png[]
+
+The presence of these reserved block guarantees that the free space B+trees can
+be updated if any blocks are freed by extent changes in a full AG.
+
+==== xfs_db AGF Examples
+
+These examples are derived from an AG that has been deliberately fragmented.
+The AGF:
+
+----
+xfs_db> agf 0
+xfs_db> p
+magicnum = 0x58414746
+versionnum = 1
+seqno = 0
+length = 3923122
+bnoroot = 7
+cntroot = 83343
+bnolevel = 2
+cntlevel = 2
+flfirst = 22
+fllast = 27
+flcount = 6
+freeblks = 3654234
+longest = 3384327
+btreeblks = 0
+----
+
+In the AGFL, the active elements are from 22 to 27 inclusive which are obtained
+from the +flfirst+ and +fllast+ values from the +agf+ in the previous example:
+
+----
+xfs_db> agfl 0
+xfs_db> p
+bno[0-127] = 0:4 1:5 2:6 3:7 4:83342 5:83343 6:83344 7:83345 8:83346 9:83347
+ 10:4 11:5 12:80205 13:80780 14:81496 15:81766 16:83346 17:4 18:5
+ 19:80205 20:82449 21:81496 22:81766 23:82455 24:80780 25:5
+ 26:80205 27:83344
+----
+
+The free space B+tree sorted by block offset, the root block is from the AGF's
++bnoroot+ value:
+
+----
+xfs_db> fsblock 7
+xfs_db> type bnobt
+xfs_db> p
+magic = 0x41425442
+level = 1
+numrecs = 4
+leftsib = null
+rightsib = null
+keys[1-4] = [startblock,blockcount]
+ 1:[12,16] 2:[184586,3] 3:[225579,1] 4:[511629,1]
+ptrs[1-4] = 1:2 2:83347 3:6 4:4
+----
+
+Blocks 2, 83347, 6 and 4 contain the leaves for the free space B+tree by
+starting block. Block 2 would contain offsets 16 up to but not including 184586
+while block 4 would have all offsets from 511629 to the end of the AG.
+
+The free space B+tree sorted by block count, the root block is from the AGF's
++cntroot+ value:
+
+----
+xfs_db> fsblock 83343
+xfs_db> type cntbt
+xfs_db> p
+magic = 0x41425443
+level = 1
+numrecs = 4
+leftsib = null
+rightsib = null
+keys[1-4] = [blockcount,startblock]
+ 1:[1,81496] 2:[1,511729] 3:[3,191875] 4:[6,184595]
+ptrs[1-4] = 1:3 2:83345 3:83342 4:83346
+----
+
+The leaf in block 3, in this example, would only contain single block counts.
+The offsets are sorted in ascending order if the block count is the same.
+
+Inspecting the leaf in block 83346, we can see the largest block at the end:
+
+----
+xfs_db> fsblock 83346
+xfs_db> type cntbt
+xfs_db> p
+magic = 0x41425443
+level = 0
+numrecs = 344
+leftsib = 83342
+rightsib = null
+recs[1-344] = [startblock,blockcount]
+ 1:[184595,6] 2:[187573,6] 3:[187776,6]
+ ...
+ 342:[513712,755] 343:[230317,258229] 344:[538795,3384327]
+----
+
+The longest block count must be the same as the AGF's +longest+ value.
+
+[[AG_Inode_Management]]
+== AG Inode Management
+
+[[Inode_Numbers]]
+=== Inode Numbers
+
+Inode numbers in XFS come in two forms: AG relative and absolute.
+
+AG relative inode numbers always fit within 32 bits. The number of bits actually
+used is determined by the sum of the xref:Superblocks[superblock's] +sb_inoplog+
+and +sb_agblklog+ values. Relative inode numbers are found within the AG's inode
+structures.
+
+Absolute inode numbers include the AG number in the high bits, above the bits
+used for the AG relative inode number. Absolute inode numbers are found in
+xref:Directories[directory] entries.
+
+.Inode number formats
+image::images/18.png[]
+
+[[Inode_Information]]
+=== Inode Information
+
+Each AG manages its own inodes. The third sector in the AG contains information
+about the AG's inodes and is known as the AGI.
+
+The AGI uses the following structure:
+
+[source, c]
+----
+struct xfs_agi {
+ __be32 agi_magicnum;
+ __be32 agi_versionnum;
+ __be32 agi_seqno
+ __be32 agi_length;
+ __be32 agi_count;
+ __be32 agi_root;
+ __be32 agi_level;
+ __be32 agi_freecount;
+ __be32 agi_newino;
+ __be32 agi_dirino;
+ __be32 agi_unlinked[64];
+}
+----
+.agi_magicnum
+Specifies the magic number for the AGI sector: "XAGI" (0x58414749).
+
+.agi_versionnum
+Set to +XFS_AGI_VERSION+ which is currently 1.
+
+.agi_seqno
+Specifies the AG number for the sector.
+
+.agi_length
+Specifies the size of the AG in filesystem blocks.
+
+.agi_count
+Specifies the number of inodes allocated for the AG.
+
+.agi_root
+Specifies the block number in the AG containing the root of the inode B+tree.
+
+.agi_level
+Specifies the number of levels in the inode B+tree.
+
+.agi_freecount
+Specifies the number of free inodes in the AG.
+
+.agi_newino
+Specifies AG relative inode number most recently allocated.
+
+.agi_dirino
+Deprecated and not used, it's always set to NULL (-1).
+
+.agi_unlinked[64]
+Hash table of unlinked (deleted) inodes that are still being referenced. Refer
+to xref:Unlinked_Pointer[unlinked list pointers] for more information.
+
+
+[[Inode_Btrees]]
+== Inode B+trees
+
+Inodes are allocated in chunks of 64, and a B+tree is used to track these chunks
+of inodes as they are allocated and freed. The block containing root of the
+B+tree is defined by the AGI's +agi_root+ value.
+
+The B+tree header for the nodes and leaves use the +xfs_btree_sblock+ structure
+which is the same as the header used in the xref:AG_Free_Space_Btrees[AGF
+B+trees].
+
+Leaves contain an array of the following structure:
+
+[source,c]
+----
+struct xfs_inobt_rec {
+ __be32 ir_startino;
+ __be32 ir_freecount;
+ __be64 ir_free;
+};
+----
+
+Nodes contain key/pointer pairs using the following types:
+
+[source,c]
+----
+struct xfs_inobt_key {
+ __be32 ir_startino;
+};
+typedef __be32 xfs_inobt_ptr_t;
+----
+
+For the leaf entries, +ir_startino+ specifies the starting inode number for the
+chunk, +ir_freecount+ specifies the number of free entries in the chuck, and the
++ir_free+ is a 64 element bit array specifying which entries are free in the
+chunk.
+
+The following diagram illustrates a single level inode B+tree:
+
+.Single Level inode b+tree
+image::images/20a.png[]
+
+
+And a 2-level inode B+tree:
+
+.Multi-Level inode b+tree
+image::images/20b.png[]
+
+
+==== xfs_db AGI examples
+TODO
+
+[[Real-time_Devices]]
+== Real-time Devices
+
+TODO
+
diff --git a/design/XFS_Filesystem_Structure/common_types.asciidoc b/design/XFS_Filesystem_Structure/common_types.asciidoc
new file mode 100644
index 0000000..5b52271
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/common_types.asciidoc
@@ -0,0 +1,49 @@
+= Common XFS Types
+
+All the following XFS types can be found in xfs_types.h. NULL values are always
+-1 on disk (ie. all bits for the value set to one).
+
+.xfs_ino_t
+Unsigned 64 bit absolute xref:Inode_Numbers[inode number].
+
+.xfs_off_t
+Signed 64 bit file offset.
+
+.xfs_daddr_t
+Signed 64 bit disk address.
+
+.xfs_agnumber_t
+Unsigned 32 bit xref:Allocation_Groups[AG number].
+
+.xfs_agblock_t
+Unsigned 32 bit AG relative block number.
+
+.xfs_extlen_t
+Unsigned 32 bit xref:Data_Extents[extent] length in blocks.
+
+.xfs_extnum_t
+Signed 32 bit number of extents in a file.
+
+.xfs_dablk_t
+Unsigned 32 bit block number for xref:Directories[directories] and
+xref:Extended_Attributes[extended attributes].
+
+.xfs_dahash_t
+Unsigned 32 bit hash of a directory file name or extended attribute name.
+
+.xfs_dfsbno_t
+Unsigned 64 bit filesystem block number combining
+xref:Allocation_Groups[AG number] and block offset into the AG.
+
+.xfs_drfsbno_t
+Unsigned 64 bit raw filesystem block number.
+
+.xfs_drtbno_t
+Unsigned 64 bit extent number in the xref:Real-time_Devices[real-time]
+sub-volume.
+
+.xfs_dfiloff_t
+Unsigned 64 bit block offset into a file.
+
+.xfs_dfilblks_t
+Unsigned 64 bit block count for a file.
diff --git a/design/XFS_Filesystem_Structure/data_extents.asciidoc b/design/XFS_Filesystem_Structure/data_extents.asciidoc
new file mode 100644
index 0000000..d7f51e4
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/data_extents.asciidoc
@@ -0,0 +1,247 @@
+[[Data_Extents]]
+= Data Extents
+
+XFS allocates space for a file using extents: starting location and length. XFS
+extents also specify the file's logical starting offset for a file. This allows
+a files extent map to automatically support sparse files (i.e. "holes" in the
+file). A flag is also used to specify if the extent has been preallocated and
+not yet been written to (unwritten extent).
+
+A file can have more than one extent if one chunk of contiguous disk space is
+not available for the file. As a file grows, the XFS space allocator will
+attempt to keep space contiguous and merge extents. If more than one file is
+being allocated space in the same AG at the same time, multiple extents for the
+files will occur as the extents get interleaved. The effect of this can vary
+depending on the extent allocator used in the XFS driver.
+
+An extent is 128 bits in size and uses the following packed layout:
+
+.Extent record format
+image::images/31.png[]
+
+The extent is represented by the +xfs_bmbt_rec+ structure which uses a big
+endian format on-disk. In-core management of extents use the +xfs_bmbt_irec+
+structure which is the unpacked version of +xfs_bmbt_rec+:
+
+[source, c]
+----
+struct xfs_bmbt_irec {
+ xfs_fileoff_t br_startoff;
+ xfs_fsblock_t br_startblock;
+ xfs_filblks_t br_blockcount;
+ xfs_exntst_t br_state;
+};
+----
+
+
+
+The extent +br_state+ field uses the following enum declaration:
+
+[source, c]
+----
+typedef enum {
+ XFS_EXT_NORM,
+ XFS_EXT_UNWRITTEN,
+ XFS_EXT_INVALID
+} xfs_exntst_t;
+----
+
+Some other points about extents:
+
+* The +xfs_bmbt_rec_32_t+ and +xfs_bmbt_rec_64_t+ structures are effectively
+the same as +xfs_bmbt_rec_t+, just different representations of the same 128
+bits in on-disk big endian format.
+
+* When a file is created and written to, XFS will endeavour to keep the extents
+within the same AG as the inode. It may use a different AG if the AG is busy
+or there is no space left in it.
+
+* If a file is zero bytes long, it will have no extents, +di_nblocks+ and
++di_nexents+ will be zero. Any file with data will have at least one extent, and
+each extent can use from 1 to over 2 million blocks (2^21^) on the filesystem.
+For a default 4KB block size filesystem, a single extent can be up to 8GB in
+length.
+
+The following two subsections cover the two methods of storing extent
+information for a file. The first is the fastest and simplest where the inode
+completely contains an extent array to the file's data. The second is slower and
+more complex B+tree which can handle thousands to millions of extents
+efficiently.
+
+
+[[Extent_List]]
+== Extent List
+
+Local extents are where the entire extent array is stored within the inode's
+data fork itself. This is the most optimal in terms of speed and resource
+consumption. The trade-off is the file can only have a few extents before the
+inode runs out of space.
+
+The "data fork" of the inode contains an array of extents, the size of the array
+determined by the inode's +di_nextents+ value.
+
+.Inode data fork extent layout
+image::images/32.png[]
+
+The number of extents that can fit in the inode depends on the inode size and
++di_forkoff+. For a default 256 byte inode with no extended attributes, a file
+can up to 19 extents with this format. Beyond this, extents have to use the
+B+tree format.
+
+=== xfs_db: Inode data fork extents
+
+An 8MB file with one extent:
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+core.magic = 0x494e
+core.mode = 0100644
+core.version = 1
+core.format = 2 (extents)
+...
+core.size = 8294400
+core.nblocks = 2025
+core.extsize = 0
+core.nextents = 1
+core.naextents = 0
+core.forkoff = 0
+...
+u.bmx[0] = [startoff,startblock,blockcount,extentflag]
+ 0:[0,25356,2025,0]
+----
+
+A 24MB file with three extents:
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+...
+core.format = 2 (extents)
+...
+core.size = 24883200
+core.nblocks = 6075
+core.nextents = 3
+...
+u.bmx[0-2] = [startoff,startblock,blockcount,extentflag]
+ 0:[0,27381,2025,0]
+ 1:[2025,31431,2025,0]
+ 2:[4050,35481,2025,0]
+----
+
+Raw disk version of the inode with the third extent highlighted (+di_u+ always
+starts at offset 0x64):
+
+.Raw inode contents with extents
+image::images/code/33a.png[]
+
+We can expand the highlighted section into the following bit array from MSB to
+LSB with the file offset and the block count highlighted:
+
+.Encoded extent
+image::images/code/33b.png[]
+
+A 4MB file with two extents and a hole in the middle, the first extent
+containing 64KB of data, the second about 4MB in containing 32KB (+write+ 64KB,
++lseek+ 4MB, +write+ 32KB operations):
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+...
+core.format = 2 (extents)
+...
+core.size = 4063232
+core.nblocks = 24
+core.nextents = 2
+...
+u.bmx[0-1] = [startoff,startblock,blockcount,extentflag]
+ 0:[0,37506,16,0]
+ 1:[984,37522,8,0]
+----
+
+
+[[Btree_Extent_List]]
+== B+tree Extent List
+
+Beyond the simple extent array, to efficiently manage large extent maps, XFS
+uses B+trees. The root node of the B+tree is stored in the inode's data fork.
+All block pointers for extent B+trees are 64-bit absolute block numbers.
+
+For a single level B+tree, the root node points to the B+tree's leaves. Each
+leaf occupies one filesystem block and contains a header and an array of extents
+sorted by the file's offset. Each leaf has left and right (or backward and
+forward) block pointers to adjacent leaves. For a standard 4KB filesystem block,
+a leaf can contain up to 254 extents before a B+tree rebalance is triggered.
+
+For a multi-level B+tree, the root node points to other B+tree nodes which
+eventually point to the extent leaves. B+tree keys are based on the file's
+offset. The nodes at each level in the B+tree point to the adjacent nodes.
+
+The base B+tree node is used for extents, directories and extended attributes.
+The structures used for inode's B+tree root are:
+
+[source, c]
+----
+struct xfs_bmdr_block {
+ __be16 bb_level;
+ __be16 bb_numrecs;
+};
+struct xfs_bmbt_key {
+ xfs_dfiloff_t br_startoff;
+};
+typedef xfs_dfsbno_t xfs_bmbt_ptr_t, xfs_bmdr_ptr_t;
+----
+
+* On disk, the B+tree node starts with the +xfs_bmbr_block_t+ header followed by
+an array of +xfs_bmbt_key_t+ values and then an array of +xfs_bmbt_ptr_t+
+values. The size of both arrays is specified by the header's +bb_numrecs+ value.
+
+* The root node in the inode can only contain up to 19 key/pointer pairs for a
+standard 256 byte inode before a new level of nodes is added between the root
+and the leaves. This will be less if +di_forkoff+ is not zero (i.e. attributes
+are in use on the inode).
+
+The subsequent nodes and leaves of the B+tree use the +xfs_btree_lblock+
+declaration:
+
+[source, c]
+----
+struct xfs_btree_lblock {
+ __be32 bb_magic;
+ __be16 bb_level;
+ __be16 bb_numrecs;
+ __be64 bb_leftsib;
+ __be64 bb_rightsib;
+};
+----
+
+* For intermediate nodes, the data following +xfs_btree_lblock+ is the same as
+the root node: array of +xfs_bmbt_key+ value followed by an array of
++xfs_bmbt_ptr_t+ values that starts halfway through the block (offset 0x808 for
+a 4096 byte filesystem block).
+
+* For leaves, an array of +xfs_bmbt_rec+ extents follow the +xfs_btree_lblock+
+header.
+
+* Nodes and leaves use the same value for +bb_magic+:
+
+[source, c]
+#define XFS_BMAP_MAGIC 0x424d4150 /* 'BMAP' */
+
+* The +bb_level+ value determines if the node is an intermediate node or a leaf.
+Leaves have a +bb_level+ of zero, nodes are one or greater.
+
+* Intermediate nodes, like leaves, can contain up to 254 pointers to leaf blocks
+for a standard 4KB filesystem block size as both the keys and pointers are 64
+bits in size.
+
+.Single level extent B+tree
+image::images/35.png[]
+
+.Multi-level extent B+tree
+image::images/36.png[]
+
+=== BMBT xfs_db Example
+
+TODO
diff --git a/design/XFS_Filesystem_Structure/directories.asciidoc b/design/XFS_Filesystem_Structure/directories.asciidoc
new file mode 100644
index 0000000..98143f7
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/directories.asciidoc
@@ -0,0 +1,1193 @@
+[[Directories]]
+= Directories
+
+[NOTE]
+Only v2 directories covered here. v1 directories are obsolete.
+
+[NOTE]
+The term "block" in this section will refer to directory blocks, not filesystem
+blocks unless otherwise specified.
+
+The size of a "directory block" is defined by the xref:Superblocks[superblock's]
++sb_dirblklog+ value. The size in bytes = +sb_blocksize+ * 2^sb_dirblklog^.
+For example, if +sb_blocksize+ = 4096 and +sb_dirblklog+ = 2, the directory block
+size is 16384 bytes. Directory blocks are always allocated in multiples based on
++sb_dirblklog+. Directory blocks cannot be more that 65536 bytes in size.
+
+All directory entries contain the following "data":
+
+* Entry's name (counted string consisting of a single byte +namelen+ followed by
++name+ consisting of an array of 8-bit chars without a NULL terminator).
+
+* Entry's absolute inode number (<xref linkend="Inode_Numbers"/>), which are
+always 64 bits (8 bytes) in size except a special case for shortform
+directories.
+
+* An +offset+ or +tag+ used for iterative readdir calls.
+
+All non-shortform directories also contain two additional structures: "leaves"
+and "freespace indexes".
+
+* Leaves contain the sorted hashed name value (+xfs_da_hashname()+ in
+xfs_da_btree.c) and associated "address" which points to the effective offset
+into the directory's data structures. Leaves are used to optimise lookup
+operations.
+
+* Freespace indexes contain free space/empty entry tracking for quickly finding an
+appropriately sized location for new entries. They maintain the largest free
+space for each "data" block.
+
+A few common types are used for the directory structures:
+
+[source, c]
+----
+typedef __uint16_t xfs_dir2_data_off_t;
+typedef __uint32_t xfs_dir2_dataptr_t;
+----
+
+
+[[Shortform_Directories]]
+== Shortform Directories
+
+* Directory entries are stored within the inode.
+
+* Only data stored is the name, inode # and offset, no "leaf" or "freespace index"
+information is required as an inode can only store a few entries.
+
+* "." is not stored (as it's in the inode itself), and ".." is a dedicated
++parent+ field in the header.
+
+* The number of directories that can be stored in an inode depends on the inode
+size (<xref linkend="On-disk_Inode"/>), the number of entries, the length of the
+entry names and extended attribute data.
+
+* Once the number of entries exceed the space available in the inode, the format
+is converted to a "Block Directory".
+
+* Shortform directory data is packed as tightly as possible on the disk with the
+remaining space zeroed:
+
+[source, c]
+----
+typedef struct xfs_dir2_sf {
+ xfs_dir2_sf_hdr_t hdr;
+ xfs_dir2_sf_entry_t list[1];
+} xfs_dir2_sf_t;
+typedef struct xfs_dir2_sf_hdr {
+ __uint8_t count;
+ __uint8_t i8count;
+ xfs_dir2_inou_t parent;
+} xfs_dir2_sf_hdr_t;
+typedef struct xfs_dir2_sf_entry {
+ __uint8_t namelen;
+ xfs_dir2_sf_off_t offset;
+ __uint8_t name[1];
+ xfs_dir2_inou_t inumber;
+} xfs_dir2_sf_entry_t;
+----
+
+.Shortform Directory layout
+image::images/39.png[]
+
+* Inode numbers are stored using 4 or 8 bytes depending on whether all the inode
+numbers for the directory fit in 4 bytes (32 bits) or not. If all inode numbers
+fit in 4 bytes, the header's +count+ value specifies the number of entries in
+the directory and +i8count+ will be zero. If any inode number exceeds 4 bytes,
+all inode numbers will be 8 bytes in size and the header's +i8count+ value
+specifies the number of entries and count will be zero. The following union
+covers the shortform inode number structure:
+
+[source, c]
+----
+typedef struct { __uint8_t i[8]; } xfs_dir2_ino8_t;
+typedef struct { __uint8_t i[4]; } xfs_dir2_ino4_t;
+typedef union {
+ xfs_dir2_ino8_t i8;
+ xfs_dir2_ino4_t i4;
+} xfs_dir2_inou_t;
+----
+
+=== Shortform Directory xfs_db Example
+
+A directory is created with 4 files, all inode numbers fitting within 4 bytes:
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+core.magic = 0x494e
+core.mode = 040755
+core.version = 1
+core.format = 1 (local)
+core.nlinkv1 = 2
+...
+core.size = 94
+core.nblocks = 0
+core.extsize = 0
+core.nextents = 0
+...
+u.sfdir2.hdr.count = 4
+u.sfdir2.hdr.i8count = 0
+u.sfdir2.hdr.parent.i4 = 128 /* parent = root inode */
+u.sfdir2.list[0].namelen = 15
+u.sfdir2.list[0].offset = 0x30
+u.sfdir2.list[0].name = "frame000000.tst"
+u.sfdir2.list[0].inumber.i4 = 25165953
+u.sfdir2.list[1].namelen = 15
+u.sfdir2.list[1].offset = 0x50
+u.sfdir2.list[1].name = "frame000001.tst"
+u.sfdir2.list[1].inumber.i4 = 25165954
+u.sfdir2.list[2].namelen = 15
+u.sfdir2.list[2].offset = 0x70
+u.sfdir2.list[2].name = "frame000002.tst"
+u.sfdir2.list[2].inumber.i4 = 25165955
+u.sfdir2.list[3].namelen = 15
+u.sfdir2.list[3].offset = 0x90
+u.sfdir2.list[3].name = "frame000003.tst"
+u.sfdir2.list[3].inumber.i4 = 25165956
+----
+
+The raw data on disk with the first entry highlighted. The six byte header
+precedes the first entry:
+
+.Shortform Directory entry detail
+image::images/code/40.png[]
+
+Next, an entry is deleted (frame000001.tst), and any entries after the deleted
+entry are moved or compacted to "cover" the hole:
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+core.magic = 0x494e
+core.mode = 040755
+core.version = 1
+core.format = 1 (local)
+core.nlinkv1 = 2
+...
+core.size = 72
+core.nblocks = 0
+core.extsize = 0
+core.nextents = 0
+...
+u.sfdir2.hdr.count = 3
+u.sfdir2.hdr.i8count = 0
+u.sfdir2.hdr.parent.i4 = 128
+u.sfdir2.list[0].namelen = 15
+u.sfdir2.list[0].offset = 0x30
+u.sfdir2.list[0].name = "frame000000.tst"
+u.sfdir2.list[0].inumber.i4 = 25165953
+u.sfdir2.list[1].namelen = 15
+u.sfdir2.list[1].offset = 0x70
+u.sfdir2.list[1].name = "frame000002.tst"
+u.sfdir2.list[1].inumber.i4 = 25165955
+u.sfdir2.list[2].namelen = 15
+u.sfdir2.list[2].offset = 0x90
+u.sfdir2.list[2].name = "frame000003.tst"
+u.sfdir2.list[2].inumber.i4 = 25165956
+----
+
+Raw disk data, the space beyond the shortform entries is invalid and could be non-zero:
+
+----
+xfs_db> type text
+xfs_db> p
+00: 49 4e 41 ed 01 01 00 02 00 00 00 00 00 00 00 00 INA.............
+10: 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 03 ................
+20: 44 b2 45 a2 09 fd e4 50 44 b2 45 a3 12 ee b5 d0 D.E....PD.E.....
+30: 44 b2 45 a3 12 ee b5 d0 00 00 00 00 00 00 00 48 D.E............H
+40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+50: 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 ................
+60: ff ff ff ff 03 00 00 00 00 80 0f 00 30 66 72 61 ............0fra
+70: 6d 65 30 30 30 30 30 30 2e 74 73 74 01 80 00 81 me000000.tst....
+80: 0f 00 70 66 72 61 6d 65 30 30 30 30 30 32 2e 74 ..pframe000002.t
+90: 73 74 01 80 00 83 0f 00 90 66 72 61 6d 65 30 30 st.......frame00
+a0: 30 30 30 33 2e 74 73 74 01 80 00 84 0f 00 90 66 0003.tst.......f
+b0: 72 61 6d 65 30 30 30 30 30 33 2e 74 73 74 01 80 rame000003.tst..
+c0: 00 84 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+----
+
+TODO: 8-byte inode number example</section>
+
+
+[[Block_Directories]]
+== Block Directories
+
+When the shortform directory space exceeds the space in an inode, the directory
+data is moved into a new single directory block outside the inode. The inode's
+format is changed from "local" to "extent". Following is a list of points about
+block directories.
+
+ <itemizedlist>
+
+* All directory data is stored within the one directory block, including "." and
+".." entries which are mandatory.
+
+* The block also contains "leaf" and "freespace index " information.
+
+* The location of the block is defined by the inode's in-core
+xref:Extent_List[extent list]: the +di_u.u_bmx[0]+ value. The file offset in
+the extent must always be zero and the +length+ = (directory block size /
+filesystem block size). The block number points to the filesystem block
+containing the directory data.
+
+* Block directory data is stored in the following structures:
+
+[source, c]
+----
+#define XFS_DIR2_DATA_FD_COUNT 3
+typedef struct xfs_dir2_block {
+ xfs_dir2_data_hdr_t hdr;
+ xfs_dir2_data_union_t u[1];
+ xfs_dir2_leaf_entry_t leaf[1];
+ xfs_dir2_block_tail_t tail;
+} xfs_dir2_block_t;
+typedef struct xfs_dir2_data_hdr {
+ __uint32_t magic;
+ xfs_dir2_data_free_t bestfree[XFS_DIR2_DATA_FD_COUNT];
+} xfs_dir2_data_hdr_t;
+typedef struct xfs_dir2_data_free {
+ xfs_dir2_data_off_t offset;
+ xfs_dir2_data_off_t length;
+} xfs_dir2_data_free_t;
+typedef union {
+ xfs_dir2_data_entry_t entry;
+ xfs_dir2_data_unused_t unused;
+} xfs_dir2_data_union_t;
+typedef struct xfs_dir2_data_entry {
+ xfs_ino_t inumber;
+ __uint8_t namelen;
+ __uint8_t name[1];
+ xfs_dir2_data_off_t tag;
+} xfs_dir2_data_entry_t;
+typedef struct xfs_dir2_data_unused {
+ __uint16_t freetag; /* 0xffff */
+ xfs_dir2_data_off_t length;
+ xfs_dir2_data_off_t tag;
+} xfs_dir2_data_unused_t;
+typedef struct xfs_dir2_leaf_entry {
+ xfs_dahash_t hashval;
+ xfs_dir2_dataptr_t address;
+} xfs_dir2_leaf_entry_t;
+typedef struct xfs_dir2_block_tail {
+ __uint32_t count;
+ __uint32_t stale;
+} xfs_dir2_block_tail_t;
+----
+
+.Block directory layout
+image::images/43.png[]
+
+* The +tag+ in the +xfs_dir2_data_entry_t+ structure stores its offset from the
+start of the block.
+
+* Start of a free space region is marked with the +xfs_dir2_data_unused_t+
+structure where the +freetag+ is +0xffff+. The +freetag+ and +length+ overwrites
+the +inumber+ for an entry. The +tag+ is located at +length - sizeof(tag)+ from
+the start of the +unused+ entry on-disk.
+
+* The +bestfree+ array in the header points to as many as three of the largest
+spaces of free space within the block for storing new entries sorted by largest
+to third largest. If there are less than 3 empty regions, the remaining
++bestfree+ elements are zeroed. The +offset+ specifies the offset from the start
+of the block in bytes, and the +length+ specifies the size of the free space in
+bytes. The location each points to must contain the above
++xfs_dir2_data_unused_t+ structure. As a block cannot exceed 64KB in size, each
+is a 16-bit value. +bestfree+ is used to optimise the time required to locate
+space to create an entry. It saves scanning through the block to find a location
+suitable for every entry created.
+
+* The +tail+ structure specifies the number of elements in the +leaf+ array and
+the number of +stale+ entries in the array. The +tail+ is always located at the
+end of the block. The +leaf+ data immediately precedes the +tail+ structure.
+
+* The +leaf+ array, which grows from the end of the block just before the +tail+
+structure, contains an array of hash/address pairs for quickly looking up a name
+by a hash value. Hash values are covered by the introduction to directories. The
++address+ on-disk is the offset into the block divided by 8
+(+XFS_DIR2_DATA_ALIGN+). Hash/address pairs are stored on disk to optimise
+lookup speed for large directories. If they were not stored, the hashes have to
+be calculated for all entries each time a lookup occurs in a directory.
+
+
+=== Block Directory xfs_db Example
+
+A directory is created with 8 entries, directory block size = filesystem block size:
+
+----
+xfs_db> sb 0
+xfs_db> p
+magicnum = 0x58465342
+blocksize = 4096
+...
+dirblklog = 0
+...
+xfs_db&gt; inode &lt;inode#&gt;
+xfs_db&gt; p
+core.magic = 0x494e
+core.mode = 040755
+core.version = 1
+core.format = 2 (extents)
+core.nlinkv1 = 2
+...
+core.size = 4096
+core.nblocks = 1
+core.extsize = 0
+core.nextents = 1
+...
+u.bmx[0] = [startoff,startblock,blockcount,extentflag] 0:[0,2097164,1,0]
+----
+
+Go to the "startblock" and show the raw disk data:
+
+----
+xfs_db> dblock 0
+xfs_db> type text
+xfs_db> p
+000: 58 44 32 42 01 30 0e 78 00 00 00 00 00 00 00 00 XD2B.0.x........
+010: 00 00 00 00 02 00 00 80 01 2e 00 00 00 00 00 10 ................
+020: 00 00 00 00 00 00 00 80 02 2e 2e 00 00 00 00 20 ................
+030: 00 00 00 00 02 00 00 81 0f 66 72 61 6d 65 30 30 .........frame00
+040: 30 30 30 30 2e 74 73 74 80 8e 59 00 00 00 00 30 0000.tst..Y....0
+050: 00 00 00 00 02 00 00 82 0f 66 72 61 6d 65 30 30 .........frame00
+060: 30 30 30 31 2e 74 73 74 d0 ca 5c 00 00 00 00 50 0001.tst.......P
+070: 00 00 00 00 02 00 00 83 0f 66 72 61 6d 65 30 30 .........frame00
+080: 30 30 30 32 2e 74 73 74 00 00 00 00 00 00 00 70 0002.tst.......p
+090: 00 00 00 00 02 00 00 84 0f 66 72 61 6d 65 30 30 .........frame00
+0a0: 30 30 30 33 2e 74 73 74 00 00 00 00 00 00 00 90 0003.tst........
+0b0: 00 00 00 00 02 00 00 85 0f 66 72 61 6d 65 30 30 .........frame00
+0c0: 30 30 30 34 2e 74 73 74 00 00 00 00 00 00 00 b0 0004.tst........
+0d0: 00 00 00 00 02 00 00 86 0f 66 72 61 6d 65 30 30 .........frame00
+0e0: 30 30 30 35 2e 74 73 74 00 00 00 00 00 00 00 d0 0005.tst........
+0f0: 00 00 00 00 02 00 00 87 0f 66 72 61 6d 65 30 30 .........frame00
+100: 30 30 30 36 2e 74 73 74 00 00 00 00 00 00 00 f0 0006.tst........
+110: 00 00 00 00 02 00 00 88 0f 66 72 61 6d 65 30 30 .........frame00
+120: 30 30 30 37 2e 74 73 74 00 00 00 00 00 00 01 10 0007.tst........
+130: ff ff 0e 78 00 00 00 00 00 00 00 00 00 00 00 00 ...x............
+----
+
+The "leaf" and "tail" structures are stored at the end of the block, so as the
+directory grows, the middle is filled in:
+
+----
+fa0: 00 00 00 00 00 00 01 30 00 00 00 2e 00 00 00 02 .......0........
+fb0: 00 00 17 2e 00 00 00 04 83 a0 40 b4 00 00 00 0e ................
+fc0: 93 a0 40 b4 00 00 00 12 a3 a0 40 b4 00 00 00 06 ................
+fd0: b3 a0 40 b4 00 00 00 0a c3 a0 40 b4 00 00 00 1e ................
+fe0: d3 a0 40 b4 00 00 00 22 e3 a0 40 b4 00 00 00 16 ................
+ff0: f3 a0 40 b4 00 00 00 1a 00 00 00 0a 00 00 00 00 ................
+----
+
+In a readable format:
+
+----
+xfs_db> type dir2
+xfs_db> p
+bhdr.magic = 0x58443242
+bhdr.bestfree[0].offset = 0x130
+bhdr.bestfree[0].length = 0xe78
+bhdr.bestfree[1].offset = 0
+bhdr.bestfree[1].length = 0
+bhdr.bestfree[2].offset = 0
+bhdr.bestfree[2].length = 0
+bu[0].inumber = 33554560
+bu[0].namelen = 1
+bu[0].name = "."
+bu[0].tag = 0x10
+bu[1].inumber = 128
+bu[1].namelen = 2
+bu[1].name = ".."
+bu[1].tag = 0x20
+bu[2].inumber = 33554561
+bu[2].namelen = 15
+bu[2].name = "frame000000.tst"
+bu[2].tag = 0x30
+bu[3].inumber = 33554562
+bu[3].namelen = 15
+bu[3].name = "frame000001.tst"
+bu[3].tag = 0x50
+...
+bu[8].inumber = 33554567
+bu[8].namelen = 15
+bu[8].name = "frame000006.tst"
+bu[8].tag = 0xf0
+bu[9].inumber = 33554568
+bu[9].namelen = 15
+bu[9].name = "frame000007.tst"
+bu[9].tag = 0x110
+bu[10].freetag = 0xffff
+bu[10].length = 0xe78
+bu[10].tag = 0x130
+bleaf[0].hashval = 0x2e
+bleaf[0].address = 0x2
+bleaf[1].hashval = 0x172e
+bleaf[1].address = 0x4
+bleaf[2].hashval = 0x83a040b4
+bleaf[2].address = 0xe
+...
+bleaf[8].hashval = 0xe3a040b4
+bleaf[8].address = 0x16
+bleaf[9].hashval = 0xf3a040b4
+bleaf[9].address = 0x1a
+btail.count = 10
+btail.stale = 0
+----
+
+[NOTE]
+For block directories, all xfs_db fields are preceded with "b".
+
+For a simple lookup example, the hash of frame000000.tst is 0xb3a040b4. Looking
+up that value, we get an address of 0x6. Multiply that by 8, it becomes offset
+0x30 and the inode at that point is 33554561.
+
+When we remove an entry from the middle (frame000004.tst), we can see how the
+freespace details are adjusted:
+
+----
+bhdr.magic = 0x58443242
+bhdr.bestfree[0].offset = 0x130
+bhdr.bestfree[0].length = 0xe78
+bhdr.bestfree[1].offset = 0xb0
+bhdr.bestfree[1].length = 0x20
+bhdr.bestfree[2].offset = 0
+bhdr.bestfree[2].length = 0
+...
+bu[5].inumber = 33554564
+bu[5].namelen = 15
+bu[5].name = "frame000003.tst"
+bu[5].tag = 0x90
+bu[6].freetag = 0xffff
+bu[6].length = 0x20
+bu[6].tag = 0xb0
+bu[7].inumber = 33554566
+bu[7].namelen = 15
+bu[7].name = "frame000005.tst"
+bu[7].tag = 0xd0
+...
+bleaf[7].hashval = 0xd3a040b4
+bleaf[7].address = 0x22
+bleaf[8].hashval = 0xe3a040b4
+bleaf[8].address = 0
+bleaf[9].hashval = 0xf3a040b4
+bleaf[9].address = 0x1a
+btail.count = 10
+btail.stale = 1
+----
+
+A new "bestfree" value is added for the entry, the start of the entry is marked
+as unused with 0xffff (which overwrites the inode number for an actual entry),
+and the length of the space. The tag remains intact at the +offset+length -
+sizeof(tag)+. The address for the hash is also cleared. The affected areas are
+highlighted below:
+
+.Block directory free entry detail
+image::images/code/46.png[]
+
+
+
+[[Leaf_Directories]]
+== Leaf Directories
+
+Once a Block Directory has filled the block, the directory data is changed into
+a new format. It still uses xref:Data_Extents[extents] and the same basic
+structures, but the "data" and "leaf" are split up into their own extents. The
+"leaf" information only occupies one extent. As "leaf" information is more
+compact than "data" information, more than one "data" extent is common.
+
+* Block to Leaf conversions retain the existing block for the data entries and
+allocate a new block for the leaf and freespace index information.
+
+* As with all directories, data blocks must start at logical offset zero.
+
+* The "leaf" block has a special offset defined by +XFS_DIR2_LEAF_OFFSET+.
+Currently, this is 32GB and in the extent view, a block offset of
+32GB/sb_blocksize. On a 4KB block filesystem, this is 0x800000 (8388608
+decimal).
+
+* The "data" extents have a new header (no "leaf" data):
+
+[source, c]
+----
+typedef struct xfs_dir2_data {
+ xfs_dir2_data_hdr_t hdr;
+ xfs_dir2_data_union_t u[1];
+} xfs_dir2_data_t;
+----
+
+* The "leaf" extent uses the following structures:
+
+[source, c]
+----
+typedef struct xfs_dir2_leaf {
+ xfs_dir2_leaf_hdr_t hdr;
+ xfs_dir2_leaf_entry_t ents[1];
+ xfs_dir2_data_off_t bests[1];
+ xfs_dir2_leaf_tail_t tail;
+} xfs_dir2_leaf_t;
+typedef struct xfs_dir2_leaf_hdr {
+ xfs_da_blkinfo_t info;
+ __uint16_t count;
+ __uint16_t stale;
+} xfs_dir2_leaf_hdr_t;
+typedef struct xfs_dir2_leaf_tail {
+ __uint32_t bestcount;
+} xfs_dir2_leaf_tail_t;
+----
+
+* The leaves use the +xfs_da_blkinfo_t+ filesystem block header. This header is
+used for directory and xref:Extended_Attributes[extended attribute] leaves and
+B+tree nodes:
+
+[source, c]
+----
+typedef struct xfs_da_blkinfo {
+ __be32 forw;
+ __be32 back;
+ __be16 magic;
+ __be16 pad;
+} xfs_da_blkinfo_t;
+----
+
+* The size of the +ents+ array is specified by +hdr.count+.
+
+* The size of the bests array is specified by the tail.bestcount which is also the
+number of "data" blocks for  the directory. The bests array maintains each data
+block's +bestfree[0].length+ value.
+
+.Leaf directory free entry detail
+image::images/48.png[]
+
+=== Leaf Directory xfs_db Example
+
+For this example, a directory was created with 256 entries (frame000000.tst to
+frame000255.tst) and then deleted some files (frame00005*, frame00018* and
+frame000240.tst) to show free list characteristics.
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+core.magic = 0x494e
+core.mode = 040755
+core.version = 1
+core.format = 2 (extents)
+core.nlinkv1 = 2
+...
+core.size = 12288
+core.nblocks = 4
+core.extsize = 0
+core.nextents = 3
+...
+u.bmx[0-2] = [startoff,startblock,blockcount,extentflag]
+ 0:[0,4718604,1,0]
+ 1:[1,4718610,2,0]
+ 2:[8388608,4718605,1,0]
+----
+
+As can be seen in this example, three blocks are used for "data" in two extents,
+and the "leaf" extent has a logical offset of 8388608 blocks (32GB).
+
+Examining the first block:
+
+----
+xfs_db> dblock 0
+xfs_db> type dir2
+xfs_db> p
+dhdr.magic = 0x58443244
+dhdr.bestfree[0].offset = 0x670
+dhdr.bestfree[0].length = 0x140
+dhdr.bestfree[1].offset = 0xff0
+dhdr.bestfree[1].length = 0x10
+dhdr.bestfree[2].offset = 0
+dhdr.bestfree[2].length = 0
+du[0].inumber = 75497600
+du[0].namelen = 1
+du[0].name = "."
+du[0].tag = 0x10
+du[1].inumber = 128
+du[1].namelen = 2
+du[1].name = ".."
+du[1].tag = 0x20
+du[2].inumber = 75497601
+du[2].namelen = 15
+du[2].name = "frame000000.tst"
+du[2].tag = 0x30
+du[3].inumber = 75497602
+du[3].namelen = 15
+du[3].name = "frame000001.tst"
+du[3].tag = 0x50
+...
+du[51].inumber = 75497650
+du[51].namelen = 15
+du[51].name = "frame000049.tst"
+du[51].tag = 0x650
+du[52].freetag = 0xffff
+du[52].length = 0x140
+du[52].tag = 0x670
+du[53].inumber = 75497661
+du[53].namelen = 15
+du[53].name = "frame000060.tst"
+du[53].tag = 0x7b0
+...
+du[118].inumber = 75497758
+du[118].namelen = 15
+du[118].name = "frame000125.tst"
+du[118].tag = 0xfd0
+du[119].freetag = 0xffff
+du[119].length = 0x10
+du[119].tag = 0xff0
+----
+
+[NOTE]
+The xfs_db field output is preceded by a "d" for "data".
+
+The next "data" block:
+
+----
+xfs_db> dblock 1
+xfs_db> type dir2
+xfs_db> p
+dhdr.magic = 0x58443244
+dhdr.bestfree[0].offset = 0x6d0
+dhdr.bestfree[0].length = 0x140
+dhdr.bestfree[1].offset = 0xe50
+dhdr.bestfree[1].length = 0x20
+dhdr.bestfree[2].offset = 0xff0
+dhdr.bestfree[2].length = 0x10
+du[0].inumber = 75497759
+du[0].namelen = 15
+du[0].name = "frame000126.tst"
+du[0].tag = 0x10
+...
+du[53].inumber = 75497844
+du[53].namelen = 15
+du[53].name = "frame000179.tst"
+du[53].tag = 0x6b0
+du[54].freetag = 0xffff
+du[54].length = 0x140
+du[54].tag = 0x6d0
+du[55].inumber = 75497855
+du[55].namelen = 15
+du[55].name = "frame000190.tst"
+du[55].tag = 0x810
+...
+du[104].inumber = 75497904
+du[104].namelen = 15
+du[104].name = "frame000239.tst"
+du[104].tag = 0xe30
+du[105].freetag = 0xffff
+du[105].length = 0x20
+du[105].tag = 0xe50
+du[106].inumber = 75497906
+du[106].namelen = 15
+du[106].name = "frame000241.tst"
+du[106].tag = 0xe70
+...
+du[117].inumber = 75497917
+du[117].namelen = 15
+du[117].name = "frame000252.tst"
+du[117].tag = 0xfd0
+du[118].freetag = 0xffff
+du[118].length = 0x10
+du[118].tag = 0xff0
+----
+
+And the last data block:
+
+
+----
+xfs_db&gt; dblock 2
+xfs_db&gt; type dir2
+xfs_db&gt; p
+dhdr.magic = 0x58443244
+dhdr.bestfree[0].offset = 0x70
+dhdr.bestfree[0].length = 0xf90
+dhdr.bestfree[1].offset = 0
+dhdr.bestfree[1].length = 0
+dhdr.bestfree[2].offset = 0
+dhdr.bestfree[2].length = 0
+du[0].inumber = 75497918
+du[0].namelen = 15
+du[0].name = "frame000253.tst"
+du[0].tag = 0x10
+du[1].inumber = 75497919
+du[1].namelen = 15
+du[1].name = "frame000254.tst"
+du[1].tag = 0x30
+du[2].inumber = 75497920
+du[2].namelen = 15
+du[2].name = "frame000255.tst"
+du[2].tag = 0x50
+du[3].freetag = 0xffff
+du[3].length = 0xf90
+du[3].tag = 0x70
+----
+
+Examining the "leaf" block (with the fields preceded by an "l" for "leaf"):
+
+----
+xfs_db> dblock 8388608
+xfs_db> type dir2
+xfs_db> p
+lhdr.info.forw = 0
+lhdr.info.back = 0
+lhdr.info.magic = 0xd2f1
+lhdr.count = 258
+lhdr.stale = 0
+lbests[0-2] = 0:0x10 1:0x10 2:0xf90
+lents[0].hashval = 0x2e
+lents[0].address = 0x2
+lents[1].hashval = 0x172e
+lents[1].address = 0x4
+lents[2].hashval = 0x23a04084
+lents[2].address = 0x116
+...
+lents[257].hashval = 0xf3a048bc
+lents[257].address = 0x366
+ltail.bestcount = 3
+----
+
+Note how the +lbests+ array correspond with the +bestfree[0].length+ values in
+the "data" blocks:
+
+----
+xfs_db> dblock 0
+xfs_db> type dir2
+xfs_db> p
+dhdr.magic = 0x58443244
+dhdr.bestfree[0].offset = 0xff0
+dhdr.bestfree[0].length = 0x10
+...
+xfs_db> dblock 1
+xfs_db> type dir2
+xfs_db> p
+dhdr.magic = 0x58443244
+dhdr.bestfree[0].offset = 0xff0
+dhdr.bestfree[0].length = 0x10
+...
+xfs_db> dblock 2
+xfs_db> type dir2
+xfs_db> p
+dhdr.magic = 0x58443244
+dhdr.bestfree[0].offset = 0x70
+dhdr.bestfree[0].length = 0xf90
+----
+
+Now after the entries have been deleted:
+
+----
+xfs_db> dblock 8388608
+xfs_db> type dir2
+xfs_db> p
+lhdr.info.forw = 0
+lhdr.info.back = 0
+lhdr.info.magic = 0xd2f1
+lhdr.count = 258
+lhdr.stale = 21
+lbests[0-2] = 0:0x140 1:0x140 2:0xf90
+lents[0].hashval = 0x2e
+lents[0].address = 0x2
+lents[1].hashval = 0x172e
+lents[1].address = 0x4
+lents[2].hashval = 0x23a04084
+lents[2].address = 0x116
+...
+----
+
+As can be seen, the +lbests+ values have been update to contain each
++hdr.bestfree[0].length+ values. The leaf's +hdr.stale+ value has also been
+updated to specify the number of stale entries in the array. The stale entries
+have an address of zero.
+
+TODO: Need an example for where new entries get inserted with several large free
+spaces.
+
+
+[[Node_Directories]]
+== Node Directories
+
+When the "leaf" information fills a block, the extents undergo another
+separation. All "freeindex" information moves into its own extent. Like Leaf
+Directories, the "leaf" block maintained the best free space information for
+each "data" block. This is not possible with more than one leaf.
+
+* The "data" blocks stay the same as leaf directories.
+
+* The "leaf" blocks eventually change into a B+tree with the generic B+tree header
+pointing to directory "leaves" as described in Leaf Directories. The top-level
+blocks are called "nodes". It can exist in a state where there is still a single
+leaf block before it's split. Interpretation of the node vs. leaf blocks has to
+be performed by inspecting the magic value in the header. The combined
+leaf/freeindex blocks has a magic value of +XFS_DIR2_LEAF1_MAGIC (0xd2f1)+, a
+node directory's leaf/leaves have a magic value of +XFS_DIR2_LEAFN_MAGIC
+(0xd2ff)+ and intermediate nodes have a magic value of +XFS_DA_NODE_MAGIC
+(0xfebe)+.
+
+* The new "freeindex" block(s) only contains the bests for each data block.
+
+* The freeindex block uses the following structures:
+
+[source, c]
+----
+typedef struct xfs_dir2_free_hdr {
+ __uint32_t magic;
+ __int32_t firstdb;
+ __int32_t nvalid;
+ __int32_t nused;
+} xfs_dir2_free_hdr_t;
+typedef struct xfs_dir2_free {
+ xfs_dir2_free_hdr_t hdr;
+ xfs_dir2_data_off_t bests[1];
+} xfs_dir2_free_t;
+----
+
+* The location of the leaf blocks can be in any order, the only way to determine
+the appropriate is by the node block hash/before values. Given a hash to lookup,
+you read the node's +btree+ array and first +hashval+ in the array that exceeds
+the given hash and it can then be found in the block pointed to by the +before+
+value.
+
+[source, c]
+----
+typedef struct xfs_da_intnode {
+ struct xfs_da_node_hdr {
+ xfs_da_blkinfo_t info;
+ __uint16_t count;
+ __uint16_t level;
+ } hdr;
+ struct xfs_da_node_entry {
+ xfs_dahash_t hashval;
+ xfs_dablk_t before;
+ } btree[1];
+} xfs_da_intnode_t;
+----
+
+* The freeindex's +bests+ array starts from the end of the block and grows to the
+start of the block.
+
+* When an data block becomes unused (ie. all entries in it have been deleted), the
+block is freed, the data extents contain a hole, and the freeindex's +hdr.nused+
+value is decremented and the associated +bests[]+ entry is set to 0xffff.
+
+* As the first data block always contains "." and "..", it's invalid for the
+directory to have a hole at the start.
+
+* The freeindex's +hdr.nvalid+ should always be the same as the number of
+allocated data directory blocks containing name/inode data and will always be
+less than or equal to +hdr.nused. hdr.nused+ should be the same as the index of
+the last data directory block plus one (i.e. when the last data block is freed,
++nused+ and +nvalid+ are decremented).
+
+.Node Directory Layout
+image::images/54.png[]
+
+=== Node Directory xfs_db Example
+
+With the node directory examples, we are using a filesystems with 4KB block
+size, and a 16KB directory size. The directory has over 2000 entries:
+
+----
+xfs_db> sb 0
+xfs_db> p
+magicnum = 0x58465342
+blocksize = 4096
+...
+dirblklog = 2
+...
+xfs_db&gt; inode &lt;inode#&gt;
+xfs_db&gt; p
+core.magic = 0x494e
+core.mode = 040755
+core.version = 1
+core.format = 2 (extents)
+...
+core.size = 81920
+core.nblocks = 36
+core.extsize = 0
+core.nextents = 8
+...
+u.bmx[0-7] = [startoff,startblock,blockcount,extentflag] 0:[0,7368,4,0]
+1:[4,7408,4,0] 2:[8,7444,4,0] 3:[12,7480,4,0] 4:[16,7520,4,0]
+5:[8388608,7396,4,0] 6:[8388612,7524,8,0] 7:[16777216,7516,4,0]
+----
+
+As can already be observed, all extents are allocated is multiples of 4 blocks.
+
+Blocks 0 to 19 (16+4-1) are used for the data. Looking at blocks 16-19, it can
+seen that it's the same as the single-leaf format, except the +length+ values
+are a lot larger to accommodate the increased directory block size:
+
+----
+xfs_db> dblock 16
+xfs_db> type dir2
+xfs_db> p
+dhdr.magic = 0x58443244
+dhdr.bestfree[0].offset = 0xb0
+dhdr.bestfree[0].length = 0x3f50
+dhdr.bestfree[1].offset = 0
+dhdr.bestfree[1].length = 0
+dhdr.bestfree[2].offset = 0
+dhdr.bestfree[2].length = 0
+du[0].inumber = 120224
+du[0].namelen = 15
+du[0].name = "frame002043.tst"
+du[0].tag = 0x10
+du[1].inumber = 120225
+du[1].namelen = 15
+du[1].name = "frame002044.tst"
+du[1].tag = 0x30
+du[2].inumber = 120226
+du[2].namelen = 15
+du[2].name = "frame002045.tst"
+du[2].tag = 0x50
+du[3].inumber = 120227
+du[3].namelen = 15
+du[3].name = "frame002046.tst"
+du[3].tag = 0x70
+du[4].inumber = 120228
+du[4].namelen = 15
+du[4].name = "frame002047.tst"
+du[4].tag = 0x90
+du[5].freetag = 0xffff
+du[5].length = 0x3f50
+du[5].tag = 0
+----
+
+Next, the "node" block, the fields are preceded with 'n' for node blocks:
+
+----
+xfs_db> dblock 8388608
+xfs_db> type dir2
+xfs_db> p
+nhdr.info.forw = 0
+nhdr.info.back = 0
+nhdr.info.magic = 0xfebe
+nhdr.count = 2
+nhdr.level = 1
+nbtree[0-1] = [hashval,before] 0:[0xa3a440ac,8388616] 1:[0xf3a440bc,8388612]
+----
+
+The following leaf blocks have been allocated once as XFS knows it needs at two
+blocks when allocating a B+tree, so the length is 8 fsblocks. For all hashes
+< 0xa3a440ac, they are located in the directory offset 8388616 and hashes
+below 0xf3a440bc are in offset 8388612. Hashes above f3a440bc don't exist in
+this directory.
+
+----
+xfs_db> dblock 8388616
+xfs_db> type dir2
+xfs_db> p
+lhdr.info.forw = 8388612
+lhdr.info.back = 0
+lhdr.info.magic = 0xd2ff
+lhdr.count = 1023
+lhdr.stale = 0
+lents[0].hashval = 0x2e
+lents[0].address = 0x2
+lents[1].hashval = 0x172e
+lents[1].address = 0x4
+lents[2].hashval = 0x23a04084
+lents[2].address = 0x116
+...
+lents[1021].hashval = 0xa3a440a4
+lents[1021].address = 0x1fa2
+lents[1022].hashval = 0xa3a440ac
+lents[1022].address = 0x1fca
+xfs_db> dblock 8388612
+xfs_db> type dir2
+xfs_db> p
+lhdr.info.forw = 0
+lhdr.info.back = 8388616
+lhdr.info.magic = 0xd2ff
+lhdr.count = 1027
+lhdr.stale = 0
+lents[0].hashval = 0xa3a440b4
+lents[0].address = 0x1f52
+lents[1].hashval = 0xa3a440bc
+lents[1].address = 0x1f7a
+...
+lents[1025].hashval = 0xf3a440b4
+lents[1025].address = 0x1f66
+lents[1026].hashval = 0xf3a440bc
+lents[1026].address = 0x1f8e
+----
+
+An example lookup using xfs_db:
+
+----
+xfs_db> hash frame001845.tst
+0xf3a26094
+----
+
+Doing a binary search through the array, we get address 0x1ce6, which is offset
+0xe730. Each fsblock is 4KB in size (0x1000), so it will be offset 0x730 into
+directory offset 14. From the extent map, this will be fsblock 7482:
+
+----
+xfs_db> fsblock 7482
+xfs_db> type text
+xfs_db> p
+...
+730: 00 00 00 00 00 01 d4 da 0f 66 72 61 6d 65 30 30 .........frame00
+740: 31 38 34 35 2e 74 73 74 00 00 00 00 00 00 27 30 1845.tst.......0
+----
+
+Looking at the freeindex information (fields with an 'f' tag):
+
+----
+xfs_db> fsblock 7516
+xfs_db> type dir2
+xfs_db> p
+fhdr.magic = 0x58443246
+fhdr.firstdb = 0
+fhdr.nvalid = 5
+fhdr.nused = 5
+fbests[0-4] = 0:0x10 1:0x10 2:0x10 3:0x10 4:0x3f50
+----
+
+Like the Leaf Directory, each of the +fbests+ values correspond to each data
+block's +bestfree[0].length+ value.
+
+The raw disk layout, old data is not cleared after the array. The fbests array
+is highlighted:
+
+.Node directory freespace detail
+image::images/code/57.png[]
+
+TODO: Example with a hole in the middle
+
+
+[[Btree_Directories]]
+== B+tree Directories
+
+When the extent map in an inode grows beyond the inode's space, the inode format
+is changed to a "btree". The inode contains a filesystem block point to the
+B+tree extent map for the directory's blocks. The B+tree extents contain the
+extent map for the "data", "node", "leaf" and "freeindex" information as
+described in Node Directories.
+
+Refer to the previous section on B+tree xref:Btree_Extent_List[Data Extents] for
+more information on XFS B+tree extents.
+
+The following situations and changes can apply over Node Directories, and apply
+here as inode extents generally cannot contain the number of directory blocks
+that B+trees can handle:
+
+* The node/leaf trees can be more than one level deep.
+
+* More than one freeindex block may exist, but this will be quite rare. It would
+required hundreds of thousand files with quite long file names (or millions with
+shorter names) to get a second freeindex block.
+
+=== B+tree Directory xfs_db Example
+
+A directory has been created with 200,000 entries with each entry being 100
+characters long. The filesystem block size and directory block size are 4KB:
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+core.magic = 0x494e
+core.mode = 040755
+core.version = 1
+core.format = 3 (btree)
+...
+core.size = 22757376
+core.nblocks = 6145
+core.extsize = 0
+core.nextents = 234
+core.naextents = 0
+core.forkoff = 0
+...
+u.bmbt.level = 1
+u.bmbt.numrecs = 1
+u.bmbt.keys[1] = [startoff] 1:[0]
+u.bmbt.ptrs[1] = 1:89
+xfs_db&gt; fsblock 89
+xfs_db&gt; type bmapbtd
+xfs_db&gt; p
+magic = 0x424d4150
+level = 0
+numrecs = 234
+leftsib = null
+rightsib = null
+recs[1-234] = [startoff,startblock,blockcount,extentflag]
+ 1:[0,53,1,0] 2:[1,55,13,0] 3:[14,69,1,0] 4:[15,72,13,0]
+ 5:[28,86,2,0] 6:[30,90,21,0] 7:[51,112,1,0] 8:[52,114,11,0]
+ ...
+ 125:[5177,902,15,0] 126:[5192,918,6,0] 127:[5198,524786,358,0]
+ 128:[8388608,54,1,0] 129:[8388609,70,2,0] 130:[8388611,85,1,0]
+ ...
+ 229:[8389164,917,1,0] 230:[8389165,924,19,0] 231:[8389184,944,9,0]
+ 232:[16777216,68,1,0] 233:[16777217,7340114,1,0] 234:[16777218,5767362,1,0]
+----
+
+We have 128 extents and a total of 5555 blocks being used to store name/inode
+pairs. With only about 2000 values that can be stored in the freeindex block, 3
+blocks have been allocated for this information. The +firstdb+ field specifies
+the starting directory block number for each array:
+
+----
+xfs_db> dblock 16777216
+xfs_db> type dir2
+xfs_db> p
+fhdr.magic = 0x58443246
+fhdr.firstdb = 0
+fhdr.nvalid = 2040
+fhdr.nused = 2040
+fbests[0-2039] = ...
+xfs_db> dblock 16777217
+xfs_db> type dir2
+xfs_db> p
+fhdr.magic = 0x58443246
+fhdr.firstdb = 2040
+fhdr.nvalid = 2040
+fhdr.nused = 2040
+fbests[0-2039] = ...
+xfs_db> dblock 16777218
+xfs_db> type dir2
+xfs_db> p
+fhdr.magic = 0x58443246
+fhdr.firstdb = 4080
+fhdr.nvalid = 1476
+fhdr.nused = 1476
+fbests[0-1475] = ...
+----
+
+Looking at the root node in the node block, it's a pretty deep tree:
+
+----
+xfs_db> dblock 8388608
+xfs_db> type dir2
+xfs_db> p
+nhdr.info.forw = 0
+nhdr.info.back = 0
+nhdr.info.magic = 0xfebe
+nhdr.count = 2
+nhdr.level = 2
+nbtree[0-1] = [hashval,before] 0:[0x6bbf6f39,8389121] 1:[0xfbbf7f79,8389120]
+xfs_db> dblock 8389121
+xfs_db> type dir2
+xfs_db> p
+nhdr.info.forw = 8389120
+nhdr.info.back = 0
+nhdr.info.magic = 0xfebe
+nhdr.count = 263
+nhdr.level = 1
+nbtree[0-262] = ... 262:[0x6bbf6f39,8388928]
+xfs_db> dblock 8389120
+xfs_db> type dir2
+xfs_db> p
+nhdr.info.forw = 0
+nhdr.info.back = 8389121
+nhdr.info.magic = 0xfebe
+nhdr.count = 319
+nhdr.level = 1
+nbtree[0-318] = [hashval,before] 0:[0x70b14711,8388919] ...
+----
+
+The leaves at each the end of a node always point to the end leaves in adjacent
+nodes. Directory block 8388928 forward pointer is to block 8388919, and vice
+versa as highlighted in the following example:
+
+.B+tree directory pointer detail
+image::images/code/60.png[]
+
diff --git a/design/XFS_Filesystem_Structure/docinfo.xml b/design/XFS_Filesystem_Structure/docinfo.xml
new file mode 100644
index 0000000..d56aaed
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/docinfo.xml
@@ -0,0 +1,72 @@
+<subtitle>Documentation of the XFS filesystem on-disk structures</subtitle>
+<abstract>
+ <para>This book documents the XFS Filesystem Structure</para>
+</abstract>
+<corpauthor>
+</corpauthor>
+<copyright>
+ <year>2006</year>
+ <holder>Silicon Graphics Inc.</holder>
+</copyright>
+<legalnotice>
+ <para>© Copyright 2006 Silicon Graphics Inc. All rights reserved. Permission is granted to copy, distribute, and/or modify this document under the terms of the Creative Commons Attribution-Share Alike, Version 3.0 or any later version published by the Creative Commons Corp. A copy of the license is available at <ulink url="http://creativecommons.org/licenses/by-sa/3.0/us/"/>.</para>
+</legalnotice>
+
+<revhistory>
+ <revision>
+ <revnumber>0.1</revnumber>
+ <date>2006</date>
+ <author>
+ <firstname>Silicon Graphics, Inc</firstname>
+ <surname></surname>
+ <email></email>
+ </author>
+ <revdescription>
+ <simplelist>
+ <member>Initial Release</member>
+ </simplelist>
+ </revdescription>
+ </revision>
+ <revision>
+ <revnumber>1.0</revnumber>
+ <date>Fri Jul 03 2009</date>
+ <author>
+ <firstname>Ryan</firstname>
+ <surname>Lerch</surname>
+ <email></email>
+ </author>
+ <revdescription>
+ <simplelist>
+ <member>Publican Conversion</member>
+ </simplelist>
+ </revdescription>
+ </revision>
+ <revision>
+ <revnumber>1.1</revnumber>
+ <date>March 2010</date>
+ <author>
+ <firstname>Eric</firstname>
+ <surname>Sandeen</surname>
+ <email></email>
+ </author>
+ <revdescription>
+ <simplelist>
+ <member>Community Release</member>
+ </simplelist>
+ </revdescription>
+ </revision>
+ <revision>
+ <revnumber>1.99</revnumber>
+ <date>February 2014</date>
+ <author>
+ <firstname>Dave</firstname>
+ <surname>Chinner</surname>
+ <email></email>
+ </author>
+ <revdescription>
+ <simplelist>
+ <member>AsciiDoc Conversion</member>
+ </simplelist>
+ </revdescription>
+ </revision>
+</revhistory>
diff --git a/design/XFS_Filesystem_Structure/extended_attributes.asciidoc b/design/XFS_Filesystem_Structure/extended_attributes.asciidoc
new file mode 100644
index 0000000..9887332
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/extended_attributes.asciidoc
@@ -0,0 +1,609 @@
+[[Extended_Attributes]]
+= Extended Attributes
+
+Extended attributes implement the ability for a user to attach name:value pairs
+to inodes within the XFS filesystem. They could be used to store
+meta-information about the file.
+
+The attribute names can be up to 256 bytes in length, terminated by the first 0
+byte. The intent is that they be printable ASCII (or other character set) names
+for the attribute. The values can be up to 64KB of arbitrary binary data. Some
+XFS internal attributes (eg. parent pointers) use non-printable names for the
+attribute.
+
+Access Control Lists (ACLs) and Data Migration Facility (DMF) use extended
+attributes to store their associated metadata with an inode.
+
+XFS uses two disjoint attribute name spaces associated with every inode. They
+are the root and user address spaces. The root address space is accessible only
+to the superuser, and then only by specifying a flag argument to the function
+call. Other users will not see or be able to modify attributes in the root
+address space. The user address space is protected by the normal file
+permissions mechanism, so the owner of the file can decide who is able to see
+and/or modify the value of attributes on any particular file.
+
+To view extended attributes from the command line, use the +getfattr+ command.
+To set or delete extended attributes, use the +setfattr+ command. ACLs control
+should use the +getfacl+ and +setfacl+ commands.
+
+XFS attributes supports three namespaces: "user", "trusted" (or "root" using
+IRIX terminology) and "secure".
+
+The location of the attribute fork in the inode's literal area is specified by
+the +di_forkoff+ value in the inode's core. If this value is zero, the inode
+does not contain any extended attributes. Non-zero, the byte offset into the
+literal area = +di_forkoff * 8+, which also determines the 2048 byte maximum
+size for an inode. Attributes must be allocated on a 64-bit boundary on the disk
+except shortform attributes (they are tightly packed). To determine the offset
+into the inode itself, add 100 (0x64) to +di_forkoff * 8+.
+
+The following four sections describe each of the on-disk formats.
+
+
+[[Shortform_Attributes]]
+== Shortform Attributes
+
+When the all extended attributes can fit within the inode's attribute fork, the
+inode's +di_aformat+ is set to "local" and the attributes are stored in the
+inode's literal area starting at offset +di_forkoff * 8+.
+
+Shortform attributes use the following structures:
+
+[source, c]
+----
+typedef struct xfs_attr_shortform {
+ struct xfs_attr_sf_hdr {
+ __be16 totsize;
+ __u8 count;
+ } hdr;
+ struct xfs_attr_sf_entry {
+ __uint8_t namelen;
+ __uint8_t valuelen;
+ __uint8_t flags;
+ __uint8_t nameval[1];
+ } list[1];
+} xfs_attr_shortform_t;
+typedef struct xfs_attr_sf_hdr xfs_attr_sf_hdr_t;
+typedef struct xfs_attr_sf_entry xfs_attr_sf_entry_t;
+----
+
+.Shortform attribute layout
+image::images/64.png[]
+
+
+* +namelen+ and +valuelen+ specify the size of the two byte arrays containing the
+name and value pairs. +valuelen+ is zero for extended attributes with no value.
+
+* +nameval[]+ is a single array where it's size is the sum of +namelen+ and
++valuelen+. The names and values are not null terminated on-disk. The value
+immediately follows the name in the array.
+
+* +flags+ specifies the namespace for the attribute (0 = "user"):
+
+
+.Attribute Namespaces
+[options="header"]
+|=====
+| Flag | Description
+| +XFS_ATTR_ROOT+ | The attribute's namespace is "trusted".
+| +XFS_ATTR_SECURE+ | The attribute's namespace is "secure".
+|=====
+
+=== Shortform attribute xfs_db example
+
+A file is created and two attributes are set:
+
+----
+# setfattr -n user.empty few_attr
+# setfattr -n trusted.trust -v val1 few_attr
+----
+
+Using xfs_db, we dump the inode:
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+core.magic = 0x494e
+core.mode = 0100644
+...
+core.naextents = 0
+core.forkoff = 15
+core.aformat = 1 (local)
+...
+a.sfattr.hdr.totsize = 24
+a.sfattr.hdr.count = 2
+a.sfattr.list[0].namelen = 5
+a.sfattr.list[0].valuelen = 0
+a.sfattr.list[0].root = 0
+a.sfattr.list[0].secure = 0
+a.sfattr.list[0].name = "empty"
+a.sfattr.list[1].namelen = 5
+a.sfattr.list[1].valuelen = 4
+a.sfattr.list[1].root = 1
+a.sfattr.list[1].secure = 0
+a.sfattr.list[1].name = "trust"
+a.sfattr.list[1].value = "val1"
+----
+
+We can determine the actual inode offset to be 220 (15 x 8 + 100) or +0xdc+.
+Examining the raw dump, the second attribute is highlighted:
+
+.Shortform Attribute detail
+image::images/code/65.png[]
+
+Adding another attribute with attr1, the format is converted to extents and
++di_forkoff+ remains unchanged (and all those zeros in the dump above remain
+unused):
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+...
+core.naextents = 1
+core.forkoff = 15
+core.aformat = 2 (extents)
+...
+a.bmx[0] = [startoff,startblock,blockcount,extentflag] 0:[0,37534,1,0]
+----
+
+Performing the same steps with attr2, adding one attribute at a time, you can
+see +di_forkoff+ change as attributes are added:
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+...
+core.naextents = 0
+core.forkoff = 15
+core.aformat = 1 (local)
+...
+a.sfattr.hdr.totsize = 17
+a.sfattr.hdr.count = 1
+a.sfattr.list[0].namelen = 10
+a.sfattr.list[0].valuelen = 0
+a.sfattr.list[0].root = 0
+a.sfattr.list[0].secure = 0
+a.sfattr.list[0].name = "empty_attr"
+----
+
+Attribute added:
+
+----
+xfs_db> p
+...
+core.naextents = 0
+core.forkoff = 15
+core.aformat = 1 (local)
+...
+a.sfattr.hdr.totsize = 31
+a.sfattr.hdr.count = 2
+a.sfattr.list[0].namelen = 10
+a.sfattr.list[0].valuelen = 0
+a.sfattr.list[0].root = 0
+a.sfattr.list[0].secure = 0
+a.sfattr.list[0].name = "empty_attr"
+a.sfattr.list[1].namelen = 7
+a.sfattr.list[1].valuelen = 4
+a.sfattr.list[1].root = 1
+a.sfattr.list[1].secure = 0
+a.sfattr.list[1].name = "trust_a"
+a.sfattr.list[1].value = "val1"
+----
+
+Another attribute is added:
+
+.Shortform Multiple Attribute detail
+image::images/code/66.png[]
+
+One more is added:
+
+----
+xfs_db> p
+core.naextents = 0
+core.forkoff = 10
+core.aformat = 1 (local)
+...
+a.sfattr.hdr.totsize = 69
+a.sfattr.hdr.count = 4
+a.sfattr.list[0].namelen = 10
+a.sfattr.list[0].valuelen = 0
+a.sfattr.list[0].root = 0
+a.sfattr.list[0].secure = 0
+a.sfattr.list[0].name = "empty_attr"
+a.sfattr.list[1].namelen = 7
+a.sfattr.list[1].valuelen = 4
+a.sfattr.list[1].root = 1
+a.sfattr.list[1].secure = 0
+a.sfattr.list[1].name = "trust_a"
+a.sfattr.list[1].value = "val1"
+a.sfattr.list[2].namelen = 6
+a.sfattr.list[2].valuelen = 12
+a.sfattr.list[2].root = 0
+a.sfattr.list[2].secure = 0
+a.sfattr.list[2].name = "second"
+a.sfattr.list[2].value = "second_value"
+a.sfattr.list[3].namelen = 6
+a.sfattr.list[3].valuelen = 8
+a.sfattr.list[3].root = 0
+a.sfattr.list[3].secure = 1
+a.sfattr.list[3].name = "policy"
+a.sfattr.list[3].value = "contents"
+----
+
+A raw dump is shown to compare with the attr1 dump on a prior page, the header
+is highlighted:
+
+.Shortform attribute header detail
+image::images/code/67.png[]
+
+It can be clearly seen that attr2 allows many more attributes to be stored in
+an inode before they are moved to another filesystem block.
+
+
+[[Leaf_Attributes]]
+== Leaf Attributes
+
+When an inode's attribute fork space is used up with shortform attributes and
+more are added, the attribute format is migrated to "extents".
+
+Extent based attributes use hash/index pairs to speed up an attribute lookup.
+The first part of the "leaf" contains an array of fixed size hash/index pairs
+with the flags stored as well. The remaining part of the leaf block contains the
+array name/value pairs, where each element varies in length.
+
+Each leaf is based on the +xfs_da_blkinfo_t+ block header declared in Leaf
+Directories. The structure encapsulating all other structures in the
++xfs_attr_leafblock_t+.
+
+The structures involved are:
+
+[source, c]
+----
+typedef struct xfs_attr_leaf_map {
+ __be16 base;
+ __be16 size;
+} xfs_attr_leaf_map_t;
+
+typedef struct xfs_attr_leaf_hdr {
+ xfs_da_blkinfo_t info;
+ __be16 count;
+ __be16 usedbytes;
+ __be16 firstused;
+ __u8 holes;
+ __u8 pad1;
+ xfs_attr_leaf_map_t freemap[3];
+} xfs_attr_leaf_hdr_t;
+
+typedef struct xfs_attr_leaf_entry {
+ __be32 hashval;
+ __be16 nameidx;
+ __u8 flags;
+ __u8 pad2;
+} xfs_attr_leaf_entry_t;
+
+typedef struct xfs_attr_leaf_name_local {
+ __be16 valuelen;
+ __u8 namelen;
+ __u8 nameval[1];
+} xfs_attr_leaf_name_local_t;
+
+typedef struct xfs_attr_leaf_name_remote {
+ __be32 valueblk;
+ __be32 valuelen;
+ __u8 namelen;
+ __u8 name[1];
+} xfs_attr_leaf_name_remote_t;
+
+typedef struct xfs_attr_leafblock {
+ xfs_attr_leaf_hdr_t hdr;
+ xfs_attr_leaf_entry_t entries[1];
+ xfs_attr_leaf_name_local_t namelist;
+ xfs_attr_leaf_name_remote_t valuelist;
+} xfs_attr_leafblock_t;
+----
+</programlisting>
+
+ Each leaf header uses the following magic number:
+
+[source, c]
+#define XFS_ATTR_LEAF_MAGIC 0xfbee
+
+The hash/index elements in the +entries[]+ array are packed from the top of the
+block. Name/values grow from the bottom but are not packed. The freemap contains
+run-length-encoded entries for the free bytes after the +entries[]+ array, but
+only the three largest runs are stored (smaller runs are dropped). When the
++freemap+ doesn't show enough space for an allocation, name/value area is
+compacted and allocation is tried again. If there still isn't enough space, then
+the block is split. The name/value structures (both local and remote versions)
+must be 32-bit aligned.
+
+For attributes with small values (ie. the value can be stored within the leaf),
+the +XFS_ATTR_LOCAL+ flag is set for the attribute. The entry details are stored
+using the +xfs_attr_leaf_name_local_t+ structure. For large attribute values
+that cannot be stored within the leaf, separate filesystem blocks are allocated
+to store the value. They use the +xfs_attr_leaf_name_remote_t+ structure.
+
+.Leaf Attribute layout
+image::images/69.png[]
+
+Both local and remote entries can be interleaved as they are only addressed by
+the hash/index entries. The flag is stored with the hash/index pairs so the
+appropriate structure can be used.
+
+Since duplicate hash keys are possible, for each hash that matches during a
+lookup, the actual name string must be compared.
+
+An "incomplete" bit is also used for attribute flags. It shows that an attribute
+is in the middle of being created and should not be shown to the user if we
+crash during the time that the bit is set. The bit is cleared when attribute
+has finished being setup. This is done because some large attributes cannot
+be created inside a single transaction.
+
+=== Leaf Attribute xfs_db Example
+
+A single 30KB extended attribute is added to an inode:
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+...
+core.nblocks = 9
+core.nextents = 0
+core.naextents = 1
+core.forkoff = 15
+core.aformat = 2 (extents)
+...
+a.bmx[0] = [startoff,startblock,blockcount,extentflag]
+ 0:[0,37535,9,0]
+xfs_db&gt; ablock 0
+xfs_db&gt; p
+hdr.info.forw = 0
+hdr.info.back = 0
+hdr.info.magic = 0xfbee
+hdr.count = 1
+hdr.usedbytes = 20
+hdr.firstused = 4076
+hdr.holes = 0
+hdr.freemap[0-2] = [base,size] 0:[40,4036] 1:[0,0] 2:[0,0]
+entries[0] = [hashval,nameidx,incomplete,root,secure,local]
+ 0:[0xfcf89d4f,4076,0,0,0,0]
+nvlist[0].valueblk = 0x1
+nvlist[0].valuelen = 30692
+nvlist[0].namelen = 8
+nvlist[0].name = "big_attr"
+----
+
+Attribute blocks 1 to 8 (filesystem blocks 37536 to 37543) contain the raw
+binary value data for the attribute.
+
+Index 4076 (0xfec) is the offset into the block where the name/value information
+is. As can be seen by the value, it's at the end of the block:
+
+----
+xfs_db> type text
+xfs_db> p
+
+000: 00 00 00 00 00 00 00 00 fb ee 00 00 00 01 00 14 ................
+010: 0f ec 00 00 00 28 0f c4 00 00 00 00 00 00 00 00 ................
+020: fc f8 9d 4f 0f ec 00 00 00 00 00 00 00 00 00 00 ...O............
+030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
+...
+fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 ................
+ff0: 00 00 77 e4 08 62 69 67 5f 61 74 74 72 00 00 00 ..w..big.attr...
+----
+
+A 30KB attribute and a couple of small attributes are added to a file:
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+...
+core.nblocks = 10
+core.extsize = 0
+core.nextents = 1
+core.naextents = 2
+core.forkoff = 15
+core.aformat = 2 (extents)
+...
+u.bmx[0] = [startoff,startblock,blockcount,extentflag]
+ 0:[0,81857,1,0]
+a.bmx[0-1] = [startoff,startblock,blockcount,extentflag]
+ 0:[0,81858,1,0]
+ 1:[1,182398,8,0]
+xfs_db> ablock 0
+xfs_db> p
+hdr.info.forw = 0
+hdr.info.back = 0
+hdr.info.magic = 0xfbee
+hdr.count = 3
+hdr.usedbytes = 52
+hdr.firstused = 4044
+hdr.holes = 0
+hdr.freemap[0-2] = [base,size] 0:[56,3988] 1:[0,0] 2:[0,0]
+entries[0-2] = [hashval,nameidx,incomplete,root,secure,local]
+ 0:[0x1e9d3934,4044,0,0,0,1]
+ 1:[0x1e9d3937,4060,0,0,0,1]
+ 2:[0xfcf89d4f,4076,0,0,0,0]
+nvlist[0].valuelen = 6
+nvlist[0].namelen = 5
+nvlist[0].name = "attr2"
+nvlist[0].value = "value2"
+nvlist[1].valuelen = 6
+nvlist[1].namelen = 5
+nvlist[1].name = "attr1"
+nvlist[1].value = "value1"
+nvlist[2].valueblk = 0x1
+nvlist[2].valuelen = 30692
+nvlist[2].namelen = 8
+nvlist[2].name = "big_attr"
+----
+
+As can be seen in the entries array, the two small attributes have the local
+flag set and the values are printed.
+
+A raw disk dump shows the attributes. The last attribute added is highlighted
+(offset 4044 or 0xfcc):
+
+.Leaf Attribute detail
+image::images/code/71.png[]
+
+
+[[Node_Attributes]]
+== Node Attributes
+
+When the number of attributes exceeds the space that can fit in one filesystem
+block (ie. hash, flag, name and local values), the first attribute block becomes
+the root of a B+tree where the leaves contain the hash/name/value information
+that was stored in a single leaf block. The inode's attribute format itself
+remains extent based. The nodes use the +xfs_da_intnode_t+ structure introduced
+in Node Directories.
+
+The location of the attribute leaf blocks can be in any order, the only way to
+determine the appropriate is by the node block hash/before values. Given a hash
+to lookup, you read the node's btree array and first +hashval+ in the array that
+exceeds the given hash and it can then be found in the block pointed to by the
++before+ value.
+
+.Node Attribute layout
+image::images/72.png[]
+
+=== Node Attribute xfs_db Example
+
+An inode with 1000 small attributes with the naming "attribute_n" where 'n' is a
+number:
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+...
+core.nblocks = 15
+core.nextents = 0
+core.naextents = 1
+core.forkoff = 15
+core.aformat = 2 (extents)
+...
+a.bmx[0] = [startoff,startblock,blockcount,extentflag] 0:[0,525144,15,0]
+xfs_db> ablock 0
+xfs_db> p
+hdr.info.forw = 0
+hdr.info.back = 0
+hdr.info.magic = 0xfebe
+hdr.count = 14
+hdr.level = 1
+btree[0-13] = [hashval,before]
+ 0:[0x3435122d,1]
+ 1:[0x343550a9,14]
+ 2:[0x343553a6,13]
+ 3:[0x3436122d,12]
+ 4:[0x343650a9,8]
+ 5:[0x343653a6,7]
+ 6:[0x343691af,6]
+ 7:[0x3436d0ab,11]
+ 8:[0x3436d3a7,10]
+ 9:[0x3437122d,9]
+ 10:[0x3437922e,3]
+ 11:[0x3437d22a,5]
+ 12:[0x3e686c25,4]
+ 13:[0x3e686fad,2]
+----
+
+The hashes are in ascending order in the btree array, and if the hash for the
+attribute we are looking up is before the entry, we go to the addressed
+attribute block.
+
+For example, to lookup attribute "attribute_267":
+
+----
+xfs_db> hash attribute_267
+0x3437d1a8
+----
+
+
+In the root btree node, this falls between +0x3437922e+ and +0x3437d22a+,
+therefore leaf 11 or attribute block 5 will contain the entry.
+
+.Node Attribute lookup detail
+image::images/code/73-74.png[]
+
+Each of the hash entries has +XFS_ATTR_LOCAL+ flag set (1), which means the
+attribute's value follows immediately after the name. Raw disk of the name/value
+pair at offset 2864 (0xb30), highlighted with "value_267\d" following
+immediately after the name:
+
+.Node Attribute value detail
+image::images/code/74.png[]
+
+Each entry starts on a 32-bit (4 byte) boundary, therefore the highlighted entry
+has 2 unused bytes after it.
+
+
+[[Btree_Attributes]]
+== B+tree Attributes
+
+When the attribute's extent map in an inode grows beyond the available space,
+the inode's attribute format is changed to a "btree". The inode contains root
+node of the extent B+tree which then address the leaves that contains the extent
+arrays for the attribute data. The attribute data itself in the allocated
+filesystem blocks use the same layout and structures as described in Node
+Attributes.
+
+Refer to the previous section on B+tree Data Extents for more information on XFS
+B+tree extents.
+
+=== B+tree Attribute xfs_db Example
+
+Added 2000 attributes with 729 byte values to a file:
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+...
+core.nblocks = 640
+core.extsize = 0
+core.nextents = 1
+core.naextents = 274
+core.forkoff = 15
+core.aformat = 3 (btree)
+...
+a.bmbt.level = 1
+a.bmbt.numrecs = 2
+a.bmbt.keys[1-2] = [startoff] 1:[0] 2:[219]
+a.bmbt.ptrs[1-2] = 1:83162 2:109968
+xfs_db> fsblock 83162
+xfs_db> type bmapbtd
+xfs_db> p
+magic = 0x424d4150
+level = 0
+numrecs = 127
+leftsib = null
+rightsib = 109968
+recs[1-127] = [startoff,startblock,blockcount,extentflag]
+ 1:[0,81870,1,0]
+ ...
+xfs_db&gt; fsblock 109968
+xfs_db&gt; type bmapbtd
+xfs_db&gt; p
+magic = 0x424d4150
+level = 0
+numrecs = 147
+leftsib = 83162
+rightsib = null
+recs[1-147] = [startoff,startblock,blockcount,extentflag]
+ ...
+ (which is fsblock 81870)
+xfs_db&gt; ablock 0
+xfs_db&gt; p
+hdr.info.forw = 0
+hdr.info.back = 0
+hdr.info.magic = 0xfebe
+hdr.count = 2
+hdr.level = 2
+btree[0-1] = [hashval,before] 0:[0x343612a6,513] 1:[0x3e686fad,512]
+----
+
+The extent B+tree has two leaves that specify the 274 extents used for the
+attributes. Looking at the first block, it can be seen that the attribute B+tree
+is two levels deep. The two blocks at offset 513 and 512 (ie. access using the
++ablock+ command) are intermediate +xfs_da_intnode_t+ nodes that index all the
+attribute leaves.
+
diff --git a/design/XFS_Filesystem_Structure/images/15a.png b/design/XFS_Filesystem_Structure/images/15a.png
new file mode 100644
index 0000000..bf25616
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/15a.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/15b.png b/design/XFS_Filesystem_Structure/images/15b.png
new file mode 100644
index 0000000..21de61a
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/15b.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/16.png b/design/XFS_Filesystem_Structure/images/16.png
new file mode 100644
index 0000000..5f46c52
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/16.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/18.png b/design/XFS_Filesystem_Structure/images/18.png
new file mode 100644
index 0000000..4097348
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/18.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/20a.png b/design/XFS_Filesystem_Structure/images/20a.png
new file mode 100644
index 0000000..52d0c26
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/20a.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/20b.png b/design/XFS_Filesystem_Structure/images/20b.png
new file mode 100644
index 0000000..977d57d
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/20b.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/23.png b/design/XFS_Filesystem_Structure/images/23.png
new file mode 100644
index 0000000..a74cd55
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/23.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/28.png b/design/XFS_Filesystem_Structure/images/28.png
new file mode 100644
index 0000000..e85b2c1
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/28.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/30.png b/design/XFS_Filesystem_Structure/images/30.png
new file mode 100644
index 0000000..f623fe5
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/30.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/31.png b/design/XFS_Filesystem_Structure/images/31.png
new file mode 100644
index 0000000..48b0172
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/31.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/32.png b/design/XFS_Filesystem_Structure/images/32.png
new file mode 100644
index 0000000..05da0b1
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/32.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/35.png b/design/XFS_Filesystem_Structure/images/35.png
new file mode 100644
index 0000000..25c3160
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/35.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/36.png b/design/XFS_Filesystem_Structure/images/36.png
new file mode 100644
index 0000000..c1d8b65
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/36.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/39.png b/design/XFS_Filesystem_Structure/images/39.png
new file mode 100644
index 0000000..0f264f4
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/39.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/43.png b/design/XFS_Filesystem_Structure/images/43.png
new file mode 100644
index 0000000..c9ef36b
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/43.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/48.png b/design/XFS_Filesystem_Structure/images/48.png
new file mode 100644
index 0000000..e906f18
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/48.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/54.png b/design/XFS_Filesystem_Structure/images/54.png
new file mode 100644
index 0000000..9e2ee03
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/54.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/6.png b/design/XFS_Filesystem_Structure/images/6.png
new file mode 100644
index 0000000..36c22fa
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/6.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/61.png b/design/XFS_Filesystem_Structure/images/61.png
new file mode 100644
index 0000000..7b18e61
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/61.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/62.png b/design/XFS_Filesystem_Structure/images/62.png
new file mode 100644
index 0000000..e240fa3
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/62.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/64.png b/design/XFS_Filesystem_Structure/images/64.png
new file mode 100644
index 0000000..ced8ffc
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/64.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/69.png b/design/XFS_Filesystem_Structure/images/69.png
new file mode 100644
index 0000000..3efa679
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/69.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/72.png b/design/XFS_Filesystem_Structure/images/72.png
new file mode 100644
index 0000000..fd7a99f
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/72.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/76.png b/design/XFS_Filesystem_Structure/images/76.png
new file mode 100644
index 0000000..346aa7d
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/76.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/code/33a.png b/design/XFS_Filesystem_Structure/images/code/33a.png
new file mode 100644
index 0000000..9ffb4f4
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/33a.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/code/33b.png b/design/XFS_Filesystem_Structure/images/code/33b.png
new file mode 100644
index 0000000..b45323c
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/33b.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/code/40.png b/design/XFS_Filesystem_Structure/images/code/40.png
new file mode 100644
index 0000000..38441ea
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/40.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/code/46.png b/design/XFS_Filesystem_Structure/images/code/46.png
new file mode 100644
index 0000000..df7abd5
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/46.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/code/57.png b/design/XFS_Filesystem_Structure/images/code/57.png
new file mode 100644
index 0000000..6f3b679
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/57.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/code/60.png b/design/XFS_Filesystem_Structure/images/code/60.png
new file mode 100644
index 0000000..5795be9
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/60.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/code/61.png b/design/XFS_Filesystem_Structure/images/code/61.png
new file mode 100644
index 0000000..ecff05e
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/61.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/code/65.png b/design/XFS_Filesystem_Structure/images/code/65.png
new file mode 100644
index 0000000..dd74d54
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/65.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/code/66.png b/design/XFS_Filesystem_Structure/images/code/66.png
new file mode 100644
index 0000000..3479ac4
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/66.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/code/67.png b/design/XFS_Filesystem_Structure/images/code/67.png
new file mode 100644
index 0000000..efec42a
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/67.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/code/71.png b/design/XFS_Filesystem_Structure/images/code/71.png
new file mode 100644
index 0000000..e66b710
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/71.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/code/73-74.png b/design/XFS_Filesystem_Structure/images/code/73-74.png
new file mode 100644
index 0000000..e44878c
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/73-74.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/code/74.png b/design/XFS_Filesystem_Structure/images/code/74.png
new file mode 100644
index 0000000..e50f0a4
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/74.png
Binary files differ
diff --git a/design/XFS_Filesystem_Structure/images/code/SVG/33a.svg b/design/XFS_Filesystem_Structure/images/code/SVG/33a.svg
new file mode 100644
index 0000000..1c2d8e5
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/SVG/33a.svg
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="656"
+ height="297"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46+devel"
+ version="1.0"
+ sodipodi:docname="71.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/rlerch/source/SVN/Red_Hat_Enterprise_Linux/5.4/XFS_Filesystem_Structure/en-US/images/code/71.png"
+ inkscape:export-xdpi="90.550003"
+ inkscape:export-ydpi="90.550003">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective20"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="181"
+ inkscape:cy="129.06641"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1566"
+ inkscape:window-height="1007"
+ inkscape:window-x="163"
+ inkscape:window-y="41" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-27,-511.36218)">
+ <rect
+ style="color:#000000;fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect26"
+ width="656"
+ height="297"
+ x="27"
+ y="511.36218"
+ rx="11.82843"
+ ry="11.82843" />
+ <rect
+ ry="0"
+ rx="0"
+ y="675.36218"
+ x="163"
+ height="12"
+ width="268"
+ id="rect854"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect80"
+ width="93"
+ height="12"
+ x="70"
+ y="690.36218"
+ rx="0"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="40.848923"
+ y="529.17023"
+ id="text56"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="529.17023"
+ id="tspan78">xfs_db&gt; type text</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="544.78925"
+ id="tspan90">xfs_db&gt; p</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="560.4082"
+ id="tspan92">00: 49 4e 81 a4 01 02 00 01 00 00 00 00 00 00 00 00 IN..............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="576.02722"
+ id="tspan94">10: 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 01 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="591.64624"
+ id="tspan96">20: 44 b6 88 dd 2f 8a ed d0 44 b6 88 f7 10 8c 5b d0 D.......D.......</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="607.2652"
+ id="tspan98">30: 44 b6 88 f7 10 8c 5b d0 00 00 00 00 01 7b b0 00 D...............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="622.88422"
+ id="tspan100">40: 00 00 00 00 00 00 17 bb 00 00 00 00 00 00 00 03 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="638.50323"
+ id="tspan102">50: 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="654.12219"
+ id="tspan104">60: ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 0d ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="669.74121"
+ id="tspan106">70: 5e a0 07 e9 00 00 00 00 00 0f d2 00 00 00 00 0f ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="685.36023"
+ id="tspan108">80: 58 e0 07 e9 00 00 00 00 00 1f a4 00 00 00 00 11 X...............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="700.97919"
+ id="tspan110">90: 53 20 07 e9 00 00 00 00 00 00 00 00 00 00 00 00 S...............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="716.59821"
+ id="tspan112">a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="732.21722"
+ id="tspan114">b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="747.83618"
+ id="tspan116">c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="763.4552"
+ id="tspan118">d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="779.07422"
+ id="tspan120">e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="794.69318"
+ id="tspan122">f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="810.31219"
+ id="tspan124" /></text>
+ </g>
+</svg>
diff --git a/design/XFS_Filesystem_Structure/images/code/SVG/33b.svg b/design/XFS_Filesystem_Structure/images/code/SVG/33b.svg
new file mode 100644
index 0000000..cb6dc2b
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/SVG/33b.svg
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="656"
+ height="155"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46+devel"
+ version="1.0"
+ sodipodi:docname="33a.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/rlerch/source/SVN/Red_Hat_Enterprise_Linux/5.4/XFS_Filesystem_Structure/en-US/images/code/71.png"
+ inkscape:export-xdpi="90.550003"
+ inkscape:export-ydpi="90.550003">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective20"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="14"
+ inkscape:cy="107.06641"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1566"
+ inkscape:window-height="1007"
+ inkscape:window-x="163"
+ inkscape:window-y="41" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-27,-511.36218)">
+ <rect
+ style="color:#000000;fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect26"
+ width="656"
+ height="155"
+ x="27"
+ y="511.36218"
+ rx="11.82843"
+ ry="11.82843" />
+ <rect
+ ry="0"
+ rx="0"
+ y="520.36218"
+ x="115"
+ height="12"
+ width="307"
+ id="rect854"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect80"
+ width="235"
+ height="12"
+ x="106"
+ y="534.36218"
+ rx="0"
+ ry="0" />
+ <rect
+ ry="0"
+ rx="0"
+ y="567.36218"
+ x="215"
+ height="12"
+ width="208"
+ id="rect354"
+ style="color:#000000;fill:#acc7e3;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="40.848923"
+ y="529.17023"
+ id="text56"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="529.17023"
+ id="tspan124">127-96: 0000 0000 0000 0000 0000 0000 0000 0000</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="544.78925"
+ id="tspan336"> 95-64: 0000 0000 0001 1111 1010 0100 0000 0000</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="560.4082"
+ id="tspan338"> 63-32: 0000 0000 0000 0000 0000 0000 0000 1111</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="576.02722"
+ id="tspan340"> 31-0 : 0101 1000 1110 0000 0000 0111 1110 1001</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="591.64624"
+ id="tspan342"></tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="607.2652"
+ id="tspan352">Grouping by highlights we get:</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="622.88422"
+ id="tspan344"> file offset = 0x0fd2 (4050)</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="638.50323"
+ id="tspan346"> start block = 0x7ac7 (31431)</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="654.12219"
+ id="tspan348"> block count = 0x07e9 (2025)</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="669.74121"
+ id="tspan350" /></text>
+ </g>
+</svg>
diff --git a/design/XFS_Filesystem_Structure/images/code/SVG/40.svg b/design/XFS_Filesystem_Structure/images/code/SVG/40.svg
new file mode 100644
index 0000000..593d8aa
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/SVG/40.svg
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="656"
+ height="266"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46+devel"
+ version="1.0"
+ sodipodi:docname="33b.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/rlerch/source/SVN/Red_Hat_Enterprise_Linux/5.4/XFS_Filesystem_Structure/en-US/images/code/71.png"
+ inkscape:export-xdpi="90.550003"
+ inkscape:export-ydpi="90.550003">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective20"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="284.19822"
+ inkscape:cy="178.06641"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1566"
+ inkscape:window-height="1007"
+ inkscape:window-x="163"
+ inkscape:window-y="41" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-27,-511.36218)">
+ <rect
+ style="color:#000000;fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect26"
+ width="656"
+ height="266"
+ x="27"
+ y="511.36218"
+ rx="11.82843"
+ ry="11.82843" />
+ <rect
+ ry="0"
+ rx="0"
+ y="660.36218"
+ x="67"
+ height="12"
+ width="362"
+ id="rect854"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect80"
+ width="128"
+ height="12"
+ x="303"
+ y="643.36218"
+ rx="0"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="40.848923"
+ y="529.17023"
+ id="text56"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="529.17023"
+ id="tspan350">xfs_db&gt; type text</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="544.78925"
+ id="tspan1203">xfs_db&gt; p</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="560.4082"
+ id="tspan1205">00: 49 4e 41 ed 01 01 00 02 00 00 00 00 00 00 00 00 INA.............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="576.02722"
+ id="tspan1207">10: 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 02 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="591.64624"
+ id="tspan1209">20: 44 ad 3a 83 1d a9 4a d0 44 ad 3a ab 0b c7 a7 d0 D.....J.D.......</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="607.2652"
+ id="tspan1211">30: 44 ad 3a ab 0b c7 a7 d0 00 00 00 00 00 00 00 5e D...............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="622.88422"
+ id="tspan1213">40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="638.50323"
+ id="tspan1215">50: 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="654.12219"
+ id="tspan1217">60: ff ff ff ff 04 00 00 00 00 80 0f 00 30 66 72 61 ............0fra</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="669.74121"
+ id="tspan1219">70: 6d 65 30 30 30 30 30 30 2e 74 73 74 01 80 00 81 me000000.tst....</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="685.36023"
+ id="tspan1221">80: 0f 00 50 66 72 61 6d 65 30 30 30 30 30 31 2e 74 ..Pframe000001.t</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="700.97919"
+ id="tspan1223">90: 73 74 01 80 00 82 0f 00 70 66 72 61 6d 65 30 30 st......pframe00</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="716.59821"
+ id="tspan1225">a0: 30 30 30 32 2e 74 73 74 01 80 00 83 0f 00 90 66 0002.tst.......f</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="732.21722"
+ id="tspan1227">b0: 72 61 6d 65 30 30 30 30 30 33 2e 74 73 74 01 80 rame000003.tst..</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="747.83618"
+ id="tspan1229">c0: 00 84 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="763.4552"
+ id="tspan1231">...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="779.07422"
+ id="tspan1233" /></text>
+ </g>
+</svg>
diff --git a/design/XFS_Filesystem_Structure/images/code/SVG/46.svg b/design/XFS_Filesystem_Structure/images/code/SVG/46.svg
new file mode 100644
index 0000000..baffb3f
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/SVG/46.svg
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="656"
+ height="202"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46+devel"
+ version="1.0"
+ sodipodi:docname="40.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/rlerch/source/SVN/Red_Hat_Enterprise_Linux/5.4/XFS_Filesystem_Structure/en-US/images/code/71.png"
+ inkscape:export-xdpi="90.550003"
+ inkscape:export-ydpi="90.550003">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective20"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="284.19822"
+ inkscape:cy="194.06641"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1566"
+ inkscape:window-height="1007"
+ inkscape:window-x="163"
+ inkscape:window-y="41" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-27,-511.36218)">
+ <rect
+ style="color:#000000;fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect26"
+ width="656"
+ height="202"
+ x="27"
+ y="511.36218"
+ rx="11.82843"
+ ry="11.82843" />
+ <rect
+ ry="0"
+ rx="0"
+ y="360.36218"
+ x="132"
+ height="12"
+ width="307"
+ id="rect854"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ ry="0"
+ rx="0"
+ y="550.36218"
+ x="77"
+ height="12"
+ width="86"
+ id="rect1432"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ ry="0"
+ rx="0"
+ y="567.36218"
+ x="350"
+ height="12"
+ width="81"
+ id="rect1434"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ ry="0"
+ rx="0"
+ y="675.36218"
+ x="345"
+ height="12"
+ width="83"
+ id="rect1436"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect80"
+ width="83"
+ height="12"
+ x="347"
+ y="690.36218"
+ rx="0"
+ ry="0" />
+ <rect
+ ry="0"
+ rx="0"
+ y="407.36218"
+ x="232"
+ height="12"
+ width="208"
+ id="rect354"
+ style="color:#000000;fill:#acc7e3;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="40.848923"
+ y="529.17023"
+ id="text56"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="529.17023"
+ id="tspan1233">090: 00 00 00 00 02 00 00 84 0f 66 72 61 6d 65 30 30 .........frame00</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="544.78925"
+ id="tspan1408">0a0: 30 30 30 33 2e 74 73 74 00 00 00 00 00 00 00 90 0003.tst........</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="560.4082"
+ id="tspan1410">0b0: ff ff 00 20 02 00 00 85 0f 66 72 61 6d 65 30 30 .........frame00</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="576.02722"
+ id="tspan1412">0c0: 30 30 30 34 2e 74 73 74 00 00 00 00 00 00 00 b0 0004.tst........</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="591.64624"
+ id="tspan1414">0d0: 00 00 00 00 02 00 00 86 0f 66 72 61 6d 65 30 30 .........frame00</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="607.2652"
+ id="tspan1416">0e0: 30 30 30 35 2e 74 73 74 00 00 00 00 00 00 00 d0 0005.tst........</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="622.88422"
+ id="tspan1418">...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="638.50323"
+ id="tspan1420">fb0: 00 00 17 2e 00 00 00 04 83 a0 40 b4 00 00 00 0e ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="654.12219"
+ id="tspan1422">fc0: 93 a0 40 b4 00 00 00 12 a3 a0 40 b4 00 00 00 06 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="669.74121"
+ id="tspan1424">fd0: b3 a0 40 b4 00 00 00 0a c3 a0 40 b4 00 00 00 1e ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="685.36023"
+ id="tspan1426">fe0: d3 a0 40 b4 00 00 00 22 e3 a0 40 b4 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="700.97919"
+ id="tspan1428">ff0: f3 a0 40 b4 00 00 00 1a 00 00 00 0a 00 00 00 01 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="716.59821"
+ id="tspan1430" /></text>
+ </g>
+</svg>
diff --git a/design/XFS_Filesystem_Structure/images/code/SVG/57.svg b/design/XFS_Filesystem_Structure/images/code/SVG/57.svg
new file mode 100644
index 0000000..bb50460
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/SVG/57.svg
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="656"
+ height="78"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46+devel"
+ version="1.0"
+ sodipodi:docname="46.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/rlerch/source/SVN/Red_Hat_Enterprise_Linux/5.4/XFS_Filesystem_Structure/en-US/images/code/71.png"
+ inkscape:export-xdpi="90.550003"
+ inkscape:export-ydpi="90.550003">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective20"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="284.19822"
+ inkscape:cy="110.06641"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1566"
+ inkscape:window-height="1007"
+ inkscape:window-x="163"
+ inkscape:window-y="41" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-27,-511.36218)">
+ <rect
+ style="color:#000000;fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect26"
+ width="656"
+ height="78"
+ x="27"
+ y="511.36218"
+ rx="11.82843"
+ ry="11.82843" />
+ <rect
+ ry="0"
+ rx="0"
+ y="565.36218"
+ x="77"
+ height="12"
+ width="219"
+ id="rect854"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ ry="0"
+ rx="0"
+ y="407.36218"
+ x="232"
+ height="12"
+ width="208"
+ id="rect354"
+ style="color:#000000;fill:#acc7e3;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="40.848923"
+ y="529.17023"
+ id="text56"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="529.17023"
+ id="tspan1430">xfs_db&gt; type text</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="544.78925"
+ id="tspan1549">xfs_db&gt; p</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="560.4082"
+ id="tspan1551">000: 58 44 32 46 00 00 00 00 00 00 00 05 00 00 00 05 XD2F............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="576.02722"
+ id="tspan1553">010: 00 10 00 10 00 10 00 10 3f 50 00 00 1f 01 ff ff .........P......</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="591.64624"
+ id="tspan1555" /></text>
+ </g>
+</svg>
diff --git a/design/XFS_Filesystem_Structure/images/code/SVG/60.svg b/design/XFS_Filesystem_Structure/images/code/SVG/60.svg
new file mode 100644
index 0000000..b720921
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/SVG/60.svg
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="656"
+ height="251"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46+devel"
+ version="1.0"
+ sodipodi:docname="57.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/rlerch/source/SVN/Red_Hat_Enterprise_Linux/5.4/XFS_Filesystem_Structure/en-US/images/code/71.png"
+ inkscape:export-xdpi="90.550003"
+ inkscape:export-ydpi="90.550003">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective20"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="284.19822"
+ inkscape:cy="283.06641"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1566"
+ inkscape:window-height="1007"
+ inkscape:window-x="163"
+ inkscape:window-y="41" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-27,-511.36218)">
+ <rect
+ style="color:#000000;fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect26"
+ width="656"
+ height="251"
+ x="27"
+ y="511.36218"
+ rx="11.82843"
+ ry="11.82843" />
+ <rect
+ ry="0"
+ rx="0"
+ y="565.36218"
+ x="165"
+ height="12"
+ width="60"
+ id="rect854"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ ry="0"
+ rx="0"
+ y="407.36218"
+ x="232"
+ height="12"
+ width="208"
+ id="rect354"
+ style="color:#000000;fill:#acc7e3;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect1622"
+ width="60"
+ height="12"
+ x="165"
+ y="705.36218"
+ rx="0"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="40.848923"
+ y="529.17023"
+ id="text56"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="529.17023"
+ id="tspan1555">xfs_db&gt; dblock 8388928</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="544.78925"
+ id="tspan1592">xfs_db&gt; type dir2</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="560.4082"
+ id="tspan1594">xfs_db&gt; p</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="576.02722"
+ id="tspan1596">lhdr.info.forw = 8388919</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="591.64624"
+ id="tspan1598">lhdr.info.back = 8388937</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="607.2652"
+ id="tspan1600">lhdr.info.magic = 0xd2ff</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="622.88422"
+ id="tspan1602">...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="638.50323"
+ id="tspan1620" /><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="654.12219"
+ id="tspan1604">xfs_db&gt; dblock 8388919</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="669.74121"
+ id="tspan1606">xfs_db&gt; type dir2</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="685.36023"
+ id="tspan1608">xfs_db&gt; p</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="700.97919"
+ id="tspan1610">lhdr.info.forw = 8388706</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="716.59821"
+ id="tspan1612">lhdr.info.back = 8388928</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="732.21722"
+ id="tspan1614">lhdr.info.magic = 0xd2ff</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="747.83618"
+ id="tspan1616">...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="763.4552"
+ id="tspan1618" /></text>
+ </g>
+</svg>
diff --git a/design/XFS_Filesystem_Structure/images/code/SVG/61.svg b/design/XFS_Filesystem_Structure/images/code/SVG/61.svg
new file mode 100644
index 0000000..2ffd254
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/SVG/61.svg
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="656"
+ height="185"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46+devel"
+ version="1.0"
+ sodipodi:docname="60.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/rlerch/source/SVN/Red_Hat_Enterprise_Linux/5.4/XFS_Filesystem_Structure/en-US/images/code/71.png"
+ inkscape:export-xdpi="90.550003"
+ inkscape:export-ydpi="90.550003">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective20"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="284.19822"
+ inkscape:cy="57.066409"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1566"
+ inkscape:window-height="1007"
+ inkscape:window-x="163"
+ inkscape:window-y="41" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-27,-511.36218)">
+ <rect
+ style="color:#000000;fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect26"
+ width="656"
+ height="185"
+ x="27"
+ y="511.36218"
+ rx="11.82843"
+ ry="11.828429" />
+ <rect
+ ry="0"
+ rx="0"
+ y="407.36218"
+ x="232"
+ height="12"
+ width="208"
+ id="rect354"
+ style="color:#000000;fill:#acc7e3;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect1622"
+ width="263"
+ height="12"
+ x="167"
+ y="644.36218"
+ rx="0"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="40.848923"
+ y="529.17023"
+ id="text56"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="529.17023"
+ id="tspan1618">xfs_db&gt; type text</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="544.78925"
+ id="tspan1780">xfs_db&gt; p</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="560.4082"
+ id="tspan1782">00: 49 4e a1 ff 01 01 00 01 00 00 00 00 00 00 00 00 IN..............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="576.02722"
+ id="tspan1784">10: 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 01 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="591.64624"
+ id="tspan1786">20: 44 bc e1 c7 03 c4 d4 18 44 bc e1 c7 03 c4 d4 18 D.......D.......</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="607.2652"
+ id="tspan1788">30: 44 bc e1 c7 03 c4 d4 18 00 00 00 00 00 00 00 0c D...............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="622.88422"
+ id="tspan1790">40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="638.50323"
+ id="tspan1792">50: 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="654.12219"
+ id="tspan1794">60: ff ff ff ff 73 6d 61 6c 6c 5f 74 61 72 67 65 74 ....small.target</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="669.74121"
+ id="tspan1796">70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="685.36023"
+ id="tspan1798">...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="700.97919"
+ id="tspan1800" /></text>
+ </g>
+</svg>
diff --git a/design/XFS_Filesystem_Structure/images/code/SVG/65.svg b/design/XFS_Filesystem_Structure/images/code/SVG/65.svg
new file mode 100644
index 0000000..8cb2452
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/SVG/65.svg
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="656"
+ height="295"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46+devel"
+ version="1.0"
+ sodipodi:docname="61.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/rlerch/source/SVN/Red_Hat_Enterprise_Linux/5.4/XFS_Filesystem_Structure/en-US/images/code/71.png"
+ inkscape:export-xdpi="90.550003"
+ inkscape:export-ydpi="90.550003">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective20"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="284.19822"
+ inkscape:cy="167.06641"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1566"
+ inkscape:window-height="1007"
+ inkscape:window-x="163"
+ inkscape:window-y="41" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-27,-511.36218)">
+ <rect
+ style="color:#000000;fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect26"
+ width="656"
+ height="295"
+ x="27"
+ y="511.36218"
+ rx="11.82843"
+ ry="11.828429" />
+ <rect
+ ry="0"
+ rx="0"
+ y="407.36218"
+ x="232"
+ height="12"
+ width="208"
+ id="rect354"
+ style="color:#000000;fill:#acc7e3;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect1622"
+ width="174"
+ height="12"
+ x="256"
+ y="769.36218"
+ rx="0"
+ ry="0" />
+ <rect
+ ry="0"
+ rx="0"
+ y="785.36218"
+ x="70"
+ height="12"
+ width="91"
+ id="rect1940"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="40.848923"
+ y="529.17023"
+ id="text56"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="529.17023"
+ id="tspan1800">xfs_db&gt; type text</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="544.78925"
+ id="tspan1900">xfs_db&gt; p</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="560.4082"
+ id="tspan1902">00: 49 4e 81 a4 01 02 00 01 00 00 00 00 00 00 00 00 IN..............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="576.02722"
+ id="tspan1904">10: 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 02 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="591.64624"
+ id="tspan1906">20: 44 be 1a be 38 d1 26 98 44 be 1a be 38 d1 26 98 D...8...D...8...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="607.2652"
+ id="tspan1908">30: 44 be 1a e1 3a 9a ea 18 00 00 00 00 00 00 00 04 D...............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="622.88422"
+ id="tspan1910">40: 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="638.50323"
+ id="tspan1912">50: 00 00 0f 01 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="654.12219"
+ id="tspan1914">60: ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 12 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="669.74121"
+ id="tspan1916">70: 53 a0 00 01 00 00 00 00 00 00 00 00 00 00 00 00 S...............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="685.36023"
+ id="tspan1918">80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="700.97919"
+ id="tspan1920">90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="716.59821"
+ id="tspan1922">a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="732.21722"
+ id="tspan1926">b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="747.83618"
+ id="tspan1928">c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="763.4552"
+ id="tspan1930">d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 18 02 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="779.07422"
+ id="tspan1932">e0: 05 00 00 65 6d 70 74 79 05 04 02 74 72 75 73 74 ...empty...trust</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="794.69318"
+ id="tspan1934">f0: 76 61 6c 31 00 00 00 00 00 00 00 00 00 00 00 00 val1............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="810.31219"
+ id="tspan1936" /></text>
+ <g
+ id="g2140"
+ transform="translate(58,7)">
+ <rect
+ y="708.36218"
+ x="193"
+ height="26"
+ width="86"
+ id="rect1942"
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="206.84892"
+ y="726.17023"
+ id="text1944"
+ sodipodi:linespacing="100%"><tspan
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+ sodipodi:role="line"
+ x="206.84892"
+ y="726.17023"
+ id="tspan1980">hdr.totsize</tspan><tspan
+ sodipodi:role="line"
+ x="206.84892"
+ y="738.66541"
+ id="tspan1982" /></text>
+ </g>
+ <rect
+ y="750.36218"
+ x="346"
+ height="16"
+ width="43"
+ id="rect2138"
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="stroke-width:2;fill:none;stroke:#000000;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="m 309,220 20,0 11.22724,19.44615"
+ id="path2146"
+ transform="translate(27,511.36218)" />
+ </g>
+</svg>
diff --git a/design/XFS_Filesystem_Structure/images/code/SVG/66.svg b/design/XFS_Filesystem_Structure/images/code/SVG/66.svg
new file mode 100644
index 0000000..1ef8303
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/SVG/66.svg
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="656"
+ height="405"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46+devel"
+ version="1.0"
+ sodipodi:docname="65.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/rlerch/source/SVN/Red_Hat_Enterprise_Linux/5.4/XFS_Filesystem_Structure/en-US/images/code/71.png"
+ inkscape:export-xdpi="90.550003"
+ inkscape:export-ydpi="90.550003">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective20"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="284.19822"
+ inkscape:cy="215.15587"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1566"
+ inkscape:window-height="1007"
+ inkscape:window-x="163"
+ inkscape:window-y="41" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-27,-511.36218)">
+ <rect
+ style="color:#000000;fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect26"
+ width="656"
+ height="405"
+ x="27"
+ y="511.36218"
+ rx="11.82843"
+ ry="11.828429" />
+ <rect
+ ry="0"
+ rx="0"
+ y="407.36218"
+ x="232"
+ height="12"
+ width="208"
+ id="rect354"
+ style="color:#000000;fill:#acc7e3;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect1622"
+ width="174"
+ height="12"
+ x="262"
+ y="364.36218"
+ rx="0"
+ ry="0" />
+ <rect
+ ry="0"
+ rx="0"
+ y="566.36218"
+ x="39"
+ height="12"
+ width="128"
+ id="rect1940"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="40.848923"
+ y="529.17023"
+ id="text56"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="529.17023"
+ id="tspan1936">xfs_db&gt; p</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="544.78925"
+ id="tspan2358">...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="560.4082"
+ id="tspan2360">core.naextents = 0</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="576.02722"
+ id="tspan2362">core.forkoff = 13</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="591.64624"
+ id="tspan2364">core.aformat = 1 (local)</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="607.2652"
+ id="tspan2366">...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="622.88422"
+ id="tspan2368">a.sfattr.hdr.totsize = 52</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="638.50323"
+ id="tspan2370">a.sfattr.hdr.count = 3</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="654.12219"
+ id="tspan2372">a.sfattr.list[0].namelen = 10</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="669.74121"
+ id="tspan2374">a.sfattr.list[0].valuelen = 0</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="685.36023"
+ id="tspan2376">a.sfattr.list[0].root = 0</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="700.97919"
+ id="tspan2378">a.sfattr.list[0].secure = 0</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="716.59821"
+ id="tspan2380">a.sfattr.list[0].name = &quot;empty_attr&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="732.21722"
+ id="tspan2382">a.sfattr.list[1].namelen = 7</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="747.83618"
+ id="tspan2384">a.sfattr.list[1].valuelen = 4</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="763.4552"
+ id="tspan2386">a.sfattr.list[1].root = 1</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="779.07422"
+ id="tspan2388">a.sfattr.list[1].secure = 0</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="794.69318"
+ id="tspan2390">a.sfattr.list[1].name = &quot;trust_a&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="810.31219"
+ id="tspan2392">a.sfattr.list[1].value = &quot;val1&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="825.93121"
+ id="tspan2394">a.sfattr.list[2].namelen = 6</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="841.55017"
+ id="tspan2396">a.sfattr.list[2].valuelen = 12</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="857.16919"
+ id="tspan2398">a.sfattr.list[2].root = 0</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="872.78821"
+ id="tspan2400">a.sfattr.list[2].secure = 0</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="888.40717"
+ id="tspan2402">a.sfattr.list[2].name = &quot;second&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="904.02618"
+ id="tspan2404">a.sfattr.list[2].value = &quot;second_value&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="919.6452"
+ id="tspan2406" /></text>
+ <g
+ id="g2140"
+ transform="translate(64,-398)">
+ <rect
+ y="708.36218"
+ x="193"
+ height="26"
+ width="86"
+ id="rect1942"
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="206.84892"
+ y="726.17023"
+ id="text1944"
+ sodipodi:linespacing="100%"><tspan
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+ sodipodi:role="line"
+ x="206.84892"
+ y="726.17023"
+ id="tspan1980">hdr.totsize</tspan><tspan
+ sodipodi:role="line"
+ x="206.84892"
+ y="738.66541"
+ id="tspan1982" /></text>
+ </g>
+ <rect
+ y="345.36218"
+ x="352"
+ height="16"
+ width="43"
+ id="rect2138"
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 342,326.36218 20,0 11.22724,19.44615"
+ id="path2146" />
+ </g>
+</svg>
diff --git a/design/XFS_Filesystem_Structure/images/code/SVG/67.svg b/design/XFS_Filesystem_Structure/images/code/SVG/67.svg
new file mode 100644
index 0000000..b8a9abc
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/SVG/67.svg
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="656"
+ height="296"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46+devel"
+ version="1.0"
+ sodipodi:docname="66.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/rlerch/source/SVN/Red_Hat_Enterprise_Linux/5.4/XFS_Filesystem_Structure/en-US/images/code/71.png"
+ inkscape:export-xdpi="90.550003"
+ inkscape:export-ydpi="90.550003">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective20"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="284.19822"
+ inkscape:cy="106.15587"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1566"
+ inkscape:window-height="1007"
+ inkscape:window-x="163"
+ inkscape:window-y="41" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-27,-511.36218)">
+ <rect
+ style="color:#000000;fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect26"
+ width="656"
+ height="296"
+ x="27"
+ y="511.36218"
+ rx="11.82843"
+ ry="11.828429" />
+ <rect
+ ry="0"
+ rx="0"
+ y="407.36218"
+ x="232"
+ height="12"
+ width="208"
+ id="rect354"
+ style="color:#000000;fill:#acc7e3;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect1622"
+ width="174"
+ height="12"
+ x="262"
+ y="364.36218"
+ rx="0"
+ ry="0" />
+ <rect
+ ry="0"
+ rx="0"
+ y="722.36218"
+ x="165"
+ height="12"
+ width="87"
+ id="rect1940"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="40.848923"
+ y="529.17023"
+ id="text56"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="529.17023"
+ id="tspan2406">xfs_db&gt; type text</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="544.78925"
+ id="tspan2779">xfs_db&gt; p</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="560.4082"
+ id="tspan2781">00: 49 4e 81 a4 01 02 00 01 00 00 00 00 00 00 00 00 IN..............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="576.02722"
+ id="tspan2783">10: 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 05 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="591.64624"
+ id="tspan2785">20: 44 be 24 cd 0f b0 96 18 44 be 24 cd 0f b0 96 18 D.......D.......</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="607.2652"
+ id="tspan2787">30: 44 be 2d f5 01 62 7a 18 00 00 00 00 00 00 00 04 D....bz.........</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="622.88422"
+ id="tspan2789">40: 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="638.50323"
+ id="tspan2791">50: 00 00 0a 01 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="654.12219"
+ id="tspan2793">60: ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 01 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="669.74121"
+ id="tspan2795">70: 41 c0 00 01 00 00 00 00 00 00 00 00 00 00 00 00 A...............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="685.36023"
+ id="tspan2797">80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="700.97919"
+ id="tspan2799">90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="716.59821"
+ id="tspan2801">a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="732.21722"
+ id="tspan2803">b0: 00 00 00 00 00 45 04 00 0a 00 00 65 6d 70 74 79 .....E.....empty</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="747.83618"
+ id="tspan2805">c0: 5f 61 74 74 72 07 04 02 74 72 75 73 74 5f 61 76 .attr...trust.av</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="763.4552"
+ id="tspan2807">d0: 61 6c 31 06 0c 00 73 65 63 6f 6e 64 73 65 63 6f al1...secondseco</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="779.07422"
+ id="tspan2809">e0: 6e 64 5f 76 61 6c 75 65 06 08 04 70 6f 6c 69 63 nd.value...polic</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="794.69318"
+ id="tspan2811">f0: 79 63 6f 6e 74 65 6e 74 73 64 5f 76 61 6c 75 65 ycontentsd.value</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="810.31219"
+ id="tspan2813" /></text>
+ <g
+ id="g2140"
+ transform="translate(64,-398)">
+ <rect
+ y="708.36218"
+ x="193"
+ height="26"
+ width="86"
+ id="rect1942"
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="206.84892"
+ y="726.17023"
+ id="text1944"
+ sodipodi:linespacing="100%"><tspan
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+ sodipodi:role="line"
+ x="206.84892"
+ y="726.17023"
+ id="tspan1980">hdr.totsize</tspan><tspan
+ sodipodi:role="line"
+ x="206.84892"
+ y="738.66541"
+ id="tspan1982" /></text>
+ </g>
+ <rect
+ y="345.36218"
+ x="352"
+ height="16"
+ width="43"
+ id="rect2138"
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 342,326.36218 20,0 11.22724,19.44615"
+ id="path2146" />
+ </g>
+</svg>
diff --git a/design/XFS_Filesystem_Structure/images/code/SVG/71.svg b/design/XFS_Filesystem_Structure/images/code/SVG/71.svg
new file mode 100644
index 0000000..1bc5cfa
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/SVG/71.svg
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="656"
+ height="167"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46+devel"
+ version="1.0"
+ sodipodi:docname="New document 1"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective20"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="181"
+ inkscape:cy="-0.93359375"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1566"
+ inkscape:window-height="1007"
+ inkscape:window-x="163"
+ inkscape:window-y="41" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-27,-511.36218)">
+ <rect
+ style="color:#000000;fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect26"
+ width="656"
+ height="167"
+ x="27"
+ y="511.36218"
+ rx="11.82843"
+ ry="11.82843" />
+ <rect
+ ry="0"
+ rx="0"
+ y="628.36218"
+ x="79"
+ height="12"
+ width="217"
+ id="rect854"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect80"
+ width="88"
+ height="12"
+ x="347"
+ y="613.36218"
+ rx="0"
+ ry="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="40.848923"
+ y="529.17023"
+ id="text56"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan58"
+ x="40.848923"
+ y="529.17023">000: 00 00 00 00 00 00 00 00 fb ee 00 00 00 03 00 34 ...............4</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="544.78925"
+ id="tspan60">010: 0f cc 00 00 00 38 0f 94 00 00 00 00 00 00 00 00 .....8..........</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="560.4082"
+ id="tspan62">020: 1e 9d 39 34 0f cc 01 00 1e 9d 39 37 0f dc 01 00 ..94......97....</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="576.02722"
+ id="tspan64">030: fc f8 9d 4f 0f ec 00 00 00 00 00 00 00 00 00 00 ...O............</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="591.64624"
+ id="tspan66">040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="607.2652"
+ id="tspan68">...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="622.88422"
+ id="tspan70">fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 06 05 61 ...............a</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="638.50323"
+ id="tspan72">fd0: 74 74 72 32 76 61 6c 75 65 32 00 00 00 06 05 61 ttr2value2.....a</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="654.12219"
+ id="tspan74">fe0: 74 74 72 31 76 61 6c 75 65 31 00 00 00 00 00 01 ttr1value1......</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="669.74121"
+ id="tspan76">ff0: 00 00 77 e4 08 62 69 67 5f 61 74 74 72 00 00 00 ..w..big.attr...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="685.36023"
+ id="tspan78" /></text>
+ </g>
+</svg>
diff --git a/design/XFS_Filesystem_Structure/images/code/SVG/73-74.svg b/design/XFS_Filesystem_Structure/images/code/SVG/73-74.svg
new file mode 100644
index 0000000..d200d49
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/SVG/73-74.svg
@@ -0,0 +1,364 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="656"
+ height="814"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46+devel"
+ version="1.0"
+ sodipodi:docname="67.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/rlerch/source/SVN/Red_Hat_Enterprise_Linux/5.4/XFS_Filesystem_Structure/en-US/images/code/71.png"
+ inkscape:export-xdpi="90.550003"
+ inkscape:export-ydpi="90.550003">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective20"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="284.19822"
+ inkscape:cy="331.44726"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1566"
+ inkscape:window-height="1007"
+ inkscape:window-x="163"
+ inkscape:window-y="41" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-27,-511.36218)">
+ <rect
+ style="color:#000000;fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect26"
+ width="656"
+ height="814"
+ x="27"
+ y="511.36218"
+ rx="11.82843"
+ ry="11.828429" />
+ <rect
+ ry="0"
+ rx="0"
+ y="407.36218"
+ x="232"
+ height="12"
+ width="208"
+ id="rect354"
+ style="color:#000000;fill:#acc7e3;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect1622"
+ width="174"
+ height="12"
+ x="262"
+ y="364.36218"
+ rx="0"
+ ry="0" />
+ <rect
+ ry="0"
+ rx="0"
+ y="785.36218"
+ x="113"
+ height="12"
+ width="212"
+ id="rect1940"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="40.848923"
+ y="529.17023"
+ id="text56"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="529.17023"
+ id="tspan2813">xfs_db&gt; ablock 5</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="544.78925"
+ id="tspan3025">xfs_db&gt; p</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="560.4082"
+ id="tspan3027">hdr.info.forw = 4</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="576.02722"
+ id="tspan3029">hdr.info.back = 3</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="591.64624"
+ id="tspan3031">hdr.info.magic = 0xfbee</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="607.2652"
+ id="tspan3033">hdr.count = 96</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="622.88422"
+ id="tspan3035">hdr.usedbytes = 2688</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="638.50323"
+ id="tspan3037">hdr.firstused = 1408</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="654.12219"
+ id="tspan3039">hdr.holes = 0</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="669.74121"
+ id="tspan3041">hdr.freemap[0-2] = [base,size] 0:[800,608] 1:[0,0] 2:[0,0]</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="685.36023"
+ id="tspan3043">entries[0-95] = [hashval,nameidx,incomplete,root,secure,local]</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="700.97919"
+ id="tspan3045"> 0:[0x3437922f,4068,0,0,0,1]</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="716.59821"
+ id="tspan3047"> 1:[0x343792a6,4040,0,0,0,1]</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="732.21722"
+ id="tspan3049"> 2:[0x343792a7,4012,0,0,0,1]</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="747.83618"
+ id="tspan3051"> 3:[0x343792a8,3984,0,0,0,1]</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="763.4552"
+ id="tspan3053"> ...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="779.07422"
+ id="tspan3055"> 82:[0x3437d1a7,2892,0,0,0,1]</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="794.69318"
+ id="tspan3057"> 83:[0x3437d1a8,2864,0,0,0,1]</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="810.31219"
+ id="tspan3059"> 84:[0x3437d1a9,2836,0,0,0,1]</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="825.93121"
+ id="tspan3061"> ...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="841.55017"
+ id="tspan3063"> 95:[0x3437d22a,2528,0,0,0,1]</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="857.16919"
+ id="tspan3065">nvlist[0].valuelen = 10</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="872.78821"
+ id="tspan3067">nvlist[0].namelen = 13</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="888.40717"
+ id="tspan3069">nvlist[0].name = &quot;attribute_310&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="904.02618"
+ id="tspan3071">nvlist[0].value = &quot;value_310\d&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="919.6452"
+ id="tspan3073">nvlist[1].valuelen = 10</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="935.26416"
+ id="tspan3075">nvlist[1].namelen = 13</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="950.88318"
+ id="tspan3077">nvlist[1].name = &quot;attribute_309&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="966.50214"
+ id="tspan3079">nvlist[1].value = &quot;value_309\d&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="982.12115"
+ id="tspan3081">nvlist[2].valuelen = 10</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="997.74017"
+ id="tspan3083">nvlist[2].namelen = 13</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1013.3591"
+ id="tspan3085">nvlist[2].name = &quot;attribute_308&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1028.9781"
+ id="tspan3087">nvlist[2].value = &quot;value_308\d&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1044.5972"
+ id="tspan3089">nvlist[3].valuelen = 10</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1060.2162"
+ id="tspan3091">nvlist[3].namelen = 13</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1075.8352"
+ id="tspan3093">nvlist[3].name = &quot;attribute_307&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1091.4541"
+ id="tspan3095">nvlist[3].value = &quot;value_307\d&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1107.0731"
+ id="tspan3097">...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1122.6921"
+ id="tspan3099">nvlist[82].valuelen = 10</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1138.3112"
+ id="tspan3101">nvlist[82].namelen = 13</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1153.9302"
+ id="tspan3103">nvlist[82].name = &quot;attribute_268&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1169.5492"
+ id="tspan3105">nvlist[82].value = &quot;value_268\d&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1185.1681"
+ id="tspan3107">nvlist[83].valuelen = 10</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1200.7871"
+ id="tspan3109">nvlist[83].namelen = 13</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1216.4061"
+ id="tspan3111">nvlist[83].name = &quot;attribute_267&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1232.0251"
+ id="tspan3113">nvlist[83].value = &quot;value_267\d&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1247.6442"
+ id="tspan3115">nvlist[84].valuelen = 10</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1263.2632"
+ id="tspan3117">nvlist[84].namelen = 13</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1278.8821"
+ id="tspan3119">nvlist[84].name = &quot;attribute_266&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1294.5011"
+ id="tspan3121">nvlist[84].value = &quot;value_266\d&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1310.1201"
+ id="tspan3123">...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="1325.7391"
+ id="tspan3125" /></text>
+ <g
+ id="g2140"
+ transform="translate(64,-398)">
+ <rect
+ y="708.36218"
+ x="193"
+ height="26"
+ width="86"
+ id="rect1942"
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="206.84892"
+ y="726.17023"
+ id="text1944"
+ sodipodi:linespacing="100%"><tspan
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+ sodipodi:role="line"
+ x="206.84892"
+ y="726.17023"
+ id="tspan1980">hdr.totsize</tspan><tspan
+ sodipodi:role="line"
+ x="206.84892"
+ y="738.66541"
+ id="tspan1982" /></text>
+ </g>
+ <rect
+ y="345.36218"
+ x="352"
+ height="16"
+ width="43"
+ id="rect2138"
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 342,326.36218 20,0 11.22724,19.44615"
+ id="path2146" />
+ </g>
+</svg>
diff --git a/design/XFS_Filesystem_Structure/images/code/SVG/74.svg b/design/XFS_Filesystem_Structure/images/code/SVG/74.svg
new file mode 100644
index 0000000..b78e618
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/code/SVG/74.svg
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="656"
+ height="138"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46+devel"
+ version="1.0"
+ sodipodi:docname="73-74.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/rlerch/source/SVN/Red_Hat_Enterprise_Linux/5.4/XFS_Filesystem_Structure/en-US/images/code/71.png"
+ inkscape:export-xdpi="90.550003"
+ inkscape:export-ydpi="90.550003">
+ <defs
+ id="defs4">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ <inkscape:perspective
+ id="perspective20"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="284.19822"
+ inkscape:cy="-64.552743"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1566"
+ inkscape:window-height="1007"
+ inkscape:window-x="163"
+ inkscape:window-y="41" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-27,-511.36218)">
+ <rect
+ style="color:#000000;fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect26"
+ width="656"
+ height="138"
+ x="27"
+ y="511.36218"
+ rx="11.82843"
+ ry="11.828429" />
+ <rect
+ ry="0"
+ rx="0"
+ y="407.36218"
+ x="232"
+ height="12"
+ width="208"
+ id="rect354"
+ style="color:#000000;fill:#acc7e3;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect1622"
+ width="174"
+ height="12"
+ x="262"
+ y="364.36218"
+ rx="0"
+ ry="0" />
+ <rect
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect4541"
+ width="352"
+ height="12"
+ x="76"
+ y="565.36218"
+ rx="0"
+ ry="0" />
+ <rect
+ ry="0"
+ rx="0"
+ y="581.36218"
+ x="77"
+ height="12"
+ width="217"
+ id="rect1940"
+ style="color:#000000;fill:#fce94f;fill-opacity:1;fill-rule:nonzero;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="40.848923"
+ y="529.17023"
+ id="text56"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="529.17023"
+ id="tspan3125">b00: 62 75 74 65 5f 32 36 35 76 61 6c 75 65 5f 32 36 bute.265value.26</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="544.78925"
+ id="tspan4525">b10: 35 0a 00 00 00 0a 0d 61 74 74 72 69 62 75 74 65 5......attribute</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="560.4082"
+ id="tspan4527">b20: 5f 32 36 36 76 61 6c 75 65 5f 32 36 36 0a 00 00 .266value.266...</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="576.02722"
+ id="tspan4529">b30: 00 0a 0d 61 74 74 72 69 62 75 74 65 5f 32 36 37 ...attribute.267</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="591.64624"
+ id="tspan4531">b40: 76 61 6c 75 65 5f 32 36 37 0a 00 00 00 0a 0d 61 value.267......a</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="607.2652"
+ id="tspan4533">b50: 74 74 72 69 62 75 74 65 5f 32 36 38 76 61 6c 75 ttribute.268valu</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="622.88422"
+ id="tspan4535">b60: 65 5f 32 36 38 0a 00 00 00 0a 0d 61 74 74 72 69 e.268......attri</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="638.50323"
+ id="tspan4537">b70: 62 75 74 65 5f 32 36 39 76 61 6c 75 65 5f 32 36 bute.269value.26</tspan><tspan
+ sodipodi:role="line"
+ x="40.848923"
+ y="654.12219"
+ id="tspan4539" /></text>
+ <g
+ id="g2140"
+ transform="translate(64,-398)">
+ <rect
+ y="708.36218"
+ x="193"
+ height="26"
+ width="86"
+ id="rect1942"
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Mono;-inkscape-font-specification:Liberation Mono"
+ x="206.84892"
+ y="726.17023"
+ id="text1944"
+ sodipodi:linespacing="100%"><tspan
+ style="font-size:12.49519825px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+ sodipodi:role="line"
+ x="206.84892"
+ y="726.17023"
+ id="tspan1980">hdr.totsize</tspan><tspan
+ sodipodi:role="line"
+ x="206.84892"
+ y="738.66541"
+ id="tspan1982" /></text>
+ </g>
+ <rect
+ y="345.36218"
+ x="352"
+ height="16"
+ width="43"
+ id="rect2138"
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 342,326.36218 20,0 11.22724,19.44615"
+ id="path2146" />
+ </g>
+</svg>
diff --git a/design/XFS_Filesystem_Structure/images/icon.svg b/design/XFS_Filesystem_Structure/images/icon.svg
new file mode 100644
index 0000000..c471a60
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/images/icon.svg
@@ -0,0 +1,3936 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:ns="http://ns.adobe.com/AdobeSVGViewerExtensions/3/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="32"
+ height="32"
+ id="svg3017"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ sodipodi:docname="book.svg"
+ sodipodi:docbase="/home/andy/Desktop">
+ <metadata
+ id="metadata489">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ inkscape:window-height="480"
+ inkscape:window-width="858"
+ inkscape:pageshadow="0"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="1"
+ inkscape:cx="16"
+ inkscape:cy="15.944056"
+ inkscape:window-x="0"
+ inkscape:window-y="33"
+ inkscape:current-layer="svg3017" />
+ <defs
+ id="defs3019">
+ <linearGradient
+ id="linearGradient2381">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop2383" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="stop2385" />
+ </linearGradient>
+ <linearGradient
+ x1="415.73831"
+ y1="11.854"
+ x2="418.13361"
+ y2="18.8104"
+ id="XMLID_1758_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8362,0.5206,-1.1904,0.992,147.62,-30.9374)">
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="0"
+ id="stop3903" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop3905" />
+ <a:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="500.70749"
+ y1="-13.2441"
+ x2="513.46442"
+ y2="-2.1547"
+ id="XMLID_1757_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop3890" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop3892" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="XMLID_1755_">
+ <use
+ id="use3874"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_343_" />
+ </clipPath>
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop3877" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop3879" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop3881" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop3883" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="471.0806"
+ y1="201.07761"
+ x2="481.91711"
+ y2="210.4977"
+ id="XMLID_1754_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#6498c1;stop-opacity:1"
+ offset="0.005618"
+ id="stop3863" />
+ <stop
+ style="stop-color:#79a9cc;stop-opacity:1"
+ offset="0.2332"
+ id="stop3865" />
+ <stop
+ style="stop-color:#a4cde2;stop-opacity:1"
+ offset="0.74049997"
+ id="stop3867" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="1"
+ id="stop3869" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="5.618000e-003" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="0.4438" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="XMLID_1753_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop3851" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop3853" />
+ <a:midPointStop
+ style="stop-color:#B2B2B2"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B2B2B2"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="XMLID_1751_">
+ <use
+ id="use3837"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_338_" />
+ </clipPath>
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop3840" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop3842" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop3844" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop3846" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="468.2915"
+ y1="204.7612"
+ x2="479.39871"
+ y2="214.4166"
+ id="XMLID_1750_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop3830" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop3832" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop3818" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop3820" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="501.0903"
+ y1="-19.2544"
+ x2="531.85413"
+ y2="0.72390002"
+ id="XMLID_1748_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop3803" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop3805" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop3807" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop3809" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="XMLID_2275_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop9947" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop9949" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop9951" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop9953" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="XMLID_2273_">
+ <use
+ id="use9933"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_960_" />
+ </clipPath>
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="XMLID_2274_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop9936" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop9938" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop9940" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop9942" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="478.21341"
+ y1="-131.9297"
+ x2="469.85818"
+ y2="-140.28481"
+ id="XMLID_2272_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.5592,0.829,-0.829,0.5592,101.3357,-104.791)">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop9917" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop9919" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop9921" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop9923" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ style="overflow:visible"
+ id="TriangleInM">
+ <path
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
+ transform="scale(-0.4,-0.4)"
+ style="fill:#5c5c4f"
+ id="path3197" />
+ </marker>
+ <linearGradient
+ x1="200.7363"
+ y1="100.4028"
+ x2="211.99519"
+ y2="89.143997"
+ id="XMLID_3298_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#bfbfbf;stop-opacity:1"
+ offset="0"
+ id="stop20103" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop20105" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#BFBFBF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#BFBFBF" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F2F2F2" />
+ </linearGradient>
+ <linearGradient
+ x1="200.7363"
+ y1="100.4028"
+ x2="211.99519"
+ y2="89.143997"
+ id="linearGradient36592"
+ xlink:href="#XMLID_3298_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="181.2925"
+ y1="110.8481"
+ x2="192.6369"
+ y2="99.5037"
+ id="XMLID_3297_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="stop20096" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop20098" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="181.2925"
+ y1="110.8481"
+ x2="192.6369"
+ y2="99.5037"
+ id="linearGradient36595"
+ xlink:href="#XMLID_3297_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="211.77589"
+ y1="105.7749"
+ x2="212.6619"
+ y2="108.2092"
+ id="XMLID_3296_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#0f6124;stop-opacity:1"
+ offset="0"
+ id="stop20087" />
+ <stop
+ style="stop-color:#219630;stop-opacity:1"
+ offset="1"
+ id="stop20089" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#0F6124" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#0F6124" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#219630" />
+ </linearGradient>
+ <linearGradient
+ x1="211.77589"
+ y1="105.7749"
+ x2="212.6619"
+ y2="108.2092"
+ id="linearGradient36677"
+ xlink:href="#XMLID_3296_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="208.9834"
+ y1="116.8296"
+ x2="200.0811"
+ y2="96.834602"
+ id="XMLID_3295_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop20076" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.5"
+ id="stop20078" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop20080" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="208.9834"
+ y1="116.8296"
+ x2="200.0811"
+ y2="96.834602"
+ id="linearGradient36604"
+ xlink:href="#XMLID_3295_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="195.5264"
+ y1="97.911102"
+ x2="213.5213"
+ y2="115.9061"
+ id="XMLID_3294_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="0"
+ id="stop20069" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop20071" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="195.5264"
+ y1="97.911102"
+ x2="213.5213"
+ y2="115.9061"
+ id="linearGradient36607"
+ xlink:href="#XMLID_3294_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="186.1938"
+ y1="109.1343"
+ x2="206.6881"
+ y2="88.639999"
+ id="XMLID_3293_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop20056" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.16850001"
+ id="stop20058" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.23029999"
+ id="stop20060" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.2809"
+ id="stop20062" />
+ <stop
+ style="stop-color:#c2c2c2;stop-opacity:1"
+ offset="0.5"
+ id="stop20064" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.1685"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.2303"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.2809"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#C2C2C2" />
+ </linearGradient>
+ <linearGradient
+ x1="186.1938"
+ y1="109.1343"
+ x2="206.6881"
+ y2="88.639999"
+ id="linearGradient36610"
+ xlink:href="#XMLID_3293_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <linearGradient
+ x1="184.8569"
+ y1="112.2676"
+ x2="211.94099"
+ y2="89.541397"
+ id="XMLID_3292_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop20043" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.16850001"
+ id="stop20045" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.23029999"
+ id="stop20047" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0.2809"
+ id="stop20049" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop20051" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.1685"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.2303"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.2809"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="184.8569"
+ y1="112.2676"
+ x2="211.94099"
+ y2="89.541397"
+ id="linearGradient36613"
+ xlink:href="#XMLID_3292_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.029078,0,0,1,-183.2624,-79.44655)" />
+ <marker
+ refX="0"
+ refY="0"
+ orient="auto"
+ style="overflow:visible"
+ id="TriangleOutM">
+ <path
+ d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
+ transform="scale(0.4,0.4)"
+ style="fill:#5c5c4f;fill-rule:evenodd;stroke-width:1pt;marker-start:none"
+ id="path3238" />
+ </marker>
+ <linearGradient
+ x1="165.3"
+ y1="99.5"
+ x2="165.3"
+ y2="115.9"
+ id="XMLID_3457_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="0"
+ id="stop8309" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8311" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="1"
+ id="stop8313" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#999999" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#999999" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#B2B2B2" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#B2B2B2" />
+ </linearGradient>
+ <linearGradient
+ x1="165.3"
+ y1="99.5"
+ x2="165.3"
+ y2="115.9"
+ id="lg1997"
+ xlink:href="#XMLID_3457_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="175"
+ y1="99.800003"
+ x2="175"
+ y2="112.5"
+ id="XMLID_3456_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="0"
+ id="stop8300" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="0.60000002"
+ id="stop8302" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="1"
+ id="stop8304" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="0.6"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#191919" />
+ </linearGradient>
+ <linearGradient
+ x1="175"
+ y1="99.800003"
+ x2="175"
+ y2="112.5"
+ id="lg2000"
+ xlink:href="#XMLID_3456_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="168.8"
+ y1="107.1"
+ x2="164.5"
+ y2="110"
+ id="XMLID_3455_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="0"
+ id="stop8291" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="0.69999999"
+ id="stop8293" />
+ <stop
+ style="stop-color:#191919;stop-opacity:1"
+ offset="1"
+ id="stop8295" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.7"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#191919" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#191919" />
+ </linearGradient>
+ <linearGradient
+ x1="168.8"
+ y1="107.1"
+ x2="164.5"
+ y2="110"
+ id="lg2003"
+ xlink:href="#XMLID_3455_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ id="lg63694">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop63696" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="stop63698" />
+ </linearGradient>
+ <linearGradient
+ x1="458"
+ y1="483"
+ x2="465.20001"
+ y2="271.39999"
+ id="lg2006"
+ xlink:href="#lg63694"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(6.3e-2,0,0,6.3e-2,-1.3,-9.8)" />
+ <linearGradient
+ x1="176.3"
+ y1="110.1"
+ x2="158.7"
+ y2="105"
+ id="XMLID_3453_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="0"
+ id="stop8271" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="0.2"
+ id="stop8273" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop8275" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#666666" />
+ <a:midPointstop
+ offset="0.2"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#737373" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="176.3"
+ y1="110.1"
+ x2="158.7"
+ y2="105"
+ id="lg2009"
+ xlink:href="#XMLID_3453_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="173.60001"
+ y1="118.9"
+ x2="172.8"
+ y2="128.2"
+ id="XMLID_3449_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8232" />
+ <stop
+ style="stop-color:#fff95e;stop-opacity:1"
+ offset="0.60000002"
+ id="stop8234" />
+ <stop
+ style="stop-color:#ecd600;stop-opacity:1"
+ offset="1"
+ id="stop8236" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.6"
+ style="stop-color:#FFF95E" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFF95E" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#ECD600" />
+ </linearGradient>
+ <linearGradient
+ x1="173.60001"
+ y1="118.9"
+ x2="172.8"
+ y2="128.2"
+ id="lg2016"
+ xlink:href="#XMLID_3449_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <radialGradient
+ cx="284.60001"
+ cy="172.60001"
+ r="6.5"
+ fx="284.60001"
+ fy="172.60001"
+ id="XMLID_3448_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4,0,0,1.4,-237.3,-126.8)">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8219" />
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8221" />
+ <stop
+ style="stop-color:#c96b00;stop-opacity:1"
+ offset="0.89999998"
+ id="stop8223" />
+ <stop
+ style="stop-color:#9a5500;stop-opacity:1"
+ offset="1"
+ id="stop8225" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.9"
+ style="stop-color:#C96B00" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#C96B00" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#9A5500" />
+ </radialGradient>
+ <radialGradient
+ cx="284.60001"
+ cy="172.60001"
+ r="6.5"
+ fx="284.60001"
+ fy="172.60001"
+ id="rg2020"
+ xlink:href="#XMLID_3448_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.513992,0,0,2.347576,-689.1621,-378.5717)" />
+ <linearGradient
+ x1="158.10001"
+ y1="123"
+ x2="164.2"
+ y2="126.6"
+ id="XMLID_3447_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecd600;stop-opacity:1"
+ offset="0"
+ id="stop8204" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8206" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop8208" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECD600" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECD600" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="158.10001"
+ y1="123"
+ x2="164.2"
+ y2="126.6"
+ id="lg2026"
+ xlink:href="#XMLID_3447_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <radialGradient
+ cx="280.89999"
+ cy="163.7"
+ r="10.1"
+ fx="280.89999"
+ fy="163.7"
+ id="XMLID_3446_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4,0,0,1.4,-237.3,-126.8)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop8197" />
+ <stop
+ style="stop-color:#fff95e;stop-opacity:1"
+ offset="1"
+ id="stop8199" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#FFFFFF" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#FFF95E" />
+ </radialGradient>
+ <radialGradient
+ cx="280.89999"
+ cy="163.7"
+ r="10.1"
+ fx="280.89999"
+ fy="163.7"
+ id="rg2029"
+ xlink:href="#XMLID_3446_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.7,0,0,1.7,-457.5,-266.8)" />
+ <linearGradient
+ x1="156.5"
+ y1="122.7"
+ x2="180.10001"
+ y2="122.7"
+ id="XMLID_3445_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8184" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.2"
+ id="stop8186" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8188" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.40000001"
+ id="stop8190" />
+ <stop
+ style="stop-color:#d68100;stop-opacity:1"
+ offset="1"
+ id="stop8192" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.2"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.4"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#D68100" />
+ </linearGradient>
+ <linearGradient
+ x1="156.5"
+ y1="122.7"
+ x2="180.10001"
+ y2="122.7"
+ id="lg2032"
+ xlink:href="#XMLID_3445_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="156.39999"
+ y1="115.4"
+ x2="180.10001"
+ y2="115.4"
+ id="XMLID_3444_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ecb300;stop-opacity:1"
+ offset="0"
+ id="stop8171" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.2"
+ id="stop8173" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.30000001"
+ id="stop8175" />
+ <stop
+ style="stop-color:#ffe900;stop-opacity:1"
+ offset="0.40000001"
+ id="stop8177" />
+ <stop
+ style="stop-color:#d68100;stop-opacity:1"
+ offset="1"
+ id="stop8179" />
+ <a:midPointstop
+ offset="0"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#ECB300" />
+ <a:midPointstop
+ offset="0.2"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.3"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFFFB3" />
+ <a:midPointstop
+ offset="0.4"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="0.5"
+ style="stop-color:#FFE900" />
+ <a:midPointstop
+ offset="1"
+ style="stop-color:#D68100" />
+ </linearGradient>
+ <linearGradient
+ x1="156.39999"
+ y1="115.4"
+ x2="180.10001"
+ y2="115.4"
+ id="lg2035"
+ xlink:href="#XMLID_3444_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2,0,0,1.2,-175.9,-114.6)" />
+ <linearGradient
+ x1="379.70001"
+ y1="167.89999"
+ x2="383.89999"
+ y2="172.89999"
+ id="lg4286_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s16159" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.1"
+ id="s16161" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="1"
+ id="s16163" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.1" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#737373"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="379.60001"
+ y1="167.8"
+ x2="383.79999"
+ y2="172"
+ id="lg6416"
+ xlink:href="#lg4286_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.622156,0.623859,-0.623859,2.62182,-882.9706,-673.7921)" />
+ <linearGradient
+ x1="384.20001"
+ y1="169.8"
+ x2="384.79999"
+ y2="170.39999"
+ id="lg4285_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="0"
+ id="s16152" />
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="1"
+ id="s16154" />
+ <ns:midPointStop
+ style="stop-color:#737373"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#737373"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#D9D9D9"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="384.20001"
+ y1="169.8"
+ x2="384.79999"
+ y2="170.39999"
+ id="lg6453"
+ xlink:href="#lg4285_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6,0.6,-0.6,2.6,-883,-673.8)" />
+ <linearGradient
+ x1="380.5"
+ y1="172.60001"
+ x2="382.79999"
+ y2="173.7"
+ id="lg4284_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8,0.2,-0.2,0.8,78.8,38.1)">
+ <stop
+ style="stop-color:gray;stop-opacity:1"
+ offset="0"
+ id="s16145" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="1"
+ id="s16147" />
+ <ns:midPointStop
+ style="stop-color:#808080"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#808080"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#E5E5E5"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="380.5"
+ y1="172.60001"
+ x2="382.79999"
+ y2="173.7"
+ id="lg6456"
+ xlink:href="#lg4284_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6,0.6,-0.6,2.6,-883,-673.8)" />
+ <radialGradient
+ cx="347.29999"
+ cy="244.5"
+ r="5.1999998"
+ fx="347.29999"
+ fy="244.5"
+ id="lg4282_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
+ <stop
+ style="stop-color:#333;stop-opacity:1"
+ offset="0"
+ id="s16135" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="s16137" />
+ <ns:midPointStop
+ style="stop-color:#333333"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#333333"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#999999"
+ offset="1" />
+ </radialGradient>
+ <linearGradient
+ x1="310.39999"
+ y1="397.70001"
+ x2="310.89999"
+ y2="399.5"
+ id="lg4280_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="0"
+ id="s16111" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.60000002"
+ id="s16113" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="1"
+ id="s16115" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.6" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="310.39999"
+ y1="397.70001"
+ x2="310.89999"
+ y2="399.5"
+ id="lg6467"
+ xlink:href="#lg4280_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
+ <linearGradient
+ x1="310.89999"
+ y1="395.79999"
+ x2="313.29999"
+ y2="403.10001"
+ id="lg4279_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0"
+ id="s16100" />
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0.40000001"
+ id="s16102" />
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="0.89999998"
+ id="s16104" />
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="1"
+ id="s16106" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.4" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0.9" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="310.89999"
+ y1="395.79999"
+ x2="313.29999"
+ y2="403.10001"
+ id="lg6465"
+ xlink:href="#lg4279_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
+ <linearGradient
+ x1="307.79999"
+ y1="395.20001"
+ x2="313.79999"
+ y2="413.60001"
+ id="lg4278_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.7,-0.7,0.7,0.7,-153.4,180.6)">
+ <stop
+ style="stop-color:#ffffb3;stop-opacity:1"
+ offset="0"
+ id="s16091" />
+ <stop
+ style="stop-color:#fcd72f;stop-opacity:1"
+ offset="0.40000001"
+ id="s16093" />
+ <stop
+ style="stop-color:#ffcd00;stop-opacity:1"
+ offset="1"
+ id="s16095" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFB3"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FCD72F"
+ offset="0.4" />
+ <ns:midPointStop
+ style="stop-color:#FCD72F"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFCD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="306.5"
+ y1="393"
+ x2="309"
+ y2="404"
+ id="lg6400"
+ xlink:href="#lg4278_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.4,-2.4,2.4,2.4,-1663.6,-195)" />
+ <linearGradient
+ x1="352.10001"
+ y1="253.60001"
+ x2="348.5"
+ y2="237.8"
+ id="lg4276_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
+ <stop
+ style="stop-color:#ffff87;stop-opacity:1"
+ offset="0"
+ id="s16077" />
+ <stop
+ style="stop-color:#ffad00;stop-opacity:1"
+ offset="1"
+ id="s16079" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFAD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="335.60001"
+ y1="354.79999"
+ x2="337.89999"
+ y2="354.79999"
+ id="lg4275_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="s16057" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.80000001"
+ id="s16059" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="s16061" />
+ <ns:midPointStop
+ style="stop-color:#D9D9D9"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#D9D9D9"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.8" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="335.60001"
+ y1="354.79999"
+ x2="337.89999"
+ y2="354.79999"
+ id="lg6463"
+ xlink:href="#lg4275_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
+ <linearGradient
+ x1="337.39999"
+ y1="353.10001"
+ x2="339.39999"
+ y2="357.10001"
+ id="lg4274_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s16048" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.1"
+ id="s16050" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s16052" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.1" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="337.39999"
+ y1="353.10001"
+ x2="339.39999"
+ y2="357.10001"
+ id="lg6461"
+ xlink:href="#lg4274_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
+ <linearGradient
+ x1="334.39999"
+ y1="355.5"
+ x2="335.5"
+ y2="356.79999"
+ id="lg4273_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9,-0.5,0.5,0.9,-121.7,105.1)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s16041" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s16043" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="5.6e-003" />
+ <ns:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="334.39999"
+ y1="355.5"
+ x2="335.5"
+ y2="356.79999"
+ id="lg6381"
+ xlink:href="#lg4273_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.9,-1.7,1.7,2.9,-1557,-448.7)" />
+ <linearGradient
+ x1="348.39999"
+ y1="247.39999"
+ x2="354.10001"
+ y2="242"
+ id="lg4271_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)">
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0"
+ id="s16025" />
+ <stop
+ style="stop-color:#9e9e9e;stop-opacity:1"
+ offset="0.40000001"
+ id="s16027" />
+ <stop
+ style="stop-color:black;stop-opacity:1"
+ offset="1"
+ id="s16029" />
+ <ns:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#F2F2F2"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="351.29999"
+ y1="257.29999"
+ x2="346.29999"
+ y2="235.5"
+ id="lg4270_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ffff87;stop-opacity:1"
+ offset="0"
+ id="s16007" />
+ <stop
+ style="stop-color:#ffad00;stop-opacity:1"
+ offset="1"
+ id="s16009" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0" />
+ <ns:midPointStop
+ style="stop-color:#FFFF87"
+ offset="0.5" />
+ <ns:midPointStop
+ style="stop-color:#FFAD00"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="351.29999"
+ y1="257.29999"
+ x2="346.29999"
+ y2="235.5"
+ id="lg6459"
+ xlink:href="#lg4270_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.4,0,0,3.4,-1148,-802)" />
+ <linearGradient
+ x1="43.799999"
+ y1="32.5"
+ x2="63.299999"
+ y2="66.400002"
+ id="XMLID_2708_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop75318" />
+ <stop
+ style="stop-color:#fffcea;stop-opacity:1"
+ offset="1"
+ id="stop75320" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#FFFCEA"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="43.799999"
+ y1="32.5"
+ x2="63.299999"
+ y2="66.400002"
+ id="lg1907"
+ xlink:href="#XMLID_2708_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)" />
+ <linearGradient
+ x1="52.5"
+ y1="40.400002"
+ x2="58.200001"
+ y2="64"
+ id="XMLID_2707_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#ffdea0;stop-opacity:1"
+ offset="0"
+ id="stop75305" />
+ <stop
+ style="stop-color:#ffd89e;stop-opacity:1"
+ offset="0.30000001"
+ id="stop75307" />
+ <stop
+ style="stop-color:#ffd79e;stop-opacity:1"
+ offset="0.30000001"
+ id="stop75309" />
+ <stop
+ style="stop-color:#dbaf6d;stop-opacity:1"
+ offset="0.69999999"
+ id="stop75311" />
+ <stop
+ style="stop-color:#6f4c24;stop-opacity:1"
+ offset="1"
+ id="stop75313" />
+ <a:midPointStop
+ style="stop-color:#FFDEA0"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFDEA0"
+ offset="0.6" />
+ <a:midPointStop
+ style="stop-color:#FFD79E"
+ offset="0.3" />
+ <a:midPointStop
+ style="stop-color:#FFD79E"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#DBAF6D"
+ offset="0.7" />
+ <a:midPointStop
+ style="stop-color:#DBAF6D"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#6F4C24"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="52.5"
+ y1="40.400002"
+ x2="58.200001"
+ y2="64"
+ id="lg1910"
+ xlink:href="#XMLID_2707_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)" />
+ <linearGradient
+ x1="58"
+ y1="73.199997"
+ x2="44.5"
+ y2="19"
+ id="XMLID_2704_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)">
+ <stop
+ style="stop-color:#d4a96c;stop-opacity:1"
+ offset="0.5"
+ id="stop75284" />
+ <stop
+ style="stop-color:#dcb273;stop-opacity:1"
+ offset="0.60000002"
+ id="stop75286" />
+ <stop
+ style="stop-color:#f0ca87;stop-opacity:1"
+ offset="0.80000001"
+ id="stop75288" />
+ <stop
+ style="stop-color:#ffdc96;stop-opacity:1"
+ offset="0.69999999"
+ id="stop75290" />
+ <stop
+ style="stop-color:#c18a42;stop-opacity:1"
+ offset="1"
+ id="stop75292" />
+ <a:midPointStop
+ style="stop-color:#D4A96C"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#D4A96C"
+ offset="0.6" />
+ <a:midPointStop
+ style="stop-color:#FFDC96"
+ offset="0.7" />
+ <a:midPointStop
+ style="stop-color:#FFDC96"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#C18A42"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="53.700001"
+ y1="32"
+ x2="53.700001"
+ y2="64.599998"
+ id="XMLID_2703_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e5c9b0;stop-opacity:1"
+ offset="0"
+ id="stop75268" />
+ <stop
+ style="stop-color:#e5c9b0;stop-opacity:1"
+ offset="0.40000001"
+ id="stop75270" />
+ <stop
+ style="stop-color:#c0aa94;stop-opacity:1"
+ offset="1"
+ id="stop75272" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0.4" />
+ <a:midPointStop
+ style="stop-color:#E5C9B0"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#C0AA94"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="53.700001"
+ y1="32"
+ x2="53.700001"
+ y2="64.599998"
+ id="lg1916"
+ xlink:href="#XMLID_2703_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-29,-22.6)" />
+ <linearGradient
+ x1="224.31"
+ y1="19.450001"
+ x2="214.33"
+ y2="11.46"
+ id="XMLID_419_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#404040;stop-opacity:1"
+ offset="0"
+ id="s1903" />
+ <stop
+ style="stop-color:#6d6d6d;stop-opacity:1"
+ offset="0.33000001"
+ id="s1905" />
+ <stop
+ style="stop-color:#e9e9e9;stop-opacity:1"
+ offset="1"
+ id="s1907" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#404040" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#404040" />
+ <a:midPointStop
+ offset="0.33"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E9E9E9" />
+ </linearGradient>
+ <linearGradient
+ x1="221.84"
+ y1="32.779999"
+ x2="212.2"
+ y2="20.27"
+ id="lg1988"
+ xlink:href="#XMLID_419_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
+ <linearGradient
+ x1="228.35001"
+ y1="33.279999"
+ x2="215.42999"
+ y2="33.279999"
+ id="lg1900"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s1902" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="s1906" />
+ <a:midPointStop
+ style="stop-color:#575757"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#575757"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#6D6D6D"
+ offset="0.33" />
+ <a:midPointStop
+ style="stop-color:#6D6D6D"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#D3D3D3"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="234.81"
+ y1="33.279999"
+ x2="228.27"
+ y2="33.279999"
+ id="lg1908"
+ xlink:href="#lg1900"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
+ <linearGradient
+ x1="228.35001"
+ y1="33.279999"
+ x2="215.42999"
+ y2="33.279999"
+ id="XMLID_416_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#575757;stop-opacity:1"
+ offset="0"
+ id="s1874" />
+ <stop
+ style="stop-color:#6d6d6d;stop-opacity:1"
+ offset="0.33000001"
+ id="s1876" />
+ <stop
+ style="stop-color:#d3d3d3;stop-opacity:1"
+ offset="1"
+ id="s1878" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#575757" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#575757" />
+ <a:midPointStop
+ offset="0.33"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#6D6D6D" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#D3D3D3" />
+ </linearGradient>
+ <linearGradient
+ x1="228.35001"
+ y1="33.279999"
+ x2="215.42999"
+ y2="33.279999"
+ id="lg1991"
+ xlink:href="#XMLID_416_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.33,0,0,1.31,-274.2,-5.2)" />
+ <radialGradient
+ cx="603.19"
+ cy="230.77"
+ r="1.67"
+ fx="603.19"
+ fy="230.77"
+ id="x5010_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1,0,0,1.1,-54.33,-75.4)">
+ <stop
+ style="stop-color:#c9ffc9;stop-opacity:1"
+ offset="0"
+ id="stop29201" />
+ <stop
+ style="stop-color:#23a11f;stop-opacity:1"
+ offset="1"
+ id="stop29203" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#C9FFC9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#C9FFC9" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#23A11F" />
+ </radialGradient>
+ <radialGradient
+ cx="603.19"
+ cy="230.77"
+ r="1.67"
+ fx="603.19"
+ fy="230.77"
+ id="radialGradient5711"
+ xlink:href="#x5010_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.23,0,0,1.23,-709.93,-245.02)" />
+ <linearGradient
+ x1="592.31"
+ y1="162.60001"
+ x2="609.32001"
+ y2="145.59"
+ id="lg5722"
+ xlink:href="#x5003_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="601.48999"
+ y1="170.16"
+ x2="613.84003"
+ y2="170.16"
+ id="x5002_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop29134" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0.2"
+ id="stop29136" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="stop29138" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.20"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#FFFFFF" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#999999" />
+ </linearGradient>
+ <linearGradient
+ x1="601.48999"
+ y1="170.16"
+ x2="613.84003"
+ y2="170.16"
+ id="lg5725"
+ xlink:href="#x5002_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.23"
+ id="x5004_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop29157" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop29159" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.23"
+ id="lg5728"
+ xlink:href="#x5004_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="592.31"
+ y1="162.60001"
+ x2="609.32001"
+ y2="145.59"
+ id="x5003_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0"
+ id="stop29143" />
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="1"
+ id="stop29145" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#E5E5E5" />
+ </linearGradient>
+ <linearGradient
+ x1="592.31"
+ y1="162.60001"
+ x2="609.32001"
+ y2="145.59"
+ id="lg5732"
+ xlink:href="#x5003_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.24001"
+ id="x5000_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop29124" />
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="1"
+ id="stop29126" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#FFFFFF" />
+ </linearGradient>
+ <linearGradient
+ x1="592.20001"
+ y1="156.45"
+ x2="609.98999"
+ y2="174.24001"
+ id="lg5735"
+ xlink:href="#x5000_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.12,0,0,1.12,-649.08,-160.62)" />
+ <linearGradient
+ x1="308.54999"
+ y1="149.89999"
+ x2="299.72"
+ y2="148.83"
+ id="XMLID_2433_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d6d6d6;stop-opacity:1"
+ offset="0"
+ id="71615" />
+ <stop
+ style="stop-color:#a5a5a5;stop-opacity:1"
+ offset="1"
+ id="71617" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D6D6D6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D6D6D6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#A5A5A5" />
+ </linearGradient>
+ <linearGradient
+ x1="308.54999"
+ y1="149.89999"
+ x2="299.72"
+ y2="148.83"
+ id="lg1952"
+ xlink:href="#XMLID_2433_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
+ <radialGradient
+ cx="307.39999"
+ cy="121"
+ r="23.35"
+ fx="307.39999"
+ fy="121"
+ id="XMLID_2432_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.98,0,0,0.98,2.88,2.75)">
+ <stop
+ style="stop-color:#d2d2d2;stop-opacity:1"
+ offset="0.19"
+ id="71592" />
+ <stop
+ style="stop-color:#cfcfcf;stop-opacity:1"
+ offset="0.44999999"
+ id="71594" />
+ <stop
+ style="stop-color:#c7c7c7;stop-opacity:1"
+ offset="0.60000002"
+ id="71596" />
+ <stop
+ style="stop-color:#b9b9b9;stop-opacity:1"
+ offset="0.74000001"
+ id="71598" />
+ <stop
+ style="stop-color:#a4a4a4;stop-opacity:1"
+ offset="0.86000001"
+ id="71600" />
+ <stop
+ style="stop-color:#8a8a8a;stop-opacity:1"
+ offset="0.95999998"
+ id="71602" />
+ <stop
+ style="stop-color:gray;stop-opacity:1"
+ offset="1"
+ id="71604" />
+ <a:midPointStop
+ offset="0.19"
+ style="stop-color:#D2D2D2" />
+ <a:midPointStop
+ offset="0.8"
+ style="stop-color:#D2D2D2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#808080" />
+ </radialGradient>
+ <radialGradient
+ cx="307.39999"
+ cy="121"
+ r="23.35"
+ fx="307.39999"
+ fy="121"
+ id="radialGradient2331"
+ xlink:href="#XMLID_2432_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-276.62,-121.54)" />
+ <linearGradient
+ x1="294.13"
+ y1="127.07"
+ x2="294.13"
+ y2="142.2"
+ id="XMLID_2430_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#b5d8ff;stop-opacity:1"
+ offset="0"
+ id="71582" />
+ <stop
+ style="stop-color:black;stop-opacity:1"
+ offset="1"
+ id="71584" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B5D8FF" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B5D8FF" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#000000" />
+ </linearGradient>
+ <linearGradient
+ x1="294.13"
+ y1="127.07"
+ x2="294.13"
+ y2="142.2"
+ id="lg2820"
+ xlink:href="#XMLID_2430_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
+ <linearGradient
+ x1="279.10999"
+ y1="148.03"
+ x2="309.16"
+ y2="148.03"
+ id="XMLID_2429_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e1e1e1;stop-opacity:1"
+ offset="0"
+ id="71564" />
+ <stop
+ style="stop-color:#e1e1e1;stop-opacity:1"
+ offset="0.25"
+ id="71566" />
+ <stop
+ style="stop-color:#a5a5a5;stop-opacity:1"
+ offset="0.44"
+ id="71568" />
+ <stop
+ style="stop-color:#a5a5a5;stop-opacity:1"
+ offset="1"
+ id="71570" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.25"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E1E1E1" />
+ <a:midPointStop
+ offset="0.44"
+ style="stop-color:#A5A5A5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#A5A5A5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#A5A5A5" />
+ </linearGradient>
+ <linearGradient
+ x1="279.10999"
+ y1="148.03"
+ x2="309.16"
+ y2="148.03"
+ id="lg2818"
+ xlink:href="#XMLID_2429_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.03,0,0,1.03,-279.57,-124.36)" />
+ <radialGradient
+ cx="622.34302"
+ cy="14.449"
+ r="26.496"
+ fx="622.34302"
+ fy="14.449"
+ id="lg3499_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.851,0,0,0.849,69.297,51.658)">
+ <stop
+ style="stop-color:#23468e;stop-opacity:1"
+ offset="0"
+ id="stop10972" />
+ <stop
+ style="stop-color:#012859;stop-opacity:1"
+ offset="1"
+ id="stop10974" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#23468E" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#23468E" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#012859" />
+ </radialGradient>
+ <radialGradient
+ cx="622.34302"
+ cy="14.449"
+ r="26.496"
+ fx="622.34302"
+ fy="14.449"
+ id="rg5791"
+ xlink:href="#lg3499_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.858,0,0,0.857,-511.7,9.02)" />
+ <linearGradient
+ x1="616.112"
+ y1="76.247002"
+ x2="588.14099"
+ y2="60.742001"
+ id="lg3497_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#01326e;stop-opacity:1"
+ offset="0"
+ id="stop10962" />
+ <stop
+ style="stop-color:#012859;stop-opacity:1"
+ offset="1"
+ id="stop10964" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#01326E" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#01326E" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#012859" />
+ </linearGradient>
+ <linearGradient
+ x1="617.698"
+ y1="82.445999"
+ x2="585.95203"
+ y2="54.848999"
+ id="lg3496_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="stop10950" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop10952" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#E5E5E5" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="617.698"
+ y1="82.445999"
+ x2="585.95203"
+ y2="54.848999"
+ id="lg5794"
+ xlink:href="#lg3496_"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="601.39001"
+ y1="55.341"
+ x2="588.29199"
+ y2="71.515999"
+ id="lg3495_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop10941" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.52200001"
+ id="stop10943" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop10945" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.522"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="601.39001"
+ y1="55.341"
+ x2="588.29199"
+ y2="71.515999"
+ id="lg5771"
+ xlink:href="#lg3495_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.009,0,0,1.009,-581.615,-43.098)" />
+ <linearGradient
+ x1="611.34601"
+ y1="55.279999"
+ x2="590.39001"
+ y2="81.157997"
+ id="lg3494_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="stop10932" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.52200001"
+ id="stop10934" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="stop10936" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#D9D9D9" />
+ <a:midPointStop
+ offset="0.522"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#F2F2F2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#CCCCCC" />
+ </linearGradient>
+ <linearGradient
+ x1="611.34601"
+ y1="55.279999"
+ x2="590.39001"
+ y2="81.157997"
+ id="lg5774"
+ xlink:href="#lg3494_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.009,0,0,1.009,-581.616,-43.098)" />
+ <linearGradient
+ x1="798.72998"
+ y1="69.839996"
+ x2="799.04999"
+ y2="70.709999"
+ id="g3302_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#005e00;stop-opacity:1"
+ offset="0"
+ id="s6504" />
+ <stop
+ style="stop-color:#23a11f;stop-opacity:1"
+ offset="1"
+ id="s6506" />
+ <a:midPointstop
+ style="stop-color:#005E00"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#005E00"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#23A11F"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="798.72998"
+ y1="69.839996"
+ x2="799.04999"
+ y2="70.709999"
+ id="lg5851"
+ xlink:href="#g3302_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
+ <linearGradient
+ x1="779.19"
+ y1="122.73"
+ x2="811.69"
+ y2="149.74001"
+ id="g3301_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,129.19)">
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0"
+ id="s6483" />
+ <stop
+ style="stop-color:#eee;stop-opacity:1"
+ offset="0.17"
+ id="s6485" />
+ <stop
+ style="stop-color:#e3e3e3;stop-opacity:1"
+ offset="0.34"
+ id="s6487" />
+ <stop
+ style="stop-color:#cfcfcf;stop-opacity:1"
+ offset="0.50999999"
+ id="s6489" />
+ <stop
+ style="stop-color:#b4b4b4;stop-opacity:1"
+ offset="0.67000002"
+ id="s6491" />
+ <stop
+ style="stop-color:#919191;stop-opacity:1"
+ offset="0.83999997"
+ id="s6493" />
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="1"
+ id="s6495" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.71" />
+ <a:midPointstop
+ style="stop-color:#666666"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="779.19"
+ y1="122.73"
+ x2="811.69"
+ y2="149.74001"
+ id="lg5855"
+ xlink:href="#g3301_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,-0.316,0,1.263,-926.036,103.123)" />
+ <clipPath
+ id="g3299_">
+ <use
+ id="use6469"
+ x="0"
+ y="0"
+ width="1005.92"
+ height="376.97"
+ xlink:href="#g101_" />
+ </clipPath>
+ <radialGradient
+ cx="1189.9301"
+ cy="100.05"
+ r="40.400002"
+ fx="1189.9301"
+ fy="100.05"
+ id="g3300_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.34,-8.46e-2,0,0.34,394.16,137.13)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s6472" />
+ <stop
+ style="stop-color:white;stop-opacity:0"
+ offset="1"
+ id="s6474" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#000000"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1199.74"
+ cy="97.150002"
+ r="40.400002"
+ fx="1199.74"
+ fy="97.150002"
+ id="rg5860"
+ xlink:href="#g3300_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.409,-0.107,0,0.429,-451.489,113.149)" />
+ <linearGradient
+ x1="796.38"
+ y1="67.580002"
+ x2="781.28003"
+ y2="58.549999"
+ id="g3298_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#4c8bca;stop-opacity:1"
+ offset="0"
+ id="s6462" />
+ <stop
+ style="stop-color:#b7e9ff;stop-opacity:1"
+ offset="1"
+ id="s6464" />
+ <a:midPointstop
+ style="stop-color:#4C8BCA"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#4C8BCA"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B7E9FF"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="800.97998"
+ y1="140.72"
+ x2="777.71997"
+ y2="121.76"
+ id="g3297_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,129.19)">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="s6448" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s6450" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="800.97998"
+ y1="140.72"
+ x2="777.71997"
+ y2="121.76"
+ id="lg5890"
+ xlink:href="#g3297_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,129.19)" />
+ <linearGradient
+ x1="790.03998"
+ y1="-16.33"
+ x2="779.84003"
+ y2="-3.73"
+ id="g3296_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,70.17)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="s6439" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.51999998"
+ id="s6441" />
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="1"
+ id="s6443" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.52" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#CCCCCC"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="790.03998"
+ y1="-16.33"
+ x2="779.84003"
+ y2="-3.73"
+ id="lg5866"
+ xlink:href="#g3296_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,28.6)" />
+ <linearGradient
+ x1="785.84003"
+ y1="72.989998"
+ x2="785.26001"
+ y2="76.279999"
+ id="g3293_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s6412" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="1"
+ id="s6414" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#737373"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="785.84003"
+ y1="72.989998"
+ x2="785.26001"
+ y2="76.279999"
+ id="lg5871"
+ xlink:href="#g3293_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
+ <linearGradient
+ x1="789.37"
+ y1="69.879997"
+ x2="791.03998"
+ y2="77.120003"
+ id="g3292_"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="0"
+ id="s6403" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="0.28"
+ id="s6405" />
+ <stop
+ style="stop-color:#666;stop-opacity:1"
+ offset="1"
+ id="s6407" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.28" />
+ <a:midPointstop
+ style="stop-color:#F2F2F2"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#666666"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="789.37"
+ y1="69.879997"
+ x2="791.03998"
+ y2="77.120003"
+ id="lg5874"
+ xlink:href="#g3292_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,0,0,1.263,-926.036,-60.001)" />
+ <linearGradient
+ x1="786.65997"
+ y1="136.12"
+ x2="786.71002"
+ y2="134.33"
+ id="g3290_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,-0.25,0,1,0,137.29)">
+ <stop
+ style="stop-color:#d9d9d9;stop-opacity:1"
+ offset="0"
+ id="s6380" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="1"
+ id="s6382" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#D9D9D9"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="786.65997"
+ y1="136.12"
+ x2="786.71002"
+ y2="134.33"
+ id="lg5878"
+ xlink:href="#g3290_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.204,-0.316,0,1.263,-926.036,113.351)" />
+ <radialGradient
+ cx="1458.77"
+ cy="-5.0999999"
+ r="35.130001"
+ fx="1458.77"
+ fy="-5.0999999"
+ id="g3289_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.42,0,0,0.42,167.09,79.84)">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="s6371" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="s6373" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1458.77"
+ cy="-5.0999999"
+ r="35.130001"
+ fx="1458.77"
+ fy="-5.0999999"
+ id="rg5881"
+ xlink:href="#g3289_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.505,0,0,0.53,-724.957,40.636)" />
+ <radialGradient
+ cx="1612.98"
+ cy="-4.4699998"
+ r="36.580002"
+ fx="1612.98"
+ fy="-4.4699998"
+ id="g3288_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.34,0,0,0.36,238.56,86.87)">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="s6362" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0.63999999"
+ id="s6364" />
+ <stop
+ style="stop-color:#737373;stop-opacity:1"
+ offset="1"
+ id="s6366" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.64" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#737373"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1612.98"
+ cy="-4.4699998"
+ r="36.580002"
+ fx="1612.98"
+ fy="-4.4699998"
+ id="rg5884"
+ xlink:href="#g3288_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.408,0,0,0.448,-638.943,49.495)" />
+ <radialGradient
+ cx="1470.5"
+ cy="-10.21"
+ r="33.290001"
+ fx="1470.5"
+ fy="-10.21"
+ id="g3287_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.42,0,0,0.42,167.09,79.84)">
+ <stop
+ style="stop-color:#e5e5e5;stop-opacity:1"
+ offset="0"
+ id="s6347" />
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0.38999999"
+ id="s6349" />
+ <stop
+ style="stop-color:#b1b1b1;stop-opacity:1"
+ offset="0.75"
+ id="s6351" />
+ <stop
+ style="stop-color:#aaa;stop-opacity:1"
+ offset="0.88"
+ id="s6353" />
+ <stop
+ style="stop-color:#9e9e9e;stop-opacity:1"
+ offset="0.97000003"
+ id="s6355" />
+ <stop
+ style="stop-color:#999;stop-opacity:1"
+ offset="1"
+ id="s6357" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0" />
+ <a:midPointstop
+ style="stop-color:#E5E5E5"
+ offset="0.5" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.39" />
+ <a:midPointstop
+ style="stop-color:#B2B2B2"
+ offset="0.87" />
+ <a:midPointstop
+ style="stop-color:#999999"
+ offset="1" />
+ </radialGradient>
+ <radialGradient
+ cx="1470.5"
+ cy="-10.21"
+ r="33.290001"
+ fx="1470.5"
+ fy="-10.21"
+ id="rg5887"
+ xlink:href="#g3287_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.505,0,0,0.53,-724.957,40.636)" />
+ <pattern
+ patternTransform="matrix(0.592927,0,0,0.592927,78,462)"
+ id="cream-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-365.3146,-513.505)"
+ id="g3047">
+ id=&quot;path2858&quot; /&gt;
+ <path
+ inkscape:label="#path2854"
+ sodipodi:nodetypes="czzzz"
+ style="fill:#e3dcc0"
+ id="path3060"
+ d="M 390.31462,529.50504 C 390.31462,534.47304 386.28262,538.50504 381.31462,538.50504 C 376.34662,538.50504 372.31462,534.47304 372.31462,529.50504 C 372.31462,524.53704 376.34662,520.50504 381.31462,520.50504 C 386.28262,520.50504 390.31462,524.53704 390.31462,529.50504 z " />
+</g>
+ </pattern>
+ <pattern
+ patternTransform="matrix(0.733751,0,0,0.733751,67,367)"
+ id="dark-cream-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-408.0946,-513.505)"
+ id="dark-cream-spot"
+ inkscape:label="#g3043">
+ <path
+ sodipodi:nodetypes="czzzz"
+ style="fill:#c8c5ac"
+ d="M 433.09458,529.50504 C 433.09458,534.47304 429.06258,538.50504 424.09458,538.50504 C 419.12658,538.50504 415.09458,534.47304 415.09458,529.50504 C 415.09458,524.53704 419.12658,520.50504 424.09458,520.50504 C 429.06258,520.50504 433.09458,524.53704 433.09458,529.50504 z "
+ id="path2953" />
+ </g>
+ </pattern>
+ <pattern
+ patternTransform="matrix(0.375,0,0,0.375,379,400)"
+ id="white-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-484.3997,-513.505)"
+ id="white-spot"
+ inkscape:label="#g3035">
+ <path
+ style="opacity:0.25;fill:white"
+ id="path3033"
+ d="M 509.39967,529.50504 C 509.39967,534.47304 505.36767,538.50504 500.39967,538.50504 C 495.43167,538.50504 491.39967,534.47304 491.39967,529.50504 C 491.39967,524.53704 495.43167,520.50504 500.39967,520.50504 C 505.36767,520.50504 509.39967,524.53704 509.39967,529.50504 z "
+ sodipodi:nodetypes="czzzz" />
+ </g>
+ </pattern>
+ <pattern
+ patternTransform="matrix(0.455007,0,0,0.455007,-5e-5,1.9e-5)"
+ id="black-spots"
+ height="32"
+ width="32"
+ patternUnits="userSpaceOnUse">
+ <g
+ transform="translate(-448.3997,-513.505)"
+ id="black-spot"
+ inkscape:label="#g3039">
+ <path
+ sodipodi:nodetypes="czzzz"
+ d="M 473.39967,529.50504 C 473.39967,534.47304 469.36767,538.50504 464.39967,538.50504 C 459.43167,538.50504 455.39967,534.47304 455.39967,529.50504 C 455.39967,524.53704 459.43167,520.50504 464.39967,520.50504 C 469.36767,520.50504 473.39967,524.53704 473.39967,529.50504 z "
+ id="path2961"
+ style="opacity:0.25;fill:black" />
+ </g>
+ </pattern>
+ <linearGradient
+ x1="501.0903"
+ y1="-19.2544"
+ x2="531.85413"
+ y2="0.72390002"
+ id="linearGradient17334"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop17336" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop17338" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop17340" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop17342" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.5112"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B4DAEA" />
+ <a:midPointStop
+ offset="0.6461"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#16336E" />
+ </linearGradient>
+ <linearGradient
+ x1="415.73831"
+ y1="11.854"
+ x2="418.13361"
+ y2="18.8104"
+ id="linearGradient17426"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8362,0.5206,-1.1904,0.992,147.62,-30.9374)">
+ <stop
+ style="stop-color:#ccc;stop-opacity:1"
+ offset="0"
+ id="stop17428" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop17430" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#CCCCCC" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F2F2F2" />
+ </linearGradient>
+ <linearGradient
+ x1="478.21341"
+ y1="-131.9297"
+ x2="469.85818"
+ y2="-140.28481"
+ id="linearGradient17434"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.5592,0.829,-0.829,0.5592,101.3357,-104.791)">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop17436" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop17438" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop17440" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop17442" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#F3403F" />
+ <a:midPointStop
+ offset="0.4213"
+ style="stop-color:#F3403F" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#A6100C" />
+ </linearGradient>
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17709"
+ xlink:href="#XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)" />
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17711"
+ xlink:href="#XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="linearGradient17713"
+ xlink:href="#XMLID_1753_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17715"
+ xlink:href="#XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="500.70749"
+ y1="-13.2441"
+ x2="513.46442"
+ y2="-2.1547"
+ id="linearGradient17717"
+ xlink:href="#XMLID_1757_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="linearGradient17721"
+ xlink:href="#XMLID_2274_"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="linearGradient17723"
+ xlink:href="#XMLID_2275_"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ x1="500.70749"
+ y1="-13.2441"
+ x2="513.46442"
+ y2="-2.1547"
+ id="linearGradient17416"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop17418" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop17420" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <defs
+ id="defs9929">
+ <path
+ d="M 489.21,209.35 L 485.35,203.63 C 483.63,204.25 473.47,208.93 471.5,210.18 C 470.57,210.77 470.17,211.16 469.72,212.48 C 470.93,212.31 471.72,212.49 473.42,213.04 C 473.26,214.77 473.24,215.74 473.57,218.2 C 474.01,216.88 474.41,216.49 475.34,215.9 C 477.33,214.65 487.49,209.97 489.21,209.35 z "
+ id="XMLID_960_" />
+ </defs>
+ <clipPath
+ id="clipPath17448">
+ <use
+ id="use17450"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_960_" />
+ </clipPath>
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="linearGradient17452"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop17454" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop17456" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop17458" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop17460" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="linearGradient17463"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#f3403f;stop-opacity:1"
+ offset="0"
+ id="stop17465" />
+ <stop
+ style="stop-color:#d02a28;stop-opacity:1"
+ offset="0.37889999"
+ id="stop17467" />
+ <stop
+ style="stop-color:#b21714;stop-opacity:1"
+ offset="0.77649999"
+ id="stop17469" />
+ <stop
+ style="stop-color:#a6100c;stop-opacity:1"
+ offset="1"
+ id="stop17471" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#F3403F"
+ offset="0.4213" />
+ <a:midPointStop
+ style="stop-color:#A6100C"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="481.23969"
+ y1="212.5742"
+ x2="472.92981"
+ y2="207.4967"
+ id="linearGradient17807"
+ xlink:href="#XMLID_2275_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-177.1654,35.43307)" />
+ <linearGradient
+ x1="473.7681"
+ y1="209.17529"
+ x2="486.98099"
+ y2="213.2001"
+ id="linearGradient17810"
+ xlink:href="#XMLID_2274_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-177.1654,35.43307)" />
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17812"
+ xlink:href="#XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)" />
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17814"
+ xlink:href="#XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="linearGradient17816"
+ xlink:href="#XMLID_1753_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17818"
+ xlink:href="#XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17347"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,11.0227,-35.6159)">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop17349" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop17351" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#5387BA" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#96BAD6" />
+ </linearGradient>
+ <linearGradient
+ x1="516.57672"
+ y1="-15.769"
+ x2="516.57672"
+ y2="0.84280002"
+ id="linearGradient17379"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b2b2b2;stop-opacity:1"
+ offset="0"
+ id="stop17381" />
+ <stop
+ style="stop-color:#f2f2f2;stop-opacity:1"
+ offset="1"
+ id="stop17383" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#B2B2B2" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#F2F2F2" />
+ </linearGradient>
+ <linearGradient
+ x1="502.70749"
+ y1="115.3013"
+ x2="516.39001"
+ y2="127.1953"
+ id="linearGradient17862"
+ xlink:href="#XMLID_1749_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.9703,0.2419,-0.2419,0.9703,-166.1427,-0.18283)" />
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17864"
+ xlink:href="#XMLID_1756_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <defs
+ id="defs3859">
+ <polygon
+ points="465.54,213.52 481.94,217.46 482.74,216.71 487.46,198.05 471.08,194.07 470.26,194.83 465.54,213.52 "
+ id="XMLID_343_" />
+ </defs>
+ <linearGradient
+ x1="471.0806"
+ y1="201.07761"
+ x2="481.91711"
+ y2="210.4977"
+ id="linearGradient17389"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#6498c1;stop-opacity:1"
+ offset="0.005618"
+ id="stop17391" />
+ <stop
+ style="stop-color:#79a9cc;stop-opacity:1"
+ offset="0.2332"
+ id="stop17393" />
+ <stop
+ style="stop-color:#a4cde2;stop-opacity:1"
+ offset="0.74049997"
+ id="stop17395" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="1"
+ id="stop17397" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="5.618000e-003" />
+ <a:midPointStop
+ style="stop-color:#6498C1"
+ offset="0.4438" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="clipPath17400">
+ <use
+ id="use17402"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_343_" />
+ </clipPath>
+ <linearGradient
+ x1="505.62939"
+ y1="-14.9526"
+ x2="527.49402"
+ y2="-0.7536"
+ id="linearGradient17404"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop17406" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop17408" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop17410" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop17412" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17882"
+ xlink:href="#XMLID_1752_"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)" />
+ <defs
+ id="defs3826">
+ <polygon
+ points="463.52,216.14 480.56,220.24 481.36,219.5 483.03,202.04 469.05,196.69 468.24,197.45 463.52,216.14 "
+ id="XMLID_338_" />
+ </defs>
+ <linearGradient
+ x1="468.2915"
+ y1="204.7612"
+ x2="479.39871"
+ y2="214.4166"
+ id="linearGradient17357"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0"
+ id="stop17359" />
+ <stop
+ style="stop-color:#96bad6;stop-opacity:1"
+ offset="1"
+ id="stop17361" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#96BAD6"
+ offset="1" />
+ </linearGradient>
+ <clipPath
+ id="clipPath17364">
+ <use
+ id="use17366"
+ x="0"
+ y="0"
+ width="744.09448"
+ height="600"
+ xlink:href="#XMLID_338_" />
+ </clipPath>
+ <linearGradient
+ x1="506.09909"
+ y1="-11.5137"
+ x2="527.99609"
+ y2="2.7063999"
+ id="linearGradient17368"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.6868,0.4269,-0.9821,0.821,111.6149,-5.7901)">
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0"
+ id="stop17370" />
+ <stop
+ style="stop-color:#b4daea;stop-opacity:1"
+ offset="0.51120001"
+ id="stop17372" />
+ <stop
+ style="stop-color:#5387ba;stop-opacity:1"
+ offset="0.64609998"
+ id="stop17374" />
+ <stop
+ style="stop-color:#16336e;stop-opacity:1"
+ offset="1"
+ id="stop17376" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5112" />
+ <a:midPointStop
+ style="stop-color:#B4DAEA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.6461" />
+ <a:midPointStop
+ style="stop-color:#5387BA"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#16336E"
+ offset="1" />
+ </linearGradient>
+ <linearGradient
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398"
+ id="linearGradient2387"
+ xlink:href="#linearGradient2381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
+ <linearGradient
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398"
+ id="linearGradient5105"
+ xlink:href="#linearGradient2381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
+ <linearGradient
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398"
+ id="linearGradient5145"
+ xlink:href="#linearGradient2381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2381"
+ id="linearGradient2371"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.90776,0,0,0.90776,24.35648,49.24131)"
+ x1="296.4996"
+ y1="188.81061"
+ x2="317.32471"
+ y2="209.69398" />
+ </defs>
+ <g
+ transform="matrix(0.437808,-0.437808,0.437808,0.437808,-220.8237,43.55311)"
+ id="g5089">
+ <path
+ d="M 8.4382985,-6.28125 C 7.8309069,-6.28125 4.125,-0.33238729 4.125,1.96875 L 4.125,28.6875 C 4.125,29.533884 4.7068159,29.8125 5.28125,29.8125 L 30.84375,29.8125 C 31.476092,29.8125 31.968751,29.319842 31.96875,28.6875 L 31.96875,23.46875 L 32.25,23.46875 C 32.74684,23.46875 33.156249,23.059339 33.15625,22.5625 L 33.15625,-5.375 C 33.15625,-5.8718398 32.74684,-6.28125 32.25,-6.28125 L 8.4382985,-6.28125 z "
+ transform="translate(282.8327,227.1903)"
+ style="fill:#5c5c4f;stroke:black;stroke-width:3.23021388;stroke-miterlimit:4;stroke-dasharray:none"
+ id="path5091" />
+ <rect
+ width="27.85074"
+ height="29.369793"
+ rx="1.1414107"
+ ry="1.1414107"
+ x="286.96509"
+ y="227.63805"
+ style="fill:#032c87"
+ id="rect5093" />
+ <path
+ d="M 288.43262,225.43675 L 313.67442,225.43675 L 313.67442,254.80655 L 287.29827,254.83069 L 288.43262,225.43675 z "
+ style="fill:white"
+ id="rect5095" />
+ <path
+ d="M 302.44536,251.73726 C 303.83227,259.59643 301.75225,263.02091 301.75225,263.02091 C 303.99609,261.41329 305.71651,259.54397 306.65747,257.28491 C 307.62455,259.47755 308.49041,261.71357 310.9319,263.27432 C 310.9319,263.27432 309.33686,256.07392 309.22047,251.73726 L 302.44536,251.73726 z "
+ style="fill:#a70000;fill-opacity:1;stroke-width:2"
+ id="path5097" />
+ <rect
+ width="25.241802"
+ height="29.736675"
+ rx="0.89682275"
+ ry="0.89682275"
+ x="290.73544"
+ y="220.92249"
+ style="fill:#809cc9"
+ id="rect5099" />
+ <path
+ d="M 576.47347,725.93939 L 582.84431,726.35441 L 583.25121,755.8725 C 581.35919,754.55465 576.39694,752.1117 574.98889,754.19149 L 574.98889,727.42397 C 574.98889,726.60151 575.65101,725.93939 576.47347,725.93939 z "
+ transform="matrix(0.499065,-0.866565,0,1,0,0)"
+ style="fill:#4573b3;fill-opacity:1"
+ id="rect5101" />
+ <path
+ d="M 293.2599,221.89363 L 313.99908,221.89363 C 314.45009,221.89363 314.81318,222.25673 314.81318,222.70774 C 315.02865,229.0361 295.44494,244.47124 292.44579,240.30491 L 292.44579,222.70774 C 292.44579,222.25673 292.80889,221.89363 293.2599,221.89363 z "
+ style="opacity:0.65536726;fill:url(#linearGradient2371);fill-opacity:1"
+ id="path5103" />
+ </g>
+</svg>
diff --git a/design/XFS_Filesystem_Structure/internal_inodes.asciidoc b/design/XFS_Filesystem_Structure/internal_inodes.asciidoc
new file mode 100644
index 0000000..c3a3510
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/internal_inodes.asciidoc
@@ -0,0 +1,182 @@
+[[Internal_Inodes]]
+= Internal Inodes
+
+XFS allocates several inodes when a filesystem is created. These are internal
+and not accessible from the standard directory structure. These inodes are only
+accessible from the superblock.
+
+[[Quota_Inodes]]
+== Quota Inodes
+
+If quotas are used, two inodes are allocated for user and group quota
+management. If project quotas are used, these replace the group quota management
+and therefore uses the group quota inode.
+
+* Project quota's primary purpose is to track and monitor disk usage for
+directories. For this to occur, the directory inode must have the
++XFS_DIFLAG_PROJINHERIT+ flag set so all inodes created underneath the directory
+inherit the project ID.
+
+* Inodes and blocks owned by ID zero do not have enforced quotas, but only quota
+accounting.
+
+* Extended attributes do not contribute towards the ID's quota.
+
+* To access each ID's quota information in the file, seek to the ID offset
+multiplied by the size of +xfs_dqblk_t+ (136 bytes).
+
+.Quota inode layout
+image::images/76.png[]
+
+Quota information stored in the two inodes (in data extents) are an array of the
++xfs_dqblk+ structure where there is one instance for each ID in the system:
+
+[source, c]
+----
+struct xfs_disk_dquot {
+ __be16 d_magic;
+ __u8 d_version;
+ __u8 d_flags;
+ __be32 d_id;
+ __be64 d_blk_hardlimit;
+ __be64 d_blk_softlimit;
+ __be64 d_ino_hardlimit;
+ __be64 d_ino_softlimit;
+ __be64 d_bcount;
+ __be64 d_icount;
+ __be32 d_itimer;
+ __be32 d_btimer;
+ __be16 d_iwarns;
+ __be16 d_bwarns;
+ __be32 d_pad0;
+ __be64 d_rtb_hardlimit;
+ __be64 d_rtb_softlimit;
+ __be64 d_rtbcount;
+ __be32 d_rtbtimer;
+ __be16 d_rtbwarns;
+ __be16 d_pad;
+};
+struct xfs_dqblk {
+ struct xfs_disk_dquot dd_diskdq;
+ char dd_fill[32];
+};
+----
+
+.d_magic
+Specifies the signature where these two bytes are 0x4451 (+XFS_DQUOT_MAGIC+),
+or "DQ" in ASCII.
+
+.d_version
+Specifies the structure version, currently this is one (+XFS_DQUOT_VERSION+).
+
+.d_flags
+Specifies which type of ID the structure applies to:
+
+[source, c]
+----
+#define XFS_DQ_USER 0x0001
+#define XFS_DQ_PROJ 0x0002
+#define XFS_DQ_GROUP 0x0004
+----
+
+.d_id</term>
+The ID for the quota structure. This will be a uid, gid or projid based on the
+value of +d_flags+.
+
+.d_blk_hardlimit
+Specifies the hard limit for the number of filesystem blocks the ID can own. The
+ID will not be able to use more space than this limit. If it is attempted,
++ENOSPC+ will be returned.
+
+.d_blk_softlimit
+Specifies the soft limit for the number of filesystem blocks the ID can own.
+The ID can temporarily use more space than by +d_blk_softlimit+ up to
++d_blk_hardlimit+. If the space is not freed by the time limit specified by ID
+zero's +d_btimer+ value, the ID will be denied more space until the total
+blocks owned goes below +d_blk_softlimit+.
+
+.d_ino_hardlimit
+Specifies the hard limit for the number of inodes the ID can own. The ID will
+not be able to create or own any more inodes if +d_icount+ reaches this value.
+
+.d_ino_softlimit
+Specifies the soft limit for the number of inodes the ID can own. The ID can
+temporarily create or own more inodes than specified by d_ino_softlimit up to
+d_ino_hardlimit. If the inode count is not reduced by the time limit specified
+by ID zero's d_itimer value, the ID will be denied from creating or owning more
+inodes until the count goes below d_ino_softlimit.
+
+.d_bcount
+Specifies how many filesystem blocks are actually owned by the ID.
+
+.d_icount
+Specifies how many inodes are actually owned by the ID.
+
+.d_itimer
+Specifies the time when the ID's +d_icount+ exceeded +d_ino_softlimit+. The soft
+limit will turn into a hard limit after the elapsed time exceeds ID zero's
++d_itimer+ value. When d_icount goes back below +d_ino_softlimit+, +d_itimer+
+is reset back to zero.
+
+.d_btimer
+Specifies the time when the ID's +d_bcount+ exceeded +d_blk_softlimit+. The soft
+limit will turn into a hard limit after the elapsed time exceeds ID zero's
++d_btimer+ value. When d_bcount goes back below +d_blk_softlimit+, +d_btimer+
+is reset back to zero.
+
+.d_iwarns
+.d_bwarns
+.d_rtbwarns
+Specifies how many times a warning has been issued. Currently not used.
+
+.d_rtb_hardlimit
+Specifies the hard limit for the number of real-time blocks the ID can own. The
+ID cannot own more space on the real-time subvolume beyond this limit.
+
+.d_rtb_softlimit
+Specifies the soft limit for the number of real-time blocks the ID can own. The
+ID can temporarily own more space than specified by +d_rtb_softlimit+ up to
++d_rtb_hardlimit+. If +d_rtbcount+ is not reduced by the time limit specified
+by ID zero's +d_rtbtimer value+, the ID will be denied from owning more space
+until the count goes below +d_rtb_softlimit+.
+
+.d_rtbcount
+Specifies how many real-time blocks are currently owned by the ID.
+
+.d_rtbtimer
+Specifies the time when the ID's +d_rtbcount+ exceeded +d_rtb_softlimit+. The
+soft limit will turn into a hard limit after the elapsed time exceeds ID zero's
++d_rtbtimer+ value. When +d_rtbcount+ goes back below +d_rtb_softlimit+,
++d_rtbtimer+ is reset back to zero.
+
+
+[[Real-time_Inodes]]
+== Real-time Inodes
+
+There are two inodes allocated to managing the real-time device's space, the
+Bitmap Inode and the Summary Inode.
+
+[[Real-Time_Bitmap_Inode]]
+=== Real-Time Bitmap Inode
+
+The Bitmap Inode tracks the used/free space in the real-time device using an
+old-style bitmap. One bit is allocated per real-time extent. The size of an
+extent is specified by the superblock's +sb_rextsize+ value.
+
+The number of blocks used by the bitmap inode is equal to the number of
+real-time extents (+sb_rextents+) divided by the block size (+sb_blocksize+) and
+bits per byte. This value is stored in +sb_rbmblocks+. The nblocks and extent
+array for the inode should match this.
+
+[source, c]
+ xfs_ino_t sb_rbmino;
+
+[[Real-Time_Summary_Inode]]
+=== Real-Time Summary Inode
+
+The Summary Inode keeps the used/free space accounting information for the
+real-time device.
+
+[source, c]
+ xfs_ino_t sb_rsumino;
+
diff --git a/design/XFS_Filesystem_Structure/journaling_log.asciidoc b/design/XFS_Filesystem_Structure/journaling_log.asciidoc
new file mode 100644
index 0000000..77c4430
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/journaling_log.asciidoc
@@ -0,0 +1,3 @@
+= Journaling Log
+ TODO:
+
diff --git a/design/XFS_Filesystem_Structure/ondisk_inode.asciidoc b/design/XFS_Filesystem_Structure/ondisk_inode.asciidoc
new file mode 100644
index 0000000..017f607
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/ondisk_inode.asciidoc
@@ -0,0 +1,448 @@
+[[On-disk_Inode]]
+= On-disk Inode
+
+All files, directories and links are stored on disk with inodes and descend from
+the root inode with it's number defined in the xref:Superblocks[superblock]. The
+previous section on xref:AG_Inode_Management[AG Inode Management] describes the
+allocation and management of inodes on disk. This section describes the contents
+of inodes themselves.
+
+An inode is divided into 3 parts:
+
+.On-disk inode sections
+image::images/23.png[]
+
+* The core contains what the inode represents, stat data and information
+describing the data and attribute forks.
+
+* The +di_u+ "data fork" contains normal data related to the inode. It's contents
+depends on the file type specified by +di_core.di_mode+ (eg. regular file,
+directory, link, etc) and how much information is contained in the file which
+determined by +di_core.di_format+. The following union to represent this data is
+declared as follows:
+
+[source, c]
+----
+union {
+ xfs_bmdr_block_t di_bmbt;
+ xfs_bmbt_rec_t di_bmx[1];
+ xfs_dir2_sf_t di_dir2sf;
+ char di_c[1];
+ xfs_dev_t di_dev;
+ uuid_t di_muuid;
+ char di_symlink[1];
+} di_u;
+----
+
+* The di_a "attribute fork" contains extended attributes. Its layout is
+determined by the +di_core.di_aformat+ value. Its representation is declared as
+follows:
+
+[source, c]
+----
+union {
+ xfs_bmdr_block_t di_abmbt;
+ xfs_bmbt_rec_t di_abmx[1];
+ xfs_attr_shortform_t di_attrsf;
+} di_a;
+----
+
+[NOTE]
+The above two unions are rarely used in the XFS code, but the structures
+within the union are directly cast depending on the +di_mode/di_format+ and
++di_aformat+ values. They are referenced in this document to make it easier to
+explain the various structures in use within the inode.
+
+The remaining space in the inode after +di_next_unlinked+ where the two forks
+are located is called the inode's "literal area". This starts at offset 100
+(0x64) in the inode.
+
+The space for each of the two forks in the literal area is determined by the
+inode size, and +di_core.di_forkoff+. The data fork is located between the start
+of the literal area and +di_forkoff+. The attribute fork is located between
++di_forkoff+ and the end of the inode.
+
+
+[[Inode_Core]]
+== Inode Core
+
+The inode's core is 96 bytes in size and contains information about the file
+itself including most stat data information about data and attribute forks after
+the core within the inode. It uses the following structure:
+
+[source, c]
+----
+struct xfs_dinode_core {
+ __uint16_t di_magic;
+ __uint16_t di_mode;
+ __int8_t di_version;
+ __int8_t di_format;
+ __uint16_t di_onlink;
+ __uint32_t di_uid;
+ __uint32_t di_gid;
+ __uint32_t di_nlink;
+ __uint16_t di_projid;
+ __uint8_t di_pad[8];
+ __uint16_t di_flushiter;
+ xfs_timestamp_t di_atime;
+ xfs_timestamp_t di_mtime;
+ xfs_timestamp_t di_ctime;
+ xfs_fsize_t di_size;
+ xfs_drfsbno_t di_nblocks;
+ xfs_extlen_t di_extsize;
+ xfs_extnum_t di_nextents;
+ xfs_aextnum_t di_anextents;
+ __uint8_t di_forkoff;
+ __int8_t di_aformat;
+ __uint32_t di_dmevmask;
+ __uint16_t di_dmstate;
+ __uint16_t di_flags;
+ __uint32_t di_gen;
+};
+----
+
+.di_magic
+The inode signature where these two bytes are 0x494e, or "IN" in ASCII.
+
+.di_mode
+Specifies the mode access bits and type of file using the standard S_Ixxx values
+defined in stat.h.
+
+.di_version
+Specifies the inode version which currently can only be 1 or 2. The inode
+version specifies the usage of the +di_onlink+, +di_nlink+ and +di_projid+
+values in the inode core. Initially, inodes are created as v1 but can be
+converted on the fly to v2 when required.
+
+.di_format
+
+Specifies the format of the data fork in conjunction with the +di_mode+ type.
+This can be one of several values. For directories and links, it can be "local"
+where all metadata associated with the file is within the inode, "extents" where
+the inode contains an array of extents to other filesystem blocks which contain
+the associated metadata or data or "btree" where the inode contains a B+tree
+root node which points to filesystem blocks containing the metadata or data.
+Migration between the formats depends on the amount of metadata associated with
+the inode. "dev" is used for character and block devices while "uuid" is
+currently not used.
+
+[source, c]
+----
+typedef enum xfs_dinode_fmt {
+ XFS_DINODE_FMT_DEV,
+ XFS_DINODE_FMT_LOCAL,
+ XFS_DINODE_FMT_EXTENTS,
+ XFS_DINODE_FMT_BTREE,
+ XFS_DINODE_FMT_UUID
+} xfs_dinode_fmt_t;
+----
+
+.di_onlink
+In v1 inodes, this specifies the number of links to the inode from directories.
+When the number exceeds 65535, the inode is converted to v2 and the link count
+is stored in +di_nlink+.
+
+.di_uid
+Specifies the owner's UID of the inode.
+
+.di_gid
+Specifies the owner's GID of the inode.
+
+.di_nlink
+Specifies the number of links to the inode from directories. This is maintained
+for both inode versions for current versions of XFS. Old versions of XFS did not
+support v2 inodes, and therefore this value was never updated and was classed as
+reserved space (part of +di_pad+).
+
+.di_projid
+Specifies the owner's project ID in v2 inodes. An inode is converted to v2 if
+the project ID is set. This value must be zero for v1 inodes.
+
+.di_pad[8]
+Reserved, must be zero.
+
+.di_flushiter
+Incremented on flush.
+
+.di_atime
+
+Specifies the last access time of the files using UNIX time conventions the
+following structure. This value maybe undefined if the filesystem is mounted
+with the "noatime" option.
+
+[source, c]
+----
+struct xfs_timestamp {
+ __int32_t t_sec;
+ __int32_t t_nsec;
+};
+----
+
+.di_mtime
+Specifies the last time the file was modified.
+
+.di_ctime
+Specifies when the inode's status was last changed.
+
+.di_size
+Specifies the EOF of the inode in bytes. This can be larger or smaller than the
+extent space (therefore actual disk space) used for the inode. For regular
+files, this is the filesize in bytes, directories, the space taken by directory
+entries and for links, the length of the symlink.
+
+.di_nblocks
+Specifies the number of filesystem blocks used to store the inode's data
+including relevant metadata like B+trees. This does not include blocks used for
+extended attributes.
+
+.di_extsize
+Specifies the extent size for filesystems with real-time devices and an extent
+size hint for standard filesystems. For normal filesystems, and with
+directories, the +XFS_DIFLAG_EXTSZINHERIT+ flag must be set in +di_flags+ if
+this field is used. Inodes created in these directories will inherit the
+di_extsize value and have +XFS_DIFLAG_EXTSIZE+ set in their +di_flags+. When a
+file is written to beyond allocated space, XFS will attempt to allocate
+additional disk space based on this value.
+
+.di_nextents
+Specifies the number of data extents associated with this inode.
+
+.di_anextents
+Specifies the number of extended attribute extents associated with this inode.
+
+.di_forkoff
+Specifies the offset into the inode's literal area where the extended attribute
+fork starts. This is an 8-bit value that is multiplied by 8 to determine the
+actual offset in bytes (ie. attribute data is 64-bit aligned). This also limits
+the maximum size of the inode to 2048 bytes. This value is initially zero until
+an extended attribute is created. When in attribute is added, the nature of
++di_forkoff+ depends on the +XFS_SB_VERSION2_ATTR2BIT+  flag in the superblock.
+Refer to xref:Extended_Attribute_Versions[Extended Attribute Versions] for more
+details.
+
+.di_aformat
+
+Specifies the format of the attribute fork. This uses the same values as
++di_format+, but restricted to "local", "extents" and "btree" formats for
+extended attribute data.
+
+.di_dmevmask
+DMAPI event mask.
+
+.di_dmstate
+DMAPI state.
+
+.di_flags
+Specifies flags associated with the inode. This can be a combination of the
+following values:
+
+.Version 2 Inode flags
+[options="header"]
+|=====
+| Flag | Description
+| +XFS_SB_VERSION_ATTRBIT+ | Set if any inode have extended attributes.
+| +XFS_DIFLAG_REALTIME+ | The inode's data is located on the real-time device.
+| +XFS_DIFLAG_PREALLOC+ | The inode's extents have been preallocated.
+| +XFS_DIFLAG_NEWRTBM+ |
+Specifies the +sb_rbmino+ uses the new real-time bitmap format
+
+| +XFS_DIFLAG_IMMUTABLE+ | Specifies the inode cannot be modified.
+| +XFS_DIFLAG_APPEND+ | The inode is in append only mode.
+| +XFS_DIFLAG_SYNC+ | The inode is written synchronously.
+| +XFS_DIFLAG_NOATIME+ | The inode's +di_atime+ is not updated.
+| +XFS_DIFLAG_NODUMP+ | Specifies the inode is to be ignored by xfsdump.
+| +XFS_DIFLAG_RTINHERIT+ |
+For directory inodes, new inodes inherit the +XFS_DIFLAG_REALTIME+ bit.
+
+| +XFS_DIFLAG_PROJINHERIT+ |
+For directory inodes, new inodes inherit the +di_projid+ value.
+
+| +XFS_DIFLAG_NOSYMLINKS+ |
+For directory inodes, symlinks cannot be created.
+
+| +XFS_DIFLAG_EXTSIZE+ |
+Specifies the extent size for real-time files or a and extent size hint for regular files.
+
+| +XFS_DIFLAG_EXTSZINHERIT+ |
+For directory inodes, new inodes inherit the +di_extsize+ value.
+
+| +XFS_DIFLAG_NODEFRAG+ |
+Specifies the inode is to be ignored when defragmenting the filesystem.
+
+|=====
+
+.di_gen
+A generation number used for inode identification. This is used by tools that do
+inode scanning such as backup tools and xfsdump. An inode's generation number
+can change by unlinking and creating a new file that reuses the inode.
+
+
+[[Unlinked_Pointer]]
+== Unlinked Pointer
+
+The +di_next_unlinked+ value in the inode is used to track inodes that have been
+unlinked (deleted) but which are still referenced. When an inode is unlinked and
+there is still an outstanding reference, the inode is added to one of the
+xref:AG_Inode_Management[AGI's] +agi_unlinked+ hash buckets. The AGI unlinked
+bucket points to an inode and the +di_next_unlinked+ value points to the next
+inode in the chain. The last inode in the chain has +di_next_unlinked+ set to
+NULL (-1).
+
+Once the last reference is released, the inode is removed from the unlinked hash
+chain, and +di_next_unlinked+ is set to NULL. In the case of a system crash, XFS
+recovery will complete the unlink process for any inodes found in these lists.
+
+The only time the unlinked fields can be seen to be used on disk is either on an
+active filesystem or a crashed system. A cleanly unmounted or recovered
+filesystem will not have any inodes in these unlink hash chains.
+
+
+.Unlinked inode pointer
+image::images/28.png[]
+
+[[Data_Fork]]
+== Data Fork
+
+The structure of the inode's data fork based is on the inode's type and
++di_format+. It always starts at offset 100 (0x64) in the inode's space which is
+the start of the inode's "literal area". The size of the data fork is determined
+by the type and format. The maximum size is determined by the inode size and
++di_forkoff+. In code, use the +XFS_DFORK_PTR+ macro specifying +XFS_DATA_FORK+
+for the "which" parameter. Alternatively, the +XFS_DFORK_DPTR+ macro can be
+used.
+
+Each of the following sub-sections summarises the contents of the data fork
+based on the inode type.
+
+
+[[Regular_Files_S_IFREG]]
+=== Regular Files (S_IFREG)
+
+The data fork specifies the file's data extents. The extents specify where the
+file's actual data is located within the filesystem. Extents can have 2 formats
+which is defined by the di_format value:
+
+* +XFS_DINODE_FMT_EXTENTS+: The extent data is fully contained within the inode
+which contains an array of extents to the filesystem blocks for the file's data.
+To access the extents, cast the return value from +XFS_DFORK_DPTR+ to
++xfs_bmbt_rec_t*+.
+
+* +XFS_DINODE_FMT_BTREE+: The extent data is contained in the leaves of a B+tree.
+The inode contains the root node of the tree and is accessed by casting the
+return value from +XFS_DFORK_DPTR+ to +xfs_bmdr_block_t*+.
+
+
+Details for each of these data extent formats are covered in the
+xref:Data_Extents[Data Extents] later on.
+
+
+
+[[Directories_S_IFDIR]]
+=== Directories (S_IFDIR)
+
+The data fork contains the directory's entries and associated data. The format
+of the entries is also determined by the +di_format+ value and can be one of 3
+formats:
+
+* +XFS_DINODE_FMT_LOCAL+: The directory entries are fully contained within the
+inode. This is accessed by casting the value from +XFS_DFORK_DPTR+ to
++xfs_dir2_sf_t*+.
+
+* +XFS_DINODE_FMT_EXTENTS+: The actual directory entries are located in another
+filesystem block, the inode contains an array of extents to these filesystem
+blocks (+xfs_bmbt_rec_t*+).
+
+* +XFS_DINODE_FMT_BTREE+: The directory entries are contained in the leaves of a
+B+tree. The inode contains the root node (+xfs_bmdr_block_t*+).
+
+Details for each of these directory formats are covered in the
+xref:Directories[Directories] later on.
+
+
+[[Symbolic_Links_S_IFLNK]]
+=== Symbolic Links (S_IFLNK)
+
+The data fork contains the contents of the symbolic link. The format of the link
+is determined by the +di_format+ value and can be one of 2 formats:
+
+* +XFS_DINODE_FMT_LOCAL+: The symbolic link is fully contained within the inode.
+This is accessed by casting the return value from +XFS_DFORK_DPTR+ to +char*+.
+
+* +XFS_DINODE_FMT_EXTENTS+: The actual symlink is located in another filesystem
+block, the inode contains the extents to these filesystem blocks
+(+xfs_bmbt_rec_t*+).
+
+Details for symbolic links is covered in the xref:Symbolic_Links[Symbolic Links]
+later on.
+
+[[Other_File_Types]]
+=== Other File Types
+
+For character and block devices (+S_IFCHR+ and +S_IFBLK+), cast the value from
++XFS_DFORK_DPTR+ to +xfs_dev_t*+.
+
+
+
+
+[[Attribute_Fork]]
+== Attribute Fork
+
+The attribute fork in the inode always contains the location of the extended
+attributes associated with the inode.
+
+The location of the attribute fork in the inode's literal area (offset 100 to
+the end of the inode) is specified by the +di_forkoff+ value in the inode's
+core. If this value is zero, the inode does not contain any extended attributes.
+Non-zero, the byte offset into the literal area = +di_forkoff+ * 8, which also
+determines the 2048 byte maximum size for an inode. Attributes must be allocated
+on a 64-bit boundary on the disk. To access the extended attributes in code, use
+the +XFS_DFORK_PTR+ macro specifying +XFS_ATTR_FORK+ for the "which" parameter.
+Alternatively, the +XFS_DFORK_APTR+ macro can be used.
+
+Which structure in the attribute fork is used depends on the +di_aformat+ value
+in the inode. It can be one of the following values:
+
+* +XFS_DINODE_FMT_LOCAL+: The extended attributes are contained entirely within
+the inode. This is accessed by casting the value from +XFS_DFORK_APTR+ to
++xfs_attr_shortform_t*+.
+
+* +XFS_DINODE_FMT_EXTENTS+: The attributes are located in another filesystem
+block, the inode contains an array of pointers to these filesystem blocks. They
+are accessed by casting the value from +XFS_DFORK_APTR+ to +xfs_bmbt_rec_t*+.
+
+* +XFS_DINODE_FMT_BTREE+: The extents for the attributes are contained in the
+leaves of a B+tree. The inode contains the root node of the tree and is accessed
+by casting the value from +XFS_DFORK_APTR+ to +xfs_bmdr_block_t*+.
+
+Detailed information on the layouts of extended attributes are covered in the
+xref:Extended_Attributes[Extended Attributes] in this document.
+
+
+
+[[Extended_Attribute_Versions]]
+=== Extended Attribute Versions
+
+Extended attributes come in two versions: "attr1" or "attr2". The attribute
+version is specified by the +XFS_SB_VERSION2_ATTR2BIT+  flag in the
++sb_features2+ field in the superblock. It determines how the inode's extra
+space is split between +di_u+ and +di_a+ forks which also determines how the
++di_forkoff+ value is maintained in the inode's core.
+
+With "attr1" attributes, the +di_forkoff+ is set to somewhere in the middle of
+the space between the core and end of the inode and never changes (which has the
+effect of artificially limiting the space for data information). As the data
+fork grows, when it gets to +di_forkoff+, it will move the data to the level
+format level (ie. local < extent < btree). If very little space is used
+for either attributes or data, then a good portion of the available inode space
+is wasted with this version.
+
+"Attr2" was introduced to maximum the utilisation of the inode's literal area.
+The +di_forkoff+ starts at the end of the inode and works its way to the data
+fork as attributes are added. Attr2 is highly recommended if extended attributes
+are used.
+
+The following diagram compares the two versions:
+
+.Extended attribute layouts
+image::images/30.png[]
+
diff --git a/design/XFS_Filesystem_Structure/symbolic_links.asciidoc b/design/XFS_Filesystem_Structure/symbolic_links.asciidoc
new file mode 100644
index 0000000..9c9ca30
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/symbolic_links.asciidoc
@@ -0,0 +1,81 @@
+[[Symbolic_Links]]
+= Symbolic Links
+
+Symbolic links to a file can be stored in one of two formats: "local" and
+"extents". The length of the symlink contents is always specified by the inode's
++di_size+ value.
+
+
+[[Shortform_Symbolic_Links]]
+== Shortform Symbolic Links
+
+Symbolic links are stored with the "local" +di_format+ if the symbolic link can
+fit within the inode's data fork. The link data is an array of characters
+(+di_symlink+ array in the data fork union).
+
+.Symbolic link shortform layout
+image::images/61.png[]
+
+=== Shortform symbolic link xfs_db example
+
+A short symbolic link to a file is created:
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+core.magic = 0x494e
+core.mode = 0120777
+core.version = 1
+core.format = 1 (local)
+...
+core.size = 12
+core.nblocks = 0
+core.extsize = 0
+core.nextents = 0
+...
+u.symlink = "small_target"
+----
+
+Raw on-disk data with the link contents highlighted:
+
+.Shortform symbolic link format
+image::images/code/61.png[]
+
+
+[[Extent_Symbolic_Links]]
+== Extent Symbolic Links
+
+If the length of the symbolic link exceeds the space available in the inode's
+data fork, the link is moved to a new filesystem block and the inode's
++di_format+ is changed to "extents". The location of the block(s) is specified
+by the data fork's +di_bmx[]+ array. In the significant majority of cases, this
+will be in one filesystem block as a symlink cannot be longer than 1024
+characters.
+
+.Symbolic link extent layout
+image::images/62.png[]
+
+=== Symbolic link extent xfs_db example
+
+A longer link is created (greater than 156 bytes):
+
+----
+xfs_db> inode <inode#>
+xfs_db> p
+core.magic = 0x494e
+core.mode = 0120777
+core.version = 1
+core.format = 2 (extents)
+...
+core.size = 182
+core.nblocks = 1
+core.extsize = 0
+core.nextents = 1
+...
+u.bmx[0] = [startoff,startblock,blockcount,extentflag] 0:[0,37530,1,0]
+xfs_db> dblock 0
+xfs_db> type symlink
+xfs_db> p
+"symlink contents..."
+----
+
diff --git a/design/XFS_Filesystem_Structure/xfs_filesystem_structure.asciidoc b/design/XFS_Filesystem_Structure/xfs_filesystem_structure.asciidoc
new file mode 100644
index 0000000..226bb25
--- /dev/null
+++ b/design/XFS_Filesystem_Structure/xfs_filesystem_structure.asciidoc
@@ -0,0 +1,53 @@
+// This is based on a multi-book template where each chapter uses level 1
+// headings. See doc/multi-book.txt as the example from asciidoc documentation.
+//
+// We pull in the document info in xml format from docinfo.xml. We do this
+// because asciidoc is unable to handle multiple entry revision histories,
+// and we really need an area to set up various docbook sections like copyright
+// and legal notice sections.
+//
+XFS Filesystem Structure
+========================
+:doctype: book
+:docinfo1:
+
+Introduction
+============
+
+[partintro]
+--
+This document describes the layout of an XFS filesystem.
+
+It shows how to manually inspect it by showing examples using the xfs_db
+user-space tool supplied with the XFS filesystem driver.
+
+TODO: More description.
+--
+
+// Push titles down one level
+:leveloffset: 1
+
+include::common_types.asciidoc[]
+
+// return titles to normal
+:leveloffset: 0
+
+Global Structures
+=================
+
+:leveloffset: 1
+include::allocation_groups.asciidoc[]
+include::journaling_log.asciidoc[]
+include::internal_inodes.asciidoc[]
+:leveloffset: 0
+
+Dynamically Allocated Structures
+================================
+
+:leveloffset: 1
+include::ondisk_inode.asciidoc[]
+include::data_extents.asciidoc[]
+include::extended_attributes.asciidoc[]
+include::directories.asciidoc[]
+include::symbolic_links.asciidoc[]
+:leveloffset: 0