<?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>29077</bug_id>
          
          <creation_ts>2009-09-09 01:13:00 -0700</creation_ts>
          <short_desc>[v8] Share persistent context handles between events</short_desc>
          <delta_ts>2009-10-21 20:46:32 -0700</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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>30648</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Christian Plesner Hansen">christian.plesner.hansen</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ager</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>145681</commentid>
    <comment_count>0</comment_count>
    <who name="Christian Plesner Hansen">christian.plesner.hansen</who>
    <bug_when>2009-09-09 01:13:00 -0700</bug_when>
    <thetext>Change events to use a single ref-counted shared persistent handle to the context in which to run, rather than create a new persistent handle for each new event which puts pressure on the gc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145682</commentid>
    <comment_count>1</comment_count>
      <attachid>39253</attachid>
    <who name="Christian Plesner Hansen">christian.plesner.hansen</who>
    <bug_when>2009-09-09 01:15:24 -0700</bug_when>
    <thetext>Created attachment 39253
initial</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145772</commentid>
    <comment_count>2</comment_count>
      <attachid>39253</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-09 08:33:50 -0700</bug_when>
    <thetext>Comment on attachment 39253
initial

SharedV8Context doesn&apos;t really have anything to do with contexts.  We should make it more general (templated?) and put it in its own header, like OwnHandle.  You might want to call it something like RefCountedHandle or something.

Aside from that, this patch looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145773</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-09 08:34:31 -0700</bug_when>
    <thetext>Also, why not make the destructor Dispose and Clear the handle if that hasn&apos;t happened already?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145775</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-09 08:43:30 -0700</bug_when>
    <thetext>Actually, SharedHandle is a good name.  You should also considering defining a typedef that defines RefHandle&lt;T&gt; as RefPtr&lt;SharedHandle&lt;T&gt; &gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146162</commentid>
    <comment_count>5</comment_count>
      <attachid>39340</attachid>
    <who name="Christian Plesner Hansen">christian.plesner.hansen</who>
    <bug_when>2009-09-10 04:32:49 -0700</bug_when>
    <thetext>Created attachment 39340
updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146219</commentid>
    <comment_count>6</comment_count>
      <attachid>39340</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-10 09:28:54 -0700</bug_when>
    <thetext>Comment on attachment 39340
updated

+ PassRefPtr&lt;SharedPersistent&lt;v8::Context&gt; &gt; context = proxy-&gt;shared_context();

We don&apos;t usually hold PassRefPtrs as local variables.  They&apos;re a bit tricky to use like this b/c they like to null themselves out.  In this case, we&apos;re fine, but I wanted to make sure you&apos;re realized what you were doing was somewhat subtle.

+        No new tests. (OOPS!)

This line will be rejected by the pre-submit checks.  We can either land this manually, or we can land it automatically if you upload a new patch without this line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146227</commentid>
    <comment_count>7</comment_count>
    <who name="Christian Plesner Hansen">christian.plesner.hansen</who>
    <bug_when>2009-09-10 09:43:30 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 39340 [details])
&gt; + PassRefPtr&lt;SharedPersistent&lt;v8::Context&gt; &gt; context = proxy-&gt;shared_context();
&gt; 
&gt; We don&apos;t usually hold PassRefPtrs as local variables.  They&apos;re a bit tricky to
&gt; use like this b/c they like to null themselves out.  In this case, we&apos;re fine,
&gt; but I wanted to make sure you&apos;re realized what you were doing was somewhat
&gt; subtle.

No, it should have been a RefPtr.  I&apos;d prefer to fix it even though it happens to work here.

&gt; +        No new tests. (OOPS!)
&gt; 
&gt; This line will be rejected by the pre-submit checks.  We can either land this
&gt; manually, or we can land it automatically if you upload a new patch without
&gt; this line.

I&apos;ll upload a new patch with the above change and this line removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146478</commentid>
    <comment_count>8</comment_count>
      <attachid>39413</attachid>
    <who name="Christian Plesner Hansen">christian.plesner.hansen</who>
    <bug_when>2009-09-11 00:52:12 -0700</bug_when>
    <thetext>Created attachment 39413
tweaks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146480</commentid>
    <comment_count>9</comment_count>
      <attachid>39413</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-11 01:02:06 -0700</bug_when>
    <thetext>Comment on attachment 39413
tweaks

I&apos;m worried about how this interacts with weak handles.  For example, we lose

- m_context.makeWeak();

in V8AbstractEventListener.cpp.  That seems like it might cause problems...

Also,

-    m_context.MakeWeak(this, &amp;contextWeakReferenceCallback);
+    m_context-&gt;get().MakeWeak(this, &amp;contextWeakReferenceCallback);

in V8IsolatedWorld.cpp.  Won&apos;t that make the shared handle weak?  Doesn&apos;t V8Proxy need to hold a strong reference to the context?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146489</commentid>
    <comment_count>10</comment_count>
    <who name="Christian Plesner Hansen">christian.plesner.hansen</who>
    <bug_when>2009-09-11 01:31:37 -0700</bug_when>
    <thetext>&gt; I&apos;m worried about how this interacts with weak handles.  For example, we lose
&gt; 
&gt; - m_context.makeWeak();
&gt; 
&gt; in V8AbstractEventListener.cpp.  That seems like it might cause problems...

Before, each OwnHandle had its own persistent handle it needed to manager.  Now the event is sharing the handle of the frame or isolated world to which it belongs the owner takes care of that.

&gt; Also,
&gt; 
&gt; -    m_context.MakeWeak(this, &amp;contextWeakReferenceCallback);
&gt; +    m_context-&gt;get().MakeWeak(this, &amp;contextWeakReferenceCallback);
&gt; 
&gt; in V8IsolatedWorld.cpp.  Won&apos;t that make the shared handle weak?  Doesn&apos;t
&gt; V8Proxy need to hold a strong reference to the context?

Yes, it will make the shared handle weak.  But that&apos;s no different from how it was before really except that before there was as many handles as there were event listeners, all of them weak, whereas now there is just one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146503</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-11 02:16:00 -0700</bug_when>
    <thetext>&gt; Before, each OwnHandle had its own persistent handle it needed to manager.  Now
&gt; the event is sharing the handle of the frame or isolated world to which it
&gt; belongs the owner takes care of that.

But you see that the lifetime of the handle has changed right?  We need to think carefully and make sure that the new lifetime is ok for the event listeners.  The key point is that the event listeners won&apos;t fire when they ought not to fire.  We have some amount of test coverage for this, but it&apos;s not complete.

Maybe we&apos;re ok because V8Proxy explicitly Disposes / Clears the shared context when it would have dropped its strong handle before?

&gt; &gt; Also,
&gt; &gt; 
&gt; &gt; -    m_context.MakeWeak(this, &amp;contextWeakReferenceCallback);
&gt; &gt; +    m_context-&gt;get().MakeWeak(this, &amp;contextWeakReferenceCallback);
&gt; &gt; 
&gt; &gt; in V8IsolatedWorld.cpp.  Won&apos;t that make the shared handle weak?  Doesn&apos;t
&gt; &gt; V8Proxy need to hold a strong reference to the context?
&gt; 
&gt; Yes, it will make the shared handle weak.  But that&apos;s no different from how it
&gt; was before really except that before there was as many handles as there were
&gt; event listeners, all of them weak, whereas now there is just one.

The whole thing is super confusing though.  If you&apos;re in the main world, it just so happens that the shared context is a strong reference to the context, but when you&apos;re in an isolated world, the shared handle is weak.  All the clients of V8Proxy::context(Frame*) now have to be prepared to deal with either case.

Maybe we&apos;re ok because these clients already have to worry about this issue?

Anyway, it&apos;s after 2 a.m. here.  I&apos;ll take a look at it again tomorrow when I&apos;m more awake.

Ager, any insight that you have would be appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146504</commentid>
    <comment_count>12</comment_count>
    <who name="Christian Plesner Hansen">christian.plesner.hansen</who>
    <bug_when>2009-09-11 02:28:04 -0700</bug_when>
    <thetext>&gt; But you see that the lifetime of the handle has changed right?  We need to
&gt; think carefully and make sure that the new lifetime is ok for the event
&gt; listeners.  The key point is that the event listeners won&apos;t fire when they
&gt; ought not to fire.  We have some amount of test coverage for this, but it&apos;s not
&gt; complete.
&gt; 
&gt; Maybe we&apos;re ok because V8Proxy explicitly Disposes / Clears the shared context
&gt; when it would have dropped its strong handle before?

The handle is disposed by the proxy at the same time now as before.  What is different is that before event would hang on to the context from the V8Proxy had disposed its handle and until the next gc (which, incidentally, made event behavior non-deterministic) whereas now events lose access to the context immediately.  I would expect that to be 

&gt; The whole thing is super confusing though.  If you&apos;re in the main world, it
&gt; just so happens that the shared context is a strong reference to the context,
&gt; but when you&apos;re in an isolated world, the shared handle is weak.  All the
&gt; clients of V8Proxy::context(Frame*) now have to be prepared to deal with either
&gt; case.
&gt; 
&gt; Maybe we&apos;re ok because these clients already have to worry about this issue?

The handle returned here will behave exactly the same as before since it&apos;s returned directly from the owner who has the same behavior as before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146638</commentid>
    <comment_count>13</comment_count>
      <attachid>39413</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-11 10:48:16 -0700</bug_when>
    <thetext>Comment on attachment 39413
tweaks

Ok.  I&apos;m sold.  Thanks for explaining this to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146646</commentid>
    <comment_count>14</comment_count>
      <attachid>39413</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-11 10:59:22 -0700</bug_when>
    <thetext>Comment on attachment 39413
tweaks

Clearing flags on attachment: 39413

Committed r48306: &lt;http://trac.webkit.org/changeset/48306&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>146647</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-11 10:59:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156776</commentid>
    <comment_count>16</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-10-21 20:46:32 -0700</bug_when>
    <thetext>Christian, I am undoing most of this work in bug 30648, but not because your code was wrong -- we no longer have to hold on to the context in an event listener. Can you take a look/see?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39253</attachid>
            <date>2009-09-09 01:15:24 -0700</date>
            <delta_ts>2009-09-10 04:32:40 -0700</delta_ts>
            <desc>initial</desc>
            <filename>bug-29077-20090909101522.patch</filename>
            <type>text/plain</type>
            <size>18975</size>
            <attacher name="Christian Plesner Hansen">christian.plesner.hansen</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODIwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMDktMDktMDkgIENocmlzdGlhbiBQbGVzbmVyIEhhbnNlbiAgPGNo
cmlzdGlhbi5wbGVzbmVyLmhhbnNlbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW3Y4XSBTaGFyZSBwZXJzaXN0ZW50IGNvbnRleHQg
aGFuZGxlcyBiZXR3ZWVuIGV2ZW50cyAgICAgICAgCisgICAgICAgIENoYW5nZSBldmVudHMgdG8g
dXNlIGEgc2luZ2xlIHJlZi1jb3VudGVkIHNoYXJlZCBwZXJzaXN0ZW50IGhhbmRsZQorICAgICAg
ICB0byB0aGUgY29udGV4dCBpbiB3aGljaCB0byBydW4sIHJhdGhlciB0aGFuIGNyZWF0ZSBhIG5l
dworICAgICAgICBwZXJzaXN0ZW50IGhhbmRsZSBmb3IgZWFjaCBuZXcgZXZlbnQgd2hpY2ggcHV0
cyBwcmVzc3VyZSBvbiB0aGUKKyAgICAgICAgZ2MuCisgICAgICAgIAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwNzcKKworICAgICAgICAqIGJpbmRp
bmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRB
Y3Rpb246OmV4ZWN1dGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExp
c3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpW
OEFic3RyYWN0RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWJzdHJh
Y3RFdmVudExpc3RlbmVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxk
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4SXNvbGF0ZWRXb3JsZDo6VjhJc29sYXRlZFdvcmxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4SXNvbGF0ZWRXb3JsZDo6flY4SXNvbGF0ZWRXb3JsZCk6
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmg6CisgICAgICAgIChXZWJD
b3JlOjpWOElzb2xhdGVkV29ybGQ6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhJc29s
YXRlZFdvcmxkOjpzaGFyZWRfY29udGV4dCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94
eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZUluTmV3Q29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nh
c2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6aXNDb250ZXh0SW5pdGlhbGl6ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6dXBkYXRlRG9jdW1lbnRXcmFwcGVyQ2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpkaXNwb3NlQ29udGV4dEhhbmRsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhQcm94eTo6Y2xlYXJGb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OFByb3h5OjpjbGVhckZvck5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6
c2V0U2VjdXJpdHlUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojp1cGRhdGVEb2N1
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnNoYXJlZF9jb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OlY4UHJveHk6Om1haW5Xb3JsZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQ
cm94eTo6c2V0Q29udGV4dERlYnVnSWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHku
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFY4Q29udGV4dDo6U2hhcmVkVjhDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFY4Q29udGV4dDo6c2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZFY4Q29udGV4dDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFY4Q29u
dGV4dDo6ZGlzcG9zZUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpWOFByb3h5
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhQcm94eTo6c2hhcmVkX2NvbnRleHQpOgorCiAyMDA5LTA5LTA4ICBPbGl2ZXIgSHVudCAg
PG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChCdWlsZCBm
aXgpLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcAkocmV2aXNp
b24gNDgxNDIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIFNjaGVkdWxlZEFjdGlvbjo6ZXhl
Y3V0ZShWOFByb3h5KiBwCiAgICAgQVNTRVJUKHByb3h5KTsKIAogICAgIHY4OjpIYW5kbGVTY29w
ZSBoYW5kbGVTY29wZTsKLSAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IHBy
b3h5LT5jb250ZXh0KCk7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0g
cHJveHktPmNvbnRleHQoKTsKICAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOyAvLyBKUyBtYXkgbm90IGJlIGVuYWJsZWQuCiAKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiA0ODE0MikK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw4ICs1Miw3IEBAIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpWOEFi
c3RyYWN0RXZlbnQKICAgICAvLyBXZSBtaWdodCBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUg
cGFyc2VyLgogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAotICAgIG1fY29udGV4
dC5zZXQoVjhQcm94eTo6Y29udGV4dChtX2ZyYW1lKSk7Ci0gICAgbV9jb250ZXh0Lm1ha2VXZWFr
KCk7CisgICAgbV9jb250ZXh0ID0gVjhQcm94eTo6c2hhcmVkX2NvbnRleHQobV9mcmFtZSk7CiAK
ICAgICAvLyBHZXQgdGhlIHBvc2l0aW9uIGluIHRoZSBzb3VyY2UgaWYgYW55LgogICAgIGlmICht
X2lzQXR0cmlidXRlICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPnRva2VuaXplcigpKSB7CkBAIC0x
MTksNyArMTE4LDEwIEBAIHZvaWQgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW4K
IAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAotICAgIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IHY4Q29udGV4dCA9IG1fY29udGV4dC5nZXQoKTsKKyAgICBpZiAoIW1fY29udGV4
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250
ZXh0ID0gbV9jb250ZXh0LT5nZXQoKTsKICAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVu
dExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0
RXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiA0ODE0MikKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBA
QAogCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIk93bkhhbmRsZS5oIgor
I2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlIDx2OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC04OSw3ICs5MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gZGVs
ZXRlZC4gU2VlIGZhc3QvZG9tL3JlcGxhY2VDaGlsZC5odG1sCiAgICAgICAgIC8vIEZJWE1FOiB0
aGlzIGNvdWxkIGhvbGQgbV9mcmFtZSBsaXZlIHVudGlsIHRoZSBldmVudCBsaXN0ZW5lciBpcyBk
ZWxldGVkLgogICAgICAgICBGcmFtZSogbV9mcmFtZTsKLSAgICAgICAgT3duSGFuZGxlPHY4OjpD
b250ZXh0PiBtX2NvbnRleHQ7CisgICAgICAgIFJlZlB0cjxTaGFyZWRWOENvbnRleHQ+IG1fY29u
dGV4dDsKIAogICAgICAgICAvLyBQb3NpdGlvbiBpbiB0aGUgSFRNTCBzb3VyY2UgZm9yIEhUTUwg
ZXZlbnQgbGlzdGVuZXJzLgogICAgICAgICBpbnQgbV9saW5lTnVtYmVyOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmNwcAkocmV2aXNpb24gNDgxNDIpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDE4ICs4NywxNyBAQCB2b2lkIFY4SXNvbGF0ZWRXb3JsZDo6ZXZhbHVhdGUoY29uc3QgVmVjCiB9
CiAKIFY4SXNvbGF0ZWRXb3JsZDo6VjhJc29sYXRlZFdvcmxkKHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGNvbnRleHQpCi0gICAgOiBtX2NvbnRleHQodjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+
OjpOZXcoY29udGV4dCkpCisgICAgOiBtX2NvbnRleHQobmV3IFNoYXJlZFY4Q29udGV4dCh2ODo6
UGVyc2lzdGVudDx2ODo6Q29udGV4dD46Ok5ldyhjb250ZXh0KSkpCiB7CiAgICAgKytpc29sYXRl
ZFdvcmxkQ291bnQ7Ci0gICAgbV9jb250ZXh0Lk1ha2VXZWFrKHRoaXMsICZjb250ZXh0V2Vha1Jl
ZmVyZW5jZUNhbGxiYWNrKTsKLSAgICBtX2NvbnRleHQtPkdsb2JhbCgpLT5TZXRIaWRkZW5WYWx1
ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6aXNvbGF0ZWRXb3JsZCgpLCB2ODo6RXh0ZXJuYWw6Oldy
YXAodGhpcykpOworICAgIG1fY29udGV4dC0+Z2V0KCkuTWFrZVdlYWsodGhpcywgJmNvbnRleHRX
ZWFrUmVmZXJlbmNlQ2FsbGJhY2spOworICAgIGNvbnRleHQtPkdsb2JhbCgpLT5TZXRIaWRkZW5W
YWx1ZShWOEhpZGRlblByb3BlcnR5TmFtZTo6aXNvbGF0ZWRXb3JsZCgpLCB2ODo6RXh0ZXJuYWw6
OldyYXAodGhpcykpOwogfQogCiBWOElzb2xhdGVkV29ybGQ6On5WOElzb2xhdGVkV29ybGQoKQog
ewogICAgIC0taXNvbGF0ZWRXb3JsZENvdW50OwotICAgIG1fY29udGV4dC5EaXNwb3NlKCk7Ci0g
ICAgbV9jb250ZXh0LkNsZWFyKCk7CisgICAgbV9jb250ZXh0LT5kaXNwb3NlSGFuZGxlKCk7CiB9
CiAKIFY4SXNvbGF0ZWRXb3JsZCogVjhJc29sYXRlZFdvcmxkOjpnZXRFbnRlcmVkSW1wbCgpCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmgJKHJldmlzaW9uIDQ4MTQyKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSAiVjhET01NYXAuaCIKICNpbmNsdWRlICJWOElu
ZGV4LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIiAgLy8gZm9yIFdlYkNvcmU6OlNjcmlwdFNvdXJj
ZUNvZGUKIApAQCAtODMsNyArODQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAg
ICByZXR1cm4gZ2V0RW50ZXJlZEltcGwoKTsKICAgICAgICAgfQogCi0gICAgICAgIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICAgICAg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC0+Z2V0
KCk7IH0KKyAgICAgICAgUmVmUHRyPFNoYXJlZFY4Q29udGV4dD4gc2hhcmVkX2NvbnRleHQoKSB7
IHJldHVybiBtX2NvbnRleHQ7IH0KIAogICAgICAgICBET01EYXRhU3RvcmUqIGdldERPTURhdGFT
dG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZG9tRGF0YVN0b3JlLmdldFN0b3JlKCk7IH0KIApAQCAt
OTcsNyArOTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gVGhlIHY4OjpD
b250ZXh0IGZvciB0aGUgaXNvbGF0ZWQgd29ybGQuICBUaGlzIG9iamVjdCBpcyBrZWVwIG9uIHRo
ZQogICAgICAgICAvLyBoZWFwIGFzIGxvbmcgYXMgfG1fY29udGV4dHwgaGFzIG5vdCBiZWVuIGdh
cmJhZ2UgY29sbGVjdGVkLgotICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gbV9j
b250ZXh0OworICAgICAgICBSZWZQdHI8U2hhcmVkVjhDb250ZXh0PiBtX2NvbnRleHQ7CiAKICAg
ICAgICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgZm9yIHRoZSBpc29sYXRlZCB3b3JsZCdzIERPTSB3
cmFwcGVycy4gIFRoaXMgY2xhc3MKICAgICAgICAgLy8gZG9lc24ndCBoYXZlIHZpc2liaWxpdHkg
aW50byB0aGUgd3JhcHBlcnMuICBUaGlzIGhhbmRsZSBzaW1wbHkgaGVscHMKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFByb3h5LmNwcAkocmV2aXNpb24gNDgxNDIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNyArMjk0LDcgQEAgdm9pZCBWOFBy
b3h5OjpldmFsdWF0ZUluTmV3Q29udGV4dChjb25zdAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5k
bGVTY29wZTsKIAogICAgIC8vIFNldCB1cCB0aGUgRE9NIHdpbmRvdyBhcyB0aGUgcHJvdG90eXBl
IG9mIHRoZSBuZXcgZ2xvYmFsIG9iamVjdC4KLSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB3
aW5kb3dDb250ZXh0ID0gbV9jb250ZXh0OworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHdp
bmRvd0NvbnRleHQgPSBjb250ZXh0KCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5k
b3dHbG9iYWwgPSB3aW5kb3dDb250ZXh0LT5HbG9iYWwoKTsKICAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdpbmRvd1dyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIHdpbmRvd0dsb2JhbCk7CiAKQEAgLTQ3OCw4ICs0NzgsOCBA
QCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gVjhQcm94eTo6Y3JlYXRlV3JhCiAgICAgLy8gTm90IGlu
IGNhY2hlLgogICAgIGludCBjbGFzc0luZGV4ID0gVjhDbGFzc0luZGV4OjpUb0ludCh0eXBlKTsK
ICAgICBpbml0Q29udGV4dElmTmVlZGVkKCk7Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3Bl
KG1fY29udGV4dCk7Ci0gICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSBWOERP
TVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKHR5cGUsIGdldEhpZGRlbk9iamVjdFByb3RvdHlwZSht
X2NvbnRleHQpKTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCgpKTsKKyAg
ICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IFY4RE9NV3JhcHBlcjo6Z2V0Q29u
c3RydWN0b3IodHlwZSwgZ2V0SGlkZGVuT2JqZWN0UHJvdG90eXBlKGNvbnRleHQoKSkpOwogICAg
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW5jZSA9IFNhZmVBbGxvY2F0aW9uOjpuZXdJbnN0
YW5jZShmdW5jdGlvbik7CiAgICAgaWYgKCFpbnN0YW5jZS5Jc0VtcHR5KCkpIHsKICAgICAgICAg
bV93cmFwcGVyQm9pbGVycGxhdGVzLT5TZXQodjg6OkludGVnZXI6Ok5ldyhjbGFzc0luZGV4KSwg
aW5zdGFuY2UpOwpAQCAtNDkyLDkgKzQ5Miw5IEBAIGJvb2wgVjhQcm94eTo6aXNDb250ZXh0SW5p
dGlhbGl6ZWQoKQogewogICAgIC8vIG1fY29udGV4dCwgbV9nbG9iYWwsIGFuZCBtX3dyYXBwZXJC
b2lsZXJwbGF0ZXMgc2hvdWxkCiAgICAgLy8gYWxsIGJlIG5vbi1lbXB0eSBpZiBpZiBtX2NvbnRl
eHQgaXMgbm9uLWVtcHR5LgotICAgIEFTU0VSVChtX2NvbnRleHQuSXNFbXB0eSgpIHx8ICFtX2ds
b2JhbC5Jc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX2NvbnRleHQuSXNFbXB0eSgpIHx8ICFtX3dy
YXBwZXJCb2lsZXJwbGF0ZXMuSXNFbXB0eSgpKTsKLSAgICByZXR1cm4gIW1fY29udGV4dC5Jc0Vt
cHR5KCk7CisgICAgQVNTRVJUKGNvbnRleHQoKS5Jc0VtcHR5KCkgfHwgIW1fZ2xvYmFsLklzRW1w
dHkoKSk7CisgICAgQVNTRVJUKGNvbnRleHQoKS5Jc0VtcHR5KCkgfHwgIW1fd3JhcHBlckJvaWxl
cnBsYXRlcy5Jc0VtcHR5KCkpOworICAgIHJldHVybiAhY29udGV4dCgpLklzRW1wdHkoKTsKIH0K
IAogRE9NV2luZG93KiBWOFByb3h5OjpyZXRyaWV2ZVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjb250ZXh0KQpAQCAtNjYwLDIxICs2NjAsMjAgQEAgdm9pZCBWOFByb3h5Ojp1cGRhdGVE
b2N1bWVudFdyYXBwZXJDYWNoZQogICAgICAgICBjbGVhckRvY3VtZW50V3JhcHBlckNhY2hlKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9jb250ZXh0LT5HbG9iYWwoKS0+Rm9yY2VT
ZXQodjg6OlN0cmluZzo6TmV3KCJkb2N1bWVudCIpLCBkb2N1bWVudFdyYXBwZXIsIHN0YXRpY19j
YXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6OlJlYWRPbmx5IHwgdjg6OkRvbnREZWxldGUp
KTsKKyAgICBjb250ZXh0KCktPkdsb2JhbCgpLT5Gb3JjZVNldCh2ODo6U3RyaW5nOjpOZXcoImRv
Y3VtZW50IiksIGRvY3VtZW50V3JhcHBlciwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmli
dXRlPih2ODo6UmVhZE9ubHkgfCB2ODo6RG9udERlbGV0ZSkpOwogfQogCiB2b2lkIFY4UHJveHk6
OmNsZWFyRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKQogewotICAgIEFTU0VSVCghbV9jb250ZXh0Lklz
RW1wdHkoKSk7Ci0gICAgbV9jb250ZXh0LT5HbG9iYWwoKS0+Rm9yY2VEZWxldGUodjg6OlN0cmlu
Zzo6TmV3KCJkb2N1bWVudCIpKTsKKyAgICBBU1NFUlQoIWNvbnRleHQoKS5Jc0VtcHR5KCkpOwor
ICAgIGNvbnRleHQoKS0+R2xvYmFsKCktPkZvcmNlRGVsZXRlKHY4OjpTdHJpbmc6Ok5ldygiZG9j
dW1lbnQiKSk7CiB9CiAKIHZvaWQgVjhQcm94eTo6ZGlzcG9zZUNvbnRleHRIYW5kbGVzKCkKIHsK
LSAgICBpZiAoIW1fY29udGV4dC5Jc0VtcHR5KCkpIHsKKyAgICBpZiAoIWNvbnRleHQoKS5Jc0Vt
cHR5KCkpIHsKICAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWREZXN0cm95
U2NyaXB0Q29udGV4dEZvckZyYW1lKCk7Ci0gICAgICAgIG1fY29udGV4dC5EaXNwb3NlKCk7Ci0g
ICAgICAgIG1fY29udGV4dC5DbGVhcigpOworICAgICAgICBzaGFyZWRfY29udGV4dCgpLT5kaXNw
b3NlSGFuZGxlKCk7CiAgICAgfQogCiAgICAgaWYgKCFtX3dyYXBwZXJCb2lsZXJwbGF0ZXMuSXNF
bXB0eSgpKSB7CkBAIC03MDIsNyArNzAxLDcgQEAgdm9pZCBWOFByb3h5OjpyZWxlYXNlU3RvcmFn
ZU11dGV4KCkKIAogdm9pZCBWOFByb3h5OjpjbGVhckZvckNsb3NlKCkKIHsKLSAgICBpZiAoIW1f
Y29udGV4dC5Jc0VtcHR5KCkpIHsKKyAgICBpZiAoIWNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKICAg
ICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogCiAgICAgICAgIGNsZWFyRG9jdW1l
bnRXcmFwcGVyKCk7CkBAIC03MTQsMTEgKzcxMywxMSBAQCB2b2lkIFY4UHJveHk6OmNsZWFyRm9y
TmF2aWdhdGlvbigpCiB7CiAgICAgZGlzY29ubmVjdEV2ZW50TGlzdGVuZXJzKCk7CiAKLSAgICBp
ZiAoIW1fY29udGV4dC5Jc0VtcHR5KCkpIHsKKyAgICBpZiAoIWNvbnRleHQoKS5Jc0VtcHR5KCkp
IHsKICAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZTsKICAgICAgICAgY2xlYXJEb2N1bWVu
dFdyYXBwZXIoKTsKIAotICAgICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1f
Y29udGV4dCk7CisgICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoY29udGV4
dCgpKTsKIAogICAgICAgICAvLyBDbGVhciB0aGUgZG9jdW1lbnQgd3JhcHBlciBjYWNoZSBiZWZv
cmUgdHVybmluZyBvbiBhY2Nlc3MgY2hlY2tzIG9uCiAgICAgICAgIC8vIHRoZSBvbGQgRE9NV2lu
ZG93IHdyYXBwZXIuIFRoaXMgd2F5LCBhY2Nlc3MgdG8gdGhlIGRvY3VtZW50IHdyYXBwZXIKQEAg
LTczMSw3ICs3MzAsNyBAQCB2b2lkIFY4UHJveHk6OmNsZWFyRm9yTmF2aWdhdGlvbigpCiAgICAg
ICAgIHdyYXBwZXItPlR1cm5PbkFjY2Vzc0NoZWNrKCk7CiAKICAgICAgICAgLy8gU2VwYXJhdGUg
dGhlIGNvbnRleHQgZnJvbSBpdHMgZ2xvYmFsIG9iamVjdC4KLSAgICAgICAgbV9jb250ZXh0LT5E
ZXRhY2hHbG9iYWwoKTsKKyAgICAgICAgY29udGV4dCgpLT5EZXRhY2hHbG9iYWwoKTsKIAogICAg
ICAgICBkaXNwb3NlQ29udGV4dEhhbmRsZXMoKTsKICAgICB9CkBAIC03NDIsNyArNzQxLDcgQEAg
dm9pZCBWOFByb3h5OjpzZXRTZWN1cml0eVRva2VuKCkKICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBtX2ZyYW1lLT5kb2N1bWVudCgpOwogICAgIC8vIFNldHVwIHNlY3VyaXR5IG9yaWdpbiBhbmQg
c2VjdXJpdHkgdG9rZW4uCiAgICAgaWYgKCFkb2N1bWVudCkgewotICAgICAgICBtX2NvbnRleHQt
PlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7CisgICAgICAgIGNvbnRleHQoKS0+VXNlRGVmYXVs
dFNlY3VyaXR5VG9rZW4oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzYyLDE0ICs3
NjEsMTQgQEAgdm9pZCBWOFByb3h5OjpzZXRTZWN1cml0eVRva2VuKCkKICAgICAvLyBjYXNlLCB3
ZSB1c2UgdGhlIGdsb2JhbCBvYmplY3QgYXMgdGhlIHNlY3VyaXR5IHRva2VuIHRvIGF2b2lkCiAg
ICAgLy8gY2FsbGluZyBjYW5BY2Nlc3Mgd2hlbiBhIHNjcmlwdCBhY2Nlc3NlcyBpdHMgb3duIG9i
amVjdHMuCiAgICAgaWYgKHRva2VuLmlzRW1wdHkoKSB8fCB0b2tlbiA9PSAibnVsbCIpIHsKLSAg
ICAgICAgbV9jb250ZXh0LT5Vc2VEZWZhdWx0U2VjdXJpdHlUb2tlbigpOworICAgICAgICBjb250
ZXh0KCktPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBDU3RyaW5nIHV0ZjhUb2tlbiA9IHRva2VuLnV0ZjgoKTsKICAgICAvLyBOT1RFOiBW
OCBkb2VzIGlkZW50aXR5IGNvbXBhcmlzb24gaW4gZmFzdCBwYXRoLCBtdXN0IHVzZSBhIHN5bWJv
bAogICAgIC8vIGFzIHRoZSBzZWN1cml0eSB0b2tlbi4KLSAgICBtX2NvbnRleHQtPlNldFNlY3Vy
aXR5VG9rZW4odjg6OlN0cmluZzo6TmV3U3ltYm9sKHV0ZjhUb2tlbi5kYXRhKCksIHV0ZjhUb2tl
bi5sZW5ndGgoKSkpOworICAgIGNvbnRleHQoKS0+U2V0U2VjdXJpdHlUb2tlbih2ODo6U3RyaW5n
OjpOZXdTeW1ib2wodXRmOFRva2VuLmRhdGEoKSwgdXRmOFRva2VuLmxlbmd0aCgpKSk7CiB9CiAK
IHZvaWQgVjhQcm94eTo6dXBkYXRlRG9jdW1lbnQoKQpAQCAtNzg4LDcgKzc4Nyw3IEBAIHZvaWQg
VjhQcm94eTo6dXBkYXRlRG9jdW1lbnQoKQogICAgIGluaXRDb250ZXh0SWZOZWVkZWQoKTsKIAog
ICAgIC8vIEJhaWwgb3V0IGlmIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gZmFpbGVkLgotICAgIGlm
IChtX2NvbnRleHQuSXNFbXB0eSgpKQorICAgIGlmIChjb250ZXh0KCkuSXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBXZSBoYXZlIGEgbmV3IGRvY3VtZW50IGFuZCB3ZSBuZWVk
IHRvIHVwZGF0ZSB0aGUgY2FjaGUuCkBAIC05ODksNyArOTg4LDcgQEAgYm9vbCBWOFByb3h5Ojpp
bnN0YWxsRE9NV2luZG93KHY4OjpIYW5kbAogdm9pZCBWOFByb3h5Ojppbml0Q29udGV4dElmTmVl
ZGVkKCkKIHsKICAgICAvLyBCYWlsIG91dCBpZiB0aGUgY29udGV4dCBoYXMgYWxyZWFkeSBiZWVu
IGluaXRpYWxpemVkLgotICAgIGlmICghbV9jb250ZXh0LklzRW1wdHkoKSkKKyAgICBpZiAoIWNv
bnRleHQoKS5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENyZWF0ZSBhIGhh
bmRsZSBzY29wZSBmb3IgYWxsIGxvY2FsIGhhbmRsZXMuCkBAIC0xMDE0LDE3ICsxMDEzLDE4IEBA
IHZvaWQgVjhQcm94eTo6aW5pdENvbnRleHRJZk5lZWRlZCgpCiAgICAgICAgIGlzVjhJbml0aWFs
aXplZCA9IHRydWU7CiAgICAgfQogCi0gICAgbV9jb250ZXh0ID0gY3JlYXRlTmV3Q29udGV4dCht
X2dsb2JhbCwgMCk7Ci0gICAgaWYgKG1fY29udGV4dC5Jc0VtcHR5KCkpCisKKyAgICB2ODo6UGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gY29udGV4dCA9IGNyZWF0ZU5ld0NvbnRleHQobV9nbG9iYWws
IDApOworICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOworICAgIG1f
Y29udGV4dC0+c2V0KGNvbnRleHQpOwogCi0gICAgLy8gU3RhcnRpbmcgZnJvbSBub3csIHVzZSBs
b2NhbCBjb250ZXh0IG9ubHkuCi0gICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiB2OENvbnRleHQg
PSBjb250ZXh0KCk7Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZSh2OENvbnRl
eHQpOworCisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShjb250ZXh0KTsKIAog
ICAgIC8vIFN0b3JlIHRoZSBmaXJzdCBnbG9iYWwgb2JqZWN0IGNyZWF0ZWQgc28gd2UgY2FuIHJl
dXNlIGl0LgogICAgIGlmIChtX2dsb2JhbC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgbV9nbG9iYWwg
PSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHY4Q29udGV4dC0+R2xvYmFsKCkpOwor
ICAgICAgICBtX2dsb2JhbCA9IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoY29udGV4
dC0+R2xvYmFsKCkpOwogICAgICAgICAvLyBCYWlsIG91dCBpZiBhbGxvY2F0aW9uIG9mIHRoZSBm
aXJzdCBnbG9iYWwgb2JqZWN0cyBmYWlscy4KICAgICAgICAgaWYgKG1fZ2xvYmFsLklzRW1wdHko
KSkgewogICAgICAgICAgICAgZGlzcG9zZUNvbnRleHRIYW5kbGVzKCk7CkBAIC0xMDM1LDcgKzEw
MzUsNyBAQCB2b2lkIFY4UHJveHk6OmluaXRDb250ZXh0SWZOZWVkZWQoKQogI2VuZGlmCiAgICAg
fQogCi0gICAgaW5zdGFsbEhpZGRlbk9iamVjdFByb3RvdHlwZShtX2NvbnRleHQpOworICAgIGlu
c3RhbGxIaWRkZW5PYmplY3RQcm90b3R5cGUoY29udGV4dCk7CiAgICAgbV93cmFwcGVyQm9pbGVy
cGxhdGVzID0gdjg6OlBlcnNpc3RlbnQ8djg6OkFycmF5Pjo6TmV3KHY4OjpBcnJheTo6TmV3KFY4
Q2xhc3NJbmRleDo6V1JBUFBFUl9UWVBFX0NPVU5UKSk7CiAgICAgLy8gQmFpbCBvdXQgaWYgYWxs
b2NhdGlvbiBmYWlsZWQuCiAgICAgaWYgKG1fd3JhcHBlckJvaWxlcnBsYXRlcy5Jc0VtcHR5KCkp
IHsKQEAgLTEwNDYsNyArMTA0Niw3IEBAIHZvaWQgVjhQcm94eTo6aW5pdENvbnRleHRJZk5lZWRl
ZCgpCiAgICAgVjhHQ0NvbnRyb2xsZXI6OnJlZ2lzdGVyR2xvYmFsSGFuZGxlKFBST1hZLCB0aGlz
LCBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMpOwogI2VuZGlmCiAKLSAgICBpZiAoIWluc3RhbGxET01X
aW5kb3codjhDb250ZXh0LCBtX2ZyYW1lLT5kb21XaW5kb3coKSkpCisgICAgaWYgKCFpbnN0YWxs
RE9NV2luZG93KGNvbnRleHQsIG1fZnJhbWUtPmRvbVdpbmRvdygpKSkKICAgICAgICAgZGlzcG9z
ZUNvbnRleHRIYW5kbGVzKCk7CiAKICAgICB1cGRhdGVEb2N1bWVudCgpOwpAQCAtMTEyOSw2ICsx
MTI5LDIzIEBAIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y29udGV4dCgKICAgICBy
ZXR1cm4gY29udGV4dDsKIH0KIAorUmVmUHRyPFNoYXJlZFY4Q29udGV4dD4gVjhQcm94eTo6c2hh
cmVkX2NvbnRleHQoRnJhbWUqIGZyYW1lKQoreworICAgIFY4UHJveHkgKnByb3h5ID0gVjhQcm94
eTo6cmV0cmlldmUoZnJhbWUpOworICAgIGlmICghcHJveHkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcHJveHktPmluaXRDb250ZXh0SWZOZWVkZWQoKTsKKyAgICBSZWZQdHI8U2hhcmVkVjhD
b250ZXh0PiBjb250ZXh0ID0gcHJveHktPnNoYXJlZF9jb250ZXh0KCk7CisgICAgaWYgKFY4SXNv
bGF0ZWRXb3JsZCogd29ybGQgPSBWOElzb2xhdGVkV29ybGQ6OmdldEVudGVyZWQoKSkgeworICAg
ICAgICBjb250ZXh0ID0gd29ybGQtPnNoYXJlZF9jb250ZXh0KCk7CisgICAgICAgIGlmIChmcmFt
ZSAhPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKGNvbnRleHQtPmdldCgpKSkKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBjb250ZXh0OworfQorCiB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+IFY4UHJveHk6Om1haW5Xb3JsZENvbnRleHQoRnJhbWUqIGZyYW1lKQogewog
ICAgIFY4UHJveHkqIHByb3h5ID0gcmV0cmlldmUoZnJhbWUpOwpAQCAtMTEzNiw3ICsxMTUzLDcg
QEAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBWOFByb3h5OjptYWluV29ybAogICAgICAgICByZXR1
cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0PigpOwogCiAgICAgcHJveHktPmluaXRDb250ZXh0SWZO
ZWVkZWQoKTsKLSAgICByZXR1cm4gcHJveHktPmNvbnRleHQoKTsKKyAgICByZXR1cm4gdjg6Okxv
Y2FsPHY4OjpDb250ZXh0Pjo6TmV3KHByb3h5LT5jb250ZXh0KCkpOwogfQogCiB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+IFY4UHJveHk6OmN1cnJlbnRDb250ZXh0KCkKQEAgLTEyNjMsMTcgKzEyODAs
MTcgQEAgdm9pZCBWOFByb3h5OjpyZWdpc3RlckV4dGVuc2lvbih2ODo6RXh0ZQogYm9vbCBWOFBy
b3h5OjpzZXRDb250ZXh0RGVidWdJZChpbnQgZGVidWdJZCkKIHsKICAgICBBU1NFUlQoZGVidWdJ
ZCA+IDApOwotICAgIGlmIChtX2NvbnRleHQuSXNFbXB0eSgpKQorICAgIGlmIChjb250ZXh0KCku
SXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNj
b3BlOwotICAgIGlmICghbV9jb250ZXh0LT5HZXREYXRhKCktPklzVW5kZWZpbmVkKCkpCisgICAg
aWYgKCFjb250ZXh0KCktPkdldERhdGEoKS0+SXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShtX2NvbnRleHQp
OworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoY29udGV4dCgpKTsKICAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNvbnRleHREYXRhID0gdjg6Ok9iamVjdDo6TmV3KCk7CiAg
ICAgY29udGV4dERhdGEtPlNldCh2ODo6U3RyaW5nOjpOZXcoa0NvbnRleHREZWJ1Z0RhdGFUeXBl
KSwgdjg6OlN0cmluZzo6TmV3KCJwYWdlIikpOwogICAgIGNvbnRleHREYXRhLT5TZXQodjg6OlN0
cmluZzo6TmV3KGtDb250ZXh0RGVidWdEYXRhVmFsdWUpLCB2ODo6SW50ZWdlcjo6TmV3KGRlYnVn
SWQpKTsKLSAgICBtX2NvbnRleHQtPlNldERhdGEoY29udGV4dERhdGEpOworICAgIGNvbnRleHQo
KS0+U2V0RGF0YShjb250ZXh0RGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhQcm94eS5oCShyZXZpc2lvbiA0ODE0MikKKysrIFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0LDMxIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICB9OwogICAgIHR5cGVkZWYgc3RkOjpsaXN0PFY4RXh0ZW5zaW9uSW5mbz4g
VjhFeHRlbnNpb25MaXN0OwogCisgICAgLy8gQSBzaGFyZWFibGUgcmVmZXJlbmNlIHRvIGEgdjgg
Y29udGV4dC4gIFVzaW5nIGEgc2hhcmVkIGNvbnRleHQKKyAgICAvLyBhbnkgbnVtYmVyIG9mIG9i
amVjdHMgY2FuIHNoYXJlIGEgcmVmZXJlbmNlIHRvIGEgdjggY29udGV4dCBhbmQKKyAgICAvLyB3
aGVuIGl0IHNob3VsZCBubyBsb25nZXIgYmUgYWNjZXNzaWJsZSB0aGUgY29udGV4dCdzIG93bmVy
IGNhbgorICAgIC8vIGNsZWFyIGl0LgorICAgIGNsYXNzIFNoYXJlZFY4Q29udGV4dCA6IHB1Ymxp
YyBXVEY6OlJlZkNvdW50ZWQ8U2hhcmVkVjhDb250ZXh0PiB7CisgICAgcHVibGljOgorICAgICAg
ICBleHBsaWNpdCBTaGFyZWRWOENvbnRleHQodjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IHZh
bHVlKSA6IG1fdmFsdWUodmFsdWUpIHsgfQorICAgICAgICBTaGFyZWRWOENvbnRleHQoKSB7IH0K
KyAgICAgICAgdm9pZCBzZXQodjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAg
djg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGdldCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX3ZhbHVlOworICAgICAgICB9CisgICAgICAgIHZvaWQgZGlzcG9zZUhhbmRsZSgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdmFsdWUuRGlzcG9zZSgpOworICAgICAgICAgICAg
bV92YWx1ZS5DbGVhcigpOworICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OkNvbnRleHQ+IG1fdmFsdWU7CisgICAgfTsKKwogICAgIGNsYXNzIFY4UHJv
eHkgewogICAgIHB1YmxpYzoKICAgICAgICAgLy8gVGhlIHR5cGVzIG9mIGphdmFzY3JpcHQgZXJy
b3JzIHRoYXQgY2FuIGJlIHRocm93bi4KQEAgLTE2NSw3ICsxOTAsMTIgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAgICAgR2VuZXJhbEVycm9yCiAgICAgICAgIH07CiAKLSAgICAgICAg
ZXhwbGljaXQgVjhQcm94eShGcmFtZSogZnJhbWUpIDogbV9mcmFtZShmcmFtZSksIG1faW5saW5l
Q29kZShmYWxzZSksIG1fdGltZXJDYWxsYmFjayhmYWxzZSksIG1fcmVjdXJzaW9uKDApIHsgfQor
ICAgICAgICBleHBsaWNpdCBWOFByb3h5KEZyYW1lKiBmcmFtZSkKKyAgICAgICAgICAgIDogbV9m
cmFtZShmcmFtZSksCisgICAgICAgICAgICAgIG1fY29udGV4dChuZXcgU2hhcmVkVjhDb250ZXh0
KCkpLAorICAgICAgICAgICAgICBtX2lubGluZUNvZGUoZmFsc2UpLAorICAgICAgICAgICAgICBt
X3RpbWVyQ2FsbGJhY2soZmFsc2UpLAorICAgICAgICAgICAgICBtX3JlY3Vyc2lvbigwKSB7IH0K
IAogICAgICAgICB+VjhQcm94eSgpOwogCkBAIC0yOTgsNiArMzI4LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAvLyBSZXR1cm5zIFY4IENvbnRleHQgb2YgYSBmcmFtZS4gSWYgbm9u
ZSBleGlzdHMsIGNyZWF0ZXMKICAgICAgICAgLy8gYSBuZXcgY29udGV4dC4gSXQgaXMgcG90ZW50
aWFsbHkgc2xvdyBhbmQgY29uc3VtZXMgbWVtb3J5LgogICAgICAgICBzdGF0aWMgdjg6OkxvY2Fs
PHY4OjpDb250ZXh0PiBjb250ZXh0KEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBSZWZQdHI8U2hh
cmVkVjhDb250ZXh0PiBzaGFyZWRfY29udGV4dChGcmFtZSopOwogICAgICAgICBzdGF0aWMgdjg6
OkxvY2FsPHY4OjpDb250ZXh0PiBtYWluV29ybGRDb250ZXh0KEZyYW1lKik7CiAgICAgICAgIHN0
YXRpYyB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGN1cnJlbnRDb250ZXh0KCk7CiAKQEAgLTMzOCwx
MCArMzY5LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIGludCBzb3Vy
Y2VMaW5lTnVtYmVyKCk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgc291cmNlTmFtZSgpOwogCi0g
ICAgICAgIC8vIFJldHVybnMgYSBsb2NhbCBoYW5kbGUgb2YgdGhlIGNvbnRleHQuCi0gICAgICAg
IHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCgpCisgICAgICAgIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNvbnRleHQoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdjg6Okxv
Y2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dCk7CisgICAgICAgICAgICByZXR1cm4gbV9j
b250ZXh0LT5nZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZlB0cjxTaGFyZWRWOENvbnRl
eHQ+IHNoYXJlZF9jb250ZXh0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY29u
dGV4dDsKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgc2V0Q29udGV4dERlYnVnSWQoaW50IGlk
KTsKQEAgLTQyMSw3ICs0NTYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgRnJh
bWUqIG1fZnJhbWU7CiAKLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IG1fY29u
dGV4dDsKKyAgICAgICAgUmVmUHRyPFNoYXJlZFY4Q29udGV4dD4gbV9jb250ZXh0OworCiAgICAg
ICAgIC8vIEZvciBlYWNoIHBvc3NpYmxlIHR5cGUgb2Ygd3JhcHBlciwgd2Uga2VlcCBhIGJvaWxl
cnBsYXRlIG9iamVjdC4KICAgICAgICAgLy8gVGhlIGJvaWxlcnBsYXRlIGlzIHVzZWQgdG8gY3Jl
YXRlIGFkZGl0aW9uYWwgd3JhcHBlcnMgb2YgdGhlIHNhbWUKICAgICAgICAgLy8gdHlwZS4gIFdl
IGtlZXAgYSBzaW5nbGUgcGVyc2lzdGVudCBoYW5kbGUgdG8gYW4gYXJyYXkgb2YgdGhl
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39340</attachid>
            <date>2009-09-10 04:32:49 -0700</date>
            <delta_ts>2009-09-11 00:52:04 -0700</delta_ts>
            <desc>updated</desc>
            <filename>bug-29077-20090910133246.patch</filename>
            <type>text/plain</type>
            <size>21878</size>
            <attacher name="Christian Plesner Hansen">christian.plesner.hansen</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODI0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTUgQEAKKzIwMDktMDktMTAgIENocmlzdGlhbiBQbGVzbmVyIEhhbnNlbiAgPGNo
cmlzdGlhbi5wbGVzbmVyLmhhbnNlbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW3Y4XSBTaGFyZSBwZXJzaXN0ZW50IGNvbnRleHQg
aGFuZGxlcyBiZXR3ZWVuIGV2ZW50cyAgICAgICAgCisgICAgICAgIENoYW5nZSBldmVudHMgdG8g
dXNlIGEgc2luZ2xlIHJlZi1jb3VudGVkIHNoYXJlZCBwZXJzaXN0ZW50IGhhbmRsZQorICAgICAg
ICB0byB0aGUgY29udGV4dCBpbiB3aGljaCB0byBydW4sIHJhdGhlciB0aGFuIGNyZWF0ZSBhIG5l
dworICAgICAgICBwZXJzaXN0ZW50IGhhbmRsZSBmb3IgZWFjaCBuZXcgZXZlbnQgd2hpY2ggcHV0
cyBwcmVzc3VyZSBvbiB0aGUKKyAgICAgICAgZ2MuCisgICAgICAgIAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwNzcKKworICAgICAgICBObyBuZXcg
dGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1NoYXJlZFBlcnNpc3RlbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRQZXJzaXN0ZW50OjpzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkUGVy
c2lzdGVudDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFBlcnNpc3RlbnQ6OmRpc3Bv
c2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkUGVyc2lzdGVudDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFBlcnNpc3RlbnQ6OlNoYXJlZFBlcnNpc3RlbnQpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpWOEFic3RyYWN0RXZlbnRMaXN0
ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxl
RXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmg6
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlY4SXNvbGF0ZWRXb3JsZDo6VjhJc29sYXRlZFdvcmxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4SXNvbGF0ZWRXb3JsZDo6flY4SXNvbGF0ZWRXb3JsZCk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhJc29sYXRlZFdvcmxkLmg6CisgICAgICAgIChXZWJDb3JlOjpWOElzb2xhdGVkV29y
bGQ6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhJc29sYXRlZFdvcmxkOjpzaGFyZWRf
Y29udGV4dCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZUluTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFByb3h5OjpjcmVhdGVXcmFwcGVyRnJvbUNhY2hlU2xvd0Nhc2UpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhQcm94eTo6aXNDb250ZXh0SW5pdGlhbGl6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
VjhQcm94eTo6dXBkYXRlRG9jdW1lbnRXcmFwcGVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6
VjhQcm94eTo6Y2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpW
OFByb3h5OjpkaXNwb3NlQ29udGV4dEhhbmRsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94
eTo6Y2xlYXJGb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpjbGVhckZvck5h
dmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6c2V0U2VjdXJpdHlUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojp1cGRhdGVEb2N1bWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOFByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlY4UHJveHk6OnNoYXJlZF9jb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6Om1h
aW5Xb3JsZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6c2V0Q29udGV4dERl
YnVnSWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlY4UHJveHk6OlY4UHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpzaGFyZWRfY29udGV4dCk6CisKIDIwMDkt
MDktMDkgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBB
WCBub3RpZmljYXRpb25zIHNob3VsZCBiZSBhbiBFTlVNIHR5cGUgaW5zdGVhZCBvZiBzdHJpbmdz
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiA0
ODIzOSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRl
KFY4UHJveHkqIHAKICAgICBBU1NFUlQocHJveHkpOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOwotICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gcHJveHkt
PmNvbnRleHQoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBwcm94
eS0+Y29udGV4dCgpOwogICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47IC8vIEpTIG1heSBub3QgYmUgZW5hYmxlZC4KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9TaGFyZWRQZXJzaXN0ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9T
aGFyZWRQZXJzaXN0ZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1No
YXJlZFBlcnNpc3RlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2hh
cmVkUGVyc2lzdGVudF9oCisjZGVmaW5lIFNoYXJlZFBlcnNpc3RlbnRfaAorCisjaW5jbHVkZSA8
djguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gQSBzaGFyZWFibGUgcmVmZXJl
bmNlIHRvIGEgdjggcGVyc2lzdGVudCBoYW5kbGUuICBVc2luZyBhIHNoYXJlZAorICAgIC8vIHBl
cnNpc3RlbnQgYW55IG51bWJlciBvZiBvYmplY3RzIGNhbiBzaGFyZSBhIHJlZmVyZW5jZSB0byBh
IHY4CisgICAgLy8gb2JqZWN0IGFuZCB3aGVuIGl0IHNob3VsZCBubyBsb25nZXIgYmUgYWNjZXNz
aWJsZSB0aGUgb2JqZWN0J3MKKyAgICAvLyBvd25lciBjYW4gY2xlYXIgaXQuCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgU2hhcmVkUGVyc2lzdGVudCA6IHB1YmxpYyBXVEY6
OlJlZkNvdW50ZWQ8U2hhcmVkUGVyc2lzdGVudDxUPiA+IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHZvaWQgc2V0KHY4OjpQZXJzaXN0ZW50PFQ+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8VD4g
Z2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgICAgIH0K
KyAgICAgICAgdm9pZCBkaXNwb3NlSGFuZGxlKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFtX3ZhbHVlLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICBtX3ZhbHVlLkRpc3Bvc2UoKTsK
KyAgICAgICAgICAgICAgbV92YWx1ZS5DbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8VD4gPiBjcmVhdGUo
djg6OlBlcnNpc3RlbnQ8VD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgU2hhcmVkUGVyc2lzdGVudDxUPih2YWx1ZSkpOworICAgICAgICB9CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8VD4gPiBjcmVhdGUoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlKHY4OjpQZXJzaXN0ZW50PFQ+KCkpOwor
ICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgZXhwbGljaXQgU2hhcmVkUGVyc2lzdGVu
dCh2ODo6UGVyc2lzdGVudDxUPiB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7IH0KKyAgICAgICAg
djg6OlBlcnNpc3RlbnQ8VD4gbV92YWx1ZTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBTaGFyZWRQZXJzaXN0ZW50X2gKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiA0ODIzOSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw4ICs1Miw3IEBAIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpWOEFi
c3RyYWN0RXZlbnQKICAgICAvLyBXZSBtaWdodCBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUg
cGFyc2VyLgogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAotICAgIG1fY29udGV4
dC5zZXQoVjhQcm94eTo6Y29udGV4dChtX2ZyYW1lKSk7Ci0gICAgbV9jb250ZXh0Lm1ha2VXZWFr
KCk7CisgICAgbV9jb250ZXh0ID0gVjhQcm94eTo6c2hhcmVkX2NvbnRleHQobV9mcmFtZSk7CiAK
ICAgICAvLyBHZXQgdGhlIHBvc2l0aW9uIGluIHRoZSBzb3VyY2UgaWYgYW55LgogICAgIGlmICht
X2lzQXR0cmlidXRlICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPnRva2VuaXplcigpKSB7CkBAIC0x
MTksNyArMTE4LDEyIEBAIHZvaWQgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW4K
IAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAotICAgIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IHY4Q29udGV4dCA9IG1fY29udGV4dC5nZXQoKTsKKyAgICBpZiAoIW1fY29udGV4
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IGxvY2FsIGhhbmRsZSBz
aW5jZSB0aGUgcGVyc2lzdGVudCBoYW5kbGUgc3RvcmVkIGluCisgICAgLy8gbV9jb250ZXh0IG1h
eSBiZSBkaXNwb3NlZCBiZWZvcmUgd2UncmUgZG9uZS4KKyAgICB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiB2OENvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0LT5n
ZXQoKSk7CiAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaAko
cmV2aXNpb24gNDgyMzkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExp
c3RlbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkV2
ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJPd25IYW5kbGUuaCIKKyNpbmNsdWRlICJWOFByb3h5
LmgiCiAjaW5jbHVkZSA8djguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODksNyArOTAs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGRlbGV0ZWQuIFNlZSBmYXN0L2Rv
bS9yZXBsYWNlQ2hpbGQuaHRtbAogICAgICAgICAvLyBGSVhNRTogdGhpcyBjb3VsZCBob2xkIG1f
ZnJhbWUgbGl2ZSB1bnRpbCB0aGUgZXZlbnQgbGlzdGVuZXIgaXMgZGVsZXRlZC4KICAgICAgICAg
RnJhbWUqIG1fZnJhbWU7Ci0gICAgICAgIE93bkhhbmRsZTx2ODo6Q29udGV4dD4gbV9jb250ZXh0
OworICAgICAgICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBtX2NvbnRl
eHQ7CiAKICAgICAgICAgLy8gUG9zaXRpb24gaW4gdGhlIEhUTUwgc291cmNlIGZvciBIVE1MIGV2
ZW50IGxpc3RlbmVycy4KICAgICAgICAgaW50IG1fbGluZU51bWJlcjsKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHAJKHJldmlzaW9uIDQ4MjM5KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nywx
OCArODcsMTcgQEAgdm9pZCBWOElzb2xhdGVkV29ybGQ6OmV2YWx1YXRlKGNvbnN0IFZlYwogfQog
CiBWOElzb2xhdGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3JsZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjb250ZXh0KQotICAgIDogbV9jb250ZXh0KHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0Pjo6
TmV3KGNvbnRleHQpKQorICAgIDogbV9jb250ZXh0KFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRl
eHQ+OjpjcmVhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+OjpOZXcoY29udGV4dCkpKQog
ewogICAgICsraXNvbGF0ZWRXb3JsZENvdW50OwotICAgIG1fY29udGV4dC5NYWtlV2Vhayh0aGlz
LCAmY29udGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayk7Ci0gICAgbV9jb250ZXh0LT5HbG9iYWwo
KS0+U2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6Omlzb2xhdGVkV29ybGQoKSwg
djg6OkV4dGVybmFsOjpXcmFwKHRoaXMpKTsKKyAgICBtX2NvbnRleHQtPmdldCgpLk1ha2VXZWFr
KHRoaXMsICZjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKTsKKyAgICBjb250ZXh0LT5HbG9i
YWwoKS0+U2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6Omlzb2xhdGVkV29ybGQo
KSwgdjg6OkV4dGVybmFsOjpXcmFwKHRoaXMpKTsKIH0KIAogVjhJc29sYXRlZFdvcmxkOjp+VjhJ
c29sYXRlZFdvcmxkKCkKIHsKICAgICAtLWlzb2xhdGVkV29ybGRDb3VudDsKLSAgICBtX2NvbnRl
eHQuRGlzcG9zZSgpOwotICAgIG1fY29udGV4dC5DbGVhcigpOworICAgIG1fY29udGV4dC0+ZGlz
cG9zZUhhbmRsZSgpOwogfQogCiBWOElzb2xhdGVkV29ybGQqIFY4SXNvbGF0ZWRXb3JsZDo6Z2V0
RW50ZXJlZEltcGwoKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5oCShy
ZXZpc2lvbiA0ODIzOSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAogI2luY2x1ZGUgIlY4RE9NTWFwLmgi
CiAjaW5jbHVkZSAiVjhJbmRleC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJW
OFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIgIC8vIGZvciBXZWJD
b3JlOjpTY3JpcHRTb3VyY2VDb2RlCiAKQEAgLTgzLDcgKzg0LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAgICAgcmV0dXJuIGdldEVudGVyZWRJbXBsKCk7CiAgICAgICAgIH0KIAot
ICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250
ZXh0OyB9CisgICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7IHJldHVy
biBtX2NvbnRleHQtPmdldCgpOyB9CisgICAgICAgIFBhc3NSZWZQdHI8U2hhcmVkUGVyc2lzdGVu
dDx2ODo6Q29udGV4dD4gPiBzaGFyZWRfY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQog
CiAgICAgICAgIERPTURhdGFTdG9yZSogZ2V0RE9NRGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4g
bV9kb21EYXRhU3RvcmUuZ2V0U3RvcmUoKTsgfQogCkBAIC05Nyw3ICs5OSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBUaGUgdjg6OkNvbnRleHQgZm9yIHRoZSBpc29sYXRl
ZCB3b3JsZC4gIFRoaXMgb2JqZWN0IGlzIGtlZXAgb24gdGhlCiAgICAgICAgIC8vIGhlYXAgYXMg
bG9uZyBhcyB8bV9jb250ZXh0fCBoYXMgbm90IGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWQuCi0gICAg
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgICAgIFJlZlB0
cjxTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IG1fY29udGV4dDsKIAogICAgICAgICAv
LyBUaGUgYmFja2luZyBzdG9yZSBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkJ3MgRE9NIHdyYXBwZXJz
LiAgVGhpcyBjbGFzcwogICAgICAgICAvLyBkb2Vzbid0IGhhdmUgdmlzaWJpbGl0eSBpbnRvIHRo
ZSB3cmFwcGVycy4gIFRoaXMgaGFuZGxlIHNpbXBseSBoZWxwcwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuY3BwCShyZXZpc2lvbiA0ODIzOSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw3ICsyOTQsNyBAQCB2b2lkIFY4UHJveHk6OmV2
YWx1YXRlSW5OZXdDb250ZXh0KGNvbnN0CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3Bl
OwogCiAgICAgLy8gU2V0IHVwIHRoZSBET00gd2luZG93IGFzIHRoZSBwcm90b3R5cGUgb2YgdGhl
IG5ldyBnbG9iYWwgb2JqZWN0LgotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHdpbmRvd0Nv
bnRleHQgPSBtX2NvbnRleHQ7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gd2luZG93Q29u
dGV4dCA9IGNvbnRleHQoKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdpbmRvd0dsb2Jh
bCA9IHdpbmRvd0NvbnRleHQtPkdsb2JhbCgpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d2luZG93V3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5k
ZXg6OkRPTVdJTkRPVywgd2luZG93R2xvYmFsKTsKIApAQCAtNDc4LDggKzQ3OCw4IEBAIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiBWOFByb3h5OjpjcmVhdGVXcmEKICAgICAvLyBOb3QgaW4gY2FjaGUu
CiAgICAgaW50IGNsYXNzSW5kZXggPSBWOENsYXNzSW5kZXg6OlRvSW50KHR5cGUpOwogICAgIGlu
aXRDb250ZXh0SWZOZWVkZWQoKTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUobV9jb250
ZXh0KTsKLSAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IFY4RE9NV3JhcHBl
cjo6Z2V0Q29uc3RydWN0b3IodHlwZSwgZ2V0SGlkZGVuT2JqZWN0UHJvdG90eXBlKG1fY29udGV4
dCkpOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KCkpOworICAgIHY4OjpM
b2NhbDx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3Rv
cih0eXBlLCBnZXRIaWRkZW5PYmplY3RQcm90b3R5cGUoY29udGV4dCgpKSk7CiAgICAgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IGluc3RhbmNlID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKGZ1
bmN0aW9uKTsKICAgICBpZiAoIWluc3RhbmNlLklzRW1wdHkoKSkgewogICAgICAgICBtX3dyYXBw
ZXJCb2lsZXJwbGF0ZXMtPlNldCh2ODo6SW50ZWdlcjo6TmV3KGNsYXNzSW5kZXgpLCBpbnN0YW5j
ZSk7CkBAIC00OTIsOSArNDkyLDkgQEAgYm9vbCBWOFByb3h5Ojppc0NvbnRleHRJbml0aWFsaXpl
ZCgpCiB7CiAgICAgLy8gbV9jb250ZXh0LCBtX2dsb2JhbCwgYW5kIG1fd3JhcHBlckJvaWxlcnBs
YXRlcyBzaG91bGQKICAgICAvLyBhbGwgYmUgbm9uLWVtcHR5IGlmIGlmIG1fY29udGV4dCBpcyBu
b24tZW1wdHkuCi0gICAgQVNTRVJUKG1fY29udGV4dC5Jc0VtcHR5KCkgfHwgIW1fZ2xvYmFsLklz
RW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fY29udGV4dC5Jc0VtcHR5KCkgfHwgIW1fd3JhcHBlckJv
aWxlcnBsYXRlcy5Jc0VtcHR5KCkpOwotICAgIHJldHVybiAhbV9jb250ZXh0LklzRW1wdHkoKTsK
KyAgICBBU1NFUlQoY29udGV4dCgpLklzRW1wdHkoKSB8fCAhbV9nbG9iYWwuSXNFbXB0eSgpKTsK
KyAgICBBU1NFUlQoY29udGV4dCgpLklzRW1wdHkoKSB8fCAhbV93cmFwcGVyQm9pbGVycGxhdGVz
LklzRW1wdHkoKSk7CisgICAgcmV0dXJuICFjb250ZXh0KCkuSXNFbXB0eSgpOwogfQogCiBET01X
aW5kb3cqIFY4UHJveHk6OnJldHJpZXZlV2luZG93KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNv
bnRleHQpCkBAIC02NjAsMjEgKzY2MCwyMCBAQCB2b2lkIFY4UHJveHk6OnVwZGF0ZURvY3VtZW50
V3JhcHBlckNhY2hlCiAgICAgICAgIGNsZWFyRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbnRleHQtPkdsb2JhbCgpLT5Gb3JjZVNldCh2ODo6
U3RyaW5nOjpOZXcoImRvY3VtZW50IiksIGRvY3VtZW50V3JhcHBlciwgc3RhdGljX2Nhc3Q8djg6
OlByb3BlcnR5QXR0cmlidXRlPih2ODo6UmVhZE9ubHkgfCB2ODo6RG9udERlbGV0ZSkpOworICAg
IGNvbnRleHQoKS0+R2xvYmFsKCktPkZvcmNlU2V0KHY4OjpTdHJpbmc6Ok5ldygiZG9jdW1lbnQi
KSwgZG9jdW1lbnRXcmFwcGVyLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4
OjpSZWFkT25seSB8IHY4OjpEb250RGVsZXRlKSk7CiB9CiAKIHZvaWQgVjhQcm94eTo6Y2xlYXJE
b2N1bWVudFdyYXBwZXJDYWNoZSgpCiB7Ci0gICAgQVNTRVJUKCFtX2NvbnRleHQuSXNFbXB0eSgp
KTsKLSAgICBtX2NvbnRleHQtPkdsb2JhbCgpLT5Gb3JjZURlbGV0ZSh2ODo6U3RyaW5nOjpOZXco
ImRvY3VtZW50IikpOworICAgIEFTU0VSVCghY29udGV4dCgpLklzRW1wdHkoKSk7CisgICAgY29u
dGV4dCgpLT5HbG9iYWwoKS0+Rm9yY2VEZWxldGUodjg6OlN0cmluZzo6TmV3KCJkb2N1bWVudCIp
KTsKIH0KIAogdm9pZCBWOFByb3h5OjpkaXNwb3NlQ29udGV4dEhhbmRsZXMoKQogewotICAgIGlm
ICghbV9jb250ZXh0LklzRW1wdHkoKSkgeworICAgIGlmICghY29udGV4dCgpLklzRW1wdHkoKSkg
ewogICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZERlc3Ryb3lTY3JpcHRD
b250ZXh0Rm9yRnJhbWUoKTsKLSAgICAgICAgbV9jb250ZXh0LkRpc3Bvc2UoKTsKLSAgICAgICAg
bV9jb250ZXh0LkNsZWFyKCk7CisgICAgICAgIHNoYXJlZF9jb250ZXh0KCktPmRpc3Bvc2VIYW5k
bGUoKTsKICAgICB9CiAKICAgICBpZiAoIW1fd3JhcHBlckJvaWxlcnBsYXRlcy5Jc0VtcHR5KCkp
IHsKQEAgLTcwMiw3ICs3MDEsNyBAQCB2b2lkIFY4UHJveHk6OnJlbGVhc2VTdG9yYWdlTXV0ZXgo
KQogCiB2b2lkIFY4UHJveHk6OmNsZWFyRm9yQ2xvc2UoKQogewotICAgIGlmICghbV9jb250ZXh0
LklzRW1wdHkoKSkgeworICAgIGlmICghY29udGV4dCgpLklzRW1wdHkoKSkgewogICAgICAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKICAgICAgICAgY2xlYXJEb2N1bWVudFdyYXBw
ZXIoKTsKQEAgLTcxNCwxMSArNzEzLDExIEBAIHZvaWQgVjhQcm94eTo6Y2xlYXJGb3JOYXZpZ2F0
aW9uKCkKIHsKICAgICBkaXNjb25uZWN0RXZlbnRMaXN0ZW5lcnMoKTsKIAotICAgIGlmICghbV9j
b250ZXh0LklzRW1wdHkoKSkgeworICAgIGlmICghY29udGV4dCgpLklzRW1wdHkoKSkgewogICAg
ICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlOwogICAgICAgICBjbGVhckRvY3VtZW50V3JhcHBl
cigpOwogCi0gICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV9jb250ZXh0
KTsKKyAgICAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShjb250ZXh0KCkpOwog
CiAgICAgICAgIC8vIENsZWFyIHRoZSBkb2N1bWVudCB3cmFwcGVyIGNhY2hlIGJlZm9yZSB0dXJu
aW5nIG9uIGFjY2VzcyBjaGVja3Mgb24KICAgICAgICAgLy8gdGhlIG9sZCBET01XaW5kb3cgd3Jh
cHBlci4gVGhpcyB3YXksIGFjY2VzcyB0byB0aGUgZG9jdW1lbnQgd3JhcHBlcgpAQCAtNzMxLDcg
KzczMCw3IEBAIHZvaWQgVjhQcm94eTo6Y2xlYXJGb3JOYXZpZ2F0aW9uKCkKICAgICAgICAgd3Jh
cHBlci0+VHVybk9uQWNjZXNzQ2hlY2soKTsKIAogICAgICAgICAvLyBTZXBhcmF0ZSB0aGUgY29u
dGV4dCBmcm9tIGl0cyBnbG9iYWwgb2JqZWN0LgotICAgICAgICBtX2NvbnRleHQtPkRldGFjaEds
b2JhbCgpOworICAgICAgICBjb250ZXh0KCktPkRldGFjaEdsb2JhbCgpOwogCiAgICAgICAgIGRp
c3Bvc2VDb250ZXh0SGFuZGxlcygpOwogICAgIH0KQEAgLTc0Miw3ICs3NDEsNyBAQCB2b2lkIFY4
UHJveHk6OnNldFNlY3VyaXR5VG9rZW4oKQogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJh
bWUtPmRvY3VtZW50KCk7CiAgICAgLy8gU2V0dXAgc2VjdXJpdHkgb3JpZ2luIGFuZCBzZWN1cml0
eSB0b2tlbi4KICAgICBpZiAoIWRvY3VtZW50KSB7Ci0gICAgICAgIG1fY29udGV4dC0+VXNlRGVm
YXVsdFNlY3VyaXR5VG9rZW4oKTsKKyAgICAgICAgY29udGV4dCgpLT5Vc2VEZWZhdWx0U2VjdXJp
dHlUb2tlbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC03NjIsMTQgKzc2MSwxNCBA
QCB2b2lkIFY4UHJveHk6OnNldFNlY3VyaXR5VG9rZW4oKQogICAgIC8vIGNhc2UsIHdlIHVzZSB0
aGUgZ2xvYmFsIG9iamVjdCBhcyB0aGUgc2VjdXJpdHkgdG9rZW4gdG8gYXZvaWQKICAgICAvLyBj
YWxsaW5nIGNhbkFjY2VzcyB3aGVuIGEgc2NyaXB0IGFjY2Vzc2VzIGl0cyBvd24gb2JqZWN0cy4K
ICAgICBpZiAodG9rZW4uaXNFbXB0eSgpIHx8IHRva2VuID09ICJudWxsIikgewotICAgICAgICBt
X2NvbnRleHQtPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7CisgICAgICAgIGNvbnRleHQoKS0+
VXNlRGVmYXVsdFNlY3VyaXR5VG9rZW4oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IENTdHJpbmcgdXRmOFRva2VuID0gdG9rZW4udXRmOCgpOwogICAgIC8vIE5PVEU6IFY4IGRvZXMg
aWRlbnRpdHkgY29tcGFyaXNvbiBpbiBmYXN0IHBhdGgsIG11c3QgdXNlIGEgc3ltYm9sCiAgICAg
Ly8gYXMgdGhlIHNlY3VyaXR5IHRva2VuLgotICAgIG1fY29udGV4dC0+U2V0U2VjdXJpdHlUb2tl
bih2ODo6U3RyaW5nOjpOZXdTeW1ib2wodXRmOFRva2VuLmRhdGEoKSwgdXRmOFRva2VuLmxlbmd0
aCgpKSk7CisgICAgY29udGV4dCgpLT5TZXRTZWN1cml0eVRva2VuKHY4OjpTdHJpbmc6Ok5ld1N5
bWJvbCh1dGY4VG9rZW4uZGF0YSgpLCB1dGY4VG9rZW4ubGVuZ3RoKCkpKTsKIH0KIAogdm9pZCBW
OFByb3h5Ojp1cGRhdGVEb2N1bWVudCgpCkBAIC03ODgsNyArNzg3LDcgQEAgdm9pZCBWOFByb3h5
Ojp1cGRhdGVEb2N1bWVudCgpCiAgICAgaW5pdENvbnRleHRJZk5lZWRlZCgpOwogCiAgICAgLy8g
QmFpbCBvdXQgaWYgY29udGV4dCBpbml0aWFsaXphdGlvbiBmYWlsZWQuCi0gICAgaWYgKG1fY29u
dGV4dC5Jc0VtcHR5KCkpCisgICAgaWYgKGNvbnRleHQoKS5Jc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIFdlIGhhdmUgYSBuZXcgZG9jdW1lbnQgYW5kIHdlIG5lZWQgdG8gdXBk
YXRlIHRoZSBjYWNoZS4KQEAgLTk4OSw3ICs5ODgsNyBAQCBib29sIFY4UHJveHk6Omluc3RhbGxE
T01XaW5kb3codjg6OkhhbmRsCiB2b2lkIFY4UHJveHk6OmluaXRDb250ZXh0SWZOZWVkZWQoKQog
ewogICAgIC8vIEJhaWwgb3V0IGlmIHRoZSBjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlh
bGl6ZWQuCi0gICAgaWYgKCFtX2NvbnRleHQuSXNFbXB0eSgpKQorICAgIGlmICghY29udGV4dCgp
LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ3JlYXRlIGEgaGFuZGxlIHNj
b3BlIGZvciBhbGwgbG9jYWwgaGFuZGxlcy4KQEAgLTEwMTQsMTcgKzEwMTMsMTggQEAgdm9pZCBW
OFByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKCkKICAgICAgICAgaXNWOEluaXRpYWxpemVkID0g
dHJ1ZTsKICAgICB9CiAKLSAgICBtX2NvbnRleHQgPSBjcmVhdGVOZXdDb250ZXh0KG1fZ2xvYmFs
LCAwKTsKLSAgICBpZiAobV9jb250ZXh0LklzRW1wdHkoKSkKKworICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlTmV3Q29udGV4dChtX2dsb2JhbCwgMCk7Cisg
ICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0
LT5zZXQoY29udGV4dCk7CiAKLSAgICAvLyBTdGFydGluZyBmcm9tIG5vdywgdXNlIGxvY2FsIGNv
bnRleHQgb25seS4KLSAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IGNvbnRl
eHQoKTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKHY4Q29udGV4dCk7CisK
KyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGNvbnRleHQpOwogCiAgICAgLy8g
U3RvcmUgdGhlIGZpcnN0IGdsb2JhbCBvYmplY3QgY3JlYXRlZCBzbyB3ZSBjYW4gcmV1c2UgaXQu
CiAgICAgaWYgKG1fZ2xvYmFsLklzRW1wdHkoKSkgewotICAgICAgICBtX2dsb2JhbCA9IHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcodjhDb250ZXh0LT5HbG9iYWwoKSk7CisgICAgICAg
IG1fZ2xvYmFsID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjb250ZXh0LT5HbG9i
YWwoKSk7CiAgICAgICAgIC8vIEJhaWwgb3V0IGlmIGFsbG9jYXRpb24gb2YgdGhlIGZpcnN0IGds
b2JhbCBvYmplY3RzIGZhaWxzLgogICAgICAgICBpZiAobV9nbG9iYWwuSXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICBkaXNwb3NlQ29udGV4dEhhbmRsZXMoKTsKQEAgLTEwMzUsNyArMTAzNSw3IEBA
IHZvaWQgVjhQcm94eTo6aW5pdENvbnRleHRJZk5lZWRlZCgpCiAjZW5kaWYKICAgICB9CiAKLSAg
ICBpbnN0YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlKG1fY29udGV4dCk7CisgICAgaW5zdGFsbEhp
ZGRlbk9iamVjdFByb3RvdHlwZShjb250ZXh0KTsKICAgICBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMg
PSB2ODo6UGVyc2lzdGVudDx2ODo6QXJyYXk+OjpOZXcodjg6OkFycmF5OjpOZXcoVjhDbGFzc0lu
ZGV4OjpXUkFQUEVSX1RZUEVfQ09VTlQpKTsKICAgICAvLyBCYWlsIG91dCBpZiBhbGxvY2F0aW9u
IGZhaWxlZC4KICAgICBpZiAobV93cmFwcGVyQm9pbGVycGxhdGVzLklzRW1wdHkoKSkgewpAQCAt
MTA0Niw3ICsxMDQ2LDcgQEAgdm9pZCBWOFByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKCkKICAg
ICBWOEdDQ29udHJvbGxlcjo6cmVnaXN0ZXJHbG9iYWxIYW5kbGUoUFJPWFksIHRoaXMsIG1fd3Jh
cHBlckJvaWxlcnBsYXRlcyk7CiAjZW5kaWYKIAotICAgIGlmICghaW5zdGFsbERPTVdpbmRvdyh2
OENvbnRleHQsIG1fZnJhbWUtPmRvbVdpbmRvdygpKSkKKyAgICBpZiAoIWluc3RhbGxET01XaW5k
b3coY29udGV4dCwgbV9mcmFtZS0+ZG9tV2luZG93KCkpKQogICAgICAgICBkaXNwb3NlQ29udGV4
dEhhbmRsZXMoKTsKIAogICAgIHVwZGF0ZURvY3VtZW50KCk7CkBAIC0xMTI5LDYgKzExMjksMjMg
QEAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBWOFByb3h5Ojpjb250ZXh0KAogICAgIHJldHVybiBj
b250ZXh0OwogfQogCitQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4g
VjhQcm94eTo6c2hhcmVkX2NvbnRleHQoRnJhbWUqIGZyYW1lKQoreworICAgIFY4UHJveHkgKnBy
b3h5ID0gVjhQcm94eTo6cmV0cmlldmUoZnJhbWUpOworICAgIGlmICghcHJveHkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcHJveHktPmluaXRDb250ZXh0SWZOZWVkZWQoKTsKKyAgICBQYXNz
UmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gY29udGV4dCA9IHByb3h5LT5z
aGFyZWRfY29udGV4dCgpOworICAgIGlmIChWOElzb2xhdGVkV29ybGQqIHdvcmxkID0gVjhJc29s
YXRlZFdvcmxkOjpnZXRFbnRlcmVkKCkpIHsKKyAgICAgICAgY29udGV4dCA9IHdvcmxkLT5zaGFy
ZWRfY29udGV4dCgpOworICAgICAgICBpZiAoZnJhbWUgIT0gVjhQcm94eTo6cmV0cmlldmVGcmFt
ZShjb250ZXh0LT5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gY29udGV4dDsKK30KKwogdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBWOFByb3h5OjptYWlu
V29ybGRDb250ZXh0KEZyYW1lKiBmcmFtZSkKIHsKICAgICBWOFByb3h5KiBwcm94eSA9IHJldHJp
ZXZlKGZyYW1lKTsKQEAgLTExMzYsNyArMTE1Myw3IEBAIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4g
VjhQcm94eTo6bWFpbldvcmwKICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4o
KTsKIAogICAgIHByb3h5LT5pbml0Q29udGV4dElmTmVlZGVkKCk7Ci0gICAgcmV0dXJuIHByb3h5
LT5jb250ZXh0KCk7CisgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhwcm94
eS0+Y29udGV4dCgpKTsKIH0KIAogdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBWOFByb3h5OjpjdXJy
ZW50Q29udGV4dCgpCkBAIC0xMjYzLDE3ICsxMjgwLDE3IEBAIHZvaWQgVjhQcm94eTo6cmVnaXN0
ZXJFeHRlbnNpb24odjg6OkV4dGUKIGJvb2wgVjhQcm94eTo6c2V0Q29udGV4dERlYnVnSWQoaW50
IGRlYnVnSWQpCiB7CiAgICAgQVNTRVJUKGRlYnVnSWQgPiAwKTsKLSAgICBpZiAobV9jb250ZXh0
LklzRW1wdHkoKSkKKyAgICBpZiAoY29udGV4dCgpLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICBpZiAoIW1fY29udGV4dC0+
R2V0RGF0YSgpLT5Jc1VuZGVmaW5lZCgpKQorICAgIGlmICghY29udGV4dCgpLT5HZXREYXRhKCkt
PklzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHY4OjpDb250ZXh0
OjpTY29wZSBjb250ZXh0U2NvcGUobV9jb250ZXh0KTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUg
Y29udGV4dFNjb3BlKGNvbnRleHQoKSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjb250
ZXh0RGF0YSA9IHY4OjpPYmplY3Q6Ok5ldygpOwogICAgIGNvbnRleHREYXRhLT5TZXQodjg6OlN0
cmluZzo6TmV3KGtDb250ZXh0RGVidWdEYXRhVHlwZSksIHY4OjpTdHJpbmc6Ok5ldygicGFnZSIp
KTsKICAgICBjb250ZXh0RGF0YS0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhrQ29udGV4dERlYnVnRGF0
YVZhbHVlKSwgdjg6OkludGVnZXI6Ok5ldyhkZWJ1Z0lkKSk7Ci0gICAgbV9jb250ZXh0LT5TZXRE
YXRhKGNvbnRleHREYXRhKTsKKyAgICBjb250ZXh0KCktPlNldERhdGEoY29udGV4dERhdGEpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkocmV2aXNpb24g
NDgyMzkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAi
U2NyaXB0U291cmNlQ29kZS5oIiAvLyBmb3IgV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZQogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiIC8vIGZvciBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbgor
I2luY2x1ZGUgIlNoYXJlZFBlcnNpc3RlbnQuaCIKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIK
ICNpbmNsdWRlICJWOEV2ZW50TGlzdGVuZXJMaXN0LmgiCiAjaW5jbHVkZSAiVjhHQ0NvbnRyb2xs
ZXIuaCIKQEAgLTExNyw3ICsxMTgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAg
ICAgR2VuZXJhbEVycm9yCiAgICAgICAgIH07CiAKLSAgICAgICAgZXhwbGljaXQgVjhQcm94eShG
cmFtZSogZnJhbWUpIDogbV9mcmFtZShmcmFtZSksIG1faW5saW5lQ29kZShmYWxzZSksIG1fdGlt
ZXJDYWxsYmFjayhmYWxzZSksIG1fcmVjdXJzaW9uKDApIHsgfQorICAgICAgICBleHBsaWNpdCBW
OFByb3h5KEZyYW1lKiBmcmFtZSkKKyAgICAgICAgICAgIDogbV9mcmFtZShmcmFtZSksCisgICAg
ICAgICAgICAgIG1fY29udGV4dChTaGFyZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0Pjo6Y3JlYXRl
KCkpLAorICAgICAgICAgICAgICBtX2lubGluZUNvZGUoZmFsc2UpLAorICAgICAgICAgICAgICBt
X3RpbWVyQ2FsbGJhY2soZmFsc2UpLAorICAgICAgICAgICAgICBtX3JlY3Vyc2lvbigwKSB7IH0K
IAogICAgICAgICB+VjhQcm94eSgpOwogCkBAIC0yNTAsNiArMjU2LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAvLyBSZXR1cm5zIFY4IENvbnRleHQgb2YgYSBmcmFtZS4gSWYgbm9u
ZSBleGlzdHMsIGNyZWF0ZXMKICAgICAgICAgLy8gYSBuZXcgY29udGV4dC4gSXQgaXMgcG90ZW50
aWFsbHkgc2xvdyBhbmQgY29uc3VtZXMgbWVtb3J5LgogICAgICAgICBzdGF0aWMgdjg6OkxvY2Fs
PHY4OjpDb250ZXh0PiBjb250ZXh0KEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gc2hhcmVkX2NvbnRleHQoRnJhbWUqKTsK
ICAgICAgICAgc3RhdGljIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gbWFpbldvcmxkQ29udGV4dChG
cmFtZSopOwogICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjdXJyZW50Q29u
dGV4dCgpOwogCkBAIC0yOTAsMTAgKzI5NywxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHN0YXRpYyBpbnQgc291cmNlTGluZU51bWJlcigpOwogICAgICAgICBzdGF0aWMgU3RyaW5n
IHNvdXJjZU5hbWUoKTsKIAotICAgICAgICAvLyBSZXR1cm5zIGEgbG9jYWwgaGFuZGxlIG9mIHRo
ZSBjb250ZXh0LgotICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQoKQorICAg
ICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KCkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2NvbnRleHQpOworICAg
ICAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBQ
YXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gc2hhcmVkX2NvbnRleHQo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jb250ZXh0OwogICAgICAgICB9CiAK
ICAgICAgICAgYm9vbCBzZXRDb250ZXh0RGVidWdJZChpbnQgaWQpOwpAQCAtMzczLDcgKzM4NCw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBGcmFtZSogbV9mcmFtZTsKIAotICAg
ICAgICB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4gbV9jb250ZXh0OworICAgICAgICBSZWZQ
dHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBtX2NvbnRleHQ7CisKICAgICAgICAg
Ly8gRm9yIGVhY2ggcG9zc2libGUgdHlwZSBvZiB3cmFwcGVyLCB3ZSBrZWVwIGEgYm9pbGVycGxh
dGUgb2JqZWN0LgogICAgICAgICAvLyBUaGUgYm9pbGVycGxhdGUgaXMgdXNlZCB0byBjcmVhdGUg
YWRkaXRpb25hbCB3cmFwcGVycyBvZiB0aGUgc2FtZQogICAgICAgICAvLyB0eXBlLiAgV2Uga2Vl
cCBhIHNpbmdsZSBwZXJzaXN0ZW50IGhhbmRsZSB0byBhbiBhcnJheSBvZiB0aGU=
</data>
<flag name="commit-queue"
          id="20439"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39413</attachid>
            <date>2009-09-11 00:52:12 -0700</date>
            <delta_ts>2009-09-11 10:59:22 -0700</delta_ts>
            <desc>tweaks</desc>
            <filename>bug-29077-20090911095209.patch</filename>
            <type>text/plain</type>
            <size>21811</size>
            <attacher name="Christian Plesner Hansen">christian.plesner.hansen</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODI3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMDktMDktMTEgIENocmlzdGlhbiBQbGVzbmVyIEhhbnNlbiAgPGNo
cmlzdGlhbi5wbGVzbmVyLmhhbnNlbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW3Y4XSBTaGFyZSBwZXJzaXN0ZW50IGNvbnRleHQg
aGFuZGxlcyBiZXR3ZWVuIGV2ZW50cyAgICAgICAgCisgICAgICAgIENoYW5nZSBldmVudHMgdG8g
dXNlIGEgc2luZ2xlIHJlZi1jb3VudGVkIHNoYXJlZCBwZXJzaXN0ZW50IGhhbmRsZQorICAgICAg
ICB0byB0aGUgY29udGV4dCBpbiB3aGljaCB0byBydW4sIHJhdGhlciB0aGFuIGNyZWF0ZSBhIG5l
dworICAgICAgICBwZXJzaXN0ZW50IGhhbmRsZSBmb3IgZWFjaCBuZXcgZXZlbnQgd2hpY2ggcHV0
cyBwcmVzc3VyZSBvbiB0aGUKKyAgICAgICAgZ2MuCisgICAgICAgIAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwNzcKKworICAgICAgICAqIGJpbmRp
bmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY2hlZHVsZWRB
Y3Rpb246OmV4ZWN1dGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NoYXJlZFBlcnNpc3RlbnQu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRQZXJzaXN0ZW50OjpzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkUGVyc2lzdGVudDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlZFBlcnNpc3RlbnQ6OmRpc3Bvc2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmVkUGVyc2lzdGVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFBlcnNpc3Rl
bnQ6OlNoYXJlZFBlcnNpc3RlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RF
dmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4QWJzdHJhY3RFdmVudExpc3Rl
bmVyOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
QWJzdHJhY3RFdmVudExpc3RlbmVyLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRl
ZFdvcmxkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4SXNvbGF0ZWRXb3JsZDo6VjhJc29sYXRl
ZFdvcmxkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SXNvbGF0ZWRXb3JsZDo6flY4SXNvbGF0ZWRX
b3JsZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmg6CisgICAgICAg
IChXZWJDb3JlOjpWOElzb2xhdGVkV29ybGQ6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
VjhJc29sYXRlZFdvcmxkOjpzaGFyZWRfY29udGV4dCk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
VjhQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpldmFsdWF0ZUluTmV3Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpjcmVhdGVXcmFwcGVyRnJvbUNhY2hl
U2xvd0Nhc2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6aXNDb250ZXh0SW5pdGlhbGl6
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6dXBkYXRlRG9jdW1lbnRXcmFwcGVyQ2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y2xlYXJEb2N1bWVudFdyYXBwZXJDYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5OjpkaXNwb3NlQ29udGV4dEhhbmRsZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Y2xlYXJGb3JDbG9zZSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFByb3h5OjpjbGVhckZvck5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhQ
cm94eTo6c2V0U2VjdXJpdHlUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojp1cGRh
dGVEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojppbml0Q29udGV4dElmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnNoYXJlZF9jb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4UHJveHk6Om1haW5Xb3JsZENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhQcm94eTo6c2V0Q29udGV4dERlYnVnSWQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
UHJveHkuaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OlY4UHJveHkpOgorICAgICAgICAo
V2ViQ29yZTo6VjhQcm94eTo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpWOFByb3h5Ojpz
aGFyZWRfY29udGV4dCk6CisKIDIwMDktMDktMDggIEpvaG4gQWJkLUVsLU1hbGVrICA8amFtQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjaGVkdWxlZEFjdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiA0ODI3NikK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NoZWR1bGVkQWN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgU2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlKFY4UHJv
eHkqIHAKICAgICBBU1NFUlQocHJveHkpOwogCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOwotICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gcHJveHktPmNvbnRl
eHQoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBwcm94eS0+Y29u
dGV4dCgpOwogICAgIGlmICh2OENvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47IC8v
IEpTIG1heSBub3QgYmUgZW5hYmxlZC4KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9TaGFy
ZWRQZXJzaXN0ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TaGFyZWRQ
ZXJzaXN0ZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NoYXJlZFBl
cnNpc3RlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2hhcmVkUGVy
c2lzdGVudF9oCisjZGVmaW5lIFNoYXJlZFBlcnNpc3RlbnRfaAorCisjaW5jbHVkZSA8djguaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gQSBzaGFyZWFibGUgcmVmZXJlbmNlIHRv
IGEgdjggcGVyc2lzdGVudCBoYW5kbGUuICBVc2luZyBhIHNoYXJlZAorICAgIC8vIHBlcnNpc3Rl
bnQgYW55IG51bWJlciBvZiBvYmplY3RzIGNhbiBzaGFyZSBhIHJlZmVyZW5jZSB0byBhIHY4Cisg
ICAgLy8gb2JqZWN0IGFuZCB3aGVuIGl0IHNob3VsZCBubyBsb25nZXIgYmUgYWNjZXNzaWJsZSB0
aGUgb2JqZWN0J3MKKyAgICAvLyBvd25lciBjYW4gY2xlYXIgaXQuCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisgICAgY2xhc3MgU2hhcmVkUGVyc2lzdGVudCA6IHB1YmxpYyBXVEY6OlJlZkNv
dW50ZWQ8U2hhcmVkUGVyc2lzdGVudDxUPiA+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQg
c2V0KHY4OjpQZXJzaXN0ZW50PFQ+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBtX3Zh
bHVlID0gdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgdjg6OlBlcnNpc3RlbnQ8VD4gZ2V0KCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgICAgIH0KKyAgICAg
ICAgdm9pZCBkaXNwb3NlSGFuZGxlKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX3Zh
bHVlLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICBtX3ZhbHVlLkRpc3Bvc2UoKTsKKyAgICAg
ICAgICAgICAgbV92YWx1ZS5DbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8VD4gPiBjcmVhdGUodjg6OlBl
cnNpc3RlbnQ8VD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU2hhcmVkUGVyc2lzdGVudDxUPih2YWx1ZSkpOworICAgICAgICB9CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8VD4gPiBjcmVhdGUoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlKHY4OjpQZXJzaXN0ZW50PFQ+KCkpOworICAgICAg
ICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgZXhwbGljaXQgU2hhcmVkUGVyc2lzdGVudCh2ODo6
UGVyc2lzdGVudDxUPiB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7IH0KKyAgICAgICAgdjg6OlBl
cnNpc3RlbnQ8VD4gbV92YWx1ZTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBTaGFyZWRQZXJzaXN0ZW50X2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiA0ODI3NikKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw4ICs1Miw3IEBAIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpWOEFic3RyYWN0
RXZlbnQKICAgICAvLyBXZSBtaWdodCBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSB0aGUgcGFyc2Vy
LgogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAotICAgIG1fY29udGV4dC5zZXQo
VjhQcm94eTo6Y29udGV4dChtX2ZyYW1lKSk7Ci0gICAgbV9jb250ZXh0Lm1ha2VXZWFrKCk7Cisg
ICAgbV9jb250ZXh0ID0gVjhQcm94eTo6c2hhcmVkX2NvbnRleHQobV9mcmFtZSk7CiAKICAgICAv
LyBHZXQgdGhlIHBvc2l0aW9uIGluIHRoZSBzb3VyY2UgaWYgYW55LgogICAgIGlmIChtX2lzQXR0
cmlidXRlICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPnRva2VuaXplcigpKSB7CkBAIC0xMTksNyAr
MTE4LDEyIEBAIHZvaWQgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW4KIAogICAg
IHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IHY4Q29udGV4dCA9IG1fY29udGV4dC5nZXQoKTsKKyAgICBpZiAoIW1fY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IGxvY2FsIGhhbmRsZSBzaW5jZSB0
aGUgcGVyc2lzdGVudCBoYW5kbGUgc3RvcmVkIGluCisgICAgLy8gbV9jb250ZXh0IG1heSBiZSBk
aXNwb3NlZCBiZWZvcmUgd2UncmUgZG9uZS4KKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2
OENvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9jb250ZXh0LT5nZXQoKSk7
CiAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaAkocmV2aXNp
b24gNDgyNzYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkV2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJPd25IYW5kbGUuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCiAj
aW5jbHVkZSA8djguaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODksNyArOTAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGRlbGV0ZWQuIFNlZSBmYXN0L2RvbS9yZXBs
YWNlQ2hpbGQuaHRtbAogICAgICAgICAvLyBGSVhNRTogdGhpcyBjb3VsZCBob2xkIG1fZnJhbWUg
bGl2ZSB1bnRpbCB0aGUgZXZlbnQgbGlzdGVuZXIgaXMgZGVsZXRlZC4KICAgICAgICAgRnJhbWUq
IG1fZnJhbWU7Ci0gICAgICAgIE93bkhhbmRsZTx2ODo6Q29udGV4dD4gbV9jb250ZXh0OworICAg
ICAgICBSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBtX2NvbnRleHQ7CiAK
ICAgICAgICAgLy8gUG9zaXRpb24gaW4gdGhlIEhUTUwgc291cmNlIGZvciBIVE1MIGV2ZW50IGxp
c3RlbmVycy4KICAgICAgICAgaW50IG1fbGluZU51bWJlcjsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhJc29sYXRlZFdvcmxkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4SXNvbGF0ZWRXb3JsZC5jcHAJKHJldmlzaW9uIDQ4Mjc2KQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9WOElzb2xhdGVkV29ybGQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NywxOCArODcs
MTcgQEAgdm9pZCBWOElzb2xhdGVkV29ybGQ6OmV2YWx1YXRlKGNvbnN0IFZlYwogfQogCiBWOElz
b2xhdGVkV29ybGQ6OlY4SXNvbGF0ZWRXb3JsZCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250
ZXh0KQotICAgIDogbV9jb250ZXh0KHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0Pjo6TmV3KGNv
bnRleHQpKQorICAgIDogbV9jb250ZXh0KFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+Ojpj
cmVhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+OjpOZXcoY29udGV4dCkpKQogewogICAg
ICsraXNvbGF0ZWRXb3JsZENvdW50OwotICAgIG1fY29udGV4dC5NYWtlV2Vhayh0aGlzLCAmY29u
dGV4dFdlYWtSZWZlcmVuY2VDYWxsYmFjayk7Ci0gICAgbV9jb250ZXh0LT5HbG9iYWwoKS0+U2V0
SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6Omlzb2xhdGVkV29ybGQoKSwgdjg6OkV4
dGVybmFsOjpXcmFwKHRoaXMpKTsKKyAgICBtX2NvbnRleHQtPmdldCgpLk1ha2VXZWFrKHRoaXMs
ICZjb250ZXh0V2Vha1JlZmVyZW5jZUNhbGxiYWNrKTsKKyAgICBjb250ZXh0LT5HbG9iYWwoKS0+
U2V0SGlkZGVuVmFsdWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6Omlzb2xhdGVkV29ybGQoKSwgdjg6
OkV4dGVybmFsOjpXcmFwKHRoaXMpKTsKIH0KIAogVjhJc29sYXRlZFdvcmxkOjp+VjhJc29sYXRl
ZFdvcmxkKCkKIHsKICAgICAtLWlzb2xhdGVkV29ybGRDb3VudDsKLSAgICBtX2NvbnRleHQuRGlz
cG9zZSgpOwotICAgIG1fY29udGV4dC5DbGVhcigpOworICAgIG1fY29udGV4dC0+ZGlzcG9zZUhh
bmRsZSgpOwogfQogCiBWOElzb2xhdGVkV29ybGQqIFY4SXNvbGF0ZWRXb3JsZDo6Z2V0RW50ZXJl
ZEltcGwoKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOElzb2xhdGVkV29ybGQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SXNvbGF0ZWRXb3JsZC5oCShyZXZpc2lv
biA0ODI3NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJc29sYXRlZFdvcmxkLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAogI2luY2x1ZGUgIlY4RE9NTWFwLmgiCiAjaW5j
bHVkZSAiVjhJbmRleC5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIlNjcmlwdFNvdXJjZUNvZGUuaCIgIC8vIGZvciBXZWJDb3JlOjpT
Y3JpcHRTb3VyY2VDb2RlCiAKQEAgLTgzLDcgKzg0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAgICAgcmV0dXJuIGdldEVudGVyZWRJbXBsKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9
CisgICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQoKSB7IHJldHVybiBtX2Nv
bnRleHQtPmdldCgpOyB9CisgICAgICAgIFBhc3NSZWZQdHI8U2hhcmVkUGVyc2lzdGVudDx2ODo6
Q29udGV4dD4gPiBzaGFyZWRfY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQogCiAgICAg
ICAgIERPTURhdGFTdG9yZSogZ2V0RE9NRGF0YVN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9kb21E
YXRhU3RvcmUuZ2V0U3RvcmUoKTsgfQogCkBAIC05Nyw3ICs5OSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgICAgICAvLyBUaGUgdjg6OkNvbnRleHQgZm9yIHRoZSBpc29sYXRlZCB3b3Js
ZC4gIFRoaXMgb2JqZWN0IGlzIGtlZXAgb24gdGhlCiAgICAgICAgIC8vIGhlYXAgYXMgbG9uZyBh
cyB8bV9jb250ZXh0fCBoYXMgbm90IGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWQuCi0gICAgICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgICAgIFJlZlB0cjxTaGFy
ZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IG1fY29udGV4dDsKIAogICAgICAgICAvLyBUaGUg
YmFja2luZyBzdG9yZSBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkJ3MgRE9NIHdyYXBwZXJzLiAgVGhp
cyBjbGFzcwogICAgICAgICAvLyBkb2Vzbid0IGhhdmUgdmlzaWJpbGl0eSBpbnRvIHRoZSB3cmFw
cGVycy4gIFRoaXMgaGFuZGxlIHNpbXBseSBoZWxwcwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHku
Y3BwCShyZXZpc2lvbiA0ODI3NikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5NCw3ICsyOTQsNyBAQCB2b2lkIFY4UHJveHk6OmV2YWx1YXRl
SW5OZXdDb250ZXh0KGNvbnN0CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogCiAg
ICAgLy8gU2V0IHVwIHRoZSBET00gd2luZG93IGFzIHRoZSBwcm90b3R5cGUgb2YgdGhlIG5ldyBn
bG9iYWwgb2JqZWN0LgotICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHdpbmRvd0NvbnRleHQg
PSBtX2NvbnRleHQ7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gd2luZG93Q29udGV4dCA9
IGNvbnRleHQoKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdpbmRvd0dsb2JhbCA9IHdp
bmRvd0NvbnRleHQtPkdsb2JhbCgpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2luZG93
V3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRP
TVdJTkRPVywgd2luZG93R2xvYmFsKTsKIApAQCAtNDc4LDggKzQ3OCw4IEBAIHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiBWOFByb3h5OjpjcmVhdGVXcmEKICAgICAvLyBOb3QgaW4gY2FjaGUuCiAgICAg
aW50IGNsYXNzSW5kZXggPSBWOENsYXNzSW5kZXg6OlRvSW50KHR5cGUpOwogICAgIGluaXRDb250
ZXh0SWZOZWVkZWQoKTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUobV9jb250ZXh0KTsK
LSAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IFY4RE9NV3JhcHBlcjo6Z2V0
Q29uc3RydWN0b3IodHlwZSwgZ2V0SGlkZGVuT2JqZWN0UHJvdG90eXBlKG1fY29udGV4dCkpOwor
ICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KCkpOworICAgIHY4OjpMb2NhbDx2
ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0gVjhET01XcmFwcGVyOjpnZXRDb25zdHJ1Y3Rvcih0eXBl
LCBnZXRIaWRkZW5PYmplY3RQcm90b3R5cGUoY29udGV4dCgpKSk7CiAgICAgdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IGluc3RhbmNlID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKGZ1bmN0aW9u
KTsKICAgICBpZiAoIWluc3RhbmNlLklzRW1wdHkoKSkgewogICAgICAgICBtX3dyYXBwZXJCb2ls
ZXJwbGF0ZXMtPlNldCh2ODo6SW50ZWdlcjo6TmV3KGNsYXNzSW5kZXgpLCBpbnN0YW5jZSk7CkBA
IC00OTIsOSArNDkyLDkgQEAgYm9vbCBWOFByb3h5Ojppc0NvbnRleHRJbml0aWFsaXplZCgpCiB7
CiAgICAgLy8gbV9jb250ZXh0LCBtX2dsb2JhbCwgYW5kIG1fd3JhcHBlckJvaWxlcnBsYXRlcyBz
aG91bGQKICAgICAvLyBhbGwgYmUgbm9uLWVtcHR5IGlmIGlmIG1fY29udGV4dCBpcyBub24tZW1w
dHkuCi0gICAgQVNTRVJUKG1fY29udGV4dC5Jc0VtcHR5KCkgfHwgIW1fZ2xvYmFsLklzRW1wdHko
KSk7Ci0gICAgQVNTRVJUKG1fY29udGV4dC5Jc0VtcHR5KCkgfHwgIW1fd3JhcHBlckJvaWxlcnBs
YXRlcy5Jc0VtcHR5KCkpOwotICAgIHJldHVybiAhbV9jb250ZXh0LklzRW1wdHkoKTsKKyAgICBB
U1NFUlQoY29udGV4dCgpLklzRW1wdHkoKSB8fCAhbV9nbG9iYWwuSXNFbXB0eSgpKTsKKyAgICBB
U1NFUlQoY29udGV4dCgpLklzRW1wdHkoKSB8fCAhbV93cmFwcGVyQm9pbGVycGxhdGVzLklzRW1w
dHkoKSk7CisgICAgcmV0dXJuICFjb250ZXh0KCkuSXNFbXB0eSgpOwogfQogCiBET01XaW5kb3cq
IFY4UHJveHk6OnJldHJpZXZlV2luZG93KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQp
CkBAIC02NjAsMjEgKzY2MCwyMCBAQCB2b2lkIFY4UHJveHk6OnVwZGF0ZURvY3VtZW50V3JhcHBl
ckNhY2hlCiAgICAgICAgIGNsZWFyRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBtX2NvbnRleHQtPkdsb2JhbCgpLT5Gb3JjZVNldCh2ODo6U3RyaW5n
OjpOZXcoImRvY3VtZW50IiksIGRvY3VtZW50V3JhcHBlciwgc3RhdGljX2Nhc3Q8djg6OlByb3Bl
cnR5QXR0cmlidXRlPih2ODo6UmVhZE9ubHkgfCB2ODo6RG9udERlbGV0ZSkpOworICAgIGNvbnRl
eHQoKS0+R2xvYmFsKCktPkZvcmNlU2V0KHY4OjpTdHJpbmc6Ok5ldygiZG9jdW1lbnQiKSwgZG9j
dW1lbnRXcmFwcGVyLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpSZWFk
T25seSB8IHY4OjpEb250RGVsZXRlKSk7CiB9CiAKIHZvaWQgVjhQcm94eTo6Y2xlYXJEb2N1bWVu
dFdyYXBwZXJDYWNoZSgpCiB7Ci0gICAgQVNTRVJUKCFtX2NvbnRleHQuSXNFbXB0eSgpKTsKLSAg
ICBtX2NvbnRleHQtPkdsb2JhbCgpLT5Gb3JjZURlbGV0ZSh2ODo6U3RyaW5nOjpOZXcoImRvY3Vt
ZW50IikpOworICAgIEFTU0VSVCghY29udGV4dCgpLklzRW1wdHkoKSk7CisgICAgY29udGV4dCgp
LT5HbG9iYWwoKS0+Rm9yY2VEZWxldGUodjg6OlN0cmluZzo6TmV3KCJkb2N1bWVudCIpKTsKIH0K
IAogdm9pZCBWOFByb3h5OjpkaXNwb3NlQ29udGV4dEhhbmRsZXMoKQogewotICAgIGlmICghbV9j
b250ZXh0LklzRW1wdHkoKSkgeworICAgIGlmICghY29udGV4dCgpLklzRW1wdHkoKSkgewogICAg
ICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZERlc3Ryb3lTY3JpcHRDb250ZXh0
Rm9yRnJhbWUoKTsKLSAgICAgICAgbV9jb250ZXh0LkRpc3Bvc2UoKTsKLSAgICAgICAgbV9jb250
ZXh0LkNsZWFyKCk7CisgICAgICAgIHNoYXJlZF9jb250ZXh0KCktPmRpc3Bvc2VIYW5kbGUoKTsK
ICAgICB9CiAKICAgICBpZiAoIW1fd3JhcHBlckJvaWxlcnBsYXRlcy5Jc0VtcHR5KCkpIHsKQEAg
LTcwMiw3ICs3MDEsNyBAQCB2b2lkIFY4UHJveHk6OnJlbGVhc2VTdG9yYWdlTXV0ZXgoKQogCiB2
b2lkIFY4UHJveHk6OmNsZWFyRm9yQ2xvc2UoKQogewotICAgIGlmICghbV9jb250ZXh0LklzRW1w
dHkoKSkgeworICAgIGlmICghY29udGV4dCgpLklzRW1wdHkoKSkgewogICAgICAgICB2ODo6SGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAKICAgICAgICAgY2xlYXJEb2N1bWVudFdyYXBwZXIoKTsK
QEAgLTcxNCwxMSArNzEzLDExIEBAIHZvaWQgVjhQcm94eTo6Y2xlYXJGb3JOYXZpZ2F0aW9uKCkK
IHsKICAgICBkaXNjb25uZWN0RXZlbnRMaXN0ZW5lcnMoKTsKIAotICAgIGlmICghbV9jb250ZXh0
LklzRW1wdHkoKSkgeworICAgIGlmICghY29udGV4dCgpLklzRW1wdHkoKSkgewogICAgICAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlOwogICAgICAgICBjbGVhckRvY3VtZW50V3JhcHBlcigpOwog
Ci0gICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV9jb250ZXh0KTsKKyAg
ICAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShjb250ZXh0KCkpOwogCiAgICAg
ICAgIC8vIENsZWFyIHRoZSBkb2N1bWVudCB3cmFwcGVyIGNhY2hlIGJlZm9yZSB0dXJuaW5nIG9u
IGFjY2VzcyBjaGVja3Mgb24KICAgICAgICAgLy8gdGhlIG9sZCBET01XaW5kb3cgd3JhcHBlci4g
VGhpcyB3YXksIGFjY2VzcyB0byB0aGUgZG9jdW1lbnQgd3JhcHBlcgpAQCAtNzMxLDcgKzczMCw3
IEBAIHZvaWQgVjhQcm94eTo6Y2xlYXJGb3JOYXZpZ2F0aW9uKCkKICAgICAgICAgd3JhcHBlci0+
VHVybk9uQWNjZXNzQ2hlY2soKTsKIAogICAgICAgICAvLyBTZXBhcmF0ZSB0aGUgY29udGV4dCBm
cm9tIGl0cyBnbG9iYWwgb2JqZWN0LgotICAgICAgICBtX2NvbnRleHQtPkRldGFjaEdsb2JhbCgp
OworICAgICAgICBjb250ZXh0KCktPkRldGFjaEdsb2JhbCgpOwogCiAgICAgICAgIGRpc3Bvc2VD
b250ZXh0SGFuZGxlcygpOwogICAgIH0KQEAgLTc0Miw3ICs3NDEsNyBAQCB2b2lkIFY4UHJveHk6
OnNldFNlY3VyaXR5VG9rZW4oKQogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZnJhbWUtPmRv
Y3VtZW50KCk7CiAgICAgLy8gU2V0dXAgc2VjdXJpdHkgb3JpZ2luIGFuZCBzZWN1cml0eSB0b2tl
bi4KICAgICBpZiAoIWRvY3VtZW50KSB7Ci0gICAgICAgIG1fY29udGV4dC0+VXNlRGVmYXVsdFNl
Y3VyaXR5VG9rZW4oKTsKKyAgICAgICAgY29udGV4dCgpLT5Vc2VEZWZhdWx0U2VjdXJpdHlUb2tl
bigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC03NjIsMTQgKzc2MSwxNCBAQCB2b2lk
IFY4UHJveHk6OnNldFNlY3VyaXR5VG9rZW4oKQogICAgIC8vIGNhc2UsIHdlIHVzZSB0aGUgZ2xv
YmFsIG9iamVjdCBhcyB0aGUgc2VjdXJpdHkgdG9rZW4gdG8gYXZvaWQKICAgICAvLyBjYWxsaW5n
IGNhbkFjY2VzcyB3aGVuIGEgc2NyaXB0IGFjY2Vzc2VzIGl0cyBvd24gb2JqZWN0cy4KICAgICBp
ZiAodG9rZW4uaXNFbXB0eSgpIHx8IHRva2VuID09ICJudWxsIikgewotICAgICAgICBtX2NvbnRl
eHQtPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7CisgICAgICAgIGNvbnRleHQoKS0+VXNlRGVm
YXVsdFNlY3VyaXR5VG9rZW4oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIENTdHJp
bmcgdXRmOFRva2VuID0gdG9rZW4udXRmOCgpOwogICAgIC8vIE5PVEU6IFY4IGRvZXMgaWRlbnRp
dHkgY29tcGFyaXNvbiBpbiBmYXN0IHBhdGgsIG11c3QgdXNlIGEgc3ltYm9sCiAgICAgLy8gYXMg
dGhlIHNlY3VyaXR5IHRva2VuLgotICAgIG1fY29udGV4dC0+U2V0U2VjdXJpdHlUb2tlbih2ODo6
U3RyaW5nOjpOZXdTeW1ib2wodXRmOFRva2VuLmRhdGEoKSwgdXRmOFRva2VuLmxlbmd0aCgpKSk7
CisgICAgY29udGV4dCgpLT5TZXRTZWN1cml0eVRva2VuKHY4OjpTdHJpbmc6Ok5ld1N5bWJvbCh1
dGY4VG9rZW4uZGF0YSgpLCB1dGY4VG9rZW4ubGVuZ3RoKCkpKTsKIH0KIAogdm9pZCBWOFByb3h5
Ojp1cGRhdGVEb2N1bWVudCgpCkBAIC03ODgsNyArNzg3LDcgQEAgdm9pZCBWOFByb3h5Ojp1cGRh
dGVEb2N1bWVudCgpCiAgICAgaW5pdENvbnRleHRJZk5lZWRlZCgpOwogCiAgICAgLy8gQmFpbCBv
dXQgaWYgY29udGV4dCBpbml0aWFsaXphdGlvbiBmYWlsZWQuCi0gICAgaWYgKG1fY29udGV4dC5J
c0VtcHR5KCkpCisgICAgaWYgKGNvbnRleHQoKS5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIFdlIGhhdmUgYSBuZXcgZG9jdW1lbnQgYW5kIHdlIG5lZWQgdG8gdXBkYXRlIHRo
ZSBjYWNoZS4KQEAgLTk4OSw3ICs5ODgsNyBAQCBib29sIFY4UHJveHk6Omluc3RhbGxET01XaW5k
b3codjg6OkhhbmRsCiB2b2lkIFY4UHJveHk6OmluaXRDb250ZXh0SWZOZWVkZWQoKQogewogICAg
IC8vIEJhaWwgb3V0IGlmIHRoZSBjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQu
Ci0gICAgaWYgKCFtX2NvbnRleHQuSXNFbXB0eSgpKQorICAgIGlmICghY29udGV4dCgpLklzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQ3JlYXRlIGEgaGFuZGxlIHNjb3BlIGZv
ciBhbGwgbG9jYWwgaGFuZGxlcy4KQEAgLTEwMTQsMTcgKzEwMTMsMTggQEAgdm9pZCBWOFByb3h5
Ojppbml0Q29udGV4dElmTmVlZGVkKCkKICAgICAgICAgaXNWOEluaXRpYWxpemVkID0gdHJ1ZTsK
ICAgICB9CiAKLSAgICBtX2NvbnRleHQgPSBjcmVhdGVOZXdDb250ZXh0KG1fZ2xvYmFsLCAwKTsK
LSAgICBpZiAobV9jb250ZXh0LklzRW1wdHkoKSkKKworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpD
b250ZXh0PiBjb250ZXh0ID0gY3JlYXRlTmV3Q29udGV4dChtX2dsb2JhbCwgMCk7CisgICAgaWYg
KGNvbnRleHQuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zZXQo
Y29udGV4dCk7CiAKLSAgICAvLyBTdGFydGluZyBmcm9tIG5vdywgdXNlIGxvY2FsIGNvbnRleHQg
b25seS4KLSAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IHY4Q29udGV4dCA9IGNvbnRleHQoKTsK
LSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKHY4Q29udGV4dCk7CisKKyAgICB2
ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGNvbnRleHQpOwogCiAgICAgLy8gU3RvcmUg
dGhlIGZpcnN0IGdsb2JhbCBvYmplY3QgY3JlYXRlZCBzbyB3ZSBjYW4gcmV1c2UgaXQuCiAgICAg
aWYgKG1fZ2xvYmFsLklzRW1wdHkoKSkgewotICAgICAgICBtX2dsb2JhbCA9IHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+OjpOZXcodjhDb250ZXh0LT5HbG9iYWwoKSk7CisgICAgICAgIG1fZ2xv
YmFsID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhjb250ZXh0LT5HbG9iYWwoKSk7
CiAgICAgICAgIC8vIEJhaWwgb3V0IGlmIGFsbG9jYXRpb24gb2YgdGhlIGZpcnN0IGdsb2JhbCBv
YmplY3RzIGZhaWxzLgogICAgICAgICBpZiAobV9nbG9iYWwuSXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICBkaXNwb3NlQ29udGV4dEhhbmRsZXMoKTsKQEAgLTEwMzUsNyArMTAzNSw3IEBAIHZvaWQg
VjhQcm94eTo6aW5pdENvbnRleHRJZk5lZWRlZCgpCiAjZW5kaWYKICAgICB9CiAKLSAgICBpbnN0
YWxsSGlkZGVuT2JqZWN0UHJvdG90eXBlKG1fY29udGV4dCk7CisgICAgaW5zdGFsbEhpZGRlbk9i
amVjdFByb3RvdHlwZShjb250ZXh0KTsKICAgICBtX3dyYXBwZXJCb2lsZXJwbGF0ZXMgPSB2ODo6
UGVyc2lzdGVudDx2ODo6QXJyYXk+OjpOZXcodjg6OkFycmF5OjpOZXcoVjhDbGFzc0luZGV4OjpX
UkFQUEVSX1RZUEVfQ09VTlQpKTsKICAgICAvLyBCYWlsIG91dCBpZiBhbGxvY2F0aW9uIGZhaWxl
ZC4KICAgICBpZiAobV93cmFwcGVyQm9pbGVycGxhdGVzLklzRW1wdHkoKSkgewpAQCAtMTA0Niw3
ICsxMDQ2LDcgQEAgdm9pZCBWOFByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKCkKICAgICBWOEdD
Q29udHJvbGxlcjo6cmVnaXN0ZXJHbG9iYWxIYW5kbGUoUFJPWFksIHRoaXMsIG1fd3JhcHBlckJv
aWxlcnBsYXRlcyk7CiAjZW5kaWYKIAotICAgIGlmICghaW5zdGFsbERPTVdpbmRvdyh2OENvbnRl
eHQsIG1fZnJhbWUtPmRvbVdpbmRvdygpKSkKKyAgICBpZiAoIWluc3RhbGxET01XaW5kb3coY29u
dGV4dCwgbV9mcmFtZS0+ZG9tV2luZG93KCkpKQogICAgICAgICBkaXNwb3NlQ29udGV4dEhhbmRs
ZXMoKTsKIAogICAgIHVwZGF0ZURvY3VtZW50KCk7CkBAIC0xMTI5LDYgKzExMjksMjMgQEAgdjg6
OkxvY2FsPHY4OjpDb250ZXh0PiBWOFByb3h5Ojpjb250ZXh0KAogICAgIHJldHVybiBjb250ZXh0
OwogfQogCitQYXNzUmVmUHRyPFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+ID4gVjhQcm94
eTo6c2hhcmVkX2NvbnRleHQoRnJhbWUqIGZyYW1lKQoreworICAgIFY4UHJveHkgKnByb3h5ID0g
VjhQcm94eTo6cmV0cmlldmUoZnJhbWUpOworICAgIGlmICghcHJveHkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcHJveHktPmluaXRDb250ZXh0SWZOZWVkZWQoKTsKKyAgICBSZWZQdHI8U2hh
cmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBjb250ZXh0ID0gcHJveHktPnNoYXJlZF9jb250
ZXh0KCk7CisgICAgaWYgKFY4SXNvbGF0ZWRXb3JsZCogd29ybGQgPSBWOElzb2xhdGVkV29ybGQ6
OmdldEVudGVyZWQoKSkgeworICAgICAgICBjb250ZXh0ID0gd29ybGQtPnNoYXJlZF9jb250ZXh0
KCk7CisgICAgICAgIGlmIChmcmFtZSAhPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKGNvbnRleHQt
PmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBjb250
ZXh0OworfQorCiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFY4UHJveHk6Om1haW5Xb3JsZENvbnRl
eHQoRnJhbWUqIGZyYW1lKQogewogICAgIFY4UHJveHkqIHByb3h5ID0gcmV0cmlldmUoZnJhbWUp
OwpAQCAtMTEzNiw3ICsxMTUzLDcgQEAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBWOFByb3h5Ojpt
YWluV29ybAogICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0PigpOwogCiAgICAg
cHJveHktPmluaXRDb250ZXh0SWZOZWVkZWQoKTsKLSAgICByZXR1cm4gcHJveHktPmNvbnRleHQo
KTsKKyAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KHByb3h5LT5jb250ZXh0
KCkpOwogfQogCiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFY4UHJveHk6OmN1cnJlbnRDb250ZXh0
KCkKQEAgLTEyNjMsMTcgKzEyODAsMTcgQEAgdm9pZCBWOFByb3h5OjpyZWdpc3RlckV4dGVuc2lv
bih2ODo6RXh0ZQogYm9vbCBWOFByb3h5OjpzZXRDb250ZXh0RGVidWdJZChpbnQgZGVidWdJZCkK
IHsKICAgICBBU1NFUlQoZGVidWdJZCA+IDApOwotICAgIGlmIChtX2NvbnRleHQuSXNFbXB0eSgp
KQorICAgIGlmIChjb250ZXh0KCkuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIGlmICghbV9jb250ZXh0LT5HZXREYXRhKCkt
PklzVW5kZWZpbmVkKCkpCisgICAgaWYgKCFjb250ZXh0KCktPkdldERhdGEoKS0+SXNVbmRlZmlu
ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNv
bnRleHRTY29wZShtX2NvbnRleHQpOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2Nv
cGUoY29udGV4dCgpKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNvbnRleHREYXRhID0g
djg6Ok9iamVjdDo6TmV3KCk7CiAgICAgY29udGV4dERhdGEtPlNldCh2ODo6U3RyaW5nOjpOZXco
a0NvbnRleHREZWJ1Z0RhdGFUeXBlKSwgdjg6OlN0cmluZzo6TmV3KCJwYWdlIikpOwogICAgIGNv
bnRleHREYXRhLT5TZXQodjg6OlN0cmluZzo6TmV3KGtDb250ZXh0RGVidWdEYXRhVmFsdWUpLCB2
ODo6SW50ZWdlcjo6TmV3KGRlYnVnSWQpKTsKLSAgICBtX2NvbnRleHQtPlNldERhdGEoY29udGV4
dERhdGEpOworICAgIGNvbnRleHQoKS0+U2V0RGF0YShjb250ZXh0RGF0YSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCShyZXZpc2lvbiA0ODI3NikKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJTY3JpcHRTb3Vy
Y2VDb2RlLmgiIC8vIGZvciBXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIgLy8gZm9yIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luCisjaW5jbHVkZSAi
U2hhcmVkUGVyc2lzdGVudC5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUg
IlY4RXZlbnRMaXN0ZW5lckxpc3QuaCIKICNpbmNsdWRlICJWOEdDQ29udHJvbGxlci5oIgpAQCAt
MTE3LDcgKzExOCwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBHZW5lcmFs
RXJyb3IKICAgICAgICAgfTsKIAotICAgICAgICBleHBsaWNpdCBWOFByb3h5KEZyYW1lKiBmcmFt
ZSkgOiBtX2ZyYW1lKGZyYW1lKSwgbV9pbmxpbmVDb2RlKGZhbHNlKSwgbV90aW1lckNhbGxiYWNr
KGZhbHNlKSwgbV9yZWN1cnNpb24oMCkgeyB9CisgICAgICAgIGV4cGxpY2l0IFY4UHJveHkoRnJh
bWUqIGZyYW1lKQorICAgICAgICAgICAgOiBtX2ZyYW1lKGZyYW1lKSwKKyAgICAgICAgICAgICAg
bV9jb250ZXh0KFNoYXJlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+OjpjcmVhdGUoKSksCisgICAg
ICAgICAgICAgIG1faW5saW5lQ29kZShmYWxzZSksCisgICAgICAgICAgICAgIG1fdGltZXJDYWxs
YmFjayhmYWxzZSksCisgICAgICAgICAgICAgIG1fcmVjdXJzaW9uKDApIHsgfQogCiAgICAgICAg
IH5WOFByb3h5KCk7CiAKQEAgLTI1MCw2ICsyNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIC8vIFJldHVybnMgVjggQ29udGV4dCBvZiBhIGZyYW1lLiBJZiBub25lIGV4aXN0cywg
Y3JlYXRlcwogICAgICAgICAvLyBhIG5ldyBjb250ZXh0LiBJdCBpcyBwb3RlbnRpYWxseSBzbG93
IGFuZCBjb25zdW1lcyBtZW1vcnkuCiAgICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6OkNvbnRl
eHQ+IGNvbnRleHQoRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkUGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gPiBzaGFyZWRfY29udGV4dChGcmFtZSopOwogICAgICAgICBz
dGF0aWMgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBtYWluV29ybGRDb250ZXh0KEZyYW1lKik7CiAg
ICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGN1cnJlbnRDb250ZXh0KCk7CiAK
QEAgLTI5MCwxMCArMjk3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGlj
IGludCBzb3VyY2VMaW5lTnVtYmVyKCk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgc291cmNlTmFt
ZSgpOwogCi0gICAgICAgIC8vIFJldHVybnMgYSBsb2NhbCBoYW5kbGUgb2YgdGhlIGNvbnRleHQu
Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCgpCisgICAgICAgIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KG1fY29udGV4dCk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9jb250ZXh0LT5nZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8
U2hhcmVkUGVyc2lzdGVudDx2ODo6Q29udGV4dD4gPiBzaGFyZWRfY29udGV4dCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2NvbnRleHQ7CiAgICAgICAgIH0KIAogICAgICAgICBi
b29sIHNldENvbnRleHREZWJ1Z0lkKGludCBpZCk7CkBAIC0zNzMsNyArMzg0LDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgICAgIEZyYW1lKiBtX2ZyYW1lOwogCi0gICAgICAgIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgICAgIFJlZlB0cjxTaGFyZWRQ
ZXJzaXN0ZW50PHY4OjpDb250ZXh0PiA+IG1fY29udGV4dDsKKwogICAgICAgICAvLyBGb3IgZWFj
aCBwb3NzaWJsZSB0eXBlIG9mIHdyYXBwZXIsIHdlIGtlZXAgYSBib2lsZXJwbGF0ZSBvYmplY3Qu
CiAgICAgICAgIC8vIFRoZSBib2lsZXJwbGF0ZSBpcyB1c2VkIHRvIGNyZWF0ZSBhZGRpdGlvbmFs
IHdyYXBwZXJzIG9mIHRoZSBzYW1lCiAgICAgICAgIC8vIHR5cGUuICBXZSBrZWVwIGEgc2luZ2xl
IHBlcnNpc3RlbnQgaGFuZGxlIHRvIGFuIGFycmF5IG9mIHRoZQ==
</data>

          </attachment>
      

    </bug>

</bugzilla>