<?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>27376</bug_id>
          
          <creation_ts>2009-07-17 10:02:43 -0700</creation_ts>
          <short_desc>[WINCE] Add WinCE specific files for platform/network</short_desc>
          <delta_ts>2010-10-22 11:22:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>23154</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Treat">manyoso</reporter>
          <assigned_to name="Patrick R. Gansterer">paroga</assigned_to>
          <cc>aroben</cc>
    
    <cc>commit-queue</cc>
    
    <cc>paroga</cc>
    
    <cc>skyul</cc>
    
    <cc>staikos</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>132609</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-17 10:02:43 -0700</bug_when>
    <thetext>The following patch is the WinCE implementation of platform/network.  The files have been purified with cpplint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132610</commentid>
    <comment_count>1</comment_count>
      <attachid>32951</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-17 10:03:51 -0700</bug_when>
    <thetext>Created attachment 32951
Add platform/network WinCE specific files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132618</commentid>
    <comment_count>2</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2009-07-17 10:27:41 -0700</bug_when>
    <thetext>There are many WinCE devices which lack Connection Manager. So I think we need a guard around Connection Manager code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133227</commentid>
    <comment_count>3</comment_count>
      <attachid>33104</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-20 14:18:12 -0700</bug_when>
    <thetext>Created attachment 33104
fix some coding style conflicts

fix some coding style conflicts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133228</commentid>
    <comment_count>4</comment_count>
      <attachid>33105</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-07-20 14:19:59 -0700</bug_when>
    <thetext>Created attachment 33105
oops. forgot to add ChangeLog to it

add ChangeLog to it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133258</commentid>
    <comment_count>5</comment_count>
      <attachid>33105</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-20 15:19:21 -0700</bug_when>
    <thetext>Comment on attachment 33105
oops. forgot to add ChangeLog to it

Too large to review.  Please explain the 3rd party code you&apos;re adding and why you know it to be a compatible license to WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133259</commentid>
    <comment_count>6</comment_count>
      <attachid>32951</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-20 15:20:03 -0700</bug_when>
    <thetext>Comment on attachment 32951
Add platform/network WinCE specific files

Seems this is made obsolete by a later patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133277</commentid>
    <comment_count>7</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2009-07-20 15:51:57 -0700</bug_when>
    <thetext>From the RFC: ftp://ftp.rfc-editor.org/in-notes/rfc3492.txt

B. Disclaimer and license

   Regarding this entire document or any portion of it (including the
   pseudocode and C code), the author makes no guarantees and is not
   responsible for any damage resulting from its use.  The author grants
   irrevocable permission to anyone to use, modify, and distribute it in
   any way that does not diminish the rights of anyone else to use,
   modify, and distribute it, provided that redistributed derivative
   works do not contain misleading author or version information.
   Derivative works need not be licensed under similar terms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133575</commentid>
    <comment_count>8</comment_count>
      <attachid>33204</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-21 13:28:22 -0700</bug_when>
    <thetext>Created attachment 33204
Broken out ResourceHandleWince into own patch

Checked with latest cpplint and passes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133576</commentid>
    <comment_count>9</comment_count>
      <attachid>33205</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-21 13:29:19 -0700</bug_when>
    <thetext>Created attachment 33205
The rest of WebCore/platform/network/wince

Also checked with latest cpplint and passes.  The licensing info of third-party code is also clearly marked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133577</commentid>
    <comment_count>10</comment_count>
      <attachid>33206</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-21 13:31:23 -0700</bug_when>
    <thetext>Created attachment 33206
The rest of WebCore/platform/network/wince (v2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144074</commentid>
    <comment_count>11</comment_count>
      <attachid>33204</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-01 17:42:36 -0700</bug_when>
    <thetext>Comment on attachment 33204
Broken out ResourceHandleWince into own patch

One class per file, please.

+  static ResourceJobManager jm;

You should use the DEFINE_STATIC_LOCAL macro.

+ ConnectionManager() //, LPCWSTR userAgentTex)

Please don&apos;t included commented out code.

+ delete m_connMgr;
delete[] m_formDataString;

Why not OwnPtr and OwnArray?

+ ResourceHandle::setResponse

The fake URL parsing in this function is not cool.  Also, this primitive mime sniffing is very insecure.

I stopped reviewing this patch at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144075</commentid>
    <comment_count>12</comment_count>
      <attachid>33206</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-09-01 17:53:05 -0700</bug_when>
    <thetext>Comment on attachment 33206
The rest of WebCore/platform/network/wince (v2)

+ #ifndef AuthenticationChallenge_h

Missing space before this line.

+ #if PLATFORM(TORCHMOBILE)

Is TORCHMOBILE really a platform?  I would have expected WINCE here.

+ static ThreadData g_threadData = {0};

No real point in declaring this static inside the anonymous namespace...

+ } // namespace WebCore

Missing space before this line.

+ punycode.c

It&apos;s unclear to me whether this license is compatible with the BSD license because the BSD license does diminish someone&apos;s ability to distribute: they must include the license block.  I can&apos;t R+ this patch without input from a lawyer.

Also, this file isn&apos;t even close to WebKit style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144082</commentid>
    <comment_count>13</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2009-09-01 18:02:43 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 33206 [details])
&gt; + #ifndef AuthenticationChallenge_h
&gt; 
&gt; Missing space before this line.
&gt; 
&gt; + #if PLATFORM(TORCHMOBILE)
&gt; 
&gt; Is TORCHMOBILE really a platform?  I would have expected WINCE here.
&gt; 
The file is for WINCE only. I will change it to #if ENABLE(SINGLE_THREADED)

&gt; + static ThreadData g_threadData = {0};
&gt; 
&gt; No real point in declaring this static inside the anonymous namespace...

In case ThreadData conflicts with WTF::ThreadData.

&gt; 
&gt; + } // namespace WebCore
&gt; 
&gt; Missing space before this line.
&gt; 
&gt; + punycode.c
&gt; 
&gt; It&apos;s unclear to me whether this license is compatible with the BSD license
&gt; because the BSD license does diminish someone&apos;s ability to distribute: they
&gt; must include the license block.  I can&apos;t R+ this patch without input from a
&gt; lawyer.
&gt; 
&gt; Also, this file isn&apos;t even close to WebKit style.

k. will move the file out of there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255441</commentid>
    <comment_count>14</comment_count>
      <attachid>62436</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-07-23 09:52:01 -0700</bug_when>
    <thetext>Created attachment 62436
Complete reimplementation of ResourceHandleWin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255445</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-23 09:56:58 -0700</bug_when>
    <thetext>Attachment 62436 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/network/win/ResourceHandleWin.cpp:381:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/network/win/ResourceHandleWin.cpp:387:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/network/win/ResourceHandleWin.cpp:394:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/platform/network/win/ResourceHandleWin.cpp:416:  Use 0 instead of NULL.  [readability/null] [5]
WebCore/platform/network/win/ResourceHandleWin.cpp:442:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 5 in 4 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>255451</commentid>
    <comment_count>16</comment_count>
      <attachid>62440</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-07-23 10:09:31 -0700</bug_when>
    <thetext>Created attachment 62440
Complete reimplementation of ResourceHandleWin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255455</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-23 10:12:29 -0700</bug_when>
    <thetext>Attachment 62440 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/network/win/ResourceHandleWin.cpp:394:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 4 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>262060</commentid>
    <comment_count>18</comment_count>
      <attachid>62440</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-08-09 03:27:07 -0700</bug_when>
    <thetext>Comment on attachment 62440
Complete reimplementation of ResourceHandleWin

I opended master bug 43712 for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296736</commentid>
    <comment_count>19</comment_count>
      <attachid>71273</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-10-20 05:06:35 -0700</bug_when>
    <thetext>Created attachment 71273
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296738</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-20 05:10:32 -0700</bug_when>
    <thetext>Attachment 71273 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/network/win/ResourceError.h:33:  This { should be at the end of the previous line  [whitespace/braces] [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>296739</commentid>
    <comment_count>21</comment_count>
      <attachid>71275</attachid>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2010-10-20 05:15:28 -0700</bug_when>
    <thetext>Created attachment 71275
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298087</commentid>
    <comment_count>22</comment_count>
      <attachid>71275</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-22 11:22:48 -0700</bug_when>
    <thetext>Comment on attachment 71275
Patch

Clearing flags on attachment: 71275

Committed r70319: &lt;http://trac.webkit.org/changeset/70319&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298088</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-22 11:22:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32951</attachid>
            <date>2009-07-17 10:03:51 -0700</date>
            <delta_ts>2009-07-20 15:20:03 -0700</delta_ts>
            <desc>Add platform/network WinCE specific files</desc>
            <filename>27376.patch</filename>
            <type>text/plain</type>
            <size>72846</size>
            <attacher name="Adam Treat">manyoso</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDRhYjRhZS4uZTQ3ZjAwNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NiBAQAorMjAwOS0wNy0xNyAgQWRhbSBUcmVhdCAg
PGFkYW0udHJlYXRAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNzM3NgorICAgICAgICBBZGQgV2luQ0Ugc3BlY2lmaWMgZmlsZXMgZm9yIHBsYXRmb3Jt
L25ldHdvcmsuCisKKyAgICAgICAgV3JpdHRlbiBieSBZb25nIExpIDx5b25nLmxpQHRvcmNobW9i
aWxlLmNvbT4sCisgICAgICAgIEdlb3JnZSBTdGFpa29zIDxnZW9yZ2Uuc3RhaWtvc0B0b3JjaG1v
YmlsZS5jb20+LAorICAgICAgICBKb2UgTWFzb248am9lLm1hc29uQHRvcmNobW9iaWxlLmNvbT4K
KyAgICAgICAgYW5kIHNvbWUgdHJpdmlhbCBzdHlsZSBmaXhlcyBieSBBZGFtIFRyZWF0IDxhZGFt
LnRyZWF0QHRvcmNobW9iaWxlLmNvbT4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dp
bmNlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9xdC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oLgorICAgICAgICAoV2ViQ29y
ZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL05ldHdvcmtTdGF0ZU5vdGlmaWVyV2luY2Uu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpOZXR3
b3JrU3RhdGVOb3RpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RhdGVOb3RpZmll
cjo6fk5ldHdvcmtTdGF0ZU5vdGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdGF0
ZU5vdGlmaWVyOjpzZXRPbkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0YXRlTm90
aWZpZXI6OnVwZGF0ZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdGF0ZU5vdGlm
aWVyOjphZGRyZXNzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RhdGVOb3Rp
Zmllcjo6Y2FsbEFkZHJlc3NDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdGF0
ZU5vdGlmaWVyOjphZGRyQ2hhbmdlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29y
a1N0YXRlTm90aWZpZXI6OnJlZ2lzdGVyRm9yQWRkcmVzc0NoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaHJlYWREYXRhOjopOgorICAgICAgICAoV2ViQ29yZTo6TmV0d29ya1N0YXRlTm90aWZp
ZXI6OndhaXRUaHJlYWRQcm9jKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL1Jl
c291cmNlRXJyb3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUVycm9yOjpS
ZXNvdXJjZUVycm9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL1Jlc291cmNl
SGFuZGxlV2luY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldEFib3V0UGFnZUNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFVzZXJBZ2VudFN0cik6CisgICAgICAgIChX
ZWJDb3JlOjp1c2VyQWdlbnRTdHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0TWF4TnVtV2luSW5l
dEpvYnMpOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
Sm9iTWFuYWdlcjo6UmVzb3VyY2VIYW5kbGVXbmRQcm9jKToKKyAgICAgICAgKFdlYkNvcmU6Ompv
Yk1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6R2xvYmFsQ29ubmVjdGlvbk1hbmFnZXI6OnRy
YW5zZmVySm9iU3RhdHVzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6aHR0cFF1ZXJ5SW5m
byk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VI
YW5kbGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6flJlc291
cmNlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpmaW5pc2gpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmZhaWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2FjaGVGbGFnc0Zvcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0
UmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6Om9uSGFuZGxlQ3Jl
YXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6b25SZXF1ZXN0UmVkaXJl
Y3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6b25Db25uZWN0aW9uQ2xv
c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZXBvc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0V2luSW5ldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlOjpvblJlcXVlc3RDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6b3BlblVybCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRGaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpsb2FkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUhhbmRsZTo6bG9hZEFib3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlOjpmaWxlTG9hZFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpj
YW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldEhhc1JlY2VpdmVk
UmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6Omhhc1JlY2VpdmVk
UmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmJ1ZmZl
cmVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3VwcG9ydHNCdWZm
ZXJlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldERlZmVyc0xv
YWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldERvd25sb2FkQ2xp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjp3aWxsTG9hZEZyb21DYWNo
ZSk6CisgICAgICAgIChXZWJDb3JlOjpwcmVmZXRjaEROUyk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay93aW5jZS9SZXNvdXJjZVJlcXVlc3QuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3Q6OlJlc291cmNlUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3Q6Oik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpzZXRUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlUmVxdWVz
dCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZVJlc3BvbnNlLmg6
IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlc3BvbnNl
LmguCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjpSZXNvdXJjZVJlc3BvbnNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL3B1bnljb2RlLmM6IEFkZGVkLgor
ICAgICAgICAoZGVjb2RlX2RpZ2l0KToKKyAgICAgICAgKGVuY29kZV9kaWdpdCk6CisgICAgICAg
IChlbmNvZGVfYmFzaWMpOgorICAgICAgICAoYWRhcHQpOgorICAgICAgICAocHVueWNvZGVfZW5j
b2RlKToKKyAgICAgICAgKHB1bnljb2RlX2RlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay93aW5jZS9wdW55Y29kZS5oOiBBZGRlZC4KKwogMjAwOS0wNy0xNyAgTGFzemxvIEdvbWJv
cyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2lt
b24gSGF1c21hbm4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2Uv
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5j
ZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjc1M2FjNmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvd2luY2UvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaApAQCAtMCwwICsxLDQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisjaWZuZGVmIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlX2gKKyNkZWZpbmUgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VfaAorCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UgOiBwdWJsaWMgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlIHsKK3B1YmxpYzoKKyAgICBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpCisgICAgeworICAgIH0KKworICAgIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlLCBjb25z
dCBDcmVkZW50aWFsJiBwcm9wb3NlZENyZWRlbnRpYWwsIHVuc2lnbmVkIHByZXZpb3VzRmFpbHVy
ZUNvdW50LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgUmVzb3VyY2VF
cnJvciYgZXJyb3IpCisgICAgICAgIDogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlKHByb3Rl
Y3Rpb25TcGFjZSwgcHJvcG9zZWRDcmVkZW50aWFsLCBwcmV2aW91c0ZhaWx1cmVDb3VudCwgcmVz
cG9uc2UsIGVycm9yKQorICAgIHsKKyAgICB9Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL05ldHdvcmtTdGF0ZU5vdGlmaWVyV2lu
Y2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL05ldHdvcmtTdGF0ZU5vdGlm
aWVyV2luY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZWE2NWEK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvTmV0d29y
a1N0YXRlTm90aWZpZXJXaW5jZS5jcHAKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtT
dGF0ZU5vdGlmaWVyLmgiCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8aXBobHBh
cGkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0oVE9SQ0hNT0JJTEUp
CisKK05ldHdvcmtTdGF0ZU5vdGlmaWVyOjpOZXR3b3JrU3RhdGVOb3RpZmllcigpCisgICAgOiBt
X2lzT25MaW5lKGZhbHNlKQorICAgICwgbV9uZXR3b3JrU3RhdGVDaGFuZ2VkRnVuY3Rpb24oMCkK
K3sKK30KKworTmV0d29ya1N0YXRlTm90aWZpZXI6On5OZXR3b3JrU3RhdGVOb3RpZmllcigpCit7
Cit9CisKK3ZvaWQgTmV0d29ya1N0YXRlTm90aWZpZXI6OnNldE9uTGluZShib29sIGlzT25MaW5l
KQoreworICAgIGlmIChtX2lzT25MaW5lICE9IGlzT25MaW5lKSB7CisgICAgICAgIG1faXNPbkxp
bmUgPSBpc09uTGluZTsKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlQ2hhbmdlZEZ1bmN0aW9u
KQorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGVDaGFuZ2VkRnVuY3Rpb24oKTsKKyAgICB9Cit9
CisKKyNlbHNlCit2b2lkIE5ldHdvcmtTdGF0ZU5vdGlmaWVyOjp1cGRhdGVTdGF0ZSgpCit7Cisg
ICAgLy8gQXNzdW1lIHRoYXQgd2UncmUgb25saW5lIHVudGlsIHByb3ZlbiBvdGhlcndpc2UuCisg
ICAgbV9pc09uTGluZSA9IHRydWU7CisKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIERX
T1JEIHNpemUgPSAwOworCisgICAgaWYgKDo6R2V0QWRhcHRlcnNBZGRyZXNzZXMoQUZfVU5TUEVD
LCAwLCAwLCAwLCAmc2l6ZSkgIT0gRVJST1JfQlVGRkVSX09WRVJGTE9XKQorICAgICAgICByZXR1
cm47CisKKyAgICBidWZmZXIucmVzaXplKHNpemUpOworICAgIFBJUF9BREFQVEVSX0FERFJFU1NF
UyBhZGRyZXNzZXMgPSByZWludGVycHJldF9jYXN0PFBJUF9BREFQVEVSX0FERFJFU1NFUz4oYnVm
ZmVyLmRhdGEoKSk7CisKKyAgICBpZiAoOjpHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9VTlNQRUMs
IDAsIDAsIGFkZHJlc3NlcywgJnNpemUpICE9IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgLy8g
V2UgY291bGRuJ3QgZGV0ZXJtaW5lIHdoZXRoZXIgd2UncmUgb25saW5lIG9yIG5vdCwgc28gYXNz
dW1lIHRoYXQgd2UgYXJlLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yICg7IGFk
ZHJlc3NlczsgYWRkcmVzc2VzID0gYWRkcmVzc2VzLT5OZXh0KSB7CisgICAgICAgIGlmIChhZGRy
ZXNzZXMtPklmVHlwZSA9PSBNSUJfSUZfVFlQRV9MT09QQkFDSykKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGlmIChhZGRyZXNzZXMtPk9wZXJTdGF0dXMgIT0gSWZPcGVyU3RhdHVz
VXApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBXZSBmb3VuZCBhbiBpbnRl
cmZhY2UgdGhhdCB3YXMgdXAuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBk
aWRuJ3QgZmluZCBhbnkgdmFsaWQgaW50ZXJmYWNlcywgc28gd2UgbXVzdCBiZSBvZmZsaW5lLgor
ICAgIG1faXNPbkxpbmUgPSBmYWxzZTsKK30KKwordm9pZCBOZXR3b3JrU3RhdGVOb3RpZmllcjo6
YWRkcmVzc0NoYW5nZWQoKQoreworICAgIGJvb2wgb2xkT25MaW5lID0gbV9pc09uTGluZTsKKwor
ICAgIHVwZGF0ZVN0YXRlKCk7CisKKyAgICBpZiAobV9pc09uTGluZSA9PSBvbGRPbkxpbmUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChtX25ldHdvcmtTdGF0ZUNoYW5nZWRGdW5jdGlvbikK
KyAgICAgICAgbV9uZXR3b3JrU3RhdGVDaGFuZ2VkRnVuY3Rpb24oKTsKK30KKwordm9pZCBOZXR3
b3JrU3RhdGVOb3RpZmllcjo6Y2FsbEFkZHJlc3NDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCit7Cisg
ICAgc3RhdGljX2Nhc3Q8TmV0d29ya1N0YXRlTm90aWZpZXIqPihjb250ZXh0KS0+YWRkcmVzc0No
YW5nZWQoKTsKK30KKwordm9pZCBDQUxMQkFDSyBOZXR3b3JrU3RhdGVOb3RpZmllcjo6YWRkckNo
YW5nZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZWRPdXQpCit7CisgICAgY2Fs
bE9uTWFpblRocmVhZChjYWxsQWRkcmVzc0NoYW5nZWQsIGNvbnRleHQpOworfQorCit2b2lkIE5l
dHdvcmtTdGF0ZU5vdGlmaWVyOjpyZWdpc3RlckZvckFkZHJlc3NDaGFuZ2UoKQoreworICAgIDo6
Tm90aWZ5QWRkckNoYW5nZSgmbV9vdmVybGFwcGVkLmhFdmVudCwgMCk7Cit9CisKK25hbWVzcGFj
ZSB7CisKK3N0cnVjdCBUaHJlYWREYXRhIHsKKyAgICBOZXR3b3JrU3RhdGVOb3RpZmllciogbV9u
b3RpZmllcjsKKyAgICBIQU5ETEUgbV9ldmVudDsKK307CisKK3N0YXRpYyBUaHJlYWREYXRhIGdf
dGhyZWFkRGF0YSA9IHswfTsKK30KKworTmV0d29ya1N0YXRlTm90aWZpZXI6Ok5ldHdvcmtTdGF0
ZU5vdGlmaWVyKCkKKyAgICA6IG1faXNPbkxpbmUoZmFsc2UpCisgICAgLCBtX25ldHdvcmtTdGF0
ZUNoYW5nZWRGdW5jdGlvbigwKQoreworICAgIHVwZGF0ZVN0YXRlKCk7CisKKyAgICBtZW1zZXQo
Jm1fb3ZlcmxhcHBlZCwgMCwgc2l6ZW9mKG1fb3ZlcmxhcHBlZCkpOworCisgICAgbV9vdmVybGFw
cGVkLmhFdmVudCA9IDo6Q3JlYXRlRXZlbnQoMCwgZmFsc2UsIGZhbHNlLCAwKTsKKworICAgIGdf
dGhyZWFkRGF0YS5tX25vdGlmaWVyID0gdGhpczsKKyAgICBnX3RocmVhZERhdGEubV9ldmVudCA9
IG1fb3ZlcmxhcHBlZC5oRXZlbnQ7CisKKyAgICBtX3dhaXRIYW5kbGUgPSBDcmVhdGVUaHJlYWQo
TlVMTCwgNTEyLCB3YWl0VGhyZWFkUHJvYywgJmdfdGhyZWFkRGF0YSwgU1RBQ0tfU0laRV9QQVJB
TV9JU19BX1JFU0VSVkFUSU9OLCBOVUxMKTsKKyAgICByZWdpc3RlckZvckFkZHJlc3NDaGFuZ2Uo
KTsKK30KKworTmV0d29ya1N0YXRlTm90aWZpZXI6On5OZXR3b3JrU3RhdGVOb3RpZmllcigpCit7
CisgICAgVGVybWluYXRlVGhyZWFkKG1fd2FpdEhhbmRsZSwgMCk7CisgICAgQ2xvc2VIYW5kbGUo
bV93YWl0SGFuZGxlKTsKKyAgICBDbG9zZUhhbmRsZShtX292ZXJsYXBwZWQuaEV2ZW50KTsKK30K
KworRFdPUkQgV0lOQVBJIE5ldHdvcmtTdGF0ZU5vdGlmaWVyOjp3YWl0VGhyZWFkUHJvYyhMUFZP
SUQgbHBQYXJhbWV0ZXIpCit7CisgICAgVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA9IChUaHJlYWRE
YXRhKilscFBhcmFtZXRlcjsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgRFdPUkQgcmVzdWx0
ID0gV2FpdEZvclNpbmdsZU9iamVjdCh0aHJlYWREYXRhLT5tX2V2ZW50LCBJTkZJTklURSk7Cisg
ICAgICAgIGlmIChyZXN1bHQgPT0gV0FJVF9GQUlMRUQpCisgICAgICAgICAgICByZXR1cm4gLTE7
CisKKyAgICAgICAgYWRkckNoYW5nZUNhbGxiYWNrKHRocmVhZERhdGEtPm1fbm90aWZpZXIsIHJl
c3VsdCA9PSBXQUlUX1RJTUVPVVQgPyBUUlVFIDogRkFMU0UpOworICAgIH0KK30KKyNlbmRpZgor
Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3VyY2VF
cnJvci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlRXJyb3IuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDI3YzQ4Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlRXJyb3IuaApAQCAt
MCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJlc291cmNlRXJyb3Jf
aAorI2RlZmluZSBSZXNvdXJjZUVycm9yX2gKKworI2luY2x1ZGUgIlJlc291cmNlRXJyb3JCYXNl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVzb3VyY2VFcnJvciA6IHB1Ymxp
YyBSZXNvdXJjZUVycm9yQmFzZSB7CitwdWJsaWM6CisgICAgUmVzb3VyY2VFcnJvcigpCisgICAg
eworICAgIH0KKworICAgIFJlc291cmNlRXJyb3IoY29uc3QgU3RyaW5nJiBkb21haW4sIGludCBl
cnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZmFpbGluZ1VSTCwgY29uc3QgU3RyaW5nJiBsb2NhbGl6
ZWREZXNjcmlwdGlvbikKKyAgICAgICAgOiBSZXNvdXJjZUVycm9yQmFzZShkb21haW4sIGVycm9y
Q29kZSwgZmFpbGluZ1VSTCwgbG9jYWxpemVkRGVzY3JpcHRpb24pCisgICAgeworICAgIH0KK307
CisKK30KKworI2VuZGlmIC8vIFJlc291cmNlRXJyb3JfaF8KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZUhhbmRsZVdpbmNlLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZUhhbmRsZVdpbmNlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGU0YWIyCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlSGFuZGxlV2luY2UuY3BwCkBAIC0w
LDAgKzEsMTEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDA5IFRvcmNoIE1vYmlsZSBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50Lmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgorCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNp
bmNsdWRlICJIVFRQUGFyc2Vycy5oIgorCisjaW5jbHVkZSA8d2luaW5ldC5oPgorI2RlZmluZSBJ
TklUR1VJRAorI2luY2x1ZGUgPGNvbm5tZ3IuaD4KKyNpbmNsdWRlIDxjb25ubWdyX3Byb3h5Lmg+
CisKKyNpZm5kZWYgTkRFQlVHCisjZGVmaW5lIFJFU09VUkNFX0xPQURFUl9ERUJVRworI2VuZGlm
CisKK2NvbnN0IEdVSUQgSUlEX0Rlc3ROZXRJbnRlcm5ldCA9CisgICAgeyAweDQzNmVmMTQ0LCAw
eGI0ZmIsIDB4NDg2MywgeyAweGEwLCAweDQxLAorICAgIDB4OGYsIDB4OTAsIDB4NWEsIDB4NjIs
IDB4YzUsIDB4NzJ9IH07CisKKworY29uc3QgR1VJRCBJSURfQ29ublBydl9JUHJveHlFeHRlbnNp
b24gPQorICAgICAgeyAweGFmOTZiMGJkLCAweGE0ODEsIDB4NDgyYywgeyAweGEwLCAweDk0LCAw
eGE4LCAweDQ0LCAweDg3LAorICAgICAgICAweDY3LCAweGEwLCAweGMwIH0gfTsKKwordHlwZWRl
ZiB2b2lkICgqQnVmZmVyRGVsZXRlcikoY2hhciAqZGF0YSwgaW50IGxlbik7Cit0eXBlZGVmIGJv
b2wgKCpGZXRjaEFib3V0UGFnZSkoY29uc3Qgd2NoYXJfdCAqZmlsZU5hbWUsIGNoYXIgKipkYXRh
LCBpbnQgKmxlbiwgQnVmZmVyRGVsZXRlciogZGVsZXRlcik7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIFN0cmluZyBnX3VzZXJBZ2VudFN0cigiTW96aWxsYS81LjAgKFdpbmRvd3Mg
TlQ7IFU7IE1vYmlsZTsgZW4pIEFwcGxlV2ViS2l0LzQxOC45LjEgKEtIVE1MLCBsaWtlIEdlY2tv
KSBTYWZhcmkvNDE5LjMgV002IElyaXMvMS4wLjAiKTsKK3N0YXRpYyBpbnQgZ19tYXhOdW1XaW5J
bmV0Sm9icyA9IDQ7CitzdGF0aWMgRmV0Y2hBYm91dFBhZ2UgZmV0Y2hBYm91dFBhZ2UgPSAwOwor
dm9pZCBzZXRBYm91dFBhZ2VDYWxsYmFjayhGZXRjaEFib3V0UGFnZSBmYXApIHsgZmV0Y2hBYm91
dFBhZ2UgPSBmYXA7IH0KK3ZvaWQgc2V0VXNlckFnZW50U3RyKGNvbnN0IFN0cmluZyYgYWdlbnQp
IHsgZ191c2VyQWdlbnRTdHIgPSBhZ2VudDsgfQorU3RyaW5nIHVzZXJBZ2VudFN0cigpIHsgcmV0
dXJuIGdfdXNlckFnZW50U3RyOyB9Cit2b2lkIHNldE1heE51bVdpbkluZXRKb2JzKGludCBudW0p
IHsgZ19tYXhOdW1XaW5JbmV0Sm9icyA9IG51bTsgfQorCisvLyBNZXNzYWdlIHR5cGVzIGZvciBp
bnRlcm5hbCB1c2UgKGtlZXAgaW4gc3luYyB3aXRoIGtNZXNzYWdlSGFuZGxlcnMpCitlbnVtIHsK
KyAgICBoYW5kbGVDcmVhdGVkTWVzc2FnZSA9IFdNX1VTRVIsCisgICAgcmVxdWVzdFJlZGlyZWN0
ZWRNZXNzYWdlLAorICAgIHJlcXVlc3RDb21wbGV0ZU1lc3NhZ2UsCisgICAgY29ubmVjdGlvbkNs
b3NlZE1lc3NhZ2UKK307CisKK2NsYXNzIFJlc291cmNlSm9iTWFuYWdlcjogTm9uY29weWFibGUg
eworcHVibGljOgorICAgIEhXTkQgaHduZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmZXJKb2JX
aW5kb3dIYW5kbGU7IH0KKworICAgIHZvaWQgaW5pdGlhbGl6ZU9mZlNjcmVlblJlc291cmNlSGFu
ZGxlV2luZG93KCkKKyAgICB7CisgICAgICAgIGlmIChtX3RyYW5zZmVySm9iV2luZG93SGFuZGxl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN0YXRpYyBjb25zdCBMUENXU1RSIGtS
ZXNvdXJjZUhhbmRsZVdpbmRvd0NsYXNzTmFtZSA9IEwiUmVzb3VyY2VIYW5kbGVXaW5kb3dDbGFz
cyI7CisKKyAgICAgICAgV05EQ0xBU1Mgd2M7CisgICAgICAgIG1lbXNldCgmd2MsIDAsIHNpemVv
Zih3YykpOworCisgICAgICAgIHdjLmxwZm5XbmRQcm9jICAgID0gUmVzb3VyY2VIYW5kbGVXbmRQ
cm9jOworICAgICAgICB3Yy5oSW5zdGFuY2UgICAgICA9IFBhZ2U6Omluc3RhbmNlSGFuZGxlKCk7
CisgICAgICAgIHdjLmxwc3pDbGFzc05hbWUgID0ga1Jlc291cmNlSGFuZGxlV2luZG93Q2xhc3NO
YW1lOworICAgICAgICBSZWdpc3RlckNsYXNzKCZ3Yyk7CisKKyAgICAgICAgbV90cmFuc2Zlckpv
YldpbmRvd0hhbmRsZSA9IENyZWF0ZVdpbmRvdyhrUmVzb3VyY2VIYW5kbGVXaW5kb3dDbGFzc05h
bWUsIDAsIDAsIENXX1VTRURFRkFVTFQsIDAsIENXX1VTRURFRkFVTFQsIDAsCisgICAgICAgICAg
ICBIV05EX01FU1NBR0UsIDAsIFBhZ2U6Omluc3RhbmNlSGFuZGxlKCksIDApOworICAgIH0KKwor
ICAgIC8vIFJldHVybiBmYWxzZSBpZiBmYWlsZWQgdG8gb3BlbiBVUkwuCisgICAgYm9vbCBhZGRU
b091dHN0YW5kaW5nSm9icyhSZXNvdXJjZUhhbmRsZSogam9iLCBjb25zdCBTdHJpbmcmIHJlZmVy
cmVyKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2pvYklkTWFwKSB7CisgICAgICAgICAgICBtX2pv
YklkTWFwID0gbmV3IEhhc2hNYXA8aW50LCBSZXNvdXJjZUhhbmRsZSo+OworICAgICAgICAgICAg
bV9kZWZlcnJlZEpvYnMgPSBuZXcgSGFzaE1hcDxpbnQsIFN0cmluZz47CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBza2lwIG92ZXIgMAorICAgICAgICBpZiAoISsrbV90cmFuc2ZlckpvYklkKQor
ICAgICAgICAgICAgbV90cmFuc2ZlckpvYklkID0gMTsKKworICAgICAgICBtX2pvYklkTWFwLT5z
ZXQobV90cmFuc2ZlckpvYklkLCBqb2IpOworICAgICAgICBqb2ItPmQtPm1fam9iSWQgPSBtX3Ry
YW5zZmVySm9iSWQ7CisKKyAgICAgICAgaWYgKG1fam9iSWRNYXAtPnNpemUoKSAtIG1fZGVmZXJy
ZWRKb2JzLT5zaXplKCkgPiBnX21heE51bVdpbkluZXRKb2JzKSB7CisgICAgICAgICAgICBtX2Rl
ZmVycmVkSm9icy0+c2V0KG1fdHJhbnNmZXJKb2JJZCwgcmVmZXJyZXIpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gam9iLT5vcGVuVXJsKHJl
ZmVycmVyLCB0cnVlKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZUZyb21PdXRzdGFuZGluZ0pv
YnMoaW50IGpvYklkKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2pvYklkTWFwIHx8ICFtX2pvYklk
TWFwLT5jb250YWlucyhqb2JJZCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9q
b2JJZE1hcC0+cmVtb3ZlKGpvYklkKTsKKyAgICAgICAgbV9kZWZlcnJlZEpvYnMtPnJlbW92ZShq
b2JJZCk7CisKKyAgICAgICAgd2hpbGUgKG1fZGVmZXJyZWRKb2JzLT5zaXplKCkgJiYgbV9qb2JJ
ZE1hcC0+c2l6ZSgpIC0gbV9kZWZlcnJlZEpvYnMtPnNpemUoKSA8IGdfbWF4TnVtV2luSW5ldEpv
YnMpIHsKKyAgICAgICAgICAgIEhhc2hNYXA8aW50LCBTdHJpbmc+OjppdGVyYXRvciBiZWcgPSBt
X2RlZmVycmVkSm9icy0+YmVnaW4oKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG5ld0pvYklkID0g
YmVnLT5maXJzdDsKKyAgICAgICAgICAgIFN0cmluZyByZWZlcnJlciA9IGJlZy0+c2Vjb25kOwor
ICAgICAgICAgICAgbV9kZWZlcnJlZEpvYnMtPnJlbW92ZShiZWcpOworCisgICAgICAgICAgICBS
ZXNvdXJjZUhhbmRsZSogam9iID0gbV9qb2JJZE1hcC0+Z2V0KG5ld0pvYklkKTsKKyAgICAgICAg
ICAgIGlmICgham9iLT5vcGVuVXJsKHJlZmVycmVyLCBmYWxzZSkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBSZW1vdmUgaXQgYmVmb3JlIGRlbGV0aW5nIHRvIGF2b2lkIHJlZW50ZXJpbmcgdGhpcyBs
b29wCisgICAgICAgICAgICAgICAgbV9qb2JJZE1hcC0+cmVtb3ZlKG5ld0pvYklkKTsKKyAgICAg
ICAgICAgICAgICBqb2ItPmZhaWwoIkZhaWxlZCB0byBvcGVuIFVSTCIpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCByZW5ld0pvYklkKGludCBvbGRKb2JJZCkK
KyAgICB7CisgICAgICAgIGlmICghbV9qb2JJZE1hcCB8fCAhbV9qb2JJZE1hcC0+Y29udGFpbnMo
b2xkSm9iSWQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghKytt
X3RyYW5zZmVySm9iSWQpCisgICAgICAgICAgICBtX3RyYW5zZmVySm9iSWQgPSAxOworCisgICAg
ICAgIGlmIChtX2RlZmVycmVkSm9icy0+Y29udGFpbnMob2xkSm9iSWQpKSB7CisgICAgICAgICAg
ICBtX2RlZmVycmVkSm9icy0+c2V0KG1fdHJhbnNmZXJKb2JJZCwgbV9kZWZlcnJlZEpvYnMtPmdl
dChvbGRKb2JJZCkpOworICAgICAgICAgICAgbV9kZWZlcnJlZEpvYnMtPnJlbW92ZShvbGRKb2JJ
ZCk7CisgICAgICAgIH0KKworICAgICAgICBSZXNvdXJjZUhhbmRsZSogam9iID0gbV9qb2JJZE1h
cC0+Z2V0KG9sZEpvYklkKTsKKyAgICAgICAgam9iLT5kLT5tX2pvYklkID0gbV90cmFuc2Zlckpv
YklkOworCisgICAgICAgIG1fam9iSWRNYXAtPnNldChtX3RyYW5zZmVySm9iSWQsIGpvYik7Cisg
ICAgICAgIG1fam9iSWRNYXAtPnJlbW92ZShvbGRKb2JJZCk7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgUmVzb3VyY2VIYW5kbGUqIGxvb2t1cFJlc291cmNlSGFuZGxlKGlu
dCBqb2JJZCkKKyAgICB7CisgICAgICAgIGlmICghbV9qb2JJZE1hcCkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbV9qb2JJZE1hcC0+Z2V0KGpvYklkKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIFJlc291cmNlSm9iTWFuYWdlciogam9iTWFuYWdlcigpOwor
CisgICAgUmVzb3VyY2VKb2JNYW5hZ2VyKCkKKyAgICAgICAgOiBtX3RyYW5zZmVySm9iSWQoMCkK
KyAgICAgICAgLCBtX2pvYklkTWFwKDApCisgICAgICAgICwgbV90cmFuc2ZlckpvYldpbmRvd0hh
bmRsZSgwKQorICAgICAgICAsIG1fZGVmZXJyZWRKb2JzKDApCisgICAgeworICAgIH0KKworICAg
IH5SZXNvdXJjZUpvYk1hbmFnZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fdHJhbnNmZXJKb2JX
aW5kb3dIYW5kbGUpCisgICAgICAgICAgICBEZXN0cm95V2luZG93KG1fdHJhbnNmZXJKb2JXaW5k
b3dIYW5kbGUpOworCisgICAgICAgIGlmIChtX2pvYklkTWFwKSB7CisgICAgICAgICAgICB3aGls
ZSAoIW1fam9iSWRNYXAtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBkZWxldGUgbV9qb2JJ
ZE1hcC0+YmVnaW4oKS0+c2Vjb25kOworCisgICAgICAgICAgICBkZWxldGUgbV9qb2JJZE1hcDsK
KyAgICAgICAgICAgIGRlbGV0ZSBtX2RlZmVycmVkSm9iczsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHN0YXRpYyBMUkVTVUxUIENBTExCQUNLIFJlc291cmNlSGFuZGxlV25kUHJvYyhIV05EIGhX
bmQsIFVJTlQgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CisKKyAgICB1bnNpZ25l
ZCBtX3RyYW5zZmVySm9iSWQ7CisgICAgSGFzaE1hcDxpbnQsIFJlc291cmNlSGFuZGxlKj4qIG1f
am9iSWRNYXA7CisgICAgSFdORCBtX3RyYW5zZmVySm9iV2luZG93SGFuZGxlOworICAgIEhhc2hN
YXA8aW50LCBTdHJpbmc+KiBtX2RlZmVycmVkSm9iczsKK307CisKKworTFJFU1VMVCBDQUxMQkFD
SyBSZXNvdXJjZUpvYk1hbmFnZXI6OlJlc291cmNlSGFuZGxlV25kUHJvYyhIV05EIGhXbmQsIFVJ
TlQgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIHR5cGVkZWYgdm9pZCAoUmVz
b3VyY2VIYW5kbGU6OiAqUmVzb3VyY2VIYW5kbGVFdmVudEhhbmRsZXIpKExQQVJBTSk7CisgICAg
c3RhdGljIGNvbnN0IFJlc291cmNlSGFuZGxlRXZlbnRIYW5kbGVyIG1lc3NhZ2VIYW5kbGVyc1td
ID0geworICAgICAgICAmUmVzb3VyY2VIYW5kbGU6Om9uSGFuZGxlQ3JlYXRlZCwKKyAgICAgICAg
JlJlc291cmNlSGFuZGxlOjpvblJlcXVlc3RSZWRpcmVjdGVkLAorICAgICAgICAmUmVzb3VyY2VI
YW5kbGU6Om9uUmVxdWVzdENvbXBsZXRlLAorICAgICAgICAmUmVzb3VyY2VIYW5kbGU6Om9uQ29u
bmVjdGlvbkNsb3NlZCwKKyAgICB9OworCisgICAgaWYgKG1lc3NhZ2UgPj0gV01fVVNFUikgewor
ICAgICAgICBVSU5UIGluZGV4ID0gbWVzc2FnZSAtIFdNX1VTRVI7CisgICAgICAgIGlmIChpbmRl
eCA8IF9jb3VudG9mKG1lc3NhZ2VIYW5kbGVycykpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGpv
YklkID0gKHVuc2lnbmVkKSB3UGFyYW07CisgICAgICAgICAgICBSZXNvdXJjZUhhbmRsZSogam9i
ID0gam9iTWFuYWdlcigpLT5sb29rdXBSZXNvdXJjZUhhbmRsZShqb2JJZCk7CisgICAgICAgICAg
ICBpZiAoam9iKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGpvYi0+ZC0+bV9qb2JJZCA9PSBq
b2JJZCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGpvYi0+ZC0+bV90aHJlYWRJZCA9PSBHZXRD
dXJyZW50VGhyZWFkSWQoKSk7CisgICAgICAgICAgICAgICAgKGpvYi0+KihtZXNzYWdlSGFuZGxl
cnNbaW5kZXhdKSkobFBhcmFtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKGhXbmQsIG1lc3Nh
Z2UsIHdQYXJhbSwgbFBhcmFtKTsKK30KKworCitzdGF0aWMgUmVzb3VyY2VKb2JNYW5hZ2VyKiBq
b2JNYW5hZ2VyKCkKK3sKKyAgICBzdGF0aWMgUmVzb3VyY2VKb2JNYW5hZ2VyIGptOworICAgIHJl
dHVybiAmam07Cit9CisKK2NsYXNzIEdsb2JhbENvbm5lY3Rpb25NYW5hZ2VyOiBOb25jb3B5YWJs
ZSB7CitwdWJsaWM6CisgICAgR2xvYmFsQ29ubmVjdGlvbk1hbmFnZXIoKQorICAgIHsKKyAgICAg
ICAgbV9oQ29ubmVjdGlvbiA9IE5VTEw7CisgICAgICAgIG1faEludGVybmV0ID0gTlVMTDsKKyAg
ICAgICAgbV9wc3pQcm94eSA9IE5VTEw7CisgICAgICAgIG1fZHdBY2Nlc3NUeXBlID0gMDsKKyAg
ICAgICAgbV9ociA9IFNfT0s7CisKKyAgICAgICAgY29ubmVjdCgpOworICAgIH0KKyAgICB+R2xv
YmFsQ29ubmVjdGlvbk1hbmFnZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1faEludGVybmV0KQor
ICAgICAgICAgICAgSW50ZXJuZXRDbG9zZUhhbmRsZShtX2hJbnRlcm5ldCk7CisgICAgICAgIGlm
IChtX2hDb25uZWN0aW9uKQorICAgICAgICAgICAgQ29ubk1nclJlbGVhc2VDb25uZWN0aW9uKG1f
aENvbm5lY3Rpb24sIDEpOworICAgIH0KKworICAgIHZvaWQgZXN0YWJsaXNoQ29ubmVjdGlvbigp
CisgICAgeworICAgICAgICBpZiAoIW1faENvbm5lY3Rpb24pIHsKKyAgICAgICAgICAgIG1faElu
dGVybmV0ID0gTlVMTDsKKworICAgICAgICAgICAgQ09OTk1HUl9DT05ORUNUSU9OSU5GTyBjaSA9
IHswfTsKKworICAgICAgICAgICAgY2kuY2JTaXplID0gc2l6ZW9mKENPTk5NR1JfQ09OTkVDVElP
TklORk8pOworICAgICAgICAgICAgY2kuZHdQYXJhbXMgPSBDT05OTUdSX1BBUkFNX0dVSURERVNU
TkVUOworICAgICAgICAgICAgY2kuZHdGbGFncyA9IENPTk5NR1JfRkxBR19QUk9YWV9IVFRQOwor
ICAgICAgICAgICAgY2kuZHdQcmlvcml0eSA9IENPTk5NR1JfUFJJT1JJVFlfVVNFUklOVEVSQUNU
SVZFOworICAgICAgICAgICAgY2kuYkV4Y2x1c2l2ZSA9IFRSVUU7CisKKyAgICAgICAgICAgIERX
T1JEIGR3SW5kZXggPSAwOworICAgICAgICAgICAgaWYgKFNfT0sgIT0gQ29ubk1nck1hcFVSTChM
Imh0dHA6Ly93d3cuaXJpc2Jyb3dzZXIuY29tIiwgJihjaS5ndWlkRGVzdE5ldCksICZkd0luZGV4
KSkKKyAgICAgICAgICAgICAgICBjaS5ndWlkRGVzdE5ldCA9IElJRF9EZXN0TmV0SW50ZXJuZXQ7
CisKKyAgICAgICAgICAgIERXT1JEIGR3U3RhdHVzID0gMDsKKyAgICAgICAgICAgIGlmIChTX09L
ICE9IENvbm5NZ3JFc3RhYmxpc2hDb25uZWN0aW9uU3luYygmY2ksICZtX2hDb25uZWN0aW9uLCAy
NTAwMCwgJmR3U3RhdHVzKSkKKyAgICAgICAgICAgICAgICBtX2hDb25uZWN0aW9uID0gTlVMTDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgb3BlbkludGVybmV0KCkKKyAgICB7CisgICAg
ICAgIGlmIChtX2hDb25uZWN0aW9uICYmICFtX2hJbnRlcm5ldCkgeworICAgICAgICAgICAgUFJP
WFlfQ09ORklHIHBjUHJveHkgPSB7MH07CisgICAgICAgICAgICBpZiAoU19PSyA9PSBDb25uTWdy
UHJvdmlkZXJNZXNzYWdlKG1faENvbm5lY3Rpb24sICZJSURfQ29ublBydl9JUHJveHlFeHRlbnNp
b24sIE5VTEwsIDAsIDAsIChQQllURSkmcGNQcm94eSwgc2l6ZW9mKHBjUHJveHkpKSkgeworICAg
ICAgICAgICAgICAgIG1fZHdBY2Nlc3NUeXBlID0gSU5URVJORVRfT1BFTl9UWVBFX1BST1hZOwor
ICAgICAgICAgICAgICAgIG1fcHN6UHJveHkgPSAoTFBUU1RSKSBMb2NhbEFsbG9jKExQVFIsIF9j
b3VudG9mKHBjUHJveHkuc3pQcm94eVNlcnZlcikpOworICAgICAgICAgICAgICAgIC8vIE1ha2Ug
c3VyZSBtX3BzelByb3h5IHdhcyBhbGxvY2F0ZWQuCisKKyAgICAgICAgICAgICAgICBtX2hyID0g
U3RyaW5nQ2NoQ29weU4obV9wc3pQcm94eSwgX2NvdW50b2YocGNQcm94eS5zelByb3h5U2VydmVy
KSwKKyAgICAgICAgICAgICAgICAgICAgcGNQcm94eS5zelByb3h5U2VydmVyLCBfY291bnRvZihw
Y1Byb3h5LnN6UHJveHlTZXJ2ZXIpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgbV9kd0FjY2Vzc1R5cGUgPSBJTlRFUk5FVF9PUEVOX1RZUEVfRElSRUNUOyAvLyBJTlRF
Uk5FVF9PUEVOX1RZUEVfUFJFQ09ORklHOworICAgICAgICAgICAgICAgIG1fcHN6UHJveHkgPSBO
VUxMOworCisgICAgICAgICAgICAgICAgbV9ociA9IFNfT0s7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIG1faEludGVybmV0ID0gSW50ZXJuZXRPcGVuCisgICAgICAgICAgICAgICAgKGdf
dXNlckFnZW50U3RyLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkKKyAgICAgICAgICAg
ICAgICAsIG1fZHdBY2Nlc3NUeXBlCisgICAgICAgICAgICAgICAgLCBtX3BzelByb3h5CisgICAg
ICAgICAgICAgICAgLCBOVUxMCisgICAgICAgICAgICAgICAgLCBJTlRFUk5FVF9GTEFHX0FTWU5D
KTsKKworICAgICAgICAgICAgaWYgKG1faEludGVybmV0KSB7CisgICAgICAgICAgICAgICAgam9i
TWFuYWdlcigpLT5pbml0aWFsaXplT2ZmU2NyZWVuUmVzb3VyY2VIYW5kbGVXaW5kb3coKTsKKwor
ICAgICAgICAgICAgICAgIElOVEVSTkVUX1NUQVRVU19DQUxMQkFDSyBjYWxsYmFja0hhbmRsZSA9
CisgICAgICAgICAgICAgICAgICAgIEludGVybmV0U2V0U3RhdHVzQ2FsbGJhY2sobV9oSW50ZXJu
ZXQsIHRyYW5zZmVySm9iU3RhdHVzQ2FsbGJhY2spOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIHZvaWQgY29ubmVjdCgpCisgICAgeworICAgICAgICBlc3RhYmxpc2hDb25u
ZWN0aW9uKCk7CisKKyAgICAgICAgb3BlbkludGVybmV0KCk7CisgICAgfQorCisgICAgTFBXU1RS
ICAgICAgICAgIG1fcHN6UHJveHk7CisgICAgRFdPUkQgICAgICAgICAgIG1fZHdBY2Nlc3NUeXBl
OworICAgIEhBTkRMRSAgICAgICAgICBtX2hDb25uZWN0aW9uOworICAgIEhJTlRFUk5FVCAgICAg
ICBtX2hJbnRlcm5ldDsKKyAgICBIUkVTVUxUICAgICAgICAgbV9ocjsKKworcHJpdmF0ZToKKyAg
ICBzdGF0aWMgdm9pZCBfX3N0ZGNhbGwgdHJhbnNmZXJKb2JTdGF0dXNDYWxsYmFjayhISU5URVJO
RVQgaW50ZXJuZXRIYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRFdPUkRfUFRSIGpvYklkLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGludGVybmV0U3RhdHVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQVk9JRCBzdGF0
dXNJbmZvcm1hdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEV09SRCBzdGF0dXNJbmZvcm1hdGlvbkxlbmd0aCk7CisKK307CisKK3ZvaWQg
X19zdGRjYWxsIEdsb2JhbENvbm5lY3Rpb25NYW5hZ2VyOjp0cmFuc2ZlckpvYlN0YXR1c0NhbGxi
YWNrKEhJTlRFUk5FVCBpbnRlcm5ldEhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERXT1JEX1BUUiBqb2JJZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGludGVybmV0U3RhdHVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBWT0lEIHN0YXR1
c0luZm9ybWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRFdPUkQgc3RhdHVzSW5mb3JtYXRpb25MZW5ndGgpIHsKKyNpZmRlZiBSRVNPVVJDRV9M
T0FERVJfREVCVUcKKyAgICBwcmludGYoInN0YXR1cy1jYWxsYmFjazogc3RhdHVzPSV1LCBqb2I9
JXBcbiIsCisgICAgICAgICAgICAgIGludGVybmV0U3RhdHVzLCBqb2JJZCk7CisjZW5kaWYKKwor
ICAgIFVJTlQgbXNnOworICAgIExQQVJBTSBsUGFyYW07CisKKyAgICBzd2l0Y2ggKGludGVybmV0
U3RhdHVzKSB7CisgICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfSEFORExFX0NSRUFURUQ6CisgICAg
ICAgIC8vIHRlbGwgdGhlIG1haW4gdGhyZWFkIGFib3V0IHRoZSBuZXdseSBjcmVhdGVkIGhhbmRs
ZQorICAgICAgICBtc2cgPSBoYW5kbGVDcmVhdGVkTWVzc2FnZTsKKyAgICAgICAgbFBhcmFtID0g
KExQQVJBTSkgTFBJTlRFUk5FVF9BU1lOQ19SRVNVTFQoc3RhdHVzSW5mb3JtYXRpb24pLT5kd1Jl
c3VsdDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfUkVRVUVTVF9D
T01QTEVURToKKyNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyAgICAgICAgcHJpbnRmKCJy
ZXF1ZXN0LWNvbXBsZXRlOiByZXN1bHQ9JXAsIGVycm9yPSV1XG4iLAorICAgICAgICAgICAgTFBJ
TlRFUk5FVF9BU1lOQ19SRVNVTFQoc3RhdHVzSW5mb3JtYXRpb24pLT5kd1Jlc3VsdCwKKyAgICAg
ICAgICAgIExQSU5URVJORVRfQVNZTkNfUkVTVUxUKHN0YXR1c0luZm9ybWF0aW9uKS0+ZHdFcnJv
cik7CisjZW5kaWYKKyAgICAgICAgLy8gdGVsbCB0aGUgbWFpbiB0aHJlYWQgdGhhdCB0aGUgcmVx
dWVzdCBpcyBkb25lCisgICAgICAgIG1zZyA9IHJlcXVlc3RDb21wbGV0ZU1lc3NhZ2U7CisgICAg
ICAgIGxQYXJhbSA9IChMUEFSQU0pTFBJTlRFUk5FVF9BU1lOQ19SRVNVTFQoc3RhdHVzSW5mb3Jt
YXRpb24pLT5kd0Vycm9yOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElOVEVSTkVUX1NUQVRV
U19SRURJUkVDVDoKKyAgICAgICAgLy8gdGVsbCB0aGUgbWFpbiB0aHJlYWQgdG8gb2JzZXJ2ZSB0
aGlzIHJlZGlyZWN0IChGSVhNRTogd2UgcHJvYmFibHkKKyAgICAgICAgLy8gbmVlZCB0byBibG9j
ayB0aGUgcmVkaXJlY3QgYXQgdGhpcyBwb2ludCBzbyB0aGUgYXBwbGljYXRpb24gY2FuCisgICAg
ICAgIC8vIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0KQorICAg
ICAgICBtc2cgPSByZXF1ZXN0UmVkaXJlY3RlZE1lc3NhZ2U7CisgICAgICAgIGxQYXJhbSA9IChM
UEFSQU0pbmV3IFN0cmluZygoVUNoYXIqKXN0YXR1c0luZm9ybWF0aW9uLCBzdGF0dXNJbmZvcm1h
dGlvbkxlbmd0aCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX0NP
Tk5FQ1RJT05fQ0xPU0VEOgorICAgICAgICBtc2cgPSBjb25uZWN0aW9uQ2xvc2VkTWVzc2FnZTsK
KyAgICAgICAgbFBhcmFtID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTlRFUk5FVF9T
VEFUVVNfVVNFUl9JTlBVVF9SRVFVSVJFRDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVU0VS
IElOUFVUIFJFUVVJUkVEXG4iKTsKKyAgICAgICAgLy8gRklYTUU6IHByb21wdCB0aGUgdXNlciBp
ZiBuZWNlc3NhcnkKKyAgICAgICAgUmVzdW1lU3VzcGVuZGVkRG93bmxvYWQoaW50ZXJuZXRIYW5k
bGUsIDApOworICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX1NUQVRFX0NIQU5HRToKKyAgICAgICAg
Ly8gbWF5IG5lZWQgdG8gY2FsbCBSZXN1bWVTdXNwZW5kZWREb3dubG9hZCBoZXJlIGFzIHdlbGwK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUG9zdE1lc3NhZ2Uo
am9iTWFuYWdlcigpLT5od25kKCksIG1zZywgKFdQQVJBTSkgam9iSWQsIGxQYXJhbSk7Cit9CisK
K2NsYXNzIENvbm5lY3Rpb25NYW5hZ2VyOiBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgQ29u
bmVjdGlvbk1hbmFnZXIoKSAvLywgTFBDV1NUUiB1c2VyQWdlbnRUZXgpCisgICAgICAgIDogbV9o
VXJsKE5VTEwpCisgICAgICAgICwgbV9oU2VjVXJsKE5VTEwpCisgICAgeworICAgICAgICBtX2Nv
bm5lY3Rpb24uY29ubmVjdCgpOworICAgIH0KKworICAgIH5Db25uZWN0aW9uTWFuYWdlcigpCisg
ICAgeworICAgICAgICBpZiAobV9oU2VjVXJsKQorICAgICAgICAgICAgSW50ZXJuZXRDbG9zZUhh
bmRsZShtX2hTZWNVcmwpOworICAgICAgICBpZiAobV9oVXJsKQorICAgICAgICAgICAgSW50ZXJu
ZXRDbG9zZUhhbmRsZShtX2hVcmwpOworICAgIH0KKworICAgIHN0YXRpYyBISU5URVJORVQgaW50
ZXJuZXRIYW5kbGUgKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLm1faEludGVybmV0OyB9CisgICAg
SElOVEVSTkVUIHVybEhhbmRsZSAoKSBjb25zdCB7IHJldHVybiBtX2hVcmw7IH0KKyAgICBISU5U
RVJORVQgc2Vjb25kYXJ5VXJsSGFuZGxlICgpIGNvbnN0IHsgcmV0dXJuIG1faFNlY1VybDsgfQor
CisgICAgdm9pZCBjbG9zZVVybEhhbmRsZSgpCisgICAgeworICAgICAgICBpZiAobV9oU2VjVXJs
KSB7CisgICAgICAgICAgICBJbnRlcm5ldENsb3NlSGFuZGxlKG1faFNlY1VybCk7CisgICAgICAg
ICAgICBtX2hTZWNVcmwgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChtX2hVcmwpIHsK
KyAgICAgICAgICAgIEludGVybmV0Q2xvc2VIYW5kbGUobV9oVXJsKTsKKyAgICAgICAgICAgIG1f
aFVybCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHNldFVybEhhbmRsZShI
SU5URVJORVQgdXJsKSB7IG1faFVybCA9IHVybDsgfQorICAgIHZvaWQgc2V0U2Vjb25kYXJ5VXJs
SGFuZGxlKEhJTlRFUk5FVCB1cmwpIHsgbV9oU2VjVXJsID0gdXJsOyB9CisKK3ByaXZhdGU6CisK
KyAgICBzdGF0aWMgR2xvYmFsQ29ubmVjdGlvbk1hbmFnZXIgbV9jb25uZWN0aW9uOworICAgIEhJ
TlRFUk5FVCAgICBtX2hVcmw7CisgICAgSElOVEVSTkVUICAgIG1faFNlY1VybDsKK307CisKK0ds
b2JhbENvbm5lY3Rpb25NYW5hZ2VyIENvbm5lY3Rpb25NYW5hZ2VyOjptX2Nvbm5lY3Rpb247CisK
K3N0YXRpYyBTdHJpbmcgaHR0cFF1ZXJ5SW5mbyhISU5URVJORVQgaFJlcXVlc3QsIERXT1JEIGR3
SW5mb0xldmVsKQoreworICAgIERXT1JEIGJ1ZmZlckxlbmd0aCA9IDA7CisgICAgaWYgKEh0dHBR
dWVyeUluZm8oaFJlcXVlc3QsIGR3SW5mb0xldmVsLCAwLCAmYnVmZmVyTGVuZ3RoLCAwKQorICAg
ICAgICB8fCBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSICE9IEdldExhc3RFcnJvcigpCisgICAg
ICAgIHx8ICFidWZmZXJMZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFVD
aGFyKiBidWZmZXIgPSBuZXcgVUNoYXJbKGJ1ZmZlckxlbmd0aCArIDEpIC8gMl07CisgICAgaWYg
KCFidWZmZXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmICghSHR0cFF1ZXJ5
SW5mbyhoUmVxdWVzdCwgZHdJbmZvTGV2ZWwsIGJ1ZmZlciwgJmJ1ZmZlckxlbmd0aCwgMCkpIHsK
KyAgICAgICAgZGVsZXRlW10gYnVmZmVyOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAg
fQorCisgICAgU3RyaW5nIHJ0bihidWZmZXIsIChidWZmZXJMZW5ndGggKyAxKSAvIDIpOworICAg
IGRlbGV0ZVtdIGJ1ZmZlcjsKKworICAgIHJldHVybiBydG47Cit9CisKK1Jlc291cmNlSGFuZGxl
SW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKK3sKKyAgICBpZiAobV9maWxlSGFu
ZGxlICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICBDbG9zZUhhbmRsZShtX2ZpbGVI
YW5kbGUpOworCisgICAgZGVsZXRlIG1fY29ubk1ncjsKKyAgICBkZWxldGVbXSBtX2Zvcm1EYXRh
U3RyaW5nOworfQorCitSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKCkKK3sKKyAgICAv
LyBDbG9zZSB0aGUgaGFuZGxlcyBiZWZvcmUgcmVtb3ZpbmcgdGhlIGpvYgorICAgIGRlbGV0ZSBk
LT5tX2Nvbm5NZ3I7CisgICAgZC0+bV9jb25uTWdyID0gMDsKKworICAgIGlmIChkLT5tX2pvYklk
KQorICAgICAgICBqb2JNYW5hZ2VyKCktPnJlbW92ZUZyb21PdXRzdGFuZGluZ0pvYnMoZC0+bV9q
b2JJZCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmZpbmlzaCgpCit7CisgICAgaWYgKGNs
aWVudCgpKQorICAgICAgICBjbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKKyAgICBk
ZWxldGUgdGhpczsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6ZmFpbChjb25zdCBTdHJpbmcm
IGVycm9yKQoreworICAgIGlmIChjbGllbnQoKSkgeworICAgICAgICBSZXNvdXJjZVJlc3BvbnNl
IHJlc3BvbnNlOworICAgICAgICByZXNwb25zZS5zZXRVcmwocmVxdWVzdCgpLnVybCgpKTsKKyAg
ICAgICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUoInRleHQvaHRtbCIpOworICAgICAgICByZXNwb25z
ZS5zZXRUZXh0RW5jb2RpbmdOYW1lKCJVVEYtMTYiKTsKKyAgICAgICAgU3RyaW5nIGNvbnRlbnRF
cnJvcihMIjxodG1sPjxib2R5IHdpZHRoPVwiNTBcIj4iKTsKKyAgICAgICAgY29udGVudEVycm9y
ICs9IGVycm9yOworICAgICAgICBjb250ZW50RXJyb3IgKz0gU3RyaW5nKEwiPC9ib2R5PjwvaHRt
bD4iKTsKKyAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCByZXNwb25z
ZSk7CisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0aGlzLCAoY29uc3QgY2hhciop
Y29udGVudEVycm9yLmNoYXJhY3RlcnMoKSwgY29udGVudEVycm9yLmxlbmd0aCgpICogMiwgMCk7
CisgICAgICAgIGNsaWVudCgpLT5kaWRGYWlsKHRoaXMsIFJlc291cmNlRXJyb3IoIkVycm9yIiwg
LTEsIHJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKSwgZXJyb3IpKTsKKyAgICB9CisgICAgZGVsZXRl
IHRoaXM7Cit9CisKK3N0YXRpYyBpbnQgY2FjaGVGbGFnc0Zvcihjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlc291cmNlUmVxdWVzdCkKK3sKKyAgICBpbnQgZmxhZ3MgPSAwOworICAgIHN3aXRjaCAo
cmVzb3VyY2VSZXF1ZXN0LmNhY2hlUG9saWN5KCkpIHsKKyAgICAgICAgY2FzZSBSZWxvYWRJZ25v
cmluZ0NhY2hlRGF0YToKKyAgICAgICAgICAgIGZsYWdzIHw9IElOVEVSTkVUX0ZMQUdfUkVMT0FE
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmV0dXJuQ2FjaGVEYXRhRWxzZUxv
YWQ6CisgICAgICAgICAgICBmbGFncyB8PSBJTlRFUk5FVF9GTEFHX0NBQ0hFX0lGX05FVF9GQUlM
OworICAgICAgICAgICAgZmxhZ3MgfD0gSU5URVJORVRfRkxBR19GV0RfQkFDSzsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFJldHVybkNhY2hlRGF0YURvbnRMb2FkOgorICAgICAg
ICAgICAgZmxhZ3MgfD0gSU5URVJORVRfRkxBR19GUk9NX0NBQ0hFOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVXNlUHJvdG9jb2xDYWNoZVBvbGljeToKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGZsYWdzIHw9IElOVEVSTkVUX0ZMQUdfQ0FDSEVfSUZfTkVUX0ZBSUw7
CisgICAgICAgICAgICBmbGFncyB8PSBJTlRFUk5FVF9GTEFHX0hZUEVSTElOSzsKKyAgICAgICAg
ICAgIGZsYWdzIHw9IElOVEVSTkVUX0ZMQUdfUkVTWU5DSFJPTklaRTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBmbGFnczsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRs
ZTo6c2V0UmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmVzcG9u
c2Uuc2V0VXJsKHJlcXVlc3QoKS51cmwoKSk7CisgICAgaWYgKGQtPm1fY29ubk1ncikgeworICAg
ICAgICBISU5URVJORVQgaGFuZGxlID0gKHJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1Qi
KSA/IGQtPm1fY29ubk1nci0+c2Vjb25kYXJ5VXJsSGFuZGxlKCkgOiBkLT5tX2Nvbm5NZ3ItPnVy
bEhhbmRsZSgpOworICAgICAgICBpZiAoaGFuZGxlKSB7CisgICAgICAgICAgICBEV09SRCBidWZm
ZXJMZW5ndGggPSBzaXplb2YgRFdPUkQ7CisKKyAgICAgICAgICAgIERXT1JEIGNvbnRlbnRMZW5n
dGg7CisgICAgICAgICAgICBpZiAoSHR0cFF1ZXJ5SW5mbyhoYW5kbGUsIEhUVFBfUVVFUllfQ09O
VEVOVF9MRU5HVEgsICZjb250ZW50TGVuZ3RoLCAmYnVmZmVyTGVuZ3RoLCAwKSkKKyAgICAgICAg
ICAgICAgICByZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoc3RhdGljX2Nhc3Q8bG9u
ZyBsb25nIGludD4oY29udGVudExlbmd0aCkpOworCisgICAgICAgICAgICBEV09SRCBzdGF0dXND
b2RlID0gMDsKKyAgICAgICAgICAgIGlmIChIdHRwUXVlcnlJbmZvKGhhbmRsZSwgSFRUUF9RVUVS
WV9TVEFUVVNfQ09ERXxIVFRQX1FVRVJZX0ZMQUdfTlVNQkVSLCAmc3RhdHVzQ29kZSwgJmJ1ZmZl
ckxlbmd0aCwgMCkpCisgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUo
c3RhdHVzQ29kZSk7CisKKyAgICAgICAgICAgIFN0cmluZyBjb250ZW50VHlwZSA9IGh0dHBRdWVy
eUluZm8oaGFuZGxlLCBIVFRQX1FVRVJZX0NPTlRFTlRfVFlQRSk7CisgICAgICAgICAgICBpZiAo
IWNvbnRlbnRUeXBlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldE1p
bWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpKTsKKyAgICAg
ICAgICAgICAgICByZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJv
bU1lZGlhVHlwZShjb250ZW50VHlwZSkpOworICAgICAgICAgICAgICAgIFN0cmluZyBkaXNwb3Np
dGlvbiA9IGh0dHBRdWVyeUluZm8oaGFuZGxlLCBIVFRQX1FVRVJZX0NPTlRFTlRfRElTUE9TSVRJ
T04pOworICAgICAgICAgICAgICAgIGlmICghZGlzcG9zaXRpb24uaXNFbXB0eSgpKQorICAgICAg
ICAgICAgICAgICAgICByZXNwb25zZS5zZXRTdWdnZXN0ZWRGaWxlbmFtZShmaWxlbmFtZUZyb21I
VFRQQ29udGVudERpc3Bvc2l0aW9uKGRpc3Bvc2l0aW9uKSk7CisKKyAgICAgICAgICAgICAgICAv
LyBnb3QgTUlNRSB0eXBlCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nIHBhdGg7CisgICAgaWYgKHJlcXVlc3QoKS51
cmwoKS5pc0xvY2FsRmlsZSgpKQorICAgICAgICBwYXRoID0gcmVxdWVzdCgpLnVybCgpLnBhdGgo
KTsKKyAgICBlbHNlCisgICAgICAgIHBhdGggPSByZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCk7CisK
KyAgICBpbnQgcXVlcnlQb3MgPSBwYXRoLmZpbmQoJz8nKTsKKyAgICBpZiAocXVlcnlQb3MgPj0g
MCkKKyAgICAgICAgcGF0aC5yZW1vdmUocXVlcnlQb3MpOworCisgICAgaW50IGRvdFBvcyA9IHBh
dGgucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICBpbnQgc2xhc2hQb3MgPSBwYXRoLnJldmVyc2VGaW5k
KCcvJyk7CisKKyAgICBpZiAoZG90UG9zIDwgc2xhc2hQb3MgfHwgZG90UG9zIDwgMCkKKyAgICAg
ICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUoInRleHQvaHRtbCIpOworICAgIGVsc2UgeworICAgICAg
ICBTdHJpbmcgZXh0ID0gcGF0aC5zdWJzdHJpbmcoZG90UG9zICsgMSk7CisgICAgICAgIHJlc3Bv
bnNlLnNldE1pbWVUeXBlKE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9u
KGV4dCkpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6b25IYW5kbGVDcmVhdGVk
KExQQVJBTSBsUGFyYW0pCit7CisgICAgaWYgKCFjbGllbnQoKSkgeworICAgICAgICBkZWxldGUg
dGhpczsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZC0+bV9jb25uTWdyLT51
cmxIYW5kbGUoKSkgeworICAgICAgICBkLT5tX2Nvbm5NZ3ItPnNldFVybEhhbmRsZSgoSElOVEVS
TkVUKWxQYXJhbSk7CisKKyAgICAgICAgaWYgKHJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBP
U1QiKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVG9vIGxhdGUgdG8gc2V0IHJlZmVycmVyIHBy
b3Blcmx5LgorICAgICAgICAgICAgU3RyaW5nIHVybFN0ciA9IHJlcXVlc3QoKS51cmwoKS5wYXRo
KCk7CisgICAgICAgICAgICBpbnQgZnJhZ21lbnRJbmRleCA9IHVybFN0ci5maW5kKCcjJyk7Cisg
ICAgICAgICAgICBpZiAoZnJhZ21lbnRJbmRleCAhPSAtMSkKKyAgICAgICAgICAgICAgICB1cmxT
dHIgPSB1cmxTdHIubGVmdChmcmFnbWVudEluZGV4KTsKKyAgICAgICAgICAgIHN0YXRpYyBMUENX
U1RSIGFjY2VwdFsyXSA9IHtMIiovKiIsIE5VTEx9OworICAgICAgICAgICAgaW50IHNlY3VyZUZs
YWcgPSByZXF1ZXN0KCkudXJsKCkucHJvdG9jb2woKS5sb3dlcigpID09ICJodHRwcyIgPyBJTlRF
Uk5FVF9GTEFHX1NFQ1VSRSA6IDA7CisgICAgICAgICAgICBISU5URVJORVQgdXJsSGFuZGxlID0g
SHR0cE9wZW5SZXF1ZXN0KGQtPm1fY29ubk1nci0+dXJsSGFuZGxlKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMIlBPU1QiLCB1cmxTdHIuY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgMCwgYWNjZXB0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJORVRfRkxBR19LRUVQ
X0NPTk5FQ1RJT04gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FjaGVGbGFnc0ZvcihyZXF1ZXN0KCkpIHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZUZsYWcgfAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU5URVJORVRfRkxBR19G
T1JNU19TVUJNSVQgfCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSU5URVJORVRfRkxBR19JR05PUkVfUkVESVJFQ1RfVE9fSFRUUFMgfAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJORVRf
RkxBR19JR05PUkVfUkVESVJFQ1RfVE9fSFRUUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChEV09SRF9QVFIpZC0+bV9qb2JJZCk7CisgICAgICAg
ICAgICBpZiAodXJsSGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICAgICAg
ICAgIGZhaWwoIkZhaWxlZCB0byBvcGVuIHJlcXVlc3QgZm9yIFBPU1Qgb3BlcmF0aW9uIik7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFkLT5tX2Nvbm5NZ3ItPnNlY29uZGFyeVVybEhhbmRs
ZSgpKSB7CisgICAgICAgIGFzc2VydChyZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7
CisgICAgICAgIGQtPm1fY29ubk1nci0+c2V0U2Vjb25kYXJ5VXJsSGFuZGxlKChDb25uZWN0aW9u
TWFuYWdlciopbFBhcmFtKTsKKworICAgICAgICBpZiAoZC0+bV9mb3JtRGF0YVN0cmluZykgewor
ICAgICAgICAgICAgLy8gcmVwb3N0IGZvcm0gZGF0YQorICAgICAgICAgICAgcmVwb3N0KCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBOZWVkIHRvIGFjdHVhbGx5IHNlbmQgdGhl
IHJlcXVlc3Qgbm93LgorICAgICAgICAgICAgZC0+bV9oZWFkZXJzID0gIkNvbnRlbnQtVHlwZTog
YXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG4iOworICAgICAgICAgICAgaWYgKCFk
LT5tX3Bvc3RSZWZlcnJlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBkLT5tX2hlYWRl
cnMgKz0gIlJlZmVyZXI6ICI7CisgICAgICAgICAgICAgICAgZC0+bV9oZWFkZXJzICs9IGQtPm1f
cG9zdFJlZmVycmVyOworICAgICAgICAgICAgICAgIGQtPm1faGVhZGVycyArPSAiXG4iOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBTdHJpbmcgZm9ybURhdGEgPSByZXF1ZXN0KCkuaHR0
cEJvZHkoKS0+ZmxhdHRlblRvU3RyaW5nKCk7CisgICAgICAgICAgICBJTlRFUk5FVF9CVUZGRVJT
IGJ1ZmZlcnM7CisgICAgICAgICAgICBtZW1zZXQoJmJ1ZmZlcnMsIDAsIHNpemVvZihidWZmZXJz
KSk7CisgICAgICAgICAgICBidWZmZXJzLmR3U3RydWN0U2l6ZSA9IHNpemVvZihidWZmZXJzKTsK
KyAgICAgICAgICAgIGJ1ZmZlcnMubHBjc3pIZWFkZXIgPSBkLT5tX2hlYWRlcnMuY2hhcmFjdGVy
cygpOworICAgICAgICAgICAgYnVmZmVycy5kd0hlYWRlcnNMZW5ndGggPSBkLT5tX2hlYWRlcnMu
bGVuZ3RoKCk7CisgICAgICAgICAgICBidWZmZXJzLmR3SGVhZGVyc1RvdGFsID0gYnVmZmVycy5k
d0hlYWRlcnNMZW5ndGg7CisgICAgICAgICAgICBidWZmZXJzLmR3QnVmZmVyVG90YWwgPSBmb3Jt
RGF0YS5sZW5ndGgoKTsKKworICAgICAgICAgICAgaWYgKGZvcm1EYXRhLmxlbmd0aCgpKSB7Cisg
ICAgICAgICAgICAgICAgZC0+bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUgPSBmb3JtRGF0YS5sZW5n
dGgoKTsKKyAgICAgICAgICAgICAgICBkLT5tX2Zvcm1EYXRhU3RyaW5nID0gbmV3IGNoYXJbZm9y
bURhdGEubGVuZ3RoKCkgKyAxXTsKKyAgICAgICAgICAgICAgICBkLT5tX2Zvcm1EYXRhTGVuZ3Ro
ID0gZm9ybURhdGEubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgc3RyY3B5KGQtPm1fZm9ybURh
dGFTdHJpbmcsIGZvcm1EYXRhLmxhdGluMSgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgZC0+
bV93cml0aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IGVycm9y
OworICAgICAgICAgICAgaWYgKCFIdHRwU2VuZFJlcXVlc3RFeChkLT5tX2Nvbm5NZ3ItPnNlY29u
ZGFyeVVybEhhbmRsZSgpLCAmYnVmZmVycywgMCwgMCwgKERXT1JEX1BUUilkLT5tX2pvYklkKQor
ICAgICAgICAgICAgICAgICYmIFdTQV9JT19QRU5ESU5HICE9IChlcnJvciA9IEdldExhc3RFcnJv
cigpKSkgeworI2lmZGVmIFJFU09VUkNFX0xPQURFUl9ERUJVRworICAgICAgICAgICAgICAgIHBy
aW50ZigiRmFpbGVkIHRvIGFwcGx5IGhlYWRlcnM6ICVkXG4iLCBlcnJvcik7CisjZW5kaWYKKyAg
ICAgICAgICAgICAgICBpZiAoIUh0dHBTZW5kUmVxdWVzdEV4KGQtPm1fY29ubk1nci0+c2Vjb25k
YXJ5VXJsSGFuZGxlKCksIDAsIDAsIDAsIChEV09SRF9QVFIpZC0+bV9qb2JJZCkKKyAgICAgICAg
ICAgICAgICAmJiBXU0FfSU9fUEVORElORyAhPSAoZXJyb3IgPSBHZXRMYXN0RXJyb3IoKSkpIHsK
KyNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRm
KCJGYWlsZWQgdG8gcG9zdCBkYXRhOiAlZFxuIiwgZXJyb3IpOworI2VuZGlmCisgICAgICAgICAg
ICAgICAgICAgIGZhaWwoIkZhaWxlZCB0byBzdGFydCBwb3N0aW5nIGRhdGEiKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgcHJv
cGVyIGVycm9yIGhhbmRsaW5nCisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VI
YW5kbGU6Om9uUmVxdWVzdFJlZGlyZWN0ZWQoTFBBUkFNIGxQYXJhbSkKK3sKKyAgICAvLyBJZiBh
bHJlYWR5IGNhbmNlbGVkLCB0aGVuIGlnbm9yZSB0aGlzIGV2ZW50LgorICAgIFN0cmluZyogbmV3
VXJsID0gKFN0cmluZyopbFBhcmFtOworICAgIC8vTWVzc2FnZUJveFcoMCwgbmV3VXJsLT5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBMIlJlZGlyZWN0IiwgTUJfT0spOworICAgIGlm
IChjbGllbnQoKSkgeworICAgICAgICBSZXNvdXJjZVJlcXVlc3QgbmV3UmVxdWVzdCA9IHJlcXVl
c3QoKTsKKyAgICAgICAgbmV3UmVxdWVzdC5zZXRVUkwoS1VSTCgqbmV3VXJsKSk7CisgICAgICAg
IFJlc291cmNlUmVzcG9uc2UgcmVkaXJlY3RSZXNwb25zZTsKKyAgICAgICAgc2V0UmVzcG9uc2Uo
cmVkaXJlY3RSZXNwb25zZSk7CisgICAgICAgIGNsaWVudCgpLT53aWxsU2VuZFJlcXVlc3QodGhp
cywgbmV3UmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgfSBlbHNlCisgICAgICAgIGRl
bGV0ZSB0aGlzOworCisgICAgZGVsZXRlIG5ld1VybDsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRs
ZTo6b25Db25uZWN0aW9uQ2xvc2VkKExQQVJBTSBsUGFyYW0pCit7CisgICAgLy8gQ29ubmVjdGlv
biBjbG9zZWQgdW5leHBlY3RlZGx5PyBSZXBvcnQgZXJyb3I/CisgICAgZmFpbCgiQ29ubmVjdGlv
biBjbG9zZWQgdW5leHBlY3RlZGx5Iik7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnJlcG9z
dCgpCit7CisgICAgLy8gUG9zdCBkYXRhIGFnYWluCisgICAgSU5URVJORVRfQlVGRkVSUyBidWZm
ZXJzOworICAgIG1lbXNldCgmYnVmZmVycywgMCwgc2l6ZW9mKGJ1ZmZlcnMpKTsKKyAgICBidWZm
ZXJzLmR3U3RydWN0U2l6ZSA9IHNpemVvZihidWZmZXJzKTsKKyAgICBidWZmZXJzLmxwY3N6SGVh
ZGVyID0gZC0+bV9oZWFkZXJzLmNoYXJhY3RlcnMoKTsKKyAgICBidWZmZXJzLmR3SGVhZGVyc0xl
bmd0aCA9IGQtPm1faGVhZGVycy5sZW5ndGgoKTsKKyAgICBidWZmZXJzLmR3SGVhZGVyc1RvdGFs
ID0gYnVmZmVycy5kd0hlYWRlcnNMZW5ndGg7CisgICAgYnVmZmVycy5kd0J1ZmZlclRvdGFsID0g
ZC0+bV9mb3JtRGF0YUxlbmd0aDsKKworICAgIGQtPm1fYnl0ZXNSZW1haW5pbmdUb1dyaXRlID0g
ZC0+bV9mb3JtRGF0YUxlbmd0aDsKKworICAgIGludCBlcnJvcjsKKyAgICBpZiAoIUh0dHBTZW5k
UmVxdWVzdEV4KGQtPm1fY29ubk1nci0+c2Vjb25kYXJ5VXJsSGFuZGxlKCksICZidWZmZXJzLCAw
LCAwLCAoRFdPUkRfUFRSKWQtPm1fam9iSWQpCisgICAgICAgICYmIFdTQV9JT19QRU5ESU5HICE9
IChlcnJvciA9IEdldExhc3RFcnJvcigpKSkKKyAgICB7CisjaWZkZWYgUkVTT1VSQ0VfTE9BREVS
X0RFQlVHCisgICAgICAgIHByaW50ZigiRmFpbGVkIHRvIGFwcGx5IGhlYWRlcnM6ICVkXG4iLCBl
cnJvcik7CisjZW5kaWYKKyAgICAgICAgaWYgKCFIdHRwU2VuZFJlcXVlc3RFeChkLT5tX2Nvbm5N
Z3ItPnNlY29uZGFyeVVybEhhbmRsZSgpLCAwLCAwLCAwLCAoRFdPUkRfUFRSKWQtPm1fam9iSWQp
CisgICAgICAgICYmIFdTQV9JT19QRU5ESU5HICE9IChlcnJvciA9IEdldExhc3RFcnJvcigpKSkK
KyAgICAgICAgeworI2lmZGVmIFJFU09VUkNFX0xPQURFUl9ERUJVRworICAgICAgICAgICAgcHJp
bnRmKCJGYWlsZWQgdG8gcG9zdCBkYXRhOiAlZFxuIiwgZXJyb3IpOworI2VuZGlmCisgICAgICAg
ICAgICBmYWlsKCJGYWlsZWQgdG8gc3RhcnQgcmVwb3N0aW5nIGRhdGEiKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworc3RhdGljIFN0cmluZyBnZXRXaW5JbmV0RXJyb3IoRFdPUkQgZXJyKQorewor
ICAgIEhBTkRMRSBoID0gOjpHZXRNb2R1bGVIYW5kbGUoTCJ3aW5pbmV0LmRsbCIpOworICAgIGlm
IChoKSB7CisgICAgICAgIExQVFNUUiBwOworICAgICAgICBpZiAoOjpGb3JtYXRNZXNzYWdlKEZP
Uk1BVF9NRVNTQUdFX0FMTE9DQVRFX0JVRkZFUiB8CisgICAgICAgICAgICBGT1JNQVRfTUVTU0FH
RV9GUk9NX0hNT0RVTEUsCisgICAgICAgICAgICAoTFBDVk9JRCloLAorICAgICAgICAgICAgZXJy
LAorICAgICAgICAgICAgMCwgLy8gZGVmYXVsdCBsYW5ndWFnZQorICAgICAgICAgICAgKExQVFNU
UikmcCwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMKSkgeworICAgICAgICAgICAg
U3RyaW5nIHMocCk7CisgICAgICAgICAgICBMb2NhbEZyZWUocCk7CisgICAgICAgICAgICByZXR1
cm4gczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiSW50
ZXJuZXQgRXJyb3I6ICVkIiwgZXJyKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6b25SZXF1
ZXN0Q29tcGxldGUoTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBpZiAoIWNsaWVudCgpKSB7CisgICAg
ICAgIGRlbGV0ZSB0aGlzOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFkLT5t
X2Nvbm5NZ3ItPnVybEhhbmRsZSgpKSB7CisgICAgICAgIGZhaWwoIlVuZXhwZWN0ZWQgRXJyb3Ii
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEhJTlRFUk5FVCBoYW5kbGUgPSAocmVx
dWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpID8gZC0+bV9jb25uTWdyLT5zZWNvbmRhcnlV
cmxIYW5kbGUoKSA6IGQtPm1fY29ubk1nci0+dXJsSGFuZGxlKCk7CisKKyAgICBpZiAobFBhcmFt
ICE9IEVSUk9SX1NVQ0NFU1MpIHsKKyAgICAgICAgc3dpdGNoIChsUGFyYW0pIHsKKyAgICAgICAg
Y2FzZSBFUlJPUl9JTlRFUk5FVF9JTkNPUlJFQ1RfUEFTU1dPUkQ6CisgICAgICAgIGNhc2UgRVJS
T1JfSU5URVJORVRfSU5WQUxJRF9DQToKKyAgICAgICAgY2FzZSBFUlJPUl9JTlRFUk5FVF9QT1NU
X0lTX05PTl9TRUNVUkU6CisgICAgICAgIGNhc2UgRVJST1JfSU5URVJORVRfU0VDX0NFUlRfQ05f
SU5WQUxJRDoKKyAgICAgICAgY2FzZSBFUlJPUl9JTlRFUk5FVF9TRUNfQ0VSVF9EQVRFX0lOVkFM
SUQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRFdPUkQgcnRuID0gSW50ZXJuZXRF
cnJvckRsZyhOVUxMLCBoYW5kbGUsIGxQYXJhbQorICAgICAgICAgICAgICAgICAgICAsIEZMQUdT
X0VSUk9SX1VJX0ZJTFRFUl9GT1JfRVJST1JTIHwgRkxBR1NfRVJST1JfVUlfRkxBR1NfQ0hBTkdF
X09QVElPTlMsIDApOworICAgICAgICAgICAgICAgIGlmIChydG4gIT0gRVJST1JfU1VDQ0VTUykg
eworICAgICAgICAgICAgICAgICAgICBmYWlsKCJBdXRoZW50aWNhdGlvbiBmYWlsZWQiKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGZhaWwoZ2V0V2luSW5ldEVycm9yKGxQYXJhbSkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKGQtPm1fd3JpdGluZykgeworICAgICAgICBEV09SRCBi
eXRlc1dyaXR0ZW47CisgICAgICAgIGlmIChJbnRlcm5ldFdyaXRlRmlsZShkLT5tX2Nvbm5NZ3It
PnNlY29uZGFyeVVybEhhbmRsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5tX2Zv
cm1EYXRhU3RyaW5nICsgKGQtPm1fZm9ybURhdGFMZW5ndGggLSBkLT5tX2J5dGVzUmVtYWluaW5n
VG9Xcml0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGQtPm1fYnl0ZXNSZW1haW5pbmdU
b1dyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmYnl0ZXNXcml0dGVuKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgZC0+bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUgLT0gYnl0ZXNXcml0
dGVuOworICAgICAgICAgICAgaWYgKCFkLT5tX2J5dGVzUmVtYWluaW5nVG9Xcml0ZSkgeworICAg
ICAgICAgICAgICAgIC8vIEVuZCB0aGUgcmVxdWVzdC4KKyAgICAgICAgICAgICAgICBCT09MIGdv
b2QgPSBIdHRwRW5kUmVxdWVzdChkLT5tX2Nvbm5NZ3ItPnNlY29uZGFyeVVybEhhbmRsZSgpLCAw
LCAwLCAoRFdPUkRfUFRSKWQtPm1fam9iSWQpOworICAgICAgICAgICAgICAgIGludCBlcnJvcjsK
KyAgICAgICAgICAgICAgICBpZiAoIWdvb2QpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3Ig
PSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEVSUk9SX0lOVEVSTkVU
X0ZPUkNFX1JFVFJZID09IGVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChFUlJPUl9JT19QRU5ESU5HID09IGVycm9yKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBnb29kIGZvciBhc3luYyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAg
ICAgZ29vZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoZ29vZCkgeworICAgICAgICAgICAgICAgICAgICBkLT5t
X3dyaXRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlW10gZC0+bV9mb3Jt
RGF0YVN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgZC0+bV9mb3JtRGF0YVN0cmluZyA9IDA7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVCVUcK
KyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJFbmQgcmVxdWVzdCBlcnJvcjogJWlcbiIsIGVy
cm9yKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJGYWlsZWQgdG8gZmluaXNo
IHBvc3RpbmcgZGF0YSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworI2lmZGVmIFJFU09VUkNFX0xPQURF
Ul9ERUJVRworICAgICAgICAgICAgcHJpbnRmKCJQb3N0IGVycm9yOiAlaVxuIiwgR2V0TGFzdEVy
cm9yKCkpOworI2VuZGlmCisgICAgICAgICAgICBmYWlsKCJGYWlsZWQgdG8gcG9zdCBkYXRhIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgY29u
c3QgaW50IGJ1ZmZlclNpemUgPSA4MTkyOyAvLzMyNzY4OworCisgICAgY2hhciBidWZmZXJbYnVm
ZmVyU2l6ZV07CisgICAgSU5URVJORVRfQlVGRkVSU0EgYnVmZmVyczsKKyAgICBidWZmZXJzLmR3
U3RydWN0U2l6ZSA9IHNpemVvZihidWZmZXJzKTsKKyAgICBidWZmZXJzLmxwdkJ1ZmZlciA9IGJ1
ZmZlcjsKKyAgICBidWZmZXJzLmR3QnVmZmVyTGVuZ3RoID0gYnVmZmVyU2l6ZTsKKworICAgIGJv
b2wgcmVjZWl2ZWRBbnlEYXRhID0gZmFsc2U7CisgICAgaW50IGpvYklkID0gZC0+bV9qb2JJZDsK
KworICAgIEJPT0wgb2sgPSBJbnRlcm5ldFJlYWRGaWxlRXhBKGhhbmRsZSwgJmJ1ZmZlcnMsIElS
Rl9OT19XQUlULCAoRFdPUkRfUFRSKWpvYklkKTsKKworICAgIGlmIChvayAmJiBidWZmZXJzLmR3
QnVmZmVyTGVuZ3RoKSB7CisgICAgICAgIGlmICghaGFzUmVjZWl2ZWRSZXNwb25zZSgpKSB7Cisg
ICAgICAgICAgICBzZXRIYXNSZWNlaXZlZFJlc3BvbnNlKCk7CisgICAgICAgICAgICBSZXNvdXJj
ZVJlc3BvbnNlIHJlc3BvbnNlOworICAgICAgICAgICAgc2V0UmVzcG9uc2UocmVzcG9uc2UpOwor
ICAgICAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCByZXNwb25zZSk7
CisgICAgICAgICAgICAvLyBJbiBjYXNlIHRoYXQgaXQgaXMgZGVsZXRlZCBieSBsYXN0IGNhbGwK
KyAgICAgICAgICAgIGlmICgham9iTWFuYWdlcigpLT5sb29rdXBSZXNvdXJjZUhhbmRsZShqb2JJ
ZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNsaWVudCgp
LT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBidWZmZXIsIGJ1ZmZlcnMuZHdCdWZmZXJMZW5ndGgsIDAp
OworCisgICAgICAgIC8vIEluIGNhc2UgdGhhdCBpdCBpcyBkZWxldGVkIGJ5IGxhc3QgY2FsbAor
ICAgICAgICBpZiAoIWpvYk1hbmFnZXIoKS0+bG9va3VwUmVzb3VyY2VIYW5kbGUoam9iSWQpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChidWZmZXJzLmR3QnVmZmVyTGVuZ3Ro
KSB7CisgICAgICAgICAgICAvLyBSZWFkIHRoZSByZXN0IGRhdGEgbmV4dCB0aW1lCisgICAgICAg
ICAgICBQb3N0TWVzc2FnZShqb2JNYW5hZ2VyKCktPmh3bmQoKSwgcmVxdWVzdENvbXBsZXRlTWVz
c2FnZSwgKFdQQVJBTSlqb2JJZCwgbFBhcmFtKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChvaykKKyAgICAgICAgZmluaXNoKCk7CisgICAgZWxzZSB7
CisgICAgICAgIGludCBlcnJvciA9IEdldExhc3RFcnJvcigpOworICAgICAgICBpZiAoZXJyb3Ig
IT0gRVJST1JfSU9fUEVORElORykgeworI2lmZGVmIFJFU09VUkNFX0xPQURFUl9ERUJVRworICAg
ICAgICAgICAgcHJpbnRmKCJMb2FkIGVycm9yOiAlaVxuIiwgZXJyb3IpOyAvLyBmYWlsPworI2Vu
ZGlmCisgICAgICAgICAgICBmYWlsKCJGYWlsZWQgdG8gcmVhZCByZXNvdXJjZSBkYXRhIik7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6Om9wZW5VcmwoY29uc3Qg
U3RyaW5nJiByZWZlcnJlciwgYm9vbCBzZWxmRGVsKQoreworICAgIGlmICghY2xpZW50KCkpIHsK
KyAgICAgICAgaWYgKHNlbGZEZWwpCisgICAgICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBEV09SRCBmbGFncyA9IElO
VEVSTkVUX0ZMQUdfQVNZTkMKKyAgICAgICAgfCBJTlRFUk5FVF9GTEFHX0lHTk9SRV9SRURJUkVD
VF9UT19IVFRQUworICAgICAgICB8IElOVEVSTkVUX0ZMQUdfSUdOT1JFX1JFRElSRUNUX1RPX0hU
VFA7CisKKyAgICAvLyBGb3IgZm9ybSBwb3N0aW5nLCB3ZSBjYW4ndCB1c2UgSW50ZXJuZXRPcGVu
VVJMLiAgV2UgaGF2ZSB0byB1c2UKKyAgICAvLyBJbnRlcm5ldENvbm5lY3QgZm9sbG93ZWQgYnkg
SHR0cFNlbmRSZXF1ZXN0LgorICAgIEhJTlRFUk5FVCB1cmxIYW5kbGU7CisgICAgYm9vbCBzZWN1
cmUgPSByZXF1ZXN0KCkudXJsKCkucHJvdG9jb2woKS5sb3dlcigpID09ICJodHRwcyI7CisgICAg
aW50IHNlY3VyZUZsYWdzID0gc2VjdXJlID8gSU5URVJORVRfRkxBR19TRUNVUkUgOiAwOworICAg
IHVuc2lnbmVkIHNob3J0IHBvcnQgPSByZXF1ZXN0KCkudXJsKCkucG9ydCgpOworICAgIGlmIChw
b3J0IDw9IDApCisgICAgICAgIHBvcnQgPSBzZWN1cmUgPyA0NDMgOiA4MDsKKyAgICBpZiAocmVx
dWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpIHsKKyAgICAgICAgZC0+bV9wb3N0UmVmZXJy
ZXIgPSByZWZlcnJlcjsKKyAgICAgICAgU3RyaW5nIGhvc3QgPSByZXF1ZXN0KCkudXJsKCkuaG9z
dCgpOworICAgICAgICB1cmxIYW5kbGUgPSBJbnRlcm5ldENvbm5lY3QoZC0+bV9jb25uTWdyLT5p
bnRlcm5ldEhhbmRsZSgpLCBob3N0LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvLyBubyB1c2VybmFtZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8vIG5vIHBhc3N3b3JkCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJORVRfU0VSVklDRV9IVFRQLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHwgY2FjaGVGbGFnc0ZvcihyZXF1
ZXN0KCkpIHwgc2VjdXJlRmxhZ3MsIChEV09SRF9QVFIpZC0+bV9qb2JJZCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgU3RyaW5nIHVybFN0ciA9IHJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKTsKKyAg
ICAgICAgaW50IGZyYWdtZW50SW5kZXggPSB1cmxTdHIuZmluZCgnIycpOworICAgICAgICBpZiAo
ZnJhZ21lbnRJbmRleCAhPSAtMSkKKyAgICAgICAgICAgIHVybFN0ciA9IHVybFN0ci5sZWZ0KGZy
YWdtZW50SW5kZXgpOworICAgICAgICBTdHJpbmcgaGVhZGVyczsKKyAgICAgICAgaWYgKCFyZWZl
cnJlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBoZWFkZXJzICs9IFN0cmluZygiUmVmZXJlcjog
IikgKyByZWZlcnJlciArICJcclxuIjsKKworICAgICAgICB1cmxIYW5kbGUgPSBJbnRlcm5ldE9w
ZW5VcmwoZC0+bV9jb25uTWdyLT5pbnRlcm5ldEhhbmRsZSgpLCB1cmxTdHIuY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWFkZXJzLmNoYXJhY3RlcnMoKSwgaGVhZGVycy5sZW5ndGgoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbGFncyB8IGNhY2hlRmxhZ3NGb3IocmVxdWVzdCgpKSB8
IHNlY3VyZUZsYWdzLCAoRFdPUkRfUFRSKWQtPm1fam9iSWQpOworICAgIH0KKworICAgIGlmICgh
dXJsSGFuZGxlKSB7CisgICAgICAgIERXT1JEIGVyciA9IEdldExhc3RFcnJvcigpOworICAgICAg
ICBpZiAoRVJST1JfSU9fUEVORElORyAhPSBlcnIpIHsKKyAgICAgICAgICAgIGlmIChzZWxmRGVs
KQorICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVzb3Vy
Y2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFtZSkKK3sKKyAgICByZWYoKTsKKyAgICBkLT5tX2lz
QWJvdXQgPSByZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkuc3RhcnRzV2l0aCgiYWJvdXQ6Iik7IC8v
IEtVUkwgY2FuJ3QgaGFuZGxlIHByb3RvY29sIG9uICJhYm91dDpmb28iPz8KKworICAgIGlmIChk
LT5tX2lzQWJvdXQpIHsKKyAgICAgICAgZC0+bV9pc0Fib3V0ID0gdHJ1ZTsKKyAgICAgICAgZC0+
bV9maWxlTG9hZFRpbWVyLnN0YXJ0T25lU2hvdCgwLjApOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9IGVsc2UgaWYgKHJlcXVlc3QoKS51cmwoKS5pc0xvY2FsRmlsZSgpKSB7CisKKyAgICAg
ICAgU3RyaW5nIHBhdGggPSByZXF1ZXN0KCkudXJsKCkucGF0aCgpOworICAgICAgICB3aGlsZSAo
cGF0aFswXSA9PSAnLycpCisgICAgICAgICAgICBwYXRoLnJlbW92ZSgwKTsKKworICAgICAgICAv
LyBUZW1wb3Jhcnkgc29sdXRpb24uIExhdGVyIG9uIHdlIHdpbGwgdXNlIEludGVybmV0Q3JhY2tV
cmwKKyAgICAgICAgcGF0aC5yZXBsYWNlKFN0cmluZyhMIiUyMCIpLCBTdHJpbmcoTCIgIikpOwor
ICAgICAgICBwYXRoLnN0cmlwV2hpdGVTcGFjZSgpOworCisgICAgICAgIGQtPm1fZmlsZUhhbmRs
ZSA9IENyZWF0ZUZpbGUocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBHRU5F
UklDX1JFQUQsIDAsIE5VTEwsIE9QRU5fRVhJU1RJTkcsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwg
TlVMTCk7CisKKyAgICAgICAgZC0+bV9maWxlTG9hZFRpbWVyLnN0YXJ0T25lU2hvdCgwLjApOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoZC0+bV9jb25u
TWdyKQorICAgICAgICAgICAgZGVsZXRlIGQtPm1fY29ubk1ncjsKKyAgICAgICAgZC0+bV9jb25u
TWdyID0gbmV3IENvbm5lY3Rpb25NYW5hZ2VyKCk7CisKKyAgICAgICAgaWYgKCFkLT5tX2Nvbm5N
Z3ItPmludGVybmV0SGFuZGxlKCkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBkLT5tX2Nvbm5NZ3I7
CisgICAgICAgICAgICBkLT5tX2Nvbm5NZ3IgPSAwOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpvYk1hbmFnZXIoKS0+YWRkVG9PdXRzdGFu
ZGluZ0pvYnModGhpcywgZnJhbWUtPmxvYWRlcigpLT5yZWZlcnJlcigpKTsKKyAgICB9Cit9CisK
K3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRGaWxlKCkKK3sKKyAgICBpbnQgam9iSWQgPSBkLT5t
X2pvYklkOworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgc2V0UmVzcG9uc2Uo
cmVzcG9uc2UpOworCisgICAgLy8gRklYTUUgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVu
Z3RoKHN6KTsKKyAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSgyMDApOworICAgIGNsaWVu
dCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpOworICAgIGJvb2wgcmVzdWx0
ID0gZmFsc2U7CisgICAgRFdPUkQgYnl0ZXNSZWFkID0gMDsKKworICAgIGRvIHsKKyAgICAgICAg
Y29uc3QgaW50IGJ1ZmZlclNpemUgPSA4MTkyOworICAgICAgICBjaGFyIGJ1ZmZlcltidWZmZXJT
aXplXTsKKyAgICAgICAgcmVzdWx0ID0gISFSZWFkRmlsZShkLT5tX2ZpbGVIYW5kbGUsICZidWZm
ZXIsIGJ1ZmZlclNpemUsICZieXRlc1JlYWQsIE5VTEwpOworICAgICAgICBpZiAocmVzdWx0ICYm
IGJ5dGVzUmVhZCkgeworICAgICAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVEYXRhKHRoaXMs
IGJ1ZmZlciwgYnl0ZXNSZWFkLCAwKTsKKyAgICAgICAgICAgIC8vIEluIGNhc2UgdGhhdCBpdCBp
cyBkZWxldGVkIGJ5IGxhc3QgY2FsbAorICAgICAgICAgICAgaWYgKCFqb2JNYW5hZ2VyKCktPmxv
b2t1cFJlc291cmNlSGFuZGxlKGpvYklkKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgLy8gQ2hlY2sgZm9yIGVuZCBvZiBmaWxlLgorICAgIH0gd2hpbGUgKHJl
c3VsdCAmJiBieXRlc1JlYWQpOworCisgICAgLy8gRklYTUU6IGhhbmRsZSBlcnJvcnMgYmV0dGVy
CisKKyAgICBDbG9zZUhhbmRsZShkLT5tX2ZpbGVIYW5kbGUpOworICAgIGQtPm1fZmlsZUhhbmRs
ZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOworCisgICAgZmluaXNoKCk7Cit9CisKK3ZvaWQgUmVz
b3VyY2VIYW5kbGU6OmxvYWREYXRhKCkKK3sKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9h
ZEFib3V0KCkKK3sKKyAgICBpZiAoIWZldGNoQWJvdXRQYWdlKSB7CisgICAgICAgIGZhaWwoIkZh
aWxlZCB0byBvcGVuIHBhZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBq
b2JJZCA9IGQtPm1fam9iSWQ7CisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICBz
ZXRSZXNwb25zZShyZXNwb25zZSk7CisKKyAgICBTdHJpbmcgcGF0aCA9IHJlcXVlc3QoKS51cmwo
KS5wYXRoKCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgY2hhciAqZGF0YSA9IDA7CisgICAgaW50
IHN6ID0gMDsKKyAgICBCdWZmZXJEZWxldGVyIGRlbGV0ZXIgPSAwOworICAgIGJvb2wgcmMgPSAo
ZmV0Y2hBYm91dFBhZ2UpKHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgJmRh
dGEsICZzeiwgJmRlbGV0ZXIpOworICAgIGlmICghcmMgfHwgIXN6KSB7CisgICAgICAgIHJlc3Bv
bnNlLnNldEhUVFBTdGF0dXNDb2RlKDQwNCk7CisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZl
UmVzcG9uc2UodGhpcywgcmVzcG9uc2UpOworICAgICAgICBmYWlsKCIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICByZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoc3opOwor
ICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7CisgICAgY2xpZW50KCktPmRpZFJl
Y2VpdmVSZXNwb25zZSh0aGlzLCByZXNwb25zZSk7CisgICAgY2xpZW50KCktPmRpZFJlY2VpdmVE
YXRhKHRoaXMsIGRhdGEsIHN6LCAwKTsKKyAgICBpZiAoZGVsZXRlcikKKyAgICAgICAgZGVsZXRl
cihkYXRhLCBzeik7CisgICAgZmluaXNoKCk7CisgICAgcmV0dXJuOworfQorCit2b2lkIFJlc291
cmNlSGFuZGxlOjpmaWxlTG9hZFRpbWVyKFRpbWVyPFJlc291cmNlSGFuZGxlPiogdGltZXIpCit7
CisgICAgaWYgKCFjbGllbnQoKSkgeworICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIHJlcG9ydGVkIGFzeW5jaHJvbm91c2x5IGZvciBjb25zaXN0
ZW5jeS4KKyAgICBpZiAoIWQtPm1faXNBYm91dCAmJiBkLT5tX2ZpbGVIYW5kbGUgPT0gSU5WQUxJ
RF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgZmFpbCgiRmFpbGVkIHRvIGxvYWQgZmlsZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGQtPm1faXNBYm91dCkKKyAgICAgICAg
bG9hZEFib3V0KCk7CisgICAgZWxzZQorICAgICAgICBsb2FkRmlsZSgpOworfQorCisjaWYgUExB
VEZPUk0oVE9SQ0hNT0JJTEUpCit2b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoY29uc3QgUmVz
b3VyY2VIYW5kbGVDbGllbnQqKQorI2Vsc2UKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhbmNlbCgp
CisjZW5kaWYKK3sKKyAgICBpZiAoZC0+bV9jb25uTWdyICYmIGQtPm1fY29ubk1nci0+dXJsSGFu
ZGxlKCkpCisgICAgICAgIGQtPm1fY29ubk1nci0+Y2xvc2VVcmxIYW5kbGUoKTsKKyAgICBlbHNl
CisgICAgICAgIGQtPm1fZmlsZUxvYWRUaW1lci5zdG9wKCk7CisKKyAgICBmaW5pc2goKTsKK30K
Kwordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0SGFzUmVjZWl2ZWRSZXNwb25zZShib29sIGIpCit7
CisgICAgZC0+bV9oYXNSZWNlaXZlZFJlc3BvbnNlID0gYjsKK30KKworYm9vbCBSZXNvdXJjZUhh
bmRsZTo6aGFzUmVjZWl2ZWRSZXNwb25zZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPm1faGFz
UmVjZWl2ZWRSZXNwb25zZTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNl
U3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlRXJy
b3ImIGUsIFJlc291cmNlUmVzcG9uc2UmIHIsIFZlY3RvcjxjaGFyPiYgZGF0YSwgRnJhbWUqKQor
eworICAgIE1lc3NhZ2VCb3hXKDAsIFN0cmluZyhyZXF1ZXN0LnVybCgpLnN0cmluZygpKS5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBMIkxvYWQgU3luY2hyb25vdXNseSIsIE1CX09L
KTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
UmVzb3VyY2VIYW5kbGU6OmJ1ZmZlcmVkRGF0YSgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jv
b2wgUmVzb3VyY2VIYW5kbGU6OnN1cHBvcnRzQnVmZmVyZWREYXRhKCkKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBk
ZWZlcnMpCit7CisgICAgZC0+bV9kZWZlcnNMb2FkaW5nID0gZGVmZXJzOworfQorCit2b2lkIFJl
c291cmNlSGFuZGxlOjpzZXREb3dubG9hZENsaWVudChSZXNvdXJjZUhhbmRsZUNsaWVudCogYykK
K3sKKyAgICBkLT5tX2Rvd25sb2FkQ2xpZW50ID0gYzsKKyAgICBkLT5tX2ZyYW1lID0gMDsKK30K
KworYm9vbCBSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0
JiByZXEpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgcHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZVJlcXVlc3QuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZVJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4yYjcxNzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlUmVxdWVzdC5oCkBAIC0wLDAgKzEsODMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8
c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUb3JjaCBN
b2JpbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJlc291cmNlUmVxdWVzdF9oCisjZGVmaW5lIFJl
c291cmNlUmVxdWVzdF9oCisKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3RCYXNlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdCA6IHB1YmxpYyBS
ZXNvdXJjZVJlcXVlc3RCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlc291cmNlUmVxdWVz
dChjb25zdCBTdHJpbmcmIHVybCkKKyAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZShL
VVJMKHVybCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisgICAgICAgICAgICAsIG1fdHlwZShS
ZXF1ZXN0TWFpbikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVzb3VyY2VSZXF1
ZXN0KGNvbnN0IEtVUkwmIHVybCkKKyAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSh1
cmwsIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisgICAgICAgICAgICAsIG1fdHlwZShSZXF1ZXN0
TWFpbikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgUmVzb3VyY2VSZXF1ZXN0Q2Fj
aGVQb2xpY3kgcG9saWN5ID0gVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAgICAgIDog
UmVzb3VyY2VSZXF1ZXN0QmFzZSh1cmwsIHBvbGljeSkKKyAgICAgICAgICAgICwgbV90eXBlKFJl
cXVlc3RNYWluKQorICAgICAgICB7CisgICAgICAgICAgICBzZXRIVFRQUmVmZXJyZXIocmVmZXJy
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KCkKKyAgICAgICAgICAg
IDogUmVzb3VyY2VSZXF1ZXN0QmFzZShLVVJMKCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisg
ICAgICAgICAgICAsIG1fdHlwZShSZXF1ZXN0TWFpbikKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgZW51bSBUeXBlIHsKKyAgICAgICAgICAgIFJlcXVlc3RNYWluLAorICAgICAgICAg
ICAgUmVxdWVzdFNjcmlwdCwKKyAgICAgICAgICAgIFJlcXVlc3RDU1MsCisgICAgICAgICAgICBS
ZXF1ZXN0T3RoZXIsCisgICAgICAgICAgICBSZXF1ZXN0SW1hZ2UsCisgICAgICAgIH07CisKKyAg
ICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgICAgIHZvaWQg
c2V0VHlwZShUeXBlIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgZnJpZW5kIHN0cnVjdCBSZXNvdXJjZVJlcXVlc3RCYXNlOworCisgICAgICAgIHZvaWQg
ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QoKSB7fQorICAgICAgICB2b2lkIGRvVXBkYXRlUmVzb3Vy
Y2VSZXF1ZXN0KCkge30KKworICAgICAgICBUeXBlIG1fdHlwZTsKKyAgICB9OworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVzb3VyY2VSZXF1ZXN0X2gKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZVJlc3BvbnNlLmggYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3VyY2VSZXNwb25zZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NWVmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3VyY2VSZXNwb25zZS5oCkBAIC0wLDAgKzEs
NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVzb3VyY2VSZXNwb25zZV9oCisj
ZGVmaW5lIFJlc291cmNlUmVzcG9uc2VfaAorCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZUJh
c2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlIDog
cHVibGljIFJlc291cmNlUmVzcG9uc2VCYXNlIHsKK3B1YmxpYzoKKyAgICBSZXNvdXJjZVJlc3Bv
bnNlKCkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXNwb25zZShjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCwgY29u
c3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQorICAg
ICAgICA6IFJlc291cmNlUmVzcG9uc2VCYXNlKHVybCwgbWltZVR5cGUsIGV4cGVjdGVkTGVuZ3Ro
LCB0ZXh0RW5jb2RpbmdOYW1lLCBmaWxlbmFtZSkKKyAgICB7CisgICAgfQorfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVzb3VyY2VSZXNwb25zZV9oCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvcHVueWNvZGUuYyBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay93aW5jZS9wdW55Y29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmZhZTE2NjAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvd2luY2UvcHVueWNvZGUuYwpAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGkgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJwdW55Y29kZS5oIgorCisv
KgorcHVueWNvZGUuYyBmcm9tIFJGQyAzNDkyCitodHRwOi8vd3d3Lm5pY2VtaWNlLm5ldC9pZG4v
CitBZGFtIE0uIENvc3RlbGxvCitodHRwOi8vd3d3Lm5pY2VtaWNlLm5ldC9hbWMvCisKK1RoaXMg
aXMgQU5TSSBDIGNvZGUgKEM4OSkgaW1wbGVtZW50aW5nIFB1bnljb2RlIChSRkMgMzQ5MikuCisK
KyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLworLyogSW1wbGVtZW50YXRpb24gKHdvdWxkIG5vcm1hbGx5IGdvIGluIGl0cyBv
d24gLmMgZmlsZSk6ICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoqKiBCb290c3RyaW5n
IHBhcmFtZXRlcnMgZm9yIFB1bnljb2RlICoqKi8KKworZW51bSB7IGJhc2UgPSAzNiwgdG1pbiA9
IDEsIHRtYXggPSAyNiwgc2tldyA9IDM4LCBkYW1wID0gNzAwLAorICAgICAgIGluaXRpYWxfYmlh
cyA9IDcyLCBpbml0aWFsX24gPSAweDgwLCBkZWxpbWl0ZXIgPSAweDJEIH07CisKKy8qIGJhc2lj
KGNwKSB0ZXN0cyB3aGV0aGVyIGNwIGlzIGEgYmFzaWMgY29kZSBwb2ludDogKi8KKyNkZWZpbmUg
YmFzaWMoY3ApICgocHVueWNvZGVfdWludCkoY3ApIDwgMHg4MCkKKworLyogZGVsaW0oY3ApIHRl
c3RzIHdoZXRoZXIgY3AgaXMgYSBkZWxpbWl0ZXI6ICovCisjZGVmaW5lIGRlbGltKGNwKSAoKGNw
KSA9PSBkZWxpbWl0ZXIpCisKKy8qIGRlY29kZV9kaWdpdChjcCkgcmV0dXJucyB0aGUgbnVtZXJp
YyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgKi8KKy8qIHBvaW50IChmb3IgdXNlIGluIHJlcHJlc2Vu
dGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIDAgdG8gKi8KKy8qIGJhc2UtMSwgb3IgYmFzZSBp
ZiBjcCBpcyBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWx1ZS4gICAgICAgKi8KKworc3RhdGljIHB1
bnljb2RlX3VpbnQgZGVjb2RlX2RpZ2l0KHB1bnljb2RlX3VpbnQgY3ApCit7CisgICAgcmV0dXJu
ICBjcCAtIDQ4IDwgMTAgPyBjcCAtIDIyIDogIGNwIC0gNjUgPCAyNiA/IGNwIC0gNjUgOgorICAg
ICAgICAgICAgY3AgLSA5NyA8IDI2ID8gY3AgLSA5NyA6ICBiYXNlOworfQorCisvKiBlbmNvZGVf
ZGlnaXQoZCxmbGFnKSByZXR1cm5zIHRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICAg
ICAgKi8KKy8qICh3aGVuIHVzZWQgZm9yIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgZCwgd2hp
Y2ggbmVlZHMgdG8gYmUgaW4gICAqLworLyogdGhlIHJhbmdlIDAgdG8gYmFzZS0xLiAgVGhlIGxv
d2VyY2FzZSBmb3JtIGlzIHVzZWQgdW5sZXNzIGZsYWcgaXMgICovCisvKiBub256ZXJvLCBpbiB3
aGljaCBjYXNlIHRoZSB1cHBlcmNhc2UgZm9ybSBpcyB1c2VkLiAgVGhlIGJlaGF2aW9yICAgKi8K
Ky8qIGlzIHVuZGVmaW5lZCBpZiBmbGFnIGlzIG5vbnplcm8gYW5kIGRpZ2l0IGQgaGFzIG5vIHVw
cGVyY2FzZSBmb3JtLiAqLworCitzdGF0aWMgY2hhciBlbmNvZGVfZGlnaXQocHVueWNvZGVfdWlu
dCBkLCBpbnQgZmxhZykKK3sKKyAgICByZXR1cm4gZCArIDIyICsgNzUgKiAoZCA8IDI2KSAtICgo
ZmxhZyAhPSAwKSA8PCA1KTsKKyAgICAvKiAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4u
WiAqLworICAgIC8qIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOSAgICAgICAgICovCit9CisKKy8q
IGZsYWdnZWQoYmNwKSB0ZXN0cyB3aGV0aGVyIGEgYmFzaWMgY29kZSBwb2ludCBpcyBmbGFnZ2Vk
ICovCisvKiAodXBwZXJjYXNlKS4gIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgYmNwIGlz
IG5vdCBhICAqLworLyogYmFzaWMgY29kZSBwb2ludC4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBmbGFnZ2VkKGJjcCkgKChwdW55Y29kZV91aW50
KShiY3ApIC0gNjUgPCAyNikKKworLyogZW5jb2RlX2Jhc2ljKGJjcCxmbGFnKSBmb3JjZXMgYSBi
YXNpYyBjb2RlIHBvaW50IHRvIGxvd2VyY2FzZSAqLworLyogaWYgZmxhZyBpcyB6ZXJvLCB1cHBl
cmNhc2UgaWYgZmxhZyBpcyBub256ZXJvLCBhbmQgcmV0dXJucyAgICAqLworLyogdGhlIHJlc3Vs
dGluZyBjb2RlIHBvaW50LiAgVGhlIGNvZGUgcG9pbnQgaXMgdW5jaGFuZ2VkIGlmIGl0ICAqLwor
LyogaXMgY2FzZWxlc3MuICBUaGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGlmIGJjcCBpcyBub3Qg
YSBiYXNpYyAqLworLyogY29kZSBwb2ludC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqLworCitzdGF0aWMgY2hhciBlbmNvZGVfYmFzaWMocHVueWNv
ZGVfdWludCBiY3AsIGludCBmbGFnKQoreworICAgIGJjcCAtPSAoYmNwIC0gOTcgPCAyNikgPDwg
NTsKKyAgICByZXR1cm4gYmNwICsgKCghZmxhZyAmJiAoYmNwIC0gNjUgPCAyNikpIDw8IDUpOwor
fQorCisvKioqIFBsYXRmb3JtLXNwZWNpZmljIGNvbnN0YW50cyAqKiovCisKKy8qIG1heGludCBp
cyB0aGUgbWF4aW11bSB2YWx1ZSBvZiBhIHB1bnljb2RlX3VpbnQgdmFyaWFibGU6ICovCitzdGF0
aWMgY29uc3QgcHVueWNvZGVfdWludCBtYXhpbnQgPSAtMTsKKy8qIEJlY2F1c2UgbWF4aW50IGlz
IHVuc2lnbmVkLCAtMSBiZWNvbWVzIHRoZSBtYXhpbXVtIHZhbHVlLiAqLworCisvKioqIEJpYXMg
YWRhcHRhdGlvbiBmdW5jdGlvbiAqKiovCisKK3N0YXRpYyBwdW55Y29kZV91aW50IGFkYXB0KAor
ICAgIHB1bnljb2RlX3VpbnQgZGVsdGEsIHB1bnljb2RlX3VpbnQgbnVtcG9pbnRzLCBpbnQgZmly
c3R0aW1lICkKK3sKKyAgICBwdW55Y29kZV91aW50IGs7CisKKyAgICBkZWx0YSA9IGZpcnN0dGlt
ZSA/IGRlbHRhIC8gZGFtcCA6IGRlbHRhID4+IDE7CisgICAgLyogZGVsdGEgPj4gMSBpcyBhIGZh
c3RlciB3YXkgb2YgZG9pbmcgZGVsdGEgLyAyICovCisgICAgZGVsdGEgKz0gZGVsdGEgLyBudW1w
b2ludHM7CisKKyAgICBmb3IgKGsgPSAwOyAgZGVsdGEgPiAoKGJhc2UgLSB0bWluKSAqIHRtYXgp
IC8gMjsgIGsgKz0gYmFzZSkKKyAgICAgICAgZGVsdGEgLz0gYmFzZSAtIHRtaW47CisKKyAgICBy
ZXR1cm4gayArIChiYXNlIC0gdG1pbiArIDEpICogZGVsdGEgLyAoZGVsdGEgKyBza2V3KTsKK30K
KworLyoqKiBNYWluIGVuY29kZSBmdW5jdGlvbiAqKiovCisKK2VudW0gcHVueWNvZGVfc3RhdHVz
IHB1bnljb2RlX2VuY29kZSgKKyAgICBwdW55Y29kZV91aW50IGlucHV0X2xlbmd0aCwKKyAgICBj
b25zdCBwdW55Y29kZV91aW50IGlucHV0W10sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciBjYXNl
X2ZsYWdzW10sCisgICAgcHVueWNvZGVfdWludCAqb3V0cHV0X2xlbmd0aCwKKyAgICBjaGFyIG91
dHB1dFtdICkKK3sKKyAgICBwdW55Y29kZV91aW50IG4sIGRlbHRhLCBoLCBiLCBvdXQsIG1heF9v
dXQsIGJpYXMsIGosIG0sIHEsIGssIHQ7CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBzdGF0ZTog
Ki8KKworICAgIG4gPSBpbml0aWFsX247CisgICAgZGVsdGEgPSBvdXQgPSAwOworICAgIG1heF9v
dXQgPSAqb3V0cHV0X2xlbmd0aDsKKyAgICBiaWFzID0gaW5pdGlhbF9iaWFzOworCisgICAgLyog
SGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50czogKi8KKyAgICBmb3IgKGogPSAwOyAgaiA8IGlu
cHV0X2xlbmd0aDsgICsraikgeworICAgICAgICBpZiAoYmFzaWMoaW5wdXRbal0pKSB7CisgICAg
ICAgICAgICBpZiAobWF4X291dCAtIG91dCA8IDIpIHJldHVybiBwdW55Y29kZV9iaWdfb3V0cHV0
OworICAgICAgICAgICAgb3V0cHV0W291dCsrXSA9CisgICAgICAgICAgICAgICAgY2FzZV9mbGFn
cyA/ICBlbmNvZGVfYmFzaWMoaW5wdXRbal0sIGNhc2VfZmxhZ3Nbal0pIDogaW5wdXRbal07Cisg
ICAgICAgIH0KKyAgICAgICAgLyogZWxzZSBpZiAoaW5wdXRbal0gPCBuKSByZXR1cm4gcHVueWNv
ZGVfYmFkX2lucHV0OyAqLworICAgICAgICAvKiAobm90IG5lZWRlZCBmb3IgUHVueWNvZGUgd2l0
aCB1bnNpZ25lZCBjb2RlIHBvaW50cykgKi8KKyAgICB9CisKKyAgICBoID0gYiA9IG91dDsKKwor
ICAgIC8qIGggaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5k
bGVkLCBiIGlzIHRoZSAgKi8KKyAgICAvKiBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMsIGFu
ZCBvdXQgaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzICovCisgICAgLyogdGhhdCBoYXZlIGJl
ZW4gb3V0cHV0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwor
CisgICAgaWYgKGIgPiAwKSBvdXRwdXRbb3V0KytdID0gZGVsaW1pdGVyOworCisgICAgLyogTWFp
biBlbmNvZGluZyBsb29wOiAqLworCisgICAgd2hpbGUgKGggPCBpbnB1dF9sZW5ndGgpIHsKKyAg
ICAgICAgLyogQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuICAgICAqLwor
ICAgICAgICAvKiBoYW5kbGVkIGFscmVhZHkuICBGaW5kIHRoZSBuZXh0IGxhcmdlciBvbmU6ICov
CisKKyAgICAgICAgZm9yIChtID0gbWF4aW50LCBqID0gMDsgIGogPCBpbnB1dF9sZW5ndGg7ICAr
K2opIHsKKyAgICAgICAgICAgIC8qIGlmIChiYXNpYyhpbnB1dFtqXSkpIGNvbnRpbnVlOyAqLwor
ICAgICAgICAgICAgLyogKG5vdCBuZWVkZWQgZm9yIFB1bnljb2RlKSAqLworICAgICAgICAgICAg
aWYgKGlucHV0W2pdID49IG4gJiYgaW5wdXRbal0gPCBtKSBtID0gaW5wdXRbal07CisgICAgICAg
IH0KKworICAgICAgICAvKiBJbmNyZWFzZSBkZWx0YSBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVj
b2RlcidzICAgICovCisgICAgICAgIC8qIDxuLGk+IHN0YXRlIHRvIDxtLDA+LCBidXQgZ3VhcmQg
YWdhaW5zdCBvdmVyZmxvdzogKi8KKworICAgICAgICBpZiAobSAtIG4gPiAobWF4aW50IC0gZGVs
dGEpIC8gKGggKyAxKSkgcmV0dXJuIHB1bnljb2RlX292ZXJmbG93OworICAgICAgICBkZWx0YSAr
PSAobSAtIG4pICogKGggKyAxKTsKKyAgICAgICAgbiA9IG07CisKKyAgICAgICAgZm9yIChqID0g
MDsgIGogPCBpbnB1dF9sZW5ndGg7ICArK2opIHsKKyAgICAgICAgICAgIC8qIFB1bnljb2RlIGRv
ZXMgbm90IG5lZWQgdG8gY2hlY2sgd2hldGhlciBpbnB1dFtqXSBpcyBiYXNpYzogKi8KKyAgICAg
ICAgICAgIGlmIChpbnB1dFtqXSA8IG4gLyogfHwgYmFzaWMoaW5wdXRbal0pICovICkKKyAgICAg
ICAgICAgICAgICBpZiAoKytkZWx0YSA9PSAwKSByZXR1cm4gcHVueWNvZGVfb3ZlcmZsb3c7CisK
KyAgICAgICAgICAgIGlmIChpbnB1dFtqXSA9PSBuKSB7CisgICAgICAgICAgICAgICAgLyogUmVw
cmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXI6ICov
CisKKyAgICAgICAgICAgICAgICBmb3IgKHEgPSBkZWx0YSwgayA9IGJhc2U7ICA7ICBrICs9IGJh
c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG91dCA+PSBtYXhfb3V0KSByZXR1cm4gcHVu
eWNvZGVfYmlnX291dHB1dDsKKyAgICAgICAgICAgICAgICAgICAgdCA9IGsgPD0gYmlhcyAvKiAr
IHRtaW4gKi8gPyB0bWluIDogICAgIC8qICt0bWluIG5vdCBuZWVkZWQgKi8KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGsgPj0gYmlhcyArIHRtYXggPyB0bWF4IDogayAtIGJpYXM7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChxIDwgdCkgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIG91dHB1
dFtvdXQrK10gPSBlbmNvZGVfZGlnaXQodCArIChxIC0gdCkgJSAoYmFzZSAtIHQpLCAwKTsKKyAg
ICAgICAgICAgICAgICAgICAgcSA9IChxIC0gdCkgLyAoYmFzZSAtIHQpOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIG91dHB1dFtvdXQrK10gPSBlbmNvZGVfZGlnaXQocSwg
Y2FzZV9mbGFncyAmJiBjYXNlX2ZsYWdzW2pdKTsKKyAgICAgICAgICAgICAgICBiaWFzID0gYWRh
cHQoZGVsdGEsIGggKyAxLCBoID09IGIpOworICAgICAgICAgICAgICAgIGRlbHRhID0gMDsKKyAg
ICAgICAgICAgICAgICArK2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAr
K2RlbHRhLCArK247CisgICAgfQorCisgICAgKm91dHB1dF9sZW5ndGggPSBvdXQ7CisgICAgcmV0
dXJuIHB1bnljb2RlX3N1Y2Nlc3M7Cit9CisKKy8qKiogTWFpbiBkZWNvZGUgZnVuY3Rpb24gKioq
LworCitlbnVtIHB1bnljb2RlX3N0YXR1cyBwdW55Y29kZV9kZWNvZGUoCisgICAgcHVueWNvZGVf
dWludCBpbnB1dF9sZW5ndGgsCisgICAgY29uc3QgY2hhciBpbnB1dFtdLAorICAgIHB1bnljb2Rl
X3VpbnQgKm91dHB1dF9sZW5ndGgsCisgICAgcHVueWNvZGVfdWludCBvdXRwdXRbXSwKKyAgICB1
bnNpZ25lZCBjaGFyIGNhc2VfZmxhZ3NbXSApCit7CisgICAgcHVueWNvZGVfdWludCBuLCBvdXQs
IGksIG1heF9vdXQsIGJpYXMsCisgICAgICAgICAgICAgICAgICAgIGIsIGosIGluLCBvbGRpLCB3
LCBrLCBkaWdpdCwgdDsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIHN0YXRlOiAqLworCisgICAg
biA9IGluaXRpYWxfbjsKKyAgICBvdXQgPSBpID0gMDsKKyAgICBtYXhfb3V0ID0gKm91dHB1dF9s
ZW5ndGg7CisgICAgYmlhcyA9IGluaXRpYWxfYmlhczsKKworICAgIC8qIEhhbmRsZSB0aGUgYmFz
aWMgY29kZSBwb2ludHM6ICBMZXQgYiBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGUgKi8KKyAg
ICAvKiBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgMCBpZiB0aGVyZSBpcyBu
b25lLCB0aGVuICAgICovCisgICAgLyogY29weSB0aGUgZmlyc3QgYiBjb2RlIHBvaW50cyB0byB0
aGUgb3V0cHV0LiAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgZm9yIChiID0gaiA9IDA7
ICBqIDwgaW5wdXRfbGVuZ3RoOyAgKytqKSBpZiAoZGVsaW0oaW5wdXRbal0pKSBiID0gajsKKyAg
ICBpZiAoYiA+IG1heF9vdXQpIHJldHVybiBwdW55Y29kZV9iaWdfb3V0cHV0OworCisgICAgZm9y
IChqID0gMDsgIGogPCBiOyAgKytqKSB7CisgICAgICAgIGlmIChjYXNlX2ZsYWdzKSBjYXNlX2Zs
YWdzW291dF0gPSBmbGFnZ2VkKGlucHV0W2pdKTsKKyAgICAgICAgaWYgKCFiYXNpYyhpbnB1dFtq
XSkpIHJldHVybiBwdW55Y29kZV9iYWRfaW5wdXQ7CisgICAgICAgIG91dHB1dFtvdXQrK10gPSBp
bnB1dFtqXTsKKyAgICB9CisKKyAgICAvKiBNYWluIGRlY29kaW5nIGxvb3A6ICBTdGFydCBqdXN0
IGFmdGVyIHRoZSBsYXN0IGRlbGltaXRlciBpZiBhbnkgICovCisgICAgLyogYmFzaWMgY29kZSBw
b2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLiAqLwor
CisgICAgZm9yIChpbiA9IGIgPiAwID8gYiArIDEgOiAwOyAgaW4gPCBpbnB1dF9sZW5ndGg7ICAr
K291dCkgeworCisgICAgICAgIC8qIGluIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBjaGFyYWN0
ZXIgdG8gYmUgY29uc3VtZWQsIGFuZCAqLworICAgICAgICAvKiBvdXQgaXMgdGhlIG51bWJlciBv
ZiBjb2RlIHBvaW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LiAgICAgKi8KKworICAgICAgICAvKiBE
ZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGRlbHRhLCAg
Ki8KKyAgICAgICAgLyogd2hpY2ggZ2V0cyBhZGRlZCB0byBpLiAgVGhlIG92ZXJmbG93IGNoZWNr
aW5nIGlzIGVhc2llciAgICovCisgICAgICAgIC8qIGlmIHdlIGluY3JlYXNlIGkgYXMgd2UgZ28s
IHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZyAqLworICAgICAgICAvKiB2YWx1ZSBhdCB0
aGUgZW5kIHRvIG9idGFpbiBkZWx0YS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAg
ICAgICBmb3IgKG9sZGkgPSBpLCB3ID0gMSwgayA9IGJhc2U7ICA7ICBrICs9IGJhc2UpIHsKKyAg
ICAgICAgICAgIGlmIChpbiA+PSBpbnB1dF9sZW5ndGgpIHJldHVybiBwdW55Y29kZV9iYWRfaW5w
dXQ7CisgICAgICAgICAgICBkaWdpdCA9IGRlY29kZV9kaWdpdChpbnB1dFtpbisrXSk7CisgICAg
ICAgICAgICBpZiAoZGlnaXQgPj0gYmFzZSkgcmV0dXJuIHB1bnljb2RlX2JhZF9pbnB1dDsKKyAg
ICAgICAgICAgIGlmIChkaWdpdCA+IChtYXhpbnQgLSBpKSAvIHcpIHJldHVybiBwdW55Y29kZV9v
dmVyZmxvdzsKKyAgICAgICAgICAgIGkgKz0gZGlnaXQgKiB3OworICAgICAgICAgICAgdCA9IGsg
PD0gYmlhcyAvKiArIHRtaW4gKi8gPyB0bWluIDogICAgIC8qICt0bWluIG5vdCBuZWVkZWQgKi8K
KyAgICAgICAgICAgICAgICBrID49IGJpYXMgKyB0bWF4ID8gdG1heCA6IGsgLSBiaWFzOworICAg
ICAgICAgICAgaWYgKGRpZ2l0IDwgdCkgYnJlYWs7CisgICAgICAgICAgICBpZiAodyA+IG1heGlu
dCAvIChiYXNlIC0gdCkpIHJldHVybiBwdW55Y29kZV9vdmVyZmxvdzsKKyAgICAgICAgICAgIHcg
Kj0gKGJhc2UgLSB0KTsKKyAgICAgICAgfQorCisgICAgICAgIGJpYXMgPSBhZGFwdChpIC0gb2xk
aSwgb3V0ICsgMSwgb2xkaSA9PSAwKTsKKworICAgICAgICAvKiBpIHdhcyBzdXBwb3NlZCB0byB3
cmFwIGFyb3VuZCBmcm9tIG91dCsxIHRvIDAsICAgKi8KKyAgICAgICAgLyogaW5jcmVtZW50aW5n
IG4gZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6ICovCisKKyAgICAgICAgaWYgKGkg
LyAob3V0ICsgMSkgPiBtYXhpbnQgLSBuKSByZXR1cm4gcHVueWNvZGVfb3ZlcmZsb3c7CisgICAg
ICAgIG4gKz0gaSAvIChvdXQgKyAxKTsKKyAgICAgICAgaSAlPSAob3V0ICsgMSk7CisKKyAgICAg
ICAgLyogSW5zZXJ0IG4gYXQgcG9zaXRpb24gaSBvZiB0aGUgb3V0cHV0OiAqLworCisgICAgICAg
IC8qIG5vdCBuZWVkZWQgZm9yIFB1bnljb2RlOiAqLworICAgICAgICAvKiBpZiAoZGVjb2RlX2Rp
Z2l0KG4pIDw9IGJhc2UpIHJldHVybiBwdW55Y29kZV9pbnZhbGlkX2lucHV0OyAqLworICAgICAg
ICBpZiAob3V0ID49IG1heF9vdXQpIHJldHVybiBwdW55Y29kZV9iaWdfb3V0cHV0OworCisgICAg
ICAgIGlmIChjYXNlX2ZsYWdzKSB7CisgICAgICAgICAgICBtZW1tb3ZlKGNhc2VfZmxhZ3MgKyBp
ICsgMSwgY2FzZV9mbGFncyArIGksIG91dCAtIGkpOworICAgICAgICAgICAgLyogQ2FzZSBvZiBs
YXN0IGNoYXJhY3RlciBkZXRlcm1pbmVzIHVwcGVyY2FzZSBmbGFnOiAqLworICAgICAgICAgICAg
Y2FzZV9mbGFnc1tpXSA9IGZsYWdnZWQoaW5wdXRbaW4gLSAxXSk7CisgICAgICAgIH0KKworICAg
ICAgICBtZW1tb3ZlKG91dHB1dCArIGkgKyAxLCBvdXRwdXQgKyBpLCAob3V0IC0gaSkgKiBzaXpl
b2YgKm91dHB1dCk7CisgICAgICAgIG91dHB1dFtpKytdID0gbjsKKyAgICB9CisKKyAgICAqb3V0
cHV0X2xlbmd0aCA9IG91dDsKKyAgICByZXR1cm4gcHVueWNvZGVfc3VjY2VzczsKK30KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9wdW55Y29kZS5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL3B1bnljb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNTEyYmNjMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay93aW5jZS9wdW55Y29kZS5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaSB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBwdW55Y29kZV9oCisjZGVm
aW5lIHB1bnljb2RlX2gKKworLyoKK3B1bnljb2RlLmMgZnJvbSBSRkMgMzQ5MgoraHR0cDovL3d3
dy5uaWNlbWljZS5uZXQvaWRuLworQWRhbSBNLiBDb3N0ZWxsbworaHR0cDovL3d3dy5uaWNlbWlj
ZS5uZXQvYW1jLworCitUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpIGltcGxlbWVudGluZyBQdW55
Y29kZSAoUkZDIDM0OTIpLgorCisqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUHVibGljIGludGVyZmFjZSAod291
bGQgbm9ybWFsbHkgZ28gaW4gaXRzIG93biAuaCBmaWxlKTogKi8KKworI2luY2x1ZGUgPGxpbWl0
cy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2VudW0g
cHVueWNvZGVfc3RhdHVzIHsKKyAgICBwdW55Y29kZV9zdWNjZXNzLAorICAgIHB1bnljb2RlX2Jh
ZF9pbnB1dCwgICAvKiBJbnB1dCBpcyBpbnZhbGlkLiAgICAgICAgICAgICAgICAgICAgICAgKi8K
KyAgICBwdW55Y29kZV9iaWdfb3V0cHV0LCAgLyogT3V0cHV0IHdvdWxkIGV4Y2VlZCB0aGUgc3Bh
Y2UgcHJvdmlkZWQuICovCisgICAgcHVueWNvZGVfb3ZlcmZsb3cgICAgIC8qIElucHV0IG5lZWRz
IHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MuICAqLworfTsKKworI2lmIFVJTlRfTUFYID49ICgx
IDw8IDI2KSAtIDEKK3R5cGVkZWYgdW5zaWduZWQgaW50IHB1bnljb2RlX3VpbnQ7CisjZWxzZQor
dHlwZWRlZiB1bnNpZ25lZCBsb25nIHB1bnljb2RlX3VpbnQ7CisjZW5kaWYKKworZW51bSBwdW55
Y29kZV9zdGF0dXMgcHVueWNvZGVfZW5jb2RlKAorICAgIHB1bnljb2RlX3VpbnQgaW5wdXRfbGVu
Z3RoLAorICAgIGNvbnN0IHB1bnljb2RlX3VpbnQgaW5wdXRbXSwKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyIGNhc2VfZmxhZ3NbXSwKKyAgICBwdW55Y29kZV91aW50ICpvdXRwdXRfbGVuZ3RoLAor
ICAgIGNoYXIgb3V0cHV0W10pOworCisgICAgLyogcHVueWNvZGVfZW5jb2RlKCkgY29udmVydHMg
VW5pY29kZSB0byBQdW55Y29kZS4gIFRoZSBpbnB1dCAgICAgKi8KKyAgICAvKiBpcyByZXByZXNl
bnRlZCBhcyBhbiBhcnJheSBvZiBVbmljb2RlIGNvZGUgcG9pbnRzIChub3QgY29kZSAgICAqLwor
ICAgIC8qIHVuaXRzOyBzdXJyb2dhdGUgcGFpcnMgYXJlIG5vdCBhbGxvd2VkKSwgYW5kIHRoZSBv
dXRwdXQgICAgICAgICovCisgICAgLyogd2lsbCBiZSByZXByZXNlbnRlZCBhcyBhbiBhcnJheSBv
ZiBBU0NJSSBjb2RlIHBvaW50cy4gIFRoZSAgICAgKi8KKyAgICAvKiBvdXRwdXQgc3RyaW5nIGlz
ICpub3QqIG51bGwtdGVybWluYXRlZDsgaXQgd2lsbCBjb250YWluICAgICAgICAqLworICAgIC8q
IHplcm9zIGlmIGFuZCBvbmx5IGlmIHRoZSBpbnB1dCBjb250YWlucyB6ZXJvcy4gIChPZiBjb3Vy
c2UgICAgICovCisgICAgLyogdGhlIGNhbGxlciBjYW4gbGVhdmUgcm9vbSBmb3IgYSB0ZXJtaW5h
dG9yIGFuZCBhZGQgb25lIGlmICAgICAgKi8KKyAgICAvKiBuZWVkZWQuKSAgVGhlIGlucHV0X2xl
bmd0aCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluICAgICAqLworICAgIC8qIHRoZSBp
bnB1dC4gIFRoZSBvdXRwdXRfbGVuZ3RoIGlzIGFuIGluL291dCBhcmd1bWVudDogdGhlICAgICAg
ICovCisgICAgLyogY2FsbGVyIHBhc3NlcyBpbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29kZSBw
b2ludHMgdGhhdCBpdCAgICAgKi8KKyAgICAvKiBjYW4gcmVjZWl2ZSwgYW5kIG9uIHN1Y2Nlc3Nm
dWwgcmV0dXJuIGl0IHdpbGwgY29udGFpbiB0aGUgICAgICAqLworICAgIC8qIG51bWJlciBvZiBj
b2RlIHBvaW50cyBhY3R1YWxseSBvdXRwdXQuICBUaGUgY2FzZV9mbGFncyBhcnJheSAgICovCisg
ICAgLyogaG9sZHMgaW5wdXRfbGVuZ3RoIGJvb2xlYW4gdmFsdWVzLCB3aGVyZSBub256ZXJvIHN1
Z2dlc3RzIHRoYXQgKi8KKyAgICAvKiB0aGUgY29ycmVzcG9uZGluZyBVbmljb2RlIGNoYXJhY3Rl
ciBiZSBmb3JjZWQgdG8gdXBwZXJjYXNlICAgICAqLworICAgIC8qIGFmdGVyIGJlaW5nIGRlY29k
ZWQgKGlmIHBvc3NpYmxlKSwgYW5kIHplcm8gc3VnZ2VzdHMgdGhhdCAgICAgICovCisgICAgLyog
aXQgYmUgZm9yY2VkIHRvIGxvd2VyY2FzZSAoaWYgcG9zc2libGUpLiAgQVNDSUkgY29kZSBwb2lu
dHMgICAgKi8KKyAgICAvKiBhcmUgZW5jb2RlZCBsaXRlcmFsbHksIGV4Y2VwdCB0aGF0IEFTQ0lJ
IGxldHRlcnMgYXJlIGZvcmNlZCAgICAqLworICAgIC8qIHRvIHVwcGVyY2FzZSBvciBsb3dlcmNh
c2UgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nICAgICAgICovCisgICAgLyogdXBwZXJj
YXNlIGZsYWdzLiAgSWYgY2FzZV9mbGFncyBpcyBhIG51bGwgcG9pbnRlciB0aGVuIEFTQ0lJICAg
Ki8KKyAgICAvKiBsZXR0ZXJzIGFyZSBsZWZ0IGFzIHRoZXkgYXJlLCBhbmQgb3RoZXIgY29kZSBw
b2ludHMgYXJlICAgICAgICAqLworICAgIC8qIHRyZWF0ZWQgYXMgaWYgdGhlaXIgdXBwZXJjYXNl
IGZsYWdzIHdlcmUgemVyby4gIFRoZSByZXR1cm4gICAgICovCisgICAgLyogdmFsdWUgY2FuIGJl
IGFueSBvZiB0aGUgcHVueWNvZGVfc3RhdHVzIHZhbHVlcyBkZWZpbmVkIGFib3ZlICAgKi8KKyAg
ICAvKiBleGNlcHQgcHVueWNvZGVfYmFkX2lucHV0OyBpZiBub3QgcHVueWNvZGVfc3VjY2Vzcywg
dGhlbiAgICAgICAqLworICAgIC8qIG91dHB1dF9zaXplIGFuZCBvdXRwdXQgbWlnaHQgY29udGFp
biBnYXJiYWdlLiAgICAgICAgICAgICAgICAgICovCisKK2VudW0gcHVueWNvZGVfc3RhdHVzIHB1
bnljb2RlX2RlY29kZSgKKyAgICBwdW55Y29kZV91aW50IGlucHV0X2xlbmd0aCwKKyAgICBjb25z
dCBjaGFyIGlucHV0W10sCisgICAgcHVueWNvZGVfdWludCAqb3V0cHV0X2xlbmd0aCwKKyAgICBw
dW55Y29kZV91aW50IG91dHB1dFtdLAorICAgIHVuc2lnbmVkIGNoYXIgY2FzZV9mbGFnc1tdKTsK
KworICAgIC8qIHB1bnljb2RlX2RlY29kZSgpIGNvbnZlcnRzIFB1bnljb2RlIHRvIFVuaWNvZGUu
ICBUaGUgaW5wdXQgaXMgICovCisgICAgLyogcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgb2YgQVND
SUkgY29kZSBwb2ludHMsIGFuZCB0aGUgb3V0cHV0ICAgKi8KKyAgICAvKiB3aWxsIGJlIHJlcHJl
c2VudGVkIGFzIGFuIGFycmF5IG9mIFVuaWNvZGUgY29kZSBwb2ludHMuICBUaGUgICAqLworICAg
IC8qIGlucHV0X2xlbmd0aCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIHRoZSBpbnB1
dC4gIFRoZSAgICovCisgICAgLyogb3V0cHV0X2xlbmd0aCBpcyBhbiBpbi9vdXQgYXJndW1lbnQ6
IHRoZSBjYWxsZXIgcGFzc2VzIGluICAgICAgKi8KKyAgICAvKiB0aGUgbWF4aW11bSBudW1iZXIg
b2YgY29kZSBwb2ludHMgdGhhdCBpdCBjYW4gcmVjZWl2ZSwgYW5kICAgICAqLworICAgIC8qIG9u
IHN1Y2Nlc3NmdWwgcmV0dXJuIGl0IHdpbGwgY29udGFpbiB0aGUgYWN0dWFsIG51bWJlciBvZiAg
ICAgICovCisgICAgLyogY29kZSBwb2ludHMgb3V0cHV0LiAgVGhlIGNhc2VfZmxhZ3MgYXJyYXkg
bmVlZHMgcm9vbSBmb3IgYXQgICAgKi8KKyAgICAvKiBsZWFzdCBvdXRwdXRfbGVuZ3RoIHZhbHVl
cywgb3IgaXQgY2FuIGJlIGEgbnVsbCBwb2ludGVyIGlmIHRoZSAqLworICAgIC8qIGNhc2UgaW5m
b3JtYXRpb24gaXMgbm90IG5lZWRlZC4gIEEgbm9uemVybyBmbGFnIHN1Z2dlc3RzIHRoYXQgICov
CisgICAgLyogdGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZSBjaGFyYWN0ZXIgYmUgZm9yY2VkIHRv
IHVwcGVyY2FzZSAgICAgKi8KKyAgICAvKiBieSB0aGUgY2FsbGVyIChpZiBwb3NzaWJsZSksIHdo
aWxlIHplcm8gc3VnZ2VzdHMgdGhhdCBpdCBiZSAgICAqLworICAgIC8qIGZvcmNlZCB0byBsb3dl
cmNhc2UgKGlmIHBvc3NpYmxlKS4gIEFTQ0lJIGNvZGUgcG9pbnRzIGFyZSAgICAgICovCisgICAg
Lyogb3V0cHV0IGFscmVhZHkgaW4gdGhlIHByb3BlciBjYXNlLCBidXQgdGhlaXIgZmxhZ3Mgd2ls
bCBiZSBzZXQgKi8KKyAgICAvKiBhcHByb3ByaWF0ZWx5IHNvIHRoYXQgYXBwbHlpbmcgdGhlIGZs
YWdzIHdvdWxkIGJlIGhhcm1sZXNzLiAgICAqLworICAgIC8qIFRoZSByZXR1cm4gdmFsdWUgY2Fu
IGJlIGFueSBvZiB0aGUgcHVueWNvZGVfc3RhdHVzIHZhbHVlcyAgICAgICovCisgICAgLyogZGVm
aW5lZCBhYm92ZTsgaWYgbm90IHB1bnljb2RlX3N1Y2Nlc3MsIHRoZW4gb3V0cHV0X2xlbmd0aCwg
ICAgKi8KKyAgICAvKiBvdXRwdXQsIGFuZCBjYXNlX2ZsYWdzIG1pZ2h0IGNvbnRhaW4gZ2FyYmFn
ZS4gIE9uIHN1Y2Nlc3MsIHRoZSAqLworICAgIC8qIGRlY29kZXIgd2lsbCBuZXZlciBuZWVkIHRv
IHdyaXRlIGFuIG91dHB1dF9sZW5ndGggZ3JlYXRlciB0aGFuICovCisgICAgLyogaW5wdXRfbGVu
Z3RoLCBiZWNhdXNlIG9mIGhvdyB0aGUgZW5jb2RpbmcgaXMgZGVmaW5lZC4gICAgICAgICAgKi8K
KworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIFBVTllDT0RFX0gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33104</attachid>
            <date>2009-07-20 14:18:12 -0700</date>
            <delta_ts>2009-07-20 14:19:59 -0700</delta_ts>
            <desc>fix some coding style conflicts</desc>
            <filename>27376.patch</filename>
            <type>text/plain</type>
            <size>67839</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9BdXRoZW50aWNhdGlv
bkNoYWxsZW5nZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzYWM2
ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9BdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyNpZm5kZWYg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VfaAorI2RlZmluZSBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZV9oCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA6IHB1YmxpYyBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UgeworcHVibGljOgorICAgIEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKCkKKyAgICB7CisgICAgfQorCisgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
Y29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UsIGNvbnN0IENyZWRlbnRpYWwm
IHByb3Bvc2VkQ3JlZGVudGlhbCwgdW5zaWduZWQgcHJldmlvdXNGYWlsdXJlQ291bnQsIGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikK
KyAgICAgICAgOiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UocHJvdGVjdGlvblNwYWNlLCBw
cm9wb3NlZENyZWRlbnRpYWwsIHByZXZpb3VzRmFpbHVyZUNvdW50LCByZXNwb25zZSwgZXJyb3Ip
CisgICAgeworICAgIH0KK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvd2luY2UvTmV0d29ya1N0YXRlTm90aWZpZXJXaW5jZS5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvTmV0d29ya1N0YXRlTm90aWZpZXJXaW5jZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwZDNmZAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9OZXR3b3JrU3RhdGVOb3RpZmll
cldpbmNlLmNwcApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9y
Y2ggTW9iaWxlLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya1N0YXRlTm90aWZpZXIu
aCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDxpcGhscGFwaS5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZiBQTEFURk9STShUT1JDSE1PQklMRSkKKworTmV0d29ya1N0
YXRlTm90aWZpZXI6Ok5ldHdvcmtTdGF0ZU5vdGlmaWVyKCkKKyAgICA6IG1faXNPbkxpbmUoZmFs
c2UpCisgICAgLCBtX25ldHdvcmtTdGF0ZUNoYW5nZWRGdW5jdGlvbigwKQoreworfQorCitOZXR3
b3JrU3RhdGVOb3RpZmllcjo6fk5ldHdvcmtTdGF0ZU5vdGlmaWVyKCkKK3sKK30KKwordm9pZCBO
ZXR3b3JrU3RhdGVOb3RpZmllcjo6c2V0T25MaW5lKGJvb2wgaXNPbkxpbmUpCit7CisgICAgaWYg
KG1faXNPbkxpbmUgPT0gaXNPbkxpbmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzT25MaW5l
ID0gaXNPbkxpbmU7CisgICAgaWYgKG1fbmV0d29ya1N0YXRlQ2hhbmdlZEZ1bmN0aW9uKQorICAg
ICAgICBtX25ldHdvcmtTdGF0ZUNoYW5nZWRGdW5jdGlvbigpOworfQorCisjZWxzZQordm9pZCBO
ZXR3b3JrU3RhdGVOb3RpZmllcjo6dXBkYXRlU3RhdGUoKQoreworICAgIC8vIEFzc3VtZSB0aGF0
IHdlJ3JlIG9ubGluZSB1bnRpbCBwcm92ZW4gb3RoZXJ3aXNlLgorICAgIG1faXNPbkxpbmUgPSB0
cnVlOworICAgIAorICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgRFdPUkQgc2l6ZSA9IDA7
CisKKyAgICBpZiAoOjpHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9VTlNQRUMsIDAsIDAsIDAsICZz
aXplKSAhPSBFUlJPUl9CVUZGRVJfT1ZFUkZMT1cpDQorICAgICAgICByZXR1cm47DQorDQorICAg
IGJ1ZmZlci5yZXNpemUoc2l6ZSk7DQorICAgIFBJUF9BREFQVEVSX0FERFJFU1NFUyBhZGRyZXNz
ZXMgPSByZWludGVycHJldF9jYXN0PFBJUF9BREFQVEVSX0FERFJFU1NFUz4oYnVmZmVyLmRhdGEo
KSk7DQorCisgICAgaWYgKDo6R2V0QWRhcHRlcnNBZGRyZXNzZXMoQUZfVU5TUEVDLCAwLCAwLCBh
ZGRyZXNzZXMsICZzaXplKSAhPSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgIC8vIFdlIGNvdWxk
bid0IGRldGVybWluZSB3aGV0aGVyIHdlJ3JlIG9ubGluZSBvciBub3QsIHNvIGFzc3VtZSB0aGF0
IHdlIGFyZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoOyBhZGRyZXNzZXM7
IGFkZHJlc3NlcyA9IGFkZHJlc3Nlcy0+TmV4dCkgew0KKyAgICAgICAgaWYgKGFkZHJlc3Nlcy0+
SWZUeXBlID09IE1JQl9JRl9UWVBFX0xPT1BCQUNLKQ0KKyAgICAgICAgICAgIGNvbnRpbnVlOw0K
Kw0KKyAgICAgICAgaWYgKGFkZHJlc3Nlcy0+T3BlclN0YXR1cyAhPSBJZk9wZXJTdGF0dXNVcCkN
CisgICAgICAgICAgICBjb250aW51ZTsNCisNCisgICAgICAgIC8vIFdlIGZvdW5kIGFuIGludGVy
ZmFjZSB0aGF0IHdhcyB1cC4NCisgICAgICAgIHJldHVybjsNCisgICAgfQorICAgIAorICAgIC8v
IFdlIGRpZG4ndCBmaW5kIGFueSB2YWxpZCBpbnRlcmZhY2VzLCBzbyB3ZSBtdXN0IGJlIG9mZmxp
bmUuCisgICAgbV9pc09uTGluZSA9IGZhbHNlOworfQorCit2b2lkIE5ldHdvcmtTdGF0ZU5vdGlm
aWVyOjphZGRyZXNzQ2hhbmdlZCgpCit7CisgICAgYm9vbCBvbGRPbkxpbmUgPSBtX2lzT25MaW5l
OworICAgIAorICAgIHVwZGF0ZVN0YXRlKCk7CisKKyAgICBpZiAobV9pc09uTGluZSA9PSBvbGRP
bkxpbmUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX25ldHdvcmtTdGF0ZUNoYW5nZWRG
dW5jdGlvbikKKyAgICAgICAgbV9uZXR3b3JrU3RhdGVDaGFuZ2VkRnVuY3Rpb24oKTsKK30KKwor
dm9pZCBOZXR3b3JrU3RhdGVOb3RpZmllcjo6Y2FsbEFkZHJlc3NDaGFuZ2VkKHZvaWQqIGNvbnRl
eHQpCit7CisgICAgc3RhdGljX2Nhc3Q8TmV0d29ya1N0YXRlTm90aWZpZXIqPihjb250ZXh0KS0+
YWRkcmVzc0NoYW5nZWQoKTsKK30KKwordm9pZCBDQUxMQkFDSyBOZXR3b3JrU3RhdGVOb3RpZmll
cjo6YWRkckNoYW5nZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4gdGltZWRPdXQpCit7
CisgICAgY2FsbE9uTWFpblRocmVhZChjYWxsQWRkcmVzc0NoYW5nZWQsIGNvbnRleHQpOworfQor
Cit2b2lkIE5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpyZWdpc3RlckZvckFkZHJlc3NDaGFuZ2UoKQor
eworICAgIDo6Tm90aWZ5QWRkckNoYW5nZSgmbV9vdmVybGFwcGVkLmhFdmVudCwgMCk7Cit9CisK
K25hbWVzcGFjZSB7CisKK3N0cnVjdCBUaHJlYWREYXRhIHsKKyAgICBOZXR3b3JrU3RhdGVOb3Rp
ZmllciogbV9ub3RpZmllcjsKKyAgICBIQU5ETEUgbV9ldmVudDsKK307CisKK3N0YXRpYyBUaHJl
YWREYXRhIGdfdGhyZWFkRGF0YSA9IHswfTsKK30KKworTmV0d29ya1N0YXRlTm90aWZpZXI6Ok5l
dHdvcmtTdGF0ZU5vdGlmaWVyKCkKKyAgICA6IG1faXNPbkxpbmUoZmFsc2UpCisgICAgLCBtX25l
dHdvcmtTdGF0ZUNoYW5nZWRGdW5jdGlvbigwKQoreworICAgIHVwZGF0ZVN0YXRlKCk7CisKKyAg
ICBtZW1zZXQoJm1fb3ZlcmxhcHBlZCwgMCwgc2l6ZW9mKG1fb3ZlcmxhcHBlZCkpOworCisgICAg
bV9vdmVybGFwcGVkLmhFdmVudCA9IDo6Q3JlYXRlRXZlbnQoMCwgZmFsc2UsIGZhbHNlLCAwKTsK
KworICAgIGdfdGhyZWFkRGF0YS5tX25vdGlmaWVyID0gdGhpczsKKyAgICBnX3RocmVhZERhdGEu
bV9ldmVudCA9IG1fb3ZlcmxhcHBlZC5oRXZlbnQ7CisKKyAgICBtX3dhaXRIYW5kbGUgPSBDcmVh
dGVUaHJlYWQoTlVMTCwgNTEyLCB3YWl0VGhyZWFkUHJvYywgJmdfdGhyZWFkRGF0YSwgU1RBQ0tf
U0laRV9QQVJBTV9JU19BX1JFU0VSVkFUSU9OLCBOVUxMKTsKKyAgICByZWdpc3RlckZvckFkZHJl
c3NDaGFuZ2UoKTsKK30KKworTmV0d29ya1N0YXRlTm90aWZpZXI6On5OZXR3b3JrU3RhdGVOb3Rp
ZmllcigpCit7CisgICAgVGVybWluYXRlVGhyZWFkKG1fd2FpdEhhbmRsZSwgMCk7CisgICAgQ2xv
c2VIYW5kbGUobV93YWl0SGFuZGxlKTsKKyAgICBDbG9zZUhhbmRsZShtX292ZXJsYXBwZWQuaEV2
ZW50KTsKK30KKworRFdPUkQgV0lOQVBJIE5ldHdvcmtTdGF0ZU5vdGlmaWVyOjp3YWl0VGhyZWFk
UHJvYyhMUFZPSUQgbHBQYXJhbWV0ZXIpDQorew0KKyAgICBUaHJlYWREYXRhKiB0aHJlYWREYXRh
ID0gKFRocmVhZERhdGEqKWxwUGFyYW1ldGVyOw0KKw0KKyAgICBmb3IgKDs7KSB7DQorICAgICAg
ICBEV09SRCByZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KHRocmVhZERhdGEtPm1fZXZlbnQs
IElORklOSVRFKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBXQUlUX0ZBSUxFRCkNCisgICAgICAg
ICAgICByZXR1cm4gLTE7DQorICAgICAgICAKKyAgICAgICAgYWRkckNoYW5nZUNhbGxiYWNrKHRo
cmVhZERhdGEtPm1fbm90aWZpZXIsIHJlc3VsdCA9PSBXQUlUX1RJTUVPVVQgPyBUUlVFIDogRkFM
U0UpOw0KKyAgICB9DQorfQ0KKyNlbmRpZgorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvd2luY2UvUmVzb3VyY2VFcnJvci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3dpbmNlL1Jlc291cmNlRXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jYThkMzZiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3dpbmNlL1Jlc291cmNlRXJyb3IuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFJlc291cmNlRXJyb3JfaAorI2RlZmluZSBSZXNvdXJjZUVycm9yX2gKKwor
I2luY2x1ZGUgIlJlc291cmNlRXJyb3JCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUmVzb3VyY2VFcnJvciA6IHB1YmxpYyBSZXNvdXJjZUVycm9yQmFzZQoreworcHVibGlj
OgorICAgIFJlc291cmNlRXJyb3IoKQorICAgIHsKKyAgICB9CisKKyAgICBSZXNvdXJjZUVycm9y
KGNvbnN0IFN0cmluZyYgZG9tYWluLCBpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGZhaWxp
bmdVUkwsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGVzY3JpcHRpb24pCisgICAgICAgIDogUmVz
b3VyY2VFcnJvckJhc2UoZG9tYWluLCBlcnJvckNvZGUsIGZhaWxpbmdVUkwsIGxvY2FsaXplZERl
c2NyaXB0aW9uKQorICAgIHsKKyAgICB9Cit9OworCit9CisKKyNlbmRpZiAvLyBSZXNvdXJjZUVy
cm9yX2hfCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3Vy
Y2VIYW5kbGVXaW5jZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3Vy
Y2VIYW5kbGVXaW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMw
NzQ2NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9S
ZXNvdXJjZUhhbmRsZVdpbmNlLmNwcApAQCAtMCwwICsxLDExMDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKworI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworI2lu
Y2x1ZGUgPHdpbmluZXQuaD4KKyNkZWZpbmUgSU5JVEdVSUQKKyNpbmNsdWRlIDxjb25ubWdyLmg+
CisjaW5jbHVkZSA8Y29ubm1ncl9wcm94eS5oPgorCisjaWZuZGVmIE5ERUJVRworI2RlZmluZSBS
RVNPVVJDRV9MT0FERVJfREVCVUcKKyNlbmRpZgorCitjb25zdCBHVUlEIElJRF9EZXN0TmV0SW50
ZXJuZXQgPSB7IDB4NDM2ZWYxNDQsIDB4YjRmYiwgMHg0ODYzLCB7IDB4YTAsIDB4NDEsIDB4OGYs
IDB4OTAsIDB4NWEsIDB4NjIsIDB4YzUsIDB4NzJ9IH07Citjb25zdCBHVUlEIElJRF9Db25uUHJ2
X0lQcm94eUV4dGVuc2lvbiA9IHsgMHhhZjk2YjBiZCwgMHhhNDgxLCAweDQ4MmMsIHsgMHhhMCwg
MHg5NCwgMHhhOCwgMHg0NCwgMHg4NywgMHg2NywgMHhhMCwgMHhjMCB9IH07CisKK3R5cGVkZWYg
dm9pZCAoKkJ1ZmZlckRlbGV0ZXIpKGNoYXIgKmRhdGEsIGludCBsZW4pOwordHlwZWRlZiBib29s
ICgqRmV0Y2hBYm91dFBhZ2UpKGNvbnN0IHdjaGFyX3QgKmZpbGVOYW1lLCBjaGFyICoqZGF0YSwg
aW50ICpsZW4sIEJ1ZmZlckRlbGV0ZXIqIGRlbGV0ZXIpOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBTdHJpbmcgZ191c2VyQWdlbnRTdHIoIk1vemlsbGEvNS4wIChXaW5kb3dzIE5U
OyBVOyBNb2JpbGU7IGVuKSBBcHBsZVdlYktpdC80MTguOS4xIChLSFRNTCwgbGlrZSBHZWNrbykg
U2FmYXJpLzQxOS4zIFdNNiBJcmlzLzEuMC4wIik7CitzdGF0aWMgaW50IGdfbWF4TnVtV2luSW5l
dEpvYnMgPSA0Oworc3RhdGljIEZldGNoQWJvdXRQYWdlIGZldGNoQWJvdXRQYWdlID0gMDsKK3Zv
aWQgc2V0QWJvdXRQYWdlQ2FsbGJhY2soRmV0Y2hBYm91dFBhZ2UgZmFwKSB7IGZldGNoQWJvdXRQ
YWdlID0gZmFwOyB9Cit2b2lkIHNldFVzZXJBZ2VudFN0cihjb25zdCBTdHJpbmcmIGFnZW50KSB7
IGdfdXNlckFnZW50U3RyID0gYWdlbnQ7IH0KK1N0cmluZyB1c2VyQWdlbnRTdHIoKSB7IHJldHVy
biBnX3VzZXJBZ2VudFN0cjsgfQordm9pZCBzZXRNYXhOdW1XaW5JbmV0Sm9icyhpbnQgbnVtKSB7
IGdfbWF4TnVtV2luSW5ldEpvYnMgPSBudW07IH0KKworLy8gTWVzc2FnZSB0eXBlcyBmb3IgaW50
ZXJuYWwgdXNlIChrZWVwIGluIHN5bmMgd2l0aCBrTWVzc2FnZUhhbmRsZXJzKQorZW51bSB7Cisg
ICAgaGFuZGxlQ3JlYXRlZE1lc3NhZ2UgPSBXTV9VU0VSLAorICAgIHJlcXVlc3RSZWRpcmVjdGVk
TWVzc2FnZSwKKyAgICByZXF1ZXN0Q29tcGxldGVNZXNzYWdlLAorICAgIGNvbm5lY3Rpb25DbG9z
ZWRNZXNzYWdlCit9OworCitjbGFzcyBSZXNvdXJjZUpvYk1hbmFnZXI6IE5vbmNvcHlhYmxlIHsK
K3B1YmxpYzoKKyAgICBIV05EIGh3bmQoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZmVySm9iV2lu
ZG93SGFuZGxlOyB9CisKKyAgICB2b2lkIGluaXRpYWxpemVPZmZTY3JlZW5SZXNvdXJjZUhhbmRs
ZVdpbmRvdygpCisgICAgeworICAgICAgICBpZiAobV90cmFuc2ZlckpvYldpbmRvd0hhbmRsZSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzdGF0aWMgY29uc3QgTFBDV1NUUiBrUmVz
b3VyY2VIYW5kbGVXaW5kb3dDbGFzc05hbWUgPSBMIlJlc291cmNlSGFuZGxlV2luZG93Q2xhc3Mi
OworCisgICAgICAgIFdORENMQVNTIHdjOworICAgICAgICBtZW1zZXQoJndjLCAwLCBzaXplb2Yo
d2MpKTsKKworICAgICAgICB3Yy5scGZuV25kUHJvYyAgICA9IFJlc291cmNlSGFuZGxlV25kUHJv
YzsKKyAgICAgICAgd2MuaEluc3RhbmNlICAgICAgPSBQYWdlOjppbnN0YW5jZUhhbmRsZSgpOwor
ICAgICAgICB3Yy5scHN6Q2xhc3NOYW1lICA9IGtSZXNvdXJjZUhhbmRsZVdpbmRvd0NsYXNzTmFt
ZTsKKyAgICAgICAgUmVnaXN0ZXJDbGFzcygmd2MpOworCisgICAgICAgIG1fdHJhbnNmZXJKb2JX
aW5kb3dIYW5kbGUgPSBDcmVhdGVXaW5kb3coa1Jlc291cmNlSGFuZGxlV2luZG93Q2xhc3NOYW1l
LCAwLCAwLCBDV19VU0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAwLAorICAgICAgICAgICAg
SFdORF9NRVNTQUdFLCAwLCBQYWdlOjppbnN0YW5jZUhhbmRsZSgpLCAwKTsKKyAgICB9CisgICAg
CisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIGZhaWxlZCB0byBvcGVuIFVSTC4KKyAgICBib29sIGFk
ZFRvT3V0c3RhbmRpbmdKb2JzKFJlc291cmNlSGFuZGxlKiBqb2IsIGNvbnN0IFN0cmluZyYgcmVm
ZXJyZXIpCisgICAgeworICAgICAgICBpZiAoIW1fam9iSWRNYXApIHsKKyAgICAgICAgICAgIG1f
am9iSWRNYXAgPSBuZXcgSGFzaE1hcDxpbnQsIFJlc291cmNlSGFuZGxlKj47CisgICAgICAgICAg
ICBtX2RlZmVycmVkSm9icyA9IG5ldyBIYXNoTWFwPGludCwgU3RyaW5nPjsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIHNraXAgb3ZlciAwCisgICAgICAgIGlmICghKyttX3RyYW5zZmVySm9iSWQp
CisgICAgICAgICAgICBtX3RyYW5zZmVySm9iSWQgPSAxOworCisgICAgICAgIG1fam9iSWRNYXAt
PnNldChtX3RyYW5zZmVySm9iSWQsIGpvYik7CisgICAgICAgIGpvYi0+ZC0+bV9qb2JJZCA9IG1f
dHJhbnNmZXJKb2JJZDsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2pvYklkTWFwLT5zaXplKCkg
LSBtX2RlZmVycmVkSm9icy0+c2l6ZSgpID4gZ19tYXhOdW1XaW5JbmV0Sm9icykgeworICAgICAg
ICAgICAgbV9kZWZlcnJlZEpvYnMtPnNldChtX3RyYW5zZmVySm9iSWQsIHJlZmVycmVyKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpvYi0+
b3BlblVybChyZWZlcnJlciwgdHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVGcm9tT3V0
c3RhbmRpbmdKb2JzKGludCBqb2JJZCkKKyAgICB7CisgICAgICAgIGlmICghbV9qb2JJZE1hcCB8
fCAhbV9qb2JJZE1hcC0+Y29udGFpbnMoam9iSWQpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIG1fam9iSWRNYXAtPnJlbW92ZShqb2JJZCk7CisgICAgICAgIG1fZGVmZXJyZWRKb2Jz
LT5yZW1vdmUoam9iSWQpOworCisgICAgICAgIHdoaWxlIChtX2RlZmVycmVkSm9icy0+c2l6ZSgp
ICYmIG1fam9iSWRNYXAtPnNpemUoKSAtIG1fZGVmZXJyZWRKb2JzLT5zaXplKCkgPCBnX21heE51
bVdpbkluZXRKb2JzKSB7CisgICAgICAgICAgICBIYXNoTWFwPGludCwgU3RyaW5nPjo6aXRlcmF0
b3IgYmVnID0gbV9kZWZlcnJlZEpvYnMtPmJlZ2luKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBu
ZXdKb2JJZCA9IGJlZy0+Zmlyc3Q7CisgICAgICAgICAgICBTdHJpbmcgcmVmZXJyZXIgPSBiZWct
PnNlY29uZDsKKyAgICAgICAgICAgIG1fZGVmZXJyZWRKb2JzLT5yZW1vdmUoYmVnKTsKKworICAg
ICAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IG1fam9iSWRNYXAtPmdldChuZXdKb2JJZCk7
CisgICAgICAgICAgICBpZiAoIWpvYi0+b3BlblVybChyZWZlcnJlciwgZmFsc2UpKSB7CisgICAg
ICAgICAgICAgICAgLy8gUmVtb3ZlIGl0IGJlZm9yZSBkZWxldGluZyB0byBhdm9pZCByZWVudGVy
aW5nIHRoaXMgbG9vcAorICAgICAgICAgICAgICAgIG1fam9iSWRNYXAtPnJlbW92ZShuZXdKb2JJ
ZCk7CisgICAgICAgICAgICAgICAgam9iLT5mYWlsKCJGYWlsZWQgdG8gb3BlbiBVUkwiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgcmVuZXdKb2JJZChpbnQg
b2xkSm9iSWQpCisgICAgeworICAgICAgICBpZiAoIW1fam9iSWRNYXAgfHwgIW1fam9iSWRNYXAt
PmNvbnRhaW5zKG9sZEpvYklkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBpZiAoISsrbV90cmFuc2ZlckpvYklkKQorICAgICAgICAgICAgbV90cmFuc2ZlckpvYklkID0g
MTsKKworICAgICAgICBpZiAobV9kZWZlcnJlZEpvYnMtPmNvbnRhaW5zKG9sZEpvYklkKSkgewor
ICAgICAgICAgICAgbV9kZWZlcnJlZEpvYnMtPnNldChtX3RyYW5zZmVySm9iSWQsIG1fZGVmZXJy
ZWRKb2JzLT5nZXQob2xkSm9iSWQpKTsKKyAgICAgICAgICAgIG1fZGVmZXJyZWRKb2JzLT5yZW1v
dmUob2xkSm9iSWQpOworICAgICAgICB9CisKKyAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9
IG1fam9iSWRNYXAtPmdldChvbGRKb2JJZCk7CisgICAgICAgIGpvYi0+ZC0+bV9qb2JJZCA9IG1f
dHJhbnNmZXJKb2JJZDsKKworICAgICAgICBtX2pvYklkTWFwLT5zZXQobV90cmFuc2ZlckpvYklk
LCBqb2IpOworICAgICAgICBtX2pvYklkTWFwLT5yZW1vdmUob2xkSm9iSWQpOworCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIFJlc291cmNlSGFuZGxlKiBsb29rdXBSZXNvdXJj
ZUhhbmRsZShpbnQgam9iSWQpCisgICAgeworICAgICAgICBpZiAoIW1fam9iSWRNYXApCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fam9iSWRNYXAtPmdldChqb2JJZCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBSZXNvdXJjZUpvYk1hbmFnZXIqIGpvYk1h
bmFnZXIoKTsKKworICAgIFJlc291cmNlSm9iTWFuYWdlcigpCisgICAgICAgIDogbV90cmFuc2Zl
ckpvYklkKDApCisgICAgICAgICwgbV9qb2JJZE1hcCgwKQorICAgICAgICAsIG1fdHJhbnNmZXJK
b2JXaW5kb3dIYW5kbGUoMCkKKyAgICAgICAgLCBtX2RlZmVycmVkSm9icygwKQorICAgIHsKKyAg
ICB9CisKKyAgICB+UmVzb3VyY2VKb2JNYW5hZ2VyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3Ry
YW5zZmVySm9iV2luZG93SGFuZGxlKQorICAgICAgICAgICAgRGVzdHJveVdpbmRvdyhtX3RyYW5z
ZmVySm9iV2luZG93SGFuZGxlKTsKKworICAgICAgICBpZiAobV9qb2JJZE1hcCkgeworICAgICAg
ICAgICAgd2hpbGUgKCFtX2pvYklkTWFwLT5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZGVs
ZXRlIG1fam9iSWRNYXAtPmJlZ2luKCktPnNlY29uZDsKKworICAgICAgICAgICAgZGVsZXRlIG1f
am9iSWRNYXA7CisgICAgICAgICAgICBkZWxldGUgbV9kZWZlcnJlZEpvYnM7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBSZXNvdXJjZUhhbmRsZVduZFBy
b2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOworCisg
ICAgdW5zaWduZWQgbV90cmFuc2ZlckpvYklkOworICAgIEhhc2hNYXA8aW50LCBSZXNvdXJjZUhh
bmRsZSo+KiBtX2pvYklkTWFwOworICAgIEhXTkQgbV90cmFuc2ZlckpvYldpbmRvd0hhbmRsZTsK
KyAgICBIYXNoTWFwPGludCwgU3RyaW5nPiogbV9kZWZlcnJlZEpvYnM7Cit9OworCisKK0xSRVNV
TFQgQ0FMTEJBQ0sgUmVzb3VyY2VKb2JNYW5hZ2VyOjpSZXNvdXJjZUhhbmRsZVduZFByb2MoSFdO
RCBoV25kLCBVSU5UIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICB0eXBlZGVm
IHZvaWQgKFJlc291cmNlSGFuZGxlOjogKlJlc291cmNlSGFuZGxlRXZlbnRIYW5kbGVyKShMUEFS
QU0pOworICAgIHN0YXRpYyBjb25zdCBSZXNvdXJjZUhhbmRsZUV2ZW50SGFuZGxlciBtZXNzYWdl
SGFuZGxlcnNbXSA9IHsKKyAgICAgICAgJlJlc291cmNlSGFuZGxlOjpvbkhhbmRsZUNyZWF0ZWQs
CisgICAgICAgICZSZXNvdXJjZUhhbmRsZTo6b25SZXF1ZXN0UmVkaXJlY3RlZCwKKyAgICAgICAg
JlJlc291cmNlSGFuZGxlOjpvblJlcXVlc3RDb21wbGV0ZSwKKyAgICAgICAgJlJlc291cmNlSGFu
ZGxlOjpvbkNvbm5lY3Rpb25DbG9zZWQsCisgICAgfTsKKworICAgIGlmIChtZXNzYWdlID49IFdN
X1VTRVIpIHsKKyAgICAgICAgVUlOVCBpbmRleCA9IG1lc3NhZ2UgLSBXTV9VU0VSOworICAgICAg
ICBpZiAoaW5kZXggPCBfY291bnRvZihtZXNzYWdlSGFuZGxlcnMpKSB7CisgICAgICAgICAgICB1
bnNpZ25lZCBqb2JJZCA9ICh1bnNpZ25lZCkgd1BhcmFtOworICAgICAgICAgICAgUmVzb3VyY2VI
YW5kbGUqIGpvYiA9IGpvYk1hbmFnZXIoKS0+bG9va3VwUmVzb3VyY2VIYW5kbGUoam9iSWQpOwor
ICAgICAgICAgICAgaWYgKGpvYikgeworICAgICAgICAgICAgICAgIEFTU0VSVChqb2ItPmQtPm1f
am9iSWQgPT0gam9iSWQpOworICAgICAgICAgICAgICAgIEFTU0VSVChqb2ItPmQtPm1fdGhyZWFk
SWQgPT0gR2V0Q3VycmVudFRocmVhZElkKCkpOworICAgICAgICAgICAgICAgIChqb2ItPioobWVz
c2FnZUhhbmRsZXJzW2luZGV4XSkpKGxQYXJhbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRGVmV2luZG93UHJvYyho
V25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisKKworc3RhdGljIFJlc291cmNlSm9i
TWFuYWdlciogam9iTWFuYWdlcigpCit7CisgICAgc3RhdGljIFJlc291cmNlSm9iTWFuYWdlciAg
ICBqbTsKKyAgICByZXR1cm4gJmptOworfQorCitjbGFzcyBHbG9iYWxDb25uZWN0aW9uTWFuYWdl
cjogTm9uY29weWFibGUKK3sKK3B1YmxpYzoKKyAgICBHbG9iYWxDb25uZWN0aW9uTWFuYWdlcigp
CisgICAgeworICAgICAgICBtX2hDb25uZWN0aW9uID0gTlVMTDsKKyAgICAgICAgbV9oSW50ZXJu
ZXQgPSBOVUxMOworICAgICAgICBtX3BzelByb3h5ID0gTlVMTDsKKyAgICAgICAgbV9kd0FjY2Vz
c1R5cGUgPSAwOworICAgICAgICBtX2hyID0gU19PSzsgCisKKyAgICAgICAgY29ubmVjdCgpOwor
ICAgIH0KKyAgICB+R2xvYmFsQ29ubmVjdGlvbk1hbmFnZXIoKQorICAgIHsKKyAgICAgICAgaWYg
KG1faEludGVybmV0KQorICAgICAgICAgICAgSW50ZXJuZXRDbG9zZUhhbmRsZShtX2hJbnRlcm5l
dCk7CisgICAgICAgIGlmIChtX2hDb25uZWN0aW9uKQorICAgICAgICAgICAgQ29ubk1nclJlbGVh
c2VDb25uZWN0aW9uKG1faENvbm5lY3Rpb24sIDEpOworICAgIH0KKworICAgIHZvaWQgZXN0YWJs
aXNoQ29ubmVjdGlvbigpCisgICAgeworICAgICAgICBpZiAoIW1faENvbm5lY3Rpb24pIHsKKyAg
ICAgICAgICAgIG1faEludGVybmV0ID0gTlVMTDsKKworICAgICAgICAgICAgQ09OTk1HUl9DT05O
RUNUSU9OSU5GTyBjaSA9IHswfTsKKworICAgICAgICAgICAgY2kuY2JTaXplID0gc2l6ZW9mKENP
Tk5NR1JfQ09OTkVDVElPTklORk8pOyAKKyAgICAgICAgICAgIGNpLmR3UGFyYW1zID0gQ09OTk1H
Ul9QQVJBTV9HVUlEREVTVE5FVDsgCisgICAgICAgICAgICBjaS5kd0ZsYWdzID0gQ09OTk1HUl9G
TEFHX1BST1hZX0hUVFA7IAorICAgICAgICAgICAgY2kuZHdQcmlvcml0eSA9IENPTk5NR1JfUFJJ
T1JJVFlfVVNFUklOVEVSQUNUSVZFOworICAgICAgICAgICAgY2kuYkV4Y2x1c2l2ZSA9IFRSVUU7
CisKKyAgICAgICAgICAgIERXT1JEIGR3SW5kZXggPSAwOworICAgICAgICAgICAgaWYgKFNfT0sg
IT0gQ29ubk1nck1hcFVSTChMImh0dHA6Ly93d3cuaXJpc2Jyb3dzZXIuY29tIiwgJihjaS5ndWlk
RGVzdE5ldCksICZkd0luZGV4KSkKKyAgICAgICAgICAgICAgICBjaS5ndWlkRGVzdE5ldCA9IElJ
RF9EZXN0TmV0SW50ZXJuZXQ7CisKKyAgICAgICAgICAgIERXT1JEIGR3U3RhdHVzID0gMDsKKyAg
ICAgICAgICAgIGlmIChTX09LICE9IENvbm5NZ3JFc3RhYmxpc2hDb25uZWN0aW9uU3luYygmY2ks
ICZtX2hDb25uZWN0aW9uLCAyNTAwMCwgJmR3U3RhdHVzKSkKKyAgICAgICAgICAgICAgICBtX2hD
b25uZWN0aW9uID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgb3BlbkludGVy
bmV0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2hDb25uZWN0aW9uICYmICFtX2hJbnRlcm5ldCkg
eworICAgICAgICAgICAgUFJPWFlfQ09ORklHIHBjUHJveHkgPSB7MH07CisgICAgICAgICAgICBp
ZiAoU19PSyA9PSBDb25uTWdyUHJvdmlkZXJNZXNzYWdlKCBtX2hDb25uZWN0aW9uLCAmSUlEX0Nv
bm5QcnZfSVByb3h5RXh0ZW5zaW9uLCBOVUxMLCAwLCAwLCAoUEJZVEUpJnBjUHJveHksIHNpemVv
ZihwY1Byb3h5KSkpIHsKKyAgICAgICAgICAgICAgICBtX2R3QWNjZXNzVHlwZSA9IElOVEVSTkVU
X09QRU5fVFlQRV9QUk9YWTsKKyAgICAgICAgICAgICAgICBtX3BzelByb3h5ID0gKExQVFNUUikg
TG9jYWxBbGxvYyhMUFRSLCBfY291bnRvZihwY1Byb3h5LnN6UHJveHlTZXJ2ZXIpKTsKKyAgICAg
ICAgICAgICAgICAvLyBNYWtlIHN1cmUgbV9wc3pQcm94eSB3YXMgYWxsb2NhdGVkLgorCisgICAg
ICAgICAgICAgICAgbV9ociA9IFN0cmluZ0NjaENvcHlOKG1fcHN6UHJveHksIF9jb3VudG9mKHBj
UHJveHkuc3pQcm94eVNlcnZlciksIAorICAgICAgICAgICAgICAgICAgICBwY1Byb3h5LnN6UHJv
eHlTZXJ2ZXIsIF9jb3VudG9mKHBjUHJveHkuc3pQcm94eVNlcnZlcikpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2R3QWNjZXNzVHlwZSA9IElOVEVSTkVUX09QRU5f
VFlQRV9ESVJFQ1Q7IC8vIElOVEVSTkVUX09QRU5fVFlQRV9QUkVDT05GSUc7IAorICAgICAgICAg
ICAgICAgIG1fcHN6UHJveHkgPSBOVUxMOworCisgICAgICAgICAgICAgICAgbV9ociA9IFNfT0s7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1faEludGVybmV0ID0gSW50ZXJuZXRPcGVu
CisgICAgICAgICAgICAgICAgKCBnX3VzZXJBZ2VudFN0ci5jaGFyYWN0ZXJzV2l0aE51bGxUZXJt
aW5hdGlvbigpCisgICAgICAgICAgICAgICAgLCBtX2R3QWNjZXNzVHlwZQorICAgICAgICAgICAg
ICAgICwgbV9wc3pQcm94eQorICAgICAgICAgICAgICAgICwgTlVMTAorICAgICAgICAgICAgICAg
ICwgSU5URVJORVRfRkxBR19BU1lOQyk7CisKKyAgICAgICAgICAgIGlmIChtX2hJbnRlcm5ldCkg
eworICAgICAgICAgICAgICAgIGpvYk1hbmFnZXIoKS0+aW5pdGlhbGl6ZU9mZlNjcmVlblJlc291
cmNlSGFuZGxlV2luZG93KCk7CisKKyAgICAgICAgICAgICAgICBJTlRFUk5FVF9TVEFUVVNfQ0FM
TEJBQ0sgY2FsbGJhY2tIYW5kbGUgPSAKKyAgICAgICAgICAgICAgICAgICAgSW50ZXJuZXRTZXRT
dGF0dXNDYWxsYmFjayhtX2hJbnRlcm5ldCwgdHJhbnNmZXJKb2JTdGF0dXNDYWxsYmFjayk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBjb25uZWN0KCkKKyAgICB7
CisgICAgICAgIGVzdGFibGlzaENvbm5lY3Rpb24oKTsKKyAgICAgICAgb3BlbkludGVybmV0KCk7
CisgICAgfQorCisgICAgTFBXU1RSICAgICAgICBtX3BzelByb3h5OworICAgIERXT1JEICAgICAg
ICBtX2R3QWNjZXNzVHlwZTsKKyAgICBIQU5ETEUgICAgICAgIG1faENvbm5lY3Rpb247CisgICAg
SElOVEVSTkVUICAgIG1faEludGVybmV0OworICAgIEhSRVNVTFQgICAgICAgIG1faHI7IAorCitw
cml2YXRlOgorICAgIHN0YXRpYyB2b2lkIF9fc3RkY2FsbCB0cmFuc2ZlckpvYlN0YXR1c0NhbGxi
YWNrKEhJTlRFUk5FVCBpbnRlcm5ldEhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRF9QVFIgam9iSWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgaW50ZXJuZXRTdGF0
dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TFBWT0lEIHN0YXR1c0luZm9ybWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERXT1JEIHN0YXR1c0luZm9ybWF0aW9uTGVuZ3RoKTsKKwor
fTsKKwordm9pZCBfX3N0ZGNhbGwgR2xvYmFsQ29ubmVjdGlvbk1hbmFnZXI6OnRyYW5zZmVySm9i
U3RhdHVzQ2FsbGJhY2soSElOVEVSTkVUIGludGVybmV0SGFuZGxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkRfUFRSIGpvYklkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgaW50ZXJuZXRT
dGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM
UFZPSUQgc3RhdHVzSW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEV09SRCBzdGF0dXNJbmZvcm1hdGlvbkxlbmd0aCkKK3sKKyNpZmRl
ZiBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyAgICBwcmludGYoInN0YXR1cy1jYWxsYmFjazogc3Rh
dHVzPSV1LCBqb2I9JXBcbiIsCisgICAgICAgICAgICAgIGludGVybmV0U3RhdHVzLCBqb2JJZCk7
CisjZW5kaWYKKworICAgIFVJTlQgbXNnOworICAgIExQQVJBTSBsUGFyYW07CisKKyAgICBzd2l0
Y2ggKGludGVybmV0U3RhdHVzKSB7CisgICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfSEFORExFX0NS
RUFURUQ6CisgICAgICAgIC8vIHRlbGwgdGhlIG1haW4gdGhyZWFkIGFib3V0IHRoZSBuZXdseSBj
cmVhdGVkIGhhbmRsZQorICAgICAgICBtc2cgPSBoYW5kbGVDcmVhdGVkTWVzc2FnZTsKKyAgICAg
ICAgbFBhcmFtID0gKExQQVJBTSkgTFBJTlRFUk5FVF9BU1lOQ19SRVNVTFQoc3RhdHVzSW5mb3Jt
YXRpb24pLT5kd1Jlc3VsdDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJTlRFUk5FVF9TVEFU
VVNfUkVRVUVTVF9DT01QTEVURToKKyNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyAgICAg
ICAgcHJpbnRmKCJyZXF1ZXN0LWNvbXBsZXRlOiByZXN1bHQ9JXAsIGVycm9yPSV1XG4iLAorICAg
ICAgICAgICAgTFBJTlRFUk5FVF9BU1lOQ19SRVNVTFQoc3RhdHVzSW5mb3JtYXRpb24pLT5kd1Jl
c3VsdCwKKyAgICAgICAgICAgIExQSU5URVJORVRfQVNZTkNfUkVTVUxUKHN0YXR1c0luZm9ybWF0
aW9uKS0+ZHdFcnJvcik7CisjZW5kaWYKKyAgICAgICAgLy8gdGVsbCB0aGUgbWFpbiB0aHJlYWQg
dGhhdCB0aGUgcmVxdWVzdCBpcyBkb25lCisgICAgICAgIG1zZyA9IHJlcXVlc3RDb21wbGV0ZU1l
c3NhZ2U7CisgICAgICAgIGxQYXJhbSA9IChMUEFSQU0pTFBJTlRFUk5FVF9BU1lOQ19SRVNVTFQo
c3RhdHVzSW5mb3JtYXRpb24pLT5kd0Vycm9yOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElO
VEVSTkVUX1NUQVRVU19SRURJUkVDVDoKKyAgICAgICAgLy8gdGVsbCB0aGUgbWFpbiB0aHJlYWQg
dG8gb2JzZXJ2ZSB0aGlzIHJlZGlyZWN0IChGSVhNRTogd2UgcHJvYmFibHkKKyAgICAgICAgLy8g
bmVlZCB0byBibG9jayB0aGUgcmVkaXJlY3QgYXQgdGhpcyBwb2ludCBzbyB0aGUgYXBwbGljYXRp
b24gY2FuCisgICAgICAgIC8vIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBmb2xsb3cgdGhlIHJl
ZGlyZWN0KQorICAgICAgICBtc2cgPSByZXF1ZXN0UmVkaXJlY3RlZE1lc3NhZ2U7CisgICAgICAg
IGxQYXJhbSA9IChMUEFSQU0pbmV3IFN0cmluZygoVUNoYXIqKXN0YXR1c0luZm9ybWF0aW9uLCBz
dGF0dXNJbmZvcm1hdGlvbkxlbmd0aCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSU5URVJO
RVRfU1RBVFVTX0NPTk5FQ1RJT05fQ0xPU0VEOgorICAgICAgICBtc2cgPSBjb25uZWN0aW9uQ2xv
c2VkTWVzc2FnZTsKKyAgICAgICAgbFBhcmFtID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJTlRFUk5FVF9TVEFUVVNfVVNFUl9JTlBVVF9SRVFVSVJFRDoKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICJVU0VSIElOUFVUIFJFUVVJUkVEXG4iKTsKKyAgICAgICAgLy8gRklYTUU6IHByb21w
dCB0aGUgdXNlciBpZiBuZWNlc3NhcnkKKyAgICAgICAgUmVzdW1lU3VzcGVuZGVkRG93bmxvYWQo
aW50ZXJuZXRIYW5kbGUsIDApOworICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX1NUQVRFX0NIQU5H
RToKKyAgICAgICAgLy8gbWF5IG5lZWQgdG8gY2FsbCBSZXN1bWVTdXNwZW5kZWREb3dubG9hZCBo
ZXJlIGFzIHdlbGwKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UG9zdE1lc3NhZ2Uoam9iTWFuYWdlcigpLT5od25kKCksIG1zZywgKFdQQVJBTSkgam9iSWQsIGxQ
YXJhbSk7Cit9CisKK2NsYXNzIENvbm5lY3Rpb25NYW5hZ2VyOiBOb25jb3B5YWJsZSB7CitwdWJs
aWM6CisgICAgQ29ubmVjdGlvbk1hbmFnZXIoKSAvLywgTFBDV1NUUiB1c2VyQWdlbnRUZXgpCisg
ICAgICAgIDogbV9oVXJsKE5VTEwpCisgICAgICAgICwgbV9oU2VjVXJsKE5VTEwpCisgICAgewor
ICAgICAgICBtX2Nvbm5lY3Rpb24uY29ubmVjdCgpOworICAgIH0KKworICAgIH5Db25uZWN0aW9u
TWFuYWdlcigpCisgICAgeworICAgICAgICBpZiAobV9oU2VjVXJsKQorICAgICAgICAgICAgSW50
ZXJuZXRDbG9zZUhhbmRsZShtX2hTZWNVcmwpOworICAgICAgICBpZiAobV9oVXJsKQorICAgICAg
ICAgICAgSW50ZXJuZXRDbG9zZUhhbmRsZShtX2hVcmwpOworICAgIH0KKworICAgIHN0YXRpYyBI
SU5URVJORVQgaW50ZXJuZXRIYW5kbGUgKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLm1faEludGVy
bmV0OyB9CisgICAgSElOVEVSTkVUIHVybEhhbmRsZSAoKSBjb25zdCB7IHJldHVybiBtX2hVcmw7
IH0KKyAgICBISU5URVJORVQgc2Vjb25kYXJ5VXJsSGFuZGxlICgpIGNvbnN0IHsgcmV0dXJuIG1f
aFNlY1VybDsgfQorCisgICAgdm9pZCBjbG9zZVVybEhhbmRsZSgpCisgICAgeworICAgICAgICBp
ZiAobV9oU2VjVXJsKSB7CisgICAgICAgICAgICBJbnRlcm5ldENsb3NlSGFuZGxlKG1faFNlY1Vy
bCk7CisgICAgICAgICAgICBtX2hTZWNVcmwgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGlm
IChtX2hVcmwpIHsKKyAgICAgICAgICAgIEludGVybmV0Q2xvc2VIYW5kbGUobV9oVXJsKTsKKyAg
ICAgICAgICAgIG1faFVybCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHNl
dFVybEhhbmRsZShISU5URVJORVQgdXJsKSB7IG1faFVybCA9IHVybDsgfQorICAgIHZvaWQgc2V0
U2Vjb25kYXJ5VXJsSGFuZGxlKEhJTlRFUk5FVCB1cmwpIHsgbV9oU2VjVXJsID0gdXJsOyB9CisK
K3ByaXZhdGU6CisKKyAgICBzdGF0aWMgR2xvYmFsQ29ubmVjdGlvbk1hbmFnZXIgbV9jb25uZWN0
aW9uOworICAgIEhJTlRFUk5FVCAgICBtX2hVcmw7CisgICAgSElOVEVSTkVUICAgIG1faFNlY1Vy
bDsKK307CisKK0dsb2JhbENvbm5lY3Rpb25NYW5hZ2VyIENvbm5lY3Rpb25NYW5hZ2VyOjptX2Nv
bm5lY3Rpb247CisKK3N0YXRpYyBTdHJpbmcgaHR0cFF1ZXJ5SW5mbyhISU5URVJORVQgaFJlcXVl
c3QsIERXT1JEIGR3SW5mb0xldmVsKQoreworICAgIERXT1JEIGJ1ZmZlckxlbmd0aCA9IDA7Cisg
ICAgaWYgKEh0dHBRdWVyeUluZm8oaFJlcXVlc3QsIGR3SW5mb0xldmVsLCAwLCAmYnVmZmVyTGVu
Z3RoLCAwKSB8fCBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSICE9IEdldExhc3RFcnJvcigpIHx8
ICFidWZmZXJMZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFVDaGFyKiBi
dWZmZXIgPSBuZXcgVUNoYXJbKGJ1ZmZlckxlbmd0aCArIDEpIC8gMl07CisgICAgaWYgKCFidWZm
ZXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIGlmICghSHR0cFF1ZXJ5SW5mbyho
UmVxdWVzdCwgZHdJbmZvTGV2ZWwsIGJ1ZmZlciwgJmJ1ZmZlckxlbmd0aCwgMCkpIHsKKyAgICAg
ICAgZGVsZXRlW10gYnVmZmVyOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisg
ICAgU3RyaW5nIHJ0bihidWZmZXIsIChidWZmZXJMZW5ndGggKyAxKSAvIDIpOworICAgIGRlbGV0
ZVtdIGJ1ZmZlcjsKKworICAgIHJldHVybiBydG47Cit9CisKK1Jlc291cmNlSGFuZGxlSW50ZXJu
YWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKK3sKKyAgICBpZiAobV9maWxlSGFuZGxlICE9
IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICBDbG9zZUhhbmRsZShtX2ZpbGVIYW5kbGUp
OworCisgICAgZGVsZXRlIG1fY29ubk1ncjsKKyAgICBkZWxldGVbXSBtX2Zvcm1EYXRhU3RyaW5n
OworfQorCitSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKCkKK3sKKyAgICAvLyBDbG9z
ZSB0aGUgaGFuZGxlcyBiZWZvcmUgcmVtb3ZpbmcgdGhlIGpvYgorICAgIGRlbGV0ZSBkLT5tX2Nv
bm5NZ3I7CisgICAgZC0+bV9jb25uTWdyID0gMDsKKworICAgIGlmIChkLT5tX2pvYklkKQorICAg
ICAgICBqb2JNYW5hZ2VyKCktPnJlbW92ZUZyb21PdXRzdGFuZGluZ0pvYnMoZC0+bV9qb2JJZCk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmZpbmlzaCgpCit7CisgICAgaWYgKGNsaWVudCgp
KQorICAgICAgICBjbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKKyAgICBkZWxldGUg
dGhpczsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6ZmFpbChjb25zdCBTdHJpbmcmIGVycm9y
KQoreworICAgIGlmIChjbGllbnQoKSkgeworICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3Bv
bnNlOworICAgICAgICByZXNwb25zZS5zZXRVUkwocmVxdWVzdCgpLnVybCgpKTsKKyAgICAgICAg
cmVzcG9uc2Uuc2V0TWltZVR5cGUoInRleHQvaHRtbCIpOworICAgICAgICByZXNwb25zZS5zZXRU
ZXh0RW5jb2RpbmdOYW1lKCJVVEYtMTYiKTsKKyAgICAgICAgU3RyaW5nIGNvbnRlbnRFcnJvcihM
IjxodG1sPjxib2R5IHdpZHRoPVwiNTBcIj4iKTsKKyAgICAgICAgY29udGVudEVycm9yICs9IGVy
cm9yOworICAgICAgICBjb250ZW50RXJyb3IgKz0gU3RyaW5nKEwiPC9ib2R5PjwvaHRtbD4iKTsK
KyAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCByZXNwb25zZSk7Cisg
ICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0aGlzLCAoY29uc3QgY2hhciopY29udGVu
dEVycm9yLmNoYXJhY3RlcnMoKSwgY29udGVudEVycm9yLmxlbmd0aCgpICogMiwgMCk7CisgICAg
ICAgIGNsaWVudCgpLT5kaWRGYWlsKHRoaXMsIFJlc291cmNlRXJyb3IoIkVycm9yIiwgLTEsIHJl
cXVlc3QoKS51cmwoKS5zdHJpbmcoKSwgZXJyb3IpKTsKKyAgICB9CisgICAgZGVsZXRlIHRoaXM7
Cit9CisKK3N0YXRpYyBpbnQgY2FjaGVGbGFnc0Zvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
c291cmNlUmVxdWVzdCkKK3sKKyAgICBpbnQgZmxhZ3MgPSAwOworICAgIHN3aXRjaCAocmVzb3Vy
Y2VSZXF1ZXN0LmNhY2hlUG9saWN5KCkpIHsKKyAgICAgICAgY2FzZSBSZWxvYWRJZ25vcmluZ0Nh
Y2hlRGF0YToKKyAgICAgICAgICAgIGZsYWdzIHw9IElOVEVSTkVUX0ZMQUdfUkVMT0FEOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmV0dXJuQ2FjaGVEYXRhRWxzZUxvYWQ6Cisg
ICAgICAgICAgICBmbGFncyB8PSBJTlRFUk5FVF9GTEFHX0NBQ0hFX0lGX05FVF9GQUlMOworICAg
ICAgICAgICAgZmxhZ3MgfD0gSU5URVJORVRfRkxBR19GV0RfQkFDSzsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFJldHVybkNhY2hlRGF0YURvbnRMb2FkOgorICAgICAgICAgICAg
ZmxhZ3MgfD0gSU5URVJORVRfRkxBR19GUk9NX0NBQ0hFOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVXNlUHJvdG9jb2xDYWNoZVBvbGljeToKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGZsYWdzIHw9IElOVEVSTkVUX0ZMQUdfQ0FDSEVfSUZfTkVUX0ZBSUw7CisgICAg
ICAgICAgICBmbGFncyB8PSBJTlRFUk5FVF9GTEFHX0hZUEVSTElOSzsKKyAgICAgICAgICAgIGZs
YWdzIHw9IElOVEVSTkVUX0ZMQUdfUkVTWU5DSFJPTklaRTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBmbGFnczsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0
UmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmVzcG9uc2Uuc2V0
VVJMKHJlcXVlc3QoKS51cmwoKSk7CisgICAgaWYgKGQtPm1fY29ubk1ncikgeworICAgICAgICBI
SU5URVJORVQgaGFuZGxlID0gKHJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKSA/IGQt
Pm1fY29ubk1nci0+c2Vjb25kYXJ5VXJsSGFuZGxlKCkgOiBkLT5tX2Nvbm5NZ3ItPnVybEhhbmRs
ZSgpOworICAgICAgICBpZiAoaGFuZGxlICE9IE5VTEwpIHsKKyAgICAgICAgICAgIERXT1JEIGJ1
ZmZlckxlbmd0aCA9IHNpemVvZiBEV09SRDsKKworICAgICAgICAgICAgRFdPUkQgY29udGVudExl
bmd0aDsKKyAgICAgICAgICAgIGlmIChIdHRwUXVlcnlJbmZvKGhhbmRsZSwgSFRUUF9RVUVSWV9D
T05URU5UX0xFTkdUSCwgJmNvbnRlbnRMZW5ndGgsICZidWZmZXJMZW5ndGgsIDApKQorICAgICAg
ICAgICAgICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChzdGF0aWNfY2FzdDxs
b25nIGxvbmcgaW50Pihjb250ZW50TGVuZ3RoKSk7IAorCisgICAgICAgICAgICBEV09SRCBzdGF0
dXNDb2RlID0gMDsKKyAgICAgICAgICAgIGlmIChIdHRwUXVlcnlJbmZvKGhhbmRsZSwgSFRUUF9R
VUVSWV9TVEFUVVNfQ09ERXxIVFRQX1FVRVJZX0ZMQUdfTlVNQkVSLCAmc3RhdHVzQ29kZSwgJmJ1
ZmZlckxlbmd0aCwgMCkpCisgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0Nv
ZGUoc3RhdHVzQ29kZSk7CisKKyAgICAgICAgICAgIFN0cmluZyBjb250ZW50VHlwZSA9IGh0dHBR
dWVyeUluZm8oaGFuZGxlLCBIVFRQX1FVRVJZX0NPTlRFTlRfVFlQRSk7CisgICAgICAgICAgICBp
ZiAoIWNvbnRlbnRUeXBlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNl
dE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpKTsKKyAg
ICAgICAgICAgICAgICByZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0
RnJvbU1lZGlhVHlwZShjb250ZW50VHlwZSkpOworICAgICAgICAgICAgICAgIFN0cmluZyBkaXNw
b3NpdGlvbiA9IGh0dHBRdWVyeUluZm8oaGFuZGxlLCBIVFRQX1FVRVJZX0NPTlRFTlRfRElTUE9T
SVRJT04pOworICAgICAgICAgICAgICAgIGlmICghZGlzcG9zaXRpb24uaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRTdWdnZXN0ZWRGaWxlbmFtZShmaWxlbmFtZUZy
b21IVFRQQ29udGVudERpc3Bvc2l0aW9uKGRpc3Bvc2l0aW9uKSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gZ290IE1JTUUgdHlwZQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFN0cmluZyBwYXRoOwor
ICAgIGlmIChyZXF1ZXN0KCkudXJsKCkuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgcGF0aCA9IHJl
cXVlc3QoKS51cmwoKS5wYXRoKCk7CisgICAgZWxzZQorICAgICAgICBwYXRoID0gcmVxdWVzdCgp
LnVybCgpLnN0cmluZygpOworCisgICAgaW50IHF1ZXJ5UG9zID0gcGF0aC5maW5kKCc/Jyk7Cisg
ICAgaWYgKHF1ZXJ5UG9zID49IDApCisgICAgICAgIHBhdGgucmVtb3ZlKHF1ZXJ5UG9zKTsKKwor
ICAgIGludCBkb3RQb3MgPSBwYXRoLnJldmVyc2VGaW5kKCcuJyk7CisgICAgaW50IHNsYXNoUG9z
ID0gcGF0aC5yZXZlcnNlRmluZCgnLycpOworCisgICAgaWYgKGRvdFBvcyA8IHNsYXNoUG9zIHx8
IGRvdFBvcyA8IDApCisgICAgICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKCJ0ZXh0L2h0bWwiKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgU3RyaW5nIGV4dCA9IHBhdGguc3Vic3RyaW5nKGRvdFBvcyAr
IDEpOworICAgICAgICByZXNwb25zZS5zZXRNaW1lVHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRN
SU1FVHlwZUZvckV4dGVuc2lvbihleHQpKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5k
bGU6Om9uSGFuZGxlQ3JlYXRlZChMUEFSQU0gbFBhcmFtKQoreworICAgIGlmICghY2xpZW50KCkp
IHsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIWQtPm1fY29ubk1nci0+dXJsSGFuZGxlKCkpIHsKKyAgICAgICAgZC0+bV9jb25uTWdyLT5z
ZXRVcmxIYW5kbGUoKEhJTlRFUk5FVClsUGFyYW0pOworCisgICAgICAgIGlmIChyZXF1ZXN0KCku
aHR0cE1ldGhvZCgpID09ICJQT1NUIikgeworICAgICAgICAgICAgLy8gRklYTUU6IFRvbyBsYXRl
IHRvIHNldCByZWZlcnJlciBwcm9wZXJseS4KKyAgICAgICAgICAgIFN0cmluZyB1cmxTdHIgPSBy
ZXF1ZXN0KCkudXJsKCkucGF0aCgpOworICAgICAgICAgICAgaW50IGZyYWdtZW50SW5kZXggPSB1
cmxTdHIuZmluZCgnIycpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50SW5kZXggIT0gLTEpCisg
ICAgICAgICAgICAgICAgdXJsU3RyID0gdXJsU3RyLmxlZnQoZnJhZ21lbnRJbmRleCk7CisgICAg
ICAgICAgICBzdGF0aWMgTFBDV1NUUiBhY2NlcHRbMl09e0wiKi8qIiwgTlVMTH07CisgICAgICAg
ICAgICBpbnQgc2VjdXJlRmxhZyA9IHJlcXVlc3QoKS51cmwoKS5wcm90b2NvbCgpLmxvd2VyKCkg
PT0gImh0dHBzIiA/IElOVEVSTkVUX0ZMQUdfU0VDVVJFIDogMDsKKyAgICAgICAgICAgIEhJTlRF
Uk5FVCB1cmxIYW5kbGUgPSBIdHRwT3BlblJlcXVlc3QoZC0+bV9jb25uTWdyLT51cmxIYW5kbGUo
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM
IlBPU1QiLCB1cmxTdHIuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgMCwgYWNj
ZXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SU5URVJORVRfRkxBR19LRUVQX0NPTk5FQ1RJT04gfCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlRmxhZ3NGb3IocmVxdWVzdCgpKSB8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cmVG
bGFnIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8qIElOVEVSTkVUX0ZMQUdfRk9STVNfU1VCTUlUIHwgKi8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSTkVUX0ZMQUdfSUdOT1JFX1JFRElS
RUNUX1RPX0hUVFBTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElOVEVSTkVUX0ZMQUdfSUdOT1JFX1JFRElSRUNUX1RPX0hUVFAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRFdPUkRfUFRSKWQt
Pm1fam9iSWQpOworICAgICAgICAgICAgaWYgKHVybEhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9W
QUxVRSkgeworICAgICAgICAgICAgICAgIGZhaWwoIkZhaWxlZCB0byBvcGVuIHJlcXVlc3QgZm9y
IFBPU1Qgb3BlcmF0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKCFkLT5tX2Nvbm5NZ3ItPnNlY29uZGFyeVVybEhhbmRsZSgpKSB7CisgICAgICAgIGFzc2Vy
dChyZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7CisgICAgICAgIGQtPm1fY29ubk1n
ci0+c2V0U2Vjb25kYXJ5VXJsSGFuZGxlKChDb25uZWN0aW9uTWFuYWdlciopbFBhcmFtKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChkLT5tX2Zvcm1EYXRhU3RyaW5nKQorICAgICAgICAgICAgLy8g
cmVwb3N0IGZvcm0gZGF0YQorICAgICAgICAgICAgcmVwb3N0KCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgLy8gTmVlZCB0byBhY3R1YWxseSBzZW5kIHRoZSByZXF1ZXN0IG5vdy4KKyAg
ICAgICAgICAgIGQtPm1faGVhZGVycyA9ICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3
LWZvcm0tdXJsZW5jb2RlZFxuIjsKKyAgICAgICAgICAgIGlmICghZC0+bV9wb3N0UmVmZXJyZXIu
aXNFbXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGQtPm1faGVhZGVycyAr
PSAiUmVmZXJlcjogIjsKKyAgICAgICAgICAgICAgICBkLT5tX2hlYWRlcnMgKz0gZC0+bV9wb3N0
UmVmZXJyZXI7CisgICAgICAgICAgICAgICAgZC0+bV9oZWFkZXJzICs9ICJcbiI7CisgICAgICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgU3RyaW5nIGZvcm1EYXRhID0gcmVxdWVzdCgp
Lmh0dHBCb2R5KCktPmZsYXR0ZW5Ub1N0cmluZygpOworICAgICAgICAgICAgSU5URVJORVRfQlVG
RkVSUyBidWZmZXJzOworICAgICAgICAgICAgbWVtc2V0KCZidWZmZXJzLCAwLCBzaXplb2YoYnVm
ZmVycykpOworICAgICAgICAgICAgYnVmZmVycy5kd1N0cnVjdFNpemUgPSBzaXplb2YoYnVmZmVy
cyk7CisgICAgICAgICAgICBidWZmZXJzLmxwY3N6SGVhZGVyID0gZC0+bV9oZWFkZXJzLmNoYXJh
Y3RlcnMoKTsKKyAgICAgICAgICAgIGJ1ZmZlcnMuZHdIZWFkZXJzTGVuZ3RoID0gZC0+bV9oZWFk
ZXJzLmxlbmd0aCgpOworICAgICAgICAgICAgYnVmZmVycy5kd0hlYWRlcnNUb3RhbCA9IGJ1ZmZl
cnMuZHdIZWFkZXJzTGVuZ3RoOworICAgICAgICAgICAgYnVmZmVycy5kd0J1ZmZlclRvdGFsID0g
Zm9ybURhdGEubGVuZ3RoKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChmb3JtRGF0
YS5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGQtPm1fYnl0ZXNSZW1haW5pbmdUb1dyaXRl
ID0gZm9ybURhdGEubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgZC0+bV9mb3JtRGF0YVN0cmlu
ZyA9IG5ldyBjaGFyW2Zvcm1EYXRhLmxlbmd0aCgpICsgMV07CisgICAgICAgICAgICAgICAgZC0+
bV9mb3JtRGF0YUxlbmd0aCA9IGZvcm1EYXRhLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIHN0
cmNweShkLT5tX2Zvcm1EYXRhU3RyaW5nLCBmb3JtRGF0YS5sYXRpbjEoKS5kYXRhKCkpOworICAg
ICAgICAgICAgICAgIGQtPm1fd3JpdGluZyA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGludCBlcnJvcjsKKyAgICAgICAgICAgIGlmICghSHR0cFNlbmRSZXF1ZXN0RXgoZC0+
bV9jb25uTWdyLT5zZWNvbmRhcnlVcmxIYW5kbGUoKSwgJmJ1ZmZlcnMsIDAsIDAsIChEV09SRF9Q
VFIpZC0+bV9qb2JJZCkgJiYgV1NBX0lPX1BFTkRJTkcgIT0gKGVycm9yID0gR2V0TGFzdEVycm9y
KCkpKSB7CisgICAgI2lmZGVmIFJFU09VUkNFX0xPQURFUl9ERUJVRworICAgICAgICAgICAgICAg
IHByaW50ZigiRmFpbGVkIHRvIGFwcGx5IGhlYWRlcnM6ICVkXG4iLCBlcnJvcik7CisgICAgI2Vu
ZGlmCisgICAgICAgICAgICAgICAgaWYgKCFIdHRwU2VuZFJlcXVlc3RFeChkLT5tX2Nvbm5NZ3It
PnNlY29uZGFyeVVybEhhbmRsZSgpLCAwLCAwLCAwLCAoRFdPUkRfUFRSKWQtPm1fam9iSWQpICYm
IFdTQV9JT19QRU5ESU5HICE9IChlcnJvciA9IEdldExhc3RFcnJvcigpKSkgeworICAgICNpZmRl
ZiBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGYWls
ZWQgdG8gcG9zdCBkYXRhOiAlZFxuIiwgZXJyb3IpOworICAgICNlbmRpZgorICAgICAgICAgICAg
ICAgICAgICBmYWlsKCJGYWlsZWQgdG8gc3RhcnQgcG9zdGluZyBkYXRhIik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhNRTogYWRkIHByb3Bl
ciBlcnJvciBoYW5kbGluZworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlc291cmNlSGFu
ZGxlOjpvblJlcXVlc3RSZWRpcmVjdGVkKExQQVJBTSBsUGFyYW0pCit7CisgICAgLy8gSWYgYWxy
ZWFkeSBjYW5jZWxlZCwgdGhlbiBpZ25vcmUgdGhpcyBldmVudC4KKyAgICBTdHJpbmcqIG5ld1Vy
bCA9IChTdHJpbmcqKWxQYXJhbTsKKyAgICAvL01lc3NhZ2VCb3hXKDAsIG5ld1VybC0+Y2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgTCJSZWRpcmVjdCIsIE1CX09LKTsKKyAgICBpZiAo
Y2xpZW50KCkpIHsKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QgPSByZXF1ZXN0
KCk7CisgICAgICAgIG5ld1JlcXVlc3Quc2V0VVJMKEtVUkwoKm5ld1VybCkpOworICAgICAgICBS
ZXNvdXJjZVJlc3BvbnNlIHJlZGlyZWN0UmVzcG9uc2U7CisgICAgICAgIHNldFJlc3BvbnNlKHJl
ZGlyZWN0UmVzcG9uc2UpOworICAgICAgICBjbGllbnQoKS0+d2lsbFNlbmRSZXF1ZXN0KHRoaXMs
IG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworICAgIH0gZWxzZQorICAgICAgICBkZWxl
dGUgdGhpczsKKworICAgIGRlbGV0ZSBuZXdVcmw7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6
Om9uQ29ubmVjdGlvbkNsb3NlZChMUEFSQU0gbFBhcmFtKQoreworICAgIC8vIENvbm5lY3Rpb24g
Y2xvc2VkIHVuZXhwZWN0ZWRseT8gUmVwb3J0IGVycm9yPworICAgIGZhaWwoIkNvbm5lY3Rpb24g
Y2xvc2VkIHVuZXhwZWN0ZWRseSIpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpyZXBvc3Qo
KQoreworICAgIC8vIFBvc3QgZGF0YSBhZ2FpbgorICAgIElOVEVSTkVUX0JVRkZFUlMgYnVmZmVy
czsKKyAgICBtZW1zZXQoJmJ1ZmZlcnMsIDAsIHNpemVvZihidWZmZXJzKSk7CisgICAgYnVmZmVy
cy5kd1N0cnVjdFNpemUgPSBzaXplb2YoYnVmZmVycyk7CisgICAgYnVmZmVycy5scGNzekhlYWRl
ciA9IGQtPm1faGVhZGVycy5jaGFyYWN0ZXJzKCk7CisgICAgYnVmZmVycy5kd0hlYWRlcnNMZW5n
dGggPSBkLT5tX2hlYWRlcnMubGVuZ3RoKCk7CisgICAgYnVmZmVycy5kd0hlYWRlcnNUb3RhbCA9
IGJ1ZmZlcnMuZHdIZWFkZXJzTGVuZ3RoOworICAgIGJ1ZmZlcnMuZHdCdWZmZXJUb3RhbCA9IGQt
Pm1fZm9ybURhdGFMZW5ndGg7CisgICAgCisgICAgZC0+bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUg
PSBkLT5tX2Zvcm1EYXRhTGVuZ3RoOworCisgICAgaW50IGVycm9yOworICAgIGlmICghSHR0cFNl
bmRSZXF1ZXN0RXgoZC0+bV9jb25uTWdyLT5zZWNvbmRhcnlVcmxIYW5kbGUoKSwgJmJ1ZmZlcnMs
IDAsIDAsIChEV09SRF9QVFIpZC0+bV9qb2JJZCkgJiYgV1NBX0lPX1BFTkRJTkcgIT0gKGVycm9y
ID0gR2V0TGFzdEVycm9yKCkpKSB7CisjaWZkZWYgUkVTT1VSQ0VfTE9BREVSX0RFQlVHCisgICAg
ICAgIHByaW50ZigiRmFpbGVkIHRvIGFwcGx5IGhlYWRlcnM6ICVkXG4iLCBlcnJvcik7CisjZW5k
aWYKKyAgICAgICAgaWYgKCFIdHRwU2VuZFJlcXVlc3RFeChkLT5tX2Nvbm5NZ3ItPnNlY29uZGFy
eVVybEhhbmRsZSgpLCAwLCAwLCAwLCAoRFdPUkRfUFRSKWQtPm1fam9iSWQpICYmIFdTQV9JT19Q
RU5ESU5HICE9IChlcnJvciA9IEdldExhc3RFcnJvcigpKSkgeworI2lmZGVmIFJFU09VUkNFX0xP
QURFUl9ERUJVRworICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWQgdG8gcG9zdCBkYXRhOiAlZFxu
IiwgZXJyb3IpOworI2VuZGlmCisgICAgICAgICAgICBmYWlsKCJGYWlsZWQgdG8gc3RhcnQgcmVw
b3N0aW5nIGRhdGEiKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIFN0cmluZyBnZXRX
aW5JbmV0RXJyb3IoRFdPUkQgZXJyKQoreworICAgIEhBTkRMRSBoID0gOjpHZXRNb2R1bGVIYW5k
bGUoTCJ3aW5pbmV0LmRsbCIpOworICAgIGlmIChoICE9IE5VTEwpIHsgCisgICAgICAgIExQVFNU
UiBwOworICAgICAgICBpZig6OkZvcm1hdE1lc3NhZ2UoRk9STUFUX01FU1NBR0VfQUxMT0NBVEVf
QlVGRkVSIHwgRk9STUFUX01FU1NBR0VfRlJPTV9ITU9EVUxFLCAoTFBDVk9JRCloLCBlcnIsIDAs
IChMUFRTVFIpJnAsIDAsIE5VTEwpICE9IDApIHsKKyAgICAgICAgICAgIFN0cmluZyBzKHApOwor
ICAgICAgICAgICAgTG9jYWxGcmVlKHApOworICAgICAgICAgICAgcmV0dXJuIHM7CisgICAgICAg
IH0gCisgICAgfQorCisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5ldCBFcnJvcjog
JWQiLCBlcnIpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpvblJlcXVlc3RDb21wbGV0ZShM
UEFSQU0gbFBhcmFtKQoreworICAgIGlmICghY2xpZW50KCkpIHsKKyAgICAgICAgZGVsZXRlIHRo
aXM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWQtPm1fY29ubk1nci0+dXJs
SGFuZGxlKCkpIHsKKyAgICAgICAgZmFpbCgiVW5leHBlY3RlZCBFcnJvciIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgSElOVEVSTkVUIGhhbmRsZSA9IChyZXF1ZXN0KCkuaHR0cE1l
dGhvZCgpID09ICJQT1NUIikgPyBkLT5tX2Nvbm5NZ3ItPnNlY29uZGFyeVVybEhhbmRsZSgpIDog
ZC0+bV9jb25uTWdyLT51cmxIYW5kbGUoKTsKKworICAgIGlmIChsUGFyYW0gIT0gRVJST1JfU1VD
Q0VTUykgeworICAgICAgICBzd2l0Y2gobFBhcmFtKSB7CisgICAgICAgIGNhc2UgRVJST1JfSU5U
RVJORVRfSU5DT1JSRUNUX1BBU1NXT1JEOgorICAgICAgICBjYXNlIEVSUk9SX0lOVEVSTkVUX0lO
VkFMSURfQ0E6CisgICAgICAgIGNhc2UgRVJST1JfSU5URVJORVRfUE9TVF9JU19OT05fU0VDVVJF
OgorICAgICAgICBjYXNlIEVSUk9SX0lOVEVSTkVUX1NFQ19DRVJUX0NOX0lOVkFMSUQ6IAorICAg
ICAgICBjYXNlIEVSUk9SX0lOVEVSTkVUX1NFQ19DRVJUX0RBVEVfSU5WQUxJRDoKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBEV09SRCBydG4gPSBJbnRlcm5ldEVycm9yRGxnKE5VTEws
IGhhbmRsZSwgbFBhcmFtCisgICAgICAgICAgICAgICAgICAgICwgRkxBR1NfRVJST1JfVUlfRklM
VEVSX0ZPUl9FUlJPUlMgfCBGTEFHU19FUlJPUl9VSV9GTEFHU19DSEFOR0VfT1BUSU9OUywgMCk7
CisgICAgICAgICAgICAgICAgaWYgKHJ0biAhPSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZhaWwoIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCIpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZmFpbChnZXRXaW5J
bmV0RXJyb3IobFBhcmFtKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoZC0+bV93cml0aW5nKSB7CisgICAgICAgIERXT1JEIGJ5dGVzV3JpdHRlbjsK
KyAgICAgICAgaWYgKEludGVybmV0V3JpdGVGaWxlKGQtPm1fY29ubk1nci0+c2Vjb25kYXJ5VXJs
SGFuZGxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGQtPm1fZm9ybURhdGFTdHJpbmcg
KyAoZC0+bV9mb3JtRGF0YUxlbmd0aCAtIGQtPm1fYnl0ZXNSZW1haW5pbmdUb1dyaXRlKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgZC0+bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICZieXRlc1dyaXR0ZW4pKSB7CisgICAgICAgICAgICBkLT5t
X2J5dGVzUmVtYWluaW5nVG9Xcml0ZSAtPSBieXRlc1dyaXR0ZW47CisgICAgICAgICAgICBpZiAo
IWQtPm1fYnl0ZXNSZW1haW5pbmdUb1dyaXRlKSB7CisgICAgICAgICAgICAgICAgLy8gRW5kIHRo
ZSByZXF1ZXN0LgorICAgICAgICAgICAgICAgIEJPT0wgZ29vZCA9IEh0dHBFbmRSZXF1ZXN0KGQt
Pm1fY29ubk1nci0+c2Vjb25kYXJ5VXJsSGFuZGxlKCksIDAsIDAsIChEV09SRF9QVFIpZC0+bV9q
b2JJZCk7CisgICAgICAgICAgICAgICAgaW50IGVycm9yOworICAgICAgICAgICAgICAgIGlmICgh
Z29vZCkgeworICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEdldExhc3RFcnJvcigpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoRVJST1JfSU5URVJORVRfRk9SQ0VfUkVUUlkgPT0gZXJyb3Ip
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zdCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmIChFUlJPUl9JT19QRU5ESU5HID09IGVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBnb29kIGZvciBhc3luYyBmdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgZ29v
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAoZ29vZCkgeworICAgICAgICAgICAgICAgICAgICBkLT5tX3dyaXRp
bmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlW10gZC0+bV9mb3JtRGF0YVN0
cmluZzsKKyAgICAgICAgICAgICAgICAgICAgZC0+bV9mb3JtRGF0YVN0cmluZyA9IDA7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyAgICAg
ICAgICAgICAgICAgICAgcHJpbnRmKCJFbmQgcmVxdWVzdCBlcnJvcjogJWlcbiIsIGVycm9yKTsK
KyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJGYWlsZWQgdG8gZmluaXNoIHBvc3Rp
bmcgZGF0YSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBSRVNPVVJDRV9MT0FERVJf
REVCVUcKKyAgICAgICAgICAgIHByaW50ZigiUG9zdCBlcnJvcjogJWlcbiIsIEdldExhc3RFcnJv
cigpKTsKKyNlbmRpZgorICAgICAgICAgICAgZmFpbCgiRmFpbGVkIHRvIHBvc3QgZGF0YSIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0
IGludCBidWZmZXJTaXplID0gODE5MjsgLy8zMjc2ODsKKworICAgIGNoYXIgYnVmZmVyW2J1ZmZl
clNpemVdOworICAgIElOVEVSTkVUX0JVRkZFUlNBIGJ1ZmZlcnM7CisgICAgYnVmZmVycy5kd1N0
cnVjdFNpemUgPSBzaXplb2YoYnVmZmVycyk7CisgICAgYnVmZmVycy5scHZCdWZmZXIgPSBidWZm
ZXI7CisgICAgYnVmZmVycy5kd0J1ZmZlckxlbmd0aCA9IGJ1ZmZlclNpemU7CisKKyAgICBib29s
IHJlY2VpdmVkQW55RGF0YSA9IGZhbHNlOworICAgIGludCBqb2JJZCA9IGQtPm1fam9iSWQ7CisK
KyAgICBCT09MIG9rID0gSW50ZXJuZXRSZWFkRmlsZUV4QShoYW5kbGUsICZidWZmZXJzLCBJUkZf
Tk9fV0FJVCwgKERXT1JEX1BUUilqb2JJZCk7CisKKyAgICBpZiAob2sgJiYgYnVmZmVycy5kd0J1
ZmZlckxlbmd0aCkgeworICAgICAgICBpZiAoIWhhc1JlY2VpdmVkUmVzcG9uc2UoKSkgeworICAg
ICAgICAgICAgc2V0SGFzUmVjZWl2ZWRSZXNwb25zZSgpOworICAgICAgICAgICAgUmVzb3VyY2VS
ZXNwb25zZSByZXNwb25zZTsKKyAgICAgICAgICAgIHNldFJlc3BvbnNlKHJlc3BvbnNlKTsKKyAg
ICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpOwor
ICAgICAgICAgICAgLy8gSW4gY2FzZSB0aGF0IGl0IGlzIGRlbGV0ZWQgYnkgbGFzdCBjYWxsCisg
ICAgICAgICAgICBpZiAoIWpvYk1hbmFnZXIoKS0+bG9va3VwUmVzb3VyY2VIYW5kbGUoam9iSWQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjbGllbnQoKS0+
ZGlkUmVjZWl2ZURhdGEodGhpcywgYnVmZmVyLCBidWZmZXJzLmR3QnVmZmVyTGVuZ3RoLCAwKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEluIGNhc2UgdGhhdCBpdCBpcyBkZWxldGVkIGJ5IGxhc3Qg
Y2FsbAorICAgICAgICBpZiAoIWpvYk1hbmFnZXIoKS0+bG9va3VwUmVzb3VyY2VIYW5kbGUoam9i
SWQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChidWZmZXJzLmR3QnVmZmVy
TGVuZ3RoKSB7CisgICAgICAgICAgICAvLyBSZWFkIHRoZSByZXN0IGRhdGEgbmV4dCB0aW1lCisg
ICAgICAgICAgICBQb3N0TWVzc2FnZShqb2JNYW5hZ2VyKCktPmh3bmQoKSwgcmVxdWVzdENvbXBs
ZXRlTWVzc2FnZSwgKFdQQVJBTSlqb2JJZCwgbFBhcmFtKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvaykgeworICAgICAgICBmaW5pc2goKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAg
ICBpZiAoZXJyb3IgIT0gRVJST1JfSU9fUEVORElORykgeyAKKyNpZmRlZiBSRVNPVVJDRV9MT0FE
RVJfREVCVUcKKyAgICAgICAgcHJpbnRmKCJMb2FkIGVycm9yOiAlaVxuIiwgZXJyb3IpOyAvLyBm
YWlsPworI2VuZGlmCisgICAgICAgIGZhaWwoIkZhaWxlZCB0byByZWFkIHJlc291cmNlIGRhdGEi
KTsKKyAgICB9Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6Om9wZW5VcmwoY29uc3QgU3RyaW5n
JiByZWZlcnJlciwgYm9vbCBzZWxmRGVsKQoreworICAgIGlmICghY2xpZW50KCkpIHsKKyAgICAg
ICAgaWYgKHNlbGZEZWwpCisgICAgICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBEV09SRCBmbGFncyA9IElOVEVSTkVU
X0ZMQUdfQVNZTkMKKyAgICAgICAgfCBJTlRFUk5FVF9GTEFHX0lHTk9SRV9SRURJUkVDVF9UT19I
VFRQUworICAgICAgICB8IElOVEVSTkVUX0ZMQUdfSUdOT1JFX1JFRElSRUNUX1RPX0hUVFA7CisK
KyAgICAvLyBGb3IgZm9ybSBwb3N0aW5nLCB3ZSBjYW4ndCB1c2UgSW50ZXJuZXRPcGVuVVJMLiAg
V2UgaGF2ZSB0byB1c2UKKyAgICAvLyBJbnRlcm5ldENvbm5lY3QgZm9sbG93ZWQgYnkgSHR0cFNl
bmRSZXF1ZXN0LgorICAgIEhJTlRFUk5FVCB1cmxIYW5kbGU7CisgICAgYm9vbCBzZWN1cmUgPSBy
ZXF1ZXN0KCkudXJsKCkucHJvdG9jb2woKS5sb3dlcigpID09ICJodHRwcyI7CisgICAgaW50IHNl
Y3VyZUZsYWdzID0gc2VjdXJlID8gSU5URVJORVRfRkxBR19TRUNVUkUgOiAwOworICAgIHVuc2ln
bmVkIHNob3J0IHBvcnQgPSByZXF1ZXN0KCkudXJsKCkucG9ydCgpOworICAgIGlmIChwb3J0IDw9
IDApCisgICAgICAgIHBvcnQgPSBzZWN1cmUgPyA0NDMgOiA4MDsKKyAgICBpZiAocmVxdWVzdCgp
Lmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpIHsKKyAgICAgICAgZC0+bV9wb3N0UmVmZXJyZXIgPSBy
ZWZlcnJlcjsKKyAgICAgICAgU3RyaW5nIGhvc3QgPSByZXF1ZXN0KCkudXJsKCkuaG9zdCgpOwor
ICAgICAgICB1cmxIYW5kbGUgPSBJbnRlcm5ldENvbm5lY3QoZC0+bV9jb25uTWdyLT5pbnRlcm5l
dEhhbmRsZSgpLCBob3N0LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOVUxMLCAvLyBubyB1c2VybmFtZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5VTEwsIC8vIG5vIHBhc3N3b3JkCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSU5URVJORVRfU0VSVklDRV9IVFRQLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHwgY2FjaGVGbGFnc0ZvcihyZXF1ZXN0KCkp
IHwgc2VjdXJlRmxhZ3MsIChEV09SRF9QVFIpZC0+bV9qb2JJZCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgU3RyaW5nIHVybFN0ciA9IHJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKTsKKyAgICAgICAg
aW50IGZyYWdtZW50SW5kZXggPSB1cmxTdHIuZmluZCgnIycpOworICAgICAgICBpZiAoZnJhZ21l
bnRJbmRleCAhPSAtMSkKKyAgICAgICAgICAgIHVybFN0ciA9IHVybFN0ci5sZWZ0KGZyYWdtZW50
SW5kZXgpOworICAgICAgICBTdHJpbmcgaGVhZGVyczsKKyAgICAgICAgaWYgKCFyZWZlcnJlci5p
c0VtcHR5KCkpCisgICAgICAgICAgICBoZWFkZXJzICs9IFN0cmluZygiUmVmZXJlcjogIikgKyBy
ZWZlcnJlciArICJcclxuIjsKKworICAgICAgICB1cmxIYW5kbGUgPSBJbnRlcm5ldE9wZW5Vcmwo
ZC0+bV9jb25uTWdyLT5pbnRlcm5ldEhhbmRsZSgpLCB1cmxTdHIuY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFk
ZXJzLmNoYXJhY3RlcnMoKSwgaGVhZGVycy5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbGFncyB8IGNhY2hlRmxhZ3NGb3IocmVxdWVzdCgpKSB8IHNlY3Vy
ZUZsYWdzLCAoRFdPUkRfUFRSKWQtPm1fam9iSWQpOworICAgIH0KKworICAgIGlmICh1cmxIYW5k
bGUgPT0gTlVMTCkgeworICAgICAgICBEV09SRCBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAg
ICAgaWYgKEVSUk9SX0lPX1BFTkRJTkcgIT0gZXJyKSB7CisgICAgICAgICAgICBpZiAoc2VsZkRl
bCkKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlc291
cmNlSGFuZGxlOjpzdGFydChGcmFtZSogZnJhbWUpCit7CisgICAgcmVmKCk7CisgICAgZC0+bV9p
c0Fib3V0ID0gcmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnN0YXJ0c1dpdGgoImFib3V0OiIpOyAv
LyBLVVJMIGNhbid0IGhhbmRsZSBwcm90b2NvbCBvbiAiYWJvdXQ6Zm9vIj8/CisKKyAgICBpZiAo
ZC0+bV9pc0Fib3V0KSB7CisgICAgICAgIGQtPm1faXNBYm91dCA9IHRydWU7CisgICAgICAgIGQt
Pm1fZmlsZUxvYWRUaW1lci5zdGFydE9uZVNob3QoMC4wKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSAKKyAgICAKKyAgICBpZiAocmVxdWVzdCgpLnVybCgpLmlzTG9jYWxGaWxlKCkpIHsK
KworICAgICAgICBTdHJpbmcgcGF0aCA9IHJlcXVlc3QoKS51cmwoKS5wYXRoKCk7CisgICAgICAg
IHdoaWxlIChwYXRoWzBdID09ICcvJykKKyAgICAgICAgICAgIHBhdGgucmVtb3ZlKDApOworICAg
ICAgICAKKyAgICAgICAgLy8gVGVtcG9yYXJ5IHNvbHV0aW9uLiBMYXRlciBvbiB3ZSB3aWxsIHVz
ZSBJbnRlcm5ldENyYWNrVXJsCisgICAgICAgIHBhdGgucmVwbGFjZShTdHJpbmcoTCIlMjAiKSwg
U3RyaW5nKEwiICIpKTsKKyAgICAgICAgcGF0aC5zdHJpcFdoaXRlU3BhY2UoKTsKKworICAgICAg
ICBkLT5tX2ZpbGVIYW5kbGUgPSBDcmVhdGVGaWxlKHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKSwgR0VORVJJQ19SRUFELCAwLCBOVUxMLCBPUEVOX0VYSVNUSU5HLCBGSUxFX0FU
VFJJQlVURV9OT1JNQUwsIE5VTEwpOworCisgICAgICAgIGQtPm1fZmlsZUxvYWRUaW1lci5zdGFy
dE9uZVNob3QoMC4wKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGQt
Pm1fY29ubk1ncikKKyAgICAgICAgZGVsZXRlIGQtPm1fY29ubk1ncjsKKyAgICBkLT5tX2Nvbm5N
Z3IgPSBuZXcgQ29ubmVjdGlvbk1hbmFnZXIoKTsKKworICAgIGlmICghZC0+bV9jb25uTWdyLT5p
bnRlcm5ldEhhbmRsZSgpKSB7CisgICAgICAgIGRlbGV0ZSBkLT5tX2Nvbm5NZ3I7CisgICAgICAg
IGQtPm1fY29ubk1nciA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gam9iTWFuYWdlcigpLT5hZGRUb091dHN0YW5kaW5nSm9icyh0aGlzLCBmcmFtZS0+bG9h
ZGVyKCktPnJlZmVycmVyKCkpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkRmlsZSgp
Cit7CisgICAgaW50IGpvYklkID0gZC0+bV9qb2JJZDsKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJl
c3BvbnNlOworICAgIHNldFJlc3BvbnNlKHJlc3BvbnNlKTsKKworICAgIC8vIEZJWE1FIHJlc3Bv
bnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChzeik7CisgICAgcmVzcG9uc2Uuc2V0SFRUUFN0
YXR1c0NvZGUoMjAwKTsKKyAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHRoaXMsIHJl
c3BvbnNlKTsKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIERXT1JEIGJ5dGVzUmVhZCA9
IDA7CisKKyAgICBkbyB7CisgICAgICAgIGNvbnN0IGludCBidWZmZXJTaXplID0gODE5MjsKKyAg
ICAgICAgY2hhciBidWZmZXJbYnVmZmVyU2l6ZV07CisgICAgICAgIHJlc3VsdCA9ICEhUmVhZEZp
bGUoZC0+bV9maWxlSGFuZGxlLCAmYnVmZmVyLCBidWZmZXJTaXplLCAmYnl0ZXNSZWFkLCBOVUxM
KTsgCisgICAgICAgIGlmIChyZXN1bHQgJiYgYnl0ZXNSZWFkKQorICAgICAgICB7CisgICAgICAg
ICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZURhdGEodGhpcywgYnVmZmVyLCBieXRlc1JlYWQsIDAp
OworICAgICAgICAgICAgLy8gSW4gY2FzZSB0aGF0IGl0IGlzIGRlbGV0ZWQgYnkgbGFzdCBjYWxs
CisgICAgICAgICAgICBpZiAoIWpvYk1hbmFnZXIoKS0+bG9va3VwUmVzb3VyY2VIYW5kbGUoam9i
SWQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBDaGVj
ayBmb3IgZW5kIG9mIGZpbGUuIAorICAgIH0gd2hpbGUgKHJlc3VsdCAmJiBieXRlc1JlYWQpOwor
CisgICAgLy8gRklYTUU6IGhhbmRsZSBlcnJvcnMgYmV0dGVyCisKKyAgICBDbG9zZUhhbmRsZShk
LT5tX2ZpbGVIYW5kbGUpOworICAgIGQtPm1fZmlsZUhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZB
TFVFOworCisgICAgZmluaXNoKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWREYXRh
KCkKK3sKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZEFib3V0KCkKK3sKKyAgICBpZiAo
IWZldGNoQWJvdXRQYWdlKSB7CisgICAgICAgIGZhaWwoIkZhaWxlZCB0byBvcGVuIHBhZ2UiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBqb2JJZCA9IGQtPm1fam9iSWQ7Cisg
ICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICBzZXRSZXNwb25zZShyZXNwb25zZSk7
CisKKyAgICBTdHJpbmcgcGF0aCA9IHJlcXVlc3QoKS51cmwoKS5wYXRoKCkuc3RyaXBXaGl0ZVNw
YWNlKCk7CisgICAgY2hhciAqZGF0YSA9IDA7CisgICAgaW50IHN6ID0gMDsKKyAgICBCdWZmZXJE
ZWxldGVyIGRlbGV0ZXIgPSAwOworICAgIGJvb2wgcmMgPSAoZmV0Y2hBYm91dFBhZ2UpKHBhdGgu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgJmRhdGEsICZzeiwgJmRlbGV0ZXIpOwor
ICAgIGlmICghcmMgfHwgIXN6KSB7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2Rl
KDQwNCk7CisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgcmVzcG9u
c2UpOworICAgICAgICBmYWlsKCIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZXNw
b25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoc3opOworICAgIHJlc3BvbnNlLnNldEhUVFBT
dGF0dXNDb2RlKDIwMCk7CisgICAgY2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCBy
ZXNwb25zZSk7CisgICAgY2xpZW50KCktPmRpZFJlY2VpdmVEYXRhKHRoaXMsIGRhdGEsIHN6LCAw
KTsKKyAgICBpZiAoZGVsZXRlcikKKyAgICAgICAgZGVsZXRlcihkYXRhLCBzeik7CisgICAgZmlu
aXNoKCk7CisgICAgcmV0dXJuOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpmaWxlTG9hZFRp
bWVyKFRpbWVyPFJlc291cmNlSGFuZGxlPiogdGltZXIpCit7CisgICAgaWYgKCFjbGllbnQoKSkg
eworICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IHJlcG9ydGVkIGFzeW5jaHJvbm91c2x5IGZvciBjb25zaXN0ZW5jeS4KKyAgICBpZiAoIWQtPm1f
aXNBYm91dCAmJiBkLT5tX2ZpbGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAg
ICAgICAgZmFpbCgiRmFpbGVkIHRvIGxvYWQgZmlsZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGQtPm1faXNBYm91dCkKKyAgICAgICAgbG9hZEFib3V0KCk7CisgICAgZWxz
ZQorICAgICAgICBsb2FkRmlsZSgpOworfQorCisjaWYgUExBVEZPUk0oVE9SQ0hNT0JJTEUpCit2
b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoY29uc3QgUmVzb3VyY2VIYW5kbGVDbGllbnQqKQor
I2Vsc2UKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhbmNlbCgpCisjZW5kaWYKK3sKKyAgICBpZiAo
ZC0+bV9jb25uTWdyICYmIGQtPm1fY29ubk1nci0+dXJsSGFuZGxlKCkpCisgICAgICAgIGQtPm1f
Y29ubk1nci0+Y2xvc2VVcmxIYW5kbGUoKTsKKyAgICBlbHNlCisgICAgICAgIGQtPm1fZmlsZUxv
YWRUaW1lci5zdG9wKCk7CisKKyAgICBmaW5pc2goKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRs
ZTo6c2V0SGFzUmVjZWl2ZWRSZXNwb25zZShib29sIGIpCit7CisgICAgZC0+bV9oYXNSZWNlaXZl
ZFJlc3BvbnNlID0gYjsKK30KKworYm9vbCBSZXNvdXJjZUhhbmRsZTo6aGFzUmVjZWl2ZWRSZXNw
b25zZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPm1faGFzUmVjZWl2ZWRSZXNwb25zZTsKK30K
Kwordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywgUmVzb3VyY2VFcnJvciYsIFJlc291
cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mLCBGcmFtZSopCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFJlc291cmNlSGFuZGxlOjpidWZm
ZXJlZERhdGEoKQoreworICAgIHJldHVybiAwOworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpz
dXBwb3J0c0J1ZmZlcmVkRGF0YSgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJl
c291cmNlSGFuZGxlOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQoreworICAgIGQtPm1f
ZGVmZXJzTG9hZGluZyA9IGRlZmVyczsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0RG93
bmxvYWRDbGllbnQoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGMpCit7CisgICAgZC0+bV9kb3dubG9h
ZENsaWVudCA9IGM7CisgICAgZC0+bV9mcmFtZSA9IDA7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5k
bGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYgcmVxKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIHByZWZldGNoRE5TKGNv
bnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvd2luY2UvUmVzb3VyY2VSZXF1ZXN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2lu
Y2UvUmVzb3VyY2VSZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZjA3ZjU2MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5j
ZS9SZXNvdXJjZVJlcXVlc3QuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVG9yY2ggTW9iaWxlIEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBSZXNvdXJjZVJlcXVlc3RfaAorI2RlZmluZSBSZXNvdXJjZVJlcXVlc3RfaAorCisj
aW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3QgOiBwdWJsaWMgUmVzb3VyY2VSZXF1ZXN0QmFzZSB7
CisgICAgcHVibGljOgorICAgICAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwp
IAorICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKEtVUkwodXJsKSwgVXNlUHJvdG9j
b2xDYWNoZVBvbGljeSkKKyAgICAgICAgICAgICwgbV90eXBlKFJlcXVlc3RNYWluKQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgS1VSTCYgdXJs
KSAKKyAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSh1cmwsIFVzZVByb3RvY29sQ2Fj
aGVQb2xpY3kpCisgICAgICAgICAgICAsIG1fdHlwZShSZXF1ZXN0TWFpbikKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiByZWZlcnJlciwgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgcG9saWN5ID0g
VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkgCisgICAgICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJh
c2UodXJsLCBwb2xpY3kpCisgICAgICAgICAgICAsIG1fdHlwZShSZXF1ZXN0TWFpbikKKyAgICAg
ICAgeworICAgICAgICAgICAgc2V0SFRUUFJlZmVycmVyKHJlZmVycmVyKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KCkKKyAgICAgICAgICAgIDogUmVzb3Vy
Y2VSZXF1ZXN0QmFzZShLVVJMKCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisgICAgICAgICAg
ICAsIG1fdHlwZShSZXF1ZXN0TWFpbikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
ZW51bSBUeXBlIHsKKyAgICAgICAgICAgIFJlcXVlc3RNYWluLAorICAgICAgICAgICAgUmVxdWVz
dFNjcmlwdCwKKyAgICAgICAgICAgIFJlcXVlc3RDU1MsCisgICAgICAgICAgICBSZXF1ZXN0T3Ro
ZXIsCisgICAgICAgICAgICBSZXF1ZXN0SW1hZ2UsCisgICAgICAgIH07CisKKyAgICAgICAgVHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgICAgIHZvaWQgc2V0VHlwZShU
eXBlIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJp
ZW5kIHN0cnVjdCBSZXNvdXJjZVJlcXVlc3RCYXNlOworCisgICAgICAgIHZvaWQgZG9VcGRhdGVQ
bGF0Zm9ybVJlcXVlc3QoKSB7fQorICAgICAgICB2b2lkIGRvVXBkYXRlUmVzb3VyY2VSZXF1ZXN0
KCkge30KKyAgICAKKyAgICAgICAgVHlwZSBtX3R5cGU7CisgICB9OworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gUmVzb3VyY2VSZXF1ZXN0X2gKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZVJlc3BvbnNlLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3VyY2VSZXNwb25zZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjM0NWVmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3VyY2VSZXNwb25zZS5oCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVzb3VyY2VSZXNwb25zZV9oCisjZGVmaW5l
IFJlc291cmNlUmVzcG9uc2VfaAorCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZUJhc2UuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlIDogcHVibGlj
IFJlc291cmNlUmVzcG9uc2VCYXNlIHsKK3B1YmxpYzoKKyAgICBSZXNvdXJjZVJlc3BvbnNlKCkK
KyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXNwb25zZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCwgY29uc3QgU3Ry
aW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQorICAgICAgICA6
IFJlc291cmNlUmVzcG9uc2VCYXNlKHVybCwgbWltZVR5cGUsIGV4cGVjdGVkTGVuZ3RoLCB0ZXh0
RW5jb2RpbmdOYW1lLCBmaWxlbmFtZSkKKyAgICB7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVzb3VyY2VSZXNwb25zZV9oCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvcHVueWNvZGUuYyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay93aW5jZS9wdW55Y29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjVkOGQ3YzcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvd2luY2UvcHVueWNvZGUuYwpAQCAtMCwwICsxLDI5NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGkg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJwdW55Y29kZS5oIgorCisvKgorcHVu
eWNvZGUuYyBmcm9tIFJGQyAzNDkyCitodHRwOi8vd3d3Lm5pY2VtaWNlLm5ldC9pZG4vCitBZGFt
IE0uIENvc3RlbGxvCitodHRwOi8vd3d3Lm5pY2VtaWNlLm5ldC9hbWMvCisKK1RoaXMgaXMgQU5T
SSBDIGNvZGUgKEM4OSkgaW1wbGVtZW50aW5nIFB1bnljb2RlIChSRkMgMzQ5MikuCisKKyovCisK
Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworLyogSW1wbGVtZW50YXRpb24gKHdvdWxkIG5vcm1hbGx5IGdvIGluIGl0cyBvd24gLmMg
ZmlsZSk6ICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoqKiBCb290c3RyaW5nIHBhcmFt
ZXRlcnMgZm9yIFB1bnljb2RlICoqKi8KKworZW51bSB7IGJhc2UgPSAzNiwgdG1pbiA9IDEsIHRt
YXggPSAyNiwgc2tldyA9IDM4LCBkYW1wID0gNzAwLAorICAgICAgIGluaXRpYWxfYmlhcyA9IDcy
LCBpbml0aWFsX24gPSAweDgwLCBkZWxpbWl0ZXIgPSAweDJEIH07CisKKy8qIGJhc2ljKGNwKSB0
ZXN0cyB3aGV0aGVyIGNwIGlzIGEgYmFzaWMgY29kZSBwb2ludDogKi8KKyNkZWZpbmUgYmFzaWMo
Y3ApICgocHVueWNvZGVfdWludCkoY3ApIDwgMHg4MCkKKworLyogZGVsaW0oY3ApIHRlc3RzIHdo
ZXRoZXIgY3AgaXMgYSBkZWxpbWl0ZXI6ICovCisjZGVmaW5lIGRlbGltKGNwKSAoKGNwKSA9PSBk
ZWxpbWl0ZXIpCisKKy8qIGRlY29kZV9kaWdpdChjcCkgcmV0dXJucyB0aGUgbnVtZXJpYyB2YWx1
ZSBvZiBhIGJhc2ljIGNvZGUgKi8KKy8qIHBvaW50IChmb3IgdXNlIGluIHJlcHJlc2VudGluZyBp
bnRlZ2VycykgaW4gdGhlIHJhbmdlIDAgdG8gKi8KKy8qIGJhc2UtMSwgb3IgYmFzZSBpZiBjcCBp
cyBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWx1ZS4gICAgICAgKi8KKworc3RhdGljIHB1bnljb2Rl
X3VpbnQgZGVjb2RlX2RpZ2l0KHB1bnljb2RlX3VpbnQgY3ApCit7CisgIHJldHVybiAgY3AgLSA0
OCA8IDEwID8gY3AgLSAyMiA6ICBjcCAtIDY1IDwgMjYgPyBjcCAtIDY1IDoKKyAgICAgICAgICBj
cCAtIDk3IDwgMjYgPyBjcCAtIDk3IDogIGJhc2U7Cit9CisKKy8qIGVuY29kZV9kaWdpdChkLGZs
YWcpIHJldHVybnMgdGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgICAgICAqLworLyog
KHdoZW4gdXNlZCBmb3IgcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBkLCB3aGljaCBuZWVkcyB0
byBiZSBpbiAgICovCisvKiB0aGUgcmFuZ2UgMCB0byBiYXNlLTEuICBUaGUgbG93ZXJjYXNlIGZv
cm0gaXMgdXNlZCB1bmxlc3MgZmxhZyBpcyAgKi8KKy8qIG5vbnplcm8sIGluIHdoaWNoIGNhc2Ug
dGhlIHVwcGVyY2FzZSBmb3JtIGlzIHVzZWQuICBUaGUgYmVoYXZpb3IgICAqLworLyogaXMgdW5k
ZWZpbmVkIGlmIGZsYWcgaXMgbm9uemVybyBhbmQgZGlnaXQgZCBoYXMgbm8gdXBwZXJjYXNlIGZv
cm0uICovCisKK3N0YXRpYyBjaGFyIGVuY29kZV9kaWdpdChwdW55Y29kZV91aW50IGQsIGludCBm
bGFnKQoreworICByZXR1cm4gZCArIDIyICsgNzUgKiAoZCA8IDI2KSAtICgoZmxhZyAhPSAwKSA8
PCA1KTsKKyAgLyogIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlogKi8KKyAgLyogMjYu
LjM1IG1hcCB0byBBU0NJSSAwLi45ICAgICAgICAgKi8KK30KKworLyogZmxhZ2dlZChiY3ApIHRl
c3RzIHdoZXRoZXIgYSBiYXNpYyBjb2RlIHBvaW50IGlzIGZsYWdnZWQgKi8KKy8qICh1cHBlcmNh
c2UpLiAgVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiBiY3AgaXMgbm90IGEgICovCisvKiBi
YXNpYyBjb2RlIHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
LworCisjZGVmaW5lIGZsYWdnZWQoYmNwKSAoKHB1bnljb2RlX3VpbnQpKGJjcCkgLSA2NSA8IDI2
KQorCisvKiBlbmNvZGVfYmFzaWMoYmNwLGZsYWcpIGZvcmNlcyBhIGJhc2ljIGNvZGUgcG9pbnQg
dG8gbG93ZXJjYXNlICovCisvKiBpZiBmbGFnIGlzIHplcm8sIHVwcGVyY2FzZSBpZiBmbGFnIGlz
IG5vbnplcm8sIGFuZCByZXR1cm5zICAgICovCisvKiB0aGUgcmVzdWx0aW5nIGNvZGUgcG9pbnQu
ICBUaGUgY29kZSBwb2ludCBpcyB1bmNoYW5nZWQgaWYgaXQgICovCisvKiBpcyBjYXNlbGVzcy4g
IFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgYmNwIGlzIG5vdCBhIGJhc2ljICovCisvKiBj
b2RlIHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICovCisKK3N0YXRpYyBjaGFyIGVuY29kZV9iYXNpYyhwdW55Y29kZV91aW50IGJjcCwgaW50
IGZsYWcpCit7CisgIGJjcCAtPSAoYmNwIC0gOTcgPCAyNikgPDwgNTsKKyAgcmV0dXJuIGJjcCAr
ICgoIWZsYWcgJiYgKGJjcCAtIDY1IDwgMjYpKSA8PCA1KTsKK30KKworLyoqKiBQbGF0Zm9ybS1z
cGVjaWZpYyBjb25zdGFudHMgKioqLworCisvKiBtYXhpbnQgaXMgdGhlIG1heGltdW0gdmFsdWUg
b2YgYSBwdW55Y29kZV91aW50IHZhcmlhYmxlOiAqLworc3RhdGljIGNvbnN0IHB1bnljb2RlX3Vp
bnQgbWF4aW50ID0gLTE7CisvKiBCZWNhdXNlIG1heGludCBpcyB1bnNpZ25lZCwgLTEgYmVjb21l
cyB0aGUgbWF4aW11bSB2YWx1ZS4gKi8KKworLyoqKiBCaWFzIGFkYXB0YXRpb24gZnVuY3Rpb24g
KioqLworCitzdGF0aWMgcHVueWNvZGVfdWludCBhZGFwdCgKKyAgcHVueWNvZGVfdWludCBkZWx0
YSwgcHVueWNvZGVfdWludCBudW1wb2ludHMsIGludCBmaXJzdHRpbWUgKQoreworICBwdW55Y29k
ZV91aW50IGs7CisKKyAgZGVsdGEgPSBmaXJzdHRpbWUgPyBkZWx0YSAvIGRhbXAgOiBkZWx0YSA+
PiAxOworICAvKiBkZWx0YSA+PiAxIGlzIGEgZmFzdGVyIHdheSBvZiBkb2luZyBkZWx0YSAvIDIg
Ki8KKyAgZGVsdGEgKz0gZGVsdGEgLyBudW1wb2ludHM7CisKKyAgZm9yIChrID0gMDsgIGRlbHRh
ID4gKChiYXNlIC0gdG1pbikgKiB0bWF4KSAvIDI7ICBrICs9IGJhc2UpIHsKKyAgICBkZWx0YSAv
PSBiYXNlIC0gdG1pbjsKKyAgfQorCisgIHJldHVybiBrICsgKGJhc2UgLSB0bWluICsgMSkgKiBk
ZWx0YSAvIChkZWx0YSArIHNrZXcpOworfQorCisvKioqIE1haW4gZW5jb2RlIGZ1bmN0aW9uICoq
Ki8KKworZW51bSBwdW55Y29kZV9zdGF0dXMgcHVueWNvZGVfZW5jb2RlKAorICBwdW55Y29kZV91
aW50IGlucHV0X2xlbmd0aCwKKyAgY29uc3QgcHVueWNvZGVfdWludCBpbnB1dFtdLAorICBjb25z
dCB1bnNpZ25lZCBjaGFyIGNhc2VfZmxhZ3NbXSwKKyAgcHVueWNvZGVfdWludCAqb3V0cHV0X2xl
bmd0aCwKKyAgY2hhciBvdXRwdXRbXSApCit7CisgIHB1bnljb2RlX3VpbnQgbiwgZGVsdGEsIGgs
IGIsIG91dCwgbWF4X291dCwgYmlhcywgaiwgbSwgcSwgaywgdDsKKworICAvKiBJbml0aWFsaXpl
IHRoZSBzdGF0ZTogKi8KKworICBuID0gaW5pdGlhbF9uOworICBkZWx0YSA9IG91dCA9IDA7Cisg
IG1heF9vdXQgPSAqb3V0cHV0X2xlbmd0aDsKKyAgYmlhcyA9IGluaXRpYWxfYmlhczsKKworICAv
KiBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiAqLworICBmb3IgKGogPSAwOyAgaiA8IGlu
cHV0X2xlbmd0aDsgICsraikgeworICAgIGlmIChiYXNpYyhpbnB1dFtqXSkpIHsKKyAgICAgIGlm
IChtYXhfb3V0IC0gb3V0IDwgMikgcmV0dXJuIHB1bnljb2RlX2JpZ19vdXRwdXQ7CisgICAgICBv
dXRwdXRbb3V0KytdID0KKyAgICAgICAgY2FzZV9mbGFncyA/ICBlbmNvZGVfYmFzaWMoaW5wdXRb
al0sIGNhc2VfZmxhZ3Nbal0pIDogaW5wdXRbal07CisgICAgfQorICAgIC8qIGVsc2UgaWYgKGlu
cHV0W2pdIDwgbikgcmV0dXJuIHB1bnljb2RlX2JhZF9pbnB1dDsgKi8KKyAgICAvKiAobm90IG5l
ZWRlZCBmb3IgUHVueWNvZGUgd2l0aCB1bnNpZ25lZCBjb2RlIHBvaW50cykgKi8KKyAgfQorCisg
IGggPSBiID0gb3V0OworCisgIC8qIGggaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0
IGhhdmUgYmVlbiBoYW5kbGVkLCBiIGlzIHRoZSAgKi8KKyAgLyogbnVtYmVyIG9mIGJhc2ljIGNv
ZGUgcG9pbnRzLCBhbmQgb3V0IGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyAqLworICAvKiB0
aGF0IGhhdmUgYmVlbiBvdXRwdXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICovCisKKyAgaWYgKGIgPiAwKSBvdXRwdXRbb3V0KytdID0gZGVsaW1pdGVyOworCisg
IC8qIE1haW4gZW5jb2RpbmcgbG9vcDogKi8KKworICB3aGlsZSAoaCA8IGlucHV0X2xlbmd0aCkg
eworICAgIC8qIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiAgICAgKi8K
KyAgICAvKiBoYW5kbGVkIGFscmVhZHkuICBGaW5kIHRoZSBuZXh0IGxhcmdlciBvbmU6ICovCisK
KyAgICBmb3IgKG0gPSBtYXhpbnQsIGogPSAwOyAgaiA8IGlucHV0X2xlbmd0aDsgICsraikgewor
ICAgICAgLyogaWYgKGJhc2ljKGlucHV0W2pdKSkgY29udGludWU7ICovCisgICAgICAvKiAobm90
IG5lZWRlZCBmb3IgUHVueWNvZGUpICovCisgICAgICBpZiAoaW5wdXRbal0gPj0gbiAmJiBpbnB1
dFtqXSA8IG0pIG0gPSBpbnB1dFtqXTsKKyAgICB9CisKKyAgICAvKiBJbmNyZWFzZSBkZWx0YSBl
bm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzICAgICovCisgICAgLyogPG4saT4gc3RhdGUg
dG8gPG0sMD4sIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93OiAqLworCisgICAgaWYgKG0gLSBu
ID4gKG1heGludCAtIGRlbHRhKSAvIChoICsgMSkpIHJldHVybiBwdW55Y29kZV9vdmVyZmxvdzsK
KyAgICBkZWx0YSArPSAobSAtIG4pICogKGggKyAxKTsKKyAgICBuID0gbTsKKworICAgIGZvciAo
aiA9IDA7ICBqIDwgaW5wdXRfbGVuZ3RoOyAgKytqKSB7CisgICAgICAvKiBQdW55Y29kZSBkb2Vz
IG5vdCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaW5wdXRbal0gaXMgYmFzaWM6ICovCisgICAgICBp
ZiAoaW5wdXRbal0gPCBuIC8qIHx8IGJhc2ljKGlucHV0W2pdKSAqLyApIHsKKyAgICAgICAgaWYg
KCsrZGVsdGEgPT0gMCkgcmV0dXJuIHB1bnljb2RlX292ZXJmbG93OworICAgICAgfQorCisgICAg
ICBpZiAoaW5wdXRbal0gPT0gbikgeworICAgICAgICAvKiBSZXByZXNlbnQgZGVsdGEgYXMgYSBn
ZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlcjogKi8KKworICAgICAgICBmb3IgKHEg
PSBkZWx0YSwgayA9IGJhc2U7ICA7ICBrICs9IGJhc2UpIHsKKyAgICAgICAgICBpZiAob3V0ID49
IG1heF9vdXQpIHJldHVybiBwdW55Y29kZV9iaWdfb3V0cHV0OworICAgICAgICAgIHQgPSBrIDw9
IGJpYXMgLyogKyB0bWluICovID8gdG1pbiA6ICAgICAvKiArdG1pbiBub3QgbmVlZGVkICovCisg
ICAgICAgICAgICAgIGsgPj0gYmlhcyArIHRtYXggPyB0bWF4IDogayAtIGJpYXM7CisgICAgICAg
ICAgaWYgKHEgPCB0KSBicmVhazsKKyAgICAgICAgICBvdXRwdXRbb3V0KytdID0gZW5jb2RlX2Rp
Z2l0KHQgKyAocSAtIHQpICUgKGJhc2UgLSB0KSwgMCk7CisgICAgICAgICAgcSA9IChxIC0gdCkg
LyAoYmFzZSAtIHQpOworICAgICAgICB9CisKKyAgICAgICAgb3V0cHV0W291dCsrXSA9IGVuY29k
ZV9kaWdpdChxLCBjYXNlX2ZsYWdzICYmIGNhc2VfZmxhZ3Nbal0pOworICAgICAgICBiaWFzID0g
YWRhcHQoZGVsdGEsIGggKyAxLCBoID09IGIpOworICAgICAgICBkZWx0YSA9IDA7CisgICAgICAg
ICsraDsKKyAgICAgIH0KKyAgICB9CisKKyAgICArK2RlbHRhLCArK247CisgIH0KKworICAqb3V0
cHV0X2xlbmd0aCA9IG91dDsKKyAgcmV0dXJuIHB1bnljb2RlX3N1Y2Nlc3M7Cit9CisKKy8qKiog
TWFpbiBkZWNvZGUgZnVuY3Rpb24gKioqLworCitlbnVtIHB1bnljb2RlX3N0YXR1cyBwdW55Y29k
ZV9kZWNvZGUoCisgIHB1bnljb2RlX3VpbnQgaW5wdXRfbGVuZ3RoLAorICBjb25zdCBjaGFyIGlu
cHV0W10sCisgIHB1bnljb2RlX3VpbnQgKm91dHB1dF9sZW5ndGgsCisgIHB1bnljb2RlX3VpbnQg
b3V0cHV0W10sCisgIHVuc2lnbmVkIGNoYXIgY2FzZV9mbGFnc1tdICkKK3sKKyAgcHVueWNvZGVf
dWludCBuLCBvdXQsIGksIG1heF9vdXQsIGJpYXMsCisgICAgICAgICAgICAgICAgIGIsIGosIGlu
LCBvbGRpLCB3LCBrLCBkaWdpdCwgdDsKKworICAvKiBJbml0aWFsaXplIHRoZSBzdGF0ZTogKi8K
KworICBuID0gaW5pdGlhbF9uOworICBvdXQgPSBpID0gMDsKKyAgbWF4X291dCA9ICpvdXRwdXRf
bGVuZ3RoOworICBiaWFzID0gaW5pdGlhbF9iaWFzOworCisgIC8qIEhhbmRsZSB0aGUgYmFzaWMg
Y29kZSBwb2ludHM6ICBMZXQgYiBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGUgKi8KKyAgLyog
cG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIDAgaWYgdGhlcmUgaXMgbm9uZSwg
dGhlbiAgICAqLworICAvKiBjb3B5IHRoZSBmaXJzdCBiIGNvZGUgcG9pbnRzIHRvIHRoZSBvdXRw
dXQuICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgZm9yIChiID0gaiA9IDA7ICBqIDwgaW5w
dXRfbGVuZ3RoOyAgKytqKSBpZiAoZGVsaW0oaW5wdXRbal0pKSBiID0gajsKKyAgaWYgKGIgPiBt
YXhfb3V0KSByZXR1cm4gcHVueWNvZGVfYmlnX291dHB1dDsKKworICBmb3IgKGogPSAwOyAgaiA8
IGI7ICArK2opIHsKKyAgICBpZiAoY2FzZV9mbGFncykgY2FzZV9mbGFnc1tvdXRdID0gZmxhZ2dl
ZChpbnB1dFtqXSk7CisgICAgaWYgKCFiYXNpYyhpbnB1dFtqXSkpIHJldHVybiBwdW55Y29kZV9i
YWRfaW5wdXQ7CisgICAgb3V0cHV0W291dCsrXSA9IGlucHV0W2pdOworICB9CisKKyAgLyogTWFp
biBkZWNvZGluZyBsb29wOiAgU3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYg
YW55ICAqLworICAvKiBiYXNpYyBjb2RlIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhl
IGJlZ2lubmluZyBvdGhlcndpc2UuICovCisKKyAgZm9yIChpbiA9IGIgPiAwID8gYiArIDEgOiAw
OyAgaW4gPCBpbnB1dF9sZW5ndGg7ICArK291dCkgeworCisgICAgLyogaW4gaXMgdGhlIGluZGV4
IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZCwgYW5kICovCisgICAgLyogb3V0
IGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgaW4gdGhlIG91dHB1dCBhcnJheS4gICAgICov
CisKKyAgICAvKiBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBp
bnRvIGRlbHRhLCAgKi8KKyAgICAvKiB3aGljaCBnZXRzIGFkZGVkIHRvIGkuICBUaGUgb3ZlcmZs
b3cgY2hlY2tpbmcgaXMgZWFzaWVyICAgKi8KKyAgICAvKiBpZiB3ZSBpbmNyZWFzZSBpIGFzIHdl
IGdvLCB0aGVuIHN1YnRyYWN0IG9mZiBpdHMgc3RhcnRpbmcgKi8KKyAgICAvKiB2YWx1ZSBhdCB0
aGUgZW5kIHRvIG9idGFpbiBkZWx0YS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAg
IGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgIDsgIGsgKz0gYmFzZSkgeworICAgICAg
aWYgKGluID49IGlucHV0X2xlbmd0aCkgcmV0dXJuIHB1bnljb2RlX2JhZF9pbnB1dDsKKyAgICAg
IGRpZ2l0ID0gZGVjb2RlX2RpZ2l0KGlucHV0W2luKytdKTsKKyAgICAgIGlmIChkaWdpdCA+PSBi
YXNlKSByZXR1cm4gcHVueWNvZGVfYmFkX2lucHV0OworICAgICAgaWYgKGRpZ2l0ID4gKG1heGlu
dCAtIGkpIC8gdykgcmV0dXJuIHB1bnljb2RlX292ZXJmbG93OworICAgICAgaSArPSBkaWdpdCAq
IHc7CisgICAgICB0ID0gayA8PSBiaWFzIC8qICsgdG1pbiAqLyA/IHRtaW4gOiAgICAgLyogK3Rt
aW4gbm90IG5lZWRlZCAqLworICAgICAgICAgIGsgPj0gYmlhcyArIHRtYXggPyB0bWF4IDogayAt
IGJpYXM7CisgICAgICBpZiAoZGlnaXQgPCB0KSBicmVhazsKKyAgICAgIGlmICh3ID4gbWF4aW50
IC8gKGJhc2UgLSB0KSkgcmV0dXJuIHB1bnljb2RlX292ZXJmbG93OworICAgICAgdyAqPSAoYmFz
ZSAtIHQpOworICAgIH0KKworICAgIGJpYXMgPSBhZGFwdChpIC0gb2xkaSwgb3V0ICsgMSwgb2xk
aSA9PSAwKTsKKworICAgIC8qIGkgd2FzIHN1cHBvc2VkIHRvIHdyYXAgYXJvdW5kIGZyb20gb3V0
KzEgdG8gMCwgICAqLworICAgIC8qIGluY3JlbWVudGluZyBuIGVhY2ggdGltZSwgc28gd2UnbGwg
Zml4IHRoYXQgbm93OiAqLworCisgICAgaWYgKGkgLyAob3V0ICsgMSkgPiBtYXhpbnQgLSBuKSBy
ZXR1cm4gcHVueWNvZGVfb3ZlcmZsb3c7CisgICAgbiArPSBpIC8gKG91dCArIDEpOworICAgIGkg
JT0gKG91dCArIDEpOworCisgICAgLyogSW5zZXJ0IG4gYXQgcG9zaXRpb24gaSBvZiB0aGUgb3V0
cHV0OiAqLworCisgICAgLyogbm90IG5lZWRlZCBmb3IgUHVueWNvZGU6ICovCisgICAgLyogaWYg
KGRlY29kZV9kaWdpdChuKSA8PSBiYXNlKSByZXR1cm4gcHVueWNvZGVfaW52YWxpZF9pbnB1dDsg
Ki8KKyAgICBpZiAob3V0ID49IG1heF9vdXQpIHJldHVybiBwdW55Y29kZV9iaWdfb3V0cHV0Owor
CisgICAgaWYgKGNhc2VfZmxhZ3MpIHsKKyAgICAgIG1lbW1vdmUoY2FzZV9mbGFncyArIGkgKyAx
LCBjYXNlX2ZsYWdzICsgaSwgb3V0IC0gaSk7CisgICAgICAvKiBDYXNlIG9mIGxhc3QgY2hhcmFj
dGVyIGRldGVybWluZXMgdXBwZXJjYXNlIGZsYWc6ICovCisgICAgICBjYXNlX2ZsYWdzW2ldID0g
ZmxhZ2dlZChpbnB1dFtpbiAtIDFdKTsKKyAgICB9CisKKyAgICBtZW1tb3ZlKG91dHB1dCArIGkg
KyAxLCBvdXRwdXQgKyBpLCAob3V0IC0gaSkgKiBzaXplb2YgKm91dHB1dCk7CisgICAgb3V0cHV0
W2krK10gPSBuOworICB9CisKKyAgKm91dHB1dF9sZW5ndGggPSBvdXQ7CisgIHJldHVybiBwdW55
Y29kZV9zdWNjZXNzOworfQorCisKKworCisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay93aW5jZS9wdW55Y29kZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbmNl
L3B1bnljb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU5Yjk1MQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9wdW55Y29k
ZS5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1v
YmlsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaSB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworCisjaWZuZGVmIFBVTllDT0RFX0gKKyNkZWZpbmUgUFVOWUNPREVfSAorCisvKgor
cHVueWNvZGUuYyBmcm9tIFJGQyAzNDkyCitodHRwOi8vd3d3Lm5pY2VtaWNlLm5ldC9pZG4vCitB
ZGFtIE0uIENvc3RlbGxvCitodHRwOi8vd3d3Lm5pY2VtaWNlLm5ldC9hbWMvCisKK1RoaXMgaXMg
QU5TSSBDIGNvZGUgKEM4OSkgaW1wbGVtZW50aW5nIFB1bnljb2RlIChSRkMgMzQ5MikuCisKKyov
CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisvKiBQdWJsaWMgaW50ZXJmYWNlICh3b3VsZCBub3JtYWxseSBnbyBpbiBpdHMg
b3duIC5oIGZpbGUpOiAqLworCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpZmRlZiBfX2NwbHVz
cGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZW51bSBwdW55Y29kZV9zdGF0dXMgeworICBw
dW55Y29kZV9zdWNjZXNzLAorICBwdW55Y29kZV9iYWRfaW5wdXQsICAgLyogSW5wdXQgaXMgaW52
YWxpZC4gICAgICAgICAgICAgICAgICAgICAgICovCisgIHB1bnljb2RlX2JpZ19vdXRwdXQsICAv
KiBPdXRwdXQgd291bGQgZXhjZWVkIHRoZSBzcGFjZSBwcm92aWRlZC4gKi8KKyAgcHVueWNvZGVf
b3ZlcmZsb3cgICAgIC8qIElucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MuICAq
LworfTsKKworI2lmIFVJTlRfTUFYID49ICgxIDw8IDI2KSAtIDEKK3R5cGVkZWYgdW5zaWduZWQg
aW50IHB1bnljb2RlX3VpbnQ7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBsb25nIHB1bnljb2Rl
X3VpbnQ7CisjZW5kaWYKKworZW51bSBwdW55Y29kZV9zdGF0dXMgcHVueWNvZGVfZW5jb2RlKAor
ICBwdW55Y29kZV91aW50IGlucHV0X2xlbmd0aCwKKyAgY29uc3QgcHVueWNvZGVfdWludCBpbnB1
dFtdLAorICBjb25zdCB1bnNpZ25lZCBjaGFyIGNhc2VfZmxhZ3NbXSwKKyAgcHVueWNvZGVfdWlu
dCAqb3V0cHV0X2xlbmd0aCwKKyAgY2hhciBvdXRwdXRbXSApOworCisgICAgLyogcHVueWNvZGVf
ZW5jb2RlKCkgY29udmVydHMgVW5pY29kZSB0byBQdW55Y29kZS4gIFRoZSBpbnB1dCAgICAgKi8K
KyAgICAvKiBpcyByZXByZXNlbnRlZCBhcyBhbiBhcnJheSBvZiBVbmljb2RlIGNvZGUgcG9pbnRz
IChub3QgY29kZSAgICAqLworICAgIC8qIHVuaXRzOyBzdXJyb2dhdGUgcGFpcnMgYXJlIG5vdCBh
bGxvd2VkKSwgYW5kIHRoZSBvdXRwdXQgICAgICAgICovCisgICAgLyogd2lsbCBiZSByZXByZXNl
bnRlZCBhcyBhbiBhcnJheSBvZiBBU0NJSSBjb2RlIHBvaW50cy4gIFRoZSAgICAgKi8KKyAgICAv
KiBvdXRwdXQgc3RyaW5nIGlzICpub3QqIG51bGwtdGVybWluYXRlZDsgaXQgd2lsbCBjb250YWlu
ICAgICAgICAqLworICAgIC8qIHplcm9zIGlmIGFuZCBvbmx5IGlmIHRoZSBpbnB1dCBjb250YWlu
cyB6ZXJvcy4gIChPZiBjb3Vyc2UgICAgICovCisgICAgLyogdGhlIGNhbGxlciBjYW4gbGVhdmUg
cm9vbSBmb3IgYSB0ZXJtaW5hdG9yIGFuZCBhZGQgb25lIGlmICAgICAgKi8KKyAgICAvKiBuZWVk
ZWQuKSAgVGhlIGlucHV0X2xlbmd0aCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluICAg
ICAqLworICAgIC8qIHRoZSBpbnB1dC4gIFRoZSBvdXRwdXRfbGVuZ3RoIGlzIGFuIGluL291dCBh
cmd1bWVudDogdGhlICAgICAgICovCisgICAgLyogY2FsbGVyIHBhc3NlcyBpbiB0aGUgbWF4aW11
bSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBpdCAgICAgKi8KKyAgICAvKiBjYW4gcmVjZWl2
ZSwgYW5kIG9uIHN1Y2Nlc3NmdWwgcmV0dXJuIGl0IHdpbGwgY29udGFpbiB0aGUgICAgICAqLwor
ICAgIC8qIG51bWJlciBvZiBjb2RlIHBvaW50cyBhY3R1YWxseSBvdXRwdXQuICBUaGUgY2FzZV9m
bGFncyBhcnJheSAgICovCisgICAgLyogaG9sZHMgaW5wdXRfbGVuZ3RoIGJvb2xlYW4gdmFsdWVz
LCB3aGVyZSBub256ZXJvIHN1Z2dlc3RzIHRoYXQgKi8KKyAgICAvKiB0aGUgY29ycmVzcG9uZGlu
ZyBVbmljb2RlIGNoYXJhY3RlciBiZSBmb3JjZWQgdG8gdXBwZXJjYXNlICAgICAqLworICAgIC8q
IGFmdGVyIGJlaW5nIGRlY29kZWQgKGlmIHBvc3NpYmxlKSwgYW5kIHplcm8gc3VnZ2VzdHMgdGhh
dCAgICAgICovCisgICAgLyogaXQgYmUgZm9yY2VkIHRvIGxvd2VyY2FzZSAoaWYgcG9zc2libGUp
LiAgQVNDSUkgY29kZSBwb2ludHMgICAgKi8KKyAgICAvKiBhcmUgZW5jb2RlZCBsaXRlcmFsbHks
IGV4Y2VwdCB0aGF0IEFTQ0lJIGxldHRlcnMgYXJlIGZvcmNlZCAgICAqLworICAgIC8qIHRvIHVw
cGVyY2FzZSBvciBsb3dlcmNhc2UgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nICAgICAg
ICovCisgICAgLyogdXBwZXJjYXNlIGZsYWdzLiAgSWYgY2FzZV9mbGFncyBpcyBhIG51bGwgcG9p
bnRlciB0aGVuIEFTQ0lJICAgKi8KKyAgICAvKiBsZXR0ZXJzIGFyZSBsZWZ0IGFzIHRoZXkgYXJl
LCBhbmQgb3RoZXIgY29kZSBwb2ludHMgYXJlICAgICAgICAqLworICAgIC8qIHRyZWF0ZWQgYXMg
aWYgdGhlaXIgdXBwZXJjYXNlIGZsYWdzIHdlcmUgemVyby4gIFRoZSByZXR1cm4gICAgICovCisg
ICAgLyogdmFsdWUgY2FuIGJlIGFueSBvZiB0aGUgcHVueWNvZGVfc3RhdHVzIHZhbHVlcyBkZWZp
bmVkIGFib3ZlICAgKi8KKyAgICAvKiBleGNlcHQgcHVueWNvZGVfYmFkX2lucHV0OyBpZiBub3Qg
cHVueWNvZGVfc3VjY2VzcywgdGhlbiAgICAgICAqLworICAgIC8qIG91dHB1dF9zaXplIGFuZCBv
dXRwdXQgbWlnaHQgY29udGFpbiBnYXJiYWdlLiAgICAgICAgICAgICAgICAgICovCisKK2VudW0g
cHVueWNvZGVfc3RhdHVzIHB1bnljb2RlX2RlY29kZSgKKyAgcHVueWNvZGVfdWludCBpbnB1dF9s
ZW5ndGgsCisgIGNvbnN0IGNoYXIgaW5wdXRbXSwKKyAgcHVueWNvZGVfdWludCAqb3V0cHV0X2xl
bmd0aCwKKyAgcHVueWNvZGVfdWludCBvdXRwdXRbXSwKKyAgdW5zaWduZWQgY2hhciBjYXNlX2Zs
YWdzW10gKTsKKworICAgIC8qIHB1bnljb2RlX2RlY29kZSgpIGNvbnZlcnRzIFB1bnljb2RlIHRv
IFVuaWNvZGUuICBUaGUgaW5wdXQgaXMgICovCisgICAgLyogcmVwcmVzZW50ZWQgYXMgYW4gYXJy
YXkgb2YgQVNDSUkgY29kZSBwb2ludHMsIGFuZCB0aGUgb3V0cHV0ICAgKi8KKyAgICAvKiB3aWxs
IGJlIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IG9mIFVuaWNvZGUgY29kZSBwb2ludHMuICBUaGUg
ICAqLworICAgIC8qIGlucHV0X2xlbmd0aCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGlu
IHRoZSBpbnB1dC4gIFRoZSAgICovCisgICAgLyogb3V0cHV0X2xlbmd0aCBpcyBhbiBpbi9vdXQg
YXJndW1lbnQ6IHRoZSBjYWxsZXIgcGFzc2VzIGluICAgICAgKi8KKyAgICAvKiB0aGUgbWF4aW11
bSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBpdCBjYW4gcmVjZWl2ZSwgYW5kICAgICAqLwor
ICAgIC8qIG9uIHN1Y2Nlc3NmdWwgcmV0dXJuIGl0IHdpbGwgY29udGFpbiB0aGUgYWN0dWFsIG51
bWJlciBvZiAgICAgICovCisgICAgLyogY29kZSBwb2ludHMgb3V0cHV0LiAgVGhlIGNhc2VfZmxh
Z3MgYXJyYXkgbmVlZHMgcm9vbSBmb3IgYXQgICAgKi8KKyAgICAvKiBsZWFzdCBvdXRwdXRfbGVu
Z3RoIHZhbHVlcywgb3IgaXQgY2FuIGJlIGEgbnVsbCBwb2ludGVyIGlmIHRoZSAqLworICAgIC8q
IGNhc2UgaW5mb3JtYXRpb24gaXMgbm90IG5lZWRlZC4gIEEgbm9uemVybyBmbGFnIHN1Z2dlc3Rz
IHRoYXQgICovCisgICAgLyogdGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZSBjaGFyYWN0ZXIgYmUg
Zm9yY2VkIHRvIHVwcGVyY2FzZSAgICAgKi8KKyAgICAvKiBieSB0aGUgY2FsbGVyIChpZiBwb3Nz
aWJsZSksIHdoaWxlIHplcm8gc3VnZ2VzdHMgdGhhdCBpdCBiZSAgICAqLworICAgIC8qIGZvcmNl
ZCB0byBsb3dlcmNhc2UgKGlmIHBvc3NpYmxlKS4gIEFTQ0lJIGNvZGUgcG9pbnRzIGFyZSAgICAg
ICovCisgICAgLyogb3V0cHV0IGFscmVhZHkgaW4gdGhlIHByb3BlciBjYXNlLCBidXQgdGhlaXIg
ZmxhZ3Mgd2lsbCBiZSBzZXQgKi8KKyAgICAvKiBhcHByb3ByaWF0ZWx5IHNvIHRoYXQgYXBwbHlp
bmcgdGhlIGZsYWdzIHdvdWxkIGJlIGhhcm1sZXNzLiAgICAqLworICAgIC8qIFRoZSByZXR1cm4g
dmFsdWUgY2FuIGJlIGFueSBvZiB0aGUgcHVueWNvZGVfc3RhdHVzIHZhbHVlcyAgICAgICovCisg
ICAgLyogZGVmaW5lZCBhYm92ZTsgaWYgbm90IHB1bnljb2RlX3N1Y2Nlc3MsIHRoZW4gb3V0cHV0
X2xlbmd0aCwgICAgKi8KKyAgICAvKiBvdXRwdXQsIGFuZCBjYXNlX2ZsYWdzIG1pZ2h0IGNvbnRh
aW4gZ2FyYmFnZS4gIE9uIHN1Y2Nlc3MsIHRoZSAqLworICAgIC8qIGRlY29kZXIgd2lsbCBuZXZl
ciBuZWVkIHRvIHdyaXRlIGFuIG91dHB1dF9sZW5ndGggZ3JlYXRlciB0aGFuICovCisgICAgLyog
aW5wdXRfbGVuZ3RoLCBiZWNhdXNlIG9mIGhvdyB0aGUgZW5jb2RpbmcgaXMgZGVmaW5lZC4gICAg
ICAgICAgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIFBV
TllDT0RFX0gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33105</attachid>
            <date>2009-07-20 14:19:59 -0700</date>
            <delta_ts>2009-07-21 13:28:22 -0700</delta_ts>
            <desc>oops. forgot to add ChangeLog to it</desc>
            <filename>27376.patch</filename>
            <type>text/plain</type>
            <size>69228</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmU4YjE0OS4uMjIzNzRhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyNiBAQAogMjAwOS0wNy0yMCAgWW9uZyBMaSAgPHlv
bmcubGlAdG9yY2htb2JpbGUuY29tPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NzM3NgorICAgICAgICBBZGQgV2luQ0Ugc3BlY2lmaWMgZmlsZXMgZm9yIHBsYXRmb3JtL25ldHdv
cmsuCisKKyAgICAgICAgV3JpdHRlbiBieSBZb25nIExpIDx5b25nLmxpQHRvcmNobW9iaWxlLmNv
bT4sCisgICAgICAgIEdlb3JnZSBTdGFpa29zIDxnZW9yZ2Uuc3RhaWtvc0B0b3JjaG1vYmlsZS5j
b20+LAorICAgICAgICBKb2UgTWFzb248am9lLm1hc29uQHRvcmNobW9iaWxlLmNvbT4KKyAgICAg
ICAgYW5kIHNvbWUgdHJpdmlhbCBzdHlsZSBmaXhlcyBieSBBZGFtIFRyZWF0IDxhZGFtLnRyZWF0
QHRvcmNobW9iaWxlLmNvbT4uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9xdC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oLgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvd2luY2UvTmV0d29ya1N0YXRlTm90aWZpZXJXaW5jZS5jcHA6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3VyY2VFcnJvci5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUVycm9yLmguCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZUhhbmRsZVdpbmNlLmNwcDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZVJlcXVlc3QuaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZVJlc3BvbnNlLmg6IENv
cGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlc3BvbnNlLmgu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW5jZS9wdW55Y29kZS5jOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL3B1bnljb2RlLmg6IEFkZGVkLgorCisyMDA5
LTA3LTIwICBZb25nIExpICA8eW9uZy5saUB0b3JjaG1vYmlsZS5jb20+CisKICAgICAgICAgUmV2
aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjczNDkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay93aW5jZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3dpbmNlL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzUzYWM2ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay93aW5jZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCkBAIC0wLDAgKzEsNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKyNpZm5kZWYgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VfaAorI2RlZmluZSBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZV9oCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZUJhc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSA6IHB1YmxpYyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UgeworcHVibGlj
OgorICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCkKKyAgICB7CisgICAgfQorCisgICAgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3Bh
Y2UsIGNvbnN0IENyZWRlbnRpYWwmIHByb3Bvc2VkQ3JlZGVudGlhbCwgdW5zaWduZWQgcHJldmlv
dXNGYWlsdXJlQ291bnQsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikKKyAgICAgICAgOiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJh
c2UocHJvdGVjdGlvblNwYWNlLCBwcm9wb3NlZENyZWRlbnRpYWwsIHByZXZpb3VzRmFpbHVyZUNv
dW50LCByZXNwb25zZSwgZXJyb3IpCisgICAgeworICAgIH0KK307CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvTmV0d29ya1N0YXRlTm90
aWZpZXJXaW5jZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvTmV0d29ya1N0
YXRlTm90aWZpZXJXaW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZTQwZDNmZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5j
ZS9OZXR3b3JrU3RhdGVOb3RpZmllcldpbmNlLmNwcApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
TmV0d29ya1N0YXRlTm90aWZpZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRl
IDxpcGhscGFwaS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBQTEFURk9STShUT1JD
SE1PQklMRSkKKworTmV0d29ya1N0YXRlTm90aWZpZXI6Ok5ldHdvcmtTdGF0ZU5vdGlmaWVyKCkK
KyAgICA6IG1faXNPbkxpbmUoZmFsc2UpCisgICAgLCBtX25ldHdvcmtTdGF0ZUNoYW5nZWRGdW5j
dGlvbigwKQoreworfQorCitOZXR3b3JrU3RhdGVOb3RpZmllcjo6fk5ldHdvcmtTdGF0ZU5vdGlm
aWVyKCkKK3sKK30KKwordm9pZCBOZXR3b3JrU3RhdGVOb3RpZmllcjo6c2V0T25MaW5lKGJvb2wg
aXNPbkxpbmUpCit7CisgICAgaWYgKG1faXNPbkxpbmUgPT0gaXNPbkxpbmUpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2lzT25MaW5lID0gaXNPbkxpbmU7CisgICAgaWYgKG1fbmV0d29ya1N0YXRl
Q2hhbmdlZEZ1bmN0aW9uKQorICAgICAgICBtX25ldHdvcmtTdGF0ZUNoYW5nZWRGdW5jdGlvbigp
OworfQorCisjZWxzZQordm9pZCBOZXR3b3JrU3RhdGVOb3RpZmllcjo6dXBkYXRlU3RhdGUoKQor
eworICAgIC8vIEFzc3VtZSB0aGF0IHdlJ3JlIG9ubGluZSB1bnRpbCBwcm92ZW4gb3RoZXJ3aXNl
LgorICAgIG1faXNPbkxpbmUgPSB0cnVlOworICAgIAorICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7
CisgICAgRFdPUkQgc2l6ZSA9IDA7CisKKyAgICBpZiAoOjpHZXRBZGFwdGVyc0FkZHJlc3NlcyhB
Rl9VTlNQRUMsIDAsIDAsIDAsICZzaXplKSAhPSBFUlJPUl9CVUZGRVJfT1ZFUkZMT1cpDQorICAg
ICAgICByZXR1cm47DQorDQorICAgIGJ1ZmZlci5yZXNpemUoc2l6ZSk7DQorICAgIFBJUF9BREFQ
VEVSX0FERFJFU1NFUyBhZGRyZXNzZXMgPSByZWludGVycHJldF9jYXN0PFBJUF9BREFQVEVSX0FE
RFJFU1NFUz4oYnVmZmVyLmRhdGEoKSk7DQorCisgICAgaWYgKDo6R2V0QWRhcHRlcnNBZGRyZXNz
ZXMoQUZfVU5TUEVDLCAwLCAwLCBhZGRyZXNzZXMsICZzaXplKSAhPSBFUlJPUl9TVUNDRVNTKSB7
CisgICAgICAgIC8vIFdlIGNvdWxkbid0IGRldGVybWluZSB3aGV0aGVyIHdlJ3JlIG9ubGluZSBv
ciBub3QsIHNvIGFzc3VtZSB0aGF0IHdlIGFyZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGZvciAoOyBhZGRyZXNzZXM7IGFkZHJlc3NlcyA9IGFkZHJlc3Nlcy0+TmV4dCkgew0KKyAg
ICAgICAgaWYgKGFkZHJlc3Nlcy0+SWZUeXBlID09IE1JQl9JRl9UWVBFX0xPT1BCQUNLKQ0KKyAg
ICAgICAgICAgIGNvbnRpbnVlOw0KKw0KKyAgICAgICAgaWYgKGFkZHJlc3Nlcy0+T3BlclN0YXR1
cyAhPSBJZk9wZXJTdGF0dXNVcCkNCisgICAgICAgICAgICBjb250aW51ZTsNCisNCisgICAgICAg
IC8vIFdlIGZvdW5kIGFuIGludGVyZmFjZSB0aGF0IHdhcyB1cC4NCisgICAgICAgIHJldHVybjsN
CisgICAgfQorICAgIAorICAgIC8vIFdlIGRpZG4ndCBmaW5kIGFueSB2YWxpZCBpbnRlcmZhY2Vz
LCBzbyB3ZSBtdXN0IGJlIG9mZmxpbmUuCisgICAgbV9pc09uTGluZSA9IGZhbHNlOworfQorCit2
b2lkIE5ldHdvcmtTdGF0ZU5vdGlmaWVyOjphZGRyZXNzQ2hhbmdlZCgpCit7CisgICAgYm9vbCBv
bGRPbkxpbmUgPSBtX2lzT25MaW5lOworICAgIAorICAgIHVwZGF0ZVN0YXRlKCk7CisKKyAgICBp
ZiAobV9pc09uTGluZSA9PSBvbGRPbkxpbmUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X25ldHdvcmtTdGF0ZUNoYW5nZWRGdW5jdGlvbikKKyAgICAgICAgbV9uZXR3b3JrU3RhdGVDaGFu
Z2VkRnVuY3Rpb24oKTsKK30KKwordm9pZCBOZXR3b3JrU3RhdGVOb3RpZmllcjo6Y2FsbEFkZHJl
c3NDaGFuZ2VkKHZvaWQqIGNvbnRleHQpCit7CisgICAgc3RhdGljX2Nhc3Q8TmV0d29ya1N0YXRl
Tm90aWZpZXIqPihjb250ZXh0KS0+YWRkcmVzc0NoYW5nZWQoKTsKK30KKwordm9pZCBDQUxMQkFD
SyBOZXR3b3JrU3RhdGVOb3RpZmllcjo6YWRkckNoYW5nZUNhbGxiYWNrKHZvaWQqIGNvbnRleHQs
IEJPT0xFQU4gdGltZWRPdXQpCit7CisgICAgY2FsbE9uTWFpblRocmVhZChjYWxsQWRkcmVzc0No
YW5nZWQsIGNvbnRleHQpOworfQorCit2b2lkIE5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpyZWdpc3Rl
ckZvckFkZHJlc3NDaGFuZ2UoKQoreworICAgIDo6Tm90aWZ5QWRkckNoYW5nZSgmbV9vdmVybGFw
cGVkLmhFdmVudCwgMCk7Cit9CisKK25hbWVzcGFjZSB7CisKK3N0cnVjdCBUaHJlYWREYXRhIHsK
KyAgICBOZXR3b3JrU3RhdGVOb3RpZmllciogbV9ub3RpZmllcjsKKyAgICBIQU5ETEUgbV9ldmVu
dDsKK307CisKK3N0YXRpYyBUaHJlYWREYXRhIGdfdGhyZWFkRGF0YSA9IHswfTsKK30KKworTmV0
d29ya1N0YXRlTm90aWZpZXI6Ok5ldHdvcmtTdGF0ZU5vdGlmaWVyKCkKKyAgICA6IG1faXNPbkxp
bmUoZmFsc2UpCisgICAgLCBtX25ldHdvcmtTdGF0ZUNoYW5nZWRGdW5jdGlvbigwKQoreworICAg
IHVwZGF0ZVN0YXRlKCk7CisKKyAgICBtZW1zZXQoJm1fb3ZlcmxhcHBlZCwgMCwgc2l6ZW9mKG1f
b3ZlcmxhcHBlZCkpOworCisgICAgbV9vdmVybGFwcGVkLmhFdmVudCA9IDo6Q3JlYXRlRXZlbnQo
MCwgZmFsc2UsIGZhbHNlLCAwKTsKKworICAgIGdfdGhyZWFkRGF0YS5tX25vdGlmaWVyID0gdGhp
czsKKyAgICBnX3RocmVhZERhdGEubV9ldmVudCA9IG1fb3ZlcmxhcHBlZC5oRXZlbnQ7CisKKyAg
ICBtX3dhaXRIYW5kbGUgPSBDcmVhdGVUaHJlYWQoTlVMTCwgNTEyLCB3YWl0VGhyZWFkUHJvYywg
JmdfdGhyZWFkRGF0YSwgU1RBQ0tfU0laRV9QQVJBTV9JU19BX1JFU0VSVkFUSU9OLCBOVUxMKTsK
KyAgICByZWdpc3RlckZvckFkZHJlc3NDaGFuZ2UoKTsKK30KKworTmV0d29ya1N0YXRlTm90aWZp
ZXI6On5OZXR3b3JrU3RhdGVOb3RpZmllcigpCit7CisgICAgVGVybWluYXRlVGhyZWFkKG1fd2Fp
dEhhbmRsZSwgMCk7CisgICAgQ2xvc2VIYW5kbGUobV93YWl0SGFuZGxlKTsKKyAgICBDbG9zZUhh
bmRsZShtX292ZXJsYXBwZWQuaEV2ZW50KTsKK30KKworRFdPUkQgV0lOQVBJIE5ldHdvcmtTdGF0
ZU5vdGlmaWVyOjp3YWl0VGhyZWFkUHJvYyhMUFZPSUQgbHBQYXJhbWV0ZXIpDQorew0KKyAgICBU
aHJlYWREYXRhKiB0aHJlYWREYXRhID0gKFRocmVhZERhdGEqKWxwUGFyYW1ldGVyOw0KKw0KKyAg
ICBmb3IgKDs7KSB7DQorICAgICAgICBEV09SRCByZXN1bHQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0
KHRocmVhZERhdGEtPm1fZXZlbnQsIElORklOSVRFKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBX
QUlUX0ZBSUxFRCkNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICAKKyAgICAgICAg
YWRkckNoYW5nZUNhbGxiYWNrKHRocmVhZERhdGEtPm1fbm90aWZpZXIsIHJlc3VsdCA9PSBXQUlU
X1RJTUVPVVQgPyBUUlVFIDogRkFMU0UpOw0KKyAgICB9DQorfQ0KKyNlbmRpZgorCit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3VyY2VFcnJvci5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlRXJyb3IuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYThkMzZiCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlRXJyb3IuaApAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFJlc291cmNlRXJyb3JfaAorI2RlZmlu
ZSBSZXNvdXJjZUVycm9yX2gKKworI2luY2x1ZGUgIlJlc291cmNlRXJyb3JCYXNlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVzb3VyY2VFcnJvciA6IHB1YmxpYyBSZXNvdXJj
ZUVycm9yQmFzZQoreworcHVibGljOgorICAgIFJlc291cmNlRXJyb3IoKQorICAgIHsKKyAgICB9
CisKKyAgICBSZXNvdXJjZUVycm9yKGNvbnN0IFN0cmluZyYgZG9tYWluLCBpbnQgZXJyb3JDb2Rl
LCBjb25zdCBTdHJpbmcmIGZhaWxpbmdVUkwsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGVzY3Jp
cHRpb24pCisgICAgICAgIDogUmVzb3VyY2VFcnJvckJhc2UoZG9tYWluLCBlcnJvckNvZGUsIGZh
aWxpbmdVUkwsIGxvY2FsaXplZERlc2NyaXB0aW9uKQorICAgIHsKKyAgICB9Cit9OworCit9CisK
KyNlbmRpZiAvLyBSZXNvdXJjZUVycm9yX2hfCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvd2luY2UvUmVzb3VyY2VIYW5kbGVXaW5jZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvd2luY2UvUmVzb3VyY2VIYW5kbGVXaW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNTMwNzQ2NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZUhhbmRsZVdpbmNlLmNwcApAQCAtMCwwICsxLDEx
MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3Jj
aCBNb2JpbGUgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGUuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2NMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VI
YW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCisjaW5j
bHVkZSAiVGltZXIuaCIKKworI2luY2x1ZGUgPHdpbmluZXQuaD4KKyNkZWZpbmUgSU5JVEdVSUQK
KyNpbmNsdWRlIDxjb25ubWdyLmg+CisjaW5jbHVkZSA8Y29ubm1ncl9wcm94eS5oPgorCisjaWZu
ZGVmIE5ERUJVRworI2RlZmluZSBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyNlbmRpZgorCitjb25z
dCBHVUlEIElJRF9EZXN0TmV0SW50ZXJuZXQgPSB7IDB4NDM2ZWYxNDQsIDB4YjRmYiwgMHg0ODYz
LCB7IDB4YTAsIDB4NDEsIDB4OGYsIDB4OTAsIDB4NWEsIDB4NjIsIDB4YzUsIDB4NzJ9IH07Citj
b25zdCBHVUlEIElJRF9Db25uUHJ2X0lQcm94eUV4dGVuc2lvbiA9IHsgMHhhZjk2YjBiZCwgMHhh
NDgxLCAweDQ4MmMsIHsgMHhhMCwgMHg5NCwgMHhhOCwgMHg0NCwgMHg4NywgMHg2NywgMHhhMCwg
MHhjMCB9IH07CisKK3R5cGVkZWYgdm9pZCAoKkJ1ZmZlckRlbGV0ZXIpKGNoYXIgKmRhdGEsIGlu
dCBsZW4pOwordHlwZWRlZiBib29sICgqRmV0Y2hBYm91dFBhZ2UpKGNvbnN0IHdjaGFyX3QgKmZp
bGVOYW1lLCBjaGFyICoqZGF0YSwgaW50ICpsZW4sIEJ1ZmZlckRlbGV0ZXIqIGRlbGV0ZXIpOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdHJpbmcgZ191c2VyQWdlbnRTdHIoIk1v
emlsbGEvNS4wIChXaW5kb3dzIE5UOyBVOyBNb2JpbGU7IGVuKSBBcHBsZVdlYktpdC80MTguOS4x
IChLSFRNTCwgbGlrZSBHZWNrbykgU2FmYXJpLzQxOS4zIFdNNiBJcmlzLzEuMC4wIik7CitzdGF0
aWMgaW50IGdfbWF4TnVtV2luSW5ldEpvYnMgPSA0Oworc3RhdGljIEZldGNoQWJvdXRQYWdlIGZl
dGNoQWJvdXRQYWdlID0gMDsKK3ZvaWQgc2V0QWJvdXRQYWdlQ2FsbGJhY2soRmV0Y2hBYm91dFBh
Z2UgZmFwKSB7IGZldGNoQWJvdXRQYWdlID0gZmFwOyB9Cit2b2lkIHNldFVzZXJBZ2VudFN0cihj
b25zdCBTdHJpbmcmIGFnZW50KSB7IGdfdXNlckFnZW50U3RyID0gYWdlbnQ7IH0KK1N0cmluZyB1
c2VyQWdlbnRTdHIoKSB7IHJldHVybiBnX3VzZXJBZ2VudFN0cjsgfQordm9pZCBzZXRNYXhOdW1X
aW5JbmV0Sm9icyhpbnQgbnVtKSB7IGdfbWF4TnVtV2luSW5ldEpvYnMgPSBudW07IH0KKworLy8g
TWVzc2FnZSB0eXBlcyBmb3IgaW50ZXJuYWwgdXNlIChrZWVwIGluIHN5bmMgd2l0aCBrTWVzc2Fn
ZUhhbmRsZXJzKQorZW51bSB7CisgICAgaGFuZGxlQ3JlYXRlZE1lc3NhZ2UgPSBXTV9VU0VSLAor
ICAgIHJlcXVlc3RSZWRpcmVjdGVkTWVzc2FnZSwKKyAgICByZXF1ZXN0Q29tcGxldGVNZXNzYWdl
LAorICAgIGNvbm5lY3Rpb25DbG9zZWRNZXNzYWdlCit9OworCitjbGFzcyBSZXNvdXJjZUpvYk1h
bmFnZXI6IE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBIV05EIGh3bmQoKSBjb25zdCB7IHJl
dHVybiBtX3RyYW5zZmVySm9iV2luZG93SGFuZGxlOyB9CisKKyAgICB2b2lkIGluaXRpYWxpemVP
ZmZTY3JlZW5SZXNvdXJjZUhhbmRsZVdpbmRvdygpCisgICAgeworICAgICAgICBpZiAobV90cmFu
c2ZlckpvYldpbmRvd0hhbmRsZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzdGF0
aWMgY29uc3QgTFBDV1NUUiBrUmVzb3VyY2VIYW5kbGVXaW5kb3dDbGFzc05hbWUgPSBMIlJlc291
cmNlSGFuZGxlV2luZG93Q2xhc3MiOworCisgICAgICAgIFdORENMQVNTIHdjOworICAgICAgICBt
ZW1zZXQoJndjLCAwLCBzaXplb2Yod2MpKTsKKworICAgICAgICB3Yy5scGZuV25kUHJvYyAgICA9
IFJlc291cmNlSGFuZGxlV25kUHJvYzsKKyAgICAgICAgd2MuaEluc3RhbmNlICAgICAgPSBQYWdl
OjppbnN0YW5jZUhhbmRsZSgpOworICAgICAgICB3Yy5scHN6Q2xhc3NOYW1lICA9IGtSZXNvdXJj
ZUhhbmRsZVdpbmRvd0NsYXNzTmFtZTsKKyAgICAgICAgUmVnaXN0ZXJDbGFzcygmd2MpOworCisg
ICAgICAgIG1fdHJhbnNmZXJKb2JXaW5kb3dIYW5kbGUgPSBDcmVhdGVXaW5kb3coa1Jlc291cmNl
SGFuZGxlV2luZG93Q2xhc3NOYW1lLCAwLCAwLCBDV19VU0VERUZBVUxULCAwLCBDV19VU0VERUZB
VUxULCAwLAorICAgICAgICAgICAgSFdORF9NRVNTQUdFLCAwLCBQYWdlOjppbnN0YW5jZUhhbmRs
ZSgpLCAwKTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIGZhaWxlZCB0byBv
cGVuIFVSTC4KKyAgICBib29sIGFkZFRvT3V0c3RhbmRpbmdKb2JzKFJlc291cmNlSGFuZGxlKiBq
b2IsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIpCisgICAgeworICAgICAgICBpZiAoIW1fam9iSWRN
YXApIHsKKyAgICAgICAgICAgIG1fam9iSWRNYXAgPSBuZXcgSGFzaE1hcDxpbnQsIFJlc291cmNl
SGFuZGxlKj47CisgICAgICAgICAgICBtX2RlZmVycmVkSm9icyA9IG5ldyBIYXNoTWFwPGludCwg
U3RyaW5nPjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHNraXAgb3ZlciAwCisgICAgICAgIGlm
ICghKyttX3RyYW5zZmVySm9iSWQpCisgICAgICAgICAgICBtX3RyYW5zZmVySm9iSWQgPSAxOwor
CisgICAgICAgIG1fam9iSWRNYXAtPnNldChtX3RyYW5zZmVySm9iSWQsIGpvYik7CisgICAgICAg
IGpvYi0+ZC0+bV9qb2JJZCA9IG1fdHJhbnNmZXJKb2JJZDsKKyAgICAgICAgCisgICAgICAgIGlm
IChtX2pvYklkTWFwLT5zaXplKCkgLSBtX2RlZmVycmVkSm9icy0+c2l6ZSgpID4gZ19tYXhOdW1X
aW5JbmV0Sm9icykgeworICAgICAgICAgICAgbV9kZWZlcnJlZEpvYnMtPnNldChtX3RyYW5zZmVy
Sm9iSWQsIHJlZmVycmVyKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGpvYi0+b3BlblVybChyZWZlcnJlciwgdHJ1ZSk7CisgICAgfQorCisg
ICAgdm9pZCByZW1vdmVGcm9tT3V0c3RhbmRpbmdKb2JzKGludCBqb2JJZCkKKyAgICB7CisgICAg
ICAgIGlmICghbV9qb2JJZE1hcCB8fCAhbV9qb2JJZE1hcC0+Y29udGFpbnMoam9iSWQpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fam9iSWRNYXAtPnJlbW92ZShqb2JJZCk7Cisg
ICAgICAgIG1fZGVmZXJyZWRKb2JzLT5yZW1vdmUoam9iSWQpOworCisgICAgICAgIHdoaWxlICht
X2RlZmVycmVkSm9icy0+c2l6ZSgpICYmIG1fam9iSWRNYXAtPnNpemUoKSAtIG1fZGVmZXJyZWRK
b2JzLT5zaXplKCkgPCBnX21heE51bVdpbkluZXRKb2JzKSB7CisgICAgICAgICAgICBIYXNoTWFw
PGludCwgU3RyaW5nPjo6aXRlcmF0b3IgYmVnID0gbV9kZWZlcnJlZEpvYnMtPmJlZ2luKCk7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBuZXdKb2JJZCA9IGJlZy0+Zmlyc3Q7CisgICAgICAgICAgICBT
dHJpbmcgcmVmZXJyZXIgPSBiZWctPnNlY29uZDsKKyAgICAgICAgICAgIG1fZGVmZXJyZWRKb2Jz
LT5yZW1vdmUoYmVnKTsKKworICAgICAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IG1fam9i
SWRNYXAtPmdldChuZXdKb2JJZCk7CisgICAgICAgICAgICBpZiAoIWpvYi0+b3BlblVybChyZWZl
cnJlciwgZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGl0IGJlZm9yZSBkZWxl
dGluZyB0byBhdm9pZCByZWVudGVyaW5nIHRoaXMgbG9vcAorICAgICAgICAgICAgICAgIG1fam9i
SWRNYXAtPnJlbW92ZShuZXdKb2JJZCk7CisgICAgICAgICAgICAgICAgam9iLT5mYWlsKCJGYWls
ZWQgdG8gb3BlbiBVUkwiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IGJvb2wgcmVuZXdKb2JJZChpbnQgb2xkSm9iSWQpCisgICAgeworICAgICAgICBpZiAoIW1fam9i
SWRNYXAgfHwgIW1fam9iSWRNYXAtPmNvbnRhaW5zKG9sZEpvYklkKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBpZiAoISsrbV90cmFuc2ZlckpvYklkKQorICAgICAgICAg
ICAgbV90cmFuc2ZlckpvYklkID0gMTsKKworICAgICAgICBpZiAobV9kZWZlcnJlZEpvYnMtPmNv
bnRhaW5zKG9sZEpvYklkKSkgeworICAgICAgICAgICAgbV9kZWZlcnJlZEpvYnMtPnNldChtX3Ry
YW5zZmVySm9iSWQsIG1fZGVmZXJyZWRKb2JzLT5nZXQob2xkSm9iSWQpKTsKKyAgICAgICAgICAg
IG1fZGVmZXJyZWRKb2JzLT5yZW1vdmUob2xkSm9iSWQpOworICAgICAgICB9CisKKyAgICAgICAg
UmVzb3VyY2VIYW5kbGUqIGpvYiA9IG1fam9iSWRNYXAtPmdldChvbGRKb2JJZCk7CisgICAgICAg
IGpvYi0+ZC0+bV9qb2JJZCA9IG1fdHJhbnNmZXJKb2JJZDsKKworICAgICAgICBtX2pvYklkTWFw
LT5zZXQobV90cmFuc2ZlckpvYklkLCBqb2IpOworICAgICAgICBtX2pvYklkTWFwLT5yZW1vdmUo
b2xkSm9iSWQpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFJlc291cmNl
SGFuZGxlKiBsb29rdXBSZXNvdXJjZUhhbmRsZShpbnQgam9iSWQpCisgICAgeworICAgICAgICBp
ZiAoIW1fam9iSWRNYXApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1f
am9iSWRNYXAtPmdldChqb2JJZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBSZXNv
dXJjZUpvYk1hbmFnZXIqIGpvYk1hbmFnZXIoKTsKKworICAgIFJlc291cmNlSm9iTWFuYWdlcigp
CisgICAgICAgIDogbV90cmFuc2ZlckpvYklkKDApCisgICAgICAgICwgbV9qb2JJZE1hcCgwKQor
ICAgICAgICAsIG1fdHJhbnNmZXJKb2JXaW5kb3dIYW5kbGUoMCkKKyAgICAgICAgLCBtX2RlZmVy
cmVkSm9icygwKQorICAgIHsKKyAgICB9CisKKyAgICB+UmVzb3VyY2VKb2JNYW5hZ2VyKCkKKyAg
ICB7CisgICAgICAgIGlmIChtX3RyYW5zZmVySm9iV2luZG93SGFuZGxlKQorICAgICAgICAgICAg
RGVzdHJveVdpbmRvdyhtX3RyYW5zZmVySm9iV2luZG93SGFuZGxlKTsKKworICAgICAgICBpZiAo
bV9qb2JJZE1hcCkgeworICAgICAgICAgICAgd2hpbGUgKCFtX2pvYklkTWFwLT5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgZGVsZXRlIG1fam9iSWRNYXAtPmJlZ2luKCktPnNlY29uZDsKKwor
ICAgICAgICAgICAgZGVsZXRlIG1fam9iSWRNYXA7CisgICAgICAgICAgICBkZWxldGUgbV9kZWZl
cnJlZEpvYnM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgTFJFU1VMVCBDQUxMQkFD
SyBSZXNvdXJjZUhhbmRsZVduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQQVJBTSB3UGFyYW0s
IExQQVJBTSBsUGFyYW0pOworCisgICAgdW5zaWduZWQgbV90cmFuc2ZlckpvYklkOworICAgIEhh
c2hNYXA8aW50LCBSZXNvdXJjZUhhbmRsZSo+KiBtX2pvYklkTWFwOworICAgIEhXTkQgbV90cmFu
c2ZlckpvYldpbmRvd0hhbmRsZTsKKyAgICBIYXNoTWFwPGludCwgU3RyaW5nPiogbV9kZWZlcnJl
ZEpvYnM7Cit9OworCisKK0xSRVNVTFQgQ0FMTEJBQ0sgUmVzb3VyY2VKb2JNYW5hZ2VyOjpSZXNv
dXJjZUhhbmRsZVduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSkKK3sKKyAgICB0eXBlZGVmIHZvaWQgKFJlc291cmNlSGFuZGxlOjogKlJlc291cmNlSGFu
ZGxlRXZlbnRIYW5kbGVyKShMUEFSQU0pOworICAgIHN0YXRpYyBjb25zdCBSZXNvdXJjZUhhbmRs
ZUV2ZW50SGFuZGxlciBtZXNzYWdlSGFuZGxlcnNbXSA9IHsKKyAgICAgICAgJlJlc291cmNlSGFu
ZGxlOjpvbkhhbmRsZUNyZWF0ZWQsCisgICAgICAgICZSZXNvdXJjZUhhbmRsZTo6b25SZXF1ZXN0
UmVkaXJlY3RlZCwKKyAgICAgICAgJlJlc291cmNlSGFuZGxlOjpvblJlcXVlc3RDb21wbGV0ZSwK
KyAgICAgICAgJlJlc291cmNlSGFuZGxlOjpvbkNvbm5lY3Rpb25DbG9zZWQsCisgICAgfTsKKwor
ICAgIGlmIChtZXNzYWdlID49IFdNX1VTRVIpIHsKKyAgICAgICAgVUlOVCBpbmRleCA9IG1lc3Nh
Z2UgLSBXTV9VU0VSOworICAgICAgICBpZiAoaW5kZXggPCBfY291bnRvZihtZXNzYWdlSGFuZGxl
cnMpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBqb2JJZCA9ICh1bnNpZ25lZCkgd1BhcmFtOwor
ICAgICAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IGpvYk1hbmFnZXIoKS0+bG9va3VwUmVz
b3VyY2VIYW5kbGUoam9iSWQpOworICAgICAgICAgICAgaWYgKGpvYikgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChqb2ItPmQtPm1fam9iSWQgPT0gam9iSWQpOworICAgICAgICAgICAgICAgIEFT
U0VSVChqb2ItPmQtPm1fdGhyZWFkSWQgPT0gR2V0Q3VycmVudFRocmVhZElkKCkpOworICAgICAg
ICAgICAgICAgIChqb2ItPioobWVzc2FnZUhhbmRsZXJzW2luZGV4XSkpKGxQYXJhbSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSk7Cit9CisK
Kworc3RhdGljIFJlc291cmNlSm9iTWFuYWdlciogam9iTWFuYWdlcigpCit7CisgICAgc3RhdGlj
IFJlc291cmNlSm9iTWFuYWdlciAgICBqbTsKKyAgICByZXR1cm4gJmptOworfQorCitjbGFzcyBH
bG9iYWxDb25uZWN0aW9uTWFuYWdlcjogTm9uY29weWFibGUKK3sKK3B1YmxpYzoKKyAgICBHbG9i
YWxDb25uZWN0aW9uTWFuYWdlcigpCisgICAgeworICAgICAgICBtX2hDb25uZWN0aW9uID0gTlVM
TDsKKyAgICAgICAgbV9oSW50ZXJuZXQgPSBOVUxMOworICAgICAgICBtX3BzelByb3h5ID0gTlVM
TDsKKyAgICAgICAgbV9kd0FjY2Vzc1R5cGUgPSAwOworICAgICAgICBtX2hyID0gU19PSzsgCisK
KyAgICAgICAgY29ubmVjdCgpOworICAgIH0KKyAgICB+R2xvYmFsQ29ubmVjdGlvbk1hbmFnZXIo
KQorICAgIHsKKyAgICAgICAgaWYgKG1faEludGVybmV0KQorICAgICAgICAgICAgSW50ZXJuZXRD
bG9zZUhhbmRsZShtX2hJbnRlcm5ldCk7CisgICAgICAgIGlmIChtX2hDb25uZWN0aW9uKQorICAg
ICAgICAgICAgQ29ubk1nclJlbGVhc2VDb25uZWN0aW9uKG1faENvbm5lY3Rpb24sIDEpOworICAg
IH0KKworICAgIHZvaWQgZXN0YWJsaXNoQ29ubmVjdGlvbigpCisgICAgeworICAgICAgICBpZiAo
IW1faENvbm5lY3Rpb24pIHsKKyAgICAgICAgICAgIG1faEludGVybmV0ID0gTlVMTDsKKworICAg
ICAgICAgICAgQ09OTk1HUl9DT05ORUNUSU9OSU5GTyBjaSA9IHswfTsKKworICAgICAgICAgICAg
Y2kuY2JTaXplID0gc2l6ZW9mKENPTk5NR1JfQ09OTkVDVElPTklORk8pOyAKKyAgICAgICAgICAg
IGNpLmR3UGFyYW1zID0gQ09OTk1HUl9QQVJBTV9HVUlEREVTVE5FVDsgCisgICAgICAgICAgICBj
aS5kd0ZsYWdzID0gQ09OTk1HUl9GTEFHX1BST1hZX0hUVFA7IAorICAgICAgICAgICAgY2kuZHdQ
cmlvcml0eSA9IENPTk5NR1JfUFJJT1JJVFlfVVNFUklOVEVSQUNUSVZFOworICAgICAgICAgICAg
Y2kuYkV4Y2x1c2l2ZSA9IFRSVUU7CisKKyAgICAgICAgICAgIERXT1JEIGR3SW5kZXggPSAwOwor
ICAgICAgICAgICAgaWYgKFNfT0sgIT0gQ29ubk1nck1hcFVSTChMImh0dHA6Ly93d3cuaXJpc2Jy
b3dzZXIuY29tIiwgJihjaS5ndWlkRGVzdE5ldCksICZkd0luZGV4KSkKKyAgICAgICAgICAgICAg
ICBjaS5ndWlkRGVzdE5ldCA9IElJRF9EZXN0TmV0SW50ZXJuZXQ7CisKKyAgICAgICAgICAgIERX
T1JEIGR3U3RhdHVzID0gMDsKKyAgICAgICAgICAgIGlmIChTX09LICE9IENvbm5NZ3JFc3RhYmxp
c2hDb25uZWN0aW9uU3luYygmY2ksICZtX2hDb25uZWN0aW9uLCAyNTAwMCwgJmR3U3RhdHVzKSkK
KyAgICAgICAgICAgICAgICBtX2hDb25uZWN0aW9uID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQgb3BlbkludGVybmV0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2hDb25uZWN0
aW9uICYmICFtX2hJbnRlcm5ldCkgeworICAgICAgICAgICAgUFJPWFlfQ09ORklHIHBjUHJveHkg
PSB7MH07CisgICAgICAgICAgICBpZiAoU19PSyA9PSBDb25uTWdyUHJvdmlkZXJNZXNzYWdlKCBt
X2hDb25uZWN0aW9uLCAmSUlEX0Nvbm5QcnZfSVByb3h5RXh0ZW5zaW9uLCBOVUxMLCAwLCAwLCAo
UEJZVEUpJnBjUHJveHksIHNpemVvZihwY1Byb3h5KSkpIHsKKyAgICAgICAgICAgICAgICBtX2R3
QWNjZXNzVHlwZSA9IElOVEVSTkVUX09QRU5fVFlQRV9QUk9YWTsKKyAgICAgICAgICAgICAgICBt
X3BzelByb3h5ID0gKExQVFNUUikgTG9jYWxBbGxvYyhMUFRSLCBfY291bnRvZihwY1Byb3h5LnN6
UHJveHlTZXJ2ZXIpKTsKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgbV9wc3pQcm94eSB3
YXMgYWxsb2NhdGVkLgorCisgICAgICAgICAgICAgICAgbV9ociA9IFN0cmluZ0NjaENvcHlOKG1f
cHN6UHJveHksIF9jb3VudG9mKHBjUHJveHkuc3pQcm94eVNlcnZlciksIAorICAgICAgICAgICAg
ICAgICAgICBwY1Byb3h5LnN6UHJveHlTZXJ2ZXIsIF9jb3VudG9mKHBjUHJveHkuc3pQcm94eVNl
cnZlcikpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2R3QWNjZXNz
VHlwZSA9IElOVEVSTkVUX09QRU5fVFlQRV9ESVJFQ1Q7IC8vIElOVEVSTkVUX09QRU5fVFlQRV9Q
UkVDT05GSUc7IAorICAgICAgICAgICAgICAgIG1fcHN6UHJveHkgPSBOVUxMOworCisgICAgICAg
ICAgICAgICAgbV9ociA9IFNfT0s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1faElu
dGVybmV0ID0gSW50ZXJuZXRPcGVuCisgICAgICAgICAgICAgICAgKCBnX3VzZXJBZ2VudFN0ci5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpCisgICAgICAgICAgICAgICAgLCBtX2R3QWNj
ZXNzVHlwZQorICAgICAgICAgICAgICAgICwgbV9wc3pQcm94eQorICAgICAgICAgICAgICAgICwg
TlVMTAorICAgICAgICAgICAgICAgICwgSU5URVJORVRfRkxBR19BU1lOQyk7CisKKyAgICAgICAg
ICAgIGlmIChtX2hJbnRlcm5ldCkgeworICAgICAgICAgICAgICAgIGpvYk1hbmFnZXIoKS0+aW5p
dGlhbGl6ZU9mZlNjcmVlblJlc291cmNlSGFuZGxlV2luZG93KCk7CisKKyAgICAgICAgICAgICAg
ICBJTlRFUk5FVF9TVEFUVVNfQ0FMTEJBQ0sgY2FsbGJhY2tIYW5kbGUgPSAKKyAgICAgICAgICAg
ICAgICAgICAgSW50ZXJuZXRTZXRTdGF0dXNDYWxsYmFjayhtX2hJbnRlcm5ldCwgdHJhbnNmZXJK
b2JTdGF0dXNDYWxsYmFjayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
dm9pZCBjb25uZWN0KCkKKyAgICB7CisgICAgICAgIGVzdGFibGlzaENvbm5lY3Rpb24oKTsKKyAg
ICAgICAgb3BlbkludGVybmV0KCk7CisgICAgfQorCisgICAgTFBXU1RSICAgICAgICBtX3BzelBy
b3h5OworICAgIERXT1JEICAgICAgICBtX2R3QWNjZXNzVHlwZTsKKyAgICBIQU5ETEUgICAgICAg
IG1faENvbm5lY3Rpb247CisgICAgSElOVEVSTkVUICAgIG1faEludGVybmV0OworICAgIEhSRVNV
TFQgICAgICAgIG1faHI7IAorCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIF9fc3RkY2FsbCB0
cmFuc2ZlckpvYlN0YXR1c0NhbGxiYWNrKEhJTlRFUk5FVCBpbnRlcm5ldEhhbmRsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRF9QVFIg
am9iSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRFdPUkQgaW50ZXJuZXRTdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTFBWT0lEIHN0YXR1c0luZm9ybWF0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIHN0YXR1c0lu
Zm9ybWF0aW9uTGVuZ3RoKTsKKworfTsKKwordm9pZCBfX3N0ZGNhbGwgR2xvYmFsQ29ubmVjdGlv
bk1hbmFnZXI6OnRyYW5zZmVySm9iU3RhdHVzQ2FsbGJhY2soSElOVEVSTkVUIGludGVybmV0SGFu
ZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdP
UkRfUFRSIGpvYklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRFdPUkQgaW50ZXJuZXRTdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBMUFZPSUQgc3RhdHVzSW5mb3JtYXRpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBzdGF0dXNJbmZvcm1h
dGlvbkxlbmd0aCkKK3sKKyNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyAgICBwcmludGYo
InN0YXR1cy1jYWxsYmFjazogc3RhdHVzPSV1LCBqb2I9JXBcbiIsCisgICAgICAgICAgICAgIGlu
dGVybmV0U3RhdHVzLCBqb2JJZCk7CisjZW5kaWYKKworICAgIFVJTlQgbXNnOworICAgIExQQVJB
TSBsUGFyYW07CisKKyAgICBzd2l0Y2ggKGludGVybmV0U3RhdHVzKSB7CisgICAgY2FzZSBJTlRF
Uk5FVF9TVEFUVVNfSEFORExFX0NSRUFURUQ6CisgICAgICAgIC8vIHRlbGwgdGhlIG1haW4gdGhy
ZWFkIGFib3V0IHRoZSBuZXdseSBjcmVhdGVkIGhhbmRsZQorICAgICAgICBtc2cgPSBoYW5kbGVD
cmVhdGVkTWVzc2FnZTsKKyAgICAgICAgbFBhcmFtID0gKExQQVJBTSkgTFBJTlRFUk5FVF9BU1lO
Q19SRVNVTFQoc3RhdHVzSW5mb3JtYXRpb24pLT5kd1Jlc3VsdDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfUkVRVUVTVF9DT01QTEVURToKKyNpZmRlZiBSRVNPVVJD
RV9MT0FERVJfREVCVUcKKyAgICAgICAgcHJpbnRmKCJyZXF1ZXN0LWNvbXBsZXRlOiByZXN1bHQ9
JXAsIGVycm9yPSV1XG4iLAorICAgICAgICAgICAgTFBJTlRFUk5FVF9BU1lOQ19SRVNVTFQoc3Rh
dHVzSW5mb3JtYXRpb24pLT5kd1Jlc3VsdCwKKyAgICAgICAgICAgIExQSU5URVJORVRfQVNZTkNf
UkVTVUxUKHN0YXR1c0luZm9ybWF0aW9uKS0+ZHdFcnJvcik7CisjZW5kaWYKKyAgICAgICAgLy8g
dGVsbCB0aGUgbWFpbiB0aHJlYWQgdGhhdCB0aGUgcmVxdWVzdCBpcyBkb25lCisgICAgICAgIG1z
ZyA9IHJlcXVlc3RDb21wbGV0ZU1lc3NhZ2U7CisgICAgICAgIGxQYXJhbSA9IChMUEFSQU0pTFBJ
TlRFUk5FVF9BU1lOQ19SRVNVTFQoc3RhdHVzSW5mb3JtYXRpb24pLT5kd0Vycm9yOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19SRURJUkVDVDoKKyAgICAgICAgLy8g
dGVsbCB0aGUgbWFpbiB0aHJlYWQgdG8gb2JzZXJ2ZSB0aGlzIHJlZGlyZWN0IChGSVhNRTogd2Ug
cHJvYmFibHkKKyAgICAgICAgLy8gbmVlZCB0byBibG9jayB0aGUgcmVkaXJlY3QgYXQgdGhpcyBw
b2ludCBzbyB0aGUgYXBwbGljYXRpb24gY2FuCisgICAgICAgIC8vIGRlY2lkZSB3aGV0aGVyIG9y
IG5vdCB0byBmb2xsb3cgdGhlIHJlZGlyZWN0KQorICAgICAgICBtc2cgPSByZXF1ZXN0UmVkaXJl
Y3RlZE1lc3NhZ2U7CisgICAgICAgIGxQYXJhbSA9IChMUEFSQU0pbmV3IFN0cmluZygoVUNoYXIq
KXN0YXR1c0luZm9ybWF0aW9uLCBzdGF0dXNJbmZvcm1hdGlvbkxlbmd0aCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX0NPTk5FQ1RJT05fQ0xPU0VEOgorICAgICAg
ICBtc2cgPSBjb25uZWN0aW9uQ2xvc2VkTWVzc2FnZTsKKyAgICAgICAgbFBhcmFtID0gMDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfVVNFUl9JTlBVVF9SRVFVSVJF
RDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJVU0VSIElOUFVUIFJFUVVJUkVEXG4iKTsKKyAg
ICAgICAgLy8gRklYTUU6IHByb21wdCB0aGUgdXNlciBpZiBuZWNlc3NhcnkKKyAgICAgICAgUmVz
dW1lU3VzcGVuZGVkRG93bmxvYWQoaW50ZXJuZXRIYW5kbGUsIDApOworICAgIGNhc2UgSU5URVJO
RVRfU1RBVFVTX1NUQVRFX0NIQU5HRToKKyAgICAgICAgLy8gbWF5IG5lZWQgdG8gY2FsbCBSZXN1
bWVTdXNwZW5kZWREb3dubG9hZCBoZXJlIGFzIHdlbGwKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgUG9zdE1lc3NhZ2Uoam9iTWFuYWdlcigpLT5od25kKCksIG1z
ZywgKFdQQVJBTSkgam9iSWQsIGxQYXJhbSk7Cit9CisKK2NsYXNzIENvbm5lY3Rpb25NYW5hZ2Vy
OiBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgQ29ubmVjdGlvbk1hbmFnZXIoKSAvLywgTFBD
V1NUUiB1c2VyQWdlbnRUZXgpCisgICAgICAgIDogbV9oVXJsKE5VTEwpCisgICAgICAgICwgbV9o
U2VjVXJsKE5VTEwpCisgICAgeworICAgICAgICBtX2Nvbm5lY3Rpb24uY29ubmVjdCgpOworICAg
IH0KKworICAgIH5Db25uZWN0aW9uTWFuYWdlcigpCisgICAgeworICAgICAgICBpZiAobV9oU2Vj
VXJsKQorICAgICAgICAgICAgSW50ZXJuZXRDbG9zZUhhbmRsZShtX2hTZWNVcmwpOworICAgICAg
ICBpZiAobV9oVXJsKQorICAgICAgICAgICAgSW50ZXJuZXRDbG9zZUhhbmRsZShtX2hVcmwpOwor
ICAgIH0KKworICAgIHN0YXRpYyBISU5URVJORVQgaW50ZXJuZXRIYW5kbGUgKCkgeyByZXR1cm4g
bV9jb25uZWN0aW9uLm1faEludGVybmV0OyB9CisgICAgSElOVEVSTkVUIHVybEhhbmRsZSAoKSBj
b25zdCB7IHJldHVybiBtX2hVcmw7IH0KKyAgICBISU5URVJORVQgc2Vjb25kYXJ5VXJsSGFuZGxl
ICgpIGNvbnN0IHsgcmV0dXJuIG1faFNlY1VybDsgfQorCisgICAgdm9pZCBjbG9zZVVybEhhbmRs
ZSgpCisgICAgeworICAgICAgICBpZiAobV9oU2VjVXJsKSB7CisgICAgICAgICAgICBJbnRlcm5l
dENsb3NlSGFuZGxlKG1faFNlY1VybCk7CisgICAgICAgICAgICBtX2hTZWNVcmwgPSBOVUxMOwor
ICAgICAgICB9CisgICAgICAgIGlmIChtX2hVcmwpIHsKKyAgICAgICAgICAgIEludGVybmV0Q2xv
c2VIYW5kbGUobV9oVXJsKTsKKyAgICAgICAgICAgIG1faFVybCA9IE5VTEw7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2b2lkIHNldFVybEhhbmRsZShISU5URVJORVQgdXJsKSB7IG1faFVybCA9
IHVybDsgfQorICAgIHZvaWQgc2V0U2Vjb25kYXJ5VXJsSGFuZGxlKEhJTlRFUk5FVCB1cmwpIHsg
bV9oU2VjVXJsID0gdXJsOyB9CisKK3ByaXZhdGU6CisKKyAgICBzdGF0aWMgR2xvYmFsQ29ubmVj
dGlvbk1hbmFnZXIgbV9jb25uZWN0aW9uOworICAgIEhJTlRFUk5FVCAgICBtX2hVcmw7CisgICAg
SElOVEVSTkVUICAgIG1faFNlY1VybDsKK307CisKK0dsb2JhbENvbm5lY3Rpb25NYW5hZ2VyIENv
bm5lY3Rpb25NYW5hZ2VyOjptX2Nvbm5lY3Rpb247CisKK3N0YXRpYyBTdHJpbmcgaHR0cFF1ZXJ5
SW5mbyhISU5URVJORVQgaFJlcXVlc3QsIERXT1JEIGR3SW5mb0xldmVsKQoreworICAgIERXT1JE
IGJ1ZmZlckxlbmd0aCA9IDA7CisgICAgaWYgKEh0dHBRdWVyeUluZm8oaFJlcXVlc3QsIGR3SW5m
b0xldmVsLCAwLCAmYnVmZmVyTGVuZ3RoLCAwKSB8fCBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVS
ICE9IEdldExhc3RFcnJvcigpIHx8ICFidWZmZXJMZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIFVDaGFyKiBidWZmZXIgPSBuZXcgVUNoYXJbKGJ1ZmZlckxlbmd0aCArIDEp
IC8gMl07CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAg
IGlmICghSHR0cFF1ZXJ5SW5mbyhoUmVxdWVzdCwgZHdJbmZvTGV2ZWwsIGJ1ZmZlciwgJmJ1ZmZl
ckxlbmd0aCwgMCkpIHsKKyAgICAgICAgZGVsZXRlW10gYnVmZmVyOworICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgfQorCisgICAgU3RyaW5nIHJ0bihidWZmZXIsIChidWZmZXJMZW5ndGgg
KyAxKSAvIDIpOworICAgIGRlbGV0ZVtdIGJ1ZmZlcjsKKworICAgIHJldHVybiBydG47Cit9CisK
K1Jlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKK3sKKyAg
ICBpZiAobV9maWxlSGFuZGxlICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICBDbG9z
ZUhhbmRsZShtX2ZpbGVIYW5kbGUpOworCisgICAgZGVsZXRlIG1fY29ubk1ncjsKKyAgICBkZWxl
dGVbXSBtX2Zvcm1EYXRhU3RyaW5nOworfQorCitSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFu
ZGxlKCkKK3sKKyAgICAvLyBDbG9zZSB0aGUgaGFuZGxlcyBiZWZvcmUgcmVtb3ZpbmcgdGhlIGpv
YgorICAgIGRlbGV0ZSBkLT5tX2Nvbm5NZ3I7CisgICAgZC0+bV9jb25uTWdyID0gMDsKKworICAg
IGlmIChkLT5tX2pvYklkKQorICAgICAgICBqb2JNYW5hZ2VyKCktPnJlbW92ZUZyb21PdXRzdGFu
ZGluZ0pvYnMoZC0+bV9qb2JJZCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmZpbmlzaCgp
Cit7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+ZGlkRmluaXNoTG9hZGlu
Zyh0aGlzKTsKKyAgICBkZWxldGUgdGhpczsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6ZmFp
bChjb25zdCBTdHJpbmcmIGVycm9yKQoreworICAgIGlmIChjbGllbnQoKSkgeworICAgICAgICBS
ZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworICAgICAgICByZXNwb25zZS5zZXRVUkwocmVxdWVz
dCgpLnVybCgpKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUoInRleHQvaHRtbCIpOwor
ICAgICAgICByZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKCJVVEYtMTYiKTsKKyAgICAgICAg
U3RyaW5nIGNvbnRlbnRFcnJvcihMIjxodG1sPjxib2R5IHdpZHRoPVwiNTBcIj4iKTsKKyAgICAg
ICAgY29udGVudEVycm9yICs9IGVycm9yOworICAgICAgICBjb250ZW50RXJyb3IgKz0gU3RyaW5n
KEwiPC9ib2R5PjwvaHRtbD4iKTsKKyAgICAgICAgY2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25z
ZSh0aGlzLCByZXNwb25zZSk7CisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0aGlz
LCAoY29uc3QgY2hhciopY29udGVudEVycm9yLmNoYXJhY3RlcnMoKSwgY29udGVudEVycm9yLmxl
bmd0aCgpICogMiwgMCk7CisgICAgICAgIGNsaWVudCgpLT5kaWRGYWlsKHRoaXMsIFJlc291cmNl
RXJyb3IoIkVycm9yIiwgLTEsIHJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKSwgZXJyb3IpKTsKKyAg
ICB9CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3N0YXRpYyBpbnQgY2FjaGVGbGFnc0Zvcihjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKK3sKKyAgICBpbnQgZmxhZ3MgPSAw
OworICAgIHN3aXRjaCAocmVzb3VyY2VSZXF1ZXN0LmNhY2hlUG9saWN5KCkpIHsKKyAgICAgICAg
Y2FzZSBSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YToKKyAgICAgICAgICAgIGZsYWdzIHw9IElOVEVS
TkVUX0ZMQUdfUkVMT0FEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmV0dXJu
Q2FjaGVEYXRhRWxzZUxvYWQ6CisgICAgICAgICAgICBmbGFncyB8PSBJTlRFUk5FVF9GTEFHX0NB
Q0hFX0lGX05FVF9GQUlMOworICAgICAgICAgICAgZmxhZ3MgfD0gSU5URVJORVRfRkxBR19GV0Rf
QkFDSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJldHVybkNhY2hlRGF0YURv
bnRMb2FkOgorICAgICAgICAgICAgZmxhZ3MgfD0gSU5URVJORVRfRkxBR19GUk9NX0NBQ0hFOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVXNlUHJvdG9jb2xDYWNoZVBvbGljeToK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGZsYWdzIHw9IElOVEVSTkVUX0ZMQUdfQ0FD
SEVfSUZfTkVUX0ZBSUw7CisgICAgICAgICAgICBmbGFncyB8PSBJTlRFUk5FVF9GTEFHX0hZUEVS
TElOSzsKKyAgICAgICAgICAgIGZsYWdzIHw9IElOVEVSTkVUX0ZMQUdfUkVTWU5DSFJPTklaRTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBmbGFnczsKK30KKwordm9p
ZCBSZXNvdXJjZUhhbmRsZTo6c2V0UmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgcmVzcG9uc2Uuc2V0VVJMKHJlcXVlc3QoKS51cmwoKSk7CisgICAgaWYgKGQtPm1f
Y29ubk1ncikgeworICAgICAgICBISU5URVJORVQgaGFuZGxlID0gKHJlcXVlc3QoKS5odHRwTWV0
aG9kKCkgPT0gIlBPU1QiKSA/IGQtPm1fY29ubk1nci0+c2Vjb25kYXJ5VXJsSGFuZGxlKCkgOiBk
LT5tX2Nvbm5NZ3ItPnVybEhhbmRsZSgpOworICAgICAgICBpZiAoaGFuZGxlICE9IE5VTEwpIHsK
KyAgICAgICAgICAgIERXT1JEIGJ1ZmZlckxlbmd0aCA9IHNpemVvZiBEV09SRDsKKworICAgICAg
ICAgICAgRFdPUkQgY29udGVudExlbmd0aDsKKyAgICAgICAgICAgIGlmIChIdHRwUXVlcnlJbmZv
KGhhbmRsZSwgSFRUUF9RVUVSWV9DT05URU5UX0xFTkdUSCwgJmNvbnRlbnRMZW5ndGgsICZidWZm
ZXJMZW5ndGgsIDApKQorICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVu
dExlbmd0aChzdGF0aWNfY2FzdDxsb25nIGxvbmcgaW50Pihjb250ZW50TGVuZ3RoKSk7IAorCisg
ICAgICAgICAgICBEV09SRCBzdGF0dXNDb2RlID0gMDsKKyAgICAgICAgICAgIGlmIChIdHRwUXVl
cnlJbmZvKGhhbmRsZSwgSFRUUF9RVUVSWV9TVEFUVVNfQ09ERXxIVFRQX1FVRVJZX0ZMQUdfTlVN
QkVSLCAmc3RhdHVzQ29kZSwgJmJ1ZmZlckxlbmd0aCwgMCkpCisgICAgICAgICAgICAgICAgcmVz
cG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoc3RhdHVzQ29kZSk7CisKKyAgICAgICAgICAgIFN0cmlu
ZyBjb250ZW50VHlwZSA9IGh0dHBRdWVyeUluZm8oaGFuZGxlLCBIVFRQX1FVRVJZX0NPTlRFTlRf
VFlQRSk7CisgICAgICAgICAgICBpZiAoIWNvbnRlbnRUeXBlLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5
cGUoY29udGVudFR5cGUpKTsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRUZXh0RW5jb2Rp
bmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb250ZW50VHlwZSkpOworICAgICAg
ICAgICAgICAgIFN0cmluZyBkaXNwb3NpdGlvbiA9IGh0dHBRdWVyeUluZm8oaGFuZGxlLCBIVFRQ
X1FVRVJZX0NPTlRFTlRfRElTUE9TSVRJT04pOworICAgICAgICAgICAgICAgIGlmICghZGlzcG9z
aXRpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRTdWdnZXN0
ZWRGaWxlbmFtZShmaWxlbmFtZUZyb21IVFRQQ29udGVudERpc3Bvc2l0aW9uKGRpc3Bvc2l0aW9u
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gZ290IE1JTUUgdHlwZQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIFN0cmluZyBwYXRoOworICAgIGlmIChyZXF1ZXN0KCkudXJsKCkuaXNMb2NhbEZpbGUo
KSkKKyAgICAgICAgcGF0aCA9IHJlcXVlc3QoKS51cmwoKS5wYXRoKCk7CisgICAgZWxzZQorICAg
ICAgICBwYXRoID0gcmVxdWVzdCgpLnVybCgpLnN0cmluZygpOworCisgICAgaW50IHF1ZXJ5UG9z
ID0gcGF0aC5maW5kKCc/Jyk7CisgICAgaWYgKHF1ZXJ5UG9zID49IDApCisgICAgICAgIHBhdGgu
cmVtb3ZlKHF1ZXJ5UG9zKTsKKworICAgIGludCBkb3RQb3MgPSBwYXRoLnJldmVyc2VGaW5kKCcu
Jyk7CisgICAgaW50IHNsYXNoUG9zID0gcGF0aC5yZXZlcnNlRmluZCgnLycpOworCisgICAgaWYg
KGRvdFBvcyA8IHNsYXNoUG9zIHx8IGRvdFBvcyA8IDApCisgICAgICAgIHJlc3BvbnNlLnNldE1p
bWVUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICBlbHNlIHsKKyAgICAgICAgU3RyaW5nIGV4dCA9IHBh
dGguc3Vic3RyaW5nKGRvdFBvcyArIDEpOworICAgICAgICByZXNwb25zZS5zZXRNaW1lVHlwZShN
SU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihleHQpKTsKKyAgICB9Cit9
CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6Om9uSGFuZGxlQ3JlYXRlZChMUEFSQU0gbFBhcmFtKQor
eworICAgIGlmICghY2xpZW50KCkpIHsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIWQtPm1fY29ubk1nci0+dXJsSGFuZGxlKCkpIHsKKyAg
ICAgICAgZC0+bV9jb25uTWdyLT5zZXRVcmxIYW5kbGUoKEhJTlRFUk5FVClsUGFyYW0pOworCisg
ICAgICAgIGlmIChyZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIikgeworICAgICAgICAg
ICAgLy8gRklYTUU6IFRvbyBsYXRlIHRvIHNldCByZWZlcnJlciBwcm9wZXJseS4KKyAgICAgICAg
ICAgIFN0cmluZyB1cmxTdHIgPSByZXF1ZXN0KCkudXJsKCkucGF0aCgpOworICAgICAgICAgICAg
aW50IGZyYWdtZW50SW5kZXggPSB1cmxTdHIuZmluZCgnIycpOworICAgICAgICAgICAgaWYgKGZy
YWdtZW50SW5kZXggIT0gLTEpCisgICAgICAgICAgICAgICAgdXJsU3RyID0gdXJsU3RyLmxlZnQo
ZnJhZ21lbnRJbmRleCk7CisgICAgICAgICAgICBzdGF0aWMgTFBDV1NUUiBhY2NlcHRbMl09e0wi
Ki8qIiwgTlVMTH07CisgICAgICAgICAgICBpbnQgc2VjdXJlRmxhZyA9IHJlcXVlc3QoKS51cmwo
KS5wcm90b2NvbCgpLmxvd2VyKCkgPT0gImh0dHBzIiA/IElOVEVSTkVUX0ZMQUdfU0VDVVJFIDog
MDsKKyAgICAgICAgICAgIEhJTlRFUk5FVCB1cmxIYW5kbGUgPSBIdHRwT3BlblJlcXVlc3QoZC0+
bV9jb25uTWdyLT51cmxIYW5kbGUoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBMIlBPU1QiLCB1cmxTdHIuY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKSwgMCwgMCwgYWNjZXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSU5URVJORVRfRkxBR19LRUVQX0NPTk5FQ1RJT04gfCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlRmxh
Z3NGb3IocmVxdWVzdCgpKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWN1cmVGbGFnIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIElOVEVSTkVUX0ZMQUdfRk9STVNfU1VCTUlUIHwgKi8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVS
TkVUX0ZMQUdfSUdOT1JFX1JFRElSRUNUX1RPX0hUVFBTIHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSTkVUX0ZMQUdfSUdOT1JFX1JFRElS
RUNUX1RPX0hUVFAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoRFdPUkRfUFRSKWQtPm1fam9iSWQpOworICAgICAgICAgICAgaWYgKHVybEhhbmRs
ZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICAgICAgICAgIGZhaWwoIkZhaWxl
ZCB0byBvcGVuIHJlcXVlc3QgZm9yIFBPU1Qgb3BlcmF0aW9uIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFkLT5tX2Nvbm5NZ3ItPnNlY29uZGFyeVVybEhhbmRs
ZSgpKSB7CisgICAgICAgIGFzc2VydChyZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7
CisgICAgICAgIGQtPm1fY29ubk1nci0+c2V0U2Vjb25kYXJ5VXJsSGFuZGxlKChDb25uZWN0aW9u
TWFuYWdlciopbFBhcmFtKTsKKyAgICAgICAgCisgICAgICAgIGlmIChkLT5tX2Zvcm1EYXRhU3Ry
aW5nKQorICAgICAgICAgICAgLy8gcmVwb3N0IGZvcm0gZGF0YQorICAgICAgICAgICAgcmVwb3N0
KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gTmVlZCB0byBhY3R1YWxseSBzZW5k
IHRoZSByZXF1ZXN0IG5vdy4KKyAgICAgICAgICAgIGQtPm1faGVhZGVycyA9ICJDb250ZW50LVR5
cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxuIjsKKyAgICAgICAgICAgIGlm
ICghZC0+bV9wb3N0UmVmZXJyZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGQtPm1faGVhZGVycyArPSAiUmVmZXJlcjogIjsKKyAgICAgICAgICAgICAgICBkLT5t
X2hlYWRlcnMgKz0gZC0+bV9wb3N0UmVmZXJyZXI7CisgICAgICAgICAgICAgICAgZC0+bV9oZWFk
ZXJzICs9ICJcbiI7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgU3RyaW5n
IGZvcm1EYXRhID0gcmVxdWVzdCgpLmh0dHBCb2R5KCktPmZsYXR0ZW5Ub1N0cmluZygpOworICAg
ICAgICAgICAgSU5URVJORVRfQlVGRkVSUyBidWZmZXJzOworICAgICAgICAgICAgbWVtc2V0KCZi
dWZmZXJzLCAwLCBzaXplb2YoYnVmZmVycykpOworICAgICAgICAgICAgYnVmZmVycy5kd1N0cnVj
dFNpemUgPSBzaXplb2YoYnVmZmVycyk7CisgICAgICAgICAgICBidWZmZXJzLmxwY3N6SGVhZGVy
ID0gZC0+bV9oZWFkZXJzLmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIGJ1ZmZlcnMuZHdIZWFk
ZXJzTGVuZ3RoID0gZC0+bV9oZWFkZXJzLmxlbmd0aCgpOworICAgICAgICAgICAgYnVmZmVycy5k
d0hlYWRlcnNUb3RhbCA9IGJ1ZmZlcnMuZHdIZWFkZXJzTGVuZ3RoOworICAgICAgICAgICAgYnVm
ZmVycy5kd0J1ZmZlclRvdGFsID0gZm9ybURhdGEubGVuZ3RoKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChmb3JtRGF0YS5sZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGQtPm1f
Ynl0ZXNSZW1haW5pbmdUb1dyaXRlID0gZm9ybURhdGEubGVuZ3RoKCk7CisgICAgICAgICAgICAg
ICAgZC0+bV9mb3JtRGF0YVN0cmluZyA9IG5ldyBjaGFyW2Zvcm1EYXRhLmxlbmd0aCgpICsgMV07
CisgICAgICAgICAgICAgICAgZC0+bV9mb3JtRGF0YUxlbmd0aCA9IGZvcm1EYXRhLmxlbmd0aCgp
OworICAgICAgICAgICAgICAgIHN0cmNweShkLT5tX2Zvcm1EYXRhU3RyaW5nLCBmb3JtRGF0YS5s
YXRpbjEoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGQtPm1fd3JpdGluZyA9IHRydWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBlcnJvcjsKKyAgICAgICAgICAgIGlmICgh
SHR0cFNlbmRSZXF1ZXN0RXgoZC0+bV9jb25uTWdyLT5zZWNvbmRhcnlVcmxIYW5kbGUoKSwgJmJ1
ZmZlcnMsIDAsIDAsIChEV09SRF9QVFIpZC0+bV9qb2JJZCkgJiYgV1NBX0lPX1BFTkRJTkcgIT0g
KGVycm9yID0gR2V0TGFzdEVycm9yKCkpKSB7CisgICAgI2lmZGVmIFJFU09VUkNFX0xPQURFUl9E
RUJVRworICAgICAgICAgICAgICAgIHByaW50ZigiRmFpbGVkIHRvIGFwcGx5IGhlYWRlcnM6ICVk
XG4iLCBlcnJvcik7CisgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKCFIdHRwU2VuZFJl
cXVlc3RFeChkLT5tX2Nvbm5NZ3ItPnNlY29uZGFyeVVybEhhbmRsZSgpLCAwLCAwLCAwLCAoRFdP
UkRfUFRSKWQtPm1fam9iSWQpICYmIFdTQV9JT19QRU5ESU5HICE9IChlcnJvciA9IEdldExhc3RF
cnJvcigpKSkgeworICAgICNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyAgICAgICAgICAg
ICAgICAgICAgcHJpbnRmKCJGYWlsZWQgdG8gcG9zdCBkYXRhOiAlZFxuIiwgZXJyb3IpOworICAg
ICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJGYWlsZWQgdG8gc3RhcnQgcG9zdGlu
ZyBkYXRhIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBGSVhNRTogYWRkIHByb3BlciBlcnJvciBoYW5kbGluZworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpvblJlcXVlc3RSZWRpcmVjdGVkKExQQVJBTSBsUGFy
YW0pCit7CisgICAgLy8gSWYgYWxyZWFkeSBjYW5jZWxlZCwgdGhlbiBpZ25vcmUgdGhpcyBldmVu
dC4KKyAgICBTdHJpbmcqIG5ld1VybCA9IChTdHJpbmcqKWxQYXJhbTsKKyAgICAvL01lc3NhZ2VC
b3hXKDAsIG5ld1VybC0+Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgTCJSZWRpcmVj
dCIsIE1CX09LKTsKKyAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0
IG5ld1JlcXVlc3QgPSByZXF1ZXN0KCk7CisgICAgICAgIG5ld1JlcXVlc3Quc2V0VVJMKEtVUkwo
Km5ld1VybCkpOworICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlZGlyZWN0UmVzcG9uc2U7Cisg
ICAgICAgIHNldFJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UpOworICAgICAgICBjbGllbnQoKS0+
d2lsbFNlbmRSZXF1ZXN0KHRoaXMsIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworICAg
IH0gZWxzZQorICAgICAgICBkZWxldGUgdGhpczsKKworICAgIGRlbGV0ZSBuZXdVcmw7Cit9CisK
K3ZvaWQgUmVzb3VyY2VIYW5kbGU6Om9uQ29ubmVjdGlvbkNsb3NlZChMUEFSQU0gbFBhcmFtKQor
eworICAgIC8vIENvbm5lY3Rpb24gY2xvc2VkIHVuZXhwZWN0ZWRseT8gUmVwb3J0IGVycm9yPwor
ICAgIGZhaWwoIkNvbm5lY3Rpb24gY2xvc2VkIHVuZXhwZWN0ZWRseSIpOworfQorCit2b2lkIFJl
c291cmNlSGFuZGxlOjpyZXBvc3QoKQoreworICAgIC8vIFBvc3QgZGF0YSBhZ2FpbgorICAgIElO
VEVSTkVUX0JVRkZFUlMgYnVmZmVyczsKKyAgICBtZW1zZXQoJmJ1ZmZlcnMsIDAsIHNpemVvZihi
dWZmZXJzKSk7CisgICAgYnVmZmVycy5kd1N0cnVjdFNpemUgPSBzaXplb2YoYnVmZmVycyk7Cisg
ICAgYnVmZmVycy5scGNzekhlYWRlciA9IGQtPm1faGVhZGVycy5jaGFyYWN0ZXJzKCk7CisgICAg
YnVmZmVycy5kd0hlYWRlcnNMZW5ndGggPSBkLT5tX2hlYWRlcnMubGVuZ3RoKCk7CisgICAgYnVm
ZmVycy5kd0hlYWRlcnNUb3RhbCA9IGJ1ZmZlcnMuZHdIZWFkZXJzTGVuZ3RoOworICAgIGJ1ZmZl
cnMuZHdCdWZmZXJUb3RhbCA9IGQtPm1fZm9ybURhdGFMZW5ndGg7CisgICAgCisgICAgZC0+bV9i
eXRlc1JlbWFpbmluZ1RvV3JpdGUgPSBkLT5tX2Zvcm1EYXRhTGVuZ3RoOworCisgICAgaW50IGVy
cm9yOworICAgIGlmICghSHR0cFNlbmRSZXF1ZXN0RXgoZC0+bV9jb25uTWdyLT5zZWNvbmRhcnlV
cmxIYW5kbGUoKSwgJmJ1ZmZlcnMsIDAsIDAsIChEV09SRF9QVFIpZC0+bV9qb2JJZCkgJiYgV1NB
X0lPX1BFTkRJTkcgIT0gKGVycm9yID0gR2V0TGFzdEVycm9yKCkpKSB7CisjaWZkZWYgUkVTT1VS
Q0VfTE9BREVSX0RFQlVHCisgICAgICAgIHByaW50ZigiRmFpbGVkIHRvIGFwcGx5IGhlYWRlcnM6
ICVkXG4iLCBlcnJvcik7CisjZW5kaWYKKyAgICAgICAgaWYgKCFIdHRwU2VuZFJlcXVlc3RFeChk
LT5tX2Nvbm5NZ3ItPnNlY29uZGFyeVVybEhhbmRsZSgpLCAwLCAwLCAwLCAoRFdPUkRfUFRSKWQt
Pm1fam9iSWQpICYmIFdTQV9JT19QRU5ESU5HICE9IChlcnJvciA9IEdldExhc3RFcnJvcigpKSkg
eworI2lmZGVmIFJFU09VUkNFX0xPQURFUl9ERUJVRworICAgICAgICAgICAgcHJpbnRmKCJGYWls
ZWQgdG8gcG9zdCBkYXRhOiAlZFxuIiwgZXJyb3IpOworI2VuZGlmCisgICAgICAgICAgICBmYWls
KCJGYWlsZWQgdG8gc3RhcnQgcmVwb3N0aW5nIGRhdGEiKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kworc3RhdGljIFN0cmluZyBnZXRXaW5JbmV0RXJyb3IoRFdPUkQgZXJyKQoreworICAgIEhBTkRM
RSBoID0gOjpHZXRNb2R1bGVIYW5kbGUoTCJ3aW5pbmV0LmRsbCIpOworICAgIGlmIChoICE9IE5V
TEwpIHsgCisgICAgICAgIExQVFNUUiBwOworICAgICAgICBpZig6OkZvcm1hdE1lc3NhZ2UoRk9S
TUFUX01FU1NBR0VfQUxMT0NBVEVfQlVGRkVSIHwgRk9STUFUX01FU1NBR0VfRlJPTV9ITU9EVUxF
LCAoTFBDVk9JRCloLCBlcnIsIDAsIChMUFRTVFIpJnAsIDAsIE5VTEwpICE9IDApIHsKKyAgICAg
ICAgICAgIFN0cmluZyBzKHApOworICAgICAgICAgICAgTG9jYWxGcmVlKHApOworICAgICAgICAg
ICAgcmV0dXJuIHM7CisgICAgICAgIH0gCisgICAgfQorCisgICAgcmV0dXJuIFN0cmluZzo6Zm9y
bWF0KCJJbnRlcm5ldCBFcnJvcjogJWQiLCBlcnIpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxl
OjpvblJlcXVlc3RDb21wbGV0ZShMUEFSQU0gbFBhcmFtKQoreworICAgIGlmICghY2xpZW50KCkp
IHsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIWQtPm1fY29ubk1nci0+dXJsSGFuZGxlKCkpIHsKKyAgICAgICAgZmFpbCgiVW5leHBlY3Rl
ZCBFcnJvciIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSElOVEVSTkVUIGhhbmRs
ZSA9IChyZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIikgPyBkLT5tX2Nvbm5NZ3ItPnNl
Y29uZGFyeVVybEhhbmRsZSgpIDogZC0+bV9jb25uTWdyLT51cmxIYW5kbGUoKTsKKworICAgIGlm
IChsUGFyYW0gIT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICBzd2l0Y2gobFBhcmFtKSB7Cisg
ICAgICAgIGNhc2UgRVJST1JfSU5URVJORVRfSU5DT1JSRUNUX1BBU1NXT1JEOgorICAgICAgICBj
YXNlIEVSUk9SX0lOVEVSTkVUX0lOVkFMSURfQ0E6CisgICAgICAgIGNhc2UgRVJST1JfSU5URVJO
RVRfUE9TVF9JU19OT05fU0VDVVJFOgorICAgICAgICBjYXNlIEVSUk9SX0lOVEVSTkVUX1NFQ19D
RVJUX0NOX0lOVkFMSUQ6IAorICAgICAgICBjYXNlIEVSUk9SX0lOVEVSTkVUX1NFQ19DRVJUX0RB
VEVfSU5WQUxJRDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEV09SRCBydG4gPSBJ
bnRlcm5ldEVycm9yRGxnKE5VTEwsIGhhbmRsZSwgbFBhcmFtCisgICAgICAgICAgICAgICAgICAg
ICwgRkxBR1NfRVJST1JfVUlfRklMVEVSX0ZPUl9FUlJPUlMgfCBGTEFHU19FUlJPUl9VSV9GTEFH
U19DSEFOR0VfT1BUSU9OUywgMCk7CisgICAgICAgICAgICAgICAgaWYgKHJ0biAhPSBFUlJPUl9T
VUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkF1dGhlbnRpY2F0aW9uIGZhaWxl
ZCIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgZmFpbChnZXRXaW5JbmV0RXJyb3IobFBhcmFtKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZC0+bV93cml0aW5nKSB7CisgICAgICAg
IERXT1JEIGJ5dGVzV3JpdHRlbjsKKyAgICAgICAgaWYgKEludGVybmV0V3JpdGVGaWxlKGQtPm1f
Y29ubk1nci0+c2Vjb25kYXJ5VXJsSGFuZGxlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
IGQtPm1fZm9ybURhdGFTdHJpbmcgKyAoZC0+bV9mb3JtRGF0YUxlbmd0aCAtIGQtPm1fYnl0ZXNS
ZW1haW5pbmdUb1dyaXRlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZC0+bV9ieXRlc1Jl
bWFpbmluZ1RvV3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlc1dyaXR0ZW4p
KSB7CisgICAgICAgICAgICBkLT5tX2J5dGVzUmVtYWluaW5nVG9Xcml0ZSAtPSBieXRlc1dyaXR0
ZW47CisgICAgICAgICAgICBpZiAoIWQtPm1fYnl0ZXNSZW1haW5pbmdUb1dyaXRlKSB7CisgICAg
ICAgICAgICAgICAgLy8gRW5kIHRoZSByZXF1ZXN0LgorICAgICAgICAgICAgICAgIEJPT0wgZ29v
ZCA9IEh0dHBFbmRSZXF1ZXN0KGQtPm1fY29ubk1nci0+c2Vjb25kYXJ5VXJsSGFuZGxlKCksIDAs
IDAsIChEV09SRF9QVFIpZC0+bV9qb2JJZCk7CisgICAgICAgICAgICAgICAgaW50IGVycm9yOwor
ICAgICAgICAgICAgICAgIGlmICghZ29vZCkgeworICAgICAgICAgICAgICAgICAgICBlcnJvciA9
IEdldExhc3RFcnJvcigpOworICAgICAgICAgICAgICAgICAgICBpZiAoRVJST1JfSU5URVJORVRf
Rk9SQ0VfUkVUUlkgPT0gZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zdCgp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChFUlJPUl9JT19QRU5ESU5HID09IGVycm9yKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBnb29kIGZvciBhc3luYyBmdW5jdGlvbgorICAgICAg
ICAgICAgICAgICAgICAgICAgZ29vZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZ29vZCkgeworICAgICAgICAg
ICAgICAgICAgICBkLT5tX3dyaXRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlW10gZC0+bV9mb3JtRGF0YVN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgZC0+bV9mb3Jt
RGF0YVN0cmluZyA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBSRVNPVVJD
RV9MT0FERVJfREVCVUcKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJFbmQgcmVxdWVzdCBl
cnJvcjogJWlcbiIsIGVycm9yKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJG
YWlsZWQgdG8gZmluaXNoIHBvc3RpbmcgZGF0YSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyNp
ZmRlZiBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyAgICAgICAgICAgIHByaW50ZigiUG9zdCBlcnJv
cjogJWlcbiIsIEdldExhc3RFcnJvcigpKTsKKyNlbmRpZgorICAgICAgICAgICAgZmFpbCgiRmFp
bGVkIHRvIHBvc3QgZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCisgICAgc3RhdGljIGNvbnN0IGludCBidWZmZXJTaXplID0gODE5MjsgLy8zMjc2ODsKKwor
ICAgIGNoYXIgYnVmZmVyW2J1ZmZlclNpemVdOworICAgIElOVEVSTkVUX0JVRkZFUlNBIGJ1ZmZl
cnM7CisgICAgYnVmZmVycy5kd1N0cnVjdFNpemUgPSBzaXplb2YoYnVmZmVycyk7CisgICAgYnVm
ZmVycy5scHZCdWZmZXIgPSBidWZmZXI7CisgICAgYnVmZmVycy5kd0J1ZmZlckxlbmd0aCA9IGJ1
ZmZlclNpemU7CisKKyAgICBib29sIHJlY2VpdmVkQW55RGF0YSA9IGZhbHNlOworICAgIGludCBq
b2JJZCA9IGQtPm1fam9iSWQ7CisKKyAgICBCT09MIG9rID0gSW50ZXJuZXRSZWFkRmlsZUV4QSho
YW5kbGUsICZidWZmZXJzLCBJUkZfTk9fV0FJVCwgKERXT1JEX1BUUilqb2JJZCk7CisKKyAgICBp
ZiAob2sgJiYgYnVmZmVycy5kd0J1ZmZlckxlbmd0aCkgeworICAgICAgICBpZiAoIWhhc1JlY2Vp
dmVkUmVzcG9uc2UoKSkgeworICAgICAgICAgICAgc2V0SGFzUmVjZWl2ZWRSZXNwb25zZSgpOwor
ICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICAgICAgICAgIHNldFJl
c3BvbnNlKHJlc3BvbnNlKTsKKyAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9u
c2UodGhpcywgcmVzcG9uc2UpOworICAgICAgICAgICAgLy8gSW4gY2FzZSB0aGF0IGl0IGlzIGRl
bGV0ZWQgYnkgbGFzdCBjYWxsCisgICAgICAgICAgICBpZiAoIWpvYk1hbmFnZXIoKS0+bG9va3Vw
UmVzb3VyY2VIYW5kbGUoam9iSWQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZURhdGEodGhpcywgYnVmZmVyLCBidWZmZXJz
LmR3QnVmZmVyTGVuZ3RoLCAwKTsKKyAgICAgICAgCisgICAgICAgIC8vIEluIGNhc2UgdGhhdCBp
dCBpcyBkZWxldGVkIGJ5IGxhc3QgY2FsbAorICAgICAgICBpZiAoIWpvYk1hbmFnZXIoKS0+bG9v
a3VwUmVzb3VyY2VIYW5kbGUoam9iSWQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGlmIChidWZmZXJzLmR3QnVmZmVyTGVuZ3RoKSB7CisgICAgICAgICAgICAvLyBSZWFkIHRoZSBy
ZXN0IGRhdGEgbmV4dCB0aW1lCisgICAgICAgICAgICBQb3N0TWVzc2FnZShqb2JNYW5hZ2VyKCkt
Pmh3bmQoKSwgcmVxdWVzdENvbXBsZXRlTWVzc2FnZSwgKFdQQVJBTSlqb2JJZCwgbFBhcmFtKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChvaykgewor
ICAgICAgICBmaW5pc2goKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgZXJyb3Ig
PSBHZXRMYXN0RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgIT0gRVJST1JfSU9fUEVORElORykgeyAK
KyNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyAgICAgICAgcHJpbnRmKCJMb2FkIGVycm9y
OiAlaVxuIiwgZXJyb3IpOyAvLyBmYWlsPworI2VuZGlmCisgICAgICAgIGZhaWwoIkZhaWxlZCB0
byByZWFkIHJlc291cmNlIGRhdGEiKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6
Om9wZW5VcmwoY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBzZWxmRGVsKQoreworICAgIGlm
ICghY2xpZW50KCkpIHsKKyAgICAgICAgaWYgKHNlbGZEZWwpCisgICAgICAgICAgICBkZWxldGUg
dGhpczsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBE
V09SRCBmbGFncyA9IElOVEVSTkVUX0ZMQUdfQVNZTkMKKyAgICAgICAgfCBJTlRFUk5FVF9GTEFH
X0lHTk9SRV9SRURJUkVDVF9UT19IVFRQUworICAgICAgICB8IElOVEVSTkVUX0ZMQUdfSUdOT1JF
X1JFRElSRUNUX1RPX0hUVFA7CisKKyAgICAvLyBGb3IgZm9ybSBwb3N0aW5nLCB3ZSBjYW4ndCB1
c2UgSW50ZXJuZXRPcGVuVVJMLiAgV2UgaGF2ZSB0byB1c2UKKyAgICAvLyBJbnRlcm5ldENvbm5l
Y3QgZm9sbG93ZWQgYnkgSHR0cFNlbmRSZXF1ZXN0LgorICAgIEhJTlRFUk5FVCB1cmxIYW5kbGU7
CisgICAgYm9vbCBzZWN1cmUgPSByZXF1ZXN0KCkudXJsKCkucHJvdG9jb2woKS5sb3dlcigpID09
ICJodHRwcyI7CisgICAgaW50IHNlY3VyZUZsYWdzID0gc2VjdXJlID8gSU5URVJORVRfRkxBR19T
RUNVUkUgOiAwOworICAgIHVuc2lnbmVkIHNob3J0IHBvcnQgPSByZXF1ZXN0KCkudXJsKCkucG9y
dCgpOworICAgIGlmIChwb3J0IDw9IDApCisgICAgICAgIHBvcnQgPSBzZWN1cmUgPyA0NDMgOiA4
MDsKKyAgICBpZiAocmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAiUE9TVCIpIHsKKyAgICAgICAg
ZC0+bV9wb3N0UmVmZXJyZXIgPSByZWZlcnJlcjsKKyAgICAgICAgU3RyaW5nIGhvc3QgPSByZXF1
ZXN0KCkudXJsKCkuaG9zdCgpOworICAgICAgICB1cmxIYW5kbGUgPSBJbnRlcm5ldENvbm5lY3Qo
ZC0+bV9jb25uTWdyLT5pbnRlcm5ldEhhbmRsZSgpLCBob3N0LmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvLyBubyB1c2VybmFt
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8vIG5vIHBhc3N3
b3JkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJORVRfU0VSVklD
RV9IVFRQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHwgY2Fj
aGVGbGFnc0ZvcihyZXF1ZXN0KCkpIHwgc2VjdXJlRmxhZ3MsIChEV09SRF9QVFIpZC0+bV9qb2JJ
ZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU3RyaW5nIHVybFN0ciA9IHJlcXVlc3QoKS51cmwo
KS5zdHJpbmcoKTsKKyAgICAgICAgaW50IGZyYWdtZW50SW5kZXggPSB1cmxTdHIuZmluZCgnIycp
OworICAgICAgICBpZiAoZnJhZ21lbnRJbmRleCAhPSAtMSkKKyAgICAgICAgICAgIHVybFN0ciA9
IHVybFN0ci5sZWZ0KGZyYWdtZW50SW5kZXgpOworICAgICAgICBTdHJpbmcgaGVhZGVyczsKKyAg
ICAgICAgaWYgKCFyZWZlcnJlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBoZWFkZXJzICs9IFN0
cmluZygiUmVmZXJlcjogIikgKyByZWZlcnJlciArICJcclxuIjsKKworICAgICAgICB1cmxIYW5k
bGUgPSBJbnRlcm5ldE9wZW5VcmwoZC0+bV9jb25uTWdyLT5pbnRlcm5ldEhhbmRsZSgpLCB1cmxT
dHIuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWFkZXJzLmNoYXJhY3RlcnMoKSwgaGVhZGVycy5sZW5ndGgoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyB8IGNhY2hlRmxhZ3NG
b3IocmVxdWVzdCgpKSB8IHNlY3VyZUZsYWdzLCAoRFdPUkRfUFRSKWQtPm1fam9iSWQpOworICAg
IH0KKworICAgIGlmICh1cmxIYW5kbGUgPT0gTlVMTCkgeworICAgICAgICBEV09SRCBlcnIgPSBH
ZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKEVSUk9SX0lPX1BFTkRJTkcgIT0gZXJyKSB7Cisg
ICAgICAgICAgICBpZiAoc2VsZkRlbCkKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpczsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChGcmFtZSogZnJhbWUpCit7Cisg
ICAgcmVmKCk7CisgICAgZC0+bV9pc0Fib3V0ID0gcmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnN0
YXJ0c1dpdGgoImFib3V0OiIpOyAvLyBLVVJMIGNhbid0IGhhbmRsZSBwcm90b2NvbCBvbiAiYWJv
dXQ6Zm9vIj8/CisKKyAgICBpZiAoZC0+bV9pc0Fib3V0KSB7CisgICAgICAgIGQtPm1faXNBYm91
dCA9IHRydWU7CisgICAgICAgIGQtPm1fZmlsZUxvYWRUaW1lci5zdGFydE9uZVNob3QoMC4wKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfSAKKyAgICAKKyAgICBpZiAocmVxdWVzdCgpLnVy
bCgpLmlzTG9jYWxGaWxlKCkpIHsKKworICAgICAgICBTdHJpbmcgcGF0aCA9IHJlcXVlc3QoKS51
cmwoKS5wYXRoKCk7CisgICAgICAgIHdoaWxlIChwYXRoWzBdID09ICcvJykKKyAgICAgICAgICAg
IHBhdGgucmVtb3ZlKDApOworICAgICAgICAKKyAgICAgICAgLy8gVGVtcG9yYXJ5IHNvbHV0aW9u
LiBMYXRlciBvbiB3ZSB3aWxsIHVzZSBJbnRlcm5ldENyYWNrVXJsCisgICAgICAgIHBhdGgucmVw
bGFjZShTdHJpbmcoTCIlMjAiKSwgU3RyaW5nKEwiICIpKTsKKyAgICAgICAgcGF0aC5zdHJpcFdo
aXRlU3BhY2UoKTsKKworICAgICAgICBkLT5tX2ZpbGVIYW5kbGUgPSBDcmVhdGVGaWxlKHBhdGgu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgR0VORVJJQ19SRUFELCAwLCBOVUxMLCBP
UEVOX0VYSVNUSU5HLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIE5VTEwpOworCisgICAgICAgIGQt
Pm1fZmlsZUxvYWRUaW1lci5zdGFydE9uZVNob3QoMC4wKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgaWYgKGQtPm1fY29ubk1ncikKKyAgICAgICAgZGVsZXRlIGQtPm1fY29u
bk1ncjsKKyAgICBkLT5tX2Nvbm5NZ3IgPSBuZXcgQ29ubmVjdGlvbk1hbmFnZXIoKTsKKworICAg
IGlmICghZC0+bV9jb25uTWdyLT5pbnRlcm5ldEhhbmRsZSgpKSB7CisgICAgICAgIGRlbGV0ZSBk
LT5tX2Nvbm5NZ3I7CisgICAgICAgIGQtPm1fY29ubk1nciA9IDA7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gam9iTWFuYWdlcigpLT5hZGRUb091dHN0YW5kaW5n
Sm9icyh0aGlzLCBmcmFtZS0+bG9hZGVyKCktPnJlZmVycmVyKCkpOworfQorCit2b2lkIFJlc291
cmNlSGFuZGxlOjpsb2FkRmlsZSgpCit7CisgICAgaW50IGpvYklkID0gZC0+bV9qb2JJZDsKKyAg
ICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworICAgIHNldFJlc3BvbnNlKHJlc3BvbnNlKTsK
KworICAgIC8vIEZJWE1FIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChzeik7Cisg
ICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsKKyAgICBjbGllbnQoKS0+ZGlkUmVj
ZWl2ZVJlc3BvbnNlKHRoaXMsIHJlc3BvbnNlKTsKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOwor
ICAgIERXT1JEIGJ5dGVzUmVhZCA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGNvbnN0IGludCBi
dWZmZXJTaXplID0gODE5MjsKKyAgICAgICAgY2hhciBidWZmZXJbYnVmZmVyU2l6ZV07CisgICAg
ICAgIHJlc3VsdCA9ICEhUmVhZEZpbGUoZC0+bV9maWxlSGFuZGxlLCAmYnVmZmVyLCBidWZmZXJT
aXplLCAmYnl0ZXNSZWFkLCBOVUxMKTsgCisgICAgICAgIGlmIChyZXN1bHQgJiYgYnl0ZXNSZWFk
KQorICAgICAgICB7CisgICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZURhdGEodGhpcywg
YnVmZmVyLCBieXRlc1JlYWQsIDApOworICAgICAgICAgICAgLy8gSW4gY2FzZSB0aGF0IGl0IGlz
IGRlbGV0ZWQgYnkgbGFzdCBjYWxsCisgICAgICAgICAgICBpZiAoIWpvYk1hbmFnZXIoKS0+bG9v
a3VwUmVzb3VyY2VIYW5kbGUoam9iSWQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAvLyBDaGVjayBmb3IgZW5kIG9mIGZpbGUuIAorICAgIH0gd2hpbGUgKHJl
c3VsdCAmJiBieXRlc1JlYWQpOworCisgICAgLy8gRklYTUU6IGhhbmRsZSBlcnJvcnMgYmV0dGVy
CisKKyAgICBDbG9zZUhhbmRsZShkLT5tX2ZpbGVIYW5kbGUpOworICAgIGQtPm1fZmlsZUhhbmRs
ZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOworCisgICAgZmluaXNoKCk7Cit9CisKK3ZvaWQgUmVz
b3VyY2VIYW5kbGU6OmxvYWREYXRhKCkKK3sKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9h
ZEFib3V0KCkKK3sKKyAgICBpZiAoIWZldGNoQWJvdXRQYWdlKSB7CisgICAgICAgIGZhaWwoIkZh
aWxlZCB0byBvcGVuIHBhZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBq
b2JJZCA9IGQtPm1fam9iSWQ7CisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICBz
ZXRSZXNwb25zZShyZXNwb25zZSk7CisKKyAgICBTdHJpbmcgcGF0aCA9IHJlcXVlc3QoKS51cmwo
KS5wYXRoKCkuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgY2hhciAqZGF0YSA9IDA7CisgICAgaW50
IHN6ID0gMDsKKyAgICBCdWZmZXJEZWxldGVyIGRlbGV0ZXIgPSAwOworICAgIGJvb2wgcmMgPSAo
ZmV0Y2hBYm91dFBhZ2UpKHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgJmRh
dGEsICZzeiwgJmRlbGV0ZXIpOworICAgIGlmICghcmMgfHwgIXN6KSB7CisgICAgICAgIHJlc3Bv
bnNlLnNldEhUVFBTdGF0dXNDb2RlKDQwNCk7CisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZl
UmVzcG9uc2UodGhpcywgcmVzcG9uc2UpOworICAgICAgICBmYWlsKCIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICByZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoc3opOwor
ICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7CisgICAgY2xpZW50KCktPmRpZFJl
Y2VpdmVSZXNwb25zZSh0aGlzLCByZXNwb25zZSk7CisgICAgY2xpZW50KCktPmRpZFJlY2VpdmVE
YXRhKHRoaXMsIGRhdGEsIHN6LCAwKTsKKyAgICBpZiAoZGVsZXRlcikKKyAgICAgICAgZGVsZXRl
cihkYXRhLCBzeik7CisgICAgZmluaXNoKCk7CisgICAgcmV0dXJuOworfQorCit2b2lkIFJlc291
cmNlSGFuZGxlOjpmaWxlTG9hZFRpbWVyKFRpbWVyPFJlc291cmNlSGFuZGxlPiogdGltZXIpCit7
CisgICAgaWYgKCFjbGllbnQoKSkgeworICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIHJlcG9ydGVkIGFzeW5jaHJvbm91c2x5IGZvciBjb25zaXN0
ZW5jeS4KKyAgICBpZiAoIWQtPm1faXNBYm91dCAmJiBkLT5tX2ZpbGVIYW5kbGUgPT0gSU5WQUxJ
RF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgZmFpbCgiRmFpbGVkIHRvIGxvYWQgZmlsZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGQtPm1faXNBYm91dCkKKyAgICAgICAg
bG9hZEFib3V0KCk7CisgICAgZWxzZQorICAgICAgICBsb2FkRmlsZSgpOworfQorCisjaWYgUExB
VEZPUk0oVE9SQ0hNT0JJTEUpCit2b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoY29uc3QgUmVz
b3VyY2VIYW5kbGVDbGllbnQqKQorI2Vsc2UKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhbmNlbCgp
CisjZW5kaWYKK3sKKyAgICBpZiAoZC0+bV9jb25uTWdyICYmIGQtPm1fY29ubk1nci0+dXJsSGFu
ZGxlKCkpCisgICAgICAgIGQtPm1fY29ubk1nci0+Y2xvc2VVcmxIYW5kbGUoKTsKKyAgICBlbHNl
CisgICAgICAgIGQtPm1fZmlsZUxvYWRUaW1lci5zdG9wKCk7CisKKyAgICBmaW5pc2goKTsKK30K
Kwordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0SGFzUmVjZWl2ZWRSZXNwb25zZShib29sIGIpCit7
CisgICAgZC0+bV9oYXNSZWNlaXZlZFJlc3BvbnNlID0gYjsKK30KKworYm9vbCBSZXNvdXJjZUhh
bmRsZTo6aGFzUmVjZWl2ZWRSZXNwb25zZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQtPm1faGFz
UmVjZWl2ZWRSZXNwb25zZTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNl
U3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBTdG9yZWRDcmVkZW50aWFscywg
UmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mLCBGcmFtZSop
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IFJlc291cmNlSGFuZGxlOjpidWZmZXJlZERhdGEoKQoreworICAgIHJldHVybiAwOworfQorCiti
b29sIFJlc291cmNlSGFuZGxlOjpzdXBwb3J0c0J1ZmZlcmVkRGF0YSgpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wg
ZGVmZXJzKQoreworICAgIGQtPm1fZGVmZXJzTG9hZGluZyA9IGRlZmVyczsKK30KKwordm9pZCBS
ZXNvdXJjZUhhbmRsZTo6c2V0RG93bmxvYWRDbGllbnQoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGMp
Cit7CisgICAgZC0+bV9kb3dubG9hZENsaWVudCA9IGM7CisgICAgZC0+bV9mcmFtZSA9IDA7Cit9
CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVz
dCYgcmVxKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3VyY2VSZXF1ZXN0LmggYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3VyY2VSZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3ZjU2MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZVJlcXVlc3QuaApAQCAtMCwwICsxLDgzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcg
PHNhbS53ZWluaWdAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVG9yY2gg
TW9iaWxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZXNvdXJjZVJlcXVlc3RfaAorI2RlZmluZSBS
ZXNvdXJjZVJlcXVlc3RfaAorCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0QmFzZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3QgOiBwdWJsaWMg
UmVzb3VyY2VSZXF1ZXN0QmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBSZXNvdXJjZVJlcXVl
c3QoY29uc3QgU3RyaW5nJiB1cmwpIAorICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNl
KEtVUkwodXJsKSwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAgICAgICwgbV90eXBl
KFJlcXVlc3RNYWluKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZXNvdXJjZVJl
cXVlc3QoY29uc3QgS1VSTCYgdXJsKSAKKyAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFz
ZSh1cmwsIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisgICAgICAgICAgICAsIG1fdHlwZShSZXF1
ZXN0TWFpbikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgUmVzb3VyY2VSZXF1ZXN0
Q2FjaGVQb2xpY3kgcG9saWN5ID0gVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkgCisgICAgICAgICAg
ICA6IFJlc291cmNlUmVxdWVzdEJhc2UodXJsLCBwb2xpY3kpCisgICAgICAgICAgICAsIG1fdHlw
ZShSZXF1ZXN0TWFpbikKKyAgICAgICAgeworICAgICAgICAgICAgc2V0SFRUUFJlZmVycmVyKHJl
ZmVycmVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KCkK
KyAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZShLVVJMKCksIFVzZVByb3RvY29sQ2Fj
aGVQb2xpY3kpCisgICAgICAgICAgICAsIG1fdHlwZShSZXF1ZXN0TWFpbikKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgZW51bSBUeXBlIHsKKyAgICAgICAgICAgIFJlcXVlc3RNYWlu
LAorICAgICAgICAgICAgUmVxdWVzdFNjcmlwdCwKKyAgICAgICAgICAgIFJlcXVlc3RDU1MsCisg
ICAgICAgICAgICBSZXF1ZXN0T3RoZXIsCisgICAgICAgICAgICBSZXF1ZXN0SW1hZ2UsCisgICAg
ICAgIH07CisKKyAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Cisg
ICAgICAgIHZvaWQgc2V0VHlwZShUeXBlIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIHN0cnVjdCBSZXNvdXJjZVJlcXVlc3RCYXNlOworCisg
ICAgICAgIHZvaWQgZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QoKSB7fQorICAgICAgICB2b2lkIGRv
VXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCkge30KKyAgICAKKyAgICAgICAgVHlwZSBtX3R5cGU7Cisg
ICB9OworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVzb3VyY2VSZXF1ZXN0
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZVJl
c3BvbnNlLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3VyY2VSZXNwb25z
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NWVmMjUKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3VyY2VSZXNwb25z
ZS5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVzb3Vy
Y2VSZXNwb25zZV9oCisjZGVmaW5lIFJlc291cmNlUmVzcG9uc2VfaAorCisjaW5jbHVkZSAiUmVz
b3VyY2VSZXNwb25zZUJhc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZXNv
dXJjZVJlc3BvbnNlIDogcHVibGljIFJlc291cmNlUmVzcG9uc2VCYXNlIHsKK3B1YmxpYzoKKyAg
ICBSZXNvdXJjZVJlc3BvbnNlKCkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXNwb25z
ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGxvbmcgbG9uZyBleHBl
Y3RlZExlbmd0aCwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBjb25zdCBTdHJpbmcm
IGZpbGVuYW1lKQorICAgICAgICA6IFJlc291cmNlUmVzcG9uc2VCYXNlKHVybCwgbWltZVR5cGUs
IGV4cGVjdGVkTGVuZ3RoLCB0ZXh0RW5jb2RpbmdOYW1lLCBmaWxlbmFtZSkKKyAgICB7CisgICAg
fQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVzb3VyY2VSZXNw
b25zZV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvcHVueWNv
ZGUuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9wdW55Y29kZS5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOGQ3YzcKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvcHVueWNvZGUuYwpAQCAtMCwwICsxLDI5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGkgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJw
dW55Y29kZS5oIgorCisvKgorcHVueWNvZGUuYyBmcm9tIFJGQyAzNDkyCitodHRwOi8vd3d3Lm5p
Y2VtaWNlLm5ldC9pZG4vCitBZGFtIE0uIENvc3RlbGxvCitodHRwOi8vd3d3Lm5pY2VtaWNlLm5l
dC9hbWMvCisKK1RoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkgaW1wbGVtZW50aW5nIFB1bnljb2Rl
IChSRkMgMzQ5MikuCisKKyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLworLyogSW1wbGVtZW50YXRpb24gKHdvdWxkIG5vcm1h
bGx5IGdvIGluIGl0cyBvd24gLmMgZmlsZSk6ICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwor
LyoqKiBCb290c3RyaW5nIHBhcmFtZXRlcnMgZm9yIFB1bnljb2RlICoqKi8KKworZW51bSB7IGJh
c2UgPSAzNiwgdG1pbiA9IDEsIHRtYXggPSAyNiwgc2tldyA9IDM4LCBkYW1wID0gNzAwLAorICAg
ICAgIGluaXRpYWxfYmlhcyA9IDcyLCBpbml0aWFsX24gPSAweDgwLCBkZWxpbWl0ZXIgPSAweDJE
IH07CisKKy8qIGJhc2ljKGNwKSB0ZXN0cyB3aGV0aGVyIGNwIGlzIGEgYmFzaWMgY29kZSBwb2lu
dDogKi8KKyNkZWZpbmUgYmFzaWMoY3ApICgocHVueWNvZGVfdWludCkoY3ApIDwgMHg4MCkKKwor
LyogZGVsaW0oY3ApIHRlc3RzIHdoZXRoZXIgY3AgaXMgYSBkZWxpbWl0ZXI6ICovCisjZGVmaW5l
IGRlbGltKGNwKSAoKGNwKSA9PSBkZWxpbWl0ZXIpCisKKy8qIGRlY29kZV9kaWdpdChjcCkgcmV0
dXJucyB0aGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgKi8KKy8qIHBvaW50IChmb3Ig
dXNlIGluIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIDAgdG8gKi8KKy8qIGJh
c2UtMSwgb3IgYmFzZSBpZiBjcCBpcyBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWx1ZS4gICAgICAg
Ki8KKworc3RhdGljIHB1bnljb2RlX3VpbnQgZGVjb2RlX2RpZ2l0KHB1bnljb2RlX3VpbnQgY3Ap
Cit7CisgIHJldHVybiAgY3AgLSA0OCA8IDEwID8gY3AgLSAyMiA6ICBjcCAtIDY1IDwgMjYgPyBj
cCAtIDY1IDoKKyAgICAgICAgICBjcCAtIDk3IDwgMjYgPyBjcCAtIDk3IDogIGJhc2U7Cit9CisK
Ky8qIGVuY29kZV9kaWdpdChkLGZsYWcpIHJldHVybnMgdGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hv
c2UgdmFsdWUgICAgICAqLworLyogKHdoZW4gdXNlZCBmb3IgcmVwcmVzZW50aW5nIGludGVnZXJz
KSBpcyBkLCB3aGljaCBuZWVkcyB0byBiZSBpbiAgICovCisvKiB0aGUgcmFuZ2UgMCB0byBiYXNl
LTEuICBUaGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZCB1bmxlc3MgZmxhZyBpcyAgKi8KKy8qIG5v
bnplcm8sIGluIHdoaWNoIGNhc2UgdGhlIHVwcGVyY2FzZSBmb3JtIGlzIHVzZWQuICBUaGUgYmVo
YXZpb3IgICAqLworLyogaXMgdW5kZWZpbmVkIGlmIGZsYWcgaXMgbm9uemVybyBhbmQgZGlnaXQg
ZCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uICovCisKK3N0YXRpYyBjaGFyIGVuY29kZV9kaWdpdChw
dW55Y29kZV91aW50IGQsIGludCBmbGFnKQoreworICByZXR1cm4gZCArIDIyICsgNzUgKiAoZCA8
IDI2KSAtICgoZmxhZyAhPSAwKSA8PCA1KTsKKyAgLyogIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56
IG9yIEEuLlogKi8KKyAgLyogMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45ICAgICAgICAgKi8KK30K
KworLyogZmxhZ2dlZChiY3ApIHRlc3RzIHdoZXRoZXIgYSBiYXNpYyBjb2RlIHBvaW50IGlzIGZs
YWdnZWQgKi8KKy8qICh1cHBlcmNhc2UpLiAgVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiBi
Y3AgaXMgbm90IGEgICovCisvKiBiYXNpYyBjb2RlIHBvaW50LiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqLworCisjZGVmaW5lIGZsYWdnZWQoYmNwKSAoKHB1bnljb2Rl
X3VpbnQpKGJjcCkgLSA2NSA8IDI2KQorCisvKiBlbmNvZGVfYmFzaWMoYmNwLGZsYWcpIGZvcmNl
cyBhIGJhc2ljIGNvZGUgcG9pbnQgdG8gbG93ZXJjYXNlICovCisvKiBpZiBmbGFnIGlzIHplcm8s
IHVwcGVyY2FzZSBpZiBmbGFnIGlzIG5vbnplcm8sIGFuZCByZXR1cm5zICAgICovCisvKiB0aGUg
cmVzdWx0aW5nIGNvZGUgcG9pbnQuICBUaGUgY29kZSBwb2ludCBpcyB1bmNoYW5nZWQgaWYgaXQg
ICovCisvKiBpcyBjYXNlbGVzcy4gIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgYmNwIGlz
IG5vdCBhIGJhc2ljICovCisvKiBjb2RlIHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK3N0YXRpYyBjaGFyIGVuY29kZV9iYXNpYyhw
dW55Y29kZV91aW50IGJjcCwgaW50IGZsYWcpCit7CisgIGJjcCAtPSAoYmNwIC0gOTcgPCAyNikg
PDwgNTsKKyAgcmV0dXJuIGJjcCArICgoIWZsYWcgJiYgKGJjcCAtIDY1IDwgMjYpKSA8PCA1KTsK
K30KKworLyoqKiBQbGF0Zm9ybS1zcGVjaWZpYyBjb25zdGFudHMgKioqLworCisvKiBtYXhpbnQg
aXMgdGhlIG1heGltdW0gdmFsdWUgb2YgYSBwdW55Y29kZV91aW50IHZhcmlhYmxlOiAqLworc3Rh
dGljIGNvbnN0IHB1bnljb2RlX3VpbnQgbWF4aW50ID0gLTE7CisvKiBCZWNhdXNlIG1heGludCBp
cyB1bnNpZ25lZCwgLTEgYmVjb21lcyB0aGUgbWF4aW11bSB2YWx1ZS4gKi8KKworLyoqKiBCaWFz
IGFkYXB0YXRpb24gZnVuY3Rpb24gKioqLworCitzdGF0aWMgcHVueWNvZGVfdWludCBhZGFwdCgK
KyAgcHVueWNvZGVfdWludCBkZWx0YSwgcHVueWNvZGVfdWludCBudW1wb2ludHMsIGludCBmaXJz
dHRpbWUgKQoreworICBwdW55Y29kZV91aW50IGs7CisKKyAgZGVsdGEgPSBmaXJzdHRpbWUgPyBk
ZWx0YSAvIGRhbXAgOiBkZWx0YSA+PiAxOworICAvKiBkZWx0YSA+PiAxIGlzIGEgZmFzdGVyIHdh
eSBvZiBkb2luZyBkZWx0YSAvIDIgKi8KKyAgZGVsdGEgKz0gZGVsdGEgLyBudW1wb2ludHM7CisK
KyAgZm9yIChrID0gMDsgIGRlbHRhID4gKChiYXNlIC0gdG1pbikgKiB0bWF4KSAvIDI7ICBrICs9
IGJhc2UpIHsKKyAgICBkZWx0YSAvPSBiYXNlIC0gdG1pbjsKKyAgfQorCisgIHJldHVybiBrICsg
KGJhc2UgLSB0bWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpOworfQorCisvKioqIE1h
aW4gZW5jb2RlIGZ1bmN0aW9uICoqKi8KKworZW51bSBwdW55Y29kZV9zdGF0dXMgcHVueWNvZGVf
ZW5jb2RlKAorICBwdW55Y29kZV91aW50IGlucHV0X2xlbmd0aCwKKyAgY29uc3QgcHVueWNvZGVf
dWludCBpbnB1dFtdLAorICBjb25zdCB1bnNpZ25lZCBjaGFyIGNhc2VfZmxhZ3NbXSwKKyAgcHVu
eWNvZGVfdWludCAqb3V0cHV0X2xlbmd0aCwKKyAgY2hhciBvdXRwdXRbXSApCit7CisgIHB1bnlj
b2RlX3VpbnQgbiwgZGVsdGEsIGgsIGIsIG91dCwgbWF4X291dCwgYmlhcywgaiwgbSwgcSwgaywg
dDsKKworICAvKiBJbml0aWFsaXplIHRoZSBzdGF0ZTogKi8KKworICBuID0gaW5pdGlhbF9uOwor
ICBkZWx0YSA9IG91dCA9IDA7CisgIG1heF9vdXQgPSAqb3V0cHV0X2xlbmd0aDsKKyAgYmlhcyA9
IGluaXRpYWxfYmlhczsKKworICAvKiBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiAqLwor
ICBmb3IgKGogPSAwOyAgaiA8IGlucHV0X2xlbmd0aDsgICsraikgeworICAgIGlmIChiYXNpYyhp
bnB1dFtqXSkpIHsKKyAgICAgIGlmIChtYXhfb3V0IC0gb3V0IDwgMikgcmV0dXJuIHB1bnljb2Rl
X2JpZ19vdXRwdXQ7CisgICAgICBvdXRwdXRbb3V0KytdID0KKyAgICAgICAgY2FzZV9mbGFncyA/
ICBlbmNvZGVfYmFzaWMoaW5wdXRbal0sIGNhc2VfZmxhZ3Nbal0pIDogaW5wdXRbal07CisgICAg
fQorICAgIC8qIGVsc2UgaWYgKGlucHV0W2pdIDwgbikgcmV0dXJuIHB1bnljb2RlX2JhZF9pbnB1
dDsgKi8KKyAgICAvKiAobm90IG5lZWRlZCBmb3IgUHVueWNvZGUgd2l0aCB1bnNpZ25lZCBjb2Rl
IHBvaW50cykgKi8KKyAgfQorCisgIGggPSBiID0gb3V0OworCisgIC8qIGggaXMgdGhlIG51bWJl
ciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkLCBiIGlzIHRoZSAgKi8KKyAg
LyogbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLCBhbmQgb3V0IGlzIHRoZSBudW1iZXIgb2Yg
Y2hhcmFjdGVycyAqLworICAvKiB0aGF0IGhhdmUgYmVlbiBvdXRwdXQuICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgaWYgKGIgPiAwKSBvdXRwdXRbb3V0
KytdID0gZGVsaW1pdGVyOworCisgIC8qIE1haW4gZW5jb2RpbmcgbG9vcDogKi8KKworICB3aGls
ZSAoaCA8IGlucHV0X2xlbmd0aCkgeworICAgIC8qIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMg
PCBuIGhhdmUgYmVlbiAgICAgKi8KKyAgICAvKiBoYW5kbGVkIGFscmVhZHkuICBGaW5kIHRoZSBu
ZXh0IGxhcmdlciBvbmU6ICovCisKKyAgICBmb3IgKG0gPSBtYXhpbnQsIGogPSAwOyAgaiA8IGlu
cHV0X2xlbmd0aDsgICsraikgeworICAgICAgLyogaWYgKGJhc2ljKGlucHV0W2pdKSkgY29udGlu
dWU7ICovCisgICAgICAvKiAobm90IG5lZWRlZCBmb3IgUHVueWNvZGUpICovCisgICAgICBpZiAo
aW5wdXRbal0gPj0gbiAmJiBpbnB1dFtqXSA8IG0pIG0gPSBpbnB1dFtqXTsKKyAgICB9CisKKyAg
ICAvKiBJbmNyZWFzZSBkZWx0YSBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzICAgICov
CisgICAgLyogPG4saT4gc3RhdGUgdG8gPG0sMD4sIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93
OiAqLworCisgICAgaWYgKG0gLSBuID4gKG1heGludCAtIGRlbHRhKSAvIChoICsgMSkpIHJldHVy
biBwdW55Y29kZV9vdmVyZmxvdzsKKyAgICBkZWx0YSArPSAobSAtIG4pICogKGggKyAxKTsKKyAg
ICBuID0gbTsKKworICAgIGZvciAoaiA9IDA7ICBqIDwgaW5wdXRfbGVuZ3RoOyAgKytqKSB7Cisg
ICAgICAvKiBQdW55Y29kZSBkb2VzIG5vdCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaW5wdXRbal0g
aXMgYmFzaWM6ICovCisgICAgICBpZiAoaW5wdXRbal0gPCBuIC8qIHx8IGJhc2ljKGlucHV0W2pd
KSAqLyApIHsKKyAgICAgICAgaWYgKCsrZGVsdGEgPT0gMCkgcmV0dXJuIHB1bnljb2RlX292ZXJm
bG93OworICAgICAgfQorCisgICAgICBpZiAoaW5wdXRbal0gPT0gbikgeworICAgICAgICAvKiBS
ZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlcjog
Ki8KKworICAgICAgICBmb3IgKHEgPSBkZWx0YSwgayA9IGJhc2U7ICA7ICBrICs9IGJhc2UpIHsK
KyAgICAgICAgICBpZiAob3V0ID49IG1heF9vdXQpIHJldHVybiBwdW55Y29kZV9iaWdfb3V0cHV0
OworICAgICAgICAgIHQgPSBrIDw9IGJpYXMgLyogKyB0bWluICovID8gdG1pbiA6ICAgICAvKiAr
dG1pbiBub3QgbmVlZGVkICovCisgICAgICAgICAgICAgIGsgPj0gYmlhcyArIHRtYXggPyB0bWF4
IDogayAtIGJpYXM7CisgICAgICAgICAgaWYgKHEgPCB0KSBicmVhazsKKyAgICAgICAgICBvdXRw
dXRbb3V0KytdID0gZW5jb2RlX2RpZ2l0KHQgKyAocSAtIHQpICUgKGJhc2UgLSB0KSwgMCk7Cisg
ICAgICAgICAgcSA9IChxIC0gdCkgLyAoYmFzZSAtIHQpOworICAgICAgICB9CisKKyAgICAgICAg
b3V0cHV0W291dCsrXSA9IGVuY29kZV9kaWdpdChxLCBjYXNlX2ZsYWdzICYmIGNhc2VfZmxhZ3Nb
al0pOworICAgICAgICBiaWFzID0gYWRhcHQoZGVsdGEsIGggKyAxLCBoID09IGIpOworICAgICAg
ICBkZWx0YSA9IDA7CisgICAgICAgICsraDsKKyAgICAgIH0KKyAgICB9CisKKyAgICArK2RlbHRh
LCArK247CisgIH0KKworICAqb3V0cHV0X2xlbmd0aCA9IG91dDsKKyAgcmV0dXJuIHB1bnljb2Rl
X3N1Y2Nlc3M7Cit9CisKKy8qKiogTWFpbiBkZWNvZGUgZnVuY3Rpb24gKioqLworCitlbnVtIHB1
bnljb2RlX3N0YXR1cyBwdW55Y29kZV9kZWNvZGUoCisgIHB1bnljb2RlX3VpbnQgaW5wdXRfbGVu
Z3RoLAorICBjb25zdCBjaGFyIGlucHV0W10sCisgIHB1bnljb2RlX3VpbnQgKm91dHB1dF9sZW5n
dGgsCisgIHB1bnljb2RlX3VpbnQgb3V0cHV0W10sCisgIHVuc2lnbmVkIGNoYXIgY2FzZV9mbGFn
c1tdICkKK3sKKyAgcHVueWNvZGVfdWludCBuLCBvdXQsIGksIG1heF9vdXQsIGJpYXMsCisgICAg
ICAgICAgICAgICAgIGIsIGosIGluLCBvbGRpLCB3LCBrLCBkaWdpdCwgdDsKKworICAvKiBJbml0
aWFsaXplIHRoZSBzdGF0ZTogKi8KKworICBuID0gaW5pdGlhbF9uOworICBvdXQgPSBpID0gMDsK
KyAgbWF4X291dCA9ICpvdXRwdXRfbGVuZ3RoOworICBiaWFzID0gaW5pdGlhbF9iaWFzOworCisg
IC8qIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6ICBMZXQgYiBiZSB0aGUgbnVtYmVyIG9m
IGlucHV0IGNvZGUgKi8KKyAgLyogcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9y
IDAgaWYgdGhlcmUgaXMgbm9uZSwgdGhlbiAgICAqLworICAvKiBjb3B5IHRoZSBmaXJzdCBiIGNv
ZGUgcG9pbnRzIHRvIHRoZSBvdXRwdXQuICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgZm9y
IChiID0gaiA9IDA7ICBqIDwgaW5wdXRfbGVuZ3RoOyAgKytqKSBpZiAoZGVsaW0oaW5wdXRbal0p
KSBiID0gajsKKyAgaWYgKGIgPiBtYXhfb3V0KSByZXR1cm4gcHVueWNvZGVfYmlnX291dHB1dDsK
KworICBmb3IgKGogPSAwOyAgaiA8IGI7ICArK2opIHsKKyAgICBpZiAoY2FzZV9mbGFncykgY2Fz
ZV9mbGFnc1tvdXRdID0gZmxhZ2dlZChpbnB1dFtqXSk7CisgICAgaWYgKCFiYXNpYyhpbnB1dFtq
XSkpIHJldHVybiBwdW55Y29kZV9iYWRfaW5wdXQ7CisgICAgb3V0cHV0W291dCsrXSA9IGlucHV0
W2pdOworICB9CisKKyAgLyogTWFpbiBkZWNvZGluZyBsb29wOiAgU3RhcnQganVzdCBhZnRlciB0
aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55ICAqLworICAvKiBiYXNpYyBjb2RlIHBvaW50cyB3ZXJl
IGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuICovCisKKyAgZm9yIChp
biA9IGIgPiAwID8gYiArIDEgOiAwOyAgaW4gPCBpbnB1dF9sZW5ndGg7ICArK291dCkgeworCisg
ICAgLyogaW4gaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1l
ZCwgYW5kICovCisgICAgLyogb3V0IGlzIHRoZSBudW1iZXIgb2YgY29kZSBwb2ludHMgaW4gdGhl
IG91dHB1dCBhcnJheS4gICAgICovCisKKyAgICAvKiBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJp
YWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGRlbHRhLCAgKi8KKyAgICAvKiB3aGljaCBnZXRzIGFk
ZGVkIHRvIGkuICBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyICAgKi8KKyAgICAvKiBp
ZiB3ZSBpbmNyZWFzZSBpIGFzIHdlIGdvLCB0aGVuIHN1YnRyYWN0IG9mZiBpdHMgc3RhcnRpbmcg
Ki8KKyAgICAvKiB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBkZWx0YS4gICAgICAgICAgICAg
ICAgICAgICAgICAgKi8KKworICAgIGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgIDsg
IGsgKz0gYmFzZSkgeworICAgICAgaWYgKGluID49IGlucHV0X2xlbmd0aCkgcmV0dXJuIHB1bnlj
b2RlX2JhZF9pbnB1dDsKKyAgICAgIGRpZ2l0ID0gZGVjb2RlX2RpZ2l0KGlucHV0W2luKytdKTsK
KyAgICAgIGlmIChkaWdpdCA+PSBiYXNlKSByZXR1cm4gcHVueWNvZGVfYmFkX2lucHV0OworICAg
ICAgaWYgKGRpZ2l0ID4gKG1heGludCAtIGkpIC8gdykgcmV0dXJuIHB1bnljb2RlX292ZXJmbG93
OworICAgICAgaSArPSBkaWdpdCAqIHc7CisgICAgICB0ID0gayA8PSBiaWFzIC8qICsgdG1pbiAq
LyA/IHRtaW4gOiAgICAgLyogK3RtaW4gbm90IG5lZWRlZCAqLworICAgICAgICAgIGsgPj0gYmlh
cyArIHRtYXggPyB0bWF4IDogayAtIGJpYXM7CisgICAgICBpZiAoZGlnaXQgPCB0KSBicmVhazsK
KyAgICAgIGlmICh3ID4gbWF4aW50IC8gKGJhc2UgLSB0KSkgcmV0dXJuIHB1bnljb2RlX292ZXJm
bG93OworICAgICAgdyAqPSAoYmFzZSAtIHQpOworICAgIH0KKworICAgIGJpYXMgPSBhZGFwdChp
IC0gb2xkaSwgb3V0ICsgMSwgb2xkaSA9PSAwKTsKKworICAgIC8qIGkgd2FzIHN1cHBvc2VkIHRv
IHdyYXAgYXJvdW5kIGZyb20gb3V0KzEgdG8gMCwgICAqLworICAgIC8qIGluY3JlbWVudGluZyBu
IGVhY2ggdGltZSwgc28gd2UnbGwgZml4IHRoYXQgbm93OiAqLworCisgICAgaWYgKGkgLyAob3V0
ICsgMSkgPiBtYXhpbnQgLSBuKSByZXR1cm4gcHVueWNvZGVfb3ZlcmZsb3c7CisgICAgbiArPSBp
IC8gKG91dCArIDEpOworICAgIGkgJT0gKG91dCArIDEpOworCisgICAgLyogSW5zZXJ0IG4gYXQg
cG9zaXRpb24gaSBvZiB0aGUgb3V0cHV0OiAqLworCisgICAgLyogbm90IG5lZWRlZCBmb3IgUHVu
eWNvZGU6ICovCisgICAgLyogaWYgKGRlY29kZV9kaWdpdChuKSA8PSBiYXNlKSByZXR1cm4gcHVu
eWNvZGVfaW52YWxpZF9pbnB1dDsgKi8KKyAgICBpZiAob3V0ID49IG1heF9vdXQpIHJldHVybiBw
dW55Y29kZV9iaWdfb3V0cHV0OworCisgICAgaWYgKGNhc2VfZmxhZ3MpIHsKKyAgICAgIG1lbW1v
dmUoY2FzZV9mbGFncyArIGkgKyAxLCBjYXNlX2ZsYWdzICsgaSwgb3V0IC0gaSk7CisgICAgICAv
KiBDYXNlIG9mIGxhc3QgY2hhcmFjdGVyIGRldGVybWluZXMgdXBwZXJjYXNlIGZsYWc6ICovCisg
ICAgICBjYXNlX2ZsYWdzW2ldID0gZmxhZ2dlZChpbnB1dFtpbiAtIDFdKTsKKyAgICB9CisKKyAg
ICBtZW1tb3ZlKG91dHB1dCArIGkgKyAxLCBvdXRwdXQgKyBpLCAob3V0IC0gaSkgKiBzaXplb2Yg
Km91dHB1dCk7CisgICAgb3V0cHV0W2krK10gPSBuOworICB9CisKKyAgKm91dHB1dF9sZW5ndGgg
PSBvdXQ7CisgIHJldHVybiBwdW55Y29kZV9zdWNjZXNzOworfQorCisKKworCisKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9wdW55Y29kZS5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3dpbmNlL3B1bnljb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMTU5Yjk1MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay93aW5jZS9wdW55Y29kZS5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaSB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworCisjaWZuZGVmIFBVTllDT0RFX0gKKyNkZWZp
bmUgUFVOWUNPREVfSAorCisvKgorcHVueWNvZGUuYyBmcm9tIFJGQyAzNDkyCitodHRwOi8vd3d3
Lm5pY2VtaWNlLm5ldC9pZG4vCitBZGFtIE0uIENvc3RlbGxvCitodHRwOi8vd3d3Lm5pY2VtaWNl
Lm5ldC9hbWMvCisKK1RoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkgaW1wbGVtZW50aW5nIFB1bnlj
b2RlIChSRkMgMzQ5MikuCisKKyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQdWJsaWMgaW50ZXJmYWNlICh3b3Vs
ZCBub3JtYWxseSBnbyBpbiBpdHMgb3duIC5oIGZpbGUpOiAqLworCisjaW5jbHVkZSA8bGltaXRz
Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZW51bSBw
dW55Y29kZV9zdGF0dXMgeworICBwdW55Y29kZV9zdWNjZXNzLAorICBwdW55Y29kZV9iYWRfaW5w
dXQsICAgLyogSW5wdXQgaXMgaW52YWxpZC4gICAgICAgICAgICAgICAgICAgICAgICovCisgIHB1
bnljb2RlX2JpZ19vdXRwdXQsICAvKiBPdXRwdXQgd291bGQgZXhjZWVkIHRoZSBzcGFjZSBwcm92
aWRlZC4gKi8KKyAgcHVueWNvZGVfb3ZlcmZsb3cgICAgIC8qIElucHV0IG5lZWRzIHdpZGVyIGlu
dGVnZXJzIHRvIHByb2Nlc3MuICAqLworfTsKKworI2lmIFVJTlRfTUFYID49ICgxIDw8IDI2KSAt
IDEKK3R5cGVkZWYgdW5zaWduZWQgaW50IHB1bnljb2RlX3VpbnQ7CisjZWxzZQordHlwZWRlZiB1
bnNpZ25lZCBsb25nIHB1bnljb2RlX3VpbnQ7CisjZW5kaWYKKworZW51bSBwdW55Y29kZV9zdGF0
dXMgcHVueWNvZGVfZW5jb2RlKAorICBwdW55Y29kZV91aW50IGlucHV0X2xlbmd0aCwKKyAgY29u
c3QgcHVueWNvZGVfdWludCBpbnB1dFtdLAorICBjb25zdCB1bnNpZ25lZCBjaGFyIGNhc2VfZmxh
Z3NbXSwKKyAgcHVueWNvZGVfdWludCAqb3V0cHV0X2xlbmd0aCwKKyAgY2hhciBvdXRwdXRbXSAp
OworCisgICAgLyogcHVueWNvZGVfZW5jb2RlKCkgY29udmVydHMgVW5pY29kZSB0byBQdW55Y29k
ZS4gIFRoZSBpbnB1dCAgICAgKi8KKyAgICAvKiBpcyByZXByZXNlbnRlZCBhcyBhbiBhcnJheSBv
ZiBVbmljb2RlIGNvZGUgcG9pbnRzIChub3QgY29kZSAgICAqLworICAgIC8qIHVuaXRzOyBzdXJy
b2dhdGUgcGFpcnMgYXJlIG5vdCBhbGxvd2VkKSwgYW5kIHRoZSBvdXRwdXQgICAgICAgICovCisg
ICAgLyogd2lsbCBiZSByZXByZXNlbnRlZCBhcyBhbiBhcnJheSBvZiBBU0NJSSBjb2RlIHBvaW50
cy4gIFRoZSAgICAgKi8KKyAgICAvKiBvdXRwdXQgc3RyaW5nIGlzICpub3QqIG51bGwtdGVybWlu
YXRlZDsgaXQgd2lsbCBjb250YWluICAgICAgICAqLworICAgIC8qIHplcm9zIGlmIGFuZCBvbmx5
IGlmIHRoZSBpbnB1dCBjb250YWlucyB6ZXJvcy4gIChPZiBjb3Vyc2UgICAgICovCisgICAgLyog
dGhlIGNhbGxlciBjYW4gbGVhdmUgcm9vbSBmb3IgYSB0ZXJtaW5hdG9yIGFuZCBhZGQgb25lIGlm
ICAgICAgKi8KKyAgICAvKiBuZWVkZWQuKSAgVGhlIGlucHV0X2xlbmd0aCBpcyB0aGUgbnVtYmVy
IG9mIGNvZGUgcG9pbnRzIGluICAgICAqLworICAgIC8qIHRoZSBpbnB1dC4gIFRoZSBvdXRwdXRf
bGVuZ3RoIGlzIGFuIGluL291dCBhcmd1bWVudDogdGhlICAgICAgICovCisgICAgLyogY2FsbGVy
IHBhc3NlcyBpbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBpdCAgICAg
Ki8KKyAgICAvKiBjYW4gcmVjZWl2ZSwgYW5kIG9uIHN1Y2Nlc3NmdWwgcmV0dXJuIGl0IHdpbGwg
Y29udGFpbiB0aGUgICAgICAqLworICAgIC8qIG51bWJlciBvZiBjb2RlIHBvaW50cyBhY3R1YWxs
eSBvdXRwdXQuICBUaGUgY2FzZV9mbGFncyBhcnJheSAgICovCisgICAgLyogaG9sZHMgaW5wdXRf
bGVuZ3RoIGJvb2xlYW4gdmFsdWVzLCB3aGVyZSBub256ZXJvIHN1Z2dlc3RzIHRoYXQgKi8KKyAg
ICAvKiB0aGUgY29ycmVzcG9uZGluZyBVbmljb2RlIGNoYXJhY3RlciBiZSBmb3JjZWQgdG8gdXBw
ZXJjYXNlICAgICAqLworICAgIC8qIGFmdGVyIGJlaW5nIGRlY29kZWQgKGlmIHBvc3NpYmxlKSwg
YW5kIHplcm8gc3VnZ2VzdHMgdGhhdCAgICAgICovCisgICAgLyogaXQgYmUgZm9yY2VkIHRvIGxv
d2VyY2FzZSAoaWYgcG9zc2libGUpLiAgQVNDSUkgY29kZSBwb2ludHMgICAgKi8KKyAgICAvKiBh
cmUgZW5jb2RlZCBsaXRlcmFsbHksIGV4Y2VwdCB0aGF0IEFTQ0lJIGxldHRlcnMgYXJlIGZvcmNl
ZCAgICAqLworICAgIC8qIHRvIHVwcGVyY2FzZSBvciBsb3dlcmNhc2UgYWNjb3JkaW5nIHRvIHRo
ZSBjb3JyZXNwb25kaW5nICAgICAgICovCisgICAgLyogdXBwZXJjYXNlIGZsYWdzLiAgSWYgY2Fz
ZV9mbGFncyBpcyBhIG51bGwgcG9pbnRlciB0aGVuIEFTQ0lJICAgKi8KKyAgICAvKiBsZXR0ZXJz
IGFyZSBsZWZ0IGFzIHRoZXkgYXJlLCBhbmQgb3RoZXIgY29kZSBwb2ludHMgYXJlICAgICAgICAq
LworICAgIC8qIHRyZWF0ZWQgYXMgaWYgdGhlaXIgdXBwZXJjYXNlIGZsYWdzIHdlcmUgemVyby4g
IFRoZSByZXR1cm4gICAgICovCisgICAgLyogdmFsdWUgY2FuIGJlIGFueSBvZiB0aGUgcHVueWNv
ZGVfc3RhdHVzIHZhbHVlcyBkZWZpbmVkIGFib3ZlICAgKi8KKyAgICAvKiBleGNlcHQgcHVueWNv
ZGVfYmFkX2lucHV0OyBpZiBub3QgcHVueWNvZGVfc3VjY2VzcywgdGhlbiAgICAgICAqLworICAg
IC8qIG91dHB1dF9zaXplIGFuZCBvdXRwdXQgbWlnaHQgY29udGFpbiBnYXJiYWdlLiAgICAgICAg
ICAgICAgICAgICovCisKK2VudW0gcHVueWNvZGVfc3RhdHVzIHB1bnljb2RlX2RlY29kZSgKKyAg
cHVueWNvZGVfdWludCBpbnB1dF9sZW5ndGgsCisgIGNvbnN0IGNoYXIgaW5wdXRbXSwKKyAgcHVu
eWNvZGVfdWludCAqb3V0cHV0X2xlbmd0aCwKKyAgcHVueWNvZGVfdWludCBvdXRwdXRbXSwKKyAg
dW5zaWduZWQgY2hhciBjYXNlX2ZsYWdzW10gKTsKKworICAgIC8qIHB1bnljb2RlX2RlY29kZSgp
IGNvbnZlcnRzIFB1bnljb2RlIHRvIFVuaWNvZGUuICBUaGUgaW5wdXQgaXMgICovCisgICAgLyog
cmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgb2YgQVNDSUkgY29kZSBwb2ludHMsIGFuZCB0aGUgb3V0
cHV0ICAgKi8KKyAgICAvKiB3aWxsIGJlIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IG9mIFVuaWNv
ZGUgY29kZSBwb2ludHMuICBUaGUgICAqLworICAgIC8qIGlucHV0X2xlbmd0aCBpcyB0aGUgbnVt
YmVyIG9mIGNvZGUgcG9pbnRzIGluIHRoZSBpbnB1dC4gIFRoZSAgICovCisgICAgLyogb3V0cHV0
X2xlbmd0aCBpcyBhbiBpbi9vdXQgYXJndW1lbnQ6IHRoZSBjYWxsZXIgcGFzc2VzIGluICAgICAg
Ki8KKyAgICAvKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29kZSBwb2ludHMgdGhhdCBpdCBjYW4g
cmVjZWl2ZSwgYW5kICAgICAqLworICAgIC8qIG9uIHN1Y2Nlc3NmdWwgcmV0dXJuIGl0IHdpbGwg
Y29udGFpbiB0aGUgYWN0dWFsIG51bWJlciBvZiAgICAgICovCisgICAgLyogY29kZSBwb2ludHMg
b3V0cHV0LiAgVGhlIGNhc2VfZmxhZ3MgYXJyYXkgbmVlZHMgcm9vbSBmb3IgYXQgICAgKi8KKyAg
ICAvKiBsZWFzdCBvdXRwdXRfbGVuZ3RoIHZhbHVlcywgb3IgaXQgY2FuIGJlIGEgbnVsbCBwb2lu
dGVyIGlmIHRoZSAqLworICAgIC8qIGNhc2UgaW5mb3JtYXRpb24gaXMgbm90IG5lZWRlZC4gIEEg
bm9uemVybyBmbGFnIHN1Z2dlc3RzIHRoYXQgICovCisgICAgLyogdGhlIGNvcnJlc3BvbmRpbmcg
VW5pY29kZSBjaGFyYWN0ZXIgYmUgZm9yY2VkIHRvIHVwcGVyY2FzZSAgICAgKi8KKyAgICAvKiBi
eSB0aGUgY2FsbGVyIChpZiBwb3NzaWJsZSksIHdoaWxlIHplcm8gc3VnZ2VzdHMgdGhhdCBpdCBi
ZSAgICAqLworICAgIC8qIGZvcmNlZCB0byBsb3dlcmNhc2UgKGlmIHBvc3NpYmxlKS4gIEFTQ0lJ
IGNvZGUgcG9pbnRzIGFyZSAgICAgICovCisgICAgLyogb3V0cHV0IGFscmVhZHkgaW4gdGhlIHBy
b3BlciBjYXNlLCBidXQgdGhlaXIgZmxhZ3Mgd2lsbCBiZSBzZXQgKi8KKyAgICAvKiBhcHByb3By
aWF0ZWx5IHNvIHRoYXQgYXBwbHlpbmcgdGhlIGZsYWdzIHdvdWxkIGJlIGhhcm1sZXNzLiAgICAq
LworICAgIC8qIFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIGFueSBvZiB0aGUgcHVueWNvZGVfc3Rh
dHVzIHZhbHVlcyAgICAgICovCisgICAgLyogZGVmaW5lZCBhYm92ZTsgaWYgbm90IHB1bnljb2Rl
X3N1Y2Nlc3MsIHRoZW4gb3V0cHV0X2xlbmd0aCwgICAgKi8KKyAgICAvKiBvdXRwdXQsIGFuZCBj
YXNlX2ZsYWdzIG1pZ2h0IGNvbnRhaW4gZ2FyYmFnZS4gIE9uIHN1Y2Nlc3MsIHRoZSAqLworICAg
IC8qIGRlY29kZXIgd2lsbCBuZXZlciBuZWVkIHRvIHdyaXRlIGFuIG91dHB1dF9sZW5ndGggZ3Jl
YXRlciB0aGFuICovCisgICAgLyogaW5wdXRfbGVuZ3RoLCBiZWNhdXNlIG9mIGhvdyB0aGUgZW5j
b2RpbmcgaXMgZGVmaW5lZC4gICAgICAgICAgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9Cisj
ZW5kaWYKKworI2VuZGlmIC8vIFBVTllDT0RFX0gK
</data>
<flag name="review"
          id="17433"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33204</attachid>
            <date>2009-07-21 13:28:22 -0700</date>
            <delta_ts>2010-10-20 05:06:35 -0700</delta_ts>
            <desc>Broken out ResourceHandleWince into own patch</desc>
            <filename>27376_a.patch</filename>
            <type>text/plain</type>
            <size>37882</size>
            <attacher name="Adam Treat">manyoso</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTQyNzQ2ZC4uYzI0ZTFkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAwOS0wNy0yMSAgQWRhbSBUcmVhdCAg
PGFkYW0udHJlYXRAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNzM3NgorICAgICAgICBBZGQgV2luQ0Ugc3BlY2lmaWMgUmVzb3VyY2VIYW5kbGVXaW5j
ZS5jcHAgZm9yIHBsYXRmb3JtL25ldHdvcmsuCisKKyAgICAgICAgV3JpdHRlbiBieSBZb25nIExp
IDx5b25nLmxpQHRvcmNobW9iaWxlLmNvbT4sCisgICAgICAgIEdlb3JnZSBTdGFpa29zIDxnZW9y
Z2Uuc3RhaWtvc0B0b3JjaG1vYmlsZS5jb20+LAorICAgICAgICBKb2UgTWFzb248am9lLm1hc29u
QHRvcmNobW9iaWxlLmNvbT4KKyAgICAgICAgYW5kIHNvbWUgdHJpdmlhbCBzdHlsZSBmaXhlcyBi
eSBBZGFtIFRyZWF0IDxhZGFtLnRyZWF0QHRvcmNobW9iaWxlLmNvbT4uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlSGFuZGxlV2luY2UuY3BwOiBBZGRlZC4KKwog
MjAwOS0wNy0yMCAgWW9uZyBMaSAgPHlvbmcubGlAdG9yY2htb2JpbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlSGFuZGxlV2luY2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlSGFuZGxlV2luY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmJjZDg4NTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3VyY2VIYW5kbGVXaW5jZS5jcHAKQEAgLTAsMCArMSwx
MTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9y
Y2ggTW9iaWxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRG9jTG9h
ZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKKyNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgorI2lu
Y2x1ZGUgIlRpbWVyLmgiCisKKyNkZWZpbmUgSU5JVEdVSUQKKyNpbmNsdWRlIDxjb25ubWdyLmg+
CisjaW5jbHVkZSA8Y29ubm1ncl9wcm94eS5oPgorCisjaW5jbHVkZSA8d2luaW5ldC5oPgorCisj
aWZuZGVmIE5ERUJVRworI2RlZmluZSBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyNlbmRpZgorCitj
b25zdCBHVUlEIElJRF9EZXN0TmV0SW50ZXJuZXQgPQorICAgIHsgMHg0MzZlZjE0NCwgMHhiNGZi
LCAweDQ4NjMsIHsgMHhhMCwgMHg0MSwKKyAgICAweDhmLCAweDkwLCAweDVhLCAweDYyLCAweGM1
LCAweDcyfSB9OworCisKK2NvbnN0IEdVSUQgSUlEX0Nvbm5QcnZfSVByb3h5RXh0ZW5zaW9uID0K
KyAgICAgIHsgMHhhZjk2YjBiZCwgMHhhNDgxLCAweDQ4MmMsIHsgMHhhMCwgMHg5NCwgMHhhOCwg
MHg0NCwgMHg4NywKKyAgICAgICAgMHg2NywgMHhhMCwgMHhjMCB9IH07CisKK3R5cGVkZWYgdm9p
ZCAoKkJ1ZmZlckRlbGV0ZXIpKGNoYXIgKmRhdGEsIGludCBsZW4pOwordHlwZWRlZiBib29sICgq
RmV0Y2hBYm91dFBhZ2UpKGNvbnN0IHdjaGFyX3QgKmZpbGVOYW1lLCBjaGFyICoqZGF0YSwgaW50
ICpsZW4sIEJ1ZmZlckRlbGV0ZXIqIGRlbGV0ZXIpOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBTdHJpbmcgZ191c2VyQWdlbnRTdHIoIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UOyBV
OyBNb2JpbGU7IGVuKSBBcHBsZVdlYktpdC80MTguOS4xIChLSFRNTCwgbGlrZSBHZWNrbykgU2Fm
YXJpLzQxOS4zIFdNNiBJcmlzLzEuMC4wIik7CitzdGF0aWMgaW50IGdfbWF4TnVtV2luSW5ldEpv
YnMgPSA0Oworc3RhdGljIEZldGNoQWJvdXRQYWdlIGZldGNoQWJvdXRQYWdlID0gMDsKK3ZvaWQg
c2V0QWJvdXRQYWdlQ2FsbGJhY2soRmV0Y2hBYm91dFBhZ2UgZmFwKSB7IGZldGNoQWJvdXRQYWdl
ID0gZmFwOyB9Cit2b2lkIHNldFVzZXJBZ2VudFN0cihjb25zdCBTdHJpbmcmIGFnZW50KSB7IGdf
dXNlckFnZW50U3RyID0gYWdlbnQ7IH0KK1N0cmluZyB1c2VyQWdlbnRTdHIoKSB7IHJldHVybiBn
X3VzZXJBZ2VudFN0cjsgfQordm9pZCBzZXRNYXhOdW1XaW5JbmV0Sm9icyhpbnQgbnVtKSB7IGdf
bWF4TnVtV2luSW5ldEpvYnMgPSBudW07IH0KKworLy8gTWVzc2FnZSB0eXBlcyBmb3IgaW50ZXJu
YWwgdXNlIChrZWVwIGluIHN5bmMgd2l0aCBrTWVzc2FnZUhhbmRsZXJzKQorZW51bSB7CisgICAg
aGFuZGxlQ3JlYXRlZE1lc3NhZ2UgPSBXTV9VU0VSLAorICAgIHJlcXVlc3RSZWRpcmVjdGVkTWVz
c2FnZSwKKyAgICByZXF1ZXN0Q29tcGxldGVNZXNzYWdlLAorICAgIGNvbm5lY3Rpb25DbG9zZWRN
ZXNzYWdlCit9OworCitjbGFzcyBSZXNvdXJjZUpvYk1hbmFnZXI6IE5vbmNvcHlhYmxlIHsKK3B1
YmxpYzoKKyAgICBIV05EIGh3bmQoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZmVySm9iV2luZG93
SGFuZGxlOyB9CisKKyAgICB2b2lkIGluaXRpYWxpemVPZmZTY3JlZW5SZXNvdXJjZUhhbmRsZVdp
bmRvdygpCisgICAgeworICAgICAgICBpZiAobV90cmFuc2ZlckpvYldpbmRvd0hhbmRsZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzdGF0aWMgY29uc3QgTFBDV1NUUiBrUmVzb3Vy
Y2VIYW5kbGVXaW5kb3dDbGFzc05hbWUgPSBMIlJlc291cmNlSGFuZGxlV2luZG93Q2xhc3MiOwor
CisgICAgICAgIFdORENMQVNTIHdjOworICAgICAgICBtZW1zZXQoJndjLCAwLCBzaXplb2Yod2Mp
KTsKKworICAgICAgICB3Yy5scGZuV25kUHJvYyAgICA9IFJlc291cmNlSGFuZGxlV25kUHJvYzsK
KyAgICAgICAgd2MuaEluc3RhbmNlICAgICAgPSBQYWdlOjppbnN0YW5jZUhhbmRsZSgpOworICAg
ICAgICB3Yy5scHN6Q2xhc3NOYW1lICA9IGtSZXNvdXJjZUhhbmRsZVdpbmRvd0NsYXNzTmFtZTsK
KyAgICAgICAgUmVnaXN0ZXJDbGFzcygmd2MpOworCisgICAgICAgIG1fdHJhbnNmZXJKb2JXaW5k
b3dIYW5kbGUgPSBDcmVhdGVXaW5kb3coa1Jlc291cmNlSGFuZGxlV2luZG93Q2xhc3NOYW1lLCAw
LCAwLCBDV19VU0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAwLAorICAgICAgICAgICAgSFdO
RF9NRVNTQUdFLCAwLCBQYWdlOjppbnN0YW5jZUhhbmRsZSgpLCAwKTsKKyAgICB9CisKKyAgICAv
LyBSZXR1cm4gZmFsc2UgaWYgZmFpbGVkIHRvIG9wZW4gVVJMLgorICAgIGJvb2wgYWRkVG9PdXRz
dGFuZGluZ0pvYnMoUmVzb3VyY2VIYW5kbGUqIGpvYiwgY29uc3QgU3RyaW5nJiByZWZlcnJlcikK
KyAgICB7CisgICAgICAgIGlmICghbV9qb2JJZE1hcCkgeworICAgICAgICAgICAgbV9qb2JJZE1h
cCA9IG5ldyBIYXNoTWFwPGludCwgUmVzb3VyY2VIYW5kbGUqPjsKKyAgICAgICAgICAgIG1fZGVm
ZXJyZWRKb2JzID0gbmV3IEhhc2hNYXA8aW50LCBTdHJpbmc+OworICAgICAgICB9CisKKyAgICAg
ICAgLy8gc2tpcCBvdmVyIDAKKyAgICAgICAgaWYgKCErK21fdHJhbnNmZXJKb2JJZCkKKyAgICAg
ICAgICAgIG1fdHJhbnNmZXJKb2JJZCA9IDE7CisKKyAgICAgICAgbV9qb2JJZE1hcC0+c2V0KG1f
dHJhbnNmZXJKb2JJZCwgam9iKTsKKyAgICAgICAgam9iLT5kLT5tX2pvYklkID0gbV90cmFuc2Zl
ckpvYklkOworCisgICAgICAgIGlmIChtX2pvYklkTWFwLT5zaXplKCkgLSBtX2RlZmVycmVkSm9i
cy0+c2l6ZSgpID4gZ19tYXhOdW1XaW5JbmV0Sm9icykgeworICAgICAgICAgICAgbV9kZWZlcnJl
ZEpvYnMtPnNldChtX3RyYW5zZmVySm9iSWQsIHJlZmVycmVyKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpvYi0+b3BlblVybChyZWZlcnJl
ciwgdHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVGcm9tT3V0c3RhbmRpbmdKb2JzKGlu
dCBqb2JJZCkKKyAgICB7CisgICAgICAgIGlmICghbV9qb2JJZE1hcCB8fCAhbV9qb2JJZE1hcC0+
Y29udGFpbnMoam9iSWQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fam9iSWRN
YXAtPnJlbW92ZShqb2JJZCk7CisgICAgICAgIG1fZGVmZXJyZWRKb2JzLT5yZW1vdmUoam9iSWQp
OworCisgICAgICAgIHdoaWxlIChtX2RlZmVycmVkSm9icy0+c2l6ZSgpICYmIG1fam9iSWRNYXAt
PnNpemUoKSAtIG1fZGVmZXJyZWRKb2JzLT5zaXplKCkgPCBnX21heE51bVdpbkluZXRKb2JzKSB7
CisgICAgICAgICAgICBIYXNoTWFwPGludCwgU3RyaW5nPjo6aXRlcmF0b3IgYmVnID0gbV9kZWZl
cnJlZEpvYnMtPmJlZ2luKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBuZXdKb2JJZCA9IGJlZy0+
Zmlyc3Q7CisgICAgICAgICAgICBTdHJpbmcgcmVmZXJyZXIgPSBiZWctPnNlY29uZDsKKyAgICAg
ICAgICAgIG1fZGVmZXJyZWRKb2JzLT5yZW1vdmUoYmVnKTsKKworICAgICAgICAgICAgUmVzb3Vy
Y2VIYW5kbGUqIGpvYiA9IG1fam9iSWRNYXAtPmdldChuZXdKb2JJZCk7CisgICAgICAgICAgICBp
ZiAoIWpvYi0+b3BlblVybChyZWZlcnJlciwgZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgLy8g
UmVtb3ZlIGl0IGJlZm9yZSBkZWxldGluZyB0byBhdm9pZCByZWVudGVyaW5nIHRoaXMgbG9vcAor
ICAgICAgICAgICAgICAgIG1fam9iSWRNYXAtPnJlbW92ZShuZXdKb2JJZCk7CisgICAgICAgICAg
ICAgICAgam9iLT5mYWlsKCJGYWlsZWQgdG8gb3BlbiBVUkwiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGJvb2wgcmVuZXdKb2JJZChpbnQgb2xkSm9iSWQpCisgICAg
eworICAgICAgICBpZiAoIW1fam9iSWRNYXAgfHwgIW1fam9iSWRNYXAtPmNvbnRhaW5zKG9sZEpv
YklkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoISsrbV90cmFu
c2ZlckpvYklkKQorICAgICAgICAgICAgbV90cmFuc2ZlckpvYklkID0gMTsKKworICAgICAgICBp
ZiAobV9kZWZlcnJlZEpvYnMtPmNvbnRhaW5zKG9sZEpvYklkKSkgeworICAgICAgICAgICAgbV9k
ZWZlcnJlZEpvYnMtPnNldChtX3RyYW5zZmVySm9iSWQsIG1fZGVmZXJyZWRKb2JzLT5nZXQob2xk
Sm9iSWQpKTsKKyAgICAgICAgICAgIG1fZGVmZXJyZWRKb2JzLT5yZW1vdmUob2xkSm9iSWQpOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IG1fam9iSWRNYXAtPmdl
dChvbGRKb2JJZCk7CisgICAgICAgIGpvYi0+ZC0+bV9qb2JJZCA9IG1fdHJhbnNmZXJKb2JJZDsK
KworICAgICAgICBtX2pvYklkTWFwLT5zZXQobV90cmFuc2ZlckpvYklkLCBqb2IpOworICAgICAg
ICBtX2pvYklkTWFwLT5yZW1vdmUob2xkSm9iSWQpOworCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIFJlc291cmNlSGFuZGxlKiBsb29rdXBSZXNvdXJjZUhhbmRsZShpbnQgam9i
SWQpCisgICAgeworICAgICAgICBpZiAoIW1fam9iSWRNYXApCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIG1fam9iSWRNYXAtPmdldChqb2JJZCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIGZyaWVuZCBSZXNvdXJjZUpvYk1hbmFnZXIqIGpvYk1hbmFnZXIoKTsKKworICAg
IFJlc291cmNlSm9iTWFuYWdlcigpCisgICAgICAgIDogbV90cmFuc2ZlckpvYklkKDApCisgICAg
ICAgICwgbV9qb2JJZE1hcCgwKQorICAgICAgICAsIG1fdHJhbnNmZXJKb2JXaW5kb3dIYW5kbGUo
MCkKKyAgICAgICAgLCBtX2RlZmVycmVkSm9icygwKQorICAgIHsKKyAgICB9CisKKyAgICB+UmVz
b3VyY2VKb2JNYW5hZ2VyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3RyYW5zZmVySm9iV2luZG93
SGFuZGxlKQorICAgICAgICAgICAgRGVzdHJveVdpbmRvdyhtX3RyYW5zZmVySm9iV2luZG93SGFu
ZGxlKTsKKworICAgICAgICBpZiAobV9qb2JJZE1hcCkgeworICAgICAgICAgICAgd2hpbGUgKCFt
X2pvYklkTWFwLT5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZGVsZXRlIG1fam9iSWRNYXAt
PmJlZ2luKCktPnNlY29uZDsKKworICAgICAgICAgICAgZGVsZXRlIG1fam9iSWRNYXA7CisgICAg
ICAgICAgICBkZWxldGUgbV9kZWZlcnJlZEpvYnM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBz
dGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBSZXNvdXJjZUhhbmRsZVduZFByb2MoSFdORCBoV25kLCBV
SU5UIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOworCisgICAgdW5zaWduZWQgbV90
cmFuc2ZlckpvYklkOworICAgIEhhc2hNYXA8aW50LCBSZXNvdXJjZUhhbmRsZSo+KiBtX2pvYklk
TWFwOworICAgIEhXTkQgbV90cmFuc2ZlckpvYldpbmRvd0hhbmRsZTsKKyAgICBIYXNoTWFwPGlu
dCwgU3RyaW5nPiogbV9kZWZlcnJlZEpvYnM7Cit9OworCisKK0xSRVNVTFQgQ0FMTEJBQ0sgUmVz
b3VyY2VKb2JNYW5hZ2VyOjpSZXNvdXJjZUhhbmRsZVduZFByb2MoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BB
UkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICB0eXBlZGVmIHZvaWQgKFJlc291cmNl
SGFuZGxlOjogKlJlc291cmNlSGFuZGxlRXZlbnRIYW5kbGVyKShMUEFSQU0pOworICAgIHN0YXRp
YyBjb25zdCBSZXNvdXJjZUhhbmRsZUV2ZW50SGFuZGxlciBtZXNzYWdlSGFuZGxlcnNbXSA9IHsK
KyAgICAgICAgJlJlc291cmNlSGFuZGxlOjpvbkhhbmRsZUNyZWF0ZWQsCisgICAgICAgICZSZXNv
dXJjZUhhbmRsZTo6b25SZXF1ZXN0UmVkaXJlY3RlZCwKKyAgICAgICAgJlJlc291cmNlSGFuZGxl
OjpvblJlcXVlc3RDb21wbGV0ZSwKKyAgICAgICAgJlJlc291cmNlSGFuZGxlOjpvbkNvbm5lY3Rp
b25DbG9zZWQsCisgICAgfTsKKworICAgIGlmIChtZXNzYWdlID49IFdNX1VTRVIpIHsKKyAgICAg
ICAgVUlOVCBpbmRleCA9IG1lc3NhZ2UgLSBXTV9VU0VSOworICAgICAgICBpZiAoaW5kZXggPCBf
Y291bnRvZihtZXNzYWdlSGFuZGxlcnMpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBqb2JJZCA9
ICh1bnNpZ25lZCkgd1BhcmFtOworICAgICAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IGpv
Yk1hbmFnZXIoKS0+bG9va3VwUmVzb3VyY2VIYW5kbGUoam9iSWQpOworICAgICAgICAgICAgaWYg
KGpvYikgeworICAgICAgICAgICAgICAgIEFTU0VSVChqb2ItPmQtPm1fam9iSWQgPT0gam9iSWQp
OworICAgICAgICAgICAgICAgIEFTU0VSVChqb2ItPmQtPm1fdGhyZWFkSWQgPT0gR2V0Q3VycmVu
dFRocmVhZElkKCkpOworICAgICAgICAgICAgICAgIChqb2ItPioobWVzc2FnZUhhbmRsZXJzW2lu
ZGV4XSkpKGxQYXJhbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3
UGFyYW0sIGxQYXJhbSk7Cit9CisKKworc3RhdGljIFJlc291cmNlSm9iTWFuYWdlciogam9iTWFu
YWdlcigpCit7CisgICAgc3RhdGljIFJlc291cmNlSm9iTWFuYWdlciBqbTsKKyAgICByZXR1cm4g
JmptOworfQorCitjbGFzcyBHbG9iYWxDb25uZWN0aW9uTWFuYWdlcjogTm9uY29weWFibGUgewor
cHVibGljOgorICAgIEdsb2JhbENvbm5lY3Rpb25NYW5hZ2VyKCkKKyAgICB7CisgICAgICAgIG1f
aENvbm5lY3Rpb24gPSAwOworICAgICAgICBtX2hJbnRlcm5ldCA9IDA7CisgICAgICAgIG1fcHN6
UHJveHkgPSAwOworICAgICAgICBtX2R3QWNjZXNzVHlwZSA9IDA7CisgICAgICAgIG1faHIgPSBT
X09LOworCisgICAgICAgIGNvbm5lY3QoKTsKKyAgICB9CisgICAgfkdsb2JhbENvbm5lY3Rpb25N
YW5hZ2VyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2hJbnRlcm5ldCkKKyAgICAgICAgICAgIElu
dGVybmV0Q2xvc2VIYW5kbGUobV9oSW50ZXJuZXQpOworICAgICAgICBpZiAobV9oQ29ubmVjdGlv
bikKKyAgICAgICAgICAgIENvbm5NZ3JSZWxlYXNlQ29ubmVjdGlvbihtX2hDb25uZWN0aW9uLCAx
KTsKKyAgICB9CisKKyAgICB2b2lkIGVzdGFibGlzaENvbm5lY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2hDb25uZWN0aW9uKSB7CisgICAgICAgICAgICBtX2hJbnRlcm5ldCA9IDA7CisK
KyAgICAgICAgICAgIENPTk5NR1JfQ09OTkVDVElPTklORk8gY2kgPSB7MH07CisKKyAgICAgICAg
ICAgIGNpLmNiU2l6ZSA9IHNpemVvZihDT05OTUdSX0NPTk5FQ1RJT05JTkZPKTsKKyAgICAgICAg
ICAgIGNpLmR3UGFyYW1zID0gQ09OTk1HUl9QQVJBTV9HVUlEREVTVE5FVDsKKyAgICAgICAgICAg
IGNpLmR3RmxhZ3MgPSBDT05OTUdSX0ZMQUdfUFJPWFlfSFRUUDsKKyAgICAgICAgICAgIGNpLmR3
UHJpb3JpdHkgPSBDT05OTUdSX1BSSU9SSVRZX1VTRVJJTlRFUkFDVElWRTsKKyAgICAgICAgICAg
IGNpLmJFeGNsdXNpdmUgPSBUUlVFOworCisgICAgICAgICAgICBEV09SRCBkd0luZGV4ID0gMDsK
KyAgICAgICAgICAgIGlmIChTX09LICE9IENvbm5NZ3JNYXBVUkwoTCJodHRwOi8vd3d3LmlyaXNi
cm93c2VyLmNvbSIsICYoY2kuZ3VpZERlc3ROZXQpLCAmZHdJbmRleCkpCisgICAgICAgICAgICAg
ICAgY2kuZ3VpZERlc3ROZXQgPSBJSURfRGVzdE5ldEludGVybmV0OworCisgICAgICAgICAgICBE
V09SRCBkd1N0YXR1cyA9IDA7CisgICAgICAgICAgICBpZiAoU19PSyAhPSBDb25uTWdyRXN0YWJs
aXNoQ29ubmVjdGlvblN5bmMoJmNpLCAmbV9oQ29ubmVjdGlvbiwgMjUwMDAsICZkd1N0YXR1cykp
CisgICAgICAgICAgICAgICAgbV9oQ29ubmVjdGlvbiA9IDA7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIG9wZW5JbnRlcm5ldCgpCisgICAgeworICAgICAgICBpZiAobV9oQ29ubmVjdGlv
biAmJiAhbV9oSW50ZXJuZXQpIHsKKyAgICAgICAgICAgIFBST1hZX0NPTkZJRyBwY1Byb3h5ID0g
ezB9OworICAgICAgICAgICAgaWYgKFNfT0sgPT0gQ29ubk1nclByb3ZpZGVyTWVzc2FnZShtX2hD
b25uZWN0aW9uLCAmSUlEX0Nvbm5QcnZfSVByb3h5RXh0ZW5zaW9uLCAwLCAwLCAwLCAoUEJZVEUp
JnBjUHJveHksIHNpemVvZihwY1Byb3h5KSkpIHsKKyAgICAgICAgICAgICAgICBtX2R3QWNjZXNz
VHlwZSA9IElOVEVSTkVUX09QRU5fVFlQRV9QUk9YWTsKKyAgICAgICAgICAgICAgICBtX3BzelBy
b3h5ID0gKExQVFNUUikgTG9jYWxBbGxvYyhMUFRSLCBfY291bnRvZihwY1Byb3h5LnN6UHJveHlT
ZXJ2ZXIpKTsKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgbV9wc3pQcm94eSB3YXMgYWxs
b2NhdGVkLgorCisgICAgICAgICAgICAgICAgbV9ociA9IFN0cmluZ0NjaENvcHlOKG1fcHN6UHJv
eHksIF9jb3VudG9mKHBjUHJveHkuc3pQcm94eVNlcnZlciksCisgICAgICAgICAgICAgICAgICAg
IHBjUHJveHkuc3pQcm94eVNlcnZlciwgX2NvdW50b2YocGNQcm94eS5zelByb3h5U2VydmVyKSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fZHdBY2Nlc3NUeXBlID0g
SU5URVJORVRfT1BFTl9UWVBFX0RJUkVDVDsgLy8gSU5URVJORVRfT1BFTl9UWVBFX1BSRUNPTkZJ
RzsKKyAgICAgICAgICAgICAgICBtX3BzelByb3h5ID0gMDsKKworICAgICAgICAgICAgICAgIG1f
aHIgPSBTX09LOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2hJbnRlcm5ldCA9IElu
dGVybmV0T3BlbgorICAgICAgICAgICAgICAgIChnX3VzZXJBZ2VudFN0ci5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpCisgICAgICAgICAgICAgICAgLCBtX2R3QWNjZXNzVHlwZQorICAg
ICAgICAgICAgICAgICwgbV9wc3pQcm94eQorICAgICAgICAgICAgICAgICwgMAorICAgICAgICAg
ICAgICAgICwgSU5URVJORVRfRkxBR19BU1lOQyk7CisKKyAgICAgICAgICAgIGlmIChtX2hJbnRl
cm5ldCkgeworICAgICAgICAgICAgICAgIGpvYk1hbmFnZXIoKS0+aW5pdGlhbGl6ZU9mZlNjcmVl
blJlc291cmNlSGFuZGxlV2luZG93KCk7CisKKyAgICAgICAgICAgICAgICBJTlRFUk5FVF9TVEFU
VVNfQ0FMTEJBQ0sgY2FsbGJhY2tIYW5kbGUgPQorICAgICAgICAgICAgICAgICAgICBJbnRlcm5l
dFNldFN0YXR1c0NhbGxiYWNrKG1faEludGVybmV0LCB0cmFuc2ZlckpvYlN0YXR1c0NhbGxiYWNr
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIGNvbm5lY3QoKQor
ICAgIHsKKyAgICAgICAgZXN0YWJsaXNoQ29ubmVjdGlvbigpOworCisgICAgICAgIG9wZW5JbnRl
cm5ldCgpOworICAgIH0KKworICAgIExQV1NUUiAgICAgICAgICBtX3BzelByb3h5OworICAgIERX
T1JEICAgICAgICAgICBtX2R3QWNjZXNzVHlwZTsKKyAgICBIQU5ETEUgICAgICAgICAgbV9oQ29u
bmVjdGlvbjsKKyAgICBISU5URVJORVQgICAgICAgbV9oSW50ZXJuZXQ7CisgICAgSFJFU1VMVCAg
ICAgICAgIG1faHI7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgX19zdGRjYWxsIHRyYW5z
ZmVySm9iU3RhdHVzQ2FsbGJhY2soSElOVEVSTkVUIGludGVybmV0SGFuZGxlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEX1BUUiBqb2JJ
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
V09SRCBpbnRlcm5ldFN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMUFZPSUQgc3RhdHVzSW5mb3JtYXRpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgc3RhdHVzSW5mb3Jt
YXRpb25MZW5ndGgpOworCit9OworCit2b2lkIF9fc3RkY2FsbCBHbG9iYWxDb25uZWN0aW9uTWFu
YWdlcjo6dHJhbnNmZXJKb2JTdGF0dXNDYWxsYmFjayhISU5URVJORVQgaW50ZXJuZXRIYW5kbGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRF9Q
VFIgam9iSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEV09SRCBpbnRlcm5ldFN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIExQVk9JRCBzdGF0dXNJbmZvcm1hdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIHN0YXR1c0luZm9ybWF0aW9u
TGVuZ3RoKSB7CisjaWZkZWYgUkVTT1VSQ0VfTE9BREVSX0RFQlVHCisgICAgcHJpbnRmKCJzdGF0
dXMtY2FsbGJhY2s6IHN0YXR1cz0ldSwgam9iPSVwXG4iLAorICAgICAgICAgICAgICBpbnRlcm5l
dFN0YXR1cywgam9iSWQpOworI2VuZGlmCisKKyAgICBVSU5UIG1zZzsKKyAgICBMUEFSQU0gbFBh
cmFtOworCisgICAgc3dpdGNoIChpbnRlcm5ldFN0YXR1cykgeworICAgIGNhc2UgSU5URVJORVRf
U1RBVFVTX0hBTkRMRV9DUkVBVEVEOgorICAgICAgICAvLyB0ZWxsIHRoZSBtYWluIHRocmVhZCBh
Ym91dCB0aGUgbmV3bHkgY3JlYXRlZCBoYW5kbGUKKyAgICAgICAgbXNnID0gaGFuZGxlQ3JlYXRl
ZE1lc3NhZ2U7CisgICAgICAgIGxQYXJhbSA9IChMUEFSQU0pIExQSU5URVJORVRfQVNZTkNfUkVT
VUxUKHN0YXR1c0luZm9ybWF0aW9uKS0+ZHdSZXN1bHQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSU5URVJORVRfU1RBVFVTX1JFUVVFU1RfQ09NUExFVEU6CisjaWZkZWYgUkVTT1VSQ0VfTE9B
REVSX0RFQlVHCisgICAgICAgIHByaW50ZigicmVxdWVzdC1jb21wbGV0ZTogcmVzdWx0PSVwLCBl
cnJvcj0ldVxuIiwKKyAgICAgICAgICAgIExQSU5URVJORVRfQVNZTkNfUkVTVUxUKHN0YXR1c0lu
Zm9ybWF0aW9uKS0+ZHdSZXN1bHQsCisgICAgICAgICAgICBMUElOVEVSTkVUX0FTWU5DX1JFU1VM
VChzdGF0dXNJbmZvcm1hdGlvbiktPmR3RXJyb3IpOworI2VuZGlmCisgICAgICAgIC8vIHRlbGwg
dGhlIG1haW4gdGhyZWFkIHRoYXQgdGhlIHJlcXVlc3QgaXMgZG9uZQorICAgICAgICBtc2cgPSBy
ZXF1ZXN0Q29tcGxldGVNZXNzYWdlOworICAgICAgICBsUGFyYW0gPSAoTFBBUkFNKUxQSU5URVJO
RVRfQVNZTkNfUkVTVUxUKHN0YXR1c0luZm9ybWF0aW9uKS0+ZHdFcnJvcjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfUkVESVJFQ1Q6CisgICAgICAgIC8vIHRlbGwg
dGhlIG1haW4gdGhyZWFkIHRvIG9ic2VydmUgdGhpcyByZWRpcmVjdCAoRklYTUU6IHdlIHByb2Jh
Ymx5CisgICAgICAgIC8vIG5lZWQgdG8gYmxvY2sgdGhlIHJlZGlyZWN0IGF0IHRoaXMgcG9pbnQg
c28gdGhlIGFwcGxpY2F0aW9uIGNhbgorICAgICAgICAvLyBkZWNpZGUgd2hldGhlciBvciBub3Qg
dG8gZm9sbG93IHRoZSByZWRpcmVjdCkKKyAgICAgICAgbXNnID0gcmVxdWVzdFJlZGlyZWN0ZWRN
ZXNzYWdlOworICAgICAgICBsUGFyYW0gPSAoTFBBUkFNKW5ldyBTdHJpbmcoKFVDaGFyKilzdGF0
dXNJbmZvcm1hdGlvbiwgc3RhdHVzSW5mb3JtYXRpb25MZW5ndGgpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19DT05ORUNUSU9OX0NMT1NFRDoKKyAgICAgICAgbXNn
ID0gY29ubmVjdGlvbkNsb3NlZE1lc3NhZ2U7CisgICAgICAgIGxQYXJhbSA9IDA7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX1VTRVJfSU5QVVRfUkVRVUlSRUQ6Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiVVNFUiBJTlBVVCBSRVFVSVJFRFxuIik7CisgICAgICAg
IC8vIEZJWE1FOiBwcm9tcHQgdGhlIHVzZXIgaWYgbmVjZXNzYXJ5CisgICAgICAgIFJlc3VtZVN1
c3BlbmRlZERvd25sb2FkKGludGVybmV0SGFuZGxlLCAwKTsKKyAgICBjYXNlIElOVEVSTkVUX1NU
QVRVU19TVEFURV9DSEFOR0U6CisgICAgICAgIC8vIG1heSBuZWVkIHRvIGNhbGwgUmVzdW1lU3Vz
cGVuZGVkRG93bmxvYWQgaGVyZSBhcyB3ZWxsCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFBvc3RNZXNzYWdlKGpvYk1hbmFnZXIoKS0+aHduZCgpLCBtc2csIChX
UEFSQU0pIGpvYklkLCBsUGFyYW0pOworfQorCitjbGFzcyBDb25uZWN0aW9uTWFuYWdlcjogTm9u
Y29weWFibGUgeworcHVibGljOgorICAgIENvbm5lY3Rpb25NYW5hZ2VyKCkgLy8sIExQQ1dTVFIg
dXNlckFnZW50VGV4KQorICAgICAgICA6IG1faFVybCgwKQorICAgICAgICAsIG1faFNlY1VybCgw
KQorICAgIHsKKyAgICAgICAgbV9jb25uZWN0aW9uLmNvbm5lY3QoKTsKKyAgICB9CisKKyAgICB+
Q29ubmVjdGlvbk1hbmFnZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1faFNlY1VybCkKKyAgICAg
ICAgICAgIEludGVybmV0Q2xvc2VIYW5kbGUobV9oU2VjVXJsKTsKKyAgICAgICAgaWYgKG1faFVy
bCkKKyAgICAgICAgICAgIEludGVybmV0Q2xvc2VIYW5kbGUobV9oVXJsKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgSElOVEVSTkVUIGludGVybmV0SGFuZGxlICgpIHsgcmV0dXJuIG1fY29ubmVjdGlv
bi5tX2hJbnRlcm5ldDsgfQorICAgIEhJTlRFUk5FVCB1cmxIYW5kbGUgKCkgY29uc3QgeyByZXR1
cm4gbV9oVXJsOyB9CisgICAgSElOVEVSTkVUIHNlY29uZGFyeVVybEhhbmRsZSAoKSBjb25zdCB7
IHJldHVybiBtX2hTZWNVcmw7IH0KKworICAgIHZvaWQgY2xvc2VVcmxIYW5kbGUoKQorICAgIHsK
KyAgICAgICAgaWYgKG1faFNlY1VybCkgeworICAgICAgICAgICAgSW50ZXJuZXRDbG9zZUhhbmRs
ZShtX2hTZWNVcmwpOworICAgICAgICAgICAgbV9oU2VjVXJsID0gMDsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobV9oVXJsKSB7CisgICAgICAgICAgICBJbnRlcm5ldENsb3NlSGFuZGxlKG1faFVy
bCk7CisgICAgICAgICAgICBtX2hVcmwgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgdm9p
ZCBzZXRVcmxIYW5kbGUoSElOVEVSTkVUIHVybCkgeyBtX2hVcmwgPSB1cmw7IH0KKyAgICB2b2lk
IHNldFNlY29uZGFyeVVybEhhbmRsZShISU5URVJORVQgdXJsKSB7IG1faFNlY1VybCA9IHVybDsg
fQorCitwcml2YXRlOgorCisgICAgc3RhdGljIEdsb2JhbENvbm5lY3Rpb25NYW5hZ2VyIG1fY29u
bmVjdGlvbjsKKyAgICBISU5URVJORVQgICAgbV9oVXJsOworICAgIEhJTlRFUk5FVCAgICBtX2hT
ZWNVcmw7Cit9OworCitHbG9iYWxDb25uZWN0aW9uTWFuYWdlciBDb25uZWN0aW9uTWFuYWdlcjo6
bV9jb25uZWN0aW9uOworCitzdGF0aWMgU3RyaW5nIGh0dHBRdWVyeUluZm8oSElOVEVSTkVUIGhS
ZXF1ZXN0LCBEV09SRCBkd0luZm9MZXZlbCkKK3sKKyAgICBEV09SRCBidWZmZXJMZW5ndGggPSAw
OworICAgIGlmIChIdHRwUXVlcnlJbmZvKGhSZXF1ZXN0LCBkd0luZm9MZXZlbCwgMCwgJmJ1ZmZl
ckxlbmd0aCwgMCkKKyAgICAgICAgfHwgRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUiAhPSBHZXRM
YXN0RXJyb3IoKQorICAgICAgICB8fCAhYnVmZmVyTGVuZ3RoKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisKKyAgICBVQ2hhciogYnVmZmVyID0gbmV3IFVDaGFyWyhidWZmZXJMZW5ndGggKyAx
KSAvIDJdOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAg
ICBpZiAoIUh0dHBRdWVyeUluZm8oaFJlcXVlc3QsIGR3SW5mb0xldmVsLCBidWZmZXIsICZidWZm
ZXJMZW5ndGgsIDApKSB7CisgICAgICAgIGRlbGV0ZVtdIGJ1ZmZlcjsKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIH0KKworICAgIFN0cmluZyBydG4oYnVmZmVyLCAoYnVmZmVyTGVuZ3Ro
ICsgMSkgLyAyKTsKKyAgICBkZWxldGVbXSBidWZmZXI7CisKKyAgICByZXR1cm4gcnRuOworfQor
CitSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpCit7Cisg
ICAgaWYgKG1fZmlsZUhhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgQ2xv
c2VIYW5kbGUobV9maWxlSGFuZGxlKTsKKworICAgIGRlbGV0ZSBtX2Nvbm5NZ3I7CisgICAgZGVs
ZXRlW10gbV9mb3JtRGF0YVN0cmluZzsKK30KKworUmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhh
bmRsZSgpCit7CisgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZXMgYmVmb3JlIHJlbW92aW5nIHRoZSBq
b2IKKyAgICBkZWxldGUgZC0+bV9jb25uTWdyOworICAgIGQtPm1fY29ubk1nciA9IDA7CisKKyAg
ICBpZiAoZC0+bV9qb2JJZCkKKyAgICAgICAgam9iTWFuYWdlcigpLT5yZW1vdmVGcm9tT3V0c3Rh
bmRpbmdKb2JzKGQtPm1fam9iSWQpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpmaW5pc2go
KQoreworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPmRpZEZpbmlzaExvYWRp
bmcodGhpcyk7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmZh
aWwoY29uc3QgU3RyaW5nJiBlcnJvcikKK3sKKyAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAg
UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0VXJsKHJlcXVl
c3QoKS51cmwoKSk7CisgICAgICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKCJ0ZXh0L2h0bWwiKTsK
KyAgICAgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZSgiVVRGLTE2Iik7CisgICAgICAg
IFN0cmluZyBjb250ZW50RXJyb3IoTCI8aHRtbD48Ym9keSB3aWR0aD1cIjUwXCI+Iik7CisgICAg
ICAgIGNvbnRlbnRFcnJvciArPSBlcnJvcjsKKyAgICAgICAgY29udGVudEVycm9yICs9IFN0cmlu
ZyhMIjwvYm9keT48L2h0bWw+Iik7CisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9u
c2UodGhpcywgcmVzcG9uc2UpOworICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZURhdGEodGhp
cywgKGNvbnN0IGNoYXIqKWNvbnRlbnRFcnJvci5jaGFyYWN0ZXJzKCksIGNvbnRlbnRFcnJvci5s
ZW5ndGgoKSAqIDIsIDApOworICAgICAgICBjbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCBSZXNvdXJj
ZUVycm9yKCJFcnJvciIsIC0xLCByZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCksIGVycm9yKSk7Cisg
ICAgfQorICAgIGRlbGV0ZSB0aGlzOworfQorCitzdGF0aWMgaW50IGNhY2hlRmxhZ3NGb3IoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCit7CisgICAgaW50IGZsYWdzID0g
MDsKKyAgICBzd2l0Y2ggKHJlc291cmNlUmVxdWVzdC5jYWNoZVBvbGljeSgpKSB7CisgICAgICAg
IGNhc2UgUmVsb2FkSWdub3JpbmdDYWNoZURhdGE6CisgICAgICAgICAgICBmbGFncyB8PSBJTlRF
Uk5FVF9GTEFHX1JFTE9BRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJldHVy
bkNhY2hlRGF0YUVsc2VMb2FkOgorICAgICAgICAgICAgZmxhZ3MgfD0gSU5URVJORVRfRkxBR19D
QUNIRV9JRl9ORVRfRkFJTDsKKyAgICAgICAgICAgIGZsYWdzIHw9IElOVEVSTkVUX0ZMQUdfRldE
X0JBQ0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZXR1cm5DYWNoZURhdGFE
b250TG9hZDoKKyAgICAgICAgICAgIGZsYWdzIHw9IElOVEVSTkVUX0ZMQUdfRlJPTV9DQUNIRTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVzZVByb3RvY29sQ2FjaGVQb2xpY3k6
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmbGFncyB8PSBJTlRFUk5FVF9GTEFHX0NB
Q0hFX0lGX05FVF9GQUlMOworICAgICAgICAgICAgZmxhZ3MgfD0gSU5URVJORVRfRkxBR19IWVBF
UkxJTks7CisgICAgICAgICAgICBmbGFncyB8PSBJTlRFUk5FVF9GTEFHX1JFU1lOQ0hST05JWkU7
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmxhZ3M7Cit9CisKK3Zv
aWQgUmVzb3VyY2VIYW5kbGU6OnNldFJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQoreworICAgIHJlc3BvbnNlLnNldFVybChyZXF1ZXN0KCkudXJsKCkpOworICAgIGlmIChkLT5t
X2Nvbm5NZ3IpIHsKKyAgICAgICAgSElOVEVSTkVUIGhhbmRsZSA9IChyZXF1ZXN0KCkuaHR0cE1l
dGhvZCgpID09ICJQT1NUIikgPyBkLT5tX2Nvbm5NZ3ItPnNlY29uZGFyeVVybEhhbmRsZSgpIDog
ZC0+bV9jb25uTWdyLT51cmxIYW5kbGUoKTsKKyAgICAgICAgaWYgKGhhbmRsZSkgeworICAgICAg
ICAgICAgRFdPUkQgYnVmZmVyTGVuZ3RoID0gc2l6ZW9mIERXT1JEOworCisgICAgICAgICAgICBE
V09SRCBjb250ZW50TGVuZ3RoOworICAgICAgICAgICAgaWYgKEh0dHBRdWVyeUluZm8oaGFuZGxl
LCBIVFRQX1FVRVJZX0NPTlRFTlRfTEVOR1RILCAmY29udGVudExlbmd0aCwgJmJ1ZmZlckxlbmd0
aCwgMCkpCisgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3Ro
KHN0YXRpY19jYXN0PGxvbmcgbG9uZyBpbnQ+KGNvbnRlbnRMZW5ndGgpKTsKKworICAgICAgICAg
ICAgRFdPUkQgc3RhdHVzQ29kZSA9IDA7CisgICAgICAgICAgICBpZiAoSHR0cFF1ZXJ5SW5mbyho
YW5kbGUsIEhUVFBfUVVFUllfU1RBVFVTX0NPREV8SFRUUF9RVUVSWV9GTEFHX05VTUJFUiwgJnN0
YXR1c0NvZGUsICZidWZmZXJMZW5ndGgsIDApKQorICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNl
dEhUVFBTdGF0dXNDb2RlKHN0YXR1c0NvZGUpOworCisgICAgICAgICAgICBTdHJpbmcgY29udGVu
dFR5cGUgPSBodHRwUXVlcnlJbmZvKGhhbmRsZSwgSFRUUF9RVUVSWV9DT05URU5UX1RZUEUpOwor
ICAgICAgICAgICAgaWYgKCFjb250ZW50VHlwZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICByZXNwb25zZS5zZXRNaW1lVHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGNvbnRl
bnRUeXBlKSk7CisgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShl
eHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpKTsKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgZGlzcG9zaXRpb24gPSBodHRwUXVlcnlJbmZvKGhhbmRsZSwgSFRUUF9RVUVSWV9D
T05URU5UX0RJU1BPU0lUSU9OKTsKKyAgICAgICAgICAgICAgICBpZiAoIWRpc3Bvc2l0aW9uLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5h
bWUoZmlsZW5hbWVGcm9tSFRUUENvbnRlbnREaXNwb3NpdGlvbihkaXNwb3NpdGlvbikpOworCisg
ICAgICAgICAgICAgICAgLy8gZ290IE1JTUUgdHlwZQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFN0cmluZyBwYXRoOworICAg
IGlmIChyZXF1ZXN0KCkudXJsKCkuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgcGF0aCA9IHJlcXVl
c3QoKS51cmwoKS5wYXRoKCk7CisgICAgZWxzZQorICAgICAgICBwYXRoID0gcmVxdWVzdCgpLnVy
bCgpLnN0cmluZygpOworCisgICAgaW50IHF1ZXJ5UG9zID0gcGF0aC5maW5kKCc/Jyk7CisgICAg
aWYgKHF1ZXJ5UG9zID49IDApCisgICAgICAgIHBhdGgucmVtb3ZlKHF1ZXJ5UG9zKTsKKworICAg
IGludCBkb3RQb3MgPSBwYXRoLnJldmVyc2VGaW5kKCcuJyk7CisgICAgaW50IHNsYXNoUG9zID0g
cGF0aC5yZXZlcnNlRmluZCgnLycpOworCisgICAgaWYgKGRvdFBvcyA8IHNsYXNoUG9zIHx8IGRv
dFBvcyA8IDApCisgICAgICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgU3RyaW5nIGV4dCA9IHBhdGguc3Vic3RyaW5nKGRvdFBvcyArIDEp
OworICAgICAgICByZXNwb25zZS5zZXRNaW1lVHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1F
VHlwZUZvckV4dGVuc2lvbihleHQpKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6
Om9uSGFuZGxlQ3JlYXRlZChMUEFSQU0gbFBhcmFtKQoreworICAgIGlmICghY2xpZW50KCkpIHsK
KyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWQtPm1fY29ubk1nci0+dXJsSGFuZGxlKCkpIHsKKyAgICAgICAgZC0+bV9jb25uTWdyLT5zZXRV
cmxIYW5kbGUoKEhJTlRFUk5FVClsUGFyYW0pOworCisgICAgICAgIGlmIChyZXF1ZXN0KCkuaHR0
cE1ldGhvZCgpID09ICJQT1NUIikgeworICAgICAgICAgICAgLy8gRklYTUU6IFRvbyBsYXRlIHRv
IHNldCByZWZlcnJlciBwcm9wZXJseS4KKyAgICAgICAgICAgIFN0cmluZyB1cmxTdHIgPSByZXF1
ZXN0KCkudXJsKCkucGF0aCgpOworICAgICAgICAgICAgaW50IGZyYWdtZW50SW5kZXggPSB1cmxT
dHIuZmluZCgnIycpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50SW5kZXggIT0gLTEpCisgICAg
ICAgICAgICAgICAgdXJsU3RyID0gdXJsU3RyLmxlZnQoZnJhZ21lbnRJbmRleCk7CisgICAgICAg
ICAgICBzdGF0aWMgTFBDV1NUUiBhY2NlcHRbMl0gPSB7TCIqLyoiLCAwfTsKKyAgICAgICAgICAg
IGludCBzZWN1cmVGbGFnID0gcmVxdWVzdCgpLnVybCgpLnByb3RvY29sKCkubG93ZXIoKSA9PSAi
aHR0cHMiID8gSU5URVJORVRfRkxBR19TRUNVUkUgOiAwOworICAgICAgICAgICAgSElOVEVSTkVU
IHVybEhhbmRsZSA9IEh0dHBPcGVuUmVxdWVzdChkLT5tX2Nvbm5NZ3ItPnVybEhhbmRsZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTCJQT1NU
IiwgdXJsU3RyLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIDAsIGFjY2VwdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVS
TkVUX0ZMQUdfS0VFUF9DT05ORUNUSU9OIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhY2hlRmxhZ3NGb3IocmVxdWVzdCgpKSB8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cmVGbGFnIHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElO
VEVSTkVUX0ZMQUdfRk9STVNfU1VCTUlUIHwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSTkVUX0ZMQUdfSUdOT1JFX1JFRElSRUNUX1RP
X0hUVFBTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIElOVEVSTkVUX0ZMQUdfSUdOT1JFX1JFRElSRUNUX1RPX0hUVFAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRFdPUkRfUFRSKWQtPm1fam9i
SWQpOworICAgICAgICAgICAgaWYgKHVybEhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkK
KyAgICAgICAgICAgICAgICBmYWlsKCJGYWlsZWQgdG8gb3BlbiByZXF1ZXN0IGZvciBQT1NUIG9w
ZXJhdGlvbiIpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICghZC0+bV9jb25uTWdyLT5zZWNv
bmRhcnlVcmxIYW5kbGUoKSkgeworICAgICAgICBhc3NlcnQocmVxdWVzdCgpLmh0dHBNZXRob2Qo
KSA9PSAiUE9TVCIpOworICAgICAgICBkLT5tX2Nvbm5NZ3ItPnNldFNlY29uZGFyeVVybEhhbmRs
ZSgoQ29ubmVjdGlvbk1hbmFnZXIqKWxQYXJhbSk7CisKKyAgICAgICAgaWYgKGQtPm1fZm9ybURh
dGFTdHJpbmcpIHsKKyAgICAgICAgICAgIC8vIHJlcG9zdCBmb3JtIGRhdGEKKyAgICAgICAgICAg
IHJlcG9zdCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTmVlZCB0byBhY3R1
YWxseSBzZW5kIHRoZSByZXF1ZXN0IG5vdy4KKyAgICAgICAgICAgIGQtPm1faGVhZGVycyA9ICJD
b250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxuIjsKKyAgICAg
ICAgICAgIGlmICghZC0+bV9wb3N0UmVmZXJyZXIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAg
ICAgZC0+bV9oZWFkZXJzICs9ICJSZWZlcmVyOiAiOworICAgICAgICAgICAgICAgIGQtPm1faGVh
ZGVycyArPSBkLT5tX3Bvc3RSZWZlcnJlcjsKKyAgICAgICAgICAgICAgICBkLT5tX2hlYWRlcnMg
Kz0gIlxuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RyaW5nIGZvcm1EYXRhID0g
cmVxdWVzdCgpLmh0dHBCb2R5KCktPmZsYXR0ZW5Ub1N0cmluZygpOworICAgICAgICAgICAgSU5U
RVJORVRfQlVGRkVSUyBidWZmZXJzOworICAgICAgICAgICAgbWVtc2V0KCZidWZmZXJzLCAwLCBz
aXplb2YoYnVmZmVycykpOworICAgICAgICAgICAgYnVmZmVycy5kd1N0cnVjdFNpemUgPSBzaXpl
b2YoYnVmZmVycyk7CisgICAgICAgICAgICBidWZmZXJzLmxwY3N6SGVhZGVyID0gZC0+bV9oZWFk
ZXJzLmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIGJ1ZmZlcnMuZHdIZWFkZXJzTGVuZ3RoID0g
ZC0+bV9oZWFkZXJzLmxlbmd0aCgpOworICAgICAgICAgICAgYnVmZmVycy5kd0hlYWRlcnNUb3Rh
bCA9IGJ1ZmZlcnMuZHdIZWFkZXJzTGVuZ3RoOworICAgICAgICAgICAgYnVmZmVycy5kd0J1ZmZl
clRvdGFsID0gZm9ybURhdGEubGVuZ3RoKCk7CisKKyAgICAgICAgICAgIGlmIChmb3JtRGF0YS5s
ZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGQtPm1fYnl0ZXNSZW1haW5pbmdUb1dyaXRlID0g
Zm9ybURhdGEubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgZC0+bV9mb3JtRGF0YVN0cmluZyA9
IG5ldyBjaGFyW2Zvcm1EYXRhLmxlbmd0aCgpICsgMV07CisgICAgICAgICAgICAgICAgZC0+bV9m
b3JtRGF0YUxlbmd0aCA9IGZvcm1EYXRhLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIHN0cmNw
eShkLT5tX2Zvcm1EYXRhU3RyaW5nLCBmb3JtRGF0YS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAg
ICAgICAgICAgIGQtPm1fd3JpdGluZyA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGludCBlcnJvcjsKKyAgICAgICAgICAgIGlmICghSHR0cFNlbmRSZXF1ZXN0RXgoZC0+bV9j
b25uTWdyLT5zZWNvbmRhcnlVcmxIYW5kbGUoKSwgJmJ1ZmZlcnMsIDAsIDAsIChEV09SRF9QVFIp
ZC0+bV9qb2JJZCkKKyAgICAgICAgICAgICAgICAmJiBXU0FfSU9fUEVORElORyAhPSAoZXJyb3Ig
PSBHZXRMYXN0RXJyb3IoKSkpIHsKKyNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyAgICAg
ICAgICAgICAgICBwcmludGYoIkZhaWxlZCB0byBhcHBseSBoZWFkZXJzOiAlZFxuIiwgZXJyb3Ip
OworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKCFIdHRwU2VuZFJlcXVlc3RFeChkLT5tX2Nv
bm5NZ3ItPnNlY29uZGFyeVVybEhhbmRsZSgpLCAwLCAwLCAwLCAoRFdPUkRfUFRSKWQtPm1fam9i
SWQpCisgICAgICAgICAgICAgICAgJiYgV1NBX0lPX1BFTkRJTkcgIT0gKGVycm9yID0gR2V0TGFz
dEVycm9yKCkpKSB7CisjaWZkZWYgUkVTT1VSQ0VfTE9BREVSX0RFQlVHCisgICAgICAgICAgICAg
ICAgICAgIHByaW50ZigiRmFpbGVkIHRvIHBvc3QgZGF0YTogJWRcbiIsIGVycm9yKTsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJGYWlsZWQgdG8gc3RhcnQgcG9zdGluZyBkYXRh
Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBG
SVhNRTogYWRkIHByb3BlciBlcnJvciBoYW5kbGluZworICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIFJlc291cmNlSGFuZGxlOjpvblJlcXVlc3RSZWRpcmVjdGVkKExQQVJBTSBsUGFyYW0pCit7
CisgICAgLy8gSWYgYWxyZWFkeSBjYW5jZWxlZCwgdGhlbiBpZ25vcmUgdGhpcyBldmVudC4KKyAg
ICBTdHJpbmcqIG5ld1VybCA9IChTdHJpbmcqKWxQYXJhbTsKKyAgICAvL01lc3NhZ2VCb3hXKDAs
IG5ld1VybC0+Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgTCJSZWRpcmVjdCIsIE1C
X09LKTsKKyAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1Jl
cXVlc3QgPSByZXF1ZXN0KCk7CisgICAgICAgIG5ld1JlcXVlc3Quc2V0VVJMKEtVUkwoKm5ld1Vy
bCkpOworICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlZGlyZWN0UmVzcG9uc2U7CisgICAgICAg
IHNldFJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UpOworICAgICAgICBjbGllbnQoKS0+d2lsbFNl
bmRSZXF1ZXN0KHRoaXMsIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworICAgIH0gZWxz
ZQorICAgICAgICBkZWxldGUgdGhpczsKKworICAgIGRlbGV0ZSBuZXdVcmw7Cit9CisKK3ZvaWQg
UmVzb3VyY2VIYW5kbGU6Om9uQ29ubmVjdGlvbkNsb3NlZChMUEFSQU0gbFBhcmFtKQoreworICAg
IC8vIENvbm5lY3Rpb24gY2xvc2VkIHVuZXhwZWN0ZWRseT8gUmVwb3J0IGVycm9yPworICAgIGZh
aWwoIkNvbm5lY3Rpb24gY2xvc2VkIHVuZXhwZWN0ZWRseSIpOworfQorCit2b2lkIFJlc291cmNl
SGFuZGxlOjpyZXBvc3QoKQoreworICAgIC8vIFBvc3QgZGF0YSBhZ2FpbgorICAgIElOVEVSTkVU
X0JVRkZFUlMgYnVmZmVyczsKKyAgICBtZW1zZXQoJmJ1ZmZlcnMsIDAsIHNpemVvZihidWZmZXJz
KSk7CisgICAgYnVmZmVycy5kd1N0cnVjdFNpemUgPSBzaXplb2YoYnVmZmVycyk7CisgICAgYnVm
ZmVycy5scGNzekhlYWRlciA9IGQtPm1faGVhZGVycy5jaGFyYWN0ZXJzKCk7CisgICAgYnVmZmVy
cy5kd0hlYWRlcnNMZW5ndGggPSBkLT5tX2hlYWRlcnMubGVuZ3RoKCk7CisgICAgYnVmZmVycy5k
d0hlYWRlcnNUb3RhbCA9IGJ1ZmZlcnMuZHdIZWFkZXJzTGVuZ3RoOworICAgIGJ1ZmZlcnMuZHdC
dWZmZXJUb3RhbCA9IGQtPm1fZm9ybURhdGFMZW5ndGg7CisKKyAgICBkLT5tX2J5dGVzUmVtYWlu
aW5nVG9Xcml0ZSA9IGQtPm1fZm9ybURhdGFMZW5ndGg7CisKKyAgICBpbnQgZXJyb3I7CisgICAg
aWYgKCFIdHRwU2VuZFJlcXVlc3RFeChkLT5tX2Nvbm5NZ3ItPnNlY29uZGFyeVVybEhhbmRsZSgp
LCAmYnVmZmVycywgMCwgMCwgKERXT1JEX1BUUilkLT5tX2pvYklkKQorICAgICAgICAmJiBXU0Ff
SU9fUEVORElORyAhPSAoZXJyb3IgPSBHZXRMYXN0RXJyb3IoKSkpCisgICAgeworI2lmZGVmIFJF
U09VUkNFX0xPQURFUl9ERUJVRworICAgICAgICBwcmludGYoIkZhaWxlZCB0byBhcHBseSBoZWFk
ZXJzOiAlZFxuIiwgZXJyb3IpOworI2VuZGlmCisgICAgICAgIGlmICghSHR0cFNlbmRSZXF1ZXN0
RXgoZC0+bV9jb25uTWdyLT5zZWNvbmRhcnlVcmxIYW5kbGUoKSwgMCwgMCwgMCwgKERXT1JEX1BU
UilkLT5tX2pvYklkKQorICAgICAgICAmJiBXU0FfSU9fUEVORElORyAhPSAoZXJyb3IgPSBHZXRM
YXN0RXJyb3IoKSkpCisgICAgICAgIHsKKyNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyAg
ICAgICAgICAgIHByaW50ZigiRmFpbGVkIHRvIHBvc3QgZGF0YTogJWRcbiIsIGVycm9yKTsKKyNl
bmRpZgorICAgICAgICAgICAgZmFpbCgiRmFpbGVkIHRvIHN0YXJ0IHJlcG9zdGluZyBkYXRhIik7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0V2luSW5ldEVycm9yKERX
T1JEIGVycikKK3sKKyAgICBIQU5ETEUgaCA9IDo6R2V0TW9kdWxlSGFuZGxlKEwid2luaW5ldC5k
bGwiKTsKKyAgICBpZiAoaCkgeworICAgICAgICBMUFRTVFIgcDsKKyAgICAgICAgaWYgKDo6Rm9y
bWF0TWVzc2FnZShGT1JNQVRfTUVTU0FHRV9BTExPQ0FURV9CVUZGRVIgfAorICAgICAgICAgICAg
Rk9STUFUX01FU1NBR0VfRlJPTV9ITU9EVUxFLAorICAgICAgICAgICAgKExQQ1ZPSUQpaCwKKyAg
ICAgICAgICAgIGVyciwKKyAgICAgICAgICAgIDAsIC8vIGRlZmF1bHQgbGFuZ3VhZ2UKKyAgICAg
ICAgICAgIChMUFRTVFIpJnAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCkpIHsKKyAg
ICAgICAgICAgIFN0cmluZyBzKHApOworICAgICAgICAgICAgTG9jYWxGcmVlKHApOworICAgICAg
ICAgICAgcmV0dXJuIHM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5nOjpm
b3JtYXQoIkludGVybmV0IEVycm9yOiAlZCIsIGVycik7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5k
bGU6Om9uUmVxdWVzdENvbXBsZXRlKExQQVJBTSBsUGFyYW0pCit7CisgICAgaWYgKCFjbGllbnQo
KSkgeworICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghZC0+bV9jb25uTWdyLT51cmxIYW5kbGUoKSkgeworICAgICAgICBmYWlsKCJVbmV4cGVj
dGVkIEVycm9yIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBISU5URVJORVQgaGFu
ZGxlID0gKHJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKSA/IGQtPm1fY29ubk1nci0+
c2Vjb25kYXJ5VXJsSGFuZGxlKCkgOiBkLT5tX2Nvbm5NZ3ItPnVybEhhbmRsZSgpOworCisgICAg
aWYgKGxQYXJhbSAhPSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgIHN3aXRjaCAobFBhcmFtKSB7
CisgICAgICAgIGNhc2UgRVJST1JfSU5URVJORVRfSU5DT1JSRUNUX1BBU1NXT1JEOgorICAgICAg
ICBjYXNlIEVSUk9SX0lOVEVSTkVUX0lOVkFMSURfQ0E6CisgICAgICAgIGNhc2UgRVJST1JfSU5U
RVJORVRfUE9TVF9JU19OT05fU0VDVVJFOgorICAgICAgICBjYXNlIEVSUk9SX0lOVEVSTkVUX1NF
Q19DRVJUX0NOX0lOVkFMSUQ6CisgICAgICAgIGNhc2UgRVJST1JfSU5URVJORVRfU0VDX0NFUlRf
REFURV9JTlZBTElEOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERXT1JEIHJ0biA9
IEludGVybmV0RXJyb3JEbGcoMCwgaGFuZGxlLCBsUGFyYW0KKyAgICAgICAgICAgICAgICAgICAg
LCBGTEFHU19FUlJPUl9VSV9GSUxURVJfRk9SX0VSUk9SUyB8IEZMQUdTX0VSUk9SX1VJX0ZMQUdT
X0NIQU5HRV9PUFRJT05TLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAocnRuICE9IEVSUk9SX1NV
Q0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiQXV0aGVudGljYXRpb24gZmFpbGVk
Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBmYWlsKGdldFdpbkluZXRFcnJvcihsUGFyYW0pKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkLT5tX3dyaXRpbmcpIHsKKyAgICAgICAg
RFdPUkQgYnl0ZXNXcml0dGVuOworICAgICAgICBpZiAoSW50ZXJuZXRXcml0ZUZpbGUoZC0+bV9j
b25uTWdyLT5zZWNvbmRhcnlVcmxIYW5kbGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ZC0+bV9mb3JtRGF0YVN0cmluZyArIChkLT5tX2Zvcm1EYXRhTGVuZ3RoIC0gZC0+bV9ieXRlc1Jl
bWFpbmluZ1RvV3JpdGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5tX2J5dGVzUmVt
YWluaW5nVG9Xcml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzV3JpdHRlbikp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGQtPm1fYnl0ZXNSZW1haW5pbmdUb1dyaXRlIC09IGJ5
dGVzV3JpdHRlbjsKKyAgICAgICAgICAgIGlmICghZC0+bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUp
IHsKKyAgICAgICAgICAgICAgICAvLyBFbmQgdGhlIHJlcXVlc3QuCisgICAgICAgICAgICAgICAg
Qk9PTCBnb29kID0gSHR0cEVuZFJlcXVlc3QoZC0+bV9jb25uTWdyLT5zZWNvbmRhcnlVcmxIYW5k
bGUoKSwgMCwgMCwgKERXT1JEX1BUUilkLT5tX2pvYklkKTsKKyAgICAgICAgICAgICAgICBpbnQg
ZXJyb3I7CisgICAgICAgICAgICAgICAgaWYgKCFnb29kKSB7CisgICAgICAgICAgICAgICAgICAg
IGVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChFUlJPUl9J
TlRFUk5FVF9GT1JDRV9SRVRSWSA9PSBlcnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmVwb3N0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoRVJST1JfSU9fUEVORElORyA9PSBlcnJvcikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZ29vZCBmb3IgYXN5bmMgZnVuY3Rpb24KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGdvb2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGdvb2QpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZC0+bV93cml0aW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVtdIGQt
Pm1fZm9ybURhdGFTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIGQtPm1fZm9ybURhdGFTdHJp
bmcgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisjaWZkZWYgUkVTT1VSQ0VfTE9BREVS
X0RFQlVHCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRW5kIHJlcXVlc3QgZXJyb3I6ICVp
XG4iLCBlcnJvcik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiRmFpbGVkIHRv
IGZpbmlzaCBwb3N0aW5nIGRhdGEiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBSRVNPVVJD
RV9MT0FERVJfREVCVUcKKyAgICAgICAgICAgIHByaW50ZigiUG9zdCBlcnJvcjogJWlcbiIsIEdl
dExhc3RFcnJvcigpKTsKKyNlbmRpZgorICAgICAgICAgICAgZmFpbCgiRmFpbGVkIHRvIHBvc3Qg
ZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgc3Rh
dGljIGNvbnN0IGludCBidWZmZXJTaXplID0gODE5MjsgLy8zMjc2ODsKKworICAgIGNoYXIgYnVm
ZmVyW2J1ZmZlclNpemVdOworICAgIElOVEVSTkVUX0JVRkZFUlNBIGJ1ZmZlcnM7CisgICAgYnVm
ZmVycy5kd1N0cnVjdFNpemUgPSBzaXplb2YoYnVmZmVycyk7CisgICAgYnVmZmVycy5scHZCdWZm
ZXIgPSBidWZmZXI7CisgICAgYnVmZmVycy5kd0J1ZmZlckxlbmd0aCA9IGJ1ZmZlclNpemU7CisK
KyAgICBib29sIHJlY2VpdmVkQW55RGF0YSA9IGZhbHNlOworICAgIGludCBqb2JJZCA9IGQtPm1f
am9iSWQ7CisKKyAgICBCT09MIG9rID0gSW50ZXJuZXRSZWFkRmlsZUV4QShoYW5kbGUsICZidWZm
ZXJzLCBJUkZfTk9fV0FJVCwgKERXT1JEX1BUUilqb2JJZCk7CisKKyAgICBpZiAob2sgJiYgYnVm
ZmVycy5kd0J1ZmZlckxlbmd0aCkgeworICAgICAgICBpZiAoIWhhc1JlY2VpdmVkUmVzcG9uc2Uo
KSkgeworICAgICAgICAgICAgc2V0SGFzUmVjZWl2ZWRSZXNwb25zZSgpOworICAgICAgICAgICAg
UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICAgICAgICAgIHNldFJlc3BvbnNlKHJlc3Bv
bnNlKTsKKyAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgcmVz
cG9uc2UpOworICAgICAgICAgICAgLy8gSW4gY2FzZSB0aGF0IGl0IGlzIGRlbGV0ZWQgYnkgbGFz
dCBjYWxsCisgICAgICAgICAgICBpZiAoIWpvYk1hbmFnZXIoKS0+bG9va3VwUmVzb3VyY2VIYW5k
bGUoam9iSWQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBj
bGllbnQoKS0+ZGlkUmVjZWl2ZURhdGEodGhpcywgYnVmZmVyLCBidWZmZXJzLmR3QnVmZmVyTGVu
Z3RoLCAwKTsKKworICAgICAgICAvLyBJbiBjYXNlIHRoYXQgaXQgaXMgZGVsZXRlZCBieSBsYXN0
IGNhbGwKKyAgICAgICAgaWYgKCFqb2JNYW5hZ2VyKCktPmxvb2t1cFJlc291cmNlSGFuZGxlKGpv
YklkKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoYnVmZmVycy5kd0J1ZmZl
ckxlbmd0aCkgeworICAgICAgICAgICAgLy8gUmVhZCB0aGUgcmVzdCBkYXRhIG5leHQgdGltZQor
ICAgICAgICAgICAgUG9zdE1lc3NhZ2Uoam9iTWFuYWdlcigpLT5od25kKCksIHJlcXVlc3RDb21w
bGV0ZU1lc3NhZ2UsIChXUEFSQU0pam9iSWQsIGxQYXJhbSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAob2spCisgICAgICAgIGZpbmlzaCgpOworICAg
IGVsc2UgeworICAgICAgICBpbnQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYg
KGVycm9yICE9IEVSUk9SX0lPX1BFTkRJTkcpIHsKKyNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVC
VUcKKyAgICAgICAgICAgIHByaW50ZigiTG9hZCBlcnJvcjogJWlcbiIsIGVycm9yKTsgLy8gZmFp
bD8KKyNlbmRpZgorICAgICAgICAgICAgZmFpbCgiRmFpbGVkIHRvIHJlYWQgcmVzb3VyY2UgZGF0
YSIpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFJlc291cmNlSGFuZGxlOjpvcGVuVXJs
KGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgc2VsZkRlbCkKK3sKKyAgICBpZiAoIWNsaWVu
dCgpKSB7CisgICAgICAgIGlmIChzZWxmRGVsKQorICAgICAgICAgICAgZGVsZXRlIHRoaXM7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgRFdPUkQgZmxh
Z3MgPSBJTlRFUk5FVF9GTEFHX0FTWU5DCisgICAgICAgIHwgSU5URVJORVRfRkxBR19JR05PUkVf
UkVESVJFQ1RfVE9fSFRUUFMKKyAgICAgICAgfCBJTlRFUk5FVF9GTEFHX0lHTk9SRV9SRURJUkVD
VF9UT19IVFRQOworCisgICAgLy8gRm9yIGZvcm0gcG9zdGluZywgd2UgY2FuJ3QgdXNlIEludGVy
bmV0T3BlblVSTC4gIFdlIGhhdmUgdG8gdXNlCisgICAgLy8gSW50ZXJuZXRDb25uZWN0IGZvbGxv
d2VkIGJ5IEh0dHBTZW5kUmVxdWVzdC4KKyAgICBISU5URVJORVQgdXJsSGFuZGxlOworICAgIGJv
b2wgc2VjdXJlID0gcmVxdWVzdCgpLnVybCgpLnByb3RvY29sKCkubG93ZXIoKSA9PSAiaHR0cHMi
OworICAgIGludCBzZWN1cmVGbGFncyA9IHNlY3VyZSA/IElOVEVSTkVUX0ZMQUdfU0VDVVJFIDog
MDsKKyAgICB1bnNpZ25lZCBzaG9ydCBwb3J0ID0gcmVxdWVzdCgpLnVybCgpLnBvcnQoKTsKKyAg
ICBpZiAocG9ydCA8PSAwKQorICAgICAgICBwb3J0ID0gc2VjdXJlID8gNDQzIDogODA7CisgICAg
aWYgKHJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKSB7CisgICAgICAgIGQtPm1fcG9z
dFJlZmVycmVyID0gcmVmZXJyZXI7CisgICAgICAgIFN0cmluZyBob3N0ID0gcmVxdWVzdCgpLnVy
bCgpLmhvc3QoKTsKKyAgICAgICAgdXJsSGFuZGxlID0gSW50ZXJuZXRDb25uZWN0KGQtPm1fY29u
bk1nci0+aW50ZXJuZXRIYW5kbGUoKSwgaG9zdC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLy8gbm8gdXNlcm5hbWUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvLyBubyBwYXNzd29yZAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSTkVUX1NFUlZJQ0VfSFRUUCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyB8IGNhY2hlRmxhZ3NGb3IocmVx
dWVzdCgpKSB8IHNlY3VyZUZsYWdzLCAoRFdPUkRfUFRSKWQtPm1fam9iSWQpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIFN0cmluZyB1cmxTdHIgPSByZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCk7Cisg
ICAgICAgIGludCBmcmFnbWVudEluZGV4ID0gdXJsU3RyLmZpbmQoJyMnKTsKKyAgICAgICAgaWYg
KGZyYWdtZW50SW5kZXggIT0gLTEpCisgICAgICAgICAgICB1cmxTdHIgPSB1cmxTdHIubGVmdChm
cmFnbWVudEluZGV4KTsKKyAgICAgICAgU3RyaW5nIGhlYWRlcnM7CisgICAgICAgIGlmICghcmVm
ZXJyZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgaGVhZGVycyArPSBTdHJpbmcoIlJlZmVyZXI6
ICIpICsgcmVmZXJyZXIgKyAiXHJcbiI7CisKKyAgICAgICAgdXJsSGFuZGxlID0gSW50ZXJuZXRP
cGVuVXJsKGQtPm1fY29ubk1nci0+aW50ZXJuZXRIYW5kbGUoKSwgdXJsU3RyLmNoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVhZGVycy5jaGFyYWN0ZXJzKCksIGhlYWRlcnMubGVuZ3RoKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfCBjYWNoZUZsYWdzRm9yKHJlcXVlc3QoKSkg
fCBzZWN1cmVGbGFncywgKERXT1JEX1BUUilkLT5tX2pvYklkKTsKKyAgICB9CisKKyAgICBpZiAo
IXVybEhhbmRsZSkgeworICAgICAgICBEV09SRCBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAg
ICAgaWYgKEVSUk9SX0lPX1BFTkRJTkcgIT0gZXJyKSB7CisgICAgICAgICAgICBpZiAoc2VsZkRl
bCkKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlc291
cmNlSGFuZGxlOjpzdGFydChGcmFtZSogZnJhbWUpCit7CisgICAgcmVmKCk7CisgICAgZC0+bV9p
c0Fib3V0ID0gcmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnN0YXJ0c1dpdGgoImFib3V0OiIpOyAv
LyBLVVJMIGNhbid0IGhhbmRsZSBwcm90b2NvbCBvbiAiYWJvdXQ6Zm9vIj8/CisKKyAgICBpZiAo
ZC0+bV9pc0Fib3V0KSB7CisgICAgICAgIGQtPm1faXNBYm91dCA9IHRydWU7CisgICAgICAgIGQt
Pm1fZmlsZUxvYWRUaW1lci5zdGFydE9uZVNob3QoMC4wKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSBlbHNlIGlmIChyZXF1ZXN0KCkudXJsKCkuaXNMb2NhbEZpbGUoKSkgeworCisgICAg
ICAgIFN0cmluZyBwYXRoID0gcmVxdWVzdCgpLnVybCgpLnBhdGgoKTsKKyAgICAgICAgd2hpbGUg
KHBhdGhbMF0gPT0gJy8nKQorICAgICAgICAgICAgcGF0aC5yZW1vdmUoMCk7CisKKyAgICAgICAg
Ly8gVGVtcG9yYXJ5IHNvbHV0aW9uLiBMYXRlciBvbiB3ZSB3aWxsIHVzZSBJbnRlcm5ldENyYWNr
VXJsCisgICAgICAgIHBhdGgucmVwbGFjZShTdHJpbmcoTCIlMjAiKSwgU3RyaW5nKEwiICIpKTsK
KyAgICAgICAgcGF0aC5zdHJpcFdoaXRlU3BhY2UoKTsKKworICAgICAgICBkLT5tX2ZpbGVIYW5k
bGUgPSBDcmVhdGVGaWxlKHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgR0VO
RVJJQ19SRUFELCAwLCAwLCBPUEVOX0VYSVNUSU5HLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIDAp
OworCisgICAgICAgIGQtPm1fZmlsZUxvYWRUaW1lci5zdGFydE9uZVNob3QoMC4wKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGQtPm1fY29ubk1ncikK
KyAgICAgICAgICAgIGRlbGV0ZSBkLT5tX2Nvbm5NZ3I7CisgICAgICAgIGQtPm1fY29ubk1nciA9
IG5ldyBDb25uZWN0aW9uTWFuYWdlcigpOworCisgICAgICAgIGlmICghZC0+bV9jb25uTWdyLT5p
bnRlcm5ldEhhbmRsZSgpKSB7CisgICAgICAgICAgICBkZWxldGUgZC0+bV9jb25uTWdyOworICAg
ICAgICAgICAgZC0+bV9jb25uTWdyID0gMDsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBqb2JNYW5hZ2VyKCktPmFkZFRvT3V0c3RhbmRpbmdK
b2JzKHRoaXMsIGZyYW1lLT5sb2FkZXIoKS0+cmVmZXJyZXIoKSk7CisgICAgfQorfQorCit2b2lk
IFJlc291cmNlSGFuZGxlOjpsb2FkRmlsZSgpCit7CisgICAgaW50IGpvYklkID0gZC0+bV9qb2JJ
ZDsKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworICAgIHNldFJlc3BvbnNlKHJlc3Bv
bnNlKTsKKworICAgIC8vIEZJWE1FIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChz
eik7CisgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsKKyAgICBjbGllbnQoKS0+
ZGlkUmVjZWl2ZVJlc3BvbnNlKHRoaXMsIHJlc3BvbnNlKTsKKyAgICBib29sIHJlc3VsdCA9IGZh
bHNlOworICAgIERXT1JEIGJ5dGVzUmVhZCA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGNvbnN0
IGludCBidWZmZXJTaXplID0gODE5MjsKKyAgICAgICAgY2hhciBidWZmZXJbYnVmZmVyU2l6ZV07
CisgICAgICAgIHJlc3VsdCA9ICEhUmVhZEZpbGUoZC0+bV9maWxlSGFuZGxlLCAmYnVmZmVyLCBi
dWZmZXJTaXplLCAmYnl0ZXNSZWFkLCAwKTsKKyAgICAgICAgaWYgKHJlc3VsdCAmJiBieXRlc1Jl
YWQpIHsKKyAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBidWZmZXIs
IGJ5dGVzUmVhZCwgMCk7CisgICAgICAgICAgICAvLyBJbiBjYXNlIHRoYXQgaXQgaXMgZGVsZXRl
ZCBieSBsYXN0IGNhbGwKKyAgICAgICAgICAgIGlmICgham9iTWFuYWdlcigpLT5sb29rdXBSZXNv
dXJjZUhhbmRsZShqb2JJZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIC8vIENoZWNrIGZvciBlbmQgb2YgZmlsZS4KKyAgICB9IHdoaWxlIChyZXN1bHQgJiYg
Ynl0ZXNSZWFkKTsKKworICAgIC8vIEZJWE1FOiBoYW5kbGUgZXJyb3JzIGJldHRlcgorCisgICAg
Q2xvc2VIYW5kbGUoZC0+bV9maWxlSGFuZGxlKTsKKyAgICBkLT5tX2ZpbGVIYW5kbGUgPSBJTlZB
TElEX0hBTkRMRV9WQUxVRTsKKworICAgIGZpbmlzaCgpOworfQorCit2b2lkIFJlc291cmNlSGFu
ZGxlOjpsb2FkRGF0YSgpCit7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRBYm91dCgp
Cit7CisgICAgaWYgKCFmZXRjaEFib3V0UGFnZSkgeworICAgICAgICBmYWlsKCJGYWlsZWQgdG8g
b3BlbiBwYWdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgam9iSWQgPSBk
LT5tX2pvYklkOworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgc2V0UmVzcG9u
c2UocmVzcG9uc2UpOworCisgICAgU3RyaW5nIHBhdGggPSByZXF1ZXN0KCkudXJsKCkucGF0aCgp
LnN0cmlwV2hpdGVTcGFjZSgpOworICAgIGNoYXIgKmRhdGEgPSAwOworICAgIGludCBzeiA9IDA7
CisgICAgQnVmZmVyRGVsZXRlciBkZWxldGVyID0gMDsKKyAgICBib29sIHJjID0gKGZldGNoQWJv
dXRQYWdlKShwYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZkYXRhLCAmc3os
ICZkZWxldGVyKTsKKyAgICBpZiAoIXJjIHx8ICFzeikgeworICAgICAgICByZXNwb25zZS5zZXRI
VFRQU3RhdHVzQ29kZSg0MDQpOworICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNl
KHRoaXMsIHJlc3BvbnNlKTsKKyAgICAgICAgZmFpbCgiIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKHN6KTsKKyAgICByZXNw
b25zZS5zZXRIVFRQU3RhdHVzQ29kZSgyMDApOworICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVz
cG9uc2UodGhpcywgcmVzcG9uc2UpOworICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0aGlz
LCBkYXRhLCBzeiwgMCk7CisgICAgaWYgKGRlbGV0ZXIpCisgICAgICAgIGRlbGV0ZXIoZGF0YSwg
c3opOworICAgIGZpbmlzaCgpOworICAgIHJldHVybjsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRs
ZTo6ZmlsZUxvYWRUaW1lcihUaW1lcjxSZXNvdXJjZUhhbmRsZT4qIHRpbWVyKQoreworICAgIGlm
ICghY2xpZW50KCkpIHsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyByZXBvcnRlZCBhc3luY2hyb25vdXNseSBmb3IgY29uc2lzdGVuY3kuCisg
ICAgaWYgKCFkLT5tX2lzQWJvdXQgJiYgZC0+bV9maWxlSGFuZGxlID09IElOVkFMSURfSEFORExF
X1ZBTFVFKSB7CisgICAgICAgIGZhaWwoIkZhaWxlZCB0byBsb2FkIGZpbGUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChkLT5tX2lzQWJvdXQpCisgICAgICAgIGxvYWRBYm91
dCgpOworICAgIGVsc2UKKyAgICAgICAgbG9hZEZpbGUoKTsKK30KKworI2lmIFBMQVRGT1JNKFRP
UkNITU9CSUxFKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKGNvbnN0IFJlc291cmNlSGFu
ZGxlQ2xpZW50KikKKyNlbHNlCit2b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQorI2VuZGlm
Cit7CisgICAgaWYgKGQtPm1fY29ubk1nciAmJiBkLT5tX2Nvbm5NZ3ItPnVybEhhbmRsZSgpKQor
ICAgICAgICBkLT5tX2Nvbm5NZ3ItPmNsb3NlVXJsSGFuZGxlKCk7CisgICAgZWxzZQorICAgICAg
ICBkLT5tX2ZpbGVMb2FkVGltZXIuc3RvcCgpOworCisgICAgZmluaXNoKCk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VIYW5kbGU6OnNldEhhc1JlY2VpdmVkUmVzcG9uc2UoYm9vbCBiKQoreworICAgIGQt
Pm1faGFzUmVjZWl2ZWRSZXNwb25zZSA9IGI7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6Omhh
c1JlY2VpdmVkUmVzcG9uc2UoKSBjb25zdAoreworICAgIHJldHVybiBkLT5tX2hhc1JlY2VpdmVk
UmVzcG9uc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9yJiBlLCBS
ZXNvdXJjZVJlc3BvbnNlJiByLCBWZWN0b3I8Y2hhcj4mIGRhdGEsIEZyYW1lKikKK3sKKyAgICBN
ZXNzYWdlQm94VygwLCBTdHJpbmcocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkuY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSwgTCJMb2FkIFN5bmNocm9ub3VzbHkiLCBNQl9PSyk7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFJlc291cmNl
SGFuZGxlOjpidWZmZXJlZERhdGEoKQoreworICAgIHJldHVybiAwOworfQorCitib29sIFJlc291
cmNlSGFuZGxlOjpzdXBwb3J0c0J1ZmZlcmVkRGF0YSgpCit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQor
eworICAgIGQtPm1fZGVmZXJzTG9hZGluZyA9IGRlZmVyczsKK30KKwordm9pZCBSZXNvdXJjZUhh
bmRsZTo6c2V0RG93bmxvYWRDbGllbnQoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGMpCit7CisgICAg
ZC0+bV9kb3dubG9hZENsaWVudCA9IGM7CisgICAgZC0+bV9mcmFtZSA9IDA7Cit9CisKK2Jvb2wg
UmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYgcmVxKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIHBy
ZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCg==
</data>
<flag name="review"
          id="17519"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33205</attachid>
            <date>2009-07-21 13:29:19 -0700</date>
            <delta_ts>2009-07-21 13:31:23 -0700</delta_ts>
            <desc>The rest of WebCore/platform/network/wince</desc>
            <filename>27376_b.patch</filename>
            <type>text/plain</type>
            <size>37882</size>
            <attacher name="Adam Treat">manyoso</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTQyNzQ2ZC4uYzI0ZTFkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAwOS0wNy0yMSAgQWRhbSBUcmVhdCAg
PGFkYW0udHJlYXRAdG9yY2htb2JpbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNzM3NgorICAgICAgICBBZGQgV2luQ0Ugc3BlY2lmaWMgUmVzb3VyY2VIYW5kbGVXaW5j
ZS5jcHAgZm9yIHBsYXRmb3JtL25ldHdvcmsuCisKKyAgICAgICAgV3JpdHRlbiBieSBZb25nIExp
IDx5b25nLmxpQHRvcmNobW9iaWxlLmNvbT4sCisgICAgICAgIEdlb3JnZSBTdGFpa29zIDxnZW9y
Z2Uuc3RhaWtvc0B0b3JjaG1vYmlsZS5jb20+LAorICAgICAgICBKb2UgTWFzb248am9lLm1hc29u
QHRvcmNobW9iaWxlLmNvbT4KKyAgICAgICAgYW5kIHNvbWUgdHJpdmlhbCBzdHlsZSBmaXhlcyBi
eSBBZGFtIFRyZWF0IDxhZGFtLnRyZWF0QHRvcmNobW9iaWxlLmNvbT4uCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlSGFuZGxlV2luY2UuY3BwOiBBZGRlZC4KKwog
MjAwOS0wNy0yMCAgWW9uZyBMaSAgPHlvbmcubGlAdG9yY2htb2JpbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlSGFuZGxlV2luY2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlSGFuZGxlV2luY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmJjZDg4NTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvd2luY2UvUmVzb3VyY2VIYW5kbGVXaW5jZS5jcHAKQEAgLTAsMCArMSwx
MTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9y
Y2ggTW9iaWxlIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRG9jTG9h
ZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKKyNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgorI2lu
Y2x1ZGUgIlRpbWVyLmgiCisKKyNkZWZpbmUgSU5JVEdVSUQKKyNpbmNsdWRlIDxjb25ubWdyLmg+
CisjaW5jbHVkZSA8Y29ubm1ncl9wcm94eS5oPgorCisjaW5jbHVkZSA8d2luaW5ldC5oPgorCisj
aWZuZGVmIE5ERUJVRworI2RlZmluZSBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyNlbmRpZgorCitj
b25zdCBHVUlEIElJRF9EZXN0TmV0SW50ZXJuZXQgPQorICAgIHsgMHg0MzZlZjE0NCwgMHhiNGZi
LCAweDQ4NjMsIHsgMHhhMCwgMHg0MSwKKyAgICAweDhmLCAweDkwLCAweDVhLCAweDYyLCAweGM1
LCAweDcyfSB9OworCisKK2NvbnN0IEdVSUQgSUlEX0Nvbm5QcnZfSVByb3h5RXh0ZW5zaW9uID0K
KyAgICAgIHsgMHhhZjk2YjBiZCwgMHhhNDgxLCAweDQ4MmMsIHsgMHhhMCwgMHg5NCwgMHhhOCwg
MHg0NCwgMHg4NywKKyAgICAgICAgMHg2NywgMHhhMCwgMHhjMCB9IH07CisKK3R5cGVkZWYgdm9p
ZCAoKkJ1ZmZlckRlbGV0ZXIpKGNoYXIgKmRhdGEsIGludCBsZW4pOwordHlwZWRlZiBib29sICgq
RmV0Y2hBYm91dFBhZ2UpKGNvbnN0IHdjaGFyX3QgKmZpbGVOYW1lLCBjaGFyICoqZGF0YSwgaW50
ICpsZW4sIEJ1ZmZlckRlbGV0ZXIqIGRlbGV0ZXIpOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBTdHJpbmcgZ191c2VyQWdlbnRTdHIoIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UOyBV
OyBNb2JpbGU7IGVuKSBBcHBsZVdlYktpdC80MTguOS4xIChLSFRNTCwgbGlrZSBHZWNrbykgU2Fm
YXJpLzQxOS4zIFdNNiBJcmlzLzEuMC4wIik7CitzdGF0aWMgaW50IGdfbWF4TnVtV2luSW5ldEpv
YnMgPSA0Oworc3RhdGljIEZldGNoQWJvdXRQYWdlIGZldGNoQWJvdXRQYWdlID0gMDsKK3ZvaWQg
c2V0QWJvdXRQYWdlQ2FsbGJhY2soRmV0Y2hBYm91dFBhZ2UgZmFwKSB7IGZldGNoQWJvdXRQYWdl
ID0gZmFwOyB9Cit2b2lkIHNldFVzZXJBZ2VudFN0cihjb25zdCBTdHJpbmcmIGFnZW50KSB7IGdf
dXNlckFnZW50U3RyID0gYWdlbnQ7IH0KK1N0cmluZyB1c2VyQWdlbnRTdHIoKSB7IHJldHVybiBn
X3VzZXJBZ2VudFN0cjsgfQordm9pZCBzZXRNYXhOdW1XaW5JbmV0Sm9icyhpbnQgbnVtKSB7IGdf
bWF4TnVtV2luSW5ldEpvYnMgPSBudW07IH0KKworLy8gTWVzc2FnZSB0eXBlcyBmb3IgaW50ZXJu
YWwgdXNlIChrZWVwIGluIHN5bmMgd2l0aCBrTWVzc2FnZUhhbmRsZXJzKQorZW51bSB7CisgICAg
aGFuZGxlQ3JlYXRlZE1lc3NhZ2UgPSBXTV9VU0VSLAorICAgIHJlcXVlc3RSZWRpcmVjdGVkTWVz
c2FnZSwKKyAgICByZXF1ZXN0Q29tcGxldGVNZXNzYWdlLAorICAgIGNvbm5lY3Rpb25DbG9zZWRN
ZXNzYWdlCit9OworCitjbGFzcyBSZXNvdXJjZUpvYk1hbmFnZXI6IE5vbmNvcHlhYmxlIHsKK3B1
YmxpYzoKKyAgICBIV05EIGh3bmQoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZmVySm9iV2luZG93
SGFuZGxlOyB9CisKKyAgICB2b2lkIGluaXRpYWxpemVPZmZTY3JlZW5SZXNvdXJjZUhhbmRsZVdp
bmRvdygpCisgICAgeworICAgICAgICBpZiAobV90cmFuc2ZlckpvYldpbmRvd0hhbmRsZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzdGF0aWMgY29uc3QgTFBDV1NUUiBrUmVzb3Vy
Y2VIYW5kbGVXaW5kb3dDbGFzc05hbWUgPSBMIlJlc291cmNlSGFuZGxlV2luZG93Q2xhc3MiOwor
CisgICAgICAgIFdORENMQVNTIHdjOworICAgICAgICBtZW1zZXQoJndjLCAwLCBzaXplb2Yod2Mp
KTsKKworICAgICAgICB3Yy5scGZuV25kUHJvYyAgICA9IFJlc291cmNlSGFuZGxlV25kUHJvYzsK
KyAgICAgICAgd2MuaEluc3RhbmNlICAgICAgPSBQYWdlOjppbnN0YW5jZUhhbmRsZSgpOworICAg
ICAgICB3Yy5scHN6Q2xhc3NOYW1lICA9IGtSZXNvdXJjZUhhbmRsZVdpbmRvd0NsYXNzTmFtZTsK
KyAgICAgICAgUmVnaXN0ZXJDbGFzcygmd2MpOworCisgICAgICAgIG1fdHJhbnNmZXJKb2JXaW5k
b3dIYW5kbGUgPSBDcmVhdGVXaW5kb3coa1Jlc291cmNlSGFuZGxlV2luZG93Q2xhc3NOYW1lLCAw
LCAwLCBDV19VU0VERUZBVUxULCAwLCBDV19VU0VERUZBVUxULCAwLAorICAgICAgICAgICAgSFdO
RF9NRVNTQUdFLCAwLCBQYWdlOjppbnN0YW5jZUhhbmRsZSgpLCAwKTsKKyAgICB9CisKKyAgICAv
LyBSZXR1cm4gZmFsc2UgaWYgZmFpbGVkIHRvIG9wZW4gVVJMLgorICAgIGJvb2wgYWRkVG9PdXRz
dGFuZGluZ0pvYnMoUmVzb3VyY2VIYW5kbGUqIGpvYiwgY29uc3QgU3RyaW5nJiByZWZlcnJlcikK
KyAgICB7CisgICAgICAgIGlmICghbV9qb2JJZE1hcCkgeworICAgICAgICAgICAgbV9qb2JJZE1h
cCA9IG5ldyBIYXNoTWFwPGludCwgUmVzb3VyY2VIYW5kbGUqPjsKKyAgICAgICAgICAgIG1fZGVm
ZXJyZWRKb2JzID0gbmV3IEhhc2hNYXA8aW50LCBTdHJpbmc+OworICAgICAgICB9CisKKyAgICAg
ICAgLy8gc2tpcCBvdmVyIDAKKyAgICAgICAgaWYgKCErK21fdHJhbnNmZXJKb2JJZCkKKyAgICAg
ICAgICAgIG1fdHJhbnNmZXJKb2JJZCA9IDE7CisKKyAgICAgICAgbV9qb2JJZE1hcC0+c2V0KG1f
dHJhbnNmZXJKb2JJZCwgam9iKTsKKyAgICAgICAgam9iLT5kLT5tX2pvYklkID0gbV90cmFuc2Zl
ckpvYklkOworCisgICAgICAgIGlmIChtX2pvYklkTWFwLT5zaXplKCkgLSBtX2RlZmVycmVkSm9i
cy0+c2l6ZSgpID4gZ19tYXhOdW1XaW5JbmV0Sm9icykgeworICAgICAgICAgICAgbV9kZWZlcnJl
ZEpvYnMtPnNldChtX3RyYW5zZmVySm9iSWQsIHJlZmVycmVyKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpvYi0+b3BlblVybChyZWZlcnJl
ciwgdHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVGcm9tT3V0c3RhbmRpbmdKb2JzKGlu
dCBqb2JJZCkKKyAgICB7CisgICAgICAgIGlmICghbV9qb2JJZE1hcCB8fCAhbV9qb2JJZE1hcC0+
Y29udGFpbnMoam9iSWQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fam9iSWRN
YXAtPnJlbW92ZShqb2JJZCk7CisgICAgICAgIG1fZGVmZXJyZWRKb2JzLT5yZW1vdmUoam9iSWQp
OworCisgICAgICAgIHdoaWxlIChtX2RlZmVycmVkSm9icy0+c2l6ZSgpICYmIG1fam9iSWRNYXAt
PnNpemUoKSAtIG1fZGVmZXJyZWRKb2JzLT5zaXplKCkgPCBnX21heE51bVdpbkluZXRKb2JzKSB7
CisgICAgICAgICAgICBIYXNoTWFwPGludCwgU3RyaW5nPjo6aXRlcmF0b3IgYmVnID0gbV9kZWZl
cnJlZEpvYnMtPmJlZ2luKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBuZXdKb2JJZCA9IGJlZy0+
Zmlyc3Q7CisgICAgICAgICAgICBTdHJpbmcgcmVmZXJyZXIgPSBiZWctPnNlY29uZDsKKyAgICAg
ICAgICAgIG1fZGVmZXJyZWRKb2JzLT5yZW1vdmUoYmVnKTsKKworICAgICAgICAgICAgUmVzb3Vy
Y2VIYW5kbGUqIGpvYiA9IG1fam9iSWRNYXAtPmdldChuZXdKb2JJZCk7CisgICAgICAgICAgICBp
ZiAoIWpvYi0+b3BlblVybChyZWZlcnJlciwgZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgLy8g
UmVtb3ZlIGl0IGJlZm9yZSBkZWxldGluZyB0byBhdm9pZCByZWVudGVyaW5nIHRoaXMgbG9vcAor
ICAgICAgICAgICAgICAgIG1fam9iSWRNYXAtPnJlbW92ZShuZXdKb2JJZCk7CisgICAgICAgICAg
ICAgICAgam9iLT5mYWlsKCJGYWlsZWQgdG8gb3BlbiBVUkwiKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGJvb2wgcmVuZXdKb2JJZChpbnQgb2xkSm9iSWQpCisgICAg
eworICAgICAgICBpZiAoIW1fam9iSWRNYXAgfHwgIW1fam9iSWRNYXAtPmNvbnRhaW5zKG9sZEpv
YklkKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoISsrbV90cmFu
c2ZlckpvYklkKQorICAgICAgICAgICAgbV90cmFuc2ZlckpvYklkID0gMTsKKworICAgICAgICBp
ZiAobV9kZWZlcnJlZEpvYnMtPmNvbnRhaW5zKG9sZEpvYklkKSkgeworICAgICAgICAgICAgbV9k
ZWZlcnJlZEpvYnMtPnNldChtX3RyYW5zZmVySm9iSWQsIG1fZGVmZXJyZWRKb2JzLT5nZXQob2xk
Sm9iSWQpKTsKKyAgICAgICAgICAgIG1fZGVmZXJyZWRKb2JzLT5yZW1vdmUob2xkSm9iSWQpOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IG1fam9iSWRNYXAtPmdl
dChvbGRKb2JJZCk7CisgICAgICAgIGpvYi0+ZC0+bV9qb2JJZCA9IG1fdHJhbnNmZXJKb2JJZDsK
KworICAgICAgICBtX2pvYklkTWFwLT5zZXQobV90cmFuc2ZlckpvYklkLCBqb2IpOworICAgICAg
ICBtX2pvYklkTWFwLT5yZW1vdmUob2xkSm9iSWQpOworCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIFJlc291cmNlSGFuZGxlKiBsb29rdXBSZXNvdXJjZUhhbmRsZShpbnQgam9i
SWQpCisgICAgeworICAgICAgICBpZiAoIW1fam9iSWRNYXApCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIG1fam9iSWRNYXAtPmdldChqb2JJZCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIGZyaWVuZCBSZXNvdXJjZUpvYk1hbmFnZXIqIGpvYk1hbmFnZXIoKTsKKworICAg
IFJlc291cmNlSm9iTWFuYWdlcigpCisgICAgICAgIDogbV90cmFuc2ZlckpvYklkKDApCisgICAg
ICAgICwgbV9qb2JJZE1hcCgwKQorICAgICAgICAsIG1fdHJhbnNmZXJKb2JXaW5kb3dIYW5kbGUo
MCkKKyAgICAgICAgLCBtX2RlZmVycmVkSm9icygwKQorICAgIHsKKyAgICB9CisKKyAgICB+UmVz
b3VyY2VKb2JNYW5hZ2VyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3RyYW5zZmVySm9iV2luZG93
SGFuZGxlKQorICAgICAgICAgICAgRGVzdHJveVdpbmRvdyhtX3RyYW5zZmVySm9iV2luZG93SGFu
ZGxlKTsKKworICAgICAgICBpZiAobV9qb2JJZE1hcCkgeworICAgICAgICAgICAgd2hpbGUgKCFt
X2pvYklkTWFwLT5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZGVsZXRlIG1fam9iSWRNYXAt
PmJlZ2luKCktPnNlY29uZDsKKworICAgICAgICAgICAgZGVsZXRlIG1fam9iSWRNYXA7CisgICAg
ICAgICAgICBkZWxldGUgbV9kZWZlcnJlZEpvYnM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBz
dGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBSZXNvdXJjZUhhbmRsZVduZFByb2MoSFdORCBoV25kLCBV
SU5UIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pOworCisgICAgdW5zaWduZWQgbV90
cmFuc2ZlckpvYklkOworICAgIEhhc2hNYXA8aW50LCBSZXNvdXJjZUhhbmRsZSo+KiBtX2pvYklk
TWFwOworICAgIEhXTkQgbV90cmFuc2ZlckpvYldpbmRvd0hhbmRsZTsKKyAgICBIYXNoTWFwPGlu
dCwgU3RyaW5nPiogbV9kZWZlcnJlZEpvYnM7Cit9OworCisKK0xSRVNVTFQgQ0FMTEJBQ0sgUmVz
b3VyY2VKb2JNYW5hZ2VyOjpSZXNvdXJjZUhhbmRsZVduZFByb2MoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BB
UkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICB0eXBlZGVmIHZvaWQgKFJlc291cmNl
SGFuZGxlOjogKlJlc291cmNlSGFuZGxlRXZlbnRIYW5kbGVyKShMUEFSQU0pOworICAgIHN0YXRp
YyBjb25zdCBSZXNvdXJjZUhhbmRsZUV2ZW50SGFuZGxlciBtZXNzYWdlSGFuZGxlcnNbXSA9IHsK
KyAgICAgICAgJlJlc291cmNlSGFuZGxlOjpvbkhhbmRsZUNyZWF0ZWQsCisgICAgICAgICZSZXNv
dXJjZUhhbmRsZTo6b25SZXF1ZXN0UmVkaXJlY3RlZCwKKyAgICAgICAgJlJlc291cmNlSGFuZGxl
OjpvblJlcXVlc3RDb21wbGV0ZSwKKyAgICAgICAgJlJlc291cmNlSGFuZGxlOjpvbkNvbm5lY3Rp
b25DbG9zZWQsCisgICAgfTsKKworICAgIGlmIChtZXNzYWdlID49IFdNX1VTRVIpIHsKKyAgICAg
ICAgVUlOVCBpbmRleCA9IG1lc3NhZ2UgLSBXTV9VU0VSOworICAgICAgICBpZiAoaW5kZXggPCBf
Y291bnRvZihtZXNzYWdlSGFuZGxlcnMpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBqb2JJZCA9
ICh1bnNpZ25lZCkgd1BhcmFtOworICAgICAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IGpv
Yk1hbmFnZXIoKS0+bG9va3VwUmVzb3VyY2VIYW5kbGUoam9iSWQpOworICAgICAgICAgICAgaWYg
KGpvYikgeworICAgICAgICAgICAgICAgIEFTU0VSVChqb2ItPmQtPm1fam9iSWQgPT0gam9iSWQp
OworICAgICAgICAgICAgICAgIEFTU0VSVChqb2ItPmQtPm1fdGhyZWFkSWQgPT0gR2V0Q3VycmVu
dFRocmVhZElkKCkpOworICAgICAgICAgICAgICAgIChqb2ItPioobWVzc2FnZUhhbmRsZXJzW2lu
ZGV4XSkpKGxQYXJhbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNzYWdlLCB3
UGFyYW0sIGxQYXJhbSk7Cit9CisKKworc3RhdGljIFJlc291cmNlSm9iTWFuYWdlciogam9iTWFu
YWdlcigpCit7CisgICAgc3RhdGljIFJlc291cmNlSm9iTWFuYWdlciBqbTsKKyAgICByZXR1cm4g
JmptOworfQorCitjbGFzcyBHbG9iYWxDb25uZWN0aW9uTWFuYWdlcjogTm9uY29weWFibGUgewor
cHVibGljOgorICAgIEdsb2JhbENvbm5lY3Rpb25NYW5hZ2VyKCkKKyAgICB7CisgICAgICAgIG1f
aENvbm5lY3Rpb24gPSAwOworICAgICAgICBtX2hJbnRlcm5ldCA9IDA7CisgICAgICAgIG1fcHN6
UHJveHkgPSAwOworICAgICAgICBtX2R3QWNjZXNzVHlwZSA9IDA7CisgICAgICAgIG1faHIgPSBT
X09LOworCisgICAgICAgIGNvbm5lY3QoKTsKKyAgICB9CisgICAgfkdsb2JhbENvbm5lY3Rpb25N
YW5hZ2VyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2hJbnRlcm5ldCkKKyAgICAgICAgICAgIElu
dGVybmV0Q2xvc2VIYW5kbGUobV9oSW50ZXJuZXQpOworICAgICAgICBpZiAobV9oQ29ubmVjdGlv
bikKKyAgICAgICAgICAgIENvbm5NZ3JSZWxlYXNlQ29ubmVjdGlvbihtX2hDb25uZWN0aW9uLCAx
KTsKKyAgICB9CisKKyAgICB2b2lkIGVzdGFibGlzaENvbm5lY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2hDb25uZWN0aW9uKSB7CisgICAgICAgICAgICBtX2hJbnRlcm5ldCA9IDA7CisK
KyAgICAgICAgICAgIENPTk5NR1JfQ09OTkVDVElPTklORk8gY2kgPSB7MH07CisKKyAgICAgICAg
ICAgIGNpLmNiU2l6ZSA9IHNpemVvZihDT05OTUdSX0NPTk5FQ1RJT05JTkZPKTsKKyAgICAgICAg
ICAgIGNpLmR3UGFyYW1zID0gQ09OTk1HUl9QQVJBTV9HVUlEREVTVE5FVDsKKyAgICAgICAgICAg
IGNpLmR3RmxhZ3MgPSBDT05OTUdSX0ZMQUdfUFJPWFlfSFRUUDsKKyAgICAgICAgICAgIGNpLmR3
UHJpb3JpdHkgPSBDT05OTUdSX1BSSU9SSVRZX1VTRVJJTlRFUkFDVElWRTsKKyAgICAgICAgICAg
IGNpLmJFeGNsdXNpdmUgPSBUUlVFOworCisgICAgICAgICAgICBEV09SRCBkd0luZGV4ID0gMDsK
KyAgICAgICAgICAgIGlmIChTX09LICE9IENvbm5NZ3JNYXBVUkwoTCJodHRwOi8vd3d3LmlyaXNi
cm93c2VyLmNvbSIsICYoY2kuZ3VpZERlc3ROZXQpLCAmZHdJbmRleCkpCisgICAgICAgICAgICAg
ICAgY2kuZ3VpZERlc3ROZXQgPSBJSURfRGVzdE5ldEludGVybmV0OworCisgICAgICAgICAgICBE
V09SRCBkd1N0YXR1cyA9IDA7CisgICAgICAgICAgICBpZiAoU19PSyAhPSBDb25uTWdyRXN0YWJs
aXNoQ29ubmVjdGlvblN5bmMoJmNpLCAmbV9oQ29ubmVjdGlvbiwgMjUwMDAsICZkd1N0YXR1cykp
CisgICAgICAgICAgICAgICAgbV9oQ29ubmVjdGlvbiA9IDA7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIG9wZW5JbnRlcm5ldCgpCisgICAgeworICAgICAgICBpZiAobV9oQ29ubmVjdGlv
biAmJiAhbV9oSW50ZXJuZXQpIHsKKyAgICAgICAgICAgIFBST1hZX0NPTkZJRyBwY1Byb3h5ID0g
ezB9OworICAgICAgICAgICAgaWYgKFNfT0sgPT0gQ29ubk1nclByb3ZpZGVyTWVzc2FnZShtX2hD
b25uZWN0aW9uLCAmSUlEX0Nvbm5QcnZfSVByb3h5RXh0ZW5zaW9uLCAwLCAwLCAwLCAoUEJZVEUp
JnBjUHJveHksIHNpemVvZihwY1Byb3h5KSkpIHsKKyAgICAgICAgICAgICAgICBtX2R3QWNjZXNz
VHlwZSA9IElOVEVSTkVUX09QRU5fVFlQRV9QUk9YWTsKKyAgICAgICAgICAgICAgICBtX3BzelBy
b3h5ID0gKExQVFNUUikgTG9jYWxBbGxvYyhMUFRSLCBfY291bnRvZihwY1Byb3h5LnN6UHJveHlT
ZXJ2ZXIpKTsKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgbV9wc3pQcm94eSB3YXMgYWxs
b2NhdGVkLgorCisgICAgICAgICAgICAgICAgbV9ociA9IFN0cmluZ0NjaENvcHlOKG1fcHN6UHJv
eHksIF9jb3VudG9mKHBjUHJveHkuc3pQcm94eVNlcnZlciksCisgICAgICAgICAgICAgICAgICAg
IHBjUHJveHkuc3pQcm94eVNlcnZlciwgX2NvdW50b2YocGNQcm94eS5zelByb3h5U2VydmVyKSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fZHdBY2Nlc3NUeXBlID0g
SU5URVJORVRfT1BFTl9UWVBFX0RJUkVDVDsgLy8gSU5URVJORVRfT1BFTl9UWVBFX1BSRUNPTkZJ
RzsKKyAgICAgICAgICAgICAgICBtX3BzelByb3h5ID0gMDsKKworICAgICAgICAgICAgICAgIG1f
aHIgPSBTX09LOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2hJbnRlcm5ldCA9IElu
dGVybmV0T3BlbgorICAgICAgICAgICAgICAgIChnX3VzZXJBZ2VudFN0ci5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpCisgICAgICAgICAgICAgICAgLCBtX2R3QWNjZXNzVHlwZQorICAg
ICAgICAgICAgICAgICwgbV9wc3pQcm94eQorICAgICAgICAgICAgICAgICwgMAorICAgICAgICAg
ICAgICAgICwgSU5URVJORVRfRkxBR19BU1lOQyk7CisKKyAgICAgICAgICAgIGlmIChtX2hJbnRl
cm5ldCkgeworICAgICAgICAgICAgICAgIGpvYk1hbmFnZXIoKS0+aW5pdGlhbGl6ZU9mZlNjcmVl
blJlc291cmNlSGFuZGxlV2luZG93KCk7CisKKyAgICAgICAgICAgICAgICBJTlRFUk5FVF9TVEFU
VVNfQ0FMTEJBQ0sgY2FsbGJhY2tIYW5kbGUgPQorICAgICAgICAgICAgICAgICAgICBJbnRlcm5l
dFNldFN0YXR1c0NhbGxiYWNrKG1faEludGVybmV0LCB0cmFuc2ZlckpvYlN0YXR1c0NhbGxiYWNr
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIGNvbm5lY3QoKQor
ICAgIHsKKyAgICAgICAgZXN0YWJsaXNoQ29ubmVjdGlvbigpOworCisgICAgICAgIG9wZW5JbnRl
cm5ldCgpOworICAgIH0KKworICAgIExQV1NUUiAgICAgICAgICBtX3BzelByb3h5OworICAgIERX
T1JEICAgICAgICAgICBtX2R3QWNjZXNzVHlwZTsKKyAgICBIQU5ETEUgICAgICAgICAgbV9oQ29u
bmVjdGlvbjsKKyAgICBISU5URVJORVQgICAgICAgbV9oSW50ZXJuZXQ7CisgICAgSFJFU1VMVCAg
ICAgICAgIG1faHI7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgX19zdGRjYWxsIHRyYW5z
ZmVySm9iU3RhdHVzQ2FsbGJhY2soSElOVEVSTkVUIGludGVybmV0SGFuZGxlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEX1BUUiBqb2JJ
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
V09SRCBpbnRlcm5ldFN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMUFZPSUQgc3RhdHVzSW5mb3JtYXRpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgc3RhdHVzSW5mb3Jt
YXRpb25MZW5ndGgpOworCit9OworCit2b2lkIF9fc3RkY2FsbCBHbG9iYWxDb25uZWN0aW9uTWFu
YWdlcjo6dHJhbnNmZXJKb2JTdGF0dXNDYWxsYmFjayhISU5URVJORVQgaW50ZXJuZXRIYW5kbGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRF9Q
VFIgam9iSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEV09SRCBpbnRlcm5ldFN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIExQVk9JRCBzdGF0dXNJbmZvcm1hdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIHN0YXR1c0luZm9ybWF0aW9u
TGVuZ3RoKSB7CisjaWZkZWYgUkVTT1VSQ0VfTE9BREVSX0RFQlVHCisgICAgcHJpbnRmKCJzdGF0
dXMtY2FsbGJhY2s6IHN0YXR1cz0ldSwgam9iPSVwXG4iLAorICAgICAgICAgICAgICBpbnRlcm5l
dFN0YXR1cywgam9iSWQpOworI2VuZGlmCisKKyAgICBVSU5UIG1zZzsKKyAgICBMUEFSQU0gbFBh
cmFtOworCisgICAgc3dpdGNoIChpbnRlcm5ldFN0YXR1cykgeworICAgIGNhc2UgSU5URVJORVRf
U1RBVFVTX0hBTkRMRV9DUkVBVEVEOgorICAgICAgICAvLyB0ZWxsIHRoZSBtYWluIHRocmVhZCBh
Ym91dCB0aGUgbmV3bHkgY3JlYXRlZCBoYW5kbGUKKyAgICAgICAgbXNnID0gaGFuZGxlQ3JlYXRl
ZE1lc3NhZ2U7CisgICAgICAgIGxQYXJhbSA9IChMUEFSQU0pIExQSU5URVJORVRfQVNZTkNfUkVT
VUxUKHN0YXR1c0luZm9ybWF0aW9uKS0+ZHdSZXN1bHQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSU5URVJORVRfU1RBVFVTX1JFUVVFU1RfQ09NUExFVEU6CisjaWZkZWYgUkVTT1VSQ0VfTE9B
REVSX0RFQlVHCisgICAgICAgIHByaW50ZigicmVxdWVzdC1jb21wbGV0ZTogcmVzdWx0PSVwLCBl
cnJvcj0ldVxuIiwKKyAgICAgICAgICAgIExQSU5URVJORVRfQVNZTkNfUkVTVUxUKHN0YXR1c0lu
Zm9ybWF0aW9uKS0+ZHdSZXN1bHQsCisgICAgICAgICAgICBMUElOVEVSTkVUX0FTWU5DX1JFU1VM
VChzdGF0dXNJbmZvcm1hdGlvbiktPmR3RXJyb3IpOworI2VuZGlmCisgICAgICAgIC8vIHRlbGwg
dGhlIG1haW4gdGhyZWFkIHRoYXQgdGhlIHJlcXVlc3QgaXMgZG9uZQorICAgICAgICBtc2cgPSBy
ZXF1ZXN0Q29tcGxldGVNZXNzYWdlOworICAgICAgICBsUGFyYW0gPSAoTFBBUkFNKUxQSU5URVJO
RVRfQVNZTkNfUkVTVUxUKHN0YXR1c0luZm9ybWF0aW9uKS0+ZHdFcnJvcjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfUkVESVJFQ1Q6CisgICAgICAgIC8vIHRlbGwg
dGhlIG1haW4gdGhyZWFkIHRvIG9ic2VydmUgdGhpcyByZWRpcmVjdCAoRklYTUU6IHdlIHByb2Jh
Ymx5CisgICAgICAgIC8vIG5lZWQgdG8gYmxvY2sgdGhlIHJlZGlyZWN0IGF0IHRoaXMgcG9pbnQg
c28gdGhlIGFwcGxpY2F0aW9uIGNhbgorICAgICAgICAvLyBkZWNpZGUgd2hldGhlciBvciBub3Qg
dG8gZm9sbG93IHRoZSByZWRpcmVjdCkKKyAgICAgICAgbXNnID0gcmVxdWVzdFJlZGlyZWN0ZWRN
ZXNzYWdlOworICAgICAgICBsUGFyYW0gPSAoTFBBUkFNKW5ldyBTdHJpbmcoKFVDaGFyKilzdGF0
dXNJbmZvcm1hdGlvbiwgc3RhdHVzSW5mb3JtYXRpb25MZW5ndGgpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19DT05ORUNUSU9OX0NMT1NFRDoKKyAgICAgICAgbXNn
ID0gY29ubmVjdGlvbkNsb3NlZE1lc3NhZ2U7CisgICAgICAgIGxQYXJhbSA9IDA7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX1VTRVJfSU5QVVRfUkVRVUlSRUQ6Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiVVNFUiBJTlBVVCBSRVFVSVJFRFxuIik7CisgICAgICAg
IC8vIEZJWE1FOiBwcm9tcHQgdGhlIHVzZXIgaWYgbmVjZXNzYXJ5CisgICAgICAgIFJlc3VtZVN1
c3BlbmRlZERvd25sb2FkKGludGVybmV0SGFuZGxlLCAwKTsKKyAgICBjYXNlIElOVEVSTkVUX1NU
QVRVU19TVEFURV9DSEFOR0U6CisgICAgICAgIC8vIG1heSBuZWVkIHRvIGNhbGwgUmVzdW1lU3Vz
cGVuZGVkRG93bmxvYWQgaGVyZSBhcyB3ZWxsCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFBvc3RNZXNzYWdlKGpvYk1hbmFnZXIoKS0+aHduZCgpLCBtc2csIChX
UEFSQU0pIGpvYklkLCBsUGFyYW0pOworfQorCitjbGFzcyBDb25uZWN0aW9uTWFuYWdlcjogTm9u
Y29weWFibGUgeworcHVibGljOgorICAgIENvbm5lY3Rpb25NYW5hZ2VyKCkgLy8sIExQQ1dTVFIg
dXNlckFnZW50VGV4KQorICAgICAgICA6IG1faFVybCgwKQorICAgICAgICAsIG1faFNlY1VybCgw
KQorICAgIHsKKyAgICAgICAgbV9jb25uZWN0aW9uLmNvbm5lY3QoKTsKKyAgICB9CisKKyAgICB+
Q29ubmVjdGlvbk1hbmFnZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1faFNlY1VybCkKKyAgICAg
ICAgICAgIEludGVybmV0Q2xvc2VIYW5kbGUobV9oU2VjVXJsKTsKKyAgICAgICAgaWYgKG1faFVy
bCkKKyAgICAgICAgICAgIEludGVybmV0Q2xvc2VIYW5kbGUobV9oVXJsKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgSElOVEVSTkVUIGludGVybmV0SGFuZGxlICgpIHsgcmV0dXJuIG1fY29ubmVjdGlv
bi5tX2hJbnRlcm5ldDsgfQorICAgIEhJTlRFUk5FVCB1cmxIYW5kbGUgKCkgY29uc3QgeyByZXR1
cm4gbV9oVXJsOyB9CisgICAgSElOVEVSTkVUIHNlY29uZGFyeVVybEhhbmRsZSAoKSBjb25zdCB7
IHJldHVybiBtX2hTZWNVcmw7IH0KKworICAgIHZvaWQgY2xvc2VVcmxIYW5kbGUoKQorICAgIHsK
KyAgICAgICAgaWYgKG1faFNlY1VybCkgeworICAgICAgICAgICAgSW50ZXJuZXRDbG9zZUhhbmRs
ZShtX2hTZWNVcmwpOworICAgICAgICAgICAgbV9oU2VjVXJsID0gMDsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobV9oVXJsKSB7CisgICAgICAgICAgICBJbnRlcm5ldENsb3NlSGFuZGxlKG1faFVy
bCk7CisgICAgICAgICAgICBtX2hVcmwgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgdm9p
ZCBzZXRVcmxIYW5kbGUoSElOVEVSTkVUIHVybCkgeyBtX2hVcmwgPSB1cmw7IH0KKyAgICB2b2lk
IHNldFNlY29uZGFyeVVybEhhbmRsZShISU5URVJORVQgdXJsKSB7IG1faFNlY1VybCA9IHVybDsg
fQorCitwcml2YXRlOgorCisgICAgc3RhdGljIEdsb2JhbENvbm5lY3Rpb25NYW5hZ2VyIG1fY29u
bmVjdGlvbjsKKyAgICBISU5URVJORVQgICAgbV9oVXJsOworICAgIEhJTlRFUk5FVCAgICBtX2hT
ZWNVcmw7Cit9OworCitHbG9iYWxDb25uZWN0aW9uTWFuYWdlciBDb25uZWN0aW9uTWFuYWdlcjo6
bV9jb25uZWN0aW9uOworCitzdGF0aWMgU3RyaW5nIGh0dHBRdWVyeUluZm8oSElOVEVSTkVUIGhS
ZXF1ZXN0LCBEV09SRCBkd0luZm9MZXZlbCkKK3sKKyAgICBEV09SRCBidWZmZXJMZW5ndGggPSAw
OworICAgIGlmIChIdHRwUXVlcnlJbmZvKGhSZXF1ZXN0LCBkd0luZm9MZXZlbCwgMCwgJmJ1ZmZl
ckxlbmd0aCwgMCkKKyAgICAgICAgfHwgRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUiAhPSBHZXRM
YXN0RXJyb3IoKQorICAgICAgICB8fCAhYnVmZmVyTGVuZ3RoKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisKKyAgICBVQ2hhciogYnVmZmVyID0gbmV3IFVDaGFyWyhidWZmZXJMZW5ndGggKyAx
KSAvIDJdOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAg
ICBpZiAoIUh0dHBRdWVyeUluZm8oaFJlcXVlc3QsIGR3SW5mb0xldmVsLCBidWZmZXIsICZidWZm
ZXJMZW5ndGgsIDApKSB7CisgICAgICAgIGRlbGV0ZVtdIGJ1ZmZlcjsKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIH0KKworICAgIFN0cmluZyBydG4oYnVmZmVyLCAoYnVmZmVyTGVuZ3Ro
ICsgMSkgLyAyKTsKKyAgICBkZWxldGVbXSBidWZmZXI7CisKKyAgICByZXR1cm4gcnRuOworfQor
CitSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpCit7Cisg
ICAgaWYgKG1fZmlsZUhhbmRsZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgQ2xv
c2VIYW5kbGUobV9maWxlSGFuZGxlKTsKKworICAgIGRlbGV0ZSBtX2Nvbm5NZ3I7CisgICAgZGVs
ZXRlW10gbV9mb3JtRGF0YVN0cmluZzsKK30KKworUmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhh
bmRsZSgpCit7CisgICAgLy8gQ2xvc2UgdGhlIGhhbmRsZXMgYmVmb3JlIHJlbW92aW5nIHRoZSBq
b2IKKyAgICBkZWxldGUgZC0+bV9jb25uTWdyOworICAgIGQtPm1fY29ubk1nciA9IDA7CisKKyAg
ICBpZiAoZC0+bV9qb2JJZCkKKyAgICAgICAgam9iTWFuYWdlcigpLT5yZW1vdmVGcm9tT3V0c3Rh
bmRpbmdKb2JzKGQtPm1fam9iSWQpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpmaW5pc2go
KQoreworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPmRpZEZpbmlzaExvYWRp
bmcodGhpcyk7CisgICAgZGVsZXRlIHRoaXM7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmZh
aWwoY29uc3QgU3RyaW5nJiBlcnJvcikKK3sKKyAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAg
UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0VXJsKHJlcXVl
c3QoKS51cmwoKSk7CisgICAgICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKCJ0ZXh0L2h0bWwiKTsK
KyAgICAgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZSgiVVRGLTE2Iik7CisgICAgICAg
IFN0cmluZyBjb250ZW50RXJyb3IoTCI8aHRtbD48Ym9keSB3aWR0aD1cIjUwXCI+Iik7CisgICAg
ICAgIGNvbnRlbnRFcnJvciArPSBlcnJvcjsKKyAgICAgICAgY29udGVudEVycm9yICs9IFN0cmlu
ZyhMIjwvYm9keT48L2h0bWw+Iik7CisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9u
c2UodGhpcywgcmVzcG9uc2UpOworICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZURhdGEodGhp
cywgKGNvbnN0IGNoYXIqKWNvbnRlbnRFcnJvci5jaGFyYWN0ZXJzKCksIGNvbnRlbnRFcnJvci5s
ZW5ndGgoKSAqIDIsIDApOworICAgICAgICBjbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCBSZXNvdXJj
ZUVycm9yKCJFcnJvciIsIC0xLCByZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCksIGVycm9yKSk7Cisg
ICAgfQorICAgIGRlbGV0ZSB0aGlzOworfQorCitzdGF0aWMgaW50IGNhY2hlRmxhZ3NGb3IoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCit7CisgICAgaW50IGZsYWdzID0g
MDsKKyAgICBzd2l0Y2ggKHJlc291cmNlUmVxdWVzdC5jYWNoZVBvbGljeSgpKSB7CisgICAgICAg
IGNhc2UgUmVsb2FkSWdub3JpbmdDYWNoZURhdGE6CisgICAgICAgICAgICBmbGFncyB8PSBJTlRF
Uk5FVF9GTEFHX1JFTE9BRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJldHVy
bkNhY2hlRGF0YUVsc2VMb2FkOgorICAgICAgICAgICAgZmxhZ3MgfD0gSU5URVJORVRfRkxBR19D
QUNIRV9JRl9ORVRfRkFJTDsKKyAgICAgICAgICAgIGZsYWdzIHw9IElOVEVSTkVUX0ZMQUdfRldE
X0JBQ0s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZXR1cm5DYWNoZURhdGFE
b250TG9hZDoKKyAgICAgICAgICAgIGZsYWdzIHw9IElOVEVSTkVUX0ZMQUdfRlJPTV9DQUNIRTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVzZVByb3RvY29sQ2FjaGVQb2xpY3k6
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmbGFncyB8PSBJTlRFUk5FVF9GTEFHX0NB
Q0hFX0lGX05FVF9GQUlMOworICAgICAgICAgICAgZmxhZ3MgfD0gSU5URVJORVRfRkxBR19IWVBF
UkxJTks7CisgICAgICAgICAgICBmbGFncyB8PSBJTlRFUk5FVF9GTEFHX1JFU1lOQ0hST05JWkU7
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmxhZ3M7Cit9CisKK3Zv
aWQgUmVzb3VyY2VIYW5kbGU6OnNldFJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQoreworICAgIHJlc3BvbnNlLnNldFVybChyZXF1ZXN0KCkudXJsKCkpOworICAgIGlmIChkLT5t
X2Nvbm5NZ3IpIHsKKyAgICAgICAgSElOVEVSTkVUIGhhbmRsZSA9IChyZXF1ZXN0KCkuaHR0cE1l
dGhvZCgpID09ICJQT1NUIikgPyBkLT5tX2Nvbm5NZ3ItPnNlY29uZGFyeVVybEhhbmRsZSgpIDog
ZC0+bV9jb25uTWdyLT51cmxIYW5kbGUoKTsKKyAgICAgICAgaWYgKGhhbmRsZSkgeworICAgICAg
ICAgICAgRFdPUkQgYnVmZmVyTGVuZ3RoID0gc2l6ZW9mIERXT1JEOworCisgICAgICAgICAgICBE
V09SRCBjb250ZW50TGVuZ3RoOworICAgICAgICAgICAgaWYgKEh0dHBRdWVyeUluZm8oaGFuZGxl
LCBIVFRQX1FVRVJZX0NPTlRFTlRfTEVOR1RILCAmY29udGVudExlbmd0aCwgJmJ1ZmZlckxlbmd0
aCwgMCkpCisgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3Ro
KHN0YXRpY19jYXN0PGxvbmcgbG9uZyBpbnQ+KGNvbnRlbnRMZW5ndGgpKTsKKworICAgICAgICAg
ICAgRFdPUkQgc3RhdHVzQ29kZSA9IDA7CisgICAgICAgICAgICBpZiAoSHR0cFF1ZXJ5SW5mbyho
YW5kbGUsIEhUVFBfUVVFUllfU1RBVFVTX0NPREV8SFRUUF9RVUVSWV9GTEFHX05VTUJFUiwgJnN0
YXR1c0NvZGUsICZidWZmZXJMZW5ndGgsIDApKQorICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNl
dEhUVFBTdGF0dXNDb2RlKHN0YXR1c0NvZGUpOworCisgICAgICAgICAgICBTdHJpbmcgY29udGVu
dFR5cGUgPSBodHRwUXVlcnlJbmZvKGhhbmRsZSwgSFRUUF9RVUVSWV9DT05URU5UX1RZUEUpOwor
ICAgICAgICAgICAgaWYgKCFjb250ZW50VHlwZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICByZXNwb25zZS5zZXRNaW1lVHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGNvbnRl
bnRUeXBlKSk7CisgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShl
eHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUoY29udGVudFR5cGUpKTsKKyAgICAgICAgICAgICAg
ICBTdHJpbmcgZGlzcG9zaXRpb24gPSBodHRwUXVlcnlJbmZvKGhhbmRsZSwgSFRUUF9RVUVSWV9D
T05URU5UX0RJU1BPU0lUSU9OKTsKKyAgICAgICAgICAgICAgICBpZiAoIWRpc3Bvc2l0aW9uLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0U3VnZ2VzdGVkRmlsZW5h
bWUoZmlsZW5hbWVGcm9tSFRUUENvbnRlbnREaXNwb3NpdGlvbihkaXNwb3NpdGlvbikpOworCisg
ICAgICAgICAgICAgICAgLy8gZ290IE1JTUUgdHlwZQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIFN0cmluZyBwYXRoOworICAg
IGlmIChyZXF1ZXN0KCkudXJsKCkuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgcGF0aCA9IHJlcXVl
c3QoKS51cmwoKS5wYXRoKCk7CisgICAgZWxzZQorICAgICAgICBwYXRoID0gcmVxdWVzdCgpLnVy
bCgpLnN0cmluZygpOworCisgICAgaW50IHF1ZXJ5UG9zID0gcGF0aC5maW5kKCc/Jyk7CisgICAg
aWYgKHF1ZXJ5UG9zID49IDApCisgICAgICAgIHBhdGgucmVtb3ZlKHF1ZXJ5UG9zKTsKKworICAg
IGludCBkb3RQb3MgPSBwYXRoLnJldmVyc2VGaW5kKCcuJyk7CisgICAgaW50IHNsYXNoUG9zID0g
cGF0aC5yZXZlcnNlRmluZCgnLycpOworCisgICAgaWYgKGRvdFBvcyA8IHNsYXNoUG9zIHx8IGRv
dFBvcyA8IDApCisgICAgICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgU3RyaW5nIGV4dCA9IHBhdGguc3Vic3RyaW5nKGRvdFBvcyArIDEp
OworICAgICAgICByZXNwb25zZS5zZXRNaW1lVHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1F
VHlwZUZvckV4dGVuc2lvbihleHQpKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6
Om9uSGFuZGxlQ3JlYXRlZChMUEFSQU0gbFBhcmFtKQoreworICAgIGlmICghY2xpZW50KCkpIHsK
KyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWQtPm1fY29ubk1nci0+dXJsSGFuZGxlKCkpIHsKKyAgICAgICAgZC0+bV9jb25uTWdyLT5zZXRV
cmxIYW5kbGUoKEhJTlRFUk5FVClsUGFyYW0pOworCisgICAgICAgIGlmIChyZXF1ZXN0KCkuaHR0
cE1ldGhvZCgpID09ICJQT1NUIikgeworICAgICAgICAgICAgLy8gRklYTUU6IFRvbyBsYXRlIHRv
IHNldCByZWZlcnJlciBwcm9wZXJseS4KKyAgICAgICAgICAgIFN0cmluZyB1cmxTdHIgPSByZXF1
ZXN0KCkudXJsKCkucGF0aCgpOworICAgICAgICAgICAgaW50IGZyYWdtZW50SW5kZXggPSB1cmxT
dHIuZmluZCgnIycpOworICAgICAgICAgICAgaWYgKGZyYWdtZW50SW5kZXggIT0gLTEpCisgICAg
ICAgICAgICAgICAgdXJsU3RyID0gdXJsU3RyLmxlZnQoZnJhZ21lbnRJbmRleCk7CisgICAgICAg
ICAgICBzdGF0aWMgTFBDV1NUUiBhY2NlcHRbMl0gPSB7TCIqLyoiLCAwfTsKKyAgICAgICAgICAg
IGludCBzZWN1cmVGbGFnID0gcmVxdWVzdCgpLnVybCgpLnByb3RvY29sKCkubG93ZXIoKSA9PSAi
aHR0cHMiID8gSU5URVJORVRfRkxBR19TRUNVUkUgOiAwOworICAgICAgICAgICAgSElOVEVSTkVU
IHVybEhhbmRsZSA9IEh0dHBPcGVuUmVxdWVzdChkLT5tX2Nvbm5NZ3ItPnVybEhhbmRsZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTCJQT1NU
IiwgdXJsU3RyLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIDAsIGFjY2VwdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVS
TkVUX0ZMQUdfS0VFUF9DT05ORUNUSU9OIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhY2hlRmxhZ3NGb3IocmVxdWVzdCgpKSB8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cmVGbGFnIHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElO
VEVSTkVUX0ZMQUdfRk9STVNfU1VCTUlUIHwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSTkVUX0ZMQUdfSUdOT1JFX1JFRElSRUNUX1RP
X0hUVFBTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIElOVEVSTkVUX0ZMQUdfSUdOT1JFX1JFRElSRUNUX1RPX0hUVFAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRFdPUkRfUFRSKWQtPm1fam9i
SWQpOworICAgICAgICAgICAgaWYgKHVybEhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkK
KyAgICAgICAgICAgICAgICBmYWlsKCJGYWlsZWQgdG8gb3BlbiByZXF1ZXN0IGZvciBQT1NUIG9w
ZXJhdGlvbiIpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICghZC0+bV9jb25uTWdyLT5zZWNv
bmRhcnlVcmxIYW5kbGUoKSkgeworICAgICAgICBhc3NlcnQocmVxdWVzdCgpLmh0dHBNZXRob2Qo
KSA9PSAiUE9TVCIpOworICAgICAgICBkLT5tX2Nvbm5NZ3ItPnNldFNlY29uZGFyeVVybEhhbmRs
ZSgoQ29ubmVjdGlvbk1hbmFnZXIqKWxQYXJhbSk7CisKKyAgICAgICAgaWYgKGQtPm1fZm9ybURh
dGFTdHJpbmcpIHsKKyAgICAgICAgICAgIC8vIHJlcG9zdCBmb3JtIGRhdGEKKyAgICAgICAgICAg
IHJlcG9zdCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTmVlZCB0byBhY3R1
YWxseSBzZW5kIHRoZSByZXF1ZXN0IG5vdy4KKyAgICAgICAgICAgIGQtPm1faGVhZGVycyA9ICJD
b250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxuIjsKKyAgICAg
ICAgICAgIGlmICghZC0+bV9wb3N0UmVmZXJyZXIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAg
ICAgZC0+bV9oZWFkZXJzICs9ICJSZWZlcmVyOiAiOworICAgICAgICAgICAgICAgIGQtPm1faGVh
ZGVycyArPSBkLT5tX3Bvc3RSZWZlcnJlcjsKKyAgICAgICAgICAgICAgICBkLT5tX2hlYWRlcnMg
Kz0gIlxuIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RyaW5nIGZvcm1EYXRhID0g
cmVxdWVzdCgpLmh0dHBCb2R5KCktPmZsYXR0ZW5Ub1N0cmluZygpOworICAgICAgICAgICAgSU5U
RVJORVRfQlVGRkVSUyBidWZmZXJzOworICAgICAgICAgICAgbWVtc2V0KCZidWZmZXJzLCAwLCBz
aXplb2YoYnVmZmVycykpOworICAgICAgICAgICAgYnVmZmVycy5kd1N0cnVjdFNpemUgPSBzaXpl
b2YoYnVmZmVycyk7CisgICAgICAgICAgICBidWZmZXJzLmxwY3N6SGVhZGVyID0gZC0+bV9oZWFk
ZXJzLmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIGJ1ZmZlcnMuZHdIZWFkZXJzTGVuZ3RoID0g
ZC0+bV9oZWFkZXJzLmxlbmd0aCgpOworICAgICAgICAgICAgYnVmZmVycy5kd0hlYWRlcnNUb3Rh
bCA9IGJ1ZmZlcnMuZHdIZWFkZXJzTGVuZ3RoOworICAgICAgICAgICAgYnVmZmVycy5kd0J1ZmZl
clRvdGFsID0gZm9ybURhdGEubGVuZ3RoKCk7CisKKyAgICAgICAgICAgIGlmIChmb3JtRGF0YS5s
ZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGQtPm1fYnl0ZXNSZW1haW5pbmdUb1dyaXRlID0g
Zm9ybURhdGEubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgZC0+bV9mb3JtRGF0YVN0cmluZyA9
IG5ldyBjaGFyW2Zvcm1EYXRhLmxlbmd0aCgpICsgMV07CisgICAgICAgICAgICAgICAgZC0+bV9m
b3JtRGF0YUxlbmd0aCA9IGZvcm1EYXRhLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIHN0cmNw
eShkLT5tX2Zvcm1EYXRhU3RyaW5nLCBmb3JtRGF0YS5sYXRpbjEoKS5kYXRhKCkpOworICAgICAg
ICAgICAgICAgIGQtPm1fd3JpdGluZyA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGludCBlcnJvcjsKKyAgICAgICAgICAgIGlmICghSHR0cFNlbmRSZXF1ZXN0RXgoZC0+bV9j
b25uTWdyLT5zZWNvbmRhcnlVcmxIYW5kbGUoKSwgJmJ1ZmZlcnMsIDAsIDAsIChEV09SRF9QVFIp
ZC0+bV9qb2JJZCkKKyAgICAgICAgICAgICAgICAmJiBXU0FfSU9fUEVORElORyAhPSAoZXJyb3Ig
PSBHZXRMYXN0RXJyb3IoKSkpIHsKKyNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyAgICAg
ICAgICAgICAgICBwcmludGYoIkZhaWxlZCB0byBhcHBseSBoZWFkZXJzOiAlZFxuIiwgZXJyb3Ip
OworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKCFIdHRwU2VuZFJlcXVlc3RFeChkLT5tX2Nv
bm5NZ3ItPnNlY29uZGFyeVVybEhhbmRsZSgpLCAwLCAwLCAwLCAoRFdPUkRfUFRSKWQtPm1fam9i
SWQpCisgICAgICAgICAgICAgICAgJiYgV1NBX0lPX1BFTkRJTkcgIT0gKGVycm9yID0gR2V0TGFz
dEVycm9yKCkpKSB7CisjaWZkZWYgUkVTT1VSQ0VfTE9BREVSX0RFQlVHCisgICAgICAgICAgICAg
ICAgICAgIHByaW50ZigiRmFpbGVkIHRvIHBvc3QgZGF0YTogJWRcbiIsIGVycm9yKTsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJGYWlsZWQgdG8gc3RhcnQgcG9zdGluZyBkYXRh
Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBG
SVhNRTogYWRkIHByb3BlciBlcnJvciBoYW5kbGluZworICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIFJlc291cmNlSGFuZGxlOjpvblJlcXVlc3RSZWRpcmVjdGVkKExQQVJBTSBsUGFyYW0pCit7
CisgICAgLy8gSWYgYWxyZWFkeSBjYW5jZWxlZCwgdGhlbiBpZ25vcmUgdGhpcyBldmVudC4KKyAg
ICBTdHJpbmcqIG5ld1VybCA9IChTdHJpbmcqKWxQYXJhbTsKKyAgICAvL01lc3NhZ2VCb3hXKDAs
IG5ld1VybC0+Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgTCJSZWRpcmVjdCIsIE1C
X09LKTsKKyAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1Jl
cXVlc3QgPSByZXF1ZXN0KCk7CisgICAgICAgIG5ld1JlcXVlc3Quc2V0VVJMKEtVUkwoKm5ld1Vy
bCkpOworICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlZGlyZWN0UmVzcG9uc2U7CisgICAgICAg
IHNldFJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UpOworICAgICAgICBjbGllbnQoKS0+d2lsbFNl
bmRSZXF1ZXN0KHRoaXMsIG5ld1JlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworICAgIH0gZWxz
ZQorICAgICAgICBkZWxldGUgdGhpczsKKworICAgIGRlbGV0ZSBuZXdVcmw7Cit9CisKK3ZvaWQg
UmVzb3VyY2VIYW5kbGU6Om9uQ29ubmVjdGlvbkNsb3NlZChMUEFSQU0gbFBhcmFtKQoreworICAg
IC8vIENvbm5lY3Rpb24gY2xvc2VkIHVuZXhwZWN0ZWRseT8gUmVwb3J0IGVycm9yPworICAgIGZh
aWwoIkNvbm5lY3Rpb24gY2xvc2VkIHVuZXhwZWN0ZWRseSIpOworfQorCit2b2lkIFJlc291cmNl
SGFuZGxlOjpyZXBvc3QoKQoreworICAgIC8vIFBvc3QgZGF0YSBhZ2FpbgorICAgIElOVEVSTkVU
X0JVRkZFUlMgYnVmZmVyczsKKyAgICBtZW1zZXQoJmJ1ZmZlcnMsIDAsIHNpemVvZihidWZmZXJz
KSk7CisgICAgYnVmZmVycy5kd1N0cnVjdFNpemUgPSBzaXplb2YoYnVmZmVycyk7CisgICAgYnVm
ZmVycy5scGNzekhlYWRlciA9IGQtPm1faGVhZGVycy5jaGFyYWN0ZXJzKCk7CisgICAgYnVmZmVy
cy5kd0hlYWRlcnNMZW5ndGggPSBkLT5tX2hlYWRlcnMubGVuZ3RoKCk7CisgICAgYnVmZmVycy5k
d0hlYWRlcnNUb3RhbCA9IGJ1ZmZlcnMuZHdIZWFkZXJzTGVuZ3RoOworICAgIGJ1ZmZlcnMuZHdC
dWZmZXJUb3RhbCA9IGQtPm1fZm9ybURhdGFMZW5ndGg7CisKKyAgICBkLT5tX2J5dGVzUmVtYWlu
aW5nVG9Xcml0ZSA9IGQtPm1fZm9ybURhdGFMZW5ndGg7CisKKyAgICBpbnQgZXJyb3I7CisgICAg
aWYgKCFIdHRwU2VuZFJlcXVlc3RFeChkLT5tX2Nvbm5NZ3ItPnNlY29uZGFyeVVybEhhbmRsZSgp
LCAmYnVmZmVycywgMCwgMCwgKERXT1JEX1BUUilkLT5tX2pvYklkKQorICAgICAgICAmJiBXU0Ff
SU9fUEVORElORyAhPSAoZXJyb3IgPSBHZXRMYXN0RXJyb3IoKSkpCisgICAgeworI2lmZGVmIFJF
U09VUkNFX0xPQURFUl9ERUJVRworICAgICAgICBwcmludGYoIkZhaWxlZCB0byBhcHBseSBoZWFk
ZXJzOiAlZFxuIiwgZXJyb3IpOworI2VuZGlmCisgICAgICAgIGlmICghSHR0cFNlbmRSZXF1ZXN0
RXgoZC0+bV9jb25uTWdyLT5zZWNvbmRhcnlVcmxIYW5kbGUoKSwgMCwgMCwgMCwgKERXT1JEX1BU
UilkLT5tX2pvYklkKQorICAgICAgICAmJiBXU0FfSU9fUEVORElORyAhPSAoZXJyb3IgPSBHZXRM
YXN0RXJyb3IoKSkpCisgICAgICAgIHsKKyNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVCVUcKKyAg
ICAgICAgICAgIHByaW50ZigiRmFpbGVkIHRvIHBvc3QgZGF0YTogJWRcbiIsIGVycm9yKTsKKyNl
bmRpZgorICAgICAgICAgICAgZmFpbCgiRmFpbGVkIHRvIHN0YXJ0IHJlcG9zdGluZyBkYXRhIik7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0V2luSW5ldEVycm9yKERX
T1JEIGVycikKK3sKKyAgICBIQU5ETEUgaCA9IDo6R2V0TW9kdWxlSGFuZGxlKEwid2luaW5ldC5k
bGwiKTsKKyAgICBpZiAoaCkgeworICAgICAgICBMUFRTVFIgcDsKKyAgICAgICAgaWYgKDo6Rm9y
bWF0TWVzc2FnZShGT1JNQVRfTUVTU0FHRV9BTExPQ0FURV9CVUZGRVIgfAorICAgICAgICAgICAg
Rk9STUFUX01FU1NBR0VfRlJPTV9ITU9EVUxFLAorICAgICAgICAgICAgKExQQ1ZPSUQpaCwKKyAg
ICAgICAgICAgIGVyciwKKyAgICAgICAgICAgIDAsIC8vIGRlZmF1bHQgbGFuZ3VhZ2UKKyAgICAg
ICAgICAgIChMUFRTVFIpJnAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCkpIHsKKyAg
ICAgICAgICAgIFN0cmluZyBzKHApOworICAgICAgICAgICAgTG9jYWxGcmVlKHApOworICAgICAg
ICAgICAgcmV0dXJuIHM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5nOjpm
b3JtYXQoIkludGVybmV0IEVycm9yOiAlZCIsIGVycik7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5k
bGU6Om9uUmVxdWVzdENvbXBsZXRlKExQQVJBTSBsUGFyYW0pCit7CisgICAgaWYgKCFjbGllbnQo
KSkgeworICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghZC0+bV9jb25uTWdyLT51cmxIYW5kbGUoKSkgeworICAgICAgICBmYWlsKCJVbmV4cGVj
dGVkIEVycm9yIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBISU5URVJORVQgaGFu
ZGxlID0gKHJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKSA/IGQtPm1fY29ubk1nci0+
c2Vjb25kYXJ5VXJsSGFuZGxlKCkgOiBkLT5tX2Nvbm5NZ3ItPnVybEhhbmRsZSgpOworCisgICAg
aWYgKGxQYXJhbSAhPSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgIHN3aXRjaCAobFBhcmFtKSB7
CisgICAgICAgIGNhc2UgRVJST1JfSU5URVJORVRfSU5DT1JSRUNUX1BBU1NXT1JEOgorICAgICAg
ICBjYXNlIEVSUk9SX0lOVEVSTkVUX0lOVkFMSURfQ0E6CisgICAgICAgIGNhc2UgRVJST1JfSU5U
RVJORVRfUE9TVF9JU19OT05fU0VDVVJFOgorICAgICAgICBjYXNlIEVSUk9SX0lOVEVSTkVUX1NF
Q19DRVJUX0NOX0lOVkFMSUQ6CisgICAgICAgIGNhc2UgRVJST1JfSU5URVJORVRfU0VDX0NFUlRf
REFURV9JTlZBTElEOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERXT1JEIHJ0biA9
IEludGVybmV0RXJyb3JEbGcoMCwgaGFuZGxlLCBsUGFyYW0KKyAgICAgICAgICAgICAgICAgICAg
LCBGTEFHU19FUlJPUl9VSV9GSUxURVJfRk9SX0VSUk9SUyB8IEZMQUdTX0VSUk9SX1VJX0ZMQUdT
X0NIQU5HRV9PUFRJT05TLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAocnRuICE9IEVSUk9SX1NV
Q0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiQXV0aGVudGljYXRpb24gZmFpbGVk
Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBmYWlsKGdldFdpbkluZXRFcnJvcihsUGFyYW0pKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChkLT5tX3dyaXRpbmcpIHsKKyAgICAgICAg
RFdPUkQgYnl0ZXNXcml0dGVuOworICAgICAgICBpZiAoSW50ZXJuZXRXcml0ZUZpbGUoZC0+bV9j
b25uTWdyLT5zZWNvbmRhcnlVcmxIYW5kbGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ZC0+bV9mb3JtRGF0YVN0cmluZyArIChkLT5tX2Zvcm1EYXRhTGVuZ3RoIC0gZC0+bV9ieXRlc1Jl
bWFpbmluZ1RvV3JpdGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5tX2J5dGVzUmVt
YWluaW5nVG9Xcml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzV3JpdHRlbikp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGQtPm1fYnl0ZXNSZW1haW5pbmdUb1dyaXRlIC09IGJ5
dGVzV3JpdHRlbjsKKyAgICAgICAgICAgIGlmICghZC0+bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUp
IHsKKyAgICAgICAgICAgICAgICAvLyBFbmQgdGhlIHJlcXVlc3QuCisgICAgICAgICAgICAgICAg
Qk9PTCBnb29kID0gSHR0cEVuZFJlcXVlc3QoZC0+bV9jb25uTWdyLT5zZWNvbmRhcnlVcmxIYW5k
bGUoKSwgMCwgMCwgKERXT1JEX1BUUilkLT5tX2pvYklkKTsKKyAgICAgICAgICAgICAgICBpbnQg
ZXJyb3I7CisgICAgICAgICAgICAgICAgaWYgKCFnb29kKSB7CisgICAgICAgICAgICAgICAgICAg
IGVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChFUlJPUl9J
TlRFUk5FVF9GT1JDRV9SRVRSWSA9PSBlcnJvcikgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmVwb3N0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoRVJST1JfSU9fUEVORElORyA9PSBlcnJvcikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZ29vZCBmb3IgYXN5bmMgZnVuY3Rpb24KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGdvb2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGdvb2QpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZC0+bV93cml0aW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVtdIGQt
Pm1fZm9ybURhdGFTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgIGQtPm1fZm9ybURhdGFTdHJp
bmcgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisjaWZkZWYgUkVTT1VSQ0VfTE9BREVS
X0RFQlVHCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRW5kIHJlcXVlc3QgZXJyb3I6ICVp
XG4iLCBlcnJvcik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiRmFpbGVkIHRv
IGZpbmlzaCBwb3N0aW5nIGRhdGEiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyNpZmRlZiBSRVNPVVJD
RV9MT0FERVJfREVCVUcKKyAgICAgICAgICAgIHByaW50ZigiUG9zdCBlcnJvcjogJWlcbiIsIEdl
dExhc3RFcnJvcigpKTsKKyNlbmRpZgorICAgICAgICAgICAgZmFpbCgiRmFpbGVkIHRvIHBvc3Qg
ZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgc3Rh
dGljIGNvbnN0IGludCBidWZmZXJTaXplID0gODE5MjsgLy8zMjc2ODsKKworICAgIGNoYXIgYnVm
ZmVyW2J1ZmZlclNpemVdOworICAgIElOVEVSTkVUX0JVRkZFUlNBIGJ1ZmZlcnM7CisgICAgYnVm
ZmVycy5kd1N0cnVjdFNpemUgPSBzaXplb2YoYnVmZmVycyk7CisgICAgYnVmZmVycy5scHZCdWZm
ZXIgPSBidWZmZXI7CisgICAgYnVmZmVycy5kd0J1ZmZlckxlbmd0aCA9IGJ1ZmZlclNpemU7CisK
KyAgICBib29sIHJlY2VpdmVkQW55RGF0YSA9IGZhbHNlOworICAgIGludCBqb2JJZCA9IGQtPm1f
am9iSWQ7CisKKyAgICBCT09MIG9rID0gSW50ZXJuZXRSZWFkRmlsZUV4QShoYW5kbGUsICZidWZm
ZXJzLCBJUkZfTk9fV0FJVCwgKERXT1JEX1BUUilqb2JJZCk7CisKKyAgICBpZiAob2sgJiYgYnVm
ZmVycy5kd0J1ZmZlckxlbmd0aCkgeworICAgICAgICBpZiAoIWhhc1JlY2VpdmVkUmVzcG9uc2Uo
KSkgeworICAgICAgICAgICAgc2V0SGFzUmVjZWl2ZWRSZXNwb25zZSgpOworICAgICAgICAgICAg
UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICAgICAgICAgIHNldFJlc3BvbnNlKHJlc3Bv
bnNlKTsKKyAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgcmVz
cG9uc2UpOworICAgICAgICAgICAgLy8gSW4gY2FzZSB0aGF0IGl0IGlzIGRlbGV0ZWQgYnkgbGFz
dCBjYWxsCisgICAgICAgICAgICBpZiAoIWpvYk1hbmFnZXIoKS0+bG9va3VwUmVzb3VyY2VIYW5k
bGUoam9iSWQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBj
bGllbnQoKS0+ZGlkUmVjZWl2ZURhdGEodGhpcywgYnVmZmVyLCBidWZmZXJzLmR3QnVmZmVyTGVu
Z3RoLCAwKTsKKworICAgICAgICAvLyBJbiBjYXNlIHRoYXQgaXQgaXMgZGVsZXRlZCBieSBsYXN0
IGNhbGwKKyAgICAgICAgaWYgKCFqb2JNYW5hZ2VyKCktPmxvb2t1cFJlc291cmNlSGFuZGxlKGpv
YklkKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoYnVmZmVycy5kd0J1ZmZl
ckxlbmd0aCkgeworICAgICAgICAgICAgLy8gUmVhZCB0aGUgcmVzdCBkYXRhIG5leHQgdGltZQor
ICAgICAgICAgICAgUG9zdE1lc3NhZ2Uoam9iTWFuYWdlcigpLT5od25kKCksIHJlcXVlc3RDb21w
bGV0ZU1lc3NhZ2UsIChXUEFSQU0pam9iSWQsIGxQYXJhbSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAob2spCisgICAgICAgIGZpbmlzaCgpOworICAg
IGVsc2UgeworICAgICAgICBpbnQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYg
KGVycm9yICE9IEVSUk9SX0lPX1BFTkRJTkcpIHsKKyNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVC
VUcKKyAgICAgICAgICAgIHByaW50ZigiTG9hZCBlcnJvcjogJWlcbiIsIGVycm9yKTsgLy8gZmFp
bD8KKyNlbmRpZgorICAgICAgICAgICAgZmFpbCgiRmFpbGVkIHRvIHJlYWQgcmVzb3VyY2UgZGF0
YSIpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFJlc291cmNlSGFuZGxlOjpvcGVuVXJs
KGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgc2VsZkRlbCkKK3sKKyAgICBpZiAoIWNsaWVu
dCgpKSB7CisgICAgICAgIGlmIChzZWxmRGVsKQorICAgICAgICAgICAgZGVsZXRlIHRoaXM7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3QgRFdPUkQgZmxh
Z3MgPSBJTlRFUk5FVF9GTEFHX0FTWU5DCisgICAgICAgIHwgSU5URVJORVRfRkxBR19JR05PUkVf
UkVESVJFQ1RfVE9fSFRUUFMKKyAgICAgICAgfCBJTlRFUk5FVF9GTEFHX0lHTk9SRV9SRURJUkVD
VF9UT19IVFRQOworCisgICAgLy8gRm9yIGZvcm0gcG9zdGluZywgd2UgY2FuJ3QgdXNlIEludGVy
bmV0T3BlblVSTC4gIFdlIGhhdmUgdG8gdXNlCisgICAgLy8gSW50ZXJuZXRDb25uZWN0IGZvbGxv
d2VkIGJ5IEh0dHBTZW5kUmVxdWVzdC4KKyAgICBISU5URVJORVQgdXJsSGFuZGxlOworICAgIGJv
b2wgc2VjdXJlID0gcmVxdWVzdCgpLnVybCgpLnByb3RvY29sKCkubG93ZXIoKSA9PSAiaHR0cHMi
OworICAgIGludCBzZWN1cmVGbGFncyA9IHNlY3VyZSA/IElOVEVSTkVUX0ZMQUdfU0VDVVJFIDog
MDsKKyAgICB1bnNpZ25lZCBzaG9ydCBwb3J0ID0gcmVxdWVzdCgpLnVybCgpLnBvcnQoKTsKKyAg
ICBpZiAocG9ydCA8PSAwKQorICAgICAgICBwb3J0ID0gc2VjdXJlID8gNDQzIDogODA7CisgICAg
aWYgKHJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKSB7CisgICAgICAgIGQtPm1fcG9z
dFJlZmVycmVyID0gcmVmZXJyZXI7CisgICAgICAgIFN0cmluZyBob3N0ID0gcmVxdWVzdCgpLnVy
bCgpLmhvc3QoKTsKKyAgICAgICAgdXJsSGFuZGxlID0gSW50ZXJuZXRDb25uZWN0KGQtPm1fY29u
bk1nci0+aW50ZXJuZXRIYW5kbGUoKSwgaG9zdC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLy8gbm8gdXNlcm5hbWUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvLyBubyBwYXNzd29yZAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSTkVUX1NFUlZJQ0VfSFRUUCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyB8IGNhY2hlRmxhZ3NGb3IocmVx
dWVzdCgpKSB8IHNlY3VyZUZsYWdzLCAoRFdPUkRfUFRSKWQtPm1fam9iSWQpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIFN0cmluZyB1cmxTdHIgPSByZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCk7Cisg
ICAgICAgIGludCBmcmFnbWVudEluZGV4ID0gdXJsU3RyLmZpbmQoJyMnKTsKKyAgICAgICAgaWYg
KGZyYWdtZW50SW5kZXggIT0gLTEpCisgICAgICAgICAgICB1cmxTdHIgPSB1cmxTdHIubGVmdChm
cmFnbWVudEluZGV4KTsKKyAgICAgICAgU3RyaW5nIGhlYWRlcnM7CisgICAgICAgIGlmICghcmVm
ZXJyZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgaGVhZGVycyArPSBTdHJpbmcoIlJlZmVyZXI6
ICIpICsgcmVmZXJyZXIgKyAiXHJcbiI7CisKKyAgICAgICAgdXJsSGFuZGxlID0gSW50ZXJuZXRP
cGVuVXJsKGQtPm1fY29ubk1nci0+aW50ZXJuZXRIYW5kbGUoKSwgdXJsU3RyLmNoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVhZGVycy5jaGFyYWN0ZXJzKCksIGhlYWRlcnMubGVuZ3RoKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfCBjYWNoZUZsYWdzRm9yKHJlcXVlc3QoKSkg
fCBzZWN1cmVGbGFncywgKERXT1JEX1BUUilkLT5tX2pvYklkKTsKKyAgICB9CisKKyAgICBpZiAo
IXVybEhhbmRsZSkgeworICAgICAgICBEV09SRCBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAg
ICAgaWYgKEVSUk9SX0lPX1BFTkRJTkcgIT0gZXJyKSB7CisgICAgICAgICAgICBpZiAoc2VsZkRl
bCkKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlc291
cmNlSGFuZGxlOjpzdGFydChGcmFtZSogZnJhbWUpCit7CisgICAgcmVmKCk7CisgICAgZC0+bV9p
c0Fib3V0ID0gcmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnN0YXJ0c1dpdGgoImFib3V0OiIpOyAv
LyBLVVJMIGNhbid0IGhhbmRsZSBwcm90b2NvbCBvbiAiYWJvdXQ6Zm9vIj8/CisKKyAgICBpZiAo
ZC0+bV9pc0Fib3V0KSB7CisgICAgICAgIGQtPm1faXNBYm91dCA9IHRydWU7CisgICAgICAgIGQt
Pm1fZmlsZUxvYWRUaW1lci5zdGFydE9uZVNob3QoMC4wKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSBlbHNlIGlmIChyZXF1ZXN0KCkudXJsKCkuaXNMb2NhbEZpbGUoKSkgeworCisgICAg
ICAgIFN0cmluZyBwYXRoID0gcmVxdWVzdCgpLnVybCgpLnBhdGgoKTsKKyAgICAgICAgd2hpbGUg
KHBhdGhbMF0gPT0gJy8nKQorICAgICAgICAgICAgcGF0aC5yZW1vdmUoMCk7CisKKyAgICAgICAg
Ly8gVGVtcG9yYXJ5IHNvbHV0aW9uLiBMYXRlciBvbiB3ZSB3aWxsIHVzZSBJbnRlcm5ldENyYWNr
VXJsCisgICAgICAgIHBhdGgucmVwbGFjZShTdHJpbmcoTCIlMjAiKSwgU3RyaW5nKEwiICIpKTsK
KyAgICAgICAgcGF0aC5zdHJpcFdoaXRlU3BhY2UoKTsKKworICAgICAgICBkLT5tX2ZpbGVIYW5k
bGUgPSBDcmVhdGVGaWxlKHBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgR0VO
RVJJQ19SRUFELCAwLCAwLCBPUEVOX0VYSVNUSU5HLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIDAp
OworCisgICAgICAgIGQtPm1fZmlsZUxvYWRUaW1lci5zdGFydE9uZVNob3QoMC4wKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGQtPm1fY29ubk1ncikK
KyAgICAgICAgICAgIGRlbGV0ZSBkLT5tX2Nvbm5NZ3I7CisgICAgICAgIGQtPm1fY29ubk1nciA9
IG5ldyBDb25uZWN0aW9uTWFuYWdlcigpOworCisgICAgICAgIGlmICghZC0+bV9jb25uTWdyLT5p
bnRlcm5ldEhhbmRsZSgpKSB7CisgICAgICAgICAgICBkZWxldGUgZC0+bV9jb25uTWdyOworICAg
ICAgICAgICAgZC0+bV9jb25uTWdyID0gMDsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBqb2JNYW5hZ2VyKCktPmFkZFRvT3V0c3RhbmRpbmdK
b2JzKHRoaXMsIGZyYW1lLT5sb2FkZXIoKS0+cmVmZXJyZXIoKSk7CisgICAgfQorfQorCit2b2lk
IFJlc291cmNlSGFuZGxlOjpsb2FkRmlsZSgpCit7CisgICAgaW50IGpvYklkID0gZC0+bV9qb2JJ
ZDsKKyAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworICAgIHNldFJlc3BvbnNlKHJlc3Bv
bnNlKTsKKworICAgIC8vIEZJWE1FIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChz
eik7CisgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsKKyAgICBjbGllbnQoKS0+
ZGlkUmVjZWl2ZVJlc3BvbnNlKHRoaXMsIHJlc3BvbnNlKTsKKyAgICBib29sIHJlc3VsdCA9IGZh
bHNlOworICAgIERXT1JEIGJ5dGVzUmVhZCA9IDA7CisKKyAgICBkbyB7CisgICAgICAgIGNvbnN0
IGludCBidWZmZXJTaXplID0gODE5MjsKKyAgICAgICAgY2hhciBidWZmZXJbYnVmZmVyU2l6ZV07
CisgICAgICAgIHJlc3VsdCA9ICEhUmVhZEZpbGUoZC0+bV9maWxlSGFuZGxlLCAmYnVmZmVyLCBi
dWZmZXJTaXplLCAmYnl0ZXNSZWFkLCAwKTsKKyAgICAgICAgaWYgKHJlc3VsdCAmJiBieXRlc1Jl
YWQpIHsKKyAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBidWZmZXIs
IGJ5dGVzUmVhZCwgMCk7CisgICAgICAgICAgICAvLyBJbiBjYXNlIHRoYXQgaXQgaXMgZGVsZXRl
ZCBieSBsYXN0IGNhbGwKKyAgICAgICAgICAgIGlmICgham9iTWFuYWdlcigpLT5sb29rdXBSZXNv
dXJjZUhhbmRsZShqb2JJZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIC8vIENoZWNrIGZvciBlbmQgb2YgZmlsZS4KKyAgICB9IHdoaWxlIChyZXN1bHQgJiYg
Ynl0ZXNSZWFkKTsKKworICAgIC8vIEZJWE1FOiBoYW5kbGUgZXJyb3JzIGJldHRlcgorCisgICAg
Q2xvc2VIYW5kbGUoZC0+bV9maWxlSGFuZGxlKTsKKyAgICBkLT5tX2ZpbGVIYW5kbGUgPSBJTlZB
TElEX0hBTkRMRV9WQUxVRTsKKworICAgIGZpbmlzaCgpOworfQorCit2b2lkIFJlc291cmNlSGFu
ZGxlOjpsb2FkRGF0YSgpCit7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRBYm91dCgp
Cit7CisgICAgaWYgKCFmZXRjaEFib3V0UGFnZSkgeworICAgICAgICBmYWlsKCJGYWlsZWQgdG8g
b3BlbiBwYWdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgam9iSWQgPSBk
LT5tX2pvYklkOworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgc2V0UmVzcG9u
c2UocmVzcG9uc2UpOworCisgICAgU3RyaW5nIHBhdGggPSByZXF1ZXN0KCkudXJsKCkucGF0aCgp
LnN0cmlwV2hpdGVTcGFjZSgpOworICAgIGNoYXIgKmRhdGEgPSAwOworICAgIGludCBzeiA9IDA7
CisgICAgQnVmZmVyRGVsZXRlciBkZWxldGVyID0gMDsKKyAgICBib29sIHJjID0gKGZldGNoQWJv
dXRQYWdlKShwYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZkYXRhLCAmc3os
ICZkZWxldGVyKTsKKyAgICBpZiAoIXJjIHx8ICFzeikgeworICAgICAgICByZXNwb25zZS5zZXRI
VFRQU3RhdHVzQ29kZSg0MDQpOworICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNl
KHRoaXMsIHJlc3BvbnNlKTsKKyAgICAgICAgZmFpbCgiIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKHN6KTsKKyAgICByZXNw
b25zZS5zZXRIVFRQU3RhdHVzQ29kZSgyMDApOworICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVz
cG9uc2UodGhpcywgcmVzcG9uc2UpOworICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0aGlz
LCBkYXRhLCBzeiwgMCk7CisgICAgaWYgKGRlbGV0ZXIpCisgICAgICAgIGRlbGV0ZXIoZGF0YSwg
c3opOworICAgIGZpbmlzaCgpOworICAgIHJldHVybjsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRs
ZTo6ZmlsZUxvYWRUaW1lcihUaW1lcjxSZXNvdXJjZUhhbmRsZT4qIHRpbWVyKQoreworICAgIGlm
ICghY2xpZW50KCkpIHsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyByZXBvcnRlZCBhc3luY2hyb25vdXNseSBmb3IgY29uc2lzdGVuY3kuCisg
ICAgaWYgKCFkLT5tX2lzQWJvdXQgJiYgZC0+bV9maWxlSGFuZGxlID09IElOVkFMSURfSEFORExF
X1ZBTFVFKSB7CisgICAgICAgIGZhaWwoIkZhaWxlZCB0byBsb2FkIGZpbGUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChkLT5tX2lzQWJvdXQpCisgICAgICAgIGxvYWRBYm91
dCgpOworICAgIGVsc2UKKyAgICAgICAgbG9hZEZpbGUoKTsKK30KKworI2lmIFBMQVRGT1JNKFRP
UkNITU9CSUxFKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2FuY2VsKGNvbnN0IFJlc291cmNlSGFu
ZGxlQ2xpZW50KikKKyNlbHNlCit2b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQorI2VuZGlm
Cit7CisgICAgaWYgKGQtPm1fY29ubk1nciAmJiBkLT5tX2Nvbm5NZ3ItPnVybEhhbmRsZSgpKQor
ICAgICAgICBkLT5tX2Nvbm5NZ3ItPmNsb3NlVXJsSGFuZGxlKCk7CisgICAgZWxzZQorICAgICAg
ICBkLT5tX2ZpbGVMb2FkVGltZXIuc3RvcCgpOworCisgICAgZmluaXNoKCk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VIYW5kbGU6OnNldEhhc1JlY2VpdmVkUmVzcG9uc2UoYm9vbCBiKQoreworICAgIGQt
Pm1faGFzUmVjZWl2ZWRSZXNwb25zZSA9IGI7Cit9CisKK2Jvb2wgUmVzb3VyY2VIYW5kbGU6Omhh
c1JlY2VpdmVkUmVzcG9uc2UoKSBjb25zdAoreworICAgIHJldHVybiBkLT5tX2hhc1JlY2VpdmVk
UmVzcG9uc2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUVycm9yJiBlLCBS
ZXNvdXJjZVJlc3BvbnNlJiByLCBWZWN0b3I8Y2hhcj4mIGRhdGEsIEZyYW1lKikKK3sKKyAgICBN
ZXNzYWdlQm94VygwLCBTdHJpbmcocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkuY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSwgTCJMb2FkIFN5bmNocm9ub3VzbHkiLCBNQl9PSyk7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFJlc291cmNl
SGFuZGxlOjpidWZmZXJlZERhdGEoKQoreworICAgIHJldHVybiAwOworfQorCitib29sIFJlc291
cmNlSGFuZGxlOjpzdXBwb3J0c0J1ZmZlcmVkRGF0YSgpCit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQor
eworICAgIGQtPm1fZGVmZXJzTG9hZGluZyA9IGRlZmVyczsKK30KKwordm9pZCBSZXNvdXJjZUhh
bmRsZTo6c2V0RG93bmxvYWRDbGllbnQoUmVzb3VyY2VIYW5kbGVDbGllbnQqIGMpCit7CisgICAg
ZC0+bV9kb3dubG9hZENsaWVudCA9IGM7CisgICAgZC0+bV9mcmFtZSA9IDA7Cit9CisKK2Jvb2wg
UmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYgcmVxKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIHBy
ZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33206</attachid>
            <date>2009-07-21 13:31:23 -0700</date>
            <delta_ts>2010-10-20 05:06:35 -0700</delta_ts>
            <desc>The rest of WebCore/platform/network/wince (v2)</desc>
            <filename>27376_b.patch</filename>
            <type>text/plain</type>
            <size>34162</size>
            <attacher name="Adam Treat">manyoso</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzI0ZTFkYS4uMmFkMzczMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTMsNiArMywyNiBAQAogICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjczNzYKKyAgICAgICAgQWRkIFdpbkNFIHNwZWNpZmljIGZpbGVzIGZvciBwbGF0Zm9y
bS9uZXR3b3JrLgorCisgICAgICAgIFdyaXR0ZW4gYnkgWW9uZyBMaSA8eW9uZy5saUB0b3JjaG1v
YmlsZS5jb20+LAorICAgICAgICBHZW9yZ2UgU3RhaWtvcyA8Z2VvcmdlLnN0YWlrb3NAdG9yY2ht
b2JpbGUuY29tPiwKKyAgICAgICAgSm9lIE1hc29uPGpvZS5tYXNvbkB0b3JjaG1vYmlsZS5jb20+
CisgICAgICAgIGFuZCBzb21lIHRyaXZpYWwgc3R5bGUgZml4ZXMgYnkgQWRhbSBUcmVhdCA8YWRh
bS50cmVhdEB0b3JjaG1vYmlsZS5jb20+LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93
aW5jZS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvcXQvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3dpbmNlL05ldHdvcmtTdGF0ZU5vdGlmaWVyV2luY2UuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlRXJyb3IuaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZVJlcXVlc3QuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJjZVJlc3BvbnNlLmg6
IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlc3BvbnNl
LmguCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW5jZS9wdW55Y29kZS5jOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL3B1bnljb2RlLmg6IEFkZGVkLgorCisy
MDA5LTA3LTIxICBBZGFtIFRyZWF0ICA8YWRhbS50cmVhdEB0b3JjaG1vYmlsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3Mzc2CiAgICAgICAgIEFkZCBXaW5DRSBzcGVj
aWZpYyBSZXNvdXJjZUhhbmRsZVdpbmNlLmNwcCBmb3IgcGxhdGZvcm0vbmV0d29yay4KIAogICAg
ICAgICBXcml0dGVuIGJ5IFlvbmcgTGkgPHlvbmcubGlAdG9yY2htb2JpbGUuY29tPiwKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9BdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgwZDNmMQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9BdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyNpZm5kZWYgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VfaAorI2RlZmluZSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZV9oCisK
KyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisgICAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgOiBwdWJsaWMgQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2Us
IGNvbnN0IENyZWRlbnRpYWwmIHByb3Bvc2VkQ3JlZGVudGlhbCwgdW5zaWduZWQgcHJldmlvdXNG
YWlsdXJlQ291bnQsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKKyAgICAgICAgICAgIDogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VC
YXNlKHByb3RlY3Rpb25TcGFjZSwgcHJvcG9zZWRDcmVkZW50aWFsLCBwcmV2aW91c0ZhaWx1cmVD
b3VudCwgcmVzcG9uc2UsIGVycm9yKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9OworCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL05l
dHdvcmtTdGF0ZU5vdGlmaWVyV2luY2UuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dp
bmNlL05ldHdvcmtTdGF0ZU5vdGlmaWVyV2luY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjhiNGE4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvd2luY2UvTmV0d29ya1N0YXRlTm90aWZpZXJXaW5jZS5jcHAKQEAgLTAsMCArMSwx
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIk5ldHdvcmtTdGF0ZU5vdGlmaWVyLmgiCisKKyNpbmNsdWRlIDxpcGhscGFw
aS5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFBM
QVRGT1JNKFRPUkNITU9CSUxFKQorCitOZXR3b3JrU3RhdGVOb3RpZmllcjo6TmV0d29ya1N0YXRl
Tm90aWZpZXIoKQorICAgIDogbV9pc09uTGluZShmYWxzZSkKKyAgICAsIG1fbmV0d29ya1N0YXRl
Q2hhbmdlZEZ1bmN0aW9uKDApCit7Cit9CisKK05ldHdvcmtTdGF0ZU5vdGlmaWVyOjp+TmV0d29y
a1N0YXRlTm90aWZpZXIoKQoreworfQorCit2b2lkIE5ldHdvcmtTdGF0ZU5vdGlmaWVyOjpzZXRP
bkxpbmUoYm9vbCBpc09uTGluZSkKK3sKKyAgICBpZiAobV9pc09uTGluZSAhPSBpc09uTGluZSkg
eworICAgICAgICBtX2lzT25MaW5lID0gaXNPbkxpbmU7CisgICAgICAgIGlmIChtX25ldHdvcmtT
dGF0ZUNoYW5nZWRGdW5jdGlvbikKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlQ2hhbmdlZEZ1
bmN0aW9uKCk7CisgICAgfQorfQorCisjZWxzZQordm9pZCBOZXR3b3JrU3RhdGVOb3RpZmllcjo6
dXBkYXRlU3RhdGUoKQoreworICAgIC8vIEFzc3VtZSB0aGF0IHdlJ3JlIG9ubGluZSB1bnRpbCBw
cm92ZW4gb3RoZXJ3aXNlLgorICAgIG1faXNPbkxpbmUgPSB0cnVlOworCisgICAgVmVjdG9yPGNo
YXI+IGJ1ZmZlcjsKKyAgICBEV09SRCBzaXplID0gMDsKKworICAgIGlmICg6OkdldEFkYXB0ZXJz
QWRkcmVzc2VzKEFGX1VOU1BFQywgMCwgMCwgMCwgJnNpemUpICE9IEVSUk9SX0JVRkZFUl9PVkVS
RkxPVykKKyAgICAgICAgcmV0dXJuOworCisgICAgYnVmZmVyLnJlc2l6ZShzaXplKTsKKyAgICBQ
SVBfQURBUFRFUl9BRERSRVNTRVMgYWRkcmVzc2VzID0gcmVpbnRlcnByZXRfY2FzdDxQSVBfQURB
UFRFUl9BRERSRVNTRVM+KGJ1ZmZlci5kYXRhKCkpOworCisgICAgaWYgKDo6R2V0QWRhcHRlcnNB
ZGRyZXNzZXMoQUZfVU5TUEVDLCAwLCAwLCBhZGRyZXNzZXMsICZzaXplKSAhPSBFUlJPUl9TVUND
RVNTKSB7CisgICAgICAgIC8vIFdlIGNvdWxkbid0IGRldGVybWluZSB3aGV0aGVyIHdlJ3JlIG9u
bGluZSBvciBub3QsIHNvIGFzc3VtZSB0aGF0IHdlIGFyZS4KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGZvciAoOyBhZGRyZXNzZXM7IGFkZHJlc3NlcyA9IGFkZHJlc3Nlcy0+TmV4dCkg
eworICAgICAgICBpZiAoYWRkcmVzc2VzLT5JZlR5cGUgPT0gTUlCX0lGX1RZUEVfTE9PUEJBQ0sp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoYWRkcmVzc2VzLT5PcGVyU3Rh
dHVzICE9IElmT3BlclN0YXR1c1VwKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Ly8gV2UgZm91bmQgYW4gaW50ZXJmYWNlIHRoYXQgd2FzIHVwLgorICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gV2UgZGlkbid0IGZpbmQgYW55IHZhbGlkIGludGVyZmFjZXMsIHNvIHdl
IG11c3QgYmUgb2ZmbGluZS4KKyAgICBtX2lzT25MaW5lID0gZmFsc2U7Cit9CisKK3ZvaWQgTmV0
d29ya1N0YXRlTm90aWZpZXI6OmFkZHJlc3NDaGFuZ2VkKCkKK3sKKyAgICBib29sIG9sZE9uTGlu
ZSA9IG1faXNPbkxpbmU7CisKKyAgICB1cGRhdGVTdGF0ZSgpOworCisgICAgaWYgKG1faXNPbkxp
bmUgPT0gb2xkT25MaW5lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9uZXR3b3JrU3Rh
dGVDaGFuZ2VkRnVuY3Rpb24pCisgICAgICAgIG1fbmV0d29ya1N0YXRlQ2hhbmdlZEZ1bmN0aW9u
KCk7Cit9CisKK3ZvaWQgTmV0d29ya1N0YXRlTm90aWZpZXI6OmNhbGxBZGRyZXNzQ2hhbmdlZCh2
b2lkKiBjb250ZXh0KQoreworICAgIHN0YXRpY19jYXN0PE5ldHdvcmtTdGF0ZU5vdGlmaWVyKj4o
Y29udGV4dCktPmFkZHJlc3NDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgQ0FMTEJBQ0sgTmV0d29ya1N0
YXRlTm90aWZpZXI6OmFkZHJDaGFuZ2VDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBCT09MRUFOIHRp
bWVkT3V0KQoreworICAgIGNhbGxPbk1haW5UaHJlYWQoY2FsbEFkZHJlc3NDaGFuZ2VkLCBjb250
ZXh0KTsKK30KKwordm9pZCBOZXR3b3JrU3RhdGVOb3RpZmllcjo6cmVnaXN0ZXJGb3JBZGRyZXNz
Q2hhbmdlKCkKK3sKKyAgICA6Ok5vdGlmeUFkZHJDaGFuZ2UoJm1fb3ZlcmxhcHBlZC5oRXZlbnQs
IDApOworfQorCituYW1lc3BhY2UgeworCitzdHJ1Y3QgVGhyZWFkRGF0YSB7CisgICAgTmV0d29y
a1N0YXRlTm90aWZpZXIqIG1fbm90aWZpZXI7CisgICAgSEFORExFIG1fZXZlbnQ7Cit9OworCitz
dGF0aWMgVGhyZWFkRGF0YSBnX3RocmVhZERhdGEgPSB7MH07Cit9CisKK05ldHdvcmtTdGF0ZU5v
dGlmaWVyOjpOZXR3b3JrU3RhdGVOb3RpZmllcigpCisgICAgOiBtX2lzT25MaW5lKGZhbHNlKQor
ICAgICwgbV9uZXR3b3JrU3RhdGVDaGFuZ2VkRnVuY3Rpb24oMCkKK3sKKyAgICB1cGRhdGVTdGF0
ZSgpOworCisgICAgbWVtc2V0KCZtX292ZXJsYXBwZWQsIDAsIHNpemVvZihtX292ZXJsYXBwZWQp
KTsKKworICAgIG1fb3ZlcmxhcHBlZC5oRXZlbnQgPSA6OkNyZWF0ZUV2ZW50KDAsIGZhbHNlLCBm
YWxzZSwgMCk7CisKKyAgICBnX3RocmVhZERhdGEubV9ub3RpZmllciA9IHRoaXM7CisgICAgZ190
aHJlYWREYXRhLm1fZXZlbnQgPSBtX292ZXJsYXBwZWQuaEV2ZW50OworCisgICAgbV93YWl0SGFu
ZGxlID0gQ3JlYXRlVGhyZWFkKDAsIDUxMiwgd2FpdFRocmVhZFByb2MsICZnX3RocmVhZERhdGEs
IFNUQUNLX1NJWkVfUEFSQU1fSVNfQV9SRVNFUlZBVElPTiwgMCk7CisgICAgcmVnaXN0ZXJGb3JB
ZGRyZXNzQ2hhbmdlKCk7Cit9CisKK05ldHdvcmtTdGF0ZU5vdGlmaWVyOjp+TmV0d29ya1N0YXRl
Tm90aWZpZXIoKQoreworICAgIFRlcm1pbmF0ZVRocmVhZChtX3dhaXRIYW5kbGUsIDApOworICAg
IENsb3NlSGFuZGxlKG1fd2FpdEhhbmRsZSk7CisgICAgQ2xvc2VIYW5kbGUobV9vdmVybGFwcGVk
LmhFdmVudCk7Cit9CisKK0RXT1JEIFdJTkFQSSBOZXR3b3JrU3RhdGVOb3RpZmllcjo6d2FpdFRo
cmVhZFByb2MoTFBWT0lEIGxwUGFyYW1ldGVyKQoreworICAgIFRocmVhZERhdGEqIHRocmVhZERh
dGEgPSAoVGhyZWFkRGF0YSopbHBQYXJhbWV0ZXI7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAg
IERXT1JEIHJlc3VsdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QodGhyZWFkRGF0YS0+bV9ldmVudCwg
SU5GSU5JVEUpOworICAgICAgICBpZiAocmVzdWx0ID09IFdBSVRfRkFJTEVEKQorICAgICAgICAg
ICAgcmV0dXJuIC0xOworCisgICAgICAgIGFkZHJDaGFuZ2VDYWxsYmFjayh0aHJlYWREYXRhLT5t
X25vdGlmaWVyLCByZXN1bHQgPT0gV0FJVF9USU1FT1VUID8gVFJVRSA6IEZBTFNFKTsKKyAgICB9
Cit9CisjZW5kaWYKKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dp
bmNlL1Jlc291cmNlRXJyb3IuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNv
dXJjZUVycm9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhM2RmNAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9SZXNvdXJj
ZUVycm9yLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBS
ZXNvdXJjZUVycm9yX2gKKyNkZWZpbmUgUmVzb3VyY2VFcnJvcl9oCisKKyNpbmNsdWRlICJSZXNv
dXJjZUVycm9yQmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBSZXNv
dXJjZUVycm9yIDogcHVibGljIFJlc291cmNlRXJyb3JCYXNlIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFJlc291cmNlRXJyb3IoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZXNv
dXJjZUVycm9yKGNvbnN0IFN0cmluZyYgZG9tYWluLCBpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJp
bmcmIGZhaWxpbmdVUkwsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGVzY3JpcHRpb24pCisgICAg
ICAgICAgICA6IFJlc291cmNlRXJyb3JCYXNlKGRvbWFpbiwgZXJyb3JDb2RlLCBmYWlsaW5nVVJM
LCBsb2NhbGl6ZWREZXNjcmlwdGlvbikKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKwor
fQorCisjZW5kaWYgLy8gUmVzb3VyY2VFcnJvcl9oXwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlUmVxdWVzdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3dpbmNlL1Jlc291cmNlUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjJiNzE3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvd2luY2UvUmVzb3VyY2VSZXF1ZXN0LmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2Vpbmln
QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRvcmNoIE1vYmlsZSBJbmMu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgUmVzb3VyY2VSZXF1ZXN0X2gKKyNkZWZpbmUgUmVzb3VyY2VSZXF1
ZXN0X2gKKworI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdEJhc2UuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisgICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0IDogcHVibGljIFJlc291cmNlUmVx
dWVzdEJhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFN0
cmluZyYgdXJsKQorICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKEtVUkwodXJsKSwg
VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAgICAgICwgbV90eXBlKFJlcXVlc3RNYWlu
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3Qg
S1VSTCYgdXJsKQorICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgVXNlUHJv
dG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAgICAgICwgbV90eXBlKFJlcXVlc3RNYWluKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBw
b2xpY3kgPSBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorICAgICAgICAgICAgOiBSZXNvdXJjZVJl
cXVlc3RCYXNlKHVybCwgcG9saWN5KQorICAgICAgICAgICAgLCBtX3R5cGUoUmVxdWVzdE1haW4p
CisgICAgICAgIHsKKyAgICAgICAgICAgIHNldEhUVFBSZWZlcnJlcihyZWZlcnJlcik7CisgICAg
ICAgIH0KKworICAgICAgICBSZXNvdXJjZVJlcXVlc3QoKQorICAgICAgICAgICAgOiBSZXNvdXJj
ZVJlcXVlc3RCYXNlKEtVUkwoKSwgVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAgICAg
ICwgbV90eXBlKFJlcXVlc3RNYWluKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBl
bnVtIFR5cGUgeworICAgICAgICAgICAgUmVxdWVzdE1haW4sCisgICAgICAgICAgICBSZXF1ZXN0
U2NyaXB0LAorICAgICAgICAgICAgUmVxdWVzdENTUywKKyAgICAgICAgICAgIFJlcXVlc3RPdGhl
ciwKKyAgICAgICAgICAgIFJlcXVlc3RJbWFnZSwKKyAgICAgICAgfTsKKworICAgICAgICBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICAgICAgdm9pZCBzZXRUeXBlKFR5
cGUgdHlwZSkgeyBtX3R5cGUgPSB0eXBlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmll
bmQgc3RydWN0IFJlc291cmNlUmVxdWVzdEJhc2U7CisKKyAgICAgICAgdm9pZCBkb1VwZGF0ZVBs
YXRmb3JtUmVxdWVzdCgpIHt9CisgICAgICAgIHZvaWQgZG9VcGRhdGVSZXNvdXJjZVJlcXVlc3Qo
KSB7fQorCisgICAgICAgIFR5cGUgbV90eXBlOworICAgIH07Cit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBSZXNvdXJjZVJlcXVlc3RfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3dpbmNlL1Jlc291cmNlUmVzcG9uc2UuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay93aW5jZS9SZXNvdXJjZVJlc3BvbnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYTI5NWVkOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay93aW5jZS9SZXNvdXJjZVJlc3BvbnNlLmgKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZXNvdXJjZVJlc3BvbnNlX2gKKyNkZWZpbmUgUmVz
b3VyY2VSZXNwb25zZV9oCisKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlQmFzZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlIDogcHVibGlj
IFJlc291cmNlUmVzcG9uc2VCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlc291cmNlUmVz
cG9uc2UoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZXNvdXJjZVJlc3BvbnNl
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgbG9uZyBsb25nIGV4cGVj
dGVkTGVuZ3RoLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGNvbnN0IFN0cmluZyYg
ZmlsZW5hbWUpCisgICAgICAgICAgICA6IFJlc291cmNlUmVzcG9uc2VCYXNlKHVybCwgbWltZVR5
cGUsIGV4cGVjdGVkTGVuZ3RoLCB0ZXh0RW5jb2RpbmdOYW1lLCBmaWxlbmFtZSkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gUmVzb3VyY2VSZXNwb25zZV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvd2luY2UvcHVueWNvZGUuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW5jZS9wdW55
Y29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZmZkM2IKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luY2UvcHVueWNvZGUuYwpA
QCAtMCwwICsxLDMwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGkgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJwdW55Y29kZS5oIgorCisvKgorcHVueWNvZGUuYyBmcm9tIFJGQyAzNDky
CitodHRwOi8vd3d3Lm5pY2VtaWNlLm5ldC9pZG4vCitBZGFtIE0uIENvc3RlbGxvCitodHRwOi8v
d3d3Lm5pY2VtaWNlLm5ldC9hbWMvCisKK1RoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkgaW1wbGVt
ZW50aW5nIFB1bnljb2RlIChSRkMgMzQ5MikuCisKK0Zyb20gdGhlIFJGQzogZnRwOi8vZnRwLnJm
Yy1lZGl0b3Iub3JnL2luLW5vdGVzL3JmYzM0OTIudHh0CisKK0IuIERpc2NsYWltZXIgYW5kIGxp
Y2Vuc2UKKworICAgUmVnYXJkaW5nIHRoaXMgZW50aXJlIGRvY3VtZW50IG9yIGFueSBwb3J0aW9u
IG9mIGl0IChpbmNsdWRpbmcgdGhlCisgICBwc2V1ZG9jb2RlIGFuZCBDIGNvZGUpLCB0aGUgYXV0
aG9yIG1ha2VzIG5vIGd1YXJhbnRlZXMgYW5kIGlzIG5vdAorICAgcmVzcG9uc2libGUgZm9yIGFu
eSBkYW1hZ2UgcmVzdWx0aW5nIGZyb20gaXRzIHVzZS4gIFRoZSBhdXRob3IgZ3JhbnRzCisgICBp
cnJldm9jYWJsZSBwZXJtaXNzaW9uIHRvIGFueW9uZSB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3Ry
aWJ1dGUgaXQgaW4KKyAgIGFueSB3YXkgdGhhdCBkb2VzIG5vdCBkaW1pbmlzaCB0aGUgcmlnaHRz
IG9mIGFueW9uZSBlbHNlIHRvIHVzZSwKKyAgIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgaXQsIHBy
b3ZpZGVkIHRoYXQgcmVkaXN0cmlidXRlZCBkZXJpdmF0aXZlCisgICB3b3JrcyBkbyBub3QgY29u
dGFpbiBtaXNsZWFkaW5nIGF1dGhvciBvciB2ZXJzaW9uIGluZm9ybWF0aW9uLgorICAgRGVyaXZh
dGl2ZSB3b3JrcyBuZWVkIG5vdCBiZSBsaWNlbnNlZCB1bmRlciBzaW1pbGFyIHRlcm1zLgorKi8K
KworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCisvKiBJbXBsZW1lbnRhdGlvbiAod291bGQgbm9ybWFsbHkgZ28gaW4gaXRzIG93biAu
YyBmaWxlKTogKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKioqIEJvb3RzdHJpbmcgcGFy
YW1ldGVycyBmb3IgUHVueWNvZGUgKioqLworCitlbnVtIHsgYmFzZSA9IDM2LCB0bWluID0gMSwg
dG1heCA9IDI2LCBza2V3ID0gMzgsIGRhbXAgPSA3MDAsCisgICAgICAgaW5pdGlhbF9iaWFzID0g
NzIsIGluaXRpYWxfbiA9IDB4ODAsIGRlbGltaXRlciA9IDB4MkQgfTsKKworLyogYmFzaWMoY3Ap
IHRlc3RzIHdoZXRoZXIgY3AgaXMgYSBiYXNpYyBjb2RlIHBvaW50OiAqLworI2RlZmluZSBiYXNp
YyhjcCkgKChwdW55Y29kZV91aW50KShjcCkgPCAweDgwKQorCisvKiBkZWxpbShjcCkgdGVzdHMg
d2hldGhlciBjcCBpcyBhIGRlbGltaXRlcjogKi8KKyNkZWZpbmUgZGVsaW0oY3ApICgoY3ApID09
IGRlbGltaXRlcikKKworLyogZGVjb2RlX2RpZ2l0KGNwKSByZXR1cm5zIHRoZSBudW1lcmljIHZh
bHVlIG9mIGEgYmFzaWMgY29kZSAqLworLyogcG9pbnQgKGZvciB1c2UgaW4gcmVwcmVzZW50aW5n
IGludGVnZXJzKSBpbiB0aGUgcmFuZ2UgMCB0byAqLworLyogYmFzZS0xLCBvciBiYXNlIGlmIGNw
IGlzIGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLiAgICAgICAqLworCitzdGF0aWMgcHVueWNv
ZGVfdWludCBkZWNvZGVfZGlnaXQocHVueWNvZGVfdWludCBjcCkKK3sKKyAgICByZXR1cm4gIGNw
IC0gNDggPCAxMCA/IGNwIC0gMjIgOiAgY3AgLSA2NSA8IDI2ID8gY3AgLSA2NSA6CisgICAgICAg
ICAgICBjcCAtIDk3IDwgMjYgPyBjcCAtIDk3IDogIGJhc2U7Cit9CisKKy8qIGVuY29kZV9kaWdp
dChkLGZsYWcpIHJldHVybnMgdGhlIGJhc2ljIGNvZGUgcG9pbnQgd2hvc2UgdmFsdWUgICAgICAq
LworLyogKHdoZW4gdXNlZCBmb3IgcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBkLCB3aGljaCBu
ZWVkcyB0byBiZSBpbiAgICovCisvKiB0aGUgcmFuZ2UgMCB0byBiYXNlLTEuICBUaGUgbG93ZXJj
YXNlIGZvcm0gaXMgdXNlZCB1bmxlc3MgZmxhZyBpcyAgKi8KKy8qIG5vbnplcm8sIGluIHdoaWNo
IGNhc2UgdGhlIHVwcGVyY2FzZSBmb3JtIGlzIHVzZWQuICBUaGUgYmVoYXZpb3IgICAqLworLyog
aXMgdW5kZWZpbmVkIGlmIGZsYWcgaXMgbm9uemVybyBhbmQgZGlnaXQgZCBoYXMgbm8gdXBwZXJj
YXNlIGZvcm0uICovCisKK3N0YXRpYyBjaGFyIGVuY29kZV9kaWdpdChwdW55Y29kZV91aW50IGQs
IGludCBmbGFnKQoreworICAgIHJldHVybiBkICsgMjIgKyA3NSAqIChkIDwgMjYpIC0gKChmbGFn
ICE9IDApIDw8IDUpOworICAgIC8qICAwLi4yNSBtYXAgdG8gQVNDSUkgYS4ueiBvciBBLi5aICov
CisgICAgLyogMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45ICAgICAgICAgKi8KK30KKworLyogZmxh
Z2dlZChiY3ApIHRlc3RzIHdoZXRoZXIgYSBiYXNpYyBjb2RlIHBvaW50IGlzIGZsYWdnZWQgKi8K
Ky8qICh1cHBlcmNhc2UpLiAgVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZCBpZiBiY3AgaXMgbm90
IGEgICovCisvKiBiYXNpYyBjb2RlIHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqLworCisjZGVmaW5lIGZsYWdnZWQoYmNwKSAoKHB1bnljb2RlX3VpbnQpKGJj
cCkgLSA2NSA8IDI2KQorCisvKiBlbmNvZGVfYmFzaWMoYmNwLGZsYWcpIGZvcmNlcyBhIGJhc2lj
IGNvZGUgcG9pbnQgdG8gbG93ZXJjYXNlICovCisvKiBpZiBmbGFnIGlzIHplcm8sIHVwcGVyY2Fz
ZSBpZiBmbGFnIGlzIG5vbnplcm8sIGFuZCByZXR1cm5zICAgICovCisvKiB0aGUgcmVzdWx0aW5n
IGNvZGUgcG9pbnQuICBUaGUgY29kZSBwb2ludCBpcyB1bmNoYW5nZWQgaWYgaXQgICovCisvKiBp
cyBjYXNlbGVzcy4gIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgaWYgYmNwIGlzIG5vdCBhIGJh
c2ljICovCisvKiBjb2RlIHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICovCisKK3N0YXRpYyBjaGFyIGVuY29kZV9iYXNpYyhwdW55Y29kZV91
aW50IGJjcCwgaW50IGZsYWcpCit7CisgICAgYmNwIC09IChiY3AgLSA5NyA8IDI2KSA8PCA1Owor
ICAgIHJldHVybiBiY3AgKyAoKCFmbGFnICYmIChiY3AgLSA2NSA8IDI2KSkgPDwgNSk7Cit9CisK
Ky8qKiogUGxhdGZvcm0tc3BlY2lmaWMgY29uc3RhbnRzICoqKi8KKworLyogbWF4aW50IGlzIHRo
ZSBtYXhpbXVtIHZhbHVlIG9mIGEgcHVueWNvZGVfdWludCB2YXJpYWJsZTogKi8KK3N0YXRpYyBj
b25zdCBwdW55Y29kZV91aW50IG1heGludCA9IC0xOworLyogQmVjYXVzZSBtYXhpbnQgaXMgdW5z
aWduZWQsIC0xIGJlY29tZXMgdGhlIG1heGltdW0gdmFsdWUuICovCisKKy8qKiogQmlhcyBhZGFw
dGF0aW9uIGZ1bmN0aW9uICoqKi8KKworc3RhdGljIHB1bnljb2RlX3VpbnQgYWRhcHQoCisgICAg
cHVueWNvZGVfdWludCBkZWx0YSwgcHVueWNvZGVfdWludCBudW1wb2ludHMsIGludCBmaXJzdHRp
bWUgKQoreworICAgIHB1bnljb2RlX3VpbnQgazsKKworICAgIGRlbHRhID0gZmlyc3R0aW1lID8g
ZGVsdGEgLyBkYW1wIDogZGVsdGEgPj4gMTsKKyAgICAvKiBkZWx0YSA+PiAxIGlzIGEgZmFzdGVy
IHdheSBvZiBkb2luZyBkZWx0YSAvIDIgKi8KKyAgICBkZWx0YSArPSBkZWx0YSAvIG51bXBvaW50
czsKKworICAgIGZvciAoayA9IDA7ICBkZWx0YSA+ICgoYmFzZSAtIHRtaW4pICogdG1heCkgLyAy
OyAgayArPSBiYXNlKQorICAgICAgICBkZWx0YSAvPSBiYXNlIC0gdG1pbjsKKworICAgIHJldHVy
biBrICsgKGJhc2UgLSB0bWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpOworfQorCisv
KioqIE1haW4gZW5jb2RlIGZ1bmN0aW9uICoqKi8KKworZW51bSBwdW55Y29kZV9zdGF0dXMgcHVu
eWNvZGVfZW5jb2RlKAorICAgIHB1bnljb2RlX3VpbnQgaW5wdXRfbGVuZ3RoLAorICAgIGNvbnN0
IHB1bnljb2RlX3VpbnQgaW5wdXRbXSwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNhc2VfZmxh
Z3NbXSwKKyAgICBwdW55Y29kZV91aW50ICpvdXRwdXRfbGVuZ3RoLAorICAgIGNoYXIgb3V0cHV0
W10gKQoreworICAgIHB1bnljb2RlX3VpbnQgbiwgZGVsdGEsIGgsIGIsIG91dCwgbWF4X291dCwg
YmlhcywgaiwgbSwgcSwgaywgdDsKKworICAgIC8qIEluaXRpYWxpemUgdGhlIHN0YXRlOiAqLwor
CisgICAgbiA9IGluaXRpYWxfbjsKKyAgICBkZWx0YSA9IG91dCA9IDA7CisgICAgbWF4X291dCA9
ICpvdXRwdXRfbGVuZ3RoOworICAgIGJpYXMgPSBpbml0aWFsX2JpYXM7CisKKyAgICAvKiBIYW5k
bGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiAqLworICAgIGZvciAoaiA9IDA7ICBqIDwgaW5wdXRf
bGVuZ3RoOyAgKytqKSB7CisgICAgICAgIGlmIChiYXNpYyhpbnB1dFtqXSkpIHsKKyAgICAgICAg
ICAgIGlmIChtYXhfb3V0IC0gb3V0IDwgMikgcmV0dXJuIHB1bnljb2RlX2JpZ19vdXRwdXQ7Cisg
ICAgICAgICAgICBvdXRwdXRbb3V0KytdID0KKyAgICAgICAgICAgICAgICBjYXNlX2ZsYWdzID8g
IGVuY29kZV9iYXNpYyhpbnB1dFtqXSwgY2FzZV9mbGFnc1tqXSkgOiBpbnB1dFtqXTsKKyAgICAg
ICAgfQorICAgICAgICAvKiBlbHNlIGlmIChpbnB1dFtqXSA8IG4pIHJldHVybiBwdW55Y29kZV9i
YWRfaW5wdXQ7ICovCisgICAgICAgIC8qIChub3QgbmVlZGVkIGZvciBQdW55Y29kZSB3aXRoIHVu
c2lnbmVkIGNvZGUgcG9pbnRzKSAqLworICAgIH0KKworICAgIGggPSBiID0gb3V0OworCisgICAg
LyogaCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQs
IGIgaXMgdGhlICAqLworICAgIC8qIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cywgYW5kIG91
dCBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKi8KKyAgICAvKiB0aGF0IGhhdmUgYmVlbiBv
dXRwdXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAg
ICBpZiAoYiA+IDApIG91dHB1dFtvdXQrK10gPSBkZWxpbWl0ZXI7CisKKyAgICAvKiBNYWluIGVu
Y29kaW5nIGxvb3A6ICovCisKKyAgICB3aGlsZSAoaCA8IGlucHV0X2xlbmd0aCkgeworICAgICAg
ICAvKiBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gICAgICovCisgICAg
ICAgIC8qIGhhbmRsZWQgYWxyZWFkeS4gIEZpbmQgdGhlIG5leHQgbGFyZ2VyIG9uZTogKi8KKwor
ICAgICAgICBmb3IgKG0gPSBtYXhpbnQsIGogPSAwOyAgaiA8IGlucHV0X2xlbmd0aDsgICsraikg
eworICAgICAgICAgICAgLyogaWYgKGJhc2ljKGlucHV0W2pdKSkgY29udGludWU7ICovCisgICAg
ICAgICAgICAvKiAobm90IG5lZWRlZCBmb3IgUHVueWNvZGUpICovCisgICAgICAgICAgICBpZiAo
aW5wdXRbal0gPj0gbiAmJiBpbnB1dFtqXSA8IG0pIG0gPSBpbnB1dFtqXTsKKyAgICAgICAgfQor
CisgICAgICAgIC8qIEluY3JlYXNlIGRlbHRhIGVub3VnaCB0byBhZHZhbmNlIHRoZSBkZWNvZGVy
J3MgICAgKi8KKyAgICAgICAgLyogPG4saT4gc3RhdGUgdG8gPG0sMD4sIGJ1dCBndWFyZCBhZ2Fp
bnN0IG92ZXJmbG93OiAqLworCisgICAgICAgIGlmIChtIC0gbiA+IChtYXhpbnQgLSBkZWx0YSkg
LyAoaCArIDEpKSByZXR1cm4gcHVueWNvZGVfb3ZlcmZsb3c7CisgICAgICAgIGRlbHRhICs9ICht
IC0gbikgKiAoaCArIDEpOworICAgICAgICBuID0gbTsKKworICAgICAgICBmb3IgKGogPSAwOyAg
aiA8IGlucHV0X2xlbmd0aDsgICsraikgeworICAgICAgICAgICAgLyogUHVueWNvZGUgZG9lcyBu
b3QgbmVlZCB0byBjaGVjayB3aGV0aGVyIGlucHV0W2pdIGlzIGJhc2ljOiAqLworICAgICAgICAg
ICAgaWYgKGlucHV0W2pdIDwgbiAvKiB8fCBiYXNpYyhpbnB1dFtqXSkgKi8gKQorICAgICAgICAg
ICAgICAgIGlmICgrK2RlbHRhID09IDApIHJldHVybiBwdW55Y29kZV9vdmVyZmxvdzsKKworICAg
ICAgICAgICAgaWYgKGlucHV0W2pdID09IG4pIHsKKyAgICAgICAgICAgICAgICAvKiBSZXByZXNl
bnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlcjogKi8KKwor
ICAgICAgICAgICAgICAgIGZvciAocSA9IGRlbHRhLCBrID0gYmFzZTsgIDsgIGsgKz0gYmFzZSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAob3V0ID49IG1heF9vdXQpIHJldHVybiBwdW55Y29k
ZV9iaWdfb3V0cHV0OworICAgICAgICAgICAgICAgICAgICB0ID0gayA8PSBiaWFzIC8qICsgdG1p
biAqLyA/IHRtaW4gOiAgICAgLyogK3RtaW4gbm90IG5lZWRlZCAqLworICAgICAgICAgICAgICAg
ICAgICAgICAgayA+PSBiaWFzICsgdG1heCA/IHRtYXggOiBrIC0gYmlhczsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHEgPCB0KSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0W291
dCsrXSA9IGVuY29kZV9kaWdpdCh0ICsgKHEgLSB0KSAlIChiYXNlIC0gdCksIDApOworICAgICAg
ICAgICAgICAgICAgICBxID0gKHEgLSB0KSAvIChiYXNlIC0gdCk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgb3V0cHV0W291dCsrXSA9IGVuY29kZV9kaWdpdChxLCBjYXNl
X2ZsYWdzICYmIGNhc2VfZmxhZ3Nbal0pOworICAgICAgICAgICAgICAgIGJpYXMgPSBhZGFwdChk
ZWx0YSwgaCArIDEsIGggPT0gYik7CisgICAgICAgICAgICAgICAgZGVsdGEgPSAwOworICAgICAg
ICAgICAgICAgICsraDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICsrZGVs
dGEsICsrbjsKKyAgICB9CisKKyAgICAqb3V0cHV0X2xlbmd0aCA9IG91dDsKKyAgICByZXR1cm4g
cHVueWNvZGVfc3VjY2VzczsKK30KKworLyoqKiBNYWluIGRlY29kZSBmdW5jdGlvbiAqKiovCisK
K2VudW0gcHVueWNvZGVfc3RhdHVzIHB1bnljb2RlX2RlY29kZSgKKyAgICBwdW55Y29kZV91aW50
IGlucHV0X2xlbmd0aCwKKyAgICBjb25zdCBjaGFyIGlucHV0W10sCisgICAgcHVueWNvZGVfdWlu
dCAqb3V0cHV0X2xlbmd0aCwKKyAgICBwdW55Y29kZV91aW50IG91dHB1dFtdLAorICAgIHVuc2ln
bmVkIGNoYXIgY2FzZV9mbGFnc1tdICkKK3sKKyAgICBwdW55Y29kZV91aW50IG4sIG91dCwgaSwg
bWF4X291dCwgYmlhcywKKyAgICAgICAgICAgICAgICAgICAgYiwgaiwgaW4sIG9sZGksIHcsIGss
IGRpZ2l0LCB0OworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgc3RhdGU6ICovCisKKyAgICBuID0g
aW5pdGlhbF9uOworICAgIG91dCA9IGkgPSAwOworICAgIG1heF9vdXQgPSAqb3V0cHV0X2xlbmd0
aDsKKyAgICBiaWFzID0gaW5pdGlhbF9iaWFzOworCisgICAgLyogSGFuZGxlIHRoZSBiYXNpYyBj
b2RlIHBvaW50czogIExldCBiIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZSAqLworICAgIC8q
IHBvaW50cyBiZWZvcmUgdGhlIGxhc3QgZGVsaW1pdGVyLCBvciAwIGlmIHRoZXJlIGlzIG5vbmUs
IHRoZW4gICAgKi8KKyAgICAvKiBjb3B5IHRoZSBmaXJzdCBiIGNvZGUgcG9pbnRzIHRvIHRoZSBv
dXRwdXQuICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBmb3IgKGIgPSBqID0gMDsgIGog
PCBpbnB1dF9sZW5ndGg7ICArK2opIGlmIChkZWxpbShpbnB1dFtqXSkpIGIgPSBqOworICAgIGlm
IChiID4gbWF4X291dCkgcmV0dXJuIHB1bnljb2RlX2JpZ19vdXRwdXQ7CisKKyAgICBmb3IgKGog
PSAwOyAgaiA8IGI7ICArK2opIHsKKyAgICAgICAgaWYgKGNhc2VfZmxhZ3MpIGNhc2VfZmxhZ3Nb
b3V0XSA9IGZsYWdnZWQoaW5wdXRbal0pOworICAgICAgICBpZiAoIWJhc2ljKGlucHV0W2pdKSkg
cmV0dXJuIHB1bnljb2RlX2JhZF9pbnB1dDsKKyAgICAgICAgb3V0cHV0W291dCsrXSA9IGlucHV0
W2pdOworICAgIH0KKworICAgIC8qIE1haW4gZGVjb2RpbmcgbG9vcDogIFN0YXJ0IGp1c3QgYWZ0
ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSAgKi8KKyAgICAvKiBiYXNpYyBjb2RlIHBvaW50
cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuICovCisKKyAg
ICBmb3IgKGluID0gYiA+IDAgPyBiICsgMSA6IDA7ICBpbiA8IGlucHV0X2xlbmd0aDsgICsrb3V0
KSB7CisKKyAgICAgICAgLyogaW4gaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0
byBiZSBjb25zdW1lZCwgYW5kICovCisgICAgICAgIC8qIG91dCBpcyB0aGUgbnVtYmVyIG9mIGNv
ZGUgcG9pbnRzIGluIHRoZSBvdXRwdXQgYXJyYXkuICAgICAqLworCisgICAgICAgIC8qIERlY29k
ZSBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyIGludG8gZGVsdGEsICAqLwor
ICAgICAgICAvKiB3aGljaCBnZXRzIGFkZGVkIHRvIGkuICBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcg
aXMgZWFzaWVyICAgKi8KKyAgICAgICAgLyogaWYgd2UgaW5jcmVhc2UgaSBhcyB3ZSBnbywgdGhl
biBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nICovCisgICAgICAgIC8qIHZhbHVlIGF0IHRoZSBl
bmQgdG8gb2J0YWluIGRlbHRhLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAg
IGZvciAob2xkaSA9IGksIHcgPSAxLCBrID0gYmFzZTsgIDsgIGsgKz0gYmFzZSkgeworICAgICAg
ICAgICAgaWYgKGluID49IGlucHV0X2xlbmd0aCkgcmV0dXJuIHB1bnljb2RlX2JhZF9pbnB1dDsK
KyAgICAgICAgICAgIGRpZ2l0ID0gZGVjb2RlX2RpZ2l0KGlucHV0W2luKytdKTsKKyAgICAgICAg
ICAgIGlmIChkaWdpdCA+PSBiYXNlKSByZXR1cm4gcHVueWNvZGVfYmFkX2lucHV0OworICAgICAg
ICAgICAgaWYgKGRpZ2l0ID4gKG1heGludCAtIGkpIC8gdykgcmV0dXJuIHB1bnljb2RlX292ZXJm
bG93OworICAgICAgICAgICAgaSArPSBkaWdpdCAqIHc7CisgICAgICAgICAgICB0ID0gayA8PSBi
aWFzIC8qICsgdG1pbiAqLyA/IHRtaW4gOiAgICAgLyogK3RtaW4gbm90IG5lZWRlZCAqLworICAg
ICAgICAgICAgICAgIGsgPj0gYmlhcyArIHRtYXggPyB0bWF4IDogayAtIGJpYXM7CisgICAgICAg
ICAgICBpZiAoZGlnaXQgPCB0KSBicmVhazsKKyAgICAgICAgICAgIGlmICh3ID4gbWF4aW50IC8g
KGJhc2UgLSB0KSkgcmV0dXJuIHB1bnljb2RlX292ZXJmbG93OworICAgICAgICAgICAgdyAqPSAo
YmFzZSAtIHQpOworICAgICAgICB9CisKKyAgICAgICAgYmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBv
dXQgKyAxLCBvbGRpID09IDApOworCisgICAgICAgIC8qIGkgd2FzIHN1cHBvc2VkIHRvIHdyYXAg
YXJvdW5kIGZyb20gb3V0KzEgdG8gMCwgICAqLworICAgICAgICAvKiBpbmNyZW1lbnRpbmcgbiBl
YWNoIHRpbWUsIHNvIHdlJ2xsIGZpeCB0aGF0IG5vdzogKi8KKworICAgICAgICBpZiAoaSAvIChv
dXQgKyAxKSA+IG1heGludCAtIG4pIHJldHVybiBwdW55Y29kZV9vdmVyZmxvdzsKKyAgICAgICAg
biArPSBpIC8gKG91dCArIDEpOworICAgICAgICBpICU9IChvdXQgKyAxKTsKKworICAgICAgICAv
KiBJbnNlcnQgbiBhdCBwb3NpdGlvbiBpIG9mIHRoZSBvdXRwdXQ6ICovCisKKyAgICAgICAgLyog
bm90IG5lZWRlZCBmb3IgUHVueWNvZGU6ICovCisgICAgICAgIC8qIGlmIChkZWNvZGVfZGlnaXQo
bikgPD0gYmFzZSkgcmV0dXJuIHB1bnljb2RlX2ludmFsaWRfaW5wdXQ7ICovCisgICAgICAgIGlm
IChvdXQgPj0gbWF4X291dCkgcmV0dXJuIHB1bnljb2RlX2JpZ19vdXRwdXQ7CisKKyAgICAgICAg
aWYgKGNhc2VfZmxhZ3MpIHsKKyAgICAgICAgICAgIG1lbW1vdmUoY2FzZV9mbGFncyArIGkgKyAx
LCBjYXNlX2ZsYWdzICsgaSwgb3V0IC0gaSk7CisgICAgICAgICAgICAvKiBDYXNlIG9mIGxhc3Qg
Y2hhcmFjdGVyIGRldGVybWluZXMgdXBwZXJjYXNlIGZsYWc6ICovCisgICAgICAgICAgICBjYXNl
X2ZsYWdzW2ldID0gZmxhZ2dlZChpbnB1dFtpbiAtIDFdKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1lbW1vdmUob3V0cHV0ICsgaSArIDEsIG91dHB1dCArIGksIChvdXQgLSBpKSAqIHNpemVvZiAq
b3V0cHV0KTsKKyAgICAgICAgb3V0cHV0W2krK10gPSBuOworICAgIH0KKworICAgICpvdXRwdXRf
bGVuZ3RoID0gb3V0OworICAgIHJldHVybiBwdW55Y29kZV9zdWNjZXNzOworfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbmNlL3B1bnljb2RlLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvd2luY2UvcHVueWNvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45OTQ1ODY5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3dpbmNlL3B1bnljb2RlLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpIHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHB1bnljb2RlX2gKKyNkZWZpbmUg
cHVueWNvZGVfaAorCisvKgorcHVueWNvZGUuYyBmcm9tIFJGQyAzNDkyCitodHRwOi8vd3d3Lm5p
Y2VtaWNlLm5ldC9pZG4vCitBZGFtIE0uIENvc3RlbGxvCitodHRwOi8vd3d3Lm5pY2VtaWNlLm5l
dC9hbWMvCisKK1RoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkgaW1wbGVtZW50aW5nIFB1bnljb2Rl
IChSRkMgMzQ5MikuCisKK0Zyb20gdGhlIFJGQzogZnRwOi8vZnRwLnJmYy1lZGl0b3Iub3JnL2lu
LW5vdGVzL3JmYzM0OTIudHh0CisKK0IuIERpc2NsYWltZXIgYW5kIGxpY2Vuc2UKKworICAgUmVn
YXJkaW5nIHRoaXMgZW50aXJlIGRvY3VtZW50IG9yIGFueSBwb3J0aW9uIG9mIGl0IChpbmNsdWRp
bmcgdGhlCisgICBwc2V1ZG9jb2RlIGFuZCBDIGNvZGUpLCB0aGUgYXV0aG9yIG1ha2VzIG5vIGd1
YXJhbnRlZXMgYW5kIGlzIG5vdAorICAgcmVzcG9uc2libGUgZm9yIGFueSBkYW1hZ2UgcmVzdWx0
aW5nIGZyb20gaXRzIHVzZS4gIFRoZSBhdXRob3IgZ3JhbnRzCisgICBpcnJldm9jYWJsZSBwZXJt
aXNzaW9uIHRvIGFueW9uZSB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgaXQgaW4KKyAg
IGFueSB3YXkgdGhhdCBkb2VzIG5vdCBkaW1pbmlzaCB0aGUgcmlnaHRzIG9mIGFueW9uZSBlbHNl
IHRvIHVzZSwKKyAgIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgaXQsIHByb3ZpZGVkIHRoYXQgcmVk
aXN0cmlidXRlZCBkZXJpdmF0aXZlCisgICB3b3JrcyBkbyBub3QgY29udGFpbiBtaXNsZWFkaW5n
IGF1dGhvciBvciB2ZXJzaW9uIGluZm9ybWF0aW9uLgorICAgRGVyaXZhdGl2ZSB3b3JrcyBuZWVk
IG5vdCBiZSBsaWNlbnNlZCB1bmRlciBzaW1pbGFyIHRlcm1zLgorKi8KKworLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFB1
YmxpYyBpbnRlcmZhY2UgKHdvdWxkIG5vcm1hbGx5IGdvIGluIGl0cyBvd24gLmggZmlsZSk6ICov
CisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMi
IHsKKyNlbmRpZgorCitlbnVtIHB1bnljb2RlX3N0YXR1cyB7CisgICAgcHVueWNvZGVfc3VjY2Vz
cywKKyAgICBwdW55Y29kZV9iYWRfaW5wdXQsICAgLyogSW5wdXQgaXMgaW52YWxpZC4gICAgICAg
ICAgICAgICAgICAgICAgICovCisgICAgcHVueWNvZGVfYmlnX291dHB1dCwgIC8qIE91dHB1dCB3
b3VsZCBleGNlZWQgdGhlIHNwYWNlIHByb3ZpZGVkLiAqLworICAgIHB1bnljb2RlX292ZXJmbG93
ICAgICAvKiBJbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzLiAgKi8KK307CisK
KyNpZiBVSU5UX01BWCA+PSAoMSA8PCAyNikgLSAxCit0eXBlZGVmIHVuc2lnbmVkIGludCBwdW55
Y29kZV91aW50OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwdW55Y29kZV91aW50Owor
I2VuZGlmCisKK2VudW0gcHVueWNvZGVfc3RhdHVzIHB1bnljb2RlX2VuY29kZSgKKyAgICBwdW55
Y29kZV91aW50IGlucHV0X2xlbmd0aCwKKyAgICBjb25zdCBwdW55Y29kZV91aW50IGlucHV0W10s
CisgICAgY29uc3QgdW5zaWduZWQgY2hhciBjYXNlX2ZsYWdzW10sCisgICAgcHVueWNvZGVfdWlu
dCAqb3V0cHV0X2xlbmd0aCwKKyAgICBjaGFyIG91dHB1dFtdKTsKKworICAgIC8qIHB1bnljb2Rl
X2VuY29kZSgpIGNvbnZlcnRzIFVuaWNvZGUgdG8gUHVueWNvZGUuICBUaGUgaW5wdXQgICAgICov
CisgICAgLyogaXMgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgb2YgVW5pY29kZSBjb2RlIHBvaW50
cyAobm90IGNvZGUgICAgKi8KKyAgICAvKiB1bml0czsgc3Vycm9nYXRlIHBhaXJzIGFyZSBub3Qg
YWxsb3dlZCksIGFuZCB0aGUgb3V0cHV0ICAgICAgICAqLworICAgIC8qIHdpbGwgYmUgcmVwcmVz
ZW50ZWQgYXMgYW4gYXJyYXkgb2YgQVNDSUkgY29kZSBwb2ludHMuICBUaGUgICAgICovCisgICAg
Lyogb3V0cHV0IHN0cmluZyBpcyAqbm90KiBudWxsLXRlcm1pbmF0ZWQ7IGl0IHdpbGwgY29udGFp
biAgICAgICAgKi8KKyAgICAvKiB6ZXJvcyBpZiBhbmQgb25seSBpZiB0aGUgaW5wdXQgY29udGFp
bnMgemVyb3MuICAoT2YgY291cnNlICAgICAqLworICAgIC8qIHRoZSBjYWxsZXIgY2FuIGxlYXZl
IHJvb20gZm9yIGEgdGVybWluYXRvciBhbmQgYWRkIG9uZSBpZiAgICAgICovCisgICAgLyogbmVl
ZGVkLikgIFRoZSBpbnB1dF9sZW5ndGggaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyBpbiAg
ICAgKi8KKyAgICAvKiB0aGUgaW5wdXQuICBUaGUgb3V0cHV0X2xlbmd0aCBpcyBhbiBpbi9vdXQg
YXJndW1lbnQ6IHRoZSAgICAgICAqLworICAgIC8qIGNhbGxlciBwYXNzZXMgaW4gdGhlIG1heGlt
dW0gbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaXQgICAgICovCisgICAgLyogY2FuIHJlY2Vp
dmUsIGFuZCBvbiBzdWNjZXNzZnVsIHJldHVybiBpdCB3aWxsIGNvbnRhaW4gdGhlICAgICAgKi8K
KyAgICAvKiBudW1iZXIgb2YgY29kZSBwb2ludHMgYWN0dWFsbHkgb3V0cHV0LiAgVGhlIGNhc2Vf
ZmxhZ3MgYXJyYXkgICAqLworICAgIC8qIGhvbGRzIGlucHV0X2xlbmd0aCBib29sZWFuIHZhbHVl
cywgd2hlcmUgbm9uemVybyBzdWdnZXN0cyB0aGF0ICovCisgICAgLyogdGhlIGNvcnJlc3BvbmRp
bmcgVW5pY29kZSBjaGFyYWN0ZXIgYmUgZm9yY2VkIHRvIHVwcGVyY2FzZSAgICAgKi8KKyAgICAv
KiBhZnRlciBiZWluZyBkZWNvZGVkIChpZiBwb3NzaWJsZSksIGFuZCB6ZXJvIHN1Z2dlc3RzIHRo
YXQgICAgICAqLworICAgIC8qIGl0IGJlIGZvcmNlZCB0byBsb3dlcmNhc2UgKGlmIHBvc3NpYmxl
KS4gIEFTQ0lJIGNvZGUgcG9pbnRzICAgICovCisgICAgLyogYXJlIGVuY29kZWQgbGl0ZXJhbGx5
LCBleGNlcHQgdGhhdCBBU0NJSSBsZXR0ZXJzIGFyZSBmb3JjZWQgICAgKi8KKyAgICAvKiB0byB1
cHBlcmNhc2Ugb3IgbG93ZXJjYXNlIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyAgICAg
ICAqLworICAgIC8qIHVwcGVyY2FzZSBmbGFncy4gIElmIGNhc2VfZmxhZ3MgaXMgYSBudWxsIHBv
aW50ZXIgdGhlbiBBU0NJSSAgICovCisgICAgLyogbGV0dGVycyBhcmUgbGVmdCBhcyB0aGV5IGFy
ZSwgYW5kIG90aGVyIGNvZGUgcG9pbnRzIGFyZSAgICAgICAgKi8KKyAgICAvKiB0cmVhdGVkIGFz
IGlmIHRoZWlyIHVwcGVyY2FzZSBmbGFncyB3ZXJlIHplcm8uICBUaGUgcmV0dXJuICAgICAqLwor
ICAgIC8qIHZhbHVlIGNhbiBiZSBhbnkgb2YgdGhlIHB1bnljb2RlX3N0YXR1cyB2YWx1ZXMgZGVm
aW5lZCBhYm92ZSAgICovCisgICAgLyogZXhjZXB0IHB1bnljb2RlX2JhZF9pbnB1dDsgaWYgbm90
IHB1bnljb2RlX3N1Y2Nlc3MsIHRoZW4gICAgICAgKi8KKyAgICAvKiBvdXRwdXRfc2l6ZSBhbmQg
b3V0cHV0IG1pZ2h0IGNvbnRhaW4gZ2FyYmFnZS4gICAgICAgICAgICAgICAgICAqLworCitlbnVt
IHB1bnljb2RlX3N0YXR1cyBwdW55Y29kZV9kZWNvZGUoCisgICAgcHVueWNvZGVfdWludCBpbnB1
dF9sZW5ndGgsCisgICAgY29uc3QgY2hhciBpbnB1dFtdLAorICAgIHB1bnljb2RlX3VpbnQgKm91
dHB1dF9sZW5ndGgsCisgICAgcHVueWNvZGVfdWludCBvdXRwdXRbXSwKKyAgICB1bnNpZ25lZCBj
aGFyIGNhc2VfZmxhZ3NbXSk7CisKKyAgICAvKiBwdW55Y29kZV9kZWNvZGUoKSBjb252ZXJ0cyBQ
dW55Y29kZSB0byBVbmljb2RlLiAgVGhlIGlucHV0IGlzICAqLworICAgIC8qIHJlcHJlc2VudGVk
IGFzIGFuIGFycmF5IG9mIEFTQ0lJIGNvZGUgcG9pbnRzLCBhbmQgdGhlIG91dHB1dCAgICovCisg
ICAgLyogd2lsbCBiZSByZXByZXNlbnRlZCBhcyBhbiBhcnJheSBvZiBVbmljb2RlIGNvZGUgcG9p
bnRzLiAgVGhlICAgKi8KKyAgICAvKiBpbnB1dF9sZW5ndGggaXMgdGhlIG51bWJlciBvZiBjb2Rl
IHBvaW50cyBpbiB0aGUgaW5wdXQuICBUaGUgICAqLworICAgIC8qIG91dHB1dF9sZW5ndGggaXMg
YW4gaW4vb3V0IGFyZ3VtZW50OiB0aGUgY2FsbGVyIHBhc3NlcyBpbiAgICAgICovCisgICAgLyog
dGhlIG1heGltdW0gbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaXQgY2FuIHJlY2VpdmUsIGFu
ZCAgICAgKi8KKyAgICAvKiBvbiBzdWNjZXNzZnVsIHJldHVybiBpdCB3aWxsIGNvbnRhaW4gdGhl
IGFjdHVhbCBudW1iZXIgb2YgICAgICAqLworICAgIC8qIGNvZGUgcG9pbnRzIG91dHB1dC4gIFRo
ZSBjYXNlX2ZsYWdzIGFycmF5IG5lZWRzIHJvb20gZm9yIGF0ICAgICovCisgICAgLyogbGVhc3Qg
b3V0cHV0X2xlbmd0aCB2YWx1ZXMsIG9yIGl0IGNhbiBiZSBhIG51bGwgcG9pbnRlciBpZiB0aGUg
Ki8KKyAgICAvKiBjYXNlIGluZm9ybWF0aW9uIGlzIG5vdCBuZWVkZWQuICBBIG5vbnplcm8gZmxh
ZyBzdWdnZXN0cyB0aGF0ICAqLworICAgIC8qIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hh
cmFjdGVyIGJlIGZvcmNlZCB0byB1cHBlcmNhc2UgICAgICovCisgICAgLyogYnkgdGhlIGNhbGxl
ciAoaWYgcG9zc2libGUpLCB3aGlsZSB6ZXJvIHN1Z2dlc3RzIHRoYXQgaXQgYmUgICAgKi8KKyAg
ICAvKiBmb3JjZWQgdG8gbG93ZXJjYXNlIChpZiBwb3NzaWJsZSkuICBBU0NJSSBjb2RlIHBvaW50
cyBhcmUgICAgICAqLworICAgIC8qIG91dHB1dCBhbHJlYWR5IGluIHRoZSBwcm9wZXIgY2FzZSwg
YnV0IHRoZWlyIGZsYWdzIHdpbGwgYmUgc2V0ICovCisgICAgLyogYXBwcm9wcmlhdGVseSBzbyB0
aGF0IGFwcGx5aW5nIHRoZSBmbGFncyB3b3VsZCBiZSBoYXJtbGVzcy4gICAgKi8KKyAgICAvKiBU
aGUgcmV0dXJuIHZhbHVlIGNhbiBiZSBhbnkgb2YgdGhlIHB1bnljb2RlX3N0YXR1cyB2YWx1ZXMg
ICAgICAqLworICAgIC8qIGRlZmluZWQgYWJvdmU7IGlmIG5vdCBwdW55Y29kZV9zdWNjZXNzLCB0
aGVuIG91dHB1dF9sZW5ndGgsICAgICovCisgICAgLyogb3V0cHV0LCBhbmQgY2FzZV9mbGFncyBt
aWdodCBjb250YWluIGdhcmJhZ2UuICBPbiBzdWNjZXNzLCB0aGUgKi8KKyAgICAvKiBkZWNvZGVy
IHdpbGwgbmV2ZXIgbmVlZCB0byB3cml0ZSBhbiBvdXRwdXRfbGVuZ3RoIGdyZWF0ZXIgdGhhbiAq
LworICAgIC8qIGlucHV0X2xlbmd0aCwgYmVjYXVzZSBvZiBob3cgdGhlIGVuY29kaW5nIGlzIGRl
ZmluZWQuICAgICAgICAgICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNl
bmRpZiAvLyBQVU5ZQ09ERV9ICg==
</data>
<flag name="review"
          id="17521"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62436</attachid>
            <date>2010-07-23 09:52:01 -0700</date>
            <delta_ts>2010-07-23 10:09:31 -0700</delta_ts>
            <desc>Complete reimplementation of ResourceHandleWin</desc>
            <filename>bug-27376.patch</filename>
            <type>text/plain</type>
            <size>39146</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDYzOTg0KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDQ2IEBADQorMjAxMC0wNy0yMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJv
Z2FAcGFyb2dhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbV0lOQ0VdIEFkZCBXaW5DRSBzcGVjaWZpYyBmaWxlcyBmb3IgcGxhdGZvcm0vbmV0
d29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjcz
NzYKKworICAgICAgICBSZWltcGxlbWVudCB0aGUgd2hvbGUgUmVzb3VyY2VIYW5kbGVXaW4gdG8g
d29yayBvbiBXaW5DRS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OlJlc291cmNlSGFu
ZGxlSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFu
ZGxlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludGVybmV0SGFuZGxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFzeW5jaHJvbm91c0ludGVybmV0SGFuZGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6aW50ZXJuZXRIYW5kbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpXZWJDb3JlU3luY2hyb25vdXNM
b2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjp+V2Vi
Q29yZVN5bmNocm9ub3VzTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJv
bm91c0xvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNv
cmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhbGxPblJlZGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxPblJl
cXVlc3RDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6aW50ZXJu
ZXRTdGF0dXNDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6b25S
ZWRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6b25SZXF1ZXN0Q29t
cGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnF1ZXJ5SFRUUEhlYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmZpbGVMb2FkVGltZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZTo6c2V0U3luY2hyb25vdXNJbnRlcm5ldEhhbmRsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6cHJlZmV0Y2hETlMpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmJ1ZmZl
cmVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3VwcG9ydHNCdWZm
ZXJlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRzQmxvY2tl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZlcnNM
b2FkaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdp
bi5oOiBSZW1vdmVkLgorCiAyMDEwLTA3LTIzICBKdXN0aW4gU2NodWggIDxqc2NodWhAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI2MzkyNS4KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDYy
NTQ3KQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCSh3b3Jr
aW5nIGNvcHkpDQpAQCAtNDUsMTEgKzQ1LDYgQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIERXT1JE
Ow0KIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBEV09SRF9QVFI7DQogdHlwZWRlZiB2b2lkKiBMUFZP
SUQ7DQogdHlwZWRlZiBMUFZPSUQgSElOVEVSTkVUOw0KLXR5cGVkZWYgdW5zaWduZWQgV1BBUkFN
Ow0KLXR5cGVkZWYgbG9uZyBMUEFSQU07DQotdHlwZWRlZiBzdHJ1Y3QgSFdORF9fKiBIV05EOw0K
LXR5cGVkZWYgX1c2NCBsb25nIExPTkdfUFRSOw0KLXR5cGVkZWYgTE9OR19QVFIgTFJFU1VMVDsN
CiAjZW5kaWYNCiANCiANCkBAIC0xNjcsMTQgKzE2MiwxMyBAQCBwdWJsaWM6DQogICAgIHN0YXRp
YyB2b2lkIGZvcmNlQ29udGVudFNuaWZmaW5nKCk7DQogDQogI2lmIFVTRShXSU5JTkVUKQ0KLSAg
ICB2b2lkIHNldEhhc1JlY2VpdmVkUmVzcG9uc2UoYm9vbCA9IHRydWUpOw0KLSAgICBib29sIGhh
c1JlY2VpdmVkUmVzcG9uc2UoKSBjb25zdDsNCisgICAgdm9pZCBzZXRTeW5jaHJvbm91c0ludGVy
bmV0SGFuZGxlKEhJTlRFUk5FVCk7DQorICAgIEhJTlRFUk5FVCBpbnRlcm5ldEhhbmRsZSgpIGNv
bnN0Ow0KKyAgICB2b2lkIG9uUmVkaXJlY3QoKTsNCisgICAgYm9vbCBvblJlcXVlc3RDb21wbGV0
ZSgpOw0KICAgICB2b2lkIGZpbGVMb2FkVGltZXIoVGltZXI8UmVzb3VyY2VIYW5kbGU+Kik7DQot
ICAgIHZvaWQgb25IYW5kbGVDcmVhdGVkKExQQVJBTSk7DQotICAgIHZvaWQgb25SZXF1ZXN0UmVk
aXJlY3RlZChMUEFSQU0pOw0KLSAgICB2b2lkIG9uUmVxdWVzdENvbXBsZXRlKExQQVJBTSk7DQot
ICAgIGZyaWVuZCB2b2lkIF9fc3RkY2FsbCB0cmFuc2ZlckpvYlN0YXR1c0NhbGxiYWNrKEhJTlRF
Uk5FVCwgRFdPUkRfUFRSLCBEV09SRCwgTFBWT0lELCBEV09SRCk7DQotICAgIGZyaWVuZCBMUkVT
VUxUIF9fc3RkY2FsbCBSZXNvdXJjZUhhbmRsZVduZFByb2MoSFdORCwgdW5zaWduZWQgbWVzc2Fn
ZSwgV1BBUkFNLCBMUEFSQU0pOw0KKyAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyBpbnRlcm5ldFN0
YXR1c0NhbGxiYWNrKEhJTlRFUk5FVCwgRFdPUkRfUFRSLCBEV09SRCwgTFBWT0lELCBEV09SRCk7
DQorICAgIFN0cmluZyBxdWVyeUhUVFBIZWFkZXIoRFdPUkQgaW5mb0xldmVsKTsNCiAjZW5kaWYN
CiANCiAjaWYgUExBVEZPUk0oUVQpIHx8IFVTRShDVVJMKSB8fCBVU0UoU09VUCkgfHwgUExBVEZP
Uk0oQU5EUk9JRCkNCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlSGFuZGxlSW50ZXJuYWwuaAkocmV2aXNpb24gNjI1NDcpDQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQ0KQEAg
LTkyLDE4ICs5MiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7DQogICAgICAgICAgICAgLCBtX2Nv
bm5lY3Rpb24oMCkNCiAjZW5kaWYNCiAjaWYgVVNFKFdJTklORVQpDQotICAgICAgICAgICAgLCBt
X2ZpbGVIYW5kbGUoSU5WQUxJRF9IQU5ETEVfVkFMVUUpDQogICAgICAgICAgICAgLCBtX2ZpbGVM
b2FkVGltZXIobG9hZGVyLCAmUmVzb3VyY2VIYW5kbGU6OmZpbGVMb2FkVGltZXIpDQotICAgICAg
ICAgICAgLCBtX3Jlc291cmNlSGFuZGxlKDApDQotICAgICAgICAgICAgLCBtX3NlY29uZGFyeUhh
bmRsZSgwKQ0KLSAgICAgICAgICAgICwgbV9qb2JJZCgwKQ0KLSAgICAgICAgICAgICwgbV90aHJl
YWRJZCgwKQ0KLSAgICAgICAgICAgICwgbV93cml0aW5nKGZhbHNlKQ0KLSAgICAgICAgICAgICwg
bV9mb3JtRGF0YVN0cmluZygwKQ0KLSAgICAgICAgICAgICwgbV9mb3JtRGF0YUxlbmd0aCgwKQ0K
LSAgICAgICAgICAgICwgbV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUoMCkNCisgICAgICAgICAgICAs
IG1faW50ZXJuZXRIYW5kbGUoMCkNCisgICAgICAgICAgICAsIG1fY29ubmVjdEhhbmRsZSgwKQ0K
KyAgICAgICAgICAgICwgbV9yZXF1ZXN0SGFuZGxlKDApDQorICAgICAgICAgICAgLCBtX3NlbnRF
bmRSZXF1ZXN0KGZhbHNlKQ0KKyAgICAgICAgICAgICwgbV9sb2FkU3luY2hyb25vdXNseShmYWxz
ZSkNCiAgICAgICAgICAgICAsIG1faGFzUmVjZWl2ZWRSZXNwb25zZShmYWxzZSkNCi0gICAgICAg
ICAgICAsIG1fcmVzZW5kKGZhbHNlKQ0KKyAgICAgICAgICAgICwgbV9ieXRlc1JlbWFpbmluZ1Rv
V3JpdGUoMCkNCiAjZW5kaWYNCiAjaWYgVVNFKENVUkwpDQogICAgICAgICAgICAgLCBtX2hhbmRs
ZSgwKQ0KQEAgLTE3MCwxOSArMTY2LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsNCiAgICAgICAg
IGJvb2wgbV9uZWVkc1NpdGVTcGVjaWZpY1F1aXJrczsNCiAjZW5kaWYNCiAjaWYgVVNFKFdJTklO
RVQpDQotICAgICAgICBIQU5ETEUgbV9maWxlSGFuZGxlOw0KICAgICAgICAgVGltZXI8UmVzb3Vy
Y2VIYW5kbGU+IG1fZmlsZUxvYWRUaW1lcjsNCi0gICAgICAgIEhJTlRFUk5FVCBtX3Jlc291cmNl
SGFuZGxlOw0KLSAgICAgICAgSElOVEVSTkVUIG1fc2Vjb25kYXJ5SGFuZGxlOw0KLSAgICAgICAg
dW5zaWduZWQgbV9qb2JJZDsNCi0gICAgICAgIERXT1JEIG1fdGhyZWFkSWQ7DQotICAgICAgICBi
b29sIG1fd3JpdGluZzsNCi0gICAgICAgIGNoYXIqIG1fZm9ybURhdGFTdHJpbmc7DQotICAgICAg
ICBpbnQgbV9mb3JtRGF0YUxlbmd0aDsNCi0gICAgICAgIGludCBtX2J5dGVzUmVtYWluaW5nVG9X
cml0ZTsNCi0gICAgICAgIFN0cmluZyBtX3Bvc3RSZWZlcnJlcjsNCisgICAgICAgIEhJTlRFUk5F
VCBtX2ludGVybmV0SGFuZGxlOw0KKyAgICAgICAgSElOVEVSTkVUIG1fY29ubmVjdEhhbmRsZTsN
CisgICAgICAgIEhJTlRFUk5FVCBtX3JlcXVlc3RIYW5kbGU7DQorICAgICAgICBWZWN0b3I8Y2hh
cj4gbV9mb3JtRGF0YTsNCisgICAgICAgIHNpemVfdCBtX2J5dGVzUmVtYWluaW5nVG9Xcml0ZTsN
CisgICAgICAgIGJvb2wgbV9sb2FkU3luY2hyb25vdXNseTsNCisgICAgICAgIGJvb2wgbV9zZW50
RW5kUmVxdWVzdDsNCiAgICAgICAgIGJvb2wgbV9oYXNSZWNlaXZlZFJlc3BvbnNlOw0KLSAgICAg
ICAgYm9vbCBtX3Jlc2VuZDsNCisgICAgICAgIFN0cmluZyBtX3JlZGlyZWN0VXJsOw0KICNlbmRp
Zg0KICNpZiBVU0UoQ1VSTCkNCiAgICAgICAgIENVUkwqIG1faGFuZGxlOw0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAJ
KHJldmlzaW9uIDYyNTQ3KQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3Vy
Y2VIYW5kbGVXaW4uY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMSw1ICsxLDYgQEANCiAvKg0KICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4NCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBh
cm9nYUBwYXJvZ2EuY29tPg0KICAqDQogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQpAQCAt
MjYsMjA2ICsyNywxOTEgQEANCiAjaW5jbHVkZSAiY29uZmlnLmgiDQogI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlLmgiDQogDQotI2luY2x1ZGUgIkRvY0xvYWRlci5oIg0KLSNpbmNsdWRlICJEb2N1
bWVudC5oIg0KLSNpbmNsdWRlICJGcmFtZS5oIg0KLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIg0K
LSNpbmNsdWRlICJQYWdlLmgiDQorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiDQorI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCINCisjaW5jbHVkZSAiTWFpblRocmVhZC5oIg0KKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIg0KICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiDQogI2luY2x1
ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiDQogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50
ZXJuYWwuaCINCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVXaW4uaCINCisjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiDQogI2luY2x1ZGUgIlRpbWVyLmgiDQotI2luY2x1ZGUgIldlYkNvcmVJbnN0
YW5jZUhhbmRsZS5oIg0KKyNpbmNsdWRlICJVbnVzZWRQYXJhbS5oIg0KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+DQogI2luY2x1ZGUgPHdpbmRvd3MuaD4NCiAjaW5jbHVkZSA8d2luaW5l
dC5oPg0KIA0KIG5hbWVzcGFjZSBXZWJDb3JlIHsNCiANCi1zdGF0aWMgdW5zaWduZWQgdHJhbnNm
ZXJKb2JJZCA9IDA7DQotc3RhdGljIEhhc2hNYXA8aW50LCBSZXNvdXJjZUhhbmRsZSo+KiBqb2JJ
ZE1hcCA9IDA7DQorc3RhdGljIGlubGluZSBISU5URVJORVQgY3JlYXRlSW50ZXJuZXRIYW5kbGUo
Y29uc3QgU3RyaW5nJiB1c2VyQWdlbnQsIGJvb2wgYXN5bmNocm9ub3VzKQ0KK3sNCisgICAgU3Ry
aW5nIHVzZXJBZ2VudFN0cmluZyA9IHVzZXJBZ2VudDsNCisgICAgSElOVEVSTkVUIGludGVybmV0
SGFuZGxlID0gSW50ZXJuZXRPcGVuVyh1c2VyQWdlbnRTdHJpbmcuY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKSwgSU5URVJORVRfT1BFTl9UWVBFX1BSRUNPTkZJRywgMCwgMCwgYXN5bmNo
cm9ub3VzID8gSU5URVJORVRfRkxBR19BU1lOQyA6IDApOw0KKyAgICBpZiAoYXN5bmNocm9ub3Vz
KQ0KKyAgICAgICAgSW50ZXJuZXRTZXRTdGF0dXNDYWxsYmFjayhpbnRlcm5ldEhhbmRsZSwgJlJl
c291cmNlSGFuZGxlOjppbnRlcm5ldFN0YXR1c0NhbGxiYWNrKTsNCisgICAgcmV0dXJuIGludGVy
bmV0SGFuZGxlOw0KK30NCiANCi1zdGF0aWMgSFdORCB0cmFuc2ZlckpvYldpbmRvd0hhbmRsZSA9
IDA7DQotY29uc3QgTFBDV1NUUiBrUmVzb3VyY2VIYW5kbGVXaW5kb3dDbGFzc05hbWUgPSBMIlJl
c291cmNlSGFuZGxlV2luZG93Q2xhc3MiOw0KK3N0YXRpYyBISU5URVJORVQgYXN5bmNocm9ub3Vz
SW50ZXJuZXRIYW5kbGUoY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpDQorew0KKyAgICBzdGF0aWMg
SElOVEVSTkVUIGludGVybmV0SGFuZGxlID0gMDsNCiANCi0vLyBNZXNzYWdlIHR5cGVzIGZvciBp
bnRlcm5hbCB1c2UgKGtlZXAgaW4gc3luYyB3aXRoIGtNZXNzYWdlSGFuZGxlcnMpDQotZW51bSB7
DQotICBoYW5kbGVDcmVhdGVkTWVzc2FnZSA9IFdNX1VTRVIsDQotICByZXF1ZXN0UmVkaXJlY3Rl
ZE1lc3NhZ2UsDQotICByZXF1ZXN0Q29tcGxldGVNZXNzYWdlDQotfTsNCisgICAgaWYgKCFpbnRl
cm5ldEhhbmRsZSkNCisgICAgICAgIGludGVybmV0SGFuZGxlID0gY3JlYXRlSW50ZXJuZXRIYW5k
bGUodXNlckFnZW50LCB0cnVlKTsNCisNCisgICAgcmV0dXJuIGludGVybmV0SGFuZGxlOw0KK30N
CisNCisNCitjbGFzcyBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgOiBwdWJsaWMgUmVzb3VyY2VI
YW5kbGVDbGllbnQsIHB1YmxpYyBOb25jb3B5YWJsZSB7DQorcHVibGljOg0KKyAgICBXZWJDb3Jl
U3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UgJiwgVmVj
dG9yPGNoYXI+JiwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQpOw0KKyAgICB+V2ViQ29yZVN5bmNo
cm9ub3VzTG9hZGVyKCk7DQogDQotdHlwZWRlZiB2b2lkIChSZXNvdXJjZUhhbmRsZTo6ICpSZXNv
dXJjZUhhbmRsZUV2ZW50SGFuZGxlcikoTFBBUkFNKTsNCi1zdGF0aWMgY29uc3QgUmVzb3VyY2VI
YW5kbGVFdmVudEhhbmRsZXIgbWVzc2FnZUhhbmRsZXJzW10gPSB7DQotICAgICZSZXNvdXJjZUhh
bmRsZTo6b25IYW5kbGVDcmVhdGVkLA0KLSAgICAmUmVzb3VyY2VIYW5kbGU6Om9uUmVxdWVzdFJl
ZGlyZWN0ZWQsDQotICAgICZSZXNvdXJjZUhhbmRsZTo6b25SZXF1ZXN0Q29tcGxldGUNCisgICAg
SElOVEVSTkVUIGludGVybmV0SGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5ldEhhbmRs
ZTsgfQ0KKw0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFu
ZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOw0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQgbGVuZ3RoUmVj
ZWl2ZWQpOw0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRs
ZSopOw0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJl
c291cmNlRXJyb3ImKTsNCisNCitwcml2YXRlOg0KKyAgICBSZXNvdXJjZUVycm9yJiBtX2Vycm9y
Ow0KKyAgICBSZXNvdXJjZVJlc3BvbnNlJiBtX3Jlc3BvbnNlOw0KKyAgICBWZWN0b3I8Y2hhcj4m
IG1fZGF0YTsNCisgICAgSElOVEVSTkVUIG1faW50ZXJuZXRIYW5kbGU7DQogfTsNCiANCi1zdGF0
aWMgaW50IGFkZFRvT3V0c3RhbmRpbmdKb2JzKFJlc291cmNlSGFuZGxlKiBqb2IpDQorV2ViQ29y
ZVN5bmNocm9ub3VzTG9hZGVyOjpXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJv
ciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEs
IGNvbnN0IFN0cmluZyYgdXNlckFnZW50KQ0KKyAgICA6IG1fZXJyb3IoZXJyb3IpDQorICAgICwg
bV9yZXNwb25zZShyZXNwb25zZSkNCisgICAgLCBtX2RhdGEoZGF0YSkNCiB7DQotICAgIGlmICgh
am9iSWRNYXApDQotICAgICAgICBqb2JJZE1hcCA9IG5ldyBIYXNoTWFwPGludCwgUmVzb3VyY2VI
YW5kbGUqPjsNCi0gICAgdHJhbnNmZXJKb2JJZCsrOw0KLSAgICBqb2JJZE1hcC0+c2V0KHRyYW5z
ZmVySm9iSWQsIGpvYik7DQotICAgIHJldHVybiB0cmFuc2ZlckpvYklkOw0KKyAgICBtX2ludGVy
bmV0SGFuZGxlID0gY3JlYXRlSW50ZXJuZXRIYW5kbGUodXNlckFnZW50LCBmYWxzZSk7DQogfQ0K
IA0KLXN0YXRpYyB2b2lkIHJlbW92ZUZyb21PdXRzdGFuZGluZ0pvYnMoaW50IGpvYklkKQ0KK1dl
YkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6fldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcigpDQogew0K
LSAgICBpZiAoIWpvYklkTWFwKQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICBqb2JJZE1hcC0+cmVt
b3ZlKGpvYklkKTsNCisgICAgSW50ZXJuZXRDbG9zZUhhbmRsZShtX2ludGVybmV0SGFuZGxlKTsN
CiB9DQogDQotc3RhdGljIFJlc291cmNlSGFuZGxlKiBsb29rdXBSZXNvdXJjZUhhbmRsZShpbnQg
am9iSWQpDQordm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25z
ZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQ0KIHsN
Ci0gICAgaWYgKCFqb2JJZE1hcCkNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICByZXR1cm4gam9i
SWRNYXAtPmdldChqb2JJZCk7DQorICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsNCiB9DQogDQot
c3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgUmVzb3VyY2VIYW5kbGVXbmRQcm9jKEhXTkQgaFduZCwg
VUlOVCBtZXNzYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQ0KK3ZvaWQgV2ViQ29yZVN5bmNocm9u
b3VzTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgsIGludCkNCiB7DQotICAgIGlmIChtZXNzYWdlID49IGhhbmRsZUNyZWF0
ZWRNZXNzYWdlKSB7DQotICAgICAgICBVSU5UIGluZGV4ID0gbWVzc2FnZSAtIGhhbmRsZUNyZWF0
ZWRNZXNzYWdlOw0KLSAgICAgICAgaWYgKGluZGV4IDwgX2NvdW50b2YobWVzc2FnZUhhbmRsZXJz
KSkgew0KLSAgICAgICAgICAgIHVuc2lnbmVkIGpvYklkID0gKHVuc2lnbmVkKSB3UGFyYW07DQot
ICAgICAgICAgICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IGxvb2t1cFJlc291cmNlSGFuZGxlKGpv
YklkKTsNCi0gICAgICAgICAgICBpZiAoam9iKSB7DQotICAgICAgICAgICAgICAgIEFTU0VSVChq
b2ItPmQtPm1fam9iSWQgPT0gam9iSWQpOw0KLSAgICAgICAgICAgICAgICBBU1NFUlQoam9iLT5k
LT5tX3RocmVhZElkID09IEdldEN1cnJlbnRUaHJlYWRJZCgpKTsNCi0gICAgICAgICAgICAgICAg
KGpvYi0+KihtZXNzYWdlSGFuZGxlcnNbaW5kZXhdKSkobFBhcmFtKTsNCi0gICAgICAgICAgICB9
DQotICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJu
IERlZldpbmRvd1Byb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOw0KKyAgICBtX2Rh
dGEuYXBwZW5kKGRhdGEsIGxlbmd0aCk7DQogfQ0KIA0KLXN0YXRpYyB2b2lkIGluaXRpYWxpemVP
ZmZTY3JlZW5SZXNvdXJjZUhhbmRsZVdpbmRvdygpDQordm9pZCBXZWJDb3JlU3luY2hyb25vdXNM
b2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqKQ0KIHsNCi0gICAgaWYgKHRy
YW5zZmVySm9iV2luZG93SGFuZGxlKQ0KLSAgICAgICAgcmV0dXJuOw0KLQ0KLSAgICBXTkRDTEFT
U0VYIHdjZXg7DQotICAgIG1lbXNldCgmd2NleCwgMCwgc2l6ZW9mKFdORENMQVNTRVgpKTsNCi0g
ICAgd2NleC5jYlNpemUgPSBzaXplb2YoV05EQ0xBU1NFWCk7DQotICAgIHdjZXgubHBmblduZFBy
b2MgICAgPSBSZXNvdXJjZUhhbmRsZVduZFByb2M7DQotICAgIHdjZXguaEluc3RhbmNlICAgICAg
PSBXZWJDb3JlOjppbnN0YW5jZUhhbmRsZSgpOw0KLSAgICB3Y2V4Lmxwc3pDbGFzc05hbWUgID0g
a1Jlc291cmNlSGFuZGxlV2luZG93Q2xhc3NOYW1lOw0KLSAgICBSZWdpc3RlckNsYXNzRXgoJndj
ZXgpOw0KK30NCiANCi0gICAgdHJhbnNmZXJKb2JXaW5kb3dIYW5kbGUgPSBDcmVhdGVXaW5kb3co
a1Jlc291cmNlSGFuZGxlV2luZG93Q2xhc3NOYW1lLCAwLCAwLCBDV19VU0VERUZBVUxULCAwLCBD
V19VU0VERUZBVUxULCAwLA0KLSAgICAgICAgSFdORF9NRVNTQUdFLCAwLCBXZWJDb3JlOjppbnN0
YW5jZUhhbmRsZSgpLCAwKTsNCit2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkRmFp
bChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQ0KK3sNCisgICAg
bV9lcnJvciA9IGVycm9yOw0KIH0NCiANCisNCiBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVz
b3VyY2VIYW5kbGVJbnRlcm5hbCgpDQogew0KLSAgICBpZiAobV9maWxlSGFuZGxlICE9IElOVkFM
SURfSEFORExFX1ZBTFVFKQ0KLSAgICAgICAgQ2xvc2VIYW5kbGUobV9maWxlSGFuZGxlKTsNCiB9
DQogDQogUmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpDQogew0KLSAgICBpZiAoZC0+
bV9qb2JJZCkNCi0gICAgICAgIHJlbW92ZUZyb21PdXRzdGFuZGluZ0pvYnMoZC0+bV9qb2JJZCk7
DQogfQ0KIA0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6Om9uSGFuZGxlQ3JlYXRlZChMUEFSQU0gbFBh
cmFtKQ0KK3N0YXRpYyB2b2lkIGNhbGxPblJlZGlyZWN0KHZvaWQqIGNvbnRleHQpDQogew0KLSAg
ICBpZiAoIWQtPm1fcmVzb3VyY2VIYW5kbGUpIHsNCi0gICAgICAgIGQtPm1fcmVzb3VyY2VIYW5k
bGUgPSBISU5URVJORVQobFBhcmFtKTsNCi0gICAgICAgIGlmIChkLT5zdGF0dXMgIT0gMCkgew0K
LSAgICAgICAgICAgIC8vIFdlIHdlcmUgY2FuY2VsZWQgYmVmb3JlIFdpbmRvd3MgYWN0dWFsbHkg
Y3JlYXRlZCBhIGhhbmRsZSBmb3IgdXMsIGNsb3NlIGFuZCBkZWxldGUgbm93Lg0KLSAgICAgICAg
ICAgIEludGVybmV0Q2xvc2VIYW5kbGUoZC0+bV9yZXNvdXJjZUhhbmRsZSk7DQotICAgICAgICAg
ICAgZGVsZXRlIHRoaXM7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KKyAgICBS
ZXNvdXJjZUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihjb250
ZXh0KTsNCisgICAgaGFuZGxlLT5vblJlZGlyZWN0KCk7DQorfQ0KIA0KLSAgICAgICAgaWYgKHJl
cXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBPU1QiKSB7DQotICAgICAgICAgICAgLy8gRklYTUU6
IFRvbyBsYXRlIHRvIHNldCByZWZlcnJlciBwcm9wZXJseS4NCi0gICAgICAgICAgICBTdHJpbmcg
dXJsU3RyID0gcmVxdWVzdCgpLnVybCgpLnBhdGgoKTsNCi0gICAgICAgICAgICBpbnQgZnJhZ21l
bnRJbmRleCA9IHVybFN0ci5maW5kKCcjJyk7DQotICAgICAgICAgICAgaWYgKGZyYWdtZW50SW5k
ZXggIT0gLTEpDQotICAgICAgICAgICAgICAgIHVybFN0ciA9IHVybFN0ci5sZWZ0KGZyYWdtZW50
SW5kZXgpOw0KLSAgICAgICAgICAgIHN0YXRpYyBMUENTVFIgYWNjZXB0WzJdPXsiKi8qIiwgTlVM
TH07DQotICAgICAgICAgICAgSElOVEVSTkVUIHVybEhhbmRsZSA9IEh0dHBPcGVuUmVxdWVzdEEo
ZC0+bV9yZXNvdXJjZUhhbmRsZSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIlBPU1QiLCB1cmxTdHIubGF0aW4xKCkuZGF0YSgpLCAwLCAwLCBh
Y2NlcHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSU5URVJORVRfRkxBR19LRUVQX0NPTk5FQ1RJT04gfCANCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFUk5FVF9GTEFHX0ZPUk1TX1NVQk1J
VCB8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SU5URVJORVRfRkxBR19SRUxPQUQgfA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIElOVEVSTkVUX0ZMQUdfTk9fQ0FDSEVfV1JJVEUgfA0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSTkVUX0ZM
QUdfSUdOT1JFX1JFRElSRUNUX1RPX0hUVFBTIHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFUk5FVF9GTEFHX0lHTk9SRV9SRURJUkVDVF9U
T19IVFRQLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChEV09SRF9QVFIpZC0+bV9qb2JJZCk7DQotICAgICAgICAgICAgaWYgKHVybEhhbmRsZSA9
PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgew0KLSAgICAgICAgICAgICAgICBJbnRlcm5ldENsb3Nl
SGFuZGxlKGQtPm1fcmVzb3VyY2VIYW5kbGUpOw0KLSAgICAgICAgICAgICAgICBkZWxldGUgdGhp
czsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAoIWQtPm1fc2Vj
b25kYXJ5SGFuZGxlKSB7DQotICAgICAgICBhc3NlcnQocmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9
PSAiUE9TVCIpOw0KLSAgICAgICAgZC0+bV9zZWNvbmRhcnlIYW5kbGUgPSBISU5URVJORVQobFBh
cmFtKTsNCi0gICAgICAgIA0KLSAgICAgICAgLy8gTmVlZCB0byBhY3R1YWxseSBzZW5kIHRoZSBy
ZXF1ZXN0IG5vdy4NCi0gICAgICAgIFN0cmluZyBoZWFkZXJzID0gIkNvbnRlbnQtVHlwZTogYXBw
bGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXG4iOw0KLSAgICAgICAgaGVhZGVycyArPSAi
UmVmZXJlcjogIjsNCi0gICAgICAgIGhlYWRlcnMgKz0gZC0+bV9wb3N0UmVmZXJyZXI7DQotICAg
ICAgICBoZWFkZXJzICs9ICJcbiI7DQotICAgICAgICBjb25zdCBDU3RyaW5nJiBoZWFkZXJzTGF0
aW4xID0gaGVhZGVycy5sYXRpbjEoKTsNCi0gICAgICAgIFN0cmluZyBmb3JtRGF0YSA9IHJlcXVl
c3QoKS5odHRwQm9keSgpLT5mbGF0dGVuVG9TdHJpbmcoKTsNCi0gICAgICAgIElOVEVSTkVUX0JV
RkZFUlNBIGJ1ZmZlcnM7DQotICAgICAgICBtZW1zZXQoJmJ1ZmZlcnMsIDAsIHNpemVvZihidWZm
ZXJzKSk7DQotICAgICAgICBidWZmZXJzLmR3U3RydWN0U2l6ZSA9IHNpemVvZihJTlRFUk5FVF9C
VUZGRVJTQSk7DQotICAgICAgICBidWZmZXJzLmxwY3N6SGVhZGVyID0gaGVhZGVyc0xhdGluMS5k
YXRhKCk7DQotICAgICAgICBidWZmZXJzLmR3SGVhZGVyc0xlbmd0aCA9IGhlYWRlcnMubGVuZ3Ro
KCk7DQotICAgICAgICBidWZmZXJzLmR3QnVmZmVyVG90YWwgPSBmb3JtRGF0YS5sZW5ndGgoKTsN
Ci0gICAgICAgIA0KLSAgICAgICAgZC0+bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUgPSBmb3JtRGF0
YS5sZW5ndGgoKTsNCi0gICAgICAgIGQtPm1fZm9ybURhdGFTdHJpbmcgPSAoY2hhciopbWFsbG9j
KGZvcm1EYXRhLmxlbmd0aCgpKTsNCi0gICAgICAgIGQtPm1fZm9ybURhdGFMZW5ndGggPSBmb3Jt
RGF0YS5sZW5ndGgoKTsNCi0gICAgICAgIHN0cm5jcHkoZC0+bV9mb3JtRGF0YVN0cmluZywgZm9y
bURhdGEubGF0aW4xKCkuZGF0YSgpLCBmb3JtRGF0YS5sZW5ndGgoKSk7DQotICAgICAgICBkLT5t
X3dyaXRpbmcgPSB0cnVlOw0KLSAgICAgICAgSHR0cFNlbmRSZXF1ZXN0RXhBKGQtPm1fc2Vjb25k
YXJ5SGFuZGxlLCAmYnVmZmVycywgMCwgMCwgKERXT1JEX1BUUilkLT5tX2pvYklkKTsNCi0gICAg
ICAgIC8vIEZJWE1FOiBhZGQgcHJvcGVyIGVycm9yIGhhbmRsaW5nDQorc3RhdGljIHZvaWQgY2Fs
bE9uUmVxdWVzdENvbXBsZXRlKHZvaWQqIGNvbnRleHQpDQorew0KKyAgICBSZXNvdXJjZUhhbmRs
ZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihjb250ZXh0KTsNCisgICAg
aGFuZGxlLT5vblJlcXVlc3RDb21wbGV0ZSgpOw0KK30NCisNCit2b2lkIENBTExCQUNLIFJlc291
cmNlSGFuZGxlOjppbnRlcm5ldFN0YXR1c0NhbGxiYWNrKEhJTlRFUk5FVCBpbnRlcm5ldEhhbmRs
ZSwgRFdPUkRfUFRSIGNvbnRleHQsIERXT1JEIGludGVybmV0U3RhdHVzLA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBWT0lEIHN0YXR1c0lu
Zm9ybWF0aW9uLCBEV09SRCBzdGF0dXNJbmZvcm1hdGlvbkxlbmd0aCkNCit7DQorICAgIFJlc291
cmNlSGFuZGxlKiBoYW5kbGUgPSByZWludGVycHJldF9jYXN0PFJlc291cmNlSGFuZGxlKj4oY29u
dGV4dCk7DQorDQorICAgIHN3aXRjaCAoaW50ZXJuZXRTdGF0dXMpIHsNCisgICAgY2FzZSBJTlRF
Uk5FVF9TVEFUVVNfUkVESVJFQ1Q6DQorICAgICAgICBoYW5kbGUtPmQtPm1fcmVkaXJlY3RVcmwg
PSBTdHJpbmcoc3RhdGljX2Nhc3Q8VUNoYXIqPihzdGF0dXNJbmZvcm1hdGlvbiksIHN0YXR1c0lu
Zm9ybWF0aW9uTGVuZ3RoKTsNCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoY2FsbE9uUmVkaXJl
Y3QsIGhhbmRsZSk7DQorICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBJTlRFUk5FVF9TVEFU
VVNfUkVRVUVTVF9DT01QTEVURToNCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoY2FsbE9uUmVx
dWVzdENvbXBsZXRlLCBoYW5kbGUpOw0KKyAgICAgICAgYnJlYWs7DQorDQorICAgIGNhc2UgSU5U
RVJORVRfU1RBVFVTX0hBTkRMRV9DUkVBVEVEOg0KKyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19D
TE9TSU5HX0NPTk5FQ1RJT046DQorICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX0NPTk5FQ1RFRF9U
T19TRVJWRVI6DQorICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX0NPTk5FQ1RJTkdfVE9fU0VSVkVS
Og0KKyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19DT05ORUNUSU9OX0NMT1NFRDoNCisgICAgY2Fz
ZSBJTlRFUk5FVF9TVEFUVVNfQ09PS0lFX0hJU1RPUlk6DQorICAgIGNhc2UgSU5URVJORVRfU1RB
VFVTX0NPT0tJRV9SRUNFSVZFRDoNCisgICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfQ09PS0lFX1NF
TlQ6DQorICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX0NUTF9SRVNQT05TRV9SRUNFSVZFRDoNCisg
ICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfREVURUNUSU5HX1BST1hZOg0KKyAgICBjYXNlIElOVEVS
TkVUX1NUQVRVU19IQU5ETEVfQ0xPU0lORzoNCisgICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfSU5U
RVJNRURJQVRFX1JFU1BPTlNFOg0KKyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19OQU1FX1JFU09M
VkVEOg0KKyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19QM1BfSEVBREVSOg0KKyAgICBjYXNlIElO
VEVSTkVUX1NUQVRVU19QM1BfUE9MSUNZUkVGOg0KKyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19Q
UkVGRVRDSDoNCisgICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfUFJJVkFDWV9JTVBBQ1RFRDoNCisg
ICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfUkVDRUlWSU5HX1JFU1BPTlNFOg0KKyAgICBjYXNlIElO
VEVSTkVUX1NUQVRVU19SRVFVRVNUX1NFTlQ6DQorICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX1JF
U09MVklOR19OQU1FOg0KKyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19SRVNQT05TRV9SRUNFSVZF
RDoNCisgICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfU0VORElOR19SRVFVRVNUOg0KKyAgICBjYXNl
IElOVEVSTkVUX1NUQVRVU19TVEFURV9DSEFOR0U6DQorICAgIGRlZmF1bHQ6DQorICAgICAgICBi
cmVhazsNCiAgICAgfQ0KIH0NCiANCi12b2lkIFJlc291cmNlSGFuZGxlOjpvblJlcXVlc3RSZWRp
cmVjdGVkKExQQVJBTSBsUGFyYW0pDQordm9pZCBSZXNvdXJjZUhhbmRsZTo6b25SZWRpcmVjdCgp
DQogew0KLSAgICAvLyBJZiBhbHJlYWR5IGNhbmNlbGVkLCB0aGVuIGlnbm9yZSB0aGlzIGV2ZW50
Lg0KLSAgICBpZiAoZC0+c3RhdHVzICE9IDApDQotICAgICAgICByZXR1cm47DQorICAgIFJlc291
cmNlUmVxdWVzdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdCgpOw0KKyAgICBuZXdSZXF1ZXN0LnNldFVS
TChLVVJMKFBhcnNlZFVSTFN0cmluZywgZC0+bV9yZWRpcmVjdFVybCkpOw0KIA0KLSAgICBSZXNv
dXJjZVJlcXVlc3QgcmVxdWVzdCgoU3RyaW5nSW1wbCopIGxQYXJhbSk7DQotICAgIFJlc291cmNl
UmVzcG9uc2UgcmVkaXJlY3RSZXNwb25zZTsNCi0gICAgY2xpZW50KCktPndpbGxTZW5kUmVxdWVz
dCh0aGlzLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsNCisgICAgUmVzb3VyY2VSZXNwb25z
ZSByZXNwb25zZShyZXF1ZXN0KCkudXJsKCksIFN0cmluZygpLCAwLCBTdHJpbmcoKSwgU3RyaW5n
KCkpOw0KKw0KKyAgICBpZiAoUmVzb3VyY2VIYW5kbGVDbGllbnQqIHJlc291cmNlSGFuZGxlQ2xp
ZW50ID0gY2xpZW50KCkpDQorICAgICAgICByZXNvdXJjZUhhbmRsZUNsaWVudC0+d2lsbFNlbmRS
ZXF1ZXN0KHRoaXMsIG5ld1JlcXVlc3QsIHJlc3BvbnNlKTsNCiB9DQogDQotdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6b25SZXF1ZXN0Q29tcGxldGUoTFBBUkFNIGxQYXJhbSkNCitib29sIFJlc291cmNl
SGFuZGxlOjpvblJlcXVlc3RDb21wbGV0ZSgpDQogew0KLSAgICBpZiAoZC0+bV93cml0aW5nKSB7
DQorICAgIGlmICghZC0+bV9pbnRlcm5ldEhhbmRsZSkgLy8gMCBpZiBjYW5jZWxlZC4NCisgICAg
ICAgIHJldHVybiBmYWxzZTsNCisNCisgICAgaWYgKGQtPm1fYnl0ZXNSZW1haW5pbmdUb1dyaXRl
KSB7DQogICAgICAgICBEV09SRCBieXRlc1dyaXR0ZW47DQotICAgICAgICBJbnRlcm5ldFdyaXRl
RmlsZShkLT5tX3NlY29uZGFyeUhhbmRsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGQt
Pm1fZm9ybURhdGFTdHJpbmcgKyAoZC0+bV9mb3JtRGF0YUxlbmd0aCAtIGQtPm1fYnl0ZXNSZW1h
aW5pbmdUb1dyaXRlKSwNCisgICAgICAgIEludGVybmV0V3JpdGVGaWxlKGQtPm1fcmVxdWVzdEhh
bmRsZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGQtPm1fZm9ybURhdGEuZGF0YSgpICsg
KGQtPm1fZm9ybURhdGEuc2l6ZSgpIC0gZC0+bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUpLA0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZC0+bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAmYnl0ZXNXcml0dGVuKTsNCiAgICAgICAgIGQtPm1fYnl0
ZXNSZW1haW5pbmdUb1dyaXRlIC09IGJ5dGVzV3JpdHRlbjsNCi0gICAgICAgIGlmICghZC0+bV9i
eXRlc1JlbWFpbmluZ1RvV3JpdGUpIHsNCi0gICAgICAgICAgICAvLyBFbmQgdGhlIHJlcXVlc3Qu
DQotICAgICAgICAgICAgZC0+bV93cml0aW5nID0gZmFsc2U7DQotICAgICAgICAgICAgSHR0cEVu
ZFJlcXVlc3QoZC0+bV9zZWNvbmRhcnlIYW5kbGUsIDAsIDAsIChEV09SRF9QVFIpZC0+bV9qb2JJ
ZCk7DQotICAgICAgICAgICAgZnJlZShkLT5tX2Zvcm1EYXRhU3RyaW5nKTsNCi0gICAgICAgICAg
ICBkLT5tX2Zvcm1EYXRhU3RyaW5nID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsN
CisgICAgICAgIGlmICghZC0+bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUpDQorICAgICAgICAgICAg
ZC0+bV9mb3JtRGF0YS5jbGVhcigpOw0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIHJldHVy
biB0cnVlOw0KICAgICB9DQogDQotICAgIEhJTlRFUk5FVCBoYW5kbGUgPSAocmVxdWVzdCgpLmh0
dHBNZXRob2QoKSA9PSAiUE9TVCIpID8gZC0+bV9zZWNvbmRhcnlIYW5kbGUgOiBkLT5tX3Jlc291
cmNlSGFuZGxlOw0KLSAgICBCT09MIG9rID0gRkFMU0U7DQorICAgIGlmICghZC0+bV9zZW50RW5k
UmVxdWVzdCkgew0KKyAgICAgICAgSHR0cEVuZFJlcXVlc3RXKGQtPm1fcmVxdWVzdEhhbmRsZSwg
MCwgMCwgcmVpbnRlcnByZXRfY2FzdDxEV09SRF9QVFI+KHRoaXMpKTsNCisgICAgICAgIGQtPm1f
c2VudEVuZFJlcXVlc3QgPSB0cnVlOw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCiAN
CiAgICAgc3RhdGljIGNvbnN0IGludCBidWZmZXJTaXplID0gMzI3Njg7DQogICAgIGNoYXIgYnVm
ZmVyW2J1ZmZlclNpemVdOw0KQEAgLTIzNCwxODQgKzIyMCwyMTcgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZTo6b25SZXF1ZXN0Q29tcGxldGUoTA0KICAgICBidWZmZXJzLmxwdkJ1ZmZlciA9IGJ1ZmZl
cjsNCiAgICAgYnVmZmVycy5kd0J1ZmZlckxlbmd0aCA9IGJ1ZmZlclNpemU7DQogDQotICAgIGJv
b2wgcmVjZWl2ZWRBbnlEYXRhID0gZmFsc2U7DQotICAgIHdoaWxlICgob2sgPSBJbnRlcm5ldFJl
YWRGaWxlRXhBKGhhbmRsZSwgJmJ1ZmZlcnMsIElSRl9OT19XQUlULCAoRFdPUkRfUFRSKXRoaXMp
KSAmJiBidWZmZXJzLmR3QnVmZmVyTGVuZ3RoKSB7DQotICAgICAgICBpZiAoIWhhc1JlY2VpdmVk
UmVzcG9uc2UoKSkgew0KLSAgICAgICAgICAgIHNldEhhc1JlY2VpdmVkUmVzcG9uc2UoKTsNCisg
ICAgQk9PTCBvayA9IEZBTFNFOw0KKyAgICB3aGlsZSAoKG9rID0gSW50ZXJuZXRSZWFkRmlsZUV4
QShkLT5tX3JlcXVlc3RIYW5kbGUsICZidWZmZXJzLCBkLT5tX2xvYWRTeW5jaHJvbm91c2x5ID8g
MCA6IElSRl9OT19XQUlULCByZWludGVycHJldF9jYXN0PERXT1JEX1BUUj4odGhpcykpKSAmJiBi
dWZmZXJzLmR3QnVmZmVyTGVuZ3RoKSB7DQorICAgICAgICBpZiAoIWQtPm1faGFzUmVjZWl2ZWRS
ZXNwb25zZSkgew0KKyAgICAgICAgICAgIGQtPm1faGFzUmVjZWl2ZWRSZXNwb25zZSA9IHRydWU7
DQorDQogICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsNCisgICAgICAgICAg
ICByZXNwb25zZS5zZXRVUkwocmVxdWVzdCgpLnVybCgpKTsNCisNCisgICAgICAgICAgICBTdHJp
bmcgaHR0cFN0YXR1c1RleHQgPSBxdWVyeUhUVFBIZWFkZXIoSFRUUF9RVUVSWV9TVEFUVVNfVEVY
VCk7DQorICAgICAgICAgICAgaWYgKCFodHRwU3RhdHVzVGV4dC5pc051bGwoKSkNCisgICAgICAg
ICAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoaHR0cFN0YXR1c1RleHQpOw0KKw0K
KyAgICAgICAgICAgIFN0cmluZyBodHRwU3RhdHVzQ29kZSA9IHF1ZXJ5SFRUUEhlYWRlcihIVFRQ
X1FVRVJZX1NUQVRVU19DT0RFKTsNCisgICAgICAgICAgICBpZiAoIWh0dHBTdGF0dXNDb2RlLmlz
TnVsbCgpKQ0KKyAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShodHRw
U3RhdHVzQ29kZS50b0ludCgpKTsNCisNCisgICAgICAgICAgICBTdHJpbmcgaHR0cENvbnRlbnRM
ZW5ndGggPSBxdWVyeUhUVFBIZWFkZXIoSFRUUF9RVUVSWV9DT05URU5UX0xFTkdUSCk7DQorICAg
ICAgICAgICAgaWYgKCFodHRwQ29udGVudExlbmd0aC5pc051bGwoKSkNCisgICAgICAgICAgICAg
ICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKGh0dHBDb250ZW50TGVuZ3RoLnRv
SW50KCkpOw0KKw0KKyAgICAgICAgICAgIFN0cmluZyBodHRwQ29udGVudFR5cGUgPSBxdWVyeUhU
VFBIZWFkZXIoSFRUUF9RVUVSWV9DT05URU5UX1RZUEUpOw0KKyAgICAgICAgICAgIGlmICghaHR0
cENvbnRlbnRUeXBlLmlzTnVsbCgpKSB7DQorICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldE1p
bWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoaHR0cENvbnRlbnRUeXBlKSk7DQor
ICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoZXh0cmFjdENoYXJz
ZXRGcm9tTWVkaWFUeXBlKGh0dHBDb250ZW50VHlwZSkpOw0KKyAgICAgICAgICAgIH0NCisNCiAg
ICAgICAgICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHRoaXMsIHJlc3BvbnNlKTsN
CiAgICAgICAgIH0NCi0gICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBidWZm
ZXIsIGJ1ZmZlcnMuZHdCdWZmZXJMZW5ndGgsIDApOw0KKw0KKyAgICAgICAgaWYgKFJlc291cmNl
SGFuZGxlQ2xpZW50KiByZXNvdXJjZUhhbmRsZUNsaWVudCA9IGNsaWVudCgpKQ0KKyAgICAgICAg
ICAgIHJlc291cmNlSGFuZGxlQ2xpZW50LT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBidWZmZXIsIGJ1
ZmZlcnMuZHdCdWZmZXJMZW5ndGgsIDApOw0KICAgICAgICAgYnVmZmVycy5kd0J1ZmZlckxlbmd0
aCA9IGJ1ZmZlclNpemU7DQogICAgIH0NCiANCi0gICAgUGxhdGZvcm1EYXRhU3RydWN0IHBsYXRm
b3JtRGF0YTsNCi0gICAgcGxhdGZvcm1EYXRhLmVycm9yU3RyaW5nID0gMDsNCi0gICAgcGxhdGZv
cm1EYXRhLmVycm9yID0gMDsNCi0gICAgcGxhdGZvcm1EYXRhLmxvYWRlZCA9IG9rOw0KLQ0KLSAg
ICBpZiAoIW9rKSB7DQotICAgICAgICBpbnQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsNCi0gICAg
ICAgIGlmIChlcnJvciA9PSBFUlJPUl9JT19QRU5ESU5HKQ0KLSAgICAgICAgICAgIHJldHVybjsN
Ci0gICAgICAgIERXT1JEIGVycm9yU3RyaW5nQ2hhcnMgPSAwOw0KLSAgICAgICAgaWYgKCFJbnRl
cm5ldEdldExhc3RSZXNwb25zZUluZm8oJnBsYXRmb3JtRGF0YS5lcnJvciwgMCwgJmVycm9yU3Ry
aW5nQ2hhcnMpKSB7DQotICAgICAgICAgICAgaWYgKEdldExhc3RFcnJvcigpID09IEVSUk9SX0lO
U1VGRklDSUVOVF9CVUZGRVIpIHsNCi0gICAgICAgICAgICAgICAgcGxhdGZvcm1EYXRhLmVycm9y
U3RyaW5nID0gbmV3IFRDSEFSW2Vycm9yU3RyaW5nQ2hhcnNdOw0KLSAgICAgICAgICAgICAgICBJ
bnRlcm5ldEdldExhc3RSZXNwb25zZUluZm8oJnBsYXRmb3JtRGF0YS5lcnJvciwgcGxhdGZvcm1E
YXRhLmVycm9yU3RyaW5nLCAmZXJyb3JTdHJpbmdDaGFycyk7DQotICAgICAgICAgICAgfQ0KLSAg
ICAgICAgfQ0KLSNpZmRlZiBSRVNPVVJDRV9MT0FERVJfREVCVUcNCi0gICAgICAgIGNoYXIgYnVm
WzY0XTsNCi0gICAgICAgIF9zbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiTG9hZCBlcnJvcjog
JWlcbiIsIGVycm9yKTsNCi0gICAgICAgIE91dHB1dERlYnVnU3RyaW5nQShidWYpOw0KLSNlbmRp
ZiANCi0gICAgfQ0KLSAgICANCi0gICAgaWYgKGQtPm1fc2Vjb25kYXJ5SGFuZGxlKQ0KLSAgICAg
ICAgSW50ZXJuZXRDbG9zZUhhbmRsZShkLT5tX3NlY29uZGFyeUhhbmRsZSk7DQotICAgIEludGVy
bmV0Q2xvc2VIYW5kbGUoZC0+bV9yZXNvdXJjZUhhbmRsZSk7DQorICAgIGlmICghb2sgJiYgR2V0
TGFzdEVycm9yKCkgPT0gRVJST1JfSU9fUEVORElORykNCisgICAgICAgIHJldHVybiB0cnVlOw0K
IA0KLSAgICBjbGllbnQoKS0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsNCi0gICAgZGVsZXRlIHRo
aXM7DQorICAgIGlmIChSZXNvdXJjZUhhbmRsZUNsaWVudCogcmVzb3VyY2VIYW5kbGVDbGllbnQg
PSBjbGllbnQoKSkNCisgICAgICAgIHJlc291cmNlSGFuZGxlQ2xpZW50LT5kaWRGaW5pc2hMb2Fk
aW5nKHRoaXMpOw0KKw0KKyAgICBJbnRlcm5ldENsb3NlSGFuZGxlKGQtPm1fcmVxdWVzdEhhbmRs
ZSk7DQorICAgIEludGVybmV0Q2xvc2VIYW5kbGUoZC0+bV9jb25uZWN0SGFuZGxlKTsNCisgICAg
ZGVyZWYoKTsNCisgICAgcmV0dXJuIGZhbHNlOw0KIH0NCiANCi1zdGF0aWMgdm9pZCBfX3N0ZGNh
bGwgdHJhbnNmZXJKb2JTdGF0dXNDYWxsYmFjayhISU5URVJORVQgaW50ZXJuZXRIYW5kbGUsDQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkRfUFRS
IGpvYklkLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERXT1JEIGludGVybmV0U3RhdHVzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIExQVk9JRCBzdGF0dXNJbmZvcm1hdGlvbiwNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBzdGF0dXNJbmZvcm1hdGlv
bkxlbmd0aCkNCi17DQotI2lmZGVmIFJFU09VUkNFX0xPQURFUl9ERUJVRw0KLSAgICBjaGFyIGJ1
Zls2NF07DQotICAgIF9zbnByaW50ZihidWYsIHNpemVvZihidWYpLCAic3RhdHVzLWNhbGxiYWNr
OiBzdGF0dXM9JXUsIGpvYj0lcFxuIiwNCi0gICAgICAgICAgICAgIGludGVybmV0U3RhdHVzLCBq
b2JJZCk7DQotICAgIE91dHB1dERlYnVnU3RyaW5nQShidWYpOw0KLSNlbmRpZg0KK1N0cmluZyBS
ZXNvdXJjZUhhbmRsZTo6cXVlcnlIVFRQSGVhZGVyKERXT1JEIGluZm9MZXZlbCkNCit7DQorICAg
IERXT1JEIGJ1ZmZlclNpemUgPSAwOw0KKyAgICBIdHRwUXVlcnlJbmZvVyhkLT5tX3JlcXVlc3RI
YW5kbGUsIGluZm9MZXZlbCwgMCwgJmJ1ZmZlclNpemUsIDApOw0KIA0KLSAgICBVSU5UIG1zZzsN
Ci0gICAgTFBBUkFNIGxQYXJhbTsNCisgICAgVUNoYXIqIGNoYXJhY3RlcnM7DQorICAgIFN0cmlu
ZyByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQoYnVmZmVyU2l6ZSAvIHNpemVv
ZihVQ2hhciksIGNoYXJhY3RlcnMpOw0KIA0KLSAgICBzd2l0Y2ggKGludGVybmV0U3RhdHVzKSB7
DQotICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX0hBTkRMRV9DUkVBVEVEOg0KLSAgICAgICAgLy8g
dGVsbCB0aGUgbWFpbiB0aHJlYWQgYWJvdXQgdGhlIG5ld2x5IGNyZWF0ZWQgaGFuZGxlDQotICAg
ICAgICBtc2cgPSBoYW5kbGVDcmVhdGVkTWVzc2FnZTsNCi0gICAgICAgIGxQYXJhbSA9IChMUEFS
QU0pIExQSU5URVJORVRfQVNZTkNfUkVTVUxUKHN0YXR1c0luZm9ybWF0aW9uKS0+ZHdSZXN1bHQ7
DQotICAgICAgICBicmVhazsNCi0gICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfUkVRVUVTVF9DT01Q
TEVURToNCi0jaWZkZWYgUkVTT1VSQ0VfTE9BREVSX0RFQlVHDQotICAgICAgICBfc25wcmludGYo
YnVmLCBzaXplb2YoYnVmKSwgInJlcXVlc3QtY29tcGxldGU6IHJlc3VsdD0lcCwgZXJyb3I9JXVc
biIsDQotICAgICAgICAgICAgTFBJTlRFUk5FVF9BU1lOQ19SRVNVTFQoc3RhdHVzSW5mb3JtYXRp
b24pLT5kd1Jlc3VsdCwNCi0gICAgICAgICAgICBMUElOVEVSTkVUX0FTWU5DX1JFU1VMVChzdGF0
dXNJbmZvcm1hdGlvbiktPmR3RXJyb3IpOw0KLSAgICAgICAgT3V0cHV0RGVidWdTdHJpbmdBKGJ1
Zik7DQotI2VuZGlmDQotICAgICAgICAvLyB0ZWxsIHRoZSBtYWluIHRocmVhZCB0aGF0IHRoZSBy
ZXF1ZXN0IGlzIGRvbmUNCi0gICAgICAgIG1zZyA9IHJlcXVlc3RDb21wbGV0ZU1lc3NhZ2U7DQot
ICAgICAgICBsUGFyYW0gPSAwOw0KLSAgICAgICAgYnJlYWs7DQotICAgIGNhc2UgSU5URVJORVRf
U1RBVFVTX1JFRElSRUNUOg0KLSAgICAgICAgLy8gdGVsbCB0aGUgbWFpbiB0aHJlYWQgdG8gb2Jz
ZXJ2ZSB0aGlzIHJlZGlyZWN0IChGSVhNRTogd2UgcHJvYmFibHkNCi0gICAgICAgIC8vIG5lZWQg
dG8gYmxvY2sgdGhlIHJlZGlyZWN0IGF0IHRoaXMgcG9pbnQgc28gdGhlIGFwcGxpY2F0aW9uIGNh
bg0KLSAgICAgICAgLy8gZGVjaWRlIHdoZXRoZXIgb3Igbm90IHRvIGZvbGxvdyB0aGUgcmVkaXJl
Y3QpDQotICAgICAgICBtc2cgPSByZXF1ZXN0UmVkaXJlY3RlZE1lc3NhZ2U7DQotICAgICAgICBs
UGFyYW0gPSAoTFBBUkFNKSBTdHJpbmdJbXBsOjpjcmVhdGUoKGNvbnN0IFVDaGFyKikgc3RhdHVz
SW5mb3JtYXRpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdHVzSW5mb3JtYXRpb25MZW5ndGgpLnJlbGVhc2VSZWYoKTsNCi0gICAgICAgIGJyZWFr
Ow0KLSAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19VU0VSX0lOUFVUX1JFUVVJUkVEOg0KLSAgICAg
ICAgLy8gRklYTUU6IHByb21wdCB0aGUgdXNlciBpZiBuZWNlc3NhcnkNCi0gICAgICAgIFJlc3Vt
ZVN1c3BlbmRlZERvd25sb2FkKGludGVybmV0SGFuZGxlLCAwKTsNCi0gICAgY2FzZSBJTlRFUk5F
VF9TVEFUVVNfU1RBVEVfQ0hBTkdFOg0KLSAgICAgICAgLy8gbWF5IG5lZWQgdG8gY2FsbCBSZXN1
bWVTdXNwZW5kZWREb3dubG9hZCBoZXJlIGFzIHdlbGwNCi0gICAgZGVmYXVsdDoNCi0gICAgICAg
IHJldHVybjsNCi0gICAgfQ0KKyAgICBpZiAoSHR0cFF1ZXJ5SW5mb1coZC0+bV9yZXF1ZXN0SGFu
ZGxlLCBpbmZvTGV2ZWwsIGNoYXJhY3RlcnMsICZidWZmZXJTaXplLCAwKSkNCisgICAgICAgIHJl
dHVybiByZXN1bHQubGVmdChyZXN1bHQubGVuZ3RoKCkgLSAxKTsgLy8gUmVtb3ZlIE51bGxUZXJt
aW5hdGlvbi4NCiANCi0gICAgUG9zdE1lc3NhZ2UodHJhbnNmZXJKb2JXaW5kb3dIYW5kbGUsIG1z
ZywgKFdQQVJBTSkgam9iSWQsIGxQYXJhbSk7DQorICAgIHJldHVybiBTdHJpbmcoKTsNCiB9DQog
DQogYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQ0KIHsNCiAgICAgcmVm
KCk7DQotICAgIGlmIChyZXF1ZXN0KCkudXJsKCkuaXNMb2NhbEZpbGUoKSkgew0KLSAgICAgICAg
U3RyaW5nIHBhdGggPSByZXF1ZXN0KCkudXJsKCkucGF0aCgpOw0KLSAgICAgICAgLy8gd2luZG93
cyBkb2VzIG5vdCBlbmpveSBhIGxlYWRpbmcgc2xhc2ggb24gcGF0aHMNCi0gICAgICAgIGlmIChw
YXRoWzBdID09ICcvJykNCi0gICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7DQot
ICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZy4gTmVlZCB0byB1c2Ugd2lkZSB2ZXJzaW9u
IG9mIHRoaXMgY2FsbC4NCi0gICAgICAgIGQtPm1fZmlsZUhhbmRsZSA9IENyZWF0ZUZpbGVBKHBh
dGgudXRmOCgpLmRhdGEoKSwgR0VORVJJQ19SRUFELCAwLCBOVUxMLCBPUEVOX0VYSVNUSU5HLCBG
SUxFX0FUVFJJQlVURV9OT1JNQUwsIE5VTEwpOw0KLQ0KLSAgICAgICAgLy8gRklYTUU6IHBlcmhh
cHMgdGhpcyBlcnJvciBzaG91bGQgYmUgcmVwb3J0ZWQgYXN5bmNocm9ub3VzbHkgZm9yDQotICAg
ICAgICAvLyBjb25zaXN0ZW5jeS4NCi0gICAgICAgIGlmIChkLT5tX2ZpbGVIYW5kbGUgPT0gSU5W
QUxJRF9IQU5ETEVfVkFMVUUpIHsNCi0gICAgICAgICAgICBkZWxldGUgdGhpczsNCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7DQotICAgICAgICB9DQotDQotICAgICAgICBkLT5tX2ZpbGVMb2Fk
VGltZXIuc3RhcnRPbmVTaG90KDAuMCk7DQorICAgIGlmIChyZXF1ZXN0KCkudXJsKCkuaXNMb2Nh
bEZpbGUoKSB8fCByZXF1ZXN0KCkudXJsKCkucHJvdG9jb2xJcygiZGF0YSIpKSB7DQorICAgICAg
ICBpZiAoZC0+bV9sb2FkU3luY2hyb25vdXNseSkNCisgICAgICAgICAgICBmaWxlTG9hZFRpbWVy
KDApOw0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIGQtPm1fZmlsZUxvYWRUaW1lci5zdGFy
dE9uZVNob3QoMC4wKTsNCiAgICAgICAgIHJldHVybiB0cnVlOw0KLSAgICB9IGVsc2Ugew0KLSAg
ICAgICAgc3RhdGljIEhJTlRFUk5FVCBpbnRlcm5ldEhhbmRsZSA9IDA7DQotICAgICAgICBpZiAo
IWludGVybmV0SGFuZGxlKSB7DQotICAgICAgICAgICAgU3RyaW5nIHVzZXJBZ2VudFN0ciA9IGZy
YW1lLT5sb2FkZXIoKS0+dXNlckFnZW50KHJlcXVlc3QoKS51cmwoKSkgKyBTdHJpbmcoIiIsIDEp
Ow0KLSAgICAgICAgICAgIExQQ1dTVFIgdXNlckFnZW50ID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBXQ0hBUio+KHVzZXJBZ2VudFN0ci5jaGFyYWN0ZXJzKCkpOw0KLSAgICAgICAgICAgIC8vIGxl
YWsgdGhlIEludGVybmV0IGZvciBub3cNCi0gICAgICAgICAgICBpbnRlcm5ldEhhbmRsZSA9IElu
dGVybmV0T3Blbih1c2VyQWdlbnQsIElOVEVSTkVUX09QRU5fVFlQRV9QUkVDT05GSUcsIDAsIDAs
IElOVEVSTkVUX0ZMQUdfQVNZTkMpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFpbnRlcm5l
dEhhbmRsZSkgew0KLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzOw0KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsNCi0gICAgICAgIH0NCi0gICAgICAgIHN0YXRpYyBJTlRFUk5FVF9TVEFUVVNfQ0FM
TEJBQ0sgY2FsbGJhY2tIYW5kbGUgPSANCi0gICAgICAgICAgICBJbnRlcm5ldFNldFN0YXR1c0Nh
bGxiYWNrKGludGVybmV0SGFuZGxlLCB0cmFuc2ZlckpvYlN0YXR1c0NhbGxiYWNrKTsNCisgICAg
fQ0KIA0KLSAgICAgICAgaW5pdGlhbGl6ZU9mZlNjcmVlblJlc291cmNlSGFuZGxlV2luZG93KCk7
DQotICAgICAgICBkLT5tX2pvYklkID0gYWRkVG9PdXRzdGFuZGluZ0pvYnModGhpcyk7DQorICAg
IGlmICghZC0+bV9pbnRlcm5ldEhhbmRsZSkgew0KKyAgICAgICAgc3RhdGljIEhJTlRFUk5FVCBh
c3luY2hyb25vdXNJbnRlcm5ldEhhbmRsZSA9IDA7DQogDQotICAgICAgICBEV09SRCBmbGFncyA9
DQotICAgICAgICAgICAgSU5URVJORVRfRkxBR19LRUVQX0NPTk5FQ1RJT04gfA0KLSAgICAgICAg
ICAgIElOVEVSTkVUX0ZMQUdfSUdOT1JFX1JFRElSRUNUX1RPX0hUVFBTIHwNCi0gICAgICAgICAg
ICBJTlRFUk5FVF9GTEFHX0lHTk9SRV9SRURJUkVDVF9UT19IVFRQOw0KLQ0KLSAgICAgICAgLy8g
Rm9yIGZvcm0gcG9zdGluZywgd2UgY2FuJ3QgdXNlIEludGVybmV0T3BlblVSTC4gIFdlIGhhdmUg
dG8gdXNlDQotICAgICAgICAvLyBJbnRlcm5ldENvbm5lY3QgZm9sbG93ZWQgYnkgSHR0cFNlbmRS
ZXF1ZXN0Lg0KLSAgICAgICAgSElOVEVSTkVUIHVybEhhbmRsZTsNCi0gICAgICAgIFN0cmluZyBy
ZWZlcnJlciA9IGZyYW1lLT5sb2FkZXIoKS0+cmVmZXJyZXIoKTsNCi0gICAgICAgIGlmIChyZXF1
ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIikgew0KLSAgICAgICAgICAgIGQtPm1fcG9zdFJl
ZmVycmVyID0gcmVmZXJyZXI7DQotICAgICAgICAgICAgU3RyaW5nIGhvc3QgPSByZXF1ZXN0KCku
dXJsKCkuaG9zdCgpOw0KLSAgICAgICAgICAgIHVybEhhbmRsZSA9IEludGVybmV0Q29ubmVjdEEo
aW50ZXJuZXRIYW5kbGUsIGhvc3QubGF0aW4xKCkuZGF0YSgpLA0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCgpLnVybCgpLnBvcnQoKSwNCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8vIG5vIHVzZXJuYW1lDQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvLyBubyBwYXNz
d29yZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJORVRf
U0VSVklDRV9IVFRQLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmxhZ3MsIChEV09SRF9QVFIpZC0+bV9qb2JJZCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAg
ICAgICAgIFN0cmluZyB1cmxTdHIgPSByZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCk7DQotICAgICAg
ICAgICAgaW50IGZyYWdtZW50SW5kZXggPSB1cmxTdHIuZmluZCgnIycpOw0KLSAgICAgICAgICAg
IGlmIChmcmFnbWVudEluZGV4ICE9IC0xKQ0KLSAgICAgICAgICAgICAgICB1cmxTdHIgPSB1cmxT
dHIubGVmdChmcmFnbWVudEluZGV4KTsNCi0gICAgICAgICAgICBTdHJpbmcgaGVhZGVyczsNCi0g
ICAgICAgICAgICBpZiAoIXJlZmVycmVyLmlzRW1wdHkoKSkNCi0gICAgICAgICAgICAgICAgaGVh
ZGVycyArPSBTdHJpbmcoIlJlZmVyZXI6ICIpICsgcmVmZXJyZXIgKyAiXHJcbiI7DQotDQotICAg
ICAgICAgICAgdXJsSGFuZGxlID0gSW50ZXJuZXRPcGVuVXJsQShpbnRlcm5ldEhhbmRsZSwgdXJs
U3RyLmxhdGluMSgpLmRhdGEoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhlYWRlcnMubGF0aW4xKCkuZGF0YSgpLCBoZWFkZXJzLmxlbmd0aCgpLA0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIChEV09SRF9QVFIpZC0+
bV9qb2JJZCk7DQotICAgICAgICB9DQorICAgICAgICBpZiAoIWFzeW5jaHJvbm91c0ludGVybmV0
SGFuZGxlKQ0KKyAgICAgICAgICAgIGFzeW5jaHJvbm91c0ludGVybmV0SGFuZGxlID0gY3JlYXRl
SW50ZXJuZXRIYW5kbGUocmVxdWVzdCgpLmh0dHBVc2VyQWdlbnQoKSwgdHJ1ZSk7DQogDQotICAg
ICAgICBpZiAodXJsSGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7DQotICAgICAgICAg
ICAgZGVsZXRlIHRoaXM7DQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KLSAgICAgICAgfQ0K
LSAgICAgICAgZC0+bV90aHJlYWRJZCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOw0KKyAgICAgICAg
ZC0+bV9pbnRlcm5ldEhhbmRsZSA9IGFzeW5jaHJvbm91c0ludGVybmV0SGFuZGxlOw0KKyAgICB9
DQogDQotICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgaWYgKCFkLT5tX2ludGVybmV0SGFuZGxl
KSB7DQorICAgICAgICBkZXJlZigpOw0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQor
DQorICAgIERXT1JEIGZsYWdzID0NCisgICAgICAgIElOVEVSTkVUX0ZMQUdfS0VFUF9DT05ORUNU
SU9OIHwNCisgICAgICAgIElOVEVSTkVUX0ZMQUdfSUdOT1JFX1JFRElSRUNUX1RPX0hUVFBTIHwN
CisgICAgICAgIElOVEVSTkVUX0ZMQUdfSUdOT1JFX1JFRElSRUNUX1RPX0hUVFAgfA0KKyAgICAg
ICAgSU5URVJORVRfRkxBR19OT19DQUNIRV9XUklURTsNCisNCisgICAgZC0+bV9jb25uZWN0SGFu
ZGxlID0gSW50ZXJuZXRDb25uZWN0VyhkLT5tX2ludGVybmV0SGFuZGxlLA0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QoKS51cmwoKS5ob3N0KCkuY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXF1ZXN0KCkudXJsKCkucG9ydCgpLA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8vIG5vIHVzZXJuYW1lDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLy8gbm8gcGFzc3dvcmQNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFUk5FVF9TRVJWSUNFX0hU
VFAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxEV09SRF9QVFI+KHRoaXMpKTsNCisNCisgICAgaWYgKCFkLT5tX2Nvbm5lY3RIYW5kbGUpIHsN
CisgICAgICAgIGRlcmVmKCk7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisg
ICAgU3RyaW5nIHVybFN0ciA9IHJlcXVlc3QoKS51cmwoKS5wYXRoKCk7DQorICAgIFN0cmluZyB1
cmxRdWVyeSA9IHJlcXVlc3QoKS51cmwoKS5xdWVyeSgpOw0KKw0KKyAgICBpZiAoIXVybFF1ZXJ5
LmlzRW1wdHkoKSkgew0KKyAgICAgICAgdXJsU3RyLmFwcGVuZCgnPycpOw0KKyAgICAgICAgdXJs
U3RyLmFwcGVuZCh1cmxRdWVyeSk7DQorICAgIH0NCisNCisgICAgU3RyaW5nIGh0dHBNZXRob2Qg
PSByZXF1ZXN0KCkuaHR0cE1ldGhvZCgpOw0KKyAgICBTdHJpbmcgaHR0cFJlZmVycmVyID0gcmVx
dWVzdCgpLmh0dHBSZWZlcnJlcigpOw0KKw0KKyAgICBMUENXU1RSIGh0dHBBY2NlcHRbXSA9IHsg
TCIqLyoiLCAwIH07DQorDQorICAgIGQtPm1fcmVxdWVzdEhhbmRsZSA9IEh0dHBPcGVuUmVxdWVz
dFcoZC0+bV9jb25uZWN0SGFuZGxlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGh0dHBNZXRob2QuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwNCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxTdHIuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGh0dHBSZWZlcnJlci5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBBY2NlcHQsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsDQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxEV09SRF9QVFI+KHRo
aXMpKTsNCisNCisgICAgaWYgKCFkLT5tX3JlcXVlc3RIYW5kbGUpIHsNCisgICAgICAgIEludGVy
bmV0Q2xvc2VIYW5kbGUoZC0+bV9jb25uZWN0SGFuZGxlKTsNCisgICAgICAgIGRlcmVmKCk7DQor
ICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgaWYgKHJlcXVlc3QoKS5odHRw
Qm9keSgpKSB7DQorICAgICAgICByZXF1ZXN0KCkuaHR0cEJvZHkoKS0+ZmxhdHRlbihkLT5tX2Zv
cm1EYXRhKTsNCisgICAgICAgIGQtPm1fYnl0ZXNSZW1haW5pbmdUb1dyaXRlID0gZC0+bV9mb3Jt
RGF0YS5zaXplKCk7DQorICAgIH0NCisNCisgICAgU3RyaW5nIGh0dHBIZWFkZXJzOw0KKyAgICBj
b25zdCBIVFRQSGVhZGVyTWFwJiBodHRwSGVhZGVyRmllbGRzID0gcmVxdWVzdCgpLmh0dHBIZWFk
ZXJGaWVsZHMoKTsNCisNCisgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IGh0dHBIZWFkZXJGaWVsZHMuYmVnaW4oKTsgaXQgIT0gaHR0cEhlYWRlckZpZWxkcy5lbmQo
KTsgKytpdCkgew0KKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgIkFj
Y2VwdCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwgIlJlZmVyZXIiKSB8fCBlcXVh
bElnbm9yaW5nQ2FzZShpdC0+Zmlyc3QsICJVc2VyLUFnZW50IikpDQorICAgICAgICAgICAgY29u
dGludWU7DQorDQorICAgICAgICBpZiAoIWh0dHBIZWFkZXJzLmlzRW1wdHkoKSkNCisgICAgICAg
ICAgICBodHRwSGVhZGVycy5hcHBlbmQoJ1xuJyk7DQorDQorICAgICAgICBodHRwSGVhZGVycy5h
cHBlbmQoaXQtPmZpcnN0KTsNCisgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZCgnOicpOw0KKyAg
ICAgICAgaHR0cEhlYWRlcnMuYXBwZW5kKGl0LT5zZWNvbmQpOw0KKyAgICB9DQorDQorICAgIElO
VEVSTkVUX0JVRkZFUlNXIGludGVybmV0QnVmZmVyczsNCisgICAgWmVyb01lbW9yeSgmaW50ZXJu
ZXRCdWZmZXJzLCBzaXplb2YoSU5URVJORVRfQlVGRkVSU1cpKTsNCisgICAgaW50ZXJuZXRCdWZm
ZXJzLmR3U3RydWN0U2l6ZSA9IHNpemVvZihJTlRFUk5FVF9CVUZGRVJTVyk7DQorICAgIGludGVy
bmV0QnVmZmVycy5scGNzekhlYWRlciA9IGh0dHBIZWFkZXJzLmNoYXJhY3RlcnMoKTsNCisgICAg
aW50ZXJuZXRCdWZmZXJzLmR3SGVhZGVyc0xlbmd0aCA9IGh0dHBIZWFkZXJzLmxlbmd0aCgpOw0K
KyAgICBpbnRlcm5ldEJ1ZmZlcnMubHB2QnVmZmVyID0gTlVMTDsNCisgICAgaW50ZXJuZXRCdWZm
ZXJzLmR3QnVmZmVyTGVuZ3RoID0gMDsNCisgICAgaW50ZXJuZXRCdWZmZXJzLmR3QnVmZmVyVG90
YWwgPSBkLT5tX2J5dGVzUmVtYWluaW5nVG9Xcml0ZTsNCisNCisgICAgSHR0cFNlbmRSZXF1ZXN0
RXhXKGQtPm1fcmVxdWVzdEhhbmRsZSwNCisgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcm5l
dEJ1ZmZlcnMsDQorICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KKyAgICAgICAgICAgICAg
ICAgICAgICAgMCwNCisgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8RFdP
UkRfUFRSPih0aGlzKSk7DQorDQorICAgIGlmIChkLT5tX2xvYWRTeW5jaHJvbm91c2x5KQ0KKyAg
ICAgICAgd2hpbGUgKG9uUmVxdWVzdENvbXBsZXRlKCkpIHsNCisgICAgICAgICAgICAvLyBMb29w
IHVudGlsIGZpbmlzaGVkLg0KKyAgICAgICAgfQ0KKw0KKyAgICByZXR1cm4gdHJ1ZTsNCit9DQor
DQordm9pZCBSZXNvdXJjZUhhbmRsZTo6ZmlsZUxvYWRUaW1lcihUaW1lcjxSZXNvdXJjZUhhbmRs
ZT4qKQ0KK3sNCisgICAgaWYgKHJlcXVlc3QoKS51cmwoKS5wcm90b2NvbElzKCJkYXRhIikpIHsN
CisgICAgICAgIGhhbmRsZURhdGFVUkwoKTsNCisgICAgICAgIGRlcmVmKCk7DQorICAgICAgICBy
ZXR1cm47DQorICAgIH0NCisNCisgICAgU3RyaW5nIHBhdGggPSByZXF1ZXN0KCkudXJsKCkucGF0
aCgpOw0KKyAgICAvLyB3aW5kb3dzIGRvZXMgbm90IGVuam95IGEgbGVhZGluZyBzbGFzaCBvbiBw
YXRocw0KKyAgICBpZiAocGF0aFswXSA9PSAnLycpDQorICAgICAgICBwYXRoID0gcGF0aC5zdWJz
dHJpbmcoMSk7DQorDQorICAgIGludCBxdWVyeVBvcyA9IHBhdGguZmluZCgnPycpOw0KKyAgICBp
ZiAocXVlcnlQb3MgIT0gLTEpDQorICAgICAgICBwYXRoLnJlbW92ZShxdWVyeVBvcyk7DQorDQor
ICAgIEhBTkRMRSBmaWxlSGFuZGxlID0gQ3JlYXRlRmlsZVcocGF0aC5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLCBHRU5FUklDX1JFQUQsIDAsIE5VTEwsIE9QRU5fRVhJU1RJTkcsIEZJ
TEVfQVRUUklCVVRFX05PUk1BTCwgTlVMTCk7DQorDQorICAgIGlmIChmaWxlSGFuZGxlID09IElO
VkFMSURfSEFORExFX1ZBTFVFKSB7DQorICAgICAgICBjbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCBS
ZXNvdXJjZUVycm9yKCkpOw0KKyAgICAgICAgZGVyZWYoKTsNCisgICAgICAgIHJldHVybjsNCiAg
ICAgfQ0KLX0NCiANCi12b2lkIFJlc291cmNlSGFuZGxlOjpmaWxlTG9hZFRpbWVyKFRpbWVyPFJl
c291cmNlSGFuZGxlPiogdGltZXIpDQotew0KICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNl
Ow0KKw0KKyAgICBpbnQgZG90UG9zID0gcGF0aC5yZXZlcnNlRmluZCgnLicpOw0KKyAgICBpbnQg
c2xhc2hQb3MgPSBwYXRoLnJldmVyc2VGaW5kKCcvJyk7DQorDQorICAgIGlmIChzbGFzaFBvcyA8
IGRvdFBvcyAmJiBkb3RQb3MgIT0tMSkgew0KKyAgICAgICAgU3RyaW5nIGV4dCA9IHBhdGguc3Vi
c3RyaW5nKGRvdFBvcyArIDEpOw0KKyAgICAgICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUoTUlNRVR5
cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oZXh0KSk7DQorICAgIH0NCisNCiAg
ICAgY2xpZW50KCktPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCByZXNwb25zZSk7DQogDQogICAg
IGJvb2wgcmVzdWx0ID0gZmFsc2U7DQpAQCAtNDIwLDQzICs0MzksNzUgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6ZmlsZUxvYWRUaW1lcihUaW1lcg0KICAgICBkbyB7DQogICAgICAgICBjb25zdCBp
bnQgYnVmZmVyU2l6ZSA9IDgxOTI7DQogICAgICAgICBjaGFyIGJ1ZmZlcltidWZmZXJTaXplXTsN
Ci0gICAgICAgIHJlc3VsdCA9IFJlYWRGaWxlKGQtPm1fZmlsZUhhbmRsZSwgJmJ1ZmZlciwgYnVm
ZmVyU2l6ZSwgJmJ5dGVzUmVhZCwgTlVMTCk7IA0KKyAgICAgICAgcmVzdWx0ID0gUmVhZEZpbGUo
ZmlsZUhhbmRsZSwgJmJ1ZmZlciwgYnVmZmVyU2l6ZSwgJmJ5dGVzUmVhZCwgTlVMTCk7DQogICAg
ICAgICBpZiAocmVzdWx0ICYmIGJ5dGVzUmVhZCkNCiAgICAgICAgICAgICBjbGllbnQoKS0+ZGlk
UmVjZWl2ZURhdGEodGhpcywgYnVmZmVyLCBieXRlc1JlYWQsIDApOw0KLSAgICAgICAgLy8gQ2hl
Y2sgZm9yIGVuZCBvZiBmaWxlLiANCisgICAgICAgIC8vIENoZWNrIGZvciBlbmQgb2YgZmlsZS4N
CiAgICAgfSB3aGlsZSAocmVzdWx0ICYmIGJ5dGVzUmVhZCk7DQogDQotICAgIC8vIEZJWE1FOiBo
YW5kbGUgZXJyb3JzIGJldHRlcg0KLQ0KLSAgICBDbG9zZUhhbmRsZShkLT5tX2ZpbGVIYW5kbGUp
Ow0KLSAgICBkLT5tX2ZpbGVIYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsNCisgICAgQ2xv
c2VIYW5kbGUoZmlsZUhhbmRsZSk7DQogDQogICAgIGNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5n
KHRoaXMpOw0KKyAgICBkZXJlZigpOw0KIH0NCiANCiB2b2lkIFJlc291cmNlSGFuZGxlOjpjYW5j
ZWwoKQ0KIHsNCi0gICAgaWYgKGQtPm1fcmVzb3VyY2VIYW5kbGUpDQotICAgICAgICBJbnRlcm5l
dENsb3NlSGFuZGxlKGQtPm1fcmVzb3VyY2VIYW5kbGUpOw0KLSAgICBlbHNlDQorICAgIGlmIChk
LT5tX3JlcXVlc3RIYW5kbGUpIHsNCisgICAgICAgIGQtPm1faW50ZXJuZXRIYW5kbGUgPSAwOw0K
KyAgICAgICAgSW50ZXJuZXRDbG9zZUhhbmRsZShkLT5tX3JlcXVlc3RIYW5kbGUpOw0KKyAgICAg
ICAgSW50ZXJuZXRDbG9zZUhhbmRsZShkLT5tX2Nvbm5lY3RIYW5kbGUpOw0KKyAgICB9IGVsc2UN
CiAgICAgICAgIGQtPm1fZmlsZUxvYWRUaW1lci5zdG9wKCk7DQorfQ0KIA0KLSAgICBjbGllbnQo
KS0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsgDQordm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJl
c291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3Jl
ZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSwgRnJhbWUqIGZyYW1l
KQ0KK3sNCisgICAgVU5VU0VEX1BBUkFNKHN0b3JlZENyZWRlbnRpYWxzKTsNCiANCi0gICAgaWYg
KCFkLT5tX3Jlc291cmNlSGFuZGxlKQ0KLSAgICAgICAgLy8gQXN5bmMgbG9hZCBjYW5jZWxlZCBi
ZWZvcmUgd2UgaGF2ZSBhIGhhbmRsZSAtLSBtYXJrIG91cnNlbHZlcyBhcyBpbiBlcnJvciwgdG8g
YmUgZGVsZXRlZCBsYXRlci4NCi0gICAgICAgIC8vIEZJWE1FOiBuZWVkIHJlYWwgY2FuY2VsIGVy
cm9yDQotICAgICAgICBjbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCBSZXNvdXJjZUVycm9yKCkpOw0K
KyAgICBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIgc3luY0xvYWRlcihlcnJvciwgcmVzcG9uc2Us
IGRhdGEsIHJlcXVlc3QuaHR0cFVzZXJBZ2VudCgpKTsNCisgICAgUmVzb3VyY2VIYW5kbGUgaGFu
ZGxlKHJlcXVlc3QsICZzeW5jTG9hZGVyLCB0cnVlLCBmYWxzZSk7DQorDQorICAgIGhhbmRsZS5z
ZXRTeW5jaHJvbm91c0ludGVybmV0SGFuZGxlKHN5bmNMb2FkZXIuaW50ZXJuZXRIYW5kbGUoKSk7
DQorICAgIGhhbmRsZS5zdGFydChmcmFtZSk7DQorfQ0KKw0KK3ZvaWQgUmVzb3VyY2VIYW5kbGU6
OnNldFN5bmNocm9ub3VzSW50ZXJuZXRIYW5kbGUoSElOVEVSTkVUIGludGVybmV0SGFuZGxlKQ0K
K3sNCisgICAgZC0+bV9pbnRlcm5ldEhhbmRsZSA9IGludGVybmV0SGFuZGxlOw0KKyAgICBkLT5t
X2xvYWRTeW5jaHJvbm91c2x5ID0gdHJ1ZTsNCit9DQorDQorYm9vbCBSZXNvdXJjZUhhbmRsZTo6
d2lsbExvYWRGcm9tQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0JiByZXEsIEZyYW1lKikNCit7DQorICAg
IG5vdEltcGxlbWVudGVkKCk7DQorICAgIHJldHVybiBmYWxzZTsNCit9DQorDQordm9pZCBwcmVm
ZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQ0KK3sNCisgICAgbm90SW1wbGVtZW50ZWQo
KTsNCit9DQorDQorUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFJlc291cmNlSGFuZGxlOjpidWZm
ZXJlZERhdGEoKQ0KK3sNCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7DQorICAgIHJldHVybiAw
Ow0KK30NCisNCitib29sIFJlc291cmNlSGFuZGxlOjpzdXBwb3J0c0J1ZmZlcmVkRGF0YSgpDQor
ew0KKyAgICByZXR1cm4gZmFsc2U7DQogfQ0KIA0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldEhh
c1JlY2VpdmVkUmVzcG9uc2UoYm9vbCBiKQ0KK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OmxvYWRzQmxv
Y2tlZCgpDQogew0KLSAgICBkLT5tX2hhc1JlY2VpdmVkUmVzcG9uc2UgPSBiOw0KKyAgICByZXR1
cm4gZmFsc2U7DQogfQ0KIA0KLWJvb2wgUmVzb3VyY2VIYW5kbGU6Omhhc1JlY2VpdmVkUmVzcG9u
c2UoKSBjb25zdA0KK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVmZXJzTG9hZGlu
Zyhib29sKQ0KIHsNCi0gICAgcmV0dXJuIGQtPm1faGFzUmVjZWl2ZWRSZXNwb25zZTsNCisgICAg
bm90SW1wbGVtZW50ZWQoKTsNCiB9DQogDQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uaA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4u
aAkocmV2aXNpb24gNjI1NDcpDQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNv
dXJjZUhhbmRsZVdpbi5oCSh3b3JraW5nIGNvcHkpDQpAQCAtMSw0NiArMCwwIEBADQotLyoNCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuDQotICoNCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCi0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCi0gKiBhcmUg
bWV0Og0KLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0DQotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQ0KLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQotICoNCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZDQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUNCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1INCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwN
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sDQotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SDQotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQ0KLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVA0K
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQ0KLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIA0KLSAqLw0KLQ0KLSNpZm5kZWYgUmVz
b3VyY2VIYW5kbGVXaW5faA0KLSNkZWZpbmUgUmVzb3VyY2VIYW5kbGVXaW5faA0KLQ0KLSNpbmNs
dWRlIDx3aW5kb3dzLmg+DQotDQotbmFtZXNwYWNlIFdlYkNvcmUgew0KLQ0KLXN0cnVjdCBQbGF0
Zm9ybURhdGFTdHJ1Y3QNCi17DQotICAgIERXT1JEICAgZXJyb3I7DQotICAgIEJPT0wgICAgbG9h
ZGVkOw0KLSAgICBMUFRTVFIgIGVycm9yU3RyaW5nOw0KLX07DQotDQotc3RydWN0IFBsYXRmb3Jt
UmVzcG9uc2VTdHJ1Y3QNCi17DQotfTsNCi0NCi19DQotDQotI2VuZGlmDQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62440</attachid>
            <date>2010-07-23 10:09:31 -0700</date>
            <delta_ts>2010-10-20 05:06:35 -0700</delta_ts>
            <desc>Complete reimplementation of ResourceHandleWin</desc>
            <filename>bug-27376.patch</filename>
            <type>text/plain</type>
            <size>39163</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDYzOTg0KQ0KKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
DQpAQCAtMSwzICsxLDQ2IEBADQorMjAxMC0wNy0yMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJv
Z2FAcGFyb2dhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbV0lOQ0VdIEFkZCBXaW5DRSBzcGVjaWZpYyBmaWxlcyBmb3IgcGxhdGZvcm0vbmV0
d29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjcz
NzYKKworICAgICAgICBSZWltcGxlbWVudCB0aGUgd2hvbGUgUmVzb3VyY2VIYW5kbGVXaW4gdG8g
d29yayBvbiBXaW5DRS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OlJlc291cmNlSGFu
ZGxlSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFu
ZGxlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludGVybmV0SGFuZGxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFzeW5jaHJvbm91c0ludGVybmV0SGFuZGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6aW50ZXJuZXRIYW5kbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpXZWJDb3JlU3luY2hyb25vdXNM
b2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjp+V2Vi
Q29yZVN5bmNocm9ub3VzTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTeW5jaHJv
bm91c0xvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNv
cmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhbGxPblJlZGlyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGxPblJl
cXVlc3RDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6aW50ZXJu
ZXRTdGF0dXNDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6b25S
ZWRpcmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6b25SZXF1ZXN0Q29t
cGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnF1ZXJ5SFRUUEhlYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmZpbGVMb2FkVGltZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGU6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhh
bmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZTo6c2V0U3luY2hyb25vdXNJbnRlcm5ldEhhbmRsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6cHJlZmV0Y2hETlMpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmJ1ZmZl
cmVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c3VwcG9ydHNCdWZm
ZXJlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmxvYWRzQmxvY2tl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1TZXREZWZlcnNM
b2FkaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdp
bi5oOiBSZW1vdmVkLgorCiAyMDEwLTA3LTIzICBKdXN0aW4gU2NodWggIDxqc2NodWhAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI2MzkyNS4KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHJldmlzaW9uIDYy
NTQ3KQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCSh3b3Jr
aW5nIGNvcHkpDQpAQCAtNDUsMTEgKzQ1LDYgQEAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIERXT1JE
Ow0KIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBEV09SRF9QVFI7DQogdHlwZWRlZiB2b2lkKiBMUFZP
SUQ7DQogdHlwZWRlZiBMUFZPSUQgSElOVEVSTkVUOw0KLXR5cGVkZWYgdW5zaWduZWQgV1BBUkFN
Ow0KLXR5cGVkZWYgbG9uZyBMUEFSQU07DQotdHlwZWRlZiBzdHJ1Y3QgSFdORF9fKiBIV05EOw0K
LXR5cGVkZWYgX1c2NCBsb25nIExPTkdfUFRSOw0KLXR5cGVkZWYgTE9OR19QVFIgTFJFU1VMVDsN
CiAjZW5kaWYNCiANCiANCkBAIC0xNjcsMTQgKzE2MiwxMyBAQCBwdWJsaWM6DQogICAgIHN0YXRp
YyB2b2lkIGZvcmNlQ29udGVudFNuaWZmaW5nKCk7DQogDQogI2lmIFVTRShXSU5JTkVUKQ0KLSAg
ICB2b2lkIHNldEhhc1JlY2VpdmVkUmVzcG9uc2UoYm9vbCA9IHRydWUpOw0KLSAgICBib29sIGhh
c1JlY2VpdmVkUmVzcG9uc2UoKSBjb25zdDsNCisgICAgdm9pZCBzZXRTeW5jaHJvbm91c0ludGVy
bmV0SGFuZGxlKEhJTlRFUk5FVCk7DQorICAgIEhJTlRFUk5FVCBpbnRlcm5ldEhhbmRsZSgpIGNv
bnN0Ow0KKyAgICB2b2lkIG9uUmVkaXJlY3QoKTsNCisgICAgYm9vbCBvblJlcXVlc3RDb21wbGV0
ZSgpOw0KICAgICB2b2lkIGZpbGVMb2FkVGltZXIoVGltZXI8UmVzb3VyY2VIYW5kbGU+Kik7DQot
ICAgIHZvaWQgb25IYW5kbGVDcmVhdGVkKExQQVJBTSk7DQotICAgIHZvaWQgb25SZXF1ZXN0UmVk
aXJlY3RlZChMUEFSQU0pOw0KLSAgICB2b2lkIG9uUmVxdWVzdENvbXBsZXRlKExQQVJBTSk7DQot
ICAgIGZyaWVuZCB2b2lkIF9fc3RkY2FsbCB0cmFuc2ZlckpvYlN0YXR1c0NhbGxiYWNrKEhJTlRF
Uk5FVCwgRFdPUkRfUFRSLCBEV09SRCwgTFBWT0lELCBEV09SRCk7DQotICAgIGZyaWVuZCBMUkVT
VUxUIF9fc3RkY2FsbCBSZXNvdXJjZUhhbmRsZVduZFByb2MoSFdORCwgdW5zaWduZWQgbWVzc2Fn
ZSwgV1BBUkFNLCBMUEFSQU0pOw0KKyAgICBzdGF0aWMgdm9pZCBDQUxMQkFDSyBpbnRlcm5ldFN0
YXR1c0NhbGxiYWNrKEhJTlRFUk5FVCwgRFdPUkRfUFRSLCBEV09SRCwgTFBWT0lELCBEV09SRCk7
DQorICAgIFN0cmluZyBxdWVyeUhUVFBIZWFkZXIoRFdPUkQgaW5mb0xldmVsKTsNCiAjZW5kaWYN
CiANCiAjaWYgUExBVEZPUk0oUVQpIHx8IFVTRShDVVJMKSB8fCBVU0UoU09VUCkgfHwgUExBVEZP
Uk0oQU5EUk9JRCkNCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jl
c291cmNlSGFuZGxlSW50ZXJuYWwuaAkocmV2aXNpb24gNjI1NDcpDQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQ0KQEAg
LTkyLDE4ICs5MiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7DQogICAgICAgICAgICAgLCBtX2Nv
bm5lY3Rpb24oMCkNCiAjZW5kaWYNCiAjaWYgVVNFKFdJTklORVQpDQotICAgICAgICAgICAgLCBt
X2ZpbGVIYW5kbGUoSU5WQUxJRF9IQU5ETEVfVkFMVUUpDQogICAgICAgICAgICAgLCBtX2ZpbGVM
b2FkVGltZXIobG9hZGVyLCAmUmVzb3VyY2VIYW5kbGU6OmZpbGVMb2FkVGltZXIpDQotICAgICAg
ICAgICAgLCBtX3Jlc291cmNlSGFuZGxlKDApDQotICAgICAgICAgICAgLCBtX3NlY29uZGFyeUhh
bmRsZSgwKQ0KLSAgICAgICAgICAgICwgbV9qb2JJZCgwKQ0KLSAgICAgICAgICAgICwgbV90aHJl
YWRJZCgwKQ0KLSAgICAgICAgICAgICwgbV93cml0aW5nKGZhbHNlKQ0KLSAgICAgICAgICAgICwg
bV9mb3JtRGF0YVN0cmluZygwKQ0KLSAgICAgICAgICAgICwgbV9mb3JtRGF0YUxlbmd0aCgwKQ0K
LSAgICAgICAgICAgICwgbV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUoMCkNCisgICAgICAgICAgICAs
IG1faW50ZXJuZXRIYW5kbGUoMCkNCisgICAgICAgICAgICAsIG1fY29ubmVjdEhhbmRsZSgwKQ0K
KyAgICAgICAgICAgICwgbV9yZXF1ZXN0SGFuZGxlKDApDQorICAgICAgICAgICAgLCBtX3NlbnRF
bmRSZXF1ZXN0KGZhbHNlKQ0KKyAgICAgICAgICAgICwgbV9sb2FkU3luY2hyb25vdXNseShmYWxz
ZSkNCiAgICAgICAgICAgICAsIG1faGFzUmVjZWl2ZWRSZXNwb25zZShmYWxzZSkNCi0gICAgICAg
ICAgICAsIG1fcmVzZW5kKGZhbHNlKQ0KKyAgICAgICAgICAgICwgbV9ieXRlc1JlbWFpbmluZ1Rv
V3JpdGUoMCkNCiAjZW5kaWYNCiAjaWYgVVNFKENVUkwpDQogICAgICAgICAgICAgLCBtX2hhbmRs
ZSgwKQ0KQEAgLTE3MCwxOSArMTY2LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsNCiAgICAgICAg
IGJvb2wgbV9uZWVkc1NpdGVTcGVjaWZpY1F1aXJrczsNCiAjZW5kaWYNCiAjaWYgVVNFKFdJTklO
RVQpDQotICAgICAgICBIQU5ETEUgbV9maWxlSGFuZGxlOw0KICAgICAgICAgVGltZXI8UmVzb3Vy
Y2VIYW5kbGU+IG1fZmlsZUxvYWRUaW1lcjsNCi0gICAgICAgIEhJTlRFUk5FVCBtX3Jlc291cmNl
SGFuZGxlOw0KLSAgICAgICAgSElOVEVSTkVUIG1fc2Vjb25kYXJ5SGFuZGxlOw0KLSAgICAgICAg
dW5zaWduZWQgbV9qb2JJZDsNCi0gICAgICAgIERXT1JEIG1fdGhyZWFkSWQ7DQotICAgICAgICBi
b29sIG1fd3JpdGluZzsNCi0gICAgICAgIGNoYXIqIG1fZm9ybURhdGFTdHJpbmc7DQotICAgICAg
ICBpbnQgbV9mb3JtRGF0YUxlbmd0aDsNCi0gICAgICAgIGludCBtX2J5dGVzUmVtYWluaW5nVG9X
cml0ZTsNCi0gICAgICAgIFN0cmluZyBtX3Bvc3RSZWZlcnJlcjsNCisgICAgICAgIEhJTlRFUk5F
VCBtX2ludGVybmV0SGFuZGxlOw0KKyAgICAgICAgSElOVEVSTkVUIG1fY29ubmVjdEhhbmRsZTsN
CisgICAgICAgIEhJTlRFUk5FVCBtX3JlcXVlc3RIYW5kbGU7DQorICAgICAgICBWZWN0b3I8Y2hh
cj4gbV9mb3JtRGF0YTsNCisgICAgICAgIHNpemVfdCBtX2J5dGVzUmVtYWluaW5nVG9Xcml0ZTsN
CisgICAgICAgIGJvb2wgbV9sb2FkU3luY2hyb25vdXNseTsNCisgICAgICAgIGJvb2wgbV9zZW50
RW5kUmVxdWVzdDsNCiAgICAgICAgIGJvb2wgbV9oYXNSZWNlaXZlZFJlc3BvbnNlOw0KLSAgICAg
ICAgYm9vbCBtX3Jlc2VuZDsNCisgICAgICAgIFN0cmluZyBtX3JlZGlyZWN0VXJsOw0KICNlbmRp
Zg0KICNpZiBVU0UoQ1VSTCkNCiAgICAgICAgIENVUkwqIG1faGFuZGxlOw0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAJ
KHJldmlzaW9uIDYyNTQ3KQ0KKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3Vy
Y2VIYW5kbGVXaW4uY3BwCSh3b3JraW5nIGNvcHkpDQpAQCAtMSw1ICsxLDYgQEANCiAvKg0KICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4NCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBh
cm9nYUBwYXJvZ2EuY29tPg0KICAqDQogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQpAQCAt
MjYsMjA2ICsyNywxOTEgQEANCiAjaW5jbHVkZSAiY29uZmlnLmgiDQogI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlLmgiDQogDQotI2luY2x1ZGUgIkRvY0xvYWRlci5oIg0KLSNpbmNsdWRlICJEb2N1
bWVudC5oIg0KLSNpbmNsdWRlICJGcmFtZS5oIg0KLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIg0K
LSNpbmNsdWRlICJQYWdlLmgiDQorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiDQorI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCINCisjaW5jbHVkZSAiTWFpblRocmVhZC5oIg0KKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIg0KICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiDQogI2luY2x1
ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiDQogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50
ZXJuYWwuaCINCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVXaW4uaCINCisjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiDQogI2luY2x1ZGUgIlRpbWVyLmgiDQotI2luY2x1ZGUgIldlYkNvcmVJbnN0
YW5jZUhhbmRsZS5oIg0KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+DQorI2luY2x1ZGUg
IlVudXNlZFBhcmFtLmgiDQogI2luY2x1ZGUgPHdpbmRvd3MuaD4NCiAjaW5jbHVkZSA8d2luaW5l
dC5oPg0KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+DQogDQogbmFtZXNwYWNlIFdlYkNv
cmUgew0KIA0KLXN0YXRpYyB1bnNpZ25lZCB0cmFuc2ZlckpvYklkID0gMDsNCi1zdGF0aWMgSGFz
aE1hcDxpbnQsIFJlc291cmNlSGFuZGxlKj4qIGpvYklkTWFwID0gMDsNCitzdGF0aWMgaW5saW5l
IEhJTlRFUk5FVCBjcmVhdGVJbnRlcm5ldEhhbmRsZShjb25zdCBTdHJpbmcmIHVzZXJBZ2VudCwg
Ym9vbCBhc3luY2hyb25vdXMpDQorew0KKyAgICBTdHJpbmcgdXNlckFnZW50U3RyaW5nID0gdXNl
ckFnZW50Ow0KKyAgICBISU5URVJORVQgaW50ZXJuZXRIYW5kbGUgPSBJbnRlcm5ldE9wZW5XKHVz
ZXJBZ2VudFN0cmluZy5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBJTlRFUk5FVF9P
UEVOX1RZUEVfUFJFQ09ORklHLCAwLCAwLCBhc3luY2hyb25vdXMgPyBJTlRFUk5FVF9GTEFHX0FT
WU5DIDogMCk7DQorICAgIGlmIChhc3luY2hyb25vdXMpDQorICAgICAgICBJbnRlcm5ldFNldFN0
YXR1c0NhbGxiYWNrKGludGVybmV0SGFuZGxlLCAmUmVzb3VyY2VIYW5kbGU6OmludGVybmV0U3Rh
dHVzQ2FsbGJhY2spOw0KKyAgICByZXR1cm4gaW50ZXJuZXRIYW5kbGU7DQorfQ0KIA0KLXN0YXRp
YyBIV05EIHRyYW5zZmVySm9iV2luZG93SGFuZGxlID0gMDsNCi1jb25zdCBMUENXU1RSIGtSZXNv
dXJjZUhhbmRsZVdpbmRvd0NsYXNzTmFtZSA9IEwiUmVzb3VyY2VIYW5kbGVXaW5kb3dDbGFzcyI7
DQorc3RhdGljIEhJTlRFUk5FVCBhc3luY2hyb25vdXNJbnRlcm5ldEhhbmRsZShjb25zdCBTdHJp
bmcmIHVzZXJBZ2VudCkNCit7DQorICAgIHN0YXRpYyBISU5URVJORVQgaW50ZXJuZXRIYW5kbGUg
PSAwOw0KKw0KKyAgICBpZiAoIWludGVybmV0SGFuZGxlKQ0KKyAgICAgICAgaW50ZXJuZXRIYW5k
bGUgPSBjcmVhdGVJbnRlcm5ldEhhbmRsZSh1c2VyQWdlbnQsIHRydWUpOw0KKw0KKyAgICByZXR1
cm4gaW50ZXJuZXRIYW5kbGU7DQorfQ0KIA0KLS8vIE1lc3NhZ2UgdHlwZXMgZm9yIGludGVybmFs
IHVzZSAoa2VlcCBpbiBzeW5jIHdpdGgga01lc3NhZ2VIYW5kbGVycykNCi1lbnVtIHsNCi0gIGhh
bmRsZUNyZWF0ZWRNZXNzYWdlID0gV01fVVNFUiwNCi0gIHJlcXVlc3RSZWRpcmVjdGVkTWVzc2Fn
ZSwNCi0gIHJlcXVlc3RDb21wbGV0ZU1lc3NhZ2UNCi19Ow0KIA0KLXR5cGVkZWYgdm9pZCAoUmVz
b3VyY2VIYW5kbGU6OiAqUmVzb3VyY2VIYW5kbGVFdmVudEhhbmRsZXIpKExQQVJBTSk7DQotc3Rh
dGljIGNvbnN0IFJlc291cmNlSGFuZGxlRXZlbnRIYW5kbGVyIG1lc3NhZ2VIYW5kbGVyc1tdID0g
ew0KLSAgICAmUmVzb3VyY2VIYW5kbGU6Om9uSGFuZGxlQ3JlYXRlZCwNCi0gICAgJlJlc291cmNl
SGFuZGxlOjpvblJlcXVlc3RSZWRpcmVjdGVkLA0KLSAgICAmUmVzb3VyY2VIYW5kbGU6Om9uUmVx
dWVzdENvbXBsZXRlDQorY2xhc3MgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIDogcHVibGljIFJl
c291cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgTm9uY29weWFibGUgew0KK3B1YmxpYzoNCisgICAg
V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNl
ICYsIFZlY3RvcjxjaGFyPiYsIGNvbnN0IFN0cmluZyYgdXNlckFnZW50KTsNCisgICAgfldlYkNv
cmVTeW5jaHJvbm91c0xvYWRlcigpOw0KKw0KKyAgICBISU5URVJORVQgaW50ZXJuZXRIYW5kbGUo
KSBjb25zdCB7IHJldHVybiBtX2ludGVybmV0SGFuZGxlOyB9DQorDQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7DQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSos
IGNvbnN0IGNoYXIqLCBpbnQsIGludCBsZW5ndGhSZWNlaXZlZCk7DQorICAgIHZpcnR1YWwgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKik7DQorICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOw0KKw0KK3ByaXZh
dGU6DQorICAgIFJlc291cmNlRXJyb3ImIG1fZXJyb3I7DQorICAgIFJlc291cmNlUmVzcG9uc2Um
IG1fcmVzcG9uc2U7DQorICAgIFZlY3RvcjxjaGFyPiYgbV9kYXRhOw0KKyAgICBISU5URVJORVQg
bV9pbnRlcm5ldEhhbmRsZTsNCiB9Ow0KIA0KLXN0YXRpYyBpbnQgYWRkVG9PdXRzdGFuZGluZ0pv
YnMoUmVzb3VyY2VIYW5kbGUqIGpvYikNCitXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OldlYkNv
cmVTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSwgY29uc3QgU3RyaW5nJiB1c2VyQWdlbnQp
DQorICAgIDogbV9lcnJvcihlcnJvcikNCisgICAgLCBtX3Jlc3BvbnNlKHJlc3BvbnNlKQ0KKyAg
ICAsIG1fZGF0YShkYXRhKQ0KIHsNCi0gICAgaWYgKCFqb2JJZE1hcCkNCi0gICAgICAgIGpvYklk
TWFwID0gbmV3IEhhc2hNYXA8aW50LCBSZXNvdXJjZUhhbmRsZSo+Ow0KLSAgICB0cmFuc2Zlckpv
YklkKys7DQotICAgIGpvYklkTWFwLT5zZXQodHJhbnNmZXJKb2JJZCwgam9iKTsNCi0gICAgcmV0
dXJuIHRyYW5zZmVySm9iSWQ7DQorICAgIG1faW50ZXJuZXRIYW5kbGUgPSBjcmVhdGVJbnRlcm5l
dEhhbmRsZSh1c2VyQWdlbnQsIGZhbHNlKTsNCiB9DQogDQotc3RhdGljIHZvaWQgcmVtb3ZlRnJv
bU91dHN0YW5kaW5nSm9icyhpbnQgam9iSWQpDQorV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjp+
V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyKCkNCiB7DQotICAgIGlmICgham9iSWRNYXApDQotICAg
ICAgICByZXR1cm47DQotICAgIGpvYklkTWFwLT5yZW1vdmUoam9iSWQpOw0KKyAgICBJbnRlcm5l
dENsb3NlSGFuZGxlKG1faW50ZXJuZXRIYW5kbGUpOw0KIH0NCiANCi1zdGF0aWMgUmVzb3VyY2VI
YW5kbGUqIGxvb2t1cFJlc291cmNlSGFuZGxlKGludCBqb2JJZCkNCit2b2lkIFdlYkNvcmVTeW5j
aHJvbm91c0xvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpDQogew0KLSAgICBpZiAoIWpvYklkTWFwKQ0KLSAg
ICAgICAgcmV0dXJuIDA7DQotICAgIHJldHVybiBqb2JJZE1hcC0+Z2V0KGpvYklkKTsNCisgICAg
bV9yZXNwb25zZSA9IHJlc3BvbnNlOw0KIH0NCiANCi1zdGF0aWMgTFJFU1VMVCBDQUxMQkFDSyBS
ZXNvdXJjZUhhbmRsZVduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsDQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQQVJBTSB3UGFyYW0sIExQQVJB
TSBsUGFyYW0pDQordm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OmRpZFJlY2VpdmVEYXRh
KFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50KQ0KIHsN
Ci0gICAgaWYgKG1lc3NhZ2UgPj0gaGFuZGxlQ3JlYXRlZE1lc3NhZ2UpIHsNCi0gICAgICAgIFVJ
TlQgaW5kZXggPSBtZXNzYWdlIC0gaGFuZGxlQ3JlYXRlZE1lc3NhZ2U7DQotICAgICAgICBpZiAo
aW5kZXggPCBfY291bnRvZihtZXNzYWdlSGFuZGxlcnMpKSB7DQotICAgICAgICAgICAgdW5zaWdu
ZWQgam9iSWQgPSAodW5zaWduZWQpIHdQYXJhbTsNCi0gICAgICAgICAgICBSZXNvdXJjZUhhbmRs
ZSogam9iID0gbG9va3VwUmVzb3VyY2VIYW5kbGUoam9iSWQpOw0KLSAgICAgICAgICAgIGlmIChq
b2IpIHsNCi0gICAgICAgICAgICAgICAgQVNTRVJUKGpvYi0+ZC0+bV9qb2JJZCA9PSBqb2JJZCk7
DQotICAgICAgICAgICAgICAgIEFTU0VSVChqb2ItPmQtPm1fdGhyZWFkSWQgPT0gR2V0Q3VycmVu
dFRocmVhZElkKCkpOw0KLSAgICAgICAgICAgICAgICAoam9iLT4qKG1lc3NhZ2VIYW5kbGVyc1tp
bmRleF0pKShsUGFyYW0pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gMDsN
Ci0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gRGVmV2luZG93UHJvYyhoV25kLCBtZXNz
YWdlLCB3UGFyYW0sIGxQYXJhbSk7DQorICAgIG1fZGF0YS5hcHBlbmQoZGF0YSwgbGVuZ3RoKTsN
CiB9DQogDQotc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9mZlNjcmVlblJlc291cmNlSGFuZGxlV2lu
ZG93KCkNCit2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhS
ZXNvdXJjZUhhbmRsZSopDQogew0KLSAgICBpZiAodHJhbnNmZXJKb2JXaW5kb3dIYW5kbGUpDQot
ICAgICAgICByZXR1cm47DQotDQotICAgIFdORENMQVNTRVggd2NleDsNCi0gICAgbWVtc2V0KCZ3
Y2V4LCAwLCBzaXplb2YoV05EQ0xBU1NFWCkpOw0KLSAgICB3Y2V4LmNiU2l6ZSA9IHNpemVvZihX
TkRDTEFTU0VYKTsNCi0gICAgd2NleC5scGZuV25kUHJvYyAgICA9IFJlc291cmNlSGFuZGxlV25k
UHJvYzsNCi0gICAgd2NleC5oSW5zdGFuY2UgICAgICA9IFdlYkNvcmU6Omluc3RhbmNlSGFuZGxl
KCk7DQotICAgIHdjZXgubHBzekNsYXNzTmFtZSAgPSBrUmVzb3VyY2VIYW5kbGVXaW5kb3dDbGFz
c05hbWU7DQotICAgIFJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7DQorfQ0KIA0KLSAgICB0cmFuc2Zl
ckpvYldpbmRvd0hhbmRsZSA9IENyZWF0ZVdpbmRvdyhrUmVzb3VyY2VIYW5kbGVXaW5kb3dDbGFz
c05hbWUsIDAsIDAsIENXX1VTRURFRkFVTFQsIDAsIENXX1VTRURFRkFVTFQsIDAsDQotICAgICAg
ICBIV05EX01FU1NBR0UsIDAsIFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCksIDApOw0KK3ZvaWQg
V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
UmVzb3VyY2VFcnJvciYgZXJyb3IpDQorew0KKyAgICBtX2Vycm9yID0gZXJyb3I7DQogfQ0KIA0K
Kw0KIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkNCiB7
DQotICAgIGlmIChtX2ZpbGVIYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpDQotICAgICAg
ICBDbG9zZUhhbmRsZShtX2ZpbGVIYW5kbGUpOw0KIH0NCiANCiBSZXNvdXJjZUhhbmRsZTo6flJl
c291cmNlSGFuZGxlKCkNCiB7DQotICAgIGlmIChkLT5tX2pvYklkKQ0KLSAgICAgICAgcmVtb3Zl
RnJvbU91dHN0YW5kaW5nSm9icyhkLT5tX2pvYklkKTsNCiB9DQogDQotdm9pZCBSZXNvdXJjZUhh
bmRsZTo6b25IYW5kbGVDcmVhdGVkKExQQVJBTSBsUGFyYW0pDQorc3RhdGljIHZvaWQgY2FsbE9u
UmVkaXJlY3Qodm9pZCogY29udGV4dCkNCiB7DQotICAgIGlmICghZC0+bV9yZXNvdXJjZUhhbmRs
ZSkgew0KLSAgICAgICAgZC0+bV9yZXNvdXJjZUhhbmRsZSA9IEhJTlRFUk5FVChsUGFyYW0pOw0K
LSAgICAgICAgaWYgKGQtPnN0YXR1cyAhPSAwKSB7DQotICAgICAgICAgICAgLy8gV2Ugd2VyZSBj
YW5jZWxlZCBiZWZvcmUgV2luZG93cyBhY3R1YWxseSBjcmVhdGVkIGEgaGFuZGxlIGZvciB1cywg
Y2xvc2UgYW5kIGRlbGV0ZSBub3cuDQotICAgICAgICAgICAgSW50ZXJuZXRDbG9zZUhhbmRsZShk
LT5tX3Jlc291cmNlSGFuZGxlKTsNCi0gICAgICAgICAgICBkZWxldGUgdGhpczsNCi0gICAgICAg
ICAgICByZXR1cm47DQotICAgICAgICB9DQorICAgIFJlc291cmNlSGFuZGxlKiBoYW5kbGUgPSBz
dGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGNvbnRleHQpOw0KKyAgICBoYW5kbGUtPm9uUmVk
aXJlY3QoKTsNCit9DQogDQotICAgICAgICBpZiAocmVxdWVzdCgpLmh0dHBNZXRob2QoKSA9PSAi
UE9TVCIpIHsNCi0gICAgICAgICAgICAvLyBGSVhNRTogVG9vIGxhdGUgdG8gc2V0IHJlZmVycmVy
IHByb3Blcmx5Lg0KLSAgICAgICAgICAgIFN0cmluZyB1cmxTdHIgPSByZXF1ZXN0KCkudXJsKCku
cGF0aCgpOw0KLSAgICAgICAgICAgIGludCBmcmFnbWVudEluZGV4ID0gdXJsU3RyLmZpbmQoJyMn
KTsNCi0gICAgICAgICAgICBpZiAoZnJhZ21lbnRJbmRleCAhPSAtMSkNCi0gICAgICAgICAgICAg
ICAgdXJsU3RyID0gdXJsU3RyLmxlZnQoZnJhZ21lbnRJbmRleCk7DQotICAgICAgICAgICAgc3Rh
dGljIExQQ1NUUiBhY2NlcHRbMl09eyIqLyoiLCBOVUxMfTsNCi0gICAgICAgICAgICBISU5URVJO
RVQgdXJsSGFuZGxlID0gSHR0cE9wZW5SZXF1ZXN0QShkLT5tX3Jlc291cmNlSGFuZGxlLCANCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUE9TVCIs
IHVybFN0ci5sYXRpbjEoKS5kYXRhKCksIDAsIDAsIGFjY2VwdCwNCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFUk5FVF9GTEFHX0tFRVBfQ09O
TkVDVElPTiB8IA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIElOVEVSTkVUX0ZMQUdfRk9STVNfU1VCTUlUIHwNCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFUk5FVF9GTEFHX1JFTE9BRCB8DQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URVJO
RVRfRkxBR19OT19DQUNIRV9XUklURSB8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSU5URVJORVRfRkxBR19JR05PUkVfUkVESVJFQ1RfVE9fSFRU
UFMgfA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElOVEVSTkVUX0ZMQUdfSUdOT1JFX1JFRElSRUNUX1RPX0hUVFAsDQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERXT1JEX1BUUilkLT5tX2pvYklk
KTsNCi0gICAgICAgICAgICBpZiAodXJsSGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7
DQotICAgICAgICAgICAgICAgIEludGVybmV0Q2xvc2VIYW5kbGUoZC0+bV9yZXNvdXJjZUhhbmRs
ZSk7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzOw0KLSAgICAgICAgICAgIH0NCi0gICAg
ICAgIH0NCi0gICAgfSBlbHNlIGlmICghZC0+bV9zZWNvbmRhcnlIYW5kbGUpIHsNCi0gICAgICAg
IGFzc2VydChyZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIik7DQotICAgICAgICBkLT5t
X3NlY29uZGFyeUhhbmRsZSA9IEhJTlRFUk5FVChsUGFyYW0pOw0KLSAgICAgICAgDQotICAgICAg
ICAvLyBOZWVkIHRvIGFjdHVhbGx5IHNlbmQgdGhlIHJlcXVlc3Qgbm93Lg0KLSAgICAgICAgU3Ry
aW5nIGhlYWRlcnMgPSAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVu
Y29kZWRcbiI7DQotICAgICAgICBoZWFkZXJzICs9ICJSZWZlcmVyOiAiOw0KLSAgICAgICAgaGVh
ZGVycyArPSBkLT5tX3Bvc3RSZWZlcnJlcjsNCi0gICAgICAgIGhlYWRlcnMgKz0gIlxuIjsNCi0g
ICAgICAgIGNvbnN0IENTdHJpbmcmIGhlYWRlcnNMYXRpbjEgPSBoZWFkZXJzLmxhdGluMSgpOw0K
LSAgICAgICAgU3RyaW5nIGZvcm1EYXRhID0gcmVxdWVzdCgpLmh0dHBCb2R5KCktPmZsYXR0ZW5U
b1N0cmluZygpOw0KLSAgICAgICAgSU5URVJORVRfQlVGRkVSU0EgYnVmZmVyczsNCi0gICAgICAg
IG1lbXNldCgmYnVmZmVycywgMCwgc2l6ZW9mKGJ1ZmZlcnMpKTsNCi0gICAgICAgIGJ1ZmZlcnMu
ZHdTdHJ1Y3RTaXplID0gc2l6ZW9mKElOVEVSTkVUX0JVRkZFUlNBKTsNCi0gICAgICAgIGJ1ZmZl
cnMubHBjc3pIZWFkZXIgPSBoZWFkZXJzTGF0aW4xLmRhdGEoKTsNCi0gICAgICAgIGJ1ZmZlcnMu
ZHdIZWFkZXJzTGVuZ3RoID0gaGVhZGVycy5sZW5ndGgoKTsNCi0gICAgICAgIGJ1ZmZlcnMuZHdC
dWZmZXJUb3RhbCA9IGZvcm1EYXRhLmxlbmd0aCgpOw0KLSAgICAgICAgDQotICAgICAgICBkLT5t
X2J5dGVzUmVtYWluaW5nVG9Xcml0ZSA9IGZvcm1EYXRhLmxlbmd0aCgpOw0KLSAgICAgICAgZC0+
bV9mb3JtRGF0YVN0cmluZyA9IChjaGFyKiltYWxsb2MoZm9ybURhdGEubGVuZ3RoKCkpOw0KLSAg
ICAgICAgZC0+bV9mb3JtRGF0YUxlbmd0aCA9IGZvcm1EYXRhLmxlbmd0aCgpOw0KLSAgICAgICAg
c3RybmNweShkLT5tX2Zvcm1EYXRhU3RyaW5nLCBmb3JtRGF0YS5sYXRpbjEoKS5kYXRhKCksIGZv
cm1EYXRhLmxlbmd0aCgpKTsNCi0gICAgICAgIGQtPm1fd3JpdGluZyA9IHRydWU7DQotICAgICAg
ICBIdHRwU2VuZFJlcXVlc3RFeEEoZC0+bV9zZWNvbmRhcnlIYW5kbGUsICZidWZmZXJzLCAwLCAw
LCAoRFdPUkRfUFRSKWQtPm1fam9iSWQpOw0KLSAgICAgICAgLy8gRklYTUU6IGFkZCBwcm9wZXIg
ZXJyb3IgaGFuZGxpbmcNCitzdGF0aWMgdm9pZCBjYWxsT25SZXF1ZXN0Q29tcGxldGUodm9pZCog
Y29udGV4dCkNCit7DQorICAgIFJlc291cmNlSGFuZGxlKiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxS
ZXNvdXJjZUhhbmRsZSo+KGNvbnRleHQpOw0KKyAgICBoYW5kbGUtPm9uUmVxdWVzdENvbXBsZXRl
KCk7DQorfQ0KKw0KK3ZvaWQgQ0FMTEJBQ0sgUmVzb3VyY2VIYW5kbGU6OmludGVybmV0U3RhdHVz
Q2FsbGJhY2soSElOVEVSTkVUIGludGVybmV0SGFuZGxlLCBEV09SRF9QVFIgY29udGV4dCwgRFdP
UkQgaW50ZXJuZXRTdGF0dXMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMUFZPSUQgc3RhdHVzSW5mb3JtYXRpb24sIERXT1JEIHN0YXR1c0lu
Zm9ybWF0aW9uTGVuZ3RoKQ0KK3sNCisgICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihjb250ZXh0KTsNCisNCisgICAgc3dpdGNoIChp
bnRlcm5ldFN0YXR1cykgew0KKyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19SRURJUkVDVDoNCisg
ICAgICAgIGhhbmRsZS0+ZC0+bV9yZWRpcmVjdFVybCA9IFN0cmluZyhzdGF0aWNfY2FzdDxVQ2hh
cio+KHN0YXR1c0luZm9ybWF0aW9uKSwgc3RhdHVzSW5mb3JtYXRpb25MZW5ndGgpOw0KKyAgICAg
ICAgY2FsbE9uTWFpblRocmVhZChjYWxsT25SZWRpcmVjdCwgaGFuZGxlKTsNCisgICAgICAgIGJy
ZWFrOw0KKw0KKyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19SRVFVRVNUX0NPTVBMRVRFOg0KKyAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChjYWxsT25SZXF1ZXN0Q29tcGxldGUsIGhhbmRsZSk7DQor
ICAgICAgICBicmVhazsNCisNCisgICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfSEFORExFX0NSRUFU
RUQ6DQorICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX0NMT1NJTkdfQ09OTkVDVElPTjoNCisgICAg
Y2FzZSBJTlRFUk5FVF9TVEFUVVNfQ09OTkVDVEVEX1RPX1NFUlZFUjoNCisgICAgY2FzZSBJTlRF
Uk5FVF9TVEFUVVNfQ09OTkVDVElOR19UT19TRVJWRVI6DQorICAgIGNhc2UgSU5URVJORVRfU1RB
VFVTX0NPTk5FQ1RJT05fQ0xPU0VEOg0KKyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19DT09LSUVf
SElTVE9SWToNCisgICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfQ09PS0lFX1JFQ0VJVkVEOg0KKyAg
ICBjYXNlIElOVEVSTkVUX1NUQVRVU19DT09LSUVfU0VOVDoNCisgICAgY2FzZSBJTlRFUk5FVF9T
VEFUVVNfQ1RMX1JFU1BPTlNFX1JFQ0VJVkVEOg0KKyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19E
RVRFQ1RJTkdfUFJPWFk6DQorICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX0hBTkRMRV9DTE9TSU5H
Og0KKyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19JTlRFUk1FRElBVEVfUkVTUE9OU0U6DQorICAg
IGNhc2UgSU5URVJORVRfU1RBVFVTX05BTUVfUkVTT0xWRUQ6DQorICAgIGNhc2UgSU5URVJORVRf
U1RBVFVTX1AzUF9IRUFERVI6DQorICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX1AzUF9QT0xJQ1lS
RUY6DQorICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX1BSRUZFVENIOg0KKyAgICBjYXNlIElOVEVS
TkVUX1NUQVRVU19QUklWQUNZX0lNUEFDVEVEOg0KKyAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19S
RUNFSVZJTkdfUkVTUE9OU0U6DQorICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX1JFUVVFU1RfU0VO
VDoNCisgICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfUkVTT0xWSU5HX05BTUU6DQorICAgIGNhc2Ug
SU5URVJORVRfU1RBVFVTX1JFU1BPTlNFX1JFQ0VJVkVEOg0KKyAgICBjYXNlIElOVEVSTkVUX1NU
QVRVU19TRU5ESU5HX1JFUVVFU1Q6DQorICAgIGNhc2UgSU5URVJORVRfU1RBVFVTX1NUQVRFX0NI
QU5HRToNCisgICAgZGVmYXVsdDoNCisgICAgICAgIGJyZWFrOw0KICAgICB9DQogfQ0KIA0KLXZv
aWQgUmVzb3VyY2VIYW5kbGU6Om9uUmVxdWVzdFJlZGlyZWN0ZWQoTFBBUkFNIGxQYXJhbSkNCit2
b2lkIFJlc291cmNlSGFuZGxlOjpvblJlZGlyZWN0KCkNCiB7DQotICAgIC8vIElmIGFscmVhZHkg
Y2FuY2VsZWQsIHRoZW4gaWdub3JlIHRoaXMgZXZlbnQuDQotICAgIGlmIChkLT5zdGF0dXMgIT0g
MCkNCi0gICAgICAgIHJldHVybjsNCisgICAgUmVzb3VyY2VSZXF1ZXN0IG5ld1JlcXVlc3QgPSBy
ZXF1ZXN0KCk7DQorICAgIG5ld1JlcXVlc3Quc2V0VVJMKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBk
LT5tX3JlZGlyZWN0VXJsKSk7DQorDQorICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UocmVx
dWVzdCgpLnVybCgpLCBTdHJpbmcoKSwgMCwgU3RyaW5nKCksIFN0cmluZygpKTsNCiANCi0gICAg
UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoKFN0cmluZ0ltcGwqKSBsUGFyYW0pOw0KLSAgICBSZXNv
dXJjZVJlc3BvbnNlIHJlZGlyZWN0UmVzcG9uc2U7DQotICAgIGNsaWVudCgpLT53aWxsU2VuZFJl
cXVlc3QodGhpcywgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7DQorICAgIGlmIChSZXNvdXJj
ZUhhbmRsZUNsaWVudCogcmVzb3VyY2VIYW5kbGVDbGllbnQgPSBjbGllbnQoKSkNCisgICAgICAg
IHJlc291cmNlSGFuZGxlQ2xpZW50LT53aWxsU2VuZFJlcXVlc3QodGhpcywgbmV3UmVxdWVzdCwg
cmVzcG9uc2UpOw0KIH0NCiANCi12b2lkIFJlc291cmNlSGFuZGxlOjpvblJlcXVlc3RDb21wbGV0
ZShMUEFSQU0gbFBhcmFtKQ0KK2Jvb2wgUmVzb3VyY2VIYW5kbGU6Om9uUmVxdWVzdENvbXBsZXRl
KCkNCiB7DQotICAgIGlmIChkLT5tX3dyaXRpbmcpIHsNCisgICAgaWYgKCFkLT5tX2ludGVybmV0
SGFuZGxlKSAvLyAwIGlmIGNhbmNlbGVkLg0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAg
ICBpZiAoZC0+bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUpIHsNCiAgICAgICAgIERXT1JEIGJ5dGVz
V3JpdHRlbjsNCi0gICAgICAgIEludGVybmV0V3JpdGVGaWxlKGQtPm1fc2Vjb25kYXJ5SGFuZGxl
LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgZC0+bV9mb3JtRGF0YVN0cmluZyArIChkLT5t
X2Zvcm1EYXRhTGVuZ3RoIC0gZC0+bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUpLA0KKyAgICAgICAg
SW50ZXJuZXRXcml0ZUZpbGUoZC0+bV9yZXF1ZXN0SGFuZGxlLA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgZC0+bV9mb3JtRGF0YS5kYXRhKCkgKyAoZC0+bV9mb3JtRGF0YS5zaXplKCkgLSBk
LT5tX2J5dGVzUmVtYWluaW5nVG9Xcml0ZSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBk
LT5tX2J5dGVzUmVtYWluaW5nVG9Xcml0ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZi
eXRlc1dyaXR0ZW4pOw0KICAgICAgICAgZC0+bV9ieXRlc1JlbWFpbmluZ1RvV3JpdGUgLT0gYnl0
ZXNXcml0dGVuOw0KLSAgICAgICAgaWYgKCFkLT5tX2J5dGVzUmVtYWluaW5nVG9Xcml0ZSkgew0K
LSAgICAgICAgICAgIC8vIEVuZCB0aGUgcmVxdWVzdC4NCi0gICAgICAgICAgICBkLT5tX3dyaXRp
bmcgPSBmYWxzZTsNCi0gICAgICAgICAgICBIdHRwRW5kUmVxdWVzdChkLT5tX3NlY29uZGFyeUhh
bmRsZSwgMCwgMCwgKERXT1JEX1BUUilkLT5tX2pvYklkKTsNCi0gICAgICAgICAgICBmcmVlKGQt
Pm1fZm9ybURhdGFTdHJpbmcpOw0KLSAgICAgICAgICAgIGQtPm1fZm9ybURhdGFTdHJpbmcgPSAw
Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgaWYgKCFkLT5tX2J5dGVz
UmVtYWluaW5nVG9Xcml0ZSkNCisgICAgICAgICAgICBkLT5tX2Zvcm1EYXRhLmNsZWFyKCk7DQor
ICAgICAgICBlbHNlDQorICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgIH0NCiANCi0gICAg
SElOVEVSTkVUIGhhbmRsZSA9IChyZXF1ZXN0KCkuaHR0cE1ldGhvZCgpID09ICJQT1NUIikgPyBk
LT5tX3NlY29uZGFyeUhhbmRsZSA6IGQtPm1fcmVzb3VyY2VIYW5kbGU7DQotICAgIEJPT0wgb2sg
PSBGQUxTRTsNCisgICAgaWYgKCFkLT5tX3NlbnRFbmRSZXF1ZXN0KSB7DQorICAgICAgICBIdHRw
RW5kUmVxdWVzdFcoZC0+bV9yZXF1ZXN0SGFuZGxlLCAwLCAwLCByZWludGVycHJldF9jYXN0PERX
T1JEX1BUUj4odGhpcykpOw0KKyAgICAgICAgZC0+bV9zZW50RW5kUmVxdWVzdCA9IHRydWU7DQor
ICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KIA0KICAgICBzdGF0aWMgY29uc3QgaW50IGJ1
ZmZlclNpemUgPSAzMjc2ODsNCiAgICAgY2hhciBidWZmZXJbYnVmZmVyU2l6ZV07DQpAQCAtMjM0
LDE4NCArMjIwLDIxNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpvblJlcXVlc3RDb21wbGV0ZShM
DQogICAgIGJ1ZmZlcnMubHB2QnVmZmVyID0gYnVmZmVyOw0KICAgICBidWZmZXJzLmR3QnVmZmVy
TGVuZ3RoID0gYnVmZmVyU2l6ZTsNCiANCi0gICAgYm9vbCByZWNlaXZlZEFueURhdGEgPSBmYWxz
ZTsNCi0gICAgd2hpbGUgKChvayA9IEludGVybmV0UmVhZEZpbGVFeEEoaGFuZGxlLCAmYnVmZmVy
cywgSVJGX05PX1dBSVQsIChEV09SRF9QVFIpdGhpcykpICYmIGJ1ZmZlcnMuZHdCdWZmZXJMZW5n
dGgpIHsNCi0gICAgICAgIGlmICghaGFzUmVjZWl2ZWRSZXNwb25zZSgpKSB7DQotICAgICAgICAg
ICAgc2V0SGFzUmVjZWl2ZWRSZXNwb25zZSgpOw0KKyAgICBCT09MIG9rID0gRkFMU0U7DQorICAg
IHdoaWxlICgob2sgPSBJbnRlcm5ldFJlYWRGaWxlRXhBKGQtPm1fcmVxdWVzdEhhbmRsZSwgJmJ1
ZmZlcnMsIGQtPm1fbG9hZFN5bmNocm9ub3VzbHkgPyAwIDogSVJGX05PX1dBSVQsIHJlaW50ZXJw
cmV0X2Nhc3Q8RFdPUkRfUFRSPih0aGlzKSkpICYmIGJ1ZmZlcnMuZHdCdWZmZXJMZW5ndGgpIHsN
CisgICAgICAgIGlmICghZC0+bV9oYXNSZWNlaXZlZFJlc3BvbnNlKSB7DQorICAgICAgICAgICAg
ZC0+bV9oYXNSZWNlaXZlZFJlc3BvbnNlID0gdHJ1ZTsNCisNCiAgICAgICAgICAgICBSZXNvdXJj
ZVJlc3BvbnNlIHJlc3BvbnNlOw0KKyAgICAgICAgICAgIHJlc3BvbnNlLnNldFVSTChyZXF1ZXN0
KCkudXJsKCkpOw0KKw0KKyAgICAgICAgICAgIFN0cmluZyBodHRwU3RhdHVzVGV4dCA9IHF1ZXJ5
SFRUUEhlYWRlcihIVFRQX1FVRVJZX1NUQVRVU19URVhUKTsNCisgICAgICAgICAgICBpZiAoIWh0
dHBTdGF0dXNUZXh0LmlzTnVsbCgpKQ0KKyAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRIVFRQ
U3RhdHVzVGV4dChodHRwU3RhdHVzVGV4dCk7DQorDQorICAgICAgICAgICAgU3RyaW5nIGh0dHBT
dGF0dXNDb2RlID0gcXVlcnlIVFRQSGVhZGVyKEhUVFBfUVVFUllfU1RBVFVTX0NPREUpOw0KKyAg
ICAgICAgICAgIGlmICghaHR0cFN0YXR1c0NvZGUuaXNOdWxsKCkpDQorICAgICAgICAgICAgICAg
IHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGh0dHBTdGF0dXNDb2RlLnRvSW50KCkpOw0KKw0K
KyAgICAgICAgICAgIFN0cmluZyBodHRwQ29udGVudExlbmd0aCA9IHF1ZXJ5SFRUUEhlYWRlcihI
VFRQX1FVRVJZX0NPTlRFTlRfTEVOR1RIKTsNCisgICAgICAgICAgICBpZiAoIWh0dHBDb250ZW50
TGVuZ3RoLmlzTnVsbCgpKQ0KKyAgICAgICAgICAgICAgICByZXNwb25zZS5zZXRFeHBlY3RlZENv
bnRlbnRMZW5ndGgoaHR0cENvbnRlbnRMZW5ndGgudG9JbnQoKSk7DQorDQorICAgICAgICAgICAg
U3RyaW5nIGh0dHBDb250ZW50VHlwZSA9IHF1ZXJ5SFRUUEhlYWRlcihIVFRQX1FVRVJZX0NPTlRF
TlRfVFlQRSk7DQorICAgICAgICAgICAgaWYgKCFodHRwQ29udGVudFR5cGUuaXNOdWxsKCkpIHsN
CisgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBlRnJv
bU1lZGlhVHlwZShodHRwQ29udGVudFR5cGUpKTsNCisgICAgICAgICAgICAgICAgcmVzcG9uc2Uu
c2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUoaHR0cENvbnRl
bnRUeXBlKSk7DQorICAgICAgICAgICAgfQ0KKw0KICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRS
ZWNlaXZlUmVzcG9uc2UodGhpcywgcmVzcG9uc2UpOw0KICAgICAgICAgfQ0KLSAgICAgICAgY2xp
ZW50KCktPmRpZFJlY2VpdmVEYXRhKHRoaXMsIGJ1ZmZlciwgYnVmZmVycy5kd0J1ZmZlckxlbmd0
aCwgMCk7DQorDQorICAgICAgICBpZiAoUmVzb3VyY2VIYW5kbGVDbGllbnQqIHJlc291cmNlSGFu
ZGxlQ2xpZW50ID0gY2xpZW50KCkpDQorICAgICAgICAgICAgcmVzb3VyY2VIYW5kbGVDbGllbnQt
PmRpZFJlY2VpdmVEYXRhKHRoaXMsIGJ1ZmZlciwgYnVmZmVycy5kd0J1ZmZlckxlbmd0aCwgMCk7
DQogICAgICAgICBidWZmZXJzLmR3QnVmZmVyTGVuZ3RoID0gYnVmZmVyU2l6ZTsNCiAgICAgfQ0K
IA0KLSAgICBQbGF0Zm9ybURhdGFTdHJ1Y3QgcGxhdGZvcm1EYXRhOw0KLSAgICBwbGF0Zm9ybURh
dGEuZXJyb3JTdHJpbmcgPSAwOw0KLSAgICBwbGF0Zm9ybURhdGEuZXJyb3IgPSAwOw0KLSAgICBw
bGF0Zm9ybURhdGEubG9hZGVkID0gb2s7DQotDQotICAgIGlmICghb2spIHsNCi0gICAgICAgIGlu
dCBlcnJvciA9IEdldExhc3RFcnJvcigpOw0KLSAgICAgICAgaWYgKGVycm9yID09IEVSUk9SX0lP
X1BFTkRJTkcpDQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgRFdPUkQgZXJyb3JTdHJp
bmdDaGFycyA9IDA7DQotICAgICAgICBpZiAoIUludGVybmV0R2V0TGFzdFJlc3BvbnNlSW5mbygm
cGxhdGZvcm1EYXRhLmVycm9yLCAwLCAmZXJyb3JTdHJpbmdDaGFycykpIHsNCi0gICAgICAgICAg
ICBpZiAoR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikgew0KLSAg
ICAgICAgICAgICAgICBwbGF0Zm9ybURhdGEuZXJyb3JTdHJpbmcgPSBuZXcgVENIQVJbZXJyb3JT
dHJpbmdDaGFyc107DQotICAgICAgICAgICAgICAgIEludGVybmV0R2V0TGFzdFJlc3BvbnNlSW5m
bygmcGxhdGZvcm1EYXRhLmVycm9yLCBwbGF0Zm9ybURhdGEuZXJyb3JTdHJpbmcsICZlcnJvclN0
cmluZ0NoYXJzKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotI2lmZGVmIFJFU09VUkNF
X0xPQURFUl9ERUJVRw0KLSAgICAgICAgY2hhciBidWZbNjRdOw0KLSAgICAgICAgX3NucHJpbnRm
KGJ1Ziwgc2l6ZW9mKGJ1ZiksICJMb2FkIGVycm9yOiAlaVxuIiwgZXJyb3IpOw0KLSAgICAgICAg
T3V0cHV0RGVidWdTdHJpbmdBKGJ1Zik7DQotI2VuZGlmIA0KLSAgICB9DQotICAgIA0KLSAgICBp
ZiAoZC0+bV9zZWNvbmRhcnlIYW5kbGUpDQotICAgICAgICBJbnRlcm5ldENsb3NlSGFuZGxlKGQt
Pm1fc2Vjb25kYXJ5SGFuZGxlKTsNCi0gICAgSW50ZXJuZXRDbG9zZUhhbmRsZShkLT5tX3Jlc291
cmNlSGFuZGxlKTsNCisgICAgaWYgKCFvayAmJiBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9JT19Q
RU5ESU5HKQ0KKyAgICAgICAgcmV0dXJuIHRydWU7DQogDQotICAgIGNsaWVudCgpLT5kaWRGaW5p
c2hMb2FkaW5nKHRoaXMpOw0KLSAgICBkZWxldGUgdGhpczsNCisgICAgaWYgKFJlc291cmNlSGFu
ZGxlQ2xpZW50KiByZXNvdXJjZUhhbmRsZUNsaWVudCA9IGNsaWVudCgpKQ0KKyAgICAgICAgcmVz
b3VyY2VIYW5kbGVDbGllbnQtPmRpZEZpbmlzaExvYWRpbmcodGhpcyk7DQorDQorICAgIEludGVy
bmV0Q2xvc2VIYW5kbGUoZC0+bV9yZXF1ZXN0SGFuZGxlKTsNCisgICAgSW50ZXJuZXRDbG9zZUhh
bmRsZShkLT5tX2Nvbm5lY3RIYW5kbGUpOw0KKyAgICBkZXJlZigpOw0KKyAgICByZXR1cm4gZmFs
c2U7DQogfQ0KIA0KLXN0YXRpYyB2b2lkIF9fc3RkY2FsbCB0cmFuc2ZlckpvYlN0YXR1c0NhbGxi
YWNrKEhJTlRFUk5FVCBpbnRlcm5ldEhhbmRsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBEV09SRF9QVFIgam9iSWQsDQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgaW50ZXJuZXRTdGF0dXMsDQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBWT0lEIHN0
YXR1c0luZm9ybWF0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIERXT1JEIHN0YXR1c0luZm9ybWF0aW9uTGVuZ3RoKQ0KLXsNCi0jaWZkZWYgUkVT
T1VSQ0VfTE9BREVSX0RFQlVHDQotICAgIGNoYXIgYnVmWzY0XTsNCi0gICAgX3NucHJpbnRmKGJ1
Ziwgc2l6ZW9mKGJ1ZiksICJzdGF0dXMtY2FsbGJhY2s6IHN0YXR1cz0ldSwgam9iPSVwXG4iLA0K
LSAgICAgICAgICAgICAgaW50ZXJuZXRTdGF0dXMsIGpvYklkKTsNCi0gICAgT3V0cHV0RGVidWdT
dHJpbmdBKGJ1Zik7DQotI2VuZGlmDQorU3RyaW5nIFJlc291cmNlSGFuZGxlOjpxdWVyeUhUVFBI
ZWFkZXIoRFdPUkQgaW5mb0xldmVsKQ0KK3sNCisgICAgRFdPUkQgYnVmZmVyU2l6ZSA9IDA7DQor
ICAgIEh0dHBRdWVyeUluZm9XKGQtPm1fcmVxdWVzdEhhbmRsZSwgaW5mb0xldmVsLCAwLCAmYnVm
ZmVyU2l6ZSwgMCk7DQogDQotICAgIFVJTlQgbXNnOw0KLSAgICBMUEFSQU0gbFBhcmFtOw0KKyAg
ICBVQ2hhciogY2hhcmFjdGVyczsNCisgICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6Y3JlYXRl
VW5pbml0aWFsaXplZChidWZmZXJTaXplIC8gc2l6ZW9mKFVDaGFyKSwgY2hhcmFjdGVycyk7DQog
DQotICAgIHN3aXRjaCAoaW50ZXJuZXRTdGF0dXMpIHsNCi0gICAgY2FzZSBJTlRFUk5FVF9TVEFU
VVNfSEFORExFX0NSRUFURUQ6DQotICAgICAgICAvLyB0ZWxsIHRoZSBtYWluIHRocmVhZCBhYm91
dCB0aGUgbmV3bHkgY3JlYXRlZCBoYW5kbGUNCi0gICAgICAgIG1zZyA9IGhhbmRsZUNyZWF0ZWRN
ZXNzYWdlOw0KLSAgICAgICAgbFBhcmFtID0gKExQQVJBTSkgTFBJTlRFUk5FVF9BU1lOQ19SRVNV
TFQoc3RhdHVzSW5mb3JtYXRpb24pLT5kd1Jlc3VsdDsNCi0gICAgICAgIGJyZWFrOw0KLSAgICBj
YXNlIElOVEVSTkVUX1NUQVRVU19SRVFVRVNUX0NPTVBMRVRFOg0KLSNpZmRlZiBSRVNPVVJDRV9M
T0FERVJfREVCVUcNCi0gICAgICAgIF9zbnByaW50ZihidWYsIHNpemVvZihidWYpLCAicmVxdWVz
dC1jb21wbGV0ZTogcmVzdWx0PSVwLCBlcnJvcj0ldVxuIiwNCi0gICAgICAgICAgICBMUElOVEVS
TkVUX0FTWU5DX1JFU1VMVChzdGF0dXNJbmZvcm1hdGlvbiktPmR3UmVzdWx0LA0KLSAgICAgICAg
ICAgIExQSU5URVJORVRfQVNZTkNfUkVTVUxUKHN0YXR1c0luZm9ybWF0aW9uKS0+ZHdFcnJvcik7
DQotICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZ0EoYnVmKTsNCi0jZW5kaWYNCi0gICAgICAgIC8v
IHRlbGwgdGhlIG1haW4gdGhyZWFkIHRoYXQgdGhlIHJlcXVlc3QgaXMgZG9uZQ0KLSAgICAgICAg
bXNnID0gcmVxdWVzdENvbXBsZXRlTWVzc2FnZTsNCi0gICAgICAgIGxQYXJhbSA9IDA7DQotICAg
ICAgICBicmVhazsNCi0gICAgY2FzZSBJTlRFUk5FVF9TVEFUVVNfUkVESVJFQ1Q6DQotICAgICAg
ICAvLyB0ZWxsIHRoZSBtYWluIHRocmVhZCB0byBvYnNlcnZlIHRoaXMgcmVkaXJlY3QgKEZJWE1F
OiB3ZSBwcm9iYWJseQ0KLSAgICAgICAgLy8gbmVlZCB0byBibG9jayB0aGUgcmVkaXJlY3QgYXQg
dGhpcyBwb2ludCBzbyB0aGUgYXBwbGljYXRpb24gY2FuDQotICAgICAgICAvLyBkZWNpZGUgd2hl
dGhlciBvciBub3QgdG8gZm9sbG93IHRoZSByZWRpcmVjdCkNCi0gICAgICAgIG1zZyA9IHJlcXVl
c3RSZWRpcmVjdGVkTWVzc2FnZTsNCi0gICAgICAgIGxQYXJhbSA9IChMUEFSQU0pIFN0cmluZ0lt
cGw6OmNyZWF0ZSgoY29uc3QgVUNoYXIqKSBzdGF0dXNJbmZvcm1hdGlvbiwNCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNJbmZvcm1hdGlvbkxlbmd0
aCkucmVsZWFzZVJlZigpOw0KLSAgICAgICAgYnJlYWs7DQotICAgIGNhc2UgSU5URVJORVRfU1RB
VFVTX1VTRVJfSU5QVVRfUkVRVUlSRUQ6DQotICAgICAgICAvLyBGSVhNRTogcHJvbXB0IHRoZSB1
c2VyIGlmIG5lY2Vzc2FyeQ0KLSAgICAgICAgUmVzdW1lU3VzcGVuZGVkRG93bmxvYWQoaW50ZXJu
ZXRIYW5kbGUsIDApOw0KLSAgICBjYXNlIElOVEVSTkVUX1NUQVRVU19TVEFURV9DSEFOR0U6DQot
ICAgICAgICAvLyBtYXkgbmVlZCB0byBjYWxsIFJlc3VtZVN1c3BlbmRlZERvd25sb2FkIGhlcmUg
YXMgd2VsbA0KLSAgICBkZWZhdWx0Og0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQorICAgIGlm
IChIdHRwUXVlcnlJbmZvVyhkLT5tX3JlcXVlc3RIYW5kbGUsIGluZm9MZXZlbCwgY2hhcmFjdGVy
cywgJmJ1ZmZlclNpemUsIDApKQ0KKyAgICAgICAgcmV0dXJuIHJlc3VsdC5sZWZ0KHJlc3VsdC5s
ZW5ndGgoKSAtIDEpOyAvLyBSZW1vdmUgTnVsbFRlcm1pbmF0aW9uLg0KIA0KLSAgICBQb3N0TWVz
c2FnZSh0cmFuc2ZlckpvYldpbmRvd0hhbmRsZSwgbXNnLCAoV1BBUkFNKSBqb2JJZCwgbFBhcmFt
KTsNCisgICAgcmV0dXJuIFN0cmluZygpOw0KIH0NCiANCiBib29sIFJlc291cmNlSGFuZGxlOjpz
dGFydChGcmFtZSogZnJhbWUpDQogew0KICAgICByZWYoKTsNCi0gICAgaWYgKHJlcXVlc3QoKS51
cmwoKS5pc0xvY2FsRmlsZSgpKSB7DQotICAgICAgICBTdHJpbmcgcGF0aCA9IHJlcXVlc3QoKS51
cmwoKS5wYXRoKCk7DQotICAgICAgICAvLyB3aW5kb3dzIGRvZXMgbm90IGVuam95IGEgbGVhZGlu
ZyBzbGFzaCBvbiBwYXRocw0KLSAgICAgICAgaWYgKHBhdGhbMF0gPT0gJy8nKQ0KLSAgICAgICAg
ICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygxKTsNCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGlz
IHdyb25nLiBOZWVkIHRvIHVzZSB3aWRlIHZlcnNpb24gb2YgdGhpcyBjYWxsLg0KLSAgICAgICAg
ZC0+bV9maWxlSGFuZGxlID0gQ3JlYXRlRmlsZUEocGF0aC51dGY4KCkuZGF0YSgpLCBHRU5FUklD
X1JFQUQsIDAsIE5VTEwsIE9QRU5fRVhJU1RJTkcsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgTlVM
TCk7DQotDQotICAgICAgICAvLyBGSVhNRTogcGVyaGFwcyB0aGlzIGVycm9yIHNob3VsZCBiZSBy
ZXBvcnRlZCBhc3luY2hyb25vdXNseSBmb3INCi0gICAgICAgIC8vIGNvbnNpc3RlbmN5Lg0KLSAg
ICAgICAgaWYgKGQtPm1fZmlsZUhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgew0KLSAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzOw0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCi0gICAg
ICAgIH0NCi0NCi0gICAgICAgIGQtPm1fZmlsZUxvYWRUaW1lci5zdGFydE9uZVNob3QoMC4wKTsN
CisgICAgaWYgKHJlcXVlc3QoKS51cmwoKS5pc0xvY2FsRmlsZSgpIHx8IHJlcXVlc3QoKS51cmwo
KS5wcm90b2NvbElzKCJkYXRhIikpIHsNCisgICAgICAgIGlmIChkLT5tX2xvYWRTeW5jaHJvbm91
c2x5KQ0KKyAgICAgICAgICAgIGZpbGVMb2FkVGltZXIoMCk7DQorICAgICAgICBlbHNlDQorICAg
ICAgICAgICAgZC0+bV9maWxlTG9hZFRpbWVyLnN0YXJ0T25lU2hvdCgwLjApOw0KICAgICAgICAg
cmV0dXJuIHRydWU7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBzdGF0aWMgSElOVEVSTkVUIGlu
dGVybmV0SGFuZGxlID0gMDsNCi0gICAgICAgIGlmICghaW50ZXJuZXRIYW5kbGUpIHsNCi0gICAg
ICAgICAgICBTdHJpbmcgdXNlckFnZW50U3RyID0gZnJhbWUtPmxvYWRlcigpLT51c2VyQWdlbnQo
cmVxdWVzdCgpLnVybCgpKSArIFN0cmluZygiIiwgMSk7DQotICAgICAgICAgICAgTFBDV1NUUiB1
c2VyQWdlbnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFdDSEFSKj4odXNlckFnZW50U3RyLmNo
YXJhY3RlcnMoKSk7DQotICAgICAgICAgICAgLy8gbGVhayB0aGUgSW50ZXJuZXQgZm9yIG5vdw0K
LSAgICAgICAgICAgIGludGVybmV0SGFuZGxlID0gSW50ZXJuZXRPcGVuKHVzZXJBZ2VudCwgSU5U
RVJORVRfT1BFTl9UWVBFX1BSRUNPTkZJRywgMCwgMCwgSU5URVJORVRfRkxBR19BU1lOQyk7DQot
ICAgICAgICB9DQotICAgICAgICBpZiAoIWludGVybmV0SGFuZGxlKSB7DQotICAgICAgICAgICAg
ZGVsZXRlIHRoaXM7DQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KLSAgICAgICAgfQ0KLSAg
ICAgICAgc3RhdGljIElOVEVSTkVUX1NUQVRVU19DQUxMQkFDSyBjYWxsYmFja0hhbmRsZSA9IA0K
LSAgICAgICAgICAgIEludGVybmV0U2V0U3RhdHVzQ2FsbGJhY2soaW50ZXJuZXRIYW5kbGUsIHRy
YW5zZmVySm9iU3RhdHVzQ2FsbGJhY2spOw0KKyAgICB9DQogDQotICAgICAgICBpbml0aWFsaXpl
T2ZmU2NyZWVuUmVzb3VyY2VIYW5kbGVXaW5kb3coKTsNCi0gICAgICAgIGQtPm1fam9iSWQgPSBh
ZGRUb091dHN0YW5kaW5nSm9icyh0aGlzKTsNCisgICAgaWYgKCFkLT5tX2ludGVybmV0SGFuZGxl
KSB7DQorICAgICAgICBzdGF0aWMgSElOVEVSTkVUIGFzeW5jaHJvbm91c0ludGVybmV0SGFuZGxl
ID0gMDsNCiANCi0gICAgICAgIERXT1JEIGZsYWdzID0NCi0gICAgICAgICAgICBJTlRFUk5FVF9G
TEFHX0tFRVBfQ09OTkVDVElPTiB8DQotICAgICAgICAgICAgSU5URVJORVRfRkxBR19JR05PUkVf
UkVESVJFQ1RfVE9fSFRUUFMgfA0KLSAgICAgICAgICAgIElOVEVSTkVUX0ZMQUdfSUdOT1JFX1JF
RElSRUNUX1RPX0hUVFA7DQotDQotICAgICAgICAvLyBGb3IgZm9ybSBwb3N0aW5nLCB3ZSBjYW4n
dCB1c2UgSW50ZXJuZXRPcGVuVVJMLiAgV2UgaGF2ZSB0byB1c2UNCi0gICAgICAgIC8vIEludGVy
bmV0Q29ubmVjdCBmb2xsb3dlZCBieSBIdHRwU2VuZFJlcXVlc3QuDQotICAgICAgICBISU5URVJO
RVQgdXJsSGFuZGxlOw0KLSAgICAgICAgU3RyaW5nIHJlZmVycmVyID0gZnJhbWUtPmxvYWRlcigp
LT5yZWZlcnJlcigpOw0KLSAgICAgICAgaWYgKHJlcXVlc3QoKS5odHRwTWV0aG9kKCkgPT0gIlBP
U1QiKSB7DQotICAgICAgICAgICAgZC0+bV9wb3N0UmVmZXJyZXIgPSByZWZlcnJlcjsNCi0gICAg
ICAgICAgICBTdHJpbmcgaG9zdCA9IHJlcXVlc3QoKS51cmwoKS5ob3N0KCk7DQotICAgICAgICAg
ICAgdXJsSGFuZGxlID0gSW50ZXJuZXRDb25uZWN0QShpbnRlcm5ldEhhbmRsZSwgaG9zdC5sYXRp
bjEoKS5kYXRhKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXF1ZXN0KCkudXJsKCkucG9ydCgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlVMTCwgLy8gbm8gdXNlcm5hbWUNCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwsIC8vIG5vIHBhc3N3b3JkDQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJTlRFUk5FVF9TRVJWSUNFX0hUVFAsDQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgKERXT1JEX1BUUilkLT5tX2pv
YklkKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgU3RyaW5nIHVybFN0ciA9IHJl
cXVlc3QoKS51cmwoKS5zdHJpbmcoKTsNCi0gICAgICAgICAgICBpbnQgZnJhZ21lbnRJbmRleCA9
IHVybFN0ci5maW5kKCcjJyk7DQotICAgICAgICAgICAgaWYgKGZyYWdtZW50SW5kZXggIT0gLTEp
DQotICAgICAgICAgICAgICAgIHVybFN0ciA9IHVybFN0ci5sZWZ0KGZyYWdtZW50SW5kZXgpOw0K
LSAgICAgICAgICAgIFN0cmluZyBoZWFkZXJzOw0KLSAgICAgICAgICAgIGlmICghcmVmZXJyZXIu
aXNFbXB0eSgpKQ0KLSAgICAgICAgICAgICAgICBoZWFkZXJzICs9IFN0cmluZygiUmVmZXJlcjog
IikgKyByZWZlcnJlciArICJcclxuIjsNCi0NCi0gICAgICAgICAgICB1cmxIYW5kbGUgPSBJbnRl
cm5ldE9wZW5VcmxBKGludGVybmV0SGFuZGxlLCB1cmxTdHIubGF0aW4xKCkuZGF0YSgpLA0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycy5sYXRpbjEoKS5k
YXRhKCksIGhlYWRlcnMubGVuZ3RoKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbGFncywgKERXT1JEX1BUUilkLT5tX2pvYklkKTsNCi0gICAgICAgIH0NCisg
ICAgICAgIGlmICghYXN5bmNocm9ub3VzSW50ZXJuZXRIYW5kbGUpDQorICAgICAgICAgICAgYXN5
bmNocm9ub3VzSW50ZXJuZXRIYW5kbGUgPSBjcmVhdGVJbnRlcm5ldEhhbmRsZShyZXF1ZXN0KCku
aHR0cFVzZXJBZ2VudCgpLCB0cnVlKTsNCiANCi0gICAgICAgIGlmICh1cmxIYW5kbGUgPT0gSU5W
QUxJRF9IQU5ETEVfVkFMVUUpIHsNCi0gICAgICAgICAgICBkZWxldGUgdGhpczsNCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7DQotICAgICAgICB9DQotICAgICAgICBkLT5tX3RocmVhZElkID0g
R2V0Q3VycmVudFRocmVhZElkKCk7DQorICAgICAgICBkLT5tX2ludGVybmV0SGFuZGxlID0gYXN5
bmNocm9ub3VzSW50ZXJuZXRIYW5kbGU7DQorICAgIH0NCiANCi0gICAgICAgIHJldHVybiB0cnVl
Ow0KKyAgICBpZiAoIWQtPm1faW50ZXJuZXRIYW5kbGUpIHsNCisgICAgICAgIGRlcmVmKCk7DQor
ICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgRFdPUkQgZmxhZ3MgPQ0KKyAg
ICAgICAgSU5URVJORVRfRkxBR19LRUVQX0NPTk5FQ1RJT04gfA0KKyAgICAgICAgSU5URVJORVRf
RkxBR19JR05PUkVfUkVESVJFQ1RfVE9fSFRUUFMgfA0KKyAgICAgICAgSU5URVJORVRfRkxBR19J
R05PUkVfUkVESVJFQ1RfVE9fSFRUUCB8DQorICAgICAgICBJTlRFUk5FVF9GTEFHX05PX0NBQ0hF
X1dSSVRFOw0KKw0KKyAgICBkLT5tX2Nvbm5lY3RIYW5kbGUgPSBJbnRlcm5ldENvbm5lY3RXKGQt
Pm1faW50ZXJuZXRIYW5kbGUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVxdWVzdCgpLnVybCgpLmhvc3QoKS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Qo
KS51cmwoKS5wb3J0KCksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgLy8gbm8gdXNlcm5hbWUNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAvLyBubyBwYXNzd29yZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElOVEVSTkVUX1NFUlZJQ0VfSFRUUCwNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbGFncywNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PERXT1JEX1BUUj4odGhpcykpOw0KKw0K
KyAgICBpZiAoIWQtPm1fY29ubmVjdEhhbmRsZSkgew0KKyAgICAgICAgZGVyZWYoKTsNCisgICAg
ICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KKyAgICBTdHJpbmcgdXJsU3RyID0gcmVxdWVz
dCgpLnVybCgpLnBhdGgoKTsNCisgICAgU3RyaW5nIHVybFF1ZXJ5ID0gcmVxdWVzdCgpLnVybCgp
LnF1ZXJ5KCk7DQorDQorICAgIGlmICghdXJsUXVlcnkuaXNFbXB0eSgpKSB7DQorICAgICAgICB1
cmxTdHIuYXBwZW5kKCc/Jyk7DQorICAgICAgICB1cmxTdHIuYXBwZW5kKHVybFF1ZXJ5KTsNCisg
ICAgfQ0KKw0KKyAgICBTdHJpbmcgaHR0cE1ldGhvZCA9IHJlcXVlc3QoKS5odHRwTWV0aG9kKCk7
DQorICAgIFN0cmluZyBodHRwUmVmZXJyZXIgPSByZXF1ZXN0KCkuaHR0cFJlZmVycmVyKCk7DQor
DQorICAgIExQQ1dTVFIgaHR0cEFjY2VwdFtdID0geyBMIiovKiIsIDAgfTsNCisNCisgICAgZC0+
bV9yZXF1ZXN0SGFuZGxlID0gSHR0cE9wZW5SZXF1ZXN0VyhkLT5tX2Nvbm5lY3RIYW5kbGUsDQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cE1ldGhvZC5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVybFN0ci5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLA0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cFJlZmVycmVyLmNoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaHR0cEFjY2VwdCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbGFncywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PERXT1JEX1BUUj4odGhpcykpOw0KKw0KKyAgICBpZiAoIWQtPm1f
cmVxdWVzdEhhbmRsZSkgew0KKyAgICAgICAgSW50ZXJuZXRDbG9zZUhhbmRsZShkLT5tX2Nvbm5l
Y3RIYW5kbGUpOw0KKyAgICAgICAgZGVyZWYoKTsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisg
ICAgfQ0KKw0KKyAgICBpZiAocmVxdWVzdCgpLmh0dHBCb2R5KCkpIHsNCisgICAgICAgIHJlcXVl
c3QoKS5odHRwQm9keSgpLT5mbGF0dGVuKGQtPm1fZm9ybURhdGEpOw0KKyAgICAgICAgZC0+bV9i
eXRlc1JlbWFpbmluZ1RvV3JpdGUgPSBkLT5tX2Zvcm1EYXRhLnNpemUoKTsNCisgICAgfQ0KKw0K
KyAgICBTdHJpbmcgaHR0cEhlYWRlcnM7DQorICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGh0dHBI
ZWFkZXJGaWVsZHMgPSByZXF1ZXN0KCkuaHR0cEhlYWRlckZpZWxkcygpOw0KKw0KKyAgICBmb3Ig
KEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaHR0cEhlYWRlckZpZWxkcy5iZWdp
bigpOyBpdCAhPSBodHRwSGVhZGVyRmllbGRzLmVuZCgpOyArK2l0KSB7DQorICAgICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoaXQtPmZpcnN0LCAiQWNjZXB0IikgfHwgZXF1YWxJZ25vcmluZ0Nh
c2UoaXQtPmZpcnN0LCAiUmVmZXJlciIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGl0LT5maXJzdCwg
IlVzZXItQWdlbnQiKSkNCisgICAgICAgICAgICBjb250aW51ZTsNCisNCisgICAgICAgIGlmICgh
aHR0cEhlYWRlcnMuaXNFbXB0eSgpKQ0KKyAgICAgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZCgn
XG4nKTsNCisNCisgICAgICAgIGh0dHBIZWFkZXJzLmFwcGVuZChpdC0+Zmlyc3QpOw0KKyAgICAg
ICAgaHR0cEhlYWRlcnMuYXBwZW5kKCc6Jyk7DQorICAgICAgICBodHRwSGVhZGVycy5hcHBlbmQo
aXQtPnNlY29uZCk7DQorICAgIH0NCisNCisgICAgSU5URVJORVRfQlVGRkVSU1cgaW50ZXJuZXRC
dWZmZXJzOw0KKyAgICBaZXJvTWVtb3J5KCZpbnRlcm5ldEJ1ZmZlcnMsIHNpemVvZihJTlRFUk5F
VF9CVUZGRVJTVykpOw0KKyAgICBpbnRlcm5ldEJ1ZmZlcnMuZHdTdHJ1Y3RTaXplID0gc2l6ZW9m
KElOVEVSTkVUX0JVRkZFUlNXKTsNCisgICAgaW50ZXJuZXRCdWZmZXJzLmxwY3N6SGVhZGVyID0g
aHR0cEhlYWRlcnMuY2hhcmFjdGVycygpOw0KKyAgICBpbnRlcm5ldEJ1ZmZlcnMuZHdIZWFkZXJz
TGVuZ3RoID0gaHR0cEhlYWRlcnMubGVuZ3RoKCk7DQorICAgIGludGVybmV0QnVmZmVycy5scHZC
dWZmZXIgPSAwOw0KKyAgICBpbnRlcm5ldEJ1ZmZlcnMuZHdCdWZmZXJMZW5ndGggPSAwOw0KKyAg
ICBpbnRlcm5ldEJ1ZmZlcnMuZHdCdWZmZXJUb3RhbCA9IGQtPm1fYnl0ZXNSZW1haW5pbmdUb1dy
aXRlOw0KKw0KKyAgICBIdHRwU2VuZFJlcXVlc3RFeFcoZC0+bV9yZXF1ZXN0SGFuZGxlLA0KKyAg
ICAgICAgICAgICAgICAgICAgICAgJmludGVybmV0QnVmZmVycywNCisgICAgICAgICAgICAgICAg
ICAgICAgIDAsDQorICAgICAgICAgICAgICAgICAgICAgICAwLA0KKyAgICAgICAgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxEV09SRF9QVFI+KHRoaXMpKTsNCisNCisgICAgaWYgKGQt
Pm1fbG9hZFN5bmNocm9ub3VzbHkpDQorICAgICAgICB3aGlsZSAob25SZXF1ZXN0Q29tcGxldGUo
KSkgew0KKyAgICAgICAgICAgIC8vIExvb3AgdW50aWwgZmluaXNoZWQuDQorICAgICAgICB9DQor
DQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCit2b2lkIFJlc291cmNlSGFuZGxlOjpmaWxlTG9h
ZFRpbWVyKFRpbWVyPFJlc291cmNlSGFuZGxlPiopDQorew0KKyAgICBpZiAocmVxdWVzdCgpLnVy
bCgpLnByb3RvY29sSXMoImRhdGEiKSkgew0KKyAgICAgICAgaGFuZGxlRGF0YVVSTCgpOw0KKyAg
ICAgICAgZGVyZWYoKTsNCisgICAgICAgIHJldHVybjsNCisgICAgfQ0KKw0KKyAgICBTdHJpbmcg
cGF0aCA9IHJlcXVlc3QoKS51cmwoKS5wYXRoKCk7DQorICAgIC8vIHdpbmRvd3MgZG9lcyBub3Qg
ZW5qb3kgYSBsZWFkaW5nIHNsYXNoIG9uIHBhdGhzDQorICAgIGlmIChwYXRoWzBdID09ICcvJykN
CisgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygxKTsNCisNCisgICAgaW50IHF1ZXJ5UG9z
ID0gcGF0aC5maW5kKCc/Jyk7DQorICAgIGlmIChxdWVyeVBvcyAhPSAtMSkNCisgICAgICAgIHBh
dGgucmVtb3ZlKHF1ZXJ5UG9zKTsNCisNCisgICAgSEFORExFIGZpbGVIYW5kbGUgPSBDcmVhdGVG
aWxlVyhwYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIEdFTkVSSUNfUkVBRCwg
MCwgMCwgT1BFTl9FWElTVElORywgRklMRV9BVFRSSUJVVEVfTk9STUFMLCAwKTsNCisNCisgICAg
aWYgKGZpbGVIYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsNCisgICAgICAgIGNsaWVu
dCgpLT5kaWRGYWlsKHRoaXMsIFJlc291cmNlRXJyb3IoKSk7DQorICAgICAgICBkZXJlZigpOw0K
KyAgICAgICAgcmV0dXJuOw0KICAgICB9DQotfQ0KIA0KLXZvaWQgUmVzb3VyY2VIYW5kbGU6OmZp
bGVMb2FkVGltZXIoVGltZXI8UmVzb3VyY2VIYW5kbGU+KiB0aW1lcikNCi17DQogICAgIFJlc291
cmNlUmVzcG9uc2UgcmVzcG9uc2U7DQorDQorICAgIGludCBkb3RQb3MgPSBwYXRoLnJldmVyc2VG
aW5kKCcuJyk7DQorICAgIGludCBzbGFzaFBvcyA9IHBhdGgucmV2ZXJzZUZpbmQoJy8nKTsNCisN
CisgICAgaWYgKHNsYXNoUG9zIDwgZG90UG9zICYmIGRvdFBvcyAhPS0xKSB7DQorICAgICAgICBT
dHJpbmcgZXh0ID0gcGF0aC5zdWJzdHJpbmcoZG90UG9zICsgMSk7DQorICAgICAgICByZXNwb25z
ZS5zZXRNaW1lVHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihl
eHQpKTsNCisgICAgfQ0KKw0KICAgICBjbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHRoaXMs
IHJlc3BvbnNlKTsNCiANCiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsNCkBAIC00MjAsNDMgKzQz
OSw3NSBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpmaWxlTG9hZFRpbWVyKFRpbWVyDQogICAgIGRv
IHsNCiAgICAgICAgIGNvbnN0IGludCBidWZmZXJTaXplID0gODE5MjsNCiAgICAgICAgIGNoYXIg
YnVmZmVyW2J1ZmZlclNpemVdOw0KLSAgICAgICAgcmVzdWx0ID0gUmVhZEZpbGUoZC0+bV9maWxl
SGFuZGxlLCAmYnVmZmVyLCBidWZmZXJTaXplLCAmYnl0ZXNSZWFkLCBOVUxMKTsgDQorICAgICAg
ICByZXN1bHQgPSBSZWFkRmlsZShmaWxlSGFuZGxlLCAmYnVmZmVyLCBidWZmZXJTaXplLCAmYnl0
ZXNSZWFkLCAwKTsNCiAgICAgICAgIGlmIChyZXN1bHQgJiYgYnl0ZXNSZWFkKQ0KICAgICAgICAg
ICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBidWZmZXIsIGJ5dGVzUmVhZCwgMCk7
DQotICAgICAgICAvLyBDaGVjayBmb3IgZW5kIG9mIGZpbGUuIA0KKyAgICAgICAgLy8gQ2hlY2sg
Zm9yIGVuZCBvZiBmaWxlLg0KICAgICB9IHdoaWxlIChyZXN1bHQgJiYgYnl0ZXNSZWFkKTsNCiAN
Ci0gICAgLy8gRklYTUU6IGhhbmRsZSBlcnJvcnMgYmV0dGVyDQotDQotICAgIENsb3NlSGFuZGxl
KGQtPm1fZmlsZUhhbmRsZSk7DQotICAgIGQtPm1fZmlsZUhhbmRsZSA9IElOVkFMSURfSEFORExF
X1ZBTFVFOw0KKyAgICBDbG9zZUhhbmRsZShmaWxlSGFuZGxlKTsNCiANCiAgICAgY2xpZW50KCkt
PmRpZEZpbmlzaExvYWRpbmcodGhpcyk7DQorICAgIGRlcmVmKCk7DQogfQ0KIA0KIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OmNhbmNlbCgpDQogew0KLSAgICBpZiAoZC0+bV9yZXNvdXJjZUhhbmRsZSkN
Ci0gICAgICAgIEludGVybmV0Q2xvc2VIYW5kbGUoZC0+bV9yZXNvdXJjZUhhbmRsZSk7DQotICAg
IGVsc2UNCisgICAgaWYgKGQtPm1fcmVxdWVzdEhhbmRsZSkgew0KKyAgICAgICAgZC0+bV9pbnRl
cm5ldEhhbmRsZSA9IDA7DQorICAgICAgICBJbnRlcm5ldENsb3NlSGFuZGxlKGQtPm1fcmVxdWVz
dEhhbmRsZSk7DQorICAgICAgICBJbnRlcm5ldENsb3NlSGFuZGxlKGQtPm1fY29ubmVjdEhhbmRs
ZSk7DQorICAgIH0gZWxzZQ0KICAgICAgICAgZC0+bV9maWxlTG9hZFRpbWVyLnN0b3AoKTsNCit9
DQogDQotICAgIGNsaWVudCgpLT5kaWRGaW5pc2hMb2FkaW5nKHRoaXMpOyANCit2b2lkIFJlc291
cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIFJlc291cmNl
RXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBk
YXRhLCBGcmFtZSogZnJhbWUpDQorew0KKyAgICBVTlVTRURfUEFSQU0oc3RvcmVkQ3JlZGVudGlh
bHMpOw0KIA0KLSAgICBpZiAoIWQtPm1fcmVzb3VyY2VIYW5kbGUpDQotICAgICAgICAvLyBBc3lu
YyBsb2FkIGNhbmNlbGVkIGJlZm9yZSB3ZSBoYXZlIGEgaGFuZGxlIC0tIG1hcmsgb3Vyc2VsdmVz
IGFzIGluIGVycm9yLCB0byBiZSBkZWxldGVkIGxhdGVyLg0KLSAgICAgICAgLy8gRklYTUU6IG5l
ZWQgcmVhbCBjYW5jZWwgZXJyb3INCi0gICAgICAgIGNsaWVudCgpLT5kaWRGYWlsKHRoaXMsIFJl
c291cmNlRXJyb3IoKSk7DQorICAgIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciBzeW5jTG9hZGVy
KGVycm9yLCByZXNwb25zZSwgZGF0YSwgcmVxdWVzdC5odHRwVXNlckFnZW50KCkpOw0KKyAgICBS
ZXNvdXJjZUhhbmRsZSBoYW5kbGUocmVxdWVzdCwgJnN5bmNMb2FkZXIsIHRydWUsIGZhbHNlKTsN
CisNCisgICAgaGFuZGxlLnNldFN5bmNocm9ub3VzSW50ZXJuZXRIYW5kbGUoc3luY0xvYWRlci5p
bnRlcm5ldEhhbmRsZSgpKTsNCisgICAgaGFuZGxlLnN0YXJ0KGZyYW1lKTsNCit9DQorDQordm9p
ZCBSZXNvdXJjZUhhbmRsZTo6c2V0U3luY2hyb25vdXNJbnRlcm5ldEhhbmRsZShISU5URVJORVQg
aW50ZXJuZXRIYW5kbGUpDQorew0KKyAgICBkLT5tX2ludGVybmV0SGFuZGxlID0gaW50ZXJuZXRI
YW5kbGU7DQorICAgIGQtPm1fbG9hZFN5bmNocm9ub3VzbHkgPSB0cnVlOw0KK30NCisNCitib29s
IFJlc291cmNlSGFuZGxlOjp3aWxsTG9hZEZyb21DYWNoZShSZXNvdXJjZVJlcXVlc3QmIHJlcSwg
RnJhbWUqKQ0KK3sNCisgICAgbm90SW1wbGVtZW50ZWQoKTsNCisgICAgcmV0dXJuIGZhbHNlOw0K
K30NCisNCit2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpDQorew0KKyAg
ICBub3RJbXBsZW1lbnRlZCgpOw0KK30NCisNCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gUmVz
b3VyY2VIYW5kbGU6OmJ1ZmZlcmVkRGF0YSgpDQorew0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KK2Jvb2wgUmVzb3VyY2VIYW5kbGU6OnN1cHBvcnRz
QnVmZmVyZWREYXRhKCkNCit7DQorICAgIHJldHVybiBmYWxzZTsNCiB9DQogDQotdm9pZCBSZXNv
dXJjZUhhbmRsZTo6c2V0SGFzUmVjZWl2ZWRSZXNwb25zZShib29sIGIpDQorYm9vbCBSZXNvdXJj
ZUhhbmRsZTo6bG9hZHNCbG9ja2VkKCkNCiB7DQotICAgIGQtPm1faGFzUmVjZWl2ZWRSZXNwb25z
ZSA9IGI7DQorICAgIHJldHVybiBmYWxzZTsNCiB9DQogDQotYm9vbCBSZXNvdXJjZUhhbmRsZTo6
aGFzUmVjZWl2ZWRSZXNwb25zZSgpIGNvbnN0DQordm9pZCBSZXNvdXJjZUhhbmRsZTo6cGxhdGZv
cm1TZXREZWZlcnNMb2FkaW5nKGJvb2wpDQogew0KLSAgICByZXR1cm4gZC0+bV9oYXNSZWNlaXZl
ZFJlc3BvbnNlOw0KKyAgICBub3RJbXBsZW1lbnRlZCgpOw0KIH0NCiANCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlDQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUhh
bmRsZVdpbi5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9S
ZXNvdXJjZUhhbmRsZVdpbi5oCShyZXZpc2lvbiA2MjU0NykNCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2luLmgJKHdvcmtpbmcgY29weSkNCkBAIC0xLDQ2
ICswLDAgQEANCi0vKg0KLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0gKg0KLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucw0KLSAqIGFyZSBtZXQ6DQotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCi0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQNCi0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCi0gKg0KLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkNCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUg0KLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUg0K
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLA0KLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywNCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1INCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZDQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUDQotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gDQotICov
DQotDQotI2lmbmRlZiBSZXNvdXJjZUhhbmRsZVdpbl9oDQotI2RlZmluZSBSZXNvdXJjZUhhbmRs
ZVdpbl9oDQotDQotI2luY2x1ZGUgPHdpbmRvd3MuaD4NCi0NCi1uYW1lc3BhY2UgV2ViQ29yZSB7
DQotDQotc3RydWN0IFBsYXRmb3JtRGF0YVN0cnVjdA0KLXsNCi0gICAgRFdPUkQgICBlcnJvcjsN
Ci0gICAgQk9PTCAgICBsb2FkZWQ7DQotICAgIExQVFNUUiAgZXJyb3JTdHJpbmc7DQotfTsNCi0N
Ci1zdHJ1Y3QgUGxhdGZvcm1SZXNwb25zZVN0cnVjdA0KLXsNCi19Ow0KLQ0KLX0NCi0NCi0jZW5k
aWYNCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71273</attachid>
            <date>2010-10-20 05:06:35 -0700</date>
            <delta_ts>2010-10-20 05:15:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-27376.patch</filename>
            <type>text/plain</type>
            <size>11107</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MThmYzhlOS4uNTk5ODVhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMC0xMC0yMCAgUGF0cmljayBHYW5z
dGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbV0lOXSBBZGQgV2luZG93cyBzcGVjaWZpYyBmaWxlcyBmb3Ig
cGxhdGZvcm0vbmV0d29yay93aW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI3Mzc2CisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9BdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VFcnJvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlRXJyb3I6OlJlc291cmNlRXJyb3IpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvd2luL1Jlc291cmNlUmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlUmVxdWVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmRvUGxhdGZvcm1Db3B5RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmRvUGxhdGZvcm1BZG9wdCk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay93aW4vUmVzb3VyY2VSZXNwb25zZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2U6OlJlc291cmNlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZTo6ZG9QbGF0Zm9ybUNvcHlEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2U6OmRvUGxhdGZvcm1BZG9wdCk6CisKIDIwMTAtMTAtMTkgIFJ5
dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQg
YXR0ZW1wdCB0byByZW1vdmUgd2FybmluZyBpbiBFRkwgYnVpbGQuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2MzUzOQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaApA
QCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZV9oCisjZGVmaW5l
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlX2gKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlQmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlIDogcHVibGljIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZSB7CitwdWJs
aWM6CisgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKQorICAgIHsKKyAgICB9CisKKyAgICBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25T
cGFjZSwgY29uc3QgQ3JlZGVudGlhbCYgcHJvcG9zZWRDcmVkZW50aWFsLCB1bnNpZ25lZCBwcmV2
aW91c0ZhaWx1cmVDb3VudCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0
IFJlc291cmNlRXJyb3ImIGVycm9yKQorICAgICAgICA6IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
QmFzZShwcm90ZWN0aW9uU3BhY2UsIHByb3Bvc2VkQ3JlZGVudGlhbCwgcHJldmlvdXNGYWlsdXJl
Q291bnQsIHJlc3BvbnNlLCBlcnJvcikKKyAgICB7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VfaApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUVycm9yLmggYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlRXJyb3IuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hZTI3MDdiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUVycm9yLmgKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFJlc291cmNlRXJyb3JfaAorI2RlZmluZSBSZXNvdXJjZUVycm9yX2gKKwor
I2luY2x1ZGUgIlJlc291cmNlRXJyb3JCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUmVzb3VyY2VFcnJvciA6IHB1YmxpYyBSZXNvdXJjZUVycm9yQmFzZQoreworcHVibGlj
OgorICAgIFJlc291cmNlRXJyb3IoKQorICAgIHsKKyAgICB9CisKKyAgICBSZXNvdXJjZUVycm9y
KGNvbnN0IFN0cmluZyYgZG9tYWluLCBpbnQgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGZhaWxp
bmdVUkwsIGNvbnN0IFN0cmluZyYgbG9jYWxpemVkRGVzY3JpcHRpb24pCisgICAgICAgIDogUmVz
b3VyY2VFcnJvckJhc2UoZG9tYWluLCBlcnJvckNvZGUsIGZhaWxpbmdVUkwsIGxvY2FsaXplZERl
c2NyaXB0aW9uKQorICAgIHsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBSZXNvdXJjZUVycm9yX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay93aW4vUmVzb3VyY2VSZXF1ZXN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
d2luL1Jlc291cmNlUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmNkNTAzMTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2lu
L1Jlc291cmNlUmVxdWVzdC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBS
ZXNvdXJjZVJlcXVlc3RfaAorI2RlZmluZSBSZXNvdXJjZVJlcXVlc3RfaAorCisjaW5jbHVkZSAi
UmVzb3VyY2VSZXF1ZXN0QmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJl
c291cmNlUmVxdWVzdCA6IHB1YmxpYyBSZXNvdXJjZVJlcXVlc3RCYXNlIHsKK3B1YmxpYzoKKyAg
ICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwpCisgICAgICAgIDogUmVzb3VyY2VS
ZXF1ZXN0QmFzZShLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgVXNlUHJvdG9jb2xDYWNoZVBv
bGljeSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IEtVUkwmIHVy
bCkKKyAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgVXNlUHJvdG9jb2xDYWNoZVBv
bGljeSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgcG9s
aWN5ID0gVXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RC
YXNlKHVybCwgcG9saWN5KQorICAgIHsKKyAgICAgICAgc2V0SFRUUFJlZmVycmVyKHJlZmVycmVy
KTsKKyAgICB9CisKKyAgICBSZXNvdXJjZVJlcXVlc3QoKQorICAgICAgICA6IFJlc291cmNlUmVx
dWVzdEJhc2UoS1VSTCgpLCBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorICAgIHsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIHN0cnVjdCBSZXNvdXJjZVJlcXVlc3RCYXNlOworCisgICAg
dm9pZCBkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCgpIHsgfQorICAgIHZvaWQgZG9VcGRhdGVSZXNv
dXJjZVJlcXVlc3QoKSB7IH0KKworICAgIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJl
cXVlc3REYXRhPiBkb1BsYXRmb3JtQ29weURhdGEoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291
cmNlUmVxdWVzdERhdGE+IGRhdGEpIGNvbnN0IHsgcmV0dXJuIGRhdGE7IH0KKyAgICB2b2lkIGRv
UGxhdGZvcm1BZG9wdChQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4p
IHsgfQorfTsKKworc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YSA6IHB1Ymxp
YyBDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGFCYXNlIHsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFJlc291cmNlUmVxdWVzdF9oCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlUmVzcG9uc2UuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VSZXNwb25zZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmI3NGExZTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlUmVzcG9uc2UuaApAQCAtMCwwICsxLDU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgUmVzb3VyY2VSZXNwb25zZV9oCisjZGVmaW5lIFJlc291cmNlUmVzcG9u
c2VfaAorCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZUJhc2UuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlIDogcHVibGljIFJlc291cmNlUmVzcG9u
c2VCYXNlIHsKK3B1YmxpYzoKKyAgICBSZXNvdXJjZVJlc3BvbnNlKCkKKyAgICB7CisgICAgfQor
CisgICAgUmVzb3VyY2VSZXNwb25zZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2Rp
bmdOYW1lLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lKQorICAgICAgICA6IFJlc291cmNlUmVzcG9u
c2VCYXNlKHVybCwgbWltZVR5cGUsIGV4cGVjdGVkTGVuZ3RoLCB0ZXh0RW5jb2RpbmdOYW1lLCBm
aWxlbmFtZSkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBSZXNv
dXJjZVJlc3BvbnNlQmFzZTsKKworICAgIFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJl
c3BvbnNlRGF0YT4gZG9QbGF0Zm9ybUNvcHlEYXRhKFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNv
dXJjZVJlc3BvbnNlRGF0YT4gZGF0YSkgY29uc3QgeyByZXR1cm4gZGF0YTsgfQorICAgIHZvaWQg
ZG9QbGF0Zm9ybUFkb3B0KFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0
YT4pIHsgfQorfTsKKworc3RydWN0IENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25zZURhdGEgOiBw
dWJsaWMgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YUJhc2UgeworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVzb3VyY2VSZXNwb25zZV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71275</attachid>
            <date>2010-10-20 05:15:28 -0700</date>
            <delta_ts>2010-10-22 11:22:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-27376.patch</filename>
            <type>text/plain</type>
            <size>11106</size>
            <attacher name="Patrick R. Gansterer">paroga</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MThmYzhlOS4uNTk5ODVhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMC0xMC0yMCAgUGF0cmljayBHYW5z
dGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbV0lOXSBBZGQgV2luZG93cyBzcGVjaWZpYyBmaWxlcyBmb3Ig
cGxhdGZvcm0vbmV0d29yay93aW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI3Mzc2CisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9BdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VFcnJvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlRXJyb3I6OlJlc291cmNlRXJyb3IpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvd2luL1Jlc291cmNlUmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdDo6ZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlUmVxdWVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmRvUGxhdGZvcm1Db3B5RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmRvUGxhdGZvcm1BZG9wdCk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay93aW4vUmVzb3VyY2VSZXNwb25zZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2U6OlJlc291cmNlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZTo6ZG9QbGF0Zm9ybUNvcHlEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2U6OmRvUGxhdGZvcm1BZG9wdCk6CisKIDIwMTAtMTAtMTkgIFJ5
dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQg
YXR0ZW1wdCB0byByZW1vdmUgd2FybmluZyBpbiBFRkwgYnVpbGQuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2MzUzOQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaApA
QCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZV9oCisjZGVmaW5l
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlX2gKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlQmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlIDogcHVibGljIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQmFzZSB7CitwdWJs
aWM6CisgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKQorICAgIHsKKyAgICB9CisKKyAgICBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25T
cGFjZSwgY29uc3QgQ3JlZGVudGlhbCYgcHJvcG9zZWRDcmVkZW50aWFsLCB1bnNpZ25lZCBwcmV2
aW91c0ZhaWx1cmVDb3VudCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0
IFJlc291cmNlRXJyb3ImIGVycm9yKQorICAgICAgICA6IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
QmFzZShwcm90ZWN0aW9uU3BhY2UsIHByb3Bvc2VkQ3JlZGVudGlhbCwgcHJldmlvdXNGYWlsdXJl
Q291bnQsIHJlc3BvbnNlLCBlcnJvcikKKyAgICB7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VfaApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUVycm9yLmggYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlRXJyb3IuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5hMDljMjI3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZUVycm9yLmgKQEAgLTAsMCArMSw0NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFJlc291cmNlRXJyb3JfaAorI2RlZmluZSBSZXNvdXJjZUVycm9yX2gKKwor
I2luY2x1ZGUgIlJlc291cmNlRXJyb3JCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUmVzb3VyY2VFcnJvciA6IHB1YmxpYyBSZXNvdXJjZUVycm9yQmFzZSB7CitwdWJsaWM6
CisgICAgUmVzb3VyY2VFcnJvcigpCisgICAgeworICAgIH0KKworICAgIFJlc291cmNlRXJyb3Io
Y29uc3QgU3RyaW5nJiBkb21haW4sIGludCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZmFpbGlu
Z1VSTCwgY29uc3QgU3RyaW5nJiBsb2NhbGl6ZWREZXNjcmlwdGlvbikKKyAgICAgICAgOiBSZXNv
dXJjZUVycm9yQmFzZShkb21haW4sIGVycm9yQ29kZSwgZmFpbGluZ1VSTCwgbG9jYWxpemVkRGVz
Y3JpcHRpb24pCisgICAgeworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFJlc291cmNlRXJyb3JfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3dpbi9SZXNvdXJjZVJlcXVlc3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93
aW4vUmVzb3VyY2VSZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Y2Q1MDMxMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4v
UmVzb3VyY2VSZXF1ZXN0LmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJl
c291cmNlUmVxdWVzdF9oCisjZGVmaW5lIFJlc291cmNlUmVxdWVzdF9oCisKKyNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3RCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVz
b3VyY2VSZXF1ZXN0IDogcHVibGljIFJlc291cmNlUmVxdWVzdEJhc2UgeworcHVibGljOgorICAg
IFJlc291cmNlUmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkKKyAgICAgICAgOiBSZXNvdXJjZVJl
cXVlc3RCYXNlKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpLCBVc2VQcm90b2NvbENhY2hlUG9s
aWN5KQorICAgIHsKKyAgICB9CisKKyAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgS1VSTCYgdXJs
KQorICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UodXJsLCBVc2VQcm90b2NvbENhY2hlUG9s
aWN5KQorICAgIHsKKyAgICB9CisKKyAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBwb2xp
Y3kgPSBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJh
c2UodXJsLCBwb2xpY3kpCisgICAgeworICAgICAgICBzZXRIVFRQUmVmZXJyZXIocmVmZXJyZXIp
OworICAgIH0KKworICAgIFJlc291cmNlUmVxdWVzdCgpCisgICAgICAgIDogUmVzb3VyY2VSZXF1
ZXN0QmFzZShLVVJMKCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisgICAgeworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgc3RydWN0IFJlc291cmNlUmVxdWVzdEJhc2U7CisKKyAgICB2
b2lkIGRvVXBkYXRlUGxhdGZvcm1SZXF1ZXN0KCkgeyB9CisgICAgdm9pZCBkb1VwZGF0ZVJlc291
cmNlUmVxdWVzdCgpIHsgfQorCisgICAgUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVx
dWVzdERhdGE+IGRvUGxhdGZvcm1Db3B5RGF0YShQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3Vy
Y2VSZXF1ZXN0RGF0YT4gZGF0YSkgY29uc3QgeyByZXR1cm4gZGF0YTsgfQorICAgIHZvaWQgZG9Q
bGF0Zm9ybUFkb3B0KFBhc3NPd25QdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPikg
eyB9Cit9OworCitzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhIDogcHVibGlj
IENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YUJhc2UgeworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUmVzb3VyY2VSZXF1ZXN0X2gKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VSZXNwb25zZS5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3dpbi9SZXNvdXJjZVJlc3BvbnNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYjc0YTFlOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay93aW4vUmVzb3VyY2VSZXNwb25zZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBSZXNvdXJjZVJlc3BvbnNlX2gKKyNkZWZpbmUgUmVzb3VyY2VSZXNwb25z
ZV9oCisKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlQmFzZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFJlc291cmNlUmVzcG9uc2UgOiBwdWJsaWMgUmVzb3VyY2VSZXNwb25z
ZUJhc2UgeworcHVibGljOgorICAgIFJlc291cmNlUmVzcG9uc2UoKQorICAgIHsKKyAgICB9CisK
KyAgICBSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgbG9uZyBsb25nIGV4cGVjdGVkTGVuZ3RoLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGlu
Z05hbWUsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCisgICAgICAgIDogUmVzb3VyY2VSZXNwb25z
ZUJhc2UodXJsLCBtaW1lVHlwZSwgZXhwZWN0ZWRMZW5ndGgsIHRleHRFbmNvZGluZ05hbWUsIGZp
bGVuYW1lKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFJlc291
cmNlUmVzcG9uc2VCYXNlOworCisgICAgUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVz
cG9uc2VEYXRhPiBkb1BsYXRmb3JtQ29weURhdGEoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291
cmNlUmVzcG9uc2VEYXRhPiBkYXRhKSBjb25zdCB7IHJldHVybiBkYXRhOyB9CisgICAgdm9pZCBk
b1BsYXRmb3JtQWRvcHQoUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRh
PikgeyB9Cit9OworCitzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YSA6IHB1
YmxpYyBDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhQmFzZSB7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZXNvdXJjZVJlc3BvbnNlX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>