<?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>50080</bug_id>
          
          <creation_ts>2010-11-25 07:21:05 -0800</creation_ts>
          <short_desc>[Qt] Support a QNetworkAccessManager affined to a different thread.</short_desc>
          <delta_ts>2011-01-07 13:49:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</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>Qt, QtTriaged</keywords>
          <priority>P3</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>52081</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jocelyn Turcotte">jturcotte</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>christian.webkit</cc>
    
    <cc>eric</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>noam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>313757</commentid>
    <comment_count>0</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2010-11-25 07:21:05 -0800</bug_when>
    <thetext>On pages with heavy layouting or image decoding, the network stack can wait a long time until the event loop execute its pending actions.

Running the socket interactions in a more responsive thread can improve loading times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313760</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-11-25 07:26:14 -0800</bug_when>
    <thetext>Looking forward to this! www.nyt.com seems to stall a lot during loading, have you tested that site?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313761</commentid>
    <comment_count>2</comment_count>
      <attachid>74877</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2010-11-25 07:26:27 -0800</bug_when>
    <thetext>Created attachment 74877
Patch (probably has style issues, please disregard them for now)

This patch depends on other smaller patches to apply, I&apos;ll post them soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313779</commentid>
    <comment_count>3</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2010-11-25 08:17:12 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Looking forward to this! www.nyt.com seems to stall a lot during loading, have you tested that site?

On desktop I don&apos;t see any notice improvements with the live website, sadly.
The patch mostly tries to improve the time spent with a pending network notification that we need to take action (i.e. writing on the socket).

For download usually the TCP window and the network buffer are large enough and we don&apos;t have any trouble keep the download going for most web sites resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313930</commentid>
    <comment_count>4</comment_count>
      <attachid>74877</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-11-26 02:55:46 -0800</bug_when>
    <thetext>Comment on attachment 74877
Patch (probably has style issues, please disregard them for now)

View in context: https://bugs.webkit.org/attachment.cgi?id=74877&amp;action=review

&gt; WebCore/ChangeLog:37
&gt; +        * platform/network/qt/NAMManipulator.cpp: Added.
&gt; +        (WebCore::NAMManipulator::NAMManipulator):
&gt; +        (WebCore::NAMManipulator::localSetCookies):
&gt; +        (WebCore::NAMManipulator::localCookiesForUrl):
&gt; +        (WebCore::NAMManipulator::localWillLoadFromCache):
&gt; +        (WebCore::ReplyManipulator::ReplyManipulator):
&gt; +        (WebCore::ReplyManipulator::~ReplyManipulator):
&gt; +        (WebCore::ReplyManipulator::localGet):
&gt; +        (WebCore::ReplyManipulator::localPost):
&gt; +        (WebCore::ReplyManipulator::localHead):
&gt; +        (WebCore::ReplyManipulator::localPut):
&gt; +        (WebCore::ReplyManipulator::localDeleteResource):
&gt; +        (WebCore::ReplyManipulator::localCustomRequest):
&gt; +        (WebCore::ReplyManipulator::localAbort):
&gt; +        (WebCore::ReplyManipulator::localForwardData):
&gt; +        (WebCore::ReplyManipulator::localSetForwardingDefered):
&gt; +        (WebCore::ReplyManipulator::localMirrorMembers):
&gt; +        (WebCore::ReplyManipulator::localSetReply):
&gt; +        * platform/network/qt/NAMManipulator.h: Added.

For new files you do not need to show the methods. You can just cut this out from the ChangeLog

&gt; WebCore/platform/network/qt/NAMManipulator.cpp:30
&gt; +static int dummyStaticVar1 = qRegisterMetaType&lt;QFutureInterface&lt;bool&gt; &gt;(&quot;QFutureInterface&lt;bool&gt;&quot;);
&gt; +static int dummyStaticVar2 = qRegisterMetaType&lt;QFutureInterface&lt;QList&lt;QNetworkCookie&gt; &gt; &gt;(&quot;QFutureInterface&lt;QList&lt;QNetworkCookie&gt; &gt;&quot;);
&gt; +

Could we find better names for this or at least add a comment?

&gt; WebCore/platform/network/qt/NAMManipulator.cpp:97
&gt; +    if (m_reply)
&gt; +        delete m_reply;
&gt; +}

Just do delete m_reply. delete handles null-pointers :-)

&gt; WebCore/platform/network/qt/NAMManipulator.h:60
&gt; +signals:

We probably want to use Q_SIGNALS etc

&gt; WebCore/platform/network/qt/QNetworkReplyHandler.cpp:512
&gt; +    connect(m_reply, SIGNAL(finished()),
&gt; +            this, SLOT(finish()), SIGNAL_CONN);

Those should really be one liners :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319326</commentid>
    <comment_count>5</comment_count>
      <attachid>74877</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-12-09 01:36:48 -0800</bug_when>
    <thetext>Comment on attachment 74877
Patch (probably has style issues, please disregard them for now)

The classes are very Qt specific so we should name them appropiate like QtNAMManipulator. Could we find a better name than manipulator?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319338</commentid>
    <comment_count>6</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2010-12-09 02:14:17 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 74877 [details])
&gt; The classes are very Qt specific so we should name them appropiate like QtNAMManipulator. Could we find a better name than manipulator?

Maybe QtNAMAccessor (can be weird since it translates to QtNetworkAccessManagerAccessor)
or QtThreadSafeNAM (it&apos;s not quite a NAM by itself though)
or QtThreadSafeNAMAccess
or QtNAMThreadBridge

Manipulator sounded the best, though it&apos;s normally used in a pejorative context. Do you have a favorite or other ideas?
Same thing for ReplyManipulator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319350</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-12-09 02:24:30 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 74877 [details] [details])
&gt; &gt; The classes are very Qt specific so we should name them appropiate like QtNAMManipulator. Could we find a better name than manipulator?
&gt; 
&gt; Maybe QtNAMAccessor (can be weird since it translates to QtNetworkAccessManagerAccessor)
&gt; or QtThreadSafeNAM (it&apos;s not quite a NAM by itself though)
&gt; or QtThreadSafeNAMAccess
&gt; or QtNAMThreadBridge
&gt; 
&gt; Manipulator sounded the best, though it&apos;s normally used in a pejorative context. Do you have a favorite or other ideas?
&gt; Same thing for ReplyManipulator.

QtNAMThreadSafeProxy ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319480</commentid>
    <comment_count>8</comment_count>
      <attachid>76070</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2010-12-09 08:38:11 -0800</bug_when>
    <thetext>Created attachment 76070
Patch v2

This version:
- Renames NAMManipulator to QtNAMThreadSafeProxy and ReplyManipulator to QtNetworkReplyThreadSafeProxy
- Adds a comment for the dummy variables, though if you have a better idea I would prefer since it generates a warning for unused variable on GCC.
- Fixes style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319484</commentid>
    <comment_count>9</comment_count>
      <attachid>76071</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2010-12-09 08:45:50 -0800</bug_when>
    <thetext>Created attachment 76071
QtTestBrowser Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319485</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-09 08:47:10 -0800</bug_when>
    <thetext>Attachment 76071 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebKitTools/ChangeLog&apos;, u&apos;WebKitTools/QtTestBrowser/launcherwindow.cpp&apos;, u&apos;WebKitTools/QtTestBrowser/launcherwindow.h&apos;, u&apos;WebKitTools/QtTestBrowser/webpage.cpp&apos;, u&apos;WebKitTools/QtTestBrowser/webpage.h&apos;]&quot; exit_code: 1
WebKitTools/QtTestBrowser/webpage.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319527</commentid>
    <comment_count>11</comment_count>
      <attachid>76078</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2010-12-09 09:56:32 -0800</bug_when>
    <thetext>Created attachment 76078
QtTestBrowser Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320064</commentid>
    <comment_count>12</comment_count>
      <attachid>76070</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2010-12-10 02:50:24 -0800</bug_when>
    <thetext>Comment on attachment 76070
Patch v2

Clearing flags on attachment: 76070

Committed r73710: &lt;http://trac.webkit.org/changeset/73710&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320067</commentid>
    <comment_count>13</comment_count>
      <attachid>76078</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2010-12-10 02:51:33 -0800</bug_when>
    <thetext>Comment on attachment 76078
QtTestBrowser Patch v2

Clearing flags on attachment: 76078

Committed r73712: &lt;http://trac.webkit.org/changeset/73712&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320068</commentid>
    <comment_count>14</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2010-12-10 02:51:44 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320286</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-10 11:46:25 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/73710 might have broken GTK Linux 32-bit Debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323679</commentid>
    <comment_count>16</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2010-12-17 02:49:18 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #1)
&gt; &gt; Looking forward to this! www.nyt.com seems to stall a lot during loading, have you tested that site?
&gt; 
&gt; On desktop I don&apos;t see any notice improvements with the live website, sadly.
&gt; The patch mostly tries to improve the time spent with a pending network notification that we need to take action (i.e. writing on the socket).


I was looking at an easy fix like this at the last QtWebKit workshop in Wiesbaden and this had about zero effect. QtWebKit was blocking on font/text handling and was not consuming the data from the network stack, also not sending new requests...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323682</commentid>
    <comment_count>17</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-12-17 02:51:58 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #1)
&gt; &gt; &gt; Looking forward to this! www.nyt.com seems to stall a lot during loading, have you tested that site?
&gt; &gt; 
&gt; &gt; On desktop I don&apos;t see any notice improvements with the live website, sadly.
&gt; &gt; The patch mostly tries to improve the time spent with a pending network notification that we need to take action (i.e. writing on the socket).
&gt; 
&gt; 
&gt; I was looking at an easy fix like this at the last QtWebKit workshop in Wiesbaden and this had about zero effect. QtWebKit was blocking on font/text handling and was not consuming the data from the network stack, also not sending new requests...

Luckily we have some optimizations coming in that area soon :-) cc&apos;ing kling.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74877</attachid>
            <date>2010-11-25 07:26:27 -0800</date>
            <delta_ts>2010-12-09 08:38:11 -0800</delta_ts>
            <desc>Patch (probably has style issues, please disregard them for now)</desc>
            <filename>threaded.patch</filename>
            <type>text/plain</type>
            <size>45196</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWU3MzdkYy4uZmUxNWJmZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NSBAQAorMjAxMC0xMS0yNSAgSm9jZWx5biBUdXJj
b3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gU3VwcG9ydCBhIFFOZXR3b3JrQWNjZXNz
TWFuYWdlciBhZmZpbmVkIHRvIGEgZGlmZmVyZW50IHRocmVhZC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMDgwCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2UgdGhlIE5BTU1hbmlwdWxhdG9yIGFuZCB0aGUgUmVwbHlNYW5pcHVsYXRvcgor
ICAgICAgICBhcyBpbnRlcm1lZGlhdGVzIGZvciBlYWNoIFFOZXR3b3JrTWFuYWdlciBvciBRTmV0
d29ya1JlcGx5IGFjY2Vzc2VzLgorICAgICAgICBJZiBydW4gaW4gdGhlIHNhbWUgdGhyZWFkLCB0
aGVzZSBvYmplY3RzIHdpbGwgZm9yd2FyZCB0aGUgY2FsbHMgd2l0aAorICAgICAgICBRdDo6RGly
ZWN0Q29ubmVjdGlvbiBiaW5kaW5ncywgd2hpbGUgaW4gdGhlIG90aGVyIGNhc2UgdGhleSB3aWxs
IHVzZQorICAgICAgICBRdDo6UXVldWVkQ29ubmVjdGlvbiB0byBjYXJyeSByZXF1ZXN0cyBhY2Ny
b3NzIHRocmVhZHMuCisKKyAgICAgICAgTmV3IHRlc3Q6IHRzdF9RV2ViUGFnZTo6bmV0d29ya0Fj
Y2Vzc01hbmFnZXJPbkRpZmZlcmVudFRocmVhZAorCisgICAgICAgICogV2ViQ29yZS5wcm86Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXQ6OmNvbW1pdExvYWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvcXQvTkFNTWFuaXB1bGF0b3IuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Ok5BTU1hbmlwdWxhdG9yOjpOQU1NYW5pcHVsYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpOQU1NYW5pcHVsYXRvcjo6bG9jYWxTZXRDb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5BTU1hbmlwdWxhdG9yOjpsb2NhbENvb2tpZXNGb3JVcmwpOgorICAgICAgICAoV2Vi
Q29yZTo6TkFNTWFuaXB1bGF0b3I6OmxvY2FsV2lsbExvYWRGcm9tQ2FjaGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVwbHlNYW5pcHVsYXRvcjo6UmVwbHlNYW5pcHVsYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZXBseU1hbmlwdWxhdG9yOjp+UmVwbHlNYW5pcHVsYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZXBseU1hbmlwdWxhdG9yOjpsb2NhbEdldCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXBseU1hbmlwdWxhdG9yOjpsb2NhbFBvc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbHlNYW5p
cHVsYXRvcjo6bG9jYWxIZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGx5TWFuaXB1bGF0b3I6
OmxvY2FsUHV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGx5TWFuaXB1bGF0b3I6OmxvY2FsRGVs
ZXRlUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbHlNYW5pcHVsYXRvcjo6bG9jYWxD
dXN0b21SZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGx5TWFuaXB1bGF0b3I6OmxvY2Fs
QWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbHlNYW5pcHVsYXRvcjo6bG9jYWxGb3J3YXJk
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXBseU1hbmlwdWxhdG9yOjpsb2NhbFNldEZvcndh
cmRpbmdEZWZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGx5TWFuaXB1bGF0b3I6OmxvY2Fs
TWlycm9yTWVtYmVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBseU1hbmlwdWxhdG9yOjpsb2Nh
bFNldFJlcGx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L05BTU1hbmlwdWxhdG9y
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TkFNTWFuaXB1bGF0b3I6OnNldENvb2tpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6TkFNTWFuaXB1bGF0b3I6OmNvb2tpZXNGb3JVcmwpOgorICAg
ICAgICAoV2ViQ29yZTo6TkFNTWFuaXB1bGF0b3I6OndpbGxMb2FkRnJvbUNhY2hlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGx5TWFuaXB1bGF0b3I6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlcGx5TWFuaXB1bGF0b3I6OnNldEZvcndhcmRpbmdEZWZlcmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlcGx5TWFuaXB1bGF0b3I6OmNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpSZXBseU1hbmlwdWxhdG9yOjpjb250ZW50TGVuZ3RoSGVhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGx5TWFuaXB1bGF0b3I6OmNvbnRlbnRUeXBlSGVhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGx5TWFuaXB1bGF0b3I6OmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlcGx5TWFuaXB1bGF0b3I6OmVycm9yU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGx5
TWFuaXB1bGF0b3I6Omh0dHBSZWFzb25QaHJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbHlN
YW5pcHVsYXRvcjo6aHR0cFN0YXR1c0NvZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbHlNYW5p
cHVsYXRvcjo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGx5TWFuaXB1bGF0b3I6OnJlZGly
ZWN0aW9uVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGx5TWFuaXB1bGF0b3I6OnJhd0hl
YWRlclBhaXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGx5TWFuaXB1bGF0b3I6OnJlcGx5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlcGx5TWFuaXB1bGF0b3I6OmdldCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXBseU1hbmlwdWxhdG9yOjpwb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGx5TWFu
aXB1bGF0b3I6OmhlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbHlNYW5pcHVsYXRvcjo6cHV0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGx5TWFuaXB1bGF0b3I6OmRlbGV0ZVJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlcGx5TWFuaXB1bGF0b3I6OnNlbmRDdXN0b21SZXF1ZXN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhSU9EZXZpY2U6OkZvcm1EYXRhSU9EZXZpY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI6OlFOZXR3b3JrUmVwbHlIYW5k
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjp+UU5ldHdvcmtS
ZXBseUhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI6OnNl
dExvYWRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjphYm9y
dCk6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6cmVsZWFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjppZ25vcmVIdHRwRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6UU5l
dHdvcmtSZXBseUhhbmRsZXI6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1Jl
cGx5SGFuZGxlcjo6c2VuZFJlc3BvbnNlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UU5l
dHdvcmtSZXBseUhhbmRsZXI6OmZvcndhcmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3
b3JrUmVwbHlIYW5kbGVyOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5
SGFuZGxlcjo6c2VuZFF1ZXVlZEl0ZW1zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0
L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9S
ZXNvdXJjZUhhbmRsZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp3
aWxsTG9hZEZyb21DYWNoZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bmV0d29ya0FjY2Vzc01hbmFnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvb2tpZXNFbmFibGVkKToKKwogMjAxMC0xMS0yNCAgSmlhbiBMaSAgPGppYW5saUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYzFj
ZDBjMi4uMmQ5ODMxOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJD
b3JlL1dlYkNvcmUucHJvCkBAIC0yMTQzLDYgKzIxNDMsNyBAQCBIRUFERVJTICs9IFwKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdGF0ZU5vdGlmaWVyLmggXAogICAgIHBsYXRmb3JtL25l
dHdvcmsvUHJvdGVjdGlvblNwYWNlLmggXAogICAgIHBsYXRmb3JtL25ldHdvcmsvUHJveHlTZXJ2
ZXIuaCBcCisgICAgcGxhdGZvcm0vbmV0d29yay9xdC9OQU1NYW5pcHVsYXRvci5oIFwKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmggXAogICAgIHBsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VFcnJvckJhc2UuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9SZXNv
dXJjZUhhbmRsZS5oIFwKQEAgLTI2NjMsNiArMjY2NCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBs
YXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAgXAogICAgIHBsYXRmb3JtL25l
dHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3F0
L0Ruc1ByZWZldGNoSGVscGVyLmNwcCBcCisgICAgcGxhdGZvcm0vbmV0d29yay9xdC9OQU1NYW5p
cHVsYXRvci5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUHJveHlTZXJ2ZXJRdC5jcHAg
XAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuY3BwIFwKICAg
ICBlZGl0aW5nL3F0L0VkaXRvclF0LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQcml2YXRlUXQuY3BwCmluZGV4IDk2MmM5MzEuLjg1MWI3
YzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5ZXJQ
cml2YXRlUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvTWVkaWFQbGF5
ZXJQcml2YXRlUXQuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxWaWRl
b0VsZW1lbnQuaCIKKyNpbmNsdWRlICJOQU1NYW5pcHVsYXRvci5oIgogI2luY2x1ZGUgIk5ldHdv
cmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWRlby5oIgpAQCAtMjA5LDggKzIxMCw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
UXQ6OmNvbW1pdExvYWQoY29uc3QgU3RyaW5nJiB1cmwpCiAKICAgICAgICAgaWYgKGRvY3VtZW50
ICYmIG1hbmFnZXIpIHsKICAgICAgICAgICAgIC8vIFNldCB0aGUgY29va2llcwotICAgICAgICAg
ICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IG1hbmFnZXItPmNvb2tpZUphcigpOwotICAgICAg
ICAgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwo
clVybCk7CisgICAgICAgICAgICBOQU1NYW5pcHVsYXRvciBtYW5hZ2VyTWFuaXB1bGF0b3IobWFu
YWdlcik7CisgICAgICAgICAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IG1hbmFn
ZXJNYW5pcHVsYXRvci5jb29raWVzRm9yVXJsKHJVcmwpOwogCiAgICAgICAgICAgICAvLyBEb24n
dCBzZXQgdGhlIGhlYWRlciBpZiB0aGVyZSBhcmUgbm8gY29va2llcy4KICAgICAgICAgICAgIC8v
IFRoaXMgcHJldmVudHMgYSB3YXJuaW5nIGZyb20gYmVpbmcgZW1pdHRlZC4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9OQU1NYW5pcHVsYXRvci5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvcXQvTkFNTWFuaXB1bGF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjdiYmY5YTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvcXQvTkFNTWFuaXB1bGF0b3IuY3BwCkBAIC0wLDAgKzEsMTg5IEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5BTU1hbmlw
dWxhdG9yLmgiCisKKyNpbmNsdWRlICJBc3NlcnRpb25zLmgiCisjaW5jbHVkZSA8UUFic3RyYWN0
TmV0d29ya0NhY2hlPgorI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KKyNpbmNsdWRl
IDxRTmV0d29ya0Nvb2tpZUphcj4KKyNpbmNsdWRlIDxRU3RyaW5nTGlzdD4KKworc3RhdGljIGlu
dCBkdW1teVN0YXRpY1ZhcjEgPSBxUmVnaXN0ZXJNZXRhVHlwZTxRRnV0dXJlSW50ZXJmYWNlPGJv
b2w+ID4oIlFGdXR1cmVJbnRlcmZhY2U8Ym9vbD4iKTsKK3N0YXRpYyBpbnQgZHVtbXlTdGF0aWNW
YXIyID0gcVJlZ2lzdGVyTWV0YVR5cGU8UUZ1dHVyZUludGVyZmFjZTxRTGlzdDxRTmV0d29ya0Nv
b2tpZT4gPiA+KCJRRnV0dXJlSW50ZXJmYWNlPFFMaXN0PFFOZXR3b3JrQ29va2llPiA+Iik7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworTkFNTWFuaXB1bGF0b3I6Ok5BTU1hbmlwdWxhdG9yKFFO
ZXR3b3JrQWNjZXNzTWFuYWdlciAqbWFuYWdlcikKKyAgICA6IG1fbWFuYWdlcihtYW5hZ2VyKQor
eworICAgIG1vdmVUb1RocmVhZChtYW5hZ2VyLT50aHJlYWQoKSk7CisKKyAgICBjb25uZWN0KHRo
aXMsIFNJR05BTChsb2NhbFNldENvb2tpZXNSZXF1ZXN0ZWQoY29uc3QgUVVybCYsIGNvbnN0IFFT
dHJpbmcmKSksIFNMT1QobG9jYWxTZXRDb29raWVzKGNvbnN0IFFVcmwmLCBjb25zdCBRU3RyaW5n
JikpKTsKKyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChsb2NhbENvb2tpZXNGb3JVcmxSZXF1ZXN0
ZWQoUUZ1dHVyZUludGVyZmFjZTxRTGlzdDxRTmV0d29ya0Nvb2tpZT4gPiwgY29uc3QgUVVybCYp
KSwgU0xPVChsb2NhbENvb2tpZXNGb3JVcmwoUUZ1dHVyZUludGVyZmFjZTxRTGlzdDxRTmV0d29y
a0Nvb2tpZT4gPiwgY29uc3QgUVVybCYpKSk7CisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwobG9j
YWxXaWxsTG9hZEZyb21DYWNoZVJlcXVlc3RlZChRRnV0dXJlSW50ZXJmYWNlPGJvb2w+LCBjb25z
dCBRVXJsJikpLCBTTE9UKGxvY2FsV2lsbExvYWRGcm9tQ2FjaGUoUUZ1dHVyZUludGVyZmFjZTxi
b29sPiwgY29uc3QgUVVybCYpKSk7Cit9CisKK3ZvaWQgTkFNTWFuaXB1bGF0b3I6OmxvY2FsU2V0
Q29va2llcyhjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFTdHJpbmcmIGNvb2tpZXMpCit7CisgICAg
UUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZUxpc3QgPSBRTmV0d29ya0Nvb2tpZTo6cGFyc2VD
b29raWVzKGNvb2tpZXMudG9Bc2NpaSgpKTsKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT46Okl0
ZXJhdG9yIGl0ID0gY29va2llTGlzdC5iZWdpbigpOworICAgIHdoaWxlIChpdCAhPSBjb29raWVM
aXN0LmVuZCgpKSB7CisgICAgICAgIGlmIChpdC0+aXNIdHRwT25seSgpKQorICAgICAgICAgICAg
aXQgPSBjb29raWVMaXN0LmVyYXNlKGl0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKytp
dDsKKyAgICB9CisgICAgbV9tYW5hZ2VyLT5jb29raWVKYXIoKS0+c2V0Q29va2llc0Zyb21Vcmwo
Y29va2llTGlzdCwgdXJsKTsKK30KKwordm9pZCBOQU1NYW5pcHVsYXRvcjo6bG9jYWxDb29raWVz
Rm9yVXJsKFFGdXR1cmVJbnRlcmZhY2U8UUxpc3Q8UU5ldHdvcmtDb29raWU+ID4gZmksIGNvbnN0
IFFVcmwmIHVybCkKK3sKKyAgICBmaS5yZXBvcnRSZXN1bHQobV9tYW5hZ2VyLT5jb29raWVKYXIo
KS0+Y29va2llc0ZvclVybCh1cmwpKTsKKyAgICBmaS5yZXBvcnRGaW5pc2hlZCgpOworfQorCit2
b2lkIE5BTU1hbmlwdWxhdG9yOjpsb2NhbFdpbGxMb2FkRnJvbUNhY2hlKFFGdXR1cmVJbnRlcmZh
Y2U8Ym9vbD4gZmksIGNvbnN0IFFVcmwmIHVybCkKK3sKKyAgICBib29sIHJldFZhbCA9IGZhbHNl
OworICAgIGlmIChtX21hbmFnZXItPmNhY2hlKCkpIHsKKyAgICAgICAgcmV0VmFsID0gbV9tYW5h
Z2VyLT5jYWNoZSgpLT5tZXRhRGF0YSh1cmwpLmlzVmFsaWQoKTsKKyAgICB9CisKKyAgICBmaS5y
ZXBvcnRGaW5pc2hlZCgmcmV0VmFsKTsKK30KKworUmVwbHlNYW5pcHVsYXRvcjo6UmVwbHlNYW5p
cHVsYXRvcihRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm1hbmFnZXIpCisgICAgOiBtX21hbmFnZXIo
bWFuYWdlcikKKyAgICAsIG1fcmVwbHkoMCkKKyAgICAsIG1fZm9yd2FyZGluZ0RlZmVyZWQoZmFs
c2UpCisgICAgLCBtX2NvbnRlbnRMZW5ndGhIZWFkZXIoMCkKKyAgICAsIG1fZXJyb3IoUU5ldHdv
cmtSZXBseTo6Tm9FcnJvcikKKyAgICAsIG1faHR0cFN0YXR1c0NvZGUoMCkKK3sKKyAgICBtb3Zl
VG9UaHJlYWQobWFuYWdlci0+dGhyZWFkKCkpOworCisgICAgLy8gVGhpcyBtaWdodCBiZSB1bm5l
Y2Vzc2FyaWx5IGhlYXZ5IHRvIGRvIGZvciBlYWNoIHJlcXVlc3Qgd2hpbGUgd2UgY291bGQgaGF2
ZSB0aGUgc2FtZSB3cmFwcGVyIGZvciB0aGUgbWFuYWdlciBpbnN0ZWFkCisgICAgY29ubmVjdCh0
aGlzLCBTSUdOQUwobG9jYWxHZXRSZXF1ZXN0ZWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JikpLCBT
TE9UKGxvY2FsR2V0KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYpKSk7CisgICAgY29ubmVjdCh0aGlz
LCBTSUdOQUwobG9jYWxQb3N0UmVxdWVzdGVkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYsIFFJT0Rl
dmljZSopKSwgU0xPVChsb2NhbFBvc3QoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiwgUUlPRGV2aWNl
KikpKTsKKyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChsb2NhbEhlYWRSZXF1ZXN0ZWQoY29uc3Qg
UU5ldHdvcmtSZXF1ZXN0JikpLCBTTE9UKGxvY2FsSGVhZChjb25zdCBRTmV0d29ya1JlcXVlc3Qm
KSkpOworICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGxvY2FsUHV0UmVxdWVzdGVkKGNvbnN0IFFO
ZXR3b3JrUmVxdWVzdCYsIFFJT0RldmljZSopKSwgU0xPVChsb2NhbFB1dChjb25zdCBRTmV0d29y
a1JlcXVlc3QmLCBRSU9EZXZpY2UqKSkpOworICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGxvY2Fs
RGVsZXRlUmVzb3VyY2VSZXF1ZXN0ZWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JikpLCBTTE9UKGxv
Y2FsRGVsZXRlUmVzb3VyY2UoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JikpKTsKKyAgICBjb25uZWN0
KHRoaXMsIFNJR05BTChsb2NhbEN1c3RvbVJlcXVlc3RSZXF1ZXN0ZWQoY29uc3QgUU5ldHdvcmtS
ZXF1ZXN0JiwgY29uc3QgUUJ5dGVBcnJheSYpKSwgU0xPVChsb2NhbEN1c3RvbVJlcXVlc3QoY29u
c3QgUU5ldHdvcmtSZXF1ZXN0JiwgY29uc3QgUUJ5dGVBcnJheSYpKSk7CisgICAgY29ubmVjdCh0
aGlzLCBTSUdOQUwobG9jYWxBYm9ydFJlcXVlc3RlZCgpKSwgU0xPVChsb2NhbEFib3J0KCkpKTsK
KyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChsb2NhbFNldEZvcndhcmRpbmdEZWZlcmVkUmVxdWVz
dGVkKGJvb2wpKSwgU0xPVChsb2NhbFNldEZvcndhcmRpbmdEZWZlcmVkKGJvb2wpKSk7Cit9CisK
K1JlcGx5TWFuaXB1bGF0b3I6On5SZXBseU1hbmlwdWxhdG9yKCkKK3sKKyAgICBpZiAobV9yZXBs
eSkKKyAgICAgICAgZGVsZXRlIG1fcmVwbHk7Cit9CisKK3ZvaWQgUmVwbHlNYW5pcHVsYXRvcjo6
bG9jYWxHZXQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGxvY2FsU2V0
UmVwbHkobV9tYW5hZ2VyLT5nZXQocmVxdWVzdCkpOworfQorCit2b2lkIFJlcGx5TWFuaXB1bGF0
b3I6OmxvY2FsUG9zdChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QsIFFJT0RldmljZSog
ZGF0YSkKK3sKKyAgICBsb2NhbFNldFJlcGx5KG1fbWFuYWdlci0+cG9zdChyZXF1ZXN0LCBkYXRh
KSk7Cit9CisKK3ZvaWQgUmVwbHlNYW5pcHVsYXRvcjo6bG9jYWxIZWFkKGNvbnN0IFFOZXR3b3Jr
UmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBsb2NhbFNldFJlcGx5KG1fbWFuYWdlci0+aGVhZChy
ZXF1ZXN0KSk7Cit9CisKK3ZvaWQgUmVwbHlNYW5pcHVsYXRvcjo6bG9jYWxQdXQoY29uc3QgUU5l
dHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBRSU9EZXZpY2UqIGRhdGEpCit7CisgICAgbG9jYWxTZXRS
ZXBseShtX21hbmFnZXItPnB1dChyZXF1ZXN0LCBkYXRhKSk7Cit9CisKK3ZvaWQgUmVwbHlNYW5p
cHVsYXRvcjo6bG9jYWxEZWxldGVSZXNvdXJjZShjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVl
c3QpCit7CisgICAgbG9jYWxTZXRSZXBseShtX21hbmFnZXItPmRlbGV0ZVJlc291cmNlKHJlcXVl
c3QpKTsKK30KKwordm9pZCBSZXBseU1hbmlwdWxhdG9yOjpsb2NhbEN1c3RvbVJlcXVlc3QoY29u
c3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBRQnl0ZUFycmF5JiB2ZXJiKQorewor
ICAgIGxvY2FsU2V0UmVwbHkobV9tYW5hZ2VyLT5zZW5kQ3VzdG9tUmVxdWVzdChyZXF1ZXN0LCB2
ZXJiKSk7Cit9CisKK3ZvaWQgUmVwbHlNYW5pcHVsYXRvcjo6bG9jYWxBYm9ydCgpCit7CisgICAg
aWYgKG1fcmVwbHkpCisgICAgICAgIG1fcmVwbHktPmFib3J0KCk7Cit9CisKK3ZvaWQgUmVwbHlN
YW5pcHVsYXRvcjo6bG9jYWxGb3J3YXJkRGF0YSgpCit7CisgICAgaWYgKG1fcmVwbHktPmJ5dGVz
QXZhaWxhYmxlKCkpIHsKKyAgICAgICAgUUJ5dGVBcnJheSBkYXRhID0gbV9yZXBseS0+cmVhZCht
X3JlcGx5LT5ieXRlc0F2YWlsYWJsZSgpKTsKKyAgICAgICAgZW1pdCBkYXRhUmVjZWl2ZWQoZGF0
YSk7CisgICAgfQorfQorCit2b2lkIFJlcGx5TWFuaXB1bGF0b3I6OmxvY2FsU2V0Rm9yd2FyZGlu
Z0RlZmVyZWQoYm9vbCBmb3J3YXJkaW5nRGVmZXJlZCkKK3sKKyAgICBpZiAobV9mb3J3YXJkaW5n
RGVmZXJlZCAmJiAhZm9yd2FyZGluZ0RlZmVyZWQpCisgICAgICAgIGxvY2FsRm9yd2FyZERhdGEo
KTsKKyAgICBtX2ZvcndhcmRpbmdEZWZlcmVkID0gZm9yd2FyZGluZ0RlZmVyZWQ7Cit9CisKK3Zv
aWQgUmVwbHlNYW5pcHVsYXRvcjo6bG9jYWxNaXJyb3JNZW1iZXJzKCkKK3sKKyAgICBBU1NFUlQo
bV9yZXBseSk7CisgICAgUU11dGV4TG9ja2VyIGxvY2soJm1fbWlycm9yZWRNZW1iZXJzTXV0ZXgp
OworCisgICAgbV9jb250ZW50RGlzcG9zaXRpb25IZWFkZXIgPSBtX3JlcGx5LT5yYXdIZWFkZXIo
IkNvbnRlbnQtRGlzcG9zaXRpb24iKTsKKyAgICBtX2NvbnRlbnRMZW5ndGhIZWFkZXIgPSBtX3Jl
cGx5LT5oZWFkZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50TGVuZ3RoSGVhZGVyKS50b0xvbmdM
b25nKCk7CisgICAgbV9jb250ZW50VHlwZUhlYWRlciA9IG1fcmVwbHktPmhlYWRlcihRTmV0d29y
a1JlcXVlc3Q6OkNvbnRlbnRUeXBlSGVhZGVyKS50b1N0cmluZygpOworICAgIG1fZXJyb3IgPSBt
X3JlcGx5LT5lcnJvcigpOworICAgIG1fZXJyb3JTdHJpbmcgPSBtX3JlcGx5LT5lcnJvclN0cmlu
ZygpOworICAgIG1faHR0cFJlYXNvblBocmFzZSA9IG1fcmVwbHktPmF0dHJpYnV0ZShRTmV0d29y
a1JlcXVlc3Q6Okh0dHBSZWFzb25QaHJhc2VBdHRyaWJ1dGUpLnRvQnl0ZUFycmF5KCk7CisgICAg
bV9odHRwU3RhdHVzQ29kZSA9IG1fcmVwbHktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0
dHBTdGF0dXNDb2RlQXR0cmlidXRlKS50b0ludCgpOworICAgIG1fdXJsID0gbV9yZXBseS0+dXJs
KCk7CisgICAgbV9yZWRpcmVjdGlvblRhcmdldCA9IG1fcmVwbHktPmF0dHJpYnV0ZShRTmV0d29y
a1JlcXVlc3Q6OlJlZGlyZWN0aW9uVGFyZ2V0QXR0cmlidXRlKS50b1VybCgpOworI2lmIFFUX1ZF
UlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA3LCAwKQorICAgIG1fcmF3SGVhZGVyUGFpcnMg
PSBtX3JlcGx5LT5yYXdIZWFkZXJQYWlycygpOworI2Vsc2UKKyAgICBtX3Jhd0hlYWRlclBhaXJz
LmNsZWFyKCk7CisgICAgZm9yZWFjaCAoY29uc3QgUUJ5dGVBcnJheSYgaGVhZGVyTmFtZSwgbV9y
ZXBseS0+cmF3SGVhZGVyTGlzdCgpKQorICAgICAgICBtX3Jhd0hlYWRlclBhaXJzLmFwcGVuZChS
YXdIZWFkZXJQYWlyKGhlYWRlck5hbWUsIG1fcmVwbHktPnJhd0hlYWRlcihoZWFkZXJOYW1lKSkp
OworI2VuZGlmCit9CisKK3ZvaWQgUmVwbHlNYW5pcHVsYXRvcjo6bG9jYWxTZXRSZXBseShRTmV0
d29ya1JlcGx5ICpyZXBseSkKK3sKKyAgICBBU1NFUlQobV9yZXBseSA9PSAwKTsKKyAgICBtX3Jl
cGx5ID0gcmVwbHk7CisgICAgbV9yZXBseS0+c2V0UGFyZW50KDApOworICAgIGNvbm5lY3QobV9y
ZXBseSwgU0lHTkFMKHJlYWR5UmVhZCgpKSwgdGhpcywgU0xPVChsb2NhbEZvcndhcmREYXRhKCkp
KTsKKyAgICAvLyBNYWtlIHN1cmUgbG9jYWxNaXJyb3JNZW1iZXJzKCkgaXMgY2FsbGVkIGJlZm9y
ZSB0aGUgb3V0d2FyZCBzaWduYWwKKyAgICBjb25uZWN0KG1fcmVwbHksIFNJR05BTChmaW5pc2hl
ZCgpKSwgdGhpcywgU0xPVChsb2NhbE1pcnJvck1lbWJlcnMoKSksIFF0OjpEaXJlY3RDb25uZWN0
aW9uKTsKKyAgICBjb25uZWN0KG1fcmVwbHksIFNJR05BTChmaW5pc2hlZCgpKSwgdGhpcywgU0lH
TkFMKGZpbmlzaGVkKCkpKTsKKyAgICAvLyBNYWtlIHN1cmUgbG9jYWxNaXJyb3JNZW1iZXJzKCkg
aXMgY2FsbGVkIGJlZm9yZSB0aGUgb3V0d2FyZCBzaWduYWwKKyAgICBjb25uZWN0KG1fcmVwbHks
IFNJR05BTChtZXRhRGF0YUNoYW5nZWQoKSksIHRoaXMsIFNMT1QobG9jYWxNaXJyb3JNZW1iZXJz
KCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgY29ubmVjdChtX3JlcGx5LCBTSUdOQUwo
bWV0YURhdGFDaGFuZ2VkKCkpLCB0aGlzLCBTSUdOQUwobWV0YURhdGFDaGFuZ2VkKCkpKTsKKyAg
ICBjb25uZWN0KG1fcmVwbHksIFNJR05BTCh1cGxvYWRQcm9ncmVzcyhxaW50NjQsIHFpbnQ2NCkp
LCB0aGlzLCBTSUdOQUwodXBsb2FkUHJvZ3Jlc3MocWludDY0LCBxaW50NjQpKSk7Cit9CisKKwor
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L05BTU1hbmlwdWxhdG9y
LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvTkFNTWFuaXB1bGF0b3IuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTdhNGNjCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L05BTU1hbmlwdWxhdG9yLmgKQEAgLTAsMCArMSwx
ODQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisjaWZuZGVmIE5BTU1hbmlwdWxhdG9yX2gKKyNkZWZp
bmUgTkFNTWFuaXB1bGF0b3JfaAorCisjaW5jbHVkZSA8UUZ1dHVyZT4KKyNpbmNsdWRlIDxRTXV0
ZXg+CisjaW5jbHVkZSA8UU5ldHdvcmtDb29raWU+CisjaW5jbHVkZSA8UU5ldHdvcmtSZXBseT4K
KyNpbmNsdWRlIDxRT2JqZWN0PgorCitjbGFzcyBRTmV0d29ya0FjY2Vzc01hbmFnZXI7CitjbGFz
cyBRTmV0d29ya1JlcXVlc3Q7CitjbGFzcyBRVXJsOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIE5BTU1hbmlwdWxhdG9yIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitw
dWJsaWM6CisgICAgTkFNTWFuaXB1bGF0b3IoUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICptYW5hZ2Vy
KTsKKworICAgIHZvaWQgc2V0Q29va2llcyhjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFTdHJpbmcm
IGNvb2tpZXMpCisgICAgeworICAgICAgICBlbWl0IGxvY2FsU2V0Q29va2llc1JlcXVlc3RlZCh1
cmwsIGNvb2tpZXMpOworICAgIH0KKworICAgIFFGdXR1cmU8UUxpc3Q8UU5ldHdvcmtDb29raWU+
ID4gY29va2llc0ZvclVybChjb25zdCBRVXJsJiB1cmwpCisgICAgeworICAgICAgICBRRnV0dXJl
SW50ZXJmYWNlPFFMaXN0PFFOZXR3b3JrQ29va2llPiA+IGZpOworICAgICAgICBmaS5yZXBvcnRT
dGFydGVkKCk7CisgICAgICAgIGVtaXQgbG9jYWxDb29raWVzRm9yVXJsUmVxdWVzdGVkKGZpLCB1
cmwpOworICAgICAgICByZXR1cm4gZmkuZnV0dXJlKCk7CisgICAgfQorCisgICAgUUZ1dHVyZTxi
b29sPiB3aWxsTG9hZEZyb21DYWNoZShjb25zdCBRVXJsJiB1cmwpCisgICAgeworICAgICAgICBR
RnV0dXJlSW50ZXJmYWNlPGJvb2w+IGZpOworICAgICAgICBmaS5yZXBvcnRTdGFydGVkKCk7Cisg
ICAgICAgIGVtaXQgbG9jYWxXaWxsTG9hZEZyb21DYWNoZVJlcXVlc3RlZChmaSwgdXJsKTsKKyAg
ICAgICAgcmV0dXJuIGZpLmZ1dHVyZSgpOworICAgIH0KKworc2lnbmFsczoKKyAgICB2b2lkIGxv
Y2FsU2V0Q29va2llc1JlcXVlc3RlZChjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFTdHJpbmcmIGNv
b2tpZXMpOworICAgIHZvaWQgbG9jYWxDb29raWVzRm9yVXJsUmVxdWVzdGVkKFFGdXR1cmVJbnRl
cmZhY2U8UUxpc3Q8UU5ldHdvcmtDb29raWU+ID4gZmksIGNvbnN0IFFVcmwmIHVybCk7CisgICAg
dm9pZCBsb2NhbFdpbGxMb2FkRnJvbUNhY2hlUmVxdWVzdGVkKFFGdXR1cmVJbnRlcmZhY2U8Ym9v
bD4gZmksIGNvbnN0IFFVcmwmIHVybCk7CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBsb2Nh
bFNldENvb2tpZXMoY29uc3QgUVVybCYgdXJsLCBjb25zdCBRU3RyaW5nJiBjb29raWVzKTsKKyAg
ICB2b2lkIGxvY2FsQ29va2llc0ZvclVybChRRnV0dXJlSW50ZXJmYWNlPFFMaXN0PFFOZXR3b3Jr
Q29va2llPiA+IGZpLCBjb25zdCBRVXJsJiB1cmwpOworICAgIHZvaWQgbG9jYWxXaWxsTG9hZEZy
b21DYWNoZShRRnV0dXJlSW50ZXJmYWNlPGJvb2w+IGZpLCBjb25zdCBRVXJsJiB1cmwpOworCitw
cml2YXRlOgorICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbV9tYW5hZ2VyOworfTsKKworCitj
bGFzcyBSZXBseU1hbmlwdWxhdG9yIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitw
dWJsaWM6CisgICAgdHlwZWRlZiBRUGFpcjxRQnl0ZUFycmF5LCBRQnl0ZUFycmF5PiBSYXdIZWFk
ZXJQYWlyOworICAgIFJlcGx5TWFuaXB1bGF0b3IoUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICptYW5h
Z2VyKTsKKyAgICB+UmVwbHlNYW5pcHVsYXRvcigpOworICAgIHZvaWQgYWJvcnQoKQorICAgIHsK
KyAgICAgICAgZW1pdCBsb2NhbEFib3J0UmVxdWVzdGVkKCk7CisgICAgfQorICAgIHZvaWQgc2V0
Rm9yd2FyZGluZ0RlZmVyZWQoYm9vbCBmb3J3YXJkaW5nRGVmZXJlZCkKKyAgICB7CisgICAgICAg
IGVtaXQgbG9jYWxTZXRGb3J3YXJkaW5nRGVmZXJlZFJlcXVlc3RlZChmb3J3YXJkaW5nRGVmZXJl
ZCk7CisgICAgfQorCisgICAgUUJ5dGVBcnJheSBjb250ZW50RGlzcG9zaXRpb25IZWFkZXIoKSB7
IFFNdXRleExvY2tlciBsb2NrKCZtX21pcnJvcmVkTWVtYmVyc011dGV4KTsgcmV0dXJuIG1fY29u
dGVudERpc3Bvc2l0aW9uSGVhZGVyOyB9CisgICAgcWxvbmdsb25nIGNvbnRlbnRMZW5ndGhIZWFk
ZXIoKSB7IFFNdXRleExvY2tlciBsb2NrKCZtX21pcnJvcmVkTWVtYmVyc011dGV4KTsgcmV0dXJu
IG1fY29udGVudExlbmd0aEhlYWRlcjsgfQorICAgIFFTdHJpbmcgY29udGVudFR5cGVIZWFkZXIo
KSB7IFFNdXRleExvY2tlciBsb2NrKCZtX21pcnJvcmVkTWVtYmVyc011dGV4KTsgcmV0dXJuIG1f
Y29udGVudFR5cGVIZWFkZXI7IH0KKyAgICBRTmV0d29ya1JlcGx5OjpOZXR3b3JrRXJyb3IgZXJy
b3IoKSB7IFFNdXRleExvY2tlciBsb2NrKCZtX21pcnJvcmVkTWVtYmVyc011dGV4KTsgcmV0dXJu
IG1fZXJyb3I7IH0KKyAgICBRU3RyaW5nIGVycm9yU3RyaW5nKCkgeyBRTXV0ZXhMb2NrZXIgbG9j
aygmbV9taXJyb3JlZE1lbWJlcnNNdXRleCk7IHJldHVybiBtX2Vycm9yU3RyaW5nOyB9CisgICAg
UUJ5dGVBcnJheSBodHRwUmVhc29uUGhyYXNlKCkgeyBRTXV0ZXhMb2NrZXIgbG9jaygmbV9taXJy
b3JlZE1lbWJlcnNNdXRleCk7IHJldHVybiBtX2h0dHBSZWFzb25QaHJhc2U7IH0KKyAgICBpbnQg
aHR0cFN0YXR1c0NvZGUoKSB7IFFNdXRleExvY2tlciBsb2NrKCZtX21pcnJvcmVkTWVtYmVyc011
dGV4KTsgcmV0dXJuIG1faHR0cFN0YXR1c0NvZGU7IH0KKyAgICBRVXJsIHVybCgpIHsgUU11dGV4
TG9ja2VyIGxvY2soJm1fbWlycm9yZWRNZW1iZXJzTXV0ZXgpOyByZXR1cm4gbV91cmw7IH0KKyAg
ICBRVXJsIHJlZGlyZWN0aW9uVGFyZ2V0KCkgeyBRTXV0ZXhMb2NrZXIgbG9jaygmbV9taXJyb3Jl
ZE1lbWJlcnNNdXRleCk7IHJldHVybiBtX3JlZGlyZWN0aW9uVGFyZ2V0OyB9CisgICAgUUxpc3Q8
UmF3SGVhZGVyUGFpcj4gcmF3SGVhZGVyUGFpcnMoKSB7IFFNdXRleExvY2tlciBsb2NrKCZtX21p
cnJvcmVkTWVtYmVyc011dGV4KTsgcmV0dXJuIG1fcmF3SGVhZGVyUGFpcnM7IH0KKworICAgIFFO
ZXR3b3JrUmVwbHkqIHJlcGx5KCkKKyAgICB7CisgICAgICAgIC8vIENhcmVmdWwsIGFjY2Nlc3Np
bmcgdGhlIHJlcGx5IGFjY3Jvc3MgdGhyZWFkcyBtaWdodCBiZSBoYXphcmRvdXMgdG8geW91ciBo
ZWFsdGgKKyAgICAgICAgcmV0dXJuIG1fcmVwbHk7CisgICAgfQorcHVibGljOgorICAgIHZvaWQg
Z2V0KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCkKKyAgICB7CisgICAgICAgIGVtaXQg
bG9jYWxHZXRSZXF1ZXN0ZWQocmVxdWVzdCk7CisgICAgfQorICAgIHZvaWQgcG9zdChjb25zdCBR
TmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIFFJT0RldmljZSogZGF0YSkKKyAgICB7CisgICAgICAg
IGVtaXQgbG9jYWxQb3N0UmVxdWVzdGVkKHJlcXVlc3QsIGRhdGEpOworICAgIH0KKyAgICB2b2lk
IGhlYWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0KQorICAgIHsKKyAgICAgICAgZW1p
dCBsb2NhbEhlYWRSZXF1ZXN0ZWQocmVxdWVzdCk7CisgICAgfQorICAgIHZvaWQgcHV0KGNvbnN0
IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgUUlPRGV2aWNlKiBkYXRhKQorICAgIHsKKyAgICAg
ICAgZW1pdCBsb2NhbFB1dFJlcXVlc3RlZChyZXF1ZXN0LCBkYXRhKTsKKyAgICB9CisgICAgdm9p
ZCBkZWxldGVSZXNvdXJjZShjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QpCisgICAgewor
ICAgICAgICBlbWl0IGxvY2FsRGVsZXRlUmVzb3VyY2VSZXF1ZXN0ZWQocmVxdWVzdCk7CisgICAg
fQorICAgIHZvaWQgc2VuZEN1c3RvbVJlcXVlc3QoY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXF1
ZXN0LCBjb25zdCBRQnl0ZUFycmF5JiB2ZXJiKQorICAgIHsKKyAgICAgICAgZW1pdCBsb2NhbEN1
c3RvbVJlcXVlc3RSZXF1ZXN0ZWQocmVxdWVzdCwgdmVyYik7CisgICAgfQorCitzaWduYWxzOgor
ICAgIHZvaWQgbG9jYWxHZXRSZXF1ZXN0ZWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0
KTsKKyAgICB2b2lkIGxvY2FsUG9zdFJlcXVlc3RlZChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJl
cXVlc3QsIFFJT0RldmljZSogZGF0YSk7CisgICAgdm9pZCBsb2NhbEhlYWRSZXF1ZXN0ZWQoY29u
c3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0KTsKKyAgICB2b2lkIGxvY2FsUHV0UmVxdWVzdGVk
KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwgUUlPRGV2aWNlKiBkYXRhKTsKKyAgICB2
b2lkIGxvY2FsRGVsZXRlUmVzb3VyY2VSZXF1ZXN0ZWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiBy
ZXF1ZXN0KTsKKyAgICB2b2lkIGxvY2FsQ3VzdG9tUmVxdWVzdFJlcXVlc3RlZChjb25zdCBRTmV0
d29ya1JlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFFCeXRlQXJyYXkmIHZlcmIpOworICAgIHZvaWQg
bG9jYWxBYm9ydFJlcXVlc3RlZCgpOworICAgIHZvaWQgbG9jYWxTZXRGb3J3YXJkaW5nRGVmZXJl
ZFJlcXVlc3RlZChib29sIGZvcndhcmRpbmdEZWZlcmVkKTsKKworICAgIHZvaWQgZmluaXNoZWQo
KTsKKyAgICB2b2lkIHJlYWR5UmVhZCgpOworICAgIHZvaWQgbWV0YURhdGFDaGFuZ2VkKCk7Cisg
ICAgdm9pZCB1cGxvYWRQcm9ncmVzcyhxaW50NjQgYnl0ZXNTZW50LCBxaW50NjQgYnl0ZXNUb3Rh
bCk7CisgICAgdm9pZCBkYXRhUmVjZWl2ZWQoY29uc3QgUUJ5dGVBcnJheSAmZGF0YSk7CisKK3By
aXZhdGUgc2xvdHM6CisgICAgdm9pZCBsb2NhbEdldChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJl
cXVlc3QpOworICAgIHZvaWQgbG9jYWxQb3N0KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVz
dCwgUUlPRGV2aWNlKiBkYXRhKTsKKyAgICB2b2lkIGxvY2FsSGVhZChjb25zdCBRTmV0d29ya1Jl
cXVlc3QmIHJlcXVlc3QpOworICAgIHZvaWQgbG9jYWxQdXQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0
JiByZXF1ZXN0LCBRSU9EZXZpY2UqIGRhdGEpOworICAgIHZvaWQgbG9jYWxEZWxldGVSZXNvdXJj
ZShjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QpOworICAgIHZvaWQgbG9jYWxDdXN0b21S
ZXF1ZXN0KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUUJ5dGVBcnJheSYg
dmVyYik7CisgICAgdm9pZCBsb2NhbEFib3J0KCk7CisgICAgdm9pZCBsb2NhbEZvcndhcmREYXRh
KCk7CisgICAgdm9pZCBsb2NhbFNldEZvcndhcmRpbmdEZWZlcmVkKGJvb2wgZm9yd2FyZGluZ0Rl
ZmVyZWQpOworICAgIHZvaWQgbG9jYWxNaXJyb3JNZW1iZXJzKCk7CisKK3ByaXZhdGU6CisgICAg
dm9pZCBsb2NhbFNldFJlcGx5KFFOZXR3b3JrUmVwbHkgKnJlcGx5KTsKKworICAgIFFOZXR3b3Jr
QWNjZXNzTWFuYWdlciAqbV9tYW5hZ2VyOworICAgIFFOZXR3b3JrUmVwbHkgKm1fcmVwbHk7Cisg
ICAgYm9vbCBtX2ZvcndhcmRpbmdEZWZlcmVkOworCisgICAgLy8gTWlycm9yZWQgbWVtYmVycwor
ICAgIFFNdXRleCBtX21pcnJvcmVkTWVtYmVyc011dGV4OworICAgIFFCeXRlQXJyYXkgbV9jb250
ZW50RGlzcG9zaXRpb25IZWFkZXI7CisgICAgcWxvbmdsb25nIG1fY29udGVudExlbmd0aEhlYWRl
cjsKKyAgICBRU3RyaW5nIG1fY29udGVudFR5cGVIZWFkZXI7CisgICAgUU5ldHdvcmtSZXBseTo6
TmV0d29ya0Vycm9yIG1fZXJyb3I7CisgICAgUVN0cmluZyBtX2Vycm9yU3RyaW5nOworICAgIFFC
eXRlQXJyYXkgbV9odHRwUmVhc29uUGhyYXNlOworICAgIGludCBtX2h0dHBTdGF0dXNDb2RlOwor
ICAgIFFVcmwgbV91cmw7CisgICAgUVVybCBtX3JlZGlyZWN0aW9uVGFyZ2V0OworICAgIFFMaXN0
PFJhd0hlYWRlclBhaXI+IG1fcmF3SGVhZGVyUGFpcnM7Cit9OworCit9CisKKworI2VuZGlmIC8v
IE5BTU1hbmlwdWxhdG9yX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9x
dC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQv
UU5ldHdvcmtSZXBseUhhbmRsZXIuY3BwCmluZGV4IDVjMDVmYTYuLmM4MTU2OTUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmNw
cApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRl
ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTkFNTWFuaXB1bGF0b3IuaCIKICNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgpAQCAtNDYsNyArNDcsNyBAQAog
Ly8gSXQgaXMgZml4ZWQgaW4gUXQgNC42LjMuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzIxMTMKIC8vIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzY3NTUKICNpZiBRVF9WRVJTSU9OID4gUVRfVkVSU0lPTl9DSEVDSyg0LCA2
LCAyKQotI2RlZmluZSBTSUdOQUxfQ09OTiBRdDo6RGlyZWN0Q29ubmVjdGlvbgorI2RlZmluZSBT
SUdOQUxfQ09OTiBRdDo6QXV0b0Nvbm5lY3Rpb24KICNlbHNlCiAjZGVmaW5lIFNJR05BTF9DT05O
IFF0OjpRdWV1ZWRDb25uZWN0aW9uCiAjZW5kaWYKQEAgLTU2LDggKzU3LDkgQEAgc3RhdGljIGNv
bnN0IGludCBnTWF4UmVjdXJzaW9uTGltaXQgPSAxMDsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Ly8gVGFrZSBhIGRlZXAgY29weSBvZiB0aGUgRm9ybURhdGFFbGVtZW50Ci1Gb3JtRGF0YUlPRGV2
aWNlOjpGb3JtRGF0YUlPRGV2aWNlKEZvcm1EYXRhKiBkYXRhKQotICAgIDogbV9mb3JtRWxlbWVu
dHMoZGF0YSA/IGRhdGEtPmVsZW1lbnRzKCkgOiBWZWN0b3I8Rm9ybURhdGFFbGVtZW50PigpKQor
Rm9ybURhdGFJT0RldmljZTo6Rm9ybURhdGFJT0RldmljZShGb3JtRGF0YSogZGF0YSwgUU9iamVj
dCogcGFyZW50KQorICAgIDogUUlPRGV2aWNlKHBhcmVudCkKKyAgICAsIG1fZm9ybUVsZW1lbnRz
KGRhdGEgPyBkYXRhLT5lbGVtZW50cygpIDogVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4oKSkKICAg
ICAsIG1fY3VycmVudEZpbGUoMCkKICAgICAsIG1fY3VycmVudERlbHRhKDApCiAgICAgLCBtX2Zp
bGVTaXplKDApCkBAIC0xOTIsNiArMTk0LDEwIEBAIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpRTmV0
d29ya1JlcGx5SGFuZGxlcihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBMb2FkTW9kZSBsb2FkCiAg
ICAgLCBtX3Nob3VsZEZvcndhcmREYXRhKGZhbHNlKQogICAgICwgbV9yZWRpcmVjdGlvblRyaWVz
KGdNYXhSZWN1cnNpb25MaW1pdCkKIHsKKyAgICAvLyBNYWtlIHRoaXMgYSBkaXJlY3QgZnVuY3Rp
b24gY2FsbCBvbmNlIHdlIHJlcXVpcmUgNC42LjErLgorICAgIGNvbm5lY3QodGhpcywgU0lHTkFM
KHByb2Nlc3NRdWV1ZWRJdGVtcygpKSwKKyAgICAgICAgICAgIHRoaXMsIFNMT1Qoc2VuZFF1ZXVl
ZEl0ZW1zKCkpLCBTSUdOQUxfQ09OTik7CisKICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QgJnIg
PSBtX3Jlc291cmNlSGFuZGxlLT5maXJzdFJlcXVlc3QoKTsKIAogICAgIGlmIChyLmh0dHBNZXRo
b2QoKSA9PSAiR0VUIikKQEAgLTIyMiw2ICsyMjgsMTIgQEAgUU5ldHdvcmtSZXBseUhhbmRsZXI6
OlFOZXR3b3JrUmVwbHlIYW5kbGVyKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIExvYWRNb2RlIGxv
YWQKICAgICAgICAgc3RhcnQoKTsKIH0KIAorUU5ldHdvcmtSZXBseUhhbmRsZXI6On5RTmV0d29y
a1JlcGx5SGFuZGxlcigpCit7CisgICAgaWYgKG1fcmVwbHkpCisgICAgICAgIG1fcmVwbHktPmRl
bGV0ZUxhdGVyKCk7Cit9CisKIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OnNldExvYWRNb2Rl
KExvYWRNb2RlIG1vZGUpCiB7CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI2NTU2CkBAIC0yMzEsOSArMjQzLDEzIEBAIHZvaWQgUU5ldHdvcmtSZXBseUhh
bmRsZXI6OnNldExvYWRNb2RlKExvYWRNb2RlIG1vZGUpCiAgICAgY2FzZSBMb2FkTm9ybWFsOgog
ICAgICAgICBtX2xvYWRNb2RlID0gTG9hZFJlc3VtaW5nOwogICAgICAgICBlbWl0IHByb2Nlc3NR
dWV1ZWRJdGVtcygpOworICAgICAgICAvLyBSZXN0YXJ0IGZvcndhcmRpbmcgb25seSBhZnRlciBw
cm9jZXNzUXVldWVkSXRlbXMgdG8gbWFrZSBzdXJlCisgICAgICAgIC8vIG91ciBidWZmZXJlZCBk
YXRhIHdhcyBoYW5kbGVkIGJlZm9yZSBhbnkgaW5jb21pbmcgZGF0YS4KKyAgICAgICAgbV9yZXBs
eS0+c2V0Rm9yd2FyZGluZ0RlZmVyZWQoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IExvYWREZWZlcnJlZDoKICAgICAgICAgbV9sb2FkTW9kZSA9IExvYWREZWZlcnJlZDsKKyAgICAg
ICAgbV9yZXBseS0+c2V0Rm9yd2FyZGluZ0RlZmVyZWQodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgTG9hZFJlc3VtaW5nOgogICAgICAgICBRX0FTU0VSVCgwKTsgLy8gc2hvdWxkIG5l
dmVyIGhhcHBlbgpAQCAtMjQ1LDMxICsyNjEsMzAgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxl
cjo6YWJvcnQoKQogewogICAgIG1fcmVzb3VyY2VIYW5kbGUgPSAwOwogICAgIGlmIChtX3JlcGx5
KSB7Ci0gICAgICAgIFFOZXR3b3JrUmVwbHkqIHJlcGx5ID0gcmVsZWFzZSgpOworICAgICAgICBS
ZXBseU1hbmlwdWxhdG9yKiByZXBseSA9IHJlbGVhc2UoKTsKICAgICAgICAgcmVwbHktPmFib3J0
KCk7CiAgICAgICAgIHJlcGx5LT5kZWxldGVMYXRlcigpOwogICAgIH0KICAgICBkZWxldGVMYXRl
cigpOwogfQogCi1RTmV0d29ya1JlcGx5KiBRTmV0d29ya1JlcGx5SGFuZGxlcjo6cmVsZWFzZSgp
CitSZXBseU1hbmlwdWxhdG9yKiBRTmV0d29ya1JlcGx5SGFuZGxlcjo6cmVsZWFzZSgpCiB7Ci0g
ICAgUU5ldHdvcmtSZXBseSogcmVwbHkgPSBtX3JlcGx5OworICAgIFJlcGx5TWFuaXB1bGF0b3Iq
IHJlcGx5ID0gbV9yZXBseTsKICAgICBpZiAobV9yZXBseSkgewogICAgICAgICBkaXNjb25uZWN0
KG1fcmVwbHksIDAsIHRoaXMsIDApOwogICAgICAgICAvLyBXZSBoYXZlIHF1ZXVlZCBjb25uZWN0
aW9ucyB0byB0aGUgUU5ldHdvcmtSZXBseS4gTWFrZSBzdXJlIGFueQogICAgICAgICAvLyBwb3N0
ZWQgbWV0YSBjYWxsIGV2ZW50cyB0aGF0IHdlcmUgdGhlIHJlc3VsdCBvZiBhIHNpZ25hbCBlbWlz
c2lvbgogICAgICAgICAvLyBkb24ndCByZWFjaCB0aGUgc2xvdHMgaW4gb3VyIGluc3RhbmNlLgog
ICAgICAgICBRQ29yZUFwcGxpY2F0aW9uOjpyZW1vdmVQb3N0ZWRFdmVudHModGhpcywgUUV2ZW50
OjpNZXRhQ2FsbCk7Ci0gICAgICAgIG1fcmVwbHktPnNldFBhcmVudCgwKTsKICAgICAgICAgbV9y
ZXBseSA9IDA7CiAgICAgfQogICAgIHJldHVybiByZXBseTsKIH0KIAotc3RhdGljIGJvb2wgaWdu
b3JlSHR0cEVycm9yKFFOZXR3b3JrUmVwbHkqIHJlcGx5LCBib29sIHJlY2VpdmVkRGF0YSkKK3N0
YXRpYyBib29sIGlnbm9yZUh0dHBFcnJvcihSZXBseU1hbmlwdWxhdG9yKiByZXBseSwgYm9vbCBy
ZWNlaXZlZERhdGEpCiB7Ci0gICAgaW50IGh0dHBTdGF0dXNDb2RlID0gcmVwbHktPmF0dHJpYnV0
ZShRTmV0d29ya1JlcXVlc3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRlKS50b0ludCgpOworICAg
IGludCBodHRwU3RhdHVzQ29kZSA9IHJlcGx5LT5odHRwU3RhdHVzQ29kZSgpOwogCiAgICAgaWYg
KGh0dHBTdGF0dXNDb2RlID09IDQwMSB8fCBodHRwU3RhdHVzQ29kZSA9PSA0MDcpCiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMzA1LDEwICszMjAsMTAgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFu
ZGxlcjo6ZmluaXNoKCkKICAgICAgICAgICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhtX3Jl
c291cmNlSGFuZGxlLCAwKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFFVcmwgdXJs
ID0gbV9yZXBseS0+dXJsKCk7Ci0gICAgICAgICAgICBpbnQgaHR0cFN0YXR1c0NvZGUgPSBtX3Jl
cGx5LT5hdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpIdHRwU3RhdHVzQ29kZUF0dHJpYnV0ZSku
dG9JbnQoKTsKKyAgICAgICAgICAgIGludCBodHRwU3RhdHVzQ29kZSA9IG1fcmVwbHktPmh0dHBT
dGF0dXNDb2RlKCk7CiAKICAgICAgICAgICAgIGlmIChodHRwU3RhdHVzQ29kZSkgewotICAgICAg
ICAgICAgICAgIFJlc291cmNlRXJyb3IgZXJyb3IoIkhUVFAiLCBodHRwU3RhdHVzQ29kZSwgdXJs
LnRvU3RyaW5nKCksIG1fcmVwbHktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0dHBSZWFz
b25QaHJhc2VBdHRyaWJ1dGUpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIFJlc291cmNl
RXJyb3IgZXJyb3IoIkhUVFAiLCBodHRwU3RhdHVzQ29kZSwgdXJsLnRvU3RyaW5nKCksIFFTdHJp
bmc6OmZyb21Bc2NpaShtX3JlcGx5LT5odHRwUmVhc29uUGhyYXNlKCkpKTsKICAgICAgICAgICAg
ICAgICBjbGllbnQtPmRpZEZhaWwobV9yZXNvdXJjZUhhbmRsZSwgZXJyb3IpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9yKCJRdE5ldHdv
cmsiLCBtX3JlcGx5LT5lcnJvcigpLCB1cmwudG9TdHJpbmcoKSwgbV9yZXBseS0+ZXJyb3JTdHJp
bmcoKSk7CkBAIC0zNDYsNyArMzYxLDcgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6c2Vu
ZFJlc3BvbnNlSWZOZWVkZWQoKQogICAgIGlmICghY2xpZW50KQogICAgICAgICByZXR1cm47CiAK
LSAgICBXVEY6OlN0cmluZyBjb250ZW50VHlwZSA9IG1fcmVwbHktPmhlYWRlcihRTmV0d29ya1Jl
cXVlc3Q6OkNvbnRlbnRUeXBlSGVhZGVyKS50b1N0cmluZygpOworICAgIFdURjo6U3RyaW5nIGNv
bnRlbnRUeXBlID0gbV9yZXBseS0+Y29udGVudFR5cGVIZWFkZXIoKTsKICAgICBXVEY6OlN0cmlu
ZyBlbmNvZGluZyA9IGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb250ZW50VHlwZSk7CiAg
ICAgV1RGOjpTdHJpbmcgbWltZVR5cGUgPSBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGNv
bnRlbnRUeXBlKTsKIApAQCAtMzU3LDcgKzM3Miw3IEBAIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRs
ZXI6OnNlbmRSZXNwb25zZUlmTmVlZGVkKCkKIAogICAgIEtVUkwgdXJsKG1fcmVwbHktPnVybCgp
KTsKICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKHVybCwgbWltZVR5cGUubG93ZXIoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcmVwbHktPmhlYWRlcihRTmV0d29ya1Jl
cXVlc3Q6OkNvbnRlbnRMZW5ndGhIZWFkZXIpLnRvTG9uZ0xvbmcoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fcmVwbHktPmNvbnRlbnRMZW5ndGhIZWFkZXIoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLCBTdHJpbmcoKSk7CiAKICAgICBpZiAodXJs
LmlzTG9jYWxGaWxlKCkpIHsKQEAgLTM2NiwxMCArMzgxLDEwIEBAIHZvaWQgUU5ldHdvcmtSZXBs
eUhhbmRsZXI6OnNlbmRSZXNwb25zZUlmTmVlZGVkKCkKICAgICB9CiAKICAgICAvLyBUaGUgc3Rh
dHVzIGNvZGUgaXMgZXF1YWwgdG8gMCBmb3IgcHJvdG9jb2xzIG5vdCBpbiB0aGUgSFRUUCBmYW1p
bHkuCi0gICAgaW50IHN0YXR1c0NvZGUgPSBtX3JlcGx5LT5hdHRyaWJ1dGUoUU5ldHdvcmtSZXF1
ZXN0OjpIdHRwU3RhdHVzQ29kZUF0dHJpYnV0ZSkudG9JbnQoKTsKKyAgICBpbnQgc3RhdHVzQ29k
ZSA9IG1fcmVwbHktPmh0dHBTdGF0dXNDb2RlKCk7CiAKICAgICBpZiAodXJsLnByb3RvY29sSW5I
VFRQRmFtaWx5KCkpIHsKLSAgICAgICAgU3RyaW5nIHN1Z2dlc3RlZEZpbGVuYW1lID0gZmlsZW5h
bWVGcm9tSFRUUENvbnRlbnREaXNwb3NpdGlvbihRU3RyaW5nOjpmcm9tQXNjaWkobV9yZXBseS0+
cmF3SGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uIikpKTsKKyAgICAgICAgU3RyaW5nIHN1Z2dl
c3RlZEZpbGVuYW1lID0gZmlsZW5hbWVGcm9tSFRUUENvbnRlbnREaXNwb3NpdGlvbihRU3RyaW5n
Ojpmcm9tQXNjaWkobV9yZXBseS0+Y29udGVudERpc3Bvc2l0aW9uSGVhZGVyKCkpKTsKIAogICAg
ICAgICBpZiAoIXN1Z2dlc3RlZEZpbGVuYW1lLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlc3Bv
bnNlLnNldFN1Z2dlc3RlZEZpbGVuYW1lKHN1Z2dlc3RlZEZpbGVuYW1lKTsKQEAgLTM3NywyMSAr
MzkyLDE1IEBAIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OnNlbmRSZXNwb25zZUlmTmVlZGVk
KCkKICAgICAgICAgICAgIHJlc3BvbnNlLnNldFN1Z2dlc3RlZEZpbGVuYW1lKHVybC5sYXN0UGF0
aENvbXBvbmVudCgpKTsKIAogICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShzdGF0
dXNDb2RlKTsKLSAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQobV9yZXBseS0+YXR0
cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0cFJlYXNvblBocmFzZUF0dHJpYnV0ZSkudG9CeXRl
QXJyYXkoKS5jb25zdERhdGEoKSk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0
KG1fcmVwbHktPmh0dHBSZWFzb25QaHJhc2UoKS5jb25zdERhdGEoKSk7CiAKICAgICAgICAgLy8g
QWRkIHJlbWFpbmluZyBoZWFkZXJzLgotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVD
Syg0LCA3LCAwKQotICAgICAgICBmb3JlYWNoIChjb25zdCBRTmV0d29ya1JlcGx5OjpSYXdIZWFk
ZXJQYWlyJiBwYWlyLCBtX3JlcGx5LT5yYXdIZWFkZXJQYWlycygpKSB7CisgICAgICAgIGZvcmVh
Y2ggKGNvbnN0IFJlcGx5TWFuaXB1bGF0b3I6OlJhd0hlYWRlclBhaXImIHBhaXIsIG1fcmVwbHkt
PnJhd0hlYWRlclBhaXJzKCkpIHsKICAgICAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJG
aWVsZChRU3RyaW5nOjpmcm9tQXNjaWkocGFpci5maXJzdCksIFFTdHJpbmc6OmZyb21Bc2NpaShw
YWlyLnNlY29uZCkpOwogICAgICAgICB9Ci0jZWxzZQotICAgICAgICBmb3JlYWNoIChjb25zdCBR
Qnl0ZUFycmF5JiBoZWFkZXJOYW1lLCBtX3JlcGx5LT5yYXdIZWFkZXJMaXN0KCkpIHsKLSAgICAg
ICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChRU3RyaW5nOjpmcm9tQXNjaWkoaGVh
ZGVyTmFtZSksIFFTdHJpbmc6OmZyb21Bc2NpaShtX3JlcGx5LT5yYXdIZWFkZXIoaGVhZGVyTmFt
ZSkpKTsKLSAgICAgICAgfQotI2VuZGlmCiAgICAgfQogCi0gICAgUVVybCByZWRpcmVjdGlvbiA9
IG1fcmVwbHktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6OlJlZGlyZWN0aW9uVGFyZ2V0QXR0
cmlidXRlKS50b1VybCgpOworICAgIFFVcmwgcmVkaXJlY3Rpb24gPSBtX3JlcGx5LT5yZWRpcmVj
dGlvblRhcmdldCgpOwogICAgIGlmIChyZWRpcmVjdGlvbi5pc1ZhbGlkKCkpIHsKICAgICAgICAg
UVVybCBuZXdVcmwgPSBtX3JlcGx5LT51cmwoKS5yZXNvbHZlZChyZWRpcmVjdGlvbik7CiAKQEAg
LTQzNiwxMSArNDQ1LDEzIEBAIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OnNlbmRSZXNwb25z
ZUlmTmVlZGVkKCkKICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShtX3Jlc291cmNlSGFu
ZGxlLCByZXNwb25zZSk7CiB9CiAKLXZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OmZvcndhcmRE
YXRhKCkKK3ZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OmZvcndhcmREYXRhKGNvbnN0IFFCeXRl
QXJyYXkgJmRhdGEpCiB7CiAgICAgbV9zaG91bGRGb3J3YXJkRGF0YSA9IChtX2xvYWRNb2RlICE9
IExvYWROb3JtYWwpOwotICAgIGlmIChtX3Nob3VsZEZvcndhcmREYXRhKQorICAgIGlmIChtX3No
b3VsZEZvcndhcmREYXRhKSB7CisgICAgICAgIG1fYnVmZmVyZWREYXRhICs9IGRhdGE7CiAgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKICAgICBpZiAoIWRhdGEuaXNFbXB0eSgpKQogICAgICAgICBt
X3Jlc3BvbnNlQ29udGFpbnNEYXRhID0gdHJ1ZTsKQEAgLTQ1NCw4ICs0NjUsNiBAQCB2b2lkIFFO
ZXR3b3JrUmVwbHlIYW5kbGVyOjpmb3J3YXJkRGF0YSgpCiAgICAgaWYgKCFtX3Jlc291cmNlSGFu
ZGxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBRQnl0ZUFycmF5IGRhdGEgPSBtX3JlcGx5LT5y
ZWFkKG1fcmVwbHktPmJ5dGVzQXZhaWxhYmxlKCkpOwotCiAgICAgUmVzb3VyY2VIYW5kbGVDbGll
bnQqIGNsaWVudCA9IG1fcmVzb3VyY2VIYW5kbGUtPmNsaWVudCgpOwogICAgIGlmICghY2xpZW50
KQogICAgICAgICByZXR1cm47CkBAIC00OTgsNDEgKzUwNyw1OCBAQCB2b2lkIFFOZXR3b3JrUmVw
bHlIYW5kbGVyOjpzdGFydCgpCiAgICAgICAgICYmICghdXJsLnRvTG9jYWxGaWxlKCkuaXNFbXB0
eSgpIHx8IHVybC5zY2hlbWUoKSA9PSBRTGF0aW4xU3RyaW5nKCJkYXRhIikpKQogICAgICAgICBt
X21ldGhvZCA9IFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6R2V0T3BlcmF0aW9uOwogCisgICAgbV9y
ZXBseSA9IG5ldyBSZXBseU1hbmlwdWxhdG9yKG1hbmFnZXIpOworICAgIGNvbm5lY3QobV9yZXBs
eSwgU0lHTkFMKGZpbmlzaGVkKCkpLAorICAgICAgICAgICAgdGhpcywgU0xPVChmaW5pc2goKSks
IFNJR05BTF9DT05OKTsKKworICAgIC8vIEZvciBodHRwKHMpIHdlIGtub3cgdGhhdCB0aGUgaGVh
ZGVycyBhcmUgY29tcGxldGUgdXBvbiBtZXRhRGF0YUNoYW5nZWQoKSBlbWlzc2lvbiwgc28gd2UK
KyAgICAvLyBjYW4gc2VuZCB0aGUgcmVzcG9uc2UgYXMgZWFybHkgYXMgcG9zc2libGUKKyAgICBp
ZiAoc2NoZW1lID09IFFMYXRpbjFTdHJpbmcoImh0dHAiKSB8fCBzY2hlbWUgPT0gUUxhdGluMVN0
cmluZygiaHR0cHMiKSkKKyAgICAgICAgY29ubmVjdChtX3JlcGx5LCBTSUdOQUwobWV0YURhdGFD
aGFuZ2VkKCkpLAorICAgICAgICAgICAgICAgIHRoaXMsIFNMT1Qoc2VuZFJlc3BvbnNlSWZOZWVk
ZWQoKSksIFNJR05BTF9DT05OKTsKKworICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKGRhdGFS
ZWNlaXZlZChjb25zdCBRQnl0ZUFycmF5JikpLAorICAgICAgICAgICAgdGhpcywgU0xPVChmb3J3
YXJkRGF0YShjb25zdCBRQnl0ZUFycmF5JikpLCBTSUdOQUxfQ09OTik7CisKKyAgICBpZiAobV9y
ZXNvdXJjZUhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkucmVwb3J0VXBsb2FkUHJvZ3Jlc3MoKSkgewor
ICAgICAgICBjb25uZWN0KG1fcmVwbHksIFNJR05BTCh1cGxvYWRQcm9ncmVzcyhxaW50NjQsIHFp
bnQ2NCkpLAorICAgICAgICAgICAgICAgIHRoaXMsIFNMT1QodXBsb2FkUHJvZ3Jlc3MocWludDY0
LCBxaW50NjQpKSwgU0lHTkFMX0NPTk4pOworICAgIH0KKwogICAgIHN3aXRjaCAobV9tZXRob2Qp
IHsKICAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkdldE9wZXJhdGlvbjoKLSAg
ICAgICAgICAgIG1fcmVwbHkgPSBtYW5hZ2VyLT5nZXQobV9yZXF1ZXN0KTsKKyAgICAgICAgICAg
IG1fcmVwbHktPmdldChtX3JlcXVlc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpQb3N0T3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBG
b3JtRGF0YUlPRGV2aWNlKiBwb3N0RGV2aWNlID0gbmV3IEZvcm1EYXRhSU9EZXZpY2UoZC0+bV9m
aXJzdFJlcXVlc3QuaHR0cEJvZHkoKSk7IAorICAgICAgICAgICAgRm9ybURhdGFJT0RldmljZSog
cG9zdERldmljZSA9IG5ldyBGb3JtRGF0YUlPRGV2aWNlKGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBC
b2R5KCksIHRoaXMpOwogICAgICAgICAgICAgLy8gV2UgbWF5IGJlIHVwbG9hZGluZyBmaWxlcyBz
byBwcmV2ZW50IFFOUiBmcm9tIGJ1ZmZlcmluZyBkYXRhCiAgICAgICAgICAgICBtX3JlcXVlc3Qu
c2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudExlbmd0aEhlYWRlciwgcG9zdERldmlj
ZS0+Z2V0Rm9ybURhdGFTaXplKCkpOwogICAgICAgICAgICAgbV9yZXF1ZXN0LnNldEF0dHJpYnV0
ZShRTmV0d29ya1JlcXVlc3Q6OkRvTm90QnVmZmVyVXBsb2FkRGF0YUF0dHJpYnV0ZSwgUVZhcmlh
bnQodHJ1ZSkpOwotICAgICAgICAgICAgbV9yZXBseSA9IG1hbmFnZXItPnBvc3QobV9yZXF1ZXN0
LCBwb3N0RGV2aWNlKTsKLSAgICAgICAgICAgIHBvc3REZXZpY2UtPnNldFBhcmVudChtX3JlcGx5
KTsKKyAgICAgICAgICAgIG1fcmVwbHktPnBvc3QobV9yZXF1ZXN0LCBwb3N0RGV2aWNlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NN
YW5hZ2VyOjpIZWFkT3BlcmF0aW9uOgotICAgICAgICAgICAgbV9yZXBseSA9IG1hbmFnZXItPmhl
YWQobV9yZXF1ZXN0KTsKKyAgICAgICAgICAgIG1fcmVwbHktPmhlYWQobV9yZXF1ZXN0KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6UHV0
T3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICBGb3JtRGF0YUlPRGV2aWNlKiBwdXREZXZpY2UgPSBu
ZXcgRm9ybURhdGFJT0RldmljZShkLT5tX2ZpcnN0UmVxdWVzdC5odHRwQm9keSgpKTsgCisgICAg
ICAgICAgICBGb3JtRGF0YUlPRGV2aWNlKiBwdXREZXZpY2UgPSBuZXcgRm9ybURhdGFJT0Rldmlj
ZShkLT5tX2ZpcnN0UmVxdWVzdC5odHRwQm9keSgpLCB0aGlzKTsKICAgICAgICAgICAgIC8vIFdl
IG1heSBiZSB1cGxvYWRpbmcgZmlsZXMgc28gcHJldmVudCBRTlIgZnJvbSBidWZmZXJpbmcgZGF0
YQogICAgICAgICAgICAgbV9yZXF1ZXN0LnNldEhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRl
bnRMZW5ndGhIZWFkZXIsIHB1dERldmljZS0+Z2V0Rm9ybURhdGFTaXplKCkpOwogICAgICAgICAg
ICAgbV9yZXF1ZXN0LnNldEF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6OkRvTm90QnVmZmVyVXBs
b2FkRGF0YUF0dHJpYnV0ZSwgUVZhcmlhbnQodHJ1ZSkpOwotICAgICAgICAgICAgbV9yZXBseSA9
IG1hbmFnZXItPnB1dChtX3JlcXVlc3QsIHB1dERldmljZSk7Ci0gICAgICAgICAgICBwdXREZXZp
Y2UtPnNldFBhcmVudChtX3JlcGx5KTsKKyAgICAgICAgICAgIG1fcmVwbHktPnB1dChtX3JlcXVl
c3QsIHB1dERldmljZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBj
YXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6RGVsZXRlT3BlcmF0aW9uOiB7Ci0gICAgICAgICAg
ICBtX3JlcGx5ID0gbWFuYWdlci0+ZGVsZXRlUmVzb3VyY2UobV9yZXF1ZXN0KTsKKyAgICAgICAg
ICAgIG1fcmVwbHktPmRlbGV0ZVJlc291cmNlKG1fcmVxdWVzdCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA3LCAw
KQogICAgICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6Q3VzdG9tT3BlcmF0aW9uOgot
ICAgICAgICAgICAgbV9yZXBseSA9IG1hbmFnZXItPnNlbmRDdXN0b21SZXF1ZXN0KG1fcmVxdWVz
dCwgbV9yZXNvdXJjZUhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpLmxhdGluMSgp
LmRhdGEoKSk7CisgICAgICAgICAgICBtX3JlcGx5LT5zZW5kQ3VzdG9tUmVxdWVzdChtX3JlcXVl
c3QsIG1fcmVzb3VyY2VIYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKS5sYXRpbjEo
KS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICAgICAgY2FzZSBRTmV0
d29ya0FjY2Vzc01hbmFnZXI6OlVua25vd25PcGVyYXRpb246IHsKKyAgICAgICAgICAgIG1fcmVw
bHktPmRlbGV0ZUxhdGVyKCk7CiAgICAgICAgICAgICBtX3JlcGx5ID0gMDsKICAgICAgICAgICAg
IFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBtX3Jlc291cmNlSGFuZGxlLT5jbGllbnQo
KTsKICAgICAgICAgICAgIGlmIChjbGllbnQpIHsKQEAgLTU0NCwyOSArNTcwLDYgQEAgdm9pZCBR
TmV0d29ya1JlcGx5SGFuZGxlcjo6c3RhcnQoKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfQotCi0gICAgbV9yZXBseS0+c2V0UGFyZW50KHRoaXMpOwotCi0gICAgY29ubmVj
dChtX3JlcGx5LCBTSUdOQUwoZmluaXNoZWQoKSksCi0gICAgICAgICAgICB0aGlzLCBTTE9UKGZp
bmlzaCgpKSwgU0lHTkFMX0NPTk4pOwotCi0gICAgLy8gRm9yIGh0dHAocykgd2Uga25vdyB0aGF0
IHRoZSBoZWFkZXJzIGFyZSBjb21wbGV0ZSB1cG9uIG1ldGFEYXRhQ2hhbmdlZCgpIGVtaXNzaW9u
LCBzbyB3ZQotICAgIC8vIGNhbiBzZW5kIHRoZSByZXNwb25zZSBhcyBlYXJseSBhcyBwb3NzaWJs
ZQotICAgIGlmIChzY2hlbWUgPT0gUUxhdGluMVN0cmluZygiaHR0cCIpIHx8IHNjaGVtZSA9PSBR
TGF0aW4xU3RyaW5nKCJodHRwcyIpKQotICAgICAgICBjb25uZWN0KG1fcmVwbHksIFNJR05BTCht
ZXRhRGF0YUNoYW5nZWQoKSksCi0gICAgICAgICAgICAgICAgdGhpcywgU0xPVChzZW5kUmVzcG9u
c2VJZk5lZWRlZCgpKSwgU0lHTkFMX0NPTk4pOwotCi0gICAgY29ubmVjdChtX3JlcGx5LCBTSUdO
QUwocmVhZHlSZWFkKCkpLAotICAgICAgICAgICAgdGhpcywgU0xPVChmb3J3YXJkRGF0YSgpKSwg
U0lHTkFMX0NPTk4pOwotCi0gICAgaWYgKG1fcmVzb3VyY2VIYW5kbGUtPmZpcnN0UmVxdWVzdCgp
LnJlcG9ydFVwbG9hZFByb2dyZXNzKCkpIHsKLSAgICAgICAgY29ubmVjdChtX3JlcGx5LCBTSUdO
QUwodXBsb2FkUHJvZ3Jlc3MocWludDY0LCBxaW50NjQpKSwKLSAgICAgICAgICAgICAgICB0aGlz
LCBTTE9UKHVwbG9hZFByb2dyZXNzKHFpbnQ2NCwgcWludDY0KSksIFNJR05BTF9DT05OKTsKLSAg
ICB9Ci0KLSAgICAvLyBNYWtlIHRoaXMgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbCBvbmNlIHdlIHJl
cXVpcmUgNC42LjErLgotICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKHByb2Nlc3NRdWV1ZWRJdGVt
cygpKSwKLSAgICAgICAgICAgIHRoaXMsIFNMT1Qoc2VuZFF1ZXVlZEl0ZW1zKCkpLCBTSUdOQUxf
Q09OTik7CiB9CiAKIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OnJlc2V0U3RhdGUoKQpAQCAt
NTkyLDggKzU5NSwxMCBAQCB2b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzZW5kUXVldWVkSXRl
bXMoKQogICAgIGlmIChtX3Nob3VsZFNlbmRSZXNwb25zZSkKICAgICAgICAgc2VuZFJlc3BvbnNl
SWZOZWVkZWQoKTsKIAotICAgIGlmIChtX3Nob3VsZEZvcndhcmREYXRhKQotICAgICAgICBmb3J3
YXJkRGF0YSgpOworICAgIGlmIChtX3Nob3VsZEZvcndhcmREYXRhKSB7CisgICAgICAgIGZvcndh
cmREYXRhKG1fYnVmZmVyZWREYXRhKTsKKyAgICAgICAgbV9idWZmZXJlZERhdGEuY2xlYXIoKTsK
KyAgICB9CiAKICAgICBpZiAobV9zaG91bGRGaW5pc2gpCiAgICAgICAgIGZpbmlzaCgpOyAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxl
ci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmgK
aW5kZXggYTJjNDUzZC4uZTk5Nzg0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmgKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1
ZGUgPFFOZXR3b3JrUmVxdWVzdD4KICNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+Cisj
aW5jbHVkZSA8UU5ldHdvcmtSZXBseT4KIAogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAKQEAgLTM0
LDYgKzM1LDcgQEAgUVRfRU5EX05BTUVTUEFDRQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBSZXNvdXJjZUhhbmRsZTsKK2NsYXNzIFJlcGx5TWFuaXB1bGF0b3I7CiAKIGNsYXNzIFFOZXR3
b3JrUmVwbHlIYW5kbGVyIDogcHVibGljIFFPYmplY3QKIHsKQEAgLTQ2LDExICs0OCwxMiBAQCBw
dWJsaWM6CiAgICAgfTsKIAogICAgIFFOZXR3b3JrUmVwbHlIYW5kbGVyKFJlc291cmNlSGFuZGxl
ICpoYW5kbGUsIExvYWRNb2RlKTsKKyAgICB+UU5ldHdvcmtSZXBseUhhbmRsZXIoKTsKICAgICB2
b2lkIHNldExvYWRNb2RlKExvYWRNb2RlKTsKIAogICAgIHZvaWQgYWJvcnQoKTsKIAotICAgIFFO
ZXR3b3JrUmVwbHkqIHJlbGVhc2UoKTsKKyAgICBSZXBseU1hbmlwdWxhdG9yKiByZWxlYXNlKCk7
CiAKIHNpZ25hbHM6CiAgICAgdm9pZCBwcm9jZXNzUXVldWVkSXRlbXMoKTsKQEAgLTU4LDcgKzYx
LDcgQEAgc2lnbmFsczoKIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBmaW5pc2goKTsKICAgICB2
b2lkIHNlbmRSZXNwb25zZUlmTmVlZGVkKCk7Ci0gICAgdm9pZCBmb3J3YXJkRGF0YSgpOworICAg
IHZvaWQgZm9yd2FyZERhdGEoY29uc3QgUUJ5dGVBcnJheSAmZGF0YSk7CiAgICAgdm9pZCBzZW5k
UXVldWVkSXRlbXMoKTsKICAgICB2b2lkIHVwbG9hZFByb2dyZXNzKHFpbnQ2NCBieXRlc1NlbnQs
IHFpbnQ2NCBieXRlc1RvdGFsKTsKIApAQCAtNjcsNyArNzAsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgcmVzZXRTdGF0ZSgpOwogICAgIFN0cmluZyBodHRwTWV0aG9kKCkgY29uc3Q7CiAKLSAgICBR
TmV0d29ya1JlcGx5KiBtX3JlcGx5OworICAgIFJlcGx5TWFuaXB1bGF0b3IqIG1fcmVwbHk7CiAg
ICAgUmVzb3VyY2VIYW5kbGUqIG1fcmVzb3VyY2VIYW5kbGU7CiAgICAgYm9vbCBtX3JlZGlyZWN0
ZWQ7CiAgICAgYm9vbCBtX3Jlc3BvbnNlU2VudDsKQEAgLTgyLDYgKzg1LDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fc2hvdWxkU2VuZFJlc3BvbnNlOwogICAgIGJvb2wgbV9zaG91bGRGb3J3YXJk
RGF0YTsKICAgICBpbnQgbV9yZWRpcmVjdGlvblRyaWVzOworICAgIFFCeXRlQXJyYXkgbV9idWZm
ZXJlZERhdGE7CiB9OwogCiAvLyBTZWxmIGRlc3RydWN0aW5nIFFJT0RldmljZSBmb3IgRm9ybURh
dGEKQEAgLTkyLDcgKzk2LDcgQEAgcHJpdmF0ZToKIGNsYXNzIEZvcm1EYXRhSU9EZXZpY2UgOiBw
dWJsaWMgUUlPRGV2aWNlIHsKICAgICBRX09CSkVDVAogcHVibGljOgotICAgIEZvcm1EYXRhSU9E
ZXZpY2UoRm9ybURhdGEqKTsKKyAgICBGb3JtRGF0YUlPRGV2aWNlKEZvcm1EYXRhKiwgUU9iamVj
dCogcGFyZW50ID0gMCk7CiAgICAgfkZvcm1EYXRhSU9EZXZpY2UoKTsKIAogICAgIGJvb2wgaXNT
ZXF1ZW50aWFsKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
cXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVz
b3VyY2VIYW5kbGVRdC5jcHAKaW5kZXggYTVhYzRjMy4uMjMyNzk4ZCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlSGFuZGxlUXQuY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZUhhbmRsZVF0LmNwcApAQCAtMzUsNiArMzUs
NyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVOZXR3b3JraW5nQ29udGV4
dC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50UXQuaCIKKyNpbmNsdWRlICJOQU1NYW5p
cHVsYXRvci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlFOZXR3b3JrUmVwbHlIYW5kbGVyLmgiCkBAIC0xNTYsMjAgKzE1NywxMyBA
QCBib29sIFJlc291cmNlSGFuZGxlOjp3aWxsTG9hZEZyb21DYWNoZShSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIEZyYW1lKiBmcmFtZSkKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1hbmFnZXIgPSAwOwotICAgIFFB
YnN0cmFjdE5ldHdvcmtDYWNoZSogY2FjaGUgPSAwOwogICAgIGlmIChmcmFtZS0+bG9hZGVyKCkt
Pm5ldHdvcmtpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgbWFuYWdlciA9IGZyYW1lLT5sb2FkZXIo
KS0+bmV0d29ya2luZ0NvbnRleHQoKS0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKTsKLSAgICAgICAg
Y2FjaGUgPSBtYW5hZ2VyLT5jYWNoZSgpOwotICAgIH0KLQotICAgIGlmICghY2FjaGUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFFOZXR3b3JrQ2FjaGVNZXRhRGF0YSBkYXRhID0gY2Fj
aGUtPm1ldGFEYXRhKHJlcXVlc3QudXJsKCkpOwotICAgIGlmIChkYXRhLmlzVmFsaWQoKSkgewot
ICAgICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5KFJldHVybkNhY2hlRGF0YURvbnRMb2FkKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbWFu
YWdlciA9IGZyYW1lLT5sb2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKS0+bmV0d29ya0FjY2Vz
c01hbmFnZXIoKTsKKyAgICAgICAgTkFNTWFuaXB1bGF0b3IgbWFuYWdlck1hbmlwdWxhdG9yKG1h
bmFnZXIpOworICAgICAgICBpZiAobWFuYWdlck1hbmlwdWxhdG9yLndpbGxMb2FkRnJvbUNhY2hl
KHJlcXVlc3QudXJsKCkpKSB7CisgICAgICAgICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5KFJl
dHVybkNhY2hlRGF0YURvbnRMb2FkKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0
LmNwcAppbmRleCBmMjJjMzU0Li40NDZiYWUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L0Nvb2tpZUphclF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0
LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5BTU1hbmlwdWxhdG9yLmgi
CiAjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogCkBAIC00Myw3ICs0NCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IFFOZXR3b3JrQ29va2llSmFyICpjb29raWVKYXIoY29uc3QgRG9jdW1lbnQgKmRvY3VtZW50KQor
CitzdGF0aWMgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICpuZXR3b3JrQWNjZXNzTWFuYWdlcihjb25z
dCBEb2N1bWVudCAqZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0
dXJuIDA7CkBAIC01MywzNyArNTUsMzAgQEAgc3RhdGljIFFOZXR3b3JrQ29va2llSmFyICpjb29r
aWVKYXIoY29uc3QgRG9jdW1lbnQgKmRvY3VtZW50KQogICAgIEZyYW1lTG9hZGVyICpsb2FkZXIg
PSBmcmFtZS0+bG9hZGVyKCk7CiAgICAgaWYgKCFsb2FkZXIpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbWFuYWdlciA9IGxvYWRlci0+bmV0d29ya2luZ0Nv
bnRleHQoKS0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKTsKLSAgICBRTmV0d29ya0Nvb2tpZUphciog
amFyID0gbWFuYWdlci0+Y29va2llSmFyKCk7Ci0gICAgcmV0dXJuIGphcjsKKyAgICByZXR1cm4g
bG9hZGVyLT5uZXR3b3JraW5nQ29udGV4dCgpLT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpOwogfQog
CiB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgUVVybCB1KHVybCk7Ci0gICAgUU5ldHdvcmtDb29r
aWVKYXIqIGphciA9IGNvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKCFqYXIpCisgICAgUU5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKiBtYW5hZ2VyID0gbmV0d29ya0FjY2Vzc01hbmFnZXIoZG9jdW1l
bnQpOworICAgIGlmICghbWFuYWdlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUUxpc3Q8UU5l
dHdvcmtDb29raWU+IGNvb2tpZXMgPSBRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJp
bmcodmFsdWUpLnRvQXNjaWkoKSk7Ci0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+OjpJdGVyYXRv
ciBpdCA9IGNvb2tpZXMuYmVnaW4oKTsKLSAgICB3aGlsZSAoaXQgIT0gY29va2llcy5lbmQoKSkg
ewotICAgICAgICBpZiAoaXQtPmlzSHR0cE9ubHkoKSkKLSAgICAgICAgICAgIGl0ID0gY29va2ll
cy5lcmFzZShpdCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICsraXQ7Ci0gICAgfQotICAg
IGphci0+c2V0Q29va2llc0Zyb21VcmwoY29va2llcywgdSk7CisgICAgLy8gQ3JlYXRlIHRoZSBt
YW5pcHVsYXRvciBvbiB0aGUgaGVhcCB0byBsZXQgaXQgbGl2ZSB1bnRpbCB0aGUKKyAgICAvLyBh
c3luYyByZXF1ZXN0IGlzIHBpY2tlZCBieSB0aGUgb3RoZXIgdGhyZWFkJ3MgZXZlbnQgbG9vcC4K
KyAgICBOQU1NYW5pcHVsYXRvciogbWFuYWdlck1hbmlwdWxhdG9yID0gbmV3IE5BTU1hbmlwdWxh
dG9yKG1hbmFnZXIpOworICAgIG1hbmFnZXJNYW5pcHVsYXRvci0+c2V0Q29va2llcyh1cmwsIHZh
bHVlKTsKKyAgICBtYW5hZ2VyTWFuaXB1bGF0b3ItPmRlbGV0ZUxhdGVyKCk7CiB9CiAKIFN0cmlu
ZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQogewot
ICAgIFFVcmwgdSh1cmwpOwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXIo
ZG9jdW1lbnQpOwotICAgIGlmICghamFyKQorICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbWFu
YWdlciA9IG5ldHdvcmtBY2Nlc3NNYW5hZ2VyKGRvY3VtZW50KTsKKyAgICBpZiAoIW1hbmFnZXIp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBj
b29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKHUpOworICAgIE5BTU1hbmlwdWxhdG9yIG1hbmFn
ZXJNYW5pcHVsYXRvcihtYW5hZ2VyKTsKKyAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2ll
cyA9IG1hbmFnZXJNYW5pcHVsYXRvci5jb29raWVzRm9yVXJsKHVybCk7CiAgICAgaWYgKGNvb2tp
ZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTEwMCwxMiArOTUs
MTIgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwpCiAKIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwgJnVybCkKIHsKLSAgICBRVXJsIHUodXJsKTsKLSAg
ICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAo
IWphcikKKyAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1hbmFnZXIgPSBuZXR3b3JrQWNjZXNz
TWFuYWdlcihkb2N1bWVudCk7CisgICAgaWYgKCFtYW5hZ2VyKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAKLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2ll
c0ZvclVybCh1KTsKKyAgICBOQU1NYW5pcHVsYXRvciBtYW5hZ2VyTWFuaXB1bGF0b3IobWFuYWdl
cik7CisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBtYW5hZ2VyTWFuaXB1bGF0
b3IuY29va2llc0ZvclVybCh1cmwpOwogICAgIGlmIChjb29raWVzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogCkBAIC0xMjAsOCArMTE1LDggQEAgU3RyaW5nIGNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCAmdXJsKQogCiBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkK
IHsKLSAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29va2llSmFyKGRvY3VtZW50KTsKLSAg
ICByZXR1cm4gKGphciAhPSAwKTsKKyAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1hbmFnZXIg
PSBuZXR3b3JrQWNjZXNzTWFuYWdlcihkb2N1bWVudCk7CisgICAgcmV0dXJuIChtYW5hZ2VyICE9
IDApOwogfQogCiBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJM
JiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQ2hh
bmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA0MmZhZjJlLi40OWQ0MWZmIDEwMDY0
NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNyBAQAorMjAxMC0xMS0yNSAgSm9jZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4udHVy
Y290dGVAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtRdF0gU3VwcG9ydCBhIFFOZXR3b3JrQWNjZXNzTWFuYWdlciBhZmZpbmVkIHRv
IGEgZGlmZmVyZW50IHRocmVhZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUwMDgwCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2UgdGhlIE5B
TU1hbmlwdWxhdG9yIGFuZCB0aGUgUmVwbHlNYW5pcHVsYXRvcgorICAgICAgICBhcyBpbnRlcm1l
ZGlhdGVzIGZvciBlYWNoIFFOZXR3b3JrTWFuYWdlciBvciBRTmV0d29ya1JlcGx5IGFjY2Vzc2Vz
LgorICAgICAgICBJZiBydW4gaW4gdGhlIHNhbWUgdGhyZWFkLCB0aGVzZSBvYmplY3RzIHdpbGwg
Zm9yd2FyZCB0aGUgY2FsbHMgd2l0aAorICAgICAgICBRdDo6RGlyZWN0Q29ubmVjdGlvbiBiaW5k
aW5ncywgd2hpbGUgaW4gdGhlIG90aGVyIGNhc2UgdGhleSB3aWxsIHVzZQorICAgICAgICBRdDo6
UXVldWVkQ29ubmVjdGlvbiB0byBjYXJyeSByZXF1ZXN0cyBhY2Nyb3NzIHRocmVhZHMuCisKKyAg
ICAgICAgTmV3IHRlc3Q6IHRzdF9RV2ViUGFnZTo6bmV0d29ya0FjY2Vzc01hbmFnZXJPbkRpZmZl
cmVudFRocmVhZAorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0Ojpkb3dubG9hZCk6
CisgICAgICAgICogdGVzdHMvcXdlYnBhZ2UvdHN0X3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFu
YW1UaHJlYWQ6OlFuYW1UaHJlYWQpOgorICAgICAgICAoUW5hbVRocmVhZDo6flFuYW1UaHJlYWQp
OgorICAgICAgICAoUW5hbVRocmVhZDo6bmV0d29ya0FjY2Vzc01hbmFnZXIpOgorICAgICAgICAo
UW5hbVRocmVhZDo6cnVuKToKKyAgICAgICAgKHRzdF9RV2ViUGFnZTo6bmV0d29ya0FjY2Vzc01h
bmFnZXJPbkRpZmZlcmVudFRocmVhZCk6CisKIDIwMTAtMTEtMjQgIEtyaXN0aWFuIEFtbGllICA8
a3Jpc3RpYW4uYW1saWVAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMg
S2xpbmcuCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRRdC5jcHAgYi9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRR
dC5jcHAKaW5kZXggYmY2ZTc1YS4uNGEyMTMxMyAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCisrKyBiL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcApAQCAtNTksNiArNTksNyBAQAogI2luY2x1
ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxQbHVnSW5FbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKKyNpbmNsdWRlICJOQU1NYW5pcHVsYXRvci5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUU5ldHdvcmtSZXBseUhhbmRsZXIu
aCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCkBAIC05NzUsMTEgKzk3Niwx
MSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRvd25sb2FkKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIGNvbnN0IFdlYkNvcgogICAgICAgICByZXR1cm47CiAKICAgICBRTmV0
d29ya1JlcGx5SGFuZGxlciogaGFuZGxlciA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9qb2I7
Ci0gICAgUU5ldHdvcmtSZXBseSogcmVwbHkgPSBoYW5kbGVyLT5yZWxlYXNlKCk7CisgICAgUmVw
bHlNYW5pcHVsYXRvciogcmVwbHkgPSBoYW5kbGVyLT5yZWxlYXNlKCk7CiAgICAgaWYgKHJlcGx5
KSB7CiAgICAgICAgIFFXZWJQYWdlICpwYWdlID0gbV93ZWJGcmFtZS0+cGFnZSgpOwogICAgICAg
ICBpZiAocGFnZS0+Zm9yd2FyZFVuc3VwcG9ydGVkQ29udGVudCgpKQotICAgICAgICAgICAgZW1p
dCBwYWdlLT51bnN1cHBvcnRlZENvbnRlbnQocmVwbHkpOworICAgICAgICAgICAgZW1pdCBwYWdl
LT51bnN1cHBvcnRlZENvbnRlbnQocmVwbHktPnJlcGx5KCkpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICByZXBseS0+YWJvcnQoKTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvdGVz
dHMvcXdlYnBhZ2UvdHN0X3F3ZWJwYWdlLmNwcCBiL1dlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90
c3RfcXdlYnBhZ2UuY3BwCmluZGV4IGMyN2JhMDIuLjI1NjVkY2IgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCisrKyBiL1dlYktpdC9xdC90ZXN0
cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCkBAIC0xMjgsNiArMTI4LDcgQEAgcHJpdmF0ZSBz
bG90czoKICAgICB2b2lkIGZpbmRUZXh0KCk7CiAgICAgdm9pZCBzdXBwb3J0ZWRDb250ZW50VHlw
ZSgpOwogICAgIHZvaWQgaW5maW5pdGVMb29wSlMoKTsKKyAgICB2b2lkIG5ldHdvcmtBY2Nlc3NN
YW5hZ2VyT25EaWZmZXJlbnRUaHJlYWQoKTsKICAgICAKIHByaXZhdGU6CiAgICAgUVdlYlZpZXcq
IG1fdmlldzsKQEAgLTI1OTgsNiArMjU5OSw0NSBAQCB2b2lkIHRzdF9RV2ViUGFnZTo6c3VwcG9y
dGVkQ29udGVudFR5cGUoKQogICAgUV9GT1JFQUNIKGNvbnN0IFFTdHJpbmcmIG1pbWVUeXBlLCBj
b250ZW50VHlwZXMpCiAgICAgICBRVkVSSUZZMihtX3BhZ2UtPnN1cHBvcnRzQ29udGVudFR5cGUo
bWltZVR5cGUpLCBRU3RyaW5nKCJDYW5ub3QgaGFuZGxlIGNvbnRlbnQgdHlwZXMgJyUxJyEiKS5h
cmcobWltZVR5cGUpLnRvTGF0aW4xKCkpOwogfQorY2xhc3MgUW5hbVRocmVhZCA6IHB1YmxpYyBR
VGhyZWFkIHsKK3B1YmxpYzoKKyAgICBRbmFtVGhyZWFkKCkKKyAgICB7CisgICAgICAgIG1fcW5h
bUZ1dHVyZS5yZXBvcnRTdGFydGVkKCk7CisgICAgfQorICAgIH5RbmFtVGhyZWFkKCkKKyAgICB7
CisgICAgICAgIHF1aXQoKTsKKyAgICAgICAgd2FpdCgpOworICAgIH0KKworICAgIFFGdXR1cmU8
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKj4gbmV0d29ya0FjY2Vzc01hbmFnZXIoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fcW5hbUZ1dHVyZS5mdXR1cmUoKTsKKyAgICB9Citwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBxbmFt
ID0gbmV3IFFOZXR3b3JrQWNjZXNzTWFuYWdlcjsKKyAgICAgICAgbV9xbmFtRnV0dXJlLnJlcG9y
dEZpbmlzaGVkKCZxbmFtKTsKKyAgICAgICAgZXhlYygpOworICAgICAgICBkZWxldGUgcW5hbTsK
KyAgICB9Citwcml2YXRlOgorICAgIFFGdXR1cmVJbnRlcmZhY2U8UU5ldHdvcmtBY2Nlc3NNYW5h
Z2VyKj4gbV9xbmFtRnV0dXJlOworfTsKKwordm9pZCB0c3RfUVdlYlBhZ2U6Om5ldHdvcmtBY2Nl
c3NNYW5hZ2VyT25EaWZmZXJlbnRUaHJlYWQoKQoreworICAgIFFuYW1UaHJlYWQgcW5hbVRocmVh
ZDsKKyAgICBxbmFtVGhyZWFkLnN0YXJ0KCk7CisgICAgbV9wYWdlLT5zZXROZXR3b3JrQWNjZXNz
TWFuYWdlcihxbmFtVGhyZWFkLm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkpOworICAgIFFTaWduYWxT
cHkgbG9hZFNweShtX3BhZ2UsIFNJR05BTChsb2FkRmluaXNoZWQoYm9vbCkpKTsKKyAgICBRVXJs
IHVybCA9IFFVcmwoInFyYzovLy9yZXNvdXJjZXMvaW5kZXguaHRtbCIpOworICAgIG1fcGFnZS0+
bWFpbkZyYW1lKCktPmxvYWQodXJsKTsKKyAgICBRVFJZX0NPTVBBUkUobG9hZFNweS5jb3VudCgp
LCAxKTsKKyAgICBRQ09NUEFSRShtX3BhZ2UtPm1haW5GcmFtZSgpLT5jaGlsZEZyYW1lcygpWzBd
LT51cmwoKSwgUVVybCgicXJjOi8vL3Jlc291cmNlcy9mcmFtZV9hLmh0bWwiKSk7Cit9CiAKIFFU
RVNUX01BSU4odHN0X1FXZWJQYWdlKQogI2luY2x1ZGUgInRzdF9xd2VicGFnZS5tb2MiCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76070</attachid>
            <date>2010-12-09 08:38:11 -0800</date>
            <delta_ts>2010-12-10 02:50:23 -0800</delta_ts>
            <desc>Patch v2</desc>
            <filename>threadedQnam.patch</filename>
            <type>text/plain</type>
            <size>44894</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NGM0NTY0ZC4uYjVmNDEyZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw1OCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIFtRdF0gU3VwcG9ydCBhIFFOZXR3b3JrQWNjZXNzTWFu
YWdlciBhZmZpbmVkIHRvIGEgZGlmZmVyZW50IHRocmVhZC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMDgwCisKKyAgICAgICAgVGhpcyBwYXRjaCBp
bnRyb2R1Y2UgdGhyZWFkIHNhZmUgcHJveHkgY2xhc3NlcyBmb3IgUU5ldHdvcmtBY2Nlc3NNYW5h
Z2VyCisgICAgICAgIGFuZCBRTmV0d29ya1JlcGx5LgorICAgICAgICBJZiBydW4gaW4gdGhlIHNh
bWUgdGhyZWFkLCB0aGVzZSBvYmplY3RzIHdpbGwgZm9yd2FyZCB0aGUgY2FsbHMgd2l0aAorICAg
ICAgICBRdDo6RGlyZWN0Q29ubmVjdGlvbiBiaW5kaW5ncywgd2hpbGUgaW4gdGhlIG90aGVyIGNh
c2UgdGhleSB3aWxsIHVzZQorICAgICAgICBRdDo6UXVldWVkQ29ubmVjdGlvbiB0byBjYXJyeSBy
ZXF1ZXN0cyBhY2Nyb3NzIHRocmVhZHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBiYXNpY2FsbHk6
CisgICAgICAgIC0gTWFrZXMgc3VyZSB0aGF0IGFsbCBhY2Nlc3MgZ29lcyB0aHJvdWdoIHRoZXNl
IG9iamVjdHMKKyAgICAgICAgLSBSZW9yZGVycyBzaWduYWwgY29ubmVjdGlvbnMgdG8gbWFrZSBz
dXJlIHdlIGFyZSBjb25uZWN0ZWQgd2hlbiB0aGUKKyAgICAgICAgICBzaWduYWwgY29tZXMKKyAg
ICAgICAgLSBNYWtlcyBzdXJlIHRoYXQgbm8gUU9iamVjdCBpbiB0aGUgV2ViQ29yZSB0aHJlYWQg
aXMgYSBjaGlsZCBvZiB0aGUKKyAgICAgICAgICByZXBseSB3aGljaCBtaWdodCBiZSBpbiBhIGRp
ZmZlcmVudCB0aHJlYWQuCisgICAgICAgIC0gRm9yd2FyZCB0aGUgZGF0YSBkaXJlY3RseSBpbiBR
Qnl0ZUFycmF5cyBpbiBzaWduYWxzIGluc3RlYWQgb2YgY29sbGVjdGluZworICAgICAgICAgIHRo
ZSBkYXRhIHdoZW4gdGhlIHNpZ25hbCBpcyBoYW5kbGVkLgorCisgICAgICAgIE5ldyB0ZXN0OiB0
c3RfUVdlYlBhZ2U6Om5ldHdvcmtBY2Nlc3NNYW5hZ2VyT25EaWZmZXJlbnRUaHJlYWQKKworICAg
ICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlh
UGxheWVyUHJpdmF0ZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZVF0Ojpjb21taXRMb2FkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3Jr
UmVwbHlIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhSU9EZXZpY2U6OkZv
cm1EYXRhSU9EZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI6
OlFOZXR3b3JrUmVwbHlIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlI
YW5kbGVyOjp+UU5ldHdvcmtSZXBseUhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UU5ldHdv
cmtSZXBseUhhbmRsZXI6OnNldExvYWRNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlFOZXR3b3Jr
UmVwbHlIYW5kbGVyOjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFu
ZGxlcjo6cmVsZWFzZSk6CisgICAgICAgIChXZWJDb3JlOjppZ25vcmVIdHRwRXJyb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI6OmZpbmlzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6c2VuZFJlc3BvbnNlSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UU5ldHdvcmtSZXBseUhhbmRsZXI6OmZvcndhcmREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzdGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpRTmV0d29ya1JlcGx5SGFuZGxlcjo6c2VuZFF1ZXVlZEl0ZW1zKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9xdC9RdE5BTVRocmVhZFNhZmVQcm94eS5jcHA6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvcXQvUXROQU1UaHJlYWRTYWZlUHJveHkuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZUhhbmRsZVF0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp3aWxsTG9hZEZyb21DYWNoZSk6CisgICAgICAg
ICogcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV0d29y
a0FjY2Vzc01hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKToKKworMjAx
MC0xMi0wOSAgSm9jZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFtRdF0gUmVm
YWN0b3IgUU5ldHdvcmtSZXBseUhhbmRsZXI6OmZpbmlzaCgpIHRvIHByZXZlbnQgY3Jhc2hlcy4K
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNzYxCiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmlu
ZGV4IDBlYWZmNWEuLjA1NzMzYzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjE1OCw2ICsyMTU4LDcgQEAgSEVBREVSUyArPSBc
CiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RhdGVOb3RpZmllci5oIFwKICAgICBwbGF0
Zm9ybS9uZXR3b3JrL1Byb3RlY3Rpb25TcGFjZS5oIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL1By
b3h5U2VydmVyLmggXAorICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUXROQU1UaHJlYWRTYWZlUHJv
eHkuaCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5oIFwK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlRXJyb3JCYXNlLmggXAogICAgIHBsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBcCkBAIC0yNjgzLDYgKzI2ODQsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlSGFuZGxlUXQuY3BwIFwKICAg
ICBwbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcCBcCiAgICAgcGxhdGZv
cm0vbmV0d29yay9xdC9EbnNQcmVmZXRjaEhlbHBlci5jcHAgXAorICAgIHBsYXRmb3JtL25ldHdv
cmsvcXQvUXROQU1UaHJlYWRTYWZlUHJveHkuY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3F0
L1Byb3h5U2VydmVyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVw
bHlIYW5kbGVyLmNwcCBcCiAgICAgZWRpdGluZy9xdC9FZGl0b3JRdC5jcHAgXApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9NZWRpYVBsYXllclByaXZhdGVRdC5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcApp
bmRleCA5NjJjOTMxLi5kZDRiNmU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L01lZGlhUGxheWVyUHJpdmF0ZVF0LmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiUXROQU1UaHJlYWRTYWZl
UHJveHkuaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKQEAgLTIwOSw4ICsyMTAsOCBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF0Ojpjb21taXRMb2FkKGNvbnN0IFN0cmluZyYgdXJs
KQogCiAgICAgICAgIGlmIChkb2N1bWVudCAmJiBtYW5hZ2VyKSB7CiAgICAgICAgICAgICAvLyBT
ZXQgdGhlIGNvb2tpZXMKLSAgICAgICAgICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBtYW5h
Z2VyLT5jb29raWVKYXIoKTsKLSAgICAgICAgICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29r
aWVzID0gamFyLT5jb29raWVzRm9yVXJsKHJVcmwpOworICAgICAgICAgICAgUXROQU1UaHJlYWRT
YWZlUHJveHkgbWFuYWdlclByb3h5KG1hbmFnZXIpOworICAgICAgICAgICAgUUxpc3Q8UU5ldHdv
cmtDb29raWU+IGNvb2tpZXMgPSBtYW5hZ2VyUHJveHkuY29va2llc0ZvclVybChyVXJsKTsKIAog
ICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IHRoZSBoZWFkZXIgaWYgdGhlcmUgYXJlIG5vIGNvb2tp
ZXMuCiAgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIGEgd2FybmluZyBmcm9tIGJlaW5nIGVt
aXR0ZWQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtS
ZXBseUhhbmRsZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVw
bHlIYW5kbGVyLmNwcAppbmRleCA4YmIwZjg1Li4yZmY3ZDljIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHAKQEAgLTIzLDYg
KzIzLDcgQEAKIAogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgorI2luY2x1ZGUgIlF0TkFNVGhyZWFkU2FmZVByb3h5LmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKQEAgLTQ2LDcgKzQ3LDcgQEAKIC8vIEl0
IGlzIGZpeGVkIGluIFF0IDQuNi4zLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMyMTEzCiAvLyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM2NzU1CiAjaWYgUVRfVkVSU0lPTiA+IFFUX1ZFUlNJT05fQ0hFQ0soNCwgNiwgMikK
LSNkZWZpbmUgU0lHTkFMX0NPTk4gUXQ6OkRpcmVjdENvbm5lY3Rpb24KKyNkZWZpbmUgU0lHTkFM
X0NPTk4gUXQ6OkF1dG9Db25uZWN0aW9uCiAjZWxzZQogI2RlZmluZSBTSUdOQUxfQ09OTiBRdDo6
UXVldWVkQ29ubmVjdGlvbgogI2VuZGlmCkBAIC01Niw4ICs1Nyw5IEBAIHN0YXRpYyBjb25zdCBp
bnQgZ01heFJlY3Vyc2lvbkxpbWl0ID0gMTA7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFRh
a2UgYSBkZWVwIGNvcHkgb2YgdGhlIEZvcm1EYXRhRWxlbWVudAotRm9ybURhdGFJT0RldmljZTo6
Rm9ybURhdGFJT0RldmljZShGb3JtRGF0YSogZGF0YSkKLSAgICA6IG1fZm9ybUVsZW1lbnRzKGRh
dGEgPyBkYXRhLT5lbGVtZW50cygpIDogVmVjdG9yPEZvcm1EYXRhRWxlbWVudD4oKSkKK0Zvcm1E
YXRhSU9EZXZpY2U6OkZvcm1EYXRhSU9EZXZpY2UoRm9ybURhdGEqIGRhdGEsIFFPYmplY3QqIHBh
cmVudCkKKyAgICA6IFFJT0RldmljZShwYXJlbnQpCisgICAgLCBtX2Zvcm1FbGVtZW50cyhkYXRh
ID8gZGF0YS0+ZWxlbWVudHMoKSA6IFZlY3RvcjxGb3JtRGF0YUVsZW1lbnQ+KCkpCiAgICAgLCBt
X2N1cnJlbnRGaWxlKDApCiAgICAgLCBtX2N1cnJlbnREZWx0YSgwKQogICAgICwgbV9maWxlU2l6
ZSgwKQpAQCAtMTkyLDYgKzE5NCw5IEBAIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpRTmV0d29ya1Jl
cGx5SGFuZGxlcihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBMb2FkTW9kZSBsb2FkCiAgICAgLCBt
X3Nob3VsZEZvcndhcmREYXRhKGZhbHNlKQogICAgICwgbV9yZWRpcmVjdGlvblRyaWVzKGdNYXhS
ZWN1cnNpb25MaW1pdCkKIHsKKyAgICAvLyBNYWtlIHRoaXMgYSBkaXJlY3QgZnVuY3Rpb24gY2Fs
bCBvbmNlIHdlIHJlcXVpcmUgNC42LjErLgorICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKHByb2Nl
c3NRdWV1ZWRJdGVtcygpKSwgdGhpcywgU0xPVChzZW5kUXVldWVkSXRlbXMoKSksIFNJR05BTF9D
T05OKTsKKwogICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCAmciA9IG1fcmVzb3VyY2VIYW5kbGUt
PmZpcnN0UmVxdWVzdCgpOwogCiAgICAgaWYgKHIuaHR0cE1ldGhvZCgpID09ICJHRVQiKQpAQCAt
MjIyLDYgKzIyNywxMiBAQCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6UU5ldHdvcmtSZXBseUhhbmRs
ZXIoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgTG9hZE1vZGUgbG9hZAogICAgICAgICBzdGFydCgp
OwogfQogCitRTmV0d29ya1JlcGx5SGFuZGxlcjo6flFOZXR3b3JrUmVwbHlIYW5kbGVyKCkKK3sK
KyAgICBpZiAobV9yZXBseSkKKyAgICAgICAgbV9yZXBseS0+ZGVsZXRlTGF0ZXIoKTsKK30KKwog
dm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6c2V0TG9hZE1vZGUoTG9hZE1vZGUgbW9kZSkKIHsK
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY1NTYKQEAg
LTIzMSw5ICsyNDIsMTMgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6c2V0TG9hZE1vZGUo
TG9hZE1vZGUgbW9kZSkKICAgICBjYXNlIExvYWROb3JtYWw6CiAgICAgICAgIG1fbG9hZE1vZGUg
PSBMb2FkUmVzdW1pbmc7CiAgICAgICAgIGVtaXQgcHJvY2Vzc1F1ZXVlZEl0ZW1zKCk7CisgICAg
ICAgIC8vIFJlc3RhcnQgZm9yd2FyZGluZyBvbmx5IGFmdGVyIHByb2Nlc3NRdWV1ZWRJdGVtcyB0
byBtYWtlIHN1cmUKKyAgICAgICAgLy8gb3VyIGJ1ZmZlcmVkIGRhdGEgd2FzIGhhbmRsZWQgYmVm
b3JlIGFueSBpbmNvbWluZyBkYXRhLgorICAgICAgICBtX3JlcGx5LT5zZXRGb3J3YXJkaW5nRGVm
ZXJlZChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTG9hZERlZmVycmVkOgogICAg
ICAgICBtX2xvYWRNb2RlID0gTG9hZERlZmVycmVkOworICAgICAgICBtX3JlcGx5LT5zZXRGb3J3
YXJkaW5nRGVmZXJlZCh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBMb2FkUmVzdW1p
bmc6CiAgICAgICAgIFFfQVNTRVJUKDApOyAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuCkBAIC0yNDUs
MzEgKzI2MCwzMCBAQCB2b2lkIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjphYm9ydCgpCiB7CiAgICAg
bV9yZXNvdXJjZUhhbmRsZSA9IDA7CiAgICAgaWYgKG1fcmVwbHkpIHsKLSAgICAgICAgUU5ldHdv
cmtSZXBseSogcmVwbHkgPSByZWxlYXNlKCk7CisgICAgICAgIFF0TmV0d29ya1JlcGx5VGhyZWFk
U2FmZVByb3h5KiByZXBseSA9IHJlbGVhc2UoKTsKICAgICAgICAgcmVwbHktPmFib3J0KCk7CiAg
ICAgICAgIHJlcGx5LT5kZWxldGVMYXRlcigpOwogICAgIH0KICAgICBkZWxldGVMYXRlcigpOwog
fQogCi1RTmV0d29ya1JlcGx5KiBRTmV0d29ya1JlcGx5SGFuZGxlcjo6cmVsZWFzZSgpCitRdE5l
dHdvcmtSZXBseVRocmVhZFNhZmVQcm94eSogUU5ldHdvcmtSZXBseUhhbmRsZXI6OnJlbGVhc2Uo
KQogewotICAgIFFOZXR3b3JrUmVwbHkqIHJlcGx5ID0gbV9yZXBseTsKKyAgICBRdE5ldHdvcmtS
ZXBseVRocmVhZFNhZmVQcm94eSogcmVwbHkgPSBtX3JlcGx5OwogICAgIGlmIChtX3JlcGx5KSB7
CiAgICAgICAgIGRpc2Nvbm5lY3QobV9yZXBseSwgMCwgdGhpcywgMCk7CiAgICAgICAgIC8vIFdl
IGhhdmUgcXVldWVkIGNvbm5lY3Rpb25zIHRvIHRoZSBRTmV0d29ya1JlcGx5LiBNYWtlIHN1cmUg
YW55CiAgICAgICAgIC8vIHBvc3RlZCBtZXRhIGNhbGwgZXZlbnRzIHRoYXQgd2VyZSB0aGUgcmVz
dWx0IG9mIGEgc2lnbmFsIGVtaXNzaW9uCiAgICAgICAgIC8vIGRvbid0IHJlYWNoIHRoZSBzbG90
cyBpbiBvdXIgaW5zdGFuY2UuCiAgICAgICAgIFFDb3JlQXBwbGljYXRpb246OnJlbW92ZVBvc3Rl
ZEV2ZW50cyh0aGlzLCBRRXZlbnQ6Ok1ldGFDYWxsKTsKLSAgICAgICAgbV9yZXBseS0+c2V0UGFy
ZW50KDApOwogICAgICAgICBtX3JlcGx5ID0gMDsKICAgICB9CiAgICAgcmV0dXJuIHJlcGx5Owog
fQogCi1zdGF0aWMgYm9vbCBpZ25vcmVIdHRwRXJyb3IoUU5ldHdvcmtSZXBseSogcmVwbHksIGJv
b2wgcmVjZWl2ZWREYXRhKQorc3RhdGljIGJvb2wgaWdub3JlSHR0cEVycm9yKFF0TmV0d29ya1Jl
cGx5VGhyZWFkU2FmZVByb3h5KiByZXBseSwgYm9vbCByZWNlaXZlZERhdGEpCiB7Ci0gICAgaW50
IGh0dHBTdGF0dXNDb2RlID0gcmVwbHktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0dHBT
dGF0dXNDb2RlQXR0cmlidXRlKS50b0ludCgpOworICAgIGludCBodHRwU3RhdHVzQ29kZSA9IHJl
cGx5LT5odHRwU3RhdHVzQ29kZSgpOwogCiAgICAgaWYgKGh0dHBTdGF0dXNDb2RlID09IDQwMSB8
fCBodHRwU3RhdHVzQ29kZSA9PSA0MDcpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzAxLDE0
ICszMTUsMTQgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6ZmluaXNoKCkKICAgICB9CiAK
ICAgICBpZiAoIW1fcmVkaXJlY3RlZCkgewotICAgICAgICBpZiAoIW1fcmVwbHktPmVycm9yKCkg
fHwgaWdub3JlSHR0cEVycm9yKG1fcmVwbHksIG1fcmVzcG9uc2VDb250YWluc0RhdGEpKSB7Cisg
ICAgICAgIGlmICghbV9yZXBseS0+ZXJyb3IoKSB8fCBpZ25vcmVIdHRwRXJyb3IobV9yZXBseSwg
bV9yZXNwb25zZUNvbnRhaW5zRGF0YSkpCiAgICAgICAgICAgICBjbGllbnQtPmRpZEZpbmlzaExv
YWRpbmcobV9yZXNvdXJjZUhhbmRsZSwgMCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgUVVybCB1cmwgPSBtX3JlcGx5LT51cmwoKTsKLSAgICAgICAgICAg
IGludCBodHRwU3RhdHVzQ29kZSA9IG1fcmVwbHktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6
Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRlKS50b0ludCgpOworICAgICAgICAgICAgaW50IGh0dHBT
dGF0dXNDb2RlID0gbV9yZXBseS0+aHR0cFN0YXR1c0NvZGUoKTsKIAogICAgICAgICAgICAgaWYg
KGh0dHBTdGF0dXNDb2RlKSB7Ci0gICAgICAgICAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcigi
SFRUUCIsIGh0dHBTdGF0dXNDb2RlLCB1cmwudG9TdHJpbmcoKSwgbV9yZXBseS0+YXR0cmlidXRl
KFFOZXR3b3JrUmVxdWVzdDo6SHR0cFJlYXNvblBocmFzZUF0dHJpYnV0ZSkudG9TdHJpbmcoKSk7
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcigiSFRUUCIsIGh0dHBTdGF0dXND
b2RlLCB1cmwudG9TdHJpbmcoKSwgUVN0cmluZzo6ZnJvbUFzY2lpKG1fcmVwbHktPmh0dHBSZWFz
b25QaHJhc2UoKSkpOwogICAgICAgICAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChtX3Jlc291cmNl
SGFuZGxlLCBlcnJvcik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFJl
c291cmNlRXJyb3IgZXJyb3IoIlF0TmV0d29yayIsIG1fcmVwbHktPmVycm9yKCksIHVybC50b1N0
cmluZygpLCBtX3JlcGx5LT5lcnJvclN0cmluZygpKTsKQEAgLTM0Niw3ICszNjAsNyBAQCB2b2lk
IFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpzZW5kUmVzcG9uc2VJZk5lZWRlZCgpCiAgICAgaWYgKCFj
bGllbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdURjo6U3RyaW5nIGNvbnRlbnRUeXBlID0g
bV9yZXBseS0+aGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudFR5cGVIZWFkZXIpLnRvU3Ry
aW5nKCk7CisgICAgV1RGOjpTdHJpbmcgY29udGVudFR5cGUgPSBtX3JlcGx5LT5jb250ZW50VHlw
ZUhlYWRlcigpOwogICAgIFdURjo6U3RyaW5nIGVuY29kaW5nID0gZXh0cmFjdENoYXJzZXRGcm9t
TWVkaWFUeXBlKGNvbnRlbnRUeXBlKTsKICAgICBXVEY6OlN0cmluZyBtaW1lVHlwZSA9IGV4dHJh
Y3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpOwogCkBAIC0zNTcsNyArMzcxLDcg
QEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6c2VuZFJlc3BvbnNlSWZOZWVkZWQoKQogCiAg
ICAgS1VSTCB1cmwobV9yZXBseS0+dXJsKCkpOwogICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9u
c2UodXJsLCBtaW1lVHlwZS5sb3dlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9yZXBseS0+aGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudExlbmd0aEhlYWRlcikudG9M
b25nTG9uZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yZXBseS0+Y29udGVu
dExlbmd0aEhlYWRlcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmcs
IFN0cmluZygpKTsKIAogICAgIGlmICh1cmwuaXNMb2NhbEZpbGUoKSkgewpAQCAtMzY2LDEwICsz
ODAsMTAgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6c2VuZFJlc3BvbnNlSWZOZWVkZWQo
KQogICAgIH0KIAogICAgIC8vIFRoZSBzdGF0dXMgY29kZSBpcyBlcXVhbCB0byAwIGZvciBwcm90
b2NvbHMgbm90IGluIHRoZSBIVFRQIGZhbWlseS4KLSAgICBpbnQgc3RhdHVzQ29kZSA9IG1fcmVw
bHktPmF0dHJpYnV0ZShRTmV0d29ya1JlcXVlc3Q6Okh0dHBTdGF0dXNDb2RlQXR0cmlidXRlKS50
b0ludCgpOworICAgIGludCBzdGF0dXNDb2RlID0gbV9yZXBseS0+aHR0cFN0YXR1c0NvZGUoKTsK
IAogICAgIGlmICh1cmwucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSkgewotICAgICAgICBTdHJpbmcg
c3VnZ2VzdGVkRmlsZW5hbWUgPSBmaWxlbmFtZUZyb21IVFRQQ29udGVudERpc3Bvc2l0aW9uKFFT
dHJpbmc6OmZyb21Bc2NpaShtX3JlcGx5LT5yYXdIZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb24i
KSkpOworICAgICAgICBTdHJpbmcgc3VnZ2VzdGVkRmlsZW5hbWUgPSBmaWxlbmFtZUZyb21IVFRQ
Q29udGVudERpc3Bvc2l0aW9uKFFTdHJpbmc6OmZyb21Bc2NpaShtX3JlcGx5LT5jb250ZW50RGlz
cG9zaXRpb25IZWFkZXIoKSkpOwogCiAgICAgICAgIGlmICghc3VnZ2VzdGVkRmlsZW5hbWUuaXNF
bXB0eSgpKQogICAgICAgICAgICAgcmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5hbWUoc3VnZ2Vz
dGVkRmlsZW5hbWUpOwpAQCAtMzc3LDIxICszOTEsMTUgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFu
ZGxlcjo6c2VuZFJlc3BvbnNlSWZOZWVkZWQoKQogICAgICAgICAgICAgcmVzcG9uc2Uuc2V0U3Vn
Z2VzdGVkRmlsZW5hbWUodXJsLmxhc3RQYXRoQ29tcG9uZW50KCkpOwogCiAgICAgICAgIHJlc3Bv
bnNlLnNldEhUVFBTdGF0dXNDb2RlKHN0YXR1c0NvZGUpOwotICAgICAgICByZXNwb25zZS5zZXRI
VFRQU3RhdHVzVGV4dChtX3JlcGx5LT5hdHRyaWJ1dGUoUU5ldHdvcmtSZXF1ZXN0OjpIdHRwUmVh
c29uUGhyYXNlQXR0cmlidXRlKS50b0J5dGVBcnJheSgpLmNvbnN0RGF0YSgpKTsKKyAgICAgICAg
cmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQobV9yZXBseS0+aHR0cFJlYXNvblBocmFzZSgpLmNv
bnN0RGF0YSgpKTsKIAogICAgICAgICAvLyBBZGQgcmVtYWluaW5nIGhlYWRlcnMuCi0jaWYgUVRf
VkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDcsIDApCi0gICAgICAgIGZvcmVhY2ggKGNv
bnN0IFFOZXR3b3JrUmVwbHk6OlJhd0hlYWRlclBhaXImIHBhaXIsIG1fcmVwbHktPnJhd0hlYWRl
clBhaXJzKCkpIHsKKyAgICAgICAgZm9yZWFjaCAoY29uc3QgUXROZXR3b3JrUmVwbHlUaHJlYWRT
YWZlUHJveHk6OlJhd0hlYWRlclBhaXImIHBhaXIsIG1fcmVwbHktPnJhd0hlYWRlclBhaXJzKCkp
IHsKICAgICAgICAgICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZChRU3RyaW5nOjpmcm9t
QXNjaWkocGFpci5maXJzdCksIFFTdHJpbmc6OmZyb21Bc2NpaShwYWlyLnNlY29uZCkpOwogICAg
ICAgICB9Ci0jZWxzZQotICAgICAgICBmb3JlYWNoIChjb25zdCBRQnl0ZUFycmF5JiBoZWFkZXJO
YW1lLCBtX3JlcGx5LT5yYXdIZWFkZXJMaXN0KCkpIHsKLSAgICAgICAgICAgIHJlc3BvbnNlLnNl
dEhUVFBIZWFkZXJGaWVsZChRU3RyaW5nOjpmcm9tQXNjaWkoaGVhZGVyTmFtZSksIFFTdHJpbmc6
OmZyb21Bc2NpaShtX3JlcGx5LT5yYXdIZWFkZXIoaGVhZGVyTmFtZSkpKTsKLSAgICAgICAgfQot
I2VuZGlmCiAgICAgfQogCi0gICAgUVVybCByZWRpcmVjdGlvbiA9IG1fcmVwbHktPmF0dHJpYnV0
ZShRTmV0d29ya1JlcXVlc3Q6OlJlZGlyZWN0aW9uVGFyZ2V0QXR0cmlidXRlKS50b1VybCgpOwor
ICAgIFFVcmwgcmVkaXJlY3Rpb24gPSBtX3JlcGx5LT5yZWRpcmVjdGlvblRhcmdldCgpOwogICAg
IGlmIChyZWRpcmVjdGlvbi5pc1ZhbGlkKCkpIHsKICAgICAgICAgUVVybCBuZXdVcmwgPSBtX3Jl
cGx5LT51cmwoKS5yZXNvbHZlZChyZWRpcmVjdGlvbik7CiAKQEAgLTQzNiwxMyArNDQ0LDE1IEBA
IHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OnNlbmRSZXNwb25zZUlmTmVlZGVkKCkKICAgICBj
bGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShtX3Jlc291cmNlSGFuZGxlLCByZXNwb25zZSk7CiB9
CiAKLXZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OmZvcndhcmREYXRhKCkKK3ZvaWQgUU5ldHdv
cmtSZXBseUhhbmRsZXI6OmZvcndhcmREYXRhKGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEpCiB7CiAg
ICAgbV9zaG91bGRGb3J3YXJkRGF0YSA9IChtX2xvYWRNb2RlICE9IExvYWROb3JtYWwpOwotICAg
IGlmIChtX3Nob3VsZEZvcndhcmREYXRhKQorICAgIGlmIChtX3Nob3VsZEZvcndhcmREYXRhKSB7
CisgICAgICAgIG1fYnVmZmVyZWREYXRhICs9IGRhdGE7CiAgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLSAgICBpZiAobV9yZXBseS0+Ynl0ZXNBdmFpbGFibGUoKSkKKyAgICBpZiAoIWRhdGEuaXNF
bXB0eSgpKQogICAgICAgICBtX3Jlc3BvbnNlQ29udGFpbnNEYXRhID0gdHJ1ZTsKIAogICAgIHNl
bmRSZXNwb25zZUlmTmVlZGVkKCk7CkBAIC00NTQsOCArNDY0LDYgQEAgdm9pZCBRTmV0d29ya1Jl
cGx5SGFuZGxlcjo6Zm9yd2FyZERhdGEoKQogICAgIGlmICghbV9yZXNvdXJjZUhhbmRsZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgUUJ5dGVBcnJheSBkYXRhID0gbV9yZXBseS0+cmVhZChtX3Jl
cGx5LT5ieXRlc0F2YWlsYWJsZSgpKTsKLQogICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGll
bnQgPSBtX3Jlc291cmNlSGFuZGxlLT5jbGllbnQoKTsKICAgICBpZiAoIWNsaWVudCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDk4LDQxICs1MDYsNTMgQEAgdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxl
cjo6c3RhcnQoKQogICAgICAgICAmJiAoIXVybC50b0xvY2FsRmlsZSgpLmlzRW1wdHkoKSB8fCB1
cmwuc2NoZW1lKCkgPT0gUUxhdGluMVN0cmluZygiZGF0YSIpKSkKICAgICAgICAgbV9tZXRob2Qg
PSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6OkdldE9wZXJhdGlvbjsKIAorICAgIG1fcmVwbHkgPSBu
ZXcgUXROZXR3b3JrUmVwbHlUaHJlYWRTYWZlUHJveHkobWFuYWdlcik7CisgICAgY29ubmVjdCht
X3JlcGx5LCBTSUdOQUwoZmluaXNoZWQoKSksIHRoaXMsIFNMT1QoZmluaXNoKCkpLCBTSUdOQUxf
Q09OTik7CisKKyAgICAvLyBGb3IgaHR0cChzKSB3ZSBrbm93IHRoYXQgdGhlIGhlYWRlcnMgYXJl
IGNvbXBsZXRlIHVwb24gbWV0YURhdGFDaGFuZ2VkKCkgZW1pc3Npb24sIHNvIHdlCisgICAgLy8g
Y2FuIHNlbmQgdGhlIHJlc3BvbnNlIGFzIGVhcmx5IGFzIHBvc3NpYmxlCisgICAgaWYgKHNjaGVt
ZSA9PSBRTGF0aW4xU3RyaW5nKCJodHRwIikgfHwgc2NoZW1lID09IFFMYXRpbjFTdHJpbmcoImh0
dHBzIikpCisgICAgICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKG1ldGFEYXRhQ2hhbmdlZCgp
KSwgdGhpcywgU0xPVChzZW5kUmVzcG9uc2VJZk5lZWRlZCgpKSwgU0lHTkFMX0NPTk4pOworCisg
ICAgY29ubmVjdChtX3JlcGx5LCBTSUdOQUwoZGF0YVJlY2VpdmVkKGNvbnN0IFFCeXRlQXJyYXkm
KSksIHRoaXMsIFNMT1QoZm9yd2FyZERhdGEoY29uc3QgUUJ5dGVBcnJheSYpKSwgU0lHTkFMX0NP
Tk4pOworCisgICAgaWYgKG1fcmVzb3VyY2VIYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnJlcG9ydFVw
bG9hZFByb2dyZXNzKCkpCisgICAgICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKHVwbG9hZFBy
b2dyZXNzKHFpbnQ2NCwgcWludDY0KSksIHRoaXMsIFNMT1QodXBsb2FkUHJvZ3Jlc3MocWludDY0
LCBxaW50NjQpKSwgU0lHTkFMX0NPTk4pOworCiAgICAgc3dpdGNoIChtX21ldGhvZCkgewogICAg
ICAgICBjYXNlIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6R2V0T3BlcmF0aW9uOgotICAgICAgICAg
ICAgbV9yZXBseSA9IG1hbmFnZXItPmdldChtX3JlcXVlc3QpOworICAgICAgICAgICAgbV9yZXBs
eS0+Z2V0KG1fcmVxdWVzdCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBRTmV0
d29ya0FjY2Vzc01hbmFnZXI6OlBvc3RPcGVyYXRpb246IHsKLSAgICAgICAgICAgIEZvcm1EYXRh
SU9EZXZpY2UqIHBvc3REZXZpY2UgPSBuZXcgRm9ybURhdGFJT0RldmljZShkLT5tX2ZpcnN0UmVx
dWVzdC5odHRwQm9keSgpKTsgCisgICAgICAgICAgICBGb3JtRGF0YUlPRGV2aWNlKiBwb3N0RGV2
aWNlID0gbmV3IEZvcm1EYXRhSU9EZXZpY2UoZC0+bV9maXJzdFJlcXVlc3QuaHR0cEJvZHkoKSwg
dGhpcyk7CiAgICAgICAgICAgICAvLyBXZSBtYXkgYmUgdXBsb2FkaW5nIGZpbGVzIHNvIHByZXZl
bnQgUU5SIGZyb20gYnVmZmVyaW5nIGRhdGEKICAgICAgICAgICAgIG1fcmVxdWVzdC5zZXRIZWFk
ZXIoUU5ldHdvcmtSZXF1ZXN0OjpDb250ZW50TGVuZ3RoSGVhZGVyLCBwb3N0RGV2aWNlLT5nZXRG
b3JtRGF0YVNpemUoKSk7CiAgICAgICAgICAgICBtX3JlcXVlc3Quc2V0QXR0cmlidXRlKFFOZXR3
b3JrUmVxdWVzdDo6RG9Ob3RCdWZmZXJVcGxvYWREYXRhQXR0cmlidXRlLCBRVmFyaWFudCh0cnVl
KSk7Ci0gICAgICAgICAgICBtX3JlcGx5ID0gbWFuYWdlci0+cG9zdChtX3JlcXVlc3QsIHBvc3RE
ZXZpY2UpOwotICAgICAgICAgICAgcG9zdERldmljZS0+c2V0UGFyZW50KG1fcmVwbHkpOworICAg
ICAgICAgICAgbV9yZXBseS0+cG9zdChtX3JlcXVlc3QsIHBvc3REZXZpY2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBRTmV0d29ya0FjY2Vzc01hbmFnZXI6
OkhlYWRPcGVyYXRpb246Ci0gICAgICAgICAgICBtX3JlcGx5ID0gbWFuYWdlci0+aGVhZChtX3Jl
cXVlc3QpOworICAgICAgICAgICAgbV9yZXBseS0+aGVhZChtX3JlcXVlc3QpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpQdXRPcGVyYXRp
b246IHsKLSAgICAgICAgICAgIEZvcm1EYXRhSU9EZXZpY2UqIHB1dERldmljZSA9IG5ldyBGb3Jt
RGF0YUlPRGV2aWNlKGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBCb2R5KCkpOyAKKyAgICAgICAgICAg
IEZvcm1EYXRhSU9EZXZpY2UqIHB1dERldmljZSA9IG5ldyBGb3JtRGF0YUlPRGV2aWNlKGQtPm1f
Zmlyc3RSZXF1ZXN0Lmh0dHBCb2R5KCksIHRoaXMpOwogICAgICAgICAgICAgLy8gV2UgbWF5IGJl
IHVwbG9hZGluZyBmaWxlcyBzbyBwcmV2ZW50IFFOUiBmcm9tIGJ1ZmZlcmluZyBkYXRhCiAgICAg
ICAgICAgICBtX3JlcXVlc3Quc2V0SGVhZGVyKFFOZXR3b3JrUmVxdWVzdDo6Q29udGVudExlbmd0
aEhlYWRlciwgcHV0RGV2aWNlLT5nZXRGb3JtRGF0YVNpemUoKSk7CiAgICAgICAgICAgICBtX3Jl
cXVlc3Quc2V0QXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6RG9Ob3RCdWZmZXJVcGxvYWREYXRh
QXR0cmlidXRlLCBRVmFyaWFudCh0cnVlKSk7Ci0gICAgICAgICAgICBtX3JlcGx5ID0gbWFuYWdl
ci0+cHV0KG1fcmVxdWVzdCwgcHV0RGV2aWNlKTsKLSAgICAgICAgICAgIHB1dERldmljZS0+c2V0
UGFyZW50KG1fcmVwbHkpOworICAgICAgICAgICAgbV9yZXBseS0+cHV0KG1fcmVxdWVzdCwgcHV0
RGV2aWNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgUU5l
dHdvcmtBY2Nlc3NNYW5hZ2VyOjpEZWxldGVPcGVyYXRpb246IHsKLSAgICAgICAgICAgIG1fcmVw
bHkgPSBtYW5hZ2VyLT5kZWxldGVSZXNvdXJjZShtX3JlcXVlc3QpOworICAgICAgICAgICAgbV9y
ZXBseS0+ZGVsZXRlUmVzb3VyY2UobV9yZXF1ZXN0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDcsIDApCiAgICAg
ICAgIGNhc2UgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyOjpDdXN0b21PcGVyYXRpb246Ci0gICAgICAg
ICAgICBtX3JlcGx5ID0gbWFuYWdlci0+c2VuZEN1c3RvbVJlcXVlc3QobV9yZXF1ZXN0LCBtX3Jl
c291cmNlSGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCkubGF0aW4xKCkuZGF0YSgp
KTsKKyAgICAgICAgICAgIG1fcmVwbHktPnNlbmRDdXN0b21SZXF1ZXN0KG1fcmVxdWVzdCwgbV9y
ZXNvdXJjZUhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpLmxhdGluMSgpLmRhdGEo
KSk7CiAgICAgICAgICAgICBicmVhazsKICNlbmRpZgogICAgICAgICBjYXNlIFFOZXR3b3JrQWNj
ZXNzTWFuYWdlcjo6VW5rbm93bk9wZXJhdGlvbjogeworICAgICAgICAgICAgbV9yZXBseS0+ZGVs
ZXRlTGF0ZXIoKTsKICAgICAgICAgICAgIG1fcmVwbHkgPSAwOwogICAgICAgICAgICAgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IG1fcmVzb3VyY2VIYW5kbGUtPmNsaWVudCgpOwogICAg
ICAgICAgICAgaWYgKGNsaWVudCkgewpAQCAtNTQ0LDI5ICs1NjQsNiBAQCB2b2lkIFFOZXR3b3Jr
UmVwbHlIYW5kbGVyOjpzdGFydCgpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9Ci0KLSAgICBtX3JlcGx5LT5zZXRQYXJlbnQodGhpcyk7Ci0KLSAgICBjb25uZWN0KG1fcmVw
bHksIFNJR05BTChmaW5pc2hlZCgpKSwKLSAgICAgICAgICAgIHRoaXMsIFNMT1QoZmluaXNoKCkp
LCBTSUdOQUxfQ09OTik7Ci0KLSAgICAvLyBGb3IgaHR0cChzKSB3ZSBrbm93IHRoYXQgdGhlIGhl
YWRlcnMgYXJlIGNvbXBsZXRlIHVwb24gbWV0YURhdGFDaGFuZ2VkKCkgZW1pc3Npb24sIHNvIHdl
Ci0gICAgLy8gY2FuIHNlbmQgdGhlIHJlc3BvbnNlIGFzIGVhcmx5IGFzIHBvc3NpYmxlCi0gICAg
aWYgKHNjaGVtZSA9PSBRTGF0aW4xU3RyaW5nKCJodHRwIikgfHwgc2NoZW1lID09IFFMYXRpbjFT
dHJpbmcoImh0dHBzIikpCi0gICAgICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKG1ldGFEYXRh
Q2hhbmdlZCgpKSwKLSAgICAgICAgICAgICAgICB0aGlzLCBTTE9UKHNlbmRSZXNwb25zZUlmTmVl
ZGVkKCkpLCBTSUdOQUxfQ09OTik7Ci0KLSAgICBjb25uZWN0KG1fcmVwbHksIFNJR05BTChyZWFk
eVJlYWQoKSksCi0gICAgICAgICAgICB0aGlzLCBTTE9UKGZvcndhcmREYXRhKCkpLCBTSUdOQUxf
Q09OTik7Ci0KLSAgICBpZiAobV9yZXNvdXJjZUhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkucmVwb3J0
VXBsb2FkUHJvZ3Jlc3MoKSkgewotICAgICAgICBjb25uZWN0KG1fcmVwbHksIFNJR05BTCh1cGxv
YWRQcm9ncmVzcyhxaW50NjQsIHFpbnQ2NCkpLAotICAgICAgICAgICAgICAgIHRoaXMsIFNMT1Qo
dXBsb2FkUHJvZ3Jlc3MocWludDY0LCBxaW50NjQpKSwgU0lHTkFMX0NPTk4pOwotICAgIH0KLQot
ICAgIC8vIE1ha2UgdGhpcyBhIGRpcmVjdCBmdW5jdGlvbiBjYWxsIG9uY2Ugd2UgcmVxdWlyZSA0
LjYuMSsuCi0gICAgY29ubmVjdCh0aGlzLCBTSUdOQUwocHJvY2Vzc1F1ZXVlZEl0ZW1zKCkpLAot
ICAgICAgICAgICAgdGhpcywgU0xPVChzZW5kUXVldWVkSXRlbXMoKSksIFNJR05BTF9DT05OKTsK
IH0KIAogdm9pZCBRTmV0d29ya1JlcGx5SGFuZGxlcjo6cmVzZXRTdGF0ZSgpCkBAIC01OTIsOCAr
NTg5LDEwIEBAIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRsZXI6OnNlbmRRdWV1ZWRJdGVtcygpCiAg
ICAgaWYgKG1fc2hvdWxkU2VuZFJlc3BvbnNlKQogICAgICAgICBzZW5kUmVzcG9uc2VJZk5lZWRl
ZCgpOwogCi0gICAgaWYgKG1fc2hvdWxkRm9yd2FyZERhdGEpCi0gICAgICAgIGZvcndhcmREYXRh
KCk7CisgICAgaWYgKG1fc2hvdWxkRm9yd2FyZERhdGEpIHsKKyAgICAgICAgZm9yd2FyZERhdGEo
bV9idWZmZXJlZERhdGEpOworICAgICAgICBtX2J1ZmZlcmVkRGF0YS5jbGVhcigpOworICAgIH0K
IAogICAgIGlmIChtX3Nob3VsZEZpbmlzaCkKICAgICAgICAgZmluaXNoKCk7IApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuaAppbmRleCAx
OTBmNTlmLi4xMTYzOGIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQv
UU5ldHdvcmtSZXBseUhhbmRsZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQv
UU5ldHdvcmtSZXBseUhhbmRsZXIuaApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSA8UU5l
dHdvcmtSZXF1ZXN0PgogI2luY2x1ZGUgPFFOZXR3b3JrQWNjZXNzTWFuYWdlcj4KKyNpbmNsdWRl
IDxRTmV0d29ya1JlcGx5PgogCiAjaW5jbHVkZSAiRm9ybURhdGEuaCIKIApAQCAtMzQsNiArMzUs
NyBAQCBRVF9FTkRfTkFNRVNQQUNFCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlc291
cmNlSGFuZGxlOworY2xhc3MgUXROZXR3b3JrUmVwbHlUaHJlYWRTYWZlUHJveHk7CiAKIGNsYXNz
IFFOZXR3b3JrUmVwbHlIYW5kbGVyIDogcHVibGljIFFPYmplY3QKIHsKQEAgLTQ2LDEzICs0OCwx
MiBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIFFOZXR3b3JrUmVwbHlIYW5kbGVyKFJlc291cmNl
SGFuZGxlICpoYW5kbGUsIExvYWRNb2RlKTsKKyAgICB+UU5ldHdvcmtSZXBseUhhbmRsZXIoKTsK
ICAgICB2b2lkIHNldExvYWRNb2RlKExvYWRNb2RlKTsKIAotICAgIFFOZXR3b3JrUmVwbHkqIHJl
cGx5KCkgY29uc3QgeyByZXR1cm4gbV9yZXBseTsgfQotCiAgICAgdm9pZCBhYm9ydCgpOwogCi0g
ICAgUU5ldHdvcmtSZXBseSogcmVsZWFzZSgpOworICAgIFF0TmV0d29ya1JlcGx5VGhyZWFkU2Fm
ZVByb3h5KiByZWxlYXNlKCk7CiAKIHNpZ25hbHM6CiAgICAgdm9pZCBwcm9jZXNzUXVldWVkSXRl
bXMoKTsKQEAgLTYwLDcgKzYxLDcgQEAgc2lnbmFsczoKIHByaXZhdGUgc2xvdHM6CiAgICAgdm9p
ZCBmaW5pc2goKTsKICAgICB2b2lkIHNlbmRSZXNwb25zZUlmTmVlZGVkKCk7Ci0gICAgdm9pZCBm
b3J3YXJkRGF0YSgpOworICAgIHZvaWQgZm9yd2FyZERhdGEoY29uc3QgUUJ5dGVBcnJheSAmZGF0
YSk7CiAgICAgdm9pZCBzZW5kUXVldWVkSXRlbXMoKTsKICAgICB2b2lkIHVwbG9hZFByb2dyZXNz
KHFpbnQ2NCBieXRlc1NlbnQsIHFpbnQ2NCBieXRlc1RvdGFsKTsKIApAQCAtNjksNyArNzAsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXRTdGF0ZSgpOwogICAgIFN0cmluZyBodHRwTWV0aG9k
KCkgY29uc3Q7CiAKLSAgICBRTmV0d29ya1JlcGx5KiBtX3JlcGx5OworICAgIFF0TmV0d29ya1Jl
cGx5VGhyZWFkU2FmZVByb3h5KiBtX3JlcGx5OwogICAgIFJlc291cmNlSGFuZGxlKiBtX3Jlc291
cmNlSGFuZGxlOwogICAgIGJvb2wgbV9yZWRpcmVjdGVkOwogICAgIGJvb2wgbV9yZXNwb25zZVNl
bnQ7CkBAIC04NCw2ICs4NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFNlbmRSZXNw
b25zZTsKICAgICBib29sIG1fc2hvdWxkRm9yd2FyZERhdGE7CiAgICAgaW50IG1fcmVkaXJlY3Rp
b25UcmllczsKKyAgICBRQnl0ZUFycmF5IG1fYnVmZmVyZWREYXRhOwogfTsKIAogLy8gU2VsZiBk
ZXN0cnVjdGluZyBRSU9EZXZpY2UgZm9yIEZvcm1EYXRhCkBAIC05NCw3ICs5Niw3IEBAIHByaXZh
dGU6CiBjbGFzcyBGb3JtRGF0YUlPRGV2aWNlIDogcHVibGljIFFJT0RldmljZSB7CiAgICAgUV9P
QkpFQ1QKIHB1YmxpYzoKLSAgICBGb3JtRGF0YUlPRGV2aWNlKEZvcm1EYXRhKik7CisgICAgRm9y
bURhdGFJT0RldmljZShGb3JtRGF0YSosIFFPYmplY3QqIHBhcmVudCA9IDApOwogICAgIH5Gb3Jt
RGF0YUlPRGV2aWNlKCk7CiAKICAgICBib29sIGlzU2VxdWVudGlhbCgpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1F0TkFNVGhyZWFkU2FmZVByb3h5LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9RdE5BTVRocmVhZFNhZmVQcm94eS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI1ZmVmOAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9RdE5BTVRocmVhZFNhZmVQcm94eS5j
cHAKQEAgLTAsMCArMSwxODggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUXROQU1UaHJlYWRTYWZlUHJveHkuaCIKKworI2luY2x1ZGUgIkFzc2Vy
dGlvbnMuaCIKKyNpbmNsdWRlIDxRQWJzdHJhY3ROZXR3b3JrQ2FjaGU+CisjaW5jbHVkZSA8UU5l
dHdvcmtBY2Nlc3NNYW5hZ2VyPgorI2luY2x1ZGUgPFFOZXR3b3JrQ29va2llSmFyPgorI2luY2x1
ZGUgPFFTdHJpbmdMaXN0PgorCisvLyBVc2UgdW51c2VkIHZhcmlhYmxlcyB0byBiZSBhYmxlIHRv
IGNhbGwgcVJlZ2lzdGVyTWV0YVR5cGUgc3RhdGljYWxseS4KK3N0YXRpYyBpbnQgZHVtbXlTdGF0
aWNWYXIxID0gcVJlZ2lzdGVyTWV0YVR5cGU8UUZ1dHVyZUludGVyZmFjZTxib29sPiA+KCJRRnV0
dXJlSW50ZXJmYWNlPGJvb2w+Iik7CitzdGF0aWMgaW50IGR1bW15U3RhdGljVmFyMiA9IHFSZWdp
c3Rlck1ldGFUeXBlPFFGdXR1cmVJbnRlcmZhY2U8UUxpc3Q8UU5ldHdvcmtDb29raWU+ID4gPigi
UUZ1dHVyZUludGVyZmFjZTxRTGlzdDxRTmV0d29ya0Nvb2tpZT4gPiIpOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1F0TkFNVGhyZWFkU2FmZVByb3h5OjpRdE5BTVRocmVhZFNhZmVQcm94eShR
TmV0d29ya0FjY2Vzc01hbmFnZXIgKm1hbmFnZXIpCisgICAgOiBtX21hbmFnZXIobWFuYWdlcikK
K3sKKyAgICBtb3ZlVG9UaHJlYWQobWFuYWdlci0+dGhyZWFkKCkpOworCisgICAgY29ubmVjdCh0
aGlzLCBTSUdOQUwobG9jYWxTZXRDb29raWVzUmVxdWVzdGVkKGNvbnN0IFFVcmwmLCBjb25zdCBR
U3RyaW5nJikpLCBTTE9UKGxvY2FsU2V0Q29va2llcyhjb25zdCBRVXJsJiwgY29uc3QgUVN0cmlu
ZyYpKSk7CisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwobG9jYWxDb29raWVzRm9yVXJsUmVxdWVz
dGVkKFFGdXR1cmVJbnRlcmZhY2U8UUxpc3Q8UU5ldHdvcmtDb29raWU+ID4sIGNvbnN0IFFVcmwm
KSksIFNMT1QobG9jYWxDb29raWVzRm9yVXJsKFFGdXR1cmVJbnRlcmZhY2U8UUxpc3Q8UU5ldHdv
cmtDb29raWU+ID4sIGNvbnN0IFFVcmwmKSkpOworICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGxv
Y2FsV2lsbExvYWRGcm9tQ2FjaGVSZXF1ZXN0ZWQoUUZ1dHVyZUludGVyZmFjZTxib29sPiwgY29u
c3QgUVVybCYpKSwgU0xPVChsb2NhbFdpbGxMb2FkRnJvbUNhY2hlKFFGdXR1cmVJbnRlcmZhY2U8
Ym9vbD4sIGNvbnN0IFFVcmwmKSkpOworfQorCit2b2lkIFF0TkFNVGhyZWFkU2FmZVByb3h5Ojps
b2NhbFNldENvb2tpZXMoY29uc3QgUVVybCYgdXJsLCBjb25zdCBRU3RyaW5nJiBjb29raWVzKQor
eworICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVMaXN0ID0gUU5ldHdvcmtDb29raWU6
OnBhcnNlQ29va2llcyhjb29raWVzLnRvQXNjaWkoKSk7CisgICAgUUxpc3Q8UU5ldHdvcmtDb29r
aWU+OjpJdGVyYXRvciBpdCA9IGNvb2tpZUxpc3QuYmVnaW4oKTsKKyAgICB3aGlsZSAoaXQgIT0g
Y29va2llTGlzdC5lbmQoKSkgeworICAgICAgICBpZiAoaXQtPmlzSHR0cE9ubHkoKSkKKyAgICAg
ICAgICAgIGl0ID0gY29va2llTGlzdC5lcmFzZShpdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICsraXQ7CisgICAgfQorICAgIG1fbWFuYWdlci0+Y29va2llSmFyKCktPnNldENvb2tpZXNG
cm9tVXJsKGNvb2tpZUxpc3QsIHVybCk7Cit9CisKK3ZvaWQgUXROQU1UaHJlYWRTYWZlUHJveHk6
OmxvY2FsQ29va2llc0ZvclVybChRRnV0dXJlSW50ZXJmYWNlPFFMaXN0PFFOZXR3b3JrQ29va2ll
PiA+IGZpLCBjb25zdCBRVXJsJiB1cmwpCit7CisgICAgZmkucmVwb3J0UmVzdWx0KG1fbWFuYWdl
ci0+Y29va2llSmFyKCktPmNvb2tpZXNGb3JVcmwodXJsKSk7CisgICAgZmkucmVwb3J0RmluaXNo
ZWQoKTsKK30KKwordm9pZCBRdE5BTVRocmVhZFNhZmVQcm94eTo6bG9jYWxXaWxsTG9hZEZyb21D
YWNoZShRRnV0dXJlSW50ZXJmYWNlPGJvb2w+IGZpLCBjb25zdCBRVXJsJiB1cmwpCit7CisgICAg
Ym9vbCByZXRWYWwgPSBmYWxzZTsKKyAgICBpZiAobV9tYW5hZ2VyLT5jYWNoZSgpKQorICAgICAg
ICByZXRWYWwgPSBtX21hbmFnZXItPmNhY2hlKCktPm1ldGFEYXRhKHVybCkuaXNWYWxpZCgpOwor
CisgICAgZmkucmVwb3J0RmluaXNoZWQoJnJldFZhbCk7Cit9CisKK1F0TmV0d29ya1JlcGx5VGhy
ZWFkU2FmZVByb3h5OjpRdE5ldHdvcmtSZXBseVRocmVhZFNhZmVQcm94eShRTmV0d29ya0FjY2Vz
c01hbmFnZXIgKm1hbmFnZXIpCisgICAgOiBtX21hbmFnZXIobWFuYWdlcikKKyAgICAsIG1fcmVw
bHkoMCkKKyAgICAsIG1fZm9yd2FyZGluZ0RlZmVyZWQoZmFsc2UpCisgICAgLCBtX2NvbnRlbnRM
ZW5ndGhIZWFkZXIoMCkKKyAgICAsIG1fZXJyb3IoUU5ldHdvcmtSZXBseTo6Tm9FcnJvcikKKyAg
ICAsIG1faHR0cFN0YXR1c0NvZGUoMCkKK3sKKyAgICBtb3ZlVG9UaHJlYWQobWFuYWdlci0+dGhy
ZWFkKCkpOworCisgICAgLy8gVGhpcyBtaWdodCBiZSB1bm5lY2Vzc2FyaWx5IGhlYXZ5IHRvIGRv
IGZvciBlYWNoIHJlcXVlc3Qgd2hpbGUgd2UgY291bGQgaGF2ZSB0aGUgc2FtZSB3cmFwcGVyIGZv
ciB0aGUgbWFuYWdlciBpbnN0ZWFkCisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwobG9jYWxHZXRS
ZXF1ZXN0ZWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JikpLCBTTE9UKGxvY2FsR2V0KGNvbnN0IFFO
ZXR3b3JrUmVxdWVzdCYpKSk7CisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwobG9jYWxQb3N0UmVx
dWVzdGVkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYsIFFJT0RldmljZSopKSwgU0xPVChsb2NhbFBv
c3QoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiwgUUlPRGV2aWNlKikpKTsKKyAgICBjb25uZWN0KHRo
aXMsIFNJR05BTChsb2NhbEhlYWRSZXF1ZXN0ZWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JikpLCBT
TE9UKGxvY2FsSGVhZChjb25zdCBRTmV0d29ya1JlcXVlc3QmKSkpOworICAgIGNvbm5lY3QodGhp
cywgU0lHTkFMKGxvY2FsUHV0UmVxdWVzdGVkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYsIFFJT0Rl
dmljZSopKSwgU0xPVChsb2NhbFB1dChjb25zdCBRTmV0d29ya1JlcXVlc3QmLCBRSU9EZXZpY2Uq
KSkpOworICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGxvY2FsRGVsZXRlUmVzb3VyY2VSZXF1ZXN0
ZWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JikpLCBTTE9UKGxvY2FsRGVsZXRlUmVzb3VyY2UoY29u
c3QgUU5ldHdvcmtSZXF1ZXN0JikpKTsKKyAgICBjb25uZWN0KHRoaXMsIFNJR05BTChsb2NhbEN1
c3RvbVJlcXVlc3RSZXF1ZXN0ZWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiwgY29uc3QgUUJ5dGVB
cnJheSYpKSwgU0xPVChsb2NhbEN1c3RvbVJlcXVlc3QoY29uc3QgUU5ldHdvcmtSZXF1ZXN0Jiwg
Y29uc3QgUUJ5dGVBcnJheSYpKSk7CisgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwobG9jYWxBYm9y
dFJlcXVlc3RlZCgpKSwgU0xPVChsb2NhbEFib3J0KCkpKTsKKyAgICBjb25uZWN0KHRoaXMsIFNJ
R05BTChsb2NhbFNldEZvcndhcmRpbmdEZWZlcmVkUmVxdWVzdGVkKGJvb2wpKSwgU0xPVChsb2Nh
bFNldEZvcndhcmRpbmdEZWZlcmVkKGJvb2wpKSk7Cit9CisKK1F0TmV0d29ya1JlcGx5VGhyZWFk
U2FmZVByb3h5Ojp+UXROZXR3b3JrUmVwbHlUaHJlYWRTYWZlUHJveHkoKQoreworICAgIGRlbGV0
ZSBtX3JlcGx5OworfQorCit2b2lkIFF0TmV0d29ya1JlcGx5VGhyZWFkU2FmZVByb3h5Ojpsb2Nh
bEdldChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgbG9jYWxTZXRSZXBs
eShtX21hbmFnZXItPmdldChyZXF1ZXN0KSk7Cit9CisKK3ZvaWQgUXROZXR3b3JrUmVwbHlUaHJl
YWRTYWZlUHJveHk6OmxvY2FsUG9zdChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QsIFFJ
T0RldmljZSogZGF0YSkKK3sKKyAgICBsb2NhbFNldFJlcGx5KG1fbWFuYWdlci0+cG9zdChyZXF1
ZXN0LCBkYXRhKSk7Cit9CisKK3ZvaWQgUXROZXR3b3JrUmVwbHlUaHJlYWRTYWZlUHJveHk6Omxv
Y2FsSGVhZChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgbG9jYWxTZXRS
ZXBseShtX21hbmFnZXItPmhlYWQocmVxdWVzdCkpOworfQorCit2b2lkIFF0TmV0d29ya1JlcGx5
VGhyZWFkU2FmZVByb3h5Ojpsb2NhbFB1dChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3Qs
IFFJT0RldmljZSogZGF0YSkKK3sKKyAgICBsb2NhbFNldFJlcGx5KG1fbWFuYWdlci0+cHV0KHJl
cXVlc3QsIGRhdGEpKTsKK30KKwordm9pZCBRdE5ldHdvcmtSZXBseVRocmVhZFNhZmVQcm94eTo6
bG9jYWxEZWxldGVSZXNvdXJjZShjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QpCit7Cisg
ICAgbG9jYWxTZXRSZXBseShtX21hbmFnZXItPmRlbGV0ZVJlc291cmNlKHJlcXVlc3QpKTsKK30K
Kwordm9pZCBRdE5ldHdvcmtSZXBseVRocmVhZFNhZmVQcm94eTo6bG9jYWxDdXN0b21SZXF1ZXN0
KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUUJ5dGVBcnJheSYgdmVyYikK
K3sKKyAgICBsb2NhbFNldFJlcGx5KG1fbWFuYWdlci0+c2VuZEN1c3RvbVJlcXVlc3QocmVxdWVz
dCwgdmVyYikpOworfQorCit2b2lkIFF0TmV0d29ya1JlcGx5VGhyZWFkU2FmZVByb3h5Ojpsb2Nh
bEFib3J0KCkKK3sKKyAgICBpZiAobV9yZXBseSkKKyAgICAgICAgbV9yZXBseS0+YWJvcnQoKTsK
K30KKwordm9pZCBRdE5ldHdvcmtSZXBseVRocmVhZFNhZmVQcm94eTo6bG9jYWxGb3J3YXJkRGF0
YSgpCit7CisgICAgaWYgKG1fcmVwbHktPmJ5dGVzQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgUUJ5
dGVBcnJheSBkYXRhID0gbV9yZXBseS0+cmVhZChtX3JlcGx5LT5ieXRlc0F2YWlsYWJsZSgpKTsK
KyAgICAgICAgZW1pdCBkYXRhUmVjZWl2ZWQoZGF0YSk7CisgICAgfQorfQorCit2b2lkIFF0TmV0
d29ya1JlcGx5VGhyZWFkU2FmZVByb3h5Ojpsb2NhbFNldEZvcndhcmRpbmdEZWZlcmVkKGJvb2wg
Zm9yd2FyZGluZ0RlZmVyZWQpCit7CisgICAgaWYgKG1fZm9yd2FyZGluZ0RlZmVyZWQgJiYgIWZv
cndhcmRpbmdEZWZlcmVkKQorICAgICAgICBsb2NhbEZvcndhcmREYXRhKCk7CisgICAgbV9mb3J3
YXJkaW5nRGVmZXJlZCA9IGZvcndhcmRpbmdEZWZlcmVkOworfQorCit2b2lkIFF0TmV0d29ya1Jl
cGx5VGhyZWFkU2FmZVByb3h5Ojpsb2NhbE1pcnJvck1lbWJlcnMoKQoreworICAgIEFTU0VSVCht
X3JlcGx5KTsKKyAgICBRTXV0ZXhMb2NrZXIgbG9jaygmbV9taXJyb3JlZE1lbWJlcnNNdXRleCk7
CisKKyAgICBtX2NvbnRlbnREaXNwb3NpdGlvbkhlYWRlciA9IG1fcmVwbHktPnJhd0hlYWRlcigi
Q29udGVudC1EaXNwb3NpdGlvbiIpOworICAgIG1fY29udGVudExlbmd0aEhlYWRlciA9IG1fcmVw
bHktPmhlYWRlcihRTmV0d29ya1JlcXVlc3Q6OkNvbnRlbnRMZW5ndGhIZWFkZXIpLnRvTG9uZ0xv
bmcoKTsKKyAgICBtX2NvbnRlbnRUeXBlSGVhZGVyID0gbV9yZXBseS0+aGVhZGVyKFFOZXR3b3Jr
UmVxdWVzdDo6Q29udGVudFR5cGVIZWFkZXIpLnRvU3RyaW5nKCk7CisgICAgbV9lcnJvciA9IG1f
cmVwbHktPmVycm9yKCk7CisgICAgbV9lcnJvclN0cmluZyA9IG1fcmVwbHktPmVycm9yU3RyaW5n
KCk7CisgICAgbV9odHRwUmVhc29uUGhyYXNlID0gbV9yZXBseS0+YXR0cmlidXRlKFFOZXR3b3Jr
UmVxdWVzdDo6SHR0cFJlYXNvblBocmFzZUF0dHJpYnV0ZSkudG9CeXRlQXJyYXkoKTsKKyAgICBt
X2h0dHBTdGF0dXNDb2RlID0gbV9yZXBseS0+YXR0cmlidXRlKFFOZXR3b3JrUmVxdWVzdDo6SHR0
cFN0YXR1c0NvZGVBdHRyaWJ1dGUpLnRvSW50KCk7CisgICAgbV91cmwgPSBtX3JlcGx5LT51cmwo
KTsKKyAgICBtX3JlZGlyZWN0aW9uVGFyZ2V0ID0gbV9yZXBseS0+YXR0cmlidXRlKFFOZXR3b3Jr
UmVxdWVzdDo6UmVkaXJlY3Rpb25UYXJnZXRBdHRyaWJ1dGUpLnRvVXJsKCk7CisjaWYgUVRfVkVS
U0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDcsIDApCisgICAgbV9yYXdIZWFkZXJQYWlycyA9
IG1fcmVwbHktPnJhd0hlYWRlclBhaXJzKCk7CisjZWxzZQorICAgIG1fcmF3SGVhZGVyUGFpcnMu
Y2xlYXIoKTsKKyAgICBmb3JlYWNoIChjb25zdCBRQnl0ZUFycmF5JiBoZWFkZXJOYW1lLCBtX3Jl
cGx5LT5yYXdIZWFkZXJMaXN0KCkpCisgICAgICAgIG1fcmF3SGVhZGVyUGFpcnMuYXBwZW5kKFJh
d0hlYWRlclBhaXIoaGVhZGVyTmFtZSwgbV9yZXBseS0+cmF3SGVhZGVyKGhlYWRlck5hbWUpKSk7
CisjZW5kaWYKK30KKwordm9pZCBRdE5ldHdvcmtSZXBseVRocmVhZFNhZmVQcm94eTo6bG9jYWxT
ZXRSZXBseShRTmV0d29ya1JlcGx5ICpyZXBseSkKK3sKKyAgICBBU1NFUlQoIW1fcmVwbHkpOwor
ICAgIG1fcmVwbHkgPSByZXBseTsKKyAgICBtX3JlcGx5LT5zZXRQYXJlbnQoMCk7CisgICAgY29u
bmVjdChtX3JlcGx5LCBTSUdOQUwocmVhZHlSZWFkKCkpLCB0aGlzLCBTTE9UKGxvY2FsRm9yd2Fy
ZERhdGEoKSkpOworICAgIC8vIE1ha2Ugc3VyZSBsb2NhbE1pcnJvck1lbWJlcnMoKSBpcyBjYWxs
ZWQgYmVmb3JlIHRoZSBvdXR3YXJkIHNpZ25hbAorICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFM
KGZpbmlzaGVkKCkpLCB0aGlzLCBTTE9UKGxvY2FsTWlycm9yTWVtYmVycygpKSwgUXQ6OkRpcmVj
dENvbm5lY3Rpb24pOworICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKGZpbmlzaGVkKCkpLCB0
aGlzLCBTSUdOQUwoZmluaXNoZWQoKSkpOworICAgIC8vIE1ha2Ugc3VyZSBsb2NhbE1pcnJvck1l
bWJlcnMoKSBpcyBjYWxsZWQgYmVmb3JlIHRoZSBvdXR3YXJkIHNpZ25hbAorICAgIGNvbm5lY3Qo
bV9yZXBseSwgU0lHTkFMKG1ldGFEYXRhQ2hhbmdlZCgpKSwgdGhpcywgU0xPVChsb2NhbE1pcnJv
ck1lbWJlcnMoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAgICBjb25uZWN0KG1fcmVwbHks
IFNJR05BTChtZXRhRGF0YUNoYW5nZWQoKSksIHRoaXMsIFNJR05BTChtZXRhRGF0YUNoYW5nZWQo
KSkpOworICAgIGNvbm5lY3QobV9yZXBseSwgU0lHTkFMKHVwbG9hZFByb2dyZXNzKHFpbnQ2NCwg
cWludDY0KSksIHRoaXMsIFNJR05BTCh1cGxvYWRQcm9ncmVzcyhxaW50NjQsIHFpbnQ2NCkpKTsK
K30KKworCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUXROQU1U
aHJlYWRTYWZlUHJveHkuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9RdE5BTVRocmVh
ZFNhZmVQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzU3ZjQK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUXROQU1UaHJl
YWRTYWZlUHJveHkuaApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKyNpZm5k
ZWYgUXROQU1UaHJlYWRTYWZlUHJveHlfaAorI2RlZmluZSBRdE5BTVRocmVhZFNhZmVQcm94eV9o
CisKKyNpbmNsdWRlIDxRRnV0dXJlPgorI2luY2x1ZGUgPFFNdXRleD4KKyNpbmNsdWRlIDxRTmV0
d29ya0Nvb2tpZT4KKyNpbmNsdWRlIDxRTmV0d29ya1JlcGx5PgorI2luY2x1ZGUgPFFPYmplY3Q+
CisKK2NsYXNzIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjsKK2NsYXNzIFFOZXR3b3JrUmVxdWVzdDsK
K2NsYXNzIFFVcmw7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUXROQU1UaHJlYWRT
YWZlUHJveHkgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBR
dE5BTVRocmVhZFNhZmVQcm94eShRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm1hbmFnZXIpOworCisg
ICAgdm9pZCBzZXRDb29raWVzKGNvbnN0IFFVcmwmIHVybCwgY29uc3QgUVN0cmluZyYgY29va2ll
cykKKyAgICB7CisgICAgICAgIGVtaXQgbG9jYWxTZXRDb29raWVzUmVxdWVzdGVkKHVybCwgY29v
a2llcyk7CisgICAgfQorCisgICAgUUZ1dHVyZTxRTGlzdDxRTmV0d29ya0Nvb2tpZT4gPiBjb29r
aWVzRm9yVXJsKGNvbnN0IFFVcmwmIHVybCkKKyAgICB7CisgICAgICAgIFFGdXR1cmVJbnRlcmZh
Y2U8UUxpc3Q8UU5ldHdvcmtDb29raWU+ID4gZmk7CisgICAgICAgIGZpLnJlcG9ydFN0YXJ0ZWQo
KTsKKyAgICAgICAgZW1pdCBsb2NhbENvb2tpZXNGb3JVcmxSZXF1ZXN0ZWQoZmksIHVybCk7Cisg
ICAgICAgIHJldHVybiBmaS5mdXR1cmUoKTsKKyAgICB9CisKKyAgICBRRnV0dXJlPGJvb2w+IHdp
bGxMb2FkRnJvbUNhY2hlKGNvbnN0IFFVcmwmIHVybCkKKyAgICB7CisgICAgICAgIFFGdXR1cmVJ
bnRlcmZhY2U8Ym9vbD4gZmk7CisgICAgICAgIGZpLnJlcG9ydFN0YXJ0ZWQoKTsKKyAgICAgICAg
ZW1pdCBsb2NhbFdpbGxMb2FkRnJvbUNhY2hlUmVxdWVzdGVkKGZpLCB1cmwpOworICAgICAgICBy
ZXR1cm4gZmkuZnV0dXJlKCk7CisgICAgfQorCitzaWduYWxzOgorICAgIHZvaWQgbG9jYWxTZXRD
b29raWVzUmVxdWVzdGVkKGNvbnN0IFFVcmwmIHVybCwgY29uc3QgUVN0cmluZyYgY29va2llcyk7
CisgICAgdm9pZCBsb2NhbENvb2tpZXNGb3JVcmxSZXF1ZXN0ZWQoUUZ1dHVyZUludGVyZmFjZTxR
TGlzdDxRTmV0d29ya0Nvb2tpZT4gPiBmaSwgY29uc3QgUVVybCYgdXJsKTsKKyAgICB2b2lkIGxv
Y2FsV2lsbExvYWRGcm9tQ2FjaGVSZXF1ZXN0ZWQoUUZ1dHVyZUludGVyZmFjZTxib29sPiBmaSwg
Y29uc3QgUVVybCYgdXJsKTsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIGxvY2FsU2V0Q29v
a2llcyhjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFTdHJpbmcmIGNvb2tpZXMpOworICAgIHZvaWQg
bG9jYWxDb29raWVzRm9yVXJsKFFGdXR1cmVJbnRlcmZhY2U8UUxpc3Q8UU5ldHdvcmtDb29raWU+
ID4gZmksIGNvbnN0IFFVcmwmIHVybCk7CisgICAgdm9pZCBsb2NhbFdpbGxMb2FkRnJvbUNhY2hl
KFFGdXR1cmVJbnRlcmZhY2U8Ym9vbD4gZmksIGNvbnN0IFFVcmwmIHVybCk7CisKK3ByaXZhdGU6
CisgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBtX21hbmFnZXI7Cit9OworCisKK2NsYXNzIFF0
TmV0d29ya1JlcGx5VGhyZWFkU2FmZVByb3h5IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JK
RUNUCitwdWJsaWM6CisgICAgdHlwZWRlZiBRUGFpcjxRQnl0ZUFycmF5LCBRQnl0ZUFycmF5PiBS
YXdIZWFkZXJQYWlyOworICAgIFF0TmV0d29ya1JlcGx5VGhyZWFkU2FmZVByb3h5KFFOZXR3b3Jr
QWNjZXNzTWFuYWdlciAqbWFuYWdlcik7CisgICAgflF0TmV0d29ya1JlcGx5VGhyZWFkU2FmZVBy
b3h5KCk7CisgICAgdm9pZCBhYm9ydCgpCisgICAgeworICAgICAgICBlbWl0IGxvY2FsQWJvcnRS
ZXF1ZXN0ZWQoKTsKKyAgICB9CisgICAgdm9pZCBzZXRGb3J3YXJkaW5nRGVmZXJlZChib29sIGZv
cndhcmRpbmdEZWZlcmVkKQorICAgIHsKKyAgICAgICAgZW1pdCBsb2NhbFNldEZvcndhcmRpbmdE
ZWZlcmVkUmVxdWVzdGVkKGZvcndhcmRpbmdEZWZlcmVkKTsKKyAgICB9CisKKyAgICBRQnl0ZUFy
cmF5IGNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcigpIHsgUU11dGV4TG9ja2VyIGxvY2soJm1fbWly
cm9yZWRNZW1iZXJzTXV0ZXgpOyByZXR1cm4gbV9jb250ZW50RGlzcG9zaXRpb25IZWFkZXI7IH0K
KyAgICBxbG9uZ2xvbmcgY29udGVudExlbmd0aEhlYWRlcigpIHsgUU11dGV4TG9ja2VyIGxvY2so
Jm1fbWlycm9yZWRNZW1iZXJzTXV0ZXgpOyByZXR1cm4gbV9jb250ZW50TGVuZ3RoSGVhZGVyOyB9
CisgICAgUVN0cmluZyBjb250ZW50VHlwZUhlYWRlcigpIHsgUU11dGV4TG9ja2VyIGxvY2soJm1f
bWlycm9yZWRNZW1iZXJzTXV0ZXgpOyByZXR1cm4gbV9jb250ZW50VHlwZUhlYWRlcjsgfQorICAg
IFFOZXR3b3JrUmVwbHk6Ok5ldHdvcmtFcnJvciBlcnJvcigpIHsgUU11dGV4TG9ja2VyIGxvY2so
Jm1fbWlycm9yZWRNZW1iZXJzTXV0ZXgpOyByZXR1cm4gbV9lcnJvcjsgfQorICAgIFFTdHJpbmcg
ZXJyb3JTdHJpbmcoKSB7IFFNdXRleExvY2tlciBsb2NrKCZtX21pcnJvcmVkTWVtYmVyc011dGV4
KTsgcmV0dXJuIG1fZXJyb3JTdHJpbmc7IH0KKyAgICBRQnl0ZUFycmF5IGh0dHBSZWFzb25QaHJh
c2UoKSB7IFFNdXRleExvY2tlciBsb2NrKCZtX21pcnJvcmVkTWVtYmVyc011dGV4KTsgcmV0dXJu
IG1faHR0cFJlYXNvblBocmFzZTsgfQorICAgIGludCBodHRwU3RhdHVzQ29kZSgpIHsgUU11dGV4
TG9ja2VyIGxvY2soJm1fbWlycm9yZWRNZW1iZXJzTXV0ZXgpOyByZXR1cm4gbV9odHRwU3RhdHVz
Q29kZTsgfQorICAgIFFVcmwgdXJsKCkgeyBRTXV0ZXhMb2NrZXIgbG9jaygmbV9taXJyb3JlZE1l
bWJlcnNNdXRleCk7IHJldHVybiBtX3VybDsgfQorICAgIFFVcmwgcmVkaXJlY3Rpb25UYXJnZXQo
KSB7IFFNdXRleExvY2tlciBsb2NrKCZtX21pcnJvcmVkTWVtYmVyc011dGV4KTsgcmV0dXJuIG1f
cmVkaXJlY3Rpb25UYXJnZXQ7IH0KKyAgICBRTGlzdDxSYXdIZWFkZXJQYWlyPiByYXdIZWFkZXJQ
YWlycygpIHsgUU11dGV4TG9ja2VyIGxvY2soJm1fbWlycm9yZWRNZW1iZXJzTXV0ZXgpOyByZXR1
cm4gbV9yYXdIZWFkZXJQYWlyczsgfQorCisgICAgUU5ldHdvcmtSZXBseSogcmVwbHkoKQorICAg
IHsKKyAgICAgICAgLy8gQ2FyZWZ1bCwgYWNjY2Vzc2luZyB0aGUgcmVwbHkgYWNjcm9zcyB0aHJl
YWRzIG1pZ2h0IGJlIGhhemFyZG91cyB0byB5b3VyIGhlYWx0aAorICAgICAgICByZXR1cm4gbV9y
ZXBseTsKKyAgICB9CitwdWJsaWM6CisgICAgdm9pZCBnZXQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0
ICZyZXF1ZXN0KQorICAgIHsKKyAgICAgICAgZW1pdCBsb2NhbEdldFJlcXVlc3RlZChyZXF1ZXN0
KTsKKyAgICB9CisgICAgdm9pZCBwb3N0KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwg
UUlPRGV2aWNlKiBkYXRhKQorICAgIHsKKyAgICAgICAgZW1pdCBsb2NhbFBvc3RSZXF1ZXN0ZWQo
cmVxdWVzdCwgZGF0YSk7CisgICAgfQorICAgIHZvaWQgaGVhZChjb25zdCBRTmV0d29ya1JlcXVl
c3QgJnJlcXVlc3QpCisgICAgeworICAgICAgICBlbWl0IGxvY2FsSGVhZFJlcXVlc3RlZChyZXF1
ZXN0KTsKKyAgICB9CisgICAgdm9pZCBwdXQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0
LCBRSU9EZXZpY2UqIGRhdGEpCisgICAgeworICAgICAgICBlbWl0IGxvY2FsUHV0UmVxdWVzdGVk
KHJlcXVlc3QsIGRhdGEpOworICAgIH0KKyAgICB2b2lkIGRlbGV0ZVJlc291cmNlKGNvbnN0IFFO
ZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCkKKyAgICB7CisgICAgICAgIGVtaXQgbG9jYWxEZWxldGVS
ZXNvdXJjZVJlcXVlc3RlZChyZXF1ZXN0KTsKKyAgICB9CisgICAgdm9pZCBzZW5kQ3VzdG9tUmVx
dWVzdChjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIGNvbnN0IFFCeXRlQXJyYXkmIHZl
cmIpCisgICAgeworICAgICAgICBlbWl0IGxvY2FsQ3VzdG9tUmVxdWVzdFJlcXVlc3RlZChyZXF1
ZXN0LCB2ZXJiKTsKKyAgICB9CisKK3NpZ25hbHM6CisgICAgdm9pZCBsb2NhbEdldFJlcXVlc3Rl
ZChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QpOworICAgIHZvaWQgbG9jYWxQb3N0UmVx
dWVzdGVkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwgUUlPRGV2aWNlKiBkYXRhKTsK
KyAgICB2b2lkIGxvY2FsSGVhZFJlcXVlc3RlZChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVl
c3QpOworICAgIHZvaWQgbG9jYWxQdXRSZXF1ZXN0ZWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiBy
ZXF1ZXN0LCBRSU9EZXZpY2UqIGRhdGEpOworICAgIHZvaWQgbG9jYWxEZWxldGVSZXNvdXJjZVJl
cXVlc3RlZChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QpOworICAgIHZvaWQgbG9jYWxD
dXN0b21SZXF1ZXN0UmVxdWVzdGVkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgUUJ5dGVBcnJheSYgdmVyYik7CisgICAgdm9pZCBsb2NhbEFib3J0UmVxdWVzdGVkKCk7Cisg
ICAgdm9pZCBsb2NhbFNldEZvcndhcmRpbmdEZWZlcmVkUmVxdWVzdGVkKGJvb2wgZm9yd2FyZGlu
Z0RlZmVyZWQpOworCisgICAgdm9pZCBmaW5pc2hlZCgpOworICAgIHZvaWQgcmVhZHlSZWFkKCk7
CisgICAgdm9pZCBtZXRhRGF0YUNoYW5nZWQoKTsKKyAgICB2b2lkIHVwbG9hZFByb2dyZXNzKHFp
bnQ2NCBieXRlc1NlbnQsIHFpbnQ2NCBieXRlc1RvdGFsKTsKKyAgICB2b2lkIGRhdGFSZWNlaXZl
ZChjb25zdCBRQnl0ZUFycmF5ICZkYXRhKTsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIGxv
Y2FsR2V0KGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCk7CisgICAgdm9pZCBsb2NhbFBv
c3QoY29uc3QgUU5ldHdvcmtSZXF1ZXN0JiByZXF1ZXN0LCBRSU9EZXZpY2UqIGRhdGEpOworICAg
IHZvaWQgbG9jYWxIZWFkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCk7CisgICAgdm9p
ZCBsb2NhbFB1dChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QsIFFJT0RldmljZSogZGF0
YSk7CisgICAgdm9pZCBsb2NhbERlbGV0ZVJlc291cmNlKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCYg
cmVxdWVzdCk7CisgICAgdm9pZCBsb2NhbEN1c3RvbVJlcXVlc3QoY29uc3QgUU5ldHdvcmtSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBRQnl0ZUFycmF5JiB2ZXJiKTsKKyAgICB2b2lkIGxvY2FsQWJv
cnQoKTsKKyAgICB2b2lkIGxvY2FsRm9yd2FyZERhdGEoKTsKKyAgICB2b2lkIGxvY2FsU2V0Rm9y
d2FyZGluZ0RlZmVyZWQoYm9vbCBmb3J3YXJkaW5nRGVmZXJlZCk7CisgICAgdm9pZCBsb2NhbE1p
cnJvck1lbWJlcnMoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGxvY2FsU2V0UmVwbHkoUU5ldHdv
cmtSZXBseSAqcmVwbHkpOworCisgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICptX21hbmFnZXI7
CisgICAgUU5ldHdvcmtSZXBseSAqbV9yZXBseTsKKyAgICBib29sIG1fZm9yd2FyZGluZ0RlZmVy
ZWQ7CisKKyAgICAvLyBNaXJyb3JlZCBtZW1iZXJzCisgICAgUU11dGV4IG1fbWlycm9yZWRNZW1i
ZXJzTXV0ZXg7CisgICAgUUJ5dGVBcnJheSBtX2NvbnRlbnREaXNwb3NpdGlvbkhlYWRlcjsKKyAg
ICBxbG9uZ2xvbmcgbV9jb250ZW50TGVuZ3RoSGVhZGVyOworICAgIFFTdHJpbmcgbV9jb250ZW50
VHlwZUhlYWRlcjsKKyAgICBRTmV0d29ya1JlcGx5OjpOZXR3b3JrRXJyb3IgbV9lcnJvcjsKKyAg
ICBRU3RyaW5nIG1fZXJyb3JTdHJpbmc7CisgICAgUUJ5dGVBcnJheSBtX2h0dHBSZWFzb25QaHJh
c2U7CisgICAgaW50IG1faHR0cFN0YXR1c0NvZGU7CisgICAgUVVybCBtX3VybDsKKyAgICBRVXJs
IG1fcmVkaXJlY3Rpb25UYXJnZXQ7CisgICAgUUxpc3Q8UmF3SGVhZGVyUGFpcj4gbV9yYXdIZWFk
ZXJQYWlyczsKK307CisKK30KKworCisjZW5kaWYgLy8gUXROQU1UaHJlYWRTYWZlUHJveHlfaApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlSGFuZGxlUXQu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlSGFuZGxlUXQuY3BwCmlu
ZGV4IGE1YWM0YzMuLmY0MGI4MjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9xdC9SZXNvdXJjZUhhbmRsZVF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
cXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudFF0LmgiCisjaW5jbHVkZSAiUXROQU1UaHJlYWRTYWZlUHJveHkuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJR
TmV0d29ya1JlcGx5SGFuZGxlci5oIgpAQCAtMTU2LDIwICsxNTcsMTMgQEAgYm9vbCBSZXNvdXJj
ZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBGcmFt
ZSogZnJhbWUpCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBtYW5hZ2VyID0gMDsKLSAgICBRQWJzdHJhY3ROZXR3b3Jr
Q2FjaGUqIGNhY2hlID0gMDsKICAgICBpZiAoZnJhbWUtPmxvYWRlcigpLT5uZXR3b3JraW5nQ29u
dGV4dCgpKSB7Ci0gICAgICAgIG1hbmFnZXIgPSBmcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdD
b250ZXh0KCktPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCk7Ci0gICAgICAgIGNhY2hlID0gbWFuYWdl
ci0+Y2FjaGUoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNhY2hlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBRTmV0d29ya0NhY2hlTWV0YURhdGEgZGF0YSA9IGNhY2hlLT5tZXRhRGF0YShy
ZXF1ZXN0LnVybCgpKTsKLSAgICBpZiAoZGF0YS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgcmVxdWVz
dC5zZXRDYWNoZVBvbGljeShSZXR1cm5DYWNoZURhdGFEb250TG9hZCk7Ci0gICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1hbmFnZXIgPSBmcmFtZS0+
bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCktPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCk7Cisg
ICAgICAgIFF0TkFNVGhyZWFkU2FmZVByb3h5IG1hbmFnZXJQcm94eShtYW5hZ2VyKTsKKyAgICAg
ICAgaWYgKG1hbmFnZXJQcm94eS53aWxsTG9hZEZyb21DYWNoZShyZXF1ZXN0LnVybCgpKSkgewor
ICAgICAgICAgICAgcmVxdWVzdC5zZXRDYWNoZVBvbGljeShSZXR1cm5DYWNoZURhdGFEb250TG9h
ZCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJl
dHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAKaW5kZXggMDQ5ZWUwZi4u
ZTVkMzZiYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IktVUkwuaCIKKyNpbmNsdWRlICJRdE5BTVRocmVhZFNhZmVQcm94eS5oIgogI2luY2x1ZGUgIk5l
dHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIApAQCAtNDMs
NyArNDQsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBRTmV0d29ya0Nvb2tp
ZUphciAqY29va2llSmFyKGNvbnN0IERvY3VtZW50ICpkb2N1bWVudCkKKworc3RhdGljIFFOZXR3
b3JrQWNjZXNzTWFuYWdlciAqbmV0d29ya0FjY2Vzc01hbmFnZXIoY29uc3QgRG9jdW1lbnQgKmRv
Y3VtZW50KQogewogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTMs
MzggKzU1LDMwIEBAIHN0YXRpYyBRTmV0d29ya0Nvb2tpZUphciAqY29va2llSmFyKGNvbnN0IERv
Y3VtZW50ICpkb2N1bWVudCkKICAgICBGcmFtZUxvYWRlciAqbG9hZGVyID0gZnJhbWUtPmxvYWRl
cigpOwogICAgIGlmICghbG9hZGVyKQogICAgICAgICByZXR1cm4gMDsKLSAgICBRTmV0d29ya0Fj
Y2Vzc01hbmFnZXIqIG1hbmFnZXIgPSBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCktPm5ldHdv
cmtBY2Nlc3NNYW5hZ2VyKCk7Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IG1hbmFnZXIt
PmNvb2tpZUphcigpOwotICAgIHJldHVybiBqYXI7CisgICAgcmV0dXJuIGxvYWRlci0+bmV0d29y
a2luZ0NvbnRleHQoKS0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKTsKIH0KIAogdm9pZCBzZXRDb29r
aWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogewotICAgIFFVcmwgdSh1cmwpOwotICAgIFFVcmwgcChkb2N1bWVudC0+Zmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSk7Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvb2tpZUphcihk
b2N1bWVudCk7Ci0gICAgaWYgKCFqYXIpCisgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBtYW5h
Z2VyID0gbmV0d29ya0FjY2Vzc01hbmFnZXIoZG9jdW1lbnQpOworICAgIGlmICghbWFuYWdlcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBR
TmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJpbmcodmFsdWUpLnRvQXNjaWkoKSk7Ci0g
ICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+OjpJdGVyYXRvciBpdCA9IGNvb2tpZXMuYmVnaW4oKTsK
LSAgICB3aGlsZSAoaXQgIT0gY29va2llcy5lbmQoKSkgewotICAgICAgICBpZiAoaXQtPmlzSHR0
cE9ubHkoKSkKLSAgICAgICAgICAgIGl0ID0gY29va2llcy5lcmFzZShpdCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgICsraXQ7Ci0gICAgfQotICAgIGphci0+c2V0Q29va2llc0Zyb21Vcmwo
Y29va2llcywgdSk7CisgICAgLy8gQ3JlYXRlIHRoZSBtYW5pcHVsYXRvciBvbiB0aGUgaGVhcCB0
byBsZXQgaXQgbGl2ZSB1bnRpbCB0aGUKKyAgICAvLyBhc3luYyByZXF1ZXN0IGlzIHBpY2tlZCBi
eSB0aGUgb3RoZXIgdGhyZWFkJ3MgZXZlbnQgbG9vcC4KKyAgICBRdE5BTVRocmVhZFNhZmVQcm94
eSogbWFuYWdlclByb3h5ID0gbmV3IFF0TkFNVGhyZWFkU2FmZVByb3h5KG1hbmFnZXIpOworICAg
IG1hbmFnZXJQcm94eS0+c2V0Q29va2llcyh1cmwsIHZhbHVlKTsKKyAgICBtYW5hZ2VyUHJveHkt
PmRlbGV0ZUxhdGVyKCk7CiB9CiAKIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIFFVcmwgdSh1cmwpOwotICAgIFFOZXR3b3Jr
Q29va2llSmFyKiBqYXIgPSBjb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmICghamFyKQorICAg
IFFOZXR3b3JrQWNjZXNzTWFuYWdlciogbWFuYWdlciA9IG5ldHdvcmtBY2Nlc3NNYW5hZ2VyKGRv
Y3VtZW50KTsKKyAgICBpZiAoIW1hbmFnZXIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAot
ICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKHUp
OworICAgIFF0TkFNVGhyZWFkU2FmZVByb3h5IG1hbmFnZXJQcm94eShtYW5hZ2VyKTsKKyAgICBR
TGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IG1hbmFnZXJQcm94eS5jb29raWVzRm9yVXJs
KHVybCk7CiAgICAgaWYgKGNvb2tpZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKQEAgLTEwMSwxMiArOTUsMTIgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCiAKIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwgJnVybCkKIHsK
LSAgICBRVXJsIHUodXJsKTsKLSAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29va2llSmFy
KGRvY3VtZW50KTsKLSAgICBpZiAoIWphcikKKyAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIqIG1h
bmFnZXIgPSBuZXR3b3JrQWNjZXNzTWFuYWdlcihkb2N1bWVudCk7CisgICAgaWYgKCFtYW5hZ2Vy
KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4g
Y29va2llcyA9IGphci0+Y29va2llc0ZvclVybCh1KTsKKyAgICBRdE5BTVRocmVhZFNhZmVQcm94
eSBtYW5hZ2VyUHJveHkobWFuYWdlcik7CisgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tp
ZXMgPSBtYW5hZ2VyUHJveHkuY29va2llc0ZvclVybCh1cmwpOwogICAgIGlmIChjb29raWVzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCkBAIC0xMjEsOCArMTE1LDcgQEAg
U3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCAmdXJsKQogCiBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCkKIHsKLSAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29va2llSmFy
KGRvY3VtZW50KTsKLSAgICByZXR1cm4gKGphciAhPSAwKTsKKyAgICByZXR1cm4gbmV0d29ya0Fj
Y2Vzc01hbmFnZXIoZG9jdW1lbnQpOwogfQogCiBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCmRpZmYgLS1n
aXQgYS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCBiZDk2
NGI3Li4xYzYwZTVmIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktp
dC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMC0xMi0wOSAgSm9jZWx5biBUdXJj
b3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gU3VwcG9ydCBhIFFOZXR3b3JrQWNjZXNz
TWFuYWdlciBhZmZpbmVkIHRvIGEgZGlmZmVyZW50IHRocmVhZC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMDgwCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2UgdGhyZWFkIHNhZmUgcHJveHkgY2xhc3NlcyBmb3IgUU5ldHdvcmtBY2Nlc3NN
YW5hZ2VyCisgICAgICAgIGFuZCBRTmV0d29ya1JlcGx5LgorICAgICAgICBJZiBydW4gaW4gdGhl
IHNhbWUgdGhyZWFkLCB0aGVzZSBvYmplY3RzIHdpbGwgZm9yd2FyZCB0aGUgY2FsbHMgd2l0aAor
ICAgICAgICBRdDo6RGlyZWN0Q29ubmVjdGlvbiBiaW5kaW5ncywgd2hpbGUgaW4gdGhlIG90aGVy
IGNhc2UgdGhleSB3aWxsIHVzZQorICAgICAgICBRdDo6UXVldWVkQ29ubmVjdGlvbiB0byBjYXJy
eSByZXF1ZXN0cyBhY2Nyb3NzIHRocmVhZHMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBiYXNpY2Fs
bHk6CisgICAgICAgIC0gTWFrZXMgc3VyZSB0aGF0IGFsbCBhY2Nlc3MgZ29lcyB0aHJvdWdoIHRo
ZXNlIG9iamVjdHMKKyAgICAgICAgLSBSZW9yZGVycyBzaWduYWwgY29ubmVjdGlvbnMgdG8gbWFr
ZSBzdXJlIHdlIGFyZSBjb25uZWN0ZWQgd2hlbiB0aGUKKyAgICAgICAgICBzaWduYWwgY29tZXMK
KyAgICAgICAgLSBNYWtlcyBzdXJlIHRoYXQgbm8gUU9iamVjdCBpbiB0aGUgV2ViQ29yZSB0aHJl
YWQgaXMgYSBjaGlsZCBvZiB0aGUKKyAgICAgICAgICByZXBseSB3aGljaCBtaWdodCBiZSBpbiBh
IGRpZmZlcmVudCB0aHJlYWQuCisgICAgICAgIC0gRm9yd2FyZCB0aGUgZGF0YSBkaXJlY3RseSBp
biBRQnl0ZUFycmF5cyBpbiBzaWduYWxzIGluc3RlYWQgb2YgY29sbGVjdGluZworICAgICAgICAg
IHRoZSBkYXRhIHdoZW4gdGhlIHNpZ25hbCBpcyBoYW5kbGVkLgorCisgICAgICAgIE5ldyB0ZXN0
OiB0c3RfUVdlYlBhZ2U6Om5ldHdvcmtBY2Nlc3NNYW5hZ2VyT25EaWZmZXJlbnRUaHJlYWQKKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6ZG93bmxvYWQpOgorICAgICAgICAqIHRl
c3RzL3F3ZWJwYWdlL3RzdF9xd2VicGFnZS5jcHA6CisgICAgICAgIChRdE5BTVRocmVhZDo6UXRO
QU1UaHJlYWQpOgorICAgICAgICAoUXROQU1UaHJlYWQ6On5RdE5BTVRocmVhZCk6CisgICAgICAg
IChRdE5BTVRocmVhZDo6bmV0d29ya0FjY2Vzc01hbmFnZXIpOgorICAgICAgICAoUXROQU1UaHJl
YWQ6OnJ1bik6CisgICAgICAgICh0c3RfUVdlYlBhZ2U6Om5ldHdvcmtBY2Nlc3NNYW5hZ2VyT25E
aWZmZXJlbnRUaHJlYWQpOgorCiAyMDEwLTEyLTA5ICBTaWRkaGFydGggTWF0aHVyICA8c2lkZGhh
cnRoLm1hdGh1ckBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFzemxvIEdvbWJv
cy4KZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFF0LmNwcCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNw
cAppbmRleCBiZjZlNzVhLi42NDk2YjRiIDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAi
SFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVFRQUGFyc2Vycy5oIgorI2luY2x1ZGUgIlF0TkFNVGhyZWFkU2FmZVByb3h5LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJRTmV0d29ya1JlcGx5SGFuZGxl
ci5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKQEAgLTk3NSwxMyArOTc2
LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZG93bmxvYWQoV2ViQ29yZTo6UmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgV2ViQ29yCiAgICAgICAgIHJldHVybjsKIAogICAgIFFO
ZXR3b3JrUmVwbHlIYW5kbGVyKiBoYW5kbGVyID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX2pv
YjsKLSAgICBRTmV0d29ya1JlcGx5KiByZXBseSA9IGhhbmRsZXItPnJlbGVhc2UoKTsKLSAgICBp
ZiAocmVwbHkpIHsKKyAgICBRdE5ldHdvcmtSZXBseVRocmVhZFNhZmVQcm94eSogcmVwbHlQcm94
eSA9IGhhbmRsZXItPnJlbGVhc2UoKTsKKyAgICBpZiAocmVwbHlQcm94eSkgewogICAgICAgICBR
V2ViUGFnZSAqcGFnZSA9IG1fd2ViRnJhbWUtPnBhZ2UoKTsKICAgICAgICAgaWYgKHBhZ2UtPmZv
cndhcmRVbnN1cHBvcnRlZENvbnRlbnQoKSkKLSAgICAgICAgICAgIGVtaXQgcGFnZS0+dW5zdXBw
b3J0ZWRDb250ZW50KHJlcGx5KTsKKyAgICAgICAgICAgIGVtaXQgcGFnZS0+dW5zdXBwb3J0ZWRD
b250ZW50KHJlcGx5UHJveHktPnJlcGx5KCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
ZXBseS0+YWJvcnQoKTsKKyAgICAgICAgICAgIHJlcGx5UHJveHktPmFib3J0KCk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvdGVzdHMvcXdlYnBhZ2UvdHN0X3F3ZWJwYWdlLmNw
cCBiL1dlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3BwCmluZGV4IGMyN2Jh
MDIuLjI3ZDI4ZjAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdl
YnBhZ2UuY3BwCisrKyBiL1dlYktpdC9xdC90ZXN0cy9xd2VicGFnZS90c3RfcXdlYnBhZ2UuY3Bw
CkBAIC0xMjgsNiArMTI4LDcgQEAgcHJpdmF0ZSBzbG90czoKICAgICB2b2lkIGZpbmRUZXh0KCk7
CiAgICAgdm9pZCBzdXBwb3J0ZWRDb250ZW50VHlwZSgpOwogICAgIHZvaWQgaW5maW5pdGVMb29w
SlMoKTsKKyAgICB2b2lkIG5ldHdvcmtBY2Nlc3NNYW5hZ2VyT25EaWZmZXJlbnRUaHJlYWQoKTsK
ICAgICAKIHByaXZhdGU6CiAgICAgUVdlYlZpZXcqIG1fdmlldzsKQEAgLTI1OTksNSArMjYwMCw0
NSBAQCB2b2lkIHRzdF9RV2ViUGFnZTo6c3VwcG9ydGVkQ29udGVudFR5cGUoKQogICAgICAgUVZF
UklGWTIobV9wYWdlLT5zdXBwb3J0c0NvbnRlbnRUeXBlKG1pbWVUeXBlKSwgUVN0cmluZygiQ2Fu
bm90IGhhbmRsZSBjb250ZW50IHR5cGVzICclMSchIikuYXJnKG1pbWVUeXBlKS50b0xhdGluMSgp
KTsKIH0KIAorY2xhc3MgUXROQU1UaHJlYWQgOiBwdWJsaWMgUVRocmVhZCB7CitwdWJsaWM6Cisg
ICAgUXROQU1UaHJlYWQoKQorICAgIHsKKyAgICAgICAgbV9xbmFtRnV0dXJlLnJlcG9ydFN0YXJ0
ZWQoKTsKKyAgICB9CisgICAgflF0TkFNVGhyZWFkKCkKKyAgICB7CisgICAgICAgIHF1aXQoKTsK
KyAgICAgICAgd2FpdCgpOworICAgIH0KKworICAgIFFGdXR1cmU8UU5ldHdvcmtBY2Nlc3NNYW5h
Z2VyKj4gbmV0d29ya0FjY2Vzc01hbmFnZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcW5h
bUZ1dHVyZS5mdXR1cmUoKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBydW4oKQorICAg
IHsKKyAgICAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKiBxbmFtID0gbmV3IFFOZXR3b3JrQWNj
ZXNzTWFuYWdlcjsKKyAgICAgICAgbV9xbmFtRnV0dXJlLnJlcG9ydEZpbmlzaGVkKCZxbmFtKTsK
KyAgICAgICAgZXhlYygpOworICAgICAgICBkZWxldGUgcW5hbTsKKyAgICB9Citwcml2YXRlOgor
ICAgIFFGdXR1cmVJbnRlcmZhY2U8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKj4gbV9xbmFtRnV0dXJl
OworfTsKKwordm9pZCB0c3RfUVdlYlBhZ2U6Om5ldHdvcmtBY2Nlc3NNYW5hZ2VyT25EaWZmZXJl
bnRUaHJlYWQoKQoreworICAgIFF0TkFNVGhyZWFkIHFuYW1UaHJlYWQ7CisgICAgcW5hbVRocmVh
ZC5zdGFydCgpOworICAgIG1fcGFnZS0+c2V0TmV0d29ya0FjY2Vzc01hbmFnZXIocW5hbVRocmVh
ZC5uZXR3b3JrQWNjZXNzTWFuYWdlcigpKTsKKyAgICBRU2lnbmFsU3B5IGxvYWRTcHkobV9wYWdl
LCBTSUdOQUwobG9hZEZpbmlzaGVkKGJvb2wpKSk7CisgICAgUVVybCB1cmwgPSBRVXJsKCJxcmM6
Ly8vcmVzb3VyY2VzL2luZGV4Lmh0bWwiKTsKKyAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5sb2Fk
KHVybCk7CisgICAgUVRSWV9DT01QQVJFKGxvYWRTcHkuY291bnQoKSwgMSk7CisgICAgUUNPTVBB
UkUobV9wYWdlLT5tYWluRnJhbWUoKS0+Y2hpbGRGcmFtZXMoKVswXS0+dXJsKCksIFFVcmwoInFy
YzovLy9yZXNvdXJjZXMvZnJhbWVfYS5odG1sIikpOworfQorCiBRVEVTVF9NQUlOKHRzdF9RV2Vi
UGFnZSkKICNpbmNsdWRlICJ0c3RfcXdlYnBhZ2UubW9jIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76071</attachid>
            <date>2010-12-09 08:45:50 -0800</date>
            <delta_ts>2010-12-09 09:56:32 -0800</delta_ts>
            <desc>QtTestBrowser Patch</desc>
            <filename>qttestbrowserThreadedQnam.patch</filename>
            <type>text/plain</type>
            <size>6962</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxOTIzNjZiLi5kY2Q0MDljIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjkgQEAKIAogICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBbUXRdIE1ha2UgUXRUZXN0
QnJvd3NlciBzcGF3biBRTkFNIGluIGEgc2Vjb25kYXJ5IHRocmVhZC4KKworICAgICAgICBBIG1l
bnUgYWxsb3dzIHRvIHN3aXRjaCBRTkFNIGJhY2sgdG8gdGhlIHNhbWUgdGhyZWFkLgorCisgICAg
ICAgICogUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5jcHA6CisgICAgICAgIChMYXVuY2hl
cldpbmRvdzo6aW5pdGlhbGl6ZVZpZXcpOgorICAgICAgICAoTGF1bmNoZXJXaW5kb3c6OmNyZWF0
ZUNocm9tZSk6CisgICAgICAgIChMYXVuY2hlcldpbmRvdzo6dG9nZ2xlVGhyZWFkZWRRbmFtKToK
KyAgICAgICAgKiBRdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93Lmg6CisgICAgICAgIChXaW5k
b3dPcHRpb25zOjpXaW5kb3dPcHRpb25zKToKKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL3dlYnBh
Z2UuY3BwOgorICAgICAgICAoV2ViUGFnZTo6V2ViUGFnZSk6CisgICAgICAgIChXZWJQYWdlOjpz
ZXRRbmFtVGhyZWFkZWQpOgorICAgICAgICAqIFF0VGVzdEJyb3dzZXIvd2VicGFnZS5oOgorICAg
ICAgICAoUW5hbVRocmVhZDo6UW5hbVRocmVhZCk6CisgICAgICAgIChRbmFtVGhyZWFkOjp+UW5h
bVRocmVhZCk6CisgICAgICAgIChRbmFtVGhyZWFkOjpuZXR3b3JrQWNjZXNzTWFuYWdlcik6Cisg
ICAgICAgIChRbmFtVGhyZWFkOjpydW4pOgorCisyMDEwLTEyLTA5ICBKb2NlbHluIFR1cmNvdHRl
ICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKICAgICAgICAgW1F0XVtXSzJdIEFkZCB0aGUgUVdLQ29udGV4dCBBUEkg
Y2xhc3MgdG8gd3JhcCB0aGUgV2ViQ29udGV4dC4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNzUwCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1F0
VGVzdEJyb3dzZXIvbGF1bmNoZXJ3aW5kb3cuY3BwIGIvV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nl
ci9sYXVuY2hlcndpbmRvdy5jcHAKaW5kZXggNzYwODA2My4uMWE0ZDI4ZiAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5jcHAKKysrIGIvV2ViS2l0
VG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5jcHAKQEAgLTk1LDYgKzk1LDcgQEAg
dm9pZCBMYXVuY2hlcldpbmRvdzo6aW5pdGlhbGl6ZVZpZXcoKQogCiAgICAgUVVybCB1cmwgPSBw
YWdlKCktPm1haW5GcmFtZSgpLT51cmwoKTsKICAgICBzZXRQYWdlKG5ldyBXZWJQYWdlKHRoaXMp
KTsKKyAgICBwYWdlKCktPnNldFFuYW1UaHJlYWRlZChtX3dpbmRvd09wdGlvbnMudXNlVGhyZWFk
ZWRRbmFtKTsKIAogICAgIFFTcGxpdHRlciogc3BsaXR0ZXIgPSBzdGF0aWNfY2FzdDxRU3BsaXR0
ZXIqPihjZW50cmFsV2lkZ2V0KCkpOwogCkBAIC0yMzQsNiArMjM1LDEwIEBAIHZvaWQgTGF1bmNo
ZXJXaW5kb3c6OmNyZWF0ZUNocm9tZSgpCiAgICAgdG9nZ2xlV2ViR0wtPnNldENoZWNrYWJsZSh0
cnVlKTsKICAgICB0b2dnbGVXZWJHTC0+c2V0Q2hlY2tlZChzZXR0aW5ncy0+dGVzdEF0dHJpYnV0
ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCkpOwogCisgICAgUUFjdGlvbiogdG9nZ2xlVGhy
ZWFkZWRRbmFtID0gdG9vbHNNZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSB0aHJlYWRlZCBuZXR3b3Jr
IiwgdGhpcywgU0xPVCh0b2dnbGVUaHJlYWRlZFFuYW0oYm9vbCkpKTsKKyAgICB0b2dnbGVUaHJl
YWRlZFFuYW0tPnNldENoZWNrYWJsZSh0cnVlKTsKKyAgICB0b2dnbGVUaHJlYWRlZFFuYW0tPnNl
dENoZWNrZWQobV93aW5kb3dPcHRpb25zLnVzZVRocmVhZGVkUW5hbSk7CisKICAgICBRQWN0aW9u
KiBzcGF0aWFsTmF2aWdhdGlvbkFjdGlvbiA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJUb2dnbGUg
U3BhdGlhbCBOYXZpZ2F0aW9uIiwgdGhpcywgU0xPVCh0b2dnbGVTcGF0aWFsTmF2aWdhdGlvbihi
b29sKSkpOwogICAgIHNwYXRpYWxOYXZpZ2F0aW9uQWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7
CiAgICAgc3BhdGlhbE5hdmlnYXRpb25BY3Rpb24tPnNldFNob3J0Y3V0KFFLZXlTZXF1ZW5jZShR
dDo6Q1RSTCB8IFF0OjpTSElGVCB8IFF0OjpLZXlfUykpOwpAQCAtNzAyLDYgKzcwNywxMiBAQCB2
b2lkIExhdW5jaGVyV2luZG93Ojp0b2dnbGVXZWJHTChib29sIHRvZ2dsZSkKICAgICBwYWdlKCkt
PnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCwgdG9n
Z2xlKTsKIH0KIAordm9pZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlVGhyZWFkZWRRbmFtKGJvb2wg
dG9nZ2xlKQoreworICAgIG1fd2luZG93T3B0aW9ucy51c2VUaHJlYWRlZFFuYW0gPSB0b2dnbGU7
CisgICAgcGFnZSgpLT5zZXRRbmFtVGhyZWFkZWQodG9nZ2xlKTsKK30KKwogdm9pZCBMYXVuY2hl
cldpbmRvdzo6YW5pbWF0ZWRGbGlwKCkKIHsKICAgICBxb2JqZWN0X2Nhc3Q8V2ViVmlld0dyYXBo
aWNzQmFzZWQqPihtX3ZpZXcpLT5hbmltYXRlZEZsaXAoKTsKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1F0VGVzdEJyb3dzZXIvbGF1bmNoZXJ3aW5kb3cuaCBiL1dlYktpdFRvb2xzL1F0VGVzdEJy
b3dzZXIvbGF1bmNoZXJ3aW5kb3cuaAppbmRleCA4NGRlZGFhLi5lMzVlN2ZkIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93LmgKKysrIGIvV2ViS2l0
VG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5oCkBAIC04Nyw2ICs4Nyw3IEBAIHB1
YmxpYzoKICNlbHNlCiAgICAgICAgICwgdXNlRnJhbWVGbGF0dGVuaW5nKGZhbHNlKQogI2VuZGlm
CisgICAgICAgICwgdXNlVGhyZWFkZWRRbmFtKHRydWUpCiAgICAgICAgICwgY2FjaGVXZWJWaWV3
KGZhbHNlKQogICAgICAgICAsIHNob3dGcmFtZVJhdGUoZmFsc2UpCiAgICAgICAgICwgcmVzaXpl
c1RvQ29udGVudHMoZmFsc2UpCkBAIC0xMDIsNiArMTAzLDcgQEAgcHVibGljOgogICAgIGJvb2wg
dXNlVGlsZWRCYWNraW5nU3RvcmU7CiAgICAgYm9vbCB1c2VXZWJHTDsKICAgICBib29sIHVzZUZy
YW1lRmxhdHRlbmluZzsKKyAgICBib29sIHVzZVRocmVhZGVkUW5hbTsKICAgICBib29sIGNhY2hl
V2ViVmlldzsKICAgICBib29sIHNob3dGcmFtZVJhdGU7CiAgICAgYm9vbCByZXNpemVzVG9Db250
ZW50czsKQEAgLTE1Myw2ICsxNTUsNyBAQCBwcm90ZWN0ZWQgc2xvdHM6CiAgICAgdm9pZCB0b2dn
bGVUaWxlZEJhY2tpbmdTdG9yZShib29sIHRvZ2dsZSk7CiAgICAgdm9pZCB0b2dnbGVSZXNpemVz
VG9Db250ZW50cyhib29sIHRvZ2dsZSk7CiAgICAgdm9pZCB0b2dnbGVXZWJHTChib29sIHRvZ2ds
ZSk7CisgICAgdm9pZCB0b2dnbGVUaHJlYWRlZFFuYW0oYm9vbCB0b2dnbGUpOwogICAgIHZvaWQg
dG9nZ2xlU3BhdGlhbE5hdmlnYXRpb24oYm9vbCBiKTsKICAgICB2b2lkIHRvZ2dsZUZ1bGxTY3Jl
ZW5Nb2RlKGJvb2wgZW5hYmxlKTsKICAgICB2b2lkIHRvZ2dsZUZyYW1lRmxhdHRlbmluZyhib29s
IHRvZ2dsZSk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL3dlYnBhZ2Uu
Y3BwIGIvV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmNwcAppbmRleCBiNmNhZjY3
Li4xNWY2ZGIwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL3dlYnBhZ2Uu
Y3BwCisrKyBiL1dlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFnZS5jcHAKQEAgLTQ4LDgg
KzQ4LDYgQEAgV2ViUGFnZTo6V2ViUGFnZShRT2JqZWN0KiBwYXJlbnQpCiB7CiAgICAgYXBwbHlQ
cm94eSgpOwogCi0gICAgY29ubmVjdChuZXR3b3JrQWNjZXNzTWFuYWdlcigpLCBTSUdOQUwoYXV0
aGVudGljYXRpb25SZXF1aXJlZChRTmV0d29ya1JlcGx5KiwgUUF1dGhlbnRpY2F0b3IqKSksCi0g
ICAgICAgICAgICB0aGlzLCBTTE9UKGF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoUU5ldHdvcmtSZXBs
eSosIFFBdXRoZW50aWNhdG9yKikpKTsKICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChmZWF0dXJl
UGVybWlzc2lvblJlcXVlc3RlZChRV2ViRnJhbWUqLCBRV2ViUGFnZTo6RmVhdHVyZSkpLCB0aGlz
LCBTTE9UKHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpGZWF0dXJlKSkp
OwogICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGZlYXR1cmVQZXJtaXNzaW9uUmVxdWVzdENhbmNl
bGVkKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpGZWF0dXJlKSksIHRoaXMsIFNMT1QoZmVhdHVyZVBl
cm1pc3Npb25SZXF1ZXN0Q2FuY2VsZWQoUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OkZlYXR1cmUpKSk7
CiB9CkBAIC0xMjEsNiArMTE5LDI4IEBAIFFTdHJpbmcgV2ViUGFnZTo6dXNlckFnZW50Rm9yVXJs
KGNvbnN0IFFVcmwmIHVybCkgY29uc3QKICAgICByZXR1cm4gUVdlYlBhZ2U6OnVzZXJBZ2VudEZv
clVybCh1cmwpOwogfQogCit2b2lkIFdlYlBhZ2U6OnNldFFuYW1UaHJlYWRlZChib29sIHRocmVh
ZGVkKQoreworICAgIGJvb2wgYWxyZWFkeVRocmVhZGVkID0gbmV0d29ya0FjY2Vzc01hbmFnZXIo
KS0+dGhyZWFkKCkgIT0gdGhyZWFkKCk7CisgICAgaWYgKHRocmVhZGVkID09IGFscmVhZHlUaHJl
YWRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHRocmVhZGVkKSB7CisgICAgICAgIG1f
cW5hbVRocmVhZC5yZXNldChuZXcgUXROQU1UaHJlYWQpOworICAgICAgICBtX3FuYW1UaHJlYWQt
PnN0YXJ0KCk7CisgICAgICAgIHNldE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKG1fcW5hbVRocmVhZC0+
bmV0d29ya0FjY2Vzc01hbmFnZXIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0TmV0d29y
a0FjY2Vzc01hbmFnZXIoMCk7CisgICAgICAgIG1fcW5hbVRocmVhZC5yZXNldCgpOworICAgIH0K
KworICAgIFF0OjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSA9IHRocmVhZGVkID8gUXQ6
OkJsb2NraW5nUXVldWVkQ29ubmVjdGlvbiA6IFF0OjpEaXJlY3RDb25uZWN0aW9uOworICAgIGNv
bm5lY3QobmV0d29ya0FjY2Vzc01hbmFnZXIoKSwgU0lHTkFMKGF1dGhlbnRpY2F0aW9uUmVxdWly
ZWQoUU5ldHdvcmtSZXBseSosIFFBdXRoZW50aWNhdG9yKikpLAorICAgICAgICAgICAgdGhpcywg
U0xPVChhdXRoZW50aWNhdGlvblJlcXVpcmVkKFFOZXR3b3JrUmVwbHkqLCBRQXV0aGVudGljYXRv
ciopKSwKKyAgICAgICAgICAgIGNvbm5lY3Rpb25UeXBlKTsKKyAgICBhcHBseVByb3h5KCk7Cit9
CisKIGJvb2wgV2ViUGFnZTo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpCiB7CiAgICAgaWYg
KCFtX2ludGVycnVwdGluZ0phdmFTY3JpcHRFbmFibGVkKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmggYi9XZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL3dl
YnBhZ2UuaAppbmRleCAwMWYzZjZhLi4wMzRjNzQ2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9R
dFRlc3RCcm93c2VyL3dlYnBhZ2UuaAorKysgYi9XZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL3dl
YnBhZ2UuaApAQCAtMzUsNiArMzUsMTEgQEAKIAogI2luY2x1ZGUgPHF3ZWJmcmFtZS5oPgogI2lu
Y2x1ZGUgPHF3ZWJwYWdlLmg+CisjaW5jbHVkZSA8UUZ1dHVyZT4KKyNpbmNsdWRlIDxRU2NvcGVk
UG9pbnRlcj4KKyNpbmNsdWRlIDxRVGhyZWFkPgorCitjbGFzcyBRdE5BTVRocmVhZDsKIAogY2xh
c3MgV2ViUGFnZSA6IHB1YmxpYyBRV2ViUGFnZSB7CiAgICAgUV9PQkpFQ1QKQEAgLTUxLDYgKzU2
LDcgQEAgcHVibGljOgogCiAgICAgUVN0cmluZyB1c2VyQWdlbnRGb3JVcmwoY29uc3QgUVVybCYg
dXJsKSBjb25zdDsKICAgICB2b2lkIHNldEludGVycnVwdGluZ0phdmFTY3JpcHRFbmFibGVkKGJv
b2wgZW5hYmxlZCkgeyBtX2ludGVycnVwdGluZ0phdmFTY3JpcHRFbmFibGVkID0gZW5hYmxlZDsg
fQorICAgIHZvaWQgc2V0UW5hbVRocmVhZGVkKGJvb2wgdGhyZWFkZWQpOwogCiBwdWJsaWMgc2xv
dHM6CiAgICAgdm9pZCBvcGVuVXJsSW5EZWZhdWx0QnJvd3Nlcihjb25zdCBRVXJsJiB1cmwgPSBR
VXJsKCkpOwpAQCAtNjQsNiArNzAsMzYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGx5UHJveHko
KTsKICAgICBRU3RyaW5nIG1fdXNlckFnZW50OwogICAgIGJvb2wgbV9pbnRlcnJ1cHRpbmdKYXZh
U2NyaXB0RW5hYmxlZDsKKyAgICBRU2NvcGVkUG9pbnRlcjxRdE5BTVRocmVhZD4gbV9xbmFtVGhy
ZWFkOworfTsKKworCitjbGFzcyBRdE5BTVRocmVhZCA6IHB1YmxpYyBRVGhyZWFkIHsKK3B1Ymxp
YzoKKyAgICBRdE5BTVRocmVhZCgpCisgICAgeworICAgICAgICBtX3FuYW1GdXR1cmUucmVwb3J0
U3RhcnRlZCgpOworICAgIH0KKyAgICB+UXROQU1UaHJlYWQoKQorICAgIHsKKyAgICAgICAgcXVp
dCgpOworICAgICAgICB3YWl0KCk7CisgICAgfQorCisgICAgUUZ1dHVyZTxRTmV0d29ya0FjY2Vz
c01hbmFnZXIqPiBuZXR3b3JrQWNjZXNzTWFuYWdlcigpCisgICAgeworICAgICAgICByZXR1cm4g
bV9xbmFtRnV0dXJlLmZ1dHVyZSgpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICB2b2lkIHJ1bigp
CisgICAgeworICAgICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIgcW5hbTsKKyAgICAgICAgbV9x
bmFtRnV0dXJlLnJlcG9ydFJlc3VsdCgmcW5hbSk7CisgICAgICAgIG1fcW5hbUZ1dHVyZS5yZXBv
cnRGaW5pc2hlZCgpOworICAgICAgICBleGVjKCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBRRnV0
dXJlSW50ZXJmYWNlPFFOZXR3b3JrQWNjZXNzTWFuYWdlcio+IG1fcW5hbUZ1dHVyZTsKIH07CiAK
ICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76078</attachid>
            <date>2010-12-09 09:56:32 -0800</date>
            <delta_ts>2010-12-10 02:51:33 -0800</delta_ts>
            <desc>QtTestBrowser Patch v2</desc>
            <filename>qttestbrowserThreadedQnam.patch</filename>
            <type>text/plain</type>
            <size>7002</size>
            <attacher name="Jocelyn Turcotte">jturcotte</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAxOTIzNjZiLi5kY2Q0MDljIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjkgQEAKIAogICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBbUXRdIE1ha2UgUXRUZXN0
QnJvd3NlciBzcGF3biBRTkFNIGluIGEgc2Vjb25kYXJ5IHRocmVhZC4KKworICAgICAgICBBIG1l
bnUgYWxsb3dzIHRvIHN3aXRjaCBRTkFNIGJhY2sgdG8gdGhlIHNhbWUgdGhyZWFkLgorCisgICAg
ICAgICogUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5jcHA6CisgICAgICAgIChMYXVuY2hl
cldpbmRvdzo6aW5pdGlhbGl6ZVZpZXcpOgorICAgICAgICAoTGF1bmNoZXJXaW5kb3c6OmNyZWF0
ZUNocm9tZSk6CisgICAgICAgIChMYXVuY2hlcldpbmRvdzo6dG9nZ2xlVGhyZWFkZWRRbmFtKToK
KyAgICAgICAgKiBRdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93Lmg6CisgICAgICAgIChXaW5k
b3dPcHRpb25zOjpXaW5kb3dPcHRpb25zKToKKyAgICAgICAgKiBRdFRlc3RCcm93c2VyL3dlYnBh
Z2UuY3BwOgorICAgICAgICAoV2ViUGFnZTo6V2ViUGFnZSk6CisgICAgICAgIChXZWJQYWdlOjpz
ZXRRbmFtVGhyZWFkZWQpOgorICAgICAgICAqIFF0VGVzdEJyb3dzZXIvd2VicGFnZS5oOgorICAg
ICAgICAoUW5hbVRocmVhZDo6UW5hbVRocmVhZCk6CisgICAgICAgIChRbmFtVGhyZWFkOjp+UW5h
bVRocmVhZCk6CisgICAgICAgIChRbmFtVGhyZWFkOjpuZXR3b3JrQWNjZXNzTWFuYWdlcik6Cisg
ICAgICAgIChRbmFtVGhyZWFkOjpydW4pOgorCisyMDEwLTEyLTA5ICBKb2NlbHluIFR1cmNvdHRl
ICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKICAgICAgICAgW1F0XVtXSzJdIEFkZCB0aGUgUVdLQ29udGV4dCBBUEkg
Y2xhc3MgdG8gd3JhcCB0aGUgV2ViQ29udGV4dC4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUwNzUwCiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1F0
VGVzdEJyb3dzZXIvbGF1bmNoZXJ3aW5kb3cuY3BwIGIvV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nl
ci9sYXVuY2hlcndpbmRvdy5jcHAKaW5kZXggNzYwODA2My4uMWE0ZDI4ZiAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5jcHAKKysrIGIvV2ViS2l0
VG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5jcHAKQEAgLTk1LDYgKzk1LDcgQEAg
dm9pZCBMYXVuY2hlcldpbmRvdzo6aW5pdGlhbGl6ZVZpZXcoKQogCiAgICAgUVVybCB1cmwgPSBw
YWdlKCktPm1haW5GcmFtZSgpLT51cmwoKTsKICAgICBzZXRQYWdlKG5ldyBXZWJQYWdlKHRoaXMp
KTsKKyAgICBwYWdlKCktPnNldFFuYW1UaHJlYWRlZChtX3dpbmRvd09wdGlvbnMudXNlVGhyZWFk
ZWRRbmFtKTsKIAogICAgIFFTcGxpdHRlciogc3BsaXR0ZXIgPSBzdGF0aWNfY2FzdDxRU3BsaXR0
ZXIqPihjZW50cmFsV2lkZ2V0KCkpOwogCkBAIC0yMzQsNiArMjM1LDEwIEBAIHZvaWQgTGF1bmNo
ZXJXaW5kb3c6OmNyZWF0ZUNocm9tZSgpCiAgICAgdG9nZ2xlV2ViR0wtPnNldENoZWNrYWJsZSh0
cnVlKTsKICAgICB0b2dnbGVXZWJHTC0+c2V0Q2hlY2tlZChzZXR0aW5ncy0+dGVzdEF0dHJpYnV0
ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCkpOwogCisgICAgUUFjdGlvbiogdG9nZ2xlVGhy
ZWFkZWRRbmFtID0gdG9vbHNNZW51LT5hZGRBY3Rpb24oIlRvZ2dsZSB0aHJlYWRlZCBuZXR3b3Jr
IiwgdGhpcywgU0xPVCh0b2dnbGVUaHJlYWRlZFFuYW0oYm9vbCkpKTsKKyAgICB0b2dnbGVUaHJl
YWRlZFFuYW0tPnNldENoZWNrYWJsZSh0cnVlKTsKKyAgICB0b2dnbGVUaHJlYWRlZFFuYW0tPnNl
dENoZWNrZWQobV93aW5kb3dPcHRpb25zLnVzZVRocmVhZGVkUW5hbSk7CisKICAgICBRQWN0aW9u
KiBzcGF0aWFsTmF2aWdhdGlvbkFjdGlvbiA9IHRvb2xzTWVudS0+YWRkQWN0aW9uKCJUb2dnbGUg
U3BhdGlhbCBOYXZpZ2F0aW9uIiwgdGhpcywgU0xPVCh0b2dnbGVTcGF0aWFsTmF2aWdhdGlvbihi
b29sKSkpOwogICAgIHNwYXRpYWxOYXZpZ2F0aW9uQWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7
CiAgICAgc3BhdGlhbE5hdmlnYXRpb25BY3Rpb24tPnNldFNob3J0Y3V0KFFLZXlTZXF1ZW5jZShR
dDo6Q1RSTCB8IFF0OjpTSElGVCB8IFF0OjpLZXlfUykpOwpAQCAtNzAyLDYgKzcwNywxMiBAQCB2
b2lkIExhdW5jaGVyV2luZG93Ojp0b2dnbGVXZWJHTChib29sIHRvZ2dsZSkKICAgICBwYWdlKCkt
PnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0dGluZ3M6OldlYkdMRW5hYmxlZCwgdG9n
Z2xlKTsKIH0KIAordm9pZCBMYXVuY2hlcldpbmRvdzo6dG9nZ2xlVGhyZWFkZWRRbmFtKGJvb2wg
dG9nZ2xlKQoreworICAgIG1fd2luZG93T3B0aW9ucy51c2VUaHJlYWRlZFFuYW0gPSB0b2dnbGU7
CisgICAgcGFnZSgpLT5zZXRRbmFtVGhyZWFkZWQodG9nZ2xlKTsKK30KKwogdm9pZCBMYXVuY2hl
cldpbmRvdzo6YW5pbWF0ZWRGbGlwKCkKIHsKICAgICBxb2JqZWN0X2Nhc3Q8V2ViVmlld0dyYXBo
aWNzQmFzZWQqPihtX3ZpZXcpLT5hbmltYXRlZEZsaXAoKTsKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1F0VGVzdEJyb3dzZXIvbGF1bmNoZXJ3aW5kb3cuaCBiL1dlYktpdFRvb2xzL1F0VGVzdEJy
b3dzZXIvbGF1bmNoZXJ3aW5kb3cuaAppbmRleCA4NGRlZGFhLi5lMzVlN2ZkIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL2xhdW5jaGVyd2luZG93LmgKKysrIGIvV2ViS2l0
VG9vbHMvUXRUZXN0QnJvd3Nlci9sYXVuY2hlcndpbmRvdy5oCkBAIC04Nyw2ICs4Nyw3IEBAIHB1
YmxpYzoKICNlbHNlCiAgICAgICAgICwgdXNlRnJhbWVGbGF0dGVuaW5nKGZhbHNlKQogI2VuZGlm
CisgICAgICAgICwgdXNlVGhyZWFkZWRRbmFtKHRydWUpCiAgICAgICAgICwgY2FjaGVXZWJWaWV3
KGZhbHNlKQogICAgICAgICAsIHNob3dGcmFtZVJhdGUoZmFsc2UpCiAgICAgICAgICwgcmVzaXpl
c1RvQ29udGVudHMoZmFsc2UpCkBAIC0xMDIsNiArMTAzLDcgQEAgcHVibGljOgogICAgIGJvb2wg
dXNlVGlsZWRCYWNraW5nU3RvcmU7CiAgICAgYm9vbCB1c2VXZWJHTDsKICAgICBib29sIHVzZUZy
YW1lRmxhdHRlbmluZzsKKyAgICBib29sIHVzZVRocmVhZGVkUW5hbTsKICAgICBib29sIGNhY2hl
V2ViVmlldzsKICAgICBib29sIHNob3dGcmFtZVJhdGU7CiAgICAgYm9vbCByZXNpemVzVG9Db250
ZW50czsKQEAgLTE1Myw2ICsxNTUsNyBAQCBwcm90ZWN0ZWQgc2xvdHM6CiAgICAgdm9pZCB0b2dn
bGVUaWxlZEJhY2tpbmdTdG9yZShib29sIHRvZ2dsZSk7CiAgICAgdm9pZCB0b2dnbGVSZXNpemVz
VG9Db250ZW50cyhib29sIHRvZ2dsZSk7CiAgICAgdm9pZCB0b2dnbGVXZWJHTChib29sIHRvZ2ds
ZSk7CisgICAgdm9pZCB0b2dnbGVUaHJlYWRlZFFuYW0oYm9vbCB0b2dnbGUpOwogICAgIHZvaWQg
dG9nZ2xlU3BhdGlhbE5hdmlnYXRpb24oYm9vbCBiKTsKICAgICB2b2lkIHRvZ2dsZUZ1bGxTY3Jl
ZW5Nb2RlKGJvb2wgZW5hYmxlKTsKICAgICB2b2lkIHRvZ2dsZUZyYW1lRmxhdHRlbmluZyhib29s
IHRvZ2dsZSk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL3dlYnBhZ2Uu
Y3BwIGIvV2ViS2l0VG9vbHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmNwcAppbmRleCBiNmNhZjY3
Li4xNWY2ZGIwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL3dlYnBhZ2Uu
Y3BwCisrKyBiL1dlYktpdFRvb2xzL1F0VGVzdEJyb3dzZXIvd2VicGFnZS5jcHAKQEAgLTQ4LDgg
KzQ4LDYgQEAgV2ViUGFnZTo6V2ViUGFnZShRT2JqZWN0KiBwYXJlbnQpCiB7CiAgICAgYXBwbHlQ
cm94eSgpOwogCi0gICAgY29ubmVjdChuZXR3b3JrQWNjZXNzTWFuYWdlcigpLCBTSUdOQUwoYXV0
aGVudGljYXRpb25SZXF1aXJlZChRTmV0d29ya1JlcGx5KiwgUUF1dGhlbnRpY2F0b3IqKSksCi0g
ICAgICAgICAgICB0aGlzLCBTTE9UKGF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoUU5ldHdvcmtSZXBs
eSosIFFBdXRoZW50aWNhdG9yKikpKTsKICAgICBjb25uZWN0KHRoaXMsIFNJR05BTChmZWF0dXJl
UGVybWlzc2lvblJlcXVlc3RlZChRV2ViRnJhbWUqLCBRV2ViUGFnZTo6RmVhdHVyZSkpLCB0aGlz
LCBTTE9UKHJlcXVlc3RQZXJtaXNzaW9uKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpGZWF0dXJlKSkp
OwogICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKGZlYXR1cmVQZXJtaXNzaW9uUmVxdWVzdENhbmNl
bGVkKFFXZWJGcmFtZSosIFFXZWJQYWdlOjpGZWF0dXJlKSksIHRoaXMsIFNMT1QoZmVhdHVyZVBl
cm1pc3Npb25SZXF1ZXN0Q2FuY2VsZWQoUVdlYkZyYW1lKiwgUVdlYlBhZ2U6OkZlYXR1cmUpKSk7
CiB9CkBAIC0xMjEsNiArMTE5LDI4IEBAIFFTdHJpbmcgV2ViUGFnZTo6dXNlckFnZW50Rm9yVXJs
KGNvbnN0IFFVcmwmIHVybCkgY29uc3QKICAgICByZXR1cm4gUVdlYlBhZ2U6OnVzZXJBZ2VudEZv
clVybCh1cmwpOwogfQogCit2b2lkIFdlYlBhZ2U6OnNldFFuYW1UaHJlYWRlZChib29sIHRocmVh
ZGVkKQoreworICAgIGJvb2wgYWxyZWFkeVRocmVhZGVkID0gbmV0d29ya0FjY2Vzc01hbmFnZXIo
KS0+dGhyZWFkKCkgIT0gdGhyZWFkKCk7CisgICAgaWYgKHRocmVhZGVkID09IGFscmVhZHlUaHJl
YWRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHRocmVhZGVkKSB7CisgICAgICAgIG1f
cW5hbVRocmVhZC5yZXNldChuZXcgUXROQU1UaHJlYWQpOworICAgICAgICBtX3FuYW1UaHJlYWQt
PnN0YXJ0KCk7CisgICAgICAgIHNldE5ldHdvcmtBY2Nlc3NNYW5hZ2VyKG1fcW5hbVRocmVhZC0+
bmV0d29ya0FjY2Vzc01hbmFnZXIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0TmV0d29y
a0FjY2Vzc01hbmFnZXIoMCk7CisgICAgICAgIG1fcW5hbVRocmVhZC5yZXNldCgpOworICAgIH0K
KworICAgIFF0OjpDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSA9IHRocmVhZGVkID8gUXQ6
OkJsb2NraW5nUXVldWVkQ29ubmVjdGlvbiA6IFF0OjpEaXJlY3RDb25uZWN0aW9uOworICAgIGNv
bm5lY3QobmV0d29ya0FjY2Vzc01hbmFnZXIoKSwgU0lHTkFMKGF1dGhlbnRpY2F0aW9uUmVxdWly
ZWQoUU5ldHdvcmtSZXBseSosIFFBdXRoZW50aWNhdG9yKikpLAorICAgICAgICAgICAgdGhpcywg
U0xPVChhdXRoZW50aWNhdGlvblJlcXVpcmVkKFFOZXR3b3JrUmVwbHkqLCBRQXV0aGVudGljYXRv
ciopKSwKKyAgICAgICAgICAgIGNvbm5lY3Rpb25UeXBlKTsKKyAgICBhcHBseVByb3h5KCk7Cit9
CisKIGJvb2wgV2ViUGFnZTo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpCiB7CiAgICAgaWYg
KCFtX2ludGVycnVwdGluZ0phdmFTY3JpcHRFbmFibGVkKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvUXRUZXN0QnJvd3Nlci93ZWJwYWdlLmggYi9XZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL3dl
YnBhZ2UuaAppbmRleCAwMWYzZjZhLi5lNjI0MDJiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9R
dFRlc3RCcm93c2VyL3dlYnBhZ2UuaAorKysgYi9XZWJLaXRUb29scy9RdFRlc3RCcm93c2VyL3dl
YnBhZ2UuaApAQCAtMzMsOSArMzMsMTQgQEAKICNpZm5kZWYgd2VicGFnZV9oCiAjZGVmaW5lIHdl
YnBhZ2VfaAogCisjaW5jbHVkZSA8UUZ1dHVyZT4KKyNpbmNsdWRlIDxRU2NvcGVkUG9pbnRlcj4K
KyNpbmNsdWRlIDxRVGhyZWFkPgogI2luY2x1ZGUgPHF3ZWJmcmFtZS5oPgogI2luY2x1ZGUgPHF3
ZWJwYWdlLmg+CiAKK2NsYXNzIFF0TkFNVGhyZWFkOworCiBjbGFzcyBXZWJQYWdlIDogcHVibGlj
IFFXZWJQYWdlIHsKICAgICBRX09CSkVDVAogCkBAIC01MSw2ICs1Niw3IEBAIHB1YmxpYzoKIAog
ICAgIFFTdHJpbmcgdXNlckFnZW50Rm9yVXJsKGNvbnN0IFFVcmwmIHVybCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRJbnRlcnJ1cHRpbmdKYXZhU2NyaXB0RW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9p
bnRlcnJ1cHRpbmdKYXZhU2NyaXB0RW5hYmxlZCA9IGVuYWJsZWQ7IH0KKyAgICB2b2lkIHNldFFu
YW1UaHJlYWRlZChib29sIHRocmVhZGVkKTsKIAogcHVibGljIHNsb3RzOgogICAgIHZvaWQgb3Bl
blVybEluRGVmYXVsdEJyb3dzZXIoY29uc3QgUVVybCYgdXJsID0gUVVybCgpKTsKQEAgLTY0LDYg
KzcwLDM2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBseVByb3h5KCk7CiAgICAgUVN0cmluZyBt
X3VzZXJBZ2VudDsKICAgICBib29sIG1faW50ZXJydXB0aW5nSmF2YVNjcmlwdEVuYWJsZWQ7Cisg
ICAgUVNjb3BlZFBvaW50ZXI8UXROQU1UaHJlYWQ+IG1fcW5hbVRocmVhZDsKK307CisKKworY2xh
c3MgUXROQU1UaHJlYWQgOiBwdWJsaWMgUVRocmVhZCB7CitwdWJsaWM6CisgICAgUXROQU1UaHJl
YWQoKQorICAgIHsKKyAgICAgICAgbV9xbmFtRnV0dXJlLnJlcG9ydFN0YXJ0ZWQoKTsKKyAgICB9
CisgICAgflF0TkFNVGhyZWFkKCkKKyAgICB7CisgICAgICAgIHF1aXQoKTsKKyAgICAgICAgd2Fp
dCgpOworICAgIH0KKworICAgIFFGdXR1cmU8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyKj4gbmV0d29y
a0FjY2Vzc01hbmFnZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcW5hbUZ1dHVyZS5mdXR1
cmUoKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAg
UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyIHFuYW07CisgICAgICAgIG1fcW5hbUZ1dHVyZS5yZXBvcnRS
ZXN1bHQoJnFuYW0pOworICAgICAgICBtX3FuYW1GdXR1cmUucmVwb3J0RmluaXNoZWQoKTsKKyAg
ICAgICAgZXhlYygpOworICAgIH0KK3ByaXZhdGU6CisgICAgUUZ1dHVyZUludGVyZmFjZTxRTmV0
d29ya0FjY2Vzc01hbmFnZXIqPiBtX3FuYW1GdXR1cmU7CiB9OwogCiAjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>