Fw: xml-parse: file position of elements
Joseph Donaldson <[email protected]> Wed, 2 Feb 2022 19:11:49 +0000 (UTC)
| Newsgroups | gmane.lisp.scheme.bigloo |
|---|---|
| Message-ID | <[email protected]> |
------=_Part_5351822_936647154.1643829109283 Content-Type: multipart/alternative; boundary="----=_Part_5351819_597603103.1643829109243" ------=_Part_5351819_597603103.1643829109243 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable =20 ----- Forwarded Message ----- From: Joseph Donaldson <donaldsonjw@yahoo.= com>To: Sven Hartrumpf <[email protected]>Sent: Tuesday, February 1, 2022, = 10:21:12 AM PSTSubject: Re: [bigloo] xml-parse: file position of elements Hello, Sven, Here is an updated version that moves the start-position parameter to posit= ion 4 and has the value of the element's starting < character. I also remov= ed some debugging print statements that were erroneously left in place. Let= me know how it works for you. Best Regards,Joe Donaldson On Tuesday, February 1, 2022, 02:42:52 AM PST, Sven Hartrumpf <hartrump= [email protected]> wrote: =20 =20 Hi Jue. donaldsonj wrote 2022-01-31 23:57: > Please find attached a modified version of the xml module found in the bi= gloo web library. I believe it accomplishes what you requested. By default,= the xml-parse procedure returns the same output as the original. However, = if you provide your own element constructing procedure taking the start-pos= of the element, > the tag of the element, a list of attributes, and the body, you can obtai= n the starting position of each element and use it as you please. A simple = of way of doing this (shown below) is to use the list procedure as the elem= ent constructor. > > (xml-parse input-port :procedure list) Thanks! One suggestion: For old calls like (xml-parse ... :procedure list) it would= be more conservative to move the start-pos argument for 'make' from position 1 to p= osition 4. Assuming that the old code accesses list elements 1, 2 and 3, the old code = will still work with newer bigloo. > Note the start-pos is the character position before the <=C2=A0 character= of the element. If you want it to be the position of the < character, the = code can be updated. Because of multibyte UTF-8 chars, it would be much more convenient to have = the position of <. Ciao Sven =20 ------=_Part_5351819_597603103.1643829109243 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <html><head></head><body><div class=3D"ydpe9d8829byahoo-style-wrap" style= =3D"font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 1= 3px;"><div></div> <div><br></div><div><br></div> =20 </div><div id=3D"ydpa46a6bc8yahoo_quoted_4235647379" class=3D"ydpa4= 6a6bc8yahoo_quoted"> <div style=3D"font-family:'Helvetica Neue', Helvetica, Arial, s= ans-serif;font-size:13px;color:#26282a;"> <div>----- Forwarded Message -----</div> <div><b>From:</b> Joseph Donaldson <[email protected]= m></div><div><b>To:</b> Sven Hartrumpf <[email protected]></div><d= iv><b>Sent:</b> Tuesday, February 1, 2022, 10:21:12 AM PST</div><div><b>Sub= ject:</b> Re: [bigloo] xml-parse: file position of elements</div><div><br><= /div> <div><div id=3D"ydpa46a6bc8yiv9406560804"><div><div style= =3D"font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:13px= ;" class=3D"ydpa46a6bc8yiv9406560804ydpe06ebe4cyahoo-style-wrap"><div></div= > <div dir=3D"ltr">Hello, Sven,</div><div dir=3D"ltr"><br clear=3D"no= ne"></div><div dir=3D"ltr">Here is an updated version that moves the start-= position parameter to position 4 and has the value of the element's startin= g < character. I also removed some debugging print statements that were = erroneously left in place. Let me know how it works for you.</div><div dir= =3D"ltr"><br clear=3D"none"></div><div dir=3D"ltr">Best Regards,</div><div = dir=3D"ltr">Joe Donaldson<br clear=3D"none"></div><div><br clear=3D"none"><= /div> =20 </div><div id=3D"ydpa46a6bc8yiv9406560804yqt31297" class=3D"ydpa46a= 6bc8yiv9406560804yqt6489793602"><div id=3D"ydpa46a6bc8yiv9406560804ydp58718= 390yahoo_quoted_4275124974" class=3D"ydpa46a6bc8yiv9406560804ydp58718390yah= oo_quoted"> <div style=3D"font-family:'Helvetica Neue', Helvetica, Arial, s= ans-serif;font-size:13px;color:#26282a;"> =20 <div> On Tuesday, February 1, 2022, 02:42:52 AM PST, Sven Har= trumpf <[email protected]> wrote: </div> <div><br clear=3D"none"></div> <div><br clear=3D"none"></div> <div><div dir=3D"ltr">Hi Jue.<br clear=3D"none"><br clear= =3D"none">donaldsonj wrote 2022-01-31 23:57:<br clear=3D"none">> Please = find attached a modified version of the xml module found in the bigloo web = library. I believe it accomplishes what you requested. By default, the xml-= parse procedure returns the same output as the original. However, if you pr= ovide your own element constructing procedure taking the start-pos of the e= lement,<br clear=3D"none">> the tag of the element, a list of attributes= , and the body, you can obtain the starting position of each element and us= e it as you please. A simple of way of doing this (shown below) is to use t= he list procedure as the element constructor.<br clear=3D"none">><br cle= ar=3D"none">> (xml-parse input-port :procedure list)<br clear=3D"none"><= br clear=3D"none">Thanks!<br clear=3D"none">One suggestion: For old calls l= ike (xml-parse ... :procedure list) it would be more<br clear=3D"none">cons= ervative to move the start-pos argument for 'make' from position 1 to posit= ion 4.<br clear=3D"none">Assuming that the old code accesses list elements = 1, 2 and 3, the old code will still work<br clear=3D"none">with newer biglo= o.<br clear=3D"none"><br clear=3D"none">> Note the start-pos is the char= acter position before the < character of the element. If you want = it to be the position of the < character, the code can be updated.<br cl= ear=3D"none"><br clear=3D"none">Because of multibyte UTF-8 chars, it would = be much more convenient to have the position of <.<div id=3D"ydpa46a6bc8= yiv9406560804ydp58718390yqtfd83560" class=3D"ydpa46a6bc8yiv9406560804ydp587= 18390yqt0259929972"><br clear=3D"none"><br clear=3D"none">Ciao<br clear=3D"= none">Sven<br clear=3D"none"></div></div></div> </div> </div></div></div></div></div> </div> </div></body></html> ------=_Part_5351819_597603103.1643829109243-- ------=_Part_5351822_936647154.1643829109283 Content-Type: text/x-scheme Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="xml.scm" Content-ID: <[email protected]> Oyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0qLwo7KiAgICBzZXJyYW5vL3ByZ20vcHJvamVjdC9iaWdsb28vYmlnbG9v L2FwaS93ZWIvc3JjL0xsaWIveG1sLnNjbSAgICAgICovCjsqICAgIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgKi8KOyogICAg QXV0aG9yICAgICAgOiAgTWFudWVsIFNlcnJhbm8gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqLwo7KiAgICBDcmVhdGlvbiAgICA6ICBGcmkgTWFyIDExIDE2OjIzOjUzIDIwMDUg ICAgICAgICAgICAgICAgICAgICAgICAgICovCjsqICAgIExhc3QgY2hhbmdlIDogIFN1biBPY3Qg IDcgMDg6NDY6MDMgMjAxOCAoc2VycmFubykgICAgICAgICAgICAgICAgKi8KOyogICAgQ29weXJp Z2h0ICAgOiAgMjAwNS0xOCBNYW51ZWwgU2VycmFubyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLwo7KiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICAgICovCjsqICAgIFhNTCBwYXJzaW5nICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KOyo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoK OyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0qLwo7KiAgICBUaGUgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKG1vZHVs ZSBfX3dlYl94bWwKCiAgIChvcHRpb24gKHNldCEgKmRsb3Blbi1pbml0LWdjKiAjdCkpCiAgIAog ICAoZXhwb3J0ICh4bWwtcGFyc2U6OnBhaXItbmlsIHBvcnQ6OmlucHV0LXBvcnQKCQkJCSMha2V5 CgkJCQkoY29udGVudC1sZW5ndGggMCkKCQkJCShwcm9jZWR1cmUgKGxhbWJkYSAodGFnIGF0dHJp YnMgYm9keSBzdGFydC1wb3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAobGlzdCB0YWcgYXR0cmlicyBib2R5KSkpCgkJCQkoc3BlY2lhbHMgJygpKQoJCQkJ KHN0cmljdCAjdCkKCQkJCShlbmNvZGluZyAnVVRGLTgpCgkJCQkoZW9pICNmKSkKCSAgICh4bWwt c3RyaW5nLWRlY29kZTo6YnN0cmluZyA6OmJzdHJpbmcpCgkgICAoeG1sLXN0cmluZy1kZWNvZGUh Ojpic3RyaW5nIDo6YnN0cmluZykKCSAgICh4bWwtc3RyaW5nLWVuY29kZTo6YnN0cmluZyA6OmJz dHJpbmcpCgkgICAocmVhZC14bWwgIyFvcHRpb25hbCAocG9ydDo6aW5wdXQtcG9ydCAoY3VycmVu dC1pbnB1dC1wb3J0KSkpCgkgICAoeG1sLW1ldGFkYXRhIHhtbC10cmVlOjpwYWlyLW5pbCkpKQoK OyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0qLwo7KiAgICB4bWwtcGFyc2UgLi4uICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKGRlZmlu ZSAoeG1sLXBhcnNlOjpwYWlyLW5pbCBwb3J0OjppbnB1dC1wb3J0CgkJCSAgICAgIyFrZXkKCQkJ ICAgICAoY29udGVudC1sZW5ndGggMCkKCQkJICAgICAocHJvY2VkdXJlIChsYW1iZGEgKHRhZyBh dHRyaWJzIGJvZHkgc3RhcnQtcG9zKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxpc3QgdGFnIGF0dHJpYnMgYm9keSkpKQoJCQkgICAgIChzcGVjaWFscyAn KCkpCgkJCSAgICAgKHN0cmljdCAjdCkKCQkJICAgICAoZW5jb2RpbmcgJ1VURi04KQoJCQkgICAg IChlb2kgI2YpKQogICAod2hlbiAoZWxvbmc/IGNvbnRlbnQtbGVuZ3RoKQogICAgICAoc2V0ISBj b250ZW50LWxlbmd0aCAoZWxvbmctPmZpeG51bSBjb250ZW50LWxlbmd0aCkpKQogICAod2hlbiAo YW5kIChmaXhudW0/IGNvbnRlbnQtbGVuZ3RoKSAoPmZ4IGNvbnRlbnQtbGVuZ3RoIDApKQogICAg ICAoaW5wdXQtcG9ydC1maWxsLWJhcnJpZXItc2V0ISBwb3J0IGNvbnRlbnQtbGVuZ3RoKSkKICAg KHdoZW4gKD5meCBjb250ZW50LWxlbmd0aCAwKQogICAgICAoc2V0ISBjb250ZW50LWxlbmd0aCAo K2Z4IGNvbnRlbnQtbGVuZ3RoIChpbnB1dC1wb3J0LXBvc2l0aW9uIHBvcnQpKSkpCiAgIChsZXQg bG9vcCAoKGRlY29kZXIgKGxhbWJkYSAoeCkgeCkpKQogICAgICAobGV0ICgob2JqIChyZWFkL3Jw IHhtbC1ncmFtbWFyIHBvcnQgcHJvY2VkdXJlIHByb2NlZHVyZSBzcGVjaWFscyBzdHJpY3QgZGVj b2RlciBlbmNvZGluZyAoaW5wdXQtcG9ydC1wb3NpdGlvbiBwb3J0KSkpKQoJICh3aGVuIChhbmQg KGZpeG51bT8gY29udGVudC1sZW5ndGgpICg+ZnggY29udGVudC1sZW5ndGggMCkpCgkgICAgKGlu cHV0LXBvcnQtZmlsbC1iYXJyaWVyLXNldCEgcG9ydCAtMSkpCgkgKGNvbmQKCSAgICAoKGVvZi1v YmplY3Q/IG9iaikKCSAgICAgJygpKQoJICAgICgob3IgKGFuZCAocHJvY2VkdXJlPyBlb2kpIChl b2kgb2JqKSkKCQkgKGFuZCAoPmZ4IGNvbnRlbnQtbGVuZ3RoIDApCgkJICAgICAgKD49ZnggKGlu cHV0LXBvcnQtcG9zaXRpb24gcG9ydCkgY29udGVudC1sZW5ndGgpKSkKCSAgICAgKGxpc3Qgb2Jq KSkKCSAgICAoKGFuZCAocGFpcj8gb2JqKSAoZXE/ICd4bWwtZGVjbCAoY2FyIG9iaikpKQoJICAg ICAobGV0ICgoZW5jIChhc3NxICdlbmNvZGluZyAoY2RyIG9iaikpKSkKCQkoaWYgZW5jCgkJICAg IChjb25zIG9iaiAobG9vcCAoZ2V0LWRlY29kZXIgKGNkciBlbmMpIGVuY29kaW5nKSkpCgkJICAg IChjb25zIG9iaiAobG9vcCBkZWNvZGVyKSkpKSkKCSAgICAoZWxzZQoJICAgICAoY29ucyBvYmog KGxvb3AgZGVjb2RlcikpKSkpKSkKCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KOyogICAgeG1sLXBhcnNlLWVy cm9yIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwo7 Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCihkZWZpbmUgKHhtbC1wYXJzZS1lcnJvciBtc2cgb2JqIG5hbWUgcG9z KQogICAocmFpc2UKICAgIChpbnN0YW50aWF0ZTo6JmlvLXBhcnNlLWVycm9yCiAgICAgICAocHJv YyAneG1sLXBhcnNlKQogICAgICAgKG1zZyBtc2cpCiAgICAgICAob2JqIG9iaikKICAgICAgIChm bmFtZSBuYW1lKQogICAgICAgKGxvY2F0aW9uIHBvcykpKSkKCjsqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KOyog ICAgZXJyb3ItbGluZSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLwo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCihkZWZpbmUgKGVycm9yLWxpbmUgYyBwb3J0 KQogICAobGV0ICgobGluZSAocmVhZC1saW5lIHBvcnQpKSkKICAgICAgKHN0cmluZy1hcHBlbmQg InsiIChzdHJpbmcgYykgIn0iIChpZiAoc3RyaW5nPyBsaW5lKSBsaW5lICIiKSkpKQoKOyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0qLwo7KiAgICBzcGVjaWFsIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICovCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKGRlZmluZS1zdHJ1 Y3Qgc3BlY2lhbCB0YWcgYXR0cmlidXRlcyBib2R5IG93bmVyKQoKOyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo7 KiAgICBjb2xsZWN0LXVwLXRvIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKGRlZmluZSAoY29sbGVjdC11cC10byBz dGFydC1wb3MgaWdub3JlIHRhZyBhdHRyaWJ1dGVzIHBvcnQgbWFrZSBzcGVjaWFscyBzdHJpY3Qg ZGVjb2RlciBlbmNvZGluZykKICAgCiAgIChkZWZpbmUgKGNvbGxlY3QgaWdub3JlIHRhZ3MpCiAg ICAgIChsZXQgKChuYW1lIChpbnB1dC1wb3J0LW5hbWUgcG9ydCkpCgkgICAgKHBvIChpbnB1dC1w b3J0LXBvc2l0aW9uIHBvcnQpKSkKCSAobGV0IGxvb3AgKChhY2MgJygpKQoJCSAgICAoaXRlbSAo aWdub3JlKSkpCgkgICAgKGNvbmQKCSAgICAgICAoKHN5bWJvbD8gaXRlbSkKCQkoY29uZAoJCSAg ICgoZXE/IGl0ZW0gdGFnKQoJCSAgICAobWFrZSB0YWcgYXR0cmlidXRlcyAocmV2ZXJzZSEgYWNj KSBzdGFydC1wb3MpKQoJCSAgIChzdHJpY3QKCQkgICAgKHhtbC1wYXJzZS1lcnJvciAiSWxsZWdh bCBjbG9zaW5nIHRhZyIKCQkgICAgICAgKGZvcm1hdCAiYH5hJyBleHBlY3RlZCwgYH5hJyBwcm92 aWRlZCIKCQkJICB0YWcgaXRlbSkKCQkgICAgICAgbmFtZSBwbykpCgkJICAgKGVsc2UKCQkgICAg KG1ha2UgdGFnIGF0dHJpYnV0ZXMgKHJldmVyc2UhIGFjYykgc3RhcnQtcG9zKSkpKQoJICAgICAg ICgoc3BlY2lhbD8gaXRlbSkKCQkobGV0ICgobml0ZW0gKG1ha2UgKHNwZWNpYWwtdGFnIGl0ZW0p CgkJCQkoc3BlY2lhbC1hdHRyaWJ1dGVzIGl0ZW0pCgkJCQkoc3BlY2lhbC1ib2R5IGl0ZW0pCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQtcG9zKSkpCgkJICAgKGlmIChtZW1x IChzcGVjaWFsLXRhZyBpdGVtKSB0YWdzKQoJCSAgICAgICAobG9vcCBhY2Mgbml0ZW0pCgkJICAg ICAgIChiZWdpbgoJCQkgIChsaXN0IChtYWtlIHRhZyBhdHRyaWJ1dGVzIChyZXZlcnNlISBhY2Mp IHN0YXJ0LXBvcykgbml0ZW0pKSkpKQoJICAgICAgICgoZW9mLW9iamVjdD8gaXRlbSkKCQkoaWYg c3RyaWN0CgkJICAgICh4bWwtcGFyc2UtZXJyb3IKCQkgICAgICAgKGZvcm1hdCAiUHJlbWF0dXJl IGVuZCBvZiBsaW5lLCBleHBlY3RpbmcgdGFnIGB+YSciCgkJCSAgdGFnKQoJCSAgICAgICBpdGVt IG5hbWUgcG8pCgkJICAgIChtYWtlIHRhZyBhdHRyaWJ1dGVzIChyZXZlcnNlISBhY2MpIHN0YXJ0 LXBvcykpKQoJICAgICAgIChlbHNlCgkJKGxldCAoKHBvIChpbnB1dC1wb3J0LWxhc3QtdG9rZW4t cG9zaXRpb24gcG9ydCkpKQoJCSAgIChsb29wIChlY29ucyBpdGVtIGFjYyAobGlzdCAnYXQgbmFt ZSBwbykpIChpZ25vcmUpKSkpKSkpKQoKICAgKGxldCAoKHNwZWMgKGFzc3EgdGFnIHNwZWNpYWxz KSkpCiAgICAgIChjb25kCgkgKChub3Qgc3BlYykKCSAgKGNvbGxlY3QgaWdub3JlICcoKSkpCgkg KChudWxsPyAoY2RyIHNwZWMpKQoJICAobWFrZSB0YWcgYXR0cmlidXRlcyAnKCkgc3RhcnQtcG9z KSkKCSAoKHByb2NlZHVyZT8gKGNkciBzcGVjKSkKCSAgKG1ha2UgdGFnIGF0dHJpYnV0ZXMgKChj ZHIgc3BlYykgcG9ydCkgc3RhcnQtcG9zKSkKCSAoKHBhaXI/IChjZHIgc3BlYykpCgkgIChsZXQg KChpZ25vcmUgKGxhbWJkYSAoKQoJCQkgICAocmVhZC9ycCB4bWwtZ3JhbW1hciBwb3J0CgkJCQkg ICAgKGxhbWJkYSAodCBhIGIpIChzcGVjaWFsIHQgYSBiIHRhZykpCgkJCQkgICAgbWFrZQoJCQkJ ICAgIHNwZWNpYWxzIHN0cmljdCBkZWNvZGVyIGVuY29kaW5nIChpbnB1dC1wb3J0LXBvc2l0aW9u IHBvcnQpKSkpKSAKCSAgICAgKGNvbGxlY3QgaWdub3JlIChjZHIgc3BlYykpKSkKCSAoZWxzZQoJ ICAoZXJyb3IgInhtbC1wYXJzZSIgIklsbGVnYWwgc3BlY2lhbCBoYW5kbGVyIiBzcGVjKSkpKSkK CjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8KOyogICAgYXR0cmlidXRlLXZhbHVlLWdyYW1tYXIgLi4uICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCihkZWZp bmUgYXR0cmlidXRlLXZhbHVlLWdyYW1tYXIKICAgKHJlZ3VsYXItZ3JhbW1hciAoc3RyaWN0IHRh ZykKICAgICAgKCgrIChpbiAiIFx0XG5cciIpKQogICAgICAgKGlnbm9yZSkpCiAgICAgICgoOiAj XCIgKCogKG9yIChvdXQgI1xcICNcIikgKDogI1xcIGFsbCkpKSAjXCIpCiAgICAgICAodGhlLXN1 YnN0cmluZyAxICgtZnggKHRoZS1sZW5ndGgpIDEpKSkKICAgICAgKCg6ICNcJyAoKiAob3IgKG91 dCAjXFwgI1wnKSAoOiAjXFwgYWxsKSkpICNcJykKICAgICAgICh0aGUtc3Vic3RyaW5nIDEgKC1m eCAodGhlLWxlbmd0aCkgMSkpKQogICAgICAoKDogKCsgZGlnaXQpICg/IChvciAiJSIgInB4IiAi Y20iICJlbSIgIm1tIiAiaW5jaCIpKSkKICAgICAgIChpZiBzdHJpY3QKCSAgICh4bWwtcGFyc2Ut ZXJyb3IgKGZvcm1hdCAiSWxsZWdhbCBgfmEnIGF0dHJpYnV0ZSB2YWx1ZSIgdGFnKQoJCQkgICAg KHRoZS1zdHJpbmcpCgkJCSAgICAoaW5wdXQtcG9ydC1uYW1lICh0aGUtcG9ydCkpCgkJCSAgICAo aW5wdXQtcG9ydC1wb3NpdGlvbiAodGhlLXBvcnQpKSkKCSAgICh0aGUtc3RyaW5nKSkpCiAgICAg ICgoKyAob3V0ICIgXHRcblxyPD4oKXt9W11AIVwiJy8iKSkKICAgICAgIChpZiBzdHJpY3QKCSAg ICh4bWwtcGFyc2UtZXJyb3IgKGZvcm1hdCAiSWxsZWdhbCBgfmEnIGF0dHJpYnV0ZSBjaGFyYWN0 ZXIiIHRhZykKCQkJICAgICh0aGUtc3RyaW5nKQoJCQkgICAgKGlucHV0LXBvcnQtbmFtZSAodGhl LXBvcnQpKQoJCQkgICAgKGlucHV0LXBvcnQtcG9zaXRpb24gKHRoZS1wb3J0KSkpCgkgICAodGhl LXN0cmluZykpKQogICAgICAoZWxzZQogICAgICAgKGxldCAoKGMgKHRoZS1mYWlsdXJlKSkpCgkg IChpZiAobm90IChlb2Ytb2JqZWN0PyBjKSkKCSAgICAgIChpZiAob3Igc3RyaWN0CgkJICAgICAg KG5vdCAob3IgKGNoYXI9PyBjICNcc3BhY2UpCgkJCSAgICAgICAoY2hhcj0/IGMgI1xOZXdsaW5l KQoJCQkgICAgICAgKGNoYXI9PyBjICNcPikpKSkKCQkgICh4bWwtcGFyc2UtZXJyb3IKCQkgICAo Zm9ybWF0ICJJbGxlZ2FsIGB+YScgYXR0cmlidXRlIGNoYXJhY3RlciIgdGFnKQoJCSAgIChlcnJv ci1saW5lIGMgKHRoZS1wb3J0KSkKCQkgICAoaW5wdXQtcG9ydC1uYW1lICh0aGUtcG9ydCkpCgkJ ICAgKGlucHV0LXBvcnQtcG9zaXRpb24gKHRoZS1wb3J0KSkpCgkJICAiICIpCgkgICAgICAoeG1s LXBhcnNlLWVycm9yCgkgICAgICAgKGZvcm1hdCAiUHJlbWF0dXJlIGVuZCBvZiBsaW5lIGZvciB0 YWcgYH5hJyBhdHRyaWJ1dGUiIHRhZykKCSAgICAgICBjCgkgICAgICAgKGlucHV0LXBvcnQtbmFt ZSAodGhlLXBvcnQpKQoJICAgICAgICgtZnggKGlucHV0LXBvcnQtcG9zaXRpb24gKHRoZS1wb3J0 KSkgMSkpKSkpKSkKICAgICAgCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KOyogICAgYXR0cmlidXRlLWdyYW1t YXIgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwo7Ki0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSovCihkZWZpbmUgYXR0cmlidXRlLWdyYW1tYXIKICAgKHJlZ3VsYXItZ3JhbW1h ciAoKGlkICg6IChpbiAoImF6QVoiKSAiXyIpICgqIChpbiAoImF6QVowOSIpICI6Xy0iKSkpKQoJ CSAgICAgdGFnCgkJICAgICBzdHJpY3QKCQkgICAgIGRlY29kZXIpCiAgICAgICgoKyAoaW4gIiBc dFxuXHIiKSkKICAgICAgIChpZ25vcmUpKQogICAgICAoKDogaWQgIj0iKQogICAgICAgKGxldCog KChrZXkgKHRoZS1zdWJzdHJpbmcgMCAoLWZ4ICh0aGUtbGVuZ3RoKSAxKSkpCgkgICAgICAodmFs IChyZWFkL3JwIGF0dHJpYnV0ZS12YWx1ZS1ncmFtbWFyICh0aGUtcG9ydCkgc3RyaWN0IHRhZykp KQoJICAoY29ucyAoc3RyaW5nLT5zeW1ib2wgKGRlY29kZXIga2V5KSkgKGRlY29kZXIgdmFsKSkp KQogICAgICAoKDogaWQgKCsgYmxhbmspICI9IikKICAgICAgIChsZXQqICgoa2V5ICh0aGUtc3Vi c3RyaW5nIDAgKC1meCAodGhlLWxlbmd0aCkgMikpKQoJICAgICAgKHZhbCAocmVhZC9ycCBhdHRy aWJ1dGUtdmFsdWUtZ3JhbW1hciAodGhlLXBvcnQpIHN0cmljdCB0YWcpKSkKCSAgKGxldCBsb29w ICgoaSAoLWZ4IChzdHJpbmctbGVuZ3RoIGtleSkgMSkpKQoJICAgICAoY2FzZSAoc3RyaW5nLXJl ZiBrZXkgaSkKCQkoKCNcc3BhY2UgI1x0YWIgI1xOZXdsaW5lKQoJCSAobG9vcCAoLWZ4IGkgMSkp KQoJCShlbHNlCgkJIChzZXQhIGtleSAoc3Vic3RyaW5nIGtleSAwICgrIGkgMSkpKSkpKQoJICAo Y29ucyAoc3RyaW5nLT5zeW1ib2wgKGRlY29kZXIga2V5KSkgKGRlY29kZXIgdmFsKSkpKQogICAg ICAoKDogaWQpCiAgICAgICAobGV0KiAoKGtleSAoZGVjb2RlciAodGhlLXN0cmluZykpKSkKCSAg KGNvbnMgKHN0cmluZy0+c3ltYm9sIGtleSkga2V5KSkpCiAgICAgICgob3IgIi8+IiAiPiIpCiAg ICAgICAodGhlLXN5bWJvbCkpCiAgICAgIChlbHNlCiAgICAgICAobGV0ICgoYyAodGhlLWZhaWx1 cmUpKSkKCSAgKGlmIChub3QgKGVvZi1vYmplY3Q/IGMpKQoJICAgICAgKHhtbC1wYXJzZS1lcnJv ciAiSWxsZWdhbCBhdHRyaWJ1dGUgY2hhcmFjdGVyIgoJCQkgICAgICAgKGVycm9yLWxpbmUgYyAo dGhlLXBvcnQpKQoJCQkgICAgICAgKGlucHV0LXBvcnQtbmFtZSAodGhlLXBvcnQpKQoJCQkgICAg ICAgKGlucHV0LXBvcnQtcG9zaXRpb24gKHRoZS1wb3J0KSkpCgkgICAgICAoeG1sLXBhcnNlLWVy cm9yCgkgICAgICAgKGZvcm1hdCAiUHJlbWF0dXJlIGVuZCBvZiBsaW5lLCBleHBlY3RpbmcgdGFn IGB+YSciIHRhZykKCSAgICAgICBjCgkgICAgICAgKGlucHV0LXBvcnQtbmFtZSAodGhlLXBvcnQp KQoJICAgICAgICgtZnggKGlucHV0LXBvcnQtcG9zaXRpb24gKHRoZS1wb3J0KSkgMSkpKSkpKSkK CjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8KOyogICAgY2RhdGEtZ3JhbW1hciAuLi4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCihkZWZp bmUgY2RhdGEtZ3JhbW1hcgogICAocmVndWxhci1ncmFtbWFyIChkZWNvZGVyKQogICAgICAoKCog KG91dCAiXSIpKQogICAgICAgKGxldCogKChyZXMgKGRlY29kZXIgKHRoZS1zdHJpbmcpKSkKCSAg ICAgIChyZXN0IChpZ25vcmUpKSkKCSAgKHN0cmluZy1hcHBlbmQgcmVzIHJlc3QpKSkKICAgICAg KCJdIgogICAgICAgKHN0cmluZy1hcHBlbmQgIl0iIChpZ25vcmUpKSkKICAgICAgKCg6ICJdXT4i ICg/ICJcbiIpKQogICAgICAgIiIpCiAgICAgIChlbHNlCiAgICAgICAobGV0KiAoKGMgKHRoZS1m YWlsdXJlKSkKCSAgICAgIChtc2cgKGlmIChub3QgKGVvZi1vYmplY3Q/IGMpKQoJCSAgICAgICAi SWxsZWdhbCA8IVtDREFUQVsgY2hhcmFjdGVyIgoJCSAgICAgICAiUHJlbWF0dXJlIGVuZCBvZiBs aW5lLCBleHBlY3RpbmcgdGFnIGBdXT4nIikpKQoJICAoeG1sLXBhcnNlLWVycm9yIG1zZwoJCQkg ICBjCgkJCSAgIChpbnB1dC1wb3J0LW5hbWUgKHRoZS1wb3J0KSkKCQkJICAgKGlucHV0LXBvcnQt cG9zaXRpb24gKHRoZS1wb3J0KSkpKSkpKQoKOyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo7KiAgICBnZXQtZGVj b2RlciAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICovCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi8KKGRlZmluZSAoZ2V0LWRlY29kZXI6OnByb2NlZHVyZSBlbmM6 OmJzdHJpbmcgZHN0LWVuYykKICAgKGxldCAoKHNyYy1lbmMgKHN0cmluZy0+c3ltYm9sIChzdHJp bmctdXBjYXNlIGVuYykpKSkKICAgICAgKGNvbmQKCSAoKG9yIChub3Qgc3JjLWVuYykgKGVxPyBz cmMtZW5jIGRzdC1lbmMpKQoJICAobGFtYmRhICh4KSB4KSkKCSAoKGVxPyBzcmMtZW5jICdVVEYt OCkKCSAgKGNvbmQKCSAgICAgKChtZW1xIGRzdC1lbmMgJyhJU08tODg1OS0xIElTTy04ODU5LTIg SVNPLTg4NTktMTUpKQoJICAgICAgdXRmOC0+aXNvLWxhdGluKQoJICAgICAoKGVxPyBkc3QtZW5j ICdVQ1MtMikKCSAgICAgIHV0Zjgtc3RyaW5nLT51Y3MyLXN0cmluZykKCSAgICAgKGVsc2UKCSAg ICAgIChsYW1iZGEgKHgpIHgpKSkpCgkgKChtZW1xIHNyYy1lbmMgJyhJU08tODg1OS0xIElTTy04 ODU5LTIgSVNPLTg4NTktMTUpKQoJICAoY29uZAoJICAgICAoKGVxPyBkc3QtZW5jICdVVEYtOCkK CSAgICAgIGlzby1sYXRpbi0+dXRmOCkKCSAgICAgKChlcT8gZHN0LWVuYyAnVUNTLTIpCgkgICAg ICAobGFtYmRhICh4KQoJCSAodXRmOC1zdHJpbmctPnVjczItc3RyaW5nIChpc28tbGF0aW4tPnV0 ZjggeCkpKSkKCSAgICAgKGVsc2UKCSAgICAgIChsYW1iZGEgKHgpIHgpKSkpCgkgKGVsc2UKCSAg KGxhbWJkYSAoeCkgeCkpKSkpCiAgICAgIAo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCjsqICAgIHhtbC1ncmFt bWFyIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8KOyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0qLwooZGVmaW5lIHhtbC1ncmFtbWFyCiAgIChyZWd1bGFyLWdyYW1t YXIgKChpZCAoOiAoaW4gKCJhekFaIikgIiE/IikgKCogKGluICgiYXpBWjA5IikgIjpfLSIpKSkp CgkJICAgICBuZXh0CgkJICAgICBtYWtlCgkJICAgICBzcGVjaWFscwoJCSAgICAgc3RyaWN0CgkJ ICAgICBkZWNvZGVyCgkJICAgICBlbmNvZGluZwogICAgICAgICAgICAgICAgICAgICBwb3MpCiAg ICAgIChkZWZpbmUgKHVwZGF0ZS1zdGFydC1wb3NpdGlvbiEpCiAgICAgICAoc2V0ISBwb3MgKCsg KGlucHV0LXBvcnQtcG9zaXRpb24gKHRoZS1wb3J0KSkgMSkpKQogICAgICAKICAgICAgKCgrIChp biAiIFx0XG5cciIpKQogICAgICAgKHVwZGF0ZS1zdGFydC1wb3NpdGlvbiEpCiAgICAgICAodGhl LXN0cmluZykpCiAgICAgICgoOiAiPCEtLSIKCSAgKCogKG9yIChvdXQgIi0iKSAoOiAiLSIgKG91 dCAiLSIpKSAoOiAiLS0iIChvdXQgIj4iKSkpKQoJICAiLS0+IikKICAgICAgICh1cGRhdGUtc3Rh cnQtcG9zaXRpb24hKQogICAgICAgKGNvbnMgJ2NvbW1lbnQgKHRoZS1zdHJpbmcpKSkKICAgICAg KCg6ICI8ISIgKDogKG9yIChvdXQgIlstIikgKDogIi0iIChvdXQgIi0iKSkpCgkJICAoKiAob3V0 ICI+XSIpKQoJCSAgKD8gKDogIlsiICgqIChvdXQgIl0iKSkgIl0iKSkKCQkgICgqIChvdXQgIj4i KSkpICI+IikKICAgICAgICh1cGRhdGUtc3RhcnQtcG9zaXRpb24hKQogICAgICAgKGNvbnMgJ2Rl Y2xhcmF0aW9uICh0aGUtc3RyaW5nKSkpCiAgICAgICgiPCFbQ0RBVEFbIgogICAgICAgKGxldCAo KGNkYXRhIChyZWFkL3JwIGNkYXRhLWdyYW1tYXIgKHRoZS1wb3J0KSBkZWNvZGVyKSkpCiAgICAg ICAgICAodXBkYXRlLXN0YXJ0LXBvc2l0aW9uISkKICAgICAgICAgIChjb25zICdjZGF0YSBjZGF0 YSkpKQogICAgICAoKDogIjw/eG1sICIgKCogKG91dCAiPz4iKSkgIj8+IikKICAgICAgIChsZXQg KChzICh0aGUtc3Vic3RyaW5nIDYgKHRoZS1sZW5ndGgpKSkpCgkgIChzdHJpbmctc2V0ISBzICgt ZnggKHN0cmluZy1sZW5ndGggcykgMikgI1xzcGFjZSkKCSAgKGxldCAoKHAgKG9wZW4taW5wdXQt c3RyaW5nIHMpKSkKCSAgICAgKGxldCBsb29wICgoYXR0ciAnKCkpKQoJCShsZXQgKChvYmogKHJl YWQvcnAgYXR0cmlidXRlLWdyYW1tYXIgcCAneG1sICN0IGRlY29kZXIpKSkKCQkgICAoY29uZAoJ CSAgICAgICgocGFpcj8gb2JqKQoJCSAgICAgICAobG9vcCAoY29ucyBvYmogYXR0cikpKQoJCSAg ICAgICgoZXE/IG9iaiAnPikKICAgICAgICAgICAgICAgICAgICAgICAodXBkYXRlLXN0YXJ0LXBv c2l0aW9uISkKCQkgICAgICAgKGNvbnMgJ3htbC1kZWNsIGF0dHIpKSkpKSkpKQogICAgICAoKDog Ijw/IiAoKiAob3V0ICI+IikpICI+IikKICAgICAgICh1cGRhdGUtc3RhcnQtcG9zaXRpb24hKQog ICAgICAgKGNvbnMgJ2luc3RydWN0aW9uICh0aGUtc3RyaW5nKSkpCiAgICAgICgoOiAiPCIgaWQg Ij4iKQogICAgICAgKGxldCogKCh0ICh0aGUtc3Vic3RyaW5nIDEgKC1meCAodGhlLWxlbmd0aCkg MSkpKQoJICAgICAgKHRzIChzdHJpbmctPnN5bWJvbCB0KSkKCSAgICAgIChwICh0aGUtcG9ydCkp KQoJICAobGV0ICgoZWxlbWVudCAoY29sbGVjdC11cC10byBwb3MgaWdub3JlIHRzICcoKSBwIG1h a2Ugc3BlY2lhbHMgc3RyaWN0IGRlY29kZXIgZW5jb2RpbmcpKSkKICAgICAgICAgICAgICh1cGRh dGUtc3RhcnQtcG9zaXRpb24hKQogICAgICAgICAgICAgZWxlbWVudCkpKQogICAgICAoKDogIjwi IGlkICIvPiIpCiAgICAgICAobGV0ICgodCAodGhlLXN1YnN0cmluZyAxICgtZnggKHRoZS1sZW5n dGgpIDIpKSkpCiAgICAgICAgICAobGV0ICgocCBwb3MpKQogICAgICAgICAgICAgKHVwZGF0ZS1z dGFydC1wb3NpdGlvbiEpCiAgICAgICAgICAgICAobWFrZSBwIChzdHJpbmctPnN5bWJvbCB0KSAn KCkgJygpKSkpKQogICAgICAoKDogIjwiIGlkIChpbiAiIFxuXHRcciIpKQogICAgICAgKGxldCog KCh0ICh0aGUtc3Vic3RyaW5nIDEgKC1meCAodGhlLWxlbmd0aCkgMSkpKQoJICAgICAgKHRzIChz dHJpbmctPnN5bWJvbCB0KSkKCSAgICAgIChwICh0aGUtcG9ydCkpKQoJICAobGV0IGxvb3AgKChh dHRyICcoKSkpCgkgICAgIChsZXQgKChvYmogKHJlYWQvcnAgYXR0cmlidXRlLWdyYW1tYXIgcCB0 IHN0cmljdCBkZWNvZGVyKSkpCgkJKGNvbmQKCQkgICAoKHBhaXI/IG9iaikKCQkgICAgKGxvb3Ag KGNvbnMgb2JqIGF0dHIpKSkKCQkgICAoKGVxPyBvYmogJz4pCgkJICAgIChsZXQgKChlbGVtZW50 IChjb2xsZWN0LXVwLXRvIHBvcyBpZ25vcmUgdHMgKHJldmVyc2UhIGF0dHIpIHAgbWFrZSBzcGVj aWFscyBzdHJpY3QgZGVjb2RlciBlbmNvZGluZykpKQogICAgICAgICAgICAgICAgICAgICAgICh1 cGRhdGUtc3RhcnQtcG9zaXRpb24hKQogICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQpKQoJ CSAgICgoZXE/IG9iaiAnLz4pCiAgICAgICAgICAgICAgICAgICAgKGxldCAoKHAgcG9zKSkKICAg ICAgICAgICAgICAgICAgICAgICAodXBkYXRlLXN0YXJ0LXBvc2l0aW9uISkKICAgICAgICAgICAg ICAgICAgICAgICAobWFrZSBwIHRzIChyZXZlcnNlISBhdHRyKSAnKCkpKSkpKSkpKQogICAgICAo KDogIjwvIiBpZCAiPiIpCiAgICAgICAodXBkYXRlLXN0YXJ0LXBvc2l0aW9uISkKICAgICAgIChz dHJpbmctPnN5bWJvbCAodGhlLXN1YnN0cmluZyAyICgtZnggKHRoZS1sZW5ndGgpIDEpKSkpCiAg ICAgICgoKyAob3V0ICI8IikpCiAgICAgICAodXBkYXRlLXN0YXJ0LXBvc2l0aW9uISkKICAgICAg IChkZWNvZGVyICh0aGUtc3RyaW5nKSkpCiAgICAgIChlbHNlCiAgICAgICAobGV0ICgoYyAodGhl LWZhaWx1cmUpKSkKCSAgKGNvbmQKCSAgICAgKChub3QgKGVvZi1vYmplY3Q/IGMpKQoJICAgICAg KHhtbC1wYXJzZS1lcnJvciAiSWxsZWdhbCBjaGFyYWN0ZXIiCgkJCSAgICAgICAoZXJyb3ItbGlu ZSBjICh0aGUtcG9ydCkpCgkJCSAgICAgICAoaW5wdXQtcG9ydC1uYW1lICh0aGUtcG9ydCkpCgkJ CSAgICAgICAoaW5wdXQtcG9ydC1wb3NpdGlvbiAodGhlLXBvcnQpKSkpCgkgICAgIChlbHNlCgkg ICAgICBjKSkpKSkpCgo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCjsqICAgIGNoYXItaGV4bnVtZXJpYz8gLi4u ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KOyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0qLwooZGVmaW5lIChjaGFyLWhleG51bWVyaWM/IGMpCiAgIChvciAoY2hhci1udW1lcmlj PyBjKQogICAgICAgKGFuZCAoY2hhcj49PyBjICNcQSkgKGNoYXI8PT8gYyAjXEYpKQogICAgICAg KGFuZCAoY2hhcj49PyBjICNcYSkgKGNoYXI8PT8gYyAjXGYpKSkpCgo7Ki0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov CjsqICAgIHhtbC1zdHJpbmctZGVjb2RlLWlubmVyISAuLi4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi8KOyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwooZGVmaW5lICh4bWwtc3RyaW5nLWRl Y29kZS1pbm5lciEgc3RyIG9sIG5sIHJlcykKICAgKGRlZmluZSAoY2hhci12YWx1ZSBjKQogICAg ICAoY29uZAoJICgoY2hhci1udW1lcmljPyBjKQoJICAoLWZ4IChjaGFyLT5pbnRlZ2VyIGMpIChj aGFyLT5pbnRlZ2VyICNcMCkpKQoJICgoY2hhcjw9PyBjICNcRikKCSAgKCtmeCAxMCAoLWZ4IChj aGFyLT5pbnRlZ2VyIGMpIChjaGFyLT5pbnRlZ2VyICNcQSkpKSkKCSAoZWxzZQoJICAoK2Z4IDEw ICgtZnggKGNoYXItPmludGVnZXIgYykgKGNoYXItPmludGVnZXIgI1xhKSkpKSkpCiAgIChsZXQg KChvbC0yICgtZnggb2wgMikpKQogICAgICAobGV0IGxvb3AgKChpIDApCgkJIChqIDApKQoJIChp ZiAoPWZ4IGogbmwpCgkgICAgIHJlcwoJICAgICAobGV0ICgoYyAoc3RyaW5nLXJlZiBzdHIgaSkp KQoJCShpZiAoYW5kIChjaGFyPT8gYyAjXCUpICg8ZnggaSBvbC0yKSkKCQkgICAgKGxldCAoKGMx IChzdHJpbmctcmVmIHN0ciAoK2Z4IGkgMSkpKQoJCQkgIChjMiAoc3RyaW5nLXJlZiBzdHIgKCtm eCBpIDIpKSkpCgkJICAgICAgIChpZiAoYW5kIChjaGFyLWhleG51bWVyaWM/IGMxKSAoY2hhci1o ZXhudW1lcmljPyBjMikpCgkJCSAgIChsZXQqICgodjEgKGNoYXItdmFsdWUgYzEpKQoJCQkJICAo djIgKGNoYXItdmFsdWUgYzIpKQoJCQkJICAoZCAoaW50ZWdlci0+Y2hhciAoK2Z4ICgqZnggdjEg MTYpIHYyKSkpKQoJCQkgICAgICAoc3RyaW5nLXNldCEgcmVzIGogZCkKCQkJICAgICAgKGxvb3Ag KCtmeCBpIDMpICgrZnggaiAxKSkpCgkJCSAgIChiZWdpbgoJCQkgICAgICAoc3RyaW5nLXNldCEg cmVzIGogYykKCQkJICAgICAgKGxvb3AgKCtmeCBpIDEpICgrZnggaiAxKSkpKSkKCQkgICAgKGJl Z2luCgkJICAgICAgIChzdHJpbmctc2V0ISByZXMgaiBjKQoJCSAgICAgICAobG9vcCAoK2Z4IGkg MSkgKCtmeCBqIDEpKSkpKSkpKSkKCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KOyogICAgeG1sLWNvdW50IC4u LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwo7 Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCihkZWZpbmUgKHhtbC1jb3VudCBzdHIgb2wpCiAgIChsZXQgbG9vcCAo KGkgMCkKCSAgICAgIChjIDApKQogICAgICAoY29uZAoJICgoPWZ4IGkgb2wpCgkgIGMpCgkgKChj aGFyPT8gKHN0cmluZy1yZWYgc3RyIGkpICNcJikKCSAgKGNvbmQKCSAgICAgKChzdWJzdHJpbmct YXQ/IHN0ciAiJmx0OyIgaSkKCSAgICAgIChsb29wICgrZnggaSA0KSAoK2Z4IGMgMSkpKQoJICAg ICAoKHN1YnN0cmluZy1hdD8gc3RyICImZ3Q7IiBpKQoJICAgICAgKGxvb3AgKCtmeCBpIDQpICgr ZnggYyAxKSkpCgkgICAgICgoc3Vic3RyaW5nLWF0PyBzdHIgIiZhbXA7IiBpKQoJICAgICAgKGxv b3AgKCtmeCBpIDUpICgrZnggYyAxKSkpCgkgICAgICgoc3Vic3RyaW5nLWF0PyBzdHIgIiZxdW90 OyIgaSkKCSAgICAgIChsb29wICgrZnggaSA2KSAoK2Z4IGMgMSkpKQoJICAgICAoKHN1YnN0cmlu Zy1hdD8gc3RyICImbmJzcDsiIGkpCgkgICAgICAobG9vcCAoK2Z4IGkgNikgKCtmeCBjIDEpKSkK CSAgICAgKChzdWJzdHJpbmctYXQ/IHN0ciAiJiMiIGkpCgkgICAgICAobGV0IGxpaXAgKChpICgr ZnggaSAyKSkpCgkJIChjb25kCgkJICAgICgoPWZ4IGkgb2wpCgkJICAgICBjKQoJCSAgICAoKGNo YXItbnVtZXJpYz8gKHN0cmluZy1yZWYgc3RyIGkpKQoJCSAgICAgKGxpaXAgKCtmeCBpIDEpKSkK CQkgICAgKGVsc2UKCQkgICAgIChsb29wICgrZnggaSAxKSAoK2Z4IGMgMSkpKSkpKQoJICAgICAo ZWxzZQoJICAgICAgKGxvb3AgKCtmeCBpIDEpICgrZnggYyAxKSkpKSkKCSAoZWxzZQoJICAobG9v cCAoK2Z4IGkgMSkgKCtmeCBjIDEpKSkpKSkKCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KOyogICAgeG1sLWRl Y29kZSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLwo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSovCihkZWZpbmUgKHhtbC1kZWNvZGUhIHN0ciByZXMgb2wgbmwp CiAgIChsZXQgbG9vcCAoKGkgMCkKCSAgICAgIChqIDApKQogICAgICAoY29uZAoJICgoPWZ4IGkg b2wpCgkgIHJlcykKCSAoKGNoYXI9PyAoc3RyaW5nLXJlZiBzdHIgaSkgI1wmKQoJICAoY29uZAoJ ICAgICAoKHN1YnN0cmluZy1hdD8gc3RyICImbHQ7IiBpKQoJICAgICAgKHN0cmluZy1zZXQhIHJl cyBqICNcPCkKCSAgICAgIChsb29wICgrZnggaSA0KSAoK2Z4IGogMSkpKQoJICAgICAoKHN1YnN0 cmluZy1hdD8gc3RyICImZ3Q7IiBpKQoJICAgICAgKHN0cmluZy1zZXQhIHJlcyBqICNcPikKCSAg ICAgIChsb29wICgrZnggaSA0KSAoK2Z4IGogMSkpKQoJICAgICAoKHN1YnN0cmluZy1hdD8gc3Ry ICImYW1wOyIgaSkKCSAgICAgIChzdHJpbmctc2V0ISByZXMgaiAjXCYpCgkgICAgICAobG9vcCAo K2Z4IGkgNSkgKCtmeCBqIDEpKSkKCSAgICAgKChzdWJzdHJpbmctYXQ/IHN0ciAiJnF1b3Q7IiBp KQoJICAgICAgKHN0cmluZy1zZXQhIHJlcyBqICNcIikKCSAgICAgIChsb29wICgrZnggaSA2KSAo K2Z4IGogMSkpKQoJICAgICAoKHN1YnN0cmluZy1hdD8gc3RyICImbmJzcDsiIGkpCgkgICAgICAo c3RyaW5nLXNldCEgcmVzIGogI1xzcGFjZSkKCSAgICAgIChsb29wICgrZnggaSA2KSAoK2Z4IGog MSkpKQoJICAgICAoKHN1YnN0cmluZy1hdD8gc3RyICImIyIgaSkKCSAgICAgIChsZXQgbGlpcCAo KGkgKCtmeCBpIDIpKQoJCQkgKG4gMCkpCgkJIChpZiAoPWZ4IGkgb2wpCgkJICAgICByZXMKCQkg ICAgIChsZXQgKChjIChzdHJpbmctcmVmIHN0ciBpKSkpCgkJCShpZiAoY2hhci1udW1lcmljPyBj KQoJCQkgICAgKGxpaXAgKCtmeCBpIDEpCgkJCSAgICAgICAoK2Z4ICgqZnggbiAxMCkKCQkJCSAg KC1meCAoY2hhci0+aW50ZWdlciBjKQoJCQkJICAgICAoY2hhci0+aW50ZWdlciAjXDApKSkpCgkJ CSAgICAoYmVnaW4KCQkJICAgICAgIChzdHJpbmctc2V0ISByZXMgaiAoaW50ZWdlci0+Y2hhciBu KSkKCQkJICAgICAgIChsb29wICgrZnggaSAxKSAoK2Z4IGogMSkpKSkpKSkpCgkgICAgIChlbHNl CgkgICAgICAoc3RyaW5nLXNldCEgcmVzIGogKHN0cmluZy1yZWYgc3RyIGkpKQoJICAgICAgKGxv b3AgKCtmeCBpIDEpICgrZnggaiAxKSkpKSkKCSAoZWxzZQoJICAoc3RyaW5nLXNldCEgcmVzIGog KHN0cmluZy1yZWYgc3RyIGkpKQoJICAobG9vcCAoK2Z4IGkgMSkgKCtmeCBqIDEpKSkpKSkKCjsq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKi8KOyogICAgeG1sLXN0cmluZy1kZWNvZGUgLi4uICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCihkZWZpbmUg KHhtbC1zdHJpbmctZGVjb2RlIHN0cikKICAgKGxldCAoKG9sIChzdHJpbmctbGVuZ3RoIHN0cikp KQogICAgICAoaWYgKD49Znggb2wgMykKCSAgKGxldCAoKG5sICh4bWwtY291bnQgc3RyIG9sKSkp CgkgICAgIChpZiAoPWZ4IG5sIG9sKQoJCSAoc3RyaW5nLWNvcHkgc3RyKQoJCSAobGV0ICgocmVz IChtYWtlLXN0cmluZyBubCkpKQoJCSAgICAoeG1sLWRlY29kZSEgc3RyIHJlcyBvbCBubCkKCQkg ICAgcmVzKSkpCgkgIChzdHJpbmctY29weSBzdHIpKSkpCiAgIAo7Ki0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCjsq ICAgIHhtbC1zdHJpbmctZGVjb2RlISAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8KOyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwooZGVmaW5lICh4bWwtc3RyaW5nLWRlY29k ZSEgc3RyKQogICAobGV0ICgob2wgKHN0cmluZy1sZW5ndGggc3RyKSkpCiAgICAgIChpZiAoPj1m eCBvbCAzKQoJICAobGV0ICgobmwgKHhtbC1jb3VudCBzdHIgb2wpKSkKCSAgICAgKGlmICg9Zngg bmwgb2wpCgkJIHN0cgoJCSAoYmVnaW4KCQkgICAgKHhtbC1kZWNvZGUhIHN0ciBzdHIgb2wgbmwp CgkJICAgIChzdHJpbmctc2hyaW5rISBzdHIgbmwpKSkpCgkgIHN0cikpKQoKOyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0qLwo7KiAgICB4bWwtc3RyaW5nLWVuY29kZSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKGRlZmluZSAoeG1sLXN0cmlu Zy1lbmNvZGUgc3RyKQogICAoZGVmaW5lIChjb3VudCBzdHIgb2wpCiAgICAgIChsZXQgbG9vcCAo KGkgMCkKCQkgKG4gMCkpCgkgKGlmICg9ZnggaSBvbCkKCSAgICAgbgoJICAgICAobGV0ICgoYyAo c3RyaW5nLXJlZiBzdHIgaSkpKQoJCShjYXNlIGMKCQkgICAoKCNcIikKCQkgICAgKGxvb3AgKCtm eCBpIDEpICgrZnggbiA2KSkpCgkJICAgKCgjXCYpCgkJICAgIChsb29wICgrZnggaSAxKSAoK2Z4 IG4gNSkpKQoJCSAgICgoI1w8ICNcPikKCQkgICAgKGxvb3AgKCtmeCBpIDEpICgrZnggbiA0KSkp CgkJICAgKGVsc2UKCQkgICAgKGxvb3AgKCtmeCBpIDEpICgrZnggbiAxKSkpKSkpKSkKICAgKGRl ZmluZSAoZW5jb2RlIHN0ciBvbCBubCkKICAgICAgKGlmICg9Znggbmwgb2wpCgkgIHN0cgoJICAo bGV0ICgocmVzIChtYWtlLXN0cmluZyBubCkpKQoJICAgICAobGV0IGxvb3AgKChpIDApCgkJCShq IDApKQoJCShpZiAoPWZ4IGogbmwpCgkJICAgIHJlcwoJCSAgICAobGV0ICgoYyAoc3RyaW5nLXJl ZiBzdHIgaSkpKQoJCSAgICAgICAoY2FzZSBjCgkJCSAgKCgjXDwpCgkJCSAgIChibGl0LXN0cmlu ZyEgIiZsdDsiIDAgcmVzIGogNCkKCQkJICAgKGxvb3AgKCtmeCBpIDEpICgrZnggaiA0KSkpCgkJ CSAgKCgjXD4pCgkJCSAgIChibGl0LXN0cmluZyEgIiZndDsiIDAgcmVzIGogNCkKCQkJICAgKGxv b3AgKCtmeCBpIDEpICgrZnggaiA0KSkpCgkJCSAgKCgjXCYpCgkJCSAgIChibGl0LXN0cmluZyEg IiZhbXA7IiAwIHJlcyBqIDUpCgkJCSAgIChsb29wICgrZnggaSAxKSAoK2Z4IGogNSkpKQoJCQkg ICgoI1wiKQoJCQkgICAoYmxpdC1zdHJpbmchICImcXVvdDsiIDAgcmVzIGogNikKCQkJICAgKGxv b3AgKCtmeCBpIDEpICgrZnggaiA2KSkpCgkJCSAgKGVsc2UKCQkJICAgKHN0cmluZy1zZXQhIHJl cyBqIGMpCgkJCSAgIChsb29wICgrZnggaSAxKSAoK2Z4IGogMSkpKSkpKSkpKSkKICAgKGxldCAo KG9sIChzdHJpbmctbGVuZ3RoIHN0cikpKQogICAgICAoZW5jb2RlIHN0ciBvbCAoY291bnQgc3Ry IG9sKSkpKQoJIAo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCjsqICAgIHJlYWQteG1sIC4uLiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KOyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0qLwooZGVmaW5lIChyZWFkLXhtbCAjIW9wdGlvbmFsIChwb3J0OjppbnB1dC1wb3J0IChjdXJy ZW50LWlucHV0LXBvcnQpKSkKICAgKHhtbC1wYXJzZSBwb3J0KSkKCjsqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K OyogICAgeG1sLW1ldGFkYXRhIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqLwo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCihkZWZpbmUgKHhtbC1tZXRhZGF0YSB4 bWwpCiAgIChsZXQgKCh4bWwtdmVyICNmKQoJICh4bWwtZW5jICNmKQoJICh4bWwtbGFuZyAjZikK CSAocm9vdC12ZXIgMC4wKQoJICh4bWwtcm9vdCAjZikKCSAoeG1sLW5zICcoKSkpCiAgICAgIChs ZXQgbG9vcDEgKChsIHhtbCkpCgkgKHdoZW4gKHBhaXI/IGwpCgkgICAgKG1hdGNoLWNhc2UgKGNh ciBsKQoJICAgICAgICgoeG1sLWRlY2wgLiAoYW5kID9hdHRyICg/LSAuID8tKSkpCgkJKGZvci1l YWNoIChsYW1iZGEgKGF0KQoJCQkgICAgIChjYXNlIChjYXIgYXQpCgkJCQkoKHZlcnNpb24pIChz ZXQhIHhtbC12ZXIgKGNkciBhdHRyKSkpCgkJCQkoKGVuY29kaW5nKSAoc2V0ISB4bWwtZW5jIChj ZHIgYXR0cikpKSkpCgkJCSAgYXR0cikpCgkgICAgICAgKCg/bWFyayA/bGF0dHIgLiA/LSkKCQko bGV0IGxvb3AzICgobGF0dHIgbGF0dHIpKQoJCSAgICh1bmxlc3MgeG1sLXJvb3QgKHNldCEgeG1s LXJvb3QgbWFyaykpCgkJICAgKHdoZW4gKHBhaXI/IGxhdHRyKQoJCSAgICAgIChsZXQgKChhdHRy IChjYXIgbGF0dHIpKSkKCQkJIChjYXNlIChjYXIgYXR0cikKCQkJICAgICgoeG1sOmxhbmcpCgkJ CSAgICAgKHNldCEgeG1sLWxhbmcgKGNkciBhdHRyKSkpCgkJCSAgICAoKHhtbG5zKQoJCQkgICAg IChzZXQhIHhtbC1yb290IChjb25zIChjZHIgYXR0cikgeG1sLXJvb3QpKSkKCQkJICAgICgodmVy c2lvbikKCQkJICAgICAoc2V0ISByb290LXZlciAoc3RyaW5nLT5udW1iZXIgKGNkciBhdHRyKSkp KQoJCQkgICAgKGVsc2UKCQkJICAgICAobGV0ICgoc3RyIChzeW1ib2wtPnN0cmluZyAoY2FyIGF0 dHIpKSkpCgkJCQkod2hlbiAoc3Vic3RyaW5nPT8gc3RyICJ4bWxuczoiIDYpCgkJCQkgICAobGV0 KiAoKGwgKHN0cmluZy1sZW5ndGggc3RyKSkKCQkJCQkgIChzIChzdWJzdHJpbmcgc3RyIDYgbCkp CgkJCQkJICAoc2kgKHN0cmluZy0+c3ltYm9sIHMpKSkKCQkJCSAgICAgIChzZXQhIHhtbC1ucwoJ CQkJCSAgICAoY29ucyAoY29ucyAoY2RyIGF0dHIpIHNpKQoJCQkJCQkgIHhtbC1ucykpKSkpKSkK CQkJIChsb29wMyAoY2RyIGxhdHRyKSkpKSkpKQoJICAgIChsb29wMSAoY2RyIGwpKSkpCiAgICAg ICh1bmxlc3MgeG1sLXJvb3QKCSAoZXJyb3IgInhtbC1tZXRhZGF0YSIgIkVtcHR5IFhNTCBkb2N1 bWVudCAhIiB4bWwpKQogICAgICA7OyBWYWx1ZXMgYXJlIDoKICAgICAgOzsgLSBYTUwgVmVyc2lv biAoMS4wIG9yIDEuMSkgb3IgI2YKICAgICAgOzsgLSBYTUwgRW5jb2RpbmcgKCNmIGlmIHVua25v d24pCiAgICAgIDs7IC0geG1sOmxhbmcgdmFsdWUKICAgICAgOzsgLSBQYWlyLCB3aGljaCBjYXIg aXMgdGhlIGZpcnN0IGRhdGEgbWFya3VwLCBhbmQKICAgICAgOzsgICBjZHIgdGhlIGRlZmF1bHQg bmFtZXNwYWNlCiAgICAgIDs7IC0geG1sIGZpcnN0IGRhdGEgbWFya3VwIHZlcnNpb24gYXR0cmli dXRlICgwIGlmIHVuc3BlY2lmaWVkKQogICAgICA7OyAtIGxpc3Qgb2YgcHJlZml4ZWQgbmFtZXNw YWNlcyAocHJlZml4IC4gcGF0aCkKICAgICAgKHZhbHVlcyB4bWwtdmVyIHhtbC1lbmMgeG1sLWxh bmcgeG1sLXJvb3Qgcm9vdC12ZXIgeG1sLW5zKSkpCg== ------=_Part_5351822_936647154.1643829109283--