I can load a XML document from a VBScript variable, perform some modifications but when I try to
save the updated XML document to a variable using the save() method, it does not work since this
method does not output to a variable;

Dim XMLDoc, xmlString
Set XMLDoc = CreateObject("msxml2.domdocument")
XMLDoc.async = vbFalse
XMLDoc.loadXML("<?xml version=""1.0""?><test>data</test>")
'
' code to add/update elements in XMLDoc
'
XMLDoc.save(xmlString)

I looked at the WriteTo() and WriteContentTo() methods as well but they do not store in a variable.

How can I save the updated XML document to a vbscript variable?

Thanks.

Re: How to save an XML doc to a variable? by Bob

Bob
Thu Mar 29 12:34:22 CDT 2007

Gaetan wrote:
> I can load a XML document from a VBScript variable, perform some
> modifications but when I try to save the updated XML document to a
> variable using the save() method, it does not work since this method
> does not output to a variable;
>
> Dim XMLDoc, xmlString
> Set XMLDoc = CreateObject("msxml2.domdocument")
> XMLDoc.async = vbFalse
> XMLDoc.loadXML("<?xml version=""1.0""?><test>data</test>")
> '
> ' code to add/update elements in XMLDoc
> '
> XMLDoc.save(xmlString)
>
> I looked at the WriteTo() and WriteContentTo() methods as well but
> they do not store in a variable.
>
> How can I save the updated XML document to a vbscript variable?
>
Excuse me, but XMLDoc IS a vbscript variable.

I suspect you meant to say: to a string variable, correct? In that case,
use the domdocument's xml property:

xmlString = XMLDoc.xml

--
Microsoft MVP -- ASP/ASP.NET
Please reply to the newsgroup. The email account listed in my From
header is my spam trap, so I don't check it very often. You will get a
quicker response by posting to the newsgroup.



Re: How to save an XML doc to a variable? by ekkehard

ekkehard
Thu Mar 29 12:46:50 CDT 2007

Gaetan schrieb:
> I can load a XML document from a VBScript variable, perform some modifications but when I try to
> save the updated XML document to a variable using the save() method, it does not work since this
> method does not output to a variable;
>
> Dim XMLDoc, xmlString
> Set XMLDoc = CreateObject("msxml2.domdocument")
> XMLDoc.async = vbFalse
> XMLDoc.loadXML("<?xml version=""1.0""?><test>data</test>")
> '
> ' code to add/update elements in XMLDoc
> '
> XMLDoc.save(xmlString)
>
> I looked at the WriteTo() and WriteContentTo() methods as well but they do not store in a variable.
>
> How can I save the updated XML document to a vbscript variable?
>
> Thanks.
Try:

Dim XMLDoc, xmlString
Set XMLDoc = CreateObject("msxml2.domdocument")
XMLDoc.async = vbFalse
XMLDoc.loadXML("<?xml version=""1.0""?><test>data</test>")

Dim sXML : sXML = XMLDoc.xml
MsgBox sXML

Re: How to save an XML doc to a variable? by Gaetan

Gaetan
Thu Mar 29 13:06:13 CDT 2007

The content of the "XML" property is exactly the information I was looking for.

Somehow I though I had to use a method to get the XMLDOM object to expose its internal XML
information into a string.

Thank you Bob.

Re: How to save an XML doc to a variable? by Paul

Paul
Thu Mar 29 20:57:16 CDT 2007


"ekkehard.horner" <ekkehard.horner@arcor.de> wrote in message
news:460bfb8a$0$15951$9b4e6d93@newsspool4.arcor-online.net...
> Gaetan schrieb:
>> I can load a XML document from a VBScript variable, perform some
>> modifications but when I try to
>> save the updated XML document to a variable using the save() method, it
>> does not work since this
>> method does not output to a variable;
>>
>> Dim XMLDoc, xmlString
>> Set XMLDoc = CreateObject("msxml2.domdocument")
>> XMLDoc.async = vbFalse
>> XMLDoc.loadXML("<?xml version=""1.0""?><test>data</test>")
>> '
>> ' code to add/update elements in XMLDoc
>> '
>> XMLDoc.save(xmlString)
>>
>> I looked at the WriteTo() and WriteContentTo() methods as well but they
>> do not store in a variable.
>>
>> How can I save the updated XML document to a vbscript variable?
>>
>> Thanks.
> Try:
>
> Dim XMLDoc, xmlString
> Set XMLDoc = CreateObject("msxml2.domdocument")
> XMLDoc.async = vbFalse
> XMLDoc.loadXML("<?xml version=""1.0""?><test>data</test>")
>
> Dim sXML : sXML = XMLDoc.xml
> MsgBox sXML

Bob & ekkehard:
Often, the contents of a file created with XMLDoc.Save is identical to the
string produced from XMLDoc.xml. When the two are different, which one, if
any, is correct? Below is a sample script that demonstrates the problem
with an encoding of UTF-7. Is it possible that XMLDoc.Save and XMLDoc.xml
produce 'identical' output but that the process of writing the .Save to a
file and reading it back into a VBScript string make it appear different in
a MsgBox than what MsgBox shows for XMLDoc.xml?

Option Explicit
Dim i, strTemp, strTemp2, strFileName, Encodings, strMsg
Encodings = Array("utf-7")
msgbox ubound(Encodings) + 1 & " encodings will be checked. Only " & _
"those that save something to a file will be displayed."

strTemp = ""
for i = 1 to 255
strTemp = strTemp & Chr(i)
next

for i = 0 to ubound(Encodings)
XMLEncode Encodings(i), strTemp, Encodings(i) & ".xml"
next

MsgBox "Done"


Function XMLEncode(strType, strToEncode, strFileName)
Dim strParam2, xmldoc, pi, e
Dim oFile, sMsg, sTemp
strParam2 = "version='1.0' encoding='" & strType & "'"
Set xmldoc = CreateObject("Microsoft.XMLDOM")
On Error Resume Next
Set pi = xmldoc.createProcessingInstruction("xml", strParam2)
If Err then
MsgBox "Error in function XMLEncode -- Quitting" & vbCrLf & _
"Encoding: " & strType & " " & Err.Description
WScript.Quit
End If
On Error GoTo 0
xmldoc.appendChild(pi)
Set e = xmldoc.createElement("test")
e.text = strToEncode
xmldoc.appendChild(e)
On Error Resume Next
xmldoc.save(strFileName)
On Error GoTo 0
With CreateObject("Scripting.FileSystemObject")
Set oFile = .GetFile(strFileName)
End With
If oFile.Size = 0 Then
oFile.Delete
Else
sMsg = "Note: MsgBox Not capable of showing all differences " & _
"between DocumentElement.xml and the saved file. Certain " & _
"things that look the same can be different." & vbCrLf & _
"Encoding = " & strType & vbCrLf & _
"DocumentElement.xml =" & vbCrLf & _
xmldoc.documentElement.xml & vbCrLf
sTemp = oFile.OpenAsTextStream(1, 0).ReadAll
If left(sTemp, 2) <> Chr(255) & Chr(254) Then
Else
sTemp = oFile.OpenAsTextStream(1, -1).ReadAll
End If
If Instr(sTemp, xmldoc.documentElement.xml) Then
sMsg = sMsg & vbCrLf & _
"xmldoc.documentElement.xml FOUND in saved file." & vbCrLf & vbCrLf
Else
sMsg = sMsg & vbCrLf & _
"xmldoc.documentElement.xml NOT FOUND in saved file." & vbCrLf & vbCrLf
End If
If strType = "unicodeFFFE" Then
sMsg = sMsg & "Encoding unicodeFFFE saves to a file without " & _
"the Unicode byte order mark (FF EE) at the beginning; the first " & _
"character in this file is Chr(0); MsgBox won't display anthing " & _
"after Chr(0) in a string, so you can't see " & _
"this encoding's file's contents here." & vbCrLf
End If
sMsg = sMsg & "saved file = " & vbCrLf & sTemp

with CreateObject("wscript.shell")
.Popup sMsg
End With
End If
End Function

-Paul Randall



Re: How to save an XML doc to a variable? by Anthony

Anthony
Fri Mar 30 03:42:51 CDT 2007


"Paul Randall" <paulr901@cableone.net> wrote in message
news:%23ol4A7mcHHA.4872@TK2MSFTNGP03.phx.gbl...
>
> "ekkehard.horner" <ekkehard.horner@arcor.de> wrote in message
> news:460bfb8a$0$15951$9b4e6d93@newsspool4.arcor-online.net...
> > Gaetan schrieb:
> >> I can load a XML document from a VBScript variable, perform some
> >> modifications but when I try to
> >> save the updated XML document to a variable using the save() method, it
> >> does not work since this
> >> method does not output to a variable;
> >>
> >> Dim XMLDoc, xmlString
> >> Set XMLDoc = CreateObject("msxml2.domdocument")
> >> XMLDoc.async = vbFalse
> >> XMLDoc.loadXML("<?xml version=""1.0""?><test>data</test>")
> >> '
> >> ' code to add/update elements in XMLDoc
> >> '
> >> XMLDoc.save(xmlString)
> >>
> >> I looked at the WriteTo() and WriteContentTo() methods as well but they
> >> do not store in a variable.
> >>
> >> How can I save the updated XML document to a vbscript variable?
> >>
> >> Thanks.
> > Try:
> >
> > Dim XMLDoc, xmlString
> > Set XMLDoc = CreateObject("msxml2.domdocument")
> > XMLDoc.async = vbFalse
> > XMLDoc.loadXML("<?xml version=""1.0""?><test>data</test>")
> >
> > Dim sXML : sXML = XMLDoc.xml
> > MsgBox sXML
>
> Bob & ekkehard:
> Often, the contents of a file created with XMLDoc.Save is identical to the
> string produced from XMLDoc.xml. When the two are different, which one,
if
> any, is correct?

Both are correct

Strings in VBScript are always unicode. Therefore it won't matter what
encoding is specified on the xml declare the encoding returned by the XML
property will always be unicode. To do otherwise would be incorrect.

It will not include a BOM since that is a file construct it's not needed in
VBScript strings since its always unicode and always has the same byte
order.

The encoding attribute is removed since it isn't relevant. XML is natively
Unicode. Before any XML parsing can be done a stream of bytes must be
converted to a Unicode. The encoding attribute tells the XML parse how to
interpret the characters in stream of bytes. However when given a unicode
string that job has already be done so any encoding attribute is superflous.

Files OTH are not limited to Unicode of a specific byte order. Hence the
Save method will obey the encoding directive and generate the file
accordingly.

Similarly on load apart from the unicode types (including UTF-8) there is no
way for the XML parser to know what encoding a stream of bytes coming from a
file may be. The encoding attribute is used to instruct it how to convert
these bytes to the unicode characters it understands.


> Below is a sample script that demonstrates the problem
> with an encoding of UTF-7. Is it possible that XMLDoc.Save and XMLDoc.xml
> produce 'identical' output but that the process of writing the .Save to a
> file and reading it back into a VBScript string make it appear different
in
> a MsgBox than what MsgBox shows for XMLDoc.xml?
>

It is when you are using the file system object. It doesn't understand
UTF-7 ot UTF-8 encodings.
The damage is done when reading with the FileStream object.

Anthony.







Re: How to save an XML doc to a variable? by Paul

Paul
Fri Mar 30 11:37:35 CDT 2007


"Anthony Jones" <Ant@yadayadayada.com> wrote in message
news:ub0godqcHHA.4984@TK2MSFTNGP05.phx.gbl...
>
> "Paul Randall" <paulr901@cableone.net> wrote in message
> news:%23ol4A7mcHHA.4872@TK2MSFTNGP03.phx.gbl...
>>
>> "ekkehard.horner" <ekkehard.horner@arcor.de> wrote in message
>> news:460bfb8a$0$15951$9b4e6d93@newsspool4.arcor-online.net...
>> > Gaetan schrieb:
>> >> I can load a XML document from a VBScript variable, perform some
>> >> modifications but when I try to
>> >> save the updated XML document to a variable using the save() method,
>> >> it
>> >> does not work since this
>> >> method does not output to a variable;
>> >>
>> >> Dim XMLDoc, xmlString
>> >> Set XMLDoc = CreateObject("msxml2.domdocument")
>> >> XMLDoc.async = vbFalse
>> >> XMLDoc.loadXML("<?xml version=""1.0""?><test>data</test>")
>> >> '
>> >> ' code to add/update elements in XMLDoc
>> >> '
>> >> XMLDoc.save(xmlString)
>> >>
>> >> I looked at the WriteTo() and WriteContentTo() methods as well but
>> >> they
>> >> do not store in a variable.
>> >>
>> >> How can I save the updated XML document to a vbscript variable?
>> >>
>> >> Thanks.
>> > Try:
>> >
>> > Dim XMLDoc, xmlString
>> > Set XMLDoc = CreateObject("msxml2.domdocument")
>> > XMLDoc.async = vbFalse
>> > XMLDoc.loadXML("<?xml version=""1.0""?><test>data</test>")
>> >
>> > Dim sXML : sXML = XMLDoc.xml
>> > MsgBox sXML
>>
>> Bob & ekkehard:
>> Often, the contents of a file created with XMLDoc.Save is identical to
>> the
>> string produced from XMLDoc.xml. When the two are different, which one,
> if
>> any, is correct?
>
> Both are correct
>
> Strings in VBScript are always unicode. Therefore it won't matter what
> encoding is specified on the xml declare the encoding returned by the XML
> property will always be unicode. To do otherwise would be incorrect.
>
> It will not include a BOM since that is a file construct it's not needed
> in
> VBScript strings since its always unicode and always has the same byte
> order.
>
> The encoding attribute is removed since it isn't relevant. XML is
> natively
> Unicode. Before any XML parsing can be done a stream of bytes must be
> converted to a Unicode. The encoding attribute tells the XML parse how to
> interpret the characters in stream of bytes. However when given a unicode
> string that job has already be done so any encoding attribute is
> superflous.
>
> Files OTH are not limited to Unicode of a specific byte order. Hence the
> Save method will obey the encoding directive and generate the file
> accordingly.
>
> Similarly on load apart from the unicode types (including UTF-8) there is
> no
> way for the XML parser to know what encoding a stream of bytes coming from
> a
> file may be. The encoding attribute is used to instruct it how to convert
> these bytes to the unicode characters it understands.
>
>
>> Below is a sample script that demonstrates the problem
>> with an encoding of UTF-7. Is it possible that XMLDoc.Save and
>> XMLDoc.xml
>> produce 'identical' output but that the process of writing the .Save to a
>> file and reading it back into a VBScript string make it appear different
> in
>> a MsgBox than what MsgBox shows for XMLDoc.xml?
>>
>
> It is when you are using the file system object. It doesn't understand
> UTF-7 ot UTF-8 encodings.
> The damage is done when reading with the FileStream object.
>
> Anthony.

Thank you Anthony. I believe you tried to explain this to me last year and
my brain wasn't ready to accept the concepts. Maybe it is a little more
ready to accept now.

Here is my summary about how I think this encoding stuff works, with some
questions. Please correct any misconceptions.

1. The FileStream object only reads or writes a file in two modes: Ascii and
Unicode, with Ascii meaning 8-bit characters, and Unicode meaning the
FileStream object first reads/writes the BOM and then reads/writes 16-bit
characters of the text stream.

2. Question: Is item 1 true for all Locales,or are there specific Locale
depedencies. Maltese (1082) comes to mind as a possible exception, only
because its Asc value matches its AscW value for all characters, even for
those whose AscW value exceeds 255.

3. Certain objects other than the FileStream object allow specifying an
encoding, which is used for proper translation between the contents of the
object and a file it is saved to or loaded from. The XML document object
and the ADO stream object being two objects that work this way with a
specified encoding.

4. Now I think I understand a little more about utf-8. It is handy in HTML
pages because it can be saved to and read from a relatively small (depending
on the mix of characters to be displayed) file as Ascii with the FileStream
object, but can be displayed as Unicode in the browser.

5. The FileStream object can be forced to read a Unicode file (containing a
BOM) as Ascii. For some arbitrary number of bytes, the reading goes well;
after that garbage is returned with no indication of any problem.

6. My system has a number of encodings that I don't understand. What are
they for? Do you have any URLs that explain how they are typically used or
how to use them? Examples:
_autodetect_all
x-user-defined

-Paul Randall



Re: How to save an XML doc to a variable? by Anthony

Anthony
Thu Apr 05 06:34:54 CDT 2007


"Paul Randall" <paulr901@cableone.net> wrote in message
news:O$jI4mucHHA.4684@TK2MSFTNGP06.phx.gbl...
>
> Thank you Anthony. I believe you tried to explain this to me last year
and
> my brain wasn't ready to accept the concepts. Maybe it is a little more
> ready to accept now.
>
> Here is my summary about how I think this encoding stuff works, with some
> questions. Please correct any misconceptions.
>
> 1. The FileStream object only reads or writes a file in two modes: Ascii
and
> Unicode, with Ascii meaning 8-bit characters, and Unicode meaning the
> FileStream object first reads/writes the BOM and then reads/writes 16-bit
> characters of the text stream.

That's bang on.

> 2. Question: Is item 1 true for all Locales,or are there specific Locale
> depedencies. Maltese (1082) comes to mind as a possible exception, only
> because its Asc value matches its AscW value for all characters, even for
> those whose AscW value exceeds 255.

Have you tried it? What do you get? I still don't have the locale
installed on any of my machines to test it.

The term 'Ascii' in the filesystem object documentation is misleading. It
really means use the codepage from the current locale. 65000 (unicode) is a
valid codepage in it's own right and it's this codepage that is used in the
Maltese locale.

> 3. Certain objects other than the FileStream object allow specifying an
> encoding, which is used for proper translation between the contents of the
> object and a file it is saved to or loaded from. The XML document object
> and the ADO stream object being two objects that work this way with a
> specified encoding.

Yes that is correct.


> 4. Now I think I understand a little more about utf-8. It is handy in
HTML
> pages because it can be saved to and read from a relatively small
(depending
> on the mix of characters to be displayed) file as Ascii with the
FileStream
> object, but can be displayed as Unicode in the browser.

It's handy in any circumstance where a file will contain characters mainly
in the Ascii range but is required to handle a much wider range of
characters.

>
> 5. The FileStream object can be forced to read a Unicode file (containing
a
> BOM) as Ascii. For some arbitrary number of bytes, the reading goes well;
> after that garbage is returned with no indication of any problem.

Can you post a small repro for this. Whilst you can force TextStream to
read a unicode file as 'Ascii' the bytestream will be treated as if it were
correctly coded for the current codepage. Typically this makes the string
appear to have a null character between each other character.

>
> 6. My system has a number of encodings that I don't understand. What are
> they for? Do you have any URLs that explain how they are typically used
or
> how to use them? Examples:
> _autodetect_all
> x-user-defined

I'm afraid I don't know. I've never used them.


Anthony.



Re: How to save an XML doc to a variable? by Paul

Paul
Thu Apr 05 19:52:26 CDT 2007


"Anthony Jones" <Ant@yadayadayada.com> wrote in message
news:%23LXJwZ3dHHA.4308@TK2MSFTNGP02.phx.gbl...
>
> "Paul Randall" <paulr901@cableone.net> wrote in message
> news:O$jI4mucHHA.4684@TK2MSFTNGP06.phx.gbl...
>>
>> 5. The FileStream object can be forced to read a Unicode file (containing
> a
>> BOM) as Ascii. For some arbitrary number of bytes, the reading goes
>> well;
>> after that garbage is returned with no indication of any problem.
>
> Can you post a small repro for this. Whilst you can force TextStream to
> read a unicode file as 'Ascii' the bytestream will be treated as if it
> were
> correctly coded for the current codepage. Typically this makes the string
> appear to have a null character between each other character.

The script attached and listed below demonstrates that, using the file
system object, VBScript cannot reliably read, as ASCII, files starting with
a BOM (two bytes hex FFFE). On my WXPPro SP2 with IE6 and Vista Home Basic
systems I get the same result: no difference in the two files until about
byte position 17,039,361 even though the command line FC program shows that
the first difference is actually at byte postion hex 18804.

'VBScript to test the ability to read all the individual bytes
' of a Unicode file, when the file is opened as ASCII.
'"Unicode file" is defined as a file starting with the two-byte
' BOM of hex FFFE.
'
'Builds the Unicode two ways. Real Unicode file is made by
' opening a text file as Unicode and writing a string to it.
' Fake Unicode file is made by building a similar string with
' Chr(0) following every character, and first writing a BOM
' (two-byte hex value FFFE) to the file.
'
Option Explicit
MsgBox "started in " & vbCrLf & _
WScript.CreateObject("WScript.Shell").CurrentDirectory

'FUN = fake unicode; every other character is Chr(0), starting
' with the second character.
'Real and fake unicode files will be created by repeating a
' 224-character string consisting of Chr(32) through Chr(63)
' followed by Chr(32) through Chr(127)
' followed by Chr(160) through Chr(255)
'Fake unicode file will contain an extra Chr(65) & Chr(0) every
' 100356 bytes.

Const ForReading = 1
Const TristateFalse = 0

Dim i, sa1(223), s224, sa224(223), s50176, sa50176(223), s11Meg
Dim sFUN224, saFUN224(223), sFUN50176, saFUN50176(223), sFUN11Meg

'Create the 224 character ASCII building block and the
' 448-character fake unicode building block.
For i = 0 To 31: sa1(i) = Chr(i + 32): Next
For i = 32 To 127: sa1(i) = Chr(i): Next
For i = 160 To 255: sa1(i-32) = Chr(i): Next
s224 = Join(sa1, "")
sFUN224 = Join(sa1, Chr(0)) & Chr(0)

'Join 224 of the ASCII building blocks.
'Join 224 of the fake unicode building blocks, but add
' an extra Unicode character "A", Chr(65) & Chr(0)
For i = 0 To 223: sa224(i) = s224: Next
s50176 = Join(sa224, "")
For i = 0 To 223: saFUN224(i) = sFUN224: Next

'Use following to show what happens when files should
' be identical
'sFUN50176 = Join(saFUN224, "")

'Use following to show what happens when files should
' be different
sFUN50176 = Join(saFUN224, "") & Chr(65) & Chr(0)

'Join 224 of the previous building block.
'Each now contains about 224 * 224 * 224 characters, either
' ASCII or fake unicode.
For i = 0 To 223: sa50176(i) = s50176: Next
s11Meg = Join(sa50176, "")
For i = 0 To 223: saFUN50176(i) = sFUN50176: Next
saFUN50176(223) = saFUN50176(223)
sFUN11Meg = Join(saFUN50176, "")

'Write the ASCII string to a file as Unicode
Dim objFSO, objTS, bOverWrite, bUnicode
bOverWrite = True
bUnicode = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTS = objFSO.CreateTextFile("UN1.txt", bOverWrite, bUnicode)
objTS.Write(s11Meg)
objTS.Close

'Write a BOM followed by the fake ASCII sting to a file as ASCII.
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTS = objFSO.CreateTextFile("FUN1.txt", bOverWrite, Not bUnicode)
objTS.Write(Chr(255) & Chr(254))
objTS.Write(sFUN11Meg)
objTS.Close

Dim sReadBackU, sReadBackFUN
Set objTS = objFSO.OpenTextFile("UN1.txt", ForReading, , TristateFalse)
sReadBackU = objTS.ReadAll
Set objTS = objFSO.OpenTextFile("FUN1.txt", ForReading, , TristateFalse)
sReadBackFUN = objTS.ReadAll

For i = 0 To len(sReadBackU)
If Mid(sReadBackU, i+1, 1) <> Mid(sReadBackFUN, i+1, 1) Then
MsgBox "First difference found at " & FormatNumber(i+1, 0) & _
" Hex " & Hex(i+1) & vbCrLf & _
"First difference should have occurred at about " & _
FormatNumber(Len(sFUN50176) - 1, 0) & _
" Hex " & Hex(Len(sFUN50176) - 1) & _
vbCrLf & _
"Byte count read from real unicode file = " & _
FormatNumber(Len(sReadBackU), 0) & vbCrLf & _
"Byte count read from fake unicode file = " & _
FormatNumber(Len(sReadBackFUN), 0) & vbCrLf & _
"Difference in length = " & Abs(Len(sReadBackU) - Len(sReadBackFUN))
WScript.Quit
End If
Next

MsgBox "No differences found"

-Paul Randall


begin 666 RdUniAsc.vbs.txt
M)U1H:7,@<V-R:7!T(&-A;B!B92!R=6X@=VET:"!74V-R:7!T(&]R($-38W)I
M<'0N#0HG5D)38W)I<'0@=&\@=&5S="!T:&4@86)I;&ET>2!T;R!R96%D(&%L
M;"!T:&4@:6YD:79I9'5A;"!B>71E<PT*)PEO9B!A(%5N:6-O9&4@9FEL92P@
M=VAE;B!T:&4@9FEL92!I<R!O<&5N960@87,@05-#24DN#0HG(E5N:6-O9&4@
M9FEL92(@:7,@9&5F:6YE9"!A<R!A(&9I;&4@<W1A<G1I;F<@=VET:"!T:&4@
M='=O+6)Y=&4-"B<)0D]-(&]F(&AE>"!&1D9%+@T*)PT*)T)U:6QD<R!T:&4@
M56YI8V]D92!T=V\@=V%Y<RX@(%)E86P@56YI8V]D92!F:6QE(&ES(&UA9&4@
M8GD-"B<);W!E;FEN9R!A('1E>'0@9FEL92!A<R!5;FEC;V1E(&%N9"!W<FET
M:6YG(&$@<W1R:6YG('1O(&ET+@T*)PE&86ME(%5N:6-O9&4@9FEL92!I<R!M
M861E(&)Y(&)U:6QD:6YG(&$@<VEM:6QA<B!S=')I;F<@=VET:" -"B<)0VAR
M*# I(&9O;&QO=VEN9R!E=F5R>2!C:&%R86-T97(L(&%N9"!F:7)S="!W<FET
M:6YG(&$@0D]-#0HG"2AT=V\M8GET92!H97@@=F%L=64@1D9&12D@=&\@=&AE
M(&9I;&4N#0HG#0I/<'1I;VX@17AP;&EC:70-"DUS9T)O>" B<W1A<G1E9"!I
M;B B("8@=F)#<DQF("8@7PT*"5=38W)I<'0N0W)E871E3V)J96-T*")74V-R
M:7!T+E-H96QL(BDN0W5R<F5N=$1I<F5C=&]R>0T*#0HG1E5.(#T@9F%K92!U
M;FEC;V1E.R!E=F5R>2!O=&AE<B!C:&%R86-T97(@:7,@0VAR*# I+"!S=&%R
M=&EN9R -"B<)=VET:"!T:&4@<V5C;VYD(&-H87)A8W1E<BX-"B=296%L(&%N
M9"!F86ME('5N:6-O9&4@9FEL97,@=VEL;"!B92!C<F5A=&5D(&)Y(')E<&5A
M=&EN9R!A#0HG"3(R-"UC:&%R86-T97(@<W1R:6YG(&-O;G-I<W1I;F<@;V8@
M0VAR*#,R*2!T:')O=6=H($-H<B@V,RD-"B<)9F]L;&]W960@8GD@0VAR*#,R
M*2!T:')O=6=H($-H<B@Q,C<I#0HG"69O;&QO=V5D(&)Y($-H<B@Q-C I('1H
M<F]U9V@@0VAR*#(U-2D-"B=&86ME('5N:6-O9&4@9FEL92!W:6QL(&-O;G1A
M:6X@86X@97AT<F$@0VAR*#8U*2 F($-H<B@P*2!E=F5R>0T*)PDQ,# S-38@
M8GET97,N#0H-"D-O;G-T($9O<E)E861I;F<@/2 Q#0I#;VYS="!4<FES=&%T
M949A;'-E(#T@, T*#0I$:6T@:2P@<V$Q*#(R,RDL(',R,C0L('-A,C(T*#(R
M,RDL(',U,#$W-BP@<V$U,#$W-B@R,C,I+"!S,3%-96<-"D1I;2!S1E5.,C(T
M+"!S84953C(R-"@R,C,I+"!S1E5.-3 Q-S8L('-A1E5.-3 Q-S8H,C(S*2P@
M<T953C$Q365G#0H-"B=#<F5A=&4@=&AE(#(R-"!C:&%R86-T97(@05-#24D@
M8G5I;&1I;F<@8FQO8VL@86YD('1H90T*)PDT-#@M8VAA<F%C=&5R(&9A:V4@
M=6YI8V]D92!B=6EL9&EN9R!B;&]C:RX-"D9O<B!I(#T@,"!4;R S,3H@<V$Q
M*&DI(#T@0VAR*&D@*R S,BDZ($YE>'0-"D9O<B!I(#T@,S(@5&\@,3(W.B!S
M83$H:2D@/2!#:'(H:2DZ($YE>'0-"D9O<B!I(#T@,38P(%1O(#(U-3H@<V$Q
M*&DM,S(I(#T@0VAR*&DI.B!.97AT#0IS,C(T(#T@2F]I;BAS83$L("(B*0T*
M<T953C(R-" ]($IO:6XH<V$Q+"!#:'(H,"DI("8@0VAR*# I#0H-"B=*;VEN
M(#(R-"!O9B!T:&4@05-#24D@8G5I;&1I;F<@8FQO8VMS+@T*)TIO:6X@,C(T
M(&]F('1H92!F86ME('5N:6-O9&4@8G5I;&1I;F<@8FQO8VMS+"!B=70@861D
M#0HG"6%N(&5X=')A(%5N:6-O9&4@8VAA<F%C=&5R(")!(BP@0VAR*#8U*2 F
M($-H<B@P*0T*1F]R(&D@/2 P(%1O(#(R,SH@<V$R,C0H:2D@/2!S,C(T.B!.
M97AT#0IS-3 Q-S8@/2!*;VEN*'-A,C(T+" B(BD-"D9O<B!I(#T@,"!4;R R
M,C,Z('-A1E5.,C(T*&DI(#T@<T953C(R-#H@3F5X= T*#0HG57-E(&9O;&QO
M=VEN9R!T;R!S:&]W('=H870@:&%P<&5N<R!W:&5N(&9I;&5S('-H;W5L9 T*
M)PEB92!I9&5N=&EC86P-"B=S1E5.-3 Q-S8@/2!*;VEN*'-A1E5.,C(T+" B
M(BD-"@T*)U5S92!F;VQL;W=I;F<@=&\@<VAO=R!W:&%T(&AA<'!E;G,@=VAE
M;B!F:6QE<R!S:&]U;&0-"B<)8F4@9&EF9F5R96YT#0IS1E5.-3 Q-S8@/2!*
M;VEN*'-A1E5.,C(T+" B(BD@)B!#:'(H-C4I("8@0VAR*# I#0H-"B=*;VEN
M(#(R-"!O9B!T:&4@<')E=FEO=7,@8G5I;&1I;F<@8FQO8VLN(" -"B=%86-H
M(&YO=R!C;VYT86EN<R!A8F]U=" R,C0@*B R,C0@*B R,C0@8VAA<F%C=&5R
M<RP@96ET:&5R#0HG"4%30TE)(&]R(&9A:V4@=6YI8V]D92X-"D9O<B!I(#T@
M,"!4;R R,C,Z('-A-3 Q-S8H:2D@/2!S-3 Q-S8Z($YE>'0-"G,Q,4UE9R ]
M($IO:6XH<V$U,#$W-BP@(B(I#0I&;W(@:2 ](# @5&\@,C(S.B!S84953C4P
M,3<V*&DI(#T@<T953C4P,3<V.B!.97AT#0IS84953C4P,3<V*#(R,RD@/2!S
M84953C4P,3<V*#(R,RD-"G-&54XQ,4UE9R ]($IO:6XH<V%&54XU,#$W-BP@
M(B(I#0H-"B=7<FET92!T:&4@05-#24D@<W1R:6YG('1O(&$@9FEL92!A<R!5
M;FEC;V1E#0I$:6T@;V)J1E-/+"!O8FI44RP@8D]V97)7<FET92P@8E5N:6-O
M9&4-"F)/=F5R5W)I=&4@/2!4<G5E#0IB56YI8V]D92 ](%1R=64-"E-E="!O
M8FI&4T\@/2!#<F5A=&5/8FIE8W0H(E-C<FEP=&EN9RY&:6QE4WES=&5M3V)J
M96-T(BD-"E-E="!O8FI44R ](&]B:D933RY#<F5A=&5497AT1FEL92@B54XQ
M+G1X="(L(&)/=F5R5W)I=&4L(&)5;FEC;V1E*0T*;V)J5%,N5W)I=&4H<S$Q
M365G*0T*;V)J5%,N0VQO<V4-"@T*)U=R:71E(&$@0D]-(&9O;&QO=V5D(&)Y
M('1H92!F86ME($%30TE)('-T:6YG('1O(&$@9FEL92!A<R!!4T-)22X-"E-E
M="!O8FI&4T\@/2!#<F5A=&5/8FIE8W0H(E-C<FEP=&EN9RY&:6QE4WES=&5M
M3V)J96-T(BD-"E-E="!O8FI44R ](&]B:D933RY#<F5A=&5497AT1FEL92@B
M1E5.,2YT>'0B+"!B3W9E<E=R:71E+"!.;W0@8E5N:6-O9&4I#0IO8FI44RY7
M<FET92A#:'(H,C4U*2 F($-H<B@R-30I*0T*;V)J5%,N5W)I=&4H<T953C$Q
M365G*0T*;V)J5%,N0VQO<V4-"@T*1&EM('-296%D0F%C:U4L('-296%D0F%C
M:T953@T*4V5T(&]B:E13(#T@;V)J1E-/+D]P96Y497AT1FEL92@B54XQ+G1X
M="(L($9O<E)E861I;F<L("P@5')I<W1A=&5&86QS92D-"G-296%D0F%C:U4@
M/2!O8FI44RY296%D06QL#0I3970@;V)J5%,@/2!O8FI&4T\N3W!E;E1E>'1&
M:6QE*")&54XQ+G1X="(L($9O<E)E861I;F<L("P@5')I<W1A=&5&86QS92D-
M"G-296%D0F%C:T953B ](&]B:E13+E)E861!;&P-"@T*1F]R(&D@/2 P(%1O
M(&QE;BAS4F5A9$)A8VM5*0T*"4EF($UI9"AS4F5A9$)A8VM5+"!I*S$L(#$I
M(#P^($UI9"AS4F5A9$)A8VM&54XL(&DK,2P@,2D@5&AE;@T*"0E-<V=";W@@
M(D9I<G-T(&1I9F9E<F5N8V4@9F]U;F0@870@(B F($9O<FUA=$YU;6)E<BAI
M*S$L(# I("8@7PT*"0D)(B @2&5X("(@)B!(97@H:2LQ*2 F('9B0W),9B F
M(%\-"@D)"2)&:7)S="!D:69F97)E;F-E('-H;W5L9"!H879E(&]C8W5R<F5D
M(&%T(&%B;W5T("(@)B!?#0H)"0E&;W)M871.=6UB97(H3&5N*'-&54XU,#$W
M-BD@+2 Q+" P*2 F(%\-"@D)"2(@($AE>" B("8@2&5X*$QE;BAS1E5.-3 Q
M-S8I("T@,2D@)B!?#0H)"0EV8D-R3&8@)B!?#0H)"0DB0GET92!C;W5N="!R
M96%D(&9R;VT@<F5A;"!U;FEC;V1E(&9I;&4@/2 B("8@7PT*"0D)1F]R;6%T
M3G5M8F5R*$QE;BAS4F5A9$)A8VM5*2P@,"D@)B!V8D-R3&8@)B!?#0H)"0DB
M0GET92!C;W5N="!R96%D(&9R;VT@9F%K92!U;FEC;V1E(&9I;&4@/2 B("8@
M7PT*"0D)1F]R;6%T3G5M8F5R*$QE;BAS4F5A9$)A8VM&54XI+" P*2 F('9B
M0W),9B F(%\-"@D)"2)$:69F97)E;F-E(&EN(&QE;F=T:" ]("(@)B!!8G,H
M3&5N*'-296%D0F%C:U4I("T@3&5N*'-296%D0F%C:T953BDI#0H)"5=38W)I
M<'0N475I= T*"45N9"!)9@T*3F5X= T*#0I-<V=";W@@3&5N*'-296%D0F%C
M:U4I("8@=F)#<DQF("8@3&5N*'-296%D0F%C:T953BD-"@T*475I=" B06QL
M($1O;F4B#0HG*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ#0I&
M=6YC=&EO;B!I;F-L=61E*'-&:6QE3F%M92D-"B=2971U<FX@82!S=')I;F<@
M8V]N=&%I;FEN9R!T:&4@96YT:7)E(&-O;G1E;G1S(&]F( T*)PET:&4@<W!E
M8VEF:65D(&9I;&4N#0H)1&EM(&]B:D933PT*"41I;2!O8FI&:6QE#0H)4V5T
M(&]B:D933R ]($-R96%T94]B:F5C="@B4V-R:7!T:6YG+D9I;&53>7-T96U/
M8FIE8W0B*0T*"4]N($5R<F]R(%)E<W5M92!.97AT#0H)4V5T(&]B:D9I;&4@
M/2!O8FI&4T\N3W!E;E1E>'1&:6QE*'-&:6QE3F%M92D-"@E)9B!%<G(@=&AE
M;@T*"0E-<V=B;W@@(E%U:71T:6YG("T@9FEL92 B("8@<T9I;&5.86UE("8@
M(B!C86X@;F]T(&)E(&EN8VQU9&5D+B(-"@D)5W-C<FEP="Y1=6ET#0H)16YD
M($EF#0H)3VX@17)R;W(@1V]4;R P#0H):6YC;'5D92 ](&]B:D9I;&4N4F5A
M9$%L;"@I#0H);V)J1FEL92Y#;&]S90T*16YD($9U;F-T:6]N"2=I;F-L=61E
,*$9I;&5.86UE*0T*
`
end