<?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>119949</bug_id>
          
          <creation_ts>2013-08-17 08:38:02 -0700</creation_ts>
          <short_desc>Factor Clipboard into drag and non-drag parts</short_desc>
          <delta_ts>2013-08-20 14:23:00 -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>DOM</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>115980</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>918302</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-17 08:38:02 -0700</bug_when>
    <thetext>Factor Clipboard into drag and non-drag parts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918305</commentid>
    <comment_count>1</comment_count>
      <attachid>208998</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-17 08:50:57 -0700</bug_when>
    <thetext>Created attachment 208998
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918306</commentid>
    <comment_count>2</comment_count>
      <attachid>208998</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-17 08:58:31 -0700</bug_when>
    <thetext>Comment on attachment 208998
Patch

Attachment 208998 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1465996</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918307</commentid>
    <comment_count>3</comment_count>
      <attachid>208998</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-17 08:59:29 -0700</bug_when>
    <thetext>Comment on attachment 208998
Patch

Attachment 208998 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1493097</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918308</commentid>
    <comment_count>4</comment_count>
      <attachid>208998</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-17 09:01:07 -0700</bug_when>
    <thetext>Comment on attachment 208998
Patch

Attachment 208998 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1433573</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918309</commentid>
    <comment_count>5</comment_count>
      <attachid>208998</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-17 09:09:13 -0700</bug_when>
    <thetext>Comment on attachment 208998
Patch

Attachment 208998 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1465995</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918311</commentid>
    <comment_count>6</comment_count>
      <attachid>208998</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-17 09:17:18 -0700</bug_when>
    <thetext>Comment on attachment 208998
Patch

Attachment 208998 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/1498129</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918312</commentid>
    <comment_count>7</comment_count>
      <attachid>208998</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-17 09:19:44 -0700</bug_when>
    <thetext>Comment on attachment 208998
Patch

Attachment 208998 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1493098</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918313</commentid>
    <comment_count>8</comment_count>
      <attachid>209000</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-17 09:21:09 -0700</bug_when>
    <thetext>Created attachment 209000
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918506</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-18 21:17:22 -0700</bug_when>
    <thetext>Committed r154260: &lt;http://trac.webkit.org/changeset/154260&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919178</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-08-20 12:59:14 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Committed r154260: &lt;http://trac.webkit.org/changeset/154260&gt;

This change breaks all builds that disable drag support, such as the iOS WebKit build (*), because we only declare Clipboard::hasData() when building with drag support enabled, but always define Clipboard::hasData() (since its implementation isn&apos;t surrounded by a &quot;ENABLE(DRAG_SUPPORT)&quot; guard).

I landed a build fix that defines Clipboard::hasData() when building with and without drag support in &lt;http://trac.webkit.org/changeset/154350&gt;.

Although Clipboard::hasData() is only used in DragController, I chose this approach as opposed to adding an ENABLE(DRAG_SUPPORT) guard around the implementation of Clipboard::hasData() (and the declaration and definition for the Pasteboard method of the same name) because Clipboard exposes other methods for interacting with the underlying pasteboard data when building without drag support, including Clipboard::{clear, get, set}Data() and it seemed strange to segregate hasData() from these other methods based on the availability of drag support. Let me know if we should segregate hasData() from the other Clipboard::*Data methods or if there is a better approach to fixing the build for ports that don&apos;t enable drag support.

(*) For completeness, the following is the error we get when we build the iOS port with this change:

Source/WebCore/dom/Clipboard.cpp:111:17: error: out-of-line definition of &apos;hasData&apos; does not match any declaration in &apos;WebCore::Clipboard&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919180</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-20 13:04:19 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Although Clipboard::hasData() is only used in DragController, I chose this approach as opposed to adding an ENABLE(DRAG_SUPPORT) guard around the implementation of Clipboard::hasData() (and the declaration and definition for the Pasteboard method of the same name) because Clipboard exposes other methods for interacting with the underlying pasteboard data when building without drag support

I would have done it the other way, fixing the .cpp file and putting the hasData function in the section for drag support. I am trying to thin out this class. I don’t want it to have lots of functions for logical completeness; I want it to be as small as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919231</commentid>
    <comment_count>12</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2013-08-20 14:23:00 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Although Clipboard::hasData() is only used in DragController, I chose this approach as opposed to adding an ENABLE(DRAG_SUPPORT) guard around the implementation of Clipboard::hasData() (and the declaration and definition for the Pasteboard method of the same name) because Clipboard exposes other methods for interacting with the underlying pasteboard data when building without drag support
&gt; 
&gt; I would have done it the other way, fixing the .cpp file and putting the hasData function in the section for drag support. I am trying to thin out this class. I don’t want it to have lots of functions for logical completeness; I want it to be as small as possible.

Filed bug #120088 to only declare and define Clipboard::hasData() when building with drag support.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208998</attachid>
            <date>2013-08-17 08:50:57 -0700</date>
            <delta_ts>2013-08-17 09:21:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119949-20130817085056.patch</filename>
            <type>text/plain</type>
            <size>27729</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU0MjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjExN2Q5NDUzYzE5N2Nm
NjE5MTc4OTNlZDkyYzk3OTg2ODg2ODhhYy4uOWRjNWE2N2NjNWE5NzgyNDBlMTlhOTc5MTEyMmEw
MTQ4YmJlNmY5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDU4IEBACiAyMDEzLTA4LTE3ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAorICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvMTE5OTQ5PiBGYWN0b3IgQ2xpcGJvYXJkIGludG8gZHJhZyBhbmQgbm9uLWRyYWcgcGFydHMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9D
bGlwYm9hcmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpDbGlwYm9hcmQpOiBN
b3ZlIHRoZSBDbGlwYm9hcmRUeXBlIGFyZ3VtZW50IHRvIGdvIGFmdGVyIHRoZSBwYXN0ZWJvYXJk
LgorICAgICAgICBJbml0aWFsaXplIHN0cmluZ3MgbW9yZSBlZmZpY2llbnRseS4gUHV0IGRyYWct
c3BlY2lmaWMgZGF0YSBtZW1iZXJzIGluc2lkZSBhbiBpZiBzdGF0ZW1lbnQuCisgICAgICAgIFJl
cGxhY2UgbV9jbGlwYm9hcmRUeXBlIHdpdGggbV9mb3JEcmFnLgorICAgICAgICAoV2ViQ29yZTo6
Q2xpcGJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUpOiBNb3ZlZCBmdW5jdGlvbiB1cCB0byBi
ZSBjbG9zZSB0byBjb25zdHJ1Y3Rvci4KKyAgICAgICAgUmVtb3ZlZCBleHBsaWNpdCBjbGlwYm9h
cmQgdHlwZSBzaW5jZSBjb25zdHJ1Y3RvciBub3cgZGVmYXVsdHMgdG8gY29weSBhbmQgcGFzdGUg
c3R5bGUuCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6OnNldEFjY2Vzc1BvbGljeSk6IFR3
ZWFrZWQgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6Z2V0RGF0YSk6IFB1
dCBkcmFnLXNwZWNpZmljIGNvZGUgaW5zaWRlICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6c2V0RGF0YSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkOjpmaWxlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkOjpkcm9wRWZmZWN0KTogQWRkZWQgdHJpdmlhbCBub24tZHJhZyB2ZXJzaW9ucyBvZiB0aGVz
ZSBmdW5jdGlvbnMgdG8KKyAgICAgICAgYmUgdXNlZCB3aGVuICFFTkFCTEUoRFJBR19TVVBQT1JU
KS4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6c2V0RHJvcEVmZmVjdCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjplZmZlY3RBbGxvd2VkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6OnNldEVmZmVjdEFsbG93ZWQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3ApOiBSZW5hbWVkIENs
aXBib2FyZDo6Y3JlYXRlIHRoYXQgdGFrZXMgRHJhZ0RhdGEKKyAgICAgICAgdG8gdGhpcywgYW5k
IGtlcCB0aGUgb3ZlcmxvYWQgdGhhdCBkb2VzIG5vdCBhcyB3ZWxsLiBNYWRlIHRoZSBEcmFnRGF0
YSBhcmd1bWVudCBhIGNvbnN0Ji4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6Y2FuU2V0
RHJhZ0ltYWdlKTogTW92ZWQgZG93biBoZXJlIHNpbmNlIGl0IGlzIGRyYWctc3BlY2lmaWMuCisg
ICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6OnVwZGF0ZURyYWdJbWFnZSk6IFVzZSBtX3Nob3Vs
ZFVwZGF0ZURyYWdJbWFnZSBkaXJlY3RseSBpbnN0ZWQgb2YKKyAgICAgICAgY2FsbGluZyBhIGRy
YWdTdGFydGVkIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6ZHJhZ09wRnJvbUlFT3ApOiBN
b3ZlZCB0aGlzIGZ1bmN0aW9uIGRvd24gaGVyZSB0byB0aGUgZHJhZy1zcGVjaWZpYyBzZWN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6SUVPcEZyb21EcmFnT3ApOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZDo6c291cmNlT3BlcmF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpDbGlwYm9hcmQ6OmRlc3RpbmF0aW9uT3BlcmF0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDbGlwYm9hcmQ6OnNldFNvdXJjZU9wZXJhdGlvbik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q2xpcGJvYXJkOjpzZXREZXN0aW5hdGlvbk9wZXJhdGlvbik6IERpdHRvLgorCisg
ICAgICAgICogZG9tL0NsaXBib2FyZC5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YgIk5v
ZGUuaCIgYW5kIGFkZGVkIGFuZCByZW1vdmVkIGZvcndhcmQKKyAgICAgICAgY2xhc3MgZGVjbGFy
YXRpb25zIGFzIHJlcXVpcmVkLiBSZW1vdmVkIG5vbi1oZWxwZnVsIGNvbW1lbnQuIE1hZGUgQ2xp
cGJvYXJkVHlwZSBhIHByaXZhdGUKKyAgICAgICAgaW1wbGVtZW50YXRpb24gZGV0YWlsLiBNb3Zl
ZCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIERPTSBBUEkgZG93biB0byBhIHNl
cGFyYXRlCisgICAgICAgIHNlY3Rpb24gbG93ZXIgZG93biBpbiB0aGUgY2xhc3MsIGFuZCBzb3J0
ZWQgdGhlIGZ1bmN0aW9ucyB0byBtYXRjaCB0aGUgb3JkZXIgdGhleSBhcHBlYXIKKyAgICAgICAg
aW4gdGhlIElETCBmaWxlLiBSZW1vdmVkIGlzRm9yQ29weUFuZFBhc3RlIGFuZCBpc0ZvckRyYWdB
bmREcm9wLiBDaGFuZ2VkIGRyb3BFZmZlY3QgYW5kCisgICAgICAgIGVmZmVjdEFsbG93ZWQgdG8g
bm90IGJlIGlubGluZWQuIE1vdmVkIHRoZSBsb25nIGNvbW1lbnQgYmVmb3JlIGNhblNldERyYWdJ
bWFnZSBpbnRvIHRoZQorICAgICAgICBpbXBsZW1lbnRhdGlvbiBzaW5jZSBpdCdzIGFuIGltcGxl
bWVudGF0aW9uIGRldGFpbC4gU2luY2UgdGhpcyBjbGFzcyBpcyBubyBsb25nZXIgcG9seW1vcnBo
aWMsCisgICAgICAgIHVzZSBvbmx5IHByaXZhdGUsIG5vdCBwcm90ZWN0ZWQuIE1ha2UgbV9kcmFn
SW1hZ2VFbGVtZW50IGFuIEVsZW1lbnQsIG5vdCBhIE5vZGUuCisKKyAgICAgICAgKiBkb20vQ2xp
cGJvYXJkLmlkbDogUmVtb3ZlZCBmbGFncyB0byB0ZWxsIGJpbmRpbmdzIGhvdyB0byBkZWFsIHdp
dGggbnVsbCBzdHJpbmdzLCBzaW5jZQorICAgICAgICB0aGVzZSBzdHJpbmcgcHJvcGVydGllcyBj
YW4gbmV2ZXIgcmV0dXJuIG51bGwgc3RyaW5ncyBhbnl3YXkuCisKKyAgICAgICAgKiBwYWdlL0Ry
YWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpkcmFn
RXhpdGVkKTogVXBkYXRlZCB0byBjYWxsIHRoZSBuZXcgY3JlYXRlRm9yRHJhZ0FuZERyb3AgZnVu
Y3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWcpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjp0cnlESFRNTERyYWcpOiBE
aXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW06IEFkZGVkIG5v
dy1uZWVkZWQgaW5jbHVkZSBvZiBFbGVtZW50Lmggc2luY2UgQ2xpcGJvYXJkLmggbm8KKyAgICAg
ICAgbG9uZ2VyIGluY2x1ZGVzIGl0LgorCisyMDEzLTA4LTE3ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKwogICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTE5OTQ4PiBDaGFu
Z2UgZHJhZy1zcGVjaWZpYyBjbGlwYm9hcmQgd3JpdGluZyBpbiBEcmFnQ29udHJvbGxlciB0byBn
byBzdHJhaWdodCB0byBQYXN0ZWJvYXJkLCBub3QgZm9yd2FyZCB0aHJvdWdoIENsaXBib2FyZAog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ2xpcGJvYXJkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQu
Y3BwCmluZGV4IDk0NTk4ZGY0NjNhNzAwZmExZTBmZDA0NTRkNDFkODg2MmIwZTliZWMuLjZkOWY1
NWI0M2Y5NjUwZDg1ZGU3ZjRhMmEwNzVlZTUwZDM4Yjk5OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9h
cmQuY3BwCkBAIC01NiwxNSArNTYsMjYgQEAgcHJpdmF0ZToKIAogI2VuZGlmCiAKLUNsaXBib2Fy
ZDo6Q2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIENsaXBib2FyZFR5cGUg
Y2xpcGJvYXJkVHlwZSwgUGFzc093blB0cjxQYXN0ZWJvYXJkPiBwYXN0ZWJvYXJkLCBib29sIGZv
ckZpbGVEcmFnKQorQ2xpcGJvYXJkOjpDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBv
bGljeSwgUGFzc093blB0cjxQYXN0ZWJvYXJkPiBwYXN0ZWJvYXJkLCBDbGlwYm9hcmRUeXBlIHR5
cGUsIGJvb2wgZm9yRmlsZURyYWcpCiAgICAgOiBtX3BvbGljeShwb2xpY3kpCi0gICAgLCBtX2Ry
b3BFZmZlY3QoInVuaW5pdGlhbGl6ZWQiKQotICAgICwgbV9lZmZlY3RBbGxvd2VkKCJ1bmluaXRp
YWxpemVkIikKLSAgICAsIG1fZHJhZ1N0YXJ0ZWQoZmFsc2UpCi0gICAgLCBtX2NsaXBib2FyZFR5
cGUoY2xpcGJvYXJkVHlwZSkKICAgICAsIG1fcGFzdGVib2FyZChwYXN0ZWJvYXJkKQorI2lmIEVO
QUJMRShEUkFHX1NVUFBPUlQpCisgICAgLCBtX2ZvckRyYWcodHlwZSAhPSBDb3B5QW5kUGFzdGUp
CiAgICAgLCBtX2ZvckZpbGVEcmFnKGZvckZpbGVEcmFnKQorICAgICwgbV9kcm9wRWZmZWN0KEFT
Q0lJTGl0ZXJhbCgidW5pbml0aWFsaXplZCIpKQorICAgICwgbV9lZmZlY3RBbGxvd2VkKEFTQ0lJ
TGl0ZXJhbCgidW5pbml0aWFsaXplZCIpKQorICAgICwgbV9zaG91bGRVcGRhdGVEcmFnSW1hZ2Uo
ZmFsc2UpCisjZW5kaWYKIHsKKyNpZiAhRU5BQkxFKERSQUdfU1VQUE9SVCkKKyAgICBBU1NFUlRf
VU5VU0VEKHR5cGUsIHR5cGUgPT0gQ29weUFuZFBhc3RlKTsKKyAgICBBU1NFUlRfVU5VU0VEKGZv
ckZpbGVEcmFnLCAhZm9yRmlsZURyYWcpOworI2VuZGlmCit9CisKK1Bhc3NSZWZQdHI8Q2xpcGJv
YXJkPiBDbGlwYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZShDbGlwYm9hcmRBY2Nlc3NQb2xp
Y3kgcG9saWN5KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkKHBvbGljeSwg
cG9saWN5ID09IENsaXBib2FyZFdyaXRhYmxlID8gUGFzdGVib2FyZDo6Y3JlYXRlUHJpdmF0ZSgp
IDogUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCkpKTsKIH0KIAogQ2xpcGJvYXJk
Ojp+Q2xpcGJvYXJkKCkKQEAgLTc3LDcgKzg4LDcgQEAgQ2xpcGJvYXJkOjp+Q2xpcGJvYXJkKCkK
ICAgICAKIHZvaWQgQ2xpcGJvYXJkOjpzZXRBY2Nlc3NQb2xpY3koQ2xpcGJvYXJkQWNjZXNzUG9s
aWN5IHBvbGljeSkKIHsKLSAgICAvLyBvbmNlIHlvdSBnbyBudW1iLCBjYW4gbmV2ZXIgZ28gYmFj
aworICAgIC8vIE9uY2UgdGhlIGNsaXBib2FyZCBnb2VzIG51bWIsIGl0IGNhbiBuZXZlciBnbyBi
YWNrLgogICAgIEFTU0VSVChtX3BvbGljeSAhPSBDbGlwYm9hcmROdW1iIHx8IHBvbGljeSA9PSBD
bGlwYm9hcmROdW1iKTsKICAgICBtX3BvbGljeSA9IHBvbGljeTsKIH0KQEAgLTEwMiwxMjEgKzEx
Myw2IEBAIGJvb2wgQ2xpcGJvYXJkOjpjYW5TZXREcmFnSW1hZ2UoKSBjb25zdAogICAgIHJldHVy
biBtX2NsaXBib2FyZFR5cGUgPT0gRHJhZ0FuZERyb3AgJiYgKG1fcG9saWN5ID09IENsaXBib2Fy
ZEltYWdlV3JpdGFibGUgfHwgbV9wb2xpY3kgPT0gQ2xpcGJvYXJkV3JpdGFibGUpOwogfQogCi0v
LyBUaGVzZSAiY29udmVyc2lvbiIgbWV0aG9kcyBhcmUgY2FsbGVkIGJ5IGJvdGggV2ViQ29yZSBh
bmQgV2ViS2l0LCBhbmQgbmV2ZXIgbWFrZSBzZW5zZSB0byBKUywgc28gd2UgZG9uJ3QKLS8vIHdv
cnJ5IGFib3V0IHNlY3VyaXR5IGZvciB0aGVzZS4gVGhleSBkb24ndCBhbGxvdyBhY2Nlc3MgdG8g
dGhlIHBhc3RlYm9hcmQgYW55d2F5LgotCi1zdGF0aWMgRHJhZ09wZXJhdGlvbiBkcmFnT3BGcm9t
SUVPcChjb25zdCBTdHJpbmcmIG9wKQotewotICAgIC8vIHllcCwgaXQncyByZWFsbHkganVzdCB0
aGlzIGZpeGVkIHNldAotICAgIGlmIChvcCA9PSAidW5pbml0aWFsaXplZCIpCi0gICAgICAgIHJl
dHVybiBEcmFnT3BlcmF0aW9uRXZlcnk7Ci0gICAgaWYgKG9wID09ICJub25lIikKLSAgICAgICAg
cmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOwotICAgIGlmIChvcCA9PSAiY29weSIpCi0gICAgICAg
IHJldHVybiBEcmFnT3BlcmF0aW9uQ29weTsKLSAgICBpZiAob3AgPT0gImxpbmsiKQotICAgICAg
ICByZXR1cm4gRHJhZ09wZXJhdGlvbkxpbms7Ci0gICAgaWYgKG9wID09ICJtb3ZlIikKLSAgICAg
ICAgcmV0dXJuIChEcmFnT3BlcmF0aW9uKShEcmFnT3BlcmF0aW9uR2VuZXJpYyB8IERyYWdPcGVy
YXRpb25Nb3ZlKTsKLSAgICBpZiAob3AgPT0gImNvcHlMaW5rIikKLSAgICAgICAgcmV0dXJuIChE
cmFnT3BlcmF0aW9uKShEcmFnT3BlcmF0aW9uQ29weSB8IERyYWdPcGVyYXRpb25MaW5rKTsKLSAg
ICBpZiAob3AgPT0gImNvcHlNb3ZlIikKLSAgICAgICAgcmV0dXJuIChEcmFnT3BlcmF0aW9uKShE
cmFnT3BlcmF0aW9uQ29weSB8IERyYWdPcGVyYXRpb25HZW5lcmljIHwgRHJhZ09wZXJhdGlvbk1v
dmUpOwotICAgIGlmIChvcCA9PSAibGlua01vdmUiKQotICAgICAgICByZXR1cm4gKERyYWdPcGVy
YXRpb24pKERyYWdPcGVyYXRpb25MaW5rIHwgRHJhZ09wZXJhdGlvbkdlbmVyaWMgfCBEcmFnT3Bl
cmF0aW9uTW92ZSk7Ci0gICAgaWYgKG9wID09ICJhbGwiKQotICAgICAgICByZXR1cm4gRHJhZ09w
ZXJhdGlvbkV2ZXJ5OwotICAgIHJldHVybiBEcmFnT3BlcmF0aW9uUHJpdmF0ZTsgIC8vIHJlYWxs
eSBhIG1hcmtlciBmb3IgIm5vIGNvbnZlcnNpb24iCi19Ci0KLXN0YXRpYyBTdHJpbmcgSUVPcEZy
b21EcmFnT3AoRHJhZ09wZXJhdGlvbiBvcCkKLXsKLSAgICBib29sIG1vdmVTZXQgPSAhISgoRHJh
Z09wZXJhdGlvbkdlbmVyaWMgfCBEcmFnT3BlcmF0aW9uTW92ZSkgJiBvcCk7Ci0gICAgCi0gICAg
aWYgKChtb3ZlU2V0ICYmIChvcCAmIERyYWdPcGVyYXRpb25Db3B5KSAmJiAob3AgJiBEcmFnT3Bl
cmF0aW9uTGluaykpCi0gICAgICAgIHx8IChvcCA9PSBEcmFnT3BlcmF0aW9uRXZlcnkpKQotICAg
ICAgICByZXR1cm4gImFsbCI7Ci0gICAgaWYgKG1vdmVTZXQgJiYgKG9wICYgRHJhZ09wZXJhdGlv
bkNvcHkpKQotICAgICAgICByZXR1cm4gImNvcHlNb3ZlIjsKLSAgICBpZiAobW92ZVNldCAmJiAo
b3AgJiBEcmFnT3BlcmF0aW9uTGluaykpCi0gICAgICAgIHJldHVybiAibGlua01vdmUiOwotICAg
IGlmICgob3AgJiBEcmFnT3BlcmF0aW9uQ29weSkgJiYgKG9wICYgRHJhZ09wZXJhdGlvbkxpbmsp
KQotICAgICAgICByZXR1cm4gImNvcHlMaW5rIjsKLSAgICBpZiAobW92ZVNldCkKLSAgICAgICAg
cmV0dXJuICJtb3ZlIjsKLSAgICBpZiAob3AgJiBEcmFnT3BlcmF0aW9uQ29weSkKLSAgICAgICAg
cmV0dXJuICJjb3B5IjsKLSAgICBpZiAob3AgJiBEcmFnT3BlcmF0aW9uTGluaykKLSAgICAgICAg
cmV0dXJuICJsaW5rIjsKLSAgICByZXR1cm4gIm5vbmUiOwotfQotCi1EcmFnT3BlcmF0aW9uIENs
aXBib2FyZDo6c291cmNlT3BlcmF0aW9uKCkgY29uc3QKLXsKLSAgICBEcmFnT3BlcmF0aW9uIG9w
ID0gZHJhZ09wRnJvbUlFT3AobV9lZmZlY3RBbGxvd2VkKTsKLSAgICBBU1NFUlQob3AgIT0gRHJh
Z09wZXJhdGlvblByaXZhdGUpOwotICAgIHJldHVybiBvcDsKLX0KLQotRHJhZ09wZXJhdGlvbiBD
bGlwYm9hcmQ6OmRlc3RpbmF0aW9uT3BlcmF0aW9uKCkgY29uc3QKLXsKLSAgICBEcmFnT3BlcmF0
aW9uIG9wID0gZHJhZ09wRnJvbUlFT3AobV9kcm9wRWZmZWN0KTsKLSAgICBBU1NFUlQob3AgPT0g
RHJhZ09wZXJhdGlvbkNvcHkgfHwgb3AgPT0gRHJhZ09wZXJhdGlvbk5vbmUgfHwgb3AgPT0gRHJh
Z09wZXJhdGlvbkxpbmsgfHwgb3AgPT0gKERyYWdPcGVyYXRpb24pKERyYWdPcGVyYXRpb25HZW5l
cmljIHwgRHJhZ09wZXJhdGlvbk1vdmUpIHx8IG9wID09IERyYWdPcGVyYXRpb25FdmVyeSk7Ci0g
ICAgcmV0dXJuIG9wOwotfQotCi12b2lkIENsaXBib2FyZDo6c2V0U291cmNlT3BlcmF0aW9uKERy
YWdPcGVyYXRpb24gb3ApCi17Ci0gICAgQVNTRVJUX0FSRyhvcCwgb3AgIT0gRHJhZ09wZXJhdGlv
blByaXZhdGUpOwotICAgIG1fZWZmZWN0QWxsb3dlZCA9IElFT3BGcm9tRHJhZ09wKG9wKTsKLX0K
LQotdm9pZCBDbGlwYm9hcmQ6OnNldERlc3RpbmF0aW9uT3BlcmF0aW9uKERyYWdPcGVyYXRpb24g
b3ApCi17Ci0gICAgQVNTRVJUX0FSRyhvcCwgb3AgPT0gRHJhZ09wZXJhdGlvbkNvcHkgfHwgb3Ag
PT0gRHJhZ09wZXJhdGlvbk5vbmUgfHwgb3AgPT0gRHJhZ09wZXJhdGlvbkxpbmsgfHwgb3AgPT0g
RHJhZ09wZXJhdGlvbkdlbmVyaWMgfHwgb3AgPT0gRHJhZ09wZXJhdGlvbk1vdmUgfHwgb3AgPT0g
KERyYWdPcGVyYXRpb24pKERyYWdPcGVyYXRpb25HZW5lcmljIHwgRHJhZ09wZXJhdGlvbk1vdmUp
KTsKLSAgICBtX2Ryb3BFZmZlY3QgPSBJRU9wRnJvbURyYWdPcChvcCk7Ci19Ci0KLXZvaWQgQ2xp
cGJvYXJkOjpzZXREcm9wRWZmZWN0KGNvbnN0IFN0cmluZyAmZWZmZWN0KQotewotICAgIGlmICgh
aXNGb3JEcmFnQW5kRHJvcCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgYXR0cmli
dXRlIG11c3QgaWdub3JlIGFueSBhdHRlbXB0cyB0byBzZXQgaXQgdG8gYSB2YWx1ZSBvdGhlciB0
aGFuIG5vbmUsIGNvcHksIGxpbmssIGFuZCBtb3ZlLiAKLSAgICBpZiAoZWZmZWN0ICE9ICJub25l
IiAmJiBlZmZlY3QgIT0gImNvcHkiICAmJiBlZmZlY3QgIT0gImxpbmsiICYmIGVmZmVjdCAhPSAi
bW92ZSIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBUaGUgc3BlYyBhY3R1YWxs
eSBhbGxvd3MgdGhpcyBpbiBhbGwgY2lyY3Vtc3RhbmNlcywgZXZlbiB0aG91Z2ggdGhlcmUncyBu
byBwb2ludCBpbgotICAgIC8vIHNldHRpbmcgdGhlIGRyb3AgZWZmZWN0IHdoZW4gdGhpcyBjb25k
aXRpb24gaXMgbm90IHRydWUuCi0gICAgaWYgKGNhblJlYWRUeXBlcygpKQotICAgICAgICBtX2Ry
b3BFZmZlY3QgPSBlZmZlY3Q7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkOjpzZXRFZmZlY3RBbGxvd2Vk
KGNvbnN0IFN0cmluZyAmZWZmZWN0KQotewotICAgIGlmICghaXNGb3JEcmFnQW5kRHJvcCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHJhZ09wRnJvbUlFT3AoZWZmZWN0KSA9PSBEcmFn
T3BlcmF0aW9uUHJpdmF0ZSkgewotICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgd2Fz
IG5vIGNvbnZlcnNpb24sIGFuZCB0aGUgZWZmZWN0QWxsb3dlZCB0aGF0Ci0gICAgICAgIC8vIHdl
IGFyZSBwYXNzZWQgaXNuJ3QgYSB2YWxpZCBlZmZlY3RBbGxvd2VkLCBzbyB3ZSBzaG91bGQgaWdu
b3JlIGl0LAotICAgICAgICAvLyBhbmQgbm90IHNldCBtX2VmZmVjdEFsbG93ZWQuCi0KLSAgICAg
ICAgLy8gVGhlIGF0dHJpYnV0ZSBtdXN0IGlnbm9yZSBhbnkgYXR0ZW1wdHMgdG8gc2V0IGl0IHRv
IGEgdmFsdWUgb3RoZXIgdGhhbiAKLSAgICAgICAgLy8gbm9uZSwgY29weSwgY29weUxpbmssIGNv
cHlNb3ZlLCBsaW5rLCBsaW5rTW92ZSwgbW92ZSwgYWxsLCBhbmQgdW5pbml0aWFsaXplZC4KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotCi0gICAgaWYgKGNhbldyaXRlRGF0YSgpKQotICAgICAg
ICBtX2VmZmVjdEFsbG93ZWQgPSBlZmZlY3Q7Ci19Ci0gICAgCi1QYXNzUmVmUHRyPENsaXBib2Fy
ZD4gQ2xpcGJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5
IHBvbGljeSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZChwb2xpY3ksIENv
cHlBbmRQYXN0ZSwgcG9saWN5ID09IENsaXBib2FyZFdyaXRhYmxlID8gUGFzdGVib2FyZDo6Y3Jl
YXRlUHJpdmF0ZSgpIDogUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCkpKTsKLX0K
LQogYm9vbCBDbGlwYm9hcmQ6Omhhc0RhdGEoKQogewogICAgIHJldHVybiBtX3Bhc3RlYm9hcmQt
Pmhhc0RhdGEoKTsKQEAgLTI0MCwxNyArMTM2LDI3IEBAIHZvaWQgQ2xpcGJvYXJkOjpjbGVhckRh
dGEoKQogCiBTdHJpbmcgQ2xpcGJvYXJkOjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29u
c3QKIHsKLSAgICBpZiAoIWNhblJlYWREYXRhKCkgfHwgbV9mb3JGaWxlRHJhZykKKyAgICBpZiAo
IWNhblJlYWREYXRhKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAorI2lmIEVOQUJMRShE
UkFHX1NVUFBPUlQpCisgICAgaWYgKG1fZm9yRmlsZURyYWcpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIG1fcGFzdGVib2FyZC0+cmVhZFN0cmluZyh0eXBl
KTsKIH0KIAogYm9vbCBDbGlwYm9hcmQ6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25z
dCBTdHJpbmcmIGRhdGEpCiB7Ci0gICAgaWYgKCFjYW5Xcml0ZURhdGEoKSB8fCBtX2ZvckZpbGVE
cmFnKQorICAgIGlmICghY2FuV3JpdGVEYXRhKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAor
I2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisgICAgaWYgKG1fZm9yRmlsZURyYWcpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIG1fcGFzdGVib2FyZC0+d3JpdGVT
dHJpbmcodHlwZSwgZGF0YSk7CiB9CiAKQEAgLTI2MiwxNCArMTY4LDIwIEBAIExpc3RIYXNoU2V0
PFN0cmluZz4gQ2xpcGJvYXJkOjp0eXBlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGFzdGVib2Fy
ZC0+dHlwZXMoKTsKIH0KIAotLy8gRklYTUU6IFdlIGNvdWxkIGNhY2hlIHRoZSBjb21wdXRlZCBm
aWxlTGlzdCBpZiBuZWNlc3NhcnkKLS8vIEN1cnJlbnRseSBlYWNoIGFjY2VzcyBnZXRzIGEgbmV3
IGNvcHksIHNldERhdGEoKSBtb2RpZmljYXRpb25zIHRvIHRoZQotLy8gY2xpcGJvYXJkIGFyZSBu
b3QgcmVmbGVjdGVkIGluIGFueSBGaWxlTGlzdCBvYmplY3RzIHRoZSBwYWdlIGhhcyBhY2Nlc3Nl
ZCBhbmQgc3RvcmVkCiBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmQ6OmZpbGVzKCkgY29u
c3QKIHsKLSAgICBpZiAoIWNhblJlYWREYXRhKCkgfHwgKG1fY2xpcGJvYXJkVHlwZSA9PSBEcmFn
QW5kRHJvcCAmJiAhbV9mb3JGaWxlRHJhZykpCisgICAgLy8gRklYTUU6IFdlIGNvdWxkIGNhY2hl
IHRoZSBjb21wdXRlZCBmaWxlIGxpc3QgaWYgaXQgd2FzIG5lY2Vzc2FyeSBhbmQgaGVscGZ1bC4K
KyAgICAvLyBDdXJyZW50bHksIGVhY2ggYWNjZXNzIGdldHMgYSBuZXcgY29weSwgYW5kIHRodXMg
c2V0RGF0YSgpIG1vZGlmaWNhdGlvbnMgdG8gdGhlCisgICAgLy8gY2xpcGJvYXJkIGFyZSBub3Qg
cmVmbGVjdGVkIGluIGFueSBGaWxlTGlzdCBvYmplY3RzIHRoZSBwYWdlIGhhcyBhY2Nlc3NlZCBh
bmQgc3RvcmVkLgorCisgICAgaWYgKCFjYW5SZWFkRGF0YSgpKQogICAgICAgICByZXR1cm4gRmls
ZUxpc3Q6OmNyZWF0ZSgpOwogCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKyAgICBpZiAobV9m
b3JEcmFnICYmICFtX2ZvckZpbGVEcmFnKQorICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0
ZSgpOworI2VuZGlmCisKICAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMgPSBtX3Bhc3RlYm9h
cmQtPnJlYWRGaWxlbmFtZXMoKTsKICAgICBSZWZQdHI8RmlsZUxpc3Q+IGZpbGVMaXN0ID0gRmls
ZUxpc3Q6OmNyZWF0ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNp
emUoKTsgKytpKQpAQCAtMjc5LDIzICsxOTEsNDcgQEAgUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xp
cGJvYXJkOjpmaWxlcygpIGNvbnN0CiAKICNpZiAhRU5BQkxFKERSQUdfU1VQUE9SVCkKIAorU3Ry
aW5nIENsaXBib2FyZDo6ZHJvcEVmZmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFTQ0lJTGl0
ZXJhbCgibm9uZSIpOworfQorCit2b2lkIENsaXBib2FyZDo6c2V0RHJvcEVmZmVjdChjb25zdCBT
dHJpbmcmKQoreworfQorCitTdHJpbmcgQ2xpcGJvYXJkOjplZmZlY3RBbGxvd2VkKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ1bmluaXRpYWxpemVkIik7Cit9CisKK3ZvaWQg
Q2xpcGJvYXJkOjpzZXRFZmZlY3RBbGxvd2VkKGNvbnN0IFN0cmluZyYpCit7Cit9CisKIHZvaWQg
Q2xpcGJvYXJkOjpzZXREcmFnSW1hZ2UoRWxlbWVudCosIGludCwgaW50KQogewogfQogCiAjZWxz
ZQogCi0vLyBGSVhNRTogU2hvdWxkIGJlIG5hbWVkIGNyZWF0ZUZvckRyYWdBbmREcm9wLgotLy8g
RklYTUU6IFNob3VsZCB0YWtlIGNvbnN0IERyYWdEYXRhJiBpbnN0ZWFkIG9mIERyYWdEYXRhKi4K
LS8vIEZJWE1FOiBTaG91bGQgbm90IHRha2UgRnJhbWUqLgotUGFzc1JlZlB0cjxDbGlwYm9hcmQ+
IENsaXBib2FyZDo6Y3JlYXRlKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIERyYWdEYXRh
KiBkcmFnRGF0YSwgRnJhbWUqKQorUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IENsaXBib2FyZDo6Y3Jl
YXRlRm9yRHJhZ0FuZERyb3AoKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJk
KHBvbGljeSwgRHJhZ0FuZERyb3AsIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKCpk
cmFnRGF0YSksIGRyYWdEYXRhLT5jb250YWluc0ZpbGVzKCkpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENsaXBib2FyZChDbGlwYm9hcmRXcml0YWJsZSwgUGFzdGVib2FyZDo6Y3JlYXRlRm9y
RHJhZ0FuZERyb3AoKSwgRHJhZ0FuZERyb3ApKTsKIH0KIAotUGFzc1JlZlB0cjxDbGlwYm9hcmQ+
IENsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoKQorUGFzc1JlZlB0cjxDbGlwYm9hcmQ+
IENsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBv
bGljeSwgY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ2xpcGJvYXJkKHBvbGljeSwgUGFzdGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoZHJh
Z0RhdGEpLCBEcmFnQW5kRHJvcCwgZHJhZ0RhdGEuY29udGFpbnNGaWxlcygpKSk7Cit9CisKK2Jv
b2wgQ2xpcGJvYXJkOjpjYW5TZXREcmFnSW1hZ2UoKSBjb25zdAogewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2xpcGJvYXJkKENsaXBib2FyZFdyaXRhYmxlLCBEcmFnQW5kRHJvcCwgUGFzdGVi
b2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoKSkpOworICAgIC8vIE5vdGUgdGhhdCB0aGUgc3Bl
YyBkb2Vzbid0IGFjdHVhbGx5IGFsbG93IGRyYWcgaW1hZ2UgbW9kaWZpY2F0aW9uIG91dHNpZGUg
dGhlIGRyYWdzdGFydAorICAgIC8vIGV2ZW50LiBUaGlzIGNhcGFiaWxpdHkgaXMgbWFpbnRhaW5l
ZCBmb3IgYmFja3dhcmRzIGNvbXBhdGlibGl0eSBmb3IgcG9ydHMgdGhhdCBoYXZlCisgICAgLy8g
c3VwcG9ydGVkIHRoaXMgaW4gdGhlIHBhc3QuIE9uIG1hbnkgcG9ydHMsIGF0dGVtcHRpbmcgdG8g
c2V0IGEgZHJhZyBpbWFnZSBvdXRzaWRlIHRoZQorICAgIC8vIGRyYWdzdGFydCBvcGVyYXRpb24g
aXMgYSBuby1vcCBhbnl3YXkuCisgICAgcmV0dXJuIG1fZm9yRHJhZyAmJiAobV9wb2xpY3kgPT0g
Q2xpcGJvYXJkSW1hZ2VXcml0YWJsZSB8fCBtX3BvbGljeSA9PSBDbGlwYm9hcmRXcml0YWJsZSk7
CiB9CiAKIHZvaWQgQ2xpcGJvYXJkOjpzZXREcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgaW50
IHgsIGludCB5KQpAQCAtMzI5LDcgKzI2NSw3IEBAIHZvaWQgQ2xpcGJvYXJkOjp1cGRhdGVEcmFn
SW1hZ2UoKQogewogICAgIC8vIERvbid0IGFsbG93IHNldHRpbmcgdGhlIGltYWdlIGlmIHdlIGhh
dmVuJ3Qgc3RhcnRlZCBkcmFnZ2luZyB5ZXQ7IHdlJ2xsIHJlbHkgb24gdGhlIGRyYWdnaW5nIGNv
ZGUKICAgICAvLyB0byBpbnN0YWxsIHRoaXMgZHJhZyBpbWFnZSBhcyBwYXJ0IG9mIGdldHRpbmcg
dGhlIGRyYWcga2lja2VkIG9mZi4KLSAgICBpZiAoIWRyYWdTdGFydGVkKCkpCisgICAgaWYgKCFt
X3Nob3VsZFVwZGF0ZURyYWdJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UG9pbnQg
Y29tcHV0ZWRIb3RTcG90OwpAQCAtMzY2LDYgKzMwMiwxMTcgQEAgdm9pZCBEcmFnSW1hZ2VMb2Fk
ZXI6OmltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSosIGNvbnN0IEludFJlY3QqKQogICAgIG1fY2xp
cGJvYXJkLT51cGRhdGVEcmFnSW1hZ2UoKTsKIH0KIAorc3RhdGljIERyYWdPcGVyYXRpb24gZHJh
Z09wRnJvbUlFT3AoY29uc3QgU3RyaW5nJiBvcGVyYXRpb24pCit7CisgICAgaWYgKG9wZXJhdGlv
biA9PSAidW5pbml0aWFsaXplZCIpCisgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uRXZlcnk7
CisgICAgaWYgKG9wZXJhdGlvbiA9PSAibm9uZSIpCisgICAgICAgIHJldHVybiBEcmFnT3BlcmF0
aW9uTm9uZTsKKyAgICBpZiAob3BlcmF0aW9uID09ICJjb3B5IikKKyAgICAgICAgcmV0dXJuIERy
YWdPcGVyYXRpb25Db3B5OworICAgIGlmIChvcGVyYXRpb24gPT0gImxpbmsiKQorICAgICAgICBy
ZXR1cm4gRHJhZ09wZXJhdGlvbkxpbms7CisgICAgaWYgKG9wZXJhdGlvbiA9PSAibW92ZSIpCisg
ICAgICAgIHJldHVybiAoRHJhZ09wZXJhdGlvbikoRHJhZ09wZXJhdGlvbkdlbmVyaWMgfCBEcmFn
T3BlcmF0aW9uTW92ZSk7CisgICAgaWYgKG9wZXJhdGlvbiA9PSAiY29weUxpbmsiKQorICAgICAg
ICByZXR1cm4gKERyYWdPcGVyYXRpb24pKERyYWdPcGVyYXRpb25Db3B5IHwgRHJhZ09wZXJhdGlv
bkxpbmspOworICAgIGlmIChvcGVyYXRpb24gPT0gImNvcHlNb3ZlIikKKyAgICAgICAgcmV0dXJu
IChEcmFnT3BlcmF0aW9uKShEcmFnT3BlcmF0aW9uQ29weSB8IERyYWdPcGVyYXRpb25HZW5lcmlj
IHwgRHJhZ09wZXJhdGlvbk1vdmUpOworICAgIGlmIChvcGVyYXRpb24gPT0gImxpbmtNb3ZlIikK
KyAgICAgICAgcmV0dXJuIChEcmFnT3BlcmF0aW9uKShEcmFnT3BlcmF0aW9uTGluayB8IERyYWdP
cGVyYXRpb25HZW5lcmljIHwgRHJhZ09wZXJhdGlvbk1vdmUpOworICAgIGlmIChvcGVyYXRpb24g
PT0gImFsbCIpCisgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uRXZlcnk7CisgICAgcmV0dXJu
IERyYWdPcGVyYXRpb25Qcml2YXRlOyAvLyByZWFsbHkgYSBtYXJrZXIgZm9yICJubyBjb252ZXJz
aW9uIgorfQorCitzdGF0aWMgY29uc3QgY2hhciogSUVPcEZyb21EcmFnT3AoRHJhZ09wZXJhdGlv
biBvcGVyYXRpb24pCit7CisgICAgYm9vbCBpc0dlbmVyaWNNb3ZlID0gb3BlcmF0aW9uICYgKERy
YWdPcGVyYXRpb25HZW5lcmljIHwgRHJhZ09wZXJhdGlvbk1vdmUpOworCisgICAgaWYgKChpc0dl
bmVyaWNNb3ZlICYmIChvcGVyYXRpb24gJiBEcmFnT3BlcmF0aW9uQ29weSkgJiYgKG9wZXJhdGlv
biAmIERyYWdPcGVyYXRpb25MaW5rKSkgfHwgb3BlcmF0aW9uID09IERyYWdPcGVyYXRpb25FdmVy
eSkKKyAgICAgICAgcmV0dXJuICJhbGwiOworICAgIGlmIChpc0dlbmVyaWNNb3ZlICYmIChvcGVy
YXRpb24gJiBEcmFnT3BlcmF0aW9uQ29weSkpCisgICAgICAgIHJldHVybiAiY29weU1vdmUiOwor
ICAgIGlmIChpc0dlbmVyaWNNb3ZlICYmIChvcGVyYXRpb24gJiBEcmFnT3BlcmF0aW9uTGluaykp
CisgICAgICAgIHJldHVybiAibGlua01vdmUiOworICAgIGlmICgob3BlcmF0aW9uICYgRHJhZ09w
ZXJhdGlvbkNvcHkpICYmIChvcGVyYXRpb24gJiBEcmFnT3BlcmF0aW9uTGluaykpCisgICAgICAg
IHJldHVybiAiY29weUxpbmsiOworICAgIGlmIChpc0dlbmVyaWNNb3ZlKQorICAgICAgICByZXR1
cm4gIm1vdmUiOworICAgIGlmIChvcGVyYXRpb24gJiBEcmFnT3BlcmF0aW9uQ29weSkKKyAgICAg
ICAgcmV0dXJuICJjb3B5IjsKKyAgICBpZiAob3BlcmF0aW9uICYgRHJhZ09wZXJhdGlvbkxpbmsp
CisgICAgICAgIHJldHVybiAibGluayI7CisgICAgcmV0dXJuICJub25lIjsKK30KKworRHJhZ09w
ZXJhdGlvbiBDbGlwYm9hcmQ6OnNvdXJjZU9wZXJhdGlvbigpIGNvbnN0Cit7CisgICAgRHJhZ09w
ZXJhdGlvbiBvcGVyYXRpb24gPSBkcmFnT3BGcm9tSUVPcChtX2VmZmVjdEFsbG93ZWQpOworICAg
IEFTU0VSVChvcGVyYXRpb24gIT0gRHJhZ09wZXJhdGlvblByaXZhdGUpOworICAgIHJldHVybiBv
cGVyYXRpb247Cit9CisKK0RyYWdPcGVyYXRpb24gQ2xpcGJvYXJkOjpkZXN0aW5hdGlvbk9wZXJh
dGlvbigpIGNvbnN0Cit7CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBkcmFnT3BGcm9t
SUVPcChtX2Ryb3BFZmZlY3QpOworICAgIEFTU0VSVChvcGVyYXRpb24gPT0gRHJhZ09wZXJhdGlv
bkNvcHkgfHwgb3BlcmF0aW9uID09IERyYWdPcGVyYXRpb25Ob25lIHx8IG9wZXJhdGlvbiA9PSBE
cmFnT3BlcmF0aW9uTGluayB8fCBvcGVyYXRpb24gPT0gKERyYWdPcGVyYXRpb24pKERyYWdPcGVy
YXRpb25HZW5lcmljIHwgRHJhZ09wZXJhdGlvbk1vdmUpIHx8IG9wZXJhdGlvbiA9PSBEcmFnT3Bl
cmF0aW9uRXZlcnkpOworICAgIHJldHVybiBvcGVyYXRpb247Cit9CisKK3ZvaWQgQ2xpcGJvYXJk
OjpzZXRTb3VyY2VPcGVyYXRpb24oRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24pCit7CisgICAgQVNT
RVJUX0FSRyhvcGVyYXRpb24sIG9wZXJhdGlvbiAhPSBEcmFnT3BlcmF0aW9uUHJpdmF0ZSk7Cisg
ICAgbV9lZmZlY3RBbGxvd2VkID0gSUVPcEZyb21EcmFnT3Aob3BlcmF0aW9uKTsKK30KKwordm9p
ZCBDbGlwYm9hcmQ6OnNldERlc3RpbmF0aW9uT3BlcmF0aW9uKERyYWdPcGVyYXRpb24gb3BlcmF0
aW9uKQoreworICAgIEFTU0VSVF9BUkcob3BlcmF0aW9uLCBvcGVyYXRpb24gPT0gRHJhZ09wZXJh
dGlvbkNvcHkgfHwgb3BlcmF0aW9uID09IERyYWdPcGVyYXRpb25Ob25lIHx8IG9wZXJhdGlvbiA9
PSBEcmFnT3BlcmF0aW9uTGluayB8fCBvcGVyYXRpb24gPT0gRHJhZ09wZXJhdGlvbkdlbmVyaWMg
fHwgb3BlcmF0aW9uID09IERyYWdPcGVyYXRpb25Nb3ZlIHx8IG9wZXJhdGlvbiA9PSAoRHJhZ09w
ZXJhdGlvbikoRHJhZ09wZXJhdGlvbkdlbmVyaWMgfCBEcmFnT3BlcmF0aW9uTW92ZSkpOworICAg
IG1fZHJvcEVmZmVjdCA9IElFT3BGcm9tRHJhZ09wKG9wZXJhdGlvbik7Cit9CisKK1N0cmluZyBD
bGlwYm9hcmQ6OmRyb3BFZmZlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2Ryb3BFZmZlY3Qg
PT0gInVuaW5pdGlhbGl6ZWQiID8gQVNDSUlMaXRlcmFsKCJub25lIikgOiBtX2Ryb3BFZmZlY3Q7
Cit9CisKK3ZvaWQgQ2xpcGJvYXJkOjpzZXREcm9wRWZmZWN0KGNvbnN0IFN0cmluZyYgZWZmZWN0
KQoreworICAgIGlmICghbV9mb3JEcmFnKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZWZm
ZWN0ICE9ICJub25lIiAmJiBlZmZlY3QgIT0gImNvcHkiICYmIGVmZmVjdCAhPSAibGluayIgJiYg
ZWZmZWN0ICE9ICJtb3ZlIikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoZSBz
cGVjIGFsbG93cyB0aGlzIGluIGFsbCBjaXJjdW1zdGFuY2VzLiBUaGVyZSBpcyBwcm9iYWJseSBu
byB2YWx1ZQorICAgIC8vIGluIGlnbm9yaW5nIGF0dGVtcHRzIHRvIGNoYW5nZSBpdC4KKyAgICBp
ZiAoIWNhblJlYWRUeXBlcygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Ryb3BFZmZlY3Qg
PSBlZmZlY3Q7Cit9CisKK1N0cmluZyBDbGlwYm9hcmQ6OmVmZmVjdEFsbG93ZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtX2VmZmVjdEFsbG93ZWQ7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkOjpzZXRF
ZmZlY3RBbGxvd2VkKGNvbnN0IFN0cmluZyYgZWZmZWN0KQoreworICAgIGlmICghbV9mb3JEcmFn
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZ25vcmUgYW55IGF0dGVtcHRzIHRvIHNldCBp
dCB0byBhbiB1bmtub3duIHZhbHVlLgorICAgIGlmIChkcmFnT3BGcm9tSUVPcChlZmZlY3QpID09
IERyYWdPcGVyYXRpb25Qcml2YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWNhbldy
aXRlRGF0YSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2VmZmVjdEFsbG93ZWQgPSBlZmZl
Y3Q7Cit9CisKICNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKaW5kZXggZWQxYTQwYTlhNjZiZjFmNWZiZmIx
ZDExMjM1MGVmNjBiODI4MmEwOC4uYzMwMDc2NmM2MzBjOGJmNWIyMzcxYjU5YjY5YjM1ZTc3YjMz
NDJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaApAQCAtMjksNyArMjksOSBAQAogI2luY2x1ZGUg
IkRyYWdBY3Rpb25zLmgiCiAjaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCiAjaW5jbHVkZSAiSW50UG9p
bnQuaCIKLSNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNywxMDQgKzM5LDgzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBEYXRhVHJhbnNmZXJJdGVtTGlzdDsKICAgICBjbGFzcyBE
cmFnRGF0YTsKICAgICBjbGFzcyBEcmFnSW1hZ2VMb2FkZXI7CisgICAgY2xhc3MgRWxlbWVudDsK
ICAgICBjbGFzcyBGaWxlTGlzdDsKLSAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBQYXN0ZWJv
YXJkOwotICAgIGNsYXNzIFJhbmdlOwogCi0gICAgLy8gU3RhdGUgYXZhaWxhYmxlIGR1cmluZyBJ
RSdzIGV2ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZQogICAgIGNsYXNzIENs
aXBib2FyZCA6IHB1YmxpYyBSZWZDb3VudGVkPENsaXBib2FyZD4gewogICAgIHB1YmxpYzoKLSAg
ICAgICAgLy8gV2hldGhlciB0aGlzIGNsaXBib2FyZCBpcyBzZXJ2aW5nIGEgZHJhZy1kcm9wIG9y
IGNvcHktcGFzdGUgcmVxdWVzdC4KLSAgICAgICAgZW51bSBDbGlwYm9hcmRUeXBlIHsKLSAgICAg
ICAgICAgIENvcHlBbmRQYXN0ZSwKLSAgICAgICAgICAgIERyYWdBbmREcm9wLAotICAgICAgICB9
OwotICAgICAgICAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBjcmVhdGUo
Q2xpcGJvYXJkQWNjZXNzUG9saWN5LCBEcmFnRGF0YSosIEZyYW1lKik7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENsaXBib2FyZD4gY3JlYXRlRm9yQ29weUFuZFBhc3RlKENsaXBib2FyZEFj
Y2Vzc1BvbGljeSk7CiAKICAgICAgICAgfkNsaXBib2FyZCgpOwogCi0gICAgICAgIGJvb2wgaXNG
b3JDb3B5QW5kUGFzdGUoKSBjb25zdCB7IHJldHVybiBtX2NsaXBib2FyZFR5cGUgPT0gQ29weUFu
ZFBhc3RlOyB9Ci0gICAgICAgIGJvb2wgaXNGb3JEcmFnQW5kRHJvcCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2xpcGJvYXJkVHlwZSA9PSBEcmFnQW5kRHJvcDsgfQotCi0gICAgICAgIFN0cmluZyBkcm9w
RWZmZWN0KCkgY29uc3QgeyByZXR1cm4gZHJvcEVmZmVjdElzVW5pbml0aWFsaXplZCgpID8gIm5v
bmUiIDogbV9kcm9wRWZmZWN0OyB9CisgICAgICAgIFN0cmluZyBkcm9wRWZmZWN0KCkgY29uc3Q7
CiAgICAgICAgIHZvaWQgc2V0RHJvcEVmZmVjdChjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgYm9v
bCBkcm9wRWZmZWN0SXNVbmluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9kcm9wRWZmZWN0
ID09ICJ1bmluaXRpYWxpemVkIjsgfQotICAgICAgICBTdHJpbmcgZWZmZWN0QWxsb3dlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZWZmZWN0QWxsb3dlZDsgfQorCisgICAgICAgIFN0cmluZyBlZmZlY3RB
bGxvd2VkKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0RWZmZWN0QWxsb3dlZChjb25zdCBTdHJp
bmcmKTsKLSAgICAKKworICAgICAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7
CisKKyAgICAgICAgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKKwogICAgICAg
ICB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwogICAgICAgICB2b2lkIGNsZWFy
RGF0YSgpOwogCi0gICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKEVsZW1lbnQqLCBpbnQgeCwgaW50
IHkpOwotCiAgICAgICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7
CisKICAgICAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKTsKLSAgICAKLSAgICAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0
OwotICAgICAgICBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OwogCi0gICAgICAg
IENhY2hlZEltYWdlKiBkcmFnSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2RyYWdJbWFnZS5nZXQo
KTsgfQotICAgICAgICBOb2RlKiBkcmFnSW1hZ2VFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9k
cmFnSW1hZ2VFbGVtZW50LmdldCgpOyB9Ci0gICAgICAgIAotICAgICAgICBEcmFnSW1hZ2VSZWYg
Y3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JiBkcmFnTG9jYXRpb24pIGNvbnN0OworICAgICAgICB2
b2lkIHNldERyYWdJbWFnZShFbGVtZW50KiwgaW50IHgsIGludCB5KTsKIAotICAgICAgICBib29s
IGhhc0RhdGEoKTsKKyNpZiBFTkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKKyAgICAgICAgUGFz
c1JlZlB0cjxEYXRhVHJhbnNmZXJJdGVtTGlzdD4gaXRlbXMoKSA9IDA7CisjZW5kaWYKIAogICAg
ICAgICB2b2lkIHNldEFjY2Vzc1BvbGljeShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kpOwogICAgICAg
ICBib29sIGNhblJlYWRUeXBlcygpIGNvbnN0OwogICAgICAgICBib29sIGNhblJlYWREYXRhKCkg
Y29uc3Q7CiAgICAgICAgIGJvb2wgY2FuV3JpdGVEYXRhKCkgY29uc3Q7Ci0gICAgICAgIC8vIE5v
dGUgdGhhdCB0aGUgc3BlYyBkb2Vzbid0IGFjdHVhbGx5IGFsbG93IGRyYWcgaW1hZ2UgbW9kaWZp
Y2F0aW9uIG91dHNpZGUgdGhlIGRyYWdzdGFydAotICAgICAgICAvLyBldmVudC4gVGhpcyBjYXBh
YmlsaXR5IGlzIG1haW50YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmxpdHkgZm9yIHBvcnRz
IHRoYXQgaGF2ZQotICAgICAgICAvLyBzdXBwb3J0ZWQgdGhpcyBpbiB0aGUgcGFzdC4gT24gbWFu
eSBwb3J0cywgYXR0ZW1wdGluZyB0byBzZXQgYSBkcmFnIGltYWdlIG91dHNpZGUgdGhlCi0gICAg
ICAgIC8vIGRyYWdzdGFydCBvcGVyYXRpb24gaXMgYSBuby1vcCBhbnl3YXkuCi0gICAgICAgIGJv
b2wgY2FuU2V0RHJhZ0ltYWdlKCkgY29uc3Q7CisKKyAgICAgICAgUGFzdGVib2FyZCYgcGFzdGVi
b2FyZCgpIHsgcmV0dXJuICptX3Bhc3RlYm9hcmQ7IH0KKworI2lmIEVOQUJMRShEUkFHX1NVUFBP
UlQpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZD4gY3JlYXRlRm9yRHJhZ0Fu
ZERyb3AoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBjcmVhdGVGb3JE
cmFnQW5kRHJvcChDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIGNvbnN0IERyYWdEYXRhJik7CisKKyAg
ICAgICAgYm9vbCBkcm9wRWZmZWN0SXNVbmluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9k
cm9wRWZmZWN0ID09ICJ1bmluaXRpYWxpemVkIjsgfQorICAgICAgICBib29sIGhhc0RhdGEoKTsK
IAogICAgICAgICBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbigpIGNvbnN0OwogICAgICAg
ICBEcmFnT3BlcmF0aW9uIGRlc3RpbmF0aW9uT3BlcmF0aW9uKCkgY29uc3Q7CiAgICAgICAgIHZv
aWQgc2V0U291cmNlT3BlcmF0aW9uKERyYWdPcGVyYXRpb24pOwogICAgICAgICB2b2lkIHNldERl
c3RpbmF0aW9uT3BlcmF0aW9uKERyYWdPcGVyYXRpb24pOwotICAgICAgICAKLSAgICAgICAgdm9p
ZCBzZXREcmFnSGFzU3RhcnRlZCgpIHsgbV9kcmFnU3RhcnRlZCA9IHRydWU7IH0KIAotI2lmIEVO
QUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQotICAgICAgICBQYXNzUmVmUHRyPERhdGFUcmFuc2Zl
ckl0ZW1MaXN0PiBpdGVtcygpID0gMDsKKyAgICAgICAgdm9pZCBzZXREcmFnSGFzU3RhcnRlZCgp
IHsgbV9zaG91bGRVcGRhdGVEcmFnSW1hZ2UgPSB0cnVlOyB9CisgICAgICAgIERyYWdJbWFnZVJl
ZiBjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGRyYWdMb2NhdGlvbikgY29uc3Q7CisgICAgICAg
IHZvaWQgdXBkYXRlRHJhZ0ltYWdlKCk7CiAjZW5kaWYKLSAgICAgICAgCi0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENsaXBib2FyZD4gY3JlYXRlRm9yQ29weUFuZFBhc3RlKENsaXBib2FyZEFj
Y2Vzc1BvbGljeSk7CiAKLSAgICAgICAgUGFzdGVib2FyZCYgcGFzdGVib2FyZCgpIHsgcmV0dXJu
ICptX3Bhc3RlYm9hcmQ7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBlbnVtIENsaXBib2FyZFR5
cGUgeyBDb3B5QW5kUGFzdGUsIERyYWdBbmREcm9wIH07CisgICAgICAgIENsaXBib2FyZChDbGlw
Ym9hcmRBY2Nlc3NQb2xpY3ksIFBhc3NPd25QdHI8UGFzdGVib2FyZD4sIENsaXBib2FyZFR5cGUg
PSBDb3B5QW5kUGFzdGUsIGJvb2wgZm9yRmlsZURyYWcgPSBmYWxzZSk7CiAKICNpZiBFTkFCTEUo
RFJBR19TVVBQT1JUKQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IGNyZWF0
ZUZvckRyYWdBbmREcm9wKCk7Ci0KLSAgICAgICAgdm9pZCB1cGRhdGVEcmFnSW1hZ2UoKTsKKyAg
ICAgICAgYm9vbCBjYW5TZXREcmFnSW1hZ2UoKSBjb25zdDsKICNlbmRpZgogCi0gICAgcHJvdGVj
dGVkOgotICAgICAgICBDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBDbGlwYm9hcmRU
eXBlLCBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+LCBib29sIGZvckZpbGVEcmFnID0gZmFsc2UpOwot
Ci0gICAgICAgIGJvb2wgZHJhZ1N0YXJ0ZWQoKSBjb25zdCB7IHJldHVybiBtX2RyYWdTdGFydGVk
OyB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIEluc3RlYWQgb2YgdXNpbmcg
dGhpcyBtZW1iZXIgZGlyZWN0bHksIHByZWZlciB0byB1c2UgdGhlIGNhbiooKSBtZXRob2RzIGFi
b3ZlLgogICAgICAgICBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgbV9wb2xpY3k7CisgICAgICAgIE93
blB0cjxQYXN0ZWJvYXJkPiBtX3Bhc3RlYm9hcmQ7CisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JU
KQorICAgICAgICBib29sIG1fZm9yRHJhZzsKKyAgICAgICAgYm9vbCBtX2ZvckZpbGVEcmFnOwog
ICAgICAgICBTdHJpbmcgbV9kcm9wRWZmZWN0OwogICAgICAgICBTdHJpbmcgbV9lZmZlY3RBbGxv
d2VkOwotICAgICAgICBib29sIG1fZHJhZ1N0YXJ0ZWQ7Ci0gICAgICAgIENsaXBib2FyZFR5cGUg
bV9jbGlwYm9hcmRUeXBlOwotICAgICAgICAKLSAgICBwcm90ZWN0ZWQ6CisgICAgICAgIGJvb2wg
bV9zaG91bGRVcGRhdGVEcmFnSW1hZ2U7CiAgICAgICAgIEludFBvaW50IG1fZHJhZ0xvY2F0aW9u
OwogICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gbV9kcmFnSW1hZ2U7
Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBtX2RyYWdJbWFnZUVsZW1lbnQ7Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBPd25QdHI8UGFzdGVib2FyZD4gbV9wYXN0ZWJvYXJkOwotICAgICAgICBib29s
IG1fZm9yRmlsZURyYWc7Ci0jaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKyAgICAgICAgUmVmUHRy
PEVsZW1lbnQ+IG1fZHJhZ0ltYWdlRWxlbWVudDsKICAgICAgICAgT3duUHRyPERyYWdJbWFnZUxv
YWRlcj4gbV9kcmFnSW1hZ2VMb2FkZXI7CiAjZW5kaWYKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJv
YXJkLmlkbAppbmRleCA5ZTdjMTJjZTE3Zjk4OThlYzlkZjI3MmEzYmZmYjgzYjczZTBlMTBiLi5i
YjhmYzE4ZjNhNzNlMDYwN2MzOGE1NTg3ZDI0ZGRjNWVlMmEyNDVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xp
cGJvYXJkLmlkbApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjUsMTEgKzI1LDEzIEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KKwogWwogICAgIFNraXBWVGFibGVWYWxpZGF0aW9uCiBdIGludGVyZmFjZSBDbGlw
Ym9hcmQgewotICAgICAgICAgICAgIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPVVuZGVmaW5l
ZF0gYXR0cmlidXRlIERPTVN0cmluZyBkcm9wRWZmZWN0OwotICAgICAgICAgICAgIFtUcmVhdFJl
dHVybmVkTnVsbFN0cmluZ0FzPVVuZGVmaW5lZF0gYXR0cmlidXRlIERPTVN0cmluZyBlZmZlY3RB
bGxvd2VkOworICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgZHJvcEVmZmVjdDsKKyAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nIGVmZmVjdEFsbG93ZWQ7CisKICAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25s
eSBhdHRyaWJ1dGUgQXJyYXkgdHlwZXM7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEZpbGVMaXN0
IGZpbGVzOwogCkBAIC00MCw0ICs0MiwzIEBACiAKICAgICBbQ29uZGl0aW9uYWw9REFUQV9UUkFO
U0ZFUl9JVEVNU10gcmVhZG9ubHkgYXR0cmlidXRlIERhdGFUcmFuc2Zlckl0ZW1MaXN0IGl0ZW1z
OwogfTsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCBjYWY1ZGVm
ZjhmMzFiZWZkOTJmNDQ2ZDA2ODFkMjM1YTdlYmE4MTMwLi5mZGY4MGMzMTc2YzkwNDljYTQ0MWY3
ZDEzYmMwODI5ZmJiMzc0MzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cApAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRyYWdFeGl0ZWQoRHJh
Z0RhdGEqIGRyYWdEYXRhKQogCiAgICAgaWYgKFJlZlB0cjxGcmFtZVZpZXc+IHYgPSBtYWluRnJh
bWUtPnZpZXcoKSkgewogICAgICAgICBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5ID0gKCFt
X2RvY3VtZW50VW5kZXJNb3VzZSB8fCBtX2RvY3VtZW50VW5kZXJNb3VzZS0+c2VjdXJpdHlPcmln
aW4oKS0+aXNMb2NhbCgpKSA/IENsaXBib2FyZFJlYWRhYmxlIDogQ2xpcGJvYXJkVHlwZXNSZWFk
YWJsZTsKLSAgICAgICAgUmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJkID0gQ2xpcGJvYXJkOjpj
cmVhdGUocG9saWN5LCBkcmFnRGF0YSwgbWFpbkZyYW1lKTsKKyAgICAgICAgUmVmUHRyPENsaXBi
b2FyZD4gY2xpcGJvYXJkID0gQ2xpcGJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChwb2xpY3ks
ICpkcmFnRGF0YSk7CiAgICAgICAgIGNsaXBib2FyZC0+c2V0U291cmNlT3BlcmF0aW9uKGRyYWdE
YXRhLT5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSk7CiAgICAgICAgIG1haW5GcmFtZS0+
ZXZlbnRIYW5kbGVyKCkuY2FuY2VsRHJhZ0FuZERyb3AoY3JlYXRlTW91c2VFdmVudChkcmFnRGF0
YSksIGNsaXBib2FyZC5nZXQoKSk7CiAgICAgICAgIGNsaXBib2FyZC0+c2V0QWNjZXNzUG9saWN5
KENsaXBib2FyZE51bWIpOyAgICAvLyBpbnZhbGlkYXRlIGNsaXBib2FyZCBoZXJlIGZvciBzZWN1
cml0eQpAQCAtMjIyLDcgKzIyMiw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnBlcmZvcm1EcmFn
KERyYWdEYXRhKiBkcmFnRGF0YSkKICAgICAgICAgYm9vbCBwcmV2ZW50ZWREZWZhdWx0ID0gZmFs
c2U7CiAgICAgICAgIGlmIChtYWluRnJhbWUtPnZpZXcoKSkgewogICAgICAgICAgICAgLy8gU2Vu
ZGluZyBhbiBldmVudCBjYW4gcmVzdWx0IGluIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgdmlldyBh
bmQgcGFydC4KLSAgICAgICAgICAgIFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IENsaXBi
b2FyZDo6Y3JlYXRlKENsaXBib2FyZFJlYWRhYmxlLCBkcmFnRGF0YSwgbWFpbkZyYW1lLmdldCgp
KTsKKyAgICAgICAgICAgIFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IENsaXBib2FyZDo6
Y3JlYXRlRm9yRHJhZ0FuZERyb3AoQ2xpcGJvYXJkUmVhZGFibGUsICpkcmFnRGF0YSk7CiAgICAg
ICAgICAgICBjbGlwYm9hcmQtPnNldFNvdXJjZU9wZXJhdGlvbihkcmFnRGF0YS0+ZHJhZ2dpbmdT
b3VyY2VPcGVyYXRpb25NYXNrKCkpOwogICAgICAgICAgICAgcHJldmVudGVkRGVmYXVsdCA9IG1h
aW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCkucGVyZm9ybURyYWdBbmREcm9wKGNyZWF0ZU1vdXNlRXZl
bnQoZHJhZ0RhdGEpLCBjbGlwYm9hcmQuZ2V0KCkpOwogICAgICAgICAgICAgY2xpcGJvYXJkLT5z
ZXRBY2Nlc3NQb2xpY3koQ2xpcGJvYXJkTnVtYik7IC8vIEludmFsaWRhdGUgY2xpcGJvYXJkIGhl
cmUgZm9yIHNlY3VyaXR5CkBAIC02MTQsNyArNjE0LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6
dHJ5REhUTUxEcmFnKERyYWdEYXRhKiBkcmFnRGF0YSwgRHJhZ09wZXJhdGlvbiYgb3BlcmF0aW9u
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9s
aWN5ID0gbV9kb2N1bWVudFVuZGVyTW91c2UtPnNlY3VyaXR5T3JpZ2luKCktPmlzTG9jYWwoKSA/
IENsaXBib2FyZFJlYWRhYmxlIDogQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZTsKLSAgICBSZWZQdHI8
Q2xpcGJvYXJkPiBjbGlwYm9hcmQgPSBDbGlwYm9hcmQ6OmNyZWF0ZShwb2xpY3ksIGRyYWdEYXRh
LCBtYWluRnJhbWUuZ2V0KCkpOworICAgIFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IENs
aXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AocG9saWN5LCAqZHJhZ0RhdGEpOwogICAgIERy
YWdPcGVyYXRpb24gc3JjT3BNYXNrID0gZHJhZ0RhdGEtPmRyYWdnaW5nU291cmNlT3BlcmF0aW9u
TWFzaygpOwogICAgIGNsaXBib2FyZC0+c2V0U291cmNlT3BlcmF0aW9uKHNyY09wTWFzayk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCmluZGV4IDMzOWE5
NjZhNDE0ZTJmN2ZlYTg3MjVmNmQ0NWNmODZlNTQzYjkzMjMuLmQ0YWZmZDYxZjk0OGZlMGVkOTBm
NmE2NzhjYmNiMjg0ODc3MDhhMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9DbGlwYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Ns
aXBib2FyZE1hYy5tbQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCAiRHJhZ0NsaWVudC5oIgog
I2ltcG9ydCAiRHJhZ0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkRyYWdEYXRhLmgiCisjaW1wb3J0
ICJFbGVtZW50LmgiCiAjaW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVTbmFwc2hvdHRp
bmdNYWMuaCIKICNpbXBvcnQgIlBhZ2UuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209000</attachid>
            <date>2013-08-17 09:21:09 -0700</date>
            <delta_ts>2013-08-18 12:26:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119949-20130817092108.patch</filename>
            <type>text/plain</type>
            <size>27657</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU0MjMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGZiZmNlZGZiMWZlYmRi
ZjQyZDRlYjk1ZjY0YTNhYTI4YmVjNTBhMS4uZWU5YWJmNzMyNDJjODA2Y2U4NmRiOTVkM2EyNmRj
NzdmZTU3ZmU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEzLTA4LTE3ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvMTE5OTQ5PiBGYWN0b3IgQ2xpcGJvYXJkIGludG8gZHJhZyBhbmQgbm9uLWRyYWcgcGFydHMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRvbS9D
bGlwYm9hcmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjpDbGlwYm9hcmQpOiBN
b3ZlIHRoZSBDbGlwYm9hcmRUeXBlIGFyZ3VtZW50IHRvIGdvIGFmdGVyIHRoZSBwYXN0ZWJvYXJk
LgorICAgICAgICBJbml0aWFsaXplIHN0cmluZ3MgbW9yZSBlZmZpY2llbnRseS4gUHV0IGRyYWct
c3BlY2lmaWMgZGF0YSBtZW1iZXJzIGluc2lkZSBhbiBpZiBzdGF0ZW1lbnQuCisgICAgICAgIFJl
cGxhY2UgbV9jbGlwYm9hcmRUeXBlIHdpdGggbV9mb3JEcmFnLgorICAgICAgICAoV2ViQ29yZTo6
Q2xpcGJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUpOiBNb3ZlZCBmdW5jdGlvbiB1cCB0byBi
ZSBjbG9zZSB0byBjb25zdHJ1Y3Rvci4KKyAgICAgICAgUmVtb3ZlZCBleHBsaWNpdCBjbGlwYm9h
cmQgdHlwZSBzaW5jZSBjb25zdHJ1Y3RvciBub3cgZGVmYXVsdHMgdG8gY29weSBhbmQgcGFzdGUg
c3R5bGUuCisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6OnNldEFjY2Vzc1BvbGljeSk6IFR3
ZWFrZWQgY29tbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6Z2V0RGF0YSk6IFB1
dCBkcmFnLXNwZWNpZmljIGNvZGUgaW5zaWRlICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6c2V0RGF0YSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkOjpmaWxlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJv
YXJkOjpkcm9wRWZmZWN0KTogQWRkZWQgdHJpdmlhbCBub24tZHJhZyB2ZXJzaW9ucyBvZiB0aGVz
ZSBmdW5jdGlvbnMgdG8KKyAgICAgICAgYmUgdXNlZCB3aGVuICFFTkFCTEUoRFJBR19TVVBQT1JU
KS4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6c2V0RHJvcEVmZmVjdCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkOjplZmZlY3RBbGxvd2VkKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6OnNldEVmZmVjdEFsbG93ZWQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3ApOiBSZW5hbWVkIENs
aXBib2FyZDo6Y3JlYXRlIHRoYXQgdGFrZXMgRHJhZ0RhdGEKKyAgICAgICAgdG8gdGhpcywgYW5k
IGtlcCB0aGUgb3ZlcmxvYWQgdGhhdCBkb2VzIG5vdCBhcyB3ZWxsLiBNYWRlIHRoZSBEcmFnRGF0
YSBhcmd1bWVudCBhIGNvbnN0Ji4KKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6Y2FuU2V0
RHJhZ0ltYWdlKTogTW92ZWQgZG93biBoZXJlIHNpbmNlIGl0IGlzIGRyYWctc3BlY2lmaWMuCisg
ICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6OnVwZGF0ZURyYWdJbWFnZSk6IFVzZSBtX3Nob3Vs
ZFVwZGF0ZURyYWdJbWFnZSBkaXJlY3RseSBpbnN0ZWQgb2YKKyAgICAgICAgY2FsbGluZyBhIGRy
YWdTdGFydGVkIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6ZHJhZ09wRnJvbUlFT3ApOiBN
b3ZlZCB0aGlzIGZ1bmN0aW9uIGRvd24gaGVyZSB0byB0aGUgZHJhZy1zcGVjaWZpYyBzZWN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6SUVPcEZyb21EcmFnT3ApOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNsaXBib2FyZDo6c291cmNlT3BlcmF0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpDbGlwYm9hcmQ6OmRlc3RpbmF0aW9uT3BlcmF0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDbGlwYm9hcmQ6OnNldFNvdXJjZU9wZXJhdGlvbik6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Q2xpcGJvYXJkOjpzZXREZXN0aW5hdGlvbk9wZXJhdGlvbik6IERpdHRvLgorCisg
ICAgICAgICogZG9tL0NsaXBib2FyZC5oOiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YgIk5v
ZGUuaCIgYW5kIGFkZGVkIGFuZCByZW1vdmVkIGZvcndhcmQKKyAgICAgICAgY2xhc3MgZGVjbGFy
YXRpb25zIGFzIHJlcXVpcmVkLiBSZW1vdmVkIG5vbi1oZWxwZnVsIGNvbW1lbnQuIE1hZGUgQ2xp
cGJvYXJkVHlwZSBhIHByaXZhdGUKKyAgICAgICAgaW1wbGVtZW50YXRpb24gZGV0YWlsLiBNb3Zl
ZCBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIERPTSBBUEkgZG93biB0byBhIHNl
cGFyYXRlCisgICAgICAgIHNlY3Rpb24gbG93ZXIgZG93biBpbiB0aGUgY2xhc3MsIGFuZCBzb3J0
ZWQgdGhlIGZ1bmN0aW9ucyB0byBtYXRjaCB0aGUgb3JkZXIgdGhleSBhcHBlYXIKKyAgICAgICAg
aW4gdGhlIElETCBmaWxlLiBSZW1vdmVkIGlzRm9yQ29weUFuZFBhc3RlIGFuZCBpc0ZvckRyYWdB
bmREcm9wLiBDaGFuZ2VkIGRyb3BFZmZlY3QgYW5kCisgICAgICAgIGVmZmVjdEFsbG93ZWQgdG8g
bm90IGJlIGlubGluZWQuIE1vdmVkIHRoZSBsb25nIGNvbW1lbnQgYmVmb3JlIGNhblNldERyYWdJ
bWFnZSBpbnRvIHRoZQorICAgICAgICBpbXBsZW1lbnRhdGlvbiBzaW5jZSBpdCdzIGFuIGltcGxl
bWVudGF0aW9uIGRldGFpbC4gU2luY2UgdGhpcyBjbGFzcyBpcyBubyBsb25nZXIgcG9seW1vcnBo
aWMsCisgICAgICAgIHVzZSBvbmx5IHByaXZhdGUsIG5vdCBwcm90ZWN0ZWQuIE1ha2UgbV9kcmFn
SW1hZ2VFbGVtZW50IGFuIEVsZW1lbnQsIG5vdCBhIE5vZGUuCisKKyAgICAgICAgKiBkb20vQ2xp
cGJvYXJkLmlkbDogUmVtb3ZlZCBmbGFncyB0byB0ZWxsIGJpbmRpbmdzIGhvdyB0byBkZWFsIHdp
dGggbnVsbCBzdHJpbmdzLCBzaW5jZQorICAgICAgICB0aGVzZSBzdHJpbmcgcHJvcGVydGllcyBj
YW4gbmV2ZXIgcmV0dXJuIG51bGwgc3RyaW5ncyBhbnl3YXkuCisKKyAgICAgICAgKiBwYWdlL0Ry
YWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpkcmFn
RXhpdGVkKTogVXBkYXRlZCB0byBjYWxsIHRoZSBuZXcgY3JlYXRlRm9yRHJhZ0FuZERyb3AgZnVu
Y3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWcpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjp0cnlESFRNTERyYWcpOiBE
aXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW06IEFkZGVkIG5v
dy1uZWVkZWQgaW5jbHVkZSBvZiBFbGVtZW50Lmggc2luY2UgQ2xpcGJvYXJkLmggbm8KKyAgICAg
ICAgbG9uZ2VyIGluY2x1ZGVzIGl0LgorCiAyMDEzLTA4LTE2ICBBbnR0aSBLb2l2aXN0byAgPGFu
dHRpQGFwcGxlLmNvbT4KIAogICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTE5ODg2PiBQ
c2V1ZG9FbGVtZW50IGlzIGFidXNpbmcgcGFyZW50IG5vZGUgcG9pbnRlcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xp
cGJvYXJkLmNwcAppbmRleCA5NDU5OGRmNDYzYTcwMGZhMWUwZmQwNDU0ZDQxZDg4NjJiMGU5YmVj
Li5lMTQwOTk5MTFiOTVkYjhmYTZjMWYxMmFiMWI2YjhjYWZmMDg4YjJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2xpcGJvYXJkLmNwcApAQCAtNTYsMTUgKzU2LDI2IEBAIHByaXZhdGU6CiAKICNlbmRpZgogCi1D
bGlwYm9hcmQ6OkNsaXBib2FyZChDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBDbGlwYm9h
cmRUeXBlIGNsaXBib2FyZFR5cGUsIFBhc3NPd25QdHI8UGFzdGVib2FyZD4gcGFzdGVib2FyZCwg
Ym9vbCBmb3JGaWxlRHJhZykKK0NsaXBib2FyZDo6Q2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1Bv
bGljeSBwb2xpY3ksIFBhc3NPd25QdHI8UGFzdGVib2FyZD4gcGFzdGVib2FyZCwgQ2xpcGJvYXJk
VHlwZSB0eXBlLCBib29sIGZvckZpbGVEcmFnKQogICAgIDogbV9wb2xpY3kocG9saWN5KQotICAg
ICwgbV9kcm9wRWZmZWN0KCJ1bmluaXRpYWxpemVkIikKLSAgICAsIG1fZWZmZWN0QWxsb3dlZCgi
dW5pbml0aWFsaXplZCIpCi0gICAgLCBtX2RyYWdTdGFydGVkKGZhbHNlKQotICAgICwgbV9jbGlw
Ym9hcmRUeXBlKGNsaXBib2FyZFR5cGUpCiAgICAgLCBtX3Bhc3RlYm9hcmQocGFzdGVib2FyZCkK
KyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorICAgICwgbV9mb3JEcmFnKHR5cGUgIT0gQ29weUFu
ZFBhc3RlKQogICAgICwgbV9mb3JGaWxlRHJhZyhmb3JGaWxlRHJhZykKKyAgICAsIG1fZHJvcEVm
ZmVjdChBU0NJSUxpdGVyYWwoInVuaW5pdGlhbGl6ZWQiKSkKKyAgICAsIG1fZWZmZWN0QWxsb3dl
ZChBU0NJSUxpdGVyYWwoInVuaW5pdGlhbGl6ZWQiKSkKKyAgICAsIG1fc2hvdWxkVXBkYXRlRHJh
Z0ltYWdlKGZhbHNlKQorI2VuZGlmCiB7CisjaWYgIUVOQUJMRShEUkFHX1NVUFBPUlQpCisgICAg
QVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IENvcHlBbmRQYXN0ZSk7CisgICAgQVNTRVJUX1VO
VVNFRChmb3JGaWxlRHJhZywgIWZvckZpbGVEcmFnKTsKKyNlbmRpZgorfQorCitQYXNzUmVmUHRy
PENsaXBib2FyZD4gQ2xpcGJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoQ2xpcGJvYXJkQWNj
ZXNzUG9saWN5IHBvbGljeSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2FyZChw
b2xpY3ksIHBvbGljeSA9PSBDbGlwYm9hcmRXcml0YWJsZSA/IFBhc3RlYm9hcmQ6OmNyZWF0ZVBy
aXZhdGUoKSA6IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKSk7CiB9CiAKIENs
aXBib2FyZDo6fkNsaXBib2FyZCgpCkBAIC03Nyw3ICs4OCw3IEBAIENsaXBib2FyZDo6fkNsaXBi
b2FyZCgpCiAgICAgCiB2b2lkIENsaXBib2FyZDo6c2V0QWNjZXNzUG9saWN5KENsaXBib2FyZEFj
Y2Vzc1BvbGljeSBwb2xpY3kpCiB7Ci0gICAgLy8gb25jZSB5b3UgZ28gbnVtYiwgY2FuIG5ldmVy
IGdvIGJhY2sKKyAgICAvLyBPbmNlIHRoZSBjbGlwYm9hcmQgZ29lcyBudW1iLCBpdCBjYW4gbmV2
ZXIgZ28gYmFjay4KICAgICBBU1NFUlQobV9wb2xpY3kgIT0gQ2xpcGJvYXJkTnVtYiB8fCBwb2xp
Y3kgPT0gQ2xpcGJvYXJkTnVtYik7CiAgICAgbV9wb2xpY3kgPSBwb2xpY3k7CiB9CkBAIC05Nywx
MjYgKzEwOCw2IEBAIGJvb2wgQ2xpcGJvYXJkOjpjYW5Xcml0ZURhdGEoKSBjb25zdAogICAgIHJl
dHVybiBtX3BvbGljeSA9PSBDbGlwYm9hcmRXcml0YWJsZTsKIH0KIAotYm9vbCBDbGlwYm9hcmQ6
OmNhblNldERyYWdJbWFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY2xpcGJvYXJkVHlwZSA9
PSBEcmFnQW5kRHJvcCAmJiAobV9wb2xpY3kgPT0gQ2xpcGJvYXJkSW1hZ2VXcml0YWJsZSB8fCBt
X3BvbGljeSA9PSBDbGlwYm9hcmRXcml0YWJsZSk7Ci19Ci0KLS8vIFRoZXNlICJjb252ZXJzaW9u
IiBtZXRob2RzIGFyZSBjYWxsZWQgYnkgYm90aCBXZWJDb3JlIGFuZCBXZWJLaXQsIGFuZCBuZXZl
ciBtYWtlIHNlbnNlIHRvIEpTLCBzbyB3ZSBkb24ndAotLy8gd29ycnkgYWJvdXQgc2VjdXJpdHkg
Zm9yIHRoZXNlLiBUaGV5IGRvbid0IGFsbG93IGFjY2VzcyB0byB0aGUgcGFzdGVib2FyZCBhbnl3
YXkuCi0KLXN0YXRpYyBEcmFnT3BlcmF0aW9uIGRyYWdPcEZyb21JRU9wKGNvbnN0IFN0cmluZyYg
b3ApCi17Ci0gICAgLy8geWVwLCBpdCdzIHJlYWxseSBqdXN0IHRoaXMgZml4ZWQgc2V0Ci0gICAg
aWYgKG9wID09ICJ1bmluaXRpYWxpemVkIikKLSAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25F
dmVyeTsKLSAgICBpZiAob3AgPT0gIm5vbmUiKQotICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlv
bk5vbmU7Ci0gICAgaWYgKG9wID09ICJjb3B5IikKLSAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRp
b25Db3B5OwotICAgIGlmIChvcCA9PSAibGluayIpCi0gICAgICAgIHJldHVybiBEcmFnT3BlcmF0
aW9uTGluazsKLSAgICBpZiAob3AgPT0gIm1vdmUiKQotICAgICAgICByZXR1cm4gKERyYWdPcGVy
YXRpb24pKERyYWdPcGVyYXRpb25HZW5lcmljIHwgRHJhZ09wZXJhdGlvbk1vdmUpOwotICAgIGlm
IChvcCA9PSAiY29weUxpbmsiKQotICAgICAgICByZXR1cm4gKERyYWdPcGVyYXRpb24pKERyYWdP
cGVyYXRpb25Db3B5IHwgRHJhZ09wZXJhdGlvbkxpbmspOwotICAgIGlmIChvcCA9PSAiY29weU1v
dmUiKQotICAgICAgICByZXR1cm4gKERyYWdPcGVyYXRpb24pKERyYWdPcGVyYXRpb25Db3B5IHwg
RHJhZ09wZXJhdGlvbkdlbmVyaWMgfCBEcmFnT3BlcmF0aW9uTW92ZSk7Ci0gICAgaWYgKG9wID09
ICJsaW5rTW92ZSIpCi0gICAgICAgIHJldHVybiAoRHJhZ09wZXJhdGlvbikoRHJhZ09wZXJhdGlv
bkxpbmsgfCBEcmFnT3BlcmF0aW9uR2VuZXJpYyB8IERyYWdPcGVyYXRpb25Nb3ZlKTsKLSAgICBp
ZiAob3AgPT0gImFsbCIpCi0gICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uRXZlcnk7Ci0gICAg
cmV0dXJuIERyYWdPcGVyYXRpb25Qcml2YXRlOyAgLy8gcmVhbGx5IGEgbWFya2VyIGZvciAibm8g
Y29udmVyc2lvbiIKLX0KLQotc3RhdGljIFN0cmluZyBJRU9wRnJvbURyYWdPcChEcmFnT3BlcmF0
aW9uIG9wKQotewotICAgIGJvb2wgbW92ZVNldCA9ICEhKChEcmFnT3BlcmF0aW9uR2VuZXJpYyB8
IERyYWdPcGVyYXRpb25Nb3ZlKSAmIG9wKTsKLSAgICAKLSAgICBpZiAoKG1vdmVTZXQgJiYgKG9w
ICYgRHJhZ09wZXJhdGlvbkNvcHkpICYmIChvcCAmIERyYWdPcGVyYXRpb25MaW5rKSkKLSAgICAg
ICAgfHwgKG9wID09IERyYWdPcGVyYXRpb25FdmVyeSkpCi0gICAgICAgIHJldHVybiAiYWxsIjsK
LSAgICBpZiAobW92ZVNldCAmJiAob3AgJiBEcmFnT3BlcmF0aW9uQ29weSkpCi0gICAgICAgIHJl
dHVybiAiY29weU1vdmUiOwotICAgIGlmIChtb3ZlU2V0ICYmIChvcCAmIERyYWdPcGVyYXRpb25M
aW5rKSkKLSAgICAgICAgcmV0dXJuICJsaW5rTW92ZSI7Ci0gICAgaWYgKChvcCAmIERyYWdPcGVy
YXRpb25Db3B5KSAmJiAob3AgJiBEcmFnT3BlcmF0aW9uTGluaykpCi0gICAgICAgIHJldHVybiAi
Y29weUxpbmsiOwotICAgIGlmIChtb3ZlU2V0KQotICAgICAgICByZXR1cm4gIm1vdmUiOwotICAg
IGlmIChvcCAmIERyYWdPcGVyYXRpb25Db3B5KQotICAgICAgICByZXR1cm4gImNvcHkiOwotICAg
IGlmIChvcCAmIERyYWdPcGVyYXRpb25MaW5rKQotICAgICAgICByZXR1cm4gImxpbmsiOwotICAg
IHJldHVybiAibm9uZSI7Ci19Ci0KLURyYWdPcGVyYXRpb24gQ2xpcGJvYXJkOjpzb3VyY2VPcGVy
YXRpb24oKSBjb25zdAotewotICAgIERyYWdPcGVyYXRpb24gb3AgPSBkcmFnT3BGcm9tSUVPcCht
X2VmZmVjdEFsbG93ZWQpOwotICAgIEFTU0VSVChvcCAhPSBEcmFnT3BlcmF0aW9uUHJpdmF0ZSk7
Ci0gICAgcmV0dXJuIG9wOwotfQotCi1EcmFnT3BlcmF0aW9uIENsaXBib2FyZDo6ZGVzdGluYXRp
b25PcGVyYXRpb24oKSBjb25zdAotewotICAgIERyYWdPcGVyYXRpb24gb3AgPSBkcmFnT3BGcm9t
SUVPcChtX2Ryb3BFZmZlY3QpOwotICAgIEFTU0VSVChvcCA9PSBEcmFnT3BlcmF0aW9uQ29weSB8
fCBvcCA9PSBEcmFnT3BlcmF0aW9uTm9uZSB8fCBvcCA9PSBEcmFnT3BlcmF0aW9uTGluayB8fCBv
cCA9PSAoRHJhZ09wZXJhdGlvbikoRHJhZ09wZXJhdGlvbkdlbmVyaWMgfCBEcmFnT3BlcmF0aW9u
TW92ZSkgfHwgb3AgPT0gRHJhZ09wZXJhdGlvbkV2ZXJ5KTsKLSAgICByZXR1cm4gb3A7Ci19Ci0K
LXZvaWQgQ2xpcGJvYXJkOjpzZXRTb3VyY2VPcGVyYXRpb24oRHJhZ09wZXJhdGlvbiBvcCkKLXsK
LSAgICBBU1NFUlRfQVJHKG9wLCBvcCAhPSBEcmFnT3BlcmF0aW9uUHJpdmF0ZSk7Ci0gICAgbV9l
ZmZlY3RBbGxvd2VkID0gSUVPcEZyb21EcmFnT3Aob3ApOwotfQotCi12b2lkIENsaXBib2FyZDo6
c2V0RGVzdGluYXRpb25PcGVyYXRpb24oRHJhZ09wZXJhdGlvbiBvcCkKLXsKLSAgICBBU1NFUlRf
QVJHKG9wLCBvcCA9PSBEcmFnT3BlcmF0aW9uQ29weSB8fCBvcCA9PSBEcmFnT3BlcmF0aW9uTm9u
ZSB8fCBvcCA9PSBEcmFnT3BlcmF0aW9uTGluayB8fCBvcCA9PSBEcmFnT3BlcmF0aW9uR2VuZXJp
YyB8fCBvcCA9PSBEcmFnT3BlcmF0aW9uTW92ZSB8fCBvcCA9PSAoRHJhZ09wZXJhdGlvbikoRHJh
Z09wZXJhdGlvbkdlbmVyaWMgfCBEcmFnT3BlcmF0aW9uTW92ZSkpOwotICAgIG1fZHJvcEVmZmVj
dCA9IElFT3BGcm9tRHJhZ09wKG9wKTsKLX0KLQotdm9pZCBDbGlwYm9hcmQ6OnNldERyb3BFZmZl
Y3QoY29uc3QgU3RyaW5nICZlZmZlY3QpCi17Ci0gICAgaWYgKCFpc0ZvckRyYWdBbmREcm9wKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSBhdHRyaWJ1dGUgbXVzdCBpZ25vcmUgYW55
IGF0dGVtcHRzIHRvIHNldCBpdCB0byBhIHZhbHVlIG90aGVyIHRoYW4gbm9uZSwgY29weSwgbGlu
aywgYW5kIG1vdmUuIAotICAgIGlmIChlZmZlY3QgIT0gIm5vbmUiICYmIGVmZmVjdCAhPSAiY29w
eSIgICYmIGVmZmVjdCAhPSAibGluayIgJiYgZWZmZWN0ICE9ICJtb3ZlIikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gRklYTUU6IFRoZSBzcGVjIGFjdHVhbGx5IGFsbG93cyB0aGlzIGluIGFs
bCBjaXJjdW1zdGFuY2VzLCBldmVuIHRob3VnaCB0aGVyZSdzIG5vIHBvaW50IGluCi0gICAgLy8g
c2V0dGluZyB0aGUgZHJvcCBlZmZlY3Qgd2hlbiB0aGlzIGNvbmRpdGlvbiBpcyBub3QgdHJ1ZS4K
LSAgICBpZiAoY2FuUmVhZFR5cGVzKCkpCi0gICAgICAgIG1fZHJvcEVmZmVjdCA9IGVmZmVjdDsK
LX0KLQotdm9pZCBDbGlwYm9hcmQ6OnNldEVmZmVjdEFsbG93ZWQoY29uc3QgU3RyaW5nICZlZmZl
Y3QpCi17Ci0gICAgaWYgKCFpc0ZvckRyYWdBbmREcm9wKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChkcmFnT3BGcm9tSUVPcChlZmZlY3QpID09IERyYWdPcGVyYXRpb25Qcml2YXRlKSB7
Ci0gICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMgbm8gY29udmVyc2lvbiwgYW5k
IHRoZSBlZmZlY3RBbGxvd2VkIHRoYXQKLSAgICAgICAgLy8gd2UgYXJlIHBhc3NlZCBpc24ndCBh
IHZhbGlkIGVmZmVjdEFsbG93ZWQsIHNvIHdlIHNob3VsZCBpZ25vcmUgaXQsCi0gICAgICAgIC8v
IGFuZCBub3Qgc2V0IG1fZWZmZWN0QWxsb3dlZC4KLQotICAgICAgICAvLyBUaGUgYXR0cmlidXRl
IG11c3QgaWdub3JlIGFueSBhdHRlbXB0cyB0byBzZXQgaXQgdG8gYSB2YWx1ZSBvdGhlciB0aGFu
IAotICAgICAgICAvLyBub25lLCBjb3B5LCBjb3B5TGluaywgY29weU1vdmUsIGxpbmssIGxpbmtN
b3ZlLCBtb3ZlLCBhbGwsIGFuZCB1bmluaXRpYWxpemVkLgotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0KLSAgICBpZiAoY2FuV3JpdGVEYXRhKCkpCi0gICAgICAgIG1fZWZmZWN0QWxsb3dlZCA9
IGVmZmVjdDsKLX0KLSAgICAKLVBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBDbGlwYm9hcmQ6OmNyZWF0
ZUZvckNvcHlBbmRQYXN0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5KQotewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkKHBvbGljeSwgQ29weUFuZFBhc3RlLCBwb2xpY3kg
PT0gQ2xpcGJvYXJkV3JpdGFibGUgPyBQYXN0ZWJvYXJkOjpjcmVhdGVQcml2YXRlKCkgOiBQYXN0
ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKSkpOwotfQotCiBib29sIENsaXBib2FyZDo6
aGFzRGF0YSgpCiB7CiAgICAgcmV0dXJuIG1fcGFzdGVib2FyZC0+aGFzRGF0YSgpOwpAQCAtMjQw
LDE2ICsxMzEsMjYgQEAgdm9pZCBDbGlwYm9hcmQ6OmNsZWFyRGF0YSgpCiAKIFN0cmluZyBDbGlw
Ym9hcmQ6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAogewotICAgIGlmICghY2Fu
UmVhZERhdGEoKSB8fCBtX2ZvckZpbGVEcmFnKQorICAgIGlmICghY2FuUmVhZERhdGEoKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCisjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKyAgICBp
ZiAobV9mb3JGaWxlRHJhZykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworI2VuZGlmCisKICAg
ICByZXR1cm4gbV9wYXN0ZWJvYXJkLT5yZWFkU3RyaW5nKHR5cGUpOwogfQogCiBib29sIENsaXBi
b2FyZDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKIHsK
LSAgICBpZiAoIWNhbldyaXRlRGF0YSgpIHx8IG1fZm9yRmlsZURyYWcpCisgICAgaWYgKCFjYW5X
cml0ZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKERSQUdfU1VQ
UE9SVCkKKyAgICBpZiAobV9mb3JGaWxlRHJhZykKICAgICAgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCiAKICAgICByZXR1cm4gbV9wYXN0ZWJvYXJkLT53cml0ZVN0cmluZyh0eXBlLCBkYXRhKTsK
IH0KQEAgLTI2MiwxMyArMTYzLDE5IEBAIExpc3RIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkOjp0
eXBlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fcGFzdGVib2FyZC0+dHlwZXMoKTsKIH0KIAotLy8g
RklYTUU6IFdlIGNvdWxkIGNhY2hlIHRoZSBjb21wdXRlZCBmaWxlTGlzdCBpZiBuZWNlc3NhcnkK
LS8vIEN1cnJlbnRseSBlYWNoIGFjY2VzcyBnZXRzIGEgbmV3IGNvcHksIHNldERhdGEoKSBtb2Rp
ZmljYXRpb25zIHRvIHRoZQotLy8gY2xpcGJvYXJkIGFyZSBub3QgcmVmbGVjdGVkIGluIGFueSBG
aWxlTGlzdCBvYmplY3RzIHRoZSBwYWdlIGhhcyBhY2Nlc3NlZCBhbmQgc3RvcmVkCiBQYXNzUmVm
UHRyPEZpbGVMaXN0PiBDbGlwYm9hcmQ6OmZpbGVzKCkgY29uc3QKIHsKLSAgICBpZiAoIWNhblJl
YWREYXRhKCkgfHwgKG1fY2xpcGJvYXJkVHlwZSA9PSBEcmFnQW5kRHJvcCAmJiAhbV9mb3JGaWxl
RHJhZykpCisgICAgLy8gRklYTUU6IFdlIGNvdWxkIGNhY2hlIHRoZSBjb21wdXRlZCBmaWxlIGxp
c3QgaWYgaXQgd2FzIG5lY2Vzc2FyeSBhbmQgaGVscGZ1bC4KKyAgICAvLyBDdXJyZW50bHksIGVh
Y2ggYWNjZXNzIGdldHMgYSBuZXcgY29weSwgYW5kIHRodXMgc2V0RGF0YSgpIG1vZGlmaWNhdGlv
bnMgdG8gdGhlCisgICAgLy8gY2xpcGJvYXJkIGFyZSBub3QgcmVmbGVjdGVkIGluIGFueSBGaWxl
TGlzdCBvYmplY3RzIHRoZSBwYWdlIGhhcyBhY2Nlc3NlZCBhbmQgc3RvcmVkLgorCisgICAgaWYg
KCFjYW5SZWFkRGF0YSgpKQorICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOworCisj
aWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKyAgICBpZiAobV9mb3JEcmFnICYmICFtX2ZvckZpbGVE
cmFnKQogICAgICAgICByZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOworI2VuZGlmCiAKICAgICBW
ZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMgPSBtX3Bhc3RlYm9hcmQtPnJlYWRGaWxlbmFtZXMoKTsK
ICAgICBSZWZQdHI8RmlsZUxpc3Q+IGZpbGVMaXN0ID0gRmlsZUxpc3Q6OmNyZWF0ZSgpOwpAQCAt
Mjc5LDIzICsxODYsNDcgQEAgUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkOjpmaWxlcygp
IGNvbnN0CiAKICNpZiAhRU5BQkxFKERSQUdfU1VQUE9SVCkKIAorU3RyaW5nIENsaXBib2FyZDo6
ZHJvcEVmZmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgibm9uZSIpOwor
fQorCit2b2lkIENsaXBib2FyZDo6c2V0RHJvcEVmZmVjdChjb25zdCBTdHJpbmcmKQoreworfQor
CitTdHJpbmcgQ2xpcGJvYXJkOjplZmZlY3RBbGxvd2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJ1bmluaXRpYWxpemVkIik7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkOjpzZXRF
ZmZlY3RBbGxvd2VkKGNvbnN0IFN0cmluZyYpCit7Cit9CisKIHZvaWQgQ2xpcGJvYXJkOjpzZXRE
cmFnSW1hZ2UoRWxlbWVudCosIGludCwgaW50KQogewogfQogCiAjZWxzZQogCi0vLyBGSVhNRTog
U2hvdWxkIGJlIG5hbWVkIGNyZWF0ZUZvckRyYWdBbmREcm9wLgotLy8gRklYTUU6IFNob3VsZCB0
YWtlIGNvbnN0IERyYWdEYXRhJiBpbnN0ZWFkIG9mIERyYWdEYXRhKi4KLS8vIEZJWE1FOiBTaG91
bGQgbm90IHRha2UgRnJhbWUqLgotUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IENsaXBib2FyZDo6Y3Jl
YXRlKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIERyYWdEYXRhKiBkcmFnRGF0YSwgRnJh
bWUqKQorUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IENsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERy
b3AoKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkKHBvbGljeSwgRHJhZ0Fu
ZERyb3AsIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKCpkcmFnRGF0YSksIGRyYWdE
YXRhLT5jb250YWluc0ZpbGVzKCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2Fy
ZChDbGlwYm9hcmRXcml0YWJsZSwgUGFzdGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoKSwg
RHJhZ0FuZERyb3ApKTsKIH0KIAotUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IENsaXBib2FyZDo6Y3Jl
YXRlRm9yRHJhZ0FuZERyb3AoKQorUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IENsaXBib2FyZDo6Y3Jl
YXRlRm9yRHJhZ0FuZERyb3AoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgY29uc3QgRHJh
Z0RhdGEmIGRyYWdEYXRhKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkKENs
aXBib2FyZFdyaXRhYmxlLCBEcmFnQW5kRHJvcCwgUGFzdGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0Fu
ZERyb3AoKSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkKHBvbGljeSwgUGFz
dGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoZHJhZ0RhdGEpLCBEcmFnQW5kRHJvcCwgZHJh
Z0RhdGEuY29udGFpbnNGaWxlcygpKSk7Cit9CisKK2Jvb2wgQ2xpcGJvYXJkOjpjYW5TZXREcmFn
SW1hZ2UoKSBjb25zdAoreworICAgIC8vIE5vdGUgdGhhdCB0aGUgc3BlYyBkb2Vzbid0IGFjdHVh
bGx5IGFsbG93IGRyYWcgaW1hZ2UgbW9kaWZpY2F0aW9uIG91dHNpZGUgdGhlIGRyYWdzdGFydAor
ICAgIC8vIGV2ZW50LiBUaGlzIGNhcGFiaWxpdHkgaXMgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmRz
IGNvbXBhdGlibGl0eSBmb3IgcG9ydHMgdGhhdCBoYXZlCisgICAgLy8gc3VwcG9ydGVkIHRoaXMg
aW4gdGhlIHBhc3QuIE9uIG1hbnkgcG9ydHMsIGF0dGVtcHRpbmcgdG8gc2V0IGEgZHJhZyBpbWFn
ZSBvdXRzaWRlIHRoZQorICAgIC8vIGRyYWdzdGFydCBvcGVyYXRpb24gaXMgYSBuby1vcCBhbnl3
YXkuCisgICAgcmV0dXJuIG1fZm9yRHJhZyAmJiAobV9wb2xpY3kgPT0gQ2xpcGJvYXJkSW1hZ2VX
cml0YWJsZSB8fCBtX3BvbGljeSA9PSBDbGlwYm9hcmRXcml0YWJsZSk7CiB9CiAKIHZvaWQgQ2xp
cGJvYXJkOjpzZXREcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgaW50IHgsIGludCB5KQpAQCAt
MzI5LDcgKzI2MCw3IEBAIHZvaWQgQ2xpcGJvYXJkOjp1cGRhdGVEcmFnSW1hZ2UoKQogewogICAg
IC8vIERvbid0IGFsbG93IHNldHRpbmcgdGhlIGltYWdlIGlmIHdlIGhhdmVuJ3Qgc3RhcnRlZCBk
cmFnZ2luZyB5ZXQ7IHdlJ2xsIHJlbHkgb24gdGhlIGRyYWdnaW5nIGNvZGUKICAgICAvLyB0byBp
bnN0YWxsIHRoaXMgZHJhZyBpbWFnZSBhcyBwYXJ0IG9mIGdldHRpbmcgdGhlIGRyYWcga2lja2Vk
IG9mZi4KLSAgICBpZiAoIWRyYWdTdGFydGVkKCkpCisgICAgaWYgKCFtX3Nob3VsZFVwZGF0ZURy
YWdJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UG9pbnQgY29tcHV0ZWRIb3RTcG90
OwpAQCAtMzY2LDYgKzI5NywxMTcgQEAgdm9pZCBEcmFnSW1hZ2VMb2FkZXI6OmltYWdlQ2hhbmdl
ZChDYWNoZWRJbWFnZSosIGNvbnN0IEludFJlY3QqKQogICAgIG1fY2xpcGJvYXJkLT51cGRhdGVE
cmFnSW1hZ2UoKTsKIH0KIAorc3RhdGljIERyYWdPcGVyYXRpb24gZHJhZ09wRnJvbUlFT3AoY29u
c3QgU3RyaW5nJiBvcGVyYXRpb24pCit7CisgICAgaWYgKG9wZXJhdGlvbiA9PSAidW5pbml0aWFs
aXplZCIpCisgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uRXZlcnk7CisgICAgaWYgKG9wZXJh
dGlvbiA9PSAibm9uZSIpCisgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uTm9uZTsKKyAgICBp
ZiAob3BlcmF0aW9uID09ICJjb3B5IikKKyAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Db3B5
OworICAgIGlmIChvcGVyYXRpb24gPT0gImxpbmsiKQorICAgICAgICByZXR1cm4gRHJhZ09wZXJh
dGlvbkxpbms7CisgICAgaWYgKG9wZXJhdGlvbiA9PSAibW92ZSIpCisgICAgICAgIHJldHVybiAo
RHJhZ09wZXJhdGlvbikoRHJhZ09wZXJhdGlvbkdlbmVyaWMgfCBEcmFnT3BlcmF0aW9uTW92ZSk7
CisgICAgaWYgKG9wZXJhdGlvbiA9PSAiY29weUxpbmsiKQorICAgICAgICByZXR1cm4gKERyYWdP
cGVyYXRpb24pKERyYWdPcGVyYXRpb25Db3B5IHwgRHJhZ09wZXJhdGlvbkxpbmspOworICAgIGlm
IChvcGVyYXRpb24gPT0gImNvcHlNb3ZlIikKKyAgICAgICAgcmV0dXJuIChEcmFnT3BlcmF0aW9u
KShEcmFnT3BlcmF0aW9uQ29weSB8IERyYWdPcGVyYXRpb25HZW5lcmljIHwgRHJhZ09wZXJhdGlv
bk1vdmUpOworICAgIGlmIChvcGVyYXRpb24gPT0gImxpbmtNb3ZlIikKKyAgICAgICAgcmV0dXJu
IChEcmFnT3BlcmF0aW9uKShEcmFnT3BlcmF0aW9uTGluayB8IERyYWdPcGVyYXRpb25HZW5lcmlj
IHwgRHJhZ09wZXJhdGlvbk1vdmUpOworICAgIGlmIChvcGVyYXRpb24gPT0gImFsbCIpCisgICAg
ICAgIHJldHVybiBEcmFnT3BlcmF0aW9uRXZlcnk7CisgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Q
cml2YXRlOyAvLyByZWFsbHkgYSBtYXJrZXIgZm9yICJubyBjb252ZXJzaW9uIgorfQorCitzdGF0
aWMgY29uc3QgY2hhciogSUVPcEZyb21EcmFnT3AoRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24pCit7
CisgICAgYm9vbCBpc0dlbmVyaWNNb3ZlID0gb3BlcmF0aW9uICYgKERyYWdPcGVyYXRpb25HZW5l
cmljIHwgRHJhZ09wZXJhdGlvbk1vdmUpOworCisgICAgaWYgKChpc0dlbmVyaWNNb3ZlICYmIChv
cGVyYXRpb24gJiBEcmFnT3BlcmF0aW9uQ29weSkgJiYgKG9wZXJhdGlvbiAmIERyYWdPcGVyYXRp
b25MaW5rKSkgfHwgb3BlcmF0aW9uID09IERyYWdPcGVyYXRpb25FdmVyeSkKKyAgICAgICAgcmV0
dXJuICJhbGwiOworICAgIGlmIChpc0dlbmVyaWNNb3ZlICYmIChvcGVyYXRpb24gJiBEcmFnT3Bl
cmF0aW9uQ29weSkpCisgICAgICAgIHJldHVybiAiY29weU1vdmUiOworICAgIGlmIChpc0dlbmVy
aWNNb3ZlICYmIChvcGVyYXRpb24gJiBEcmFnT3BlcmF0aW9uTGluaykpCisgICAgICAgIHJldHVy
biAibGlua01vdmUiOworICAgIGlmICgob3BlcmF0aW9uICYgRHJhZ09wZXJhdGlvbkNvcHkpICYm
IChvcGVyYXRpb24gJiBEcmFnT3BlcmF0aW9uTGluaykpCisgICAgICAgIHJldHVybiAiY29weUxp
bmsiOworICAgIGlmIChpc0dlbmVyaWNNb3ZlKQorICAgICAgICByZXR1cm4gIm1vdmUiOworICAg
IGlmIChvcGVyYXRpb24gJiBEcmFnT3BlcmF0aW9uQ29weSkKKyAgICAgICAgcmV0dXJuICJjb3B5
IjsKKyAgICBpZiAob3BlcmF0aW9uICYgRHJhZ09wZXJhdGlvbkxpbmspCisgICAgICAgIHJldHVy
biAibGluayI7CisgICAgcmV0dXJuICJub25lIjsKK30KKworRHJhZ09wZXJhdGlvbiBDbGlwYm9h
cmQ6OnNvdXJjZU9wZXJhdGlvbigpIGNvbnN0Cit7CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRp
b24gPSBkcmFnT3BGcm9tSUVPcChtX2VmZmVjdEFsbG93ZWQpOworICAgIEFTU0VSVChvcGVyYXRp
b24gIT0gRHJhZ09wZXJhdGlvblByaXZhdGUpOworICAgIHJldHVybiBvcGVyYXRpb247Cit9CisK
K0RyYWdPcGVyYXRpb24gQ2xpcGJvYXJkOjpkZXN0aW5hdGlvbk9wZXJhdGlvbigpIGNvbnN0Cit7
CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBkcmFnT3BGcm9tSUVPcChtX2Ryb3BFZmZl
Y3QpOworICAgIEFTU0VSVChvcGVyYXRpb24gPT0gRHJhZ09wZXJhdGlvbkNvcHkgfHwgb3BlcmF0
aW9uID09IERyYWdPcGVyYXRpb25Ob25lIHx8IG9wZXJhdGlvbiA9PSBEcmFnT3BlcmF0aW9uTGlu
ayB8fCBvcGVyYXRpb24gPT0gKERyYWdPcGVyYXRpb24pKERyYWdPcGVyYXRpb25HZW5lcmljIHwg
RHJhZ09wZXJhdGlvbk1vdmUpIHx8IG9wZXJhdGlvbiA9PSBEcmFnT3BlcmF0aW9uRXZlcnkpOwor
ICAgIHJldHVybiBvcGVyYXRpb247Cit9CisKK3ZvaWQgQ2xpcGJvYXJkOjpzZXRTb3VyY2VPcGVy
YXRpb24oRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24pCit7CisgICAgQVNTRVJUX0FSRyhvcGVyYXRp
b24sIG9wZXJhdGlvbiAhPSBEcmFnT3BlcmF0aW9uUHJpdmF0ZSk7CisgICAgbV9lZmZlY3RBbGxv
d2VkID0gSUVPcEZyb21EcmFnT3Aob3BlcmF0aW9uKTsKK30KKwordm9pZCBDbGlwYm9hcmQ6OnNl
dERlc3RpbmF0aW9uT3BlcmF0aW9uKERyYWdPcGVyYXRpb24gb3BlcmF0aW9uKQoreworICAgIEFT
U0VSVF9BUkcob3BlcmF0aW9uLCBvcGVyYXRpb24gPT0gRHJhZ09wZXJhdGlvbkNvcHkgfHwgb3Bl
cmF0aW9uID09IERyYWdPcGVyYXRpb25Ob25lIHx8IG9wZXJhdGlvbiA9PSBEcmFnT3BlcmF0aW9u
TGluayB8fCBvcGVyYXRpb24gPT0gRHJhZ09wZXJhdGlvbkdlbmVyaWMgfHwgb3BlcmF0aW9uID09
IERyYWdPcGVyYXRpb25Nb3ZlIHx8IG9wZXJhdGlvbiA9PSAoRHJhZ09wZXJhdGlvbikoRHJhZ09w
ZXJhdGlvbkdlbmVyaWMgfCBEcmFnT3BlcmF0aW9uTW92ZSkpOworICAgIG1fZHJvcEVmZmVjdCA9
IElFT3BGcm9tRHJhZ09wKG9wZXJhdGlvbik7Cit9CisKK1N0cmluZyBDbGlwYm9hcmQ6OmRyb3BF
ZmZlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2Ryb3BFZmZlY3QgPT0gInVuaW5pdGlhbGl6
ZWQiID8gQVNDSUlMaXRlcmFsKCJub25lIikgOiBtX2Ryb3BFZmZlY3Q7Cit9CisKK3ZvaWQgQ2xp
cGJvYXJkOjpzZXREcm9wRWZmZWN0KGNvbnN0IFN0cmluZyYgZWZmZWN0KQoreworICAgIGlmICgh
bV9mb3JEcmFnKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZWZmZWN0ICE9ICJub25lIiAm
JiBlZmZlY3QgIT0gImNvcHkiICYmIGVmZmVjdCAhPSAibGluayIgJiYgZWZmZWN0ICE9ICJtb3Zl
IikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoZSBzcGVjIGFsbG93cyB0aGlz
IGluIGFsbCBjaXJjdW1zdGFuY2VzLiBUaGVyZSBpcyBwcm9iYWJseSBubyB2YWx1ZQorICAgIC8v
IGluIGlnbm9yaW5nIGF0dGVtcHRzIHRvIGNoYW5nZSBpdC4KKyAgICBpZiAoIWNhblJlYWRUeXBl
cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Ryb3BFZmZlY3QgPSBlZmZlY3Q7Cit9CisK
K1N0cmluZyBDbGlwYm9hcmQ6OmVmZmVjdEFsbG93ZWQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2VmZmVjdEFsbG93ZWQ7Cit9CisKK3ZvaWQgQ2xpcGJvYXJkOjpzZXRFZmZlY3RBbGxvd2VkKGNv
bnN0IFN0cmluZyYgZWZmZWN0KQoreworICAgIGlmICghbV9mb3JEcmFnKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBJZ25vcmUgYW55IGF0dGVtcHRzIHRvIHNldCBpdCB0byBhbiB1bmtub3du
IHZhbHVlLgorICAgIGlmIChkcmFnT3BGcm9tSUVPcChlZmZlY3QpID09IERyYWdPcGVyYXRpb25Q
cml2YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWNhbldyaXRlRGF0YSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2VmZmVjdEFsbG93ZWQgPSBlZmZlY3Q7Cit9CisKICNlbmRp
ZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQ2xpcGJvYXJkLmgKaW5kZXggZWQxYTQwYTlhNjZiZjFmNWZiZmIxZDExMjM1MGVmNjBiODI4
MmEwOC4uYzMwMDc2NmM2MzBjOGJmNWIyMzcxYjU5YjY5YjM1ZTc3YjMzNDJmMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DbGlwYm9hcmQuaApAQCAtMjksNyArMjksOSBAQAogI2luY2x1ZGUgIkRyYWdBY3Rpb25zLmgi
CiAjaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRl
ICJOb2RlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC0zNywxMDQgKzM5LDgzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBEYXRhVHJhbnNmZXJJdGVtTGlzdDsKICAgICBjbGFzcyBEcmFnRGF0YTsKICAgICBj
bGFzcyBEcmFnSW1hZ2VMb2FkZXI7CisgICAgY2xhc3MgRWxlbWVudDsKICAgICBjbGFzcyBGaWxl
TGlzdDsKLSAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBQYXN0ZWJvYXJkOwotICAgIGNsYXNz
IFJhbmdlOwogCi0gICAgLy8gU3RhdGUgYXZhaWxhYmxlIGR1cmluZyBJRSdzIGV2ZW50cyBmb3Ig
ZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZQogICAgIGNsYXNzIENsaXBib2FyZCA6IHB1Ymxp
YyBSZWZDb3VudGVkPENsaXBib2FyZD4gewogICAgIHB1YmxpYzoKLSAgICAgICAgLy8gV2hldGhl
ciB0aGlzIGNsaXBib2FyZCBpcyBzZXJ2aW5nIGEgZHJhZy1kcm9wIG9yIGNvcHktcGFzdGUgcmVx
dWVzdC4KLSAgICAgICAgZW51bSBDbGlwYm9hcmRUeXBlIHsKLSAgICAgICAgICAgIENvcHlBbmRQ
YXN0ZSwKLSAgICAgICAgICAgIERyYWdBbmREcm9wLAotICAgICAgICB9OwotICAgICAgICAKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBjcmVhdGUoQ2xpcGJvYXJkQWNjZXNz
UG9saWN5LCBEcmFnRGF0YSosIEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENs
aXBib2FyZD4gY3JlYXRlRm9yQ29weUFuZFBhc3RlKENsaXBib2FyZEFjY2Vzc1BvbGljeSk7CiAK
ICAgICAgICAgfkNsaXBib2FyZCgpOwogCi0gICAgICAgIGJvb2wgaXNGb3JDb3B5QW5kUGFzdGUo
KSBjb25zdCB7IHJldHVybiBtX2NsaXBib2FyZFR5cGUgPT0gQ29weUFuZFBhc3RlOyB9Ci0gICAg
ICAgIGJvb2wgaXNGb3JEcmFnQW5kRHJvcCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpcGJvYXJkVHlw
ZSA9PSBEcmFnQW5kRHJvcDsgfQotCi0gICAgICAgIFN0cmluZyBkcm9wRWZmZWN0KCkgY29uc3Qg
eyByZXR1cm4gZHJvcEVmZmVjdElzVW5pbml0aWFsaXplZCgpID8gIm5vbmUiIDogbV9kcm9wRWZm
ZWN0OyB9CisgICAgICAgIFN0cmluZyBkcm9wRWZmZWN0KCkgY29uc3Q7CiAgICAgICAgIHZvaWQg
c2V0RHJvcEVmZmVjdChjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgYm9vbCBkcm9wRWZmZWN0SXNV
bmluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9kcm9wRWZmZWN0ID09ICJ1bmluaXRpYWxp
emVkIjsgfQotICAgICAgICBTdHJpbmcgZWZmZWN0QWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWZmZWN0QWxsb3dlZDsgfQorCisgICAgICAgIFN0cmluZyBlZmZlY3RBbGxvd2VkKCkgY29uc3Q7
CiAgICAgICAgIHZvaWQgc2V0RWZmZWN0QWxsb3dlZChjb25zdCBTdHJpbmcmKTsKLSAgICAKKwor
ICAgICAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisKKyAgICAgICAgUGFz
c1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKKwogICAgICAgICB2b2lkIGNsZWFyRGF0
YShjb25zdCBTdHJpbmcmIHR5cGUpOwogICAgICAgICB2b2lkIGNsZWFyRGF0YSgpOwogCi0gICAg
ICAgIHZvaWQgc2V0RHJhZ0ltYWdlKEVsZW1lbnQqLCBpbnQgeCwgaW50IHkpOwotCiAgICAgICAg
IFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7CisKICAgICAgICAgYm9v
bCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKLSAgICAK
LSAgICAgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OwotICAgICAgICBQYXNz
UmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OwogCi0gICAgICAgIENhY2hlZEltYWdlKiBk
cmFnSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2RyYWdJbWFnZS5nZXQoKTsgfQotICAgICAgICBO
b2RlKiBkcmFnSW1hZ2VFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kcmFnSW1hZ2VFbGVtZW50
LmdldCgpOyB9Ci0gICAgICAgIAotICAgICAgICBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdl
KEludFBvaW50JiBkcmFnTG9jYXRpb24pIGNvbnN0OworICAgICAgICB2b2lkIHNldERyYWdJbWFn
ZShFbGVtZW50KiwgaW50IHgsIGludCB5KTsKIAotICAgICAgICBib29sIGhhc0RhdGEoKTsKKyNp
ZiBFTkFCTEUoREFUQV9UUkFOU0ZFUl9JVEVNUykKKyAgICAgICAgUGFzc1JlZlB0cjxEYXRhVHJh
bnNmZXJJdGVtTGlzdD4gaXRlbXMoKSA9IDA7CisjZW5kaWYKIAogICAgICAgICB2b2lkIHNldEFj
Y2Vzc1BvbGljeShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kpOwogICAgICAgICBib29sIGNhblJlYWRU
eXBlcygpIGNvbnN0OwogICAgICAgICBib29sIGNhblJlYWREYXRhKCkgY29uc3Q7CiAgICAgICAg
IGJvb2wgY2FuV3JpdGVEYXRhKCkgY29uc3Q7Ci0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgc3Bl
YyBkb2Vzbid0IGFjdHVhbGx5IGFsbG93IGRyYWcgaW1hZ2UgbW9kaWZpY2F0aW9uIG91dHNpZGUg
dGhlIGRyYWdzdGFydAotICAgICAgICAvLyBldmVudC4gVGhpcyBjYXBhYmlsaXR5IGlzIG1haW50
YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmxpdHkgZm9yIHBvcnRzIHRoYXQgaGF2ZQotICAg
ICAgICAvLyBzdXBwb3J0ZWQgdGhpcyBpbiB0aGUgcGFzdC4gT24gbWFueSBwb3J0cywgYXR0ZW1w
dGluZyB0byBzZXQgYSBkcmFnIGltYWdlIG91dHNpZGUgdGhlCi0gICAgICAgIC8vIGRyYWdzdGFy
dCBvcGVyYXRpb24gaXMgYSBuby1vcCBhbnl3YXkuCi0gICAgICAgIGJvb2wgY2FuU2V0RHJhZ0lt
YWdlKCkgY29uc3Q7CisKKyAgICAgICAgUGFzdGVib2FyZCYgcGFzdGVib2FyZCgpIHsgcmV0dXJu
ICptX3Bhc3RlYm9hcmQ7IH0KKworI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZD4gY3JlYXRlRm9yRHJhZ0FuZERyb3AoKTsKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBjcmVhdGVGb3JEcmFnQW5kRHJvcChDbGlw
Ym9hcmRBY2Nlc3NQb2xpY3ksIGNvbnN0IERyYWdEYXRhJik7CisKKyAgICAgICAgYm9vbCBkcm9w
RWZmZWN0SXNVbmluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9kcm9wRWZmZWN0ID09ICJ1
bmluaXRpYWxpemVkIjsgfQorICAgICAgICBib29sIGhhc0RhdGEoKTsKIAogICAgICAgICBEcmFn
T3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbigpIGNvbnN0OwogICAgICAgICBEcmFnT3BlcmF0aW9u
IGRlc3RpbmF0aW9uT3BlcmF0aW9uKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0U291cmNlT3Bl
cmF0aW9uKERyYWdPcGVyYXRpb24pOwogICAgICAgICB2b2lkIHNldERlc3RpbmF0aW9uT3BlcmF0
aW9uKERyYWdPcGVyYXRpb24pOwotICAgICAgICAKLSAgICAgICAgdm9pZCBzZXREcmFnSGFzU3Rh
cnRlZCgpIHsgbV9kcmFnU3RhcnRlZCA9IHRydWU7IH0KIAotI2lmIEVOQUJMRShEQVRBX1RSQU5T
RkVSX0lURU1TKQotICAgICAgICBQYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1MaXN0PiBpdGVt
cygpID0gMDsKKyAgICAgICAgdm9pZCBzZXREcmFnSGFzU3RhcnRlZCgpIHsgbV9zaG91bGRVcGRh
dGVEcmFnSW1hZ2UgPSB0cnVlOyB9CisgICAgICAgIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1h
Z2UoSW50UG9pbnQmIGRyYWdMb2NhdGlvbikgY29uc3Q7CisgICAgICAgIHZvaWQgdXBkYXRlRHJh
Z0ltYWdlKCk7CiAjZW5kaWYKLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENs
aXBib2FyZD4gY3JlYXRlRm9yQ29weUFuZFBhc3RlKENsaXBib2FyZEFjY2Vzc1BvbGljeSk7CiAK
LSAgICAgICAgUGFzdGVib2FyZCYgcGFzdGVib2FyZCgpIHsgcmV0dXJuICptX3Bhc3RlYm9hcmQ7
IH0KKyAgICBwcml2YXRlOgorICAgICAgICBlbnVtIENsaXBib2FyZFR5cGUgeyBDb3B5QW5kUGFz
dGUsIERyYWdBbmREcm9wIH07CisgICAgICAgIENsaXBib2FyZChDbGlwYm9hcmRBY2Nlc3NQb2xp
Y3ksIFBhc3NPd25QdHI8UGFzdGVib2FyZD4sIENsaXBib2FyZFR5cGUgPSBDb3B5QW5kUGFzdGUs
IGJvb2wgZm9yRmlsZURyYWcgPSBmYWxzZSk7CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IGNyZWF0ZUZvckRyYWdBbmREcm9w
KCk7Ci0KLSAgICAgICAgdm9pZCB1cGRhdGVEcmFnSW1hZ2UoKTsKKyAgICAgICAgYm9vbCBjYW5T
ZXREcmFnSW1hZ2UoKSBjb25zdDsKICNlbmRpZgogCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBD
bGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBDbGlwYm9hcmRUeXBlLCBQYXNzT3duUHRy
PFBhc3RlYm9hcmQ+LCBib29sIGZvckZpbGVEcmFnID0gZmFsc2UpOwotCi0gICAgICAgIGJvb2wg
ZHJhZ1N0YXJ0ZWQoKSBjb25zdCB7IHJldHVybiBtX2RyYWdTdGFydGVkOyB9Ci0gICAgICAgIAot
ICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIEluc3RlYWQgb2YgdXNpbmcgdGhpcyBtZW1iZXIgZGly
ZWN0bHksIHByZWZlciB0byB1c2UgdGhlIGNhbiooKSBtZXRob2RzIGFib3ZlLgogICAgICAgICBD
bGlwYm9hcmRBY2Nlc3NQb2xpY3kgbV9wb2xpY3k7CisgICAgICAgIE93blB0cjxQYXN0ZWJvYXJk
PiBtX3Bhc3RlYm9hcmQ7CisKKyNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorICAgICAgICBib29s
IG1fZm9yRHJhZzsKKyAgICAgICAgYm9vbCBtX2ZvckZpbGVEcmFnOwogICAgICAgICBTdHJpbmcg
bV9kcm9wRWZmZWN0OwogICAgICAgICBTdHJpbmcgbV9lZmZlY3RBbGxvd2VkOwotICAgICAgICBi
b29sIG1fZHJhZ1N0YXJ0ZWQ7Ci0gICAgICAgIENsaXBib2FyZFR5cGUgbV9jbGlwYm9hcmRUeXBl
OwotICAgICAgICAKLSAgICBwcm90ZWN0ZWQ6CisgICAgICAgIGJvb2wgbV9zaG91bGRVcGRhdGVE
cmFnSW1hZ2U7CiAgICAgICAgIEludFBvaW50IG1fZHJhZ0xvY2F0aW9uOwogICAgICAgICBDYWNo
ZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRJbWFnZT4gbV9kcmFnSW1hZ2U7Ci0gICAgICAgIFJlZlB0
cjxOb2RlPiBtX2RyYWdJbWFnZUVsZW1lbnQ7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBPd25Q
dHI8UGFzdGVib2FyZD4gbV9wYXN0ZWJvYXJkOwotICAgICAgICBib29sIG1fZm9yRmlsZURyYWc7
Ci0jaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZHJh
Z0ltYWdlRWxlbWVudDsKICAgICAgICAgT3duUHRyPERyYWdJbWFnZUxvYWRlcj4gbV9kcmFnSW1h
Z2VMb2FkZXI7CiAjZW5kaWYKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0NsaXBib2FyZC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmlkbAppbmRleCA5
ZTdjMTJjZTE3Zjk4OThlYzlkZjI3MmEzYmZmYjgzYjczZTBlMTBiLi5iYjhmYzE4ZjNhNzNlMDYw
N2MzOGE1NTg3ZDI0ZGRjNWVlMmEyNDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2xpcGJvYXJkLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmlkbApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUs
MTEgKzI1LDEzIEBACiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKICAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KKwogWwog
ICAgIFNraXBWVGFibGVWYWxpZGF0aW9uCiBdIGludGVyZmFjZSBDbGlwYm9hcmQgewotICAgICAg
ICAgICAgIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPVVuZGVmaW5lZF0gYXR0cmlidXRlIERP
TVN0cmluZyBkcm9wRWZmZWN0OwotICAgICAgICAgICAgIFtUcmVhdFJldHVybmVkTnVsbFN0cmlu
Z0FzPVVuZGVmaW5lZF0gYXR0cmlidXRlIERPTVN0cmluZyBlZmZlY3RBbGxvd2VkOworICAgIGF0
dHJpYnV0ZSBET01TdHJpbmcgZHJvcEVmZmVjdDsKKyAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nIGVm
ZmVjdEFsbG93ZWQ7CisKICAgICBbQ3VzdG9tR2V0dGVyXSByZWFkb25seSBhdHRyaWJ1dGUgQXJy
YXkgdHlwZXM7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEZpbGVMaXN0IGZpbGVzOwogCkBAIC00
MCw0ICs0MiwzIEBACiAKICAgICBbQ29uZGl0aW9uYWw9REFUQV9UUkFOU0ZFUl9JVEVNU10gcmVh
ZG9ubHkgYXR0cmlidXRlIERhdGFUcmFuc2Zlckl0ZW1MaXN0IGl0ZW1zOwogfTsKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCBjYWY1ZGVmZjhmMzFiZWZkOTJmNDQ2
ZDA2ODFkMjM1YTdlYmE4MTMwLi5mZGY4MGMzMTc2YzkwNDljYTQ0MWY3ZDEzYmMwODI5ZmJiMzc0
MzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtMTk2LDcgKzE5
Niw3IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRyYWdFeGl0ZWQoRHJhZ0RhdGEqIGRyYWdEYXRh
KQogCiAgICAgaWYgKFJlZlB0cjxGcmFtZVZpZXc+IHYgPSBtYWluRnJhbWUtPnZpZXcoKSkgewog
ICAgICAgICBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5ID0gKCFtX2RvY3VtZW50VW5kZXJN
b3VzZSB8fCBtX2RvY3VtZW50VW5kZXJNb3VzZS0+c2VjdXJpdHlPcmlnaW4oKS0+aXNMb2NhbCgp
KSA/IENsaXBib2FyZFJlYWRhYmxlIDogQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZTsKLSAgICAgICAg
UmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJkID0gQ2xpcGJvYXJkOjpjcmVhdGUocG9saWN5LCBk
cmFnRGF0YSwgbWFpbkZyYW1lKTsKKyAgICAgICAgUmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJk
ID0gQ2xpcGJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChwb2xpY3ksICpkcmFnRGF0YSk7CiAg
ICAgICAgIGNsaXBib2FyZC0+c2V0U291cmNlT3BlcmF0aW9uKGRyYWdEYXRhLT5kcmFnZ2luZ1Nv
dXJjZU9wZXJhdGlvbk1hc2soKSk7CiAgICAgICAgIG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCku
Y2FuY2VsRHJhZ0FuZERyb3AoY3JlYXRlTW91c2VFdmVudChkcmFnRGF0YSksIGNsaXBib2FyZC5n
ZXQoKSk7CiAgICAgICAgIGNsaXBib2FyZC0+c2V0QWNjZXNzUG9saWN5KENsaXBib2FyZE51bWIp
OyAgICAvLyBpbnZhbGlkYXRlIGNsaXBib2FyZCBoZXJlIGZvciBzZWN1cml0eQpAQCAtMjIyLDcg
KzIyMiw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnBlcmZvcm1EcmFnKERyYWdEYXRhKiBkcmFn
RGF0YSkKICAgICAgICAgYm9vbCBwcmV2ZW50ZWREZWZhdWx0ID0gZmFsc2U7CiAgICAgICAgIGlm
IChtYWluRnJhbWUtPnZpZXcoKSkgewogICAgICAgICAgICAgLy8gU2VuZGluZyBhbiBldmVudCBj
YW4gcmVzdWx0IGluIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgdmlldyBhbmQgcGFydC4KLSAgICAg
ICAgICAgIFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IENsaXBib2FyZDo6Y3JlYXRlKENs
aXBib2FyZFJlYWRhYmxlLCBkcmFnRGF0YSwgbWFpbkZyYW1lLmdldCgpKTsKKyAgICAgICAgICAg
IFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IENsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0Fu
ZERyb3AoQ2xpcGJvYXJkUmVhZGFibGUsICpkcmFnRGF0YSk7CiAgICAgICAgICAgICBjbGlwYm9h
cmQtPnNldFNvdXJjZU9wZXJhdGlvbihkcmFnRGF0YS0+ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25N
YXNrKCkpOwogICAgICAgICAgICAgcHJldmVudGVkRGVmYXVsdCA9IG1haW5GcmFtZS0+ZXZlbnRI
YW5kbGVyKCkucGVyZm9ybURyYWdBbmREcm9wKGNyZWF0ZU1vdXNlRXZlbnQoZHJhZ0RhdGEpLCBj
bGlwYm9hcmQuZ2V0KCkpOwogICAgICAgICAgICAgY2xpcGJvYXJkLT5zZXRBY2Nlc3NQb2xpY3ko
Q2xpcGJvYXJkTnVtYik7IC8vIEludmFsaWRhdGUgY2xpcGJvYXJkIGhlcmUgZm9yIHNlY3VyaXR5
CkBAIC02MTQsNyArNjE0LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6dHJ5REhUTUxEcmFnKERy
YWdEYXRhKiBkcmFnRGF0YSwgRHJhZ09wZXJhdGlvbiYgb3BlcmF0aW9uKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5ID0gbV9kb2N1bWVu
dFVuZGVyTW91c2UtPnNlY3VyaXR5T3JpZ2luKCktPmlzTG9jYWwoKSA/IENsaXBib2FyZFJlYWRh
YmxlIDogQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZTsKLSAgICBSZWZQdHI8Q2xpcGJvYXJkPiBjbGlw
Ym9hcmQgPSBDbGlwYm9hcmQ6OmNyZWF0ZShwb2xpY3ksIGRyYWdEYXRhLCBtYWluRnJhbWUuZ2V0
KCkpOworICAgIFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IENsaXBib2FyZDo6Y3JlYXRl
Rm9yRHJhZ0FuZERyb3AocG9saWN5LCAqZHJhZ0RhdGEpOwogICAgIERyYWdPcGVyYXRpb24gc3Jj
T3BNYXNrID0gZHJhZ0RhdGEtPmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpOwogICAgIGNs
aXBib2FyZC0+c2V0U291cmNlT3BlcmF0aW9uKHNyY09wTWFzayk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCmluZGV4IDMzOWE5NjZhNDE0ZTJmN2ZlYTg3
MjVmNmQ0NWNmODZlNTQzYjkzMjMuLmQ0YWZmZDYxZjk0OGZlMGVkOTBmNmE2NzhjYmNiMjg0ODc3
MDhhMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQpA
QCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCAiRHJhZ0NsaWVudC5oIgogI2ltcG9ydCAiRHJhZ0Nv
bnRyb2xsZXIuaCIKICNpbXBvcnQgIkRyYWdEYXRhLmgiCisjaW1wb3J0ICJFbGVtZW50LmgiCiAj
aW1wb3J0ICJGcmFtZS5oIgogI2ltcG9ydCAiRnJhbWVTbmFwc2hvdHRpbmdNYWMuaCIKICNpbXBv
cnQgIlBhZ2UuaCIK
</data>
<flag name="review"
          id="230989"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>