<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>11625</bug_id>
          
          <creation_ts>2006-11-17 02:05:22 -0800</creation_ts>
          <short_desc>Investigate possibility to share code between HTMLStyleElement and SVGStyleElement</short_desc>
          <delta_ts>2006-12-09 14:07:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Rob Buis">rwlbuis</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>45604</commentid>
    <comment_count>0</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-11-17 02:05:22 -0800</bug_when>
    <thetext>SVGStyleElement contains this comment:

 // FIXME: this code should be shared with HTMLStyleElement::childrenChanged()

The idea is to investigate how much can be shared and whether it is worth it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45605</commentid>
    <comment_count>1</comment_count>
      <attachid>11547</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-11-17 02:14:10 -0800</bug_when>
    <thetext>Created attachment 11547
First attempt

My first stab at this. It seems unfortunately MI or a helper class has to be used simply because one is a html and one is a svg class. Let me know if this is a good idea and worth it.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45610</commentid>
    <comment_count>2</comment_count>
      <attachid>11550</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-11-17 03:06:08 -0800</bug_when>
    <thetext>Created attachment 11550
Another option

It is possible to take it one step further and merge some of the code paths in Document::recalcStyleSelector, as this patch shows.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45541</commentid>
    <comment_count>3</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-11-17 12:49:12 -0800</bug_when>
    <thetext>Landed in r17829.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45535</commentid>
    <comment_count>4</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-11-17 12:50:30 -0800</bug_when>
    <thetext>Oops, I meant to close 11635 instead of this one, reopening.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45317</commentid>
    <comment_count>5</comment_count>
      <attachid>11550</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-11-18 17:54:47 -0800</bug_when>
    <thetext>Comment on attachment 11550
Another option

The Document.cpp change is great, but it seems like a separate fix to me -- it&apos;s independent of the inheritance change.

THe new base class seems OK. It&apos;s good not to have two entire copies of the code, even though we end up using multiple inheritance.

+    , StyleElement()

You should not need to explicitly invoke the base class&apos;s default constructor like this.

+//fprintf(stderr, &quot;isLoading %d\n&quot;, m_loading);

Please don&apos;t land these.

Why all the changes from AtomicString to String? When possible, it&apos;s great to have functions take AtomicString parameters, in case you&apos;re already calling with an atomic string -- saves a hash table lookup. And it&apos;s great to have const AtomicString&amp; return types instead of String in cases where that works -- much more efficient, but you can&apos;t always do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45214</commentid>
    <comment_count>6</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-11-19 05:31:09 -0800</bug_when>
    <thetext>Hi Darin,

(In reply to comment #5)
&gt; (From update of attachment 11550 [edit])
&gt; The Document.cpp change is great, but it seems like a separate fix to me --
&gt; it&apos;s independent of the inheritance change.

Right. At first I wanted to be able to cast both SVGStyle and HTMLStyle to a common base class and use that, and in the end not needing SVG_SUPPORT tests. I don&apos;t think that is doable anymore since svg needs slightly different behaviour here than html. Also it would require a dynamic_cast.

&gt; THe new base class seems OK. It&apos;s good not to have two entire copies of the
&gt; code, even though we end up using multiple inheritance.
&gt; 
&gt; +    , StyleElement()
&gt; 
&gt; You should not need to explicitly invoke the base class&apos;s default constructor
&gt; like this.

Fixed.

&gt; +//fprintf(stderr, &quot;isLoading %d\n&quot;, m_loading);
&gt; 
&gt; Please don&apos;t land these.

Heh, I need to check better before submitting. Fixed.

&gt; Why all the changes from AtomicString to String? When possible, it&apos;s great to
&gt; have functions take AtomicString parameters, in case you&apos;re already calling
&gt; with an atomic string -- saves a hash table lookup. And it&apos;s great to have
&gt; const AtomicString&amp; return types instead of String in cases where that works --
&gt; much more efficient, but you can&apos;t always do it.

I tried it and I have an upcoming patch for it. Indeed the code seems much better that way.
Cheers,

Rob.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45207</commentid>
    <comment_count>7</comment_count>
      <attachid>11571</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-11-19 05:48:25 -0800</bug_when>
    <thetext>Created attachment 11571
AtomicString improvements

This patch should address Darin&apos;s issues with the previous patch. Note the AtomicString changes in particular. I think something like tryGetAttribute(NS) should either be used everywhere or not at all, ie. it makes little sense IMHO to limit it to svg use only. Seeing that knowing up front the default value is not so common, I think we do not need tryGetAttribute(NS).
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42951</commentid>
    <comment_count>8</comment_count>
      <attachid>11571</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-12-07 16:05:42 -0800</bug_when>
    <thetext>Comment on attachment 11571
AtomicString improvements

+            Element *e = static_cast&lt;Element *&gt;(n);

Should move the * next to Element.

+#include &quot;Node.h&quot;
+#include &quot;Document.h&quot;

No need to include both Document and Node, since Document is a Node.

+    String _type = type();

It&apos;s best to not use leading underscores in identifiers, since those are reserved for the compiler and operating system.

+class MappedAttribute;

This is a forward declaration for a class not used in the file; please leave it out.

+class StyleElement
+{

Where did the following code go?

-    if (attr-&gt;name() == typeAttr)
-        m_type = attr-&gt;value().domString().lower();

Again, please don&apos;t use underscores:

+    static const AtomicString _default(&quot;text/ecmascript&quot;);
+    static const AtomicString _xmlspace(&quot;xml:space&quot;);
+    static const AtomicString _default(&quot;all&quot;);

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42913</commentid>
    <comment_count>9</comment_count>
      <attachid>11571</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-12-07 16:07:02 -0800</bug_when>
    <thetext>Comment on attachment 11571
AtomicString improvements

 #include &lt;SVGElement.h&gt;
+#include &lt;StyleElement.h&gt;

Quotes here, not &lt;&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42555</commentid>
    <comment_count>10</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-12-09 14:07:42 -0800</bug_when>
    <thetext>Landed in r18106.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11547</attachid>
            <date>2006-11-17 02:14:10 -0800</date>
            <delta_ts>2006-11-19 05:48:25 -0800</delta_ts>
            <desc>First attempt</desc>
            <filename>11625.diff</filename>
            <type>text/plain</type>
            <size>22013</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzgyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMDYtMTEtMTcgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjI1CisgICAgICAgIEludmVzdGlnYXRlIHBv
c3NpYmlsaXR5IHRvIHNoYXJlIGNvZGUgYmV0d2VlbiBIVE1MU3R5bGVFbGVtZW50IGFuZCBTVkdT
dHlsZUVsZW1lbnQKKworICAgICAgICBBZGQgYSBjbGFzcyBzaGFyZWQgYnkgYm90aCBIVE1MU3R5
bGVFbGVtZW50IGFuZCBTVkdTdHlsZUVsZW1lbnQgdGhhdAorICAgICAgICBlbmNhcHN1bGF0ZXMg
dGhlIGNvbW1vbiBsb2dpYy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6c2hlZXRMb2FkZWQpOgorICAgICAg
ICAqIGRvbS9TdHlsZUVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
RWxlbWVudDo6U3R5bGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6
c2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQpOgor
ICAgICAgICAqIGRvbS9TdHlsZUVsZW1lbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZUVsZW1lbnQ6On5TdHlsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVFbGVt
ZW50Ojppc0xvYWRpbmcpOgorICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmlzTG9hZGluZyk6CisgICAg
ICAgICogaHRtbC9IVE1MU3R5bGVFbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1N0
eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OlNWR1N0
eWxlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OnhtbHNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlRWxlbWVudDo6c2V0WG1sc3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1N0eWxlRWxlbWVudDo6c2V0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVs
ZW1lbnQ6Om1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlRWxlbWVudDo6c2V0TWVk
aWEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50Ojp0aXRsZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OnNldFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1N0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1N0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHU3R5bGVFbGVtZW50Lmg6CisKIDIwMDYtMTEtMTYgIFJvYiBCdWlzICA8YnVpc0BrZGUu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGFuZCBsYW5kZWQgYnkgQnJhZHkKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzgyNSkKKysr
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjU1LDYgKzIyNTUsOCBAQAogCQlBOEZFRkIzMjA5NzlGNEY2MDA1ODM5RkQgLyogU1ZH
Rm9yZWlnbk9iamVjdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4RkVGQjMwMDk3OUY0RjYwMDU4MzlGRCAvKiBTVkdGb3JlaWduT2JqZWN0
RWxlbWVudC5oICovOyB9OwogCQlBQTIxRUNDQTBBQkYwRkJBMDAyQjgzNEMgLyogQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQTA5NzhFRDBBQkFBNkUxMDA4NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAg
Ki87IH07CiAJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTA5NzhF
RTBBQkFBNkUxMDA4NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFBNEZDQkFGMEIwQ0Q5NEMwMDlC
RTM0NCAvKiBTdHlsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEFBNEZDQkFEMEIwQ0Q5NEMwMDlCRTM0NCAvKiBTdHlsZUVsZW1lbnQuaCAq
LzsgfTsKKwkJQUE0RkNCQjAwQjBDRDk0QzAwOUJFMzQ0IC8qIFN0eWxlRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTRGQ0JBRTBCMENE
OTRDMDA5QkUzNDQgLyogU3R5bGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJQUFDOERBQjEwQUExMDAy
MDAwREMwOTA3IC8qIFNWR01ldGFkYXRhRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQUM4REFBRjBBQTEwMDIwMDBEQzA5MDcgLyogU1ZH
TWV0YWRhdGFFbGVtZW50LmNwcCAqLzsgfTsKIAkJQUFDOERBQjIwQUExMDAyMDAwREMwOTA3IC8q
IFNWR01ldGFkYXRhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUFDOERBQjAwQUExMDAyMDAwREMwOTA3IC8qIFNWR01ldGFkYXRhRWxlbWVu
dC5oICovOyB9OwogCQlBQjIzQTMxMjA5QkJBNzc2MDA2N0NDNTMgLyogSFRNTFRleHRGaWVsZElu
bmVyRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQjIzQTMxMDA5QkJBNzc2MDA2N0NDNTMgLyogSFRNTFRleHRGaWVsZElubmVyRWxlbWVu
dC5jcHAgKi87IH07CkBAIC01MTM4LDYgKzUxNDAsOCBAQAogCQlBOEZFRkIzMDA5NzlGNEY2MDA1
ODM5RkQgLyogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFBMDk3OEVEMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJbWFnZVZh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDdXJzb3JJ
bWFnZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUEwOTc4RUUwQUJB
QTZFMTAwODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU0N1cnNvckltYWdlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQUE0RkNCQUQwQjBDRDk0QzAwOUJFMzQ0IC8qIFN0eWxlRWxlbWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBNEZDQkFFMEIwQ0Q5NEMwMDlCRTM0NCAvKiBTdHlsZUVs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlRWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBQzhEQUFGMEFBMTAwMjAw
MERDMDkwNyAvKiBTVkdNZXRhZGF0YUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNWR01ldGFkYXRhRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFBQzhEQUIwMEFBMTAwMjAwMERDMDkwNyAvKiBTVkdNZXRhZGF0YUVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR01ldGFkYXRhRWxlbWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQjIzQTMxMDA5QkJBNzc2MDA2N0ND
NTMgLyogSFRNTFRleHRGaWVsZElubmVyRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSFRNTFRleHRGaWVsZElubmVyRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MDMyLDYgKzkwMzYsOCBAQAogCQlGNTIzRDMyNDAyREU0
NDc4MDE4NjM1Q0EgLyogZG9tICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQlBQTRGQ0JBRDBCMENEOTRDMDA5QkUzNDQgLyogU3R5bGVFbGVtZW50LmggKi8s
CisJCQkJQUE0RkNCQUUwQjBDRDk0QzAwOUJFMzQ0IC8qIFN0eWxlRWxlbWVudC5jcHAgKi8sCiAJ
CQkJQkMzQjM2NDcwNUM5RDVFMjAwRTQyOTAyIC8qIEF0b21pY1N0cmluZ0xpc3QuaCAqLywKIAkJ
CQlBOEM0QTdGQzA5RDU2MzI3MDAwM0FDOEQgLyogQXR0ci5jcHAgKi8sCiAJCQkJQThDNEE3RkIw
OUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHIuaCAqLywKQEAgLTEwNTkwLDYgKzEwNTk2LDcgQEAKIAkJ
CQk5M0I2QTBFNjBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA2NUFENEY1MEIwQzJFREEwMDVBMkIxRCAvKiBDb250ZXh0TWVudUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDY1QUQ0RjcwQjBDMkVEQTAwNUEyQjFEIC8qIENvbnRleHRNZW51
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUE0RkNCQUYwQjBDRDk0QzAwOUJFMzQ0
IC8qIFN0eWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xMTg1OSw2ICsxMTg2Niw3IEBA
CiAJCQkJOTNCNkEwRTgwQjBCQ0E2NzAwRjUwMjdBIC8qIENvbnRleHRNZW51LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzQjZBMEVBMEIwQkNBODQwMEY1MDI3QSAvKiBDb250ZXh0TWVudU1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTA2NUFENEY2MEIwQzJFREEwMDVBMkIxRCAvKiBDb250ZXh0
TWVudUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQUE0RkNCQjAwQjBDRDk0QzAw
OUJFMzQ0IC8qIFN0eWxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUv
ZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
UHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gMTc4MjUpCisrKyBXZWJDb3JlL2Rv
bS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkz
LDcgQEAgYm9vbCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnNoZWV0TG9hZGVkKAogewogICAgIGlm
ICghaXNMb2FkaW5nKCkpIHsKICAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgp
OwotICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0
dXJuIGZhbHNlOwogfQpJbmRleDogV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NCBAQAor
LyoqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBL
REUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFJvYiBCdWlzCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTdHlsZUVsZW1lbnQuaCIKKworI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk1hcHBlZEF0dHJp
YnV0ZS5oIgorI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgorI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFs
dWF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOworCitTdHlsZUVsZW1lbnQ6OlN0eWxlRWxlbWVudCgpCisgICAgOiBtX2xvYWRpbmcoZmFs
c2UpCit7Cit9CisKK1N0eWxlU2hlZXQqIFN0eWxlRWxlbWVudDo6c2hlZXQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3NoZWV0LmdldCgpOworfQorCit2b2lkIFN0eWxlRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIGlmIChtX3NoZWV0KQor
ICAgICAgICBkb2N1bWVudC0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOworfQorCit2b2lkIFN0eWxl
RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAg
aWYgKG1fc2hlZXQpCisgICAgICAgIGRvY3VtZW50LT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7Cit9
CisKK3ZvaWQgU3R5bGVFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoTm9kZSogZSkKK3sKKyAgICBp
ZiAoIWUpCisgICAgICAgIHJldHVybjsKKyAgICBTdHJpbmcgdGV4dCA9ICIiOworICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGUtPmRvY3VtZW50KCk7CisKKyAgICBmb3IgKE5vZGUqIGMgPSBlLT5m
aXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQorICAgICAgICBpZiAoYy0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFU
QV9TRUNUSU9OX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpCisg
ICAgICAgICAgICB0ZXh0ICs9IGMtPm5vZGVWYWx1ZSgpOworCisgICAgaWYgKG1fc2hlZXQpIHsK
KyAgICAgICAgaWYgKHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQgKj4obV9zaGVldC5nZXQoKSkt
PmlzTG9hZGluZygpKQorICAgICAgICAgICAgZG9jdW1lbnQtPnN0eWxlc2hlZXRMb2FkZWQoKTsg
Ly8gUmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBzaGVldCBsaXN0LgorICAgICAgICBtX3NoZWV0
ID0gMDsKKyAgICB9CisKKyAgICBtX2xvYWRpbmcgPSBmYWxzZTsKKyAgICBTdHJpbmcgX3R5cGUg
PSB0eXBlKCk7CisgICAgaWYgKF90eXBlLmlzRW1wdHkoKSB8fCBfdHlwZSA9PSAidGV4dC9jc3Mi
KSB7IC8vIFR5cGUgbXVzdCBiZSBlbXB0eSBvciBDU1MKKyAgICAgICAgUmVmUHRyPE1lZGlhTGlz
dD4gbWVkaWFMaXN0ID0gbmV3IE1lZGlhTGlzdCgoQ1NTU3R5bGVTaGVldCopMCwgbWVkaWEoKSwg
ZS0+aXNIVE1MRWxlbWVudCgpKTsKKyAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBzY3JlZW5F
dmFsKCJzY3JlZW4iLCB0cnVlKTsKKyAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBwcmludEV2
YWwoInByaW50IiwgdHJ1ZSk7CisgICAgICAgIGlmIChzY3JlZW5FdmFsLmV2YWwobWVkaWFMaXN0
LmdldCgpKSB8fCBwcmludEV2YWwuZXZhbChtZWRpYUxpc3QuZ2V0KCkpKSB7CisgICAgICAgICAg
ICBkb2N1bWVudC0+YWRkUGVuZGluZ1NoZWV0KCk7CisgICAgICAgICAgICBtX2xvYWRpbmcgPSB0
cnVlOworICAgICAgICAgICAgbV9zaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KGUsIFN0cmluZygp
LCBkb2N1bWVudC0+aW5wdXRFbmNvZGluZygpKTsKKyAgICAgICAgICAgIG1fc2hlZXQtPnBhcnNl
U3RyaW5nKHRleHQsICFkb2N1bWVudC0+aW5Db21wYXRNb2RlKCkpOworICAgICAgICAgICAgbV9z
aGVldC0+c2V0TWVkaWEobWVkaWFMaXN0LmdldCgpKTsKKyAgICAgICAgICAgIG1fbG9hZGluZyA9
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFpc0xvYWRpbmcoKSAmJiBtX3No
ZWV0KQorICAgICAgICBkb2N1bWVudC0+c3R5bGVzaGVldExvYWRlZCgpOworfQorCit9CkluZGV4
OiBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9T
dHlsZUVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1N0eWxlRWxlbWVudC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgorICoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBSb2IgQnVpcworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorICoKKyAqLworI2lmbmRlZiBTdHlsZUVsZW1lbnRfSAorI2RlZmluZSBTdHlsZUVsZW1lbnRf
SAorCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIE1hcHBlZEF0dHJpYnV0ZTsKKworY2xhc3MgU3R5bGVFbGVtZW50Cit7CitwdWJsaWM6
CisgICAgU3R5bGVFbGVtZW50KCk7CisgICAgdmlydHVhbCB+U3R5bGVFbGVtZW50KCkge30KKwor
ICAgIFN0eWxlU2hlZXQqIHNoZWV0KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNMb2Fk
aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgbWVkaWEoKSBjb25zdCA9IDA7CisKKyAg
ICB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KERvY3VtZW50Kik7CisgICAgdm9pZCByZW1vdmVk
RnJvbURvY3VtZW50KERvY3VtZW50Kik7CisgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoTm9kZSop
OworCitwcm90ZWN0ZWQ6CisgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fc2hlZXQ7CisgICAg
Ym9vbCBtX2xvYWRpbmc7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTc4MjUpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTFN0eWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDYgQEAKIAog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAi
TWVkaWFMaXN0LmgiCi0jaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTM1LDIxICszMywxNCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCiBIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KERvY3VtZW50KiBkb2Mp
CiAgICAgOiBIVE1MRWxlbWVudChzdHlsZVRhZywgZG9jKQotICAgICwgbV9sb2FkaW5nKGZhbHNl
KQorICAgICwgU3R5bGVFbGVtZW50KCkKIHsKIH0KIAotU3R5bGVTaGVldCogSFRNTFN0eWxlRWxl
bWVudDo6c2hlZXQoKSBjb25zdAotewotICAgIHJldHVybiBtX3NoZWV0LmdldCgpOwotfQotCiAv
LyBvdGhlciBzdHVmZi4uLgogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0
eXBlQXR0cikKLSAgICAgICAgbV90eXBlID0gYXR0ci0+dmFsdWUoKS5kb21TdHJpbmcoKS5sb3dl
cigpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtZWRpYUF0dHIpCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBtZWRpYUF0dHIpCiAgICAgICAgIG1fbWVkaWEgPSBhdHRyLT52YWx1ZSgp
LmRlcHJlY2F0ZWRTdHJpbmcoKS5sb3dlcigpOwogICAgIGVsc2UKICAgICAgICAgSFRNTEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwpAQCAtNTgsNTQgKzQ5LDI2IEBAIHZvaWQg
SFRNTFN0eWxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKIHZvaWQgSFRNTFN0eWxlRWxlbWVu
dDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZElu
dG9Eb2N1bWVudCgpOwotICAgIGlmIChtX3NoZWV0KQotICAgICAgICBkb2N1bWVudCgpLT51cGRh
dGVTdHlsZVNlbGVjdG9yKCk7CisgICAgU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVu
dChkb2N1bWVudCgpKTsKIH0KIAogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbURv
Y3VtZW50KCkKIHsKICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwotICAg
IGlmIChtX3NoZWV0KQotICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7
CisgICAgU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KGRvY3VtZW50KCkpOwogfQog
CiB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCiB7Ci0gICAgU3RyaW5n
IHRleHQgPSAiIjsKLQotICAgIGZvciAoTm9kZSogYyA9IGZpcnN0Q2hpbGQoKTsgYzsgYyA9IGMt
Pm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGlmIChjLT5ub2RlVHlwZSgpID09IFRFWFRfTk9ERSB8
fCBjLT5ub2RlVHlwZSgpID09IENEQVRBX1NFQ1RJT05fTk9ERSB8fCBjLT5ub2RlVHlwZSgpID09
IENPTU1FTlRfTk9ERSkKLSAgICAgICAgICAgIHRleHQgKz0gYy0+bm9kZVZhbHVlKCk7Ci0KLSAg
ICBpZiAobV9zaGVldCkgewotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCAq
PihtX3NoZWV0LmdldCgpKS0+aXNMb2FkaW5nKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT5z
dHlsZXNoZWV0TG9hZGVkKCk7IC8vIFJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgc2hlZXQgbGlz
dC4KLSAgICAgICAgbV9zaGVldCA9IDA7Ci0gICAgfQotCi0gICAgbV9sb2FkaW5nID0gZmFsc2U7
Ci0gICAgaWYgKG1fdHlwZS5pc0VtcHR5KCkgfHwgbV90eXBlID09ICJ0ZXh0L2NzcyIpIHsgLy8g
VHlwZSBtdXN0IGJlIGVtcHR5IG9yIENTUwotICAgICAgICBSZWZQdHI8TWVkaWFMaXN0PiBtZWRp
YSA9IG5ldyBNZWRpYUxpc3QoKENTU1N0eWxlU2hlZXQqKTAsIG1fbWVkaWEsIHRydWUpOwotICAg
ICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHNjcmVlbkV2YWwoInNjcmVlbiIsIHRydWUpOwotICAg
ICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHByaW50RXZhbCgicHJpbnQiLCB0cnVlKTsKLSAgICAg
ICAgaWYgKHNjcmVlbkV2YWwuZXZhbChtZWRpYS5nZXQoKSkgfHwgcHJpbnRFdmFsLmV2YWwobWVk
aWEuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLT5hZGRQZW5kaW5nU2hlZXQoKTsK
LSAgICAgICAgICAgIG1fbG9hZGluZyA9IHRydWU7Ci0gICAgICAgICAgICBtX3NoZWV0ID0gbmV3
IENTU1N0eWxlU2hlZXQodGhpcywgU3RyaW5nKCksIGRvY3VtZW50KCktPmlucHV0RW5jb2Rpbmco
KSk7Ci0gICAgICAgICAgICBtX3NoZWV0LT5wYXJzZVN0cmluZyh0ZXh0LCAhZG9jdW1lbnQoKS0+
aW5Db21wYXRNb2RlKCkpOwotICAgICAgICAgICAgbV9zaGVldC0+c2V0TWVkaWEobWVkaWEuZ2V0
KCkpOwotICAgICAgICAgICAgbV9sb2FkaW5nID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoIWlzTG9hZGluZygpICYmIG1fc2hlZXQpCi0gICAgICAgIGRvY3VtZW50KCktPnN0
eWxlc2hlZXRMb2FkZWQoKTsKKyAgICBTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCh0aGlz
KTsKIH0KIAogYm9vbCBIVE1MU3R5bGVFbGVtZW50Ojppc0xvYWRpbmcoKSBjb25zdAogeworLy9m
cHJpbnRmKHN0ZGVyciwgImlzTG9hZGluZyAlZFxuIiwgbV9sb2FkaW5nKTsKICAgICBpZiAobV9s
b2FkaW5nKQogICAgICAgICByZXR1cm4gdHJ1ZTsKKy8vZnByaW50ZihzdGRlcnIsICJpc0xvYWRp
bmcgJWRcbiIsICFtX3NoZWV0KTsKICAgICBpZiAoIW1fc2hlZXQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCAqPihtX3NoZWV0Lmdl
dCgpKS0+aXNMb2FkaW5nKCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmgJKHJldmlzaW9u
IDE3ODI1KQorKysgV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjQsMTIgKzI0LDEzIEBACiAjaWZuZGVmIEhUTUxTdHlsZUVsZW1lbnRfSAogI2RlZmlu
ZSBIVE1MU3R5bGVFbGVtZW50X0gKIAotI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAi
U3R5bGVFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTFN0eWxl
RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAorY2xhc3MgSFRNTFN0eWxlRWxlbWVudCA6IHB1
YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIFN0eWxlRWxlbWVudAogewogcHVibGljOgogICAgIEhU
TUxTdHlsZUVsZW1lbnQoRG9jdW1lbnQqKTsKQEAgLTM4LDE1ICszOSwxMyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9CiAgICAgdmly
dHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKSB7IHJldHVybiBuZXdDaGls
ZC0+aXNUZXh0Tm9kZSgpOyB9CiAKLSAgICBTdHlsZVNoZWV0KiBzaGVldCgpIGNvbnN0OwotCiAg
ICAgLy8gb3ZlcmxvYWQgZnJvbSBIVE1MRWxlbWVudAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgp
OwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKIAotICAgIGJvb2wgaXNMb2Fk
aW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBzaGVldExvYWRlZCgpOwogCiAgICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0OwpA
QCAtNTksOSArNTgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYp
OwogCiBwcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fc2hlZXQ7Ci0gICAg
Ym9vbCBtX2xvYWRpbmc7Ci0gICAgU3RyaW5nIG1fdHlwZTsKICAgICBTdHJpbmcgbV9tZWRpYTsK
IH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24g
MTc4MjUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+Ci0gICAgICAgICAgICAgICAgICAy
MDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAgICAgICAgICAyMDA0
LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgICAgQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuCiAKICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHBy
b2plY3QKQEAgLTI4LDk3ICsyOCw3MCBAQAogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRl
ICJNZWRpYUxpc3QuaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdTdHlsZUVs
ZW1lbnQ6OlNWR1N0eWxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCAqZG9jKSA6IFNWR0VsZW1lbnQodGFnTmFtZSwgZG9jKQorU1ZHU3R5bGVFbGVtZW50OjpT
VkdTdHlsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRv
YykKKyAgICAgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAgLCBTdHlsZUVsZW1lbnQo
KQogewotICAgIG1fbG9hZGluZyA9IGZhbHNlOwogfQogCi1TVkdTdHlsZUVsZW1lbnQ6On5TVkdT
dHlsZUVsZW1lbnQoKQotewotfQotCi1BdG9taWNTdHJpbmcgU1ZHU3R5bGVFbGVtZW50Ojp4bWxz
cGFjZSgpIGNvbnN0CitTdHJpbmcgU1ZHU3R5bGVFbGVtZW50Ojp4bWxzcGFjZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHRyeUdldEF0dHJpYnV0ZSgieG1sOnNwYWNlIik7CiB9CiAKLXZvaWQgU1ZH
U3R5bGVFbGVtZW50OjpzZXRYbWxzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25D
b2RlJiBlYykKK3ZvaWQgU1ZHU3R5bGVFbGVtZW50OjpzZXRYbWxzcGFjZShjb25zdCBTdHJpbmcm
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VE
X0VSUjsKIH0KIAotQXRvbWljU3RyaW5nIFNWR1N0eWxlRWxlbWVudDo6dHlwZSgpIGNvbnN0CitT
dHJpbmcgU1ZHU3R5bGVFbGVtZW50Ojp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ5R2V0
QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvY3NzIik7CiB9CiAKLXZvaWQgU1ZHU3R5bGVFbGVtZW50
OjpzZXRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBT
VkdTdHlsZUVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiB9CiAKLUF0b21pY1N0
cmluZyBTVkdTdHlsZUVsZW1lbnQ6Om1lZGlhKCkgY29uc3QKK1N0cmluZyBTVkdTdHlsZUVsZW1l
bnQ6Om1lZGlhKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ5R2V0QXR0cmlidXRlKCJtZWRpYSIs
ICJhbGwiKTsKIH0KIAotdm9pZCBTVkdTdHlsZUVsZW1lbnQ6OnNldE1lZGlhKGNvbnN0IEF0b21p
Y1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBTVkdTdHlsZUVsZW1lbnQ6OnNldE1l
ZGlhKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gTk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogfQogCi1BdG9taWNTdHJpbmcgU1ZHU3R5bGVFbGVtZW50
Ojp0aXRsZSgpIGNvbnN0CitTdHJpbmcgU1ZHU3R5bGVFbGVtZW50Ojp0aXRsZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHRyeUdldEF0dHJpYnV0ZSgidGl0bGUiKTsKIH0KIAotdm9pZCBTVkdTdHls
ZUVsZW1lbnQ6OnNldFRpdGxlKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBTVkdTdHlsZUVsZW1lbnQ6OnNldFRpdGxlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogfQog
Ci1DU1NTdHlsZVNoZWV0ICpTVkdTdHlsZUVsZW1lbnQ6OnNoZWV0KCkKK3ZvaWQgU1ZHU3R5bGVF
bGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7Ci0gICAgcmV0dXJuIG1fc2hlZXQuZ2V0
KCk7CisgICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICBTdHlsZUVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KGRvY3VtZW50KCkpOwogfQogCi12b2lkIFNWR1N0
eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCkKK3ZvaWQgU1ZHU3R5bGVFbGVtZW50OjpyZW1v
dmVkRnJvbURvY3VtZW50KCkKIHsKLSAgICBTVkdFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoKTsK
LQotICAgIGlmKG1fc2hlZXQpCi0gICAgICAgIG1fc2hlZXQgPSAwOwotCi0gICAgLy8gRklYTUU6
IHRoaXMgY29kZSBzaG91bGQgYmUgc2hhcmVkIHdpdGggSFRNTFN0eWxlRWxlbWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKCkKLSAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAgICBNZWRpYVF1ZXJ5RXZhbHVh
dG9yIHNjcmVlbkV2YWwoInNjcmVlbiIsIHRydWUpOwotICAgIE1lZGlhUXVlcnlFdmFsdWF0b3Ig
cHJpbnRFdmFsKCJwcmludCIsIHRydWUpOyAgIAotICAgIFJlZlB0cjxNZWRpYUxpc3Q+IG1lZGlh
TGlzdCA9IG5ldyBNZWRpYUxpc3QoKENTU1N0eWxlU2hlZXQqKTAsIG1lZGlhKCkpOwotICAgIGlm
ICgodHlwZSgpLmlzRW1wdHkoKSB8fCB0eXBlKCkgPT0gInRleHQvY3NzIikgJiYgKHNjcmVlbkV2
YWwuZXZhbChtZWRpYUxpc3QuZ2V0KCkpIHx8IHByaW50RXZhbC5ldmFsKG1lZGlhTGlzdC5nZXQo
KSkpKSB7Ci0gICAgICAgIG93bmVyRG9jdW1lbnQoKS0+YWRkUGVuZGluZ1NoZWV0KCk7Ci0KLSAg
ICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKLSAKLSAgICAgICAgbV9zaGVldCA9IG5ldyBDU1NTdHls
ZVNoZWV0KHRoaXMsIFN0cmluZygpLCBkb2N1bWVudCgpLT5pbnB1dEVuY29kaW5nKCkpOwotICAg
ICAgICBtX3NoZWV0LT5wYXJzZVN0cmluZyh0ZXh0Q29udGVudCgpKTsgLy8gU1ZHIGNzcyBpcyBh
bHdheXMgcGFyc2VkIGluIHN0cmljdCBtb2RlCi0gICAgICAgIAotICAgICAgICBtX3NoZWV0LT5z
ZXRNZWRpYShtZWRpYUxpc3QuZ2V0KCkpOwotICAgICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZighaXNMb2FkaW5nKCkgJiYgbV9zaGVldCkKLSAgICAgICAgZG9jdW1lbnQo
KS0+c3R5bGVzaGVldExvYWRlZCgpOworICAgIFNWR0VsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1l
bnQoKTsKKyAgICBTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoZG9jdW1lbnQoKSk7
CiB9CiAKLWJvb2wgU1ZHU3R5bGVFbGVtZW50Ojppc0xvYWRpbmcoKSBjb25zdAordm9pZCBTVkdT
dHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IFN0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKHRoaXMpOwogfQogCiB9CkluZGV4OiBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkocmV2aXNpb24gMTc4MjUpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2ls
ZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVp
c0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNiBSb2IgQnVpcyA8YnVpc0Br
ZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAg
LTI1LDQwICsyNSwzMSBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlIDxTVkdFbGVt
ZW50Lmg+CisjaW5jbHVkZSA8U3R5bGVFbGVtZW50Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotICAgIGNsYXNzIENTU1N0eWxlU2hlZXQ7Ci0KLSAgICBjbGFzcyBTVkdTdHlsZUVsZW1lbnQg
OiBwdWJsaWMgU1ZHRWxlbWVudCB7CisgICAgY2xhc3MgU1ZHU3R5bGVFbGVtZW50IDogcHVibGlj
IFNWR0VsZW1lbnQsIHB1YmxpYyBTdHlsZUVsZW1lbnQgewogICAgIHB1YmxpYzoKICAgICAgICAg
U1ZHU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwotICAgICAg
ICB2aXJ0dWFsIH5TVkdTdHlsZUVsZW1lbnQoKTsKIAogICAgICAgICAvLyBEZXJpdmVkIGZyb206
ICdFbGVtZW50JworICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwogCiAgICAgICAgIC8vICdTVkdTdHlsZUVsZW1l
bnQnIGZ1bmN0aW9ucwotICAgICAgICBBdG9taWNTdHJpbmcgeG1sc3BhY2UoKSBjb25zdDsKLSAg
ICAgICAgdm9pZCBzZXRYbWxzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2Rl
Jik7Ci0KLSAgICAgICAgQXRvbWljU3RyaW5nIHR5cGUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBz
ZXRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgICAgICBB
dG9taWNTdHJpbmcgbWVkaWEoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRNZWRpYShjb25zdCBB
dG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICAgICAgQXRvbWljU3RyaW5nIHRp
dGxlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgQXRvbWljU3RyaW5nJiwg
RXhjZXB0aW9uQ29kZSYpOworICAgICAgICBTdHJpbmcgeG1sc3BhY2UoKSBjb25zdDsKKyAgICAg
ICAgdm9pZCBzZXRYbWxzcGFjZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAKLSAg
ICAgICAgQ1NTU3R5bGVTaGVldCAqc2hlZXQoKTsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdHlw
ZSgpIGNvbnN0OworICAgICAgICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9u
Q29kZSYpOwogCi0gICAgICAgIC8vIEludGVybmFsCi0gICAgICAgIGJvb2wgaXNMb2FkaW5nKCkg
Y29uc3Q7CisgICAgICAgIFN0cmluZyBtZWRpYSgpIGNvbnN0OworICAgICAgICB2b2lkIHNldE1l
ZGlhKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fc2hlZXQ7Ci0gICAgICAgIGJvb2wgbV9sb2Fk
aW5nOworICAgICAgICBTdHJpbmcgdGl0bGUoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRUaXRs
ZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11550</attachid>
            <date>2006-11-17 03:06:08 -0800</date>
            <delta_ts>2006-11-19 05:48:25 -0800</delta_ts>
            <desc>Another option</desc>
            <filename>11625-2.diff</filename>
            <type>text/plain</type>
            <size>24599</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzgyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMDYtMTEtMTcgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjI1CisgICAgICAgIEludmVzdGlnYXRlIHBv
c3NpYmlsaXR5IHRvIHNoYXJlIGNvZGUgYmV0d2VlbiBIVE1MU3R5bGVFbGVtZW50IGFuZCBTVkdT
dHlsZUVsZW1lbnQKKworICAgICAgICBBZGQgYSBjbGFzcyBzaGFyZWQgYnkgYm90aCBIVE1MU3R5
bGVFbGVtZW50IGFuZCBTVkdTdHlsZUVsZW1lbnQgdGhhdAorICAgICAgICBlbmNhcHN1bGF0ZXMg
dGhlIGNvbW1vbiBsb2dpYy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6c2hlZXRMb2FkZWQpOgorICAgICAg
ICAqIGRvbS9TdHlsZUVsZW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
RWxlbWVudDo6U3R5bGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6
c2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQpOgor
ICAgICAgICAqIGRvbS9TdHlsZUVsZW1lbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZUVsZW1lbnQ6On5TdHlsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVFbGVt
ZW50Ojppc0xvYWRpbmcpOgorICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmlzTG9hZGluZyk6CisgICAg
ICAgICogaHRtbC9IVE1MU3R5bGVFbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1N0
eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OlNWR1N0
eWxlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OnhtbHNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlRWxlbWVudDo6c2V0WG1sc3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1N0eWxlRWxlbWVudDo6c2V0VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZUVs
ZW1lbnQ6Om1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlRWxlbWVudDo6c2V0TWVk
aWEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50Ojp0aXRsZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdTdHlsZUVsZW1lbnQ6OnNldFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1N0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1N0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHU3R5bGVFbGVtZW50Lmg6CisKIDIwMDYtMTEtMTYgIFJvYiBCdWlzICA8YnVpc0BrZGUu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGFuZCBsYW5kZWQgYnkgQnJhZHkKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzgyNSkKKysr
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjU1LDYgKzIyNTUsOCBAQAogCQlBOEZFRkIzMjA5NzlGNEY2MDA1ODM5RkQgLyogU1ZH
Rm9yZWlnbk9iamVjdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE4RkVGQjMwMDk3OUY0RjYwMDU4MzlGRCAvKiBTVkdGb3JlaWduT2JqZWN0
RWxlbWVudC5oICovOyB9OwogCQlBQTIxRUNDQTBBQkYwRkJBMDAyQjgzNEMgLyogQ1NTQ3Vyc29y
SW1hZ2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQTA5NzhFRDBBQkFBNkUxMDA4NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5jcHAg
Ki87IH07CiAJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTA5NzhF
RTBBQkFBNkUxMDA4NzQ0ODAgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUFBNEZDQkFGMEIwQ0Q5NEMwMDlC
RTM0NCAvKiBTdHlsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEFBNEZDQkFEMEIwQ0Q5NEMwMDlCRTM0NCAvKiBTdHlsZUVsZW1lbnQuaCAq
LzsgfTsKKwkJQUE0RkNCQjAwQjBDRDk0QzAwOUJFMzQ0IC8qIFN0eWxlRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTRGQ0JBRTBCMENE
OTRDMDA5QkUzNDQgLyogU3R5bGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJQUFDOERBQjEwQUExMDAy
MDAwREMwOTA3IC8qIFNWR01ldGFkYXRhRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQUM4REFBRjBBQTEwMDIwMDBEQzA5MDcgLyogU1ZH
TWV0YWRhdGFFbGVtZW50LmNwcCAqLzsgfTsKIAkJQUFDOERBQjIwQUExMDAyMDAwREMwOTA3IC8q
IFNWR01ldGFkYXRhRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUFDOERBQjAwQUExMDAyMDAwREMwOTA3IC8qIFNWR01ldGFkYXRhRWxlbWVu
dC5oICovOyB9OwogCQlBQjIzQTMxMjA5QkJBNzc2MDA2N0NDNTMgLyogSFRNTFRleHRGaWVsZElu
bmVyRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQjIzQTMxMDA5QkJBNzc2MDA2N0NDNTMgLyogSFRNTFRleHRGaWVsZElubmVyRWxlbWVu
dC5jcHAgKi87IH07CkBAIC01MTM4LDYgKzUxNDAsOCBAQAogCQlBOEZFRkIzMDA5NzlGNEY2MDA1
ODM5RkQgLyogU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFBMDk3OEVEMEFCQUE2RTEwMDg3NDQ4MCAvKiBDU1NDdXJzb3JJbWFnZVZh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDdXJzb3JJ
bWFnZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUEwOTc4RUUwQUJB
QTZFMTAwODc0NDgwIC8qIENTU0N1cnNvckltYWdlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU0N1cnNvckltYWdlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQUE0RkNCQUQwQjBDRDk0QzAwOUJFMzQ0IC8qIFN0eWxlRWxlbWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBNEZDQkFFMEIwQ0Q5NEMwMDlCRTM0NCAvKiBTdHlsZUVs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlRWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBQzhEQUFGMEFBMTAwMjAw
MERDMDkwNyAvKiBTVkdNZXRhZGF0YUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNWR01ldGFkYXRhRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFBQzhEQUIwMEFBMTAwMjAwMERDMDkwNyAvKiBTVkdNZXRhZGF0YUVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR01ldGFkYXRhRWxlbWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQjIzQTMxMDA5QkJBNzc2MDA2N0ND
NTMgLyogSFRNTFRleHRGaWVsZElubmVyRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSFRNTFRleHRGaWVsZElubmVyRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MDMyLDYgKzkwMzYsOCBAQAogCQlGNTIzRDMyNDAyREU0
NDc4MDE4NjM1Q0EgLyogZG9tICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQlBQTRGQ0JBRDBCMENEOTRDMDA5QkUzNDQgLyogU3R5bGVFbGVtZW50LmggKi8s
CisJCQkJQUE0RkNCQUUwQjBDRDk0QzAwOUJFMzQ0IC8qIFN0eWxlRWxlbWVudC5jcHAgKi8sCiAJ
CQkJQkMzQjM2NDcwNUM5RDVFMjAwRTQyOTAyIC8qIEF0b21pY1N0cmluZ0xpc3QuaCAqLywKIAkJ
CQlBOEM0QTdGQzA5RDU2MzI3MDAwM0FDOEQgLyogQXR0ci5jcHAgKi8sCiAJCQkJQThDNEE3RkIw
OUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHIuaCAqLywKQEAgLTEwNTkwLDYgKzEwNTk2LDcgQEAKIAkJ
CQk5M0I2QTBFNjBCMEJDQTVDMDBGNTAyN0EgLyogQ29udGV4dE1lbnUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA2NUFENEY1MEIwQzJFREEwMDVBMkIxRCAvKiBDb250ZXh0TWVudUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDY1QUQ0RjcwQjBDMkVEQTAwNUEyQjFEIC8qIENvbnRleHRNZW51
Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQUE0RkNCQUYwQjBDRDk0QzAwOUJFMzQ0
IC8qIFN0eWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xMTg1OSw2ICsxMTg2Niw3IEBA
CiAJCQkJOTNCNkEwRTgwQjBCQ0E2NzAwRjUwMjdBIC8qIENvbnRleHRNZW51LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzQjZBMEVBMEIwQkNBODQwMEY1MDI3QSAvKiBDb250ZXh0TWVudU1hYy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTA2NUFENEY2MEIwQzJFREEwMDVBMkIxRCAvKiBDb250ZXh0
TWVudUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQUE0RkNCQjAwQjBDRDk0QzAw
OUJFMzQ0IC8qIFN0eWxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDE3ODI1KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODQwLDkgKzE4NDAsMTIgQEAgdm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGVTZWxl
Y3RvcigpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpICYmIChuLT5oYXNUYWdOYW1lKGxpbmtU
YWcpIHx8IG4tPmhhc1RhZ05hbWUoc3R5bGVUYWcpKSkgewotICAgICAgICAgICAgSFRNTEVsZW1l
bnQgKmUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPihuKTsKKyAgICAgICAgfSBlbHNlIGlm
IChuLT5pc0hUTUxFbGVtZW50KCkgJiYgKG4tPmhhc1RhZ05hbWUobGlua1RhZykgfHwgbi0+aGFz
VGFnTmFtZShzdHlsZVRhZykpCisjaWZkZWYgU1ZHX1NVUFBPUlQKKyAgICAgICAgICAgIHx8ICAo
bi0+aXNTVkdFbGVtZW50KCkgJiYgbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3R5bGVUYWcpKQor
I2VuZGlmCisgICAgICAgICkgeworICAgICAgICAgICAgRWxlbWVudCAqZSA9IHN0YXRpY19jYXN0
PEVsZW1lbnQgKj4obik7CiAgICAgICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHRpdGxlID0gZS0+
Z2V0QXR0cmlidXRlKHRpdGxlQXR0cikuZGVwcmVjYXRlZFN0cmluZygpOwogICAgICAgICAgICAg
Ym9vbCBlbmFibGVkVmlhU2NyaXB0ID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoZS0+aGFzTG9j
YWxOYW1lKGxpbmtUYWcpKSB7CkBAIC0xODU3LDYgKzE4NjAsMTEgQEAgdm9pZCBEb2N1bWVudDo6
cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAKICAgICAgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBw
cmVmZXJyZWQgc3R5bGVzZXQuICBUaGlzIGlzIHRoZQogICAgICAgICAgICAgLy8gc2V0IG9mIHNo
ZWV0cyB0aGF0IHdpbGwgYmUgZW5hYmxlZC4KKyNpZmRlZiBTVkdfU1VQUE9SVAorICAgICAgICAg
ICAgaWYgKG4tPmlzU1ZHRWxlbWVudCgpICYmIG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN0eWxl
VGFnKSkKKyAgICAgICAgICAgICAgICBzaGVldCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlRWxlbWVu
dCo+KG4pLT5zaGVldCgpOworICAgICAgICAgICAgZWxzZQorI2VuZGlmCiAgICAgICAgICAgICBp
ZiAoZS0+aGFzTG9jYWxOYW1lKGxpbmtUYWcpKQogICAgICAgICAgICAgICAgIHNoZWV0ID0gc3Rh
dGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50Kj4obiktPnNoZWV0KCk7CiAgICAgICAgICAgICBlbHNl
CkBAIC0xODgwLDMwICsxODg4LDEzIEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0
b3IoKQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICh0aXRsZSAhPSBtX3By
ZWZlcnJlZFN0eWxlc2hlZXRTZXQpCiAgICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmZGVmIFNWR19TVVBQT1JUCi0gICAgICAgIGVsc2Ug
aWYgKG4tPmlzU1ZHRWxlbWVudCgpICYmIG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN0eWxlVGFn
KSkgewotICAgICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB0aXRsZTsKLSAgICAgICAgICAgIC8v
IDxTVFlMRT4gZWxlbWVudAotICAgICAgICAgICAgU1ZHU3R5bGVFbGVtZW50ICpzID0gc3RhdGlj
X2Nhc3Q8U1ZHU3R5bGVFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICBpZiAoIXMtPmlzTG9hZGlu
ZygpKSB7Ci0gICAgICAgICAgICAgICAgc2hlZXQgPSBzLT5zaGVldCgpOwotICAgICAgICAgICAg
ICAgIGlmKHNoZWV0KQotICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHMtPmdldEF0dHJpYnV0
ZShTVkdOYW1lczo6dGl0bGVBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICghdGl0bGUuaXNFbXB0eSgpICYmIG1fcHJlZmVycmVkU3R5bGVz
aGVldFNldC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0
U2V0ID0gbV9zZWxlY3RlZFN0eWxlc2hlZXRTZXQgPSB0aXRsZTsKLQotICAgICAgICAgICAgaWYg
KCF0aXRsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodGl0bGUgIT0gbV9wcmVm
ZXJyZWRTdHlsZXNoZWV0U2V0KQotICAgICAgICAgICAgICAgICAgICBzaGVldCA9IDA7IC8vIGRv
bid0IHVzZSBpdAogCi0gICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKCcmJywg
IiYmIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgfQorI2lmZGVmIFNWR19TVVBQT1JUCisgICAg
ICAgICAgICAgICAgaWYgKCFuLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgICAg
IHRpdGxlID0gdGl0bGUucmVwbGFjZSgnJicsICImJiIpOwogI2VuZGlmCisgICAgICAgICAgICB9
CisgICAgICAgIH0KIAogICAgICAgICBpZiAoc2hlZXQpIHsKICAgICAgICAgICAgIHNoZWV0LT5y
ZWYoKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24g
MTc4MjUpCisrKyBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTMsNyArMTkzLDcgQEAgYm9vbCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnNo
ZWV0TG9hZGVkKAogewogICAgIGlmICghaXNMb2FkaW5nKCkpIHsKICAgICAgICAgZG9jdW1lbnQo
KS0+c3R5bGVzaGVldExvYWRlZCgpOwotICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogV2ViQ29yZS9kb20vU3R5
bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5NCBAQAorLyoqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9N
IGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFJvYiBC
dWlzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZUVsZW1lbnQuaCIKKworI2luY2x1ZGUg
Ik5vZGUuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgorI2lu
Y2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitTdHlsZUVsZW1lbnQ6OlN0eWxlRWxlbWVudCgp
CisgICAgOiBtX2xvYWRpbmcoZmFsc2UpCit7Cit9CisKK1N0eWxlU2hlZXQqIFN0eWxlRWxlbWVu
dDo6c2hlZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NoZWV0LmdldCgpOworfQorCit2b2lk
IFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQor
eworICAgIGlmIChtX3NoZWV0KQorICAgICAgICBkb2N1bWVudC0+dXBkYXRlU3R5bGVTZWxlY3Rv
cigpOworfQorCit2b2lkIFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudChEb2N1bWVu
dCogZG9jdW1lbnQpCit7CisgICAgaWYgKG1fc2hlZXQpCisgICAgICAgIGRvY3VtZW50LT51cGRh
dGVTdHlsZVNlbGVjdG9yKCk7Cit9CisKK3ZvaWQgU3R5bGVFbGVtZW50OjpjaGlsZHJlbkNoYW5n
ZWQoTm9kZSogZSkKK3sKKyAgICBpZiAoIWUpCisgICAgICAgIHJldHVybjsKKyAgICBTdHJpbmcg
dGV4dCA9ICIiOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGUtPmRvY3VtZW50KCk7CisKKyAg
ICBmb3IgKE5vZGUqIGMgPSBlLT5maXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygp
KQorICAgICAgICBpZiAoYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwgYy0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBO
b2RlOjpDT01NRU5UX05PREUpCisgICAgICAgICAgICB0ZXh0ICs9IGMtPm5vZGVWYWx1ZSgpOwor
CisgICAgaWYgKG1fc2hlZXQpIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PENTU1N0eWxlU2hl
ZXQgKj4obV9zaGVldC5nZXQoKSktPmlzTG9hZGluZygpKQorICAgICAgICAgICAgZG9jdW1lbnQt
PnN0eWxlc2hlZXRMb2FkZWQoKTsgLy8gUmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBzaGVldCBs
aXN0LgorICAgICAgICBtX3NoZWV0ID0gMDsKKyAgICB9CisKKyAgICBtX2xvYWRpbmcgPSBmYWxz
ZTsKKyAgICBTdHJpbmcgX3R5cGUgPSB0eXBlKCk7CisgICAgaWYgKF90eXBlLmlzRW1wdHkoKSB8
fCBfdHlwZSA9PSAidGV4dC9jc3MiKSB7IC8vIFR5cGUgbXVzdCBiZSBlbXB0eSBvciBDU1MKKyAg
ICAgICAgUmVmUHRyPE1lZGlhTGlzdD4gbWVkaWFMaXN0ID0gbmV3IE1lZGlhTGlzdCgoQ1NTU3R5
bGVTaGVldCopMCwgbWVkaWEoKSwgZS0+aXNIVE1MRWxlbWVudCgpKTsKKyAgICAgICAgTWVkaWFR
dWVyeUV2YWx1YXRvciBzY3JlZW5FdmFsKCJzY3JlZW4iLCB0cnVlKTsKKyAgICAgICAgTWVkaWFR
dWVyeUV2YWx1YXRvciBwcmludEV2YWwoInByaW50IiwgdHJ1ZSk7CisgICAgICAgIGlmIChzY3Jl
ZW5FdmFsLmV2YWwobWVkaWFMaXN0LmdldCgpKSB8fCBwcmludEV2YWwuZXZhbChtZWRpYUxpc3Qu
Z2V0KCkpKSB7CisgICAgICAgICAgICBkb2N1bWVudC0+YWRkUGVuZGluZ1NoZWV0KCk7CisgICAg
ICAgICAgICBtX2xvYWRpbmcgPSB0cnVlOworICAgICAgICAgICAgbV9zaGVldCA9IG5ldyBDU1NT
dHlsZVNoZWV0KGUsIFN0cmluZygpLCBkb2N1bWVudC0+aW5wdXRFbmNvZGluZygpKTsKKyAgICAg
ICAgICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nKHRleHQsICFkb2N1bWVudC0+aW5Db21wYXRNb2Rl
KCkpOworICAgICAgICAgICAgbV9zaGVldC0+c2V0TWVkaWEobWVkaWFMaXN0LmdldCgpKTsKKyAg
ICAgICAgICAgIG1fbG9hZGluZyA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFpc0xvYWRpbmcoKSAmJiBtX3NoZWV0KQorICAgICAgICBkb2N1bWVudC0+c3R5bGVzaGVldExv
YWRlZCgpOworfQorCit9CkluZGV4OiBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvZG9tL1N0eWxlRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgor
ICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBSb2IgQnVpcworICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworI2lmbmRlZiBTdHlsZUVsZW1lbnRfSAor
I2RlZmluZSBTdHlsZUVsZW1lbnRfSAorCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1hcHBlZEF0dHJpYnV0ZTsKKworY2xhc3MgU3R5
bGVFbGVtZW50Cit7CitwdWJsaWM6CisgICAgU3R5bGVFbGVtZW50KCk7CisgICAgdmlydHVhbCB+
U3R5bGVFbGVtZW50KCkge30KKworICAgIFN0eWxlU2hlZXQqIHNoZWV0KCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAg
IHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgbWVk
aWEoKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KERvY3VtZW50
Kik7CisgICAgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KERvY3VtZW50Kik7CisgICAgdm9pZCBj
aGlsZHJlbkNoYW5nZWQoTm9kZSopOworCitwcm90ZWN0ZWQ6CisgICAgUmVmUHRyPENTU1N0eWxl
U2hlZXQ+IG1fc2hlZXQ7CisgICAgYm9vbCBtX2xvYWRpbmc7Cit9OworCit9IC8vbmFtZXNwYWNl
CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTc4
MjUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDggKzI2LDYgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCi0jaW5jbHVkZSAiTWVkaWFMaXN0LmgiCi0jaW5jbHVkZSAiTWVkaWFRdWVyeUV2
YWx1YXRvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDIxICszMywxNCBAQCB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVF
bGVtZW50KERvY3VtZW50KiBkb2MpCiAgICAgOiBIVE1MRWxlbWVudChzdHlsZVRhZywgZG9jKQot
ICAgICwgbV9sb2FkaW5nKGZhbHNlKQorICAgICwgU3R5bGVFbGVtZW50KCkKIHsKIH0KIAotU3R5
bGVTaGVldCogSFRNTFN0eWxlRWxlbWVudDo6c2hlZXQoKSBjb25zdAotewotICAgIHJldHVybiBt
X3NoZWV0LmdldCgpOwotfQotCiAvLyBvdGhlciBzdHVmZi4uLgogdm9pZCBIVE1MU3R5bGVFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7Ci0gICAg
aWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikKLSAgICAgICAgbV90eXBlID0gYXR0ci0+dmFs
dWUoKS5kb21TdHJpbmcoKS5sb3dlcigpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBt
ZWRpYUF0dHIpCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBtZWRpYUF0dHIpCiAgICAgICAgIG1f
bWVkaWEgPSBhdHRyLT52YWx1ZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5sb3dlcigpOwogICAgIGVs
c2UKICAgICAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwpAQCAt
NTgsNTQgKzQ5LDI2IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIK
IHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIEhU
TUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwotICAgIGlmIChtX3NoZWV0KQotICAg
ICAgICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7CisgICAgU3R5bGVFbGVtZW50
OjppbnNlcnRlZEludG9Eb2N1bWVudChkb2N1bWVudCgpKTsKIH0KIAogdm9pZCBIVE1MU3R5bGVF
bGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKICAgICBIVE1MRWxlbWVudDo6cmVtb3Zl
ZEZyb21Eb2N1bWVudCgpOwotICAgIGlmIChtX3NoZWV0KQotICAgICAgICBkb2N1bWVudCgpLT51
cGRhdGVTdHlsZVNlbGVjdG9yKCk7CisgICAgU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbURvY3Vt
ZW50KGRvY3VtZW50KCkpOwogfQogCiB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hh
bmdlZCgpCiB7Ci0gICAgU3RyaW5nIHRleHQgPSAiIjsKLQotICAgIGZvciAoTm9kZSogYyA9IGZp
cnN0Q2hpbGQoKTsgYzsgYyA9IGMtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGlmIChjLT5ub2Rl
VHlwZSgpID09IFRFWFRfTk9ERSB8fCBjLT5ub2RlVHlwZSgpID09IENEQVRBX1NFQ1RJT05fTk9E
RSB8fCBjLT5ub2RlVHlwZSgpID09IENPTU1FTlRfTk9ERSkKLSAgICAgICAgICAgIHRleHQgKz0g
Yy0+bm9kZVZhbHVlKCk7Ci0KLSAgICBpZiAobV9zaGVldCkgewotICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldCAqPihtX3NoZWV0LmdldCgpKS0+aXNMb2FkaW5nKCkpCi0gICAg
ICAgICAgICBkb2N1bWVudCgpLT5zdHlsZXNoZWV0TG9hZGVkKCk7IC8vIFJlbW92ZSBvdXJzZWx2
ZXMgZnJvbSB0aGUgc2hlZXQgbGlzdC4KLSAgICAgICAgbV9zaGVldCA9IDA7Ci0gICAgfQotCi0g
ICAgbV9sb2FkaW5nID0gZmFsc2U7Ci0gICAgaWYgKG1fdHlwZS5pc0VtcHR5KCkgfHwgbV90eXBl
ID09ICJ0ZXh0L2NzcyIpIHsgLy8gVHlwZSBtdXN0IGJlIGVtcHR5IG9yIENTUwotICAgICAgICBS
ZWZQdHI8TWVkaWFMaXN0PiBtZWRpYSA9IG5ldyBNZWRpYUxpc3QoKENTU1N0eWxlU2hlZXQqKTAs
IG1fbWVkaWEsIHRydWUpOwotICAgICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHNjcmVlbkV2YWwo
InNjcmVlbiIsIHRydWUpOwotICAgICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHByaW50RXZhbCgi
cHJpbnQiLCB0cnVlKTsKLSAgICAgICAgaWYgKHNjcmVlbkV2YWwuZXZhbChtZWRpYS5nZXQoKSkg
fHwgcHJpbnRFdmFsLmV2YWwobWVkaWEuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgp
LT5hZGRQZW5kaW5nU2hlZXQoKTsKLSAgICAgICAgICAgIG1fbG9hZGluZyA9IHRydWU7Ci0gICAg
ICAgICAgICBtX3NoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQodGhpcywgU3RyaW5nKCksIGRvY3Vt
ZW50KCktPmlucHV0RW5jb2RpbmcoKSk7Ci0gICAgICAgICAgICBtX3NoZWV0LT5wYXJzZVN0cmlu
Zyh0ZXh0LCAhZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOwotICAgICAgICAgICAgbV9zaGVl
dC0+c2V0TWVkaWEobWVkaWEuZ2V0KCkpOwotICAgICAgICAgICAgbV9sb2FkaW5nID0gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWlzTG9hZGluZygpICYmIG1fc2hlZXQpCi0g
ICAgICAgIGRvY3VtZW50KCktPnN0eWxlc2hlZXRMb2FkZWQoKTsKKyAgICBTdHlsZUVsZW1lbnQ6
OmNoaWxkcmVuQ2hhbmdlZCh0aGlzKTsKIH0KIAogYm9vbCBIVE1MU3R5bGVFbGVtZW50Ojppc0xv
YWRpbmcoKSBjb25zdAogeworLy9mcHJpbnRmKHN0ZGVyciwgImlzTG9hZGluZyAlZFxuIiwgbV9s
b2FkaW5nKTsKICAgICBpZiAobV9sb2FkaW5nKQogICAgICAgICByZXR1cm4gdHJ1ZTsKKy8vZnBy
aW50ZihzdGRlcnIsICJpc0xvYWRpbmcgJWRcbiIsICFtX3NoZWV0KTsKICAgICBpZiAoIW1fc2hl
ZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVTaGVldCAqPihtX3NoZWV0LmdldCgpKS0+aXNMb2FkaW5nKCk7CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTFN0eWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU3R5
bGVFbGVtZW50LmgJKHJldmlzaW9uIDE3ODI1KQorKysgV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTIgKzI0LDEzIEBACiAjaWZuZGVmIEhUTUxT
dHlsZUVsZW1lbnRfSAogI2RlZmluZSBIVE1MU3R5bGVFbGVtZW50X0gKIAotI2luY2x1ZGUgIkhU
TUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCisjaW5jbHVkZSAiU3R5bGVFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgSFRNTFN0eWxlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAorY2xhc3Mg
SFRNTFN0eWxlRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIFN0eWxlRWxlbWVu
dAogewogcHVibGljOgogICAgIEhUTUxTdHlsZUVsZW1lbnQoRG9jdW1lbnQqKTsKQEAgLTM4LDE1
ICszOSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxOyB9CiAgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqIG5ld0No
aWxkKSB7IHJldHVybiBuZXdDaGlsZC0+aXNUZXh0Tm9kZSgpOyB9CiAKLSAgICBTdHlsZVNoZWV0
KiBzaGVldCgpIGNvbnN0OwotCiAgICAgLy8gb3ZlcmxvYWQgZnJvbSBIVE1MRWxlbWVudAogICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKICAg
ICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQo
KTsKIAotICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTG9h
ZGluZygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzaGVldExvYWRlZCgpOwogCiAgICAgYm9v
bCBkaXNhYmxlZCgpIGNvbnN0OwpAQCAtNTksOSArNTgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRUeXBlKGNvbnN0IFN0cmluZyYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgUmVmUHRyPENTU1N0eWxl
U2hlZXQ+IG1fc2hlZXQ7Ci0gICAgYm9vbCBtX2xvYWRpbmc7Ci0gICAgU3RyaW5nIG1fdHlwZTsK
ICAgICBTdHJpbmcgbV9tZWRpYTsKIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0
eWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVF
bGVtZW50LmNwcAkocmV2aXNpb24gMTc4MjUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHls
ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUgTmlrb2xhcyBaaW1tZXJtYW5uIDx3aWxkZm94QGtkZS5vcmc+
Ci0gICAgICAgICAgICAgICAgICAyMDA0LCAyMDA1IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+Cisg
ICAgICAgICAgICAgICAgICAyMDA0LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAgICAg
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAKICAgICBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKQEAgLTI4LDk3ICsyOCw3MCBAQAogI2luY2x1ZGUg
IkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKLSNpbmNsdWRlICJNZWRpYUxpc3QuaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5
RXZhbHVhdG9yLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1TVkdTdHlsZUVsZW1lbnQ6OlNWR1N0eWxlRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKSA6IFNWR0VsZW1lbnQodGFnTmFtZSwgZG9j
KQorU1ZHU3R5bGVFbGVtZW50OjpTVkdTdHlsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICAgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvYykK
KyAgICAgLCBTdHlsZUVsZW1lbnQoKQogewotICAgIG1fbG9hZGluZyA9IGZhbHNlOwogfQogCi1T
VkdTdHlsZUVsZW1lbnQ6On5TVkdTdHlsZUVsZW1lbnQoKQotewotfQotCi1BdG9taWNTdHJpbmcg
U1ZHU3R5bGVFbGVtZW50Ojp4bWxzcGFjZSgpIGNvbnN0CitTdHJpbmcgU1ZHU3R5bGVFbGVtZW50
Ojp4bWxzcGFjZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRyeUdldEF0dHJpYnV0ZSgieG1sOnNw
YWNlIik7CiB9CiAKLXZvaWQgU1ZHU3R5bGVFbGVtZW50OjpzZXRYbWxzcGFjZShjb25zdCBBdG9t
aWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgU1ZHU3R5bGVFbGVtZW50OjpzZXRY
bWxzcGFjZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IE5P
X01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKIH0KIAotQXRvbWljU3RyaW5nIFNWR1N0eWxlRWxl
bWVudDo6dHlwZSgpIGNvbnN0CitTdHJpbmcgU1ZHU3R5bGVFbGVtZW50Ojp0eXBlKCkgY29uc3QK
IHsKICAgICByZXR1cm4gdHJ5R2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvY3NzIik7CiB9CiAK
LXZvaWQgU1ZHU3R5bGVFbGVtZW50OjpzZXRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQordm9pZCBTVkdTdHlsZUVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5n
JiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dF
RF9FUlI7CiB9CiAKLUF0b21pY1N0cmluZyBTVkdTdHlsZUVsZW1lbnQ6Om1lZGlhKCkgY29uc3QK
K1N0cmluZyBTVkdTdHlsZUVsZW1lbnQ6Om1lZGlhKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ5
R2V0QXR0cmlidXRlKCJtZWRpYSIsICJhbGwiKTsKIH0KIAotdm9pZCBTVkdTdHlsZUVsZW1lbnQ6
OnNldE1lZGlhKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBT
VkdTdHlsZUVsZW1lbnQ6OnNldE1lZGlhKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogfQogCi1BdG9taWNT
dHJpbmcgU1ZHU3R5bGVFbGVtZW50Ojp0aXRsZSgpIGNvbnN0CitTdHJpbmcgU1ZHU3R5bGVFbGVt
ZW50Ojp0aXRsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRyeUdldEF0dHJpYnV0ZSgidGl0bGUi
KTsKIH0KIAotdm9pZCBTVkdTdHlsZUVsZW1lbnQ6OnNldFRpdGxlKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBTVkdTdHlsZUVsZW1lbnQ6OnNldFRpdGxlKGNv
bnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gTk9fTU9ESUZJQ0FU
SU9OX0FMTE9XRURfRVJSOwogfQogCi1DU1NTdHlsZVNoZWV0ICpTVkdTdHlsZUVsZW1lbnQ6OnNo
ZWV0KCkKK3ZvaWQgU1ZHU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7Ci0g
ICAgcmV0dXJuIG1fc2hlZXQuZ2V0KCk7CisgICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoKTsKKyAgICBTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KGRvY3VtZW50
KCkpOwogfQogCi12b2lkIFNWR1N0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCkKK3ZvaWQg
U1ZHU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKLSAgICBTVkdFbGVtZW50
OjpjaGlsZHJlbkNoYW5nZWQoKTsKLQotICAgIGlmKG1fc2hlZXQpCi0gICAgICAgIG1fc2hlZXQg
PSAwOwotCi0gICAgLy8gRklYTUU6IHRoaXMgY29kZSBzaG91bGQgYmUgc2hhcmVkIHdpdGggSFRN
TFN0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCkKLSAgICBtX2xvYWRpbmcgPSBmYWxzZTsK
LSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHNjcmVlbkV2YWwoInNjcmVlbiIsIHRydWUpOwotICAg
IE1lZGlhUXVlcnlFdmFsdWF0b3IgcHJpbnRFdmFsKCJwcmludCIsIHRydWUpOyAgIAotICAgIFJl
ZlB0cjxNZWRpYUxpc3Q+IG1lZGlhTGlzdCA9IG5ldyBNZWRpYUxpc3QoKENTU1N0eWxlU2hlZXQq
KTAsIG1lZGlhKCkpOwotICAgIGlmICgodHlwZSgpLmlzRW1wdHkoKSB8fCB0eXBlKCkgPT0gInRl
eHQvY3NzIikgJiYgKHNjcmVlbkV2YWwuZXZhbChtZWRpYUxpc3QuZ2V0KCkpIHx8IHByaW50RXZh
bC5ldmFsKG1lZGlhTGlzdC5nZXQoKSkpKSB7Ci0gICAgICAgIG93bmVyRG9jdW1lbnQoKS0+YWRk
UGVuZGluZ1NoZWV0KCk7Ci0KLSAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKLSAKLSAgICAgICAg
bV9zaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KHRoaXMsIFN0cmluZygpLCBkb2N1bWVudCgpLT5p
bnB1dEVuY29kaW5nKCkpOwotICAgICAgICBtX3NoZWV0LT5wYXJzZVN0cmluZyh0ZXh0Q29udGVu
dCgpKTsgLy8gU1ZHIGNzcyBpcyBhbHdheXMgcGFyc2VkIGluIHN0cmljdCBtb2RlCi0gICAgICAg
IAotICAgICAgICBtX3NoZWV0LT5zZXRNZWRpYShtZWRpYUxpc3QuZ2V0KCkpOwotICAgICAgICBt
X2xvYWRpbmcgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZighaXNMb2FkaW5nKCkgJiYgbV9zaGVl
dCkKLSAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOworICAgIFNWR0VsZW1l
bnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKKyAgICBTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9t
RG9jdW1lbnQoZG9jdW1lbnQoKSk7CiB9CiAKLWJvb2wgU1ZHU3R5bGVFbGVtZW50Ojppc0xvYWRp
bmcoKSBjb25zdAordm9pZCBTVkdTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCiB7Ci0g
ICAgcmV0dXJuIGZhbHNlOworICAgIFN0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKHRoaXMp
OwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkocmV2aXNpb24g
MTc4MjUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5p
a29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAw
NCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwg
MjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0CiAKQEAgLTI1LDQwICsyNSwzMSBAQAogI2lmZGVmIFNWR19TVVBQT1JU
CiAKICNpbmNsdWRlIDxTVkdFbGVtZW50Lmg+CisjaW5jbHVkZSA8U3R5bGVFbGVtZW50Lmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENTU1N0eWxlU2hlZXQ7Ci0KLSAgICBj
bGFzcyBTVkdTdHlsZUVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCB7CisgICAgY2xhc3MgU1ZH
U3R5bGVFbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQsIHB1YmxpYyBTdHlsZUVsZW1lbnQgewog
ICAgIHB1YmxpYzoKICAgICAgICAgU1ZHU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwotICAgICAgICB2aXJ0dWFsIH5TVkdTdHlsZUVsZW1lbnQoKTsKIAogICAg
ICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50JworICAgICAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9j
dW1lbnQoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwogCiAgICAg
ICAgIC8vICdTVkdTdHlsZUVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBBdG9taWNTdHJpbmcg
eG1sc3BhY2UoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRYbWxzcGFjZShjb25zdCBBdG9taWNT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICAgICAgQXRvbWljU3RyaW5nIHR5cGUoKSBj
b25zdDsKLSAgICAgICAgdm9pZCBzZXRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlv
bkNvZGUmKTsKLQotICAgICAgICBBdG9taWNTdHJpbmcgbWVkaWEoKSBjb25zdDsKLSAgICAgICAg
dm9pZCBzZXRNZWRpYShjb25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAg
ICAgICAgQXRvbWljU3RyaW5nIHRpdGxlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0VGl0bGUo
Y29uc3QgQXRvbWljU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICBTdHJpbmcgeG1s
c3BhY2UoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRYbWxzcGFjZShjb25zdCBTdHJpbmcmLCBF
eGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgQ1NTU3R5bGVTaGVldCAqc2hlZXQoKTsKKyAgICAg
ICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0OworICAgICAgICB2b2lkIHNldFR5cGUoY29u
c3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgICAgIC8vIEludGVybmFsCi0gICAg
ICAgIGJvb2wgaXNMb2FkaW5nKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBtZWRpYSgpIGNvbnN0
OworICAgICAgICB2b2lkIHNldE1lZGlhKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsK
IAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fc2hlZXQ7
Ci0gICAgICAgIGJvb2wgbV9sb2FkaW5nOworICAgICAgICBTdHJpbmcgdGl0bGUoKSBjb25zdDsK
KyAgICAgICAgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAg
ICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11571</attachid>
            <date>2006-11-19 05:48:25 -0800</date>
            <delta_ts>2006-12-07 16:05:42 -0800</delta_ts>
            <desc>AtomicString improvements</desc>
            <filename>11625-3.diff</filename>
            <type>text/plain</type>
            <size>25908</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzg1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMDYtMTEtMTkgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjI1CisgICAgICAgIEludmVzdGlnYXRlIHBv
c3NpYmlsaXR5IHRvIHNoYXJlIGNvZGUgYmV0d2VlbiBIVE1MU3R5bGVFbGVtZW50IGFuZCBTVkdT
dHlsZUVsZW1lbnQKKworICAgICAgICBBZGQgYSBjbGFzcyBzaGFyZWQgYnkgYm90aCBIVE1MU3R5
bGVFbGVtZW50IGFuZCBTVkdTdHlsZUVsZW1lbnQgdGhhdAorICAgICAgICBlbmNhcHN1bGF0ZXMg
dGhlIGNvbW1vbiBsb2dpYy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0b3IpOgorICAgICAgICBHZW5lcmFsaXplIHN0eWxl
c2hlZXQgcHJvY2Vzc2luZyBvZiBzdmcgYW5kIGh0bWwuCisKKyAgICAgICAgKiBkb20vU3R5bGVF
bGVtZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZUVsZW1lbnQ6OlN0eWxl
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUVsZW1lbnQ6OnNoZWV0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKiBkb20v
U3R5bGVFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVFbGVtZW50Ojp+
U3R5bGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6aXNMb2FkaW5n
KToKKyAgICAgICAgQ29tbW9uIGJhc2UgY2xhc3MgZm9yIFNWR1N0eWxlRWxlbWVudCBhbmQgSFRN
TFN0eWxlRWxlbWVudC4KKworICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6Om1lZGlhKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnNldE1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTdHlsZUVsZW1lbnQ6OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxl
bWVudDo6c2V0VHlwZSk6CisgICAgICAgICogaHRtbC9IVE1MU3R5bGVFbGVtZW50Lmg6CisgICAg
ICAgIFVzZSBuZXcgY29tbW9uIGNsYXNzLgorCisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0VsZW1l
bnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdFbGVtZW50Lmg6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVu
dDo6Y29udGVudFNjcmlwdFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6
Y29udGVudFN0eWxlVHlwZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuaDoK
KyAgICAgICAgRG8gbm90IHVzZSB0cnlHZXRBdHRyaWJ1dGUoTlMpIGFueW1vcmUuCisKKyAgICAg
ICAgKiBrc3ZnMi9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1N0eWxlRWxlbWVudDo6U1ZHU3R5bGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0
eWxlRWxlbWVudDo6eG1sc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50
Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlRWxlbWVudDo6bWVkaWEpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVFbGVtZW50Ojp0aXRsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1N0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1N0eWxlRWxlbWVudC5oOgorICAgICAgICBVc2UgbmV3IGNvbW1vbiBjbGFzcy4KKwog
MjAwNi0xMS0xOSAgTWl0eiBQZXR0ZWwgIDxtaXR6QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTWFjaWVqLgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTc4NTIpCisrKyBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NDAsOSArMTg0MCwxMiBA
QCB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChuLT5pc0hUTUxF
bGVtZW50KCkgJiYgKG4tPmhhc1RhZ05hbWUobGlua1RhZykgfHwgbi0+aGFzVGFnTmFtZShzdHls
ZVRhZykpKSB7Ci0gICAgICAgICAgICBIVE1MRWxlbWVudCAqZSA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50ICo+KG4pOworICAgICAgICB9IGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiAo
bi0+aGFzVGFnTmFtZShsaW5rVGFnKSB8fCBuLT5oYXNUYWdOYW1lKHN0eWxlVGFnKSkKKyNpZmRl
ZiBTVkdfU1VQUE9SVAorICAgICAgICAgICAgfHwgIChuLT5pc1NWR0VsZW1lbnQoKSAmJiBuLT5o
YXNUYWdOYW1lKFNWR05hbWVzOjpzdHlsZVRhZykpCisjZW5kaWYKKyAgICAgICAgKSB7CisgICAg
ICAgICAgICBFbGVtZW50ICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihuKTsKICAgICAgICAg
ICAgIERlcHJlY2F0ZWRTdHJpbmcgdGl0bGUgPSBlLT5nZXRBdHRyaWJ1dGUodGl0bGVBdHRyKS5k
ZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgICAgICBib29sIGVuYWJsZWRWaWFTY3JpcHQgPSBm
YWxzZTsKICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUobGlua1RhZykpIHsKQEAgLTE4
NTcsNiArMTg2MCwxMSBAQCB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKIAog
ICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHByZWZlcnJlZCBzdHlsZXNldC4gIFRoaXMg
aXMgdGhlCiAgICAgICAgICAgICAvLyBzZXQgb2Ygc2hlZXRzIHRoYXQgd2lsbCBiZSBlbmFibGVk
LgorI2lmZGVmIFNWR19TVVBQT1JUCisgICAgICAgICAgICBpZiAobi0+aXNTVkdFbGVtZW50KCkg
JiYgbi0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3R5bGVUYWcpKQorICAgICAgICAgICAgICAgIHNo
ZWV0ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVFbGVtZW50Kj4obiktPnNoZWV0KCk7CisgICAgICAg
ICAgICBlbHNlCisjZW5kaWYKICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUobGlua1Rh
ZykpCiAgICAgICAgICAgICAgICAgc2hlZXQgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQq
PihuKS0+c2hlZXQoKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTE4ODAsMzAgKzE4ODgsMTMgQEAg
dm9pZCBEb2N1bWVudDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKHRpdGxlICE9IG1fcHJlZmVycmVkU3R5bGVzaGVldFNldCkKICAg
ICAgICAgICAgICAgICAgICAgc2hlZXQgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0j
aWZkZWYgU1ZHX1NVUFBPUlQKLSAgICAgICAgZWxzZSBpZiAobi0+aXNTVkdFbGVtZW50KCkgJiYg
bi0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3R5bGVUYWcpKSB7Ci0gICAgICAgICAgICBEZXByZWNh
dGVkU3RyaW5nIHRpdGxlOwotICAgICAgICAgICAgLy8gPFNUWUxFPiBlbGVtZW50Ci0gICAgICAg
ICAgICBTVkdTdHlsZUVsZW1lbnQgKnMgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZUVsZW1lbnQqPihu
KTsKLSAgICAgICAgICAgIGlmICghcy0+aXNMb2FkaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBz
aGVldCA9IHMtPnNoZWV0KCk7Ci0gICAgICAgICAgICAgICAgaWYoc2hlZXQpCi0gICAgICAgICAg
ICAgICAgICAgIHRpdGxlID0gcy0+Z2V0QXR0cmlidXRlKFNWR05hbWVzOjp0aXRsZUF0dHIpLmRl
cHJlY2F0ZWRTdHJpbmcoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCF0aXRs
ZS5pc0VtcHR5KCkgJiYgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0LmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXQgPSBtX3NlbGVjdGVkU3R5bGVzaGVl
dFNldCA9IHRpdGxlOwotCi0gICAgICAgICAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgICAgIGlmICh0aXRsZSAhPSBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXQpCi0gICAg
ICAgICAgICAgICAgICAgIHNoZWV0ID0gMDsgLy8gZG9uJ3QgdXNlIGl0CiAKLSAgICAgICAgICAg
ICAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UoJyYnLCAiJiYiKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICB9CisjaWZkZWYgU1ZHX1NVUFBPUlQKKyAgICAgICAgICAgICAgICBpZiAoIW4tPmlzSFRN
TEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKCcm
JywgIiYmIik7CiAjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIGlm
IChzaGVldCkgewogICAgICAgICAgICAgc2hlZXQtPnJlZigpOwpJbmRleDogV2ViQ29yZS9kb20v
U3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw5NCBAQAorLyoqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
RE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFJv
YiBCdWlzCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxl
IFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8K
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZUVsZW1lbnQuaCIKKworI2luY2x1
ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgorI2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgor
I2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitTdHlsZUVsZW1lbnQ6OlN0eWxlRWxlbWVu
dCgpCisgICAgOiBtX2xvYWRpbmcoZmFsc2UpCit7Cit9CisKK1N0eWxlU2hlZXQqIFN0eWxlRWxl
bWVudDo6c2hlZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3NoZWV0LmdldCgpOworfQorCit2
b2lkIFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50
KQoreworICAgIGlmIChtX3NoZWV0KQorICAgICAgICBkb2N1bWVudC0+dXBkYXRlU3R5bGVTZWxl
Y3RvcigpOworfQorCit2b2lkIFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQpCit7CisgICAgaWYgKG1fc2hlZXQpCisgICAgICAgIGRvY3VtZW50LT51
cGRhdGVTdHlsZVNlbGVjdG9yKCk7Cit9CisKK3ZvaWQgU3R5bGVFbGVtZW50OjpjaGlsZHJlbkNo
YW5nZWQoTm9kZSogZSkKK3sKKyAgICBpZiAoIWUpCisgICAgICAgIHJldHVybjsKKyAgICBTdHJp
bmcgdGV4dCA9ICIiOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGUtPmRvY3VtZW50KCk7CisK
KyAgICBmb3IgKE5vZGUqIGMgPSBlLT5maXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGlu
ZygpKQorICAgICAgICBpZiAoYy0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhUX05PREUgfHwgYy0+
bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpDT01NRU5UX05PREUpCisgICAgICAgICAgICB0ZXh0ICs9IGMtPm5vZGVWYWx1ZSgp
OworCisgICAgaWYgKG1fc2hlZXQpIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PENTU1N0eWxl
U2hlZXQgKj4obV9zaGVldC5nZXQoKSktPmlzTG9hZGluZygpKQorICAgICAgICAgICAgZG9jdW1l
bnQtPnN0eWxlc2hlZXRMb2FkZWQoKTsgLy8gUmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBzaGVl
dCBsaXN0LgorICAgICAgICBtX3NoZWV0ID0gMDsKKyAgICB9CisKKyAgICBtX2xvYWRpbmcgPSBm
YWxzZTsKKyAgICBTdHJpbmcgX3R5cGUgPSB0eXBlKCk7CisgICAgaWYgKF90eXBlLmlzRW1wdHko
KSB8fCBfdHlwZSA9PSAidGV4dC9jc3MiKSB7IC8vIFR5cGUgbXVzdCBiZSBlbXB0eSBvciBDU1MK
KyAgICAgICAgUmVmUHRyPE1lZGlhTGlzdD4gbWVkaWFMaXN0ID0gbmV3IE1lZGlhTGlzdCgoQ1NT
U3R5bGVTaGVldCopMCwgbWVkaWEoKSwgZS0+aXNIVE1MRWxlbWVudCgpKTsKKyAgICAgICAgTWVk
aWFRdWVyeUV2YWx1YXRvciBzY3JlZW5FdmFsKCJzY3JlZW4iLCB0cnVlKTsKKyAgICAgICAgTWVk
aWFRdWVyeUV2YWx1YXRvciBwcmludEV2YWwoInByaW50IiwgdHJ1ZSk7CisgICAgICAgIGlmIChz
Y3JlZW5FdmFsLmV2YWwobWVkaWFMaXN0LmdldCgpKSB8fCBwcmludEV2YWwuZXZhbChtZWRpYUxp
c3QuZ2V0KCkpKSB7CisgICAgICAgICAgICBkb2N1bWVudC0+YWRkUGVuZGluZ1NoZWV0KCk7Cisg
ICAgICAgICAgICBtX2xvYWRpbmcgPSB0cnVlOworICAgICAgICAgICAgbV9zaGVldCA9IG5ldyBD
U1NTdHlsZVNoZWV0KGUsIFN0cmluZygpLCBkb2N1bWVudC0+aW5wdXRFbmNvZGluZygpKTsKKyAg
ICAgICAgICAgIG1fc2hlZXQtPnBhcnNlU3RyaW5nKHRleHQsICFkb2N1bWVudC0+aW5Db21wYXRN
b2RlKCkpOworICAgICAgICAgICAgbV9zaGVldC0+c2V0TWVkaWEobWVkaWFMaXN0LmdldCgpKTsK
KyAgICAgICAgICAgIG1fbG9hZGluZyA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKCFpc0xvYWRpbmcoKSAmJiBtX3NoZWV0KQorICAgICAgICBkb2N1bWVudC0+c3R5bGVzaGVl
dExvYWRlZCgpOworfQorCit9CkluZGV4OiBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvZG9tL1N0eWxlRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisv
KgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RF
LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBSb2IgQnVpcworICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworI2lmbmRlZiBTdHlsZUVsZW1lbnRf
SAorI2RlZmluZSBTdHlsZUVsZW1lbnRfSAorCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1hcHBlZEF0dHJpYnV0ZTsKKworY2xhc3Mg
U3R5bGVFbGVtZW50Cit7CitwdWJsaWM6CisgICAgU3R5bGVFbGVtZW50KCk7CisgICAgdmlydHVh
bCB+U3R5bGVFbGVtZW50KCkge30KKworICAgIFN0eWxlU2hlZXQqIHNoZWV0KCkgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKwor
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYSgpIGNvbnN0ID0gMDsKKworICAgIHZvaWQg
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoRG9jdW1lbnQqKTsKKyAgICB2b2lkIHJlbW92ZWRGcm9tRG9j
dW1lbnQoRG9jdW1lbnQqKTsKKyAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChOb2RlKik7CisKK3By
b3RlY3RlZDoKKyAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zaGVldDsKKyAgICBib29sIG1f
bG9hZGluZzsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxT
dHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg1MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MU3R5
bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBAQAogCiAjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJNZWRpYUxp
c3QuaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzUsMjEgKzMzLDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
IEhUTUxTdHlsZUVsZW1lbnQ6OkhUTUxTdHlsZUVsZW1lbnQoRG9jdW1lbnQqIGRvYykKICAgICA6
IEhUTUxFbGVtZW50KHN0eWxlVGFnLCBkb2MpCi0gICAgLCBtX2xvYWRpbmcoZmFsc2UpCiB7CiB9
CiAKLVN0eWxlU2hlZXQqIEhUTUxTdHlsZUVsZW1lbnQ6OnNoZWV0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9zaGVldC5nZXQoKTsKLX0KLQogLy8gb3RoZXIgc3R1ZmYuLi4KIHZvaWQgSFRNTFN0
eWxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQog
ewotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpCi0gICAgICAgIG1fdHlwZSA9IGF0
dHItPnZhbHVlKCkuZG9tU3RyaW5nKCkubG93ZXIoKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gbWVkaWFBdHRyKQorICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbWVkaWFBdHRyKQogICAg
ICAgICBtX21lZGlhID0gYXR0ci0+dmFsdWUoKS5kZXByZWNhdGVkU3RyaW5nKCkubG93ZXIoKTsK
ICAgICBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKQEAgLTU4LDQ4ICs0OCwxOCBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmliCiB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsK
ICAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKLSAgICBpZiAobV9zaGVl
dCkKLSAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOworICAgIFN0eWxl
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoZG9jdW1lbnQoKSk7CiB9CiAKIHZvaWQgSFRN
TFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7CiAgICAgSFRNTEVsZW1lbnQ6
OnJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKLSAgICBpZiAobV9zaGVldCkKLSAgICAgICAgZG9jdW1l
bnQoKS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOworICAgIFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZy
b21Eb2N1bWVudChkb2N1bWVudCgpKTsKIH0KIAogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpjaGls
ZHJlbkNoYW5nZWQoKQogewotICAgIFN0cmluZyB0ZXh0ID0gIiI7Ci0KLSAgICBmb3IgKE5vZGUq
IGMgPSBmaXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKQotICAgICAgICBpZiAo
Yy0+bm9kZVR5cGUoKSA9PSBURVhUX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBDREFUQV9TRUNU
SU9OX05PREUgfHwgYy0+bm9kZVR5cGUoKSA9PSBDT01NRU5UX05PREUpCi0gICAgICAgICAgICB0
ZXh0ICs9IGMtPm5vZGVWYWx1ZSgpOwotCi0gICAgaWYgKG1fc2hlZXQpIHsKLSAgICAgICAgaWYg
KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQgKj4obV9zaGVldC5nZXQoKSktPmlzTG9hZGluZygp
KQotICAgICAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOyAvLyBSZW1vdmUg
b3Vyc2VsdmVzIGZyb20gdGhlIHNoZWV0IGxpc3QuCi0gICAgICAgIG1fc2hlZXQgPSAwOwotICAg
IH0KLQotICAgIG1fbG9hZGluZyA9IGZhbHNlOwotICAgIGlmIChtX3R5cGUuaXNFbXB0eSgpIHx8
IG1fdHlwZSA9PSAidGV4dC9jc3MiKSB7IC8vIFR5cGUgbXVzdCBiZSBlbXB0eSBvciBDU1MKLSAg
ICAgICAgUmVmUHRyPE1lZGlhTGlzdD4gbWVkaWEgPSBuZXcgTWVkaWFMaXN0KChDU1NTdHlsZVNo
ZWV0KikwLCBtX21lZGlhLCB0cnVlKTsKLSAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBzY3Jl
ZW5FdmFsKCJzY3JlZW4iLCB0cnVlKTsKLSAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBwcmlu
dEV2YWwoInByaW50IiwgdHJ1ZSk7Ci0gICAgICAgIGlmIChzY3JlZW5FdmFsLmV2YWwobWVkaWEu
Z2V0KCkpIHx8IHByaW50RXZhbC5ldmFsKG1lZGlhLmdldCgpKSkgewotICAgICAgICAgICAgZG9j
dW1lbnQoKS0+YWRkUGVuZGluZ1NoZWV0KCk7Ci0gICAgICAgICAgICBtX2xvYWRpbmcgPSB0cnVl
OwotICAgICAgICAgICAgbV9zaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KHRoaXMsIFN0cmluZygp
LCBkb2N1bWVudCgpLT5pbnB1dEVuY29kaW5nKCkpOwotICAgICAgICAgICAgbV9zaGVldC0+cGFy
c2VTdHJpbmcodGV4dCwgIWRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpKTsKLSAgICAgICAgICAg
IG1fc2hlZXQtPnNldE1lZGlhKG1lZGlhLmdldCgpKTsKLSAgICAgICAgICAgIG1fbG9hZGluZyA9
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFpc0xvYWRpbmcoKSAmJiBtX3No
ZWV0KQotICAgICAgICBkb2N1bWVudCgpLT5zdHlsZXNoZWV0TG9hZGVkKCk7CisgICAgU3R5bGVF
bGVtZW50OjpjaGlsZHJlbkNoYW5nZWQodGhpcyk7CiB9CiAKIGJvb2wgSFRNTFN0eWxlRWxlbWVu
dDo6aXNMb2FkaW5nKCkgY29uc3QKQEAgLTEzMCwyMiArOTAsMjIgQEAgdm9pZCBIVE1MU3R5bGVF
bGVtZW50OjpzZXREaXNhYmxlZChib29sIAogICAgIHNldEF0dHJpYnV0ZShkaXNhYmxlZEF0dHIs
IGRpc2FibGVkID8gIiIgOiAwKTsKIH0KIAotU3RyaW5nIEhUTUxTdHlsZUVsZW1lbnQ6Om1lZGlh
KCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTFN0eWxlRWxlbWVudDo6bWVkaWEoKSBj
b25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWVkaWFBdHRyKTsKIH0KIAotdm9pZCBI
VE1MU3R5bGVFbGVtZW50OjpzZXRNZWRpYShjb25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1M
U3R5bGVFbGVtZW50OjpzZXRNZWRpYShjb25zdCBBdG9taWNTdHJpbmcgJnZhbHVlKQogewogICAg
IHNldEF0dHJpYnV0ZShtZWRpYUF0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxTdHlsZUVs
ZW1lbnQ6OnR5cGUoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MU3R5bGVFbGVtZW50
Ojp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKIH0K
IAotdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2
b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNldFR5cGUoY29uc3QgQXRvbWljU3RyaW5nICZ2YWx1ZSkK
IHsKICAgICBzZXRBdHRyaWJ1dGUodHlwZUF0dHIsIHZhbHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MU3R5bGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxT
dHlsZUVsZW1lbnQuaAkocmV2aXNpb24gMTc4NTIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFN0eWxl
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMiArMjQsMTMgQEAKICNpZm5kZWYgSFRN
TFN0eWxlRWxlbWVudF9ICiAjZGVmaW5lIEhUTUxTdHlsZUVsZW1lbnRfSAogCi0jaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiSFRN
TEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTdHlsZUVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBIVE1MU3R5bGVFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50CitjbGFz
cyBIVE1MU3R5bGVFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgU3R5bGVFbGVt
ZW50CiB7CiBwdWJsaWM6CiAgICAgSFRNTFN0eWxlRWxlbWVudChEb2N1bWVudCopOwpAQCAtMzgs
MzAgKzM5LDI1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDE7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3
Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5pc1RleHROb2RlKCk7IH0KIAotICAgIFN0eWxlU2hl
ZXQqIHNoZWV0KCkgY29uc3Q7Ci0KICAgICAvLyBvdmVybG9hZCBmcm9tIEhUTUxFbGVtZW50CiAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwog
ICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdl
ZCgpOwogCi0gICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNM
b2FkaW5nKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNoZWV0TG9hZGVkKCk7CiAKICAgICBi
b29sIGRpc2FibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKIAotICAg
IFN0cmluZyBtZWRpYSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TWVkaWEoY29uc3QgU3RyaW5nJik7
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYSgpIGNvbnN0OworICAgIHZvaWQgc2V0TWVk
aWEoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgdHlwZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHR5
cGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKIHBy
b3RlY3RlZDoKLSAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9zaGVldDsKLSAgICBib29sIG1f
bG9hZGluZzsKLSAgICBTdHJpbmcgbV90eXBlOwogICAgIFN0cmluZyBtX21lZGlhOwogfTsKIApJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3ODUyKQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSwyMiArMTA1
LDYgQEAgU1ZHRWxlbWVudCogU1ZHRWxlbWVudDo6dmlld3BvcnRFbGVtZW50KAogICAgIHJldHVy
biAwOwogfQogCi1BdG9taWNTdHJpbmcgU1ZHRWxlbWVudDo6dHJ5R2V0QXR0cmlidXRlKGNvbnN0
IFN0cmluZyYgbmFtZSwgQXRvbWljU3RyaW5nIGRlZmF1bHRWYWwpIGNvbnN0Ci17Ci0gICAgaWYg
KGhhc0F0dHJpYnV0ZShuYW1lKSkKLSAgICAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lKTsK
LQotICAgIHJldHVybiBkZWZhdWx0VmFsOwotfQotCi1BdG9taWNTdHJpbmcgU1ZHRWxlbWVudDo6
dHJ5R2V0QXR0cmlidXRlTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmlu
ZyYgbG9jYWxOYW1lLCBBdG9taWNTdHJpbmcgZGVmYXVsdFZhbCkgY29uc3QKLXsKLSAgICBpZiAo
aGFzQXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpKQotICAgICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwotCi0gICAgcmV0dXJuIGRl
ZmF1bHRWYWw7Ci19Ci0KIHZvaWQgU1ZHRWxlbWVudDo6YWRkU1ZHRXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgY29uc3QgQXR0cmlidXRlKiBhdHRyKQogewogICAg
IEVsZW1lbnQ6OnNldEhUTUxFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZG9jdW1lbnQoKS0+YWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLT4KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9u
IDE3ODUyKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjAsMTEgKzE2MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU1ZHU1ZH
RWxlbWVudCogb3duZXJTVkdFbGVtZW50KCkgY29uc3Q7CiAgICAgICAgIFNWR0VsZW1lbnQqIHZp
ZXdwb3J0RWxlbWVudCgpIGNvbnN0OwogCi0gICAgICAgIC8vIEhlbHBlciBtZXRob2RzIHRoYXQg
cmV0dXJucyB0aGUgYXR0ciB2YWx1ZSBpZiBhdHRyIGlzIHNldCwgb3RoZXJ3aXNlIHRoZSBkZWZh
dWx0IHZhbHVlLgotICAgICAgICAvLyBJdCB0aHJvd3MgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURf
RVJSIGlmIHRoZSBlbGVtZW50IGlzIHJlYWQtb25seS4KLSAgICAgICAgQXRvbWljU3RyaW5nIHRy
eUdldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIG5hbWUsIEF0b21pY1N0cmluZyBkZWZhdWx0VmFs
dWUgPSBBdG9taWNTdHJpbmcoKSkgY29uc3Q7Ci0gICAgICAgIEF0b21pY1N0cmluZyB0cnlHZXRB
dHRyaWJ1dGVOUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2Nh
bE5hbWUsIEF0b21pY1N0cmluZyBkZWZhdWx0VmFsdWUgPSBBdG9taWNTdHJpbmcoKSkgY29uc3Q7
Ci0KICAgICAgICAgLy8gSW50ZXJuYWwKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNzg1MikKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiU1ZHQW5nbGUuaCIKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdN
YXRyaXguaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8uaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdab29t
RXZlbnQuaCIKQEAgLTQzLDYgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBu
YW1lc3BhY2UgU1ZHTmFtZXM7CiAKIFNWR1NWR0VsZW1lbnQ6OlNWR1NWR0VsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IFNWR1N0eWxlZExv
Y2F0YWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKQpAQCAtNzYsOSArNzgsMTEgQEAgQU5JTUFURURf
UFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHU1ZHRWxlbQogQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHU1ZHRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFdpZHRoLCB3
aWR0aCwgU1ZHTmFtZXM6OndpZHRoQXR0ci5sb2NhbE5hbWUoKSwgbV93aWR0aC5nZXQoKSkKIEFO
SU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1NWR0VsZW1lbnQsIFNWR0xlbmd0aCosIExl
bmd0aCwgbGVuZ3RoLCBIZWlnaHQsIGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdodEF0dHIubG9jYWxO
YW1lKCksIG1faGVpZ2h0LmdldCgpKQogCi1BdG9taWNTdHJpbmcgU1ZHU1ZHRWxlbWVudDo6Y29u
dGVudFNjcmlwdFR5cGUoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBTVkdTVkdFbGVtZW50
Ojpjb250ZW50U2NyaXB0VHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRyeUdldEF0dHJpYnV0
ZSgiY29udGVudFNjcmlwdFR5cGUiLCAidGV4dC9lY21hc2NyaXB0Iik7CisgICAgc3RhdGljIGNv
bnN0IEF0b21pY1N0cmluZyBfZGVmYXVsdCgidGV4dC9lY21hc2NyaXB0Iik7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBuID0gZ2V0QXR0cmlidXRlKGNvbnRlbnRTY3JpcHRUeXBlQXR0cik7Cisg
ICAgcmV0dXJuIG4uaXNOdWxsKCkgPyBfZGVmYXVsdCA6IG47CiB9CiAKIHZvaWQgU1ZHU1ZHRWxl
bWVudDo6c2V0Q29udGVudFNjcmlwdFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQpAQCAt
ODYsOSArOTAsMTEgQEAgdm9pZCBTVkdTVkdFbGVtZW50OjpzZXRDb250ZW50U2NyaXB0VHlwZQog
ICAgIHNldEF0dHJpYnV0ZShTVkdOYW1lczo6Y29udGVudFNjcmlwdFR5cGVBdHRyLCB0eXBlKTsK
IH0KIAotQXRvbWljU3RyaW5nIFNWR1NWR0VsZW1lbnQ6OmNvbnRlbnRTdHlsZVR5cGUoKSBjb25z
dAorY29uc3QgQXRvbWljU3RyaW5nJiBTVkdTVkdFbGVtZW50Ojpjb250ZW50U3R5bGVUeXBlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gdHJ5R2V0QXR0cmlidXRlKCJjb250ZW50U3R5bGVUeXBlIiwg
InRleHQvY3NzIik7CisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyBfZGVmYXVsdCgidGV4
dC9jc3MiKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG4gPSBnZXRBdHRyaWJ1dGUoY29udGVu
dFN0eWxlVHlwZUF0dHIpOworICAgIHJldHVybiBuLmlzTnVsbCgpID8gX2RlZmF1bHQgOiBuOwog
fQogCiB2b2lkIFNWR1NWR0VsZW1lbnQ6OnNldENvbnRlbnRTdHlsZVR5cGUoY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlKQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuaAkocmV2aXNpb24g
MTc4NTIpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDEwICs2MSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAog
ICAgICAgICAvLyAnU1ZHU1ZHRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIEF0b21pY1N0cmlu
ZyBjb250ZW50U2NyaXB0VHlwZSgpIGNvbnN0OworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGNvbnRlbnRTY3JpcHRUeXBlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0Q29udGVudFNjcmlw
dFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKIAotICAgICAgICBBdG9taWNTdHJpbmcg
Y29udGVudFN0eWxlVHlwZSgpIGNvbnN0OworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNv
bnRlbnRTdHlsZVR5cGUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRDb250ZW50U3R5bGVUeXBl
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7CiAKICAgICAgICAgRmxvYXRSZWN0IHZpZXdwb3J0
KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDE3ODUyKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAg
ICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAg
MjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogICAgIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIEtERSBwcm9qZWN0CkBAIC0yOCwyNCArMjgsMjEgQEAKICNpbmNsdWRlICJDU1NTdHlsZVNo
ZWV0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
Ci0jaW5jbHVkZSAiTWVkaWFMaXN0LmgiCi0jaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHU3R5bGVFbGVtZW50OjpTVkdTdHlsZUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiBTVkdFbGVtZW50
KHRhZ05hbWUsIGRvYykKLXsKLSAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLX0KK3VzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLVNWR1N0eWxlRWxlbWVudDo6flNWR1N0eWxlRWxlbWVudCgpCitT
VkdTdHlsZUVsZW1lbnQ6OlNWR1N0eWxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCAqZG9jKQorICAgICA6IFNWR0VsZW1lbnQodGFnTmFtZSwgZG9jKQogewog
fQogCi1BdG9taWNTdHJpbmcgU1ZHU3R5bGVFbGVtZW50Ojp4bWxzcGFjZSgpIGNvbnN0Citjb25z
dCBBdG9taWNTdHJpbmcmIFNWR1N0eWxlRWxlbWVudDo6eG1sc3BhY2UoKSBjb25zdAogewotICAg
IHJldHVybiB0cnlHZXRBdHRyaWJ1dGUoInhtbDpzcGFjZSIpOworICAgIHN0YXRpYyBjb25zdCBB
dG9taWNTdHJpbmcgX3htbHNwYWNlKCJ4bWw6c3BhY2UiKTsKKyAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKF94bWxzcGFjZSk7CiB9CiAKIHZvaWQgU1ZHU3R5bGVFbGVtZW50OjpzZXRYbWxzcGFjZShj
b25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTUzLDkgKzUwLDExIEBA
IHZvaWQgU1ZHU3R5bGVFbGVtZW50OjpzZXRYbWxzcGFjZShjb25zdCAKICAgICBlYyA9IE5PX01P
RElGSUNBVElPTl9BTExPV0VEX0VSUjsKIH0KIAotQXRvbWljU3RyaW5nIFNWR1N0eWxlRWxlbWVu
dDo6dHlwZSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIFNWR1N0eWxlRWxlbWVudDo6dHlw
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRyeUdldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0L2Nz
cyIpOworICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcgX2RlZmF1bHQoInRleHQvY3NzIik7
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuID0gZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKKyAg
ICByZXR1cm4gbi5pc051bGwoKSA/IF9kZWZhdWx0IDogbjsKIH0KIAogdm9pZCBTVkdTdHlsZUVs
ZW1lbnQ6OnNldFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgZWMpCkBA
IC02Myw5ICs2MiwxMSBAQCB2b2lkIFNWR1N0eWxlRWxlbWVudDo6c2V0VHlwZShjb25zdCBBdG9t
CiAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiB9CiAKLUF0b21pY1N0cmlu
ZyBTVkdTdHlsZUVsZW1lbnQ6Om1lZGlhKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgU1ZH
U3R5bGVFbGVtZW50OjptZWRpYSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRyeUdldEF0dHJpYnV0
ZSgibWVkaWEiLCAiYWxsIik7CisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyBfZGVmYXVs
dCgiYWxsIik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuID0gZ2V0QXR0cmlidXRlKG1lZGlh
QXR0cik7CisgICAgcmV0dXJuIG4uaXNOdWxsKCkgPyBfZGVmYXVsdCA6IG47CiB9CiAKIHZvaWQg
U1ZHU3R5bGVFbGVtZW50OjpzZXRNZWRpYShjb25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25D
b2RlJiBlYykKQEAgLTczLDkgKzc0LDkgQEAgdm9pZCBTVkdTdHlsZUVsZW1lbnQ6OnNldE1lZGlh
KGNvbnN0IEF0bwogICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogfQogCi1B
dG9taWNTdHJpbmcgU1ZHU3R5bGVFbGVtZW50Ojp0aXRsZSgpIGNvbnN0Citjb25zdCBBdG9taWNT
dHJpbmcmIFNWR1N0eWxlRWxlbWVudDo6dGl0bGUoKSBjb25zdAogewotICAgIHJldHVybiB0cnlH
ZXRBdHRyaWJ1dGUoInRpdGxlIik7CisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0aXRsZUF0dHIp
OwogfQogCiB2b2lkIFNWR1N0eWxlRWxlbWVudDo6c2V0VGl0bGUoY29uc3QgQXRvbWljU3RyaW5n
JiwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC04Myw0MiArODQsMjEgQEAgdm9pZCBTVkdTdHlsZUVs
ZW1lbnQ6OnNldFRpdGxlKGNvbnN0IEF0bwogICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9X
RURfRVJSOwogfQogCi1DU1NTdHlsZVNoZWV0ICpTVkdTdHlsZUVsZW1lbnQ6OnNoZWV0KCkKK3Zv
aWQgU1ZHU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7Ci0gICAgcmV0dXJu
IG1fc2hlZXQuZ2V0KCk7CisgICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsK
KyAgICBTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KGRvY3VtZW50KCkpOwogfQog
Ci12b2lkIFNWR1N0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCkKK3ZvaWQgU1ZHU3R5bGVF
bGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKLSAgICBTVkdFbGVtZW50OjpjaGlsZHJl
bkNoYW5nZWQoKTsKLQotICAgIGlmKG1fc2hlZXQpCi0gICAgICAgIG1fc2hlZXQgPSAwOwotCi0g
ICAgLy8gRklYTUU6IHRoaXMgY29kZSBzaG91bGQgYmUgc2hhcmVkIHdpdGggSFRNTFN0eWxlRWxl
bWVudDo6Y2hpbGRyZW5DaGFuZ2VkKCkKLSAgICBtX2xvYWRpbmcgPSBmYWxzZTsKLSAgICBNZWRp
YVF1ZXJ5RXZhbHVhdG9yIHNjcmVlbkV2YWwoInNjcmVlbiIsIHRydWUpOwotICAgIE1lZGlhUXVl
cnlFdmFsdWF0b3IgcHJpbnRFdmFsKCJwcmludCIsIHRydWUpOyAgIAotICAgIFJlZlB0cjxNZWRp
YUxpc3Q+IG1lZGlhTGlzdCA9IG5ldyBNZWRpYUxpc3QoKENTU1N0eWxlU2hlZXQqKTAsIG1lZGlh
KCkpOwotICAgIGlmICgodHlwZSgpLmlzRW1wdHkoKSB8fCB0eXBlKCkgPT0gInRleHQvY3NzIikg
JiYgKHNjcmVlbkV2YWwuZXZhbChtZWRpYUxpc3QuZ2V0KCkpIHx8IHByaW50RXZhbC5ldmFsKG1l
ZGlhTGlzdC5nZXQoKSkpKSB7Ci0gICAgICAgIG93bmVyRG9jdW1lbnQoKS0+YWRkUGVuZGluZ1No
ZWV0KCk7Ci0KLSAgICAgICAgbV9sb2FkaW5nID0gdHJ1ZTsKLSAKLSAgICAgICAgbV9zaGVldCA9
IG5ldyBDU1NTdHlsZVNoZWV0KHRoaXMsIFN0cmluZygpLCBkb2N1bWVudCgpLT5pbnB1dEVuY29k
aW5nKCkpOwotICAgICAgICBtX3NoZWV0LT5wYXJzZVN0cmluZyh0ZXh0Q29udGVudCgpKTsgLy8g
U1ZHIGNzcyBpcyBhbHdheXMgcGFyc2VkIGluIHN0cmljdCBtb2RlCi0gICAgICAgIAotICAgICAg
ICBtX3NoZWV0LT5zZXRNZWRpYShtZWRpYUxpc3QuZ2V0KCkpOwotICAgICAgICBtX2xvYWRpbmcg
PSBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZighaXNMb2FkaW5nKCkgJiYgbV9zaGVldCkKLSAgICAg
ICAgZG9jdW1lbnQoKS0+c3R5bGVzaGVldExvYWRlZCgpOworICAgIFNWR0VsZW1lbnQ6OnJlbW92
ZWRGcm9tRG9jdW1lbnQoKTsKKyAgICBTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQo
ZG9jdW1lbnQoKSk7CiB9CiAKLWJvb2wgU1ZHU3R5bGVFbGVtZW50Ojppc0xvYWRpbmcoKSBjb25z
dAordm9pZCBTVkdTdHlsZUVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCgpCiB7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIFN0eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKHRoaXMpOwogfQogCiB9
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkocmV2aXNpb24gMTc4NTIpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IE5pa29sYXMgWmlt
bWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSBS
b2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAgICAgICAgICAgMjAwNCwgMjAwNSwgMjAw
NiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IEtERSBwcm9qZWN0CiAKQEAgLTI1LDQwICsyNSwzMSBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAK
ICNpbmNsdWRlIDxTVkdFbGVtZW50Lmg+CisjaW5jbHVkZSA8U3R5bGVFbGVtZW50Lmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENTU1N0eWxlU2hlZXQ7Ci0KLSAgICBjbGFz
cyBTVkdTdHlsZUVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCB7CisgICAgY2xhc3MgU1ZHU3R5
bGVFbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQsIHB1YmxpYyBTdHlsZUVsZW1lbnQgewogICAg
IHB1YmxpYzoKICAgICAgICAgU1ZHU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwotICAgICAgICB2aXJ0dWFsIH5TVkdTdHlsZUVsZW1lbnQoKTsKIAogICAgICAg
ICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50JworICAgICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1l
bnQoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwogCiAgICAgICAg
IC8vICdTVkdTdHlsZUVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBBdG9taWNTdHJpbmcgeG1s
c3BhY2UoKSBjb25zdDsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB4bWxzcGFjZSgpIGNv
bnN0OwogICAgICAgICB2b2lkIHNldFhtbHNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2Vw
dGlvbkNvZGUmKTsKIAotICAgICAgICBBdG9taWNTdHJpbmcgdHlwZSgpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OwogICAgICAgICB2b2lk
IHNldFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgICAg
IEF0b21pY1N0cmluZyBtZWRpYSgpIGNvbnN0OworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IG1lZGlhKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0TWVkaWEoY29uc3QgQXRvbWljU3RyaW5n
JiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgICAgIEF0b21pY1N0cmluZyB0aXRsZSgpIGNvbnN0
OworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlKCkgY29uc3Q7CiAgICAgICAgIHZv
aWQgc2V0VGl0bGUoY29uc3QgQXRvbWljU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAg
ICAgIENTU1N0eWxlU2hlZXQgKnNoZWV0KCk7Ci0KLSAgICAgICAgLy8gSW50ZXJuYWwKLSAgICAg
ICAgYm9vbCBpc0xvYWRpbmcoKSBjb25zdDsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgUmVm
UHRyPENTU1N0eWxlU2hlZXQ+IG1fc2hlZXQ7Ci0gICAgICAgIGJvb2wgbV9sb2FkaW5nOwogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="4119"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>