Initial commit of a work-in-progress of latex source
authorDavid Anderson <davea42@earthlink.net>
Thu, 10 May 2012 15:48:42 +0000 (08:48 -0700)
committerDavid Anderson <davea42@earthlink.net>
Thu, 10 May 2012 15:48:42 +0000 (08:48 -0700)
for DWARF5.

24 files changed:
dwarf5/README [new file with mode: 0644]
dwarf5/latexdoc/DWlogo.eps [new file with mode: 0644]
dwarf5/latexdoc/DWlogo.png [new file with mode: 0644]
dwarf5/latexdoc/Makefile [new file with mode: 0644]
dwarf5/latexdoc/README [new file with mode: 0644]
dwarf5/latexdoc/appendixdebugrelationships.tex [new file with mode: 0644]
dwarf5/latexdoc/attributesbytag.tex [new file with mode: 0644]
dwarf5/latexdoc/bldtar.sh [new file with mode: 0644]
dwarf5/latexdoc/compression.tex [new file with mode: 0644]
dwarf5/latexdoc/copyright.tex [new file with mode: 0644]
dwarf5/latexdoc/dataobject.tex [new file with mode: 0644]
dwarf5/latexdoc/datarepresentation.tex [new file with mode: 0644]
dwarf5/latexdoc/dwarf5.tex [new file with mode: 0644]
dwarf5/latexdoc/encodingdecoding.tex [new file with mode: 0644]
dwarf5/latexdoc/examples.tex [new file with mode: 0644]
dwarf5/latexdoc/foreword.tex [new file with mode: 0644]
dwarf5/latexdoc/generaldescription.tex [new file with mode: 0644]
dwarf5/latexdoc/gnulicense.tex [new file with mode: 0644]
dwarf5/latexdoc/hint.txt [new file with mode: 0644]
dwarf5/latexdoc/introduction.tex [new file with mode: 0644]
dwarf5/latexdoc/otherdebugginginformation.tex [new file with mode: 0644]
dwarf5/latexdoc/programscope.tex [new file with mode: 0644]
dwarf5/latexdoc/sectionversionnumbers.tex [new file with mode: 0644]
dwarf5/latexdoc/typeentries.tex [new file with mode: 0644]

diff --git a/dwarf5/README b/dwarf5/README
new file mode 100644 (file)
index 0000000..4cebf36
--- /dev/null
@@ -0,0 +1,4 @@
+
+The directory 'latexdoc' contains a work-in-progress
+of DWARF5 in latex source.  See latexdoc/README
+and latexdoc/Makefile for more information.
diff --git a/dwarf5/latexdoc/DWlogo.eps b/dwarf5/latexdoc/DWlogo.eps
new file mode 100644 (file)
index 0000000..eb17bf7
--- /dev/null
@@ -0,0 +1,1688 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (ImageMagick)
+%%Title: (DW-logo.eps)
+%%CreationDate: (2012-03-22T12:50:40-07:00)
+%%BoundingBox: 0 0 142 129
+%%HiResBoundingBox: 0 0 142 129
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%EndComments
+
+%%BeginDefaults
+%%EndDefaults
+
+%%BeginProlog
+%
+% Display a color image.  The image is displayed in color on
+% Postscript viewers or printers that support color, otherwise
+% it is displayed as grayscale.
+%
+/DirectClassPacket
+{
+  %
+  % Get a DirectClass packet.
+  %
+  % Parameters:
+  %   red.
+  %   green.
+  %   blue.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/DirectClassImage
+{
+  %
+  % Display a DirectClass image.
+  %
+  systemdict /colorimage known
+  {
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { DirectClassPacket } false 3 colorimage
+  }
+  {
+    %
+    % No colorimage operator;  convert to grayscale.
+    %
+    columns rows 8
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { GrayDirectClassPacket } image
+  } ifelse
+} bind def
+
+/GrayDirectClassPacket
+{
+  %
+  % Get a DirectClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   red
+  %   green
+  %   blue
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile color_packet readhexstring pop pop
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/GrayPseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet;  convert to grayscale.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  color_packet 0 get 0.299 mul
+  color_packet 1 get 0.587 mul add
+  color_packet 2 get 0.114 mul add
+  cvi
+  /gray_packet exch def
+  compression 0 eq
+  {
+    /number_pixels 1 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add def
+  } ifelse
+  0 1 number_pixels 1 sub
+  {
+    pixels exch gray_packet put
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassPacket
+{
+  %
+  % Get a PseudoClass packet.
+  %
+  % Parameters:
+  %   index: index into the colormap.
+  %   length: number of pixels minus one of this color (optional).
+  %
+  currentfile byte readhexstring pop 0 get
+  /offset exch 3 mul def
+  /color_packet colormap offset 3 getinterval def
+  compression 0 eq
+  {
+    /number_pixels 3 def
+  }
+  {
+    currentfile byte readhexstring pop 0 get
+    /number_pixels exch 1 add 3 mul def
+  } ifelse
+  0 3 number_pixels 1 sub
+  {
+    pixels exch color_packet putinterval
+  } for
+  pixels 0 number_pixels getinterval
+} bind def
+
+/PseudoClassImage
+{
+  %
+  % Display a PseudoClass image.
+  %
+  % Parameters:
+  %   class: 0-PseudoClass or 1-Grayscale.
+  %
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  class 0 gt
+  {
+    currentfile buffer readline pop
+    token pop /depth exch def pop
+    /grays columns 8 add depth sub depth mul 8 idiv string def
+    columns rows depth
+    [
+      columns 0 0
+      rows neg 0 rows
+    ]
+    { currentfile grays readhexstring pop } image
+  }
+  {
+    %
+    % Parameters:
+    %   colors: number of colors in the colormap.
+    %   colormap: red, green, blue color packets.
+    %
+    currentfile buffer readline pop
+    token pop /colors exch def pop
+    /colors colors 3 mul def
+    /colormap colors string def
+    currentfile colormap readhexstring pop pop
+    systemdict /colorimage known
+    {
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { PseudoClassPacket } false 3 colorimage
+    }
+    {
+      %
+      % No colorimage operator;  convert to grayscale.
+      %
+      columns rows 8
+      [
+        columns 0 0
+        rows neg 0 rows
+      ]
+      { GrayPseudoClassPacket } image
+    } ifelse
+  } ifelse
+} bind def
+
+/DisplayImage
+{
+  %
+  % Display a DirectClass or PseudoClass image.
+  %
+  % Parameters:
+  %   x & y translation.
+  %   x & y scale.
+  %   label pointsize.
+  %   image label.
+  %   image columns & rows.
+  %   class: 0-DirectClass or 1-PseudoClass.
+  %   compression: 0-none or 1-RunlengthEncoded.
+  %   hex color packets.
+  %
+  gsave
+  /buffer 512 string def
+  /byte 1 string def
+  /color_packet 3 string def
+  /pixels 768 string def
+
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  x y translate
+  currentfile buffer readline pop
+  token pop /x exch def
+  token pop /y exch def pop
+  currentfile buffer readline pop
+  token pop /pointsize exch def pop
+  /Times-Roman findfont pointsize scalefont setfont
+  x y scale
+  currentfile buffer readline pop
+  token pop /columns exch def
+  token pop /rows exch def pop
+  currentfile buffer readline pop
+  token pop /class exch def pop
+  currentfile buffer readline pop
+  token pop /compression exch def pop
+  class 0 gt { PseudoClassImage } { DirectClassImage } ifelse
+} bind def
+%%EndProlog
+%%Page:  1 1
+%%PageBoundingBox: 0 0 142 129
+userdict begin
+DisplayImage
+0 0
+142 129
+12
+142 129
+0
+0
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFE6E5E4CDCBCABABABA9492917B7979605D5B5351516E6966605D5B7B7979878584
+B1B0B0CDCBCADCDBDBFAF9F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0EFEEA4A2A1393331
+0F0707040201040201040201040201040201040201040201040201040201040201040201040201
+0F07070402010904044B46448B7667E6E5E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFBCBABA878383706E6E322F2D0E12161A13131F2B34365469416680
+496A82517F9C5789A95F9AB669AAC86FB5D26DB2D26BAFD269AAD464A1C8629FBD5C92AF4E7993
+50768D3E5F77334F63283C4A151517130C0B272422615F5F86888AC0BFBFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF7976750F07070402010E121625201F5686A774BAEA7BCCFC85DEFD7BCCFC74BEF177C5F6
+6FB8EA6FB8EA7BCCFC6FB8EA65A3CD6BAFDE7BCCFC72BBE96FB8EA6BAFDE6FB8EA74BAEA74BEF1
+80D5FC85DEFD8EEDFD7ED2FC74BAEA5F99C02C333A0E12160904040F07074B4644E6E5E4FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDED7270700F0707
+0402010E12163A556874BAEA7BCCFC7BCCFC74BEF17BCCFC74BCED6BAFDE6BAFDE6DB3E469AAD6
+7BCCFC5485A704020104020104020128333C77C3F36BAFDE6FB8EA6CB1E06FB8EA7BCCFC69A9D5
+5F99C064A1CB7ED2FC7BCCFC7BCCFC80D5FC74BAEA3952640F07070402010904047B7979F0EFEE
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEDF0928F8F6866650F0A0A24343F3C586E5D92AF
+7BCCFC7ED0F577C5F66FB4E46DB2E280D5FC33465525364280D5FC71B9EA6EB3E37CCEF7385266
+0D0E0F3F677E55879C3C5E75090404293D4B80D5FC6BAFDE74BFEE5A8FA924343F0B0B0B1E2A32
+131416161F25517F9C77C3F36EB5E772BBE978C7F27FD3F969AAC840637B1E2A32090404474443
+9C908BDCDCDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFA8A7A7130C0B0402010E121668A9D17BCCFC7BCCFC71B9EA7BCCFC
+212E37527E9E7BCCFC6CB1E07BCCFC4D7794090A0B74BEF174BEF17ACBF344667D040201456981
+85DEFD6FB8EA85DEFD5A8DB13042527BCCFC6BAFDE67A7C80402010402016DB2C881D8FD85DEFD
+334F630402014D779472BBE974BAEA64A1C8527E9E74BEF17BCCFC85DEFD74BEF12E3F4D040201
+040201837F7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+EDEDED8A88871411101411104264776DB2D281D7FC79C8F274BCED78C8F36CB1E080D5FC1D272E
+1B1D217BCCFC6EB4E475C2F372BBE90C09084F799780D5FC76C1F1334756040201609AB96CB1E0
+67A6CF517F9C5B909C629DB26FB6E775C2F342677B04020149708B79C8F073BDED76C4F571BAD6
+1B242B45688075C0EB80D5FC23343F13141672BBE970B8E873BDED73BDED7BCCF56AACD6497889
+18232B1E120C706E6EDAD9D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8785840E1216
+0904044D77947BCCFC81D7FC7BCCFC629DC51314160F07075686A773BDED7BCCFC3C586E040201
+4D779475C2F369AAD685DEFD25364328333C7BCCFC77C5F633475604020164A2BD74BEF1395D75
+04020104020104020169AAD685DEFD2D445404020169AAD676C4F55A8DB144667D64A2CD8EEDFD
+7BCCFC6EB4E37BCCFC090A0B44667D81D8FD6FB6E774BEF10F070736546974BEF174BAEA85DEFD
+4D7794040201090404A8A7A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F80820F07070402015789A9
+85DEFD7BCCFC72BBE928333C0402010402010402010402016DB2DE74BAEA517F9C040201395264
+78C6ED6EB2E27BCCFC2F47590402016BAFDE7BCCFC3E5A6E0402015382946BAFDE74BAEA74BEF1
+7BCCFC090A0B629DC58EEDFD2B404F0F070774BEF17BCCFC0E12160402010402011D21266FB8EA
+77C3F35686A7040201629DC57BCCFC78C6ED334756040201283C4A7BCCFC69AAD66FB6E785DEFD
+74BEF1161A1E040201968D88FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C99984D4D4D161A1F49788973BCE676C1ED75C2F3
+598AAC14171B36566B4F7A897DCCF33D586D04020165A0BB6FB6E769ABCF04020113141674BFEE
+6AACDA74BEF14A72880402014F7A9977C4F472BBDE1B242B141C226AACC173BEEE74BDD7497889
+09070665A3CD80D5FC446C830402014A728D7DCFF878C6ED78BFD839535B040201619BC37DD0FC
+21272E202C3580D5FC6FB4E468A8CD090404090A0B22313B80D5FC6CB1E070B8E8517F9C6EB4E0
+74C0EA446F89131A1F565454B6B4B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF6D6E700402010E121673BDE185DEFD7BCCFC6EB2E085DEFD5A8DB1
+0402015686A78EEDFD7ACBF31D21260402013E5C706BAFDE7CCEF70E121604020167A1B17BCCFC
+8EEDFD36566B0402015A8DB173BDED74BEF185DEFD212E37040201040201040201040201426278
+7BCCFC69AAD673BDED0F0707040201344F63629DC5629DC524343F0402017BCCFC69AAC8040201
+37586F74BEF17BCCFC36566B0F070744667D1B1D217BCCFC74BAEA538294040201476B8577C4E9
+7BCCFC72BBDE0F0707040201757678FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF8F8B8A0904042D3C487ED1FB81D7FC5686A73347566EB4E36BAFDE85DEFD1B242B
+0E121674BEF124343F04020122272B0402010E121681D5F7476B8504020124343F68A7D244667D
+09040433475685DEFD6BAFDE6BAFDE74BEF173BDED44667D33475644667D6EB2E281D7FC74BAEA
+6BAFDE73BDED6BAFDE28333C04020104020104020104020144667D85DEFD5789A9040201588CA8
+74BEF185DEFD161A1E3E5A6E74BEF11314167BCCFC85DEFD283C4A0F07076BAFDE73BDED69AAD6
+7CCCF374BAEA22272B090A0BA8A7A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+6F6C6A0904044B778E80D5FC80D5FC487187040201334F6371BAE86EB2E073BDED4A778E090404
+09040439576668A9D181D5F74970800402015F98B57CCEF74E79931F2B34161A1E2D4454508094
+80D5FC77C5F671B9E96DB2DE64A1C85C92A9588A944B7B894E7A82497889446F894E7993588CA8
+629DC073BDE17BCBE970B6D85F929D5B909C6EB2D873BDED77C5F637556A04020170B6E280D5FC
+4568800D0E0F81D3F379C5F209040480D5FC6FB5D7060302598CAF80D5FC6CB1E171BBED72BBE9
+77C5F680D5FC42677A090404494645DAD9D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25201F090404
+69AAD680D5FC85DEFD22272B0904046BAFDE7ED1FB7BCCFC7BCCFC6BAFDE74BEF1040201040201
+6DB2D274BEF18EEDFD3D5B7204020166A5CD69AAD674BEF18EEDFD96F1FF85DEFD67A3CD334756
+040201040201040201040201040201040201090404040201040201090404040201040201040201
+040201040201090A0B3952645A8DB171B9E77ED1FB85DEFD4E79933E5A6E7BCCFC5686A7040201
+34516681D8FD7BCCFC0F0C0B74BEF122272B24343F85DEFD6BAFDE78C6ED74BEF1639FC869AAD6
+7BCCFC81D7FC629DC5040201272422FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1216040201496E8585DEFD
+6CADDA0F07070402015586A17ED1FB7ED1FB4B728E3347567BCCFC7CCCF344667D040201456981
+7ED1FB44667D04020139526477C5F67BCCFC85DEFD64A1CB3E5A6E0F0707040201040201040201
+2322235351516E6966B2B1B2D3D3D4F2F2F3F2F2F3F2F2F3F1F0F0C5CDD1C1C0BF817D7B4B4644
+3933310E0C0E040201040201090A0B44667D5A8DB188DEFD8EEDFD77C3F33347560402015F98B0
+74BAEA7BCCFC1B1D2133475604020145698174BEF16BAFDE6FB5D70E121604020104020128333C
+77C4E985DEFD6EB2E2090404393331FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A4949161A1E53829479C9F46BAFDE6099BC
+0402010F0C0B72BCD36FB5D736566B161C215C92A977C3F373BCED80D5FC2B39460D0E0F0E0C0E
+24343F5E97A680D4F5568CA8334F631B242B15131142474D7A7877A59F9CCBCBCCFAF9F8FFFFFF
+FFFFFFFFFFFFFCFCFBF8F8F9FCFCFBF8F8F9FFFFFFFBFBFAFAF9F8FFFFFFFCFCFBFFFFFFFFFFFF
+F6F6F6CAC8C7A9A8A88784833F3D3D1E1A1912181C334F635D93B073BDED649CAA71BBEB6FB8EA
+7BCCFC1C2329090404090A0B74BEE673BDED69AAC8141B20131416456D815382942F4759161F25
+6EB5DD80D5FC5E9ABF090A0B141110CDCCCBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF25201F14111085DEFD74BEF16EB2E06BAFDE7CCCF34D7794
+0402011B1D210402010402016FB5D76BAFDE7BCCFC6AACD674BEF17ED1FB28333C85DEFD96F1FF
+619BC00402010904040E12166E6966FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4F2FAF9F8F6F4F2
+F6F4F2F7F7F6F0EFEEF7F7F6FEFEFBF0EFEEFAF9F8F6F4F2F6F4F2F6F4F2F6F4F2F6F4F2FAF9F8
+F6F4F2FFFFFFFFFFFFFFFFFFFFFFFFB0ADAC0F07070402010402014D77947BCCFC74BEF185DEFD
+1E2A320402015A8DB17CCEF77BCCFC0F070713141685DEFD74C0EC74BAEA85DEFD334F630F0707
+74BEF176C1EE85DEFD0E12161E1A19FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF25201F0402014F7C9174BEF174BAEA77C5F674BAEA6EB4E385DEFD28333C
+0402011A16167BCCFC78C6ED85DEFD74BEF113141644667D85DEFD88DEFD85DEFD44667D040201
+040201797675FFFFFFFFFFFFFFFFFFFFFFFFF0EFEEF6F4F2F0EFEEFFFFFFF7F7F6F6F4F2FFFFFF
+F6F4F2FFFFFFF7F7F6F0EFEEFEFEFBF6F4F2FFFFFFF6F4F2FAF9F8F6F4F2FFFFFFF6F4F2F6F4F2
+F6F4F2F6F4F2FFFFFFFFFFFFFFFFFFFFFFFF6567690402010402013246577BCCFC85DEFD416078
+2D3C487ED1FB77C5F64D77940402014160787BCCFC73BDED6FB8EA74BAEA4F7A89040201629DC5
+72BBE97ED1FB7BCCFC0904046E6966FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF7472720904044569817BCCFC6EB4E0517F9C385970517F9C70B9E674BEF17CCEFB2A3A47
+0F0C0B4E799377C5E936566B0904043C5C657CCCF372BBE94161710904041E1A198B8989EDEDED
+FFFFFFFAF9F8FEFEFDF6F5F3F7F6F4FAF9F6F8F6F5FAF9F6F6F4F2F8F6F4FAF9F8F6F4F2F8F7F5
+F7F6F4F6F5F3FAF9F6FAF9F6F8F6F4F7F6F4F7F6F4F8F6F5FAF9F6F6F4F2F8F6F5FAF9F8F6F4F2
+F8F6F5FAF9F8F6F4F2F6F5F4FAF9F8FFFFFFEDEDED9C9998433C38090A0B2F47596BAECC80D5FC
+6FB6E773BDEA334756040201629DBD75C2F34D79985382A380D5FC497088090A0B69A9D572B9E9
+6BAEDC78C6ED578DAF0402013F3D3DE5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6B3B2
+04020168A7D27BCCFC73BDE10402010402010402010402011B242B85DEFD74BEF172BBE9040201
+0402010F0C0B0402015686A789E5FD4D7794040201090A0BBABABAFFFFFFFFFFFFF6F4F2FAF9F6
+FEFEFBF6F4F2FAF9F6F0EFEEFEFEFBFAF9F6F0EFEEFEFEFBFAF9F6F6F4F2F6F4F2FAF9F6F0EFEE
+FAF9F6FEFEFBF0EFEEFAF9F8F6F4F2FEFEFBF7F6F4F6F4F2FEFEFBF7F6F4F6F4F2FFFFFFFAF9F6
+F6F4F2F6F4F2FAF9F8FFFFFFF6F4F2FFFFFFFFFFFFFFFFFF97989A0E1216040201527E9E85DEFD
+7BCCFC527E9E04020156889C74BEF14B728E04020128333C81D7FC74BEF174BEF16FB4E46EB2E2
+6EB2E27CCCF35686A70402016E6968FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F9FA0F07072D4454
+85DEFD7BCCFC36566B0402013E5A6E67A5D125201F04020122272B85DEFD7CCEF74D7794040201
+04020174BAEA96F1FF4B728E040201040201BDBCBCFFFFFFFFFFFFF6F4F2FFFFFFF3F1F0F6F4F2
+FEFEFBF6F4F2FEFEFBF0EFEEF7F6F4F6F4F2F6F4F2F6F4F2FFFFFFF0EFEEF7F7F6FEFEFBF6F4F2
+F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2F6F4F2FEFEFBF0EFEEFAF9F6F6F4F2F6F4F2F6F4F2F6F4F2
+FFFFFFF3F1F0F6F4F2F7F6F4FEFEFBF0EFEEFEFEFDFFFFFFFFFFFF332C290402012D3C4880D5FC
+7BCCFC0F07072F475985DEFD89E5FD28333C04020149788974BEF16EB2E26FB4E46FB8EA6BAFDE
+6FB4E485DEFD3E5A6E090A0BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAD9D80F0C0B1411106EB3D377C3F3
+50768D161C2171B4C97ACBF374BFEB7CCEF73E61710402011E2A3274C0F27CCCF35C93B568A5C2
+6DABBE314D60181413818080E6E5E4FBFBFAFAF9F8FAF9F8F8F8F6F3F1F0F8F6F5FAF9F6F7F6F4
+F8F8F6F6F4F2FAF9F6F5F4F4BDBCBCFFFFFFF7F6F5F7F6F4F7F6F4F8F7F5F7F6F4F8F6F4FAF9F6
+F6F4F2F8F8F6F7F6F4F7F7F6F8F7F5FAF9F6F6F4F2F8F7F5F7F6F4FAF9F6F8F8F6F7F6F4F7F6F4
+F8F6F4FAF9F8F7F6F4FAF9F6F6F4F2F8F7F5F7F7F6FAF9F8EDEDED8180801C16121E2B3574B7CE
+7FCDEA1D2C3624343F43697D161A1E090A0B619CBF6FB6E76FB4E46EB4E46BAFDE6FB4E46EB4E4
+74BCED81D5F72E47561E1A19CBCBCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B57570402016FB8EA77C5F65F99C0040201
+1314166FB8EA85DEFD6DB3E46BAFDE77C5F60E121604020166A5CD69AAD67BCCFC5F98B0040201
+040201D0CFCEFFFFFFF6F4F2F6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FAF9F6FFFFFFF0EFEEFAF9F6
+F6F4F2FFFFFFCBCBCC0E1216535151FFFFFFF0EFEEFEFEFBF6F4F2FEFEFBF7F7F6F6F4F2FEFEFB
+F6F4F2F6F4F2FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6
+FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FFFFFFF7F7F6FFFFFFFFFFFF393C3F0402013E5A6E
+8DE7FE3E5A6E1314160F070774BAEA73BDED74BAEA6BAFDE6DB3E474BAEA6BAFDE7BCCFC69AAD6
+7BCCFC75C0ED0402010F0707EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF090404527E9E85DEFD6DB3E47BCCFC4D7794040201
+0F070764A1CB81D3F369AAD67CCCF328333C04020168A9D17BCCFC7BCCFC161A1E040201D3D3D4
+FFFFFFF6F4F2FFFFFFFAF9F8F0EFEEFEFEFBF6F4F2FEFEFBF7F6F4F0EFEEFEFEFBF7F6F4F6F4F2
+F6F4F2DAD9D8D1D0CF4B4644CBCBCCF6F4F2F6F4F2FAF9F6F6F4F2F7F6F4FEFEFBF0EFEEFAF9F6
+FEFEFBF0EFEEFAF9F6F6F4F2FFFFFFF7F6F4F6F4F2F6F4F2F7F6F4FEFEFBF6F4F2F6F4F2F6F4F2
+F7F6F4FEFEFBF6F4F2FAF9F6F0EFEEFEFEFBF6F4F2F6F4F2FFFFFFDCDCDC040201040201609AA9
+85DEFD72BBE974BEF17BCCFC6CB0E06BAFDE6FB8EA6BAFDE6FB8EA85DEFD4B708A040201629DC5
+81D7FC44667D04020186888AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFE6E5E42B29292F455080D5FC6CB1E06DB3E46DB3E47CCEED5A8FAE090A0B
+040201456C807CCCF365A3C5090404212E377ED1F550768D0F0C0B454545FAF9F8FFFFFFF7F6F5
+FAF9F8F3F1F0F8F7F5FAF9F6F3F1F0F8F8F6FAF9F6F7F6F4FAF9F6F6F4F2F8F6F4FAF9F8F7F6F4
+E9E9E89F9FA0F3F2F1A8A6A5FFFFFFF6F4F2F7F6F5FAF9F6F8F6F4F7F6F4FAF9F6F8F7F5F3F1F0
+FAF9F6F7F6F5FAF9F6F6F4F2F8F7F5F7F7F6F7F6F4F8F7F5F6F4F2FAF9F6F7F6F5F7F7F6F6F5F3
+FEFEFDF3F1F0FAF9F6F3F1F0FEFEFBF6F5F4F6F4F2FEFEFBFBFBFAF7F7F67A78770D0E0F5C92A9
+79C8F96FB6E76FB4E46EB4E46BAFDE6FB4E476C2F15F98B02F47590907071B242B04020167A8C9
+81D7FC4568801E1B1AEDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF0E121604020168A9D16BAFDE6BAFDE6FB8EA6BAFDE6FB8EA73BDE87BCCFC22272B
+0402013E5A6E24343F0E121685DEFD56889C0402011A1616FAF9F8F6F4F2F6F4F2F6F4F2F6F4F2
+F6F4F2FAF9F6F6F4F2FEFEFBF7F6F4F6F4F2FAF9F6F0EFEEFEFEFBFAF9F6F0EFEEFEFEFBD3D3D3
+878584FFFFFF908E8DFFFFFFF6F4F2FAF9F6F0EFEEFAF9F8F6F4F2F6F4F2F7F7F6FEFEFBF6F4F2
+FAF9F6F0EFEEFEFEFBF7F6F4F6F4F2F6F4F2F7F6F4FFFFFFF0EFEEFAF9F6FEFEFBF6F4F2FEFEFB
+F0EFEEF7F7F6FEFEFBF0EFEEF7F7F6FFFFFFF6F4F2F6F4F2F2F2F3FFFFFF7B7A7A0402015C92A9
+74BEF16BAFDE6FB4E474BEF185DEFD3B5E760402010F0707507D9C96F1FF1A16162B404F85DEFD
+85DEFD24343F392217FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+A4A5A60402014568807ACBF775C2F36CB1E06EB2E26DB3E46DB3E46FB4E472BBE977C5F6426774
+04020122313C8DE7FE6AA5B60D0E0F878383FFFFFFFAF9F8FAF9F8F6F4F2F8F8F6F7F7F6FAF9F6
+F8F6F4FAF9F8F3F1F0F8F6F4FAF9F8F7F6F4FAF9F8F3F1F0F8F7F5FAF9F6F6F4F2DBDADAB7B5B4
+FFFFFF747475FFFFFFFAF9F6F7F6F4FAF9F6F8F7F5F3F1F0FAF9F8F8F6F4F7F6F4F7F6F4F8F6F5
+FAF9F6F7F6F4F8F8F6F3F1F0FEFEFBF6F5F3FAF9F6F3F1F0F7F6F4FEFEFBF6F5F4F7F6F4FAF9F6
+F8F6F4F7F6F4F7F6F4F8F7F5F7F6F4F7F6F4F8F8F6FAF9F8F3F1F0F9F8F871717012181C64A2BD
+7CCCF373BCED507C9324343F0B0B0B334F63090404578EA87BCCFC79C7F619242D3D5B727CCEFB
+5C97B4040201AEAFB2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF272422
+33475685DEFD68A9D15686A77BCCFC6DB3E46BAFDE74BAEA6BAFDE74BAEA6BAFDE7CCEF7629DC5
+7FCDEA4D77940402017A7877FFFFFFF6F4F2F7F7F6FEFEFBF6F4F2FAF9F8F6F4F2F6F4F2F7F6F4
+FEFEFBF6F4F2F7F7F6FEFEFBF6F4F2FEFEFBF6F4F2F7F6F4FEFEFBFFFFFFC3C2C1CDCBCAFFFFFF
+8B8886FFFFFFFFFFFFF6F4F2FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2F6F4F2FAF9F6F0EFEE
+FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FEFEFBF6F4F2FEFEFBF7F6F4F0EFEEFEFEFBFAF9F6
+F0EFEEFEFEFBF6F4F2FEFEFBF6F4F2FAF9F6F0EFEEFFFFFFF3F1F0FFFFFF6B6A6A0402015A8DB1
+71B4C9040201040201619CB596F1FF629DC50F0C0B7BCCFC74BEF15E95B444667D7BCCFC79C8EF
+28333C454342FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDBDB090A0B74BAEA
+85DEFD3C5E750402017BCCFC6EB4E36FB8EA6BAFDE6FB8EA6BAFDE6FB8EA6BAFDE7BCCFC77C4E9
+040201040201D3D3D3FFFFFFF6F4F2F7F6F4F0EFEEFEFEFBF7F6F4F6F4F2FFFFFFF7F6F4F0EFEE
+FEFEFBF7F6F4F6F4F2FAF9F6F6F4F2F6F4F2F7F6F4F0EFEEFEFEFBC7C5C4C5CDD1F0EFEEB5B3B2
+FFFFFFFFFFFFF7F6F4F6F4F2FAF9F6F6F4F2F6F4F2F7F6F4FFFFFFF6F4F2F7F6F4FEFEFBF6F4F2
+FAF9F6F6F4F2F6F4F2F7F6F4FEFEFBF6F4F2FAF9F6F0EFEEFAF9F6FEFEFBF0EFEEF7F6F4FEFEFB
+F6F4F2FAF9F6F6F4F2F6F4F2FAF9F6F6F4F2F6F4F2FAF9F8FFFFFFCAC8C704020104020180D5FC
+28333C4D77947CCEF76BAFDE85DEFD181F244A718C7BCCFC79C5F27BCCFC6EB2E274BFEF74BAEA
+090404FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F8F8312C2C31475881D7FC7CCCF3
+12181C5C93B57BCCFC6AABD46AACD66FB6E76EB4E46BAFDE71B9EA6DB1E17CCEF730495A141110
+B6B4B2FBFBFAF7F6F4FAF9F8F8F6F4F7F6F4FAF9F6F8F6F5F6F4F2FAF9F6F8F8F6F3F1F0FEFEFB
+F6F5F3F6F4F2F6F5F4FFFFFFFFFFFFF6F5F4FAF9F6FFFFFF9B9998F1F4F4FAF9F89D9D9DFFFFFF
+FFFFFFF8F6F4F3F1F0F8F8F6F7F6F4FAF9F8F8F7F5F3F1F0FAF9F6F8F8F6F6F4F2FAF9F6F7F6F4
+F7F6F4FAF9F8F8F6F4F7F6F4F7F7F6F8F7F5F6F4F2F8F6F5FAF9F6F7F6F4F8F6F4FAF9F8F7F6F4
+F8F7F5F3F1F0FAF9F8F7F6F4FAF9F6FAF9F6F6F5F4F6F4F2FCFCFBA5A2A10904043B566285DEFD
+77C3F36EB4E46BAFDE71BBED629DC266A5CD73BDED75C0ED74C0EC74BFEF71B8E77BCCFC293C4A
+4B4645FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9A8A8040201619CB57ED1FB3E5A6E283C4A
+7ED1FB7ED1FB2F475928333C85DEFD6DB3E46FB8EA6BAFDE78C6ED5A8DB1040201FFFFFFFFFFFF
+FAF9F8F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2F6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FEFEFBF7F7F6
+FFFFFFFFFFFFB6B3B27A6355FEFEFDF0EFEEFFFFFFAFADACF0EFEEFFFFFF9499A0FFFFFFFEFEFB
+FAF9F6F6F4F2FAF9F6F0EFEEFEFEFBF6F4F2FEFEFBF0EFEEF7F6F4FEFEFBF0EFEEFAF9F6F6F4F2
+F6F4F2F7F6F4FEFEFBF6F4F2FAF9F6F0EFEEF7F6F4F6F4F2F6F4F2F6F4F2F6F4F2FEFEFBF6F4F2
+FFFFFFF6F4F2FAF9F6F0EFEEFFFFFFFAF9F8F6F4F2F7F7F6FFFFFFDFE0E004020164A1CB7BCCFC
+6FB4E46BAFDE74BAEA6EB2E07BCCFC85DEFD5D94BA4D7794527E9E77C3F374BAEA56889C040201
+7B7979FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8783830F070779C7F66BAFDE0402015D888F7ED1FB
+7ED1FB090A0B74BAEA74BEF16CB0E06FB8EA6BAFDE77C5F60F0707585858FFFFFFF6F4F2F7F6F4
+FEFEFBF6F4F2FAF9F6F0EFEEFFFFFFFAF9F6F0EFEEFEFEFBF7F6F4F6F4F2F6F4F2FFFFFF97989A
+E3E3E18F470F0F0707E9EDF0F6F4F2FFFFFFD5D4D4DCDBDBF0EFEED2D1D1FFFFFFF0EFEEF7F6F4
+FFFFFFFFFFFFFFFFFFF0EFEEFAF9F6F0EFEEFEFEFBF6F4F2F6F4F2FFFFFFF7F6F4F6F4F2FEFEFB
+F7F6F4F6F4F2F6F4F2FAF9F6F6F4F2FAF9F8FFFFFFFFFFFFFAF9F6FEFEFBF6F4F2FAF9F6F0EFEE
+FEFEFBF6F4F2FEFEFBF0EFEEF7F6F4FEFEFBF7F7F6FFFFFFFFFFFF4543420E12167BCCFC6EB4E3
+6FB8EA6BAFDE75C2F36BAFDE334756090404040201040201283C4A7BCCFC77C4E90402010E1216
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2726274A728D7DD0FC456881040201212E3756889C36556B
+324B5681D7FC6AACDA70B6E76BAFDE75C2F34C7A92040201D2D0D0FAF9F8F6F4F2FAF9F7F3F1F0
+FAF9F8F7F6F4FAF9F6F6F4F2FAF9F6F6F4F2FAF9F6F7F6F4FFFFFFE2E6E8A16B56CD623662351F
+F78953B87144F2F7F9FFFFFFDAD8D6BEBCBCDEE5E8E8E6E4D9D7D6FEFEFDF3F1F0FCFCFBC7C5C4
+3637396F6D6CFAF9F8FBFAF9F7F6F4F6F4F2FAF9F7F6F4F2FAF9F6F6F5F3FAF9F6F7F6F4F8F8F6
+F3F1F0FEFEFBF6F5F3FFFFFFA4A3A2686665A9A8A8FBFBFAFEFEFBF0EFEEF8F8F6FAF9F6F7F6F4
+F8F7F5F6F4F2FAF9F6F7F6F4FAF9F6F8F6F4F6F4F2FFFFFFBFBEBE040201283C4A77C5F26EB2E0
+72BBE9558BA80402010904042F4455507C93497889192027283C4A7FD3F83D5363090404B2B1B1
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFCDCBCA13141685DEFD6FB6E785DEFD64A1CB161A1E040201040201435E72
+7BCCFC85DEFD6FB4E474BAEA7BCCFC161A1E7B7979FAF9F8FFFFFFF6F4F2FAF9F6F6F4F2FEFEFB
+F7F6F4F0EFEEFEFEFBF7F6F4F0EFEEFEFEFBF6F4F2FFFFFF9FACB8C95A2DA6715FD67C52F78754
+6B3412F1F9FAFFFFFF7B7979DAD9D8DCDBDBF0EFEEC3C3C4FFFFFFFEFEFBFAF9F86068719DA4AC
+28333C25201FEDEDEDFFFFFFF6F4F2F3F1F0F6F4F2F6F4F2FAF9F6FEFEFBF0EFEEFAF9F6F6F4F2
+F6F4F2FFFFFFBABABAC7C5C46068710F0707FFFFFFF0EFEEFEFEFBF6F4F2FEFEFBF0EFEEF7F7F6
+FEFEFBF6F4F2F6F4F2F6F4F2F7F6F4FEFEFBF0EFEEFFFFFF6356510402015C92A96FB8EA7BCCFC
+161A1E0E121674BAEA80D5FC74BEF174BEF169A9BD04020164A2BD74BEF10F07077F7B7AFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF4B4644283C4A85DEFD6CB0E06BAFDE7BCCFC77C4E933475604020104020125201F
+527E9E75C2F37BCCFC5F99C0040201FFFFFFF7F7F6FEFEFBF0EFEEF7F7F6FEFEFBF6F4F2F6F4F2
+FEFEFBF6F4F2F6F4F2FEFEFBF0EFEEFAF9F6FFFFFFFFFFFFC4938076401CC26D4448200C92A8B7
+F7F7F6FFFFFFDCDBDBDFE0E0DCDBDBF6F4F2ACAAA9FFFFFFFFFFFFC6C4C3556E7D8D9AAA8D9AAA
+4B46448D9195FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4F2F6F4F2FEFEFBF7F6F4F6F4F2FFFFFF
+D3D3D397989AFAF9F8C1C0BF878584FAF9F8FEFEFBF0EFEEF7F6F4FEFEFBF6F4F2FAF9F6F6F4F2
+F6F4F2FAF9F8FFFFFFF7F6F4F0EFEEFEFEFBFAF9F8FFFFFF04020137586F85DEFD74BEF1090404
+629DC585DEFD71B6E66BAFDE6BAFDE77C5F6040201446F8985DEFD44667D393533FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+D3D2D10904044B789271B8E975C0F074BEF178C6ED73BCED78C6ED72BBE9446C7F161A1E040201
+4E7C8E74BFE7090A0B6A6868FFFFFFF8F6F5FAF9F8F7F6F4F8F7F5F7F6F4F7F7F6F8F7F5F7F6F4
+F7F7F6F8F7F5F7F6F4FAF9F6F8F7F5F0EFEEFFFFFF756E6C6E462A764832CFD5DBFFFFFFFBFAF9
+FFFFFFBBBAB9E1E1E1E2E6E8FFFFFF7672719A97966A778075797F9299A2848F9E8D9AAA909CA9
+808D9B6A6E7573767A6C72765F5E5DCBCBCCFEFEFEF7F7F6F3F1F0F8F8F6FFFFFFDCDCDCA4A2A1
+EFEFEFD6D5D5A4A2A1FEFEFDF6F5F4FAF9F6FAF9F6F8F6F4F7F6F4F7F6F4F6F5F3FEFEFBF3F1F0
+F8F6F4FAF9F6F8F7F5F6F4F2FAF9F6F7F6F5FFFFFFBDBCBC0F131677C4E985D7F80E090A79C7F6
+77C5F66BAEDD6FB4E46FB6E770B7D90402014767807BCCFC75C2F30E0C0DE6E5E4FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF393331
+0402016CAFD67BCCFC466A830E12163E5A6E74BEF16BAFDE6BAFDE79C8EF85DEFD629DC57CCCF3
+22272B040201CBCBCCFFFFFFFAF9F6F0EFEEFEFEFBF6F4F2F6F4F2FEFEFBF6F4F2FEFEFBF6F4F2
+FAF9F6F0EFEEFEFEFBFAF9F6F0EFEEFFFFFFC4AF9FFF9D66857065FFFFFFF0EFEEFEFEFDB6B3B2
+4B4644FFFFFFDFE0E0393331090A0BABBAC393A1AF8793A28D9AAA8793A2818C9A8D9AAA818C9A
+8D9AAA97989A96A3B133475625201FAB928DFFFFFFFFFFFFE8E7E7878584CDCBCAEDEDEDFFFFFF
+7A7775FFFFFFFFFFFFF7F7F6F0EFEEFEFEFBF6F4F2FEFEFBF6F4F2FAF9F6F0EFEEFFFFFFF7F6F4
+F0EFEEF7F6F4FEFEFBF6F4F2F6F4F2F6F4F2FFFFFF3935333347568EEDFD212E373E5A6E96F1FF
+7CCEFB85DEFD7BCCFC283C4A04020164A1C86BAFDE7BCCFC283C4A6E6966FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E12160F0707
+79C7F66EB2E20402010402010402014A71897BCCFC7BCCFC7AC9F374BEF17BCCFC77C4E9040201
+0F0707FFFFFFF0EFEEF7F6F4FEFEFBF6F4F2F6F4F2FEFEFBF0EFEEF7F7F6FEFEFBF0EFEEFAF9F6
+F6F4F2FEFEFBF7F6F4F0EFEEFFFFFFB0988AF78754AD9A8EFFFFFFFEFEFBF7F7F6CDCBCA4B4644
+D5DCE139221748200C393C3F9FACB88D9AAA818C9A93A1AF99A6B393A1AF818C9A8793A28D9AAA
+92A8B7704C43F78754AB4F2D832B12BABABAFFFFFF858281BABABAF6F4F2EDEDEDBABABAAFB3B8
+FFFFFFF0EFEEFAF9F6FEFEFBF0EFEEFAF9F8F6F4F2F6F4F2F7F7F6FEFEFBF6F4F2FAF9F6F6F4F2
+FAF9F8F0EFEEFEFEFBFAF9F8F6F4F2FFFFFF81808004020174BEF144707F0402013E5A6E629DC5
+5686A722272B04020122272B7BCCFC69AAD67BCCFC416078040201FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C8C70402013A55687FD1F7
+1B242B2E47546DABBE3E596D293D4B5485982536430F13160F070779C7F64F7F97040201B5B4B3
+FCFCFAF6F4F2FAF9F6F3F1F0FAF9F6F8F6F5FAF9F6F7F6F4F8F7F5F6F4F2FAF9F6F7F6F4FAF9F8
+F3F1F0F8F7F5FEFEFBFFFFFFBD8267F78754BDA79FFFFFFFF0EFEEF8F8F6FFFFFFD5D4D4826551
+412210131416919AA2818C9A8793A2919AA55D60673D383655585A8A96A485919F8D9AAA9299A2
+7C6054AD65407C4E38DF8A59682D172F2928E6EAEBEDEFEFE6E5E4D7DADBA5A2A0FBFBFAFAF9F6
+FAF9F6F8F6F5F6F4F2FAF9F6F7F6F4FAF9F6F7F6F4F7F6F4FAF9F6F6F4F2F8F7F5F7F6F4F8F6F4
+FAF9F6F3F1F0F8F7F5FAF9F8F7F7F6C4C3C20402012E3F4D7AC9E9334F63131416060302090404
+161A1E4166787BCCFC70B6E46CB1E071BBED53859F090404B5B4B3FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8180800F070769AAD673BDE1040201
+56889C7BCCFC629DC50904040402011A161643647C74BAEA85DEFD2F47593D3A3AFFFFFFFAF9F8
+FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FEFEFBF6F4F2FEFEFBF0EFEEFAF9F8F6F4F2FEFEFB
+F7F6F4FFFFFFCDE1E9BF6745F78754BBAA9DFFFFFFFFFFFFF7F7F6F3F9FAFFFFFF4B464525201F
+9FACB88793A28D9AAA818C9A8793A293A1AF6A6C727B79795E79839299A2818C9A8D9AAA77909D
+4B4644A26A48D16B40FFB575F78754635E60D5EAF0F3F9FABABABAFFFFFFFAF9F8FEFEFBF0EFEE
+F7F6F4FEFEFBF6F4F2FAF9F6F0EFEEFEFEFBF6F4F2F6F4F2FEFEFBF6F4F2FEFEFBF7F7F6F6F4F2
+FEFEFBF7F7F6F6F4F2FFFFFFFFFFFF39221704020172BBE97BCCFC85DEFD6CB1E07BCCFC85DEFD
+73BDED6BAFDE71BBED7BCCFC6BAFDE6EB4E00F070725201FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B76750E121674BAEA66A4C104020177C4E9
+7BCCFC527E9E090A0B527E9E74BEF181D7FC7BCCFC7ED1FB1B242B959190FFFFFFF7F6F4F6F4F2
+FAF9F6F0EFEEFEFEFBF6F4F2FEFEFBF0EFEEF7F7F6FEFEFBF6F4F2F6F4F2FEFEFBF6F4F2F6F4F2
+FFFFFF92A8B7D0683BF07641DFC6BFFFFFFFF0EFEEFAF9F6F6F4F2FFFFFF86888A818C9A9FACB8
+8793A2818C9A818C9A8793A28D9AAA8D9AAA8D9AAA93A1AF818C9A97989A818C9A6B7D8B334756
+44667D4438308D5434E47F53D16D3F7A6355A38678838A8DFFFFFFFFFFFFF0EFEEF6F4F2FAF9F6
+F0EFEEFEFEFBF6F4F2FEFEFBF0EFEEFAF9F6FFFFFFF0EFEEFAF9F6F6F4F2F7F6F4FEFEFBF0EFEE
+FAF9F6F6F4F2F0EFEEFFFFFF6F767E0402015C93B56BAFDE6FB8EA77C5F674BEF174BEF17BCCFC
+85DEFD77C5F66BAFDE74BEF177C3F3120D0C120D0CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C49483D586D85DEFD466A810402013C5C72609AA9
+1314164B798D85DEFD77C5F66FB5E577C5F66EB4E3100C09FFFFFFFAF9F8F8F6F5FAF9F6F6F5F4
+FEFEFBF3F1F0F8F8F6F7F6F4F7F6F4F8F6F4FAF9F6FAF9F6F8F6F4F3F1F0FEFEFBF8F8F6FFFFFF
+9D8F89F37E48FA8C59967E75FFFFFFF7F6F4F7F6F4FAF9F6FFFFFF5C616681818481909D7E93A7
+7D88967D88968B949F8793A28793A28A96A4818C9A85919F8A96A493A1AF5E595A30333696A3B1
+677B874A2E1A49332893664EF78754F78953C96F41BB7D628E837CEFF7FAFAF9F8F7F6F4FAF9F6
+F6F4F2F8F8F6F7F6F4FAF9F6F6F4F2FAF9F6FAF9F6F8F7F5F3F1F0FAF9F6F3F1F0FAF9F6F7F6F4
+FAF9F6F7F6F4FBFBFAEDEDED1E120C3D627A77C3F36EB4E35D95B34E799337586F2E4658253643
+12171B0402012936427ED1F9313D46090404D9D3D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF130C0B69AAD67BCCFC5C92B722272B040201040201040201
+140E0E3952644D77946FB6E77ED1FB3E5A6E454342FFFFFFFFFFFFF6F4F2F6F4F2FAF9F6F0EFEE
+FEFEFBF6F4F2FEFEFBF6F4F2F6F4F2F6F4F2FFFFFFF7F7F6F6F4F2F6F4F2FAF9F8E0F0F5945C33
+FA8C59F78754BBA48FFFFFFFFFFFFFFAF9F6F6F4F2FFFFFF632525E30A0393A1AF9435276E6966
+97989A62798B5E798383878C7586909FACB88793A2818C9A4D77948C929A9FACB8556E7D56616A
+0F0707606871F9FCFC48200CF78754F78754FD925EE07846603D25F3F9FAFAF9F8F6F4F2FEFEFB
+F7F6F4F6F4F2F6F4F2FAF9F8F6F4F2F6F4F2F7F7F6FEFEFBF6F4F2FFFFFFF6F4F2FAF9F6F6F4F2
+F6F4F2F7F7F6FFFFFF6E69662D445496F1FF25201F0402010402010402010F07072D3C484A708A
+0E12160F07077CCCF35F99C004020193999DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFE9E7E6100C0C74BFEF74BEF172BDE877C5F66CB0D65C93B550768D2D4555
+1E2A320402013B5F7778C6ED090A0B838181FFFFFFFAF9F8F8F7F5F3F1F0F8F8F6FAF9F6FAF9F6
+F8F6F4F7F6F4F7F6F4F8F8F6F7F6F4F7F6F4F8F7F5F7F6F4FAF9F6FBFAF9A3ACB5C44F21F98C58
+F37E4AC7AFA1FFFFFFF7F7F6FBFAF9FFFFFFA5A2A13E2017967B73646B70BC3326A69285B3CAD3
+AA2318832B129D9B97B5291CA3302AABB1B4864646C01009A48A80657A86C010096F372FAEB2B5
+FFFFFFFFFFFFAEBCC1827367E67F4EF37E4AF98C58F78953B6532ECED2D3FAF9F8F0EFEEF8F7F5
+FAF9F8F7F6F4F8F8F6F7F6F4F7F6F4F8F6F4FAF9F6F7F6F4FAF9F6F3F1F0F8F7F5FAF9F6F7F6F4
+F7F6F5FFFFFFDCDCDC0D0E0F78C8F36DB2D75586A45F99BC78C5E1304A5C6098BF8AE1FD42627A
+04020170B7D96EB2E00F0707838383FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFCDCBCA161A1E7BCCFC74BAEA6FB4E474BAEA6BAFDE6BAFDE74BEF17CCEFB85DEFD
+7BCCFC76C1EE5686A70402019C9998FFFFFFF0EFEEF7F6F4FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6
+F6F4F2F6F4F2FAF9F6FEFEFBF0EFEEF7F6F4FEFEFBF0EFEEFEFEFD92A8B7E55E26FB925DFF9D66
+6A5D5BFFFFFFCDCBCA8988896F767E48200CD47E3EB56728A75E208B65538B76676F767E4E3C34
+606871937A77E30A039E170FA7B6C16068716B341286828297989A5351513C38384B4644D4DCE1
+FFFFFFFFFFFFFFFFFF857065F78754FB925DF78754F78754B5A18DFFFFFFF0EFEEFAF9F6F6F4F2
+FEFEFBF7F6F4F0EFEEFEFEFBF7F7F6F0EFEEFAF9F6F6F4F2FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6
+FFFFFFFFFFFF14111069AAD67BCCFC6FB8EA74BEF185DEFD212E3733475683DBFD69AAD6040201
+5F99B57BCCFC25201F6E6968FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF87858424343F85DEFD6BAFDE6DB3E46FB8EA6FB4E46BAFDE74BEF17CCEFB74BEF174BEF1
+7CCEFB476B85040201B6B4B2FFFFFFF6F4F2FAF9F6F0EFEEFAF9F6F6F4F2FEFEFBF7F7F6F6F4F2
+FEFEFBF3F1F0F6F4F2FEFEFBF6F4F2FEFEFBF6F4F2FEFEFD7A6355D16030FB925DF78754B35B2E
+5E798348200C0402016B3412D9823FA96735A96735C3763BCF772D48200C0E1216B270416B3412
+0E12160402011D21266D49316D4931535151241D1C7E4B26CF7B3ECF7B3EB5672848200CB6AEA7
+FFFFFFFFFFFFDDF5F70E1216E38149F78754FF9D66C3907CFFFFFFFEFEFBF6F4F2F6F4F2F6F4F2
+FAF9F6F6F4F2FEFEFBF6F4F2FEFEFBF7F7F6F6F4F2F6F4F2F7F6F4FEFEFBF6F4F2FAF9F6FFFFFF
+FFFFFF1E1A195F99C07BCCFC6EB2E08EEDFD44667D0402010402017ECFEF3952640402015789A9
+85DEFD3347565F5E5DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+494442324B5D7BCCFC6EB2E073BEEA78C6ED6DB2DD5C92A941688326374309040404020177C4E5
+21272E040201E5E5E4FAF9F6F6F4F2F8F8F6F7F6F4F8F6F4FAF9F6F7F6F4F6F5F3FAF9F6F7F6F4
+F8F8F6F7F6F4FAF9F6F8F6F4FAF9F6F3F1F0FCFCFACBCBCC975A40ED8551F37E4AFD9D6579371C
+231A16A26335BC7139A96735B06932AF672E9D6034955B2F91582C8B532D6C3D209C5F31A76331
+AD673EB16C37AF6637B76C30D16823704223B16C37AE652986532BB16C37B96E329D5017746B6A
+AAB6BEA28378C68454F78853FB925DCD6237DBD9D7F6F4F2FAF9F6F7F6F5FAF9F6F7F6F4F8F6F4
+FAF9F6F7F6F4F8F7F5F6F4F2F8F7F5F7F6F4FAF9F8F8F6F4F7F6F4F7F7F6F8F7F5F0EFEEFFFFFF
+57555430404C7ED2FC6AADD224343F040201446874212E370C09080402011B242B6FB4E07BCCFC
+517F9E3C3735FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1216
+41607874BEF17BCCFC619BC028333C0904040402010402011B1D21527E9E6DB0DF79C5F2040201
+040201FFFFFFF0EFEEFFFFFFF6F4F2FEFEFBF7F7F6F6F4F2F6F4F2FAF9F8F6F4F2F6F4F2F7F6F4
+FEFEFBF6F4F2FAF9F6F0EFEEFFFFFFF7F7F6FFFFFFE3F4F6B87554FF9D66C57852393331B26F3A
+232223BA7139BA7139BA723A6D493148200CF08420E97E1FF08320D5751EF88B21D2721E985720
+9B6034804921F08320F08320C16B1EE97E1FF08320AD5B19A96735BA713963433248200C17110F
+5A341ECF7B3EFB925DA33E196F767EFFFFFFF6F4F2FEFEFBF7F6F4F0EFEEFEFEFBF6F4F2FEFEFB
+F0EFEEFAF9F6F6F4F2F7F6F4FEFEFBF0EFEEFAF9F6F6F4F2F6F4F2F7F6F4FFFFFFFFFFFF7B7D7D
+0402018EEDFD2D44540402013952647ED2FC7BCCFC5382A25F99C07BCCFC6FB6E77BCCFC5F99C0
+1E120CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0707496E85
+7BCCFC5F99C009040404020113141644667D3347563C5E758EEDFD74BEF16EB4E004020125201F
+FFFFFFFFFFFFF0EFEEFAF9F6F6F4F2F6F4F2FEFEFBF6F4F2F7F6F4FEFEFBF6F4F2FAF9F6F0EFEE
+FEFEFBF6F4F2FEFEFBF0EFEEF7F6F4F0EFEEFFFFFF857065F787542F211BA26A486D49318D572F
+BA7139A96735945A34A75E20985720E57D20D0721DDB7820E27B1FDB7820E57D20F08320F08320
+DE7A20DB7820F08320F88B21B567280F0707B567288D5434BA71397949288353309665458C5C3A
+503525B36741535151F3F9FAF7F7F6FFFFFFF0EFEEFAF9F6F6F4F2F6F4F2F7F6F4FEFEFBF6F4F2
+F6F4F2FFFFFFF7F6F4F6F4F2F6F4F2FAF9F6F6F4F2FEFEFBF7F6F4F0EFEEFFFFFF7D7B79040201
+85DEFD3451663E5A6E85DEFD6EB4E36FB8EA7BCCFC7BCCFC6BAFDE6DB3E47BCCFC64A1CB1E1A19
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F2EF0E0C0E47708981D7FC
+3A526406060630404C70B7DA96F1FF3B5669395A7074BEF16AACDA6CB0DB0402012F2928FFFFFF
+F6F4F2F6F4F2F8F7F5F7F7F6F8F7F5F7F7F6F7F6F4F7F6F4FAF9F6F6F4F2F8F7F5F7F6F4FAF9F8
+F8F7F5F3F1F0FAF9F6F8F6F5FFFFFFDCDCDC2B2322432A18885B425E3F2B9E6234B76F3989562F
+AE6328D87720E98120F88B2194511BF48720C87120B5631BE98120C87021844A1A98561CE37F24
+C871208A4D1B6D3E14A05516342822DA771C4A301E945A34BC713A59402E7B533886573D825B4A
+764730754F48B0B1B0FEFEFEF0EFEEFEFEFBF6F5F3FAF9F6F7F7F6F8F7F5F3F1F0FAF9F8FAF9F6
+F3F1F0F8F7F5F7F6F4FAF9F6F7F6F5FAF9F6F3F1F0FAF9F6FAF9F6FFFFFF88888804020171BBED
+7BCDF979C7E472BBE973BDEF74BEF175C1F375C2F377C5F675BFED74BEF16DB3E40E0C0EFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0EFEE0F07074E799374BAEA7BCCFC
+4E78960402010402013E5A6E1A16164A72827BCCFC6BAFDE68A9D10402013D3A3AFFFFFFFEFEFB
+F6F4F2FAF9F6F6F4F2FAF9F6F6F4F2FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2F6F4F2F7F6F4
+FEFEFBF6F4F2FEFEFDFFFFFF39333152362696654566432BBA7139BA7139AA6836B56728F08320
+D5751EDB7820F083208049216B3412503525814A2876401C100F11F88B2148200C48150B1B1C1E
+DB7820A25F278A5226DB7820B7651E503525BA7139AD6B37CF7B3E5035257B5338835330693919
+3922174B4644FEFEFDFEFEFBF6F4F2FAF9F6F0EFEEFEFEFBF6F4F2FFFFFFF6F4F2F7F6F4FEFEFB
+F6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FEFEFBF6F4F2F0EFEEFFFFFF9C908B04020174BAEA497889
+0402010F07070F07070E121614141622272B22272B4262787BCCFC74BAEA0F0707FEFEFBFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDBDB040201507C9374BEF16BAFDE80D5FC
+6BAFDE1B242B0402010402013346557BCCFC7BCCFC68A7CC040201535151FFFFFFF0EFEEFEFEFB
+F7F6F4F6F4F2FAF9F6F0EFEEFEFEFBF6F4F2F6F4F2FFFFFFF7F7F6F6F4F2FEFEFBF7F6F4F0EFEE
+FEFEFBF7F7F6BABABA0402019058336D4931A66332BA7139BA71395F3014A75E20835330F08320
+DB7820DB7820F08320E97E1FF08320F48720985720B3611EF88B21F88B219B4A21DB7820F88B21
+F48720F88B21F08320E47E1F603D25B26F3AA96735BA71398A52265E4130532C1399A0A3F0EFEE
+FFFFFFF7F7F6FEFEFBF0EFEEF7F7F6FEFEFBF6F4F2FAF9F6F0EFEEFEFEFBF7F6F4F0EFEEFAF9F8
+F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2FAF9F6FFFFFFFEFEFB9C999804020169AAD656889C040201
+0402010904040402010F07070F07070402011B242B85DEFD74BAEA0E0C0EFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D5D50F0707507C9774BAEA6CB0E06EB3E373BDED
+78C6F364A2BD3D5B7214171B090404293C4972B6CE0402016F6765FFFFFFF6F4F2FAF9F6F8F7F5
+F3F1F0F8F7F5F7F6F4FAF9F6F8F8F6F3F1F0FAF9F6F7F6F4FAF9F6F6F4F2F8F6F5FAF9F6F7F6F4
+FEFEFE574E4A161A1EACA09C2B292990735B4C2A18BA7139A3643771482A693919955723A8622A
+BE6B2ADD791FDB7820DB7820DB7820E98120E27C20D5751EE57D20E77F20E27B1FDB7820DC781E
+A3591CA05B28B2672676401C945A34B16C37AD6B37CF762D845B3FEDEDEDFCFCFBFAF9F8FAF9F8
+F8F7F5F7F6F4FAF9F6F8F6F4F7F6F4FAF9F8F8F7F5F3F1F0FAF9F6F8F6F4FAF9F6F7F6F4FAF9F8
+F6F4F2F8F7F5F7F6F4F7F7F6F8F7F5F3F1F0FAF9F89C949104020166A5D07BCDFB77C5F670B7E0
+619BC24B708A283A481314160904042B405085DEFD71B9EA0F0808FAF9F8FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDBDB0F07074E799374BEF16BAFDE6FB4E46BAFDE6EB2E0
+6EB2E27BCCFC7CCCF344667D68A7D269AAC8040201535151FFFFFFF6F4F2F0EFEEFAF9F6F6F4F2
+F7F6F4FFFFFFF0EFEEFAF9F6FEFEFBF6F4F2FAF9F6F0EFEEFEFEFBF6F4F2FEFEFBF6F4F2F7F7F6
+FFFFFFFFFFFFFFFFFFFFFFFFBAA694D0721DB26F3AAD6B379B60349B6034BA71398A5D40603D25
+DE7A20DB7820DB7820DB7820DB7820DB7820DB7820DB7820DB7820DB7820DB7820D2721E8D5434
+BA7139AA6836603D259B6034B26F3A8D54346D4931703A17BABABAF7F7F6FEFEFBF6F4F2FAF9F6
+FEFEFBF0EFEEFAF9F6F6F4F2F6F4F2F7F6F4FFFFFFF6F4F2F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2
+F6F4F2F6F4F2FEFEFBF7F7F6F0EFEEFFFFFF9C999804020169AAD6588CA8040201040201040201
+04020130404C4D7794629DC579C7F674BEF174BAEA0E0C0EF6F4F2FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFDCDBDB0F07074E799374BAEA6FB8EA71B9EA74BAEA71B9EA74BAEA
+6BAFDE74BCED7ED1FB74BEF166A5CD040201535151FFFFFFF6F4F2FEFEFBF7F7F6F6F4F2FAF9F6
+F6F4F2F6F4F2F6F4F2F6F4F2FEFEFBF6F4F2FEFEFBF0EFEEF7F6F4FEFEFBF0EFEEFAF9F8FFFFFF
+FFFFFFFEFEFDFFFFFF845532B26F3AA96735A96735BA7139BA7139B16C37B4621CE27C20DE7A20
+DB7820DB7820DB7820DB7820DB7820DB7820DB7820DB7820DB7820DB7820E07A1E835330B26F3A
+B16C37BA7139B26F3AB16C378F470F5E7983BFB0A9878584FFFFFFF6F4F2F6F4F2F6F4F2F6F4F2
+FEFEFBF7F6F4F6F4F2FEFEFBF7F6F4F0EFEEFEFEFBFAF9F6F0EFEEFAF9F6F6F4F2FFFFFFFAF9F8
+F6F4F2F6F4F2FAF9F6F6F4F2FFFFFF9A94910402016BAFDE3F677E0402010F070721272E74BEF1
+96F1FF85DEFD7BCCFC71B8E974BEF174BAEA100A09FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFF0EFEE0904044E7B9274BEF1517F9C4B77924E7993517F9C5789A95A8FB0
+5B91B2619CB56EB4E36CAFD4040201423C3AFFFFFFF7F6F4F7F6F4F8F6F4FAF9F6F7F6F4F7F6F4
+FAF9F6F8F8F6F7F6F4F7F6F4F6F5F4FAF9F6FAF9F6F8F6F4F7F6F4F7F6F4F8F7F5F7F6F4FAF9F6
+FBFAF98489919F5324A96735A96735AB6936AD6B37AD6B37AD6428F48720F08320E07A20DB7820
+DB7820DB7820DB7820DB7820DB7820DB7820DB7820DB7820DB7820BF6B20583925C4763BAA6631
+AD6B37A96735A76530BC71399C4D10CDC1B8FFFFFFF8F7F5F7F6F4FAF9F6F8F7F5F7F6F4F6F4F2
+F8F7F5FAF9F6FAF9F6F8F6F4F7F6F4F7F6F4F6F5F3FEFEFBF6F5F4F7F6F4F7F6F4F8F6F4FAF9F6
+F7F6F4F7F6F4FAF9F6FFFFFF8D8D8E0402016FB6E776C1E259868E3C60792D44540E0C0E1D272E
+36566B4E799367A7CF7BCCFC6EB2E00F0908FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFF2F2F30F07074978897BCCFC040201040201040201040201040201040201040201
+0402010F070777C4E904020125201FFFFFFFF6F4F2F6F4F2FAF9F6F0EFEEFAF9F6F6F4F2FEFEFB
+F6F4F2FEFEFBF0EFEEFAF9F6FEFEFBF6F4F2FAF9F6F0EFEEFEFEFBF6F4F2FEFEFBF0EFEEFFFFFF
+7A6355B26225A96735B26F3AAD6B37A967359B6034CF7420B4621C985720874B1EF08320DB7820
+DB7820DB7820DB7820DB7820DB7820DB7820DB7820DB7820B96720BA7139A96735AD6B37B26F3A
+A96735AD6B37B26F3ABA7139876967FFFFFFF7F6F4FEFEFBF0EFEEF7F6F4FFFFFFF0EFEEF7F6F4
+FEFEFBF0EFEEF7F6F4FEFEFBF6F4F2FAF9F6F0EFEEFAF9F6F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2
+FAF9F6F0EFEEFFFFFF86888A04020174BAEA6AACD65686A769AAD671BBED69AAD645688125201F
+0402012F475985DEFD69AAD6130C0BFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF040201496E857BCCFC629DC54D77944D7794486E885A8DB14D77940E0C0E040201
+04020177C4E904020125201FFFFFFFF6F4F2FFFFFFF7F6F4F6F4F2FAF9F6F6F4F2F6F4F2FAF9F6
+F0EFEEFEFEFBF6F4F2F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2F7F6F4FEFEFBF0EFEEEDEDED503525
+A8622AA96735A96735A96735A967359B6034D6761E6D49318A5D40905321F08320DB7820DB7820
+DB7820DB7820DB7820DB7820DB7820DB7820F88B2192592DBA7139A96735AD6B37A96735A96735
+A66737A96735B26F3A987356FFFFFFFAF9F6FEFEFBF6F4F2FAF9F6F6F4F2FEFEFBF7F7F6F6F4F2
+F6F4F2FAF9F6F0EFEEFFFFFFF6F4F2FEFEFBF7F6F4F6F4F2F6F4F2F7F6F4FEFEFBF6F4F2F7F6F4
+F6F4F2FFFFFF86828104020185DEFD37586F0402010402010402010F070719191A0E12160F0707
+2F475985DEFD629DC51A1313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF1E18173D5A717BCCFC6EB4E37BCDF97CCEF7598E9A2D44541314162B42515C92A96EB4E3
+78C5F1090404040201F9F9F8FAF9F6F3F1F0F8F7F5FAF9F8F7F6F4F7F6F4FAF9F8F8F6F4F7F6F4
+F7F6F4F8F7F5F7F7F6F7F6F4F6F5F4FEFEFBF3F1F0F8F8F6F7F6F4F7F6F4CDD0D4592A0FC2753A
+A2612FB16C37AD6B37B26F3A8E4F1E905428BA7139804921E07D22D5751EDB7820E07A20DB7820
+DB7820DB7820DB7820D17421A05516A8622AAB6732A96735AD6B37AA6631A96735AD6B37A2602C
+937C6EA66D45AB7E5DFEFEFDF8F7F5F3F1F0FAF9F6F8F7F5F6F4F2FAF9F6F7F6F4F7F6F4F6F4F2
+FAF9F7FAF9F8FAF9F8FAF9F8FAF9F8F8F6F5FAF9F6F7F6F4F8F7F5F6F4F2FAF9F8F8F7F5F3F1F0
+FFFFFF716F6E1B1D217BCCFC70B5D04978894C7691466A824166803C5B723C586E334F635386A9
+80D5FC5E95BB241F1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+6356512F47597BCCFC74BEF15C93B50E12160402013E5A6E6EB2E280D5FC6EB2E26BAFDE78C6ED
+28333C040201DCDCDCF6F4F2FEFEFBF6F4F2FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FEFEFB
+F6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FEFEFBF7F6F4F6F4F2FFFFFFC5BAB38F470F6845288A5226
+BA7139A96735A96735BA7139B67039A96735A75E20E57D20DB7820F88B21BB6923DB7820DB7820
+DB7820DB7820E07A1E503525BA7139AD6B37A96735A96735AD6B37B26F3AA96735A15F2AFFFFFF
+FFFFFF7B6B64FFFFFFF7F6F4FEFEFBF6F4F2F7F6F4FEFEFBF0EFEEFAF9F6F6F4F2FFFFFFFFFFFF
+FFFFFFFFFFFFF9FCFCFFFFFFFFFFFFF0EFEEFEFEFBF7F7F6F0EFEEFEFEFBF6F4F2FEFEFBFFFFFF
+4D4D4D39526485DEFD43647C7BCCFC85DEFD74BCED74BEF17BCCFC7BCCFC7BCCFC73BDED7BCCFC
+527E9E3F3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878584
+24343F85DEFD7BCCFC1314160402014A718D96F1FF85DEFD7CCEFB7ED1FB85DEFD79C7F644667D
+040201B6B4B2FFFFFFF0EFEEF7F6F4FEFEFBF7F7F6F0EFEEFEFEFBF6F4F2FFFFFFF0EFEEFAF9F6
+F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2F7F6F4F6F4F2FFFFFF928883A6715F4B4D4DCF7B3EB26F3A
+A96735B26F3AA96735B26F3A8E5E3EB4621CEC801FE97E1F76401CC16E23DB7820DB7820DB7820
+DB7820E57D20A75E20A96735AD6B37A96735B26F3AA96735A75E20B26F3A9F5C27DCDBDBFFFFFF
+D0D1D2FFFFFFFAF9F6FEFEFBF0EFEEFAF9F6F6F4F2F6F4F2FAF9F8FFFFFFFFFFFF9796958F8B8A
+7A6355755342606871B8B7B5FFFFFFF0EFEEFAF9F6F6F4F2FEFEFBF7F7F6F6F4F2FFFFFF272422
+5A8DB18EEDFD0402010E121669AAD67CCCF369AAD66BAFDE6EB2E26BAFDE6BAFDE85DEFD334756
+585858FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCACA15191D
+7CCEF77BCCFC2A3B481B242B1311130F07070E0C0E1B1C201B242B1B242B4E7D9567A3CD040201
+979493FFFFFFF7F6F4F8F8F6F6F4F2F8F6F4FAF9F6F7F6F4F7F6F5FAF9F6F6F4F2F6F5F4FAF9F6
+F3F1F0F6F5F3F6F4F2F7F6F4F6F4F2F7F6F4F7F7F6F2F2F1FFFFFF89604E844E2A714426B16D38
+A96735AD6B37B16B3371482AD2721EA85D1FB16C377B4D2BD3731EDB7820DB7820DB7820DB7820
+E37C1F92552AA66737AD6B37A96735B16C37A36434A96735AD6B3792501FCDD7DDFFFFFFFBFAF9
+F4F6F6F7F6F4F3F1F0FAF9F6FAF9F8FFFFFFDCDCDCC1BBB7795C4B633A20704124804A2D804A2D
+83512F7A48296E3F20BEA191FFFFFFF8F8F6F7F6F4F7F6F4F6F5F3FFFFFFFFFFFF0907066EB4E3
+7CCEF7588BA7161A1E0904043A596D7BCCFC76C0EB6CB1E071B9EA6FB5E577C5F6181719777474
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4F20F070774BAEA
+74BEF180D5FC7ED1FB81D7FC96F1FF7ED1FB3A52640F070704020136566B85DEFD0402017D7B79
+FFFFFFF0EFEEF7F6F4FEFEFBFAF9F6F0EFEEFEFEFBF6F4F2FEFEFBF0EFEEFEFEFDFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAE9E84C443E758690532C13BC7139A96735
+A96735BC7139603D25532C13A36236A967359B6034E27B1FDB7820F08320DB7820DB7820D6761E
+835330BA7139AD6B37A75E20B26F3A7949289B6034BA71399B5217DCDBDBFFFFFFF1F4F4FEFEFB
+F6F4F2FFFFFFFFFFFFDDE2E47A635548200C5F30148A5D408B543F83553583573B83573B83573B
+8D54348A583F2D110BCDCBCAFAF9F8F0EFEEFEFEFBF6F4F2FFFFFFD3D3D41411107BCCFC74BEF1
+7CCEED44667D0402010904040402016DB2D27BCCFC69AAD671BBED6BAFDE0F0707808284FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2622215F98BE7BCCFC
+6FB7E674BCED53829B283C4A131416161C214160785B91AF75C1F17BCCFC507B99322F2DFFFFFF
+FFFFFFF8F6F5F6F4F2F8F7F5F7F6F4FAF9F6F8F6F5FAF9F8DCDCDCC2B6AFBCB1AAC1A997A89E98
+A09289AF9E92AF9B8DA4A29FC0A895B8ADA5706B6A92908F967A66AF5D1DAB6936B67039B67039
+A96633935D358D572FB46E38AD6B37804921E77D1FB7651E975424A85C1EC16E239F5C28B67039
+A96735AB6936B26F3ABA713985522CBA7139AD6B37B0662E9D6E4BC0C5CCFBFAF9FEFEFDE0E0E0
+A799907863597247317A4829935A398B5A3D8853327E5B4285563983573B83573B80593E835535
+87583E814A28675248F4F6F7F3F1F0FAF9F8FAF9F7FFFFFF4642412F495B80D5FC6BAFDE74BEF1
+090404181C2076BDD4334F6312171B446F8975C2F375C1EF5381A1040201ACAAAAFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56545433475685DEFD5D94BB
+0402010402010F070744667D7CCEF774BEF16BAFDE6BAFDE7BCCFC6FB8EA090404FFFFFFFFFFFF
+F7F6F4F0EFEEF7F7F6FEFEFBF0EFEEFFFFFF9FACB80F0707703A1776401C76401C814A288D5434
+8D543487533776401C83533071442676401C6A3A20532C13CF7B3EBA7139835330503525794928
+B26F3AA96735AD6B37B26F3A9B60348E4F1E8D5434BA71399B60349B6034B67039A96735B26F3A
+B0672CBA7139835330AA6836B26F3ACF7B3E794C2B98572048200C959CA1A386784D260F8A5226
+8A5D408B583A83573B83573B7E5B427A63558D543483573B83573B83573B83553583573B83583D
+8A5D406B3412C3C2C1FEFEFBF6F4F2F7F7F6F2F2F30402013C607981D8FD7BCCFC74BDD7040201
+5F99C077C4E96FB8EA29364204020128333C80D5FC28333C0F0707E6E5E4FFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7171700E121674BEF156889C040201
+374F5F7BCCFC85DEFD6EB4E374BEF174BEF171B8E974BAEA7ED1FB161A1EA8A7A7FFFFFFF7F6F4
+F6F4F2FAF9F6F6F4F2FFFFFFD0CFCE48200C945C33865A3D8A5D408A5D40835B448D543483573B
+83573B8A5D408B543F8D59397A635589562F232C33D9823F84522D603D25503525B67039A96735
+A96735A96735A96735BA7139945A34BA7139A96735BA7139BA7139A96735BA7139A96735B36B39
+8353306D4931BA7139B26F3A603D25342822532C13603D25592A0F603D258B583A8A5D408B543F
+8853327A635583533088533283533083533083573B83573B83573B83573B83573B7E5B428D5434
+76401CD3D3D3F6F4F2F6F4F2FFFFFF8785840402015F98B0629DC53E5A6E30404C0F07071A1616
+0402010402010402010402014D77947CCCF30F07070F0707FAF9F8FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF98959509040465A0C877C3F368A9D176C2EF
+74BCED77C4E96AABD4517F9C446F894F789171BBED80D5FC355267272422F7F7F6FBFAF9F6F4F2
+FAF9F6F3F1F0FFFFFF7B6B639A5636865A3D87553D83573B83573B85563983573B83573B83573B
+83573B83573B82583F885332754D326D43258E4F1E74513A6D503D603A22B67039A96735AD6B37
+AD6B37A8622AAD6B37AD6B37B26F3AAA6631A96735AD6B37B56D37975C312E27257146298B5833
+C9793C965B2C774D317D5337895E438C5C3A885A3C8B583788533283573A83553583573B83573A
+83553583573B83573B835B4483553583573B83573B83573B83573B83573B845636835330573119
+F8F9F9F7F6F4F6F4F2F7FBFC1E120C0402017ACBF729364213141622303B2F4759334F633E5D75
+4E7993619DB66AACD673BDED6BAED304020153453EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC04020128333C75C2F36BAFDE71B8E985DEFD
+33475604020104020104020104020104020169AAD6649CAA0402017B7979FAF9F8F6F4F2FAF9F6
+F6F4F2FFFFFF9679678B543F8353307E5B4283573B83573B83573B83573B83573B83573B83573B
+83573B83553583573B754D325035258A5D408855378A5D408E5E3EB16C37A96735B26F3AAC662D
+A96735B26F3AA96735A96735AD6B37A96735B26F3A8D572F603D25CF7B3EBA7139BA71398F470F
+2F231D8D54348D54347E5B428D543483573B83573B7A6355835B448D543483573B83573B83573B
+83573B83573B83573B83573B83573B83573B83573B83573B7A6355824F2D48200CBABABAFEFEFD
+F6F4F2FFFFFF9C99980402014D779475C2F37BCCFC7BCCFC80D5FC7BCCFC7BCCFC74BEF174BAEA
+6BAFDE6BAFDE74BEF1446F890F0707DFE0E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F07070F070777C3F374BAEA78C6ED334756040201
+0904043952644D77943F5C710402010E12167BCBE90402011D2126FFFFFFF0EFEEFAF9F6F6F4F2
+FFFFFF5A4B47A6715F8A5D4088553783573B83573B83573B83573B83573B83573B83573B83573B
+8855377A63558A583F8A5D408D54348460498E5E3E532C13B0672CA96735B26F3AAD6B37A96735
+A96735A96735B26F3AA96735B26F3ABA713971482ABA7139C4702FB16C378F470F727070D0CFCE
+532C13532C138853328D54347A63558A5D4083533083533083573B83573B83573B83573B83573B
+83573B83573B83573B83573B83573B83573B8B583A8D54346C3E21DCDBDBFFFFFFFAF9F8F6F4F2
+FFFFFF81808004020168A7D280D5FC7BCCFC74BAEA6BAFDE6BAFDE6FB8EA6DB3E46BAFDE74BCED
+6BAFDE7BCCFC4168830F0707FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E5C5C040201619DC26EB2E05C93B5040201212E376CB0D1
+7ACBF378C6ED7ED1F338576D0904046AA8BB36556B040201ADADAEFFFFFFF6F4F2FEFEFBF7F7F6
+BFBDBC4C494837271D6941288C5E408C5E40805A4183573B83573B83573B83573B83573B80583C
+835535885C3E76482C77432172533E7A7272A5A2A1AB60359F5A21AD7F5BA77854B3682BAD6B37
+AD6832B670399D5A289D5317985520AF6831A96735AD6B379F581FAB9788FFFFFFFBFAF9EAF4F7
+C8D3DB94847C9277668B644C5F3E2C613F2B7648297A4829804E2E805235865A3D865A3D87573A
+7E5D48885537815232724B336A3A2085644F927D73D4D3D3F9FCFCF7F7F6F7F6F4F7F7F6FFFFFF
+272423486E898EEDFD23333E36566B5C92A975C0EA73BDED6EB5E671B9E868A9D1558AAC73BDED
+7CCEFB24303A8C8887FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFF2F2F30F07074671887BCCFC4569810402016BAFDE72BBE96BAFDE
+6BAFDE77C5F685DEFD0E12163C607985DEFD0F0707565454FFFFFFFAF9F6F6F4F2FEFEFBF7F7F6
+FFFFFFFFFFFF768287040201532C13915C3C7A63558D543483573B83573B7A63558C54398D5434
+5F30148B7667E8E6E4F7F7F6FFFFFFFFFFFF774321FFFFFFFFFFFFD3D3D348200CBA7139AC662D
+76401C9B9895BBC5CAE0F0F5936F54BA7139A96735A48064FFFFFFF3F9FAF7F6F4FEFEFBFEFEFB
+FFFFFFFFFFFFFFFFFFEFF7FABABABAC7D0D57B79796F767E654C3D532C1339221759341C603D25
+532C1360534DCDCBCABBC5CAFFFFFFFFFFFFF9FCFCFEFEFBF6F4F2FAF9F6FFFFFF878584131416
+7BCCFC7BCCFC2E3F4D04020104020113171A629DC585DEFD80D5FC0F0707334F6385DEFD74BAEA
+090404FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFF4B46442B404F7ED1FB5789A90402015A8DB173BDED74BEF17ED1FB
+72BBE93952641A16161B242B96F1FF5686A7090A0BFFFFFFF7F7F6FEFEFBF0EFEEFEFEFBFEFEFB
+FFFFFFFFFFFFBBC5CA1D21261F0F0B8A52268A5D408658388E5E3E8D5434703A1748200C908E8D
+FFFFFFFFFFFFFEFEFDF3F9FAFFFFFFD7DFE2FFFFFFF3F9FAF1F9FA835330B4621CA45C24A38678
+FFFFFFFFFFFFFFFFFFD1C2BBAA5412A75E208E8B86FFFFFFF0EFEEF7F6F4FEFEFBF0EFEEF8FBFA
+F3F9FAFEFEFBFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFF7F7F6D4DCE1D4DCE1D0D1D2E6E9EBF0EFEE
+F9FCFCFFFFFFFFFFFFF9FCFCF0EFEEFAF9F6F0EFEEFEFEFBF7F7F6FFFFFF04020136566B85DEFD
+6BAFDE7CCEFB527E9E0E121604020104020122272B629DC50402014B728E85DEFD44667D2B2929
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFDCDCDC12101277C4E974C0EE0402011B222970B6D350768D2B404F0C0908
+090A0B24343F4D7B9977C4E980D5FC1F2F3A494645FEFEFDF3F1F0FAF9F6F6F5F3FAF9F6F7F6F4
+FAFAF8FEFEFDFFFFFFCBD1D5A39286927766836453756256928177B6B5B4E9EDF0FCFDFDF7F7F6
+F7F6F4F5F6F5FEFEFBF1F4F4FBFAF9F8FBFAF7F6F4FEFEFD95857E9C4D10A67E5EFFFFFFF8F8F6
+F7F6F4FAF9F6F9FCFC73666287360FBDAB9AFFFFFFFEFEFBF7F6F4F3F1F0FEFEFBF7F6F4F3F1F0
+FEFEFBF6F5F3F6F4F2FAF9F6F7F6F4FEFEFBF8F9F9F7F7F6F9FCFCF8F9F9F7F7F6F9FCFCFBFAF9
+F1F4F4F8FBFAF7F6F4F7F6F4F8F7F5FAF9F6F3F1F0FCFCFA39353304020164A3C46BAFDE6DB3E4
+6FB5E578C6ED77C5F66198B62F4759161A1E090404090A0B79C9EE6BADDB090404858180FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFF3F3D3D33475681D7FC44667D040201090404040201040201466A837BCCFC
+85DEFD77C3F36BAFDE74BAEA5C92A9040201A9A8A8FFFFFFF6F4F2F6F4F2FEFEFBF0EFEEF7F6F4
+F6F4F2F3F9FAFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F9FAF8FBFAFEFEFBF0EFEE
+F7F6F4F6F4F2FEFEFBF7F6F4F0EFEEFEFEFBF7F7F6DCDBDB6B3412D5CAC3FEFEFBF7F6F4FEFEFB
+F0EFEEFEFEFBFFFFFFAB95875A5655FFFFFFF3F9FAF7F6F4FEFEFBF0EFEEF7F6F4FEFEFBF0EFEE
+F7F6F4FEFEFBF7F6F4F6F4F2FEFEFBF7F6F4FEFEFBF6F4F2FEFEFBF0EFEEFEFEFBF4F6F6FEFEFB
+F0EFEEFAF9F6FEFEFBF7F6F4F0EFEEFFFFFF9C99980402013E5A6E78C6ED74BAEA6BAFDE6DB3E4
+74BAEA6BAFDE6FB6E785DEFD85DEFD0F0C0B5A8DB180D5FC22272B040201CBCBCCFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF7F7B7A0F07077CCEFB74BEF104020109040444667D64A1CB80D5FC74BAEA74BAEA
+6BAFDE6FB8EA69AAD677C3F3040201686665FFFFFFFEFEFBFAF9F6F0EFEEFEFEFBF6F4F2FEFEFB
+F0EFEEF7F6F4F3F9FAF3F9FAFEFEFBFEFEFBFEFEFBF8FBFAF6F4F2F4F3F1FEFEFBF0EFEEFAF9F6
+FEFEFBF0EFEEF7F6F4FEFEFBF0EFEEFEFEFBFFFFFFCCB8A8A9A8A8F0EFEEF7F6F4FEFEFBF6F4F2
+F7F6F4FEFEFBFFFFFFD7D9DBFEFEFBF0EFEEF7F6F4FEFEFBF6F4F2FAF9F6FEFEFBF0EFEEFAF9F6
+F6F4F2FAF9F6F6F4F2F6F4F2FAF9F6F0EFEEFEFEFBF7F6F4F6F4F2FEFEFBF7F6F4F6F4F2FEFEFB
+F7F6F4F0EFEEFAF9F6FEFEFBFFFFFF5654540F07077BCCFC71BBED6BAFDE6FB8EA6DB3E46BAFDE
+74BAEA6BAFDE7BCCFC6BAFDE09040474BEF17CCCF30402010E1216FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFC9C7C709040453829C74BEF16AACD670B8E178C6ED73BDED6CB1E16EB5E66DB3E46EB4E4
+6FB4E46DB3E472BDE86BAECD0D0E0F979696FFFFFFF7F6F5F6F4F2FAF9F6F7F6F4F7F6F4FAF9F6
+F6F5F3FEFEFBF3F1F0F8F7F5F4F6F6FAF9F6F8F6F4F7F6F4F8F7F5FAF9F6F7F6F4F8F7F5F7F6F4
+F7F6F4F8F7F5F7F6F4FAF9F6F7F6F4F7F6F4FEFEFDF7F6F5F7F6F4F8F7F5F7F6F4F7F6F4F8F7F5
+F7F6F4F1F4F4FBFAF9FEFEFBF3F1F0F8F7F5FAF9F6F6F4F2F8F6F4FAF9F6FAF9F6F8F7F5F3F1F0
+FAF9F6F6F4F2FAF9F6F7F6F4F7F6F4FAF9F6F7F6F4F7F6F4F7F6F4F8F6F4FAF9F6F7F6F4F8F7F5
+FAF9F6F7F6F5FFFFFF83807E0F131672BBDE77C3F36FB3E26DB3E46FB4E46EB4E46DB3E46EB5E6
+6FB6E77CCEFB181C20354F6385DEFD4C7590090404B6B4B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF39333124343F85DEFD6BAFDE6BAFDE74BAEA6FB8EA6FB4E46BAFDE6BAFDE6FB4E46FB8EA
+6BAFDE6EB2E07BCCFC3C5E75040201A8A7A7FEFEFDF6F4F2F6F4F2FAF9F6F6F4F2FEFEFBF7F6F4
+F0EFEEFEFEFBF3F1F0FEFEFBF0EFEEF7F6F4FEFEFBF7F6F4F0EFEEFEFEFBF7F6F4F0EFEEFEFEFB
+FAF9F6F0EFEEFEFEFBF7F6F4FEFEFBF0EFEEFAF9F6FEFEFBF7F6F4F0EFEEFEFEFBF7F6F4F0EFEE
+FEFEFBF7F6F4F0EFEEFEFEFBF7F6F4F6F4F2F6F4F2F7F6F4FEFEFBF0EFEEF7F6F4FEFEFBF7F6F4
+F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2FAF9F6F6F4F2F6F4F2FAF9F6F0EFEEFEFEFBF7F6F4F0EFEE
+FEFEFD878584040201466C847BCCFC69AAD66FB8EA6BAFDE74BAEA6DB3E46BAFDE74BAEA6BAFDE
+74BEF174BAEA74BCED7BCCFC1E2A32635651FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+C5CDD10F070774BEF17BCCFC6DB3E46BAFDE6FB8EA6DB3E46BAFDE74BAEA6DB3E46BAFDE74BAEA
+6DB3E46BAFDE6FB5D7040201040201E6E5E4F6F4F2FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6FEFEFB
+F6F4F2F7F6F4FEFEFBF0EFEEFAF9F6F6F4F2FAF9F6F6F4F2F6F4F2FAF9F6F6F4F2FEFEFBF7F6F4
+F0EFEEFEFEFBFAF9F6F0EFEEFEFEFBF7F6F4F0EFEEF7F6F4FEFEFBF6F4F2F7F6F4FEFEFBF6F4F2
+F7F6F4FEFEFBF6F4F2F7F6F4FEFEFBF0EFEEF7F6F4FEFEFBF6F4F2FAF9F6F6F4F2F7F6F4FEFEFB
+F0EFEEF7F6F4FEFEFBF6F4F2F7F6F4FEFEFBF6F4F2FAF9F6F6F4F2FEFEFBF6F4F2FEFEFBDAD9D8
+04020104020173BDE869AAD66FB8EA6DB3E46BAFDE6FB8EA6FB4E46BAFDE6FB8EA6FB4E46BAFDE
+74BEF177C5F674BAEA040201FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+534F4E212E377CCEF770B8E86BAFDE71B9EA6EB4E46BAFDE71B9EA6EB4E46BAFDE6FB8EA6EB4E4
+6BAFDE76C1ED69A9BD161A1E424140FEFEFDF7F7F6F8F7F5F3F1F0FAF9F6F7F6F4F7F6F4FAF9F6
+F6F5F3FAF9F6F6F4F2FAF9F6F6F4F2F8F7F5FAF9F6F7F6F4F7F6F4FAF9F6F6F4F2F8F6F4FAF9F6
+F7F6F4F8F7F5F3F1F0FEFEFBF6F5F3FAF9F6F8F6F4F7F6F4F7F6F4F8F6F4FAF9F6F7F6F4F7F6F4
+FAF9F6F6F4F2FAF9F6F6F4F2FAF9F6F8F7F5F3F1F0FAF9F6F6F5F3FAF9F6F8F6F4FAF9F6F7F6F4
+F8F6F4FAF9F6FAF9F6F8F7F5F3F1F0FAF9F6F7F6F4F7F6F4FAF9F6F6F5F4FEFEFD3C39391E2A32
+6DB2D272BDE871B9EA6BAFDE6EB4E471B9EA6BAFDE6DB3E471B9EA6BAFDE6EB4E471B9EA6BAFDE
+75C0EB1B242B615D5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6B4B2
+04020128333C7CCEF76BAFDE74BAEA6DB3E46BAFDE6FB8EA6FB4E46BAFDE74BAEA6DB3E46BAFDE
+6EB2E074BEF185DEFD14111025201FFFFFFFF7F7F6FEFEFBF6F4F2FAF9F6F6F4F2F6F4F2FAF9F6
+F6F4F2F6F4F2FAF9F6F0EFEEFAF9F6F6F4F2FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FEFEFB
+F7F6F4F6F4F2FEFEFBF6F4F2FEFEFBF7F6F4F6F4F2F6F4F2FAF9F6F6F4F2FEFEFBFAF9F6F0EFEE
+FEFEFBF7F6F4F6F4F2FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FAF9F6F0EFEEFEFEFBF7F6F4
+F0EFEEFEFEFBF6F4F2F6F4F2FEFEFBF7F6F4F6F4F2F0EFEEF7F7F60402011B242B8EEDFD74BEF1
+6EB2E06BAFDE6FB8EA6DB3E46BAFDE74BAEA6DB3E46BAFDE6FB8EA6DB3E46BAFDE74BAEA507C93
+040201CBCBCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B5C5E
+0402015D94AF6FB6E76DB3E46EB4E46DB3E46FB4E46EB5E76BAFDE71B9EA6EB4E46DB3E46DB3E4
+6DB3E473BDED609EC00904041E1A19CDC7C5F7F7F6F7F6F4F8F7F5F7F6F4F7F6F4F8F6F4FAF9F6
+FAF9F6F7F6F4FAF9F6F8F7F5F3F1F0FAF9F6F8F6F4FAF9F6F3F1F0F8F7F5FAF9F6FAF9F6F8F7F5
+F3F1F0FAF9F6F8F6F4F7F6F4F6F5F3FEFEFBF3F1F0F8F6F4FAF9F6F7F6F4F7F6F4FAF9F6F7F6F4
+F6F5F3FEFEFBF0EFEEF8F7F5FAF9F6F7F6F4F7F6F4FAF9F6F8F7F5F6F4F2FAF9F6F6F5F3FEFEFB
+F3F1F0F8F6F4FEFEFBF3F1F0F8F6F4FAF9F8FAF9F848464710111368A5C56FB6E76DB3E46DB3E4
+71B9EA6CB1E06FB4E46DB3E46FB8EA6EB4E46BAFDE71B9EA6DB1E173BDED7CCCF31920276D6B6A
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D3A3A
+1B242B85DEFD74BAEA6BAFDE6FB8EA6BAFDE6FB4E46FB8EA6BAFDE6DB3E46FB8EA6FB4E46BAFDE
+6BAFDE78C6ED7BCCFC0E1216090A0BF0EFEEFFFFFFF7F6F4F6F4F2F6F4F2F7F6F4FEFEFBF0EFEE
+FAF9F6F6F4F2F7F6F4FEFEFBF6F4F2FAF9F6F0EFEEFEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2
+FEFEFBF7F6F4F6F4F2FAF9F6F0EFEEFEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2F6F4F2FAF9F6
+F0EFEEFEFEFBFAF9F6F6F4F2F6F4F2FAF9F6F6F4F2F7F6F4FEFEFBF6F4F2FAF9F6F0EFEEFEFEFB
+FAF9F6F6F4F2F0EFEEFEFEFDFEFEFB0F070710111381D8FD72BBE96FB8EA6BAFDE6DB3E46FB8EA
+6FB8EA6DB3E46BAFDE6FB8EA6FB4E46BAFDE6FB8EA6FB6E785DEFD28333C272422FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0EFEE090404
+5F99C085DEFD6FB4E46BAFDE6FB8EA6DB3E46BAFDE74BAEA6DB3E46BAFDE6FB4E46FB8EA6FB8EA
+6BAFDE7BCCFC74BAEA090A0B0F0707F0EFEEFFFFFFF6F4F2FEFEFBF7F6F4F6F4F2FEFEFBF7F6F4
+F6F4F2FAF9F6F0EFEEFEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2
+F7F6F4FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FEFEFBF6F4F2FEFEFBF6F4F2F7F6F4FEFEFB
+F6F4F2F6F4F2FEFEFBF6F4F2FAF9F6F0EFEEFAF9F6F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2F6F4F2
+F6F4F2FEFEFBE6E5E404020104020153829B7BCCFC6CB1E06BAFDE6FB8EA6FB4E46BAFDE6FB8EA
+6DB3E474BAEA6BAFDE6DB3E46FB8EA6BAFDE7CCCF34D779404020186888AFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797777090404
+4B728E77C5F26BAFDE71B9EA6EB4E46BAFDE71B9EA6EB4E46BAFDE6EB4E471B9EA6BAFDE6DB2E2
+71B9EA72BBE96BAECC1E2A32040201868483FFFFFFF7F7F6F6F5F3FEFEFBF3F1F0F8F7F5F7F6F4
+F8F6F4FAF9F6F7F6F4F8F7F5F6F4F2FAF9F6F7F6F4FAF9F6F6F4F2F8F7F5F7F6F4FAF9F6F8F6F4
+F7F6F4F8F7F5F6F4F2FAF9F6F8F7F5F7F6F4F7F6F4F8F7F5F6F4F2FAF9F6F8F7F5F3F1F0FAF9F6
+F7F6F4FAF9F6F3F1F0F8F7F5FAF9F6F6F5F3FEFEFBF3F1F0F8F7F5F7F6F4F6F4F2FAFAF8FEFEFD
+A5A2A126242324343F609AA977C3EE6EB2E06DB3E46FB4E46DB3E46EB4E46DB3E46EB2E06EB4E4
+6DB3E46FB4E46EB4E46CB1E06FB6E75E99BE040201454040F2F2F1FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E1216040201
+69A9BD6BAFDE6BAFDE6FB4E46FB8EA6BAFDE6DB3E46FB8EA6DB3E46BAFDE74BAEA6DB3E46BAFDE
+6FB8EA6FB6E785DEFD44667D040201302E2DF0EFEEFFFFFFF6F4F2F0EFEEF7F6F4FEFEFBF6F4F2
+FEFEFBF0EFEEFAF9F6F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2F7F6F4FEFEFBF6F4F2FAF9F6F0EFEE
+FAF9F6F6F4F2FEFEFBF7F6F4F0EFEEFEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FEFEFBF7F6F4
+F6F4F2FEFEFBF6F4F2FEFEFBF7F6F4F6F4F2F6F4F2F7F6F4F6F4F2FFFFFFF7F7F61D2126040201
+283C4A85DEFD74BAEA6DB3E46FB8EA6DB3E474BAEA6BAFDE6DB3E474BAEA6BAFDE6DB3E46FB8EA
+6BAFDE6DB3E46FB8EA8EEDFD26303A1A1616FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCDCBCA0F0707334F63
+85DEFD6BAFDE6DB3E474BAEA6BAFDE6FB4E474BAEA6DB3E46BAFDE6FB8EA6FB4E46BAFDE6FB8EA
+6BAFDE74BEF185DEFD3B576C040201040201D3D3D3FFFFFFFEFEFBF6F4F2FEFEFBF7F6F4F0EFEE
+FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2F7F6F4FEFEFBF6F4F2
+FEFEFBF0EFEEFAF9F6F6F4F2F6F4F2FAF9F6F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2F7F6F4F6F4F2
+F6F4F2F7F6F4FEFEFBF6F4F2FEFEFBF6F4F2F7F7F6FFFFFFFEFEFB4543420402011D21267CCCF3
+6FB8EA6BAFDE6DB3E46BAFDE6DB3E46FB8EA6FB8EA6FB4E46BAFDE6FB8EA6DB3E474BAEA6BAFDE
+6DB3E485DEFD4D7794090A0BE8E6E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCC1B1715416883
+7CCEFB6FB7E66DB3E46DB3E46EB4E46DB3E46EB4E46FB4E46DB3E46EB4E46DB3E46DB3E46EB4E4
+6FB8EA6AACDA79C9F45F98B0334F63140B08706E6EB1AAA8FCFCFAF7F7F6F8F6F4FAF9F6F7F6F4
+F8F7F5F6F4F2FAF9F6F7F6F4FAF9F6F6F4F2F8F7F5F7F6F4FAF9F6F8F6F4F7F6F4F8F7F5F6F4F2
+FAF9F6F7F6F4FAF9F6F7F6F4F6F5F3FEFEFBF3F1F0F8F6F4FAF9F6F7F6F4F8F7F5F7F6F4FAF9F6
+F8F6F4F3F1F0F8F8F6F7F7F6FEFEFDC9C8C7686665090A0B20313D619CB57CCCF370B9E96DB3E4
+6DB3E46EB4E471B9EA6EB4E46CB1E06DB3E46EB4E46DB3E46FB4E46EB5E56BAFDE6EB2E077C4F0
+36566B040201938B87FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C99980402011A1616
+7BCCFC69AAD66FB8EA6DB3E474BAEA6DB3E46BAFDE74BAEA6DB3E46BAFDE74BAEA6FB4E46BAFDE
+6FB8EA6FB4E46BAFDE81D8FD629FBD040201040201393533F6F4F2FFFFFFFFFFFFF6F4F2F6F4F2
+F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2F7F6F4FEFEFBF6F4F2FAF9F6F0EFEEFAF9F6F6F4F2FEFEFB
+F7F6F4F6F4F2F6F4F2FAF9F6F0EFEEFEFEFBFAF9F8F0EFEEFEFEFBF6F4F2FEFEFBF6F4F2F7F6F4
+FFFFFFFFFFFFFFFFFF5351510402010402014D779480D5FC6FB8EA69AAD66FB8EA6BAFDE6FB8EA
+6DB3E46BAFDE6EB2E074BAEA6BAFDE6DB3E46FB8EA6FB8EA6CB1E06BAFDE7BCCFC456981040201
+535151FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A16160402015C92A9
+74BEF16BAFDE6DB3E46FB8EA6DB3E46BAFDE6FB8EA6FB4E46BAFDE6FB8EA6DB3E46BAFDE74BAEA
+6DB3E46FB8EA69AAD67ACBF769AAD6334756040201040201B5B4B3FFFFFFFFFFFFFFFFFFF6F4F2
+F0EFEEFAF9F6F6F4F2FEFEFBF7F6F4F6F4F2F6F4F2F7F6F4FEFEFBF6F4F2FEFEFBF0EFEEFAF9F6
+F6F4F2FEFEFBF6F4F2FEFEFBF0EFEEF7F6F4FEFEFBF6F4F2F6F4F2F0EFEEFFFFFFFFFFFFFFFFFF
+979696040201040201212E3774BAEA85DEFD6EB2E074BAEA6FB8EA6CB1E074BAEA6BAFDE6DB3E4
+6FB8EA6FB8EA6BAFDE6FB8EA6FB4E46BAFDE6FB8EA6CB1E07BCCFC85DEFD131416393331FFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F808212171B5C92A9
+7CCEF76DB3E36FB4E46EB4E46FB4E46DB3E46DB3E471B9EA6BAFDE6EB4E471B9EA6BAFDE6DB4E5
+6DB3E46FB8EA6CB2E276C3ED7ACBF366A5C936566B12181C1E1A1956545493918FE0DFDFFFFFFF
+FCFCFBFAF9F8FAF9F8FAF9F8FAF9F6F7F6F4F7F6F4FAF9F6F6F5F3F3F1F0FAF9F6F8F6F4F7F6F4
+F7F6F4F8F7F5FAF9F6FAF9F8FAF9F8FAF9F8F7F7F6FCFCFBDAD9D89C99986B6A6A141110151D23
+3C5E755F98B077C4F073BDED6FB4E46EB4E46EB2E06FB8EA6CB1E071B9EA6BAFDE6EB4E471B9EA
+6DB1E16FB4E46DB3E46EB4E46FB4E46BAFDE76C2F156889C13171A504D4DFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8082040201334756
+80D5FC6BAFDE6DB3E46BAFDE74BAEA6DB3E46BAFDE6FB8EA6DB3E46BAFDE74BAEA6EB2E06BAFDE
+6FB8EA6DB3E46BAFDE6FB8EA6BAFDE7BCCFC7CCEF75F99C025201F040201040201040201565251
+DCDBDBF0EFEEFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFEFEFDCDCBCA7B79791E120C0402010402011314165F99C07BCCFC7BCCFC
+6BAFDE6FB4E46BAFDE6FB8EA6FB4E469AAD66FB8EA6DB3E46FB8EA6BAFDE6FB4E46FB8EA6DB3E4
+6BAFDE74BAEA6DB3E46BAFDE7BCCFC50768D0402010E1216FAF9F8FFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF9F80E121604020150768D
+7BCCFC6FB4E46BAFDE6FB8EA6FB4E46BAFDE74BAEA6DB3E46FB8EA6BAFDE6DB3E46FB8EA6BAFDE
+6FB4E46FB8EA6BAFDE6FB8EA69AAD66FB6E781D8FD81D8FD65A2CC22272B040201040201040201
+0402012322237B7979A8A7A7D4D3D2DCDBDBF0EFEEFFFFFFF0EFEEF0EFEEDCDBDBDCDBDBB7B5B4
+7B7979392217090A0B04020104020104020128333C5A8DB17CCEF77BCCFC72BBE96FB8EA6BAFDE
+6DB3E46FB8EA6BAFDE6FB4E46FB8EA6FB8EA6EB2E06BAFDE6FB8EA6DB3E46FB8EA6DB3E46BAFDE
+6FB8EA6AACDA85DEFD74BEF1090A0B25201FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF9F88D8A880E0B0B466C84
+77C3EE6FB4E46BAFDE6EB4E46FB8EA6DB3E46FB3E26DB3E46FB4E46FB6E76CB1E06CB1E06EB4E4
+71B9EA6DB3E46DB2E26DB3E46DB3E46FB4E46DB3E475C2ED77C3F377C5F668A9D14671883C5E75
+324E6124343F1B242B0E0F10040201060302090404040201040201040201090A0B181F24283C4A
+314D60385970537C8E5F99B574C0EF75C2F378C8F370B7E66CB1E06EB4E46FB4E46DB3E46EB4E4
+6FB4E46DB3E46DB3E46FB4E46DB3E46EB5E56BAFDE6FB8EA6EB2E06FB8EA6EB4E46AACDA74BAEA
+76C3E83C6079090404585554FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A2A10402012D4454
+85DEFD74BEF16BAFDE74BAEA69AAD66FB8EA6BAFDE6FB8EA6DB3E46BAFDE6FB8EA6DB3E46FB8EA
+6BAFDE6FB4E474BAEA6DB3E46BAFDE6FB8EA6DB3E469AAD66FB8EA6CB1E074BAEA74BEF17BCCFC
+7BCCFC85DEFD80D5FC7BCCFC77C5F674BAEA74BEF177C5F67BCCFC7BCCFC81D8FD7BCCFC7BCCFC
+77C5F66FB8EA6FB8EA6BAFDE6FB8EA6BAFDE6DB3E474BAEA6DB3E46BAFDE6FB8EA6DB3E46BAFDE
+74BAEA6FB4E46BAFDE6FB8EA6FB8EA6BAFDE6FB8EA6DB3E474BAEA6CB1E074BEF185DEFD283C4A
+040201635651FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B7979090404395264
+85DEFD77C3F369AAD66FB8EA6CB1E074BAEA6BAFDE6FB4E474BAEA69AAD66FB4E46FB8EA6BAFDE
+6DB3E46FB8EA6FB4E46BAFDE6FB8EA6FB4E46BAFDE6FB8EA6FB8EA69AAD674BAEA6BAFDE6FB8EA
+6BAFDE6FB6E774BAEA74BEF174BAEA7BCCFC74BCED6FB8EA6FB8EA6DB3E46BAFDE6BAFDE6DB3E4
+6BAFDE6FB8EA6DB3E46FB8EA6BAFDE6FB4E46FB8EA6DB3E474BAEA6BAFDE6FB4E46FB8EA6BAFDE
+6DB3E46FB8EA69AAD66EB2E074BAEA6BAFDE6FB8EA69AAD67CCCF37BCCFC28333C09040497989A
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9A7A60F0C0B141110
+51839F7CCCF372BBE96CB1E171B9EA6BAFDE6DB3E46FB8EA6CB1E06FB6E76BAFDE71B9EA6EB4E4
+6DB3E46DB3E46FB4E46DB3E46DB3E471B9EA6CB1E06EB4E46DB3E46FB8EA6EB4E46BAFDE71B9EA
+6DB3E46DB3E46DB3E46FB4E46DB3E46DB1E16DB3E46DB3E46DB3E46DB3E46FB8EA6DB3E46DB3E4
+6DB3E46DB3E471B9EA6BAFDE6EB5E76CB1E06EB4E46DB3E46DB3E46EB4E46FB8EA6BAFDE6EB4E4
+6FB8EA6EB2E06EB4E46FB8EA6AACDA71BAE97CCCF34D7C94090A0B1C1612B1B2B3FFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E6966090404
+28333C74BEF17CCCF36FB8EA69AAD66FB4E46FB8EA74BAEA6DB3E46BAFDE74BAEA6DB3E46BAFDE
+6FB4E46FB8EA6BAFDE6FB4E46FB8EA6BAFDE6FB4E46FB8EA6BAFDE6FB4E46FB8EA6BAFDE6DB3E4
+74BAEA6DB3E46BAFDE6FB8EA6DB3E46BAFDE74BAEA6DB3E46FB8EA6BAFDE6DB3E474BAEA69AAD6
+6FB4E46FB8EA6BAFDE6FB4E46FB8EA6DB3E474BAEA6BAFDE6DB3E474BAEA6BAFDE6FB4E46FB8EA
+6FB8EA6DB3E46BAFDE74BEF178C6ED25201F0904047B7979FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646668040201
+0F0707619BC07BCCFC74BAEA6CB1E06BAFDE6FB8EA6DB3E46BAFDE6FB8EA6FB4E46BAFDE6DB3E4
+74BAEA6BAFDE6DB3E474BAEA6BAFDE6DB3E474BAEA6BAFDE6DB3E474BAEA6BAFDE6FB4E46FB8EA
+6FB4E46BAFDE6FB8EA6FB4E46BAFDE6FB8EA6DB3E469AAD674BAEA6DB3E46FB8EA6FB8EA6DB3E4
+6BAFDE74BAEA6DB3E46BAFDE6FB4E46FB8EA6BAFDE6DB3E46FB8EA6BAFDE6DB3E474BAEA69AAD6
+6FB4E485DEFD7BCCFC212E37040201696F73FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFBB6B4B2646060
+171616334F6356889C76C2EE73BDED6EB2E06DB2E26FB4E46DB3E46DB3E46FB4E46DB3E46FB4E4
+6DB3E46EB4E46DB3E46DB3E46EB4E46DB3E46FB4E46DB3E46FB4E46DB3E46EB4E46FB4E46DB3E4
+6FB4E46FB4E46DB3E46DB3E46FB4E46EB4E46DB3E471B9EA6EB4E46CB1E06DB3E46FB4E46DB3E4
+6DB3E46EB4E46DB3E46EB4E46DB3E46FB4E46EB4E46DB3E46FB4E46FB3E273BDED7CCCF35F98B5
+2F4759090A0B54504FBDBCBCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAD9D8
+0E1216040201161A1E69AAD67BCCFC75C2F36BAFDE74BAEA6DB3E46BAFDE6FB4E46FB8EA6BAFDE
+6DB3E474BAEA6BAFDE6DB3E46FB8EA6BAFDE6FB4E46FB8EA6BAFDE6DB3E46FB8EA6DB3E46BAFDE
+6FB8EA6FB4E46BAFDE6FB8EA6FB4E46BAFDE6FB8EA6FB4E469AAD66FB8EA6DB3E46BAFDE6FB8EA
+6FB4E46BAFDE6DB3E46FB8EA6BAFDE6EB2E06FB8EA6FB8EA7BCCFC629DC528333C0402010E1216
+BABABAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+B6B4B26666660D0908161A1E456C7F68A9D174BEF177C3EE71BBED6DB2E26BAFDE71B9EA6EB4E4
+6BAFDE71B9EA6EB4E46BAFDE71B9EA6EB4E46BAFDE71B9EA6EB4E46BAFDE6EB4E471B9EA6BAFDE
+6EB5E76DB3E46FB4E46EB4E46DB3E46FB4E46DB3E471B9EA6CB1E06EB4E46DB3E46FB4E46DB2E2
+6DB3E46FB3E271BBED77C4E977C4F464A1C8446F8925333D090A0B454342A8AAABFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFF959190090A0B0402010F07074E78967BCCFC80D5FC74BEF16FB8EA6CB1E069AAD6
+6FB8EA6DB3E46FB8EA6BAFDE6DB3E46FB8EA6BAFDE6FB4E46FB8EA6FB4E46BAFDE6FB8EA6FB4E4
+6BAFDE6FB8EA6DB3E46BAFDE6FB8EA6DB3E469AAD674BAEA6DB3E46FB8EA69AAD66FB8EA74BEF1
+7ED2FC74BEF1629DC51B1D21040201040201666363FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFDCDCDC3D3A3A0F07070402010F0707517D9C74BEF185DEFD7BCCFC74BEF174BAEA
+6EB2E069AAD674BAEA6FB4E46BAFDE6FB8EA6DB3E46BAFDE6DB3E474BAEA6BAFDE6DB3E46FB8EA
+6BAFDE6DB3E474BAEA6BAFDE6EB2E06FB8EA6FB8EA6EB2E074BAEA7BCCFC7ED2FC74BAEA4A728D
+0E1216040201090404535151CDCBCAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFAAA8A87F7B7A2724240E0C0E161A1E344E613F5F78517F9C67A6CE
+71BBED74BCED76C2F375C2F373BDED75C0F075C2F374BFEE73BDED73BDED74BFEE75C2F372BBE9
+75C0F077C3F375C2F375C0F271BBED6DB2DE5B90AC3F5F78334F631F2B34090A0B2F2B2A7F7B7A
+9C9998E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0EFEEA8A7A73833310E12160402010402010E1216
+25201F252D333952644A718C5889AC64A1CB69AAD66BAFDE69AAD669AAD6629DC55F99C04E7795
+39526428333C181C200F07070402010904040F070725201F868585F0EFEEFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF9F8FFFFFFCDCBCA5C59590E12160E1216
+0402010402010402010904040F07070904040F07070F07070904040F07070F0707040201040201
+040201090A0B39221728333CA8A19CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0
+D3D3D3BDBCBCADABAA9C99989B96949093959A94919B969493999DA9A8A8BCBBBAD3D3D3EDEDED
+FBFBFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+FFFFFF
+
+end
+%%PageTrailer
+%%Trailer
+%%EOF
diff --git a/dwarf5/latexdoc/DWlogo.png b/dwarf5/latexdoc/DWlogo.png
new file mode 100644 (file)
index 0000000..a5b27aa
Binary files /dev/null and b/dwarf5/latexdoc/DWlogo.png differ
diff --git a/dwarf5/latexdoc/Makefile b/dwarf5/latexdoc/Makefile
new file mode 100644 (file)
index 0000000..3ade6bc
--- /dev/null
@@ -0,0 +1,36 @@
+
+# Just using pdflatex will not work, the diagrams
+# in the section-relationships appendix will not
+# show up.
+# Do latex multiple times to generate all the references
+# completely.  Apparently the worst case (TOC using
+# regular page numbers beginning at 1) 
+# up to 4 times might be needed.
+# You need to do makeindex before the final latex!
+all:
+       latex dwarf5.tex
+       latex dwarf5.tex
+       makeindex dwarf5
+       latex dwarf5.tex
+       latex dwarf5.tex
+       dvips dwarf5.dvi -o dwarf5.ps
+       ps2pdf dwarf5.ps dwarf5.pdf
+clean:
+       -rm -f *.dvi
+       -rm -f *.aux
+       -rm -f *.idx
+       -rm -f *.ilg
+       -rm -f *.ind
+       -rm -f *.toc
+       -rm -f *.log
+       -rm -f *.lof
+       -rm -f *.lot
+       -rm -f *.out
+       -rm -f *.ps
+       -rm -f p2.txt
+archive:
+       sh bldtar.sh
+        
+
+       
+
diff --git a/dwarf5/latexdoc/README b/dwarf5/latexdoc/README
new file mode 100644 (file)
index 0000000..3db7e9f
--- /dev/null
@@ -0,0 +1,33 @@
+
+
+
+On Linux:
+On modern linux, here is the set of steps to build a pdf.
+While pdflatex might seem simpler to use (than the following)
+it will not correctly generate a pdf as complex as this one.
+
+        latex dwarf5.tex
+        latex dwarf5.tex
+        makeindex dwarf5
+        latex dwarf5.tex
+        latex dwarf5.tex
+        dvips dwarf5.dvi -o dwarf5.ps
+        ps2pdf dwarf5.ps dwarf5.pdf
+
+
+
+On Windows:
+To Be added
+
+
+On Mac OS X:
+To Be added
+
+
+
+
+The DWARF5 latex document was first added here May 10, 2012.
+The tentative plan is to achieve a complete
+(insofar as is possible) identical-to-DWARF4 document.
+Mark that with a git tag.   Then proceed to change the document
+with DWARF5 changes.
diff --git a/dwarf5/latexdoc/appendixdebugrelationships.tex b/dwarf5/latexdoc/appendixdebugrelationships.tex
new file mode 100644 (file)
index 0000000..afb2bae
--- /dev/null
@@ -0,0 +1,90 @@
+|\chapter{Debug Section Relationships (Informative)}
+\label{app:debugsectionrelationshipsinformative}
+%
+\setlength\maxovaldiam{80pt}
+\thicklines
+\begin{picture}(0,0)
+  \put(-38,30) { .debug\_aranges }
+  \put(-00,30) { \circle{80}}
+  \put(180,30) { .debug\_frame }
+  \put(210,30) { \circle{80}}
+  \put(365,30) { .debug\_abbrev }
+  \put(400,30) { \circle{80}}
+
+  \put(370,-85) { .debug\_str }
+  \put(400,-75) {\circle{80}}
+
+  \put(-40,-175) { .debug\_info }
+  \put(-00,-180) {\circle{80}}
+
+  \put(370,-190) { .debug\_loc }
+  \put(400,-180) {\circle{80}}
+
+  \put(365,-300) { .debug\_ranges }
+  \put(400,-290) {\circle{80}}
+
+  \put(-40,-398) { .debug\_pubnames }
+  \put(-40,-410) { .debug\_pubtypes } 
+  \put(-00,-400) { \circle{80}}
+  \put(175,-400) { .debug\_line }
+  \put(210,-400) { \circle{80}}
+  \put(365,-400) { .debug\_macinfo}
+  \put(400,-400) { \circle{80}}
+
+\end{picture}
+
+\clearpage
+\begin{enumerate}[(a)]  
+\item  .debug\_aranges  \\
+The debug\_info\_offset value in
+the header is the offset in the .debug\_info section of the
+corresponding compilation unit header (not the compilation
+unit entry).
+
+\item .debug\_pubnames and .debug\_pubtypes \\
+The debug\_info\_offset value in the header is the offset in the
+.debug\_info section of the corresponding compilation unit header (not
+the compilation unit entry). Each pubname/pubtype has the offset (within
+the corresponding compilation unit) of the applicable debugging
+information entry.
+
+\item .debug\_info and .debug\_types \\
+The debug\_abbrev\_offset value in the header is the offset in the
+.debug\_abbrev section of the abbreviations for that compilation unit.
+(d) .debug\_info and .debug\_types
+Attribute values of class string may have form DW\_FORM\_strp, whose
+value is the offset in the .debug\_str section of the corresponding string.
+
+\item  .debug\_info and .debug\_types \\
+Attribute values of class string may have form DW\_FORM\_strp, whose
+value is the offset in the .debug\_str section of the corresponding string.
+
+\item .debug\_loc \\
+The operand of the DW\_OP\_call\_ref DWARF expression operator is the
+offset of a debugging information entry in the .debug\_info section.
+
+\item .debug\_info \\
+An attribute value of class loclistptr (specifically form
+DW\_FORM\_sec\_offset) is an offset within the .debug\_loc section of a
+location list.
+
+\item .debug\_info \\
+An attribute value of class rangelistptr (specifically form
+DW\_FORM\_sec\_offset) is an offset within the .debug\_ranges section of
+a range list.
+
+
+\item .debug\_info \\
+An attribute value of class macptr (specifically form
+DW\_FORM\_sec\_offset) is an offset within the .debug\_macinfo section
+of the beginning of the macro information for the referencing unit.
+
+
+\item .debug\_info \\
+An attribute value of class lineptr (specifically form
+DW\_FORM\_sec\_offset) is an offset in the .debug\_line section of the
+beginning of the line number information for the referencing unit.
+\end{enumerate}
+
+
+
diff --git a/dwarf5/latexdoc/attributesbytag.tex b/dwarf5/latexdoc/attributesbytag.tex
new file mode 100644 (file)
index 0000000..053a73d
--- /dev/null
@@ -0,0 +1,759 @@
+\chapter[Attributes by Tag (Informative)]{Attributes by Tag Value (Informative)}
+\label{chap:attributesbytagvalueinformative}
+
+The list below enumerates the attributes that are
+most applicable to each type of debugging information
+entry. DWARF does not in general require that a given
+debugging information entry contain a particular attribute
+or set of attributes. Instead, a DWARF producer is free to
+generate any, all, or none of the attributes described in the
+text as being applicable to a given entry. Other attributes
+(both those defined within this document but not explicitly
+associated with the entry in question, and new, vendor-defined
+ones) may also appear in a given debugging information
+entry. Therefore, the list may be taken as instructive, but
+cannot be considered definitive.  
+
+In the following table,
+DECL means the declaration coordinates DW\_AT\_decl\_column,
+DW\_AT\_decl\_file, and DW\_AT\_decl\_line.
+
+
+\label{tab:attributesbytag}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|p{8cm}}
+  \caption{Attributes by tag value} \\
+  \hline \\ \bfseries TAG Name&\bfseries Applicable Attributes\\ \hline
+\endfirsthead
+  \bfseries TAG name&\bfseries Applicable Attributes \\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+DW\_TAG\_access\_declaration 
+& DECL \\
+&DW\_AT\_accessibility \\
+&DW\_AT\_description \\
+&DW\_AT\_name \\
+&DW\_AT\_sibling \\
+
+DW\_TAG\_array\_type
+&DECL \\
+&DW\_AT\_abstract\_origin \\
+&DW\_AT\_accessibility \\
+&DW\_AT\_allocated \\
+&DW\_AT\_associated \\
+&DW\_AT\_bit\_size \\
+&DW\_AT\_bit\_stride \\
+&DW\_AT\_byte\_size \\
+&DW\_AT\_data\_location \\
+&DW\_AT\_declaration \\
+&DW\_AT\_description \\
+&DW\_AT\_name \\
+&DW\_AT\_ordering \\
+&DW\_AT\_sibling \\
+&DW\_AT\_specification \\
+&DW\_AT\_start\_scope \\
+&DW\_AT\_type \\
+&DW\_AT\_visibility \\
+
+DW\_TAG\_base\_type
+&DECL \\
+&DW\_AT\_allocated \\
+&DW\_AT\_associated \\
+&DW\_AT\_binary\_scale \\
+&DW\_AT\_bit\_offset \\
+&DW\_AT\_bit\_size \\
+&DW\_AT\_byte\_size \\
+&DW\_AT\_data\_bit\_offset \\
+&DW\_AT\_data\_location \\
+&DW\_AT\_decimal\_scale \\
+&DW\_AT\_decimal\_sign \\
+&DW\_AT\_description \\
+&DW\_AT\_digit\_count \\
+&DW\_AT\_encoding \\
+&DW\_AT\_endianity \\
+&DW\_AT\_name \\
+&DW\_AT\_picture\_string \\
+&DW\_AT\_sibling \\
+&DW\_AT\_small \\
+
+DW\_TAG\_catch\_block
+&DECL \\
+&DW\_AT\_abstract\_origin \\
+&DW\_AT\_high\_pc \\
+&DW\_AT\_low\_pc \\
+&DW\_AT\_ranges \\
+&DW\_AT\_segment \\
+&DW\_AT\_sibling \\
+
+DW\_TAG\_class\_type
+
+&DECL \\
+&DW\_AT\_abstract\_origin \\
+&DW\_AT\_accessibility \\
+&DW\_AT\_allocated \\
+&DW\_AT\_associated \\
+&DW\_AT\_bit\_size \\
+&DW\_AT\_byte\_size \\
+&DW\_AT\_data\_location \\
+&DW\_AT\_declaration \\
+&DW\_AT\_description \\
+&DW\_AT\_name \\
+&DW\_AT\_sibling \\
+&DW\_AT\_signature \\
+&DW\_AT\_specification \\
+&DW\_AT\_start\_scope \\
+&DW\_AT\_visibility \\
+
+
+DW\_TAG\_common\_block
+&DECL \\
+&DW\_AT\_declaration \\
+&DW\_AT\_description \\
+&DW\_AT\_linkage\_name \\
+&DW\_AT\_location \\
+&DW\_AT\_name \\
+&DW\_AT\_segment \\
+&DW\_AT\_sibling \\
+&DW\_AT\_visibility \\
+
+DW\_TAG\_common\_inclusion
+&DECL \\
+&DW\_AT\_common\_reference \\
+&DW\_AT\_declaration \\
+&DW\_AT\_sibling \\
+&DW\_AT\_visibility \\
+
+
+DW\_TAG\_compile\_unit
+&DW\_AT\_base\_types \\
+&DW\_AT\_comp\_dir \\
+&DW\_AT\_identifier\_case \\
+&DW\_AT\_high\_pc \\
+&DW\_AT\_language \\
+&DW\_AT\_low\_pc \\
+&DW\_AT\_macro\_info \\
+&DW\_AT\_main\_subprogram \\
+&DW\_AT\_name \\
+&DW\_AT\_producer \\
+&DW\_AT\_ranges \\
+&DW\_AT\_segment \\
+&DW\_AT\_stmt\_list \\
+&DW\_AT\_use\_UTF8 \\
+
+DW\_TAG\_condition
+&DECL \\
+&DW\_AT\_name \\
+&DW\_AT\_sibling \\
+
+DW\_TAG\_const\_type
+&DW\_AT\_allocated \\
+&DW\_AT\_associated \\
+&DW\_AT\_data\_location \\
+&DW\_AT\_name \\
+&DW\_AT\_sibling \\
+&DW\_AT\_type \\
+
+DW\_TAG\_constant
+&DECL \\
+&DW\_AT\_accessibility \\
+&DW\_AT\_const\_value \\
+&DW\_AT\_declaration \\
+&DW\_AT\_description \\
+&DW\_AT\_endianity \\
+&DW\_AT\_external \\
+&DW\_AT\_linkage\_name \\
+&DW\_AT\_name \\
+&DW\_AT\_sibling \\
+&DW\_AT\_start\_scope \\
+&DW\_AT\_type \\
+&DW\_AT\_visibility \\
+
+DW\_TAG\_dwarf\_procedure
+&DW\_AT\_location \\
+
+DW\_TAG\_entry\_point
+&DECL \\
+&DW\_AT\_address\_class \\
+&DW\_AT\_description \\
+&DW\_AT\_frame\_base \\
+&DW\_AT\_linkage\_name \\
+&DW\_AT\_low\_pc \\
+&DW\_AT\_name \\
+&DW\_AT\_return\_addr \\
+&DW\_AT\_segment \\
+&DW\_AT\_sibling \\
+&DW\_AT\_static\_link \\
+&DW\_AT\_type \\
+
+
+DW\_TAG\_enumeration\_type
+DECL \\
+&DW\_AT\_abstract\_origin \\
+&DW\_AT\_accessibility \\
+&DW\_AT\_allocated \\
+&DW\_AT\_associated \\
+&DW\_AT\_bit\_size \\
+&DW\_AT\_bit\_stride \\
+&DW\_AT\_byte\_size \\
+&DW\_AT\_byte\_stride \\
+&DW\_AT\_data\_location \\
+&DW\_AT\_declaration \\
+&DW\_AT\_description \\
+&DW\_AT\_enum\_class \\
+&DW\_AT\_name \\
+&DW\_AT\_sibling \\
+&DW\_AT\_signature \\
+&DW\_AT\_specification \\
+&DW\_AT\_start\_scope \\
+&DW\_AT\_type \\
+&DW\_AT\_visibility \\
+
+DW\_TAG\_enumerator
+&DECL \\
+&DW\_AT\_const\_value \\
+&DW\_AT\_description \\
+&DW\_AT\_name \\
+&DW\_AT\_sibling \\
+
+DW\_TAG\_file\_type
+&DECL \\
+&DW\_AT\_abstract\_origin \\
+&DW\_AT\_allocated \\
+&DW\_AT\_associated \\
+&DW\_AT\_bit\_size \\
+&DW\_AT\_byte\_size \\
+&DW\_AT\_data\_location \\
+&DW\_AT\_description \\
+&DW\_AT\_name \\
+&DW\_AT\_sibling \\
+&DW\_AT\_start\_scope \\
+&DW\_AT\_type \\
+&DW\_AT\_visibility \\
+
+DW\_TAG\_formal\_parameter
+&DECL \\
+&DW\_AT\_abstract\_origin \\
+&DW\_AT\_artificial \\
+&DW\_AT\_const\_value \\
+&DW\_AT\_default\_value \\
+&DW\_AT\_description \\
+&DW\_AT\_endianity \\
+&DW\_AT\_is\_optional \\
+&DW\_AT\_location \\
+&DW\_AT\_name \\
+&DW\_AT\_segment \\
+&DW\_AT\_sibling \\
+&DW\_AT\_type \\
+&DW\_AT\_variable\_parameter \\
+
+DW\_TAG\_friend
+&DECL \\
+&DW\_AT\_abstract\_origin \\
+&DW\_AT\_friend \\
+&DW\_AT\_sibling \\
+
+DW\_TAG\_imported\_declaration
+&DECL \\
+&DW\_AT\_accessibility \\
+&DW\_AT\_description \\
+&DW\_AT\_import \\
+&DW\_AT\_name \\
+&DW\_AT\_sibling \\
+&DW\_AT\_start\_scope \\
+
+DW\_TAG\_imported\_module
+&DECL \\
+&DW\_AT\_import \\
+&DW\_AT\_sibling \\
+&DW\_AT\_start\_scope \\
+
+DW\_TAG\_imported\_unit
+&DW\_AT\_import \\
+
+DW\_TAG\_inheritance
+&DECL \\
+&DW\_AT\_accessibility \\
+&DW\_AT\_data\_member\_location \\
+&DW\_AT\_sibling \\
+&DW\_AT\_type \\
+&DW\_AT\_virtuality \\
+
+DW\_TAG\_inlined\_subroutine
+&DW\_AT\_abstract\_origin \\
+&DW\_AT\_call\_column \\
+&DW\_AT\_call\_file \\
+&DW\_AT\_call\_line \\
+&DW\_AT\_const\_expr \\
+&DW\_AT\_entry\_pc \\
+&DW\_AT\_high\_pc \\
+&DW\_AT\_low\_pc \\
+&DW\_AT\_ranges \\
+&DW\_AT\_return\_addr \\
+&DW\_AT\_segment \\
+&DW\_AT\_sibling \\
+&DW\_AT\_start\_scope \\
+&DW\_AT\_trampoline \\
+
+DW\_TAG\_interface\_type
+&DECL \\
+&DW\_AT\_accessibility \\
+&DW\_AT\_description \\
+&DW\_AT\_name \\
+&DW\_AT\_sibling \\
+&DW\_AT\_start\_scope \\
+
+DW\_TAG\_label
+&DECL \\
+&DW\_AT\_abstract\_origin \\
+&DW\_AT\_description \\
+&DW\_AT\_low\_pc \\
+&DW\_AT\_name \\
+&DW\_AT\_segment \\
+&DW\_AT\_start\_scope \\
+&DW\_AT\_sibling \\
+
+DW\_TAG\_lexical\_block
+&DECL \\
+&DW\_AT\_abstract\_origin \\
+&DW\_AT\_description \\
+&DW\_AT\_high\_pc \\
+&DW\_AT\_low\_pc \\
+&DW\_AT\_name \\
+&DW\_AT\_ranges \\
+&DW\_AT\_segment \\
+&DW\_AT\_sibling \\
+
+DW\_TAG\_member
+&DECL \\
+&DW\_AT\_accessibility \\
+&DW\_AT\_bit\_offset \\
+&DW\_AT\_bit\_size \\
+&DW\_AT\_byte\_size \\
+&DW\_AT\_data\_bit\_offset \\
+&DW\_AT\_data\_member\_location \\
+&DW\_AT\_declaration \\
+&DW\_AT\_description \\
+&DW\_AT\_mutable \\
+&DW\_AT\_name \\
+&DW\_AT\_sibling \\
+&DW\_AT\_type \\
+&DW\_AT\_visibility \\
+
+
+DW\_TAG\_module
+&DECL \\
+&DW\_AT\_accessibility \\
+&DW\_AT\_declaration \\
+&DW\_AT\_description \\
+&DW\_AT\_entry\_pc \\
+&DW\_AT\_high\_pc \\
+&DW\_AT\_low\_pc \\
+&DW\_AT\_name \\
+&DW\_AT\_priority \\
+&DW\_AT\_ranges \\
+&DW\_AT\_segment \\
+&DW\_AT\_sibling \\
+&DW\_AT\_specification \\
+&DW\_AT\_visibility \\
+
+DW\_TAG\_namelist
+&DECL \\
+&DW\_AT\_abstract\_origin \\
+&DW\_AT\_accessibility \\
+&DW\_AT\_declaration \\
+&DW\_AT\_name \\
+&DW\_AT\_sibling \\
+&DW\_AT\_visibility \\
+
+DW\_TAG\_namelist\_item
+&DECL \\
+&DW\_AT\_namelist\_item \\
+&DW\_AT\_sibling \\
+
+DW\_TAG\_namespace
+&DECL \\
+&DW\_AT\_description \\
+&DW\_AT\_extension \\
+&DW\_AT\_name \\
+&DW\_AT\_sibling \\
+&DW\_AT\_start\_scope \\
+
+DW\_TAG\_packed\_type
+&DW\_AT\_allocated \\
+&DW\_AT\_associated \\
+&DW\_AT\_data\_location \\
+&DW\_AT\_name \\
+&DW\_AT\_sibling \\
+&DW\_AT\_type \\
+
+DW\_TAG\_partial\_unit
+&DW\_AT\_base\_types  \\  
+&DW\_AT\_comp\_dir  \\
+&DW\_AT\_description  \\
+&DW\_AT\_identifier\_case  \\
+&DW\_AT\_high\_pc  \\
+&DW\_AT\_language  \\
+&DW\_AT\_low\_pc  \\
+&DW\_AT\_macro\_info  \\
+&DW\_AT\_main\_subprogram  \\
+&DW\_AT\_name  \\
+&DW\_AT\_producer  \\
+&DW\_AT\_ranges  \\
+&DW\_AT\_segment  \\
+&DW\_AT\_stmt\_list  \\
+&DW\_AT\_use\_UTF8  \\
+
+
+DW\_TAG\_pointer\_type  \\
+&DW\_AT\_address\_class  \\
+&DW\_AT\_allocated  \\
+&DW\_AT\_associated  \\
+&DW\_AT\_data\_location  \\
+&DW\_AT\_name  \\
+&DW\_AT\_sibling  \\
+&DW\_AT\_type  \\
+
+DW\_TAG\_ptr\_to\_member\_type
+&DECL  \\
+&DW\_AT\_abstract\_origin  \\
+&DW\_AT\_address\_class  \\
+&DW\_AT\_allocated  \\
+&DW\_AT\_associated  \\
+&DW\_AT\_containing\_type  \\
+&DW\_AT\_data\_location  \\
+&DW\_AT\_declaration  \\
+&DW\_AT\_description  \\
+&DW\_AT\_name  \\
+&DW\_AT\_sibling  \\
+&DW\_AT\_type  \\
+&DW\_AT\_use\_location  \\
+&DW\_AT\_visibility  \\
+
+
+DW\_TAG\_reference\_type
+&DW\_AT\_address\_class  \\
+&DW\_AT\_allocated  \\
+&DW\_AT\_associated  \\
+&DW\_AT\_data\_location  \\
+&DW\_AT\_name  \\
+&DW\_AT\_sibling  \\
+&DW\_AT\_type  \\
+
+DW\_TAG\_restrict\_type
+&DW\_AT\_allocated  \\
+&DW\_AT\_associated  \\
+&DW\_AT\_data\_location  \\
+&DW\_AT\_name  \\
+&DW\_AT\_sibling  \\
+&DW\_AT\_type  \\
+
+DW\_TAG\_rvalue\_reference\_type
+&DECL  \\
+&DW\_AT\_address\_class  \\
+&DW\_AT\_allocated  \\
+&DW\_AT\_associated  \\
+&DW\_AT\_data\_location  \\
+&DW\_AT\_name  \\
+&DW\_AT\_sibling  \\
+&DW\_AT\_type  \\
+
+
+DW\_TAG\_set\_type
+&DECL  \\
+&DW\_AT\_abstract\_origin  \\
+&DW\_AT\_accessibility  \\
+&DW\_AT\_allocated  \\
+&DW\_AT\_associated  \\
+&DW\_AT\_bit\_size  \\
+&DW\_AT\_byte\_size  \\
+&DW\_AT\_data\_location  \\
+&DW\_AT\_declaration  \\
+&DW\_AT\_description  \\
+&DW\_AT\_name  \\
+&DW\_AT\_start\_scope  \\
+&DW\_AT\_sibling  \\
+&DW\_AT\_type  \\
+&DW\_AT\_visibility  \\
+
+DW\_TAG\_shared\_type
+&DW\_AT\_allocated  \\
+&DW\_AT\_associated  \\
+&DW\_AT\_count  \\
+&DW\_AT\_data\_location  \\
+&DW\_AT\_name  \\
+&DW\_AT\_sibling  \\
+&DW\_AT\_type  \\
+
+
+DW\_TAG\_string\_type
+&DECL  \\
+&DW\_AT\_abstract\_origin  \\
+&DW\_AT\_accessibility  \\
+&DW\_AT\_allocated  \\
+&DW\_AT\_associated  \\
+&DW\_AT\_bit\_size  \\
+&DW\_AT\_byte\_size  \\
+&DW\_AT\_data\_location  \\
+&DW\_AT\_declaration  \\
+&DW\_AT\_description  \\
+&DW\_AT\_name  \\
+&DW\_AT\_sibling  \\
+&DW\_AT\_start\_scope  \\
+&DW\_AT\_string\_length  \\
+&DW\_AT\_visibility  \\
+
+DW\_TAG\_structure\_type
+&DECL  \\
+&DW\_AT\_abstract\_origin  \\
+&DW\_AT\_accessibility  \\
+&DW\_AT\_allocated  \\
+&DW\_AT\_associated  \\
+&DW\_AT\_bit\_size  \\
+&DW\_AT\_byte\_size  \\
+&DW\_AT\_data\_location  \\
+&DW\_AT\_declaration  \\
+&DW\_AT\_description  \\
+&DW\_AT\_name  \\
+&DW\_AT\_sibling  \\
+&DW\_AT\_signature  \\
+&DW\_AT\_specification  \\
+&DW\_AT\_start\_scope  \\
+&DW\_AT\_visibility  \\
+
+DW\_TAG\_subprogram
+&DECL  \\
+&DW\_AT\_abstract\_origin  \\
+&DW\_AT\_accessibility  \\
+&DW\_AT\_address\_class  \\
+&DW\_AT\_artificial  \\
+&DW\_AT\_calling\_convention  \\
+&DW\_AT\_declaration  \\
+&DW\_AT\_description  \\
+&DW\_AT\_elemental  \\
+&DW\_AT\_entry\_pc  \\
+&DW\_AT\_explicit  \\
+&DW\_AT\_external  \\
+&DW\_AT\_frame\_base  \\
+&DW\_AT\_high\_pc  \\
+&DW\_AT\_inline  \\
+&DW\_AT\_linkage\_name  \\
+&DW\_AT\_low\_pc  \\
+&DW\_AT\_main\_subprogram  \\
+&DW\_AT\_name  \\
+&DW\_AT\_object\_pointer  \\
+&DW\_AT\_prototyped  \\
+&DW\_AT\_pure  \\
+&DW\_AT\_ranges  \\
+&DW\_AT\_recursive  \\
+&DW\_AT\_return\_addr  \\
+&DW\_AT\_segment  \\
+&DW\_AT\_sibling  \\
+&DW\_AT\_specification  \\
+&DW\_AT\_start\_scope  \\
+&DW\_AT\_static\_link  \\
+&DW\_AT\_trampoline  \\
+&DW\_AT\_type  \\
+&DW\_AT\_visibility  \\
+&DW\_AT\_virtuality  \\
+&DW\_AT\_vtable\_elem\_location  \\
+
+DW\_TAG\_subrange\_type
+&DECL  \\
+&DW\_AT\_abstract\_origin  \\
+&DW\_AT\_accessibility  \\
+&DW\_AT\_allocated  \\
+&DW\_AT\_associated  \\
+&DW\_AT\_bit\_size  \\
+&DW\_AT\_bit\_stride  \\
+&DW\_AT\_byte\_size  \\
+&DW\_AT\_byte\_stride  \\
+&DW\_AT\_count  \\
+&DW\_AT\_data\_location  \\
+&DW\_AT\_declaration  \\
+&DW\_AT\_description  \\
+&DW\_AT\_lower\_bound  \\
+&DW\_AT\_name  \\
+&DW\_AT\_sibling  \\
+&DW\_AT\_threads\_scaled  \\
+&DW\_AT\_type  \\
+&DW\_AT\_upper\_bound  \\
+&DW\_AT\_visibility  \\
+
+DW\_TAG\_subroutine\_type
+&DECL  \\
+&DW\_AT\_abstract\_origin  \\
+&DW\_AT\_accessibility  \\
+&DW\_AT\_address\_class  \\
+&DW\_AT\_allocated  \\
+&DW\_AT\_associated  \\
+&DW\_AT\_data\_location  \\
+&DW\_AT\_declaration  \\
+&DW\_AT\_description  \\
+&DW\_AT\_name  \\
+&DW\_AT\_prototyped  \\
+&DW\_AT\_sibling  \\
+&DW\_AT\_start\_scope  \\
+&DW\_AT\_type  \\
+&DW\_AT\_visibility  \\
+
+DW\_TAG\_template\_alias
+&DECL   \\
+&DW\_AT\_abstract\_origin   \\
+&DW\_AT\_accessibility   \\
+&DW\_AT\_allocated   \\
+&DW\_AT\_associated   \\
+&DW\_AT\_data\_location   \\
+&DW\_AT\_declaration   \\
+&DW\_AT\_description   \\
+&DW\_AT\_name   \\
+&DW\_AT\_sibling   \\
+&DW\_AT\_signature   \\
+&DW\_AT\_start\_scope   \\
+&DW\_AT\_type   \\
+&DW\_AT\_visibility   \\
+
+DW\_TAG\_template\_type\_parameter
+&DECL   \\
+&DW\_AT\_description   \\
+&DW\_AT\_name   \\
+&DW\_AT\_sibling   \\
+&DW\_AT\_type   \\
+
+DW\_TAG\_template\_value\_parameter 
+&DECL   \\
+&DW\_AT\_const\_value   \\
+&DW\_AT\_description   \\
+&DW\_AT\_name   \\
+&DW\_AT\_sibling   \\
+&DW\_AT\_type   \\
+
+
+DW\_TAG\_thrown\_type
+&DECL   \\
+&DW\_AT\_allocated   \\
+&DW\_AT\_associated   \\
+&DW\_AT\_data\_location   \\
+&DW\_AT\_sibling   \\
+&DW\_AT\_type   \\
+
+DW\_TAG\_try\_block
+&DECL   \\
+&DW\_AT\_abstract\_origin   \\
+&DW\_AT\_high\_pc   \\
+&DW\_AT\_low\_pc   \\
+&DW\_AT\_ranges   \\
+&DW\_AT\_segment   \\
+&DW\_AT\_sibling   \\
+
+DW\_TAG\_typedef
+&DECL   \\
+&DW\_AT\_abstract\_origin   \\
+&DW\_AT\_accessibility   \\
+&DW\_AT\_allocated   \\
+&DW\_AT\_associated   \\
+&DW\_AT\_data\_location   \\
+&DW\_AT\_declaration   \\
+&DW\_AT\_description   \\
+&DW\_AT\_name   \\
+&DW\_AT\_sibling   \\
+&DW\_AT\_start\_scope   \\
+&DW\_AT\_type   \\
+&DW\_AT\_visibility   \\
+
+DW\_TAG\_type\_unit
+&DW\_AT\_language   \\
+
+DW\_TAG\_union\_type
+&DECL   \\
+&DW\_AT\_abstract\_origin   \\
+&DW\_AT\_accessibility   \\
+&DW\_AT\_allocated   \\
+&DW\_AT\_associated   \\
+&DW\_AT\_bit\_size   \\
+&DW\_AT\_byte\_size   \\
+&DW\_AT\_data\_location   \\
+&DW\_AT\_declaration   \\
+&DW\_AT\_description   \\
+&DW\_AT\_name   \\
+&DW\_AT\_sibling   \\
+&DW\_AT\_signature   \\
+&DW\_AT\_specification   \\
+&DW\_AT\_start\_scope   \\
+&DW\_AT\_visibility   \\
+
+
+DW\_TAG\_unspecified\_parameters
+&DECL   \\
+&DW\_AT\_abstract\_origin   \\
+&DW\_AT\_artificial   \\
+&DW\_AT\_sibling   \\
+
+DW\_TAG\_unspecified\_type
+&DECL   \\
+&DW\_AT\_description   \\
+&DW\_AT\_name    \\
+
+
+DW\_TAG\_variable
+&DECL    \\
+&DW\_AT\_abstract\_origin    \\
+&DW\_AT\_accessibility    \\
+&DW\_AT\_const\_expr    \\
+&DW\_AT\_const\_value    \\
+&DW\_AT\_declaration    \\
+&DW\_AT\_description    \\
+&DW\_AT\_endianity    \\
+&DW\_AT\_external    \\
+&DW\_AT\_linkage\_name    \\
+&DW\_AT\_location    \\
+&DW\_AT\_name    \\
+&DW\_AT\_segment    \\
+&DW\_AT\_sibling    \\
+&DW\_AT\_specification    \\
+&DW\_AT\_start\_scope    \\
+&DW\_AT\_type    \\
+&DW\_AT\_visibility    \\
+
+DW\_TAG\_variant
+&DECL    \\
+&DW\_AT\_accessibility   \\
+&DW\_AT\_abstract\_origin   \\
+&DW\_AT\_declaration   \\
+&DW\_AT\_discr\_list   \\
+&DW\_AT\_discr\_value   \\
+&DW\_AT\_sibling   \\
+
+DW\_TAG\_variant\_part
+&DECL   \\
+&DW\_AT\_abstract\_origin   \\
+&DW\_AT\_accessibility   \\
+&DW\_AT\_declaration   \\
+&DW\_AT\_discr   \\
+&DW\_AT\_sibling   \\
+&DW\_AT\_type   \\
+
+DW\_TAG\_volatile\_type  
+&DW\_AT\_allocated   \\
+&DW\_AT\_associated    \\
+&DW\_AT\_data\_location    \\
+&DW\_AT\_name    \\
+&DW\_AT\_sibling    \\
+&DW\_AT\_type    \\
+
+DW\_TAG\_with\_stmt
+&DW\_AT\_accessibility    \\
+&DW\_AT\_address\_class    \\
+&DW\_AT\_declaration    \\
+&DW\_AT\_high\_pc    \\
+&DW\_AT\_location    \\
+&DW\_AT\_low\_pc    \\
+&DW\_AT\_ranges    \\
+&DW\_AT\_segment    \\
+&DW\_AT\_sibling    \\
+&DW\_AT\_type    \\
+&DW\_AT\_visibility    \\
+\end{longtable}
diff --git a/dwarf5/latexdoc/bldtar.sh b/dwarf5/latexdoc/bldtar.sh
new file mode 100644 (file)
index 0000000..e7d5c76
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/bash
+suf=""
+if [ $# -eq 0 ]
+then
+  suf=""
+else
+  if [ $# -eq 1 ]
+  then
+    suf=$1
+  else 
+    echo "Oops, too many args, exit"
+    exit 1
+  fi
+fi
+echo proceed with $suf.
+targ=/var/tmp
+n=DW5$suf
+rm  -rf $targ/$n $targ/$n.tar        
+mkdir $targ/$n
+cp * $targ/$n
+cd $targ
+tar cf $n.tar $n
+ls -l $n.tar $n
+        
+
diff --git a/dwarf5/latexdoc/compression.tex b/dwarf5/latexdoc/compression.tex
new file mode 100644 (file)
index 0000000..90d8ce3
--- /dev/null
@@ -0,0 +1,1271 @@
+\chapter[Compression (Informative)]{DWARF Compression and Duplicate Elimination (Informative)}
+\label{dwarfcompressionandduplicateeliminationinformative}
+
+% It seemed difficult to get close to the same layout and 
+% captioning as DWARF4 here with figures as they moved (floated)
+% making it hard to follow.  Hence this uses fewer figures.
+
+DWARF can use a lot of disk space.
+
+This is especially true for C++, where the depth and complexity
+of headers can mean that many, many (possibly thousands of)
+declarations are repeated in every compilation unit. C++
+templates can also mean that some functions and their DWARF
+descriptions get duplicated.
+
+This Appendix describes techniques for using the DWARF
+representation in combination with features and characteristics
+of some common object file representations to reduce redundancy
+without losing information. It is worth emphasizing that none
+of these techniques are necessary to provide a complete and
+accurate DWARF description; they are solely concerned with
+reducing the size of DWARF information.
+
+The techniques described here depend more directly and more
+obviously on object file concepts and linker mechanisms than
+most other parts of DWARF. While the presentation tends to
+use the vocabulary of specific systems, this is primarily to
+aid in describing the techniques by appealing to well\dash known
+terminology. These techniques can be employed on any system
+that supports certain general functional capabilities
+(described below).
+
+
+\section{Using Compilation Units}
+\label{app:usingcompilationunits}
+
+\subsection{Overview}
+The general approach is to break up the debug information of
+a compilation into separate normal and partial compilation
+units, each consisting of one or more sections. By arranging
+that a sufficiently similar partitioning occurs in other
+compilations, a suitable system linker can delete redundant
+groups of sections when combining object files.
+
+\textit{The following uses some traditional section naming here
+but aside from the DWARF sections, the names are just meant
+to suggest traditional contents as a way of explaining the
+approach, not to be limiting.}
+
+A traditional relocatable object output 
+from a single compilation might contain sections named:
+\begin{alltt}
+    .data
+    .text
+    .debug\_info
+    .debug\_abbrev
+    .debug\_line
+    .debug\_aranges
+\end{alltt}
+A relocatable object from a compilation system 
+attempting duplicate DWARF elimination might
+contain sections as in:
+
+\begin{alltt}
+    .data
+    .text
+    .debug\_info
+    .debug\_abbrev
+    .debug\_line
+    .debug\_aranges
+\end{alltt}
+
+followed (or preceded, the order is not significant) 
+by a series of section groups:
+\begin{alltt}
+==== Section group 1
+    .debug\_info
+    .debug\_abbrev
+    .debug\_line
+==== ...
+==== Section group N
+    .debug\_info
+    .debug\_abbrev
+    .debug\_line
+\end{alltt}
+
+where each section group might or might not contain executable
+code (\textit{.text} sections) or data (\textit{.data} sections).
+
+A \textit{section group} is a named set of section contributions
+within an object file with the property that the entire set
+of section contributions must be retained or discarded as a
+whole; no partial elimination is allowed. Section groups can
+generally be handled by a linker in two ways:
+
+\begin{enumerate}[1.]
+\item Given multiple identical (duplicate) section groups,
+one of them is chosen to be kept and used, while the rest
+are discarded.
+
+\item Given a section group that is not referenced from any
+section outside of the section group, the section group
+is discarded.
+
+
+\end{enumerate}
+
+
+Which handling applies may be indicated by the section group
+itself and/or selection of certain linker options.
+
+For example, if a linker determines that section group 1
+from A.o and section group 3 from B.o are identical, it could
+discard one group and arrange that all references in A.o and
+B.o apply to the remaining one of the two identical section
+groups. This saves space.
+
+An important part of making it possible to “redirect”
+references to the surviving section group is the use of
+consistently chosen linker global symbols for referring to
+locations within each section group. It follows that references
+are simply to external names and the linker already knows
+how to match up references and definitions.
+
+What is minimally needed from the object file format and system
+linker (outside of DWARF itself, and normal object/linker
+facilities such as simple relocations) are:
+
+\begin{enumerate}[1.]
+
+\item A means of referencing from inside one .debug\_info
+compilation unit to another .debug\_info compilation unit
+(DW\_FORM\_ref\_addr provides this).
+
+\item A means of having multiple contributions to specific sections
+(for example, .debug\_info, and so on) in a single object file.
+
+\item  A means of identifying a section group (giving it a name).
+
+\item A means of identifying which sections go together to make
+up a section group, so that the group can be treated as a unit
+(kept or discarded).
+
+\item  A means of indicating how each section group should be
+processed by the linker.
+
+\end{enumerate}
+
+\textit{The notion of section and section contribution used here
+corresponds closely to the similarly named concepts in the
+ELF object file representation. The notion of section group is
+an abstraction of common extensions of the ELF representation
+widely known as ``COMDATs'' or ``COMDAT sections''. (Other
+object file representations provide COMDAT\dash style mechanisms as
+well.) There are several variations in the COMDAT schemes in
+common use, any of which should be sufficient for the purposes
+of the DWARF duplicate elimination techniques described here.}
+
+\subsection{Naming and Usage Considerations}
+\label{app:namingandusageconsiderations}
+
+A precise description of the means of deriving names usable
+by the linker to access DWARF entities is not part of this
+specification. Nonetheless, an outline of a usable approach
+is given here to make this more understandable and to guide
+implementors.
+
+Implementations should clearly document their naming conventions.
+
+In the following, it will be helpful to refer to the examples
+in 
+Figure \refersec{app:duplicateeliminationexample1csource}
+through 
+Figure \refersec{app:duplicateeliminationexample2companiondwarf}
+of 
+Section \refersec{app:examples}.
+
+\textbf{Section Group Names}
+
+Section groups must have a section group name. For the subsequent C++ example, a name like
+
+<producer-prefix>.<file-designator>.<gid-number>
+
+will suffice, where
+
+\begin{itemize}
+
+\item  \textless producer\dash prefix \textgreater 
+is some string specific to the
+producer, which has a language\dash designation embedded in the
+name when appropriate. (Alternatively, the language name
+could be embedded in the 
+\textless gid\dash number \textgreater).
+
+
+\item  \textless file\dash designator \textgreater
+names the file, such as wa.h in
+the example.
+
+
+\item  \textless gid\dash number \textgreater
+is a string generated to identify the
+specific wa.h header file in such a way that
+
+\begin{itemize}
+
+\item  a 'matching' output from another compile generates
+the same 
+\textless gid\dash number \textgreater,
+and
+
+\item  a non\dash matching output (say because of \#defines)
+generates a different 
+\textless gid\dash number \textgreater.
+\end{itemize}
+
+\end{itemize}
+
+\textit{It may be useful to think of a 
+\textless gid\dash number \textgreater
+as a kind
+of ``digital signature'' that allows a fast test for the
+equality of two section groups.}
+
+So, for example, the section group corresponding to file wa.h
+above is given the name \textit{my.compiler.company.cpp.wa.h.123456}.
+
+
+
+\textbf{Debugging Information Entry Names}
+
+Global labels for debugging information entries (need explained
+below) within a section group can be given names of the form
+
+\begin{alltt}
+    <prefix>.<file-designator>.<gid-number>.<die-number>
+\end{alltt}
+
+such as
+
+\begin{alltt}
+    my.compiler.company.wa.h.123456.987
+\end{alltt}
+
+where
+\begin{itemize}
+\item \textless prefix \textgreater\  
+distinguishes this as a DWARF debug info name, and should identify the producer
+and, when appropriate, the language.
+\item \textless file\dash designator\textgreater\  
+and 
+\textless gid\dash number \textgreater
+are as above.
+
+\item  \textless die\dash number \textgreater
+could be a number sequentially assigned 
+to entities (tokens, perhaps) found
+during compilation.
+
+\end{itemize}
+
+In general, every point in the section group .debug\_info that
+could be referenced from outside by any compilation unit must
+normally have an external name generated for it in the linker
+symbol table, whether the current compilation references all
+those points or not.
+
+The completeness of the set of names generated is a
+quality\dash of\dash implementation issue.
+
+It is up to the producer to ensure that if 
+<die-numbers>
+\textless die\dash numbers \textgreater
+in separate compilations would not match properly then a
+distinct 
+\textless gid\dash number \textgreater
+is generated.
+
+Note that only section groups that are designated as
+duplicate\dash removal\dash applies actually require the
+\begin{alltt}
+    <prefix>.<file-designator>.<gid-number>.<die-number>
+\end{alltt}
+external labels for debugging information entries as all other
+section group sections can use 'local' labels 
+(section\dash relative
+relocations).
+
+(This is a consequence of separate compilation, not a rule
+imposed by this document.)
+
+\textit{Local labels use references with form DW\_FORM\_ref4
+or 
+DW\_FORM\_ref8. 
+(These are affected by relocations
+so 
+DW\_FORM\_ref\_udata, 
+DW\_FORM\_ref1 and 
+DW\_FORM\_ref2 are
+normally not usable and 
+DW\_FORM\_ref\_addr is not necessary
+for a local label.)}
+
+\textbf{Use of DW\_TAG\_compile\_unit versus 
+DW\_TAG\_partial\_unit}
+
+A section group compilation unit that uses 
+DW\_TAG\_compile\_unit
+is like any other compilation unit, in that its contents
+are evaluated by consumers as though it were an ordinary
+compilation unit.
+
+An \#include directive appearing outside any other
+declarations is a good candidate to be represented using
+DW\_TAG\_compile\_unit. 
+However, an \#include appearing inside
+a C++ namespace declaration or a function, for example, is
+not a good candidate because the entities included are not
+necessarily file level entities.
+
+This also applies to Fortran INCLUDE lines when declarations
+are included into a procedure or module context.
+
+Consequently a compiler must use DW\_TAG\_partial\_unit (instead
+of DW\_TAG\_compile\_unit) in a section group whenever the section
+group contents are not necessarily globally visible. This
+directs consumers to ignore that compilation unit when scanning
+top level declarations and definitions.
+
+The DW\_TAG\_partial\_unit compilation unit will be referenced
+from elsewhere and the referencing locations give the
+appropriate context for interpreting the partial compilation
+unit.
+
+A DW\_TAG\_partial\_unit entry may have, as appropriate, any of
+the attributes assigned to a DW\_TAG\_compile\_unit.
+
+
+\textbf{Use of DW\_TAG\_imported\_unit}
+
+A DW\_TAG\_imported\_unit debugging information entry has an
+DW\_AT\_import attribute referencing a DW\_TAG\_compile\_unit or
+DW\_TAG\_partial\_unit debugging information entry.
+
+A DW\_TAG\_imported\_unit debugging information entry refers
+to a 
+DW\_TAG\_compile\_unit or 
+DW\_TAG\_partial\_unit debugging
+information entry to specify that the 
+DW\_TAG\_compile\_unit or
+DW\_TAG\_partial\_unit contents logically appear at the point
+of the 
+DW\_TAG\_imported\_unit entry.
+
+
+\textbf{Use of DW\_FORM\_ref\_addr}
+
+Use 
+DW\_FORM\_ref\_addr to reference from one compilation
+unit's debugging information entries to those of another
+compilation unit.
+
+When referencing into a removable section group .debug\_info
+from another .debug\_info (from anywhere), the
+\begin{alltt}
+<prefix>.<file-designator>.<gid-number>.<die-number>
+\end{alltt}
+name should be used for an external symbol and a relocation
+generated based on that name.
+
+When referencing into a non-section group .debug\_info,
+from another .debug\_info (from anywhere) 
+DW\_FORM\_ref\_addr is
+still the form to be used, but a section\dash relative relocation
+generated by use of a non-exported name (often called an
+``internal name'') may be used for references within the
+same object file.
+
+\subsection{Examples}
+\label{app:examples}
+
+This section provides several examples in order to have a
+concrete basis for discussion.
+
+In these examples, the focus is on the arrangement of DWARF
+information into sections (specifically the .debug\_info
+section) and the naming conventions used to achieve references
+into section groups. In practice, all of the examples that
+follow involve DWARF sections other than just .debug\_info
+(for example, .debug\_line, .debug\_aranges, or others);
+however, only the .debug\_info section is shown to keep the
+examples compact and easier to read.
+
+The grouping of sections into a named set is shown, but the means for achieving this in terms of
+the underlying object language is not (and varies from system to system).
+
+\subsubsection{C++ Example}
+
+The C++ source in 
+Section \refersec{app:duplicateeliminationexample1csource}
+is used to illustrate the DWARF
+representation intended to allow duplicate elimination.
+
+\paragraph{Duplicate elimination example 1: C++ Source} 
+\label{app:duplicateeliminationexample1csource}
+
+File wa.h
+
+\begin{lstlisting}
+struct A {
+   int i;
+};
+\end{lstlisting}
+
+File wa.C
+
+\begin{lstlisting}
+#include "wa.h";
+int
+f(A &a)
+{
+    return a.i + 2;
+}
+\end{lstlisting}
+
+
+section \refersec{app:duplicateeliminationexample1dwarfsectiongroup}
+shows the section group corresponding to the included file 
+wa.h.
+
+
+\paragraph{Duplicate elimination example 1: DWARF section group} 
+
+\label{app:duplicateeliminationexample1dwarfsectiongroup}
+
+\begin{alltt}
+==== Section group name:
+    my.compiler.company.cpp.wa.h.123456
+== section .debug\_info
+DW.cpp.wa.h.123456.1: ! linker global symbol
+    DW\_TAG\_compile\_unit
+        DW\_AT\_language(DW\_LANG\_C\_plus\_plus)
+        ...  ! other unit attributes
+DW.cpp.wa.h.123456.2: ! linker global symbol
+    DW\_TAG\_base\_type
+        DW\_AT\_name("int")
+DW.cpp.wa.h.123456.3: ! linker global symbol
+    DW\_TAG\_structure\_type
+        DW\_AT\_NAME("A")
+DW.cpp.wa.h.123456.4: ! linker global symbol
+        DW\_TAG\_member
+        DW\_AT\_name("i")
+        DW\_AT\_type(DW\_FORM\_refn to DW.cpp.wa.h.123456.2)
+            ! (This is a local reference, so the more
+            ! compact form DW\_FORM\_refn can be used)
+\end{alltt}
+
+
+Figure \refersec{app:duplicateeliminationexample1primarycompilationunit}
+shows the ``normal'' DWARF sections, which are not part of
+any section group, and how they make use of the information
+in the section group shown above.
+
+\paragraph{Duplicate elimination example 1: primary compilation unit} 
+\label{app:duplicateeliminationexample1primarycompilationunit}
+\begin{alltt}
+== section .text
+    [generated code for function f]
+== section .debug\_info
+    DW\_TAG\_compile\_unit
+.L1:                   ! local (non-linker) symbol
+        DW\_TAG\_reference\_type
+            DW\_AT\_type(reference to DW.cpp.wa.h.123456.3)
+        DW\_TAG\_subprogram
+            DW\_AT\_name("f")
+            DW\_AT\_type(reference to DW.cpp.wa.h.123456.2)
+            DW\_TAG\_variable
+                DW\_AT\_name("a")
+                DW\_AT\_type(reference to .L1)
+        ...
+\end{alltt}
+
+This example uses DW\_TAG\_compile\_unit for the section group,
+implying that the contents of the compilation unit are
+globally visible (in accordance with C++ language rules).
+DW\_TAG\_partial\_unit is not needed for the same reason.
+
+\subsubsection{Fortran Example}
+
+
+For a Fortran example, consider 
+Figure \refersec{app:duplicateeliminationexample2fortransource}.
+
+
+\paragraph{Duplicate elimination example 2: Fortran source} 
+\label{app:duplicateeliminationexample2fortransource}
+
+File CommonStuff.fh
+
+\begin{lstlisting}
+IMPLICIT INTEGER(A-Z)
+COMMON /Common1/ C(100)
+PARAMETER(SEVEN = 7)
+\end{lstlisting}
+
+File Func.f
+\begin{lstlisting}
+
+FUNCTION FOO (N)
+INCLUDE 'CommonStuff.fh'
+FOO = C(N + SEVEN)
+RETURN
+END
+\end{lstlisting}
+
+
+Section \refersec{app:duplicateeliminationexample2dwarfsectiongroup}
+shows the section group 
+corresponding to the included file CommonStuff.fh.
+
+\paragraph{Duplicate elimination example 2: DWARF section group}
+\label{app:duplicateeliminationexample2dwarfsectiongroup}
+
+\begin{alltt}
+==== Section group name:
+
+    my.f90.company.f90.CommonStuff.fh.654321
+
+== section .debug\_info
+
+DW.myf90.CommonStuff.fh.654321.1:    ! linker global symbol
+    DW\_TAG\_partial\_unit
+        ! ...compilation unit attributes, including...
+        DW\_AT\_language(DW\_LANG\_Fortran90)
+        DW\_AT\_identifier\_case(DW\_ID\_case\_insensitive)
+
+DW.myf90.CommonStuff.fh.654321.2: ! linker global symbol
+3\$: DW\_TAG\_array\_type
+        ! unnamed
+        DW\_AT\_type(reference to DW.f90.F90\$main.f.2)
+            ! base type INTEGER
+        DW\_TAG\_subrange\_type
+            DW\_AT\_type(reference to DW.f90.F90\$main.f.2)
+                ! base type INTEGER)
+            DW\_AT\_lower\_bound(constant 1)
+            DW\_AT\_upper\_bound(constant 100)
+
+DW.myf90.CommonStuff.fh.654321.3: ! linker global symbol
+    DW\_TAG\_common\_block
+        DW\_AT\_name("Common1")
+        DW\_AT\_location(Address of common block Common1)
+        DW\_TAG\_variable
+            DW\_AT\_name("C")
+            DW\_AT\_type(reference to 3\$)
+            DW\_AT\_location(address of C)
+
+DW.myf90.CommonStuff.fh.654321.4: ! linker global symbol
+    DW\_TAG\_constant
+        DW\_AT\_name("SEVEN")
+        DW\_AT\_type(reference to DW.f90.F90\$main.f.2)
+            ! base type INTEGER
+        DW\_AT\_const\_value(constant 7)
+\end{alltt}
+
+Section \refersec{app:duplicateeliminationexample2primaryunit}
+shows the sections for the primary compilation unit.
+
+
+
+\paragraph{Duplicate elimination example 2: primary unit }
+\label{app:duplicateeliminationexample2primaryunit}
+\begin{alltt}
+== section .text
+    [code for function Foo]
+
+== section .debug\_info
+    DW\_TAG\_compile\_unit
+        DW\_TAG\_subprogram
+            DW\_AT\_name("Foo")
+            DW\_AT\_type(reference to DW.f90.F90\$main.f.2)
+                ! base type INTEGER
+            DW\_TAG\_imported\_unit
+                DW\_AT\_import(reference to
+                    DW.myf90.CommonStuff.fh.654321.1)
+            DW\_TAG\_common\_inclusion ! For Common1
+                DW\_AT\_common\_reference(reference to
+                    DW.myf90.CommonStuff.fh.654321.3)
+            DW\_TAG\_variable ! For function result
+                DW\_AT\_name("Foo")
+                    DW\_AT\_type(reference to DW.f90.F90\$main.f.2)
+                        ! base type INTEGER
+\end{alltt}
+
+A companion main program is shown in 
+Section \refersec{app:duplicateeliminationexample2companionsource}
+
+\paragraph{Duplicate elimination example 2: companion source }
+\label{app:duplicateeliminationexample2companionsource}
+
+File Main.f 
+
+\begin{lstlisting}
+INCLUDE 'CommonStuff.fh'
+C(50) = 8
+PRINT *, 'Result = ', FOO(50 - SEVEN)
+END
+\end{lstlisting}
+
+That main program results in an object file that
+contained a duplicate of the section group named
+my.f90.company.f90.CommonStuff.fh.654321 
+corresponding to the
+included file as well as the remainder of the main subprogram
+as shown in 
+Section \refersec{app:duplicateeliminationexample2companiondwarf}.
+
+\paragraph{Duplicate elimination example 2: companion DWARF }
+\label{app:duplicateeliminationexample2companiondwarf}
+
+\begin{alltt}
+== section .debug\_info
+    DW\_TAG\_compile\_unit
+        DW\_AT\_name(F90\$main)
+        DW\_TAG\_base\_type
+            DW\_AT\_name("INTEGER")
+            DW\_AT\_encoding(DW\_ATE\_signed)
+            DW\_AT\_byte\_size(...)
+
+        DW\_TAG\_base\_type
+            ...
+        ...  ! other base types
+        DW\_TAG\_subprogram
+            DW\_AT\_name("F90\$main")
+            DW\_TAG\_imported\_unit
+                DW\_AT\_import(reference to
+                    DW.myf90.CommonStuff.fh.654321.1)
+            DW\_TAG\_common\_inclusion ! for Common1
+                DW\_AT\_common\_reference(reference to
+                    DW.myf90.CommonStuff.fh.654321.3)
+            ...
+\end{alltt}
+
+
+This example uses DW\_TAG\_partial\_unit for the section group
+because the included declarations are not independently
+visible as global entities.
+
+
+\subsubsection{C Example}
+
+The C++ example in this Section might appear to be equally
+valid as a C example. However, it is prudent to include
+a DW\_TAG\_imported\_unit in the primary unit (see Figure 84)
+with an DW\_AT\_import attribute that refers to the proper unit
+in the section group.
+
+\textit{The C rules for consistency of global (file scope) symbols
+across compilations are less strict than for C++; inclusion
+of the import unit attribute assures that the declarations of
+the proper section group are considered before declarations
+from other compilations.}
+
+
+\section{Using Type Units}
+\label{app:usingtypeunits}
+
+A large portion of debug information is type information, and
+in a typical compilation environment, many types are duplicated
+many times. One method of controlling the amount of duplication
+is separating each type into a separate .debug\_types section
+and arranging for the linker to recognize and eliminate
+duplicates at the individual type level.
+
+Using this technique, each substantial type definition is
+placed in its own individual section, while the remainder
+of the DWARF information (non-type information, incomplete
+type declarations, and definitions of trivial types) is
+placed in the usual debug information section. In a typical
+implementation, the relocatable object file may contain one
+of each of these debug sections:
+
+\begin{alltt}
+.debug\_abbrev
+.debug\_info
+.debug\_line
+\end{alltt}
+
+and any number of these additional sections:
+
+\begin{alltt}
+.debug\_types
+\end{alltt}
+
+As discussed in the previous section 
+(Section \refersec{app:usingcompilationunits}), 
+many
+linkers today support the concept of a COMDAT group or
+linkonce section. The general idea is that a ``key'' can be
+attached to a section or a group of sections, and the linker
+will include only one copy of a section group (or individual
+section) for any given key. For .debug\_types sections, the
+key is the type signature formed from the algorithm given in
+Section \refersec{datarep:typesignaturecomputation}.
+
+\subsection{Signature Computation Example}
+\label{app:signaturecomputationexample}
+
+As an example, consider a C++ header file 
+containing the type definitions shown
+in Section \refersec{app:typesignatureexamplescsource}.
+
+\subsubsection{ Type signature examples: C++ source}
+\label{app:typesignatureexamplescsource}
+\begin{lstlisting}
+namespace N {
+
+ struct B;
+
+ struct C {
+     int x;
+     int y;
+ };
+
+ class A {
+   public:
+     A(int v);
+     int v();
+   private:
+     int v_;
+     struct A *next;
+     struct B *bp;
+     struct C c;
+ };
+
+ }
+\end{lstlisting}
+
+Next, consider one possible representation of the DWARF
+information that describes the type “struct C” as shown
+in 
+\refersec{app:typesignaturecomputation1dwarfrepresentation}:
+
+\subsubsection{Type signature  computation 1: DWARF representation}
+\label{app:typesignaturecomputation1dwarfrepresentation}
+
+\begin{alltt}
+  DW\_TAG\_type\_unit
+      DW\_AT\_language: DW\_LANG\_C\_plus\_plus (4)
+    DW\_TAG\_namespace
+        DW\_AT\_name: "N"
+L1:
+      DW\_TAG\_structure\_type
+          DW\_AT\_name: "C"
+          DW\_AT\_byte\_size: 8
+          DW\_AT\_decl\_file: 1
+          DW\_AT\_decl\_line: 5
+        DW\_TAG\_member
+            DW\_AT\_name: "x"
+            DW\_AT\_decl\_file: 1
+            DW\_AT\_decl\_line: 6
+            DW\_AT\_type: reference to L2
+            DW\_AT\_data\_member\_location: 0
+        DW\_TAG\_member
+            DW\_AT\_name: "y"
+            DW\_AT\_decl\_file: 1
+            DW\_AT\_decl\_line: 7
+            DW\_AT\_type: reference to L2
+            DW\_AT\_data\_member\_location: 4
+L2:
+     DW\_TAG\_base\_type
+         DW\_AT\_byte\_size: 4
+         DW\_AT\_encoding: DW\_ATE\_signed
+         DW\_AT\_name: "int"
+\end{alltt}
+
+In computing a signature for the type N::C, flatten the type
+description into a byte stream according to the procedure
+outlined in 
+Section \refersec{datarep:typesignaturecomputation}.
+The result is shown in 
+Section \refersec{app:typesignaturecomputation1flattenedbytestream}.
+
+\subsubsection{Type signature  computation 1: flattened byte stream}
+\label{app:typesignaturecomputation1flattenedbytestream}
+
+\begin{alltt}
+// Step 2: 'C' DW\_TAG\_namespace "N"
+0x43 0x39 0x4e 0x00
+// Step 3: 'D' DW\_TAG\_structure\_type
+0x44 0x13
+// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "C"
+0x41 0x03 0x08 0x43 0x00
+// Step 4: 'A' DW\_AT\_byte\_size DW\_FORM\_sdata 8
+0x41 0x0b 0x0d 0x08
+// Step 7: First child ("x")
+    // Step 3: 'D' DW\_TAG\_member
+    0x44 0x0d
+    // Step 4: 'A' DW\_AT\_name DW\_FORM\_string "x"
+    0x41 0x03 0x08 0x78 0x00
+    // Step 4: 'A' DW\_AT\_data\_member\_location DW\_FORM\_sdata 0
+    0x41 0x38 0x0d 0x00
+    // Step 6: 'T' DW\_AT\_type (type \#2)
+    0x54 0x49
+        // Step 3: 'D' DW\_TAG\_base\_type
+        0x44 0x24
+        // Step 4: 'A' DW\_AT\_name DW\_FORM\_string "int"
+        0x41 0x03 0x08 0x69 0x6e 0x74 0x00
+        // Step 4: 'A' DW\_AT\_byte\_size DW\_FORM\_sdata 4
+        0x41 0x0b 0x0d 0x04
+        // Step 4: 'A' DW\_AT\_encoding DW\_FORM\_sdata DW\_ATE\_signed
+        0x41 0x3e 0x0d 0x05
+        // Step 7: End of DW\_TAG\_base\_type "int"
+        0x00
+    // Step 7: End of DW\_TAG\_member "x"
+    0x00
+// Step 7: Second child ("y")
+    // Step 3: 'D' DW\_TAG\_member
+    0x44 0x0d
+    // Step 4: 'A' DW\_AT\_name DW\_FORM\_string "y"
+    0x41 0x03 0x08 0x78 0x00
+    // Step 4: 'A' DW\_AT\_data\_member\_location DW\_FORM\_sdata 4
+    0x41 0x38 0x0d 0x04
+    // Step 6: 'R' DW\_AT\_type (type \#2)
+    0x52 0x49 0x02
+    // Step 7: End of DW\_TAG\_member "y"
+    0x00
+// Step 7: End of DW\_TAG\_structure\_type "C"
+0x00
+\end{alltt}
+
+Running an MD5 hash over this byte stream, and taking the
+low\dash order 64 bits, yields the final signature: 
+0xd28081e8 dcf5070a.
+
+Next, consider a representation of the DWARF information that
+describes the type ``class A'' as shown in 
+Section \refersec{app:typesignaturecomputation2dwarfrepresentation}.
+
+
+\subsubsection{Type signature  computation 2: DWARF representation}
+\label{app:typesignaturecomputation2dwarfrepresentation}
+
+\begin{alltt}
+  DW\_TAG\_type\_unit
+      DW\_AT\_language: DW\_LANG\_C\_plus\_plus (4)
+    DW\_TAG\_namespace
+          DW\_AT\_name: "N"
+L1:
+        DW\_TAG\_class\_type
+             DW\_AT\_name: "A"
+             DW\_AT\_byte\_size: 20
+             DW\_AT\_decl\_file: 1
+             DW\_AT\_decl\_line: 10
+           DW\_TAG\_member
+                DW\_AT\_name: "v\_"
+                DW\_AT\_decl\_file: 1
+                DW\_AT\_decl\_line: 15
+                DW\_AT\_type: reference to L2
+                DW\_AT\_data\_member\_location: 0
+                DW\_AT\_accessibility: DW\_ACCESS\_private
+          DW\_TAG\_member
+               DW\_AT\_name: "next"
+               DW\_AT\_decl\_file: 1
+               DW\_AT\_decl\_line: 16
+               DW\_AT\_type: reference to L3
+               DW\_AT\_data\_member\_location: 4
+               DW\_AT\_accessibility: DW\_ACCESS\_private
+          DW\_TAG\_member
+               DW\_AT\_name: "bp"
+               DW\_AT\_decl\_file: 1
+               DW\_AT\_decl\_line: 17
+               DW\_AT\_type: reference to L4
+               DW\_AT\_data\_member\_location: 8
+               DW\_AT\_accessibility: DW\_ACCESS\_private
+          DW\_TAG\_member
+               DW\_AT\_name: "c"
+               DW\_AT\_decl\_file: 1
+               DW\_AT\_decl\_line: 18
+               DW\_AT\_type: 0xd28081e8 dcf5070a (signature for struct C)
+               DW\_AT\_data\_member\_location: 12
+               DW\_AT\_accessibility: DW\_ACCESS\_private
+       DW\_TAG\_subprogram
+           DW\_AT\_external: 1
+           DW\_AT\_name: "A"
+           DW\_AT\_decl\_file: 1
+           DW\_AT\_decl\_line: 12
+           DW\_AT\_declaration: 1
+        DW\_TAG\_formal\_parameter
+           DW\_AT\_type: reference to L3
+           DW\_AT\_artificial: 1
+        DW\_TAG\_formal\_parameter
+           DW\_AT\_type: reference to L2
+       DW\_TAG\_subprogram
+           DW\_AT\_external: 1
+           DW\_AT\_name: "v"
+           DW\_AT\_decl\_file: 1
+           DW\_AT\_decl\_line: 13
+           DW\_AT\_type: reference to L2
+           DW\_AT\_declaration: 1
+         DW\_TAG\_formal\_parameter
+           DW\_AT\_type: reference to L3
+           DW\_AT\_artificial: 1
+L2:
+    DW\_TAG\_base\_type
+         DW\_AT\_byte\_size: 4
+         DW\_AT\_encoding: DW\_ATE\_signed
+         DW\_AT\_name: "int"
+L3:
+    DW\_TAG\_pointer\_type
+         DW\_AT\_type: reference to L1
+L4:
+    DW\_TAG\_pointer\_type
+         DW\_AT\_type: reference to L5
+    DW\_TAG\_namespace
+         DW\_AT\_name: "N"
+L5:
+       DW\_TAG\_structure\_type
+           DW\_AT\_name: "B"
+           DW\_AT\_declaration: 1
+\end{alltt}
+
+In this example, the structure types N::A and N::C have each
+been placed in separate type units.  For N::A, the actual
+definition of the type begins at label L1. The definition
+involves references to the int base type and to two pointer
+types. The information for each of these referenced types is
+also included in this type unit, since base types and pointer
+types are trivial types that are not worth the overhead of a
+separate type unit. The last pointer type contains a reference
+to an incomplete type N::B, which is also included here as
+a declaration, since the complete type is unknown and its
+signature is therefore unavailable. There is also a reference
+to N::C, using DW\_FORM\_sig8 to refer to the type signature
+for that type.
+
+In computing a signature for the type N::A, flatten the type
+description into a byte stream according to the procedure
+outlined in 
+Section \refersec{datarep:typesignaturecomputation}.
+The result is shown in 
+Section \refersec{app:typesignatureexample2flattenedbytestream}.
+
+\subsubsection{Type signature example 2: flattenedbytestream}
+\label{app:typesignatureexample2flattenedbytestream}
+
+\begin{alltt}
+// Step 2: 'C' DW\_TAG\_namespace "N"
+0x43 0x39 0x4e 0x00
+// Step 3: 'D' DW\_TAG\_class\_type
+0x44 0x02
+// Step 4: 'A' DW\_AT\_name DW\_FORM\_string "A"
+0x41 0x03 0x08 0x41 0x00
+// Step 4: 'A' DW\_AT\_byte\_size DW\_FORM\_sdata 20
+0x41 0x0b 0x0d 0x14
+// Step 7: First child ("v\_")
+    // Step 3: 'D' DW\_TAG\_member
+    0x44 0x0d
+    // Step 4: 'A' DW\_AT\_name DW\_FORM\_string "v\_"
+    0x41 0x03 0x08 0x76 0x5f 0x00
+    // Step 4: 'A' DW\_AT\_accessibility DW\_FORM\_sdata DW\_ACCESS\_private
+    0x41 0x32 0x0d 0x03
+    // Step 4: 'A' DW\_AT\_data\_member\_location DW\_FORM\_sdata 0
+    0x41 0x38 0x0d 0x00
+    // Step 6: 'T' DW\_AT\_type (type \#2)
+    0x54 0x49
+        // Step 3: 'D' DW\_TAG\_base\_type
+        0x44 0x24
+        // Step 4: 'A' DW\_AT\_name DW\_FORM\_string "int"
+        0x41 0x03 0x08 0x69 0x6e 0x74 0x00
+        // Step 4: 'A' DW\_AT\_byte\_size DW\_FORM\_sdata 4
+        0x41 0x0b 0x0d 0x04
+        // Step 4: 'A' DW\_AT\_encoding DW\_FORM\_sdata DW\_ATE\_signed
+        0x41 0x3e 0x0d 0x05
+        // Step 7: End of DW\_TAG\_base\_type "int"
+        0x00
+    // Step 7: End of DW\_TAG\_member "v\_"
+    0x00
+// Step 7: Second child ("next")
+    // Step 3: 'D' DW\_TAG\_member
+    0x44 0x0d
+    // Step 4: 'A' DW\_AT\_name DW\_FORM\_string "next"
+    0x41 0x03 0x08 0x6e 0x65 0x78 0x74 0x00
+    // Step 4: 'A' DW\_AT\_accessibility DW\_FORM\_sdata DW\_ACCESS\_private
+    0x41 0x32 0x0d 0x03
+    // Step 4: 'A' DW\_AT\_data\_member\_location DW\_FORM\_sdata 4
+    0x41 0x38 0x0d 0x04
+    // Step 6: 'T' DW\_AT\_type (type \#3)
+    0x54 0x49
+        // Step 3: 'D' DW\_TAG\_pointer\_type
+        0x44 0x0f
+        // Step 5: 'N' DW\_AT\_type
+        0x4e 0x49
+        // Step 5: 'C' DW\_AT\_namespace "N" 'E'
+        0x43 0x39 0x4e 0x00 0x45
+        // Step 5: "A"
+        0x41 0x00
+        // Step 7: End of DW\_TAG\_pointer\_type
+        0x00
+    // Step 7: End of DW\_TAG\_member "next"
+    0x00
+// Step 7: Third child ("bp")
+    // Step 3: 'D' DW\_TAG\_member
+    0x44 0x0d
+    // Step 4: 'A' DW\_AT\_name DW\_FORM\_string "bp"
+    0x41 0x03 0x08 0x62 0x70 0x00
+    // Step 4: 'A' DW\_AT\_accessibility DW\_FORM\_sdata DW\_ACCESS\_private
+    0x41 0x32 0x0d 0x03
+    // Step 4: 'A' DW\_AT\_data\_member\_location DW\_FORM\_sdata 8
+    0x41 0x38 0x0d 0x08
+    // Step 6: 'T' DW\_AT\_type (type \#4)
+    0x54 0x49
+        // Step 3: 'D' DW\_TAG\_pointer\_type
+0x44 0x0f
+        // Step 5: 'N' DW\_AT\_type
+        0x4e 0x49
+        // Step 5: 'C' DW\_AT\_namespace "N" 'E'
+        0x43 0x39 0x4e 0x00 0x45
+        // Step 5: "B"
+        0x42 0x00
+        // Step 7: End of DW\_TAG\_pointer\_type
+        0x00
+    // Step 7: End of DW\_TAG\_member "next"
+    0x00
+// Step 7: Fourth child ("c")
+    // Step 3: 'D' DW\_TAG\_member
+    0x44 0x0d
+    // Step 4: 'A' DW\_AT\_name DW\_FORM\_string "c"
+    0x41 0x03 0x08 0x63 0x00
+    // Step 4: 'A' DW\_AT\_accessibility DW\_FORM\_sdata DW\_ACCESS\_private
+    0x41 0x32 0x0d 0x03
+    // Step 4: 'A' DW\_AT\_data\_member\_location DW\_FORM\_sdata 12
+    0x41 0x38 0x0d 0x0c
+    // Step 6: 'T' DW\_AT\_type (type \#5)
+    0x54 0x49
+        // Step 2: 'C' DW\_TAG\_namespace "N"
+        0x43 0x39 0x4e 0x00
+        // Step 3: 'D' DW\_TAG\_structure\_type
+        0x44 0x13
+        // Step 4: 'A' DW\_AT\_name DW\_FORM\_string "C"
+        0x41 0x03 0x08 0x43 0x00
+        // Step 4: 'A' DW\_AT\_byte\_size DW\_FORM\_sdata 8
+        0x41 0x0b 0x0d 0x08
+        // Step 7: First child ("x")
+            // Step 3: 'D' DW\_TAG\_member
+            0x44 0x0d
+            // Step 4: 'A' DW\_AT\_name DW\_FORM\_string "x"
+            0x41 0x03 0x08 0x78 0x00
+            // Step 4: 'A' DW\_AT\_data\_member\_location DW\_FORM\_sdata 0
+            0x41 0x38 0x0d 0x00
+            // Step 6: 'R' DW\_AT\_type (type \#2)
+            0x52 0x49 0x02
+            // Step 7: End of DW\_TAG\_member "x"
+            0x00
+        // Step 7: Second child ("y")
+            // Step 3: 'D' DW\_TAG\_member
+            0x44 0x0d
+            // Step 4: 'A' DW\_AT\_name DW\_FORM\_string "y"
+            0x41 0x03 0x08 0x79 0x00
+            // Step 4: 'A' DW\_AT\_data\_member\_location DW\_FORM\_sdata 4
+            0x41 0x38 0x0d 0x04
+            // Step 6: 'R' DW\_AT\_type (type \#2)
+            0x52 0x49 0x02
+            // Step 7: End of DW\_TAG\_member "y"
+            0x00
+        // Step 7: End of DW\_TAG\_structure\_type "C"
+        0x00
+    // Step 7: End of DW\_TAG\_member "c"
+    0x00
+// Step 7: Fifth child ("A")
+    // Step 3: 'S' DW\_TAG\_subprogram "A"
+    0x53 0x2e 0x41 0x00
+// Step 7: Sixth child ("v")
+    // Step 3: 'S' DW\_TAG\_subprogram "v"
+    0x53 0x2e 0x76 0x00
+// Step 7: End of DW\_TAG\_structure\_type "A"
+0x00
+\end{alltt}
+
+Running an MD5 hash over this byte stream, and taking the
+low-order 64 bits, yields the final signature: 0xd6d160f5
+5589f6e9.
+
+
+A source file that includes this header file may declare a
+variable of type N::A, and its DWARF information may look
+that shown in 
+Section \refersec{app:typesignatureexampleusage}.
+
+
+\subsubsection{Type signature example usage}
+\label{app:typesignatureexampleusage}
+
+\begin{alltt}
+  DW\_TAG\_compile\_unit
+  ...
+  DW\_TAG\_subprogram
+    ...
+    DW\_TAG\_variable
+      DW\_AT\_name: "a"
+      DW\_AT\_type: (signature) 0xd6d160f5 5589f6e9
+      DW\_AT\_location: ...
+    ...
+\end{alltt}
+
+\subsection{Type Signature Computation Grammar}
+\label{app:typesignaturecomputationgrammar}
+
+This section
+presents a semi-formal grammar that may aid in understanding
+how the bytes of the flattened type description are formed
+during the type signature computation algorithm of Section
+Section \refersec{datarep:typesignaturecomputation}. 
+
+
+\begin{alltt}
+signature
+    : opt-context debug-entry attributes children
+
+opt-context           // Step 2
+    : 'C' tag-code string opt-context
+    : empty
+
+debug-entry           // Step 3
+    : 'D' tag-code
+
+attributes            // Steps 4, 5, 6
+    : attribute attributes
+    : empty
+
+attribute
+    : 'A' at-code form-encoded-value     // Normal attributes
+    : 'N' at-code opt-context 'E' string // Reference to type
+                                         // by name
+    : 'R' at-code back-ref               // Back-reference 
+                                         // to visited type
+    : 'T' at-code signature              // Recursive type
+children             //  Step 7
+    : child children
+    : '\\0'
+
+child
+    : 'S' tag-code string
+    : signature
+tag-code
+    : <ULEB128>
+at-code
+    : <ULEB128>
+form-encoded-value
+    : DW\_FORM\_sdata value
+    : DW\_FORM\_flag value
+    : DW\_FORM\_string string
+    : DW\_FORM\_block block
+DW\_FORM\_string
+    : '\\x08'
+DW\_FORM\_block
+    : '\\x09'
+DW\_FORM\_flag
+    : '\\x0c'
+DW\_FORM\_sdata
+    : '\\x0d'
+value
+    : <SLEB128>
+block
+    : <ULEB128> <fixed-length-block>
+                      // The ULEB128 gives the length of the block
+back-ref
+    : <ULEB128>
+string
+    : <null-terminated-string>
+empty
+    :
+\end{alltt}
+
+
+\section{Summary of Compression Techniques}
+\label{app:summaryofcompressiontechniques}
+\subsection{\#include compression}
+\label{app:includecompression}
+
+C++ has a much greater problem than C with the number and
+size of the headers included and the amount of data in each,
+but even with C there is substantial header file information
+duplication.
+
+A reasonable approach is to put each header file in its own
+section group, using the naming rules mentioned above. The
+section groups are marked to ensure duplicate removal.
+
+All data instances and code instances (even if they came
+from the header files above) are put into non-section group
+sections such as the base object file .debug\_info section.
+
+\subsection{Eliminating function duplication}
+\label{app:eliminatingfunctionduplication}
+
+
+Function templates (C++) result in code for the same template
+instantiation being compiled into multiple archives or
+relocatable objects. The linker wants to keep only one of a
+given entity. The DWARF description, and everything else for
+this function, should be reduced to just a single copy.
+
+For each such code group (function template in this example)
+the compiler assigns a name for the group which will match
+all other instantiations of this function but match nothing
+else. The section groups are marked to ensure duplicate
+removal, so that the second and subsequent definitions seen
+by the static linker are simply discarded.
+
+
+References to other .debug\_info sections follow the approach
+suggested above, but the naming rule might be slightly
+different in that the 
+\begin{alltt}
+<file-designator> 
+\end{alltt}
+should be interpreted
+as a 
+\begin{alltt}
+<function-designator>.
+\end{alltt}
+
+
+
+\subsection{Single-function-per-DWARF-compilation-unit}
+\label{app:singlefunctionperdwarfcompilationunit}
+
+Section groups can help make it easy for a linker to completely
+remove unused functions.
+
+Such section groups are not marked for duplicate removal,
+since the functions are not duplicates of anything.
+
+Each function is given a compilation unit and a section
+group. Each such compilation unit is complete, with its own
+text, data, and DWARF sections.
+
+There will also be a compilation unit that has the file\dash level
+declarations and definitions. Other per\dash function compilation
+unit DWARF information (.debug\_info) points to this common
+file\dash level compilation unit using DW\_TAG\_imported\_unit.
+
+Section groups can use DW\_FORM\_ref\_addr and internal labels
+(section\dash relative relocations) to refer to the main object
+file sections, as the section groups here are either deleted
+as unused or kept. There is no possibility (aside from error)
+of a group from some other compilation being used in place
+of one of these groups.
+
+
+\subsection{Inlining and out-of-line-instances}
+\label{app:inliningandoutoflineinstances}
+
+Abstract instances and concrete-out-of-line instances may be
+put in distinct compilation units using section groups. This
+makes possible some useful duplicate DWARF elimination.
+
+\textit{No special provision for eliminating class duplication
+resulting from template instantiation is made here, though
+nothing prevents eliminating such duplicates using section
+groups.}
+
+
+\subsection{Separate Type Units}
+\label{app:separatetypeunits}
+
+Each complete declaration of a globally-visible type can be
+placed in its own separate type section, with a group key
+derived from the type signature. The linker can then remove
+all duplicate type declarations based on the key.
+
diff --git a/dwarf5/latexdoc/copyright.tex b/dwarf5/latexdoc/copyright.tex
new file mode 100644 (file)
index 0000000..9bceed6
--- /dev/null
@@ -0,0 +1,62 @@
+\renewcommand{\abstractname}{Copyright}
+\setlength{\parindent}{0pt}
+\begin{abstract}
+\setlength{\parindent}{0pt}
+\nonzeroparskip
+
+\dwf, Version 5 (Draft)
+
+Copyright \copyright 2012 \dwf\ Committee
+
+Permission is granted to copy, 
+distribute and/or modify this document under the terms of the
+GNU Free Documentation License, Version 1.3; with no 
+Invariant Sections, with no \mbox{Front-Cover}
+Texts, and with no \mbox{Back-Cover} Texts. 
+
+A copy of the license is included in the section entitled
+``GNU Free Documentation License''.
+
+This document is based in part on the \dwf, Version 2,
+which contained the following notice:
+
+\begin{myindentpara}{1cm}
+UNIX International
+
+Programming Languages SIG
+
+Revision: 2.0.0 (July 27, 1993)
+
+Copyright \copyright 1992, 1993 UNIX International, Inc.
+
+Permission to use, copy, modify, and distribute this
+documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appears
+in all copies and that both that copyright notice and this
+permission notice appear in supporting documentation, and
+that the name UNIX International not be used in advertising or
+publicity pertaining to distribution of the software without
+specific, written prior permission. 
+UNIX International makes
+no representations about the suitability of this documentation
+for any purpose. 
+It is provided ``as is'' without express
+or implied warranty.
+
+\end{myindentpara}
+
+This document is further based on the \dwf, Version 4, which
+is subject to the GNU Free Documentation License.
+
+Trademarks:
+
+\begin{itemize}
+\item Intel386 is a trademark of Intel Corporation.
+
+\item Java is a trademark of Sun Microsystems, Inc.
+
+\item All other trademarks found herein are property of their respective owners.
+
+\end{itemize}
+
+\end{abstract}
diff --git a/dwarf5/latexdoc/dataobject.tex b/dwarf5/latexdoc/dataobject.tex
new file mode 100644 (file)
index 0000000..7d5bd2d
--- /dev/null
@@ -0,0 +1,256 @@
+\chapter[Data Object and Object List]{Data Object and Object List Entries}
+\label{chap:dataobjectandobjectlistentries}
+
+This section presents the debugging information entries that
+describe individual data objects: variables, parameters and
+constants, and lists of those objects that may be grouped in
+a single declaration, such as a common block.
+
+\section{Data Object Entries}
+\label{chap:dataobjectentries}
+
+
+Program variables, formal parameters and constants are
+represented by debugging information entries with the tags
+DW\_TAG\_variable, DW\_TAG\_formal\_parameter and DW\_TAG\_constant,
+respectively.
+
+\textit{The tag DW\_TAG\_constant is used for languages that
+have true named constants.}
+
+The debugging information entry for a program variable,
+formal parameter or constant may have the following attributes:
+\begin{enumerate}[1.]
+\item A DW\_AT\_name attribute, whose value is a null-terminated
+string, containing the data object name as it appears in the
+source program.  If a variable entry describes an anonymous
+union, the name attribute is omitted or consists of a single
+zero byte.
+
+\item A DW\_AT\_external attribute, which is a flag, if the name
+of a variable is visible outside of its enclosing compilation
+unit.  The definitions of C++ static data members of structures
+or classes are represented by variable entries flagged as
+external. Both file static and local variables in C and C++
+are represented by non-external variable entries.
+
+\item A DW\_AT\_declaration attribute, which is a flag that
+indicates whether this entry represents a non-defining
+declaration of an object.
+
+\item A DW\_AT\_location attribute, whose value describes the
+location of a variable or parameter at run-time.  In a variable
+entry representing the definition of a variable (that is,
+with no DW\_AT\_declaration attribute) if no location attribute
+is present, or if the location attribute is present but has
+an empty location description (as described in Section 2.6),
+the variable is assumed to exist in the source code but not
+in the executable program (but see number 10, below).
+
+In a variable entry representing a non-defining declaration of a variable, the location
+specified modifies the location specified by the defining declaration and only applies for the
+scope of the variable entry; if no location is specified, then the location specified in the
+defining declaration applies.
+The location of a variable may be further specified with a DW\_AT\_segment attribute, if
+appropriate.
+
+\item A DW\_AT\_type attribute describing the type of the variable,
+constant or formal parameter.
+
+\item If the variable entry represents the defining declaration
+for a C++ static data member of a structure, class or union,
+the entry has a DW\_AT\_specification attribute, whose value is a
+reference to the debugging information entry representing the
+declaration of this data member. The referenced entry has the
+tag DW\_TAG\_member and will be a child of some class, structure
+or union type entry.  If the variable entry represents a
+non-defining declaration, DW\_AT\_specification may be used
+to reference the defining declaration of the variable. If
+no DW\_AT\_specification attribute is present, the defining
+declaration may be found as a global definition either in the
+current compilation unit or in another compilation unit with
+the DW\_AT\_external attribute.  Variable entries containing
+the DW\_AT\_specification attribute do not need to duplicate
+information provided by the declaration entry referenced by
+the specification attribute. In particular, such variable
+entries do not need to contain attributes for the name or
+type of the data member whose definition they represent.
+
+\item A DW\_AT\_variable\_parameter attribute, which is a flag,
+if a formal parameter entry represents a parameter whose
+value in the calling function may be modified by the callee..
+The absence of this attribute implies that the parameter’s
+value in the calling function cannot be modified by the callee.
+
+\item A DW\_AT\_is\_optional attribute, which is a flag, if a
+parameter entry represents an optional parameter.
+
+\item A DW\_AT\_default\_value attribute for a formal parameter
+entry. The value of this attribute is a reference to the
+debugging information entry for a variable or subroutine,
+or the value may be a constant. If the attribute form is of
+class reference, the default value of the parameter is the
+value of the referenced variable (which may be constant) or
+the value returned by the referenced subroutine; a reference
+value of 0 means that no default value has been specified.
+If the value is of class constant, that constant is interpreted
+as a default value of the type of the formal parameter.
+
+\textit{For a constant form there is no way to 
+express the absence of a default value.}
+
+\item A DW\_AT\_const\_value attribute for an entry describing a
+variable or formal parameter whose value is constant and not
+represented by an object in the address space of the program,
+or an entry describing a named constant. (Note that such
+an entry does not have a location attribute.) The value of
+this attribute may be a string or any of the constant data
+or data block forms, as appropriate for the representation
+of the variable’s value. The value is the actual constant
+value of the variable, represented as it would be on the
+target architecture.  One way in which a formal parameter
+with a constant value and no location can arise is for a
+formal parameter of an inlined subprogram that corresponds
+to a constant actual parameter of a call that is inlined.
+
+\item A DW\_AT\_start\_scope attribute if the scope of an
+object is smaller than (that is, is a subset of the addresses
+of) the scope most closely enclosing the object. There are
+two cases:
+\begin{enumerate}[a)]
+\item If the scope of the object entry includes all of the
+containing scope except for a contiguous sequence of bytes at
+the beginning of that containing scope, then the scope of the
+object is specified using a value of class constant. If the
+containing scope is contiguous, the value of this attribute
+is the offset in bytes of the beginning of the scope for the
+object from the low pc value of the debugging information
+entry that defines its scope. If the containing scope
+is non-contiguous (see Section 2.17.3), the value of this
+attribute is the offset in bytes of the beginning of the scope
+for the object from the beginning of the first range list entry
+that is not a base selection entry or an end of list entry.
+
+\item Otherwise, the scope of the object is specified using
+a value of class rangelistptr. This value indicates the
+beginning of a range list (see Section 2.17.3).
+\end{enumerate}
+
+
+\textit{The scope of a variable may begin somewhere in the middle of
+a lexical block in a language that allows executable code in a
+block before a variable declaration, or where one declaration
+containing initialization code may change the scope of a
+subsequent declaration.  For example, in the following C code:}
+
+\begin{lstlisting}
+float x = 99.99;
+int myfunc()
+{
+    float f = x;
+    float x = 88.99;
+    return 0;
+}
+\end{lstlisting}
+
+\textit{C scoping rules require that the value of the variable x
+assigned to the variable f in the initialization sequence is
+the value of the global variable x, rather than the local x,
+because the scope of the local variable x only starts after
+the full declarator for the local x.}
+
+\textit{Due to optimization, the scope of an object may be
+non-contiguous and require use of a range list even when
+the containing scope is contiguous. Conversely, the scope of
+an object may not require its own range list even when the
+containing scope is non\dash contiguous.}
+
+\item A DW\_AT\_endianity attribute, whose value is a constant
+that specifies the endianity of the object. The value of
+this attribute specifies an ABI\dash defined byte ordering for
+the value of the object. If omitted, the default endianity
+of data for the given type is assumed.  The set of values
+and their meaning for this attribute is given in 
+Figure \refersec{fig:endianityattributevalues}.
+
+\begin{figure}[here]
+\centering
+\begin{tabular}{lp{9cm}}
+Name&Meaning\\ \hline
+DW\_END\_default &  Default endian encoding
+  (equivalent to the absence of a 
+  DW\_AT\_endianity attribute) \\
+DW\_END\_big & Big\dash endian encoding \\
+DW\_END\_little& Little-endian encoding \\
+\end{tabular}
+\caption{Endianity attribute values}
+\label{fig:endianityattributevalues}
+\end{figure}
+
+
+These represent the default encoding formats as defined by
+the target architecture’s ABI or processor definition. The
+exact definition of these formats may differ in subtle ways
+for different architectures.
+
+
+\item A DW\_AT\_const\_expr attribute, which is a flag, if a
+variable entry represents a C++ object declared with the
+constexpr specifier. This attributes indicates that the
+variable can be evaluated as a compile\dash time constant.  
+
+\textit{In C++,
+a variable declared with constexpr is implicitly const. Such a
+variable has a DW\_AT\_type attribute whose value is a reference
+to a debugging information entry}
+
+\item A DW\_AT\_linkage\_name attribute for a 
+variable or constant entry as described in 
+Section \refersec{chap:linkagenames}.
+
+\end{enumerate}
+
+FIXME incomplete
+
+
+\section{Common Block Entries}
+\label{chap:commonblockentries}
+A Fortran common block may be described by a debugging
+information entry with the tag DW\_TAG\_common\_block. The
+common block entry has a DW\_AT\_name attribute whose value
+is a null-terminated string containing the common block
+name as it appears in the source program. It may also have a
+DW\_AT\_linkage\_name attribute as described in 
+Section \refersec{chap:linkagenames}. 
+It
+also has a DW\_AT\_location attribute whose value describes the
+location of the beginning of the common block. The common
+block entry owns debugging information entries describing
+the variables contained within the common block.
+
+\section{Namelist Entries}
+\label{chap:namelistentries}
+\textit{At least one language, Fortran 90, has the concept of a
+namelist. A namelist is an ordered list of the names of some
+set of declared objects. The namelist object itself may be used
+as a replacement for the list of names in various contexts.}
+
+A namelist is represented by a debugging information entry
+with the tag DW\_TAG\_namelist. If the namelist itself has a
+name, the namelist entry has a DW\_AT\_name attribute, whose
+value is a null-terminated string containing the namelist’s
+name as it appears in the source program.
+
+Each name that is part of the namelist is represented
+by a debugging information entry with the tag
+DW\_TAG\_namelist\_item. Each such entry is a child of the
+namelist entry, and all of the namelist item entries for a
+given namelist are ordered as were the list of names they
+correspond to in the source program.
+
+Each namelist item entry contains a DW\_AT\_namelist\_item
+attribute whose value is a reference to the debugging
+information entry representing the declaration of the item
+whose name appears in the namelist.
+
+
diff --git a/dwarf5/latexdoc/datarepresentation.tex b/dwarf5/latexdoc/datarepresentation.tex
new file mode 100644 (file)
index 0000000..9a2aa99
--- /dev/null
@@ -0,0 +1,2240 @@
+\chapter{Data Representation}
+\label{datarep:datarepresentation}
+
+This section describes the binary representation of the
+debugging information entry itself, of the attribute types
+and of other fundamental elements described above.
+
+
+\section{Vendor Extensibility}
+\label{datarep:vendorextensibility}
+
+To reserve a portion of the DWARF name space and ranges of
+enumeration values for use for vendor specific extensions,
+special labels are reserved for tag names, attribute names,
+base type encodings, location operations, language names,
+calling conventions and call frame instructions.
+
+The labels denoting the beginning and end of the reserved
+value range for vendor specific extensions consist of the
+appropriate prefix (DW\_TAG, DW\_AT, DW\_END, DW\_ATE, DW\_OP,
+DW\_LANG, DW\_LNE, DW\_CC or DW\_CFA respectively) followed by
+\_lo\_user or \_hi\_user. 
+\textit{For example, for entry tags, the special
+labels are DW\_TAG\_lo\_user and DW\_TAG\_hi\_user.}
+Values in the
+range between prefix\_lo\_user and prefix\_hi\_user inclusive,
+are reserved for vendor specific extensions. Vendors may
+use values in this range without conflicting with current or
+future system\dash defined values. All other values are reserved
+for use by the system.
+
+\textit{There may also be codes for vendor specific extensions
+between the number of standard line number opcodes and
+the first special line number opcode. However, since the
+number of standard opcodes varies with the DWARF version,
+the range for extensions is also version dependent. Thus,
+DW\_LNS\_lo\_user and DW\_LNS\_hi\_user symbols are not defined.}
+
+Vendor defined tags, attributes, base type encodings, location
+atoms, language names, line number actions, calling conventions
+and call frame instructions, conventionally use the form
+prefix\_vendor\_id\_name, where vendor\_id is some identifying
+character sequence chosen so as to avoid conflicts with
+other vendors.
+
+To ensure that extensions added by one vendor may be safely
+ignored by consumers that do not understand those extensions,
+the following rules should be followed:
+
+\begin{enumerate}[1.]
+\item New attributes should be added in such a way that a
+debugger may recognize the format of a new attribute value
+without knowing the content of that attribute value.
+
+\item The semantics of any new attributes should not alter
+the semantics of previously existing attributes.
+
+\item The semantics of any new tags should not conflict with
+the semantics of previously existing tags.
+
+\item Do not add any new forms of attribute value.
+
+\end{enumerate}
+
+
+\section{Reserved Values}
+\label{datarep:reservedvalues}
+\subsection{Error Values}
+\label{datarep:errorvalues}
+
+As a convenience for consumers of DWARF information, the value
+0 is reserved in the encodings for attribute names, attribute
+forms, base type encodings, location operations, languages,
+line number program opcodes, macro information entries and tag
+names to represent an error condition or unknown value. DWARF
+does not specify names for these reserved values, since they
+do not represent valid encodings for the given type and should
+not appear in DWARF debugging information.
+
+
+\subsection{Initial Length Values}
+\label{datarep:initiallengthvalues}
+
+An initial length field is one of the length fields that occur
+at the beginning of those DWARF sections that have a header
+(.debug\_aranges, .debug\_info, .debug\_types, .debug\_line,
+.debug\_pubnames, and .debug\_pubtypes) or the length field
+that occurs at the beginning of the CIE and FDE structures
+in the .debug\_frame section.
+
+In an initial length field, the values 0xfffffff0 through
+0xffffffff are reserved by DWARF to indicate some form of
+extension relative to DWARF Version 2; such values must not
+be interpreted as a length field. The use of one such value,
+0xffffffff, is defined below 
+(see Section \refersec{datarep:32bitand64bitdwarfformats}); 
+the use of
+the other values is reserved for possible future extensions.
+
+
+
+\section{Executable Objects and Shared Objects} 
+\label{datarep:executableobjectsandsharedobjects}
+
+The relocated addresses in the debugging information for an
+executable object are virtual addresses and the relocated
+addresses in the debugging information for a shared object
+are offsets relative to the start of the lowest region of
+memory loaded from that shared object.
+
+\textit{This requirement makes the debugging information for
+shared objects position independent.  Virtual addresses in a
+shared object may be calculated by adding the offset to the
+base address at which the object was attached. This offset
+is available in the run\dash time linker’s data structures.}
+
+
+
+\section{32-Bit and 64-Bit DWARF Formats}
+\label{datarep:32bitand64bitdwarfformats}
+
+There are two closely related file formats. In the 32\dash bit DWARF
+format, all values that represent lengths of DWARF sections
+and offsets relative to the beginning of DWARF sections are
+represented using 32\dash bits. In the 64\dash bit DWARF format, all
+values that represent lengths of DWARF sections and offsets
+relative to the beginning of DWARF sections are represented
+using 64\dash bits. A special convention applies to the initial
+length field of certain DWARF sections, as well as the CIE and
+FDE structures, so that the 32\dash bit and 64\dash bit DWARF formats
+can coexist and be distinguished within a single linked object.
+
+The differences between the 32\dash\   and 64\dash bit 
+DWARF formats are
+detailed in the following:
+
+
+\begin{enumerate}[1.]
+
+\item  In the 32\dash bit DWARF format, an initial length field
+(see Section \refersec{datarep:initiallengthvalues}) 
+is an unsigned 32\dash bit integer (which
+must be less than 0xfffffff0); in the 64\dash bit DWARF format,
+an initial length field is 96 bits in size, and has two parts:
+\begin{itemize}
+\item The first 32\dash bits have the value 0xffffffff.
+
+\item  The following 64\dash bits contain the actual length
+represented as an unsigned 64\dash bit integer.
+\end{itemize}
+
+\textit{This representation allows a DWARF consumer to dynamically
+detect that a DWARF section contribution is using the 64\dash bit
+format and to adapt its processing accordingly.}
+
+\item Section offset and section length fields that occur
+in the headers of DWARF sections (other than initial length
+fields) are listed following. In the 32\dash bit DWARF format these
+are 32\dash bit unsigned integer values; in the 64\dash bit DWARF format,
+they are 64\dash bit unsigned integer values.
+
+\begin{center}
+\begin{tabular}{lll}
+Section &Name & Role  \\ \hline
+.debug\_ranges & debug\_info\_offset & offset in .debug\_info \\
+.debug\_frame/CIE & CIE\_id & CIE distinguished value \\
+.debug\_frame/FDE & CIE\_pointer & offset in .debug\_frame \\
+.debug\_info & debug\_abbrev\_offset & offset in .debug\_abbrev \\
+.debug\_line & header\_length & length of header itself \\
+.debug\_pubnames & debug\_info\_offset & offset in .debug\_info \\
+                & debug\_info\_length & length of .debug\_info \\
+                &                   & contribution \\
+.debug\_pubtypes & debug\_info\_offset & offset in .debug\_info \\
+                & debug\_info\_length & length of .debug\_info \\
+                &                   & contribution \\
+.debug\_types & debug\_abbrev\_offset & offset in .debug\_info \\
+                & type\_offset & offset in of .debug\_types \\
+
+\end{tabular}
+\end{center}
+
+\textit{The CIE\_id field in a CIE structure must be 64 bits because
+it overlays the CIE\_pointer in a FDE structure; this implicit
+union must be accessed to distinguish whether a CIE or FDE is
+present, consequently, these two fields must exactly overlay
+each other (both offset and size).}
+
+\item Within the body of the .debug\_info or .debug\_types
+section, certain forms of attribute value depend on the choice
+of DWARF format as follows. For the 32\dash bit DWARF format,
+the value is a 32\dash bit unsigned integer; for the 64\dash bit DWARF
+format, the value is a 64\dash bit unsigned integer.
+\begin{center}
+\begin{tabular}{lll}
+Form & Role  \\ \hline
+DW\_FORM\_ref\_addr& offset in .debug\_info \\
+DW\_FORM\_sec\_offset& offset in a section other than .debug\_info or .debug\_str \\
+DW\_FORM\_strp&offset in .debug\_str \\
+DW\_OP\_call\_ref&offset in .debug\_info \\
+\end{tabular}
+\end{center}
+
+\item Within the body of the .debug\_pubnames and
+.debug\_pubtypes sections, the representation of the first field
+of each tuple (which represents an offset in the .debug\_info
+section) depends on the DWARF format as follows: in the
+32\dash bit DWARF format, this field is a 32\dash bit unsigned integer;
+in the 64\dash bit DWARF format, it is a 64\dash bit unsigned integer.
+
+\end{enumerate}
+
+
+The 32\dash bit and 64\dash bit DWARF format conventions must not be
+intermixed within a single compilation unit.
+
+\textit{Attribute values and section header fields that represent
+addresses in the target program are not affected by these
+rules.}
+
+A DWARF consumer that supports the 64\dash bit DWARF format must
+support executables in which some compilation units use the
+32\dash bit format and others use the 64\dash bit format provided that
+the combination links correctly (that is, provided that there
+are no link\dash time errors due to truncation or overflow). (An
+implementation is not required to guarantee detection and
+reporting of all such errors.)
+
+\textit{It is expected that DWARF producing compilers will not use
+the 64\dash bit format by default. In most cases, the division of
+even very large applications into a number of executable and
+shared objects will suffice to assure that the DWARF sections
+within each individual linked object are less than 4 GBytes
+in size. However, for those cases where needed, the 64\dash bit
+format allows the unusual case to be handled as well. Even
+in this case, it is expected that only application supplied
+objects will need to be compiled using the 64\dash bit format;
+separate 32\dash bit format versions of system supplied shared
+executable libraries can still be used.}
+
+
+
+\section{Format of Debugging Information}
+\label{datarep:formatofdebugginginformation}
+
+For each compilation unit compiled with a DWARF producer,
+a contribution is made to the .debug\_info section of
+the object file. Each such contribution consists of a
+compilation unit header 
+(see Section \refersec{datarep:compilationunitheader}) 
+followed by a
+single DW\_TAG\_compile\_unit or DW\_TAG\_partial\_unit debugging
+information entry, together with its children.
+
+For each type defined in a compilation unit, a contribution may
+be made to the .debug\_types section of the object file. Each
+such contribution consists of a type unit header 
+(see Section \refersec{datarep:typeunitheader}) 
+followed by a DW\_TAG\_type\_unit entry, together with
+its children.
+
+Each debugging information entry begins with a code that
+represents an entry in a separate abbreviations table. This
+code is followed directly by a series of attribute values.
+
+The appropriate entry in the abbreviations table guides the
+interpretation of the information contained directly in the
+.debug\_info or .debug\_types section.
+
+Multiple debugging information entries may share the same
+abbreviation table entry. Each compilation unit is associated
+with a particular abbreviation table, but multiple compilation
+units may share the same table.
+\subsection{Unit Headers}
+\label{datarep:unitheaders}
+
+\subsubsection{Compilation Unit Header}
+\label{datarep:compilationunitheader}
+
+\begin{enumerate}[1.]
+
+\item unit\_length (initial length) \\
+A 4\dash byte or 12\dash byte unsigned integer representing the length
+of the .debug\_info contribution for that compilation unit,
+not including the length field itself. In the 32\dash bit DWARF
+format, this is a 4\dash byte unsigned integer (which must be less
+than 0xfffffff0); in the 64\dash bit DWARF format, this consists
+of the 4\dash byte value 0xffffffff followed by an 8\dash byte unsigned
+integer that gives the actual length 
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\item  version (uhalf)
+A 2\dash byte unsigned integer representing the version of the
+DWARF information for the compilation unit 
+(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+The value in this field is 4.
+
+\item debug\_abbrev\_offset (section offset) \\
+A 4\dash byte or 8\dash byte unsigned offset into the .debug\_abbrev
+section. This offset associates the compilation unit with a
+particular set of debugging information entry abbreviations. In
+the 32\dash bit DWARF format, this is a 4\dash byte unsigned length;
+in the 64\dash bit DWARF format, this is an 8\dash byte unsigned length
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\item address\_size (ubyte) \\
+A 1\dash byte unsigned integer representing the size in bytes of
+an address on the target architecture. If the system uses
+segmented addressing, this value represents the size of the
+offset portion of an address.
+
+
+
+
+\end{enumerate}
+
+\subsubsection{Type Unit Header}
+\label{datarep:typeunitheader}
+
+The header for the series of debugging information entries
+contributing to the description of a type that has been
+placed in its own type unit, within the .debug\_types section,
+consists of the following information:
+
+\begin{enumerate}[1.]
+
+\item unit\_length (initial length) \\
+A 4\dash byte or 12\dash byte unsigned integer representing the length
+of the .debug\_types contribution for that compilation unit,
+not including the length field itself. In the 32\dash bit DWARF
+format, this is a 4\dash byte unsigned integer (which must be
+less than 0xfffffff0); in the 64\dash bit DWARF format, this
+consists of the 4\dash byte value 0xffffffff followed by an 
+8\dash byte unsigned integer that gives the actual length
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\item  version (uhalf)
+A 2\dash byte unsigned integer representing the version of the
+DWARF information for the compilation unit 
+(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+The value in this field is 4.
+
+\item debug\_abbrev\_offset (section offset) \\
+A 4\dash byte or 8\dash byte unsigned offset into the .debug\_abbrev
+section. This offset associates the compilation unit with a
+particular set of debugging information entry abbreviations. In
+the 32\dash bit DWARF format, this is a 4\dash byte unsigned length;
+in the 64\dash bit DWARF format, this is an 8\dash byte unsigned length
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\item address\_size (ubyte) \\
+A 1\dash byte unsigned integer representing the size in bytes of
+an address on the target architecture. If the system uses
+segmented addressing, this value represents the size of the
+offset portion of an address.
+
+
+\item type\_signature (8\dash byte unsigned integer) \\
+A 64\dash bit unique signature of the type described in this type
+unit.  
+
+\textit{An attribute that refers(using DW\_FORM\_ref\_sig8) to
+the primary type contained in this type unit uses this value.}
+
+
+\item type\_offset (section offset) \\
+A 4\dash byte or 8\dash byte unsigned offset relative to the beginning
+of the type unit header. This offset refers to the debugging
+information entry that describes the type. Because the type
+may be nested inside a namespace or other structures, and may
+contain references to other types that have not been placed in
+separate type units, it is not necessarily either the first or
+the only entry in the type unit. In the 32\dash bit DWARF format,
+this is a 4\dash byte unsigned length; in the 64\dash bit DWARF format,
+this is an 8\dash byte unsigned length
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\end{enumerate}
+
+\subsection{Debugging Information Entry}
+\label{datarep:debugginginformationentry}
+
+Each debugging information entry begins with an unsigned LEB128
+number containing the abbreviation code for the entry. This
+code represents an entry within the abbreviations table
+associated with the compilation unit containing this entry. The
+abbreviation code is followed by a series of attribute values.
+
+On some architectures, there are alignment constraints on
+section boundaries. To make it easier to pad debugging
+information sections to satisfy such constraints, the
+abbreviation code 0 is reserved. Debugging information entries
+consisting of only the abbreviation code 0 are considered
+null entries.
+
+\subsection{Abbreviations Tables}
+\label{datarep:abbreviationstables}
+
+The abbreviations tables for all compilation units
+are contained in a separate object file section called
+.debug\_abbrev. As mentioned before, multiple compilation
+units may share the same abbreviations table.
+
+The abbreviations table for a single compilation unit consists
+of a series of abbreviation declarations. Each declaration
+specifies the tag and attributes for a particular form of
+debugging information entry. Each declaration begins with
+an unsigned LEB128 number representing the abbreviation
+code itself. It is this code that appears at the beginning
+of a debugging information entry in the .debug\_info or
+.debug\_types section. As described above, the abbreviation
+code 0 is reserved for null debugging information entries. The
+abbreviation code is followed by another unsigned LEB128
+number that encodes the entry’s tag. The encodings for the
+tag names are given in 
+Table \refersec{tab:tagencodings}.
+
+Following the tag encoding is a 1\dash byte value that determines
+whether a debugging information entry using this abbreviation
+has child entries or not. If the value is DW\_CHILDREN\_yes,
+the next physically succeeding entry of any debugging
+information entry using this abbreviation is the first
+child of that entry. If the 1\dash byte value following the
+abbreviation’s tag encoding is DW\_CHILDREN\_no, the next
+physically succeeding entry of any debugging information entry
+using this abbreviation is a sibling of that entry. (Either
+the first child or sibling entries may be null entries). The
+encodings for the child determination byte are given in 
+Table \refersec{tab:childdeterminationencodings}
+(As mentioned in 
+Section \refersec{chap:relationshipofdebugginginformationentries}, 
+each chain of
+sibling entries is terminated by a null entry.)
+
+Finally, the child encoding is followed by a series of
+attribute specifications. Each attribute specification
+consists of two parts. The first part is an unsigned LEB128
+number representing the attribute’s name. The second part
+is an unsigned LEB128 number representing the attribute’s
+form. The series of attribute specifications ends with an
+entry containing 0 for the name and 0 for the form.
+
+The attribute form DW\_FORM\_indirect is a special case. For
+attributes with this form, the attribute value itself in the
+.debug\_info or .debug\_types section begins with an unsigned
+LEB128 number that represents its form. This allows producers
+to choose forms for particular attributes dynamically,
+without having to add a new entry to the abbreviations table.
+
+The abbreviations for a given compilation unit end with an
+entry consisting of a 0 byte for the abbreviation code.
+
+See 
+Appendix \refersec{app:compilationunitsandabbreviationstableexample} 
+for a depiction of the organization of the
+debugging information.
+
+\subsection{Attribute Encodings}
+\label{datarep:attributeencodings}
+
+The encodings for the attribute names are given in 
+Table \refersec{tab:attributeencodings}.
+
+The attribute form governs how the value of the attribute is
+encoded. There are nine classes of form, listed below. Each
+class is a set of forms which have related representations
+and which are given a common interpretation according to the
+attribute in which the form is used.
+
+Form DW\_FORM\_sec\_offset is a member of more than one class,
+namely lineptr, loclistptr, macptr or rangelistptr; the list
+of classes allowed by the applicable attribute in 
+Table \refersec{tab:attributeencodings}
+determines the class of the form.
+
+\textit{In DWARF V3 the forms DW\_FORM\_data4 and DW\_FORM\_data8 were
+members of either class constant or one of the classes lineptr,
+loclistptr, macptr or rangelistptr, depending on context. In
+DWARF V4 DW\_FORM\_data4 and DW\_FORM\_data8 are members of class
+constant in all cases. The new DW\_FORM\_sec\_offset replaces
+their usage for the other classes.}
+
+Each possible form belongs to one or more of the following classes:
+
+\begin{itemize}
+\item address \\
+Represented as an object of appropriate size to hold an
+address on the target machine (DW\_FORM\_addr). The size is
+encoded in the compilation unit header 
+(see Section \refersec{datarep:compilationunitheader}).
+This address is relocatable in a relocatable object file and
+is relocated in an executable file or shared object.
+
+\item block \\
+Blocks come in four forms:
+
+\begin{myindentpara}{1cm}
+A 1\dash byte length followed by 0 to 255 contiguous information
+bytes (DW\_FORM\_block1).
+\end{myindentpara}
+
+\begin{myindentpara}{1cm}
+A 2\dash byte length followed by 0 to 65,535 contiguous information
+bytes (DW\_FORM\_block2).
+\end{myindentpara}
+
+
+\begin{myindentpara}{1cm}
+A 4\dash byte length followed by 0 to 4,294,967,295 contiguous
+information bytes (DW\_FORM\_block4).
+\end{myindentpara}
+
+
+\begin{myindentpara}{1cm}
+An unsigned LEB128 length followed by the number of bytes
+specified by the length (DW\_FORM\_block).
+\end{myindentpara}
+
+In all forms, the length is the number of information bytes
+that follow. The information bytes may contain any mixture
+of relocated (or relocatable) addresses, references to other
+debugging information entries or data bytes.
+
+\item constant \\
+There are six forms of constants. There are fixed length
+constant data forms for one, two, four and eight byte values
+(respectively, DW\_FORM\_data1, DW\_FORM\_data2, DW\_FORM\_data4,
+and DW\_FORM\_data8). There are also variable length constant
+data forms encoded using LEB128 numbers (see below). Both
+signed (DW\_FORM\_sdata) and unsigned (DW\_FORM\_udata) variable
+length constants are available
+
+The data in DW\_FORM\_data1, DW\_FORM\_data2, DW\_FORM\_data4 and
+DW\_FORM\_data8 can be anything. Depending on context, it may
+be a signed integer, an unsigned integer, a floating\dash point
+constant, or anything else. A consumer must use context to
+know how to interpret the bits, which if they are target
+machine data (such as an integer or floating point constant)
+will be in target machine byte\dash order.
+
+\textit{If one of the DW\_FORM\_data<n> forms is used to represent a
+signed or unsigned integer, it can be hard for a consumer
+to discover the context necessary to determine which
+interpretation is intended. Producers are therefore strongly
+encouraged to use DW\_FORM\_sdata or DW\_FORM\_udata for signed and
+unsigned integers respectively, rather than 
+DW\_FORM\_data\textless n \textgreater.}
+
+
+\item exprloc \\
+This is an unsigned LEB128 length followed by the
+number of information bytes specified by the length
+(DW\_FORM\_exprloc). The information bytes contain a DWARF
+expression 
+(see Section \refersec{chap:dwarfexpressions}) 
+or location description 
+(see Section \refersec{chap:locationdescriptions}).
+
+\item flag \\
+A flag is represented explicitly as a single byte of data
+(DW\_FORM\_flag) or implicitly (DW\_FORM\_flag\_present). In the
+first case, if the flag has value zero, it indicates the
+absence of the attribute; if the flag has a non\dash zero value,
+it indicates the presence of the attribute. In the second
+case, the attribute is implicitly indicated as present, and
+no value is encoded in the debugging information entry itself.
+
+\item lineptr \\
+This is an offset into the .debug\_line section
+(DW\_FORM\_sec\_offset). It consists of an offset from the
+beginning of the .debug\_line section to the first byte of
+the data making up the line number list for the compilation
+unit. 
+It is relocatable in a relocatable object file, and
+relocated in an executable or shared object. In the 32\dash bit
+DWARF format, this offset is a 4\dash byte unsigned value;
+in the 64\dash bit DWARF format, it is an 8\dash byte unsigned value
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+
+\item loclistptr \\
+This is an offset into the .debug\_loc section
+(DW\_FORM\_sec\_offset). It consists of an offset from the
+beginning of the .debug\_loc section to the first byte of
+the data making up the location list for the compilation
+unit. 
+It is relocatable in a relocatable object file, and
+relocated in an executable or shared object. In the 32\dash bit
+DWARF format, this offset is a 4\dash byte unsigned value;
+in the 64\dash bit DWARF format, it is an 8\dash byte unsigned value
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+
+\item macptr \\
+This is an offset into the .debug\_macinfo section
+(DW\_FORM\_sec\_offset). It consists of an offset from the
+beginning of the .debug\_macinfo section to the first byte of
+the data making up the macro information list for the compilation
+unit. 
+It is relocatable in a relocatable object file, and
+relocated in an executable or shared object. In the 32\dash bit
+DWARF format, this offset is a 4\dash byte unsigned value;
+in the 64\dash bit DWARF format, it is an 8\dash byte unsigned value
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\item rangelistptr \\
+This is an offset into the .debug\_ranges section
+(DW\_FORM\_sec\_offset). 
+It consists of an
+offset from the beginning of the .debug\_ranges section
+to the beginning of the non\dash contiguous address ranges
+information for the referencing entity.  
+It is relocatable in
+a relocatable object file, and relocated in an executable or
+shared object. In the 32\dash bit DWARF format, this offset
+is a 4\dash byte unsigned value; in the 64\dash bit DWARF
+format, it is an 8\dash byte unsigned value (see Section
+\refersec{datarep:32bitand64bitdwarfformats}).
+\end{itemize}
+
+\textit{Because classes lineptr, loclistptr, macptr and rangelistptr
+share a common representation, it is not possible for an
+attribute to allow more than one of these classes}
+
+
+\begin{itemize}
+\item reference \\
+There are three types of reference.
+
+The first type of reference can identify any debugging
+information entry within the containing unit. This type of
+reference is an offset from the first byte of the compilation
+header for the compilation unit containing the reference. There
+are five forms for this type of reference. There are fixed
+length forms for one, two, four and eight byte offsets
+(respectively, DW\_FORM\_ref1, DW\_FORM\_ref2, DW\_FORM\_ref4,
+and DW\_FORM\_ref8). There is also an unsigned variable
+length offset encoded form that uses unsigned LEB128 numbers
+(DW\_FORM\_ref\_udata). Because this type of reference is within
+the containing compilation unit no relocation of the value
+is required.
+
+The second type of reference can identify any debugging
+information entry within a .debug\_info section; in particular,
+it may refer to an entry in a different compilation unit
+from the unit containing the reference, and may refer to an
+entry in a different shared object.  This type of reference
+(DW\_FORM\_ref\_addr) is an offset from the beginning of the
+.debug\_info section of the target executable or shared object;
+it is relocatable in a relocatable object file and frequently
+relocated in an executable file or shared object. For
+references from one shared object or static executable file
+to another, the relocation and identification of the target
+object must be performed by the consumer. In the 32\dash bit DWARF
+format, this offset is a 4\dash byte unsigned value; 
+in the 64\dash bit DWARF format, it is an 8\dash byte
+unsigned value 
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+A debugging information entry that may be referenced by
+another compilation unit using DW\_FORM\_ref\_addr must have a
+global symbolic name.
+
+For a reference from one executable or shared object to
+another, the reference is resolved by the debugger to identify
+the shared object or executable and the offset into that
+object’s .debug\_info section in the same fashion as the run
+time loader, either when the debug information is first read,
+or when the reference is used.
+
+The third type of reference can identify any debugging
+information type entry that has been placed in its own
+type unit. This type of reference (DW\_FORM\_ref\_sig8) is the
+64\dash bit type signature 
+(see Section \refersec{datarep:typesignaturecomputation}) 
+that was computed
+for the type.
+
+The use of compilation unit relative references will reduce the
+number of link\dash time relocations and so speed up linking. The
+use of the second and third type of reference allows for the
+sharing of information, such as types, across compilation
+units.
+
+A reference to any kind of compilation unit identifies the
+debugging information entry for that unit, not the preceding
+header.
+
+\item string \\
+A string is a sequence of contiguous non\dash null bytes followed by
+one null byte. A string may be represented immediately in the
+debugging information entry itself (DW\_FORM\_string), or may
+be represented as an offset into a string table contained in
+the .debug\_str section of the object file (DW\_FORM\_strp). In
+the 32\dash bit DWARF format, the representation of a DW\_FORM\_strp
+value is a 4\dash byte unsigned offset; in the 64\dash bit DWARF format,
+it is an 8\dash byte unsigned offset 
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+If the DW\_AT\_use\_UTF8 attribute is specified for the
+compilation unit entry, string values are encoded using the
+UTF\dash 8 (Unicode Transformation Format\dash 8) from the Universal
+Character Set standard (ISO/IEC 10646\dash 1:1993). Otherwise,
+the string representation is unspecified.
+
+The Unicode Standard Version 3 is fully compatible with
+ISO/IEC 10646\dash 1:1993. It contains all the same characters
+and encoding points as ISO/IEC 10646, as well as additional
+information about the characters and their use.
+
+Earlier versions of DWARF did not specify the representation
+of strings; for compatibility, this version also does
+not. However, the UTF\dash 8 representation is strongly recommended.
+
+\end{itemize}
+
+In no case does an attribute use one of the classes lineptr,
+loclistptr, macptr or rangelistptr to point into either the
+.debug\_info or .debug\_str section.
+
+The form encodings are listed in 
+Table \refersec{tab:attributeformencodings}.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|l}
+  \caption{Tag encodings} \label{tab:tagencodings} \\
+  \hline \\ \bfseries Tag name&\bfseries Value\\ \hline
+\endfirsthead
+  \bfseries Tag name&\bfseries Value \\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+DW\_TAG\_array\_type &0x01 \\
+DW\_TAG\_class\_type&0x02 \\
+DW\_TAG\_entry\_point&0x03 \\
+DW\_TAG\_enumeration\_type&0x04 \\
+DW\_TAG\_formal\_parameter&0x05 \\
+DW\_TAG\_imported\_declaration&0x08 \\
+DW\_TAG\_label&0x0a \\
+DW\_TAG\_lexical\_block&0x0b \\
+DW\_TAG\_member&0x0d \\
+DW\_TAG\_pointer\_type&0x0f \\
+DW\_TAG\_reference\_type&0x10 \\
+DW\_TAG\_compile\_unit&0x11 \\
+DW\_TAG\_string\_type&0x12 \\
+DW\_TAG\_structure\_type&0x13 \\
+DW\_TAG\_subroutine\_type&0x15 \\
+DW\_TAG\_typedef&0x16 \\
+DW\_TAG\_union\_type&0x17 \\
+DW\_TAG\_unspecified\_parameters&0x18  \\
+DW\_TAG\_variant&0x19  \\
+DW\_TAG\_common\_block&0x1a  \\
+DW\_TAG\_common\_inclusion&0x1b  \\
+DW\_TAG\_inheritance&0x1c  \\
+DW\_TAG\_inlined\_subroutine&0x1d  \\
+DW\_TAG\_module&0x1e  \\
+DW\_TAG\_ptr\_to\_member\_type&0x1f  \\
+DW\_TAG\_set\_type&0x20  \\
+DW\_TAG\_subrange\_type&0x21  \\
+DW\_TAG\_with\_stmt&0x22  \\
+DW\_TAG\_access\_declaration&0x23  \\
+DW\_TAG\_base\_type&0x24  \\
+DW\_TAG\_catch\_block&0x25  \\
+DW\_TAG\_const\_type&0x26  \\
+DW\_TAG\_constant&0x27  \\
+DW\_TAG\_enumerator&0x28  \\
+DW\_TAG\_file\_type&0x29  \\
+DW\_TAG\_friend&0x2a  \\
+DW\_TAG\_namelist&0x2b    \\
+DW\_TAG\_namelist\_item&0x2c    \\
+DW\_TAG\_packed\_type&0x2d    \\
+DW\_TAG\_subprogram&0x2e    \\
+DW\_TAG\_template\_type\_parameter&0x2f    \\
+DW\_TAG\_template\_value\_parameter&0x30    \\
+DW\_TAG\_thrown\_type&0x31    \\
+DW\_TAG\_try\_block&0x32    \\
+DW\_TAG\_variant\_part&0x33    \\
+DW\_TAG\_variable&0x34    \\
+DW\_TAG\_volatile\_type&0x35    \\
+DW\_TAG\_dwarf\_procedure&0x36     \\
+DW\_TAG\_restrict\_type&0x37      \\
+DW\_TAG\_interface\_type&0x38      \\
+DW\_TAG\_namespace&0x39      \\
+DW\_TAG\_imported\_module&0x3a      \\
+DW\_TAG\_unspecified\_type&0x3b      \\
+DW\_TAG\_partial\_unit&0x3c      \\
+DW\_TAG\_imported\_unit&0x3d      \\
+DW\_TAG\_condition&0x3f      \\
+DW\_TAG\_shared\_type&0x40      \\
+DW\_TAG\_type\_unit \ddag &0x41      \\
+DW\_TAG\_rvalue\_reference\_type \ddag &0x42      \\
+DW\_TAG\_template\_alias \ddag &0x43      \\
+DW\_TAG\_lo\_user&0x4080      \\
+DW\_TAG\_hi\_user&0xffff      \\
+\end{longtable}
+\ddag  TAG new in DWARF Version 4 
+\end{centering}
+
+
+\begin{figure}[here]
+\centering
+\setlength{\extrarowheight}{0.1cm}
+\caption{Child determination encodings}
+\label{tab:childdeterminationencodings}
+\begin{tabular}{l|l} \hline
+Child determination name& Value\\ \hline
+DW\_CHILDREN\_no&0x00 \\ 
+DW\_CHILDREN\_yes&0x01 \\ \hline
+\end{tabular}
+\end{figure}
+
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|l|l}
+  \caption{Attribute encodings} \label{tab:attributeencodings} \\
+  \hline \\ \bfseries Attribute name&\bfseries Value &\bfseries Classes \\ \hline
+\endfirsthead
+  \bfseries Attribute name&\bfseries Value &\bfseries Classes\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+DW\_AT\_sibling&0x01&reference \\
+DW\_AT\_location&0x02&exprloc, loclistptr   \\
+DW\_AT\_name&0x03&string   \\
+DW\_AT\_ordering&0x09&constant   \\
+DW\_AT\_byte\_size&0x0b&constant, exprloc, reference   \\
+DW\_AT\_bit\_offset&0x0c&constant, exprloc, reference   \\
+DW\_AT\_bit\_size&0x0d&constant, exprloc, reference   \\
+DW\_AT\_stmt\_list&0x10&lineptr   \\
+DW\_AT\_low\_pc&0x11&address   \\
+DW\_AT\_high\_pc&0x12&address, constant   \\
+DW\_AT\_language&0x13&constant   \\
+DW\_AT\_discr&0x15&reference   \\
+DW\_AT\_discr\_value&0x16&constant   \\
+DW\_AT\_visibility&0x17&constant   \\
+DW\_AT\_import&0x18&reference   \\
+DW\_AT\_string\_length&0x19&exprloc, loclistptr   \\
+DW\_AT\_common\_reference&0x1a&reference   \\
+DW\_AT\_comp\_dir&0x1b&string   \\
+DW\_AT\_const\_value&0x1c&block, constant, string   \\
+DW\_AT\_containing\_type&0x1d&reference     \\
+DW\_AT\_default\_value&0x1e&reference     \\
+DW\_AT\_inline&0x20&constant     \\
+DW\_AT\_is\_optional&0x21&flag     \\
+DW\_AT\_lower\_bound&0x22&constant, exprloc, reference     \\
+DW\_AT\_producer&0x25&string     \\
+DW\_AT\_prototyped&0x27&flag     \\
+DW\_AT\_return\_addr&0x2a&exprloc, loclistptr     \\
+% FIXME: lower case , not Constant
+DW\_AT\_start\_scope&0x2c&Constant, rangelistptr     \\
+DW\_AT\_bit\_stride&0x2e&constant, exprloc, reference     \\
+DW\_AT\_upper\_bound&0x2f&constant, exprloc, reference     \\
+DW\_AT\_abstract\_origin&0x31&reference     \\
+DW\_AT\_accessibility&0x32&constant     \\
+DW\_AT\_address\_class&0x33&constant     \\
+DW\_AT\_artificial&0x34&flag     \\
+DW\_AT\_base\_types&0x35&reference     \\
+DW\_AT\_calling\_convention&0x36&constant     \\
+DW\_AT\_count&0x37&constant, exprloc, reference     \\
+DW\_AT\_data\_member\_location&0x38&constant, exprloc, loclistptr     \\
+DW\_AT\_decl\_column&0x39&constant     \\
+DW\_AT\_decl\_file&0x3a&constant     \\
+DW\_AT\_decl\_line&0x3b&constant     \\
+DW\_AT\_declaration&0x3c&flag     \\
+DW\_AT\_discr\_list&0x3d&block     \\
+DW\_AT\_encoding&0x3e&constant     \\
+DW\_AT\_external&0x3f&flag     \\
+DW\_AT\_frame\_base&0x40&exprloc, loclistptr     \\
+DW\_AT\_friend&0x41&reference     \\
+DW\_AT\_identifier\_case&0x42&constant    \\
+DW\_AT\_macro\_info&0x43&macptr    \\
+DW\_AT\_namelist\_item&0x44&reference    \\
+DW\_AT\_priority&0x45&reference    \\
+DW\_AT\_segment&0x46&exprloc, loclistptr    \\
+DW\_AT\_specification&0x47&reference    \\
+DW\_AT\_static\_link&0x48&exprloc, loclistptr    \\
+DW\_AT\_type&0x49&reference    \\
+DW\_AT\_use\_location&0x4a&exprloc, loclistptr    \\
+DW\_AT\_variable\_parameter&0x4b&flag    \\
+DW\_AT\_virtuality&0x4c&constant    \\
+DW\_AT\_vtable\_elem\_location&0x4d&exprloc, loclistptr    \\
+
+
+DW\_AT\_allocated&0x4e&constant, exprloc, reference     \\
+DW\_AT\_associated&0x4f&constant, exprloc, reference     \\
+DW\_AT\_data\_location&0x50&exprloc     \\
+DW\_AT\_byte\_stride&0x51&constant, exprloc, reference     \\
+DW\_AT\_entry\_pc&0x52&address     \\
+DW\_AT\_use\_UTF8&0x53&flag     \\
+DW\_AT\_extension&0x54&reference     \\
+DW\_AT\_ranges&0x55&rangelistptr     \\
+DW\_AT\_trampoline&0x56&address, flag, reference, string     \\
+DW\_AT\_call\_column&0x57&constant     \\
+DW\_AT\_call\_file&0x58&constant     \\
+DW\_AT\_call\_line&0x59&constant     \\
+DW\_AT\_description&0x5a&string     \\
+DW\_AT\_binary\_scale&0x5b&constant     \\
+DW\_AT\_decimal\_scale&0x5c&constant     \\
+DW\_AT\_small &0x5d&reference     \\
+DW\_AT\_decimal\_sign&0x5e&constant     \\
+DW\_AT\_digit\_count&0x5f&constant     \\
+DW\_AT\_picture\_string&0x60&string      \\
+DW\_AT\_mutable&0x61&flag     \\
+
+
+DW\_AT\_threads\_scaled&0x62&flag     \\
+DW\_AT\_explicit&0x63&flag     \\
+DW\_AT\_object\_pointer&0x64&reference     \\
+DW\_AT\_endianity&0x65&constant     \\
+DW\_AT\_elemental&0x66&flag     \\
+DW\_AT\_pure&0x67&flag     \\
+DW\_AT\_recursive&0x68&flag     \\
+DW\_AT\_signature \ddag &0x69&reference     \\ 
+DW\_AT\_main\_subprogram \ddag &0x6a&flag     \\
+DW\_AT\_data\_bit\_offset \ddag &0x6b&constant     \\
+DW\_AT\_const\_expr \ddag &0x6c&flag     \\
+DW\_AT\_enum\_class \ddag &0x6d&flag     \\
+DW\_AT\_linkage\_name \ddag &0x6e&string     \\
+DW\_AT\_lo\_user&0x2000 & ---     \\
+DW\_AT\_hi\_user&0x3fff& ---     \\
+
+\end{longtable}
+\ddag  Attribute new in DWARF Version 4 
+\end{centering}
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|l|l}
+  \caption{Attribute form encodings} \label{tab:attributeformencodings} \\
+  \hline \\ \bfseries Form name&\bfseries Value &\bfseries Classes \\ \hline
+\endfirsthead
+  \bfseries Form name&\bfseries Value &\bfseries Classes\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+DW\_FORM\_addr&0x01&address  \\
+DW\_FORM\_block2&0x03&block \\
+DW\_FORM\_block4&0x04&block  \\
+DW\_FORM\_data2&0x05&constant \\
+DW\_FORM\_data4&0x06&constant \\
+DW\_FORM\_data8&0x07&constant \\
+DW\_FORM\_string&0x08&string \\
+DW\_FORM\_block&0x09&block \\
+DW\_FORM\_block1&0x0a&block \\
+DW\_FORM\_data1&0x0b&constant \\
+DW\_FORM\_flag&0x0c&flag \\
+DW\_FORM\_sdata&0x0d&constant    \\
+DW\_FORM\_strp&0x0e&string         \\
+DW\_FORM\_udata&0x0f&constant         \\
+DW\_FORM\_ref\_addr&0x10&reference         \\
+DW\_FORM\_ref1&0x11&reference          \\
+DW\_FORM\_ref2&0x12&reference         \\
+DW\_FORM\_ref4&0x13&reference         \\
+DW\_FORM\_ref8&0x14&reference \\
+DW\_FORM\_ref\_udata&0x15&reference  \\
+DW\_FORM\_indirect&0x16&(see Section \refersec{datarep:abbreviationstables}) \\
+DW\_FORM\_sec\_offset \ddag &0x17&lineptr, loclistptr, macptr, rangelistptr \\
+DW\_FORM\_exprloc \ddag &0x18&exprloc \\
+DW\_FORM\_flag\_present \ddag &0x19&flag \\
+DW\_FORM\_ref\_sig8 \ddag &0x20&reference \\
+\end{longtable}
+\ddag  FORM new in DWARF Version 4 
+\end{centering}
+
+\section{Variable Length Data}
+\label{datarep:variablelengthdata}
+Integers may be encoded using ``Little Endian Base 128''
+(LEB128) numbers. LEB128 is a scheme for encoding integers
+densely that exploits the assumption that most integers are
+small in magnitude.
+
+This encoding is equally suitable whether the target machine
+architecture represents data in big\dash\  endian or little\dash endian
+order. It is ``little\dash endian'' only in the sense that it
+avoids using space to represent the ``big'' end of an
+unsigned integer, when the big end is all zeroes or sign
+extension bits.
+
+Unsigned LEB128 (ULEB128) numbers are encoded as follows:
+start at the low order end of an unsigned integer and chop
+it into 7\dash bit chunks. Place each chunk into the low order 7
+bits of a byte. Typically, several of the high order bytes
+will be zero; discard them. Emit the remaining bytes in a
+stream, starting with the low order byte; set the high order
+bit on each byte except the last emitted byte. The high bit
+of zero on the last byte indicates to the decoder that it
+has encountered the last byte.
+
+The integer zero is a special case, consisting of a single
+zero byte.
+
+Table \refersec{tab:examplesofunsignedleb128encodings}
+gives some examples of unsigned LEB128 numbers. The
+0x80 in each case is the high order bit of the byte, indicating
+that an additional byte follows.
+
+
+The encoding for signed, two’s complement LEB128 (SLEB128)
+numbers is similar, except that the criterion for discarding
+high order bytes is not whether they are zero, but whether
+they consist entirely of sign extension bits. Consider the
+32\dash bit integer -2. The three high level bytes of the number
+are sign extension, thus LEB128 would represent it as a single
+byte containing the low order 7 bits, with the high order
+bit cleared to indicate the end of the byte stream. Note
+that there is nothing within the LEB128 representation that
+indicates whether an encoded number is signed or unsigned. The
+decoder must know what type of number to expect. 
+Table \refersec{tab:examplesofunsignedleb128encodings}
+gives some examples of unsigned LEB128 numbers and 
+Table \refersec{tab:examplesofsignedleb128encodings}
+gives some examples of signed LEB128 numbers.
+
+Appendix \refersec{app:variablelengthdataencodingdecodinginformative} 
+gives algorithms for encoding and decoding these forms.
+
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|l|l}
+  \caption{Examples of unsigned LEB32 encodings} \label{tab:examplesofunsignedleb128encodings} \\
+  \hline \\ \bfseries Number&\bfseries First byte &\bfseries Second byte \\ \hline
+\endfirsthead
+  \bfseries Number&\bfseries First Byte &\bfseries Second byte\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+2&2& --- \\
+127&127& ---\\
+128& 0 + 0x80 & 1 \\
+129& 1 + 0x80 & 1 \\
+130& 2 + 0x80 & 1 \\
+12857& 57 + 0x80 & 100 \\
+
+\end{longtable}
+\end{centering}
+
+
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|l|l}
+  \caption{Examples of signed LEB32 encodings} \label{tab:examplesofsignedleb128encodings} \\
+  \hline \\ \bfseries Number&\bfseries First byte &\bfseries Second byte \\ \hline
+\endfirsthead
+  \bfseries Number&\bfseries First Byte &\bfseries Second byte\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+2&2& --- \\
+-2&0x7e& ---\\
+127& 127 + 0x80 & 0 \\
+-127& 1 + 0x80 & 0x7f \\
+128& 0 + 0x80 & 1 \\
+-128& 0 + 0x80 & 0x7f \\
+129& 1 + 0x80 & 1 \\
+-129& -x7f + 0x80 & 0xtc \\
+
+\end{longtable}
+\end{centering}
+
+
+
+\section{DWARF Expressions and Location Descriptions}
+\label{datarep:dwarfexpressionsandlocationdescriptions}
+\subsection{DWARF Expressions}
+\label{datarep:dwarfexpressions}
+
+A DWARF expression is stored in a block of contiguous
+bytes. The bytes form a sequence of operations. Each operation
+is a 1\dash byte code that identifies that operation, followed by
+zero or more bytes of additional data. The encodings for the
+operations are described in 
+Table \refersec{tab:dwarfoperationencodings}. 
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|l|l|l}
+  \caption{DWARF operation encodings} \label{tab:dwarfoperationencodings} \\
+  \hline \\ & &\bfseries No. of  &\\ 
+  \bfseries Operation&\bfseries Code &\bfseries Operands &\bfseries Notes\\ \hline
+\endfirsthead
+   & &\bfseries No. of &\\ 
+  \bfseries Operation&\bfseries Code &\bfseries  Operands &\bfseries Notes\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_OP\_addr&0x03&1 & constant address  \\ 
+& & &(size target specific) \\
+
+DW\_OP\_deref&0x06&0 & \\
+
+
+DW\_OP\_const1u&0x08&1&1\dash byte constant  \\
+DW\_OP\_const1s&0x09&1&1\dash byte constant   \\
+DW\_OP\_const2u&0x0a&1&2\dash byte constant   \\
+DW\_OP\_const2s&0x0b&1&2\dash byte constant   \\
+DW\_OP\_const4u&0x0c&1&4\dash byte constant    \\
+DW\_OP\_const4s&0x0d&1&4\dash byte constant   \\
+DW\_OP\_const8u&0x0e&1&8\dash byte constant   \\
+DW\_OP\_const8s&0x0f&1&8\dash byte constant   \\
+DW\_OP\_constu&0x10&1&ULEB128 constant   \\
+DW\_OP\_consts&0x11&1&SLEB128 constant   \\
+DW\_OP\_dup&0x12&0 &   \\
+DW\_OP\_drop&0x13&0  &   \\
+DW\_OP\_over&0x14&0 &   \\
+DW\_OP\_pick&0x15&1&1\dash byte stack index   \\
+DW\_OP\_swap&0x16&0 &   \\
+DW\_OP\_rot&0x17&0 &   \\
+DW\_OP\_xderef&0x18&0 &   \\
+DW\_OP\_abs&0x19&0 &   \\
+DW\_OP\_and&0x1a&0 &   \\
+DW\_OP\_div&0x1b&0 &   \\
+
+
+
+DW\_OP\_minus&0x1c&0 & \\
+DW\_OP\_mod&0x1d&0 & \\
+DW\_OP\_mul&0x1e&0 & \\
+DW\_OP\_neg&0x1f&0 & \\
+DW\_OP\_not&0x20&0 & \\
+DW\_OP\_or&0x21&0 & \\
+DW\_OP\_plus&0x22&0 & \\
+DW\_OP\_plus\_uconst&0x23&1&ULEB128 addend \\
+DW\_OP\_shl&0x24&0 & \\
+DW\_OP\_shr&0x25&0 & \\
+DW\_OP\_shra&0x26&0 & \\
+DW\_OP\_xor&0x27&0 & \\
+DW\_OP\_skip&0x2f&1&signed 2\dash byte constant \\
+DW\_OP\_bra&0x28&1 & signed 2\dash byte constant \\
+DW\_OP\_eq&0x29&0 & \\
+DW\_OP\_ge&0x2a&0 & \\
+DW\_OP\_gt&0x2b&0 & \\
+DW\_OP\_le&0x2c&0 & \\
+DW\_OP\_lt&0x2d&0  & \\
+DW\_OP\_ne&0x2e&0 & \\ \hline
+
+
+
+DW\_OP\_lit0&0x30 & 0 & \\
+
+DW\_OP\_lit1&0x31 & 0& literals 0 .. 31 = \\
+\ldots & & & (DW\_OP\_lit0 + literal) \\
+DW\_OP\_lit31&0x4f & 0 & \\ \hline
+
+DW\_OP\_reg0 & 0x50 & 0 & \\
+DW\_OP\_reg1 & 0x51 & 0&reg 0 .. 31 = \\
+\ldots & & & (DW\_OP\_reg0 + regnum) \\
+DW\_OP\_reg31 & 0x6f & 0 & \\ \hline
+
+DW\_OP\_breg0 & 0x70 &1 & SLEB128 offset \\
+DW\_OP\_breg1 & 0x71 & 1 &base register 0 .. 31 = \\
+... & &              &(DW\_OP\_breg0 + regnum) \\
+DW\_OP\_breg31 & 0x8f & 1 & \\ \hline
+
+DW\_OP\_regx & 0x90 &1&ULEB128 register \\
+DW\_OP\_fbreg & 0x91&1&SLEB128 offset \\
+DW\_OP\_bregx & 0x92&2 &ULEB128 register followed \\
+& & & by SLEB128 offset \\
+DW\_OP\_piece & 0x93 &1& ULEB128 size of piece addressed \\
+DW\_OP\_deref\_size & 0x94 &1& 1-byte size of data retrieved \\
+DW\_OP\_xderef\_size & 0x95&1&1-byte size of data retrieved \\
+DW\_OP\_nop & 0x96 &0& \\
+
+
+DW\_OP\_push\_object\_address&0x97&0 &  \\
+DW\_OP\_call2&0x98&1& 2\dash byte offset of DIE \\
+DW\_OP\_call4&0x99&1& 4\dash byte offset of DIE \\
+DW\_OP\_call\_ref&0x9a&1& 4\dash\  or 8\dash byte\\
+     &&& offset of DIE \\
+DW\_OP\_form\_tls\_address&0x9b &0& \\
+DW\_OP\_call\_frame\_cfa &0x9c &0& \\
+DW\_OP\_bit\_piece&0x9d &2&ULEB128 size followed by \\
+&&&ULEB128 offset\\
+DW\_OP\_implicit\_value&0x9e &2&ULEB128 size followed by \\
+&&&block of that size\\
+DW\_OP\_stack\_value\_cfa &0x9f &0& \\
+DW\_OP\_lo\_user\_cfa &0xe0 && \\
+DW\_OP\_hi\_user\_cfa &0xff && \\
+
+\end{longtable}
+\end{centering}
+
+
+\subsection{Location Descriptions}
+\label{datarep:locationdescriptions}
+
+A location description is used to compute the 
+location of a variable or other entity.
+
+\subsection{Location Lists}
+\label{datarep:locationlists}
+
+Each entry in a location list is either a location list entry,
+a base address selection entry, or an end of list entry.
+
+A location list entry consists of two address offsets followed
+by a 2\dash byte length, followed by a block of contiguous bytes
+that contains a DWARF location description. The length
+specifies the number of bytes in that block. The two offsets
+are the same size as an address on the target machine.
+
+A base address selection entry and an end of list entry each
+consist of two (constant or relocated) address offsets. The two
+offsets are the same size as an address on the target machine.
+
+For a location list to be specified, the base address of
+the corresponding compilation unit must be defined 
+(see Section  \refersec{chap:normalandpartialcompilationunitentries}).
+
+\section{Base Type Attribute Encodings}
+\label{datarep:basetypeattributeencodings}
+
+The encodings of the constants used in the DW\_AT\_encoding
+attribute are given in 
+Table \refersec{tab:basetypeencodingvalues}
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Base type encoding values} \label{tab:basetypeencodingvalues} \\
+  \hline \\ \bfseries Base type encoding code name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Base type encoding code name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_ATE\_address&0x01 \\
+DW\_ATE\_boolean&0x02 \\
+DW\_ATE\_complex\_float&0x03 \\
+DW\_ATE\_float&0x04 \\
+DW\_ATE\_signed&0x05 \\
+DW\_ATE\_signed\_char&0x06 \\
+DW\_ATE\_unsigned&0x07 \\
+DW\_ATE\_unsigned\_char&0x08 \\
+DW\_ATE\_imaginary\_float&0x09 \\
+DW\_ATE\_packed\_decimal&0x0a \\
+DW\_ATE\_numeric\_string&0x0b \\
+DW\_ATE\_edited&0x0c \\
+DW\_ATE\_signed\_fixed&0x0d \\
+DW\_ATE\_unsigned\_fixed&0x0e \\
+DW\_ATE\_decimal\_float & 0x0f \\
+DW\_ATE\_UTF \ddag & 0x10 \\
+DW\_ATE\_lo\_user & 0x80 \\
+DW\_ATE\_hi\_user & 0xff \\
+
+\end{longtable}
+\ddag  Base type encoding new in DWARF Version 4
+\end{centering}
+
+
+The encodings of the constants used in the 
+DW\_AT\_decimal\_sign attribute 
+are given in 
+Table \refersec{tab:decimalsignencodings}.
+
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Decimal sign encodings} \label{tab:decimalsignencodings} \\
+  \hline \\ \bfseries Decimal sign code name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Decimal sign code name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_DS\_unsigned & 0x01  \\
+DW\_DS\_leading\_overpunch & 0x02  \\
+DW\_DS\_trailing\_overpunch & 0x03  \\
+DW\_DS\_leading\_separate & 0x04  \\
+DW\_DS\_trailing\_separate & 0x05  \\
+
+\end{longtable}
+\end{centering}
+
+The encodings of the constants used in the 
+DW\_AT\_endianity attribute are given in 
+Table \refersec{tab:endianityencodings}.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Endianity encodings} \label{tab:endianityencodings}\\
+  \hline \\ \bfseries Endian code name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Endian code name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_END\_default  & 0x00 \\
+DW\_END\_big & 0x01 \\
+DW\_END\_little & 0x02 \\
+DW\_END\_lo\_user & 0x40 \\
+DW\_END\_hi\_user & 0xff \\
+
+\end{longtable}
+\end{centering}
+
+\section{Accessibility Codes}
+\label{datarep:accessibilitycodes}
+The encodings of the constants used in the DW\_AT\_accessibility
+attribute are given in 
+Table \refersec{tab:accessibilityencodings}.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Accessibility encodings} \label{tab:accessibilityencodings}\\
+  \hline \\ \bfseries Accessibility code name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Accessibility code name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_ACCESS\_public&0x01  \\
+DW\_ACCESS\_protected&0x02 \\
+DW\_ACCESS\_private&0x03 \\
+
+\end{longtable}
+\end{centering}
+
+
+\section{Visibility Codes}
+\label{datarep:visibilitycodes}
+The encodings of the constants used in the 
+DW\_AT\_visibility attribute are given in 
+Table \refersec{tab:visibilityencodings}. 
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Visibility encodings} \label{tab:visibilityencodings}\\
+  \hline \\ \bfseries Visiibility code name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Visibility code name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_VIS\_local&0x01 \\
+DW\_VIS\_exported&0x02 \\
+DW\_VIS\_qualified&0x03 \\
+
+\end{longtable}
+\end{centering}
+
+\section{Virtuality Codes}
+\label{datarep:vitualitycodes}
+
+The encodings of the constants used in the 
+DW\_AT\_virtuality attribute are given in 
+Table \refersec{tab:virtualityencodings}.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Virtuality encodings} \label{tab:virtualityencodings}\\
+  \hline \\ \bfseries Virtuality code name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Virtuality code name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_VIRTUALITY\_none&0x00 \\
+DW\_VIRTUALITY\_virtual&0x01 \\
+DW\_VIRTUALITY\_pure\_virtual&0x02 \\
+
+
+
+\end{longtable}
+\end{centering}
+
+The value 
+DW\_VIRTUALITY\_none is equivalent to the absence of the 
+DW\_AT\_virtuality
+attribute.
+
+\section{Source Languages}
+\label{datarep:sourcelanguages}
+
+The encodings of the constants used in the DW\_AT\_language
+attribute are given in 
+Table \refersec{tab:languageencodings}.
+Names marked with
+% If we don't force a following space it looks odd
+\dag \  
+and their associated values are reserved, but the
+languages they represent are not well supported. 
+Table \refersec{tab:languageencodings}
+also shows the default lower bound, if any, assumed for
+an omitted DW\_AT\_lower\_bound attribute in the context of a
+DW\_TAG\_subrange\_type debugging information entry for each
+defined language.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c|c}
+  \caption{Language encodings} \label{tab:languageencodings}\\
+  \hline \\ \bfseries Language name&\bfseries Value &\bfseries Default Lower Bound \\ \hline
+\endfirsthead
+  \bfseries Language name&\bfseries Value &\bfseries Default Lower Bound\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_LANG\_C89&0x0001&0       \\
+DW\_LANG\_C&0x0002&0       \\
+DW\_LANG\_Ada83 \dag &0x0003&1       \\
+DW\_LANG\_C\_plus\_plus &0x0004&0       \\
+DW\_LANG\_Cobol74 \dag &0x0005&1       \\
+DW\_LANG\_Cobol85 \dag &0x0006&1       \\
+DW\_LANG\_Fortran77&0x0007&1       \\
+DW\_LANG\_Fortran90&0x0008&1       \\
+DW\_LANG\_Pascal83&0x0009&1       \\
+DW\_LANG\_Modula2&0x000a&1       \\
+DW\_LANG\_Java&0x000b&0       \\
+DW\_LANG\_C99&0x000c&0       \\
+DW\_LANG\_Ada95 \dag &0x000d&1       \\
+DW\_LANG\_Fortran95 &0x000e&1       \\
+DW\_LANG\_PLI \dag &0x000f&1 \\
+DW\_LANG\_ObjC&0x0010&0 \\
+DW\_LANG\_ObjC\_plus\_plus&0x0011&0 \\
+DW\_LANG\_UPC&0x0012&0 \\
+DW\_LANG\_D&0x0013&0 \\
+DW\_LANG\_Python \dag &0x0014&0 \\
+DW\_LANG\_lo\_user&0x8000 & \\
+DW\_LANG\_hi\_user&0xffff & \\
+
+\end{longtable}
+\dag See text
+\end{centering}
+
+\section{Address Class Encodings}
+\label{datarep:addressclassencodings}
+
+The value of the common address class encoding 
+DW\_ADDR\_none is 0.
+
+
+\section{Identifier Case}
+\label{datarep:identifiercase}
+
+The encodings of the constants used in the 
+DW\_AT\_identifier\_case attribute are given in 
+Table \refersec{tab:identifiercaseencodings}.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Identifier case encodings} \label{tab:identifiercaseencodings}\\
+  \hline \\ \bfseries Identifier case name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Identifier case name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+DW\_ID\_case\_sensitive&0x00     \\
+DW\_ID\_up\_case&0x01     \\
+DW\_ID\_down\_case&0x02     \\
+DW\_ID\_case\_insensitive&0x03     \\
+\end{longtable}
+\end{centering}
+
+\section{Calling Convention Encodings}
+\label{datarep:callingconventionencodings}
+The encodings of the constants used in the 
+DW\_AT\_calling\_convention attribute are given in
+Table \refersec{tab:callingconventionencodings}.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Calling convention encodings} \label{tab:callingconventionencodings}\\
+  \hline \\ \bfseries Calling Convention name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Calling Convention name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_CC\_normal&0x01     \\
+DW\_CC\_program&0x02     \\
+DW\_CC\_nocall&0x03     \\
+DW\_CC\_lo\_user&0x40     \\
+DW\_CC\_hi\_user&0xff     \\
+
+\end{longtable}
+\end{centering}
+
+\section{Inline Codes}
+\label{datarep:inlinecodes}
+
+The encodings of the constants used in the 
+DW\_AT\_inline attribute are given in 
+Table \refersec{tab:inlineencodings}.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Inline encodings} \label{tab:inlineencodings}\\
+  \hline \\ \bfseries Iline Code name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Iline Code name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_INL\_not\_inlined&0x00      \\
+DW\_INL\_inlined&0x01      \\
+DW\_INL\_declared\_not\_inlined&0x02      \\
+DW\_INL\_declared\_inlined&0x03      \\
+
+\end{longtable}
+\end{centering}
+
+% this clearpage is ugly, but the following table came
+% out oddly without it.
+\clearpage
+\section{Array Ordering}
+\label{datarep:arrayordering}
+
+The encodings of the constants used in the 
+DW\_AT\_ordering attribute are given in 
+Table \refersec{tab:orderingencodings}.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Ordering encodings} \label{tab:orderingencodings}\\
+  \hline \\ \bfseries Ordering name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Ordering name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_ORD\_row\_major&0x00  \\
+DW\_ORD\_col\_major&0x01  \\
+
+\end{longtable}
+\end{centering}
+
+
+\section{Discriminant Lists}
+\label{datarep:discriminantlists}
+
+The descriptors used in the 
+DW\_AT\_discr\_list attribute are 
+encoded as 1\dash byte constants. The
+defined values are given in 
+Table \refersec{tab:discriminantdescriptorencodings}.
+
+% Odd that the 'Name' field captalized here, it is not caps elsewhere.
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Discriminant descriptor encodings} \label{tab:discriminantdescriptorencodings}\\
+  \hline \\ \bfseries Descriptor Name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Descriptor Name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_DSC\_label&0x00 \\
+DW\_DSC\_range&0x01 \\
+
+\end{longtable}
+\end{centering}
+
+\section{Name Lookup Tables}
+\label{datarep:namelookuptables}
+
+Each set of entries in the table of global names contained
+in the .debug\_pubnames and .debug\_pubtypes sections begins
+with a header consisting of:
+
+
+\begin{enumerate}[1.]
+\item unit\_length (initial length) \\
+A 4\dash byte or 12\dash byte unsigned integer representing the length
+of the .debug\_info contribution for that compilation unit,
+not including the length field itself. In the 32\dash bit DWARF
+format, this is a 4\dash byte unsigned integer (which must be less
+than 0xfffffff0); in the 64\dash bit DWARF format, this consists
+of the 4\dash byte value 0xffffffff followed by an 8\dash byte unsigned
+integer that gives the actual length
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\item  version (uhalf)
+A 2\dash byte unsigned integer representing the version of the
+DWARF information for the compilation unit
+(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}).
+The value in this field is 4.
+
+% Some say unsigned offset this just says offset: FIXME
+\item debug\_info\_offset (section offset) \\
+A 4\dash byte or 8\dash byte offset into the .debug\_info
+section of the compilation unit header.
+In
+the 32\dash bit DWARF format, this is a 4\dash byte unsigned offset;
+in the 64\dash bit DWARF format, this is an 8\dash byte unsigned offsets
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\item  debug\_info\_length (section length) \\
+A 4\dash byte or 8\dash byte length containing the size in bytes of the
+contents of the .debug\_info section generated to represent
+this compilation unit. In the 32\dash bit DWARF format, this is
+a 4\dash byte unsigned length; in the 64\dash bit DWARF format, this
+is an 8-byte unsigned length 
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+
+\end{enumerate}
+
+This header is followed by a series of tuples. Each tuple
+consists of a 4\dash byte or 8\dash byte offset followed by a string
+of non\dash null bytes terminated by one null byte. 
+In the 32\dash bit
+DWARF format, this is a 4\dash byte offset; in the 64\dash bit DWARF
+format, it is an 8\dash byte offset. 
+Each set is terminated by an
+offset containing the value 0.
+
+
+\section{Address Range Table}
+\label{datarep:addrssrangetable}
+
+Each set of entries in the table of address ranges contained
+in the .debug\_aranges section begins with a header containing:
+
+\begin{enumerate}[1.]
+% FIXME The unit length text is not fully consistent across
+% these tables.
+
+\item unit\_length (initial length) \\
+A 4-byte or 12-byte length containing the length of the
+set of entries for this compilation unit, not including the
+length field itself. In the 32-bit DWARF format, this is a
+4-byte unsigned integer (which must be less than 0xfffffff0);
+in the 64-bit DWARF format, this consists of the 4-byte value
+0xffffffff followed by an 8-byte unsigned integer that gives
+the actual length 
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\item version (uhalf) \\
+A 2\dash byte version identifier containing the value 2 
+(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+
+\item debug\_info\_offset (section offset) \\
+A 4\dash byte or 8\dash byte offset into the .debug\_info section of
+the compilation unit header. In the 32\dash bit DWARF format,
+this is a 4\dash byte unsigned offset; in the 64\dash bit DWARF format,
+this is an 8\dash byte unsigned offset 
+(see Section \refersec{datarep:32bitand64bitdwarfformats}).
+
+\item address\_size (ubyte) \\
+A 1\dash byte unsigned integer containing the size in bytes of an
+address (or the offset portion of an address for segmented
+addressing) on the target system.
+
+\item segment\_size (ubyte) \\
+A 1\dash byte unsigned integer containing the size in bytes of a
+segment selector on the target system.
+
+\end{enumerate}
+
+This header is followed by a series of tuples. Each tuple
+consists of a segment, an address and a length. 
+The segment
+size is given by the segment\_size field of the header; the
+address and length size are each given by the address\_size
+field of the header. 
+The first tuple following the header in
+each set begins at an offset that is a multiple of the size
+of a single tuple (that is, the size of a segment selector
+plus twice the size of an address). 
+The header is padded, if
+necessary, to that boundary. Each set of tuples is terminated
+by a 0 for the segment, a 0 for the address and 0 for the
+length. If the segment\_size field in the header is zero,
+the segment selectors are omitted from all tuples, including
+the terminating tuple.
+
+
+\section{Line Number Information}
+\label{datarep:linenumberinformation}
+
+The version number in the line number program header is 4
+(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+
+The boolean values ``true'' and ``false'' 
+used by the line number information program are encoded
+as a single byte containing the value 0 
+for ``false,'' and a non-zero value for ``true.''
+
+The encodings for the standard opcodes are given in 
+Table \refersec{tab:linenumberstandardopcodeencodings}.
+
+% Odd that the 'Name' field captalized here, it is not caps elsewhere.
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Line Number Standard Opcode encodings} \label{tab:linenumberstandardopcodeencodings}\\
+  \hline \\ \bfseries Opcode Name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Opcode Name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_LNS\_copy&0x01 \\
+DW\_LNS\_advance\_pc&0x02 \\
+DW\_LNS\_advance\_line&0x03 \\
+DW\_LNS\_set\_file&0x04 \\
+DW\_LNS\_set\_column&0x05 \\
+DW\_LNS\_negate\_stmt&0x06 \\
+DW\_LNS\_set\_basic\_block&0x07 \\
+DW\_LNS\_const\_add\_pc*0x08 \\
+DW\_LNS\_fixed\_advance\_pc&0x09 \\
+DW\_LNS\_set\_prologue\_end&0x0a \\
+DW\_LNS\_set\_epilogue\_begin&0x0b \\
+DW\_LNS\_set\_isa&0x0c \\
+
+\end{longtable}
+\end{centering}
+
+
+The encodings for the extended opcodes are given in 
+Table \refersec{tab:linenumberextendedopcodeencodings}.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Line Number Extended Opcode encodings} \label{tab:linenumberextendedopcodeencodings}\\
+  \hline \\ \bfseries Opcode Name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Opcode Name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_LNE\_end\_sequence&0x01    \\
+DW\_LNE\_set\_address&0x02\\
+DW\_LNE\_define\_file&0x03\\
+DW\_LNE\_set\_discriminator \ddag &0x04   \\
+DW\_LNE\_lo\_user&0x80   \\
+DW\_LNE\_hi\_user&0xff   \\
+
+\end{longtable}
+\ddag Extended opcode new in DWARF Version 4.
+\end{centering}
+
+\section{Macro Information}
+\label{datarep:macroinformation}
+
+The source line numbers and source file indices encoded in the
+macro information section are represented as unsigned LEB128
+numbers as are the constants in a DW\_MACINFO\_vendor\_ext entry.
+
+The macinfo type is encoded as a single byte. 
+The encodings are given in 
+Table \refersec{tab:macinfotypeencodings}.
+
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c}
+  \caption{Macinfo Type Encodings} \label{tab:macinfotypeencodings}\\
+  \hline \\ \bfseries Macinfo Type Name&\bfseries Value \\ \hline
+\endfirsthead
+  \bfseries Macinfo Type Name&\bfseries Value\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_MACINFO\_define&0x01 \\
+DW\_MACINFO\_undef&0x02 \\
+DW\_MACINFO\_start\_file&0x03 \\
+DW\_MACINFO\_end\_file&0x04 \\
+DW\_MACINFO\_vendor\_ext&0xff \\
+
+\end{longtable}
+\end{centering}
+
+\section{Call Frame Information}
+\label{datarep:callframeinformation}
+
+In the 32\dash bit DWARF format, the value of the CIE id in the
+CIE header is 0xffffffff; in the 64\dash bit DWARF format, the
+value is 0xffffffffffffffff.
+
+The value of the CIE version number is 4 
+(see Appendix \refersec{app:dwarfsectionversionnumbersinformative}). 
+
+Call frame instructions are encoded in one or more bytes. The
+primary opcode is encoded in the high order two bits of
+the first byte (that is, opcode = byte >> 6). An operand
+or extended opcode may be encoded in the low order 6
+bits. Additional operands are encoded in subsequent bytes.
+The instructions and their encodings are presented in
+Table \refersec{tab:callframeinstructionencodings}.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|c|c|l|l}
+  \caption{Call frame instruction encodings} \label{tab:callframeinstructionencodings} \\
+  \hline \\ &\bfseries High 2 &\bfseries Low 6 &  & \\
+  \bfseries Instruction&\bfseries Bits &\bfseries Bits &\bfseries Operand 1 &\bfseries Operand 2\\ \hline
+\endfirsthead
+   & \bfseries High 2 &\bfseries Low 6 &  &\\
+  \bfseries Instruction&\bfseries Bits &\bfseries Bits &\bfseries Operand 1 &\bfseries Operand 2\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+DW\_CFA\_advance\_loc&0x1&delta & \\
+DW\_CFA\_offset&0x2&register&ULEB128 offset \\
+DW\_CFA\_restore&0x3&register & & \\
+DW\_CFA\_nop&0&0 & & \\
+DW\_CFA\_set\_loc&0&0x01&address & \\
+DW\_CFA\_advance\_loc1&0&0x02&1\dash byte delta & \\
+DW\_CFA\_advance\_loc2&0&0x03&2\dash byte delta & \\
+DW\_CFA\_advance\_loc4&0&0x04&4\dash byte delta & \\
+DW\_CFA\_offset\_extended&0&0x05&ULEB128 register&ULEB128 offset \\
+DW\_CFA\_restore\_extended&0&0x06&ULEB128 register & \\
+DW\_CFA\_undefined&0&0x07&ULEB128 register & \\
+DW\_CFA\_same\_value&0&0x08 &ULEB128 register & \\
+DW\_CFA\_register&0&0x09&ULEB128 register &ULEB128 offset \\
+DW\_CFA\_remember\_state&0&0x0a & & \\
+DW\_CFA\_restore\_state&0&0x0b & & \\
+DW\_CFA\_def\_cfa&0&0x0c &ULEB128 register&ULEB128 offset \\
+DW\_CFA\_def\_cfa\_register&0&0x0d&ULEB128 register & \\
+DW\_CFA\_def\_cfa\_offset&0&0x0e &ULEB128 offset & \\
+DW\_CFA\_def\_cfa\_expression&0&0x0f &BLOCK  \\
+DW\_CFA\_expression&0&0x10&ULEB128 register & BLOCK \\
+
+DW\_CFA\_offset\_extended\_sf&0&0x11&ULEB128 register&SLEB128 offset \\
+DW\_CFA\_def\_cfa\_sf&0&0x12&ULEB128 register&SLEB128 offset \\
+DW\_CFA\_def\_cfa\_offset\_sf&0&0x13&SLEB128 offset & \\
+DW\_CFA\_val\_offset&0&0x14&ULEB128&ULEB128 \\
+DW\_CFA\_val\_offset\_sf&0&0x15&ULEB128&SLEB128 \\
+DW\_CFA\_val\_expression&0&0x16&ULEB128&BLOCK  \\
+DW\_CFA\_lo\_user&0&0x1c   & & \\
+DW\_CFA\_hi\_user&0&0x3f & & \\
+\end{longtable}
+\end{centering}
+
+\section{Non-continguous Address Ranges}
+\label{datarep:noncontiguousaddressranges}
+
+Each entry in a range list 
+(see Section \refersec{chap:noncontiguousaddressranges})
+is either a
+range list entry, a base address selection entry, or an end
+of list entry.
+
+A range list entry consists of two relative addresses. The
+addresses are the same size as addresses on the target machine.
+
+A base address selection entry and an end of list entry each
+consist of two (constant or relocated) addresses. The two
+addresses are the same size as addresses on the target machine.
+
+For a range list to be specified, the base address of the
+corresponding compilation unit must be defined 
+(see Section \refersec{chap:normalandpartialcompilationunitentries}).
+
+
+\section{Dependencies and Constraints}
+\label{datarep:dependenciesandconstraints}
+
+The debugging information in this format is intended to
+exist in the .debug\_abbrev, .debug\_aranges, .debug\_frame,
+.debug\_info, .debug\_line, .debug\_loc, .debug\_macinfo,
+.debug\_pubnames, .debug\_pubtypes, .debug\_ranges, .debug\_str
+and .debug\_types sections of an object file, or equivalent
+separate file or database. The information is not 
+word\dash aligned. Consequently: •
+
+\begin{itemize}
+\item For the 32\dash bit DWARF format and a target architecture with
+32\dash bit addresses, an assembler or compiler must provide a way
+to produce 2\dash byte and 4\dash byte quantities without alignment
+restrictions, and the linker must be able to relocate a
+4\dash byte address or section offset that occurs at an arbitrary
+alignment.
+
+\item For the 32\dash bit DWARF format and a target architecture with
+64\dash bit addresses, an assembler or compiler must provide a
+way to produce 2\dash byte, 4\dash byte and 8\dash byte quantities without
+alignment restrictions, and the linker must be able to relocate
+an 8\dash byte address or 4\dash byte section offset that occurs at an
+arbitrary alignment.
+
+\item For the 64\dash bit DWARF format and a target architecture with
+32\dash bit addresses, an assembler or compiler must provide a
+way to produce 2\dash byte, 4\dash byte and 8\dash byte quantities without
+alignment restrictions, and the linker must be able to relocate
+a 4\dash byte address or 8\dash byte section offset that occurs at an
+arbitrary alignment.
+
+\textit{It is expected that this will be required only for very large
+32\dash bit programs or by those architectures which support
+a mix of 32\dash bit and 64\dash bit code and data within the same
+executable object.}
+
+\item For the 64\dash bit DWARF format and a target architecture with
+64\dash bit addresses, an assembler or compiler must provide a
+way to produce 2\dash byte, 4\dash byte and 8\dash byte quantities without
+alignment restrictions, and the linker must be able to
+relocate an 8\dash byte address or section offset that occurs at
+an arbitrary alignment.
+\end{itemize}
+
+\section{Integer Representation Names}
+\label{datarep:integerrepresentationnames}
+
+The sizes of the integers used in the lookup by name, lookup
+by address, line number and call frame information sections
+are given in
+Table 41 \refersec{tab:integerrepresentationnames}.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{c|l}
+  \caption{Integer Representation Names} \label{tab:integerrepresentationnames}\\
+  \hline \\ \bfseries Representation Name&\bfseries Representation \\ \hline
+\endfirsthead
+  \bfseries Representation Name&\bfseries Representation\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+
+sbyte&  signed, 1\dash byte integer \\
+ubyte&unsigned, 1\dash byte integer \\
+uhalf&unsigned, 2\dash byte integer \\
+uword&unsigned, 4\dash byte integer \\
+
+\end{longtable}
+\end{centering}
+
+\section{Type Signature Computation}
+\label{datarep:typesignaturecomputation}
+
+A type signature is computed only by the DWARF producer;
+it is used by a DWARF consumer to resolve type references to
+the type definitions that are contained in type units.
+
+The type signature for a type T0 is formed from the MD5
+hash of a flattened description of the type. The flattened
+description of the type is a byte sequence derived from the
+DWARF encoding of the type as follows:
+
+\begin{enumerate}[1.]
+
+\item Start with an empty sequence S and a list V of visited
+types, where V is initialized to a list containing the type
+T0 as its single element. Elements in V are indexed from 1,
+so that V[1] is T0.
+
+\item If the debugging information entry represents a type that
+is nested inside another type or a namespace, append to S
+the type’s context as follows: For each surrounding type
+or namespace, beginning with the outermost such construct,
+append the letter 'C', the DWARF tag of the construct, and
+the name (taken from the DW\_AT\_name attribute) of the type
+or namespace (including its trailing null byte).
+
+\item  Append to S the letter 'D', followed by the DWARF tag of
+the debugging information entry.
+
+\item For each of the following attributes that are present in
+the debugging information entry, in the order listed below,
+append to S a marker letter (see below), the DWARF attribute
+code, and the attribute value.
+
+\begin{itemize}
+\item DW\_AT\_name
+\item DW\_AT\_accessibility
+\item DW\_AT\_address\_class
+\item DW\_AT\_allocated
+\item DW\_AT\_artificial
+\item DW\_AT\_associated
+\item DW\_AT\_binary\_scale
+\item DW\_AT\_bit\_offset
+\item DW\_AT\_bit\_size
+\item DW\_AT\_bit\_stride
+\item DW\_AT\_byte\_size
+\item DW\_AT\_byte\_stride
+\item DW\_AT\_const\_expr
+\item DW\_AT\_const\_value
+\item DW\_AT\_containing\_type
+\item DW\_AT\_count
+\item DW\_AT\_data\_bit\_offset
+\item DW\_AT\_data\_location
+\item DW\_AT\_data\_member\_location
+\item DW\_AT\_decimal\_scale
+\item DW\_AT\_decimal\_sign
+\item DW\_AT\_default\_value
+\item DW\_AT\_digit\_count
+\item DW\_AT\_discr
+\item DW\_AT\_discr\_list
+\item DW\_AT\_discr\_value
+\item DW\_AT\_encoding
+\item DW\_AT\_enum\_class
+\item DW\_AT\_endianity
+\item DW\_AT\_explicit
+\item DW\_AT\_is\_optional
+\item DW\_AT\_location
+\item DW\_AT\_lower\_bound
+\item DW\_AT\_mutable
+\item DW\_AT\_ordering
+\item DW\_AT\_picture\_string
+\item DW\_AT\_prototyped
+\item DW\_AT\_small
+\item DW\_AT\_segment
+\item DW\_AT\_string\_length
+\item DW\_AT\_threads\_scaled
+\item DW\_AT\_upper\_bound
+\item DW\_AT\_use\_location
+\item DW\_AT\_use\_UTF8
+\item DW\_AT\_variable\_parameter
+\item DW\_AT\_virtuality
+\item DW\_AT\_visibility
+\item DW\_AT\_vtable\_elem\_location
+\end{itemize}
+
+Note that except for the initial DW\_AT\_name attribute,
+attributes are appended in order according to the alphabetical
+spelling of their identifier.
+
+If an implementation defines any vendor-specific attributes,
+any such attributes that are essential to the definition of
+the type should also be included at the end of the above list,
+in their own alphabetical suborder.
+
+An attribute that refers to another type entry T is processed
+as follows: (a) If T is in the list V at some V[x], use the
+letter 'R' as the marker and use the unsigned LEB128 encoding
+of x as the attribute value; otherwise, (b) use the letter 'T'
+as the marker, process the type T recursively by performing
+Steps 2 through 7, and use the result as the attribute value.
+
+Other attribute values use the letter 'A' as the marker, and
+the value consists of the form code (encoded as an unsigned
+LEB128 value) followed by the encoding of the value according
+to the form code. To ensure reproducibility of the signature,
+the set of forms used in the signature computation is limited
+to the following: DW\_FORM\_sdata, 
+DW\_FORM\_flag, 
+DW\_FORM\_string,
+and DW\_FORM\_block.
+
+\item If the tag in Step 3 is one of DW\-\_TAG\-\_pointer\-\_type,
+DW\-\_TAG\-\_reference\-\_type, 
+DW\-\_TAG\-\_rvalue\-\_reference\-\_type,
+DW\-\_TAG\-\_ptr\-\_to\-\_member\-\_type, 
+or DW\-\_TAG\-\_friend, and the referenced
+type (via the DW\-\_AT\-\_type or 
+DW\-\_AT\-\_friend attribute) has a
+DW\-\_AT\-\_name attribute, append to S the letter 'N', the DWARF
+attribute code (DW\-\_AT\-\_type or 
+DW\-\_AT\-\_friend), the context of
+the type (according to the method in Step 2), the letter 'E',
+and the name of the type. For DW\-\_TAG\-\_friend, if the referenced
+entry is a DW\-\_TAG\-\_subprogram, the context is omitted and the
+name to be used is the ABI-specific name of the subprogram
+(e.g., the mangled linker name).
+
+
+\item 6.If the tag in Step 3 is not one of DW\-\_TAG\-\_pointer\-\_type,
+DW\-\_TAG\-\_reference\-\_type, 
+DW\-\_TAG\-\_rvalue\-\_reference\-\_type,
+DW\-\_TAG\-\_ptr\-\_to\-\_member\-\_type, or 
+DW\-\_TAG\-\_friend, but has
+a DW\-\_AT\-\_type attribute, or if the referenced type (via
+the DW\-\_AT\-\_type or 
+DW\-\_AT\-\_friend attribute) does not have a
+DW\-\_AT\-\_name attribute, the attribute is processed according to
+the method in Step 4 for an attribute that refers to another
+type entry.
+
+
+\item Visit each child C of the debugging information
+entry as follows: If C is a nested type entry or a member
+function entry, and has a DW\-\_AT\-\_name attribute, append to
+S the letter 'S', the tag of C, and its name; otherwise,
+process C recursively by performing Steps 3 through 7,
+appending the result to S. Following the last child (or if
+there are no children), append a zero byte.
+\end{enumerate}
+
+
+
+For the purposes of this algorithm, if a debugging information
+entry S has a 
+DW\-\_AT\-\_specification 
+attribute that refers to
+another entry D (which has a 
+DW\-\_AT\-\_declaration 
+attribute),
+then S inherits the attributes and children of D, and S is
+processed as if those attributes and children were present in
+the entry S. Exception: if a particular attribute is found in
+both S and D, the attribute in S is used and the corresponding
+one in D is ignored.
+
+DWARF tag and attribute codes are appended to the sequence
+as unsigned LEB128 values, using the values defined earlier
+in this chapter.
+
+\textit{A grammar describing this computation may be found in
+Appendix \refersec{app:typesignaturecomputationgrammar}.
+}
+
+\textit{An attribute that refers to another type entry should
+be recursively processed or replaced with the name of the
+referent (in Step 4, 5 or 6). If neither treatment applies to
+an attribute that references another type entry, the entry
+that contains that attribute should not be considered for a
+separate type unit.}
+
+\textit{If a debugging information entry contains an attribute from
+the list above that would require an unsupported form, that
+entry should not be considered for a separate type unit.}
+
+\textit{A type should be considered for a separate type unit only
+if all of the type entries that it contains or refers to in
+Steps 6 and 7 can themselves each be considered for a separate
+type unit.}
+
+Where the DWARF producer may reasonably choose two or more
+different forms for a given attribute, it should choose
+the simplest possible form in computing the signature. (For
+example, a constant value should be preferred to a location
+expression when possible.)
+
+Once the string S has been formed from the DWARF encoding,
+an MD5 hash is computed for the string and the lower 64 bits
+are taken as the type signature.
+
+\textit{The string S is intended to be a flattened representation of
+the type that uniquely identifies that type (i.e., a different
+type is highly unlikely to produce the same string).}
+
+\textit{A debugging information entry should not be placed in a
+separate type unit if any of the following apply:}
+
+\begin{itemize}
+
+\item \textit{The entry has an attribute whose value is a location
+expression, and the location expression contains a reference to
+another debugging information entry (e.g., a DW\_OP\_call\_ref
+operator), as it is unlikely that the entry will remain
+identical across compilation units.}
+
+\item \textit{The entry has an attribute whose value refers
+to a code location or a location list.}
+
+\item \textit{The entry has an attribute whose value refers
+to another debugging information entry that does not represent
+a type.}
+\end{itemize}
+
+
+\textit{Certain attributes are not included in the type signature:}
+
+\begin{itemize}
+\item \textit{The DW\_AT\_declaration attribute is not included because it
+indicates that the debugging information entry represents an
+incomplete declaration, and incomplete declarations should
+not be placed in separate type units.}
+
+\item \textit{The DW\_AT\_description attribute is not included because
+it does not provide any information unique to the defining
+declaration of the type.}
+
+\item \textit{The DW\_AT\_decl\_file, DW\_AT\_decl\_line, and
+DW\_AT\_decl\_column attributes are not included because they
+may vary from one source file to the next, and would prevent
+two otherwise identical type declarations from producing the
+same hash.}
+
+\end{itemize}
diff --git a/dwarf5/latexdoc/dwarf5.tex b/dwarf5/latexdoc/dwarf5.tex
new file mode 100644 (file)
index 0000000..ac087c5
--- /dev/null
@@ -0,0 +1,186 @@
+\documentclass[12pt,letterpaper,oneside]{memoir} 
+% for debugging, add 'draft' (without quotes) to the [] document class list.
+% If draft is in the document class list, pix are just suggested
+% by an outline, the pic does not appear as a picture.
+%
+\usepackage{url} % For color in letters. Links instead?
+\usepackage{color} % For color in letters. Links instead?
+\usepackage{ellipsis} % Provides ... as \dots
+\usepackage{color}
+\usepackage{listings}
+\usepackage{alltt}
+\lstset{ %
+language=C++,              % choose the language of the code
+basicstyle=\footnotesize,  % the size of the fonts that are used for the code
+numbers=left,              % where to put the line-numbers
+numberstyle=\footnotesize, % the size of the fonts that are used for the line-numbers
+stepnumber=1,              % the step between two line-numbers. If it is 1 each line will be numbered
+numbersep=5pt,             % how far the line-numbers are from the code
+backgroundcolor=\color{white}, % choose the background color. You must add \usepackage{color}
+showspaces=false,          % show spaces adding particular underscores
+showstringspaces=false,    % underline spaces within strings
+showtabs=false,            % show tabs within strings adding particular underscores
+frame=single,           % adds a frame around the code
+tabsize=2,              % sets default tabsize to 2 spaces
+captionpos=b,           % sets the caption-position to bottom
+breaklines=true,        % sets automatic line breaking
+breakatwhitespace=false,% sets if automatic breaks should only happen at whitespace
+escapeinside={\%*}{*)}  % if you want to add a comment within your code
+}
+
+\usepackage{amsmath} % Provides \nobreakdash
+\usepackage{graphicx} % For pictures
+\usepackage{longtable}
+% \textregistered is the trademark symbol
+\usepackage[headheight=16pt,paper=letterpaper]{geometry}
+\setlength{\headheight}{15pt}  % avoids warning from latex
+\usepackage{epic} % For eepic package 
+\usepackage{eepic} % For the diagram of section relationships
+\usepackage{makeidx}
+% hyperref must be the last package listed.
+% hypertextnames=false helps hypertext get right links.
+\usepackage[hypertexnames=false]{hyperref}  % Lets us generate colored active links inside a pdf.
+\makeindex  % This and the makeidx package allow \index to create index entries.
+
+\newcommand{\docdate}{07 May 2012}
+
+\newcommand{\dwf}{DWARF Debugging Information Format}
+\newenvironment{myindentpara}[1]%
+ {\begin{list}{}%
+   {\setlength{\leftmargin}{#1}}%
+   \item[]%
+ }
+ {\end{list}}
+
+% broken somehow.
+%\newcommand{\myindent1}[1]{\begin{myindentpara}{1cm}#1\end{myindentpara}}
+
+\hypersetup{colorlinks=true,
+  %bookmarks=true,
+  pdfauthor={\dwf\ Committee},
+  pdftitle={\dwf\ Version 5}
+}
+
+% Generate a page ref.
+% use like   \refersec{chap:registerbasedaddressing}
+\newcommand{\refersec}[1]{ \ref{#1} Page \pageref{#1} }
+
+%Generate a live link into the doc
+% use like \livelink{DW\_OP\_dup}{chap:DWOPdup}
+\newcommand{\livelink}[2]{ \hyperref[#2]{#1} }
+
+\newcommand{\dash}{\nobreakdash-\hspace{0pt}}  % So we handle dashes ok.
+
+%Fors simple index entries, this saves typing.
+\newcommand{\addtoindex}[1]{#1\index{#1}}
+
+
+\begin{document}
+\pagestyle{empty}
+\nonzeroparskip
+\setlength{\parindent}{0pt} 
+\setlength{\headheight}{6cm}
+\setlength{\uppermargin}{6cm}
+
+
+
+\begin{centering}
+\LARGE
+\textbf{\dwf}
+
+\textbf{Version 5}
+
+\centering
+\includegraphics[keepaspectratio=true,scale=0.5]{DWlogo}
+
+\centering
+\href{http://www.dwarfstd.org}{\dwf\ Committee} 
+
+\url{http://www.dwarfstd.org}
+
+\textbf{\docdate}
+
+\end{centering}
+\openany
+\clearpage
+\openany
+
+\frontmatter
+\textmd
+\normalsize
+\setlength{\headheight}{15pt}  
+
+\pagestyle{plain}
+\makeevenhead{plain}{}{}{}
+\makeoddhead{plain}{}{}{}
+\makeevenfoot{plain}{}{}{}
+\makeoddfoot{plain}{}{}{}
+
+\nonzeroparskip
+\setlength{\parindent}{0pt} 
+\settrims{0.5in}{0.5in}
+\settypeblocksize{8.2in}{6.0in}
+%\setlrmarginsandblock{0.6in}{0.6in}{*}
+%\setheadfoot{15pt}{15pt}
+%\setheaderspaces {*}{2\onelineskip}{*}
+\nouppercaseheads
+\makeevenhead{plain}{}{\rightmark}{}
+\makeoddhead{plain}{}{\rightmark}{}
+\makeevenfoot{plain}{\docdate}{}{Page \thepage}
+\makeoddfoot{plain}{\docdate}{}{Page \thepage}
+
+\openany
+\pagenumbering{roman}
+\nonzeroparskip
+\setlength{\parindent}{0pt} 
+
+\include{copyright}
+\include{foreword}
+
+\tableofcontents
+\listoffigures
+\listoftables
+
+\mainmatter
+
+% Define the levels of sectionality that are numbered.
+\setcounter{secnumdepth}{5}
+
+\nonzeroparskip
+\setlength{\parindent}{0pt} 
+
+\makepagestyle{fragFirstChPage}
+
+\makeevenhead{fragFirstChPage}{}{}{}
+\makeoddhead{fragFirstChPage}{}{}{}
+\makeoddfoot{fragFirstChPage}{\docdate}{}{Page \thepage}
+\makeevenfoot{fragFirstChPage}{\docdate}{}{Page \thepage}
+
+\aliaspagestyle{chapter}{fragFirstChPage}
+
+
+
+\chapterstyle{section}
+\pagenumbering{arabic}
+
+\aliaspagestyle{chapter}{fragFirstChPage}
+
+
+\include{introduction}
+\include{generaldescription}
+\include{programscope}
+\include{dataobject}
+\include{typeentries}
+\include{otherdebugginginformation}
+\include{datarepresentation}
+%  The \appendix toggles us into appendix chapters
+\appendix
+\include{attributesbytag}
+\include{appendixdebugrelationships}
+\include{encodingdecoding}
+\include{examples}
+\include{compression}
+\include{sectionversionnumbers}
+\include{gnulicense}
+\printindex
+\end{document}
diff --git a/dwarf5/latexdoc/encodingdecoding.tex b/dwarf5/latexdoc/encodingdecoding.tex
new file mode 100644 (file)
index 0000000..e3610ef
--- /dev/null
@@ -0,0 +1,82 @@
+
+\chapter[Encoding/Decoding (Informative)]{Variable Length Data: Encoding/Decoding (Informative)}
+\label{app:variablelengthdataencodingdecodinginformative}
+Here are algorithms expressed in a C-like pseudo-code to
+encode and decode signed and unsigned numbers in LEB128
+representation.
+
+\begin{figure}[here]
+\caption{Algorithm to encode an unsigned integer}
+\begin{lstlisting}
+do
+{
+    byte = low order 7 bits of value;
+    value >>= 7;
+    if (value != 0) /* more bytes to come */
+        set high order bit of byte;
+    emit byte;
+} while (value != 0);
+\end{lstlisting}
+\end{figure}
+\begin{figure}[here]
+\caption{Algorithm to encode a signed integer}
+\begin{lstlisting}
+more = 1;
+negative = (value < 0);
+size = no. of bits in signed integer;
+while(more)
+{
+    byte = low order 7 bits of value;
+    value >>= 7;
+    /* the following is unnecessary if the
+      * implementation of >>= uses an arithmetic rather
+      * than logical shift for a signed left operand
+      */
+    if (negative)
+        /* sign extend */
+        value |= - (1 <<(size - 7));
+    /* sign bit of byte is second high order bit (0x40) */
+    if ((value == 0 && sign bit of byte is clear) ||
+        (value == -1 && sign bit of byte is set))
+        more = 0;
+    else
+        set high order bit of byte;
+    emit byte;
+}
+\end{lstlisting}
+\end{figure}
+\begin{figure}[here]
+\caption{Algorithm to decode an unsigned LEB128 integer}
+\begin{lstlisting}
+result = 0;
+shift = 0;
+while(true)
+{
+    byte = next byte in input;
+    result |= (low order 7 bits of byte << shift);
+    if (high order bit of byte == 0)
+        break;
+    shift += 7;
+}
+\end{lstlisting}
+\end{figure}
+\begin{figure}[here]
+\caption{Algorithm to decode a signed LEB128 integer}
+\begin{lstlisting}
+result = 0;
+shift = 0;
+size = number of bits in signed integer;
+while(true)
+{
+    byte = next byte in input;
+    result |= (low order 7 bits of byte << shift);
+    shift += 7;
+    /* sign bit of byte is second high order bit (0x40) */
+    if (high order bit of byte == 0)
+        break;
+}
+if ((shift <size) \&\& (sign bit of byte is set))
+    /* sign extend */
+    result |= - (1 << shift);
+\end{lstlisting}
+\end{figure}
diff --git a/dwarf5/latexdoc/examples.tex b/dwarf5/latexdoc/examples.tex
new file mode 100644 (file)
index 0000000..90cd176
--- /dev/null
@@ -0,0 +1,1958 @@
+\chapter{Examples (Informative)}
+\label{app:examplesinformative}
+
+The following sections provide examples that illustrate
+various aspects of the DWARF debugging information format.
+
+
+
+\section{ Compilation Units and Abbreviations Table Example}
+\label{app:compilationunitsandabbreviationstableexample}
+
+
+Figure 48  FIXME REF
+depicts the relationship of the abbreviations tables contained
+in the .debug\_abbrev section to the information contained in
+the .debug\_info section. Values are given in symbolic form,
+where possible.
+
+The figure corresponds to the following two trivial source files:
+
+File myfile.c
+\begin{lstlisting}
+typedef char* POINTER;
+\end{lstlisting}
+File myfile2.c
+\begin{lstlisting}
+typedef char* strp;
+\end{lstlisting}
+
+
+Needs content FIXME
+
+\section{Aggregate Examples}
+\label{app:aggregateexamples}
+
+The following examples illustrate how to represent some of
+the more complicated forms of array and record aggregates
+using DWARF.
+
+\subsection{Fortran 90 Example}
+\label{app:fortran90example}
+Consider the Fortran 90 source fragment in 
+Figure \refersec{fig:fortran90examplesourcefragment}.
+
+\begin{figure}[here]
+\begin{lstlisting}
+type array_ptr
+real :: myvar
+real, dimension (:), pointer :: ap
+end type array_ptr
+type(array_ptr), allocatable, dimension(:) :: arrays
+allocate(arrays(20))
+do i = 1, 20
+allocate(arrays(i)%ap(i+10))
+end do
+\end{lstlisting}
+\caption{Fortran 90 example: source fragment} \label{fig:fortran90examplesourcefragment}
+\end{figure}
+
+For allocatable and pointer arrays, it is essentially required
+by the Fortran 90 semantics that each array consist of two
+parts, which we here call 1) the descriptor and 2) the raw
+data. (A descriptor has often been called a dope vector in
+other contexts, although it is often a structure of some kind
+rather than a simple vector.) Because there are two parts,
+and because the lifetime of the descriptor is necessarily
+longer than and includes that of the raw data, there must be
+an address somewhere in the descriptor that points to the
+raw data when, in fact, there is some (that is, when 
+the ``variable'' is allocated or associated).
+
+For concreteness, suppose that a descriptor looks something
+like the C structure in 
+Figure \refersec{fig:fortran90exampledescriptorrepresentation}.
+Note, however, that it is
+a property of the design that 1) a debugger needs no builtin
+knowledge of this structure and 2) there does not need to
+be an explicit representation of this structure in the DWARF
+input to the debugger.
+
+\begin{figure}[here]
+\begin{lstlisting}
+struct desc {
+    long el_len; // Element length
+    void * base; // Address of raw data
+    int ptr_assoc : 1; // Pointer is associated flag
+    int ptr_alloc : 1; // Pointer is allocated flag
+    int num_dims : 6; // Number of dimensions
+    struct dims_str { // For each dimension...  
+        long low_bound;
+        long upper_bound;
+        long stride;
+    } dims[63];
+};
+\end{lstlisting}
+\caption{Fortran 90 example: descriptor representation} \label{fig:fortran90exampledescriptorrepresentation}
+\end{figure}
+
+
+In practice, of course, a “real” descriptor will have
+dimension substructures only for as many dimensions as are
+specified in the num\_dims component. Let us use the notation
+desc ,textless n \textgreater\   
+to indicate a specialization of the desc struct in
+which n is the bound for the dims component as well as the
+contents of the num\_dims component.
+
+Because the arrays considered here come in two parts, it is
+necessary to distinguish the parts carefully. In particular,
+the “address of the variable” or equivalently, the “base
+address of the object” always refers to the descriptor. For
+arrays that do not come in two parts, an implementation can
+provide a descriptor anyway, thereby giving it two parts. (This
+may be convenient for general runtime support unrelated to
+debugging.) In this case the above vocabulary applies as
+stated. Alternatively, an implementation can do without a
+descriptor, in which case the “address of the variable”,
+or equivalently the “base address of the object”, refers
+to the “raw data” (the real data, the only thing around
+that can be the object).
+
+If an object has a descriptor, then the DWARF type for that
+object will have a DW\_AT\_data\_location attribute. If an object
+does not have a descriptor, then usually the DWARF type for the
+object will not have a DW\_AT\_data\_location. (See the following
+Ada example for a case where the type for an object without
+a descriptor does have a DW\_AT\_data\_location attribute. In
+that case the object doubles as its own descriptor.)
+
+The Fortran 90 derived type array\_ptr can now be redescribed
+in C\dash like terms that expose some of the representation as in
+
+\begin{lstlisting}
+struct array_ptr {
+    float myvar;
+    desc<1> ap;
+};
+\end{lstlisting}
+
+Similarly for variable arrays:
+\begin{lstlisting}
+desc<1> arrays;
+\end{lstlisting}
+
+(Recall that desc \textless 1 \textgreater 
+indicates the 1\dash dimensional version of desc.)
+
+Finally, the following notation is useful:
+
+\begin{enumerate}[1.]
+\item  sizeof(type): size in bytes of entities of the given type
+
+\item offset(type, comp): offset in bytes of the comp component
+within an entity of the given type
+\end{enumerate}
+
+
+The DWARF description is shown in 
+Section \refersec{app:fortran90exampledwarfdescription}.
+
+\subsection{Fortran 90 example: DWARF description}
+\label{app:fortran90exampledwarfdescription}
+
+\begin{alltt}
+! Description for type of 'ap'
+
+1\$: \addtoindex{DW\_TAG\_array\_type}
+        ! No name, default (Fortran) ordering, default stride
+        DW\_AT\_type(reference to REAL)
+        DW\_AT\_associated(expression= ! Test 'ptr\_assoc' flag
+            DW\_OP\_push\_object\_address
+            DW\_OP\_lit<n> ! where n == offset(ptr\_assoc)
+            DW\_OP\_plus
+            DW\_OP\_deref
+            DW\_OP\_lit1 ! mask for 'ptr\_assoc' flag
+            DW\_OP\_and)
+        DW\_AT\_data\_location(expression= ! Get raw data address
+            DW\_OP\_push\_object\_address
+            DW\_OP\_lit<n> ! where n == offset(base)
+            DW\_OP\_plus
+            DW\_OP\_deref) ! Type of index of array 'ap'
+2\$:     \addtoindex{DW\_TAG\_subrange\_type}
+        ! No name, default stride
+        DW\_AT\_type(reference to INTEGER)
+        DW\_AT\_lower\_bound(expression=
+        DW\_OP\_push\_object\_address
+            DW\_OP\_lit<n> ! where n ==
+                         !  offset(desc, dims) +
+                         !  offset(dims\_str, lower\_bound)
+            DW\_OP\_plus
+            DW\_OP\_deref)
+        DW\_AT\_upper\_bound(expression=
+            DW\_OP\_push\_object\_address
+            DW\_OP\_lit<n> ! where n ==
+                         !  offset(desc, dims) +
+                         !  offset(dims\_str, upper\_bound)
+            DW\_OP\_plus
+            \addtoindex{DW\_OP\_deref})
+        !  Note: for the m'th dimension, the second operator becomes
+        !  DW\_OP\_lit<x> where
+        !  x == offset(desc, dims) +
+        !  (m-1)*sizeof(dims\_str) +
+        !  offset(dims\_str, [lower|upper]\_bound)
+        !  That is, the expression does not get longer for each
+        !  successive dimension (other than to express the larger
+        !  offsets involved).
+3\$: DW\_TAG\_structure\_type
+        DW\_AT\_name("array\_ptr")
+        DW\_AT\_byte\_size(constant sizeof(REAL) + sizeof(desc<1>))
+4\$:     DW\_TAG\_member
+            DW\_AT\_name("myvar")
+            DW\_AT\_type(reference to REAL)
+            DW\_AT\_data\_member\_location(constant 0)
+5\$:     DW\_TAG\_member
+            DW\_AT\_name("ap");
+            DW\_AT\_type(reference to 1\$)
+            DW\_AT\_data\_member\_location(constant sizeof(REAL))
+
+6\$: DW\_TAG\_array\_type
+        ! No name, default (Fortran) ordering, default stride
+        DW\_AT\_type(reference to 3\$)
+        DW\_AT\_allocated(expression=
+             ! Test 'ptr\_alloc' flag
+            DW\_OP\_push\_object\_address
+            DW\_OP\_lit<n> ! where n == offset(ptr\_alloc)
+            DW\_OP\_plus
+            DW\_OP\_deref
+            DW\_OP\_lit2
+             ! mask for 'ptr\_alloc' flag
+            DW\_OP\_and)
+        DW\_AT\_data\_location(expression= ! Get raw data address
+            DW\_OP\_push\_object\_address
+            DW\_OP\_lit<n> ! where n = offset(base)
+            DW\_OP\_plus
+            DW\_OP\_deref)
+
+7\$: DW\_TAG\_subrange\_type
+        ! No name, default stride
+        DW\_AT\_type(reference to INTEGER)
+        DW\_AT\_lower\_bound(expression=
+            DW\_OP\_push\_object\_address
+            DW\_OP\_lit<n> ! where n == ...
+            DW\_OP\_plus
+            DW\_OP\_deref)
+        DW\_AT\_upper\_bound(expression=
+            DW\_OP\_push\_object\_address
+            DW\_OP\_lit<n> ! where n == ...
+            DW\_OP\_plus
+            DW\_OP\_deref)
+
+8\$: DW\_TAG\_variable
+        DW\_AT\_name("arrays")
+        DW\_AT\_type(reference to 6\$)
+        DW\_AT\_location(expression=
+            ...as appropriate...) ! Assume static allocation
+\end{alltt}
+
+\subsection{Fortran 90 example continued: DWARF description}
+\label{app:fortran90examplecontinueddwarfdescription}
+
+Suppose the program is stopped immediately following completion
+of the do loop. Suppose further that the user enters the
+following debug command:
+
+\begin{lstlisting}
+debug> print arrays(5)%ap(2)
+\end{lstlisting}
+
+Interpretation of this expression proceeds as follows:
+
+\begin{enumerate}[1.]
+
+\item Lookup name arrays. We find that it is a variable,
+whose type is given by the unnamed type at 6\$. Notice that
+the type is an array type.
+
+
+\item Find the 5 element of that array object. To do array
+indexing requires several pieces of information:
+
+\begin{enumerate}[a]
+
+\item  the address of the array data
+
+\item the lower bounds of the array \\
+% Using plain [] here gives trouble.
+\lbrack To check that 5 is within bounds would require the upper
+bound too, but we will skip that for this example. \rbrack
+
+\item the stride 
+
+\end{enumerate}
+
+For a), check for a DW\_AT\_data\_location attribute. Since
+there is one, go execute the expression, whose result is
+the address needed. The object address used in this case
+is the object we are working on, namely the variable named
+arrays , whose address was found in step 1. (Had there been
+no DW\_AT\_data\_location attribute, the desired address would
+be the same as the address from step 1.)
+
+For b), for each dimension of the array (only one
+in this case), go interpret the usual lower bound
+attribute. Again this is an expression, which again begins
+with DW\_OP\_push\_object\_address. This object is 
+\textbf{still} arrays,
+from step 1, because we have not begun to actually perform
+any indexing yet.
+
+For c), the default stride applies. Since there is no
+DW\_AT\_byte\_stride attribute, use the size of the array element
+type, which is the size of type array\_ptr (at 3\$).
+
+Having acquired all the necessary data, perform the indexing
+operation in the usual manner -  which has nothing to do with
+any of the attributes involved up to now. Those just provide
+the actual values used in the indexing step.
+
+The result is an object within the memory that was dynamically
+allocated for arrays.
+
+\item  Find the ap component of the object just identified,
+whose type is array\_ptr.
+
+This is a conventional record component lookup and
+interpretation. It happens that the ap component in this case
+begins at offset 4 from the beginning of the containing object.
+Component ap has the unnamed array type defined at 1\$ in the
+symbol table.
+
+\item  Find the second element of the array object found in step 3. To do array indexing requires
+several pieces of information:
+
+\begin{enumerate}[a]
+\item  the address of the array storage
+
+\item  the lower bounds of the array \\
+% Using plain [] here gives trouble.
+\lbrack To check that 2 is within bounds we would require the upper
+%bound too, but we’ll skip that for this example \rbrack
+
+\item  the stride
+
+\end{enumerate}
+\end{enumerate}
+
+This is just like step 2), so the details are omitted. Recall
+that because the DWARF type 1\$ has a DW\_AT\_data\_location,
+the address that results from step 4) is that of a
+descriptor, and that address is the address pushed by the
+DW\_OP\_push\_object\_address operations in 1\$ and 2\$.
+
+Note: we happen to be accessing a pointer array here instead
+of an allocatable array; but because there is a common
+underlying representation, the mechanics are the same. There
+could be completely different descriptor arrangements and the
+mechanics would still be the same — only the stack machines
+would be different.
+
+
+
+\subsection{Ada Example}
+\label{app:adaexample}
+
+Figure \refersec{fig:adaexamplesourcefragment}
+illustrates two kinds of Ada parameterized array, one embedded in a record.
+
+
+\begin{figure}[here]
+\begin{lstlisting}
+M : INTEGER := <exp>;
+VEC1 : array (1..M) of INTEGER;
+subtype TEENY is INTEGER range 1..100;
+type ARR is array (INTEGER range <>) of INTEGER;
+type REC2(N : TEENY := 100) is record
+    VEC2 : ARR(1..N);
+end record;
+
+OBJ2B : REC2;
+\end{lstlisting}
+\caption{Ada 90 example: source fragment} \label{fig:adaexamplesourcefragment}
+\end{figure}
+
+VEC1 illustrates an (unnamed) array type where the upper bound
+of the first and only dimension is determined at runtime. Ada
+semantics require that the value of an array bound is fixed at
+the time the array type is elaborated (where elaboration refers
+to the runtime executable aspects of type processing). For
+the purposes of this example, we assume that there are no
+other assignments to M so that it safe for the REC1 type
+description to refer directly to that variable (rather than
+a compiler generated copy).
+
+REC2 illustrates another array type (the unnamed type of
+component VEC2) where the upper bound of the first and only
+bound is also determined at runtime. In this case, the upper
+bound is contained in a discriminant of the containing record
+type. (A discriminant is a component of a record whose value
+cannot be changed independently of the rest of the record
+because that value is potentially used in the specification
+of other components of the record.)
+
+The DWARF description is shown in 
+Section \refersec{app:adaexampledwarfdescription}
+
+
+Interesting aspects about this example are:
+
+\begin{enumerate}[1)]
+\item The array VEC2 is ``immediately'' contained within structure
+REC2 (there is no intermediate descriptor or indirection),
+which is reflected in the absence of a DW\_AT\_data\_location
+attribute on the array type at 28\$.
+
+\item One of the bounds of VEC2 is nonetheless dynamic and part of
+the same containing record. It is described as a reference to
+a member, and the location of the upper bound is determined
+as for any member. That is, the location is determined using
+an address calculation relative to the base of the containing
+object.  A consumer must notice that the referenced bound is a
+member of the same containing object and implicitly push the
+base address of the containing object just as for accessing
+a data member generally.
+
+\item The lack of a subtype concept in DWARF means that DWARF types
+serve the role of subtypes and must replicate information from
+what should be the parent type. For this reason, DWARF for
+the unconstrained array ARR is not needed for the purposes
+of this example and therefore not shown.
+\end{enumerate}
+
+\subsubsection{Ada example: DWARF description}
+\label{app:adaexampledwarfdescription}
+
+\begin{alltt}
+11\$: DW\_TAG\_variable
+        DW\_AT\_name("M")
+        DW\_AT\_type(reference to INTEGER)
+12\$: DW\_TAG\_array\_type
+        ! No name, default (Ada) order, default stride
+        DW\_AT\_type(reference to INTEGER)
+13\$:    DW\_TAG\_subrange\_type
+            DW\_AT\_type(reference to INTEGER)
+            DW\_AT\_lower\_bound(constant 1)
+            DW\_AT\_upper\_bound(reference to variable M at 11\$)
+14\$: DW\_TAG\_variable
+        DW\_AT\_name("VEC1")
+        DW\_AT\_type(reference to array type at 12\$)
+    . . .
+21\$: DW\_TAG\_subrange\_type
+        DW\_AT\_name("TEENY")
+        DW\_AT\_type(reference to INTEGER)
+        DW\_AT\_lower\_bound(constant 1)
+        DW\_AT\_upper\_bound(constant 100)
+
+      . . .
+26\$: DW\_TAG\_structure\_type
+        DW\_AT\_name("REC2")
+27\$:   DW\_TAG\_member
+            DW\_AT\_name("N")
+            DW\_AT\_type(reference to subtype TEENY at 21\$)
+            DW\_AT\_data\_member\_location(constant 0)
+28\$:   DW\_TAG\_array\_type
+            ! No name, default (Ada) order, default stride
+            ! Default data location
+            DW\_AT\_TYPE(reference to INTEGER)
+29\$:       DW\_TAG\_subrange\_type
+                DW\_AT\_type(reference to subrange TEENY at 21\$)
+                DW\_AT\_lower\_bound(constant 1)
+                DW\_AT\_upper\_bound(reference to member N at 27\$)
+30\$:   DW\_TAG\_member
+            DW\_AT\_name("VEC2")
+            DW\_AT\_type(reference to array “subtype” at 28\$)
+            DW\_AT\_data\_member\_location(machine=
+                DW\_OP\_lit<n> ! where n == offset(REC2, VEC2)
+                DW\_OP\_plus)
+      . . .
+41\$: DW\_TAG\_variable
+        DW\_AT\_name("OBJ2B")
+        DW\_AT\_type(reference to REC2 at 26\$)
+        DW\_AT\_location(...as appropriate...)
+
+\end{alltt}
+
+\subsection{Pascal Example}
+\label{app:pascalexample}
+
+The Pascal source in 
+Figure \refersec{fig:packedrecordexamplesourcefragment}
+is used to illustrate the representation of packed unaligned bit
+fields.
+\begin{figure}[here]
+\begin{lstlisting}
+TYPE T : PACKED RECORD ! bit size is 2
+F5 : BOOLEAN; ! bit offset is 0
+F6 : BOOLEAN; ! bit offset is 1
+END;
+VAR V : PACKED RECORD
+F1 : BOOLEAN; ! bit offset is 0
+F2 : PACKED RECORD ! bit offset is 1
+F3 : INTEGER; ! bit offset is 0 in F2, 1 in V
+END;
+F4 : PACKED ARRAY [0..1] OF T; ! bit offset is 33
+F7 : T; ! bit offset is 37
+END;
+\end{lstlisting}
+\caption{Packed record example: source fragment} \label{fig:packedrecordexamplesourcefragment}
+\end{figure}
+
+The DWARF representation in 
+Section \refersec{app:packedrecordexampledwarfdescription} 
+is
+appropriate. 
+DW\_TAG\_packed\_type entries could be added to
+better represent the source, but these do not otherwise affect
+the example and are omitted for clarity. Note that this same
+representation applies to both typical big\dash \ and 
+little\dash endian
+architectures using the conventions described in 
+Section \refersec{chap:datamemberentries}.
+
+
+\subsection{Packed record example: DWARF description}
+\label{app:packedrecordexampledwarfdescription}
+\begin{alltt}
+
+21\$: DW\_TAG\_structure\_type ! anonymous type for F2
+        DW\_TAG\_member
+            DW\_AT\_name("F3")
+            DW\_AT\_type(reference to 11\$)
+22\$: DW\_TAG\_array\_type ! anonymous type for F4
+        DW\_AT\_type(reference to 20\$)
+        DW\_TAG\_subrange\_type
+            DW\_AT\_type(reference to 11\$)
+            DW\_AT\_lower\_bound(0)
+            DW\_AT\_upper\_bound(1)
+        DW\_AT\_bit\_stride(2)
+        DW\_AT\_bit\_size(4)
+23\$: DW\_TAG\_structure\_type ! anonymous type for V
+        DW\_AT\_bit\_size(39)
+        DW\_TAG\_member
+            DW\_AT\_name("F1")
+            DW\_AT\_type(reference to 10\$)
+            DW\_AT\_data\_bit\_offset(0)! may be omitted
+            DW\_AT\_bit\_size(1) ! may be omitted
+        DW\_AT\_member
+            DW\_AT\_name("F2")
+            DW\_AT\_type(reference to 21\$)
+            DW\_AT\_data\_bit\_offset(1)
+            DW\_AT\_bit\_size(32) ! may be omitted
+        DW\_AT\_member
+            DW\_AT\_name("F4")
+            DW\_AT\_type(reference to 22\$)
+            DW\_AT\_data\_bit\_offset(33)
+            DW\_AT\_bit\_size(4) ! may be omitted
+        DW\_AT\_member
+            DW\_AT\_name("F7")
+            DW\_AT\_type(reference to 20\$) ! type T
+            DW\_AT\_data\_bit\_offset(37)
+            DW\_AT\_bit\_size(2) ! may be omitted
+     DW\_TAG\_variable
+        DW\_AT\_name("V")
+        DW\_AT\_type(reference to 23\$)
+        DW\_AT\_location(...)
+        ...
+\end{alltt}
+
+\section{Namespace Example}
+\label{app:namespaceexample}
+
+
+The C++ example in 
+Figure \refersec{fig:namespaceexamplesourcefragment}
+is used to illustrate the representation of namespaces.
+
+\begin{figure}[here]
+\begin{lstlisting}
+namespace {
+    int i;
+}
+
+namespace A {
+    namespace B {
+        int j;
+        int myfunc (int a);
+        float myfunc (float f) { return f – 2.0; }
+        int myfunc2(int a) { return a + 2; }
+    }
+}
+namespace Y {
+    using A::B::j;         // (1) using declaration
+    int foo;
+}
+
+using A::B::j;             // (2) using declaration
+namespace Foo = A::B;      // (3) namespace alias
+using Foo::myfunc;         // (4) using declaration
+using namespace Foo;       // (5) using directive
+namespace A {
+    namespace B {
+        using namespace Y; // (6) using directive
+        int k;
+    }
+}
+int Foo::myfunc(int a)
+{
+    i = 3;
+    j = 4;
+    return myfunc2(3) + j + i + a + 2;
+}
+\end{lstlisting}
+\caption{Namespace example: source fragment} \label{fig:namespaceexamplesourcefragment}
+\end{figure}
+
+
+The DWARF representation in 
+Section \refersec{app:namespaceexampledwarfdescription}
+is appropriate.
+
+\subsection{Namespace example: DWARF description}
+\label{app:namespaceexampledwarfdescription}
+\begin{alltt}
+
+1\$:  DW\_TAG\_base\_type
+        DW\_AT\_name("int")
+        ...
+2\$:  DW\_TAG\_base\_type
+        DW\_AT\_name("float")
+        ...
+6\$:  DW\_TAG\_namespace
+        ! no DW\_AT\_name attribute
+7\$:
+        DW\_TAG\_variable
+            DW\_AT\_name("i")
+            DW\_AT\_type(reference to 1\$)
+            DW\_AT\_location ...
+            ...
+10\$: DW\_TAG\_namespace
+        DW\_AT\_name("A")
+20\$:    DW\_TAG\_namespace
+            DW\_AT\_name("B")
+30\$:        DW\_TAG\_variable
+                DW\_AT\_name("j")
+                DW\_AT\_type(reference to 1\$)
+                DW\_AT\_location ...
+                ...
+34\$:        DW\_TAG\_subprogram
+                DW\_AT\_name("myfunc")
+                DW\_AT\_type(reference to 1\$)
+                ...
+36\$:        DW\_TAG\_subprogram
+                DW\_AT\_name("myfunc")
+                DW\_AT\_type(reference to 2\$)
+                ...
+38\$:        DW\_TAG\_subprogram
+                DW\_AT\_name("myfunc2")
+                DW\_AT\_low\_pc ...
+                DW\_AT\_high\_pc ...
+                \addtoindex{DW\_AT\_type}(reference to 1\$)
+                ...
+
+40\$: DW\_TAG\_namespace
+        DW\_AT\_name("Y")
+        DW\_TAG\_imported\_declaration    ! (1) using-declaration
+            DW\_AT\_import(reference to 30\$)
+        DW\_TAG\_variable
+            DW\_AT\_name("foo")
+            DW\_AT\_type(reference to 1\$)
+            DW\_AT\_location ...
+            ...
+     DW\_TAG\_imported\_declaration       ! (2) using declaration
+        DW\_AT\_import(reference to 30\$)
+        DW\_TAG\_imported\_declaration    ! (3) namespace alias
+            DW\_AT\_name("Foo")
+            DW\_AT\_import(reference to 20\$)
+        DW\_TAG\_imported\_declaration    ! (4) using declaration
+            DW\_AT\_import(reference to 34\$) ! - part 1
+        DW\_TAG\_imported\_declaration    ! (4) using declaration
+            DW\_AT\_import(reference to 36\$) !  - part 2
+        DW\_TAG\_imported\_module         ! (5) using directive
+            DW\_AT\_import(reference to 20\$)
+        DW\_TAG\_namespace
+            DW\_AT\_extension(reference to 10\$)
+            DW\_TAG\_namespace
+                DW\_AT\_extension(reference to 20\$)
+                DW\_TAG\_imported\_module ! (6) using directive
+                    DW\_AT\_import(reference to 40\$)
+                DW\_TAG\_variable
+                    DW\_AT\_name("k")
+                    DW\_AT\_type(reference to 1\$)
+                    DW\_AT\_location ...
+                    ...
+60\$: DW\_TAG\_subprogram
+        DW\_AT\_specification(reference to 34\$)
+        DW\_AT\_low\_pc ...
+        DW\_AT\_high\_pc ...
+        ...
+\end{alltt}
+
+\section{Member Function Example}
+\label{app:memberfunctionexample}
+
+Consider the member function example fragment in 
+Figure \refersec{fig:memberfunctionexamplesourcefragment}.
+
+\begin{figure}[here]
+\begin{lstlisting}
+class A
+{
+    void func1(int x1);
+    void func2() const;
+    static void func3(int x3);
+};
+void A::func1(int x) {}
+\end{lstlisting}
+\caption{Member function example: source fragment} \label{fig:memberfunctionexamplesourcefragment}
+\end{figure}
+
+
+
+The DWARF representation in 
+Section \refersec{app:memberfunctionexampledwarfdescription}
+is appropriate.
+
+\subsection{Member function example: DWARF description}
+\label{app:memberfunctionexampledwarfdescription}
+
+
+\begin{alltt}
+1\$: DW\_TAG\_unspecified\_type
+        DW\_AT\_name("void")
+                ...
+2\$ DW\_TAG\_base\_type
+        DW\_AT\_name("int")
+        ...
+3\$: DW\_TAG\_class\_type
+        DW\_AT\_name("A")
+        ...
+4\$:    DW\_TAG\_pointer\_type
+            DW\_AT\_type(reference to 3\$)
+            ...
+5\$:    DW\_TAG\_const\_type
+            DW\_AT\_type(reference to 3\$)
+            ...
+6\$:    DW\_TAG\_pointer\_type
+            DW\_AT\_type(reference to 5\$)
+            ...
+
+7\$:    DW\_TAG\_subprogram
+            DW\_AT\_declaration
+            DW\_AT\_name("func1")
+            DW\_AT\_type(reference to 1\$)
+            DW\_AT\_object\_pointer(reference to 8\$)
+                ! References a formal parameter in this 
+                ! member function
+            ...
+8\$:        DW\_TAG\_formal\_parameter
+                DW\_AT\_artificial(true)
+                DW\_AT\_name("this")
+                DW\_AT\_type(reference to 4\$)
+                    ! Makes type of 'this' as 'A*' =>
+                    ! func1 has not been marked const 
+                    ! or volatile
+                DW\_AT\_location ...
+                ...
+9\$:        DW\_TAG\_formal\_parameter
+                DW\_AT\_name(x1)
+                DW\_AT\_type(reference to 2\$)
+                ...
+10\$:    DW\_TAG\_subprogram
+             DW\_AT\_declaration
+             DW\_AT\_name("func2")
+             DW\_AT\_type(reference to 1\$)
+             DW\_AT\_object\_pointer(reference to 11\$)
+             ! References a formal parameter in this 
+             ! member function
+             ...
+11\$:        DW\_TAG\_formal\_parameter
+                 DW\_AT\_artificial(true)
+                 DW\_AT\_name("this")
+                 DW\_AT\_type(reference to 6\$)
+                     ! Makes type of 'this' as 'A const*' =>
+                 !     func2 marked as const
+                 DW\_AT\_location ...
+                 ...
+12\$:    DW\_TAG\_subprogram
+             DW\_AT\_declaration
+             DW\_AT\_name("func3")
+             DW\_AT\_type(reference to 1\$)
+             ...
+                 ! No object pointer reference formal parameter
+                 ! implies func3 is static
+13\$:        DW\_TAG\_formal\_parameter
+                 DW\_AT\_name(x3)
+                 DW\_AT\_type(reference to 2\$)
+                 ...
+\end{alltt}
+
+\section{Line Number Program Example}
+\label{app:linenumberprogramexample}
+
+Consider the simple source file and the resulting machine
+code for the Intel 8086 processor in 
+Figure \refersec{fig:linenumberprogramexamplemachinecode}.
+
+\begin{figure}[here]
+\begin{lstlisting}
+1: int
+2: main()
+    0x239: push pb
+    0x23a: mov bp,sp
+3: {
+4: printf("Omit needless words\n");
+    0x23c: mov ax,0xaa
+    0x23f: push ax
+    0x240: call _printf
+    0x243: pop cx
+5: exit(0);
+    0x244: xor ax,ax
+    0x246: push ax
+    0x247: call _exit
+    0x24a: pop cx
+6: }
+    0x24b: pop bp
+    0x24c: ret
+7: 0x24d:
+\end{lstlisting}
+\caption{Line number program example: machine code} \label{fig:linenumberprogramexamplemachinecode}
+\end{figure}
+
+Suppose the line number program header includes the following
+(header fields not needed below are not shown):
+
+
+
+\begin{alltt}
+version                    4
+minimum_instruction_length 1
+opcode_base               10 ! Opcodes 10-12 not needed
+line_base                  1
+line_range                15
+\end{alltt}
+
+
+Figure \refersec{tab:linenumberprogramexampleoneencoding}
+shows one encoding of the line number program, which occupies
+12 bytes (the opcode SPECIAL(m,n) indicates the special opcode
+generated for a line increment of m and an address increment
+of n).
+
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{lll}
+  \caption{Line number program example: one encoding} \label{tab:linenumberprogramexampleoneencoding} \\
+  \hline \\ \bfseries Opcode &\bfseries Operand &\bfseries Byte Stream \\ \hline
+\endfirsthead
+  \bfseries Opcode &\bfseries Operand &\bfseries Byte Stream\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+DW\_LNS\_advance\_pc&LEB128(0x239)&0x2, 0xb9, 0x04 \\
+SPECIAL(2, 0)&0xb  & \\
+SPECIAL(2, 3)&0x38 & \\
+SPECIAL(1, 8)&0x82 & \\
+SPECIAL(1, 7)&0x73 & \\
+DW\_LNS\_advance\_pc&LEB128(2)&0x2, 0x2 \\
+DW\_LNE\_end\_sequence &&0x0, 0x1, 0x1 \\
+\end{longtable}
+\end{centering}
+
+
+Figure 62  FIXME REF
+shows an alternate 
+encoding of the same program using 
+standard opcodes to advance
+the program counter; 
+this encoding occupies 22 bytes.
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{lll}
+  \caption{Line number program example: alternate encoding} \label{tab:linenumberprogramexamplealternateencoding} \\
+  \hline \\ \bfseries Opcode &\bfseries Operand &\bfseries Byte Stream \\ \hline
+\endfirsthead
+  \bfseries Opcode &\bfseries Operand &\bfseries Byte Stream\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+DW\_LNS\_fixed\_advance\_pc&0x239&0x9, 0x39, 0x2        \\
+SPECIAL(2, 0)&& 0xb        \\
+DW\_LNS\_fixed\_advance\_pc&0x3&0x9, 0x3, 0x0        \\
+SPECIAL(2, 0)&&0xb        \\
+DW\_LNS\_fixed\_advance\_pc&0x8&0x9, 0x8, 0x0        \\
+SPECIAL(1, 0)&& 0xa        \\
+DW\_LNS\_fixed\_advance\_pc&0x7&0x9, 0x7, 0x0        \\
+SPECIAL(1, 0) && 0xa        \\
+DW\_LNS\_fixed\_advance\_pc&0x2&0x9, 0x2, 0x0        \\
+DW\_LNE\_end\_sequence&&0x0, 0x1, 0x1        \\
+\end{longtable}
+\end{centering}
+
+
+\section{Call Frame Information Example}
+\label{app:callframeinformationexample}
+
+The following example uses a hypothetical RISC machine in
+the style of the Motorola 88000.
+
+\begin{itemize}
+\item Memory is byte addressed.
+
+\item Instructions are all 4 bytes each and word aligned.
+
+\item Instruction operands are typically of the form:
+
+\begin{alltt}
+<destination.reg>, <source.reg>, <constant>
+\end{alltt}
+
+\item The address for the load and store instructions is computed
+by adding the contents of the
+source register with the constant.
+
+\item There are 8 4\dash byte registers:
+
+\begin{alltt}
+R0 always 0
+R1 holds return address on call
+R2-R3 temp registers (not preserved on call)
+R4-R6 preserved on call
+R7 stack pointer.
+\end{alltt}
+
+\item  The stack grows in the negative direction.
+
+\item The architectural ABI committee specifies that the
+stack pointer (R7) is the same as the CFA
+
+\end{itemize}
+
+The following 
+(Figure refersec{fig:callframeinformationexamplemachinecodefragments}
+are two code fragments from a subroutine called
+foo that uses a frame pointer (in addition to the stack
+pointer). The first column values are byte addresses. 
+% The \space is so we get a space after >
+\textless~fs~\textgreater \  denotes the stack frame size in bytes, namely 12.
+
+
+\begin{figure}[here]
+\begin{lstlisting}
+       ;; start prologue
+foo    sub R7, R7, <fs>        ; Allocate frame
+foo+4  store R1, R7, (<fs>-4)  ; Save the return address
+foo+8  store R6, R7, (<fs>-8)  ; Save R6
+foo+12 add R6, R7, 0           ; R6 is now the Frame ptr
+foo+16 store R4, R6, (<fs>-12) ; Save a preserved reg
+       ;; This subroutine does not change R5
+       ...
+       ;; Start epilogue (R7 is returned to entry value)
+foo+64 load R4, R6, (<fs>-12)  ; Restore R4
+foo+68 load R6, R7, (<fs>-8)   ; Restore R6
+foo+72 load R1, R7, (<fs>-4)   ; Restore return address
+foo+76 add R7, R7, <fs>        ; Deallocate frame
+foo+80 jump R1 ; Return
+foo+84
+\end{lstlisting}
+\caption{Call frame information example: machine code fragments} \label{fig:callframeinformationexamplemachinecodefragments}
+\end{figure}
+
+
+An abstract table 
+(see Section \refersec{chap:structureofcallframeinformation}) 
+for the foo subroutine
+is shown in 
+Table \refersec{tab:callframeinformationexampleconceptualmatrix}.
+Figure 64. FIXME REF 
+Corresponding fragments from the
+.debug\_frame section are shown in 
+Table \refersec{tab:callframeinformationexamplecommoninformationentryencoding}.
+
+The following notations apply in 
+Table \refersec{tab:callframeinformationexampleconceptualmatrix}:
+
+\begin{alltt}
+1. R8 is the return address
+2. s = same\_value rule
+3. u = undefined rule
+4. rN = register(N) rule
+5. cN = offset(N) rule
+6. a = architectural rule
+\end{alltt}
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{lllllllllll}
+  \caption{Call frame inforation example: conceptual matrix} \label{tab:callframeinformationexampleconceptualmatrix} \\
+  \hline \\ \bfseries Location & \bfseries CFA & \bfseries R0 & \bfseries R1 & \bfseries R2 & \bfseries R3 & \bfseries R4 & \bfseries R5 & \bfseries R6 & \bfseries R7 & \bfseries R8 \\ \hline
+\endfirsthead
+  \bfseries Location &\bfseries CFA &\bfseries R0 & \bfseries R1 & \bfseries R2 &\bfseries R3 &\bfseries R4 &\bfseries R5 &\bfseries R6 &\bfseries R7 &\bfseries R8\\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+foo&[R7]+0&s&u&u&u&s&s&s&a&r1 \\
+foo+4&[R7]+fs&s&u&u&u&s&s&s&a&r1 \\
+foo+8&[R7]+fs&s&u&u&u&s&s&s&a&c-4 \\
+foo+12&[R7]+fs&s&u&u&u&s&s&c-8&a&c-4 \\
+foo+16&[R6]+fs&s&u&u&u&s&s&c-8&a&c-4 \\
+foo+20&[R6]+fs&s&u&u&u&c-12&s&c-8&a&c-4 \\
+...&&&&&&&&&& \\
+foo+64&[R6]+fs&s&u&u&u&c-12&s&c-8&a&c-4 \\
+foo+68&[R6]+fs&s&u&u&u&s&s&c-8&a&c-4  \\
+foo+72&[R7]+fs&s&u&u&u&s&s&s&a&c-4  \\
+foo+76&[R7]+fs&s&u&u&u&s&s&s&a&r1 \\
+foo+80&[R7]+0&s&u&u&u&s&s&s&a&r1 \\
+\end{longtable}
+\end{centering}
+
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{lll}
+  \caption{Call frame information example: common information entry encoding} \label{tab:callframeinformationexamplecommoninformationentryencoding} \\
+  \hline \\ \bfseries Address &\bfseries Value &\bfseries Comment \\ \hline
+\endfirsthead
+  \bfseries Address &\bfseries Value &\bfseries Comment \\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+cie&36&length    \\
+cie+4&0xffffffff&CIE\_id    \\
+cie+8&4&version    \\
+cie+9&0&augmentation     \\
+cie+10&4&address size    \\
+cie+11&0&segment size    \\
+cie+12&4&code\_alignment\_factor, \textless caf \textgreater    \\
+cie+13&-4&data\_alignment\_factor, \textless daf \textgreater    \\
+cie+14&8&R8 is the return addr.    \\
+cie+15&DW\_CFA\_def\_cfa (7, 0)&CFA = [R7]+0    \\
+cie+18&DW\_CFA\_same\_value (0)&R0 not modified (=0)    \\
+cie+20&DW\_CFA\_undefined (1)&R1 scratch    \\
+cie+22&DW\_CFA\_undefined (2)&R2 scratch    \\
+cie+24&DW\_CFA\_undefined (3)&R3 scratch    \\
+cie+26&DW\_CFA\_same\_value (4)&R4 preserve    \\
+cie+28&DW\_CFA\_same\_value (5)&R5 preserve    \\
+cie+30&DW\_CFA\_same\_value (6)&R6 preserve    \\
+cie+32&DW\_CFA\_same\_value (7)&R7 preserve    \\
+cie+34&DW\_CFA\_register (8, 1)&R8 is in R1    \\
+cie+37&DW\_CFA\_nop&padding    \\
+cie+38&DW\_CFA\_nop& padding \\
+cie+39& DW\_CFA\_nop&padding  \\
+cie+40 &&  \\
+\end{longtable}
+\end{centering}
+
+
+The following notations apply in 
+Table \refersec{tab:callframeinformationexampleframedescriptionentryencoding}:
+
+\begin{alltt}
+1. <fs> = frame size
+2. <caf> = code alignment factor
+3. <daf> = data alignment factor
+\end{alltt}
+
+
+\begin{centering}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{lll}
+  \caption{Call frame information example: frame description entry encoding} \label{tab:callframeinformationexampleframedescriptionentryencoding} \\
+  \hline \\ \bfseries Address &\bfseries Value &\bfseries Comment \\ \hline
+\endfirsthead
+  \bfseries Address &\bfseries Value &\bfseries Comment \\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+fde&40&length \\
+fde+4&cie&CIE\_ptr \\
+fde+8&foo&initial\_location \\
+fde+12&84&address\_range \\
+fde+16&DW\_CFA\_advance\_loc(1)&instructions \\
+fde+17&DW\_CFA\_def\_cfa\_offset(12)& \textless fs \textgreater \\
+fde+19&DW\_CFA\_advance\_loc(1)&4/ \textless caf \textgreater \\
+fde+20&DW\_CFA\_offset(8,1)&-4/ \textless daf \textgreater (second parameter) \\
+fde+22&DW\_CFA\_advance\_loc(1)& \\
+fde+23&DW\_CFA\_offset(6,2)&-8/ \textless daf> \textgreater (2nd parameter)  \\
+fde+25&DW\_CFA\_advance\_loc(1) & \\
+fde+26&DW\_CFA\_def\_cfa\_register(6) & \\
+fde+28&DW\_CFA\_advance\_loc(1) & \\
+fde+29&DW\_CFA\_offset(4,3)&-12/ \textless daf \textgreater (2nd parameter) \\
+fde+31&DW\_CFA\_advance\_loc(12)&44/ \textless caf \textgreater \\
+fde+32&DW\_CFA\_restore(4)& \\
+fde+33&DW\_CFA\_advance\_loc(1) & \\
+fde+34&DW\_CFA\_restore(6) & \\
+fde+35&DW\_CFA\_def\_cfa\_register(7)  & \\
+fde+37&DW\_CFA\_advance\_loc(1) & \\
+fde+38&DW\_CFA\_restore(8) &\\
+fde+39&DW\_CFA\_advance\_loc(1) &\\
+fde+40&DW\_CFA\_def\_cfa\_offset(0)  &\\
+fde+42&DW\_CFA\_nop&padding \\
+fde+43&DW\_CFA\_nop&padding \\
+fde+44 && \\
+\end{longtable}
+\end{centering}
+
+\section{Inlining Examples}
+\label{app:inliningexamples}
+The pseudo\dash source in 
+Figure \refersec{fig:inliningexamplespseudosourcefragment}
+is used to illustrate the
+use of DWARF to describe inlined subroutine calls. This
+example involves a nested subprogram INNER that makes uplevel
+references to the formal parameter and local variable of the
+containing subprogram OUTER.
+
+\begin{figure}[here]
+\begin{lstlisting}
+inline procedure OUTER (OUTER_FORMAL : integer) =
+    begin
+    OUTER_LOCAL : integer;
+    procedure INNER (INNER_FORMAL : integer) =
+        begin
+        INNER_LOCAL : integer;
+        print(INNER_FORMAL + OUTER_LOCAL);
+        end;
+    INNER(OUTER_LOCAL);
+    ...
+    INNER(31);
+    end;
+! Call OUTER
+!
+OUTER(7);
+\end{lstlisting}
+\caption{Inlining examples: pseudo-source fragmment} \label{fig:inliningexamplespseudosourcefragment}
+\end{figure}
+
+
+There are several approaches that a compiler might take to
+inlining for this sort of example. This presentation considers
+three such approaches, all of which involve inline expansion
+of subprogram OUTER. (If OUTER is not inlined, the inlining
+reduces to a simpler single level subset of the two level
+approaches considered here.)
+
+The approaches are:
+
+\begin{itemize}[1.]
+\item  Inline both OUTER and INNER in all cases
+
+\item Inline OUTER, multiple INNERs \\
+Treat INNER as a non\dash inlinable part of OUTER, compile and
+call a distinct normal version of INNER defined within each
+inlining of OUTER.
+
+\item Inline OUTER, one INNER \\
+Compile INNER as a single normal subprogram which is called
+from every inlining of OUTER.
+\end{itemize}
+
+This discussion does not consider why a compiler might choose
+one of these approaches; it considers only how to describe
+the result.
+
+In the examples that follow in this section, the debugging
+information entries are given mnemonic labels of the following
+form
+
+\begin{lstlisting}
+<io>.<ac>.<n>.<s>
+\end{lstlisting}
+
+where \begin{verbatim}<io>\end{verbatim}
+is either INNER or OUTER to indicate to which
+subprogram the debugging information entry applies, 
+\begin{verbatim}<ac>\end{verbatim}
+is either AI or CI to indicate ``abstract instance'' or
+``concrete instance'' respectively, 
+\begin{verbatim}<n>\end{verbatim}
+is the number of the
+alternative being considered, and 
+\begin{verbatim}<s>\end{verbatim}
+is a sequence number that
+distinguishes the individual entries. There is no implication
+that symbolic labels, nor any particular naming convention,
+are required in actual use.
+
+For conciseness, declaration coordinates and call coordinates are omitted.
+
+\subsection{Alternative 1: inline both OUTER and INNER}
+\label{app:inlinebothouterandinner}
+
+A suitable abstract instance for an alternative where both
+OUTER and INNER are always inlined is shown in 
+Figure \refersec{app:inliningexample1abstractinstance}
+
+Notice in 
+Section \refersec{app:inliningexample1abstractinstance} 
+that the debugging information entry for
+INNER (labelled INNER.AI.1.1) is nested in (is a child of)
+that for OUTER (labelled OUTER.AI.1.1). Nonetheless, the
+abstract instance tree for INNER is considered to be separate
+and distinct from that for OUTER.
+
+The call of OUTER shown in 
+Figure \refersec{fig:inliningexamplespseudosourcefragment}
+might be described as
+shown in 
+Section \refersec{app:inliningexample1concreteinstance}.
+
+
+\subsubsection{Inlining example \#1: abstract instance}
+\label{app:inliningexample1abstractinstance}
+\begin{alltt}
+    ! Abstract instance for OUTER
+    !
+OUTER.AI.1.1:
+    DW\_TAG\_subprogram
+        DW\_AT\_name("OUTER")
+        DW\_AT\_inline(DW\_INL\_declared\_inlined)
+        ! No low/high PCs
+OUTER.AI.1.2:
+        DW\_TAG\_formal\_parameter
+            DW\_AT\_name("OUTER\_FORMAL")
+            DW\_AT\_type(reference to integer)
+            ! No location
+OUTER.AI.1.3:
+        DW\_TAG\_variable
+            DW\_AT\_name("OUTER\_LOCAL")
+            DW\_AT\_type(reference to integer)
+            ! No location
+        !
+        ! Abstract instance for INNER
+        !
+INNER.AI.1.1:
+        DW\_TAG\_subprogram
+            DW\_AT\_name("INNER")
+            DW\_AT\_inline(DW\_INL\_declared\_inlined)
+            ! No low/high PCs
+INNER.AI.1.2:
+            DW\_TAG\_formal\_parameter
+                DW\_AT\_name("INNER\_FORMAL")
+                DW\_AT\_type(reference to integer)
+                ! No location
+INNER.AI.1.3:
+            DW\_TAG\_variable
+                DW\_AT\_name("INNER\_LOCAL")
+                DW\_AT\_type(reference to integer)
+                ! No location
+            ...
+            0
+        ! No DW\_TAG\_inlined\_subroutine (concrete instance)
+        ! for INNER corresponding to calls of INNER
+        ...
+        0
+\end{alltt}
+
+
+\subsubsection{Inlining example \#1: concrete instance}
+\label{app:inliningexample1concreteinstance}
+\begin{alltt}
+! Concrete instance for call "OUTER(7)"
+!
+OUTER.CI.1.1:
+    DW\_TAG\_inlined\_subroutine
+        ! No name
+        DW\_AT\_abstract\_origin(reference to OUTER.AI.1.1)
+        DW\_AT\_low\_pc(...)
+        DW\_AT\_high\_pc(...)
+OUTER.CI.1.2:
+        DW\_TAG\_formal\_parameter
+            ! No name
+            DW\_AT\_abstract\_origin(reference to OUTER.AI.1.2)
+            DW\_AT\_const\_value(7)
+OUTER.CI.1.3:
+        DW\_TAG\_variable
+            ! No name
+            DW\_AT\_abstract\_origin(reference to OUTER.AI.1.3)
+            DW\_AT\_location(...)
+        !
+        ! No DW\_TAG\_subprogram (abstract instance) for INNER
+        !
+        ! Concrete instance for call INNER(OUTER\_LOCAL)
+        !
+INNER.CI.1.1:
+        DW\_TAG\_inlined\_subroutine
+            ! No name
+            DW\_AT\_abstract\_origin(reference to INNER.AI.1.1)
+            DW\_AT\_low\_pc(...)
+            DW\_AT\_high\_pc(...)
+            DW\_AT\_static\_link(...)
+INNER.CI.1.2:
+            DW\_TAG\_formal\_parameter
+                ! No name
+                DW\_AT\_abstract\_origin(reference to INNER.AI.1.2)
+                DW\_AT\_location(...)
+INNER.CI.1.3:
+             DW\_TAG\_variable
+                ! No name
+                DW\_AT\_abstract\_origin(reference to INNER.AI.1.3)
+                DW\_AT\_location(...)
+            ...
+            0
+        ! Another concrete instance of INNER within OUTER
+        ! for the call "INNER(31)"
+        ...
+        0
+\end{alltt}
+
+\subsection{Alternative 2: Inline OUTER, multiple INNERs}
+\label{app:inlineoutermultiipleinners}
+
+
+In the second alternative we assume that subprogram INNER
+is not inlinable for some reason, but subprogram OUTER is
+inlinable. Each concrete inlined instance of OUTER has its
+own normal instance of INNER. The abstract instance for OUTER,
+which includes INNER, is shown in 
+Section \refersec{app:inliningexample2abstractinstance}.
+
+Note that the debugging information in this Figure differs from
+that in 
+Section \refersec{app:inliningexample1abstractinstance}
+in that INNER lacks a DW\_AT\_inline attribute
+and therefore is not a distinct abstract instance. INNER
+is merely an out\dash of\dash line routine that is part of OUTER’s
+abstract instance. This is reflected in the Figure 70 by
+the fact that the labels for INNER use the substring OUTER
+instead of INNER.
+
+A resulting concrete inlined instance of OUTER is shown in
+Section \refersec{app:inliningexample2concreteinstance}.
+
+Notice in 
+Section \refersec{app:inliningexample2concreteinstance}.
+that OUTER is expanded as a concrete
+inlined instance, and that INNER is nested within it as a
+concrete out\dash of\dash line subprogram. Because INNER is cloned
+for each inline expansion of OUTER, only the invariant
+attributes of INNER 
+(for example, DW\_AT\_name) are specified
+in the abstract instance of OUTER, and the low\dash level,
+instance\dash specific attributes of INNER (for example,
+DW\_AT\_low\_pc) are specified in each concrete instance of OUTER.
+
+The several calls of INNER within OUTER are compiled as normal
+calls to the instance of INNER that is specific to the same
+instance of OUTER that contains the calls.
+
+
+\subsubsection{Inlining example 2: abstract instance}
+\label{app:inliningexample2abstractinstance}
+\begin{alltt}
+    ! Abstract instance for OUTER
+    !
+OUTER.AI.2.1:
+    DW\_TAG\_subprogram
+        DW\_AT\_name("OUTER")
+        DW\_AT\_inline(DW\_INL\_declared\_inlined)
+        ! No low/high PCs
+OUTER.AI.2.2:
+        DW\_TAG\_formal\_parameter
+            DW\_AT\_name("OUTER\_FORMAL")
+            DW\_AT\_type(reference to integer)
+            ! No location
+OUTER.AI.2.3:
+        DW\_TAG\_variable
+            DW\_AT\_name("OUTER\_LOCAL")
+            DW\_AT\_type(reference to integer)
+            ! No location
+        !
+        ! Nested out-of-line INNER subprogram
+        !
+OUTER.AI.2.4:
+        DW\_TAG\_subprogram
+            DW\_AT\_name("INNER")
+            ! No DW\_AT\_inline
+            ! No low/high PCs, frame\_base, etc.
+OUTER.AI.2.5:
+            DW\_TAG\_formal\_parameter
+                DW\_AT\_name("INNER\_FORMAL")
+                DW\_AT\_type(reference to integer)
+                ! No location
+OUTER.AI.2.6:
+            DW\_TAG\_variable
+                DW\_AT\_name("INNER\_LOCAL")
+                DW\_AT\_type(reference to integer)
+                ! No location
+            ...
+            0
+        ...
+        0
+\end{alltt}
+
+\subsubsection{Inlining example 2: concrete instance}
+\label{app:inliningexample2concreteinstance}
+\begin{alltt}
+
+    ! Concrete instance for call "OUTER(7)"
+    !
+OUTER.CI.2.1:
+    DW\_TAG\_inlined\_subroutine
+        ! No name
+        DW\_AT\_abstract\_origin(reference to OUTER.AI.2.1)
+        DW\_AT\_low\_pc(...)
+        DW\_AT\_high\_pc(...)
+OUTER.CI.2.2:
+        DW\_TAG\_formal\_parameter
+            ! No name
+            DW\_AT\_abstract\_origin(reference to OUTER.AI.2.2)
+            DW\_AT\_location(...)
+OUTER.CI.2.3:
+        DW\_TAG\_variable
+            ! No name
+            DW\_AT\_abstract\_origin(reference to OUTER.AI.2.3)
+            DW\_AT\_location(...)
+        !
+        ! Nested out-of-line INNER subprogram
+        !
+OUTER.CI.2.4:
+        DW\_TAG\_subprogram
+            ! No name
+            DW\_AT\_abstract\_origin(reference to OUTER.AI.2.4)
+            DW\_AT\_low\_pc(...)
+            DW\_AT\_high\_pc(...)
+            DW\_AT\_frame\_base(...)
+            DW\_AT\_static\_link(...)
+OUTER.CI.2.5:
+            DW\_TAG\_formal\_parameter
+                ! No name
+                DW\_AT\_abstract\_origin(reference to OUTER.AI.2.5)
+                DW\_AT\_location(...)
+OUTER.CI.2.6:
+            DW\_TAG\_variable
+                ! No name
+                DW\_AT\_abstract\_origin(reference to OUTER.AT.2.6)
+                DW\_AT\_location(...)
+            ...
+            0
+        ...
+        0
+\end{alltt}
+
+\subsection{Alternative 3: inline OUTER, one normal INNER}
+\label{app:inlineouteronenormalinner}
+
+In the third approach, one normal subprogram for INNER is
+compiled which is called from all concrete inlined instances of
+OUTER. The abstract instance for OUTER is shown in 
+Section \refersec{app:inliningexample3abstractinstance}.
+
+The most distinctive aspect of that Figure is that subprogram
+INNER exists only within the abstract instance of OUTER,
+and not in OUTER’s concrete instance. In the abstract
+instance of OUTER, the description of INNER has the full
+complement of attributes that would be expected for a
+normal subprogram. While attributes such as DW\_AT\_low\_pc,
+DW\_AT\_high\_pc, DW\_AT\_location, and so on, typically are omitted
+from an abstract instance because they are not invariant across
+instances of the containing abstract instance, in this case
+those same attributes are included precisely because they are
+invariant -- there is only one subprogram INNER to be described
+and every description is the same.
+
+A concrete inlined instance of OUTER is illustrated in
+\refersec{app:inliningexample3concreteinstance}.
+
+Notice in 
+Figure 73 FIXME REF
+\refersec{app:inliningexample3concreteinstance}
+that there is no DWARF representation for
+INNER at all; the representation of INNER does not vary across
+instances of OUTER and the abstract instance of OUTER includes
+the complete description of INNER, so that the description of
+INNER may be (and for reasons of space efficiency, should be)
+omitted from each concrete instance of OUTER.
+
+There is one aspect of this approach that is problematical from
+the DWARF perspective. The single compiled instance of INNER
+is assumed to access up\dash level variables of OUTER; however,
+those variables may well occur at varying positions within
+the frames that contain the concrete inlined instances. A
+compiler might implement this in several ways, including the
+use of additional compiler generated parameters that provide
+reference parameters for the up\dash level variables, or a compiler
+generated static link like parameter that points to the group
+of up\dash level entities, among other possibilities. In either of
+these cases, the DWARF description for the location attribute
+of each uplevel variable needs to be different if accessed
+from within INNER compared to when accessed from within the
+instances of OUTER. An implementation is likely to require
+vendor\dash specific DWARF attributes and/or debugging information
+entries to describe such cases.
+
+Note that in C++, a member function of a class defined within
+a function definition does not require any vendor\dash specific
+extensions because the C++ language disallows access to
+entities that would give rise to this problem. (Neither extern
+variables nor static members require any form of static link
+for accessing purposes.)
+
+\subsubsection{Inlining example 3: abstract instance}
+\label{app:inliningexample3abstractinstance}
+\begin{alltt}
+    ! Abstract instance for OUTER
+    !
+OUTER.AI.3.1:
+    DW\_TAG\_subprogram
+        DW\_AT\_name("OUTER")
+        DW\_AT\_inline(DW\_INL\_declared\_inlined)
+        ! No low/high PCs
+OUTER.AI.3.2:
+        DW\_TAG\_formal\_parameter
+            DW\_AT\_name("OUTER\_FORMAL")
+            DW\_AT\_type(reference to integer)
+            ! No location
+OUTER.AI.3.3:
+        DW\_TAG\_variable
+            DW\_AT\_name("OUTER\_LOCAL")
+            DW\_AT\_type(reference to integer)
+            ! No location
+        !
+        ! Normal INNER
+        !
+OUTER.AI.3.4:
+        DW\_TAG\_subprogram
+            DW\_AT\_name("INNER")
+            DW\_AT\_low\_pc(...)
+            DW\_AT\_high\_pc(...)
+            DW\_AT\_frame\_base(...)
+            DW\_AT\_static\_link(...)
+OUTER.AI.3.5:
+            DW\_TAG\_formal\_parameter
+                DW\_AT\_name("INNER\_FORMAL")
+                DW\_AT\_type(reference to integer)
+                DW\_AT\_location(...)
+OUTER.AI.3.6:
+            DW\_TAG\_variable
+                DW\_AT\_name("INNER\_LOCAL")
+                DW\_AT\_type(reference to integer)
+                DW\_AT\_location(...)
+            ...
+            0
+        ...
+        0
+\end{alltt}
+
+
+\subsubsection{Inlining example 3: concrete instance}
+\label{app:inliningexample3concreteinstance}
+\begin{alltt}
+    ! Concrete instance for call "OUTER(7)"
+    !
+OUTER.CI.3.1:
+    DW\_TAG\_inlined\_subroutine
+        ! No name
+        DW\_AT\_abstract\_origin(reference to OUTER.AI.3.1)
+        DW\_AT\_low\_pc(...)
+        DW\_AT\_high\_pc(...)
+        DW\_AT\_frame\_base(...)
+OUTER.CI.3.2:
+        DW\_TAG\_formal\_parameter
+            ! No name
+            DW\_AT\_abstract\_origin(reference to OUTER.AI.3.2)
+            ! No type
+            DW\_AT\_location(...)
+OUTER.CI.3.3:
+        DW\_TAG\_variable
+            ! No name
+            DW\_AT\_abstract\_origin(reference to OUTER.AI.3.3)
+            ! No type
+            DW\_AT\_location(...)
+        ! No DW\_TAG\_subprogram for "INNER"
+        ...
+        0
+\end{alltt}
+
+\section{Constant Expression Example}
+\label{app:constantexpressionexample}
+C++ generalizes the notion of constant expressions to include
+constant expression user-defined literals and functions.
+
+\begin{figure}[here]
+\begin{lstlisting}
+constexpr double mass = 9.8;
+constexpr int square (int x) { return x * x; }
+float arr[square(9)]; // square() called and inlined
+\end{lstlisting}
+\caption{Constant expressions: C++ source} \label{fig:constantexpressionscsource}
+\end{figure}
+
+These declarations can be represented as illustrated in 
+Section \refersec{app:constantexpressionsdwarfdescription}.
+
+\subsection{Constant expressions: DWARF description}
+\label{app:constantexpressionsdwarfdescription}
+\begin{alltt}
+
+      ! For variable mass
+      !
+1\$:  DW\_TAG\_const\_type
+        DW\_AT\_type(reference to "double")
+2\$:  DW\_TAG\_variable
+        DW\_AT\_name("mass")
+        DW\_AT\_type(reference to 1\$)
+        DW\_AT\_const\_expr(true)
+        DW\_AT\_const\_value(9.8)
+      ! Abstract instance for square
+      !
+10\$: DW\_TAG\_subprogram
+        DW\_AT\_name("square")
+        DW\_AT\_type(reference to "int")
+        DW\_AT\_inline(DW\_INL\_inlined)
+11\$:   DW\_TAG\_formal\_parameter
+            DW\_AT\_name("x")
+            DW\_AT\_type(reference to "int")
+      ! Concrete instance for square(9)
+      !
+20\$: DW\_TAG\_inlined\_subroutine
+        DW\_AT\_abstract\_origin(reference to 10\$)
+        DW\_AT\_const\_expr(present)
+        DW\_AT\_const\_value(81)
+        DW\_TAG\_formal\_parameter
+            DW\_AT\_abstract\_origin(reference to 11\$)
+            DW\_AT\_const\_value(9)
+      ! Anonymous array type for arr
+      !
+30\$: DW\_TAG\_array\_type
+        DW\_AT\_type(reference to "float")
+        DW\_AT\_byte\_size(324) ! 81*4
+        DW\_TAG\_subrange\_type
+            DW\_AT\_type(reference to "int")
+            DW\_AT\_upper\_bound(reference to 20\$)
+      ! Variable arr
+      !
+40\$: DW\_TAG\_variable
+        DW\_AT\_name("arr")
+        DW\_AT\_type(reference to 30\$)
+\end{alltt}
+
+
+\section{Unicode Character Example}
+\label{app:unicodecharacterexample}
+
+Unicode character encodings can be described in DWARF as
+illustrated in 
+Section \refersec{app:unicodecharacterexamplesub}.
+
+\begin{lstlisting}
+// C++ source
+//
+char16_t chr_a = u'h';
+char32_t chr_b = U'h';
+\end{lstlisting}
+
+\subsection{Unicode Character Example}
+\label{app:unicodecharacterexamplesub}
+\begin{alltt}
+
+! DWARF description
+!
+1\$: DW\_TAG\_base\_type
+        DW\_AT\_name("char16\_t")
+        DW\_AT\_encoding(DW\_ATE\_UTF)
+        DW\_AT\_byte\_size(2)
+2\$: DW\_TAG\_base\_type
+        DW\_AT\_name("char32\_t")
+        DW\_AT\_encoding(DW\_ATE\_UTF)
+        DW\_AT\_byte\_size(4)
+3\$: DW\_TAG\_variable
+        DW\_AT\_name("chr\_a")
+        DW\_AT\_type(reference to 1\$)
+4\$: DW\_TAG\_variable
+        DW\_AT\_name("chr\_b")
+        DW\_AT\_type(reference to 2\$)
+\end{alltt}
+
+
+
+\section{Type-Safe Enumeration Example}
+\label{app:typesafeenumerationexample}
+
+
+C++ type\dash safe enumerations can be described in DWARF as illustrated in 
+Section \refersec{app:ctypesafeenumerationexample}.
+
+\begin{lstlisting}
+// C++ source
+//
+enum class E { E1, E2=100 };
+E e1;
+\end{lstlisting}
+
+\subsection{C++ type-safe enumeration example}
+\label{app:ctypesafeenumerationexample}
+\begin{alltt}
+! DWARF description
+!
+11\$: DW\_TAG\_enumeration\_type
+        DW\_AT\_name("E")
+        DW\_AT\_type(reference to "int")
+        DW\_AT\_enum\_class(present)
+12\$:   DW\_TAG\_enumerator
+            DW\_AT\_name("E1")
+            DW\_AT\_const\_value(0)
+13\$:
+         DW\_TAG\_enumerator
+            DW\_AT\_name("E2")
+            DW\_AT\_const\_value(100)
+14\$: DW\_TAG\_variable
+        DW\_AT\_name("e1")
+        DW\_AT\_type(reference to 11\$)
+\end{alltt}
+
+\section{Template Example}
+\label{app:templateexample}
+
+C++ templates can be described in DWARF as illustrated in 
+Section \refersec{app:ctemplateexample1}.
+
+
+
+\begin{lstlisting}
+// C++ source
+//
+template<class T>
+struct wrapper {
+    T comp;
+};
+wrapper<int> obj;
+\end{lstlisting}
+
+\subsection{C++ template example 1}
+\label{app:ctemplateexample1}
+\begin{alltt}
+! DWARF description
+!
+11\$: DW\_TAG\_structure\_type
+        DW\_AT\_name("wrapper")
+12\$: DW\_TAG\_template\_type\_parameter
+        DW\_AT\_name("T")
+        DW\_AT\_type(reference to "int")
+13\$ DW\_TAG\_member
+        DW\_AT\_name("comp")
+        DW\_AT\_type(reference to 12\$)
+14\$: DW\_TAG\_variable
+        DW\_AT\_name("obj")
+        DW\_AT\_type(reference to 11\$)
+\end{alltt}
+
+The actual type of the component comp is int, but in the DWARF
+the type references the DW\_TAG\_template\_type\_parameter for
+T, which in turn references int. This implies that in the
+original template comp was of type T and that was replaced
+with int in the instance.  There exist situations where it is
+not possible for the DWARF to imply anything about the nature
+of the original template. 
+
+Consider following C++ source and DWARF 
+that can describe it in
+Section \refersec{app:ctemplateexample2}.
+
+
+\begin{lstlisting}
+// C++ source
+//
+    template<class T>
+    struct wrapper {
+        T comp;
+    };
+    template<class U>
+    void consume(wrapper<U> formal)
+    {
+        ...
+    }
+    wrapper<int> obj;
+    consume(obj);
+\end{lstlisting}
+
+\subsection{C++ template example 2}
+\label{app:ctemplateexample2}
+\begin{alltt}
+! DWARF description
+!
+11\$: DW\_TAG\_structure\_type
+        DW\_AT\_name("wrapper")
+12\$:   DW\_TAG\_template\_type\_parameter
+            DW\_AT\_name("T")
+            DW\_AT\_type(reference to "int")
+13\$    DW\_TAG\_member
+            DW\_AT\_name("comp")
+            DW\_AT\_type(reference to 12\$)
+14\$: DW\_TAG\_variable
+        DW\_AT\_name("obj")
+        DW\_AT\_type(reference to 11\$)
+21\$: DW\_TAG\_subprogram
+        DW\_AT\_name("consume")
+22\$:   DW\_TAG\_template\_type\_parameter
+            DW\_AT\_name("U")
+            DW\_AT\_type(reference to "int")
+23\$:   DW\_TAG\_formal\_parameter
+            DW\_AT\_name("formal")
+            DW\_AT\_type(reference to 11\$)
+\end{alltt}
+
+In the DW\_TAG\_subprogram entry for the instance of consume,
+U is described as 
+int. 
+The type of formal is 
+\begin{alltt}
+wrapper<U>
+\end{alltt}
+ in
+the source. DWARF only represents instantiations of templates;
+there is no entry which represents 
+\begin{alltt}
+wrapper<U>, 
+\end{alltt}
+which is neither
+a template parameter nor a template instantiation. The type
+of formal is described as 
+\begin{alltt}
+wrapper<int>, 
+\end{alltt}
+the instantiation of
+\begin{alltt}
+wrapper<U>, 
+\end{alltt}
+in the DW\_AT\_type attribute at 
+23\$. 
+There is no
+description of the relationship between template type parameter
+T at 12\$ and U at 
+22\$ which was used to instantiate 
+\begin{alltt}
+wrapper<U>.
+\end{alltt}
+
+A consequence of this is that the DWARF information would
+not distinguish between the existing example and one where
+the formal of consume were declared in the source to be
+\begin{alltt}
+wrapper<int>.
+\end{alltt}
+
+\section{Template Alias Examples}
+\label{app:templatealiasexample}
+
+C++ template aliases can be described in DWARF as illustrated in 
+Section \refersec{app:templatealiasexample1}
+and 
+Section \refersec{app:templatealiasexample2}.
+
+
+\begin{lstlisting}
+// C++ source, template alias example 1
+//
+template<typename T, typename U>
+struct Alpha {
+    T tango;
+    U uniform;
+};
+template<typename V> using Beta = Alpha<V,V>;
+Beta<long> b;
+\end{lstlisting}
+
+
+\subsection{template alias example 1}
+\label{app:templatealiasexample1}
+\begin{alltt}
+! DWARF representation for variable 'b'
+!
+20\$: DW\_TAG\_structure\_type
+        DW\_AT\_name("Alpha")
+21\$:   DW\_TAG\_template\_type\_parameter
+            DW\_AT\_name("T")
+            DW\_AT\_type(reference to "long")
+22\$:   DW\_TAG\_template\_type\_parameter
+            DW\_AT\_name("U")
+            DW\_AT\_type(reference to "long")
+23\$:   DW\_TAG\_member
+            DW\_AT\_name("tango")
+            DW\_AT\_type(reference to 21\$)
+24\$:   DW\_TAG\_member
+            DW\_AT\_name("uniform")
+            DW\_AT\_type(reference to 22\$)
+25\$: DW\_TAG\_template\_alias
+        DW\_AT\_name("Beta")
+        DW\_AT\_type(reference to 20\$)
+26\$:   DW\_TAG\_template\_type\_parameter
+            DW\_AT\_name("V")
+            DW\_AT\_type(reference to "long")
+27\$: DW\_TAG\_variable
+        DW\_AT\_name("b")
+        DW\_AT\_type(reference to 25\$)
+\end{alltt}
+
+
+\begin{lstlisting}
+// C++ source, template alias example 2
+//
+template<class TX> struct X { };
+template<class TY> struct Y { };
+template<class T> using Z = Y<T>;
+X<Y<int>> y;
+X<Z<int>> z;
+\end{lstlisting}
+
+
+\subsection{template alias example 2}
+\label{app:templatealiasexample2}
+\begin{alltt}
+! DWARF representation for X<Y<int>>
+!
+30\$: DW\_TAG\_structure\_type
+        DW\_AT\_name("Y")
+31\$:   DW\_TAG\_template\_type\_parameter
+            DW\_AT\_name("TY")
+            DW\_AT\_type(reference to "int")
+32\$: DW\_TAG\_structure\_type
+        DW\_AT\_name("X")
+33\$:   DW\_TAG\_template\_type\_parameter
+            DW\_AT\_name("TX")
+            DW\_AT\_type(reference to 30\$)
+
+! DWARF representation for X<Z<int>>
+!
+40\$: DW\_TAG\_template\_alias
+using Z = Y<int>;
+        DW\_AT\_name("Z")
+        DW\_AT\_type(reference to 30\$)
+41\$:   DW\_TAG\_template\_type\_parameter
+            DW\_AT\_name("T")
+            DW\_AT\_type(reference to "int")
+42\$: DW\_TAG\_structure\_type
+        DW\_AT\_name("X")
+43\$:   DW\_TAG\_template\_type\_parameter
+            DW\_AT\_name("TX")
+            DW\_AT\_type(reference to 40\$)
+! Note that 32\$ and 42\$ are actually the same type
+!
+50\$: DW\_TAG\_variable
+        DW\_AT\_name("y")
+        DW\_AT\_type(reference to \$32)
+51\$: DW\_TAG\_variable
+        DW\_AT\_name("z")
+        DW\_AT\_type(reference to \$42)
+\end{alltt}
diff --git a/dwarf5/latexdoc/foreword.tex b/dwarf5/latexdoc/foreword.tex
new file mode 100644 (file)
index 0000000..097855d
--- /dev/null
@@ -0,0 +1,116 @@
+\renewcommand{\abstractname}{Foreword}
+\setlength{\parindent}{0pt}
+\begin{abstract}
+\nonzeroparskip
+\setlength{\parindent}{0pt}
+The \dwf\ Committee was originally organized in 1988 as the
+Programming Languages Special Interest Group (PLSIG) of Unix
+International, Inc., a trade group organized to promote Unix
+System V Release 4 (SVR4).
+
+PLSIG drafted a standard for DWARF Version 1, compatible with
+the DWARF debugging format used at the time by SVR4 compilers
+and debuggers from AT\&T.  This was published as Revision 1.1.0
+on October 6, 1992. PLSIG also designed the DWARF Version 2
+format, which followed the same general philosophy as Version
+1, but with significant new functionality and a more compact,
+though incompatible, encoding.  An industry review draft
+of DWARF Version 2 was published as Revision 2.0.0 on July
+27, 1993.
+
+Unix International dissolved shortly after the draft of
+Version 2 was released; no industry comments were received or
+addressed, and no final standard was released. The committee
+mailing list was hosted by OpenGroup (formerly XOpen).
+
+The Committee reorganized in October, 1999, and met for the
+next several years to address issues that had been noted with
+DWARF Version 2 as well as to add a number of new features.
+In mid-2003, the Committee became a workgroup under the Free
+Standards Group (FSG), a industry consortium chartered to
+promote open standards. DWARF Version 3 was published on
+December 20, 2005, following industry review and comment.
+
+The DWARF Committee withdrew from the Free Standards Group
+in February, 2007, when FSG merged with the Open Source
+Development Labs to form The Linux Foundation, more narrowly
+focused on promoting Linux. The DWARF Committee has been
+independent since that time.
+
+It is the intention of the DWARF Committee that migrating
+from DWARF Version 2 or Version 3 
+or Version 4 to later versions should
+be straightforward and easily accomplished. 
+Almost all DWARF
+Version 2 and Version 3 and Version 4 
+constructs have been retained unchanged
+in DWARF Version 5.
+
+The \dwf\ Committee is open to compiler and debugger
+developers who have experience with source language debugging
+and debugging formats, and have an interest in promoting or
+extending the DWARF debugging format.
+\clearpage
+DWARF Committee members contributing to Version 5 are:
+\begin{center}
+\begin{tabular}{ll}
+Todd Allen&Concurrent Computer\\
+David Anderson\\
+John Bishop&Intel\\
+Jim Blandy&CodeSourcery\\
+Ron Brender, Editor\\
+Andrew Cagney\\
+Eric Christopher&Apple\\
+Cary Coutant&Google\\
+John DelSignore&TotalView\\
+Michael Eager, Chair&Eager Consulting\\
+Jini Susan George&HP\\
+Matthew Gretton-Dann&ARM\\
+Tommy Hoffner&IBM\\
+Jakub Jelinek&RedHat\\
+Jason Molenda&Apple\\
+Syamala Sarma&HP\\
+Kendrick Wong&IBM\\
+Brock Wyma&Intel
+\end{tabular}
+\end{center}
+
+For further information about 
+DWARF or the DWARF Committee,
+see:
+
+% For unclear reasons, simply adding the url
+% to the sentence here makes the url extend past the
+% end of the line and generates a warning and
+% ugly output.
+\begin{myindentpara}{1cm}
+\url{http://www.dwarfstd.org} 
+\end{myindentpara}
+
+This document is intended to be usable in online as well as
+traditional paper forms. 
+In the online form, blue text is
+used to indicate hyperlinks which facilitate moving around
+in the document in a manner like that typically found in web
+browsers.
+Most hyperlinks link to the definition of a term or
+construct, or to a cited Section or Figure.
+However, attributes
+in particular are often used in more than one way or context so
+that there is no single definition; for attributes, hyperlinks
+link to the introductory list of all attributes which in turn
+contains hyperlinks for the multiple usages.
+The Table of
+Contents also provides hyperlinks to the respective sections.
+
+In the traditional paper form, the appearance of the hyperlinks
+on a page of paper does not distract the eye because the blue
+hyperlinks are typically imaged by black and white printers in
+a manner nearly indistinguishable from other text. 
+(Hyperlinks
+are not underlined for this same reason.) 
+Page numbers,
+a Table of Contents, a List of Figures and an Index are
+included in both online and paper forms.
+
+\end{abstract}
diff --git a/dwarf5/latexdoc/generaldescription.tex b/dwarf5/latexdoc/generaldescription.tex
new file mode 100644 (file)
index 0000000..cb2c474
--- /dev/null
@@ -0,0 +1,1889 @@
+\chapter{General Description}
+\label{chap:generaldescription}
+\section{The Debugging Entry (DIE)}
+\label{chap:thedebuggingentrydie}
+DWARF uses a series of debugging information entries (DIEs) to 
+define a low\dash{} level
+representation of a source program. 
+Each debugging information entry consists of an identifying
+tag and a series of attributes. 
+An entry, or group of entries together, provide a description of a
+corresponding entity in the source program. 
+The tag specifies the class to which an entry belongs
+and the attributes define the specific characteristics of the entry.
+
+The set of tag names is listed in Figure 1. 
+The debugging information entries they identify are
+described in Sections 3, 4 and 5.
+
+The debugging information entry descriptions 
+in Sections 3, 4 and 5 generally include mention of
+most, but not necessarily all, of the attributes 
+that are normally or possibly used with the entry.
+Some attributes, whose applicability tends to be 
+pervasive and invariant across many kinds of
+debugging information entries, are described in 
+this section and not necessarily mentioned in all
+contexts where they may be appropriate. 
+Examples include DW\_AT\_artificial, the declaration
+coordinates, and DW\_AT\_description, among others.
+
+The debugging information entries are contained 
+in the .debug\_info and .debug\_types
+sections of an object file.
+
+
+
+\section{Attribute Types}
+\label{chap:attributetypes}
+Each attribute value is characterized by an attribute name. 
+No more than one attribute with a given name may appear in any
+debugging information entry. 
+There are no limitations on the
+ordering of attributes within a debugging information entry.
+
+The attributes are listed in Figure 2.  
+
+The permissible values
+for an attribute belong to one or more classes of attribute
+value forms.  
+Each form class may be represented in one or more ways. 
+For example, some attribute values consist
+of a single piece of constant data. 
+``Constant data''
+is the class of attribute value that those attributes may have. 
+There are several representations of constant data,
+however (one, two, ,four, or eight bytes, and variable length
+data). 
+The particular representation for any given instance
+of an attribute is encoded along with the attribute name as
+part of the information that guides the interpretation of a
+debugging information entry.  
+
+Attribute value forms belong
+to one of the classes shown in Figure \refersec{tab:classesofattributevalue}.
+
+% These each need to link to definition page: FIXME
+\begin{figure}[here]
+\autorows[0pt]{c}{2}{l}{
+\addtoindex{DW\_TAG\_access\_declaration},
+\addtoindex{DW\_TAG\_array\_type},
+\addtoindex{DW\_TAG\_base\_type},
+\addtoindex{DW\_TAG\_catch\_block},
+\addtoindex{DW\_TAG\_class\_type},
+\addtoindex{DW\_TAG\_common\_block},
+\addtoindex{DW\_TAG\_common\_inclusion},
+\addtoindex{DW\_TAG\_compile\_unit},
+\addtoindex{DW\_TAG\_condition},
+\addtoindex{DW\_TAG\_const\_type},
+\addtoindex{DW\_TAG\_constant},
+\addtoindex{DW\_TAG\_dwarf\_procedure},
+\addtoindex{DW\_TAG\_entry\_point},
+\addtoindex{DW\_TAG\_enumeration\_type},
+\addtoindex{DW\_TAG\_enumerator},
+\addtoindex{DW\_TAG\_file\_type},
+\addtoindex{DW\_TAG\_formal\_parameter},
+\addtoindex{DW\_TAG\_friend},
+\addtoindex{DW\_TAG\_imported\_declaration},
+\addtoindex{DW\_TAG\_imported\_module},
+\addtoindex{DW\_TAG\_imported\_unit},
+\addtoindex{DW\_TAG\_inheritance},
+\addtoindex{DW\_TAG\_inlined\_subroutine},
+\addtoindex{DW\_TAG\_interface\_type},
+\addtoindex{DW\_TAG\_label},
+\addtoindex{DW\_TAG\_lexical\_block},
+\addtoindex{DW\_TAG\_module},
+\addtoindex{DW\_TAG\_member},
+\addtoindex{DW\_TAG\_namelist},
+\addtoindex{DW\_TAG\_namelist\_item},
+\addtoindex{DW\_TAG\_namespace},
+\addtoindex{DW\_TAG\_packed\_type},
+\addtoindex{DW\_TAG\_partial\_unit},
+\addtoindex{DW\_TAG\_pointer\_type},
+\addtoindex{DW\_TAG\_ptr\_to\_member\_type},
+\addtoindex{DW\_TAG\_reference\_type},
+\addtoindex{DW\_TAG\_restrict\_type},
+\addtoindex{DW\_TAG\_rvalue\_reference\_type},
+\addtoindex{DW\_TAG\_set\_type},
+\addtoindex{DW\_TAG\_shared\_type},
+\addtoindex{DW\_TAG\_string\_type},
+\addtoindex{DW\_TAG\_structure\_type},
+\addtoindex{DW\_TAG\_subprogram},
+\addtoindex{DW\_TAG\_subrange\_type},
+\addtoindex{DW\_TAG\_subroutine\_type},
+\addtoindex{DW\_TAG\_template\_alias},
+\addtoindex{DW\_TAG\_template\_type\_parameter},
+\addtoindex{DW\_TAG\_template\_value\_parameter},
+\addtoindex{DW\_TAG\_thrown\_type},
+\addtoindex{DW\_TAG\_try\_block},
+\addtoindex{DW\_TAG\_typedef},
+\addtoindex{DW\_TAG\_type\_unit},
+\addtoindex{DW\_TAG\_union\_type},
+\addtoindex{DW\_TAG\_unspecified\_parameters},
+\addtoindex{DW\_TAG\_unspecified\_type},
+\addtoindex{DW\_TAG\_variable},
+\addtoindex{DW\_TAG\_variant},
+\addtoindex{DW\_TAG\_variant\_part},
+\addtoindex{DW\_TAG\_volatile\_type},
+\addtoindex{DW\_TAG\_with\_stmt},
+}
+\caption{Tag names}\label{fig:tagnames}
+\end{figure}
+
+\label{tab:attributenames}
+\setlength{\extrarowheight}{0.1cm}
+\begin{longtable}{l|p{9cm}}
+  \caption{Attribute names} \\
+  \hline \\ \bfseries Attribute&\bfseries Identifies or Specifies \\ \hline
+\endfirsthead
+  \bfseries Attribute&\bfseries Identifies or Specifies \\ \hline
+\endhead
+  \hline \emph{Continued on next page}
+\endfoot
+  \hline
+\endlastfoot
+DW\_AT\_abstract\_origin
+&Inline instances of inline subprograms \\
+&Out\dash{} of\dash{} line instances of inline subprograms \\
+DW\_AT\_accessibility
+&C++ and Ada declarations \\
+&C++ base classes \\
+&C++ inherited members \\
+DW\_AT\_address\_class
+&Pointer or reference types \\
+&Subroutine or subroutine type \\
+DW\_AT\_allocated
+&Allocation status of types \\
+DW\_AT\_artificial
+&Objects or types that are not
+actually declared in the source \\
+DW\_AT\_associated 
+&Association status of types \\
+DW\_AT\_base\_types 
+&Primitive data types of compilation unit \\
+DW\_AT\_binary\_scale 
+&Binary scale factor for fixed\dash point type \\
+DW\_AT\_bit\_offset 
+&Base type bit location \\
+&Data member bit location \\
+DW\_AT\_bit\_size 
+&Base type bit size \\
+&Data member bit size \\
+DW\_AT\_bit\_stride 
+&Array element stride (of array type) \\
+&Subrange stride (dimension of array type) \\
+&Enumeration stride (dimension of array type) \\
+DW\_AT\_byte\_size 
+&Data object or data type size \\
+DW\_AT\_byte\_stride 
+&Array element stride (of array type) \\
+&Subrange stride (dimension of array type) \\
+&Enumeration stride (dimension of array type) \\
+DW\_AT\_call\_column 
+&Column position of inlined subroutine call \\
+DW\_AT\_call\_file
+&File containing inlined subroutine call \\
+DW\_AT\_call\_line 
+&Line number of inlined subroutine call \\
+DW\_AT\_calling\_convention 
+&Subprogram calling convention \\
+&DW\_AT\_common\_reference \\
+&Common block usage \\
+DW\_AT\_comp\_dir
+&Compilation directory \\
+DW\_AT\_const\_value
+&Constant object \\
+DW\_AT\_const\_value
+&Enumeration literal value \\
+&Template value parameter \\
+DW\_AT\_const\_expr
+&Compile\dash time constant object \\
+&Compile\dash time constant function \\
+DW\_AT\_containing\_type
+&Containing type of pointer to member type \\
+DW\_AT\_count
+&Elements of subrange type \\
+DW\_AT\_data\_bit\_offset
+&Base type bit location \\
+&Data member bit location \\
+DW\_AT\_data\_location 
+&Indirection to actual data \\
+DW\_AT\_data\_member\_location
+&Data member location \\
+&Inherited member location \\
+DW\_AT\_decimal\_scale
+&Decimal scale factor \\
+DW\_AT\_decimal\_sign
+&Decimal sign representation \\
+DW\_AT\_decl\_column
+&Column position of source declaration \\
+DW\_AT\_decl\_file
+&File containing source declaration \\
+DW\_AT\_decl\_line
+&Line number of source declaration \\
+DW\_AT\_declaration
+&Incomplete, non\dash defining, or separate entity declaration \\
+DW\_AT\_default\_value
+&Default value of parameter \\
+DW\_AT\_description 
+& Artificial name or description \\
+DW\_AT\_digit\_count
+&Digit count for packed decimal or numeric string type\\
+DW\_AT\_discr
+&Discriminant of variant part\\
+DW\_AT\_discr\_list
+&List of discriminant values\\
+DW\_AT\_discr\_value
+&Discriminant value\\
+DW\_AT\_elemental
+&Elemental property of a subroutine\\
+DW\_AT\_encoding
+&Encoding of base type\\
+DW\_AT\_endianity
+&Endianity of data\\
+DW\_AT\_entry\_pc
+&Entry address of module initialization\\
+&Entry address of subprogram\\
+&Entry address of inlined subprogram\\
+DW\_AT\_enum\_class
+&Type safe enumeration definition\\
+DW\_AT\_explicit
+&Explicit property of member function\\
+DW\_AT\_extension
+&Previous namespace extension or original namespace\\
+DW\_AT\_external
+&External subroutine\\
+&External variable\\
+DW\_AT\_frame\_base
+&Subroutine frame base address\\
+DW\_AT\_friend
+&Friend relationship\\
+DW\_AT\_high\_pc
+&Contiguous range of code addresses\\
+DW\_AT\_identifier\_case
+&Identifier case rule \\
+DW\_AT\_import
+&Imported declaration \\
+&Imported unit \\
+&Namespace alias \\
+&Namespace using declaration \\
+&Namespace using directive \\
+DW\_AT\_inline
+&Abstract instance\\
+&Inlined subroutine\\
+DW\_AT\_is\_optional
+&Optional parameter\\
+DW\_AT\_language
+&Programming language\\
+DW\_AT\_linkage\_name
+&Object file linkage name of an entity\\
+DW\_AT\_location
+&Data object location\\
+DW\_AT\_low\_pc
+&Code address or range of addresses\\
+DW\_AT\_lower\_bound
+&Lower bound of subrange\\
+DW\_AT\_macro\_info
+&Macro information (\#define, \#undef)\\
+DW\_AT\_main\_subprogram
+&Main or starting subprogram\\
+&Unit containing main or starting subprogram\\
+DW\_AT\_mutable
+&Mutable property of member data\\
+DW\_AT\_name
+&Name of declaration\\
+&Path name of compilation source\\
+DW\_AT\_namelist\_item
+&Namelist item\\
+DW\_AT\_object\_pointer
+&Object (this, self) pointer of member function\\
+DW\_AT\_ordering
+&Array row/column ordering\\
+DW\_AT\_picture\_string
+&Picture string for numeric string type\\
+DW\_AT\_priority
+&Module priority\\
+DW\_AT\_producer
+&Compiler identification\\
+DW\_AT\_prototyped
+&Subroutine prototype\\
+DW\_AT\_pure
+&Pure property of a subroutine\\
+DW\_AT\_ranges
+&Non\dash contiguous range of code addresses\\
+DW\_AT\_recursive
+&Recursive property of a subroutine\\
+DW\_AT\_return\_addr
+&Subroutine return address save location\\
+DW\_AT\_segment
+&Addressing information\\
+DW\_AT\_sibling
+&Debugging information entry relationship\\
+DW\_AT\_small
+&Scale factor for fixed\dash point type\\
+DW\_AT\_signature
+&Type signature\\
+DW\_AT\_specification
+&Incomplete, non\dash defining, or separate declaration
+corresponding to a declaration\\
+DW\_AT\_start\_scope
+&Object declaration\\
+&Type declaration\\
+DW\_AT\_static\_link
+&Location of uplevel frame\\
+DW\_AT\_stmt\_list
+&Line number information for unit\\
+DW\_AT\_string\_length
+&String length of string type\\
+DW\_AT\_threads\_scaled
+&UPC array bound THREADS scale factor\\
+DW\_AT\_trampoline
+&Target subroutine\\
+DW\_AT\_type
+&Type of declaration\\
+&Type of subroutine return\\
+DW\_AT\_upper\_bound
+&Upper bound of subrange\\
+DW\_AT\_use\_location
+&Member location for pointer to member type\\
+DW\_AT\_use\_UTF8
+&Compilation unit uses UTF\dash 8 strings \\
+DW\_AT\_variable\_parameter
+&Non\dash constant parameter flag \\
+DW\_AT\_virtuality
+&Virtuality indication \\
+&Virtuality of base class \\
+&Virtuality of function \\
+DW\_AT\_visibility
+&Visibility of declaration\\
+DW\_AT\_vtable\_elem\_location
+&Virtual function vtable slot\\
+\end{longtable}
+
+\begin{figure}[here]
+\centering
+% Attribute Class entries need a ref to definition point.
+\setlength{\extrarowheight}{0.1cm}
+\label{tab:classesofattributevalue}
+\begin{tabular}{l|p{10cm}} \hline
+Attribute Class & General Use and Encoding \\ \hline
+\index{address class}address&Refers to some location in the address space of the described program.
+ \\ 
+\index{block class}block& An arbitrary number of uninterpreted bytes of data.
+ \\
+\index{constant class}constant&
+One, two, four or eight bytes of uninterpreted data, or data
+encoded in the variable length format known as LEB128 (see
+Section 7.6.).
+
+\textit{Most constant values are integers of one kind or
+another (codes, offsets, counts, and so on); these are
+sometimes called ``integer constants'' for emphasis.} \\
+
+\index{exprloc class}exprloc\label{chap:exprloc}&A DWARF expression or location description.
+\\
+\index{flag class}flag&A small constant that indicates the presence or absence of an attribute.
+\\
+\index{lineptr class}lineptr& Refers to a location in the DWARF section that holds line number information.
+\\
+\index{loclistptr class}loclistptr&Refers to a location in the DWARF section that holds location lists, which
+describe objects whose location can change during their lifetime.
+\\
+\index{macptr class}macptr
+& Refers to a location in the DWARF section that holds macro definition
+ information.  \\
+
+\index{rangelistptr class}rangelistptr
+& Refers to a location in the DWARF section that holds non\dash contiguous address ranges.  \\
+
+\index{reference class}reference& Refers to one of the debugging information
+entries that describe the program.  There are three types of
+reference. The first is an offset relative to the beginning
+of the compilation unit in which the reference occurs and must
+refer to an entry within that same compilation unit. The second
+type of reference is the offset of a debugging information
+entry in any compilation unit, including one different from
+the unit containing the reference. The third type of reference
+is an indirect reference to a type definition using a 64\dash
+bit signature for that type.  \\
+
+\index{string class}string&A null\dash terminated sequence of zero or more
+(non\dash null) bytes. Data in this class are generally
+printable strings. Strings may be represented directly in
+the debugging information entry or as an offset in a separate
+string table.  
+\end{tabular}
+\caption{Classes of Attribute value}
+\end{figure}
+% It is difficult to get the above table to appear before
+% the end of the chapter without a clearpage here.
+\clearpage
+\section{Relationship of Debugging Information Entries}
+\label{chap:relationshipofdebugginginformationentries}
+\textit{
+A variety of needs can be met by permitting a single
+debugging information entry to “own” an arbitrary number
+of other debugging entries and by permitting the same debugging
+information entry to be one of many owned by another debugging
+information entry. 
+This makes it possible, for example, to
+describe the static block structure within a source file,
+to show the members of a structure, union, or class, and to
+associate declarations with source files or source files
+with shared objects.  
+}
+
+
+The ownership relation of debugging
+information entries is achieved naturally because the debugging
+information is represented as a tree. 
+The nodes of the tree
+are the debugging information entries themselves. 
+The child
+entries of any node are exactly those debugging information
+entries owned by that node.  
+
+\textit{
+While the ownership relation
+of the debugging information entries is represented as a
+tree, other relations among the entries exist, for example,
+a reference from an entry representing a variable to another
+entry representing the type of that variable. 
+If all such
+relations are taken into account, the debugging entries
+form a graph, not a tree.  
+}
+
+The tree itself is represented
+by flattening it in prefix order. 
+Each debugging information
+entry is defined either to have child entries or not to have
+child entries (see Section 7.5.3). 
+If an entry is defined not
+to have children, the next physically succeeding entry is a
+sibling. 
+If an entry is defined to have children, the next
+physically succeeding entry is its first child. 
+Additional
+children are represented as siblings of the first child. 
+A chain of sibling entries is terminated by a null entry.
+
+In cases where a producer of debugging information feels that
+it will be important for consumers of that information to
+quickly scan chains of sibling entries, while ignoring the
+children of individual siblings, that producer may attach a
+DW\_AT\_sibling attribute to any debugging information entry. 
+The
+value of this attribute is a reference to the sibling entry
+of the entry to which the attribute is attached.
+
+
+\section{Target Addresses}
+\label{chap:targetaddresses}
+Many places in this document refer to the size of an address
+on the target architecture (or equivalently, target machine)
+to which a DWARF description applies. For processors which
+can be configured to have different address sizes or different
+instruction sets, the intent is to refer to the configuration
+which is either the default for that processor or which is
+specified by the object file or executable file which contains
+the DWARF information.
+
+
+
+\textit{
+For example, if a particular target architecture supports
+both 32\dash bit and 64\dash bit addresses, the compiler will generate
+an object file which specifies that it contains executable
+code generated for one or the other of these address sizes. In
+that case, the DWARF debugging information contained in this
+object file will use the same address size.
+}
+
+\textit{
+Architectures which have multiple instruction sets are
+supported by the isa entry in the line number information
+(see Section \refersec{chap:statemachineregisters}).
+}
+
+
+\section{DWARF Expressions}
+\label{chap:dwarfexpressions}
+DWARF expressions describe how to compute a value or name a
+location during debugging of a program. 
+They are expressed in
+terms of DWARF operations that operate on a stack of values.
+
+All DWARF operations are encoded as a stream of opcodes that
+are each followed by zero or more literal operands. 
+The number
+of operands is determined by the opcode.  
+
+In addition to the
+general operations that are defined here, operations that are
+specific to location descriptions are defined in 
+Section \refersec{chap:locationdescriptions} .
+
+\subsection{General Operations}
+\label{chap:generaloperations}
+Each general operation represents a postfix operation on
+a simple stack machine. Each element of the stack is the
+size of an address on the target machine. The value on the
+top of the stack after ``executing'' the DWARF expression
+is taken to be the result (the address of the object, the
+value of the array bound, the length of a dynamic string,
+the desired value itself, and so on).
+
+\subsubsection{Literal Encodings}
+\label{chap:literalencodings}
+The following operations all push a value onto the DWARF
+stack. If the value of a constant in one of these operations
+is larger than can be stored in a single stack element, the
+value is truncated to the element size and the low\dash order bits
+are pushed on the stack.
+
+\begin{enumerate}[1]
+\item DW\_OP\_lit0, DW\_OP\_lit1, \dots, DW\_OP\_lit31 \\
+The DW\_OP\_litn operations encode the unsigned literal values
+from 0 through 31, inclusive.
+
+\item DW\_OP\_addr \\
+The DW\_OP\_addr operation has a single operand that encodes
+a machine address and whose size is the size of an address
+on the target machine.
+
+\item DW\_OP\_const1u, DW\_OP\_const2u, DW\_OP\_const4u, DW\_OP\_const8u \\
+The single operand of a DW\_OP\_constnu operation provides a 1,
+2, 4, or 8\dash byte unsigned integer constant, respectively.
+
+\item DW\_OP\_const1s , DW\_OP\_const2s, DW\_OP\_const4s, DW\_OP\_const8s \\
+The single operand of a DW\_OP\_constns operation provides a 1,
+2, 4, or 8\dash byte signed integer constant, respectively.
+
+\item DW\_OP\_constu \\
+The single operand of the DW\_OP\_constu operation provides
+an unsigned LEB128 integer constant.
+
+\item DW\_OP\_consts \\
+The single operand of the DW\_OP\_consts operation provides
+a signed LEB128 integer constant.
+
+\end{enumerate}
+
+
+\subsubsection{Register Based Addressing}
+\label{chap:registerbasedaddressing}
+The following operations push a value onto the stack that is
+the result of adding the contents of a register to a given
+signed offset.
+
+\begin{enumerate}[1]
+
+\item DW\_OP\_fbreg \\
+The DW\_OP\_fbreg operation provides a signed LEB128 offset
+from the address specified by the location description in the
+DW\_AT\_frame\_base attribute of the current function. (This
+is typically a “stack pointer” register plus or minus
+some offset. On more sophisticated systems it might be a
+location list that adjusts the offset according to changes
+in the stack pointer as the PC changes.)
+
+\item DW\_OP\_breg0, DW\_OP\_breg1, \dots, DW\_OP\_breg31\\
+The single operand of the DW\_OP\_bregn operations provides
+a signed LEB128 offset from
+the specified register.
+
+\item DW\_OP\_bregx \\
+The DW\_OP\_bregx operation has two operands: a register
+which is specified by an unsigned LEB128 number, followed by
+a signed LEB128 offset.
+
+\end{enumerate}
+
+
+\subsubsection{Stack Operations}
+\label{chap:stackoperations}
+The following operations manipulate the DWARF stack. Operations
+that index the stack assume that the top of the stack (most
+recently added entry) has index 0.
+
+\begin{enumerate}[1]
+\label{chap:DWOPdup}
+\item DW\_OP\_dup \\
+The DW\_OP\_dup operation duplicates the value at the top of the stack.
+
+\label{chap:DWOPdrop}
+\item DW\_OP\_drop \\
+The DW\_OP\_drop operation pops the value at the top of the stack.
+
+\label{chap:DWOPpick}
+\item DW\_OP\_pick \\
+The single operand of the DW\_OP\_pick operation provides a
+1\dash byte index. A copy of the stack entry with the specified
+index (0 through 255, inclusive) is pushed onto the stack.
+
+\label{chap:DWOPover}
+\item DW\_OP\_over \\
+The DW\_OP\_over operation duplicates the entry currently second
+in the stack at the top of the stack. 
+This is equivalent to
+a DW\_OP\_pick operation, with index 1.  
+
+\label{chap:DWOPswap}
+\item DW\_OP\_swap \\
+The DW\_OP\_swap operation swaps the top two stack entries. 
+The entry at the top of the
+stack becomes the second stack entry, 
+and the second entry becomes the top of the stack.
+
+\label{chap:DWOProt}
+\item DW\_OP\_rot \\
+The DW\_OP\_rot operation rotates the first three stack
+entries. The entry at the top of the stack becomes the third
+stack entry, the second entry becomes the top of the stack,
+and the third entry becomes the second entry.
+
+\label{chap:DWOPderef}
+\item  DW\_OP\_deref \\
+The DW\_OP\_deref operation pops the top stack entry and 
+treats it as an address. The value
+retrieved from that address is pushed. 
+The size of the data retrieved from the dereferenced
+address is the size of an address on the target machine.
+
+\label{chap:DWOPderefsize}
+\item DW\_OP\_deref\_size \\
+The DW\_OP\_deref\_size operation behaves like the DW\_OP\_deref
+operation: it pops the top stack entry and treats it as an
+address. The value retrieved from that address is pushed. In
+the DW\_OP\_deref\_size operation, however, the size in bytes
+of the data retrieved from the dereferenced address is
+specified by the single operand. This operand is a 1\dash byte
+unsigned integral constant whose value may not be larger
+than the size of an address on the target machine. The data
+retrieved is zero extended to the size of an address on the
+target machine before being pushed onto the expression stack.
+
+\label{chap:DWOPxderef}
+\item DW\_OP\_xderef \\
+The DW\_OP\_xderef operation provides an extended dereference
+mechanism. The entry at the top of the stack is treated as an
+address. The second stack entry is treated as an “address
+space identifier” for those architectures that support
+multiple address spaces. The top two stack elements are popped,
+and a data item is retrieved through an implementation\dash defined
+address calculation and pushed as the new stack top. The size
+of the data retrieved from the dereferenced address is the
+size of an address on the target machine.
+
+\label{chap:DWOPxderefsize}
+\item  DW\_OP\_xderef\_size \\
+The DW\_OP\_xderef\_size operation behaves like the
+DW\_OP\_xderef operation.The entry at the top of the stack is
+treated as an address. The second stack entry is treated as
+an “address space identifier” for those architectures
+that support multiple address spaces. The top two stack
+elements are popped, and a data item is retrieved through an
+implementation\dash defined address calculation and pushed as the
+new stack top. In the DW\_OP\_xderef\_size operation, however,
+the size in bytes of the data retrieved from the dereferenced
+address is specified by the single operand. This operand is a
+1\dash byte unsigned integral constant whose value may not be larger
+than the size of an address on the target machine. The data
+retrieved is zero extended to the size of an address on the
+target machine before being pushed onto the expression stack.
+
+\label{chap:DWOPpushobjectaddress}
+\item DW\_OP\_push\_object\_address \\
+The DW\_OP\_push\_object\_address operation pushes the address
+of the object currently being evaluated as part of evaluation
+of a user presented expression. This object may correspond
+to an independent variable described by its own debugging
+information entry or it may be a component of an array,
+structure, or class whose address has been dynamically
+determined by an earlier step during user expression
+evaluation.  This operator provides explicit functionality
+(especially for arrays involving descriptors) that is analogous
+to the implicit push of the base address of a structure prior
+to evaluation of a DW\_AT\_data\_member\_location to access a
+data member of a structure. For an example, see 
+Appendix \refersec{app:aggregateexamples}.
+
+\label{chap:DWOPformtlsaddress}
+\item DW\_OP\_form\_tls\_address \\
+The DW\_OP\_form\_tls\_address operation pops a value from the
+stack, translates it into an address in the current thread's
+thread\dash local storage block, and pushes the address. If the
+DWARF expression containing the DW\_OP\_form\_tls\_address
+operation belongs to the main executable's DWARF info, the
+operation uses the main executable's thread\dash local storage
+block; if the expression belongs to a shared library's
+DWARF info, then it uses that shared library's thread\dash local
+storage block.  Some implementations of C and C++ support a
+\_\_thread storage class. Variables with this storage class
+have distinct values and addresses in distinct threads, much
+as automatic variables have distinct values and addresses in
+each function invocation. Typically, there is a single block
+of storage containing all \_\_thread variables declared in
+the main executable, and a separate block for the variables
+declared in each shared library. Computing the address of
+the appropriate block can be complex (in some cases, the
+compiler emits a function call to do it), and difficult
+to describe using ordinary DWARF location descriptions.
+DW\_OP\_form\_tls\_address leaves the computation to the
+consumer.
+
+\label{chap:DWOPcallframecfa}
+\item DW\_OP\_call\_frame\_cfa \\
+The DW\_OP\_call\_frame\_cfa operation pushes the value of the
+CFA, obtained from the Call Frame Information 
+(see Section \refersec{chap:callframeinformation}).
+Although the value of DW\_AT\_frame\_base
+can be computed using other DWARF expression operators,
+in some cases this would require an extensive location list
+because the values of the registers used in computing the
+CFA change during a subroutine. If the 
+Call Frame Information 
+is present, then it already encodes such changes, and it is
+space efficient to reference that.
+\end{enumerate}
+
+\subsubsection{Arithmetic and Logical Operations}
+The following provide arithmetic and logical operations. Except
+as otherwise specified, the arithmetic operations perfom
+addressing arithmetic, that is, unsigned arithmetic that is
+performed modulo one plus the largest representable address
+(for example, 0x100000000 when the size of an address is 32
+bits). Such operations do not cause an exception on overflow.
+
+\begin{enumerate}[1]
+\label{chap:DWOPabs}
+\item DW\_OP\_abs  \\
+The DW\_OP\_abs operation pops the top stack entry, interprets
+it as a signed value and pushes its absolute value. If the
+absolute value cannot be represented, the result is undefined.
+
+\label{chap:DWOPand}
+\item DW\_OP\_and \\
+The DW\_OP\_and operation pops the top two stack values, performs
+a bitwise and operation on the two, and pushes the result.
+
+\label{chap:DWOPdiv}
+\item DW\_OP\_div \\
+The DW\_OP\_div operation pops the top two stack values, divides the former second entry by
+the former top of the stack using signed division, and pushes the result.
+
+\label{chap:DWOPminus}
+\item DW\_OP\_minus \\
+The DW\_OP\_minus operation pops the top two stack values, subtracts the former top of the
+stack from the former second entry, and pushes the result.
+
+\label{chap:DWOPmod}
+\item DW\_OP\_mod \\
+The DW\_OP\_mod operation pops the top two stack values and pushes the result of the
+calculation: former second stack entry modulo the former top of the stack.
+
+\label{chap:DWOPmul}
+\item DW\_OP\_mul \\
+The DW\_OP\_mul operation pops the top two stack entries, multiplies them together, and
+pushes the result.
+
+\label{chap:DWOPneg}
+\item  DW\_OP\_neg \\
+The DW\_OP\_neg operation pops the top stack entry, interprets
+it as a signed value and pushes its negation. If the negation
+cannot be represented, the result is undefined.
+
+\label{chap:DWOPnot}
+\item  DW\_OP\_not \\
+The DW\_OP\_not operation pops the top stack entry, and pushes
+its bitwise complement.
+
+\label{chap:DWOPor}
+\item  DW\_OP\_or \\
+The DW\_OP\_or operation pops the top two stack entries, performs
+a bitwise or operation on the two, and pushes the result.
+
+\label{chap:DWOPplus}
+\item  DW\_OP\_plus \\
+The DW\_OP\_plus operation pops the top two stack entries,
+adds them together, and pushes the result.
+
+\label{chap:DWOPplusuconst}
+\item  DW\_OP\_plus\_uconst \\
+The DW\_OP\_plus\_uconst operation pops the top stack entry,
+adds it to the unsigned LEB128 constant operand and pushes
+the result.  This operation is supplied specifically to be
+able to encode more field offsets in two bytes than can be
+done with “DW\_OP\_litn DW\_OP\_plus”.
+
+\label{chap:DWOPshl}
+\item DW\_OP\_shl \\
+The DW\_OP\_shl operation pops the top two stack entries,
+shifts the former second entry left (filling with zero bits)
+by the number of bits specified by the former top of the stack,
+and pushes the result.
+
+\label{chap:DWOPshr}
+\item DW\_OP\_shr \\
+The DW\_OP\_shr operation pops the top two stack entries,
+shifts the former second entry right logically (filling with
+zero bits) by the number of bits specified by the former top
+of the stack, and pushes the result.
+
+\label{chap:DWOPshra}
+\item DW\_OP\_shra \\
+The DW\_OP\_shra operation pops the top two stack entries,
+shifts the former second entry right arithmetically (divide
+the magnitude by 2, keep the same sign for the result) by
+the number of bits specified by the former top of the stack,
+and pushes the result.
+
+\label{chap:DWOPxor}
+\item DW\_OP\_xor \\
+The DW\_OP\_xor operation pops the top two stack entries,
+performs a bitwise exclusive\dash or operation on the two, and
+pushes the result.
+
+\end{enumerate}
+
+\subsubsection{Control Flow Operations}
+\label{chap:controlflowoperations}
+The following operations provide simple control of the flow of a DWARF expression.
+\begin{enumerate}[1]
+\item  DW\_OP\_le, DW\_OP\_ge, DW\_OP\_eq, DW\_OP\_lt, DW\_OP\_gt, DW\_OP\_ne \\
+The six relational operators each:
+\begin{itemize}
+\item pop the top two stack values,
+
+\item compare the operands:
+\textless~former second entry~\textgreater  \textless~relational operator~\textgreater \textless~former top entry~\textgreater
+
+\item push the constant value 1 onto the stack 
+if the result of the operation is true or the
+constant value 0 if the result of the operation is false.
+\end{itemize}
+
+Comparisons are performed as signed operations. The six
+operators are DW\_OP\_le (less than or equal to), DW\_OP\_ge
+(greater than or equal to), DW\_OP\_eq (equal to), DW\_OP\_lt (less
+than), DW\_OP\_gt (greater than) and DW\_OP\_ne (not equal to).
+
+\item DW\_OP\_skip \\
+DW\_OP\_skip is an unconditional branch. Its single operand
+is a 2\dash byte signed integer constant. The 2\dash byte constant is
+the number of bytes of the DWARF expression to skip forward
+or backward from the current operation, beginning after the
+2\dash byte constant.
+
+\item DW\_OP\_bra \\
+DW\_OP\_bra is a conditional branch. Its single operand is a
+2\dash byte signed integer constant.  This operation pops the
+top of stack. If the value popped is not the constant 0,
+the 2\dash byte constant operand is the number of bytes of the
+DWARF expression to skip forward or backward from the current
+operation, beginning after the 2\dash byte constant.
+
+% The following item does not correctly hyphenate leading
+% to an overfull hbox and a visible artifact. 
+% So we use \- to suggest hyphenation in this rare situation.
+\item DW\_OP\_call2, DW\_OP\_call4, DW\_OP\_call\_ref \\
+DW\_OP\_call2, DW\_OP\_call4, and DW\_OP\_call\_ref perform
+subroutine calls during evaluation of a DWARF expression or
+location description. 
+For DW\_OP\_call2 and 
+DW\-\_OP\-\_call4, 
+the
+operand is the 2\dash~ or 4\dash byte 
+unsigned offset, respectively,
+of a debugging information entry in the current compilation
+unit. The DW\_OP\_call\_ref operator has a single operand. In the
+32\dash bit DWARF format, the operand is a 4\dash byte unsigned value;
+in the 64\dash bit DWARF format, it is an 8\dash byte unsigned value
+(see Section \refersec{datarep:32bitand64bitdwarfformats}). 
+The operand is used as the offset of a
+debugging information entry in a .debug\_info or .debug\_types
+section which may be contained in a shared object or executable
+other than that containing the operator. For references from
+one shared object or executable to another, the relocation
+must be performed by the consumer.  
+
+\textit{Operand interpretation of
+DW\_OP\_call2, DW\_OP\_call4 and DW\_OP\_call\_ref is exactly like
+that for DW\_FORM\_ref2, DW\_FORM\_ref4 and DW\_FORM\_ref\_addr,
+respectively  
+(see Section  \refersec{datarep:attributeencodings}).  
+}
+
+These operations transfer
+control of DWARF expression evaluation to the 
+DW\-\_AT\-\_location
+attribute of the referenced debugging information entry. If
+there is no such attribute, then there is no effect. Execution
+of the DWARF expression of a DW\-\_AT\-\_location attribute may add
+to and/or remove from values on the stack. Execution returns
+to the point following the call when the end of the attribute
+is reached. Values on the stack at the time of the call may be
+used as parameters by the called expression and values left on
+the stack by the called expression may be used as return values
+by prior agreement between the calling and called expressions.
+\end{enumerate}
+
+
+\subsubsection{Special Operations}
+There is one special operation currently defined:
+\begin{enumerate}[1]
+\item DW\_OP\_nop \\
+The DW\_OP\_nop operation is a place holder. It has no effect
+on the location stack or any of its values.
+
+\end{enumerate}
+\subsection{Example Stack Operations}
+\textit {The stack operations defined in 
+Section \refersec{chap:stackoperations}.
+are fairly conventional, but the following
+examples illustrate their behavior graphically.
+}
+
+\begin{tabular}{rrcrr} 
+ &Before & Operation&& After \\
+
+0& 17& \livelink{DW\_OP\_dup}{chap:DWOPdup} &0 &17 \\
+1&   29& &  1 & 17 \\
+2& 1000 & & 2 & 29\\
+& & &         3&1000\\
+& & & & \\
+0 & 17 & \livelink{DW\_OP\_drop}{chap:DWOPdrop} & 0 & 29 \\
+1 &29  &            & 1 & 1000 \\
+2 &1000& & &          \\
+
+& & & & \\
+0 & 17 & \livelink{DW\_OP\_pick}{chap:DWOPpick} & 0 & 1000 \\
+1 & 29 & & 1&17 \\
+2 &1000& &2&29 \\
+  &    & &3&1000 \\
+
+& & & & \\
+0&17& \livelink{DW\_OP\_over}{chap:DWOPover}&0&29 \\
+1&29& &  1&17 \\
+2&1000 & & 2&29\\
+ &     & & 3&1000 \\
+
+& & & & \\
+0&17& \livelink{DW\_OP\_swap}{chap:DWOPswap} &0&29 \\
+1&29& &  1&17 \\
+2&1000 & & 2&1000 \\
+
+& & & & \\
+0&17&\livelink{DW\_OP\_rot}{chap:DWOProt} & 0 &29 \\
+1&29 & & 1 & 1000 \\
+2& 1000 & &  2 & 17 \\
+\end{tabular}
+
+\section{Location Descriptions}
+\label{chap:locationdescriptions}
+\textit{ Debugging information must provide consumers a way to find
+the location of program variables, determine the bounds
+of dynamic arrays and strings, and possibly to find the
+base address of a subroutine’s stack frame or the return
+address of a subroutine. Furthermore, to meet the needs of
+recent computer architectures and optimization techniques,
+debugging information must be able to describe the location of
+an object whose location changes over the object’s lifetime.}
+
+Information about the location of program objects is provided
+by location descriptions. Location descriptions can be either
+of two forms:
+\begin{enumerate}[1]
+\item \textit{Single location descriptions}, which are a language independent representation of
+addressing rules of arbitrary complexity built from 
+DWARF expressions (See section \refersec{chap:dwarfexpressions}) 
+and/or other
+DWARF operations specific to describing locations. They are
+sufficient for describing the location of any object as long
+as its lifetime is either static or the same as the lexical
+block that owns it, and it does not move during its lifetime.
+
+Single location descriptions are of two kinds:
+\begin{enumerate}[a]
+\item Simple location descriptions, which describe the location
+of one contiguous piece (usually all) of an object. A simple
+location description may describe a location in addressable
+memory, or in a register, or the lack of a location (with or
+without a known value).
+
+\item  Composite location descriptions, which describe an
+object in terms of pieces each of which may be contained in
+part of a register or stored in a memory location unrelated
+to other pieces.
+
+\end{enumerate}
+\item \textit{Location lists}, which are used to describe
+objects that have a limited lifetime or change their location
+during their lifetime. Location lists are more completely
+described below.
+
+\end{enumerate}
+
+The two forms are distinguished in a context sensitive
+manner. As the value of an attribute, a location description
+is encoded using class \livelink{exprloc}{chap:exprloc}  
+FIXME HYPERREF WRONG
+and a location list is encoded
+using class loclistptr (which serves as an offset into a
+separate location list table).
+
+
+\subsection{Single Location Descriptions}
+A single location description is either:
+
+\begin{enumerate}[1]
+\item A simple location description, representing an object
+which exists in one contiguous piece at the given location, or 
+\item A composite location description consisting of one or more
+simple location descriptions, each of which is followed by
+one composition operation. Each simple location description
+describes the location of one piece of the object; each
+composition operation describes which part of the object is
+located there. Each simple location description that is a
+DWARF expression is evaluated independently of any others
+(as though on its own separate stack, if any). 
+\end{enumerate}
+
+
+
+\subsubsection{Simple Location Descriptions}
+
+A simple location description consists of one 
+contiguous piece or all of an object or value.
+
+
+\paragraph{Memory Location Descriptions}
+
+A memory location description consists of a non\dash empty DWARF
+expression (see 
+Section \refersec{chap:dwarfexpressions}
+), whose value is the address of
+a piece or all of an object or other entity in memory.
+
+\paragraph{Register Location Descriptions}
+
+A register location description consists of a register name
+operation, which represents a piece or all of an object
+located in a given register.
+
+\textit{Register location descriptions describe an object
+(or a piece of an object) that resides in a register, while
+the opcodes listed in 
+Section \refersec{chap:registerbasedaddressing}
+are used to describe an object (or a piece of
+an object) that is located in memory at an address that is
+contained in a register (possibly offset by some constant). A
+register location description must stand alone as the entire
+description of an object or a piece of an object.
+}
+
+The following DWARF operations can be used to name a register.
+
+
+\textit{Note that the register number represents a DWARF specific
+mapping of numbers onto the actual registers of a given
+architecture. The mapping should be chosen to gain optimal
+density and should be shared by all users of a given
+architecture. It is recommended that this mapping be defined
+by the ABI authoring committee for each architecture.
+}
+\begin{enumerate}[1]
+\item DW\_OP\_reg0, DW\_OP\_reg1, ..., DW\_OP\_reg31 \\
+The DW\_OP\_regn operations encode the names of up to 32
+registers, numbered from 0 through 31, inclusive. The object
+addressed is in register n.
+
+\item DW\_OP\_regx \\
+The DW\_OP\_regx operation has a single unsigned LEB128 literal
+operand that encodes the name of a register.  
+\end{enumerate}
+
+\textit{These operations name a register location. To
+fetch the contents of a register, it is necessary to use
+one of the register based addressing operations, such as
+DW\_OP\_bregx 
+(Section \refersec{chap:registerbasedaddressing})}.
+
+
+\paragraph{Implicit Location Descriptions}
+
+An implicit location description represents a piece or all
+of an object which has no actual location but whose contents
+are nonetheless either known or known to be undefined.
+
+The following DWARF operations may be used to specify a value
+that has no location in the program but is a known constant
+or is computed from other locations and values in the program.
+
+The following DWARF operations may be used to specify a value
+that has no location in the program but is a known constant
+or is computed from other locations and values in the program.
+
+\begin{enumerate}[1]
+\item DW\_OP\_implicit\_value \\
+The DW\_OP\_implicit\_value operation specifies an immediate value
+using two operands: an unsigned LEB128 length, followed by
+a block representing the value in the memory representation
+of the target machine. The length operand gives the length
+in bytes of the block.
+
+\item DW\_OP\_stack\_value \\
+The DW\_OP\_stack\_value operation specifies that the object
+does not exist in memory but its value is nonetheless known
+and is at the top of the DWARF expression stack. In this form
+of location description, the DWARF expression represents the
+actual value of the object, rather than its location. The
+DW\_OP\_stack\_value operation terminates the expression.
+\end{enumerate}
+
+
+\paragraph{Empty Location Descriptions}
+
+An empty location description consists of a DWARF expression
+containing no operations. It represents a piece or all of an
+object that is present in the source but not in the object code
+(perhaps due to optimization).
+
+\subsubsection{Composite Location Descriptions}
+A composite location description describes an object or
+value which may be contained in part of a register or stored
+in more than one location. Each piece is described by a
+composition operation, which does not compute a value nor
+store any result on the DWARF stack. There may be one or
+more composition operations in a single composite location
+description. A series of such operations describes the parts
+of a value in memory address order.
+
+Each composition operation is immediately preceded by a simple
+location description which describes the location where part
+of the resultant value is contained.
+
+\begin{enumerate}[1]
+\item DW\_OP\_piece \\
+The DW\_OP\_piece operation takes a single operand, which is an
+unsigned LEB128 number.  The number describes the size in bytes
+of the piece of the object referenced by the preceding simple
+location description. If the piece is located in a register,
+but does not occupy the entire register, the placement of
+the piece within that register is defined by the ABI.
+
+\textit{Many compilers store a single variable in sets of registers,
+or store a variable partially in memory and partially in
+registers. DW\_OP\_piece provides a way of describing how large
+a part of a variable a particular DWARF location description
+refers to. }
+
+\item DW\_OP\_bit\_piece \\
+The DW\_OP\_bit\_piece operation takes two operands. The first
+is an unsigned LEB128 number that gives the size in bits
+of the piece. The second is an unsigned LEB128 number that
+gives the offset in bits from the location defined by the
+preceding DWARF location description.  
+
+Interpretation of the
+offset depends on the kind of location description. If the
+location description is empty, the offset doesn’t matter and
+the DW\_OP\_bit\_piece operation describes a piece consisting
+of the given number of bits whose values are undefined. If
+the location is a register, the offset is from the least
+significant bit end of the register. If the location is a
+memory address, the DW\_OP\_bit\_piece operation describes a
+sequence of bits relative to the location whose address is
+on the top of the DWARF stack using the bit numbering and
+direction conventions that are appropriate to the current
+language on the target system. If the location is any implicit
+value or stack value, the DW\_OP\_bit\_piece operation describes
+a sequence of bits using the least significant bits of that
+value.  
+\end{enumerate}
+
+\textit{DW\_OP\_bit\_piece is used instead of DW\_OP\_piece when
+the piece to be assembled into a value or assigned to is not
+byte-sized or is not at the start of a register or addressable
+unit of memory.}
+
+
+
+
+\subsubsection{Example Single Location Descriptions}
+
+Here are some examples of how DWARF operations are used to form location descriptions:
+
+DW\_OP\_reg3
+\begin{myindentpara}{1cm}
+The value is in register 3.
+\end{myindentpara}
+
+DW\_OP\_regx 54
+\begin{myindentpara}{1cm}
+The value is in register 54.
+\end{myindentpara}
+
+DW\_OP\_addr 0x80d0045c
+\begin{myindentpara}{1cm}
+The value of a static variable is at machine address 0x80d0045c.
+\end{myindentpara}
+
+DW\_OP\_breg11 44
+\begin{myindentpara}{1cm}
+Add 44 to the value in register 11 to get the address of an automatic
+variable instance.
+\end{myindentpara}
+
+DW\_OP\_fbreg -50
+\begin{myindentpara}{1cm}
+Given a DW\_AT\_frame\_base value of ``DW\_OP\_breg31 64,''this example
+computes the address of a local variable that is -50 bytes from a
+logical frame pointer that is computed by adding 64 to the current
+stack pointer (register 31).
+\end{myindentpara}
+
+DW\_OP\_bregx 54 32 DW\_OP\_deref
+\begin{myindentpara}{1cm}
+A call-by-reference parameter whose address is in the word 32 bytes
+from where register 54 points.
+\end{myindentpara}
+
+DW\_OP\_plus\_uconst 4
+\begin{myindentpara}{1cm}
+A structure member is four bytes from the start of the structure
+instance. The base address is assumed to be already on the stack.
+\end{myindentpara}
+
+DW\_OP\_reg3 DW\_OP\_piece 4 DW\_OP\_reg10 DW\_OP\_piece 2
+\begin{myindentpara}{1cm}
+A variable whose first four bytes reside in register 3 and whose next
+two bytes reside in register 10.
+\end{myindentpara}
+
+DW\_OP\_reg0 DW\_OP\_piece 4 DW\_OP\_piece 4 DW\_OP\_fbreg -12 DW\_OP\_piece 4
+\begin{myindentpara}{1cm}
+A twelve byte value whose first four bytes reside in register zero,
+whose middle four bytes are unavailable (perhaps due to optimization),
+and whose last four bytes are in memory, 12 bytes before the frame
+base.
+\end{myindentpara}
+
+DW\_OP\_breg1 0 DW\_OP\_breg2 0 DW\_OP\_plus DW\_OP\_stack\_value
+\begin{myindentpara}{1cm}
+Add the contents of r1 and r2 to compute a value. This value is the
+“contents” of an otherwise anonymous location.
+\end{myindentpara}
+
+DW\_OP\_lit1 DW\_OP\_stack\_value DW\_OP\_piece a \\
+DW\_OP\_breg3 0 DW\_OP\_breg4 0 DW\_OP\_plus DW\_OP\_stack\_value DW\_OP\_piece 4
+\begin{myindentpara}{1cm}
+The object value is found in an anonymous (virtual) location whose
+value consists of two parts, given in memory address order: the 4 byte
+value 1 followed by the four byte value computed from the sum of the
+contents of r3 and r4.
+\end{myindentpara}
+
+
+\subsection{Location Lists}
+\label{chap:locationlists}
+Location lists are used in place of location expressions
+whenever the object whose location is being described
+can change location during its lifetime. Location lists
+are contained in a separate object file section called
+.debug\_loc. A location list is indicated by a location
+attribute whose value is an offset from the beginning of
+the .debug\_loc section to the first byte of the list for the
+object in question.
+
+Each entry in a location list is either a location list entry,
+a base address selection entry, or an end of list entry.
+
+A location list entry consists of:
+
+\begin{enumerate}[1]
+\item A beginning address offset. 
+This address offset has the size of an address and is
+relative to the applicable base address of the compilation
+unit referencing this location list. It marks the beginning
+of the address range over which the location is valid.
+
+\item An ending address offset.  This address offset again
+has the size of an address and is relative to the applicable
+base address of the compilation unit referencing this location
+list. It marks the first address past the end of the address
+range over which the location is valid. The ending address
+must be greater than or equal to the beginning address.
+
+\textit{A location list entry (but not a base address selection or end of list entry) whose beginning
+and ending addresses are equal has no effect because the size of the range covered by such
+an entry is zero.}
+
+\item A single location description 
+describing the location of the object over the range specified by
+the beginning and end addresses.
+\end{enumerate}
+
+The applicable base address of a location list entry is
+determined by the closest preceding base address selection
+entry (see below) in the same location list. If there is
+no such selection entry, then the applicable base address
+defaults to the base address of the compilation unit (see
+Section \refersec{chap:normalandpartialcompilationunitentries}).  
+In the case of a compilation unit where all of
+the machine code is contained in a single contiguous section,
+no base address selection entry is needed.
+
+Address ranges may overlap. When they do, they describe a
+situation in which an object exists simultaneously in more than
+one place. If all of the address ranges in a given location
+list do not collectively cover the entire range over which the
+object in question is defined, it is assumed that the object is
+not available for the portion of the range that is not covered.
+
+A base address selection entry consists of:
+\begin{enumerate}[1]
+\item The value of the largest representable 
+address offset (for example, 0xffffffff when the size of
+an address is 32 bits).
+\item An address, which defines the 
+appropriate base address for use in interpreting the beginning
+and ending address offsets of subsequent entries of the location list.
+\end{enumerate}
+
+
+\textit{A base address selection entry 
+affects only the list in which it is contained.}
+
+The end of any given location list is marked by an end of
+list entry, which consists of a 0 for the beginning address
+offset and a 0 for the ending address offset. A location list
+containing only an end of list entry describes an object that
+exists in the source code but not in the executable program.
+
+Neither a base address selection entry nor an end of list
+entry includes a location description.
+
+\textit{A base address selection entry and an end of list
+entry for a location list are identical to a base address
+selection entry and end of list entry, respectively, for a
+range list 
+(see Section \refersec{chap:noncontiguousaddressranges}) 
+in interpretation
+and representation.}
+
+
+
+
+
+
+\section{Types of Program Entities}
+\label{chap:typesofprogramentities}
+Any debugging information entry describing a declaration that
+has a type has a DW\-\_AT\-\_type attribute, whose value is a
+reference to another debugging information entry. The entry
+referenced may describe a base type, that is, a type that is
+not defined in terms of other data types, or it may describe a
+user-defined type, such as an array, structure or enumeration.
+Alternatively, the entry referenced may describe a type
+modifier, such as constant, packed, pointer, reference or
+volatile, which in turn will reference another entry describing
+a type or type modifier (using a DW\-\_AT\-\_type attribute of its
+own). See 
+Section  \refersec{chap:typeentries} 
+for descriptions of the entries describing
+base types, user-defined types and type modifiers.
+
+
+
+\section{Accessibility of Declarations}
+\label{chap:accessibilityofdeclarations}
+\textit{Some languages, notably C++ and Ada, have the concept of
+the accessibility of an object or of some other program
+entity. The accessibility specifies which classes of other
+program objects are permitted access to the object in question.}
+
+The accessibility of a declaration is represented by a DW\_AT\_accessibility attribute, whose
+value is a constant drawn from the set of codes listed in Figure 
+\ref{fig:accessibilitycodes}.
+
+\begin{figure}[here]
+\begin{description}
+\centering
+\item [DW\_ACCESS\_public]
+\item [DW\_ACCESS\_private]
+\item [DW\_ACCESS\_protected]
+\end{description}
+\caption{Accessibility codes}
+\label{fig:accessibilitycodes}
+\end{figure}
+
+\section{Visibility of Declarations}
+\label{chap:visibilityofdeclarations}
+
+\textit{Several languages (such as Modula-2) 
+have the concept of the visibility of a declaration. The
+visibility specifies which declarations are to be 
+visible outside of the entity in which they are
+declared.}
+
+The visibility of a declaration is represented 
+by a DW\_AT\_visibility attribute, whose value is a
+constant drawn from the set of codes listed in 
+Figure \ref{fig:visibilitycodes}.
+
+\begin{figure}[here]
+\begin{description}
+\centering
+\item [DW\_VIS\_local]
+\item [DW\_VIS\_exported]
+\item [DW\_VIS\_qualified]
+\end{description}
+\caption{Visibility codes}
+\label{fig:visibilitycodes}
+\end{figure}
+
+\section{Virtuality of Declarations}
+\label{chap:virtualityofdeclarations}
+\textit{C++ provides for virtual and pure virtual structure or class
+member functions and for virtual base classes.}
+
+The virtuality of a declaration is represented by a
+DW\_AT\_virtuality attribute, whose value is a constant drawn
+from the set of codes listed in 
+Figure \ref{fig:virtualitycodes}.
+
+\begin{figure}[here]
+\begin{description}
+\centering
+\item [DW\_VIRTUALITY\_none]
+\item [DW\_VIRTUALITY\_virtual]
+\item [DW\_VIRTUALITY\_pure\_virtual]
+\end{description}
+\caption{Virtuality codes}
+\label{fig:virtualitycodes}
+\end{figure}
+
+\section{Artificial Entries}
+\label{chap:artificialentries}
+\textit{A compiler may wish to generate debugging information entries
+for objects or types that were not actually declared in the
+source of the application. An example is a formal parameter
+entry to represent the hidden this parameter that most C++
+implementations pass as the first argument to non-static member
+functions.}  
+
+Any debugging information entry representing the
+declaration of an object or type artificially generated by
+a compiler and not explicitly declared by the source program
+may have a DW\_AT\_artificial attribute, which is a flag.
+
+\section{Segmented Addresses}
+\label{chap:segmentedaddresses}
+\textit{In some systems, addresses are specified as offsets within a
+given segment rather than as locations within a single flat
+address space.}
+
+Any debugging information entry that contains a description
+of the location of an object or subroutine may have
+a DW\_AT\_segment attribute, whose value is a location
+description. The description evaluates to the segment selector
+of the item being described. If the entry containing the
+DW\_AT\_segment attribute has a DW\_AT\_low\_pc, DW\_AT\_high\_pc,
+DW\_AT\_ranges or DW\_AT\_entry\_pc attribute, or a location
+description that evaluates to an address, then those address
+values represent the offset portion of the address within
+the segment specified by DW\_AT\_segment.
+
+If an entry has no DW\_AT\_segment attribute, it inherits
+the segment value from its parent entry.  If none of the
+entries in the chain of parents for this entry back to
+its containing compilation unit entry have DW\_AT\_segment
+attributes, then the entry is assumed to exist within a flat
+address space. Similarly, if the entry has a DW\_AT\_segment
+attribute containing an empty location description, that
+entry is assumed to exist within a flat address space.
+
+\textit{Some systems support different classes of addresses. The
+address class may affect the way a pointer is dereferenced
+or the way a subroutine is called.}
+
+
+Any debugging information entry representing a pointer or
+reference type or a subroutine or subroutine type may have
+a DW\_AT\_address\_class attribute, whose value is an integer
+constant.  The set of permissible values is specific to
+each target architecture. The value DW\_ADDR\_none, however,
+is common to all encodings, and means that no address class
+has been specified.
+
+\textit {For example, the Intel386 ™ processor might use the following values:}
+
+\begin{figure}[here]
+\centering
+\begin{tabular}{lll} 
+Name&Value&Meaning  \\
+\hline
+\textit{DW\_ADDR\_none}&   0 & \textit{no class specified} \\
+\textit{DW\_ADDR\_near16}& 1 & \textit{16\dash bit offset, no segment} \\
+\textit{DW\_ADDR\_far16}&  2 & \textit{16\dash bit offset, 16\dash bit segment} \\
+\textit{DW\_ADDR\_huge16}& 3 & \textit{16\dash bit offset, 16\dash bit segment} \\
+\textit{DW\_ADDR\_near32}& 4 & \textit{32\dash bit offset, no segment} \\
+\textit{DW\_ADDR\_far32}&  5 & \textit{32\dash bit offset, 16\dash bit segment}
+\end{tabular}
+\caption{Example address class codes}
+\label{fig:inteladdressclasstable}
+\end{figure}
+
+\section{Non-Defining Declarations and Completions}
+\label{nondefiningdeclarationsandcompletions}
+A debugging information entry representing a program entity
+typically represents the defining declaration of that
+entity. In certain contexts, however, a debugger might need
+information about a declaration of an entity that is not
+also a definition, or is otherwise incomplete, to evaluate
+an expression correctly.
+
+\textit{As an example, consider the following fragment of C code:}
+
+\begin{lstlisting}
+void myfunc()
+{
+  int x;
+  {
+    extern float x;
+    g(x);
+  }
+}
+\end{lstlisting}
+
+
+\textit{C scoping rules require that the 
+value of the variable x passed to the function g is the value of the
+global variable x rather than of the local version.}
+
+
+\section{Declaration Coordinates}
+\label{chap:declarationcoordinates}
+\textit{It is sometimes useful in a debugger to be able to associate
+a declaration with its occurrence in the program source.
+}
+
+Any debugging information entry representing the
+declaration of an object, module, subprogram or type may have
+DW\_AT\_decl\_file, DW\_AT\_decl\_line and DW\_AT\_decl\_column
+attributes each of whose value is an unsigned integer constant.
+
+The value of the DW\_AT\_decl\_file attribute corresponds to
+a file number from the line number information table for the
+compilation unit containing the debugging information entry and
+represents the source file in which the declaration appeared
+(see Section 6.2). The value 0 indicates that no source file
+has been specified.
+
+The value of the DW\_AT\_decl\_line attribute represents
+the source line number at which the first character of
+the identifier of the declared object appears. The value 0
+indicates that no source line has been specified.
+
+The value of the DW\_AT\_decl\_column attribute represents
+the source column number at which the first character of
+the identifier of the declared object appears. The value 0
+indicates that no column has been specified.
+
+\section{Identifier Names}
+\label{chap:identifiernames}
+Any debugging information entry representing a program entity
+that has been given a name may have a DW\_AT\_name attribute,
+whose value is a string representing the name as it appears in
+the source program. A debugging information entry containing
+no name attribute, or containing a name attribute whose value
+consists of a name containing a single null byte, represents
+a program entity for which no name was given in the source.
+
+\textit{Because the names of program objects described by DWARF are the
+names as they appear in the source program, implementations
+of language translators that use some form of mangled name
+(as do many implementations of C++) should use the unmangled
+form of the name in the DWARF DW\_AT\_name attribute,
+including the keyword operator (in names such as “operator
++”), if present. See also 
+Section \refersec{chap:linkagenames} regarding the use
+of DW\_AT\_linkage\_name for mangled names. Sequences of
+multiple whitespace characters may be compressed.}
+
+\section{Data Locations and DWARF Procedures}
+Any debugging information entry describing a data object (which
+includes variables and parameters) or common block may have a
+DW\_AT\_location attribute, whose value is a location description
+(see Section 2.6).  
+
+A DWARF procedure is represented by any
+kind of debugging information entry that has a DW\-\_AT\-\_location
+attribute. If a suitable entry is not otherwise available,
+a DWARF procedure can be represented using a debugging
+information entry with the tag DW\-\_TAG\-\_dwarf\-\_procedure
+together with a DW\-\_AT\-\_location attribute.  
+
+A DWARF procedure
+is called by a DW\-\_OP\-\_call2, 
+DW\-\_OP\-\_call4 or 
+DW\-\_OP\-\_call\-\_ref
+DWARF expression operator 
+(see Section \refersec{chap:controlflowoperations}).
+
+\section{Code Addresses and Ranges}
+\label{chap:codeaddressesandranges}
+Any debugging information entry describing an entity that has
+a machine code address or range of machine code addresses,
+which includes compilation units, module initialization,
+subroutines, ordinary blocks, try/catch blocks, labels and
+the like, may have
+
+\begin{itemize}
+\item A DW\_AT\_low\_pc and DW\_AT\_high\_pc pair of 
+attributes for a single contiguous range of
+addresses, or
+
+\item A DW\_AT\_ranges attribute for a non-contiguous range of addresses.
+\end{itemize}
+
+In addition, a non-contiguous range of 
+addresses may also be specified for the
+DW\_AT\_start\_scope attribute.
+If an entity has no associated machine code, 
+none of these attributes are specified.
+
+\subsection{Single Address} 
+When there is a single address associated with an entity,
+such as a label or alternate entry point of a subprogram,
+the entry has a DW\_AT\_low\_pc attribute whose value is the
+relocated address for the entity.  While the DW\_AT\_entry\_pc
+attribute might also seem appropriate for this purpose,
+historically the DW\_AT\_low\_pc attribute was used before the
+DW\_AT\_entry\_pc was introduced (in DWARF Version 3). There is
+insufficient reason to change this.
+
+\subsection{Continuous Address Range}
+\label{chap:contiguousaddressranges}
+When the set of addresses of a debugging information entry can
+be described as a single continguous range, the entry may have
+a DW\_AT\_low\_pc and DW\_AT\_high\_pc pair of attributes. The value
+of the DW\_AT\_low\_pc attribute is the relocated address of the
+first instruction associated with the entity. If the value of
+the DW\_AT\_high\_pc is of class address, it is the relocated
+address of the first location past the last instruction
+associated with the entity; if it is of class constant, the
+value is an unsigned integer offset which when added to the
+low PC gives the address of the first location past the last
+instruction associated with the entity.  The high PC value
+may be beyond the last valid instruction in the executable.
+The presence of low and high PC attributes for an entity
+implies that the code generated for the entity is contiguous
+and exists totally within the boundaries specified by those
+two attributes. If that is not the case, no low and high PC
+attributes should be produced.
+
+\subsection{Non\dash Contiguous Address Ranges}
+\label{chap:noncontiguousaddressranges}
+When the set of addresses of a debugging information entry
+cannot be described as a single contiguous range, the entry has
+a DW\_AT\_ranges attribute whose value is of class rangelistptr
+and indicates the beginning of a range list. Similarly,
+a DW\_AT\_start\_scope attribute may have a value of class
+rangelistptr for the same reason.  
+
+Range lists are contained
+in a separate object file section called .debug\_ranges. A
+range list is indicated by a DW\_AT\_ranges attribute whose
+value is represented as an offset from the beginning of the
+.debug\_ranges section to the beginning of the range list.
+
+Each entry in a range list is either a range list entry,
+a base address selection entry, or an end of list entry.
+
+A range list entry consists of:
+
+\begin{enumerate}[1]
+\item A beginning address offset. This address offset has the size of an address and is relative to
+the applicable base address of the compilation unit referencing this range list. It marks the
+beginning of an address range.
+
+\item An ending address offset. This address offset again has the size of an address and is relative
+to the applicable base address of the compilation unit referencing this range list. It marks the
+first address past the end of the address range.The ending address must be greater than or
+equal to the beginning address.
+
+\textit{A range list entry (but not a base address selection or end of list entry) whose beginning and
+ending addresses are equal has no effect because the size of the range covered by such an
+entry is zero.}
+\end{enumerate}
+
+The applicable base address of a range list entry is determined
+by the closest preceding base address selection entry (see
+below) in the same range list. If there is no such selection
+entry, then the applicable base address defaults to the base
+address of the compilation unit 
+(see Section \refersec{chap:normalandpartialcompilationunitentries}).
+
+\textit{In the case of a compilation unit where all of the machine
+code is contained in a single contiguous section, no base
+address selection entry is needed.}
+
+Address range entries in
+a range list may not overlap. There is no requirement that
+the entries be ordered in any particular way.
+
+A base address selection entry consists of:
+
+\begin{enumerate}[1]
+\item The value of the largest representable address offset (for example, 0xffffffff when the size of
+an address is 32 bits).
+
+\item An address, which defines the appropriate base address for use in interpreting the beginning
+and ending address offsets of subsequent entries of the location list.
+\end{enumerate}
+\textit{A base address selection entry 
+affects only the list in which it is contained.}
+
+
+The end of any given range list is marked by an end of
+list entry, which consists of a 0 for the beginning address
+offset and a 0 for the ending address offset. A range list
+containing only an end of list entry describes an empty scope
+(which contains no instructions).
+
+\textit{A base address selection entry and an end of list entry for
+a range list are identical to a base address selection entry
+and end of list entry, respectively, for a location list
+(see Section 2.6.2) in interpretation and representation.}
+
+
+
+\section{Entry Address}
+\label{chap:entryaddress}
+\textit{The entry or first executable instruction generated
+for an entity, if applicable, is often the lowest addressed
+instruction of a contiguous range of instructions. In other
+cases, the entry address needs to be specified explicitly.}
+
+Any debugging information entry describing an entity that has
+a range of code addresses, which includes compilation units,
+module initialization, subroutines, ordinary blocks, try/catch
+blocks, and the like, may have a DW\_AT\_entry\_pc attribute to
+indicate the first executable instruction within that range
+of addresses. The value of the DW\_AT\_entry\_pc attribute is a
+relocated address. If no DW\_AT\_entry\_pc attribute is present,
+then the entry address is assumed to be the same as the
+value of the DW\_AT\_low\_pc attribute, if present; otherwise,
+the entry address is unknown.
+
+\section{Static and Dynamic Values of Attributes}
+\label{chap:staticanddynamicvaluesofattributes}
+
+Some attributes that apply to types specify a property (such
+as the lower bound of an array) that is an integer value,
+where the value may be known during compilation or may be
+computed dynamically during execution.  The value of these
+attributes is determined based on the class as follows:
+
+\begin{itemize}
+\item For a constant FIXME HYPERRREF, the value of the constant is the value of
+the attribute.
+
+\item For a reference FIXME HYPERRREF, the value is a reference to another
+entity which specifies the value of the attribute.
+
+\item For an exprloc, the value is interpreted as a 
+DWARF expression FIXME HYPERREF; 
+evaluation of the expression yields the value of
+the attribute.
+\end{itemize}
+
+\textit{
+Whether an attribute value can be dynamic depends on the
+rules of the applicable programming language.
+}
+
+\textit{The applicable attributes include: 
+DW\-\_AT\-\_allocated,
+DW\-\_AT\-\_associated, 
+DW\-\_AT\-\_bit\-\_offset, 
+DW\-\_AT\-\_bit\-\_size,
+DW\-\_AT\-\_byte\-\_size, 
+DW\-\_AT\-\_count, 
+DW\-\_AT\-\_lower\-\_bound,
+DW\-\_AT\-\_byte\-\_stride, 
+DW\-\_AT\-\_bit\-\_stride, 
+DW\-\_AT\-\_upper\-\_bound (and
+possibly others).}
+
+
+\section{Entity Descriptions}
+\textit{Some debugging information entries may describe entities
+in the program that are artificial, or which otherwise are
+``named'' in ways which are not valid identifiers in the
+programming language. For example, several languages may
+capture or freeze the value of a variable at a particular
+point in the program. Ada 95 has package elaboration routines,
+type descriptions of the form typename’Class, and 
+``access typename'' parameters.  }
+
+Generally, any debugging information
+entry that has, or may have, a DW\_AT\_name attribute, may
+also have a DW\_AT\_description attribute whose value is a
+null-terminated string providing a description of the entity.
+
+
+\textit{It is expected that a debugger will only display these
+descriptions as part of the description of other entities. It
+should not accept them in expressions, nor allow them to be
+assigned, or the like.}
+
+\section{Byte and Bit Sizes}
+\label{chap:byteandbitsizes}
+% Some trouble here with hbox full, so we try optional word breaks.
+Many debugging information entries allow either a
+DW\-\_AT\-\_byte\-\_size attribute or a DW\-\_AT\-\_bit\-\_size attribute,
+whose integer constant value 
+(see \refersec{chap:staticanddynamicvaluesofattributes}) 
+specifies an
+amount of storage. The value of the DW\_AT\_byte\_size attribute
+is interpreted in bytes and the value of the DW\_AT\_bit\_size
+attribute is interpreted in bits.  
+
+Similarly, the integer
+constant value of a DW\_AT\_byte\_stride attribute is interpreted
+in bytes and the integer constant value of a DW\_AT\_bit\_stride
+attribute is interpreted in bits.
+
+\section{Linkage Names}
+\label{chap:linkagenames}
+\textit{Some language implementations, notably C++ and similar
+languages, make use of implementation defined names within
+object files that are different from the identifier names
+(see \refersec{chap:identifiernames}) of entities as they appear in the
+source. Such names, sometimes known as mangled names,
+are used in various ways, such as: to encode additional
+information about an entity, to distinguish multiple entities
+that have the same name, and so on. When an entity has an
+associated distinct linkage name it may sometimes be useful
+for a producer to include this name in the DWARF description
+of the program to facilitate consumer access to and use of
+object file information about an entity and/or information
+that is encoded in the linkage name itself.  
+}
+
+% Some trouble maybe with hbox full, so we try optional word breaks.
+A debugging
+information entry may have a DW\-\_AT\-\_linkage\-\_name attribute
+whose value is a null-terminated string describing the object
+file linkage name associated with the corresponding entity.
+
+% Some trouble here with hbox full, so we try optional word breaks.
+\textit{Debugging information entries to which DW\-\_AT\-\_linkage\-\_name
+may apply include: DW\-\_TAG\-\_common\-\_block, DW\-\_TAG\-\_constant,
+DW\-\_TAG\-\_entry\-\_point, DW\-\_TAG\-\_subprogram 
+and DW\-\_TAG\-\_variable.
+}
diff --git a/dwarf5/latexdoc/gnulicense.tex b/dwarf5/latexdoc/gnulicense.tex
new file mode 100644 (file)
index 0000000..53a019f
--- /dev/null
@@ -0,0 +1,498 @@
+\chapter{GNU Free Documentation License}
+\label{app:gnufreedocumentationlicense}
+\section{PREAMBLE}
+The purpose of this License is to make a manual, textbook,
+or other functional and useful document free in the sense of
+freedom: to assure everyone the effective freedom to copy
+and redistribute it, with or without modifying it, either
+commercially or noncommercially. Secondarily, this License
+preserves for the author and publisher a way to get credit
+for their work, while not being considered responsible for
+modifications made by others.
+
+This License is a kind of “copyleft”, which means that
+derivative works of the document must themselves be free in
+the same sense. It complements the GNU General Public License,
+which is a copyleft license designed for free software.
+
+We have designed this License in order to use it for
+manuals for free software, because free software needs free
+documentation: a free program should come with manuals
+providing the same freedoms that the software does. But
+this License is not limited to software manuals; it can be
+used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this
+License principally for works whose purpose is instruction
+or reference.  
+
+\section{APPLICABILITY AND DEFINITIONS}
+This License applies to any manual or other work, in any
+medium, that contains a notice placed by the copyright
+holder saying it can be distributed under the terms of this
+License. Such a notice grants a world-wide, royalty-free
+license, unlimited in duration, to use that work under
+the conditions stated herein. The “Document”, below,
+refers to any such manual or work. Any member of the public
+is a licensee, and is addressed as “you”. You accept the
+license if you copy, modify or distribute the work in a way
+requiring permission under copyright law.
+
+A “Modified Version” of the Document means any work
+containing the Document or a portion of it, either copied
+verbatim, or with modifications and/or translated into
+another language.
+
+A “Secondary Section” is a named appendix or a
+front-matter section of the Document that deals exclusively
+with the relationship of the publishers or authors of the
+Document to the Document’s overall subject (or to related
+matters) and contains nothing that could fall directly
+within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not
+explain any mathematics.) The relationship could be a matter
+of historical connection with the subject or with related
+matters, or of legal, commercial, philosophical, ethical or
+political position regarding them.
+
+The “Invariant Sections” are certain Secondary Sections
+whose titles are designated, as being those of Invariant
+Sections, in the notice that says that the Document is
+released under this License. If a section does not fit the
+above definition of Secondary then it is not allowed to
+be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any
+Invariant Sections then there are none.
+
+The “Cover Texts” are certain short passages of text
+that are listed, as Front-Cover Texts or Back-Cover Texts,
+in the notice that says that the Document is released under
+this License. A Front-Cover Text may be at most 5 words,
+and a Back-Cover Text may be at most 25 words.
+
+A “Transparent” copy of the Document means a
+machine-readable copy, represented in a format whose
+specification is available to the general public, that is
+suitable for revising the document straightforwardly with
+generic text editors or (for images composed of pixels)
+generic paint programs or (for drawings) some widely
+available drawing editor, and that is suitable for input to
+text formatters or for automatic translation to a variety of
+formats suitable for input to text formatters. A copy made in
+an otherwise Transparent file format whose markup, or absence
+of markup, has been arranged to thwart or discourage subsequent
+modification by readers is not Transparent. An image format is
+not Transparent if used for any substantial amount of text. A
+copy that is not “Transparent” is called “Opaque”.
+
+Examples of suitable formats for Transparent copies include
+plain ASCII without markup, Texinfo input format, LaTeX
+input format, SGML or XML using a publicly available DTD, and
+standard-conforming simple HTML, PostScript or PDF designed
+for human modification. Examples of transparent image formats
+include PNG, XCF and JPG. Opaque formats include proprietary
+formats that can be read and edited only by proprietary word
+processors, SGML or XML for which the DTD and/or processing
+tools are not generally available, and the machine-generated
+HTML, PostScript or PDF produced by some word processors for
+output purposes only.
+
+The “Title Page” means, for a printed book, the title
+page itself, plus such following pages as are needed to hold,
+legibly, the material this License requires to appear in the
+title page. For works in formats which do not have any title
+page as such, “Title Page” means the text near the most
+prominent appearance of the work’s title, preceding the
+beginning of the body of the text.
+
+The “publisher” means any person or entity that distributes
+copies of the Document to the public.
+
+A section “Entitled XYZ” means a named subunit of the
+Document whose title either is precisely XYZ or contains
+XYZ in parentheses following text that translates XYZ in
+another language. (Here XYZ stands for a specific section
+name mentioned below, such as “Acknowledgements”,
+“Dedications”, “Endorsements”, or “History”.) To
+“Preserve the Title” of such a section when you modify
+the Document means that it remains a section “Entitled
+XYZ” according to this definition.
+
+The Document may include Warranty Disclaimers next to
+the notice which states that this License applies to the
+Document. These Warranty Disclaimers are considered to be
+included by reference in this License, but only as regards
+disclaiming warranties: any other implication that these
+Warranty Disclaimers may have is void and has no effect on
+the meaning of this License.
+
+\section{VERBATIM COPYING}
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License,
+the copyright notices, and the license notice saying this
+License applies to the Document are reproduced in all copies,
+and that you add no other conditions whatsoever to those of
+this License. You may not use technical measures to obstruct
+or control the reading or further copying of the copies you
+make or distribute. However, you may accept compensation in
+exchange for copies. If you distribute a large enough number
+of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated
+above, and you may publicly display copies.
+
+
+\section{COPYING IN QUANTITY}
+
+If you publish printed copies (or copies in media that commonly
+have printed covers) of the Document, numbering more than 100,
+and the Document’s license notice requires Cover Texts,
+you must enclose the copies in covers that carry, clearly and
+legibly, all these Cover Texts: Front-Cover Texts on the front
+cover, and Back-Cover Texts on the back cover. Both covers
+must also clearly and legibly identify you as the publisher
+of these copies. The front cover must present the full title
+with all words of the title equally prominent and visible. You
+may add other material on the covers in addition. Copying with
+changes limited to the covers, as long as they preserve the
+title of the Document and satisfy these conditions, can be
+treated as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to
+fit legibly, you should put the first ones listed (as many
+as fit reasonably) on the actual cover, and continue the rest
+onto adjacent pages.
+
+If you publish or distribute Opaque copies of the
+Document numbering more than 100, you must either include
+a machine-readable Transparent copy along with each Opaque
+copy, or state in or with each Opaque copy a computer-network
+location from which the general network-using public has access
+to download using public-standard network protocols a complete
+Transparent copy of the Document, free of added material. If
+you use the latter option, you must take reasonably prudent
+steps, when you begin distribution of Opaque copies in
+quantity, to ensure that this Transparent copy will remain
+thus accessible at the stated location until at least one year
+after the last time you distribute an Opaque copy (directly
+or through your agents or retailers) of that edition to
+the public.
+
+It is requested, but not required, that you contact the authors
+of the Document well before redistributing any large number of
+copies, to give them a chance to provide you with an updated
+version of the Document.
+
+
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document
+under the conditions of sections 2 and 3 above, provided that
+you release the Modified Version under precisely this License,
+with the Modified Version filling the role of the Document,
+thus licensing distribution and modification of the Modified
+Version to whoever possesses a copy of it. In addition,
+you must do these things in the Modified Version:
+\begin{enumerate}
+\item    Use in the Title Page (and on the covers, if any)
+a title distinct from that of the Document, and from those of
+previous versions (which should, if there were any, be listed
+in the History section of the Document). You may use the same
+title as a previous version if the original publisher of that
+version gives permission.
+
+\item    List on the Title Page, as authors, one or more
+persons or entities responsible for authorship of the
+modifications in the Modified Version, together with at least
+five of the principal authors of the Document (all of its
+principal authors, if it has fewer than five), unless they
+release you from this requirement.
+
+\item    State on the Title page the name of the publisher of the Modified Version, as the publisher.
+
+\item    Preserve all the copyright notices of the Document.
+
+\item    Add an appropriate copyright notice for your
+modifications adjacent to the other copyright notices.
+
+\item    Include, immediately after the copyright notices,
+a license notice giving the public permission to use the
+Modified Version under the terms of this License, in the form
+shown in the Addendum below.
+
+\item    Preserve in that license notice the full lists of
+Invariant Sections and required Cover Texts given in the
+Document’s license notice.
+
+\item    Include an unaltered copy of this License.
+
+\item    Preserve the section Entitled “History”, Preserve
+its Title, and add to it an item stating at least the title,
+year, new authors, and publisher of the Modified Version
+as given on the Title Page. If there is no section Entitled
+“History” in the Document, create one stating the title,
+year, authors, and publisher of the Document as given on its
+Title Page, then add an item describing the Modified Version
+as stated in the previous sentence.
+
+\item    Preserve the network location, if any, given in
+the Document for public access to a Transparent copy of the
+Document, and likewise the network locations given in the
+Document for previous versions it was based on. These may be
+placed in the “History” section. You may omit a network
+location for a work that was published at least four years
+before the Document itself, or if the original publisher of
+the version it refers to gives permission.
+
+\item For any section Entitled “Acknowledgements”
+or “Dedications”, Preserve the Title of the section,
+and preserve in the section all the substance and tone of
+each of the contributor acknowledgements and/or dedications
+given therein.
+
+\item    Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers or
+the equivalent are not considered part of the section titles.
+
+\item    Delete any section Entitled “Endorsements”. Such
+a section may not be included in the Modified Version.
+
+\item    Do not retitle any existing section to be Entitled
+“Endorsements” or to conflict in title with any Invariant
+Section.
+
+\item    Preserve any Warranty Disclaimers. 
+\end{enumerate}
+
+If the Modified Version includes new front-matter sections
+or appendices that qualify as Secondary Sections and contain
+no material copied from the Document, you may at your option
+designate some or all of these sections as invariant. To do
+this, add their titles to the list of Invariant Sections in
+the Modified Version’s license notice. These titles must
+be distinct from any other section titles.
+
+You may add a section Entitled “Endorsements”, provided
+it contains nothing but endorsements of your Modified Version
+by various parties—for example, statements of peer review
+or that the text has been approved by an organization as the
+authoritative definition of a standard.
+
+You may add a passage of up to five words as a Front-Cover
+Text, and a passage of up to 25 words as a Back-Cover Text,
+to the end of the list of Cover Texts in the Modified
+Version. Only one passage of Front-Cover Text and one of
+Back-Cover Text may be added by (or through arrangements
+made by) any one entity. If the Document already includes a
+cover text for the same cover, previously added by you or by
+arrangement made by the same entity you are acting on behalf
+of, you may not add another; but you may replace the old one,
+on explicit permission from the previous publisher that added
+the old one.
+
+The author(s) and publisher(s) of the Document do not by this
+License give permission to use their names for publicity for
+or to assert or imply endorsement of any Modified Version.
+
+\section{COMBINING DOCUMENTS}
+
+You may combine the Document with other documents released
+under this License, under the terms defined in section 4
+above for modified versions, provided that you include in
+the combination all of the Invariant Sections of all of the
+original documents, unmodified, and list them all as Invariant
+Sections of your combined work in its license notice, and
+that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License,
+and multiple identical Invariant Sections may be replaced with
+a single copy. If there are multiple Invariant Sections with
+the same name but different contents, make the title of each
+such section unique by adding at the end of it, in parentheses,
+the name of the original author or publisher of that section
+if known, or else a unique number. Make the same adjustment
+to the section titles in the list of Invariant Sections in
+the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled
+“History” in the various original documents, forming
+one section Entitled “History”; likewise combine any
+sections Entitled “Acknowledgements”, and any sections
+Entitled “Dedications”. You must delete all sections
+Entitled “Endorsements.”
+
+\section{COLLECTIONS OF DOCUMENTS}
+
+You may make a collection consisting of the Document and
+other documents released under this License, and replace the
+individual copies of this License in the various documents
+with a single copy that is included in the collection, provided
+that you follow the rules of this License for verbatim copying
+of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and
+distribute it individually under this License, provided you
+insert a copy of this License into the extracted document,
+and follow this License in all other respects regarding
+verbatim copying of that document.
+
+\section{AGGREGATION WITH INDEPENDENT WORKS}
+
+A compilation of the Document or its derivatives with
+other separate and independent documents or works, in
+or on a volume of a storage or distribution medium, is
+called an “aggregate” if the copyright resulting from
+the compilation is not used to limit the legal rights of
+the compilation’s users beyond what the individual works
+permit. When the Document is included in an aggregate, this
+License does not apply to the other works in the aggregate
+which are not themselves derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to
+these copies of the Document, then if the Document is less
+than one half of the entire aggregate, the Document’s Cover
+Texts may be placed on covers that bracket the Document within
+the aggregate, or the electronic equivalent of covers if the
+Document is in electronic form. Otherwise they must appear
+on printed covers that bracket the whole aggregate.
+
+
+\section{TRANSLATION}
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of
+section 4. Replacing Invariant Sections with translations
+requires special permission from their copyright holders,
+but you may include translations of some or all Invariant
+Sections in addition to the original versions of these
+Invariant Sections. You may include a translation of this
+License, and all the license notices in the Document, and
+any Warranty Disclaimers, provided that you also include the
+original English version of this License and the original
+versions of those notices and disclaimers. In case of a
+disagreement between the translation and the original version
+of this License or a notice or disclaimer, the original
+version will prevail.
+
+If a section in the Document is Entitled
+“Acknowledgements”, “Dedications”, or “History”,
+the requirement (section 4) to Preserve its Title (section 1)
+will typically require changing the actual title.
+
+\section{TERMINATION}
+
+You may not copy, modify, sublicense, or distribute the
+Document except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, or distribute
+it is void, and will automatically terminate your rights
+under this License.
+
+However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly
+and finally terminates your license, and (b) permanently,
+if the copyright holder fails to notify you of the violation
+by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you
+of the violation by some reasonable means, this is the first
+time you have received notice of violation of this License
+(for any work) from that copyright holder, and you cure the
+violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not
+terminate the licenses of parties who have received copies
+or rights from you under this License. If your rights have
+been terminated and not permanently reinstated, receipt of
+a copy of some or all of the same material does not give you
+any rights to use it.
+
+\section{FUTURE REVISIONS OF THIS LICENSE}
+
+The Free Software Foundation may publish new, revised
+versions of the GNU Free Documentation License from time to
+time. Such new versions will be similar in spirit to the
+present version, but may differ in detail to address new
+problems or concerns. See http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version
+number. If the Document specifies that a particular numbered
+version of this License “or any later version” applies to
+it, you have the option of following the terms and conditions
+either of that specified version or of any later version
+that has been published (not as a draft) by the Free Software
+Foundation. If the Document does not specify a version number
+of this License, you may choose any version ever published
+(not as a draft) by the Free Software Foundation. If the
+Document specifies that a proxy can decide which future
+versions of this License can be used, that proxy’s public
+statement of acceptance of a version permanently authorizes
+you to choose that version for the Document.
+
+\section{RELICENSING}
+
+“Massive Multiauthor Collaboration Site” (or “MMC
+Site”) means any World Wide Web server that publishes
+copyrightable works and also provides prominent facilities for
+anybody to edit those works. A public wiki that anybody can
+edit is an example of such a server. A “Massive Multiauthor
+Collaboration” (or “MMC”) contained in the site means
+any set of copyrightable works thus published on the MMC site.
+
+“CC-BY-SA” means the Creative Commons Attribution-Share
+Alike 3.0 license published by Creative Commons Corporation, a
+not-for-profit corporation with a principal place of business
+in San Francisco, California, as well as future copyleft
+versions of that license published by that same organization.
+
+“Incorporate” means to publish or republish a Document,
+in whole or in part, as part of another Document.
+
+An MMC is “eligible for relicensing” if it is licensed
+under this License, and if all works that were first
+published under this License somewhere other than this MMC,
+and subsequently incorporated in whole or in part into the
+MMC, (1) had no cover texts or invariant sections, and (2)
+were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in
+the site under CC-BY-SA on the same site at any time before
+August 1, 2009, provided the MMC is eligible for relicensing.
+
+
+\textbf{ADDENDUM: How to use this License for your documents}
+
+To use this License in a document you have written, include
+a copy of the License in the document and put the following
+copyright and license notices just after the title page:
+
+\begin{myindentpara}{2cm}
+Copyright (C)  year  your name.
+Permission is granted to copy, distribute&n