<?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>99340</bug_id>
          
          <creation_ts>2012-10-15 10:57:53 -0700</creation_ts>
          <short_desc>[Chromium] Remove cookie-related functions from PlatformSupport</short_desc>
          <delta_ts>2012-11-16 15:53:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          <dependson>102456</dependson>
          <blocked>82948</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Pilgrim (Google)">pilgrim</reporter>
          <assigned_to name="Mark Pilgrim (Google)">pilgrim</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>danw</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>fishd</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>742183</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-15 10:57:53 -0700</bug_when>
    <thetext>[Chromium] Remove cookie-related functions from PlatformSupport</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742189</commentid>
    <comment_count>1</comment_count>
      <attachid>168741</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-15 11:03:44 -0700</bug_when>
    <thetext>Created attachment 168741
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742728</commentid>
    <comment_count>2</comment_count>
      <attachid>168741</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-15 19:35:45 -0700</bug_when>
    <thetext>Comment on attachment 168741
WIP Patch

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

Presumably you&apos;ll need to make similar changes to CookieJarFoo.cpp

&gt; Source/WebCore/Modules/websockets/WebSocketChannel.cpp:436
&gt; +                Frame* frame = m_document-&gt;frame();
&gt; +                if (frame) {
&gt; +                    CookieJar cookieJar = frame-&gt;loader()-&gt;client()-&gt;cookieJar();
&gt; +                    if (cookieJar.cookiesEnabled(m_document)) {

This all seems like work that the Document should do.  Can we ask the document if cookies are enabled?

&gt; Source/WebCore/dom/Document.cpp:3820
&gt; +    String cookies;
&gt; +    if (Frame* frame = this-&gt;frame()) {
&gt; +        CookieJar cookieJar = frame-&gt;loader()-&gt;client()-&gt;cookieJar();
&gt; +        cookies = cookieJar.cookies(this, cookieURL);
&gt; +    }
&gt; +    return cookies;

This can all be written much more simply as:

if (!frame())
    return String();
return frame()-&gt;loader()-&gt;client()-&gt;cookieJar().cookies(this, cookieURL);

&gt; Source/WebCore/dom/Document.cpp:3844
&gt; -    setCookies(this, cookieURL, value);
&gt; +    if (Frame* frame = this-&gt;frame()) {
&gt; +        CookieJar cookieJar = frame-&gt;loader()-&gt;client()-&gt;cookieJar();
&gt; +        cookieJar.setCookies(this, cookieURL, value);
&gt; +    }

Same here:

if (!frame())
    return;
frame()-&gt;loader()-&gt;client()-&gt;cookieJar().setCookies(this, cookieURL, value);

&gt; Source/WebCore/inspector/InspectorPageAgent.cpp:555
&gt; +        WebCore::CookieJar cookieJar = frame-&gt;loader()-&gt;client()-&gt;cookieJar();

I doubt the &quot;WebCore::&quot; is needed here.

&gt; Source/WebCore/page/Navigator.cpp:122
&gt; +    CookieJar cookieJar = m_frame-&gt;loader()-&gt;client()-&gt;cookieJar();
&gt; +    return cookieJar.cookiesEnabled(m_frame-&gt;document());

These lines can be combined, or we can just ask the document since other code seems to want to ask the document whether cookies are enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742729</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-15 19:35:58 -0700</bug_when>
    <thetext>Looks like you&apos;re on the right track.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746535</commentid>
    <comment_count>4</comment_count>
      <attachid>169674</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-19 12:35:37 -0700</bug_when>
    <thetext>Created attachment 169674
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746537</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-19 12:39:03 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=169674) [details]
&gt; WIP Patch

Implements all of Adam&apos;s suggestions to date, finishes Chromium implementation (m_webCookieJar in CookieJar.h, FrameLoaderClientImpl::cookieJar() implementation). Actually works on Chromium Linux. Other platforms TBD.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746581</commentid>
    <comment_count>6</comment_count>
      <attachid>169683</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-19 13:12:20 -0700</bug_when>
    <thetext>Created attachment 169683
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746593</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-19 13:19:17 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=169683) [details]
&gt; WIP Patch

Implements new CookieJar interface in CookieJarWin.cpp, CookieJarCurl.cpp, and CookieJarCFNet.cpp.

It looks like CookieJarQt might need some attention; it actually uses the passed-in document to get some other reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746601</commentid>
    <comment_count>8</comment_count>
      <attachid>169683</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-19 13:40:30 -0700</bug_when>
    <thetext>Comment on attachment 169683
Patch

Attachment 169683 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14455655</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746610</commentid>
    <comment_count>9</comment_count>
      <attachid>169683</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-19 13:51:15 -0700</bug_when>
    <thetext>Comment on attachment 169683
Patch

Attachment 169683 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14458589</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746618</commentid>
    <comment_count>10</comment_count>
      <attachid>169683</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-19 14:02:36 -0700</bug_when>
    <thetext>Comment on attachment 169683
Patch

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

This looks great.  There are some compile errors to work through, however.

&gt; Source/WebCore/Modules/websockets/WebSocketHandshake.cpp:265
&gt; -        String cookie = cookieRequestHeaderFieldValue(document, url);
&gt; +        String cookie;
&gt; +        Frame* frame = document-&gt;frame();
&gt; +        if (frame) {
&gt; +            CookieJar cookieJar = frame-&gt;loader()-&gt;client()-&gt;cookieJar();
&gt; +            cookie = cookieJar.cookieRequestHeaderFieldValue(url, document-&gt;firstPartyForCookies());
&gt; +        }

This code looks copy/pasted.  Should we factor this out into a helper function in this code?

&gt; Source/WebCore/platform/CookieJar.h:46
&gt; +    CookieJar() { m_webCookieJar = 0; };

Usually we put this constructor outside the ifdef and just have the m_webCookieJar assignment inside the ifdef.

&gt; Source/WebCore/platform/CookieJar.h:47
&gt; +    CookieJar(WebKit::WebCookieJar* webCookieJar) { m_webCookieJar = webCookieJar; };

Please mark one-argument constructors &quot;explicit&quot;

&gt; Source/WebCore/platform/network/chromium/CookieJarChromium.cpp:35
&gt; +

No need for this blank line.

&gt; Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp:1653
&gt; +    WebFrameImpl* frameImpl = WebFrameImpl::fromFrame(m_webFrame-&gt;frame()-&gt;document()-&gt;frame());

Why go though all this nuttiness?  Isn&apos;t m_webFrame just a WebFrameImpl?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749933</commentid>
    <comment_count>11</comment_count>
      <attachid>170450</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-24 12:44:24 -0700</bug_when>
    <thetext>Created attachment 170450
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749935</commentid>
    <comment_count>12</comment_count>
      <attachid>170450</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-24 12:45:03 -0700</bug_when>
    <thetext>Comment on attachment 170450
WIP Patch

Fixes for Mac and Windows builds. No need to review until EWS bots come back green.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749937</commentid>
    <comment_count>13</comment_count>
      <attachid>170450</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-24 12:45:43 -0700</bug_when>
    <thetext>Comment on attachment 170450
WIP Patch

Also addressed Adam&apos;s latest feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749943</commentid>
    <comment_count>14</comment_count>
      <attachid>170450</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-24 12:51:20 -0700</bug_when>
    <thetext>Comment on attachment 170450
WIP Patch

Attachment 170450 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14553308</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749946</commentid>
    <comment_count>15</comment_count>
      <attachid>170450</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-24 12:52:43 -0700</bug_when>
    <thetext>Comment on attachment 170450
WIP Patch

Attachment 170450 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14545358</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749957</commentid>
    <comment_count>16</comment_count>
      <attachid>170456</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-24 13:07:51 -0700</bug_when>
    <thetext>Created attachment 170456
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749958</commentid>
    <comment_count>17</comment_count>
      <attachid>170456</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-24 13:08:19 -0700</bug_when>
    <thetext>Comment on attachment 170456
WIP Patch

Fixes for qt builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749964</commentid>
    <comment_count>18</comment_count>
      <attachid>170456</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-24 13:14:31 -0700</bug_when>
    <thetext>Comment on attachment 170456
WIP Patch

Attachment 170456 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14566324</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749968</commentid>
    <comment_count>19</comment_count>
      <attachid>170456</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-24 13:16:25 -0700</bug_when>
    <thetext>Comment on attachment 170456
WIP Patch

Attachment 170456 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14548340</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749978</commentid>
    <comment_count>20</comment_count>
      <attachid>170459</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-24 13:28:11 -0700</bug_when>
    <thetext>Created attachment 170459
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749992</commentid>
    <comment_count>21</comment_count>
      <attachid>170459</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-24 13:39:49 -0700</bug_when>
    <thetext>Comment on attachment 170459
WIP Patch

Attachment 170459 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14548348</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749993</commentid>
    <comment_count>22</comment_count>
      <attachid>170459</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-24 13:41:45 -0700</bug_when>
    <thetext>Comment on attachment 170459
WIP Patch

Attachment 170459 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14546338</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750012</commentid>
    <comment_count>23</comment_count>
      <attachid>170459</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-24 14:00:46 -0700</bug_when>
    <thetext>Comment on attachment 170459
WIP Patch

Attachment 170459 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14559338</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750033</commentid>
    <comment_count>24</comment_count>
      <attachid>170459</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-10-24 14:16:33 -0700</bug_when>
    <thetext>Comment on attachment 170459
WIP Patch

Attachment 170459 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14546349</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750072</commentid>
    <comment_count>25</comment_count>
      <attachid>170459</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-10-24 14:52:31 -0700</bug_when>
    <thetext>Comment on attachment 170459
WIP Patch

Attachment 170459 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14555341</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750105</commentid>
    <comment_count>26</comment_count>
      <attachid>170459</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-24 15:14:57 -0700</bug_when>
    <thetext>Comment on attachment 170459
WIP Patch

Attachment 170459 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14543406</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753561</commentid>
    <comment_count>27</comment_count>
      <attachid>171274</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 10:08:59 -0700</bug_when>
    <thetext>Created attachment 171274
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753562</commentid>
    <comment_count>28</comment_count>
      <attachid>171274</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 10:09:17 -0700</bug_when>
    <thetext>Comment on attachment 171274
WIP Patch

Should fix Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753575</commentid>
    <comment_count>29</comment_count>
      <attachid>171274</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-29 10:20:38 -0700</bug_when>
    <thetext>Comment on attachment 171274
WIP Patch

Attachment 171274 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14641145</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753578</commentid>
    <comment_count>30</comment_count>
      <attachid>171274</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-29 10:22:16 -0700</bug_when>
    <thetext>Comment on attachment 171274
WIP Patch

Attachment 171274 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14627206</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753598</commentid>
    <comment_count>31</comment_count>
      <attachid>171280</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 10:42:13 -0700</bug_when>
    <thetext>Created attachment 171280
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753599</commentid>
    <comment_count>32</comment_count>
      <attachid>171280</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 10:42:34 -0700</bug_when>
    <thetext>Comment on attachment 171280
WIP Patch

Should fix Mac build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753611</commentid>
    <comment_count>33</comment_count>
      <attachid>171280</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-29 10:53:42 -0700</bug_when>
    <thetext>Comment on attachment 171280
WIP Patch

Attachment 171280 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14623402</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753612</commentid>
    <comment_count>34</comment_count>
      <attachid>171280</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-29 10:55:59 -0700</bug_when>
    <thetext>Comment on attachment 171280
WIP Patch

Attachment 171280 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14631196</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753631</commentid>
    <comment_count>35</comment_count>
      <attachid>171280</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-29 11:18:21 -0700</bug_when>
    <thetext>Comment on attachment 171280
WIP Patch

Attachment 171280 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14620493</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753634</commentid>
    <comment_count>36</comment_count>
      <attachid>171282</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 11:21:00 -0700</bug_when>
    <thetext>Created attachment 171282
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753635</commentid>
    <comment_count>37</comment_count>
      <attachid>171282</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 11:21:24 -0700</bug_when>
    <thetext>Comment on attachment 171282
WIP Patch

Attempted Qt fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753641</commentid>
    <comment_count>38</comment_count>
      <attachid>171284</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 11:30:10 -0700</bug_when>
    <thetext>Created attachment 171284
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753642</commentid>
    <comment_count>39</comment_count>
      <attachid>171284</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 11:30:37 -0700</bug_when>
    <thetext>Comment on attachment 171284
WIP Patch

Fix for Win build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753649</commentid>
    <comment_count>40</comment_count>
      <attachid>171284</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-29 11:40:23 -0700</bug_when>
    <thetext>Comment on attachment 171284
WIP Patch

Attachment 171284 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14618830</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753650</commentid>
    <comment_count>41</comment_count>
      <attachid>171284</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-29 11:42:09 -0700</bug_when>
    <thetext>Comment on attachment 171284
WIP Patch

Attachment 171284 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14618831</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753658</commentid>
    <comment_count>42</comment_count>
      <attachid>171287</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 12:03:26 -0700</bug_when>
    <thetext>Created attachment 171287
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753659</commentid>
    <comment_count>43</comment_count>
      <attachid>171287</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 12:04:04 -0700</bug_when>
    <thetext>Comment on attachment 171287
WIP Patch

Qt fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753667</commentid>
    <comment_count>44</comment_count>
      <attachid>171287</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-29 12:14:47 -0700</bug_when>
    <thetext>Comment on attachment 171287
WIP Patch

Attachment 171287 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14631213</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753669</commentid>
    <comment_count>45</comment_count>
      <attachid>171290</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 12:19:13 -0700</bug_when>
    <thetext>Created attachment 171290
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753671</commentid>
    <comment_count>46</comment_count>
      <attachid>171290</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 12:19:45 -0700</bug_when>
    <thetext>Comment on attachment 171290
WIP Patch

Fix for WK2 builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753676</commentid>
    <comment_count>47</comment_count>
      <attachid>171290</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-29 12:28:58 -0700</bug_when>
    <thetext>Comment on attachment 171290
WIP Patch

Attachment 171290 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14558057</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753678</commentid>
    <comment_count>48</comment_count>
      <attachid>171293</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 12:32:16 -0700</bug_when>
    <thetext>Created attachment 171293
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753690</commentid>
    <comment_count>49</comment_count>
      <attachid>171293</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-29 12:57:20 -0700</bug_when>
    <thetext>Comment on attachment 171293
WIP Patch

Attachment 171293 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14630215</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753694</commentid>
    <comment_count>50</comment_count>
      <attachid>171296</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 13:00:31 -0700</bug_when>
    <thetext>Created attachment 171296
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753697</commentid>
    <comment_count>51</comment_count>
      <attachid>171296</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-29 13:02:23 -0700</bug_when>
    <thetext>Comment on attachment 171296
WIP Patch

WK2 fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753725</commentid>
    <comment_count>52</comment_count>
      <attachid>171296</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-29 13:47:54 -0700</bug_when>
    <thetext>Comment on attachment 171296
WIP Patch

Attachment 171296 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14626284</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753756</commentid>
    <comment_count>53</comment_count>
      <attachid>171296</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-10-29 14:20:45 -0700</bug_when>
    <thetext>Comment on attachment 171296
WIP Patch

Attachment 171296 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14629245</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755457</commentid>
    <comment_count>54</comment_count>
      <attachid>171684</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-10-31 10:54:13 -0700</bug_when>
    <thetext>Created attachment 171684
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755515</commentid>
    <comment_count>55</comment_count>
      <attachid>171684</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-31 11:56:08 -0700</bug_when>
    <thetext>Comment on attachment 171684
Patch

Attachment 171684 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14677219</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755517</commentid>
    <comment_count>56</comment_count>
      <attachid>171684</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-10-31 11:57:32 -0700</bug_when>
    <thetext>Comment on attachment 171684
Patch

Attachment 171684 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14685306</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756227</commentid>
    <comment_count>57</comment_count>
      <attachid>171848</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-01 07:32:27 -0700</bug_when>
    <thetext>Created attachment 171848
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756271</commentid>
    <comment_count>58</comment_count>
      <attachid>171848</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-01 08:28:18 -0700</bug_when>
    <thetext>Comment on attachment 171848
Patch

Attachment 171848 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14697330</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756307</commentid>
    <comment_count>59</comment_count>
      <attachid>171848</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-01 08:53:08 -0700</bug_when>
    <thetext>Comment on attachment 171848
Patch

Attachment 171848 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14677557</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756353</commentid>
    <comment_count>60</comment_count>
      <attachid>171875</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-01 09:43:52 -0700</bug_when>
    <thetext>Created attachment 171875
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756417</commentid>
    <comment_count>61</comment_count>
      <attachid>171875</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-01 10:30:19 -0700</bug_when>
    <thetext>Comment on attachment 171875
Patch

Attachment 171875 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14687577</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756420</commentid>
    <comment_count>62</comment_count>
      <attachid>171875</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-01 10:33:27 -0700</bug_when>
    <thetext>Comment on attachment 171875
Patch

Attachment 171875 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14692557</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756535</commentid>
    <comment_count>63</comment_count>
      <attachid>171908</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-01 12:32:00 -0700</bug_when>
    <thetext>Created attachment 171908
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756555</commentid>
    <comment_count>64</comment_count>
      <attachid>171908</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-01 12:58:47 -0700</bug_when>
    <thetext>Comment on attachment 171908
Patch

Attachment 171908 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14670601</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756575</commentid>
    <comment_count>65</comment_count>
      <attachid>171908</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-01 13:36:06 -0700</bug_when>
    <thetext>Comment on attachment 171908
Patch

Attachment 171908 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14686614</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758749</commentid>
    <comment_count>66</comment_count>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-05 11:42:28 -0800</bug_when>
    <thetext>I can not reproduce this Mac compile failure locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758761</commentid>
    <comment_count>67</comment_count>
      <attachid>172373</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-05 11:51:24 -0800</bug_when>
    <thetext>Created attachment 172373
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758764</commentid>
    <comment_count>68</comment_count>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-05 11:52:18 -0800</bug_when>
    <thetext>This latest patch may -- or may not -- solve the Mac compilation problems that I can&apos;t reproduce.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758801</commentid>
    <comment_count>69</comment_count>
      <attachid>172373</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-05 12:48:22 -0800</bug_when>
    <thetext>Comment on attachment 172373
Patch

Attachment 172373 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14738098</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>758811</commentid>
    <comment_count>70</comment_count>
      <attachid>172384</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-05 13:06:44 -0800</bug_when>
    <thetext>Created attachment 172384
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759126</commentid>
    <comment_count>71</comment_count>
      <attachid>172384</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-05 18:21:02 -0800</bug_when>
    <thetext>Comment on attachment 172384
Patch

Attachment 172384 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14721886</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760988</commentid>
    <comment_count>72</comment_count>
      <attachid>172862</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-07 12:56:42 -0800</bug_when>
    <thetext>Created attachment 172862
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>760989</commentid>
    <comment_count>73</comment_count>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-07 12:57:40 -0800</bug_when>
    <thetext>(In reply to comment #72)
&gt; Created an attachment (id=172862) [details]
&gt; Patch

Merge in changes to CookieJar.mm, plus EFL fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761064</commentid>
    <comment_count>74</comment_count>
      <attachid>172862</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-11-07 14:40:01 -0800</bug_when>
    <thetext>Comment on attachment 172862
Patch

Attachment 172862 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14763321</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761077</commentid>
    <comment_count>75</comment_count>
      <attachid>172862</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-07 14:54:42 -0800</bug_when>
    <thetext>Comment on attachment 172862
Patch

Attachment 172862 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14764269</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761078</commentid>
    <comment_count>76</comment_count>
      <attachid>172862</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-07 14:55:32 -0800</bug_when>
    <thetext>Comment on attachment 172862
Patch

Attachment 172862 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14748799</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761080</commentid>
    <comment_count>77</comment_count>
      <attachid>172862</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-07 14:56:40 -0800</bug_when>
    <thetext>Comment on attachment 172862
Patch

Attachment 172862 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14760493</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761087</commentid>
    <comment_count>78</comment_count>
      <attachid>172862</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-11-07 15:06:10 -0800</bug_when>
    <thetext>Comment on attachment 172862
Patch

Attachment 172862 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14765216</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761093</commentid>
    <comment_count>79</comment_count>
      <attachid>172878</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-07 15:15:36 -0800</bug_when>
    <thetext>Created attachment 172878
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761173</commentid>
    <comment_count>80</comment_count>
      <attachid>172878</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-11-07 16:43:44 -0800</bug_when>
    <thetext>Comment on attachment 172878
Patch

Attachment 172878 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14765245</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761175</commentid>
    <comment_count>81</comment_count>
      <attachid>172878</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-11-07 16:44:07 -0800</bug_when>
    <thetext>Comment on attachment 172878
Patch

Attachment 172878 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14759518</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761202</commentid>
    <comment_count>82</comment_count>
      <attachid>172878</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-11-07 17:24:20 -0800</bug_when>
    <thetext>Comment on attachment 172878
Patch

Attachment 172878 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14766263</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761725</commentid>
    <comment_count>83</comment_count>
      <attachid>173031</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-08 06:18:27 -0800</bug_when>
    <thetext>Created attachment 173031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761966</commentid>
    <comment_count>84</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-08 10:49:03 -0800</bug_when>
    <thetext>Alexey is also working on this code in bug 101621 using a slightly different approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761977</commentid>
    <comment_count>85</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-08 11:00:42 -0800</bug_when>
    <thetext>I haven&apos;t seen this bug, because its title incorrectly started with [chromium]. Bracketed titles are used to signal that people working on other ports need not care about this work. Usually it means that no cross-platform files are touched at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761982</commentid>
    <comment_count>86</comment_count>
      <attachid>173031</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-08 11:08:42 -0800</bug_when>
    <thetext>Comment on attachment 173031
Patch

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

I think that going with NetworkingContext is the right thing to do here - ports already use it for cookies, and it feels quite nice.

&gt; Source/WebCore/Modules/websockets/WebSocketHandshake.cpp:44
&gt; +#include &quot;Frame.h&quot;
&gt; +#include &quot;FrameLoader.h&quot;
&gt; +#include &quot;FrameLoaderClient.h&quot;

It&apos;s not great that this approach requires adding more Frame dependencies into loading code like this.

Even though WebSocketHandshake.cpp is not in platform directory (and already has document dependencies), it&apos;s logically part of non-Web platform functionality.

&gt; Source/WebCore/platform/network/cf/CookieJarCFNet.cpp:218
&gt; +void CookieJar::getHostnamesWithCookies(HashSet&lt;String&gt;&amp; hostnames)
&gt;  {
&gt;      RetainPtr&lt;CFHTTPCookieStorageRef&gt; cookieStorage = defaultCFHTTPCookieStorage();

This makes Mac and CFNet ports quite a bit more confusing. If we are going to have multiple &quot;CookieJar&quot; instances, then they should incorporate storage - otherwise, it&apos;s not really a class.

&gt; Source/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h:57
&gt; +class CookieJar;

You have also added &apos;#include &quot;CookieJar.h&quot;&apos; above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761995</commentid>
    <comment_count>87</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-08 11:20:39 -0800</bug_when>
    <thetext>Note that my patch does not attempt to remove cookie-related functions from Chromium&apos;s PlatformSupport. It does a conflicting refactoring and fixes a layering violation. Chromium and Blackberry end up with forked code, because I cannot practically address the issue for these ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767005</commentid>
    <comment_count>88</comment_count>
      <attachid>174188</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-14 10:13:17 -0800</bug_when>
    <thetext>Created attachment 174188
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767074</commentid>
    <comment_count>89</comment_count>
      <attachid>174206</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-14 11:11:44 -0800</bug_when>
    <thetext>Created attachment 174206
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767113</commentid>
    <comment_count>90</comment_count>
      <attachid>174206</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-14 11:33:53 -0800</bug_when>
    <thetext>Comment on attachment 174206
Patch

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

This looks great.  One nit and one question.

&gt; Source/WebCore/loader/CookieJar.cpp:68
&gt; +#if PLATFORM(CHROMIUM)
&gt; +    return cookiesEnabled(networkingContext(document), document-&gt;cookieURL(), document-&gt;firstPartyForCookies());
&gt; +#else
&gt;      return cookiesEnabled(networkingContext(document));
&gt; +#endif

You should change PlatformCookieJar.h to take these extra arguments and make all the other implementations ignore them.

&gt; Source/WebCore/loader/CookieJar.cpp:73
&gt; +#if PLATFORM(CHROMIUM)

ditto

&gt; Source/WebCore/loader/CookieJar.cpp:82
&gt; +#if PLATFORM(CHROMIUM)

ditto

&gt; Source/WebCore/platform/network/chromium/CookieJarChromium.cpp:44
&gt; +void setCookiesFromDOM(NetworkingContext* context, const KURL&amp; firstPartyForCookies, const KURL&amp; url, const String&amp; cookieStr)

cookieStr -&gt; cookieString

&gt; Source/WebCore/platform/network/chromium/CookieJarChromium.cpp:47
&gt; +    if (!context)
&gt; +        return;

Is this right, or should we use the default cookie jar from WebKit::Platform?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767249</commentid>
    <comment_count>91</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-14 13:39:15 -0800</bug_when>
    <thetext>The approach looks good to me, too.

&gt; &gt; +    return cookiesEnabled(networkingContext(document), document-&gt;cookieURL(), document-&gt;firstPartyForCookies());
&gt; You should change PlatformCookieJar.h to take these extra arguments and make all the other implementations ignore them.

What does it mean for cookies to be enabled for a specific URL and first party only? This function is a bit of a mystery as is to me, but with the extra arguments, I&apos;m not sure how to decipher it at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767253</commentid>
    <comment_count>92</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-14 13:44:39 -0800</bug_when>
    <thetext>&gt; What does it mean for cookies to be enabled for a specific URL and first party only? This function is a bit of a mystery as is to me, but with the extra arguments, I&apos;m not sure how to decipher it at all.

Chrome has an option to enable and disable cookies on a fine-grained basis, including depending on the host names of the first and third parties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767374</commentid>
    <comment_count>93</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-14 15:33:42 -0800</bug_when>
    <thetext>Perhaps cookiesEnabled() needs a better name. I don&apos;t know what it means for cookies to be &quot;enabled&quot; - there is no such thing in UI, and technically, there are a lot of separate aspects.

For example, Mac port says that cookies are enabled if any cookies can ever be accepted (i.e. policy is not &quot;never accept&quot;, which is not at all clear from the function name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767383</commentid>
    <comment_count>94</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-14 15:40:31 -0800</bug_when>
    <thetext>&gt; Perhaps cookiesEnabled() needs a better name.

It looks like it maps to navigator.cookieEnabled, which means we should probably keep the name for consistency with the DOM.

&gt; I don&apos;t know what it means for cookies to be &quot;enabled&quot; - there is no such thing in UI, and technically, there are a lot of separate aspects.

Apparently there is such a thing in the DOM and we need to be able to provide a true/false value for each document.

&gt; For example, Mac port says that cookies are enabled if any cookies can ever be accepted (i.e. policy is not &quot;never accept&quot;, which is not at all clear from the function name.

That doesn&apos;t seem like the most helpful DOM API.  I would expect that web sites reading navigator.cookieEnabled would be most interested in whether cookies are accepted in the specific context in question rather than whether there is some other context in a galaxy far, far away where cookies are accepted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767436</commentid>
    <comment_count>95</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-11-14 16:29:33 -0800</bug_when>
    <thetext>(In reply to comment #94)
&gt; &gt; Perhaps cookiesEnabled() needs a better name.
&gt; 
&gt; It looks like it maps to navigator.cookieEnabled, which means we should probably keep the name for consistency with the DOM.

Makes much better sense to me now! But is there actually an inconsistency between &quot;cookie_s_Enabled&quot; and &quot;cookieEnabled&quot; here?

Perhaps we could add &quot;DOM&quot; to function name, just like I did with two other functions a few days ago.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768828</commentid>
    <comment_count>96</comment_count>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-15 19:10:17 -0800</bug_when>
    <thetext>Split part of this post-PlatformCookieJar patch into bug 102456. Once that lands, this bug will deal with the remaining Chromium-specific changes. Restoring original bug name to reflect this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769227</commentid>
    <comment_count>97</comment_count>
      <attachid>174675</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-16 06:57:15 -0800</bug_when>
    <thetext>Created attachment 174675
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769364</commentid>
    <comment_count>98</comment_count>
      <attachid>174675</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-16 09:37:25 -0800</bug_when>
    <thetext>Comment on attachment 174675
Patch

Yay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769466</commentid>
    <comment_count>99</comment_count>
      <attachid>174675</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-16 11:02:41 -0800</bug_when>
    <thetext>Comment on attachment 174675
Patch

Clearing flags on attachment: 174675

Committed r134973: &lt;http://trac.webkit.org/changeset/134973&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769467</commentid>
    <comment_count>100</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-16 11:02:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769501</commentid>
    <comment_count>101</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-11-16 11:28:22 -0800</bug_when>
    <thetext>Reverted r134973 for reason:

Broke compile on at least Mac and Linux.

Committed r134975: &lt;http://trac.webkit.org/changeset/134975&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769635</commentid>
    <comment_count>102</comment_count>
      <attachid>174675</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-16 13:38:05 -0800</bug_when>
    <thetext>Comment on attachment 174675
Patch

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

&gt; Source/WebKit/chromium/src/FrameNetworkingContextImpl.cpp:35
&gt; +#include &quot;public/WebFrameClient.h&quot;

I don&apos;t think this is the right way to include this file.  I think you should just include it as follows:

#include &quot;WebFrameClient.h&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769647</commentid>
    <comment_count>103</comment_count>
      <attachid>174753</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2012-11-16 13:51:27 -0800</bug_when>
    <thetext>Created attachment 174753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769734</commentid>
    <comment_count>104</comment_count>
      <attachid>174753</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-16 15:53:13 -0800</bug_when>
    <thetext>Comment on attachment 174753
Patch

Clearing flags on attachment: 174753

Committed r135013: &lt;http://trac.webkit.org/changeset/135013&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769735</commentid>
    <comment_count>105</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-16 15:53:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168741</attachid>
            <date>2012-10-15 11:03:44 -0700</date>
            <delta_ts>2012-10-19 12:35:35 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-99340-20121015140223.patch</filename>
            <type>text/plain</type>
            <size>12069</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTMyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEyLTEwLTE1ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92
ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1h
dGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFk
ZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpwcm9j
ZXNzQnVmZmVyKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFu
ZHNoYWtlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNs
aWVudEhhbmRzaGFrZVJlcXVlc3QpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzZXRDb29raWUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnQ6OmNvb2tpZUphcik6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjb29raWVFbmFibGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9Db29raWVKYXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29va2llSmFy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2ll
SmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6
Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tp
ZSk6CisKIDIwMTItMTAtMTUgIE1pa2UgV2VzdCAgPG1rd3N0QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBDU1Agc291cmNlIGV4cHJlc3Npb25zIHNob3VsZCBzdXBwb3J0IHBhdGhzIGF0IGZpbGUt
bGV2ZWwgZ3JhbnVsYXJpdHkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lvbiAxMzEzMTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzMCw5ICs0MzAsMTMgQEAgYm9vbCBXZWJTb2NrZXRDaGFubmVs
Ojpwcm9jZXNzQnVmZmVyKCkKICAgICAgICAgICAgIGlmIChtX2lkZW50aWZpZXIpCiAgICAgICAg
ICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlV2ViU29ja2V0SGFu
ZHNoYWtlUmVzcG9uc2UobV9kb2N1bWVudCwgbV9pZGVudGlmaWVyLCBtX2hhbmRzaGFrZS0+c2Vy
dmVySGFuZHNoYWtlUmVzcG9uc2UoKSk7CiAgICAgICAgICAgICBpZiAoIW1faGFuZHNoYWtlLT5z
ZXJ2ZXJTZXRDb29raWUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29va2ll
c0VuYWJsZWQobV9kb2N1bWVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29k
ZSBlYzsgLy8gRXhjZXB0aW9uIChmb3Igc2FuZGJveGVkIGRvY3VtZW50cykgaWdub3JlZC4KLSAg
ICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+c2V0Q29va2llKG1faGFuZHNoYWtlLT5zZXJ2
ZXJTZXRDb29raWUoKSwgZWMpOworICAgICAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9j
dW1lbnQtPmZyYW1lKCk7CisgICAgICAgICAgICAgICAgaWYgKGZyYW1lKSB7CisgICAgICAgICAg
ICAgICAgICAgIENvb2tpZUphciBjb29raWVKYXIgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgp
LT5jb29raWVKYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvb2tpZUphci5jb29raWVz
RW5hYmxlZChtX2RvY3VtZW50KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYzsgLy8gRXhjZXB0aW9uIChmb3Igc2FuZGJveGVkIGRvY3VtZW50cykgaWdub3JlZC4K
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnNldENvb2tpZShtX2hhbmRzaGFr
ZS0+c2VydmVyU2V0Q29va2llKCksIGVjKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUg
c2V0LWNvb2tpZTIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0SGFuZHNoYWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMTMxMzEyKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDkgQEAKICNpbmNsdWRlICJDb29raWUuaCIKICNp
bmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNs
aWVudC5oIgogI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vy
cy5oIgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTIwMCw3ICsyMDMsMTIgQEAgQ1N0cmluZyBXZWJT
b2NrZXRIYW5kc2hha2U6OmNsaWVudEhhbmRzaAogICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1
dGhlbnRpY2F0aW9uQW5kQ29va2llcygpOwogICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQo
KSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KG1fY29udGV4dCk7Ci0gICAgICAgIFN0cmluZyBjb29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAgICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAg
ICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkg
eworICAgICAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPmNvb2tpZUphcigpOworICAgICAgICAgICAgY29va2llID0gY29va2llSmFyLmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAgICB9CiAgICAg
ICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoIkNv
b2tpZTogIiArIGNvb2tpZSk7CiAgICAgICAgIC8vIFNldCAiQ29va2llMjogPGNvb2tpZT4iIGlm
IGNvb2tpZXMgMiBleGlzdHMgZm9yIHVybD8KQEAgLTI0OSw3ICsyNTcsMTIgQEAgUGFzc1JlZlB0
cjxXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0PiBXZQogICAgIEtVUkwgdXJsID0gaHR0cFVSTEZv
ckF1dGhlbnRpY2F0aW9uQW5kQ29va2llcygpOwogICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1l
bnQoKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KG1fY29udGV4dCk7Ci0gICAgICAgIFN0cmluZyBjb29raWUgPSBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAgICAgICAgU3RyaW5nIGNvb2tpZTsKKyAg
ICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFt
ZSkgeworICAgICAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+
Y2xpZW50KCktPmNvb2tpZUphcigpOworICAgICAgICAgICAgY29va2llID0gY29va2llSmFyLmNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAgICB9CiAg
ICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlcXVlc3QtPmFkZEhl
YWRlckZpZWxkKCJDb29raWUiLCBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxj
b29raWU+IiBpZiBjb29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDEzMTMxMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MTIsNyArMzgxMiwxMiBAQCBTdHJpbmcgRG9jdW1l
bnQ6OmNvb2tpZShFeGNlcHRpb25Db2RlJiBlCiAgICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJldHVybiBjb29raWVzKHRoaXMsIGNv
b2tpZVVSTCk7CisgICAgU3RyaW5nIGNvb2tpZXM7CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHRo
aXMtPmZyYW1lKCkpIHsKKyAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOworICAgICAgICBjb29raWVzID0gY29va2llSmFy
LmNvb2tpZXModGhpcywgY29va2llVVJMKTsKKyAgICB9CisgICAgcmV0dXJuIGNvb2tpZXM7CiB9
CiAKIHZvaWQgRG9jdW1lbnQ6OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTM4MzMsNyArMzgzOCwxMCBAQCB2b2lkIERvY3VtZW50OjpzZXRDb29r
aWUoY29uc3QgU3RyaW5nJiB2CiAgICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHNldENvb2tpZXModGhpcywgY29va2llVVJMLCB2YWx1ZSk7CisgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkpIHsKKyAgICAgICAgQ29va2llSmFyIGNv
b2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOworICAgICAg
ICBjb29raWVKYXIuc2V0Q29va2llcyh0aGlzLCBjb29raWVVUkwsIHZhbHVlKTsKKyAgICB9CiB9
CiAKIFN0cmluZyBEb2N1bWVudDo6cmVmZXJyZXIoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDEzMTMx
MikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIkdlb2xvY2F0aW9uRXJyb3IuaCIKQEAgLTUxMSw5ICs1MTMsMTAgQEAgdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJybwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFp
bkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtYWlu
RnJhbWUoKSkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50
KCk7CiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZy
YW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIo
KS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsr
aXQpIHsKICAgICAgICAgICAgIFZlY3RvcjxDb29raWU+IGRvY0Nvb2tpZXNMaXN0OwotICAgICAg
ICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZ2V0UmF3Q29va2llcyhkb2N1bWVudCwgS1VS
TChQYXJzZWRVUkxTdHJpbmcsICppdCksIGRvY0Nvb2tpZXNMaXN0KTsKKyAgICAgICAgICAgIHJh
d0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGNvb2tpZUphci5nZXRSYXdDb29raWVzKGRvY3VtZW50LCBL
VVJMKFBhcnNlZFVSTFN0cmluZywgKml0KSwgZG9jQ29va2llc0xpc3QpOwogICAgICAgICAgICAg
aWYgKCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
V2UgbmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBmb3IgdGhlIFN0cmluZyByZXByZXNlbnRhdGlv
biBvZiBjb29raWVzLgogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAt
NTQ5LDggKzU1Miw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXIK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0g
YWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgV2ViQ29yZTo6Q29va2ll
SmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwog
ICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJl
Z2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBXZWJDb3JlOjpk
ZWxldGVDb29raWUoZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVO
YW1lKTsKKyAgICAgICAgICAgIGNvb2tpZUphci5kZWxldGVDb29raWUoZG9jdW1lbnQsIEtVUkwo
UGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVOYW1lKTsKICAgICB9CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lvbiAxMzEzMTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmbmRlZiBGcmFtZUxvYWRlckNsaWVudF9oCiAjZGVm
aW5lIEZyYW1lTG9hZGVyQ2xpZW50X2gKIAorI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJJY29uVVJMLmgiCiAjaW5jbHVkZSAi
TGF5b3V0TWlsZXN0b25lcy5oIgpAQCAtNjQsNiArNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CiAgICAgY2xhc3MgQ2FjaGVkRnJh
bWU7CiAgICAgY2xhc3MgQ29sb3I7CisgICAgY2xhc3MgQ29va2llSmFyOwogICAgIGNsYXNzIERP
TVdpbmRvd0V4dGVuc2lvbjsKICAgICBjbGFzcyBET01XcmFwcGVyV29ybGQ7CiAgICAgY2xhc3Mg
RG9jdW1lbnRMb2FkZXI7CkBAIC0zNDksNiArMzUxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdp
bGxTdGFydFVzaW5nUGVlckNvbm5lY3Rpb25IYW5kbGVyKFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxl
ciopIHsgfQogI2VuZGlmCisKKyAgICAgICAgdmlydHVhbCBDb29raWVKYXIgY29va2llSmFyKCkg
eyByZXR1cm4gQ29va2llSmFyKCk7IH0KICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiAxMzEzMTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3
ICsxMTgsOCBAQCBib29sIE5hdmlnYXRvcjo6Y29va2llRW5hYmxlZCgpIGNvbnN0CiAgICAgaWYg
KG1fZnJhbWUtPnBhZ2UoKSAmJiAhbV9mcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVF
bmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBjb29raWVzRW5h
YmxlZChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICBDb29raWVKYXIgY29va2llSmFyID0gbV9m
cmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKTsKKyAgICByZXR1cm4gY29va2ll
SmFyLmNvb2tpZXNFbmFibGVkKG1fZnJhbWUtPmRvY3VtZW50KCkpOwogfQogCiBib29sIE5hdmln
YXRvcjo6amF2YUVuYWJsZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q29va2llSmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2ll
SmFyLmgJKHJldmlzaW9uIDEzMTMxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tp
ZUphci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTIgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0gICAgY2xhc3MgRG9jdW1lbnQ7Ci0gICAgY2xhc3MgS1VSTDsKLQotICAgIHN0
cnVjdCBDb29raWU7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEtVUkw7CitzdHJ1Y3QgQ29va2ll
OwogCitjbGFzcyBDb29raWVKYXIgeworcHVibGljOgogICAgIC8vIGNvb2tpZXMgb21pdHMgSHR0
cE9ubHkgY29va2llcy4KICAgICBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmKTsKICAgICBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3Qg
RG9jdW1lbnQqLCBjb25zdCBLVVJMJik7CkBAIC00OSw3ICs1MCw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYg
aG9zdG5hbWVzKTsKICAgICB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJp
bmcmIGhvc3RuYW1lKTsKICAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsKK307CiAKLX0KK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9t
aXVtLmNwcAkocmV2aXNpb24gMTMxMzEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDMyICszNywzMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgc2V0Q29va2llcyhE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0
Q29va2llcyhkb2N1bWVudCwgdXJsLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6
Y29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKIHsKICAg
ICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzKGRvY3VtZW50LCB1cmwpOwogfQogCi1T
dHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkK
IHsKICAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShkb2N1bWVudCwgdXJsKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQpCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50KQogewogICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXNF
bmFibGVkKGRvY3VtZW50KTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykK
K2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICByZXR1
cm4gUGxhdGZvcm1TdXBwb3J0OjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIHJhd0Nvb2tpZXMp
OwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQordm9pZCBDb29raWVKYXI6OmRl
bGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBjb29raWVOYW1lKQogewogICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmRl
bGV0ZUNvb2tpZShkb2N1bWVudCwgdXJsLCBjb29raWVOYW1lKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169674</attachid>
            <date>2012-10-19 12:35:37 -0700</date>
            <delta_ts>2012-10-19 13:12:17 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-99340-20121019153407.patch</filename>
            <type>text/plain</type>
            <size>21549</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTkzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEyLTEwLTE5ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92
ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1h
dGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFk
ZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpwcm9j
ZXNzQnVmZmVyKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFu
ZHNoYWtlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNs
aWVudEhhbmRzaGFrZVJlcXVlc3QpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzZXRDb29raWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAg
ICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnQ6OmNvb2tpZUphcik6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjb29raWVFbmFibGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9Db29raWVKYXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29va2llSmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Q29va2llSmFyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaDoKKyAgICAgICAgKFBsYXRmb3JtU3Vw
cG9ydCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVD
b29raWUpOgorCiAyMDEyLTEwLTE5ICBKdXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBbQ2hyb21pdW1dIFJlZHVjZSBtZW1vcnkgZm9vdHByaW50IG9mIGNhbnZh
cyBwYXR0ZXJuIG9iamVjdCB3aXRoIGRlZmVycmVkIHJlbmRlcmluZwpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNw
cAkocmV2aXNpb24gMTMxODk2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldENoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzAsNyArNDMwLDcgQEAg
Ym9vbCBXZWJTb2NrZXRDaGFubmVsOjpwcm9jZXNzQnVmZmVyKCkKICAgICAgICAgICAgIGlmICht
X2lkZW50aWZpZXIpCiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UobV9kb2N1bWVudCwgbV9pZGVudGlm
aWVyLCBtX2hhbmRzaGFrZS0+c2VydmVySGFuZHNoYWtlUmVzcG9uc2UoKSk7CiAgICAgICAgICAg
ICBpZiAoIW1faGFuZHNoYWtlLT5zZXJ2ZXJTZXRDb29raWUoKS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoY29va2llc0VuYWJsZWQobV9kb2N1bWVudCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAobV9kb2N1bWVudC0+Y29va2llc0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjOyAvLyBFeGNlcHRpb24gKGZvciBzYW5kYm94ZWQgZG9jdW1l
bnRzKSBpZ25vcmVkLgogICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5zZXRDb29raWUo
bV9oYW5kc2hha2UtPnNlcnZlclNldENvb2tpZSgpLCBlYyk7CiAgICAgICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFr
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dl
YlNvY2tldEhhbmRzaGFrZS5jcHAJKHJldmlzaW9uIDEzMTg5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw5IEBACiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2ll
SmFyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNs
dWRlICJIVFRQSGVhZGVyTWFwLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRl
ICJLVVJMLmgiCkBAIC0yMDAsNyArMjAzLDEyIEBAIENTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtl
OjpjbGllbnRIYW5kc2gKICAgICBLVVJMIHVybCA9IGh0dHBVUkxGb3JBdXRoZW50aWNhdGlvbkFu
ZENvb2tpZXMoKTsKICAgICBpZiAobV9jb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX2NvbnRleHQpOwot
ICAgICAgICBTdHJpbmcgY29va2llID0gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZG9j
dW1lbnQsIHVybCk7CisgICAgICAgIFN0cmluZyBjb29raWU7CisgICAgICAgIEZyYW1lKiBmcmFt
ZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgICAgICBpZiAoZnJhbWUpIHsKKyAgICAgICAgICAg
IENvb2tpZUphciBjb29raWVKYXIgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVK
YXIoKTsKKyAgICAgICAgICAgIGNvb2tpZSA9IGNvb2tpZUphci5jb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICAg
ICAgfQogICAgICAgICBpZiAoIWNvb2tpZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBmaWVsZHMu
YXBwZW5kKCJDb29raWU6ICIgKyBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxj
b29raWU+IiBpZiBjb29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkBAIC0yNDksNyArMjU3LDEyIEBA
IFBhc3NSZWZQdHI8V2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdD4gV2UKICAgICBLVVJMIHVybCA9
IGh0dHBVUkxGb3JBdXRoZW50aWNhdGlvbkFuZENvb2tpZXMoKTsKICAgICBpZiAobV9jb250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nh
c3Q8RG9jdW1lbnQqPihtX2NvbnRleHQpOwotICAgICAgICBTdHJpbmcgY29va2llID0gY29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7CisgICAgICAgIFN0cmluZyBj
b29raWU7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgICAg
ICBpZiAoZnJhbWUpIHsKKyAgICAgICAgICAgIENvb2tpZUphciBjb29raWVKYXIgPSBmcmFtZS0+
bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKTsKKyAgICAgICAgICAgIGNvb2tpZSA9IGNv
b2tpZUphci5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJz
dFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWNvb2tpZS5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICByZXF1ZXN0LT5hZGRIZWFkZXJGaWVsZCgiQ29va2llIiwgY29v
a2llKTsKICAgICAgICAgLy8gU2V0ICJDb29raWUyOiA8Y29va2llPiIgaWYgY29va2llcyAyIGV4
aXN0cyBmb3IgdXJsPwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMzE4
OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zODE1LDcgKzM4MTUsOSBAQCBTdHJpbmcgRG9jdW1lbnQ6OmNvb2tpZShFeGNlcHRpb25Db2Rl
JiBlCiAgICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKIAotICAgIHJldHVybiBjb29raWVzKHRoaXMsIGNvb2tpZVVSTCk7CisgICAgaWYgKCFmcmFt
ZSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGZyYW1lKCktPmxvYWRl
cigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llcyhjb29raWVVUkwsIHRoaXMtPmZpcnN0
UGFydHlGb3JDb29raWVzKCkpOwogfQogCiB2b2lkIERvY3VtZW50OjpzZXRDb29raWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0zODM2LDcgKzM4MzgsMjMgQEAg
dm9pZCBEb2N1bWVudDo6c2V0Q29va2llKGNvbnN0IFN0cmluZyYgdgogICAgIGlmIChjb29raWVV
UkwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRDb29raWVzKHRoaXMsIGNv
b2tpZVVSTCwgdmFsdWUpOworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuc2V0Q29va2llcyhjb29r
aWVVUkwsIHRoaXMtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHZhbHVlKTsKK30KKworYm9vbCBE
b2N1bWVudDo6Y29va2llc0VuYWJsZWQoKQoreworICAgIGlmICghcGFnZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXBhZ2UoKS0+c2V0dGluZ3MoKS0+Y29va2llRW5hYmxl
ZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCkt
PmNvb2tpZUphcigpLmNvb2tpZXNFbmFibGVkKHRoaXMtPmNvb2tpZVVSTCgpLCB0aGlzLT5maXJz
dFBhcnR5Rm9yQ29va2llcygpKTsKIH0KIAogU3RyaW5nIERvY3VtZW50OjpyZWZlcnJlcigpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTMxODk2KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxNyw2ICs4MTcsNyBA
QCBwdWJsaWM6CiAKICAgICBTdHJpbmcgY29va2llKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAg
ICB2b2lkIHNldENvb2tpZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9v
bCBjb29raWVzRW5hYmxlZCgpOwogCiAgICAgU3RyaW5nIHJlZmVycmVyKCkgY29uc3Q7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3Bw
CShyZXZpc2lvbiAxMzE4OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOCBAQAogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGll
bnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvbkNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvbkVycm9yLmgiCkBAIC01MTEsOSArNTEzLDEw
IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm8KICAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50
cmF2ZXJzZU5leHQobWFpbkZyYW1lKCkpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGZyYW1lLT5kb2N1bWVudCgpOwogICAgICAgICBWZWN0b3I8S1VSTD4gYWxsVVJMcyA9IGFsbFJl
c291cmNlc1VSTHNGb3JGcmFtZShmcmFtZSk7CisgICAgICAgIENvb2tpZUphciBjb29raWVKYXIg
PSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKTsKICAgICAgICAgZm9yIChW
ZWN0b3I8S1VSTD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsVVJMcy5iZWdpbigpOyBpdCAhPSBh
bGxVUkxzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgICBWZWN0b3I8Q29va2llPiBkb2NDb29r
aWVzTGlzdDsKLSAgICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGdldFJhd0Nvb2tp
ZXMoZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBkb2NDb29raWVzTGlzdCk7
CisgICAgICAgICAgICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBjb29raWVKYXIuZ2V0UmF3Q29v
a2llcyhLVVJMKFBhcnNlZFVSTFN0cmluZywgKml0KSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JD
b29raWVzKCksIGRvY0Nvb2tpZXNMaXN0KTsKICAgICAgICAgICAgIGlmICghcmF3Q29va2llc0lt
cGxlbWVudGVkKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgZHVwbGljYXRp
b24gY2hlY2tpbmcgZm9yIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29va2llcy4KICAg
ICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTU0OSw4ICs1NTIsOSBAQCB2
b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKEVyCiAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICBWZWN0b3I8S1VSTD4gYWxsVVJMcyA9IGFsbFJlc291cmNlc1VSTHNG
b3JGcmFtZShmcmFtZSk7CisgICAgICAgIENvb2tpZUphciBjb29raWVKYXIgPSBmcmFtZS0+bG9h
ZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKTsKICAgICAgICAgZm9yIChWZWN0b3I8S1VSTD46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsVVJMcy5iZWdpbigpOyBpdCAhPSBhbGxVUkxzLmVuZCgp
OyArK2l0KQotICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCBLVVJM
KFBhcnNlZFVSTFN0cmluZywgKml0KSwgY29va2llTmFtZSk7CisgICAgICAgICAgICBjb29raWVK
YXIuZGVsZXRlQ29va2llKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVOYW1lKTsK
ICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVu
dC5oCShyZXZpc2lvbiAxMzE4OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmbmRlZiBGcmFt
ZUxvYWRlckNsaWVudF9oCiAjZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50X2gKIAorI2luY2x1ZGUg
IkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJJ
Y29uVVJMLmgiCiAjaW5jbHVkZSAiTGF5b3V0TWlsZXN0b25lcy5oIgpAQCAtNjQsNiArNjUsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7
CiAgICAgY2xhc3MgQ2FjaGVkRnJhbWU7CiAgICAgY2xhc3MgQ29sb3I7CisgICAgY2xhc3MgQ29v
a2llSmFyOwogICAgIGNsYXNzIERPTVdpbmRvd0V4dGVuc2lvbjsKICAgICBjbGFzcyBET01XcmFw
cGVyV29ybGQ7CiAgICAgY2xhc3MgRG9jdW1lbnRMb2FkZXI7CkBAIC0zNDksNiArMzUxLDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTdGFydFVzaW5nUGVlckNvbm5lY3Rpb25IYW5kbGVyKFJU
Q1BlZXJDb25uZWN0aW9uSGFuZGxlciopIHsgfQogI2VuZGlmCisKKyAgICAgICAgdmlydHVhbCBD
b29raWVKYXIgY29va2llSmFyKCkgeyByZXR1cm4gQ29va2llSmFyKCk7IH0KICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCShy
ZXZpc2lvbiAxMzE4OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJOYXZpZ2F0b3IuaCIKIAotI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRP
TU1pbWVUeXBlQXJyYXkuaCIKICNpbmNsdWRlICJET01QbHVnaW5BcnJheS5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCkBAIC0xMTgsNyArMTE3LDcgQEAgYm9vbCBOYXZpZ2F0b3I6OmNvb2tpZUVu
YWJsZWQoKSBjb25zdAogICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkgJiYgIW1fZnJhbWUtPnBhZ2Uo
KS0+c2V0dGluZ3MoKS0+Y29va2llRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gY29va2llc0VuYWJsZWQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0
dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPmNvb2tpZXNFbmFibGVkKCk7CiB9CiAKIGJvb2wgTmF2
aWdhdG9yOjpqYXZhRW5hYmxlZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db29raWVKYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29r
aWVKYXIuaAkocmV2aXNpb24gMTMxODk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29v
a2llSmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDEwIEBACiAjaWZuZGVmIENvb2tp
ZUphcl9oCiAjZGVmaW5lIENvb2tpZUphcl9oCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNp
bmNsdWRlIDxwdWJsaWMvV2ViQ29va2llSmFyLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KQEAgLTMzLDIzICszNywzNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LSAgICBjbGFzcyBEb2N1bWVudDsKLSAgICBjbGFzcyBLVVJMOworY2xhc3MgS1VSTDsKK3N0cnVj
dCBDb29raWU7CiAKLSAgICBzdHJ1Y3QgQ29va2llOworY2xhc3MgQ29va2llSmFyIHsKK3B1Ymxp
YzoKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBDb29raWVKYXIoKSB7IG1fd2ViQ29va2ll
SmFyID0gMDsgfTsKKyAgICBDb29raWVKYXIoV2ViS2l0OjpXZWJDb29raWVKYXIqIHdlYkNvb2tp
ZUphcikgeyBtX3dlYkNvb2tpZUphciA9IHdlYkNvb2tpZUphcjsgfTsKKyNlbmRpZgogCiAgICAg
Ly8gY29va2llcyBvbWl0cyBIdHRwT25seSBjb29raWVzLgotICAgIFN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIFN0cmluZyBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHNl
dENvb2tpZXMoRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOwotICAgIGJvb2wgZ2V0UmF3Q29va2ll
cyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwotICAgIHZv
aWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYpOworICAgIFN0cmluZyBjb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAg
U3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmLCBjb25zdCBL
VVJMJik7CisgICAgdm9pZCBzZXRDb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJik7CisgICAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiwgY29uc3Qg
S1VSTCYpOworICAgIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYs
IFZlY3RvcjxDb29raWU+Jik7CisgICAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0
PFN0cmluZz4mIGhvc3RuYW1lcyk7CiAgICAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSk7CiAgICAgdm9pZCBkZWxldGVBbGxDb29raWVzKCk7CiAK
LX0KKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK3ByaXZhdGU6CisgICAgV2ViS2l0OjpXZWJDb29r
aWVKYXIqIG1fd2ViQ29va2llSmFyOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1TdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUGxhdGZvcm1TdXBwb3J0LmgJKHJldmlzaW9uIDEzMTg5NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03OCwxNCArNzgsNiBAQCBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwogCiBjbGFzcyBQbGF0Zm9y
bVN1cHBvcnQgewogcHVibGljOgotICAgIC8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgc3RhdGljIHZvaWQg
c2V0Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJik7Ci0gICAgc3RhdGljIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgYm9vbCByYXdDb29raWVz
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci0gICAgc3Rh
dGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgY29va2llTmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgY29va2llc0VuYWJsZWQoY29u
c3QgRG9jdW1lbnQqKTsKLQogICAgIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgT1MoV0lORE9XUykKICAg
ICBzdGF0aWMgYm9vbCBlbnN1cmVGb250TG9hZGVkKEhGT05UKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2ll
SmFyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMzE4OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUsMzYgKzM1LDYxIEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN1cHBvcnQuaCIKIAorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWUuaD4KKyNpbmNs
dWRlIDxwdWJsaWMvV2ViQ29va2llSmFyLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5o
PgorI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9y
Lmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29r
aWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5
Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBQbGF0Zm9ybVN1cHBvcnQ6
OnNldENvb2tpZXMoZG9jdW1lbnQsIHVybCwgdmFsdWUpOworICAgIGlmIChtX3dlYkNvb2tpZUph
cikKKyAgICAgICAgbV93ZWJDb29raWVKYXItPnNldENvb2tpZSh1cmwsIGZpcnN0UGFydHlGb3JD
b29raWVzLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVy
biBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXMoZG9jdW1lbnQsIHVybCk7CisgICAgaWYgKCFtX3dl
YkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX3dlYkNv
b2tpZUphci0+Y29va2llcyh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotU3RyaW5n
IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2ll
cykKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAgICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCitib29sIENvb2tpZUph
cjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5
Rm9yQ29va2llcykKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxl
ZChkb2N1bWVudCk7CisgICAgaWYgKCFtX3dlYkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBtX3dlYkNvb2tpZUphci0+Y29va2llc0VuYWJsZWQodXJsLCBmaXJz
dFBhcnR5Rm9yQ29va2llcyk7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMp
Citib29sIENvb2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsK
LSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIHJh
d0Nvb2tpZXMpOworICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKKyAgICBXZWJLaXQ6OldlYlZlY3Rv
cjxXZWJLaXQ6OldlYkNvb2tpZT4gd2ViQ29va2llczsKKworICAgIGlmIChtX3dlYkNvb2tpZUph
cikKKyAgICAgICAgbV93ZWJDb29raWVKYXItPnJhd0Nvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9y
Q29va2llcywgd2ViQ29va2llcyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2Vi
Q29va2llcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBXZWJLaXQ6OldlYkNvb2tpZSYg
d2ViQ29va2llID0gd2ViQ29va2llc1tpXTsKKyAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29r
aWUubmFtZSwgd2ViQ29va2llLnZhbHVlLCB3ZWJDb29raWUuZG9tYWluLCB3ZWJDb29raWUucGF0
aCwgd2ViQ29va2llLmV4cGlyZXMsIHdlYkNvb2tpZS5odHRwT25seSwgd2ViQ29va2llLnNlY3Vy
ZSwgd2ViQ29va2llLnNlc3Npb24pOworICAgICAgICByYXdDb29raWVzLmFwcGVuZChjb29raWUp
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2ll
TmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6ZGVs
ZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOworICAgIGlmIChtX3dlYkNvb2tp
ZUphcikKKyAgICAgICAgbV93ZWJDb29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5h
bWUpOwogfQogCiB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYg
aG9zdG5hbWVzKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTkz
MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTItMTAtMTkgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIGNvb2tpZS1yZWxhdGVkIGZ1bmN0
aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3Vj
aCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlw
dGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudElt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmNvb2tpZUph
cik6CisgICAgICAgICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oOgorICAgICAgICAoRnJh
bWVMb2FkZXJDbGllbnRJbXBsKToKKyAgICAgICAgKiBzcmMvUGxhdGZvcm1TdXBwb3J0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEyLTA5LTA4ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgZGVmZXJyZWQgaW1hZ2Ug
ZGVjb2RpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xp
ZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJh
bWVMb2FkZXJDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gMTMxODk2KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY0OCw1ICsxNjQ4LDE1IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRj
aFdpbGwKIH0KICNlbmRpZgogCitXZWJDb3JlOjpDb29raWVKYXIgRnJhbWVMb2FkZXJDbGllbnRJ
bXBsOjpjb29raWVKYXIoKQoreworICAgIFdlYkZyYW1lSW1wbCogZnJhbWVJbXBsID0gV2ViRnJh
bWVJbXBsOjpmcm9tRnJhbWUobV93ZWJGcmFtZS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KSk7CisgICAgaWYgKCFmcmFtZUltcGwgfHwgIWZyYW1lSW1wbC0+Y2xpZW50KCkpCisgICAgICAg
IHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIoMCk7CisgICAgV2ViQ29va2llSmFyKiB3ZWJDb29r
aWVKYXIgPSBmcmFtZUltcGwtPmNsaWVudCgpLT5jb29raWVKYXIoZnJhbWVJbXBsKTsKKyAgICBp
ZiAoIXdlYkNvb2tpZUphcikKKyAgICAgICAgd2ViQ29va2llSmFyID0gV2ViS2l0OjpQbGF0Zm9y
bTo6Y3VycmVudCgpLT5jb29raWVKYXIoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFy
KHdlYkNvb2tpZUphcik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgJKHJl
dmlzaW9uIDEzMTg5NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVy
Q2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDggQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTdGFydFVzaW5nUGVlckNvbm5lY3Rpb25IYW5k
bGVyKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlciopIE9WRVJSSURFOwogI2VuZGlm
CiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZUphciBjb29raWVKYXIoKSBPVkVSUklERTsK
KwogcHJpdmF0ZToKICAgICB2b2lkIG1ha2VEb2N1bWVudFZpZXcoKTsKIApJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCShyZXZpc2lvbiAx
MzE4OTYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsODYgKzEyNCw2IEBAIHN0YXRpYyBXZWJXaWRnZXRDbGll
bnQqIHRvV2ViV2lkZ2V0Q2xpZW4KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViVmlld0ltcGwq
Pih3ZWJWaWV3KS0+Y2xpZW50KCk7CiB9CiAKLXN0YXRpYyBXZWJDb29raWVKYXIqIGdldENvb2tp
ZUphcihjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgV2ViRnJhbWVJbXBsKiBmcmFt
ZUltcGwgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAg
aWYgKCFmcmFtZUltcGwgfHwgIWZyYW1lSW1wbC0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybiAw
OwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZnJhbWVJbXBsLT5jbGllbnQoKS0+Y29v
a2llSmFyKGZyYW1lSW1wbCk7Ci0gICAgaWYgKCFjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUph
ciA9IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y29va2llSmFyKCk7Ci0gICAgcmV0dXJu
IGNvb2tpZUphcjsKLX0KLQotLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFBsYXRmb3Jt
U3VwcG9ydDo6c2V0Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLXsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVu
dCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5zZXRDb29raWUodXJs
LCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUpOwotfQotCi1TdHJpbmcg
UGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgV2ViQ29va2llSmFyKiBjb29r
aWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAg
ICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5
Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJpbmcgUGxhdGZvcm1T
dXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tp
ZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2ll
SmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLWJvb2wgUGxhdGZvcm1TdXBwb3J0OjpyYXdDb29raWVzKGNvbnN0IERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29v
a2llcykKLXsKLSAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgV2ViVmVjdG9yPFdlYkNvb2tp
ZT4gd2ViQ29va2llczsKLQotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2ll
SmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXItPnJh
d0Nvb2tpZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgd2ViQ29va2ll
cyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBjb25zdCBXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07
Ci0gICAgICAgIENvb2tpZSBjb29raWUod2ViQ29va2llLm5hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgd2ViQ29va2llLnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5k
b21haW4sCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnBhdGgsCi0gICAgICAgICAg
ICAgICAgICAgICAgd2ViQ29va2llLmV4cGlyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgd2Vi
Q29va2llLmh0dHBPbmx5LAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5zZWN1cmUs
Ci0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlc3Npb24pOwotICAgICAgICByYXdD
b29raWVzLmFwcGVuZChjb29raWUpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBQbGF0Zm9ybVN1cHBvcnQ6OmRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewotICAgIFdlYkNv
b2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29v
a2llSmFyKQotICAgICAgICBjb29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUp
OwotfQotCi1ib29sIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50KQotewotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgV2ViQ29va2ll
SmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVK
YXIpCi0gICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llc0VuYWJsZWQoZG9jdW1lbnQt
PmNvb2tpZVVSTCgpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQogLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgT1MoV0lORE9X
UykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169683</attachid>
            <date>2012-10-19 13:12:20 -0700</date>
            <delta_ts>2012-10-24 12:44:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99340-20121019161049.patch</filename>
            <type>text/plain</type>
            <size>33333</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTkzOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDEyLTEwLTE5ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92
ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1h
dGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFk
ZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpwcm9j
ZXNzQnVmZmVyKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFu
ZHNoYWtlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNs
aWVudEhhbmRzaGFrZVJlcXVlc3QpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzZXRDb29raWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAg
ICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnQ6OmNvb2tpZUphcik6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjb29raWVFbmFibGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9Db29raWVKYXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29va2llSmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Q29va2llSmFyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaDoKKyAgICAgICAgKFBsYXRmb3JtU3Vw
cG9ydCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2ll
SmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJh
d0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6
OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29v
a2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKwogMjAxMi0xMC0x
OSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkZWQgV1RGOjpT
dGFja1N0YXRzIG1lY2hhbmlzbS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDEzMTg5NikK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5l
bDo6cHJvY2Vzc0J1ZmZlcigpCiAgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyKQogICAgICAg
ICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhh
bmRzaGFrZVJlc3BvbnNlKG1fZG9jdW1lbnQsIG1faWRlbnRpZmllciwgbV9oYW5kc2hha2UtPnNl
cnZlckhhbmRzaGFrZVJlc3BvbnNlKCkpOwogICAgICAgICAgICAgaWYgKCFtX2hhbmRzaGFrZS0+
c2VydmVyU2V0Q29va2llKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvb2tp
ZXNFbmFibGVkKG1fZG9jdW1lbnQpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQt
PmNvb2tpZXNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YzsgLy8gRXhjZXB0aW9uIChmb3Igc2FuZGJveGVkIGRvY3VtZW50cykgaWdub3JlZC4KICAgICAg
ICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+c2V0Q29va2llKG1faGFuZHNoYWtlLT5zZXJ2ZXJT
ZXRDb29raWUoKSwgZWMpOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3Bw
CShyZXZpc2lvbiAxMzE4OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMv
V2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOSBAQAog
I2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5o
IgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjAwLDcg
KzIwMywxMiBAQCBDU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoCiAgICAg
S1VSTCB1cmwgPSBodHRwVVJMRm9yQXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYg
KG1fY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9jb250ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tp
ZSA9IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAg
ICBTdHJpbmcgY29va2llOworICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsKKyAgICAgICAgaWYgKGZyYW1lKSB7CisgICAgICAgICAgICBDb29raWVKYXIgY29va2llSmFy
ID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCk7CisgICAgICAgICAgICBj
b29raWUgPSBjb29raWVKYXIuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgICAgIH0KICAgICAgICAgaWYgKCFj
b29raWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgZmllbGRzLmFwcGVuZCgiQ29va2llOiAiICsg
Y29va2llKTsKICAgICAgICAgLy8gU2V0ICJDb29raWUyOiA8Y29va2llPiIgaWYgY29va2llcyAy
IGV4aXN0cyBmb3IgdXJsPwpAQCAtMjQ5LDcgKzI1NywxMiBAQCBQYXNzUmVmUHRyPFdlYlNvY2tl
dEhhbmRzaGFrZVJlcXVlc3Q+IFdlCiAgICAgS1VSTCB1cmwgPSBodHRwVVJMRm9yQXV0aGVudGlj
YXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYgKG1fY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAg
ICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9jb250
ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGRvY3VtZW50LCB1cmwpOworICAgICAgICBTdHJpbmcgY29va2llOworICAgICAgICBGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAgICAgaWYgKGZyYW1lKSB7CisgICAg
ICAgICAgICBDb29raWVKYXIgY29va2llSmFyID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
Y29va2llSmFyKCk7CisgICAgICAgICAgICBjb29raWUgPSBjb29raWVKYXIuY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7
CisgICAgICAgIH0KICAgICAgICAgaWYgKCFjb29raWUuaXNFbXB0eSgpKQogICAgICAgICAgICAg
cmVxdWVzdC0+YWRkSGVhZGVyRmllbGQoIkNvb2tpZSIsIGNvb2tpZSk7CiAgICAgICAgIC8vIFNl
dCAiQ29va2llMjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBleGlzdHMgZm9yIHVybD8KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTMxODk2KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgxNSw3ICszODE1LDkgQEAg
U3RyaW5nIERvY3VtZW50Ojpjb29raWUoRXhjZXB0aW9uQ29kZSYgZQogICAgIGlmIChjb29raWVV
UkwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1cm4gY29v
a2llcyh0aGlzLCBjb29raWVVUkwpOworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tp
ZUphcigpLmNvb2tpZXMoY29va2llVVJMLCB0aGlzLT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsK
IH0KIAogdm9pZCBEb2N1bWVudDo6c2V0Q29va2llKGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQpAQCAtMzgzNiw3ICszODM4LDIzIEBAIHZvaWQgRG9jdW1lbnQ6OnNldENv
b2tpZShjb25zdCBTdHJpbmcmIHYKICAgICBpZiAoY29va2llVVJMLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgc2V0Q29va2llcyh0aGlzLCBjb29raWVVUkwsIHZhbHVlKTsKKyAg
ICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKyAgICBmcmFtZSgpLT5sb2FkZXIoKS0+
Y2xpZW50KCktPmNvb2tpZUphcigpLnNldENvb2tpZXMoY29va2llVVJMLCB0aGlzLT5maXJzdFBh
cnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgRG9jdW1lbnQ6OmNvb2tpZXNFbmFi
bGVkKCkKK3sKKyAgICBpZiAoIXBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCFwYWdlKCktPnNldHRpbmdzKCktPmNvb2tpZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVz
RW5hYmxlZCh0aGlzLT5jb29raWVVUkwoKSwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7
CiB9CiAKIFN0cmluZyBEb2N1bWVudDo6cmVmZXJyZXIoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgJKHJldmlzaW9uIDEzMTg5NikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MTcsNiArODE3LDcgQEAgcHVibGljOgogCiAgICAgU3Ry
aW5nIGNvb2tpZShFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgdm9pZCBzZXRDb29raWUoY29u
c3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgY29va2llc0VuYWJsZWQoKTsK
IAogICAgIFN0cmluZyByZWZlcnJlcigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkocmV2aXNpb24gMTMxODk2KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDYgKzQ5LDggQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
R2VvbG9jYXRpb25FcnJvci5oIgpAQCAtNTExLDkgKzUxMywxMCBAQCB2b2lkIEluc3BlY3RvclBh
Z2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvCiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1haW5GcmFt
ZSgpKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsK
ICAgICAgICAgVmVjdG9yPEtVUkw+IGFsbFVSTHMgPSBhbGxSZXNvdXJjZXNVUkxzRm9yRnJhbWUo
ZnJhbWUpOworICAgICAgICBDb29raWVKYXIgY29va2llSmFyID0gZnJhbWUtPmxvYWRlcigpLT5j
bGllbnQoKS0+Y29va2llSmFyKCk7CiAgICAgICAgIGZvciAoVmVjdG9yPEtVUkw+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IGFsbFVSTHMuYmVnaW4oKTsgaXQgIT0gYWxsVVJMcy5lbmQoKTsgKytpdCkg
ewogICAgICAgICAgICAgVmVjdG9yPENvb2tpZT4gZG9jQ29va2llc0xpc3Q7Ci0gICAgICAgICAg
ICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBnZXRSYXdDb29raWVzKGRvY3VtZW50LCBLVVJMKFBh
cnNlZFVSTFN0cmluZywgKml0KSwgZG9jQ29va2llc0xpc3QpOworICAgICAgICAgICAgcmF3Q29v
a2llc0ltcGxlbWVudGVkID0gY29va2llSmFyLmdldFJhd0Nvb2tpZXMoS1VSTChQYXJzZWRVUkxT
dHJpbmcsICppdCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBkb2NDb29raWVz
TGlzdCk7CiAgICAgICAgICAgICBpZiAoIXJhd0Nvb2tpZXNJbXBsZW1lbnRlZCkgewogICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGR1cGxpY2F0aW9uIGNoZWNraW5nIGZvciB0aGUg
U3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNvb2tpZXMuCiAgICAgICAgICAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CkBAIC01NDksOCArNTUyLDkgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OmRlbGV0ZUNvb2tpZShFcgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgVmVj
dG9yPEtVUkw+IGFsbFVSTHMgPSBhbGxSZXNvdXJjZXNVUkxzRm9yRnJhbWUoZnJhbWUpOworICAg
ICAgICBDb29raWVKYXIgY29va2llSmFyID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29v
a2llSmFyKCk7CiAgICAgICAgIGZvciAoVmVjdG9yPEtVUkw+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGFsbFVSTHMuYmVnaW4oKTsgaXQgIT0gYWxsVVJMcy5lbmQoKTsgKytpdCkKLSAgICAgICAgICAg
IFdlYkNvcmU6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsICpp
dCksIGNvb2tpZU5hbWUpOworICAgICAgICAgICAgY29va2llSmFyLmRlbGV0ZUNvb2tpZShLVVJM
KFBhcnNlZFVSTFN0cmluZywgKml0KSwgY29va2llTmFtZSk7CiAgICAgfQogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gMTMxODk2
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5kZWYgRnJhbWVMb2FkZXJDbGllbnRfaAogI2Rl
ZmluZSBGcmFtZUxvYWRlckNsaWVudF9oCiAKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiSWNvblVSTC5oIgogI2luY2x1ZGUg
IkxheW91dE1pbGVzdG9uZXMuaCIKQEAgLTY0LDYgKzY1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogICAgIGNsYXNzIENhY2hlZEZy
YW1lOwogICAgIGNsYXNzIENvbG9yOworICAgIGNsYXNzIENvb2tpZUphcjsKICAgICBjbGFzcyBE
T01XaW5kb3dFeHRlbnNpb247CiAgICAgY2xhc3MgRE9NV3JhcHBlcldvcmxkOwogICAgIGNsYXNz
IERvY3VtZW50TG9hZGVyOwpAQCAtMzQ5LDYgKzM1MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hX
aWxsU3RhcnRVc2luZ1BlZXJDb25uZWN0aW9uSGFuZGxlcihSVENQZWVyQ29ubmVjdGlvbkhhbmRs
ZXIqKSB7IH0KICNlbmRpZgorCisgICAgICAgIHZpcnR1YWwgQ29va2llSmFyIGNvb2tpZUphcigp
IHsgcmV0dXJuIENvb2tpZUphcigpOyB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAkocmV2aXNpb24gMTMxODk2KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3
ICsyMyw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCiAK
LSNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJET01NaW1lVHlwZUFycmF5LmgiCiAj
aW5jbHVkZSAiRE9NUGx1Z2luQXJyYXkuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMTE4
LDcgKzExNyw3IEBAIGJvb2wgTmF2aWdhdG9yOjpjb29raWVFbmFibGVkKCkgY29uc3QKICAgICBp
ZiAobV9mcmFtZS0+cGFnZSgpICYmICFtX2ZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPmNvb2tp
ZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGNvb2tpZXNF
bmFibGVkKG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgIHJldHVybiBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5jb29raWVzRW5hYmxlZCgpOwogfQogCiBib29sIE5hdmlnYXRvcjo6amF2YUVuYWJsZWQo
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgJKHJldmlzaW9uIDEz
MTg5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiwxMCBAQAogI2lmbmRlZiBDb29raWVKYXJfaAogI2RlZmluZSBDb29r
aWVKYXJfaAogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSA8cHVibGljL1dlYkNv
b2tpZUphci5oPgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zMywy
MyArMzcsMzQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgRG9jdW1lbnQ7
Ci0gICAgY2xhc3MgS1VSTDsKK2NsYXNzIEtVUkw7CitzdHJ1Y3QgQ29va2llOwogCi0gICAgc3Ry
dWN0IENvb2tpZTsKK2NsYXNzIENvb2tpZUphciB7CitwdWJsaWM6CisjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCisgICAgQ29va2llSmFyKCkgeyBtX3dlYkNvb2tpZUphciA9IDA7IH07CisgICAgQ29v
a2llSmFyKFdlYktpdDo6V2ViQ29va2llSmFyKiB3ZWJDb29raWVKYXIpIHsgbV93ZWJDb29raWVK
YXIgPSB3ZWJDb29raWVKYXI7IH07CisjZW5kaWYKIAogICAgIC8vIGNvb2tpZXMgb21pdHMgSHR0
cE9ubHkgY29va2llcy4KLSAgICBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmKTsKLSAgICBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3Qg
RG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgY29va2llc0VuYWJsZWQoY29u
c3QgRG9jdW1lbnQqKTsKLSAgICBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBj
b25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKLSAgICB2b2lkIGRlbGV0ZUNvb2tpZShjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgY29v
a2llcyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOworICAgIFN0cmluZyBjb29raWVSZXF1ZXN0
SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOworICAgIHZvaWQgc2V0
Q29va2llcyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIGJv
b2wgY29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKKyAgICBib29sIGdl
dFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwor
ICAgIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKIAogICAg
IHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMp
OwogICAgIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5h
bWUpOwogICAgIHZvaWQgZGVsZXRlQWxsQ29va2llcygpOwogCi19CisjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCitwcml2YXRlOgorICAgIFdlYktpdDo6V2ViQ29va2llSmFyKiBtX3dlYkNvb2tpZUph
cjsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9y
dC5oCShyZXZpc2lvbiAxMzE4OTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9QbGF0Zm9ybVN1cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTQgKzc4LDYgQEAgc3Ry
dWN0IEZvbnRSZW5kZXJTdHlsZTsKIAogY2xhc3MgUGxhdGZvcm1TdXBwb3J0IHsKIHB1YmxpYzoK
LSAgICAvLyBDb29raWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZXMoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgc3RhdGljIFN0
cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyBT
dHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJik7Ci0gICAgc3RhdGljIGJvb2wgcmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUNvb2tp
ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUp
OwotICAgIHN0YXRpYyBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0KICAg
ICAvLyBGb250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogI2lmIE9TKFdJTkRPV1MpCiAgICAgc3RhdGljIGJvb2wgZW5zdXJl
Rm9udExvYWRlZChIRk9OVCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL0Nvb2tpZUphckNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAkocmV2aXNpb24gMTMxODk2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2lu
Y2x1ZGUgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU29m
dExpbmtpbmcuaCIKQEAgLTk1LDcgKzk0LDcgQEAgc3RhdGljIFJldGFpblB0cjxDRkFycmF5UmVm
PiBmaWx0ZXJDb29raQogICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9CiAKLXZvaWQgc2V0
Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugc3RvcmVz
IGFuIGVtcHR5IGNvb2tpZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KICAg
ICBpZiAodmFsdWUuaXNFbXB0eSgpKQpAQCAtMTA2LDcgKzEwNSw3IEBAIHZvaWQgc2V0Q29va2ll
cyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmV0YWlu
UHRyPENGVVJMUmVmPiB1cmxDRihBZG9wdENGLCB1cmwuY3JlYXRlQ0ZVUkwoKSk7Ci0gICAgUmV0
YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9yQ29va2llc0NGKEFkb3B0Q0YsIGRvY3VtZW50
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLmNyZWF0ZUNGVVJMKCkpOworICAgIFJldGFpblB0cjxD
RlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9wdENGLCBmaXJzdFBhcnR5Rm9yQ29v
a2llcy5jcmVhdGVDRlVSTCgpKTsKIAogICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0PgogICAgIC8vIGNvb2tpZXNXaXRo
UmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBjb29raWVzIHdpdGhvdXQgYSB2YWx1
ZQpAQCAtMTIzLDcgKzEyMiw3IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnMKICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhjb29raWVTdG9yYWdlLmdl
dCgpLCBmaWx0ZXJDb29raWVzKGNvb2tpZXNDRi5nZXQoKSkuZ2V0KCksIHVybENGLmdldCgpLCBm
aXJzdFBhcnR5Rm9yQ29va2llc0NGLmdldCgpKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVT
dG9yYWdlKQpAQCAtMTM3LDcgKzEzNiw3IEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50
KiAvKmRvY3VtZW4KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwm
IHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewog
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3Vy
cmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0x
NTEsNyArMTUwLDcgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbgog
ICAgIHJldHVybiAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVhZGVyQ0YuZ2V0
KCksIHNfY29va2llQ0YpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50
KiAvKmRvY3VtZW50Ki8pCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VS
TCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAg
IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kgcG9saWN5ID0gQ0ZIVFRQQ29va2llU3Rv
cmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAgIGlmIChSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhU
VFBDb29raWVTdG9yYWdlKCkpCkBAIC0xNTksNyArMTU4LDcgQEAgYm9vbCBjb29raWVzRW5hYmxl
ZChjb25zdCBEb2N1bWVudCogLypkbwogICAgIHJldHVybiBwb2xpY3kgPT0gQ0ZIVFRQQ29va2ll
U3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluIHx8IHBvbGljeSA9
PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5QWx3YXlzOwogfQogCi1ib29sIGdldFJh
d0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+
JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+
JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29r
aWVTdG9yYWdlKCk7CkBAIC0xOTMsNyArMTkyLDcgQEAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0
IERvY3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNvb2tp
ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQor
dm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVT
dG9yYWdlKQpAQCAtMjE0LDcgKzIxMyw3IEBAIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFz
aFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTIzMiw3ICsyMzEsNyBAQCB2
b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyCiAgICAgfQogfQogCi12b2lk
IGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBD
b29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdl
ID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2Up
CkBAIC0yNTEsNyArMjUwLDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3Qg
U3RyaQogICAgIH0KIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFy
OjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAg
aWYgKCFjb29raWVTdG9yYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDEzMTg5NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21p
dW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw1MiArMzIsNzUg
QEAKICNpbmNsdWRlICJDb29raWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisKKyNpbmNsdWRl
IDxwdWJsaWMvV2ViQ29va2llLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYkNvb2tpZUphci5oPgor
I2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMLmg+
CisjaW5jbHVkZSA8cHVibGljL1dlYlZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7Ci0gICAgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29raWVzKGRvY3VtZW50LCB1cmwsIHZh
bHVlKTsKKyAgICBpZiAobV93ZWJDb29raWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5z
ZXRDb29raWUodXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcywgdmFsdWUpOwogfQogCi1TdHJpbmcg
Y29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmlu
ZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBh
cnR5Rm9yQ29va2llcykKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzKGRv
Y3VtZW50LCB1cmwpOworICAgIGlmICghbV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICByZXR1cm4gbV93ZWJDb29raWVKYXItPmNvb2tpZXModXJsLCBmaXJzdFBh
cnR5Rm9yQ29va2llcyk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29r
aWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3Vw
cG9ydDo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7CisgICAg
aWYgKCFtX3dlYkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVy
biBtX3dlYkNvb2tpZUphci0+Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBmaXJz
dFBhcnR5Rm9yQ29va2llcyk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50KQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBs
YXRmb3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoZG9jdW1lbnQpOworICAgIGlmICghbV93ZWJD
b29raWVKYXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV93ZWJDb29raWVK
YXItPmNvb2tpZXNFbmFibGVkKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1ib29s
IGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmws
IFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgVmVj
dG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6
cmF3Q29va2llcyhkb2N1bWVudCwgdXJsLCByYXdDb29raWVzKTsKKyAgICByYXdDb29raWVzLmNs
ZWFyKCk7CisgICAgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJDb29raWU+IHdlYkNvb2tp
ZXM7CisKKyAgICBpZiAobV93ZWJDb29raWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5y
YXdDb29raWVzKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIHdlYkNvb2tpZXMpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgY29uc3QgV2ViS2l0OjpXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07Cisg
ICAgICAgIENvb2tpZSBjb29raWUod2ViQ29va2llLm5hbWUsIHdlYkNvb2tpZS52YWx1ZSwgd2Vi
Q29va2llLmRvbWFpbiwgd2ViQ29va2llLnBhdGgsIHdlYkNvb2tpZS5leHBpcmVzLCB3ZWJDb29r
aWUuaHR0cE9ubHksIHdlYkNvb2tpZS5zZWN1cmUsIHdlYkNvb2tpZS5zZXNzaW9uKTsKKyAgICAg
ICAgcmF3Q29va2llcy5hcHBlbmQoY29va2llKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRl
Q29va2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewotICAg
IHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgdXJsLCBjb29r
aWVOYW1lKTsKKyAgICBpZiAobV93ZWJDb29raWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFy
LT5kZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKTsKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7
CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAg
ICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29r
aWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhN
RTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAkocmV2aXNpb24gMTMx
ODk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1
cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSAiQ29va2ll
SmFyLmgiCiAKICNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTI2LDM3ICsyNSwzNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBjb29raWVKYXI7CitzdGF0aWMg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gc19jb29raWVKYXI7CiAKLXZvaWQgc2V0Q29va2llcyhE
b2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtV
UkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAg
ICBjb29raWVKYXIuc2V0KHVybC5zdHJpbmcoKSwgdmFsdWUpOworICAgIHNfY29va2llSmFyLnNl
dCh1cmwuc3RyaW5nKCksIHZhbHVlKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1l
bnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29v
a2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMq
LykKIHsKLSAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOworICAgIHJldHVy
biBzX2Nvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtV
UkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQog
ewogICAgIC8vIEZJWE1FOiBpbmNsdWRlIEh0dHBPbmx5IGNvb2tpZS4KLSAgICByZXR1cm4gY29v
a2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOworICAgIHJldHVybiBzX2Nvb2tpZUphci5nZXQodXJs
LnN0cmluZygpKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypk
b2N1bWVudCovKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8q
dXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3Qg
S1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJh
d0Nvb2tpZXMoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9y
Q29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICAvLyBGSVhNRTog
Tm90IHlldCBpbXBsZW1lbnRlZAogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1cm4g
ZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVD
b29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQg
Q29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgU3RyaW5n
JiAvKmNvb2tpZU5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAog
fQpAQCAtNjgsMTcgKzY3LDE3IEBAIHZvaWQgc2V0Q29va2llU3RvcmFnZVByaXZhdGVCcm93c2lu
Z0VuYWIKIH0KICNlbmRpZgogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8
U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90
IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0
bmFtZShjb25zdCBTdHJpbmcmIC8qaG9zdG5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHll
dCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVK
YXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVu
dGVkCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVK
YXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
d2luL0Nvb2tpZUphcldpbi5jcHAJKHJldmlzaW9uIDEzMTg5NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIktVUkwuaCIK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5j
bHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPFdpbmluZXQuaD4KQEAgLTM2LDE1ICszNSwxNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogLypk
b2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisKK3ZvaWQg
Q29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJz
dFBhcnR5Rm9yQ29va2llcyovLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIC8vIEZJWE1F
OiBEZWFsIHdpdGggZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkuCisgICAgLy8gRklY
TUU6IERlYWwgd2l0aCBmaXJzdFBhcnR5Rm9yQ29va2llcy4KICAgICBTdHJpbmcgc3RyID0gdXJs
LnN0cmluZygpOwogICAgIFN0cmluZyB2YWwgPSB2YWx1ZTsKICAgICBJbnRlcm5ldFNldENvb2tp
ZShzdHIuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgdmFsLmNoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCkpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVu
dCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29r
aWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyov
KQogewogICAgIFN0cmluZyBzdHIgPSB1cmwuc3RyaW5nKCk7CiAKQEAgLTYzLDQwICs2Myw0MCBA
QCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVuCiAgICAgcmV0dXJuIFN0
cmluZzo6YWRvcHQoYnVmZmVyKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5n
IENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKICAgICAvLyBGSVhNRTogaW5j
bHVkZSBIdHRwT25seSBjb29raWUKLSAgICByZXR1cm4gY29va2llcyhkb2N1bWVudCwgdXJsKTsK
KyAgICByZXR1cm4gY29va2llcyh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29r
aWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8q
Zmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBn
ZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+
JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYg
Lyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAog
ICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVl
IHdoZW4gaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29r
aWUoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsK
ICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6
OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0bmFtZXMqLykK
IHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIC8qaG9zdG5hbWUqLykKIHsK
ICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENv
b2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIC8vIEZJ
WE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTMxOTM4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMC0xOSAgTWFyayBQaWxncmlt
ICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgY29v
a2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24g
b2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVy
LWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogc3JjL0Zy
YW1lTG9hZGVyQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xp
ZW50SW1wbDo6Y29va2llSmFyKToKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBs
Lmg6CisgICAgICAgIChGcmFtZUxvYWRlckNsaWVudEltcGwpOgorICAgICAgICAqIHNyYy9QbGF0
Zm9ybVN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMTAtMTkgIFBhdmVs
IEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogbWVyZ2UgImRvY2tlZCIgc3RhdGUgaW50byB0aGUgImRvY2sgc2lkZSIgZW51bS4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJ
bXBsLmNwcAkocmV2aXNpb24gMTMxODk2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
RnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0OCw1ICsxNjQ4
LDE1IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaFdpbGwKIH0KICNlbmRp
ZgogCitXZWJDb3JlOjpDb29raWVKYXIgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjb29raWVKYXIo
KQoreworICAgIFdlYkZyYW1lSW1wbCogZnJhbWVJbXBsID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJh
bWUobV93ZWJGcmFtZS0+ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CisgICAgaWYgKCFm
cmFtZUltcGwgfHwgIWZyYW1lSW1wbC0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpDb29raWVKYXIoMCk7CisgICAgV2ViQ29va2llSmFyKiB3ZWJDb29raWVKYXIgPSBmcmFtZUlt
cGwtPmNsaWVudCgpLT5jb29raWVKYXIoZnJhbWVJbXBsKTsKKyAgICBpZiAoIXdlYkNvb2tpZUph
cikKKyAgICAgICAgd2ViQ29va2llSmFyID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5j
b29raWVKYXIoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKHdlYkNvb2tpZUphcik7
Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgJKHJldmlzaW9uIDEzMTg5NikK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaFdpbGxTdGFydFVzaW5nUGVlckNvbm5lY3Rpb25IYW5kbGVyKFdlYkNvcmU6OlJU
Q1BlZXJDb25uZWN0aW9uSGFuZGxlciopIE9WRVJSSURFOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkNvb2tpZUphciBjb29raWVKYXIoKSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAg
ICB2b2lkIG1ha2VEb2N1bWVudFZpZXcoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMzE4OTYpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjQsODYgKzEyNCw2IEBAIHN0YXRpYyBXZWJXaWRnZXRDbGllbnQqIHRvV2ViV2lkZ2V0
Q2xpZW4KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViVmlld0ltcGwqPih3ZWJWaWV3KS0+Y2xp
ZW50KCk7CiB9CiAKLXN0YXRpYyBXZWJDb29raWVKYXIqIGdldENvb2tpZUphcihjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQpCi17Ci0gICAgV2ViRnJhbWVJbXBsKiBmcmFtZUltcGwgPSBXZWJGcmFt
ZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgaWYgKCFmcmFtZUltcGwg
fHwgIWZyYW1lSW1wbC0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIFdlYkNvb2tp
ZUphciogY29va2llSmFyID0gZnJhbWVJbXBsLT5jbGllbnQoKS0+Y29va2llSmFyKGZyYW1lSW1w
bCk7Ci0gICAgaWYgKCFjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphciA9IFdlYktpdDo6UGxh
dGZvcm06OmN1cnJlbnQoKS0+Y29va2llSmFyKCk7Ci0gICAgcmV0dXJuIGNvb2tpZUphcjsKLX0K
LQotLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29v
a2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBXZWJD
b29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNv
b2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5zZXRDb29raWUodXJsLCBkb2N1bWVudC0+Zmly
c3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUpOwotfQotCi1TdHJpbmcgUGxhdGZvcm1TdXBwb3J0
Ojpjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQotewot
ICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29r
aWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJlc3VsdCA9IGNv
b2tpZUphci0+Y29va2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJpbmcgUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwm
IHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFy
ID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBy
ZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwgZG9j
dW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LWJvb2wgUGxhdGZvcm1TdXBwb3J0OjpyYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKLXsKLSAgICBy
YXdDb29raWVzLmNsZWFyKCk7Ci0gICAgV2ViVmVjdG9yPFdlYkNvb2tpZT4gd2ViQ29va2llczsK
LQotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsK
LSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXItPnJhd0Nvb2tpZXModXJsLCBk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgd2ViQ29va2llcyk7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsraSkgewotICAgICAgICBj
b25zdCBXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07Ci0gICAgICAgIENvb2tp
ZSBjb29raWUod2ViQ29va2llLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2ll
LnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5kb21haW4sCi0gICAgICAg
ICAgICAgICAgICAgICAgd2ViQ29va2llLnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgd2Vi
Q29va2llLmV4cGlyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmh0dHBPbmx5
LAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5zZWN1cmUsCi0gICAgICAgICAgICAg
ICAgICAgICAgd2ViQ29va2llLnNlc3Npb24pOwotICAgICAgICByYXdDb29raWVzLmFwcGVuZChj
b29raWUpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybVN1cHBv
cnQ6OmRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewotICAgIFdlYkNvb2tpZUphciogY29va2ll
SmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAg
ICBjb29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwotfQotCi1ib29sIFBs
YXRmb3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQot
ewotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIg
PSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJl
c3VsdCA9IGNvb2tpZUphci0+Y29va2llc0VuYWJsZWQoZG9jdW1lbnQtPmNvb2tpZVVSTCgpLCBk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQogLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgT1MoV0lORE9XUykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170450</attachid>
            <date>2012-10-24 12:44:24 -0700</date>
            <delta_ts>2012-10-24 13:07:46 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-99340-20121024154258.patch</filename>
            <type>text/plain</type>
            <size>39664</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjM4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDEyLTEwLTI0ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92
ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1h
dGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFk
ZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpwcm9j
ZXNzQnVmZmVyKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFu
ZHNoYWtlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNs
aWVudEhhbmRzaGFrZVJlcXVlc3QpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzZXRDb29raWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAg
ICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnQ6OmNvb2tpZUphcik6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjb29raWVFbmFibGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9Db29raWVKYXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29va2llSmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Q29va2llSmFyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaDoKKyAgICAgICAgKFBsYXRmb3JtU3Vw
cG9ydCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2V0VXBDb29raWVzRm9yUXVpY2tUaW1l
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL0Nvb2tpZUphckNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0
Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRl
QWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVK
YXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpD
b29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpk
ZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tp
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29r
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxD
b29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2ll
SmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFs
bENvb2tpZXMpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6CisKIDIwMTItMTAtMjQgIE5pY28gV2ViZXIgIDx0
aGFraXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEhvbm9yIGltYWdlIG9yaWVudGF0aW9uIGlu
IEdyYXBoaWNzQ29udGV4dFNraWEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDEzMjM3OSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5l
bDo6cHJvY2Vzc0J1ZmZlcigpCiAgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyKQogICAgICAg
ICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhh
bmRzaGFrZVJlc3BvbnNlKG1fZG9jdW1lbnQsIG1faWRlbnRpZmllciwgbV9oYW5kc2hha2UtPnNl
cnZlckhhbmRzaGFrZVJlc3BvbnNlKCkpOwogICAgICAgICAgICAgaWYgKCFtX2hhbmRzaGFrZS0+
c2VydmVyU2V0Q29va2llKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvb2tp
ZXNFbmFibGVkKG1fZG9jdW1lbnQpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQt
PmNvb2tpZXNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YzsgLy8gRXhjZXB0aW9uIChmb3Igc2FuZGJveGVkIGRvY3VtZW50cykgaWdub3JlZC4KICAgICAg
ICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+c2V0Q29va2llKG1faGFuZHNoYWtlLT5zZXJ2ZXJT
ZXRDb29raWUoKSwgZWMpOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3Bw
CShyZXZpc2lvbiAxMzIzNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMv
V2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOSBAQAog
I2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5o
IgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjAwLDcg
KzIwMywxMCBAQCBDU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoCiAgICAg
S1VSTCB1cmwgPSBodHRwVVJMRm9yQXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYg
KG1fY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9jb250ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tp
ZSA9IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAg
ICBTdHJpbmcgY29va2llOworICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsKKyAgICAgICAgaWYgKGZyYW1lKQorICAgICAgICAgICAgY29va2llID0gZnJhbWUtPmxvYWRl
cigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
dXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiAgICAgICAgIGlmICghY29v
a2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoIkNvb2tpZTogIiArIGNv
b2tpZSk7CiAgICAgICAgIC8vIFNldCAiQ29va2llMjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBl
eGlzdHMgZm9yIHVybD8KQEAgLTI0OSw3ICsyNTUsMTIgQEAgUGFzc1JlZlB0cjxXZWJTb2NrZXRI
YW5kc2hha2VSZXF1ZXN0PiBXZQogICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0
aW9uQW5kQ29va2llcygpOwogICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4
dCk7Ci0gICAgICAgIFN0cmluZyBjb29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShkb2N1bWVudCwgdXJsKTsKKyAgICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAgICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkgeworICAgICAg
ICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNv
b2tpZUphcigpOworICAgICAgICAgICAgY29va2llID0gY29va2llSmFyLmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwor
ICAgICAgICB9CiAgICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJl
cXVlc3QtPmFkZEhlYWRlckZpZWxkKCJDb29raWUiLCBjb29raWUpOwogICAgICAgICAvLyBTZXQg
IkNvb2tpZTI6IDxjb29raWU+IiBpZiBjb29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEzMjM3OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MTYsNyArMzgxNiw5IEBAIFN0
cmluZyBEb2N1bWVudDo6Y29va2llKEV4Y2VwdGlvbkNvZGUmIGUKICAgICBpZiAoY29va2llVVJM
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGNvb2tp
ZXModGhpcywgY29va2llVVJMKTsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVK
YXIoKS5jb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9
CiAKIHZvaWQgRG9jdW1lbnQ6OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTM4MzcsNyArMzgzOSwyMyBAQCB2b2lkIERvY3VtZW50OjpzZXRDb29r
aWUoY29uc3QgU3RyaW5nJiB2CiAgICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHNldENvb2tpZXModGhpcywgY29va2llVVJMLCB2YWx1ZSk7CisgICAg
aWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNs
aWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSwgdmFsdWUpOworfQorCitib29sIERvY3VtZW50Ojpjb29raWVzRW5hYmxl
ZCgpCit7CisgICAgaWYgKCFwYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghcGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llc0Vu
YWJsZWQodGhpcy0+Y29va2llVVJMKCksIHRoaXMtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwog
fQogCiBTdHJpbmcgRG9jdW1lbnQ6OnJlZmVycmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCShyZXZpc2lvbiAxMzIzNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtODE3LDYgKzgxNyw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmlu
ZyBjb29raWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29va2llKGNvbnN0
IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKCk7CiAK
ICAgICBTdHJpbmcgcmVmZXJyZXIoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDEzMjM3OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw2ICs0OSw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkdl
b2xvY2F0aW9uRXJyb3IuaCIKQEAgLTUxMCw5ICs1MTIsMTAgQEAgdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmdldENvb2tpZXMoRXJybwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1l
KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUo
KSkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAg
ICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZy
YW1lKTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPmNvb2tpZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpIHsK
ICAgICAgICAgICAgIFZlY3RvcjxDb29raWU+IGRvY0Nvb2tpZXNMaXN0OwotICAgICAgICAgICAg
cmF3Q29va2llc0ltcGxlbWVudGVkID0gZ2V0UmF3Q29va2llcyhkb2N1bWVudCwgS1VSTChQYXJz
ZWRVUkxTdHJpbmcsICppdCksIGRvY0Nvb2tpZXNMaXN0KTsKKyAgICAgICAgICAgIHJhd0Nvb2tp
ZXNJbXBsZW1lbnRlZCA9IGNvb2tpZUphci5nZXRSYXdDb29raWVzKEtVUkwoUGFyc2VkVVJMU3Ry
aW5nLCAqaXQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jQ29va2llc0xp
c3QpOwogICAgICAgICAgICAgaWYgKCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBmb3IgdGhlIFN0
cmluZyByZXByZXNlbnRhdGlvbiBvZiBjb29raWVzLgogICAgICAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwpAQCAtNTQ4LDggKzU1MSw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpkZWxldGVDb29raWUoRXIKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFZlY3Rv
cjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAg
ICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tp
ZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBh
bGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBX
ZWJDb3JlOjpkZWxldGVDb29raWUoZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQp
LCBjb29raWVOYW1lKTsKKyAgICAgICAgICAgIGNvb2tpZUphci5kZWxldGVDb29raWUoS1VSTChQ
YXJzZWRVUkxTdHJpbmcsICppdCksIGNvb2tpZU5hbWUpOwogICAgIH0KIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDEzMjM3OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50X2gKICNkZWZp
bmUgRnJhbWVMb2FkZXJDbGllbnRfaAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIkljb25VUkwuaCIKICNpbmNsdWRlICJM
YXlvdXRNaWxlc3RvbmVzLmgiCkBAIC02NCw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBDYWNoZWRGcmFt
ZTsKICAgICBjbGFzcyBDb2xvcjsKKyAgICBjbGFzcyBDb29raWVKYXI7CiAgICAgY2xhc3MgRE9N
V2luZG93RXh0ZW5zaW9uOwogICAgIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKICAgICBjbGFzcyBE
b2N1bWVudExvYWRlcjsKQEAgLTM0OSw2ICszNTEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2ls
bFN0YXJ0VXNpbmdQZWVyQ29ubmVjdGlvbkhhbmRsZXIoUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVy
KikgeyB9CiAjZW5kaWYKKworICAgICAgICB2aXJ0dWFsIENvb2tpZUphciBjb29raWVKYXIoKSB7
IHJldHVybiBDb29raWVKYXIoKTsgfQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHJldmlzaW9uIDEzMjM3OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyAr
MjMsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogCi0j
aW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgogI2lu
Y2x1ZGUgIkRPTVBsdWdpbkFycmF5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTExOCw3
ICsxMTcsNyBAQCBib29sIE5hdmlnYXRvcjo6Y29va2llRW5hYmxlZCgpIGNvbnN0CiAgICAgaWYg
KG1fZnJhbWUtPnBhZ2UoKSAmJiAhbV9mcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVF
bmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBjb29raWVzRW5h
YmxlZChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+Y29va2llc0VuYWJsZWQoKTsKIH0KIAogYm9vbCBOYXZpZ2F0b3I6OmphdmFFbmFibGVkKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzIz
NzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsMTAgQEAKICNpZm5kZWYgQ29va2llSmFyX2gKICNkZWZpbmUgQ29va2ll
SmFyX2gKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29r
aWVKYXIuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzMsMjMg
KzM3LDQyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIERvY3VtZW50Owot
ICAgIGNsYXNzIEtVUkw7CitjbGFzcyBLVVJMOworc3RydWN0IENvb2tpZTsKIAotICAgIHN0cnVj
dCBDb29raWU7CitjbGFzcyBDb29raWVKYXIgeworcHVibGljOgorICAgIENvb2tpZUphcigpCisg
ICAgeworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICBtX3dlYkNvb2tpZUphciA9IDA7
CisjZW5kaWYKKyAgICB9OworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIGV4cGxpY2l0IENv
b2tpZUphcihXZWJLaXQ6OldlYkNvb2tpZUphciogd2ViQ29va2llSmFyKQorICAgIHsKKyAgICAg
ICAgbV93ZWJDb29raWVKYXIgPSB3ZWJDb29raWVKYXI7CisgICAgfTsKKyNlbmRpZgogCiAgICAg
Ly8gY29va2llcyBvbWl0cyBIdHRwT25seSBjb29raWVzLgotICAgIFN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIFN0cmluZyBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHNl
dENvb2tpZXMoRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOwotICAgIGJvb2wgZ2V0UmF3Q29va2ll
cyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwotICAgIHZv
aWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYpOworICAgIFN0cmluZyBjb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAg
U3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmLCBjb25zdCBL
VVJMJik7CisgICAgdm9pZCBzZXRDb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJik7CisgICAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiwgY29uc3Qg
S1VSTCYpOworICAgIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYs
IFZlY3RvcjxDb29raWU+Jik7CisgICAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0
PFN0cmluZz4mIGhvc3RuYW1lcyk7CiAgICAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSk7CiAgICAgdm9pZCBkZWxldGVBbGxDb29raWVzKCk7CiAK
LX0KKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK3ByaXZhdGU6CisgICAgV2ViS2l0OjpXZWJDb29r
aWVKYXIqIG1fd2ViQ29va2llSmFyOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1TdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUGxhdGZvcm1TdXBwb3J0LmgJKHJldmlzaW9uIDEzMjM3OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03OCwxNCArNzgsNiBAQCBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwogCiBjbGFzcyBQbGF0Zm9y
bVN1cHBvcnQgewogcHVibGljOgotICAgIC8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgc3RhdGljIHZvaWQg
c2V0Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJik7Ci0gICAgc3RhdGljIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgYm9vbCByYXdDb29raWVz
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci0gICAgc3Rh
dGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgY29va2llTmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgY29va2llc0VuYWJsZWQoY29u
c3QgRG9jdW1lbnQqKTsKLQogICAgIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgT1MoV0lORE9XUykKICAg
ICBzdGF0aWMgYm9vbCBlbnN1cmVGb250TG9hZGVkKEhGT05UKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHJl
dmlzaW9uIDEzMjM3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9N
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAt
MjY4LDcgKzI3MCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ28K
IAogICAgIEtVUkwgbW92aWVVUkwgPSBLVVJMKEtVUkwoKSwgdXJsKTsKICAgICBWZWN0b3I8Q29v
a2llPiBkb2N1bWVudENvb2tpZXM7Ci0gICAgaWYgKCFnZXRSYXdDb29raWVzKGZyYW1lLT5kb2N1
bWVudCgpLCBtb3ZpZVVSTCwgZG9jdW1lbnRDb29raWVzKSkKKyAgICBpZiAoIWZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmdldFJhd0Nvb2tpZXModXJsLCBkb2N1bWVudC0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jdW1lbnRDb29raWVzKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgZm9yIChzaXplX3QgbmR4ID0gMDsgbmR4IDwgZG9jdW1lbnRDb29raWVzLnNpemUo
KTsgbmR4KyspIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5t
bQkocmV2aXNpb24gMTMyMzc5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tp
ZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBzdGF0aWMgUmV0YWluUHRy
PE5TQXJyYXk+IGZpbHRlckNvb2tpZXMoCiAgICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKIH0K
IAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCitTdHJp
bmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJz
dFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
IApAQCAtOTUsNyArOTUsNyBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29v
a2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiAKQEAgLTExNCw3ICsxMTQsNyBAQCBTdHJpbmcgY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIHNl
dENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY29va2llU3RyKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiBjb29raWVT
dHIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0xMzIsNyArMTMy
LDcgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogCiAjaWYgVVNF
KENGVVJMU1RPUkFHRVNFU1NJT05TKQogICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkK
LSAgICAgICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZp
bHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSk7CisgICAgICAgIHdrU2V0SFRUUENvb2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdl
LmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZmlyc3RQYXJ0eUZvckNv
b2tpZXMpOwogICAgIGVsc2UKICNlbmRpZgogICAgICAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ug
c2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6ZmlsdGVyZWRDb29raWVzLmdldCgp
IGZvclVSTDpjb29raWVVUkwgbWFpbkRvY3VtZW50VVJMOmRvY3VtZW50LT5maXJzdFBhcnR5Rm9y
Q29va2llcygpXTsKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopCitib29sIENvb2tpZUphcjo6Y29va2ll
c0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9y
Q29va2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTU4
LDcgKzE1OCw3IEBAIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29u
c3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFy
OjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5
Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICByYXdDb29r
aWVzLmNsZWFyKCk7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAtMTkxLDcg
KzE5MSw3IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnMKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3ZvaWQgQ29va2llSmFyOjpk
ZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0yMjUsNyArMjI1LDcgQEAg
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNl
dDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogICAgIApAQCAtMjM4LDcgKzIzOCw3IEBAIHZvaWQgZ2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoSGFzaFNldDxTdHIKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwog
fQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKQEAg
LTI1NSw3ICsyNTUsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJp
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBkZWxldGVBbGxDb29r
aWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAkocmV2aXNpb24gMTMy
Mzc5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5l
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkNvb2tp
ZS5oIgogI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5j
bHVkZSAiU29mdExpbmtpbmcuaCIKQEAgLTk1LDcgKzk0LDcgQEAgc3RhdGljIFJldGFpblB0cjxD
RkFycmF5UmVmPiBmaWx0ZXJDb29raQogICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9CiAK
LXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7CiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3Jh
Z2Ugc3RvcmVzIGFuIGVtcHR5IGNvb2tpZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2ll
OiA9Ii4KICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQpAQCAtMTA2LDcgKzEwNSw3IEBAIHZvaWQg
c2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxDRihBZG9wdENGLCB1cmwuY3JlYXRlQ0ZVUkwoKSk7
Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9yQ29va2llc0NGKEFkb3B0Q0Ys
IGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLmNyZWF0ZUNGVVJMKCkpOworICAgIFJl
dGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9wdENGLCBmaXJzdFBh
cnR5Rm9yQ29va2llcy5jcmVhdGVDRlVSTCgpKTsKIAogICAgIC8vIDxodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0PgogICAgIC8vIGNv
b2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBjb29raWVzIHdpdGhv
dXQgYSB2YWx1ZQpAQCAtMTIzLDcgKzEyMiw3IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnMKICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhjb29raWVT
dG9yYWdlLmdldCgpLCBmaWx0ZXJDb29raWVzKGNvb2tpZXNDRi5nZXQoKSkuZ2V0KCksIHVybENG
LmdldCgpLCBmaXJzdFBhcnR5Rm9yQ29va2llc0NGLmdldCgpKTsKIH0KIAotU3RyaW5nIGNvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5n
IENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQ
YXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYg
KCFjb29raWVTdG9yYWdlKQpAQCAtMTM3LDcgKzEzNiw3IEBAIFN0cmluZyBjb29raWVzKGNvbnN0
IERvY3VtZW50KiAvKmRvY3VtZW4KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFy
eUdldFZhbHVlKGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotU3RyaW5nIGNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNv
bnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2ll
cyovKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9y
YWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3Jh
Z2UpCkBAIC0xNTEsNyArMTUwLDcgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbgogICAgIHJldHVybiAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVh
ZGVyQ0YuZ2V0KCksIHNfY29va2llQ0YpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0
IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQo
Y29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyov
KQogewogICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kgcG9saWN5ID0gQ0ZIVFRQ
Q29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAg
IGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1
cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCkBAIC0xNTksNyArMTU4LDcgQEAgYm9vbCBjb29r
aWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkbwogICAgIHJldHVybiBwb2xpY3kgPT0gQ0ZI
VFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluIHx8
IHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5QWx3YXlzOwogfQogCi1i
b29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3Rv
cjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3Rv
cjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICBS
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRD
RkhUVFBDb29raWVTdG9yYWdlKCk7CkBAIC0xOTMsNyArMTkyLDcgQEAgYm9vbCBnZXRSYXdDb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRl
bGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYg
KCFjb29raWVTdG9yYWdlKQpAQCAtMjE0LDcgKzIxMyw3IEBAIHZvaWQgZGVsZXRlQ29va2llKGNv
bnN0IERvY3VtZW50KiwgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgUmV0
YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZI
VFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTIzMiw3ICsy
MzEsNyBAQCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyCiAgICAgfQog
fQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29r
aWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tp
ZVN0b3JhZ2UpCkBAIC0yNTEsNyArMjUwLDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29uc3QgU3RyaQogICAgIH0KIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQg
Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdl
KCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDEzMjM3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw1
MiArMzIsNzQgQEAKICNpbmNsdWRlICJDb29raWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisj
aW5jbHVkZSA8cHVibGljL1dlYkNvb2tpZS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVK
YXIuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CisjaW5jbHVkZSA8cHVibGljL1dl
YlVSTC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQogewotICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1bWVudCwg
dXJsLCB2YWx1ZSk7CisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNvb2tp
ZUphci0+c2V0Q29va2llKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIHZhbHVlKTsKIH0KIAot
U3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwp
CitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29v
a2llcyhkb2N1bWVudCwgdXJsKTsKKyAgICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVzKHVybCwg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJp
bmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0
Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwp
OworICAgIGlmICghbV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICByZXR1cm4gbV93ZWJDb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVy
bCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJl
dHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXNFbmFibGVkKGRvY3VtZW50KTsKKyAgICBpZiAo
IW1fd2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fd2Vi
Q29va2llSmFyLT5jb29raWVzRW5hYmxlZCh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0K
IAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRS
YXdDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tp
ZXMsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1
cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2llcyk7CisgICAgcmF3Q29v
a2llcy5jbGVhcigpOworICAgIFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViQ29va2llPiB3
ZWJDb29raWVzOworCisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNvb2tp
ZUphci0+cmF3Q29va2llcyh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzLCB3ZWJDb29raWVzKTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViQ29va2llJiB3ZWJDb29raWUgPSB3ZWJDb29raWVz
W2ldOworICAgICAgICBDb29raWUgY29va2llKHdlYkNvb2tpZS5uYW1lLCB3ZWJDb29raWUudmFs
dWUsIHdlYkNvb2tpZS5kb21haW4sIHdlYkNvb2tpZS5wYXRoLCB3ZWJDb29raWUuZXhwaXJlcywg
d2ViQ29va2llLmh0dHBPbmx5LCB3ZWJDb29raWUuc2VjdXJlLCB3ZWJDb29raWUuc2Vzc2lvbik7
CisgICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNvb2tpZSk7CisgICAgfQorICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkK
IHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29raWUoZG9jdW1lbnQsIHVy
bCwgY29va2llTmFtZSk7CisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNv
b2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7CiB9CiAKLXZvaWQgZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tp
ZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1l
cyovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tp
ZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSov
KQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRl
QWxsQ29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAg
Ly8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAJKHJldmlz
aW9uIDEzMjM3OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29r
aWVKYXJDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUg
IkNvb2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0yNiwzNyArMjUsMzcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY29va2llSmFyOwor
c3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHNfY29va2llSmFyOwogCi12b2lkIHNldENv
b2tpZXMoRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIGNvbnN0IFN0cmluZyYgdmFsdWUp
CiB7Ci0gICAgY29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsKKyAgICBzX2Nvb2tp
ZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0
IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVK
YXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JD
b29raWVzKi8pCiB7Ci0gICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKKyAg
ICByZXR1cm4gc19jb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLVN0cmluZyBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBj
b25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLykKIHsKICAgICAvLyBGSVhNRTogaW5jbHVkZSBIdHRwT25seSBjb29raWUuCi0gICAgcmV0
dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKKyAgICByZXR1cm4gc19jb29raWVKYXIu
Z2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1l
bnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBL
VVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFy
OjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQ
YXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAg
cmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQg
ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYp
Cit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0
IFN0cmluZyYgLypjb29raWVOYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQKIH0KQEAgLTY4LDE3ICs2NywxNyBAQCB2b2lkIHNldENvb2tpZVN0b3JhZ2VQcml2YXRl
QnJvd3NpbmdFbmFiCiB9CiAjZW5kaWYKIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhI
YXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7CiAgICAgLy8gRklY
TUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQg
Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4v
Q29va2llSmFyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCShyZXZpc2lvbiAxMzIzNzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJL
VVJMLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5o
IgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxXaW5pbmV0Lmg+CkBAIC0zNiwxNSAr
MzUsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHNldENvb2tpZXMoRG9jdW1l
bnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQor
Cit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwm
IC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICAv
LyBGSVhNRTogRGVhbCB3aXRoIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLgorICAg
IC8vIEZJWE1FOiBEZWFsIHdpdGggZmlyc3RQYXJ0eUZvckNvb2tpZXMuCiAgICAgU3RyaW5nIHN0
ciA9IHVybC5zdHJpbmcoKTsKICAgICBTdHJpbmcgdmFsID0gdmFsdWU7CiAgICAgSW50ZXJuZXRT
ZXRDb29raWUoc3RyLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIHZhbC5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLykKIHsKICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwogCkBAIC02Myw0MCAr
NjMsNDAgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbgogICAgIHJl
dHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkK
K1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7CiAgICAgLy8gRklY
TUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llCi0gICAgcmV0dXJuIGNvb2tpZXMoZG9jdW1lbnQs
IHVybCk7CisgICAgcmV0dXJuIGNvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9
CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jv
b2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8
Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0
IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVj
dG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1
cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUphcjo6ZGVs
ZXRlQ29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29raWVOYW1l
Ki8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29v
a2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5h
bWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29v
a2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1l
Ki8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxl
dGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxMzIzNzkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkyLDcgKzEzOTIsNyBA
QCBOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlRm9yVVJMKE5QTlVSCiAgICAgICAgIGlmICh1
LmlzVmFsaWQoKSkgewogICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50
RnJhbWUoKSwgbV9lbGVtZW50KTsKICAgICAgICAgICAgIGlmIChmcmFtZSkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IENTdHJpbmcgY29va2llU3RyID0gY29va2llcyhmcmFtZS0+ZG9jdW1lbnQo
KSwgdSkudXRmOCgpOworICAgICAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgY29va2llU3RyID0g
ZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llcyh1cmwsIGRvY3Vt
ZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKS51dGY4KCk7CiAgICAgICAgICAgICAgICAgaWYg
KCFjb29raWVTdHIuaXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHNp
emUgPSBjb29raWVTdHIubGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0
YXRpY19jYXN0PGNoYXIqPihOUE5fTWVtQWxsb2Moc2l6ZSsxKSk7CkBAIC0xNDU0LDcgKzE0NTQs
NyBAQCBOUEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKE5QTlVSCiAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcgY29va2llU3RyID0gU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSwgbGVuKTsK
ICAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxl
bWVudCk7CiAgICAgICAgICAgICBpZiAoZnJhbWUgJiYgIWNvb2tpZVN0ci5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgc2V0Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSwgY29va2llU3Ry
KTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIo
KS5zZXRDb29raWVzKHUsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygp
LCBjb29raWVTdHIpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJS
X0lOVkFMSURfVVJMOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMzIzODYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTEwLTI0ICBNYXJrIFBpbGdy
aW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92ZSBj
b29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlv
biBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBw
ZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgKiBzcmMv
RnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJD
bGllbnRJbXBsOjpjb29raWVKYXIpOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudElt
cGwuaDoKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50SW1wbCk6CisgICAgICAgICogc3JjL1Bs
YXRmb3JtU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0xMC0yNCAgQmVu
IFdhZ25lciAgPGJ1bmdlbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDcmVhdGUgc2tpYV93
ZWJraXQuZ3lwIHRvIGltcHJvdmUgcmViYXNlbGluaW5nLgpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCShyZXZpc2lv
biAxMzIzNzkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVu
dEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQ4LDUgKzE2NDgsMTQgQEAgdm9pZCBGcmFt
ZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoV2lsbAogfQogI2VuZGlmCiAKK1dlYkNvcmU6OkNv
b2tpZUphciBGcmFtZUxvYWRlckNsaWVudEltcGw6OmNvb2tpZUphcigpCit7CisgICAgaWYgKCFt
X3dlYkZyYW1lIHx8ICFtX3dlYkZyYW1lLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OkNvb2tpZUphcigwKTsKKyAgICBXZWJDb29raWVKYXIqIHdlYkNvb2tpZUphciA9IG1fd2Vi
RnJhbWUtPmNsaWVudCgpLT5jb29raWVKYXIobV93ZWJGcmFtZSk7CisgICAgaWYgKCF3ZWJDb29r
aWVKYXIpCisgICAgICAgIHdlYkNvb2tpZUphciA9IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQo
KS0+Y29va2llSmFyKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tpZUphcih3ZWJDb29raWVK
YXIpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCShyZXZpc2lvbiAxMzIz
NzkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwu
aAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hXaWxsU3RhcnRVc2luZ1BlZXJDb25uZWN0aW9uSGFuZGxlcihXZWJDb3Jl
OjpSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIqKSBPVkVSUklERTsKICNlbmRpZgogCisgICAgdmly
dHVhbCBXZWJDb3JlOjpDb29raWVKYXIgY29va2llSmFyKCkgT1ZFUlJJREU7CisKIHByaXZhdGU6
CiAgICAgdm9pZCBtYWtlRG9jdW1lbnRWaWV3KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAkocmV2aXNpb24gMTMyMzc5KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI0LDg2ICsxMjQsNiBAQCBzdGF0aWMgV2ViV2lkZ2V0Q2xpZW50KiB0b1dlYldp
ZGdldENsaWVuCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4od2ViVmlldykt
PmNsaWVudCgpOwogfQogCi1zdGF0aWMgV2ViQ29va2llSmFyKiBnZXRDb29raWVKYXIoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIFdlYkZyYW1lSW1wbCogZnJhbWVJbXBsID0gV2Vi
RnJhbWVJbXBsOjpmcm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIGlmICghZnJhbWVJ
bXBsIHx8ICFmcmFtZUltcGwtPmNsaWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBXZWJD
b29raWVKYXIqIGNvb2tpZUphciA9IGZyYW1lSW1wbC0+Y2xpZW50KCktPmNvb2tpZUphcihmcmFt
ZUltcGwpOwotICAgIGlmICghY29va2llSmFyKQotICAgICAgICBjb29raWVKYXIgPSBXZWJLaXQ6
OlBsYXRmb3JtOjpjdXJyZW50KCktPmNvb2tpZUphcigpOwotICAgIHJldHVybiBjb29raWVKYXI7
Ci19Ci0KLS8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBQbGF0Zm9ybVN1cHBvcnQ6OnNl
dENvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
V2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlm
IChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+c2V0Q29va2llKHVybCwgZG9jdW1lbnQt
PmZpcnN0UGFydHlGb3JDb29raWVzKCksIHZhbHVlKTsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3Vw
cG9ydDo6Y29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkK
LXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0
Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQg
PSBjb29raWVKYXItPmNvb2tpZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMo
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBL
VVJMJiB1cmwpCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tp
ZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAg
ICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmws
IGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1ib29sIFBsYXRmb3JtU3VwcG9ydDo6cmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0g
ICAgcmF3Q29va2llcy5jbGVhcigpOwotICAgIFdlYlZlY3RvcjxXZWJDb29raWU+IHdlYkNvb2tp
ZXM7Ci0KLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVu
dCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5yYXdDb29raWVzKHVy
bCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHdlYkNvb2tpZXMpOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgY29uc3QgV2ViQ29va2llJiB3ZWJDb29raWUgPSB3ZWJDb29raWVzW2ldOwotICAgICAgICBD
b29raWUgY29va2llKHdlYkNvb2tpZS5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNv
b2tpZS52YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuZG9tYWluLAotICAg
ICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5wYXRoLAotICAgICAgICAgICAgICAgICAgICAg
IHdlYkNvb2tpZS5leHBpcmVzLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5odHRw
T25seSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2VjdXJlLAotICAgICAgICAg
ICAgICAgICAgICAgIHdlYkNvb2tpZS5zZXNzaW9uKTsKLSAgICAgICAgcmF3Q29va2llcy5hcHBl
bmQoY29va2llKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1T
dXBwb3J0OjpkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBXZWJDb29raWVKYXIqIGNv
b2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAg
ICAgICAgY29va2llSmFyLT5kZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKTsKLX0KLQotYm9v
bCBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIFdlYkNvb2tpZUphciogY29va2ll
SmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAg
ICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXNFbmFibGVkKGRvY3VtZW50LT5jb29raWVVUkwo
KSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2lmIE9TKFdJTkRPV1MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170456</attachid>
            <date>2012-10-24 13:07:51 -0700</date>
            <delta_ts>2012-10-24 13:28:07 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-99340-20121024160625.patch</filename>
            <type>text/plain</type>
            <size>39673</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjM4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDEyLTEwLTI0ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92
ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1h
dGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFk
ZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpwcm9j
ZXNzQnVmZmVyKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFu
ZHNoYWtlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNs
aWVudEhhbmRzaGFrZVJlcXVlc3QpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzZXRDb29raWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAg
ICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnQ6OmNvb2tpZUphcik6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjb29raWVFbmFibGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9Db29raWVKYXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29va2llSmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Q29va2llSmFyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaDoKKyAgICAgICAgKFBsYXRmb3JtU3Vw
cG9ydCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2V0VXBDb29raWVzRm9yUXVpY2tUaW1l
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL0Nvb2tpZUphckNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0
Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRl
QWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVK
YXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpD
b29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpk
ZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tp
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29r
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxD
b29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2ll
SmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFs
bENvb2tpZXMpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6CisKIDIwMTItMTAtMjQgIE5pY28gV2ViZXIgIDx0
aGFraXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEhvbm9yIGltYWdlIG9yaWVudGF0aW9uIGlu
IEdyYXBoaWNzQ29udGV4dFNraWEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDEzMjM4NikK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5l
bDo6cHJvY2Vzc0J1ZmZlcigpCiAgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyKQogICAgICAg
ICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhh
bmRzaGFrZVJlc3BvbnNlKG1fZG9jdW1lbnQsIG1faWRlbnRpZmllciwgbV9oYW5kc2hha2UtPnNl
cnZlckhhbmRzaGFrZVJlc3BvbnNlKCkpOwogICAgICAgICAgICAgaWYgKCFtX2hhbmRzaGFrZS0+
c2VydmVyU2V0Q29va2llKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvb2tp
ZXNFbmFibGVkKG1fZG9jdW1lbnQpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQt
PmNvb2tpZXNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YzsgLy8gRXhjZXB0aW9uIChmb3Igc2FuZGJveGVkIGRvY3VtZW50cykgaWdub3JlZC4KICAgICAg
ICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+c2V0Q29va2llKG1faGFuZHNoYWtlLT5zZXJ2ZXJT
ZXRDb29raWUoKSwgZWMpOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3Bw
CShyZXZpc2lvbiAxMzIzODYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMv
V2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOSBAQAog
I2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5o
IgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjAwLDcg
KzIwMywxMCBAQCBDU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoCiAgICAg
S1VSTCB1cmwgPSBodHRwVVJMRm9yQXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYg
KG1fY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9jb250ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tp
ZSA9IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAg
ICBTdHJpbmcgY29va2llOworICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsKKyAgICAgICAgaWYgKGZyYW1lKQorICAgICAgICAgICAgY29va2llID0gZnJhbWUtPmxvYWRl
cigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
dXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiAgICAgICAgIGlmICghY29v
a2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoIkNvb2tpZTogIiArIGNv
b2tpZSk7CiAgICAgICAgIC8vIFNldCAiQ29va2llMjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBl
eGlzdHMgZm9yIHVybD8KQEAgLTI0OSw3ICsyNTUsMTIgQEAgUGFzc1JlZlB0cjxXZWJTb2NrZXRI
YW5kc2hha2VSZXF1ZXN0PiBXZQogICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0
aW9uQW5kQ29va2llcygpOwogICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4
dCk7Ci0gICAgICAgIFN0cmluZyBjb29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShkb2N1bWVudCwgdXJsKTsKKyAgICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAgICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkgeworICAgICAg
ICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNv
b2tpZUphcigpOworICAgICAgICAgICAgY29va2llID0gY29va2llSmFyLmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwor
ICAgICAgICB9CiAgICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJl
cXVlc3QtPmFkZEhlYWRlckZpZWxkKCJDb29raWUiLCBjb29raWUpOwogICAgICAgICAvLyBTZXQg
IkNvb2tpZTI6IDxjb29raWU+IiBpZiBjb29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEzMjM4NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MTYsNyArMzgxNiw5IEBAIFN0
cmluZyBEb2N1bWVudDo6Y29va2llKEV4Y2VwdGlvbkNvZGUmIGUKICAgICBpZiAoY29va2llVVJM
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGNvb2tp
ZXModGhpcywgY29va2llVVJMKTsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVK
YXIoKS5jb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9
CiAKIHZvaWQgRG9jdW1lbnQ6OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTM4MzcsNyArMzgzOSwyMyBAQCB2b2lkIERvY3VtZW50OjpzZXRDb29r
aWUoY29uc3QgU3RyaW5nJiB2CiAgICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHNldENvb2tpZXModGhpcywgY29va2llVVJMLCB2YWx1ZSk7CisgICAg
aWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNs
aWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSwgdmFsdWUpOworfQorCitib29sIERvY3VtZW50Ojpjb29raWVzRW5hYmxl
ZCgpCit7CisgICAgaWYgKCFwYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghcGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llc0Vu
YWJsZWQodGhpcy0+Y29va2llVVJMKCksIHRoaXMtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwog
fQogCiBTdHJpbmcgRG9jdW1lbnQ6OnJlZmVycmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCShyZXZpc2lvbiAxMzIzODYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtODE3LDYgKzgxNyw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmlu
ZyBjb29raWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29va2llKGNvbnN0
IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKCk7CiAK
ICAgICBTdHJpbmcgcmVmZXJyZXIoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDEzMjM4NikKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw2ICs0OSw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkdl
b2xvY2F0aW9uRXJyb3IuaCIKQEAgLTUxMCw5ICs1MTIsMTAgQEAgdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmdldENvb2tpZXMoRXJybwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1l
KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUo
KSkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAg
ICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZy
YW1lKTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPmNvb2tpZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpIHsK
ICAgICAgICAgICAgIFZlY3RvcjxDb29raWU+IGRvY0Nvb2tpZXNMaXN0OwotICAgICAgICAgICAg
cmF3Q29va2llc0ltcGxlbWVudGVkID0gZ2V0UmF3Q29va2llcyhkb2N1bWVudCwgS1VSTChQYXJz
ZWRVUkxTdHJpbmcsICppdCksIGRvY0Nvb2tpZXNMaXN0KTsKKyAgICAgICAgICAgIHJhd0Nvb2tp
ZXNJbXBsZW1lbnRlZCA9IGNvb2tpZUphci5nZXRSYXdDb29raWVzKEtVUkwoUGFyc2VkVVJMU3Ry
aW5nLCAqaXQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jQ29va2llc0xp
c3QpOwogICAgICAgICAgICAgaWYgKCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBmb3IgdGhlIFN0
cmluZyByZXByZXNlbnRhdGlvbiBvZiBjb29raWVzLgogICAgICAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwpAQCAtNTQ4LDggKzU1MSw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpkZWxldGVDb29raWUoRXIKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFZlY3Rv
cjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAg
ICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tp
ZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBh
bGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBX
ZWJDb3JlOjpkZWxldGVDb29raWUoZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQp
LCBjb29raWVOYW1lKTsKKyAgICAgICAgICAgIGNvb2tpZUphci5kZWxldGVDb29raWUoS1VSTChQ
YXJzZWRVUkxTdHJpbmcsICppdCksIGNvb2tpZU5hbWUpOwogICAgIH0KIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDEzMjM4NikK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50X2gKICNkZWZp
bmUgRnJhbWVMb2FkZXJDbGllbnRfaAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIkljb25VUkwuaCIKICNpbmNsdWRlICJM
YXlvdXRNaWxlc3RvbmVzLmgiCkBAIC02NCw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBDYWNoZWRGcmFt
ZTsKICAgICBjbGFzcyBDb2xvcjsKKyAgICBjbGFzcyBDb29raWVKYXI7CiAgICAgY2xhc3MgRE9N
V2luZG93RXh0ZW5zaW9uOwogICAgIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKICAgICBjbGFzcyBE
b2N1bWVudExvYWRlcjsKQEAgLTM0OSw2ICszNTEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2ls
bFN0YXJ0VXNpbmdQZWVyQ29ubmVjdGlvbkhhbmRsZXIoUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVy
KikgeyB9CiAjZW5kaWYKKworICAgICAgICB2aXJ0dWFsIENvb2tpZUphciBjb29raWVKYXIoKSB7
IHJldHVybiBDb29raWVKYXIoKTsgfQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHJldmlzaW9uIDEzMjM4NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyAr
MjMsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogCi0j
aW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgogI2lu
Y2x1ZGUgIkRPTVBsdWdpbkFycmF5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTExOCw3
ICsxMTcsNyBAQCBib29sIE5hdmlnYXRvcjo6Y29va2llRW5hYmxlZCgpIGNvbnN0CiAgICAgaWYg
KG1fZnJhbWUtPnBhZ2UoKSAmJiAhbV9mcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVF
bmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBjb29raWVzRW5h
YmxlZChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+Y29va2llc0VuYWJsZWQoKTsKIH0KIAogYm9vbCBOYXZpZ2F0b3I6OmphdmFFbmFibGVkKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzIz
ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsMTAgQEAKICNpZm5kZWYgQ29va2llSmFyX2gKICNkZWZpbmUgQ29va2ll
SmFyX2gKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29r
aWVKYXIuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzMsMjMg
KzM3LDQyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIERvY3VtZW50Owot
ICAgIGNsYXNzIEtVUkw7CitjbGFzcyBLVVJMOworc3RydWN0IENvb2tpZTsKIAotICAgIHN0cnVj
dCBDb29raWU7CitjbGFzcyBDb29raWVKYXIgeworcHVibGljOgorICAgIENvb2tpZUphcigpCisg
ICAgeworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICBtX3dlYkNvb2tpZUphciA9IDA7
CisjZW5kaWYKKyAgICB9OworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIGV4cGxpY2l0IENv
b2tpZUphcihXZWJLaXQ6OldlYkNvb2tpZUphciogd2ViQ29va2llSmFyKQorICAgIHsKKyAgICAg
ICAgbV93ZWJDb29raWVKYXIgPSB3ZWJDb29raWVKYXI7CisgICAgfTsKKyNlbmRpZgogCiAgICAg
Ly8gY29va2llcyBvbWl0cyBIdHRwT25seSBjb29raWVzLgotICAgIFN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIFN0cmluZyBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHNl
dENvb2tpZXMoRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOwotICAgIGJvb2wgZ2V0UmF3Q29va2ll
cyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwotICAgIHZv
aWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYpOworICAgIFN0cmluZyBjb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAg
U3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmLCBjb25zdCBL
VVJMJik7CisgICAgdm9pZCBzZXRDb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJik7CisgICAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiwgY29uc3Qg
S1VSTCYpOworICAgIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYs
IFZlY3RvcjxDb29raWU+Jik7CisgICAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0
PFN0cmluZz4mIGhvc3RuYW1lcyk7CiAgICAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSk7CiAgICAgdm9pZCBkZWxldGVBbGxDb29raWVzKCk7CiAK
LX0KKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK3ByaXZhdGU6CisgICAgV2ViS2l0OjpXZWJDb29r
aWVKYXIqIG1fd2ViQ29va2llSmFyOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1TdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUGxhdGZvcm1TdXBwb3J0LmgJKHJldmlzaW9uIDEzMjM4NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03OCwxNCArNzgsNiBAQCBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwogCiBjbGFzcyBQbGF0Zm9y
bVN1cHBvcnQgewogcHVibGljOgotICAgIC8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgc3RhdGljIHZvaWQg
c2V0Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJik7Ci0gICAgc3RhdGljIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgYm9vbCByYXdDb29raWVz
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci0gICAgc3Rh
dGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgY29va2llTmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgY29va2llc0VuYWJsZWQoY29u
c3QgRG9jdW1lbnQqKTsKLQogICAgIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgT1MoV0lORE9XUykKICAg
ICBzdGF0aWMgYm9vbCBlbnN1cmVGb250TG9hZGVkKEhGT05UKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHJl
dmlzaW9uIDEzMjM4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9N
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAt
MjY4LDcgKzI3MCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ28K
IAogICAgIEtVUkwgbW92aWVVUkwgPSBLVVJMKEtVUkwoKSwgdXJsKTsKICAgICBWZWN0b3I8Q29v
a2llPiBkb2N1bWVudENvb2tpZXM7Ci0gICAgaWYgKCFnZXRSYXdDb29raWVzKGZyYW1lLT5kb2N1
bWVudCgpLCBtb3ZpZVVSTCwgZG9jdW1lbnRDb29raWVzKSkKKyAgICBpZiAoIWZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmdldFJhd0Nvb2tpZXModXJsLCBkb2N1bWVudC0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jdW1lbnRDb29raWVzKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgZm9yIChzaXplX3QgbmR4ID0gMDsgbmR4IDwgZG9jdW1lbnRDb29raWVzLnNpemUo
KTsgbmR4KyspIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5t
bQkocmV2aXNpb24gMTMyMzg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tp
ZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBzdGF0aWMgUmV0YWluUHRy
PE5TQXJyYXk+IGZpbHRlckNvb2tpZXMoCiAgICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKIH0K
IAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCitTdHJp
bmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJz
dFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
IApAQCAtOTUsNyArOTUsNyBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29v
a2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiAKQEAgLTExNCw3ICsxMTQsNyBAQCBTdHJpbmcgY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIHNl
dENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY29va2llU3RyKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiBjb29raWVT
dHIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0xMzIsNyArMTMy
LDcgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogCiAjaWYgVVNF
KENGVVJMU1RPUkFHRVNFU1NJT05TKQogICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkK
LSAgICAgICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZp
bHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSk7CisgICAgICAgIHdrU2V0SFRUUENvb2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdl
LmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZmlyc3RQYXJ0eUZvckNv
b2tpZXMpOwogICAgIGVsc2UKICNlbmRpZgogICAgICAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ug
c2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6ZmlsdGVyZWRDb29raWVzLmdldCgp
IGZvclVSTDpjb29raWVVUkwgbWFpbkRvY3VtZW50VVJMOmRvY3VtZW50LT5maXJzdFBhcnR5Rm9y
Q29va2llcygpXTsKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopCitib29sIENvb2tpZUphcjo6Y29va2ll
c0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9y
Q29va2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTU4
LDcgKzE1OCw3IEBAIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29u
c3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFy
OjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5
Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICByYXdDb29r
aWVzLmNsZWFyKCk7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAtMTkxLDcg
KzE5MSw3IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnMKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3ZvaWQgQ29va2llSmFyOjpk
ZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0yMjUsNyArMjI1LDcgQEAg
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNl
dDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogICAgIApAQCAtMjM4LDcgKzIzOCw3IEBAIHZvaWQgZ2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoSGFzaFNldDxTdHIKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwog
fQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKQEAg
LTI1NSw3ICsyNTUsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJp
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBkZWxldGVBbGxDb29r
aWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAkocmV2aXNpb24gMTMy
Mzg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5l
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkNvb2tp
ZS5oIgogI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5j
bHVkZSAiU29mdExpbmtpbmcuaCIKQEAgLTk1LDcgKzk0LDcgQEAgc3RhdGljIFJldGFpblB0cjxD
RkFycmF5UmVmPiBmaWx0ZXJDb29raQogICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9CiAK
LXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7CiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3Jh
Z2Ugc3RvcmVzIGFuIGVtcHR5IGNvb2tpZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2ll
OiA9Ii4KICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQpAQCAtMTA2LDcgKzEwNSw3IEBAIHZvaWQg
c2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxDRihBZG9wdENGLCB1cmwuY3JlYXRlQ0ZVUkwoKSk7
Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9yQ29va2llc0NGKEFkb3B0Q0Ys
IGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLmNyZWF0ZUNGVVJMKCkpOworICAgIFJl
dGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9wdENGLCBmaXJzdFBh
cnR5Rm9yQ29va2llcy5jcmVhdGVDRlVSTCgpKTsKIAogICAgIC8vIDxodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0PgogICAgIC8vIGNv
b2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBjb29raWVzIHdpdGhv
dXQgYSB2YWx1ZQpAQCAtMTIzLDcgKzEyMiw3IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnMKICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhjb29raWVT
dG9yYWdlLmdldCgpLCBmaWx0ZXJDb29raWVzKGNvb2tpZXNDRi5nZXQoKSkuZ2V0KCksIHVybENG
LmdldCgpLCBmaXJzdFBhcnR5Rm9yQ29va2llc0NGLmdldCgpKTsKIH0KIAotU3RyaW5nIGNvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5n
IENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQ
YXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYg
KCFjb29raWVTdG9yYWdlKQpAQCAtMTM3LDcgKzEzNiw3IEBAIFN0cmluZyBjb29raWVzKGNvbnN0
IERvY3VtZW50KiAvKmRvY3VtZW4KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFy
eUdldFZhbHVlKGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotU3RyaW5nIGNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNv
bnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2ll
cyovKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9y
YWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3Jh
Z2UpCkBAIC0xNTEsNyArMTUwLDcgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbgogICAgIHJldHVybiAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVh
ZGVyQ0YuZ2V0KCksIHNfY29va2llQ0YpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0
IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQo
Y29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyov
KQogewogICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kgcG9saWN5ID0gQ0ZIVFRQ
Q29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAg
IGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1
cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCkBAIC0xNTksNyArMTU4LDcgQEAgYm9vbCBjb29r
aWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkbwogICAgIHJldHVybiBwb2xpY3kgPT0gQ0ZI
VFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluIHx8
IHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5QWx3YXlzOwogfQogCi1i
b29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3Rv
cjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3Rv
cjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICBS
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRD
RkhUVFBDb29raWVTdG9yYWdlKCk7CkBAIC0xOTMsNyArMTkyLDcgQEAgYm9vbCBnZXRSYXdDb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRl
bGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYg
KCFjb29raWVTdG9yYWdlKQpAQCAtMjE0LDcgKzIxMyw3IEBAIHZvaWQgZGVsZXRlQ29va2llKGNv
bnN0IERvY3VtZW50KiwgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgUmV0
YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZI
VFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTIzMiw3ICsy
MzEsNyBAQCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyCiAgICAgfQog
fQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29r
aWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tp
ZVN0b3JhZ2UpCkBAIC0yNTEsNyArMjUwLDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29uc3QgU3RyaQogICAgIH0KIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQg
Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdl
KCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDEzMjM4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw1
MiArMzIsNzQgQEAKICNpbmNsdWRlICJDb29raWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisj
aW5jbHVkZSA8cHVibGljL1dlYkNvb2tpZS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVK
YXIuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CisjaW5jbHVkZSA8cHVibGljL1dl
YlVSTC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQogewotICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1bWVudCwg
dXJsLCB2YWx1ZSk7CisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNvb2tp
ZUphci0+c2V0Q29va2llKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIHZhbHVlKTsKIH0KIAot
U3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwp
CitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29v
a2llcyhkb2N1bWVudCwgdXJsKTsKKyAgICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVzKHVybCwg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJp
bmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0
Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwp
OworICAgIGlmICghbV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICByZXR1cm4gbV93ZWJDb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVy
bCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJl
dHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXNFbmFibGVkKGRvY3VtZW50KTsKKyAgICBpZiAo
IW1fd2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fd2Vi
Q29va2llSmFyLT5jb29raWVzRW5hYmxlZCh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0K
IAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRS
YXdDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tp
ZXMsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1
cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2llcyk7CisgICAgcmF3Q29v
a2llcy5jbGVhcigpOworICAgIFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViQ29va2llPiB3
ZWJDb29raWVzOworCisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNvb2tp
ZUphci0+cmF3Q29va2llcyh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzLCB3ZWJDb29raWVzKTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViQ29va2llJiB3ZWJDb29raWUgPSB3ZWJDb29raWVz
W2ldOworICAgICAgICBDb29raWUgY29va2llKHdlYkNvb2tpZS5uYW1lLCB3ZWJDb29raWUudmFs
dWUsIHdlYkNvb2tpZS5kb21haW4sIHdlYkNvb2tpZS5wYXRoLCB3ZWJDb29raWUuZXhwaXJlcywg
d2ViQ29va2llLmh0dHBPbmx5LCB3ZWJDb29raWUuc2VjdXJlLCB3ZWJDb29raWUuc2Vzc2lvbik7
CisgICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNvb2tpZSk7CisgICAgfQorICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkK
IHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29raWUoZG9jdW1lbnQsIHVy
bCwgY29va2llTmFtZSk7CisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNv
b2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7CiB9CiAKLXZvaWQgZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tp
ZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1l
cyovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tp
ZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSov
KQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRl
QWxsQ29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAg
Ly8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAJKHJldmlz
aW9uIDEzMjM4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29r
aWVKYXJDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUg
IkNvb2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0yNiwzNyArMjUsMzcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY29va2llSmFyOwor
c3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHNfY29va2llSmFyOwogCi12b2lkIHNldENv
b2tpZXMoRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIGNvbnN0IFN0cmluZyYgdmFsdWUp
CiB7Ci0gICAgY29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsKKyAgICBzX2Nvb2tp
ZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0
IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVK
YXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JD
b29raWVzKi8pCiB7Ci0gICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKKyAg
ICByZXR1cm4gc19jb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLVN0cmluZyBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBj
b25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLykKIHsKICAgICAvLyBGSVhNRTogaW5jbHVkZSBIdHRwT25seSBjb29raWUuCi0gICAgcmV0
dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKKyAgICByZXR1cm4gc19jb29raWVKYXIu
Z2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1l
bnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBL
VVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFy
OjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQ
YXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAg
cmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQg
ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYp
Cit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0
IFN0cmluZyYgLypjb29raWVOYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQKIH0KQEAgLTY4LDE3ICs2NywxNyBAQCB2b2lkIHNldENvb2tpZVN0b3JhZ2VQcml2YXRl
QnJvd3NpbmdFbmFiCiB9CiAjZW5kaWYKIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhI
YXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7CiAgICAgLy8gRklY
TUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQg
Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4v
Q29va2llSmFyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCShyZXZpc2lvbiAxMzIzODYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJL
VVJMLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5o
IgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxXaW5pbmV0Lmg+CkBAIC0zNiwxNSAr
MzUsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHNldENvb2tpZXMoRG9jdW1l
bnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQor
Cit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwm
IC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICAv
LyBGSVhNRTogRGVhbCB3aXRoIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLgorICAg
IC8vIEZJWE1FOiBEZWFsIHdpdGggZmlyc3RQYXJ0eUZvckNvb2tpZXMuCiAgICAgU3RyaW5nIHN0
ciA9IHVybC5zdHJpbmcoKTsKICAgICBTdHJpbmcgdmFsID0gdmFsdWU7CiAgICAgSW50ZXJuZXRT
ZXRDb29raWUoc3RyLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIHZhbC5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLykKIHsKICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwogCkBAIC02Myw0MCAr
NjMsNDAgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbgogICAgIHJl
dHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkK
K1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7CiAgICAgLy8gRklY
TUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llCi0gICAgcmV0dXJuIGNvb2tpZXMoZG9jdW1lbnQs
IHVybCk7CisgICAgcmV0dXJuIGNvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9
CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jv
b2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8
Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0
IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVj
dG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1
cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUphcjo6ZGVs
ZXRlQ29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29raWVOYW1l
Ki8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29v
a2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5h
bWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29v
a2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1l
Ki8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxl
dGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxMzIzODYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkyLDcgKzEzOTIsNyBA
QCBOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlRm9yVVJMKE5QTlVSCiAgICAgICAgIGlmICh1
LmlzVmFsaWQoKSkgewogICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50
RnJhbWUoKSwgbV9lbGVtZW50KTsKICAgICAgICAgICAgIGlmIChmcmFtZSkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IENTdHJpbmcgY29va2llU3RyID0gY29va2llcyhmcmFtZS0+ZG9jdW1lbnQo
KSwgdSkudXRmOCgpOworICAgICAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgY29va2llU3RyID0g
ZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llcyh1cmwsIGZyYW1l
LT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygpKS51dGY4KCk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFjb29raWVTdHIuaXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29u
c3QgaW50IHNpemUgPSBjb29raWVTdHIubGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgICAgICp2
YWx1ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5fTWVtQWxsb2Moc2l6ZSsxKSk7CkBAIC0xNDU0
LDcgKzE0NTQsNyBAQCBOUEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKE5QTlVSCiAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcgY29va2llU3RyID0gU3RyaW5nOjpmcm9tVVRGOCh2YWx1
ZSwgbGVuKTsKICAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1l
KCksIG1fZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoZnJhbWUgJiYgIWNvb2tpZVN0ci5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgc2V0Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSwg
Y29va2llU3RyKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5j
b29raWVKYXIoKS5zZXRDb29raWVzKHUsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9y
Q29va2llcygpLCBjb29raWVTdHIpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlc3Vs
dCA9IE5QRVJSX0lOVkFMSURfVVJMOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzIzODYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTEwLTI0ICBN
YXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBp
bmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxl
YXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAg
ICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJh
bWVMb2FkZXJDbGllbnRJbXBsOjpjb29raWVKYXIpOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRl
ckNsaWVudEltcGwuaDoKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50SW1wbCk6CisgICAgICAg
ICogc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0x
MC0yNCAgQmVuIFdhZ25lciAgPGJ1bmdlbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDcmVh
dGUgc2tpYV93ZWJraXQuZ3lwIHRvIGltcHJvdmUgcmViYXNlbGluaW5nLgpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3Bw
CShyZXZpc2lvbiAxMzIzODYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxv
YWRlckNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQ4LDUgKzE2NDgsMTQgQEAg
dm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoV2lsbAogfQogI2VuZGlmCiAKK1dl
YkNvcmU6OkNvb2tpZUphciBGcmFtZUxvYWRlckNsaWVudEltcGw6OmNvb2tpZUphcigpCit7Cisg
ICAgaWYgKCFtX3dlYkZyYW1lIHx8ICFtX3dlYkZyYW1lLT5jbGllbnQoKSkKKyAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OkNvb2tpZUphcigwKTsKKyAgICBXZWJDb29raWVKYXIqIHdlYkNvb2tpZUph
ciA9IG1fd2ViRnJhbWUtPmNsaWVudCgpLT5jb29raWVKYXIobV93ZWJGcmFtZSk7CisgICAgaWYg
KCF3ZWJDb29raWVKYXIpCisgICAgICAgIHdlYkNvb2tpZUphciA9IFdlYktpdDo6UGxhdGZvcm06
OmN1cnJlbnQoKS0+Y29va2llSmFyKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tpZUphcih3
ZWJDb29raWVKYXIpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCShyZXZp
c2lvbiAxMzIzODYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNs
aWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsU3RhcnRVc2luZ1BlZXJDb25uZWN0aW9uSGFuZGxl
cihXZWJDb3JlOjpSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIqKSBPVkVSUklERTsKICNlbmRpZgog
CisgICAgdmlydHVhbCBXZWJDb3JlOjpDb29raWVKYXIgY29va2llSmFyKCkgT1ZFUlJJREU7CisK
IHByaXZhdGU6CiAgICAgdm9pZCBtYWtlRG9jdW1lbnRWaWV3KCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAkocmV2aXNpb24gMTMy
Mzg2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI0LDg2ICsxMjQsNiBAQCBzdGF0aWMgV2ViV2lkZ2V0Q2xpZW50
KiB0b1dlYldpZGdldENsaWVuCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4o
d2ViVmlldyktPmNsaWVudCgpOwogfQogCi1zdGF0aWMgV2ViQ29va2llSmFyKiBnZXRDb29raWVK
YXIoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIFdlYkZyYW1lSW1wbCogZnJhbWVJ
bXBsID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIGlm
ICghZnJhbWVJbXBsIHx8ICFmcmFtZUltcGwtPmNsaWVudCgpKQotICAgICAgICByZXR1cm4gMDsK
LSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGZyYW1lSW1wbC0+Y2xpZW50KCktPmNvb2tp
ZUphcihmcmFtZUltcGwpOwotICAgIGlmICghY29va2llSmFyKQotICAgICAgICBjb29raWVKYXIg
PSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNvb2tpZUphcigpOwotICAgIHJldHVybiBj
b29raWVKYXI7Ci19Ci0KLS8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBQbGF0Zm9ybVN1
cHBvcnQ6OnNldENvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQp
OwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+c2V0Q29va2llKHVybCwg
ZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHZhbHVlKTsKLX0KLQotU3RyaW5nIFBs
YXRmb3JtU3VwcG9ydDo6Y29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtV
UkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tpZUphciogY29va2ll
SmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAg
ICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZv
ckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3Vw
cG9ydDo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBXZWJDb29raWVK
YXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUph
cikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1ib29sIFBsYXRmb3JtU3VwcG9ydDo6cmF3Q29va2llcyhjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tp
ZXMpCi17Ci0gICAgcmF3Q29va2llcy5jbGVhcigpOwotICAgIFdlYlZlY3RvcjxXZWJDb29raWU+
IHdlYkNvb2tpZXM7Ci0KLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUph
cihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5yYXdD
b29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHdlYkNvb2tpZXMp
OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgY29uc3QgV2ViQ29va2llJiB3ZWJDb29raWUgPSB3ZWJDb29raWVzW2ldOwot
ICAgICAgICBDb29raWUgY29va2llKHdlYkNvb2tpZS5uYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgIHdlYkNvb2tpZS52YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuZG9t
YWluLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5wYXRoLAotICAgICAgICAgICAg
ICAgICAgICAgIHdlYkNvb2tpZS5leHBpcmVzLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNv
b2tpZS5odHRwT25seSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2VjdXJlLAot
ICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5zZXNzaW9uKTsKLSAgICAgICAgcmF3Q29v
a2llcy5hcHBlbmQoY29va2llKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
UGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBXZWJDb29r
aWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tp
ZUphcikKLSAgICAgICAgY29va2llSmFyLT5kZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKTsK
LX0KLQotYm9vbCBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIFdlYkNvb2tpZUph
ciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFy
KQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXNFbmFibGVkKGRvY3VtZW50LT5j
b29raWVVUkwoKSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2lmIE9TKFdJTkRPV1Mp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170459</attachid>
            <date>2012-10-24 13:28:11 -0700</date>
            <delta_ts>2012-10-29 10:08:56 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-99340-20121024162645.patch</filename>
            <type>text/plain</type>
            <size>39671</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjM4NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDEyLTEwLTI0ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92
ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1h
dGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFk
ZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpwcm9j
ZXNzQnVmZmVyKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFu
ZHNoYWtlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNs
aWVudEhhbmRzaGFrZVJlcXVlc3QpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzZXRDb29raWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAg
ICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnQ6OmNvb2tpZUphcik6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjb29raWVFbmFibGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9Db29raWVKYXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29va2llSmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Q29va2llSmFyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaDoKKyAgICAgICAgKFBsYXRmb3JtU3Vw
cG9ydCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2V0VXBDb29raWVzRm9yUXVpY2tUaW1l
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL0Nvb2tpZUphckNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0
Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRl
QWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVK
YXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpD
b29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpk
ZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tp
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29r
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxD
b29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2ll
SmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFs
bENvb2tpZXMpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6CisKIDIwMTItMTAtMjQgIE5pY28gV2ViZXIgIDx0
aGFraXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEhvbm9yIGltYWdlIG9yaWVudGF0aW9uIGlu
IEdyYXBoaWNzQ29udGV4dFNraWEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDEzMjM4NikK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5l
bDo6cHJvY2Vzc0J1ZmZlcigpCiAgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyKQogICAgICAg
ICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhh
bmRzaGFrZVJlc3BvbnNlKG1fZG9jdW1lbnQsIG1faWRlbnRpZmllciwgbV9oYW5kc2hha2UtPnNl
cnZlckhhbmRzaGFrZVJlc3BvbnNlKCkpOwogICAgICAgICAgICAgaWYgKCFtX2hhbmRzaGFrZS0+
c2VydmVyU2V0Q29va2llKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvb2tp
ZXNFbmFibGVkKG1fZG9jdW1lbnQpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQt
PmNvb2tpZXNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YzsgLy8gRXhjZXB0aW9uIChmb3Igc2FuZGJveGVkIGRvY3VtZW50cykgaWdub3JlZC4KICAgICAg
ICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+c2V0Q29va2llKG1faGFuZHNoYWtlLT5zZXJ2ZXJT
ZXRDb29raWUoKSwgZWMpOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3Bw
CShyZXZpc2lvbiAxMzIzODYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMv
V2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOSBAQAog
I2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5o
IgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjAwLDcg
KzIwMywxMCBAQCBDU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoCiAgICAg
S1VSTCB1cmwgPSBodHRwVVJMRm9yQXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYg
KG1fY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9jb250ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tp
ZSA9IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAg
ICBTdHJpbmcgY29va2llOworICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsKKyAgICAgICAgaWYgKGZyYW1lKQorICAgICAgICAgICAgY29va2llID0gZnJhbWUtPmxvYWRl
cigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
dXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiAgICAgICAgIGlmICghY29v
a2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoIkNvb2tpZTogIiArIGNv
b2tpZSk7CiAgICAgICAgIC8vIFNldCAiQ29va2llMjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBl
eGlzdHMgZm9yIHVybD8KQEAgLTI0OSw3ICsyNTUsMTIgQEAgUGFzc1JlZlB0cjxXZWJTb2NrZXRI
YW5kc2hha2VSZXF1ZXN0PiBXZQogICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0
aW9uQW5kQ29va2llcygpOwogICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAg
ICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4
dCk7Ci0gICAgICAgIFN0cmluZyBjb29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShkb2N1bWVudCwgdXJsKTsKKyAgICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAgICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkgeworICAgICAg
ICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNv
b2tpZUphcigpOworICAgICAgICAgICAgY29va2llID0gY29va2llSmFyLmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwor
ICAgICAgICB9CiAgICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJl
cXVlc3QtPmFkZEhlYWRlckZpZWxkKCJDb29raWUiLCBjb29raWUpOwogICAgICAgICAvLyBTZXQg
IkNvb2tpZTI6IDxjb29raWU+IiBpZiBjb29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEzMjM4NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MTYsNyArMzgxNiw5IEBAIFN0
cmluZyBEb2N1bWVudDo6Y29va2llKEV4Y2VwdGlvbkNvZGUmIGUKICAgICBpZiAoY29va2llVVJM
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGNvb2tp
ZXModGhpcywgY29va2llVVJMKTsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVK
YXIoKS5jb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9
CiAKIHZvaWQgRG9jdW1lbnQ6OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTM4MzcsNyArMzgzOSwyMyBAQCB2b2lkIERvY3VtZW50OjpzZXRDb29r
aWUoY29uc3QgU3RyaW5nJiB2CiAgICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHNldENvb2tpZXModGhpcywgY29va2llVVJMLCB2YWx1ZSk7CisgICAg
aWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNs
aWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSwgdmFsdWUpOworfQorCitib29sIERvY3VtZW50Ojpjb29raWVzRW5hYmxl
ZCgpCit7CisgICAgaWYgKCFwYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghcGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llc0Vu
YWJsZWQodGhpcy0+Y29va2llVVJMKCksIHRoaXMtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwog
fQogCiBTdHJpbmcgRG9jdW1lbnQ6OnJlZmVycmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCShyZXZpc2lvbiAxMzIzODYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtODE3LDYgKzgxNyw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmlu
ZyBjb29raWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29va2llKGNvbnN0
IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKCk7CiAK
ICAgICBTdHJpbmcgcmVmZXJyZXIoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDEzMjM4NikKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw2ICs0OSw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkdl
b2xvY2F0aW9uRXJyb3IuaCIKQEAgLTUxMCw5ICs1MTIsMTAgQEAgdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmdldENvb2tpZXMoRXJybwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1l
KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUo
KSkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAg
ICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZy
YW1lKTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPmNvb2tpZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpIHsK
ICAgICAgICAgICAgIFZlY3RvcjxDb29raWU+IGRvY0Nvb2tpZXNMaXN0OwotICAgICAgICAgICAg
cmF3Q29va2llc0ltcGxlbWVudGVkID0gZ2V0UmF3Q29va2llcyhkb2N1bWVudCwgS1VSTChQYXJz
ZWRVUkxTdHJpbmcsICppdCksIGRvY0Nvb2tpZXNMaXN0KTsKKyAgICAgICAgICAgIHJhd0Nvb2tp
ZXNJbXBsZW1lbnRlZCA9IGNvb2tpZUphci5nZXRSYXdDb29raWVzKEtVUkwoUGFyc2VkVVJMU3Ry
aW5nLCAqaXQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jQ29va2llc0xp
c3QpOwogICAgICAgICAgICAgaWYgKCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBmb3IgdGhlIFN0
cmluZyByZXByZXNlbnRhdGlvbiBvZiBjb29raWVzLgogICAgICAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwpAQCAtNTQ4LDggKzU1MSw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpkZWxldGVDb29raWUoRXIKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFZlY3Rv
cjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAg
ICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tp
ZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBh
bGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBX
ZWJDb3JlOjpkZWxldGVDb29raWUoZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQp
LCBjb29raWVOYW1lKTsKKyAgICAgICAgICAgIGNvb2tpZUphci5kZWxldGVDb29raWUoS1VSTChQ
YXJzZWRVUkxTdHJpbmcsICppdCksIGNvb2tpZU5hbWUpOwogICAgIH0KIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDEzMjM4NikK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50X2gKICNkZWZp
bmUgRnJhbWVMb2FkZXJDbGllbnRfaAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIkljb25VUkwuaCIKICNpbmNsdWRlICJM
YXlvdXRNaWxlc3RvbmVzLmgiCkBAIC02NCw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBDYWNoZWRGcmFt
ZTsKICAgICBjbGFzcyBDb2xvcjsKKyAgICBjbGFzcyBDb29raWVKYXI7CiAgICAgY2xhc3MgRE9N
V2luZG93RXh0ZW5zaW9uOwogICAgIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKICAgICBjbGFzcyBE
b2N1bWVudExvYWRlcjsKQEAgLTM0OSw2ICszNTEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2ls
bFN0YXJ0VXNpbmdQZWVyQ29ubmVjdGlvbkhhbmRsZXIoUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVy
KikgeyB9CiAjZW5kaWYKKworICAgICAgICB2aXJ0dWFsIENvb2tpZUphciBjb29raWVKYXIoKSB7
IHJldHVybiBDb29raWVKYXIoKTsgfQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHJldmlzaW9uIDEzMjM4NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyAr
MjMsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogCi0j
aW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgogI2lu
Y2x1ZGUgIkRPTVBsdWdpbkFycmF5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTExOCw3
ICsxMTcsNyBAQCBib29sIE5hdmlnYXRvcjo6Y29va2llRW5hYmxlZCgpIGNvbnN0CiAgICAgaWYg
KG1fZnJhbWUtPnBhZ2UoKSAmJiAhbV9mcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVF
bmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBjb29raWVzRW5h
YmxlZChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+Y29va2llc0VuYWJsZWQoKTsKIH0KIAogYm9vbCBOYXZpZ2F0b3I6OmphdmFFbmFibGVkKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzIz
ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsMTAgQEAKICNpZm5kZWYgQ29va2llSmFyX2gKICNkZWZpbmUgQ29va2ll
SmFyX2gKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29r
aWVKYXIuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzMsMjMg
KzM3LDQyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIERvY3VtZW50Owot
ICAgIGNsYXNzIEtVUkw7CitjbGFzcyBLVVJMOworc3RydWN0IENvb2tpZTsKIAotICAgIHN0cnVj
dCBDb29raWU7CitjbGFzcyBDb29raWVKYXIgeworcHVibGljOgorICAgIENvb2tpZUphcigpCisg
ICAgeworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICBtX3dlYkNvb2tpZUphciA9IDA7
CisjZW5kaWYKKyAgICB9OworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIGV4cGxpY2l0IENv
b2tpZUphcihXZWJLaXQ6OldlYkNvb2tpZUphciogd2ViQ29va2llSmFyKQorICAgIHsKKyAgICAg
ICAgbV93ZWJDb29raWVKYXIgPSB3ZWJDb29raWVKYXI7CisgICAgfTsKKyNlbmRpZgogCiAgICAg
Ly8gY29va2llcyBvbWl0cyBIdHRwT25seSBjb29raWVzLgotICAgIFN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIFN0cmluZyBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHNl
dENvb2tpZXMoRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOwotICAgIGJvb2wgZ2V0UmF3Q29va2ll
cyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwotICAgIHZv
aWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYpOworICAgIFN0cmluZyBjb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAg
U3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmLCBjb25zdCBL
VVJMJik7CisgICAgdm9pZCBzZXRDb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJik7CisgICAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiwgY29uc3Qg
S1VSTCYpOworICAgIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYs
IFZlY3RvcjxDb29raWU+Jik7CisgICAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0
PFN0cmluZz4mIGhvc3RuYW1lcyk7CiAgICAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSk7CiAgICAgdm9pZCBkZWxldGVBbGxDb29raWVzKCk7CiAK
LX0KKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK3ByaXZhdGU6CisgICAgV2ViS2l0OjpXZWJDb29r
aWVKYXIqIG1fd2ViQ29va2llSmFyOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1TdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUGxhdGZvcm1TdXBwb3J0LmgJKHJldmlzaW9uIDEzMjM4NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03OCwxNCArNzgsNiBAQCBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwogCiBjbGFzcyBQbGF0Zm9y
bVN1cHBvcnQgewogcHVibGljOgotICAgIC8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgc3RhdGljIHZvaWQg
c2V0Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHZh
bHVlKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJik7Ci0gICAgc3RhdGljIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgYm9vbCByYXdDb29raWVz
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci0gICAgc3Rh
dGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgY29va2llTmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgY29va2llc0VuYWJsZWQoY29u
c3QgRG9jdW1lbnQqKTsKLQogICAgIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgT1MoV0lORE9XUykKICAg
ICBzdGF0aWMgYm9vbCBlbnN1cmVGb250TG9hZGVkKEhGT05UKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHJl
dmlzaW9uIDEzMjM4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9N
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAt
MjY4LDcgKzI3MCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ28K
IAogICAgIEtVUkwgbW92aWVVUkwgPSBLVVJMKEtVUkwoKSwgdXJsKTsKICAgICBWZWN0b3I8Q29v
a2llPiBkb2N1bWVudENvb2tpZXM7Ci0gICAgaWYgKCFnZXRSYXdDb29raWVzKGZyYW1lLT5kb2N1
bWVudCgpLCBtb3ZpZVVSTCwgZG9jdW1lbnRDb29raWVzKSkKKyAgICBpZiAoIWZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmdldFJhd0Nvb2tpZXModXJsLCBkb2N1bWVudC0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jdW1lbnRDb29raWVzKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgZm9yIChzaXplX3QgbmR4ID0gMDsgbmR4IDwgZG9jdW1lbnRDb29raWVzLnNpemUo
KTsgbmR4KyspIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5t
bQkocmV2aXNpb24gMTMyMzg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tp
ZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBzdGF0aWMgUmV0YWluUHRy
PE5TQXJyYXk+IGZpbHRlckNvb2tpZXMoCiAgICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKIH0K
IAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCitTdHJp
bmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJz
dFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
IApAQCAtOTUsNyArOTUsNyBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29v
a2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiAKQEAgLTExNCw3ICsxMTQsNyBAQCBTdHJpbmcgY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIHNl
dENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY29va2llU3RyKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiBjb29raWVT
dHIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0xMzIsNyArMTMy
LDcgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogCiAjaWYgVVNF
KENGVVJMU1RPUkFHRVNFU1NJT05TKQogICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkK
LSAgICAgICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZp
bHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSk7CisgICAgICAgIHdrU2V0SFRUUENvb2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdl
LmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZmlyc3RQYXJ0eUZvckNv
b2tpZXMpOwogICAgIGVsc2UKICNlbmRpZgogICAgICAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ug
c2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6ZmlsdGVyZWRDb29raWVzLmdldCgp
IGZvclVSTDpjb29raWVVUkwgbWFpbkRvY3VtZW50VVJMOmRvY3VtZW50LT5maXJzdFBhcnR5Rm9y
Q29va2llcygpXTsKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopCitib29sIENvb2tpZUphcjo6Y29va2ll
c0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9y
Q29va2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTU4
LDcgKzE1OCw3IEBAIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29u
c3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFy
OjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5
Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICByYXdDb29r
aWVzLmNsZWFyKCk7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAtMTkxLDcg
KzE5MSw3IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnMKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3ZvaWQgQ29va2llSmFyOjpk
ZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0yMjUsNyArMjI1LDcgQEAg
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNl
dDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogICAgIApAQCAtMjM4LDcgKzIzOCw3IEBAIHZvaWQgZ2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoSGFzaFNldDxTdHIKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwog
fQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKQEAg
LTI1NSw3ICsyNTUsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJp
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBkZWxldGVBbGxDb29r
aWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAkocmV2aXNpb24gMTMy
Mzg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5l
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkNvb2tp
ZS5oIgogI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5j
bHVkZSAiU29mdExpbmtpbmcuaCIKQEAgLTk1LDcgKzk0LDcgQEAgc3RhdGljIFJldGFpblB0cjxD
RkFycmF5UmVmPiBmaWx0ZXJDb29raQogICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9CiAK
LXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7CiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3Jh
Z2Ugc3RvcmVzIGFuIGVtcHR5IGNvb2tpZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2ll
OiA9Ii4KICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQpAQCAtMTA2LDcgKzEwNSw3IEBAIHZvaWQg
c2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxDRihBZG9wdENGLCB1cmwuY3JlYXRlQ0ZVUkwoKSk7
Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9yQ29va2llc0NGKEFkb3B0Q0Ys
IGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLmNyZWF0ZUNGVVJMKCkpOworICAgIFJl
dGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9wdENGLCBmaXJzdFBh
cnR5Rm9yQ29va2llcy5jcmVhdGVDRlVSTCgpKTsKIAogICAgIC8vIDxodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0PgogICAgIC8vIGNv
b2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBjb29raWVzIHdpdGhv
dXQgYSB2YWx1ZQpAQCAtMTIzLDcgKzEyMiw3IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnMKICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhjb29raWVT
dG9yYWdlLmdldCgpLCBmaWx0ZXJDb29raWVzKGNvb2tpZXNDRi5nZXQoKSkuZ2V0KCksIHVybENG
LmdldCgpLCBmaXJzdFBhcnR5Rm9yQ29va2llc0NGLmdldCgpKTsKIH0KIAotU3RyaW5nIGNvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5n
IENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQ
YXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYg
KCFjb29raWVTdG9yYWdlKQpAQCAtMTM3LDcgKzEzNiw3IEBAIFN0cmluZyBjb29raWVzKGNvbnN0
IERvY3VtZW50KiAvKmRvY3VtZW4KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFy
eUdldFZhbHVlKGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotU3RyaW5nIGNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNv
bnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2ll
cyovKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9y
YWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3Jh
Z2UpCkBAIC0xNTEsNyArMTUwLDcgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbgogICAgIHJldHVybiAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVh
ZGVyQ0YuZ2V0KCksIHNfY29va2llQ0YpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0
IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQo
Y29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyov
KQogewogICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kgcG9saWN5ID0gQ0ZIVFRQ
Q29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAg
IGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1
cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCkBAIC0xNTksNyArMTU4LDcgQEAgYm9vbCBjb29r
aWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkbwogICAgIHJldHVybiBwb2xpY3kgPT0gQ0ZI
VFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluIHx8
IHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5QWx3YXlzOwogfQogCi1i
b29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3Rv
cjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3Rv
cjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICBS
ZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRD
RkhUVFBDb29raWVTdG9yYWdlKCk7CkBAIC0xOTMsNyArMTkyLDcgQEAgYm9vbCBnZXRSYXdDb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRl
bGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJl
Zj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYg
KCFjb29raWVTdG9yYWdlKQpAQCAtMjE0LDcgKzIxMyw3IEBAIHZvaWQgZGVsZXRlQ29va2llKGNv
bnN0IERvY3VtZW50KiwgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgUmV0
YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZI
VFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTIzMiw3ICsy
MzEsNyBAQCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyCiAgICAgfQog
fQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29r
aWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tp
ZVN0b3JhZ2UpCkBAIC0yNTEsNyArMjUwLDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29uc3QgU3RyaQogICAgIH0KIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQg
Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdl
KCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDEzMjM4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw1
MiArMzIsNzQgQEAKICNpbmNsdWRlICJDb29raWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisj
aW5jbHVkZSA8cHVibGljL1dlYkNvb2tpZS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVK
YXIuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CisjaW5jbHVkZSA8cHVibGljL1dl
YlVSTC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQogewotICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1bWVudCwg
dXJsLCB2YWx1ZSk7CisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNvb2tp
ZUphci0+c2V0Q29va2llKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIHZhbHVlKTsKIH0KIAot
U3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwp
CitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29v
a2llcyhkb2N1bWVudCwgdXJsKTsKKyAgICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVzKHVybCwg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJp
bmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0
Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwp
OworICAgIGlmICghbV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICByZXR1cm4gbV93ZWJDb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVy
bCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJl
dHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXNFbmFibGVkKGRvY3VtZW50KTsKKyAgICBpZiAo
IW1fd2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fd2Vi
Q29va2llSmFyLT5jb29raWVzRW5hYmxlZCh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0K
IAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRS
YXdDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tp
ZXMsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1
cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2llcyk7CisgICAgcmF3Q29v
a2llcy5jbGVhcigpOworICAgIFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViQ29va2llPiB3
ZWJDb29raWVzOworCisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNvb2tp
ZUphci0+cmF3Q29va2llcyh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzLCB3ZWJDb29raWVzKTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViQ29va2llJiB3ZWJDb29raWUgPSB3ZWJDb29raWVz
W2ldOworICAgICAgICBDb29raWUgY29va2llKHdlYkNvb2tpZS5uYW1lLCB3ZWJDb29raWUudmFs
dWUsIHdlYkNvb2tpZS5kb21haW4sIHdlYkNvb2tpZS5wYXRoLCB3ZWJDb29raWUuZXhwaXJlcywg
d2ViQ29va2llLmh0dHBPbmx5LCB3ZWJDb29raWUuc2VjdXJlLCB3ZWJDb29raWUuc2Vzc2lvbik7
CisgICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNvb2tpZSk7CisgICAgfQorICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkK
IHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29raWUoZG9jdW1lbnQsIHVy
bCwgY29va2llTmFtZSk7CisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNv
b2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7CiB9CiAKLXZvaWQgZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tp
ZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1l
cyovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tp
ZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSov
KQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRl
QWxsQ29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAg
Ly8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAJKHJldmlz
aW9uIDEzMjM4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29r
aWVKYXJDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUg
IkNvb2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0yNiwzNyArMjUsMzcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY29va2llSmFyOwor
c3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHNfY29va2llSmFyOwogCi12b2lkIHNldENv
b2tpZXMoRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIGNvbnN0IFN0cmluZyYgdmFsdWUp
CiB7Ci0gICAgY29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsKKyAgICBzX2Nvb2tp
ZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0
IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVK
YXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JD
b29raWVzKi8pCiB7Ci0gICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKKyAg
ICByZXR1cm4gc19jb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLVN0cmluZyBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBj
b25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLykKIHsKICAgICAvLyBGSVhNRTogaW5jbHVkZSBIdHRwT25seSBjb29raWUuCi0gICAgcmV0
dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKKyAgICByZXR1cm4gc19jb29raWVKYXIu
Z2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1l
bnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBL
VVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFy
OjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQ
YXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAg
cmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQg
ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYp
Cit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0
IFN0cmluZyYgLypjb29raWVOYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQKIH0KQEAgLTY4LDE3ICs2NywxNyBAQCB2b2lkIHNldENvb2tpZVN0b3JhZ2VQcml2YXRl
QnJvd3NpbmdFbmFiCiB9CiAjZW5kaWYKIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhI
YXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7CiAgICAgLy8gRklY
TUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQg
Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4v
Q29va2llSmFyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCShyZXZpc2lvbiAxMzIzODYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJL
VVJMLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5o
IgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxXaW5pbmV0Lmg+CkBAIC0zNiwxNSAr
MzUsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHNldENvb2tpZXMoRG9jdW1l
bnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQor
Cit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwm
IC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICAv
LyBGSVhNRTogRGVhbCB3aXRoIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLgorICAg
IC8vIEZJWE1FOiBEZWFsIHdpdGggZmlyc3RQYXJ0eUZvckNvb2tpZXMuCiAgICAgU3RyaW5nIHN0
ciA9IHVybC5zdHJpbmcoKTsKICAgICBTdHJpbmcgdmFsID0gdmFsdWU7CiAgICAgSW50ZXJuZXRT
ZXRDb29raWUoc3RyLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIHZhbC5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLykKIHsKICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwogCkBAIC02Myw0MCAr
NjMsNDAgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbgogICAgIHJl
dHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkK
K1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7CiAgICAgLy8gRklY
TUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llCi0gICAgcmV0dXJuIGNvb2tpZXMoZG9jdW1lbnQs
IHVybCk7CisgICAgcmV0dXJuIGNvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9
CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jv
b2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8
Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0
IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVj
dG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1
cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUphcjo6ZGVs
ZXRlQ29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29raWVOYW1l
Ki8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29v
a2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5h
bWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29v
a2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1l
Ki8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxl
dGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVn
aW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxMzIzODYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkyLDcgKzEzOTIsNyBA
QCBOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlRm9yVVJMKE5QTlVSCiAgICAgICAgIGlmICh1
LmlzVmFsaWQoKSkgewogICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50
RnJhbWUoKSwgbV9lbGVtZW50KTsKICAgICAgICAgICAgIGlmIChmcmFtZSkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IENTdHJpbmcgY29va2llU3RyID0gY29va2llcyhmcmFtZS0+ZG9jdW1lbnQo
KSwgdSkudXRmOCgpOworICAgICAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgY29va2llU3RyID0g
ZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llcyh1LCBmcmFtZS0+
ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSkudXRmOCgpOwogICAgICAgICAgICAg
ICAgIGlmICghY29va2llU3RyLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGludCBzaXplID0gY29va2llU3RyLmxlbmd0aCgpOwogICAgICAgICAgICAgICAgICAgICAqdmFs
dWUgPSBzdGF0aWNfY2FzdDxjaGFyKj4oTlBOX01lbUFsbG9jKHNpemUrMSkpOwpAQCAtMTQ1NCw3
ICsxNDU0LDcgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTChOUE5VUgogICAg
ICAgICAgICAgY29uc3QgU3RyaW5nIGNvb2tpZVN0ciA9IFN0cmluZzo6ZnJvbVVURjgodmFsdWUs
IGxlbik7CiAgICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBnZXRGcmFtZShwYXJlbnRGcmFtZSgp
LCBtX2VsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGZyYW1lICYmICFjb29raWVTdHIuaXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgIHNldENvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIHUsIGNv
b2tpZVN0cik7CisgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29v
a2llSmFyKCkuc2V0Q29va2llcyh1LCBmcmFtZS0+ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSwgY29va2llU3RyKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXN1bHQg
PSBOUEVSUl9JTlZBTElEX1VSTDsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkocmV2aXNpb24gMTMyMzg2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMC0yNCAgTWFy
ayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBS
ZW1vdmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5m
b3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFz
ZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAg
ICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50SW1wbDo6Y29va2llSmFyKToKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJD
bGllbnRJbXBsLmg6CisgICAgICAgIChGcmFtZUxvYWRlckNsaWVudEltcGwpOgorICAgICAgICAq
IHNyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMTAt
MjQgIEJlbiBXYWduZXIgIDxidW5nZW1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ3JlYXRl
IHNraWFfd2Via2l0Lmd5cCB0byBpbXByb3ZlIHJlYmFzZWxpbmluZy4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAko
cmV2aXNpb24gMTMyMzg2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2Fk
ZXJDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY0OCw1ICsxNjQ4LDE0IEBAIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaXNwYXRjaFdpbGwKIH0KICNlbmRpZgogCitXZWJD
b3JlOjpDb29raWVKYXIgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjb29raWVKYXIoKQoreworICAg
IGlmICghbV93ZWJGcmFtZSB8fCAhbV93ZWJGcmFtZS0+Y2xpZW50KCkpCisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpDb29raWVKYXIoMCk7CisgICAgV2ViQ29va2llSmFyKiB3ZWJDb29raWVKYXIg
PSBtX3dlYkZyYW1lLT5jbGllbnQoKS0+Y29va2llSmFyKG1fd2ViRnJhbWUpOworICAgIGlmICgh
d2ViQ29va2llSmFyKQorICAgICAgICB3ZWJDb29raWVKYXIgPSBXZWJLaXQ6OlBsYXRmb3JtOjpj
dXJyZW50KCktPmNvb2tpZUphcigpOworICAgIHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIod2Vi
Q29va2llSmFyKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaAkocmV2aXNp
b24gMTMyMzg2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGll
bnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw2ICsyMjUsOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN0YXJ0VXNpbmdQZWVyQ29ubmVjdGlvbkhhbmRsZXIo
V2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKikgT1ZFUlJJREU7CiAjZW5kaWYKIAor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29va2llSmFyIGNvb2tpZUphcigpIE9WRVJSSURFOworCiBw
cml2YXRlOgogICAgIHZvaWQgbWFrZURvY3VtZW50VmlldygpOwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAJKHJldmlzaW9uIDEzMjM4
NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyNCw4NiArMTI0LDYgQEAgc3RhdGljIFdlYldpZGdldENsaWVudCog
dG9XZWJXaWRnZXRDbGllbgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJWaWV3SW1wbCo+KHdl
YlZpZXcpLT5jbGllbnQoKTsKIH0KIAotc3RhdGljIFdlYkNvb2tpZUphciogZ2V0Q29va2llSmFy
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBXZWJGcmFtZUltcGwqIGZyYW1lSW1w
bCA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICBpZiAo
IWZyYW1lSW1wbCB8fCAhZnJhbWVJbXBsLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBmcmFtZUltcGwtPmNsaWVudCgpLT5jb29raWVK
YXIoZnJhbWVJbXBsKTsKLSAgICBpZiAoIWNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyID0g
V2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jb29raWVKYXIoKTsKLSAgICByZXR1cm4gY29v
a2llSmFyOwotfQotCi0vLyBDb29raWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgUGxhdGZvcm1TdXBw
b3J0OjpzZXRDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJs
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsK
LSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXItPnNldENvb2tpZSh1cmwsIGRv
Y3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBQbGF0
Zm9ybVN1cHBvcnQ6OmNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwpCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUph
ciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAg
cmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JD
b29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN1cHBv
cnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgS1VSTCYgdXJsKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgV2ViQ29va2llSmFy
KiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIp
Ci0gICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotYm9vbCBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVz
KQotewotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBXZWJWZWN0b3I8V2ViQ29va2llPiB3
ZWJDb29raWVzOwotCi0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIo
ZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+cmF3Q29v
a2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB3ZWJDb29raWVzKTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IFdlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29va2llc1tpXTsKLSAg
ICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICB3ZWJDb29raWUudmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmRvbWFp
biwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUucGF0aCwKLSAgICAgICAgICAgICAg
ICAgICAgICB3ZWJDb29raWUuZXhwaXJlcywKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29r
aWUuaHR0cE9ubHksCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlY3VyZSwKLSAg
ICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2Vzc2lvbik7Ci0gICAgICAgIHJhd0Nvb2tp
ZXMuYXBwZW5kKGNvb2tpZSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBs
YXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCi17Ci0gICAgV2ViQ29va2ll
SmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVK
YXIpCi0gICAgICAgIGNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7Ci19
Ci0KLWJvb2wgUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBXZWJDb29raWVKYXIq
IGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikK
LSAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzRW5hYmxlZChkb2N1bWVudC0+Y29v
a2llVVJMKCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCiAvLyBGb250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICNpZiBPUyhXSU5ET1dTKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171274</attachid>
            <date>2012-10-29 10:08:59 -0700</date>
            <delta_ts>2012-10-29 10:42:08 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-99340-20121029130720.patch</filename>
            <type>text/plain</type>
            <size>39695</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDEyLTEwLTI5ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92
ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1h
dGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFk
ZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpwcm9j
ZXNzQnVmZmVyKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFu
ZHNoYWtlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNs
aWVudEhhbmRzaGFrZVJlcXVlc3QpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzZXRDb29raWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAg
ICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnQ6OmNvb2tpZUphcik6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjb29raWVFbmFibGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9Db29raWVKYXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29va2llSmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Q29va2llSmFyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaDoKKyAgICAgICAgKFBsYXRmb3JtU3Vw
cG9ydCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2V0VXBDb29raWVzRm9yUXVpY2tUaW1l
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL0Nvb2tpZUphckNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0
Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRl
QWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVK
YXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpD
b29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpk
ZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tp
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29r
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxD
b29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2ll
SmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFs
bENvb2tpZXMpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6CisKIDIwMTItMTAtMjkgIEFsZXhhbmRydSBDaGlj
dWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1MgU2hhZGVyc10gRXh0cmFj
dCB0aGUgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCB0byBpdHMgb3duIGZpbGUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hh
bm5lbC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcgKzQz
MCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0J1ZmZlcigpCiAgICAgICAgICAg
ICBpZiAobV9pZGVudGlmaWVyKQogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKG1fZG9jdW1lbnQsIG1f
aWRlbnRpZmllciwgbV9oYW5kc2hha2UtPnNlcnZlckhhbmRzaGFrZVJlc3BvbnNlKCkpOwogICAg
ICAgICAgICAgaWYgKCFtX2hhbmRzaGFrZS0+c2VydmVyU2V0Q29va2llKCkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGNvb2tpZXNFbmFibGVkKG1fZG9jdW1lbnQpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmNvb2tpZXNFbmFibGVkKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsgLy8gRXhjZXB0aW9uIChmb3Igc2FuZGJveGVk
IGRvY3VtZW50cykgaWdub3JlZC4KICAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+c2V0
Q29va2llKG1faGFuZHNoYWtlLT5zZXJ2ZXJTZXRDb29raWUoKSwgZWMpOwogICAgICAgICAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRI
YW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNiArMzksOSBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUg
IkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgpAQCAtMjAwLDcgKzIwMywxMCBAQCBDU3RyaW5nIFdlYlNvY2tldEhh
bmRzaGFrZTo6Y2xpZW50SGFuZHNoCiAgICAgS1VSTCB1cmwgPSBodHRwVVJMRm9yQXV0aGVudGlj
YXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYgKG1fY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAg
ICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9jb250
ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGRvY3VtZW50LCB1cmwpOworICAgICAgICBTdHJpbmcgY29va2llOworICAgICAgICBGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAgICAgaWYgKGZyYW1lKQorICAgICAg
ICAgICAgY29va2llID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSk7CiAgICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGZp
ZWxkcy5hcHBlbmQoIkNvb2tpZTogIiArIGNvb2tpZSk7CiAgICAgICAgIC8vIFNldCAiQ29va2ll
MjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBleGlzdHMgZm9yIHVybD8KQEAgLTI0OSw3ICsyNTUs
MTIgQEAgUGFzc1JlZlB0cjxXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0PiBXZQogICAgIEtVUkwg
dXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2llcygpOwogICAgIGlmIChtX2Nv
bnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0
aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4dCk7Ci0gICAgICAgIFN0cmluZyBjb29raWUgPSBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAgICAgICAgU3Ry
aW5nIGNvb2tpZTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Cisg
ICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOworICAgICAgICAgICAgY29va2ll
ID0gY29va2llSmFyLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwgZG9jdW1lbnQt
PmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgICAgICB9CiAgICAgICAgIGlmICghY29va2ll
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlcXVlc3QtPmFkZEhlYWRlckZpZWxkKCJDb29raWUi
LCBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxjb29raWU+IiBpZiBjb29raWVz
IDIgZXhpc3RzIGZvciB1cmw/CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9u
IDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4MTYsNyArMzgxNiw5IEBAIFN0cmluZyBEb2N1bWVudDo6Y29va2llKEV4Y2VwdGlv
bkNvZGUmIGUKICAgICBpZiAoY29va2llVVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCi0gICAgcmV0dXJuIGNvb2tpZXModGhpcywgY29va2llVVJMKTsKKyAgICBpZiAo
IWZyYW1lKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+
bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldENvb2tpZShj
b25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTM4MzcsNyArMzgzOSwy
MyBAQCB2b2lkIERvY3VtZW50OjpzZXRDb29raWUoY29uc3QgU3RyaW5nJiB2CiAgICAgaWYgKGNv
b2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldENvb2tpZXModGhp
cywgY29va2llVVJMLCB2YWx1ZSk7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm47
CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVz
KGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUpOworfQorCiti
b29sIERvY3VtZW50Ojpjb29raWVzRW5hYmxlZCgpCit7CisgICAgaWYgKCFwYWdlKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVF
bmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZnJhbWUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT5jbGll
bnQoKS0+Y29va2llSmFyKCkuY29va2llc0VuYWJsZWQodGhpcy0+Y29va2llVVJMKCksIHRoaXMt
PmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwogfQogCiBTdHJpbmcgRG9jdW1lbnQ6OnJlZmVycmVy
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMzI3OTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODE3LDYgKzgx
Nyw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjb29raWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0
OwogICAgIHZvaWQgc2V0Q29va2llKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBib29sIGNvb2tpZXNFbmFibGVkKCk7CiAKICAgICBTdHJpbmcgcmVmZXJyZXIoKSBjb25zdDsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw4IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9u
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uRXJyb3IuaCIKQEAgLTUxMiw5ICs1
MTQsMTAgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJybwogICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUoKSkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0g
YWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tp
ZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwogICAgICAgICBm
b3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0
ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgIFZlY3RvcjxDb29raWU+IGRv
Y0Nvb2tpZXNMaXN0OwotICAgICAgICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZ2V0UmF3
Q29va2llcyhkb2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCksIGRvY0Nvb2tpZXNM
aXN0KTsKKyAgICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGNvb2tpZUphci5nZXRS
YXdDb29raWVzKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSwgZG9jQ29va2llc0xpc3QpOwogICAgICAgICAgICAgaWYgKCFyYXdDb29r
aWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBkdXBs
aWNhdGlvbiBjaGVja2luZyBmb3IgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBjb29raWVz
LgogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNTUwLDggKzU1Myw5
IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXIKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2Vz
VVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1l
LT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxL
VVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMu
ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVDb29raWUoZG9jdW1lbnQs
IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVOYW1lKTsKKyAgICAgICAgICAgIGNv
b2tpZUphci5kZWxldGVDb29raWUoS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCksIGNvb2tpZU5h
bWUpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
Q2xpZW50LmgJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaWZuZGVm
IEZyYW1lTG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRfaAogCisjaW5j
bHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1
ZGUgIkljb25VUkwuaCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmVzLmgiCkBAIC02NCw2ICs2
NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTsKICAgICBjbGFzcyBDYWNoZWRGcmFtZTsKICAgICBjbGFzcyBDb2xvcjsKKyAgICBjbGFz
cyBDb29raWVKYXI7CiAgICAgY2xhc3MgRE9NV2luZG93RXh0ZW5zaW9uOwogICAgIGNsYXNzIERP
TVdyYXBwZXJXb3JsZDsKICAgICBjbGFzcyBEb2N1bWVudExvYWRlcjsKQEAgLTM0OSw2ICszNTEs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN0YXJ0VXNpbmdQZWVyQ29ubmVjdGlvbkhhbmRs
ZXIoUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKikgeyB9CiAjZW5kaWYKKworICAgICAgICB2aXJ0
dWFsIENvb2tpZUphciBjb29raWVKYXIoKSB7IHJldHVybiBDb29raWVKYXIoKTsgfQogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2
aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5j
cHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIk5hdmlnYXRvci5oIgogCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVk
ZSAiRE9NTWltZVR5cGVBcnJheS5oIgogI2luY2x1ZGUgIkRPTVBsdWdpbkFycmF5LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKQEAgLTExOCw3ICsxMTcsNyBAQCBib29sIE5hdmlnYXRvcjo6Y29v
a2llRW5hYmxlZCgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSAmJiAhbV9mcmFtZS0+
cGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHJldHVybiBjb29raWVzRW5hYmxlZChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAg
ICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29va2llc0VuYWJsZWQoKTsKIH0KIAogYm9v
bCBOYXZpZ2F0b3I6OmphdmFFbmFibGVkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0Nvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db29raWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTAgQEAKICNpZm5kZWYg
Q29va2llSmFyX2gKICNkZWZpbmUgQ29va2llSmFyX2gKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVN
KQorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgpAQCAtMzMsMjMgKzM3LDQyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotICAgIGNsYXNzIERvY3VtZW50OwotICAgIGNsYXNzIEtVUkw7CitjbGFzcyBLVVJMOwor
c3RydWN0IENvb2tpZTsKIAotICAgIHN0cnVjdCBDb29raWU7CitjbGFzcyBDb29raWVKYXIgewor
cHVibGljOgorICAgIENvb2tpZUphcigpCisgICAgeworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQor
ICAgICAgICBtX3dlYkNvb2tpZUphciA9IDA7CisjZW5kaWYKKyAgICB9OworI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorICAgIGV4cGxpY2l0IENvb2tpZUphcihXZWJLaXQ6OldlYkNvb2tpZUphciog
d2ViQ29va2llSmFyKQorICAgIHsKKyAgICAgICAgbV93ZWJDb29raWVKYXIgPSB3ZWJDb29raWVK
YXI7CisgICAgfTsKKyNlbmRpZgogCiAgICAgLy8gY29va2llcyBvbWl0cyBIdHRwT25seSBjb29r
aWVzLgotICAgIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwot
ICAgIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVu
dCopOwotICAgIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
LCBWZWN0b3I8Q29va2llPiYpOwotICAgIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50
KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBjb29raWVzKGNvbnN0
IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAgdm9pZCBzZXRDb29raWVzKGNv
bnN0IEtVUkwmLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBjb29raWVz
RW5hYmxlZChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOworICAgIGJvb2wgZ2V0UmF3Q29va2ll
cyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7CisgICAgdm9pZCBk
ZWxldGVDb29raWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7CiAgICAgdm9p
ZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7CiAgICAg
dm9pZCBkZWxldGVBbGxDb29raWVzKCk7CiAKLX0KKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK3By
aXZhdGU6CisgICAgV2ViS2l0OjpXZWJDb29raWVKYXIqIG1fd2ViQ29va2llSmFyOworI2VuZGlm
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgJKHJldmlz
aW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3Jt
U3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxNCArNzgsNiBAQCBzdHJ1Y3QgRm9udFJl
bmRlclN0eWxlOwogCiBjbGFzcyBQbGF0Zm9ybVN1cHBvcnQgewogcHVibGljOgotICAgIC8vIENv
b2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gICAgc3RhdGljIHZvaWQgc2V0Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgc3RhdGljIFN0cmluZyBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsK
LSAgICBzdGF0aWMgYm9vbCByYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYs
IFZlY3RvcjxDb29raWU+Jik7Ci0gICAgc3RhdGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSk7Ci0gICAgc3Rh
dGljIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKLQogICAgIC8vIEZvbnQg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAjaWYgT1MoV0lORE9XUykKICAgICBzdGF0aWMgYm9vbCBlbnN1cmVGb250TG9hZGVk
KEhGT05UKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUg
IkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjY4LDcgKzI3MCw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ28KIAogICAgIEtVUkwgbW92aWVVUkwgPSBLVVJMKEtV
UkwoKSwgdXJsKTsKICAgICBWZWN0b3I8Q29va2llPiBkb2N1bWVudENvb2tpZXM7Ci0gICAgaWYg
KCFnZXRSYXdDb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCBtb3ZpZVVSTCwgZG9jdW1lbnRDb29r
aWVzKSkKKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmdl
dFJhd0Nvb2tpZXMobW92aWVVUkwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBk
b2N1bWVudENvb2tpZXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHNpemVfdCBuZHgg
PSAwOyBuZHggPCBkb2N1bWVudENvb2tpZXMuc2l6ZSgpOyBuZHgrKykgewpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCShyZXZpc2lvbiAxMzI3OTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC03Niw3ICs3Niw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyQ29va2llcygK
ICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBE
b2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC05NSw3ICs5NSw3IEBAIFN0cmlu
ZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1UKICAgICByZXR1cm4gU3RyaW5nKCk7
CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9y
Q29va2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTE0
LDcgKzExNCw3IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24KICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCit2b2lkIENvb2tp
ZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlG
b3JDb29raWVzLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKIHsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiAKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkIHNldENvb2tpZXMoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zCiAKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCiAg
ICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNvb2tpZVN0b3JhZ2Ug
PSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQotICAgICAgICB3a1NldEhUVFBDb29raWVz
Rm9yVVJMKGNmQ29va2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29r
aWVVUkwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICAgICAgd2tTZXRI
VFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5n
ZXQoKSwgY29va2llVVJMLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiAgICAgZWxzZQogI2VuZGlm
CiAgICAgICAgIFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0g
c2V0Q29va2llczpmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9j
dW1lbnRVUkw6ZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCldOwpAQCAtMTQwLDcgKzE0
MCw3IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERv
Y3VtZW50KikKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVy
bCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0xNTgsNyArMTU4LDcgQEAgYm9vbCBjb29raWVz
RW5hYmxlZChjb25zdCBEb2N1bWVudCopCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGdl
dFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29r
aWU+JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29r
aWU+JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBnZXRSYXdDb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRl
bGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBjb29raWVOYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CiAKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBE
b2N1bWVudCosIGNvbnN0CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9p
ZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3Zv
aWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhv
c3RuYW1lcykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgCkBAIC0y
MzgsNyArMjM4LDcgQEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgog
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIApAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRl
bGV0ZUFsbENvb2tpZXMoKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAg
ICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZO
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
Q29va2llSmFyQ0ZOZXQuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llU3Rv
cmFnZUNGTmV0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgpAQCAt
OTUsNyArOTQsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZpbHRlckNvb2tpCiAg
ICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKIH0KIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBD
b29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBh
cnR5Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAvLyA8cmRhcjovL3By
b2JsZW0vNTYzMjg4Mz4gQ0ZIVFRQQ29va2llU3RvcmFnZSBzdG9yZXMgYW4gZW1wdHkgY29va2ll
LCB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgogICAgIGlmICh2YWx1ZS5pc0Vt
cHR5KCkpCkBAIC0xMDYsNyArMTA1LDcgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1
bWVudCwgY29ucwogICAgICAgICByZXR1cm47CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVy
bENGKEFkb3B0Q0YsIHVybC5jcmVhdGVDRlVSTCgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+
IGZpcnN0UGFydHlGb3JDb29raWVzQ0YoQWRvcHRDRiwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JD
b29raWVzKCkuY3JlYXRlQ0ZVUkwoKSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBh
cnR5Rm9yQ29va2llc0NGKEFkb3B0Q0YsIGZpcnN0UGFydHlGb3JDb29raWVzLmNyZWF0ZUNGVVJM
KCkpOwogCiAgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1
MzE+LCA8cmRhcjovLzQ0MDkwMzQ+CiAgICAgLy8gY29va2llc1dpdGhSZXNwb25zZUhlYWRlckZp
ZWxkcyBkb2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBhIHZhbHVlCkBAIC0xMjMsNyArMTIy
LDcgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIENGSFRU
UENvb2tpZVN0b3JhZ2VTZXRDb29raWVzKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRlckNvb2tp
ZXMoY29va2llc0NGLmdldCgpKS5nZXQoKSwgdXJsQ0YuZ2V0KCksIGZpcnN0UGFydHlGb3JDb29r
aWVzQ0YuZ2V0KCkpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1
bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAg
IFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVu
dENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0xMzcs
NyArMTM2LDcgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbgogICAg
IHJldHVybiAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVhZGVyQ0YuZ2V0KCks
IHNfY29va2llQ0YpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
Y29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENv
b2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTE1MSw3ICsxNTAsNyBAQCBT
dHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIChDRlN0
cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRik7
CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykK
K2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25z
dCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgQ0ZIVFRQQ29va2llU3Rv
cmFnZUFjY2VwdFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5
T25seUZyb21NYWluRG9jdW1lbnREb21haW47CiAgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2Uo
KSkKQEAgLTE1OSw3ICsxNTgsNyBAQCBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50
KiAvKmRvCiAgICAgcmV0dXJuIHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9s
aWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRUUENvb2tpZVN0
b3JhZ2VBY2NlcHRQb2xpY3lBbHdheXM7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBE
b2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiti
b29sIENvb2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwm
IC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7
CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9y
YWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKQEAg
LTE5Myw3ICsxOTIsNyBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25z
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50
KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIENvb2tpZUphcjo6
ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAg
IFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVu
dENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0yMTQs
NyArMjEzLDcgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAg
IH0KIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhv
c3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0
PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAg
aWYgKCFjb29raWVTdG9yYWdlKQpAQCAtMjMyLDcgKzIzMSw3IEBAIHZvaWQgZ2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoSGFzaFNldDxTdHIKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTI1MSw3ICsyNTAs
NyBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpCiAgICAgfQogfQog
Ci12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tp
ZXMoKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9y
YWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3Jh
Z2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tp
ZUphckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24gMTMyNzkzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJv
bWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDUyICszMiw3NCBAQAogI2luY2x1ZGUgIkNv
b2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29va2ll
Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYkNvb2tpZUphci5oPgorI2luY2x1ZGUgPHB1YmxpYy9X
ZWJTdHJpbmcuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMLmg+CisjaW5jbHVkZSA8cHVibGlj
L1dlYlZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgc2V0Q29va2llcyhE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgUGxhdGZv
cm1TdXBwb3J0OjpzZXRDb29raWVzKGRvY3VtZW50LCB1cmwsIHZhbHVlKTsKKyAgICBpZiAobV93
ZWJDb29raWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5zZXRDb29raWUodXJsLCBmaXJz
dFBhcnR5Rm9yQ29va2llcywgdmFsdWUpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tp
ZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsK
LSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzKGRvY3VtZW50LCB1cmwpOworICAg
IGlmICghbV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1
cm4gbV93ZWJDb29raWVKYXItPmNvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9
CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0
eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7CisgICAgaWYgKCFtX3dlYkNvb2tpZUph
cikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX3dlYkNvb2tpZUphci0+
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7
CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQorYm9v
bCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29v
a2llc0VuYWJsZWQoZG9jdW1lbnQpOworICAgIGlmICghbV93ZWJDb29raWVKYXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV93ZWJDb29raWVKYXItPmNvb2tpZXNFbmFibGVk
KHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgVmVjdG9yPENvb2tpZT4mIHJhd0Nv
b2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6cmF3Q29va2llcyhkb2N1bWVu
dCwgdXJsLCByYXdDb29raWVzKTsKKyAgICByYXdDb29raWVzLmNsZWFyKCk7CisgICAgV2ViS2l0
OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJDb29raWU+IHdlYkNvb2tpZXM7CisKKyAgICBpZiAobV93
ZWJDb29raWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5yYXdDb29raWVzKHVybCwgZmly
c3RQYXJ0eUZvckNvb2tpZXMsIHdlYkNvb2tpZXMpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgV2ViS2l0OjpX
ZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07CisgICAgICAgIENvb2tpZSBjb29r
aWUod2ViQ29va2llLm5hbWUsIHdlYkNvb2tpZS52YWx1ZSwgd2ViQ29va2llLmRvbWFpbiwgd2Vi
Q29va2llLnBhdGgsIHdlYkNvb2tpZS5leHBpcmVzLCB3ZWJDb29raWUuaHR0cE9ubHksIHdlYkNv
b2tpZS5zZWN1cmUsIHdlYkNvb2tpZS5zZXNzaW9uKTsKKyAgICAgICAgcmF3Q29va2llcy5hcHBl
bmQoY29va2llKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29v
a2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGNvb2tpZU5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1
cHBvcnQ6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgdXJsLCBjb29raWVOYW1lKTsKKyAgICBpZiAo
bV93ZWJDb29raWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5kZWxldGVDb29raWUodXJs
LCBjb29raWVOYW1lKTsKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0
PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IE5v
dCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29u
c3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9z
dG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5
ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2ll
SmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1l
bnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tp
ZUphckN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAKICNpbmNsdWRl
ICJDb29raWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
QEAgLTI2LDM3ICsyNSwzNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBjb29raWVKYXI7CitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gc19jb29raWVKYXI7CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogLypkb2N1bWVu
dCovLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUph
cjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZv
ckNvb2tpZXMqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBjb29raWVKYXIuc2V0KHVy
bC5zdHJpbmcoKSwgdmFsdWUpOworICAgIHNfY29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZh
bHVlKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywg
Y29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKLSAgICByZXR1cm4g
Y29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOworICAgIHJldHVybiBzX2Nvb2tpZUphci5nZXQo
dXJsLnN0cmluZygpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBD
b29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIC8vIEZJWE1FOiBp
bmNsdWRlIEh0dHBPbmx5IGNvb2tpZS4KLSAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwuc3Ry
aW5nKCkpOworICAgIHJldHVybiBzX2Nvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKIH0KIAot
Ym9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBD
b29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwm
IC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29r
aWU+JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VS
TCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8
Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRl
ZAogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0
cnVlIHdoZW4gaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1l
bnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVD
b29raWUoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykK
IHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpAQCAtNjgsMTcgKzY3LDE3
IEBAIHZvaWQgc2V0Q29va2llU3RvcmFnZVByaXZhdGVCcm93c2luZ0VuYWIKIH0KICNlbmRpZgog
Ci12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVz
KQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5n
PiYgLypob3N0bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAog
fQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcm
IC8qaG9zdG5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQog
Ci12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tp
ZXMoKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5j
cHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
d2luL0Nvb2tpZUphcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAog
I2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8d2luZG93cy5oPgog
I2luY2x1ZGUgPFdpbmluZXQuaD4KQEAgLTM2LDE1ICszNSwxNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29r
aWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyov
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIC8vIEZJWE1FOiBEZWFsIHdpdGggZG9jdW1l
bnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkuCisgICAgLy8gRklYTUU6IERlYWwgd2l0aCBmaXJz
dFBhcnR5Rm9yQ29va2llcy4KICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwogICAgIFN0
cmluZyB2YWwgPSB2YWx1ZTsKICAgICBJbnRlcm5ldFNldENvb2tpZShzdHIuY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSwgMCwgdmFsLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCkpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBj
b25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIFN0cmluZyBz
dHIgPSB1cmwuc3RyaW5nKCk7CiAKQEAgLTYzLDQwICs2Myw0MCBAQCBTdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCogLypkb2N1bWVuCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVy
KTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJz
dFBhcnR5Rm9yQ29va2llcykKIHsKICAgICAvLyBGSVhNRTogaW5jbHVkZSBIdHRwT25seSBjb29r
aWUKLSAgICByZXR1cm4gY29va2llcyhkb2N1bWVudCwgdXJsKTsKKyAgICByZXR1cm4gY29va2ll
cyh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChj
b25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLykKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0
IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9v
bCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VS
TCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykK
IHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogICAgIHJhd0Nvb2tpZXMuY2xl
YXIoKTsKICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQK
IH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgLyp1
cmwqLywgY29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90
IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTog
Tm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShj
b25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZShjb25zdCBTdHJpbmcmIC8qaG9zdG5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90
IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29r
aWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxl
bWVudGVkCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlz
aW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzOTIsNyArMTM5Miw3IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0
VmFsdWVGb3JVUkwoTlBOVVIKICAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7CiAgICAgICAgICAg
ICBGcmFtZSogZnJhbWUgPSBnZXRGcmFtZShwYXJlbnRGcmFtZSgpLCBtX2VsZW1lbnQpOwogICAg
ICAgICAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ1N0cmluZyBjb29r
aWVTdHIgPSBjb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCB1KS51dGY4KCk7CisgICAgICAgICAg
ICAgICAgY29uc3QgQ1N0cmluZyBjb29raWVTdHIgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgp
LT5jb29raWVKYXIoKS5jb29raWVzKHUsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9y
Q29va2llcygpKS51dGY4KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFjb29raWVTdHIuaXNOdWxs
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHNpemUgPSBjb29raWVTdHIubGVu
Z3RoKCk7CiAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihO
UE5fTWVtQWxsb2Moc2l6ZSsxKSk7CkBAIC0xNDU0LDcgKzE0NTQsNyBAQCBOUEVycm9yIFBsdWdp
blZpZXc6OnNldFZhbHVlRm9yVVJMKE5QTlVSCiAgICAgICAgICAgICBjb25zdCBTdHJpbmcgY29v
a2llU3RyID0gU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSwgbGVuKTsKICAgICAgICAgICAgIEZyYW1l
KiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7CiAgICAgICAgICAg
ICBpZiAoZnJhbWUgJiYgIWNvb2tpZVN0ci5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgc2V0
Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSwgY29va2llU3RyKTsKKyAgICAgICAgICAgICAg
ICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVzKHUsIGZy
YW1lLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVTdHIpOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOwogICAg
ICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzI4
MTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE5IEBACisyMDEyLTEwLTI5ICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5j
dGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1
Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3Jp
cHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjb29raWVK
YXIpOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaDoKKyAgICAgICAgKEZy
YW1lTG9hZGVyQ2xpZW50SW1wbCk6CisgICAgICAgICogc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0xMC0yOSAgRXVnZW5lIEtseXVjaG5pa292ICA8
ZXVzdGFzLmJ1Z0BnbWFpbC5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVGltZWxpbmU6
IG1ha2UgY3B1LW1vbml0b3JpbmcgZmVhdHVyZSBhdmFpbGFibGUgb25seSBvbiBjYXBhYmxlIGJy
b3dzZXJzCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVu
dEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1l
TG9hZGVyQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2NTEsNSArMTY1MSwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hX
aWxsCiB9CiAjZW5kaWYKIAorV2ViQ29yZTo6Q29va2llSmFyIEZyYW1lTG9hZGVyQ2xpZW50SW1w
bDo6Y29va2llSmFyKCkKK3sKKyAgICBpZiAoIW1fd2ViRnJhbWUgfHwgIW1fd2ViRnJhbWUtPmNs
aWVudCgpKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKDApOworICAgIFdlYkNv
b2tpZUphciogd2ViQ29va2llSmFyID0gbV93ZWJGcmFtZS0+Y2xpZW50KCktPmNvb2tpZUphciht
X3dlYkZyYW1lKTsKKyAgICBpZiAoIXdlYkNvb2tpZUphcikKKyAgICAgICAgd2ViQ29va2llSmFy
ID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jb29raWVKYXIoKTsKKyAgICByZXR1cm4g
V2ViQ29yZTo6Q29va2llSmFyKHdlYkNvb2tpZUphcik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJ
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2Fk
ZXJDbGllbnRJbXBsLmgJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiAr
MjI1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTdGFydFVzaW5n
UGVlckNvbm5lY3Rpb25IYW5kbGVyKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlciop
IE9WRVJSSURFOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZUphciBjb29r
aWVKYXIoKSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICB2b2lkIG1ha2VEb2N1bWVudFZpZXco
KTsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBv
cnQuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Q
bGF0Zm9ybVN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsODYgKzEwMCw2IEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFdl
YkNvb2tpZUphciogZ2V0Q29va2llSmFyKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAg
ICBXZWJGcmFtZUltcGwqIGZyYW1lSW1wbCA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3Vt
ZW50LT5mcmFtZSgpKTsKLSAgICBpZiAoIWZyYW1lSW1wbCB8fCAhZnJhbWVJbXBsLT5jbGllbnQo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBmcmFt
ZUltcGwtPmNsaWVudCgpLT5jb29raWVKYXIoZnJhbWVJbXBsKTsKLSAgICBpZiAoIWNvb2tpZUph
cikKLSAgICAgICAgY29va2llSmFyID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jb29r
aWVKYXIoKTsKLSAgICByZXR1cm4gY29va2llSmFyOwotfQotCi0vLyBDb29raWVzIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLXZvaWQgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29raWVzKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0g
Z2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29r
aWVKYXItPnNldENvb2tpZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB2
YWx1ZSk7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXMoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAg
ICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAg
aWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzKHVybCwg
ZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLVN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsKQotewotICAgIFN0cmluZyBy
ZXN1bHQ7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1l
bnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBQbGF0Zm9ybVN1cHBvcnQ6
OnJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZl
Y3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAg
ICBXZWJWZWN0b3I8V2ViQ29va2llPiB3ZWJDb29raWVzOwotCi0gICAgV2ViQ29va2llSmFyKiBj
b29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0g
ICAgICAgIGNvb2tpZUphci0+cmF3Q29va2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9y
Q29va2llcygpLCB3ZWJDb29raWVzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3
ZWJDb29raWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvb2tpZSYgd2ViQ29v
a2llID0gd2ViQ29va2llc1tpXTsKLSAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUudmFsdWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgd2ViQ29va2llLmRvbWFpbiwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29r
aWUucGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuZXhwaXJlcywKLSAgICAg
ICAgICAgICAgICAgICAgICB3ZWJDb29raWUuaHR0cE9ubHksCi0gICAgICAgICAgICAgICAgICAg
ICAgd2ViQ29va2llLnNlY3VyZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2Vz
c2lvbik7Ci0gICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNvb2tpZSk7Ci0gICAgfQotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tp
ZU5hbWUpCi17Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9j
dW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+ZGVsZXRlQ29v
a2llKHVybCwgY29va2llTmFtZSk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVz
RW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBm
YWxzZTsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVu
dCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29r
aWVzRW5hYmxlZChkb2N1bWVudC0+Y29va2llVVJMKCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9y
Q29va2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiAvLyBGb250IC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKICNpZiBPUyhXSU5ET1dTKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171280</attachid>
            <date>2012-10-29 10:42:13 -0700</date>
            <delta_ts>2012-10-29 11:20:55 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-99340-20121029134034.patch</filename>
            <type>text/plain</type>
            <size>39783</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBACisyMDEyLTEwLTI5ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92
ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1h
dGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFk
ZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpwcm9j
ZXNzQnVmZmVyKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFu
ZHNoYWtlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNs
aWVudEhhbmRzaGFrZVJlcXVlc3QpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzZXRDb29raWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAg
ICAgICAoRG9jdW1lbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKToKKyAg
ICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnQ6OmNvb2tpZUphcik6CisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yOjpjb29raWVFbmFibGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9Db29raWVKYXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29va2llSmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Q29va2llSmFyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaDoKKyAgICAgICAgKFBsYXRmb3JtU3Vw
cG9ydCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2V0VXBDb29raWVzRm9yUXVpY2tUaW1l
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL0Nvb2tpZUphckNGTmV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0
Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRl
QWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVK
YXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpD
b29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpk
ZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tp
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29r
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxD
b29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2ll
SmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFs
bENvb2tpZXMpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6CisKIDIwMTItMTAtMjkgIEFsZXhhbmRydSBDaGlj
dWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1MgU2hhZGVyc10gRXh0cmFj
dCB0aGUgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCB0byBpdHMgb3duIGZpbGUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hh
bm5lbC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcgKzQz
MCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0J1ZmZlcigpCiAgICAgICAgICAg
ICBpZiAobV9pZGVudGlmaWVyKQogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKG1fZG9jdW1lbnQsIG1f
aWRlbnRpZmllciwgbV9oYW5kc2hha2UtPnNlcnZlckhhbmRzaGFrZVJlc3BvbnNlKCkpOwogICAg
ICAgICAgICAgaWYgKCFtX2hhbmRzaGFrZS0+c2VydmVyU2V0Q29va2llKCkuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGNvb2tpZXNFbmFibGVkKG1fZG9jdW1lbnQpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmNvb2tpZXNFbmFibGVkKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsgLy8gRXhjZXB0aW9uIChmb3Igc2FuZGJveGVk
IGRvY3VtZW50cykgaWdub3JlZC4KICAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+c2V0
Q29va2llKG1faGFuZHNoYWtlLT5zZXJ2ZXJTZXRDb29raWUoKSwgZWMpOwogICAgICAgICAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRI
YW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29j
a2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNiArMzksOSBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUg
IkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgpAQCAtMjAwLDcgKzIwMywxMCBAQCBDU3RyaW5nIFdlYlNvY2tldEhh
bmRzaGFrZTo6Y2xpZW50SGFuZHNoCiAgICAgS1VSTCB1cmwgPSBodHRwVVJMRm9yQXV0aGVudGlj
YXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYgKG1fY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAg
ICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9jb250
ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGRvY3VtZW50LCB1cmwpOworICAgICAgICBTdHJpbmcgY29va2llOworICAgICAgICBGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAgICAgaWYgKGZyYW1lKQorICAgICAg
ICAgICAgY29va2llID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSk7CiAgICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGZp
ZWxkcy5hcHBlbmQoIkNvb2tpZTogIiArIGNvb2tpZSk7CiAgICAgICAgIC8vIFNldCAiQ29va2ll
MjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBleGlzdHMgZm9yIHVybD8KQEAgLTI0OSw3ICsyNTUs
MTIgQEAgUGFzc1JlZlB0cjxXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0PiBXZQogICAgIEtVUkwg
dXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2llcygpOwogICAgIGlmIChtX2Nv
bnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0
aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4dCk7Ci0gICAgICAgIFN0cmluZyBjb29raWUgPSBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAgICAgICAgU3Ry
aW5nIGNvb2tpZTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Cisg
ICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOworICAgICAgICAgICAgY29va2ll
ID0gY29va2llSmFyLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwgZG9jdW1lbnQt
PmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgICAgICB9CiAgICAgICAgIGlmICghY29va2ll
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlcXVlc3QtPmFkZEhlYWRlckZpZWxkKCJDb29raWUi
LCBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxjb29raWU+IiBpZiBjb29raWVz
IDIgZXhpc3RzIGZvciB1cmw/CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9u
IDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4MTYsNyArMzgxNiw5IEBAIFN0cmluZyBEb2N1bWVudDo6Y29va2llKEV4Y2VwdGlv
bkNvZGUmIGUKICAgICBpZiAoY29va2llVVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCi0gICAgcmV0dXJuIGNvb2tpZXModGhpcywgY29va2llVVJMKTsKKyAgICBpZiAo
IWZyYW1lKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+
bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldENvb2tpZShj
b25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTM4MzcsNyArMzgzOSwy
MyBAQCB2b2lkIERvY3VtZW50OjpzZXRDb29raWUoY29uc3QgU3RyaW5nJiB2CiAgICAgaWYgKGNv
b2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldENvb2tpZXModGhp
cywgY29va2llVVJMLCB2YWx1ZSk7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm47
CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVz
KGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUpOworfQorCiti
b29sIERvY3VtZW50Ojpjb29raWVzRW5hYmxlZCgpCit7CisgICAgaWYgKCFwYWdlKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVF
bmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZnJhbWUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT5jbGll
bnQoKS0+Y29va2llSmFyKCkuY29va2llc0VuYWJsZWQodGhpcy0+Y29va2llVVJMKCksIHRoaXMt
PmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwogfQogCiBTdHJpbmcgRG9jdW1lbnQ6OnJlZmVycmVy
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMzI3OTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODE3LDYgKzgx
Nyw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjb29raWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0
OwogICAgIHZvaWQgc2V0Q29va2llKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBib29sIGNvb2tpZXNFbmFibGVkKCk7CiAKICAgICBTdHJpbmcgcmVmZXJyZXIoKSBjb25zdDsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw4IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9u
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uRXJyb3IuaCIKQEAgLTUxMiw5ICs1
MTQsMTAgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJybwogICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUoKSkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0g
YWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tp
ZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwogICAgICAgICBm
b3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0
ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgIFZlY3RvcjxDb29raWU+IGRv
Y0Nvb2tpZXNMaXN0OwotICAgICAgICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZ2V0UmF3
Q29va2llcyhkb2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCksIGRvY0Nvb2tpZXNM
aXN0KTsKKyAgICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGNvb2tpZUphci5nZXRS
YXdDb29raWVzKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSwgZG9jQ29va2llc0xpc3QpOwogICAgICAgICAgICAgaWYgKCFyYXdDb29r
aWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBkdXBs
aWNhdGlvbiBjaGVja2luZyBmb3IgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBjb29raWVz
LgogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNTUwLDggKzU1Myw5
IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXIKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2Vz
VVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1l
LT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxL
VVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMu
ZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVDb29raWUoZG9jdW1lbnQs
IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVOYW1lKTsKKyAgICAgICAgICAgIGNv
b2tpZUphci5kZWxldGVDb29raWUoS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCksIGNvb2tpZU5h
bWUpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
Q2xpZW50LmgJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaWZuZGVm
IEZyYW1lTG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRfaAogCisjaW5j
bHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1
ZGUgIkljb25VUkwuaCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmVzLmgiCkBAIC02NCw2ICs2
NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTsKICAgICBjbGFzcyBDYWNoZWRGcmFtZTsKICAgICBjbGFzcyBDb2xvcjsKKyAgICBjbGFz
cyBDb29raWVKYXI7CiAgICAgY2xhc3MgRE9NV2luZG93RXh0ZW5zaW9uOwogICAgIGNsYXNzIERP
TVdyYXBwZXJXb3JsZDsKICAgICBjbGFzcyBEb2N1bWVudExvYWRlcjsKQEAgLTM0OSw2ICszNTEs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN0YXJ0VXNpbmdQZWVyQ29ubmVjdGlvbkhhbmRs
ZXIoUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKikgeyB9CiAjZW5kaWYKKworICAgICAgICB2aXJ0
dWFsIENvb2tpZUphciBjb29raWVKYXIoKSB7IHJldHVybiBDb29raWVKYXIoKTsgfQogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2
aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5j
cHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIk5hdmlnYXRvci5oIgogCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVk
ZSAiRE9NTWltZVR5cGVBcnJheS5oIgogI2luY2x1ZGUgIkRPTVBsdWdpbkFycmF5LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKQEAgLTExOCw3ICsxMTcsNyBAQCBib29sIE5hdmlnYXRvcjo6Y29v
a2llRW5hYmxlZCgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSAmJiAhbV9mcmFtZS0+
cGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHJldHVybiBjb29raWVzRW5hYmxlZChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAg
ICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29va2llc0VuYWJsZWQoKTsKIH0KIAogYm9v
bCBOYXZpZ2F0b3I6OmphdmFFbmFibGVkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0Nvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Db29raWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTAgQEAKICNpZm5kZWYg
Q29va2llSmFyX2gKICNkZWZpbmUgQ29va2llSmFyX2gKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVN
KQorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgpAQCAtMzMsMjMgKzM3LDQyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotICAgIGNsYXNzIERvY3VtZW50OwotICAgIGNsYXNzIEtVUkw7CitjbGFzcyBLVVJMOwor
c3RydWN0IENvb2tpZTsKIAotICAgIHN0cnVjdCBDb29raWU7CitjbGFzcyBDb29raWVKYXIgewor
cHVibGljOgorICAgIENvb2tpZUphcigpCisgICAgeworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQor
ICAgICAgICBtX3dlYkNvb2tpZUphciA9IDA7CisjZW5kaWYKKyAgICB9OworI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorICAgIGV4cGxpY2l0IENvb2tpZUphcihXZWJLaXQ6OldlYkNvb2tpZUphciog
d2ViQ29va2llSmFyKQorICAgIHsKKyAgICAgICAgbV93ZWJDb29raWVKYXIgPSB3ZWJDb29raWVK
YXI7CisgICAgfTsKKyNlbmRpZgogCiAgICAgLy8gY29va2llcyBvbWl0cyBIdHRwT25seSBjb29r
aWVzLgotICAgIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwot
ICAgIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVu
dCopOwotICAgIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
LCBWZWN0b3I8Q29va2llPiYpOwotICAgIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50
KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBjb29raWVzKGNvbnN0
IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAgdm9pZCBzZXRDb29raWVzKGNv
bnN0IEtVUkwmLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBjb29raWVz
RW5hYmxlZChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOworICAgIGJvb2wgZ2V0UmF3Q29va2ll
cyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7CisgICAgdm9pZCBk
ZWxldGVDb29raWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7CiAgICAgdm9p
ZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7CiAgICAg
dm9pZCBkZWxldGVBbGxDb29raWVzKCk7CiAKLX0KKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK3By
aXZhdGU6CisgICAgV2ViS2l0OjpXZWJDb29raWVKYXIqIG1fd2ViQ29va2llSmFyOworI2VuZGlm
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgJKHJldmlz
aW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3Jt
U3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxNCArNzgsNiBAQCBzdHJ1Y3QgRm9udFJl
bmRlclN0eWxlOwogCiBjbGFzcyBQbGF0Zm9ybVN1cHBvcnQgewogcHVibGljOgotICAgIC8vIENv
b2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gICAgc3RhdGljIHZvaWQgc2V0Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgc3RhdGljIFN0cmluZyBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsK
LSAgICBzdGF0aWMgYm9vbCByYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYs
IFZlY3RvcjxDb29raWU+Jik7Ci0gICAgc3RhdGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSk7Ci0gICAgc3Rh
dGljIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKLQogICAgIC8vIEZvbnQg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAjaWYgT1MoV0lORE9XUykKICAgICBzdGF0aWMgYm9vbCBlbnN1cmVGb250TG9hZGVk
KEhGT05UKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUg
IkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjY4LDcgKzI3MCw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ28KIAogICAgIEtVUkwgbW92aWVVUkwgPSBLVVJMKEtV
UkwoKSwgdXJsKTsKICAgICBWZWN0b3I8Q29va2llPiBkb2N1bWVudENvb2tpZXM7Ci0gICAgaWYg
KCFnZXRSYXdDb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCBtb3ZpZVVSTCwgZG9jdW1lbnRDb29r
aWVzKSkKKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmdl
dFJhd0Nvb2tpZXMobW92aWVVUkwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBk
b2N1bWVudENvb2tpZXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHNpemVfdCBuZHgg
PSAwOyBuZHggPCBkb2N1bWVudENvb2tpZXMuc2l6ZSgpOyBuZHgrKykgewpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCShyZXZpc2lvbiAxMzI3OTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC03Niw3ICs3Niw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyQ29va2llcygK
ICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBE
b2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC05NSw3ICs5NSw3IEBAIFN0cmlu
ZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1UKICAgICByZXR1cm4gU3RyaW5nKCk7
CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9y
Q29va2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTE0
LDcgKzExNCw3IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24KICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCit2b2lkIENvb2tp
ZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlG
b3JDb29raWVzLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKIHsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiAKQEAgLTEzMiwxNSArMTMyLDE1IEBAIHZvaWQgc2V0Q29va2llcyhE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnMKIAogI2lmIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykK
ICAgICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNmQ29va2llU3RvcmFn
ZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCi0gICAgICAgIHdrU2V0SFRUUENvb2tp
ZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNv
b2tpZVVSTCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgICAgICB3a1Nl
dEhUVFBDb29raWVzRm9yVVJMKGNmQ29va2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyZWRDb29raWVz
LmdldCgpLCBjb29raWVVUkwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKICAgICBlbHNlCiAjZW5k
aWYKLSAgICAgICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdl
XSBzZXRDb29raWVzOmZpbHRlcmVkQ29va2llcy5nZXQoKSBmb3JVUkw6Y29va2llVVJMIG1haW5E
b2N1bWVudFVSTDpkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKV07CisgICAgICAgIFtb
TlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llczpm
aWx0ZXJlZENvb2tpZXMuZ2V0KCkgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9jdW1lbnRVUkw6Zmly
c3RQYXJ0eUZvckNvb2tpZXNdOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0K
IAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopCitib29sIENvb2tpZUphcjo6
Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBh
cnR5Rm9yQ29va2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApA
QCAtMTU4LDcgKzE1OCw3IEBAIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50
KiwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29v
a2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJz
dFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICBy
YXdDb29raWVzLmNsZWFyKCk7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAt
MTkxLDcgKzE5MSw3IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnMK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3ZvaWQgQ29va2ll
SmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5h
bWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0yMjUsNyArMjI1
LDcgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
SGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogICAgIApAQCAtMjM4LDcgKzIzOCw3IEBAIHZvaWQgZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHIKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhv
c3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAg
ICAKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25z
dCBTdHJpCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBkZWxldGVB
bGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAkocmV2aXNp
b24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVK
YXJDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUg
IkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgi
CiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKQEAgLTk1LDcgKzk0LDcgQEAgc3RhdGljIFJldGFp
blB0cjxDRkFycmF5UmVmPiBmaWx0ZXJDb29raQogICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7
CiB9CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiB7CiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tp
ZVN0b3JhZ2Ugc3RvcmVzIGFuIGVtcHR5IGNvb2tpZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAi
Q29va2llOiA9Ii4KICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQpAQCAtMTA2LDcgKzEwNSw3IEBA
IHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICAgICAgcmV0dXJu
OwogCiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxDRihBZG9wdENGLCB1cmwuY3JlYXRlQ0ZV
UkwoKSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9yQ29va2llc0NGKEFk
b3B0Q0YsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLmNyZWF0ZUNGVVJMKCkpOwor
ICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9wdENGLCBm
aXJzdFBhcnR5Rm9yQ29va2llcy5jcmVhdGVDRlVSTCgpKTsKIAogICAgIC8vIDxodHRwOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0PgogICAg
IC8vIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBjb29raWVz
IHdpdGhvdXQgYSB2YWx1ZQpAQCAtMTIzLDcgKzEyMiw3IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhj
b29raWVTdG9yYWdlLmdldCgpLCBmaWx0ZXJDb29raWVzKGNvb2tpZXNDRi5nZXQoKSkuZ2V0KCks
IHVybENGLmdldCgpLCBmaXJzdFBhcnR5Rm9yQ29va2llc0NGLmdldCgpKTsKIH0KIAotU3RyaW5n
IGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQor
U3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8q
Zmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAg
ICAgaWYgKCFjb29raWVTdG9yYWdlKQpAQCAtMTM3LDcgKzEzNiw3IEBAIFN0cmluZyBjb29raWVz
KGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW4KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGlj
dGlvbmFyeUdldFZhbHVlKGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotU3RyaW5n
IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50
Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9y
Q29va2llcyovKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29r
aWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tp
ZVN0b3JhZ2UpCkBAIC0xNTEsNyArMTUwLDcgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGNvbgogICAgIHJldHVybiAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoaGVhZGVyQ0YuZ2V0KCksIHNfY29va2llQ0YpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVk
KGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIENvb2tpZUphcjo6Y29va2llc0Vu
YWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29v
a2llcyovKQogewogICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kgcG9saWN5ID0g
Q0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWlu
OwogICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFn
ZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCkBAIC0xNTksNyArMTU4LDcgQEAgYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkbwogICAgIHJldHVybiBwb2xpY3kg
PT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9t
YWluIHx8IHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5QWx3YXlzOwog
fQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmws
IFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8s
IFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsK
ICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1
cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CkBAIC0xOTMsNyArMTkyLDcgQEAgYm9vbCBnZXRS
YXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAg
ICAgaWYgKCFjb29raWVTdG9yYWdlKQpAQCAtMjE0LDcgKzIxMyw3IEBAIHZvaWQgZGVsZXRlQ29v
a2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAg
ICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTIz
Miw3ICsyMzEsNyBAQCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyCiAg
ICAgfQogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhv
c3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAo
IWNvb2tpZVN0b3JhZ2UpCkBAIC0yNTEsNyArMjUwLDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoY29uc3QgU3RyaQogICAgIH0KIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkK
K3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZI
VFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw1MiArMzIsNzQgQEAKICNpbmNsdWRlICJDb29raWVKYXIuaCIKIAogI2luY2x1ZGUgIkNv
b2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0
LmgiCisjaW5jbHVkZSA8cHVibGljL1dlYkNvb2tpZS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJD
b29raWVKYXIuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CisjaW5jbHVkZSA8cHVi
bGljL1dlYlVSTC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2ll
cyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQogewotICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1
bWVudCwgdXJsLCB2YWx1ZSk7CisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dl
YkNvb2tpZUphci0+c2V0Q29va2llKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIHZhbHVlKTsK
IH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
S1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9y
dDo6Y29va2llcyhkb2N1bWVudCwgdXJsKTsKKyAgICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVz
KHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwp
CitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVy
biBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50
LCB1cmwpOworICAgIGlmICghbV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICByZXR1cm4gbV93ZWJDb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVk
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxl
ZChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewot
ICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXNFbmFibGVkKGRvY3VtZW50KTsKKyAg
ICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IG1fd2ViQ29va2llSmFyLT5jb29raWVzRW5hYmxlZCh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVz
KTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFy
OjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZv
ckNvb2tpZXMsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewotICAgIHJldHVybiBQbGF0
Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2llcyk7CisgICAg
cmF3Q29va2llcy5jbGVhcigpOworICAgIFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViQ29v
a2llPiB3ZWJDb29raWVzOworCisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dl
YkNvb2tpZUphci0+cmF3Q29va2llcyh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzLCB3ZWJDb29r
aWVzKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViQ29va2llJiB3ZWJDb29raWUgPSB3ZWJD
b29raWVzW2ldOworICAgICAgICBDb29raWUgY29va2llKHdlYkNvb2tpZS5uYW1lLCB3ZWJDb29r
aWUudmFsdWUsIHdlYkNvb2tpZS5kb21haW4sIHdlYkNvb2tpZS5wYXRoLCB3ZWJDb29raWUuZXhw
aXJlcywgd2ViQ29va2llLmh0dHBPbmx5LCB3ZWJDb29raWUuc2VjdXJlLCB3ZWJDb29raWUuc2Vz
c2lvbik7CisgICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNvb2tpZSk7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQordm9pZCBDb29r
aWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2ll
TmFtZSkKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29raWUoZG9jdW1l
bnQsIHVybCwgY29va2llTmFtZSk7CisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBt
X3dlYkNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7CiB9CiAKLXZvaWQg
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lk
IENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhv
c3RuYW1lcyovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZv
aWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lk
IENvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0
bmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQg
ZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7
CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAJ
KHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNiBAQAogI2lu
Y2x1ZGUgIkNvb2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0yNiwzNyArMjUsMzcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY29va2ll
SmFyOworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHNfY29va2llSmFyOwogCi12b2lk
IHNldENvb2tpZXMoRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIGNvbnN0IFN0cmluZyYg
dmFsdWUpCiB7Ci0gICAgY29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsKKyAgICBz
X2Nvb2tpZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBjb29raWVz
KGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBD
b29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFy
dHlGb3JDb29raWVzKi8pCiB7Ci0gICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygp
KTsKKyAgICByZXR1cm4gc19jb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLVN0cmlu
ZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVu
dCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZv
ckNvb2tpZXMqLykKIHsKICAgICAvLyBGSVhNRTogaW5jbHVkZSBIdHRwT25seSBjb29raWUuCi0g
ICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKKyAgICByZXR1cm4gc19jb29r
aWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3Qg
RG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChj
b25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8p
CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29v
a2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8q
Zmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAg
ICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7
CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAK
LXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8s
IGNvbnN0IFN0cmluZyYgLypjb29raWVOYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKIH0KQEAgLTY4LDE3ICs2NywxNyBAQCB2b2lkIHNldENvb2tpZVN0b3JhZ2VQ
cml2YXRlQnJvd3NpbmdFbmFiCiB9CiAjZW5kaWYKIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7CiAgICAg
Ly8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkK
K3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhNRTogTm90
IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay93aW4vQ29va2llSmFyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNs
dWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZS5oIgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxXaW5pbmV0Lmg+CkBAIC0z
NiwxNSArMzUsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHNldENvb2tpZXMo
RG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQorCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsK
LSAgICAvLyBGSVhNRTogRGVhbCB3aXRoIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygp
LgorICAgIC8vIEZJWE1FOiBEZWFsIHdpdGggZmlyc3RQYXJ0eUZvckNvb2tpZXMuCiAgICAgU3Ry
aW5nIHN0ciA9IHVybC5zdHJpbmcoKTsKICAgICBTdHJpbmcgdmFsID0gdmFsdWU7CiAgICAgSW50
ZXJuZXRTZXRDb29raWUoc3RyLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIHZh
bC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENv
b2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0
eUZvckNvb2tpZXMqLykKIHsKICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwogCkBAIC02
Myw0MCArNjMsNDAgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbgog
ICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwm
IHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7CiAgICAg
Ly8gRklYTUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llCi0gICAgcmV0dXJuIGNvb2tpZXMoZG9j
dW1lbnQsIHVybCk7CisgICAgcmV0dXJuIGNvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2ll
cyk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQq
LykKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBj
b25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVz
KGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMq
LywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAv
LyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNv
bnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUph
cjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29r
aWVOYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9p
ZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3Zv
aWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8q
aG9zdG5hbWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAot
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3Zv
aWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhv
c3RuYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9p
ZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkK
IHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkyLDcgKzEz
OTIsNyBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlRm9yVVJMKE5QTlVSCiAgICAgICAg
IGlmICh1LmlzVmFsaWQoKSkgewogICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUo
cGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKICAgICAgICAgICAgIGlmIChmcmFtZSkgewotICAg
ICAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgY29va2llU3RyID0gY29va2llcyhmcmFtZS0+ZG9j
dW1lbnQoKSwgdSkudXRmOCgpOworICAgICAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgY29va2ll
U3RyID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llcyh1LCBm
cmFtZS0+ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSkudXRmOCgpOwogICAgICAg
ICAgICAgICAgIGlmICghY29va2llU3RyLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGludCBzaXplID0gY29va2llU3RyLmxlbmd0aCgpOwogICAgICAgICAgICAgICAgICAg
ICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxjaGFyKj4oTlBOX01lbUFsbG9jKHNpemUrMSkpOwpAQCAt
MTQ1NCw3ICsxNDU0LDcgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTChOUE5V
UgogICAgICAgICAgICAgY29uc3QgU3RyaW5nIGNvb2tpZVN0ciA9IFN0cmluZzo6ZnJvbVVURjgo
dmFsdWUsIGxlbik7CiAgICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBnZXRGcmFtZShwYXJlbnRG
cmFtZSgpLCBtX2VsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGZyYW1lICYmICFjb29raWVTdHIu
aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHNldENvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCks
IHUsIGNvb2tpZVN0cik7CisgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQo
KS0+Y29va2llSmFyKCkuc2V0Q29va2llcyh1LCBmcmFtZS0+ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSwgY29va2llU3RyKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBy
ZXN1bHQgPSBOUEVSUl9JTlZBTElEX1VSTDsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyODExKQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMC0y
OSAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9t
aXVtXSBSZW1vdmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9u
YWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUu
IFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisg
ICAgICAgICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y29va2llSmFyKToKKyAgICAgICAgKiBzcmMvRnJhbWVM
b2FkZXJDbGllbnRJbXBsLmg6CisgICAgICAgIChGcmFtZUxvYWRlckNsaWVudEltcGwpOgorICAg
ICAgICAqIHNyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIw
MTItMTAtMjkgIEV1Z2VuZSBLbHl1Y2huaWtvdiAgPGV1c3Rhcy5idWdAZ21haWwuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFRpbWVsaW5lOiBtYWtlIGNwdS1tb25pdG9yaW5nIGZlYXR1
cmUgYXZhaWxhYmxlIG9ubHkgb24gY2FwYWJsZSBicm93c2VycwpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCShyZXZp
c2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNs
aWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUxLDUgKzE2NTEsMTQgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoV2lsbAogfQogI2VuZGlmCiAKK1dlYkNvcmU6
OkNvb2tpZUphciBGcmFtZUxvYWRlckNsaWVudEltcGw6OmNvb2tpZUphcigpCit7CisgICAgaWYg
KCFtX3dlYkZyYW1lIHx8ICFtX3dlYkZyYW1lLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OkNvb2tpZUphcigwKTsKKyAgICBXZWJDb29raWVKYXIqIHdlYkNvb2tpZUphciA9IG1f
d2ViRnJhbWUtPmNsaWVudCgpLT5jb29raWVKYXIobV93ZWJGcmFtZSk7CisgICAgaWYgKCF3ZWJD
b29raWVKYXIpCisgICAgICAgIHdlYkNvb2tpZUphciA9IFdlYktpdDo6UGxhdGZvcm06OmN1cnJl
bnQoKS0+Y29va2llSmFyKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tpZUphcih3ZWJDb29r
aWVKYXIpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCShyZXZpc2lvbiAx
MzI3OTMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudElt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hXaWxsU3RhcnRVc2luZ1BlZXJDb25uZWN0aW9uSGFuZGxlcihXZWJD
b3JlOjpSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIqKSBPVkVSUklERTsKICNlbmRpZgogCisgICAg
dmlydHVhbCBXZWJDb3JlOjpDb29raWVKYXIgY29va2llSmFyKCkgT1ZFUlJJREU7CisKIHByaXZh
dGU6CiAgICAgdm9pZCBtYWtlRG9jdW1lbnRWaWV3KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAkocmV2aXNpb24gMTMyNzkzKQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAwLDg2ICsxMDAsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBXZWJDb29raWVKYXIqIGdldENvb2tpZUphcihj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgV2ViRnJhbWVJbXBsKiBmcmFtZUltcGwg
PSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgaWYgKCFm
cmFtZUltcGwgfHwgIWZyYW1lSW1wbC0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IFdlYkNvb2tpZUphciogY29va2llSmFyID0gZnJhbWVJbXBsLT5jbGllbnQoKS0+Y29va2llSmFy
KGZyYW1lSW1wbCk7Ci0gICAgaWYgKCFjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphciA9IFdl
YktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y29va2llSmFyKCk7Ci0gICAgcmV0dXJuIGNvb2tp
ZUphcjsKLX0KLQotLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFBsYXRmb3JtU3VwcG9y
dDo6c2V0Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0g
ICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5zZXRDb29raWUodXJsLCBkb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUpOwotfQotCi1TdHJpbmcgUGxhdGZv
cm1TdXBwb3J0Ojpjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIg
PSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJl
c3VsdCA9IGNvb2tpZUphci0+Y29va2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJpbmcgUGxhdGZvcm1TdXBwb3J0
Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEtVUkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tpZUphciog
Y29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQot
ICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLWJvb2wgUGxhdGZvcm1TdXBwb3J0OjpyYXdDb29raWVzKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykK
LXsKLSAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgV2ViVmVjdG9yPFdlYkNvb2tpZT4gd2Vi
Q29va2llczsKLQotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRv
Y3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXItPnJhd0Nvb2tp
ZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgd2ViQ29va2llcyk7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBjb25zdCBXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07Ci0gICAg
ICAgIENvb2tpZSBjb29raWUod2ViQ29va2llLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
d2ViQ29va2llLnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5kb21haW4s
Ci0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnBhdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgd2ViQ29va2llLmV4cGlyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2ll
Lmh0dHBPbmx5LAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5zZWN1cmUsCi0gICAg
ICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlc3Npb24pOwotICAgICAgICByYXdDb29raWVz
LmFwcGVuZChjb29raWUpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0
Zm9ybVN1cHBvcnQ6OmRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewotICAgIFdlYkNvb2tpZUph
ciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFy
KQotICAgICAgICBjb29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwotfQot
Ci1ib29sIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50KQotewotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgV2ViQ29va2llSmFyKiBj
b29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0g
ICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llc0VuYWJsZWQoZG9jdW1lbnQtPmNvb2tp
ZVVSTCgpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQogLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgT1MoV0lORE9XUykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171282</attachid>
            <date>2012-10-29 11:21:00 -0700</date>
            <delta_ts>2012-10-29 11:30:06 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-99340-20121029141921.patch</filename>
            <type>text/plain</type>
            <size>48193</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjgyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0xMC0yOSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAg
ICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6Cisg
ICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAgICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29va2llRW5hYmxlZCk6CisgICAgICAgICogcGxh
dGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUph
cik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OkNvb2tpZUphcik6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1
cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGlt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNl
dENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
a2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2ll
SmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6
ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29v
a2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVB
bGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsdWdp
bnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1
ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6
CisKIDIwMTItMTAtMjkgIEFybmF1ZCBSZW5ldmllciAgPGEucmVuZXZpZXJAc2lzYS5zYW1zdW5n
LmNvbT4KIAogICAgICAgICB3ZWJ2aWV3IG5vdCByZWRyYXduIGFzIG5lZWRlZCB3aGVuIGFjY2Vs
ZXJhdGVkIGNvbXBvc2l0aW5nIGlzIGVuYWJsZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lv
biAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3ICs0MzAsNyBAQCBib29sIFdlYlNv
Y2tldENoYW5uZWw6OnByb2Nlc3NCdWZmZXIoKQogICAgICAgICAgICAgaWYgKG1faWRlbnRpZmll
cikKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVX
ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZShtX2RvY3VtZW50LCBtX2lkZW50aWZpZXIsIG1faGFu
ZHNoYWtlLT5zZXJ2ZXJIYW5kc2hha2VSZXNwb25zZSgpKTsKICAgICAgICAgICAgIGlmICghbV9o
YW5kc2hha2UtPnNlcnZlclNldENvb2tpZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAg
IGlmIChjb29raWVzRW5hYmxlZChtX2RvY3VtZW50KSkgeworICAgICAgICAgICAgICAgIGlmICht
X2RvY3VtZW50LT5jb29raWVzRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7IC8vIEV4Y2VwdGlvbiAoZm9yIHNhbmRib3hlZCBkb2N1bWVudHMpIGlnbm9y
ZWQuCiAgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnNldENvb2tpZShtX2hhbmRzaGFr
ZS0+c2VydmVyU2V0Q29va2llKCksIGVjKTsKICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYg
KzM5LDkgQEAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkhUVFBI
ZWFkZXJNYXAuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIktVUkwuaCIK
QEAgLTIwMCw3ICsyMDMsMTAgQEAgQ1N0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaAogICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2llcygp
OwogICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4dCk7Ci0gICAgICAgIFN0
cmluZyBjb29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJs
KTsKKyAgICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkKKyAgICAgICAgICAgIGNvb2tpZSA9IGZy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwogICAgICAg
ICBpZiAoIWNvb2tpZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCJDb29r
aWU6ICIgKyBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxjb29raWU+IiBpZiBj
b29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkBAIC0yNDksNyArMjU1LDEyIEBAIFBhc3NSZWZQdHI8
V2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdD4gV2UKICAgICBLVVJMIHVybCA9IGh0dHBVUkxGb3JB
dXRoZW50aWNhdGlvbkFuZENvb2tpZXMoKTsKICAgICBpZiAobV9jb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQq
PihtX2NvbnRleHQpOwotICAgICAgICBTdHJpbmcgY29va2llID0gY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7CisgICAgICAgIFN0cmluZyBjb29raWU7CisgICAg
ICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgICAgICBpZiAoZnJhbWUp
IHsKKyAgICAgICAgICAgIENvb2tpZUphciBjb29raWVKYXIgPSBmcmFtZS0+bG9hZGVyKCktPmNs
aWVudCgpLT5jb29raWVKYXIoKTsKKyAgICAgICAgICAgIGNvb2tpZSA9IGNvb2tpZUphci5jb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWNvb2tpZS5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXF1ZXN0LT5hZGRIZWFkZXJGaWVsZCgiQ29va2llIiwgY29va2llKTsKICAgICAg
ICAgLy8gU2V0ICJDb29raWUyOiA8Y29va2llPiIgaWYgY29va2llcyAyIGV4aXN0cyBmb3IgdXJs
PwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODE2LDcgKzM4
MTYsOSBAQCBTdHJpbmcgRG9jdW1lbnQ6OmNvb2tpZShFeGNlcHRpb25Db2RlJiBlCiAgICAgaWYg
KGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJl
dHVybiBjb29raWVzKHRoaXMsIGNvb2tpZVVSTCk7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQo
KS0+Y29va2llSmFyKCkuY29va2llcyhjb29raWVVUkwsIHRoaXMtPmZpcnN0UGFydHlGb3JDb29r
aWVzKCkpOwogfQogCiB2b2lkIERvY3VtZW50OjpzZXRDb29raWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0zODM3LDcgKzM4MzksMjMgQEAgdm9pZCBEb2N1bWVu
dDo6c2V0Q29va2llKGNvbnN0IFN0cmluZyYgdgogICAgIGlmIChjb29raWVVUkwuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRDb29raWVzKHRoaXMsIGNvb2tpZVVSTCwgdmFs
dWUpOworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGZyYW1lKCktPmxv
YWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuc2V0Q29va2llcyhjb29raWVVUkwsIHRoaXMt
PmZpcnN0UGFydHlGb3JDb29raWVzKCksIHZhbHVlKTsKK30KKworYm9vbCBEb2N1bWVudDo6Y29v
a2llc0VuYWJsZWQoKQoreworICAgIGlmICghcGFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIXBhZ2UoKS0+c2V0dGluZ3MoKS0+Y29va2llRW5hYmxlZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigp
LmNvb2tpZXNFbmFibGVkKHRoaXMtPmNvb2tpZVVSTCgpLCB0aGlzLT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKTsKIH0KIAogU3RyaW5nIERvY3VtZW50OjpyZWZlcnJlcigpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxNyw2ICs4MTcsNyBAQCBwdWJsaWM6CiAK
ICAgICBTdHJpbmcgY29va2llKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICB2b2lkIHNldENv
b2tpZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBjb29raWVzRW5h
YmxlZCgpOwogCiAgICAgU3RyaW5nIHJlZmVycmVyKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiAx
MzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOCBAQAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJHZW9sb2NhdGlvbkVycm9yLmgiCkBAIC01MTIsOSArNTE0LDEwIEBAIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm8KICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
IG1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQo
bWFpbkZyYW1lKCkpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1
bWVudCgpOwogICAgICAgICBWZWN0b3I8S1VSTD4gYWxsVVJMcyA9IGFsbFJlc291cmNlc1VSTHNG
b3JGcmFtZShmcmFtZSk7CisgICAgICAgIENvb2tpZUphciBjb29raWVKYXIgPSBmcmFtZS0+bG9h
ZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKTsKICAgICAgICAgZm9yIChWZWN0b3I8S1VSTD46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsVVJMcy5iZWdpbigpOyBpdCAhPSBhbGxVUkxzLmVuZCgp
OyArK2l0KSB7CiAgICAgICAgICAgICBWZWN0b3I8Q29va2llPiBkb2NDb29raWVzTGlzdDsKLSAg
ICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGdldFJhd0Nvb2tpZXMoZG9jdW1lbnQs
IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBkb2NDb29raWVzTGlzdCk7CisgICAgICAgICAg
ICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBjb29raWVKYXIuZ2V0UmF3Q29va2llcyhLVVJMKFBh
cnNlZFVSTFN0cmluZywgKml0KSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIGRv
Y0Nvb2tpZXNMaXN0KTsKICAgICAgICAgICAgIGlmICghcmF3Q29va2llc0ltcGxlbWVudGVkKSB7
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgZHVwbGljYXRpb24gY2hlY2tpbmcg
Zm9yIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29va2llcy4KICAgICAgICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTU1MCw4ICs1NTMsOSBAQCB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKEVyCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBWZWN0b3I8S1VSTD4gYWxsVVJMcyA9IGFsbFJlc291cmNlc1VSTHNGb3JGcmFtZShmcmFt
ZSk7CisgICAgICAgIENvb2tpZUphciBjb29raWVKYXIgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVu
dCgpLT5jb29raWVKYXIoKTsKICAgICAgICAgZm9yIChWZWN0b3I8S1VSTD46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gYWxsVVJMcy5iZWdpbigpOyBpdCAhPSBhbGxVUkxzLmVuZCgpOyArK2l0KQotICAg
ICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCBLVVJMKFBhcnNlZFVSTFN0
cmluZywgKml0KSwgY29va2llTmFtZSk7CisgICAgICAgICAgICBjb29raWVKYXIuZGVsZXRlQ29v
a2llKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVOYW1lKTsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lv
biAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmbmRlZiBGcmFtZUxvYWRlckNsaWVu
dF9oCiAjZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50X2gKIAorI2luY2x1ZGUgIkNvb2tpZUphci5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJJY29uVVJMLmgiCiAj
aW5jbHVkZSAiTGF5b3V0TWlsZXN0b25lcy5oIgpAQCAtNjQsNiArNjUsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CiAgICAgY2xhc3Mg
Q2FjaGVkRnJhbWU7CiAgICAgY2xhc3MgQ29sb3I7CisgICAgY2xhc3MgQ29va2llSmFyOwogICAg
IGNsYXNzIERPTVdpbmRvd0V4dGVuc2lvbjsKICAgICBjbGFzcyBET01XcmFwcGVyV29ybGQ7CiAg
ICAgY2xhc3MgRG9jdW1lbnRMb2FkZXI7CkBAIC0zNDksNiArMzUxLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaFdpbGxTdGFydFVzaW5nUGVlckNvbm5lY3Rpb25IYW5kbGVyKFJUQ1BlZXJDb25uZWN0
aW9uSGFuZGxlciopIHsgfQogI2VuZGlmCisKKyAgICAgICAgdmlydHVhbCBDb29raWVKYXIgY29v
a2llSmFyKCkgeyByZXR1cm4gQ29va2llSmFyKCk7IH0KICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiAxMzI3
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOYXZpZ2F0
b3IuaCIKIAotI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRPTU1pbWVUeXBlQXJy
YXkuaCIKICNpbmNsdWRlICJET01QbHVnaW5BcnJheS5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CkBAIC0xMTgsNyArMTE3LDcgQEAgYm9vbCBOYXZpZ2F0b3I6OmNvb2tpZUVuYWJsZWQoKSBjb25z
dAogICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkgJiYgIW1fZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3Mo
KS0+Y29va2llRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
Y29va2llc0VuYWJsZWQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIG1fZnJhbWUt
PmRvY3VtZW50KCktPmNvb2tpZXNFbmFibGVkKCk7CiB9CiAKIGJvb2wgTmF2aWdhdG9yOjpqYXZh
RW5hYmxlZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkocmV2
aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDEzIEBACiAjaWZuZGVmIENvb2tpZUphcl9oCiAjZGVm
aW5lIENvb2tpZUphcl9oCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlIDxwdWJs
aWMvV2ViQ29va2llSmFyLmg+CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJO
ZXR3b3JraW5nQ29udGV4dC5oIgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CkBAIC0zMywyMyArNDAsNTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3Mg
RG9jdW1lbnQ7Ci0gICAgY2xhc3MgS1VSTDsKK2NsYXNzIEtVUkw7CitzdHJ1Y3QgQ29va2llOwog
Ci0gICAgc3RydWN0IENvb2tpZTsKK2NsYXNzIENvb2tpZUphciB7CitwdWJsaWM6CisgICAgQ29v
a2llSmFyKCkKKyAgICB7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgIG1fd2ViQ29v
a2llSmFyID0gMDsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKFFUKQorICAgICAgICBtX25ldHdvcmtp
bmdDb250ZXh0ID0gMDsKKyNlbmRpZgorICAgIH07CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisg
ICAgZXhwbGljaXQgQ29va2llSmFyKFdlYktpdDo6V2ViQ29va2llSmFyKiB3ZWJDb29raWVKYXIp
CisgICAgeworICAgICAgICBtX3dlYkNvb2tpZUphciA9IHdlYkNvb2tpZUphcjsKKyAgICB9Owor
I2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisgICAgZXhwbGljaXQgQ29va2llSmFyKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgbV9uZXR3b3JraW5nQ29udGV4dCA9
IGNvbnRleHQ7CisgICAgfTsKKyNlbmRpZgogCiAgICAgLy8gY29va2llcyBvbWl0cyBIdHRwT25s
eSBjb29raWVzLgotICAgIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYpOwotICAgIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCopOwotICAgIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwotICAgIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBjb29raWVz
KGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAgdm9pZCBzZXRDb29r
aWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBj
b29raWVzRW5hYmxlZChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOworICAgIGJvb2wgZ2V0UmF3
Q29va2llcyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7CisgICAg
dm9pZCBkZWxldGVDb29raWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9p
ZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7CiAg
ICAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7
CiAgICAgdm9pZCBkZWxldGVBbGxDb29raWVzKCk7CiAKLX0KK3ByaXZhdGU6CisjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCisgICAgV2ViS2l0OjpXZWJDb29raWVKYXIqIG1fd2ViQ29va2llSmFyOwor
I2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisgICAgTmV0d29ya2luZ0NvbnRleHQqIG1fbmV0d29y
a2luZ0NvbnRleHQ7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBv
cnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0
Zm9ybVN1cHBvcnQuaAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDE0ICs3
OCw2IEBAIHN0cnVjdCBGb250UmVuZGVyU3R5bGU7CiAKIGNsYXNzIFBsYXRmb3JtU3VwcG9ydCB7
CiBwdWJsaWM6Ci0gICAgLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVz
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAg
IHN0YXRpYyBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAg
ICBzdGF0aWMgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyBib29sIHJhd0Nvb2tpZXMoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKLSAgICBzdGF0aWMgdm9pZCBk
ZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBj
b29raWVOYW1lKTsKLSAgICBzdGF0aWMgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVu
dCopOwotCiAgICAgLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZiBPUyhXSU5ET1dTKQogICAgIHN0YXRpYyBi
b29sIGVuc3VyZUZvbnRMb2FkZWQoSEZPTlQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9N
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAkocmV2aXNpb24gMTMy
NzkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw4IEBACiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2Fk
ZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5j
bHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJLVVJMLmgiCkBAIC0yNjgsNyArMjcw
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDbwogCiAgICAgS1VS
TCBtb3ZpZVVSTCA9IEtVUkwoS1VSTCgpLCB1cmwpOwogICAgIFZlY3RvcjxDb29raWU+IGRvY3Vt
ZW50Q29va2llczsKLSAgICBpZiAoIWdldFJhd0Nvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIG1v
dmllVVJMLCBkb2N1bWVudENvb2tpZXMpKQorICAgIGlmICghZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKS0+Y29va2llSmFyKCkuZ2V0UmF3Q29va2llcyhtb3ZpZVVSTCwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCksIGRvY3VtZW50Q29va2llcykpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGZvciAoc2l6ZV90IG5keCA9IDA7IG5keCA8IGRvY3VtZW50Q29va2llcy5zaXplKCk7IG5k
eCsrKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0JKHJl
dmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIFJldGFpblB0cjxOU0Fy
cmF5PiBmaWx0ZXJDb29raWVzKAogICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9CiAKLVN0
cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENv
b2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0
eUZvckNvb2tpZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAg
LTk1LDcgKzk1LDcgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVQog
ICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogCkBAIC0xMTQsNyArMTE0LDcgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBzZXRDb29r
aWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNv
b2tpZVN0cikKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQog
ewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTMyLDE1ICsxMzIsMTUg
QEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogCiAjaWYgVVNFKENG
VVJMU1RPUkFHRVNFU1NJT05TKQogICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkKLSAg
ICAgICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRl
cmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSk7CisgICAgICAgIHdrU2V0SFRUUENvb2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLmdl
dCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZmlyc3RQYXJ0eUZvckNvb2tp
ZXMpOwogICAgIGVsc2UKICNlbmRpZgotICAgICAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hh
cmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6ZmlsdGVyZWRDb29raWVzLmdldCgpIGZv
clVSTDpjb29raWVVUkwgbWFpbkRvY3VtZW50VVJMOmRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpXTsKKyAgICAgICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVT
dG9yYWdlXSBzZXRDb29raWVzOmZpbHRlcmVkQ29va2llcy5nZXQoKSBmb3JVUkw6Y29va2llVVJM
IG1haW5Eb2N1bWVudFVSTDpmaXJzdFBhcnR5Rm9yQ29va2llc107CiAKICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50
KikKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBj
b25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogCkBAIC0xNTgsNyArMTU4LDcgQEAgYm9vbCBjb29raWVzRW5hYmxl
ZChjb25zdCBEb2N1bWVudCopCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGdldFJhd0Nv
b2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBnZXRSYXdDb29raWVzKGNv
bnN0IERvY3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNv
b2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29r
aWVOYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29va2llTmFtZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CiAKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29v
a2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1l
cykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgCkBAIC0yMzgsNyAr
MjM4LDcgQEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogICAgIApAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFs
bENvb2tpZXMoKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2ll
SmFyQ0ZOZXQuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llU3RvcmFnZUNG
TmV0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgpAQCAtOTUsNyAr
OTQsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZpbHRlckNvb2tpCiAgICAgcmV0
dXJuIGZpbHRlcmVkQ29va2llczsKIH0KIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29raWVK
YXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9y
Q29va2llcywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAvLyA8cmRhcjovL3Byb2JsZW0v
NTYzMjg4Mz4gQ0ZIVFRQQ29va2llU3RvcmFnZSBzdG9yZXMgYW4gZW1wdHkgY29va2llLCB3aGlj
aCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgogICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkp
CkBAIC0xMDYsNyArMTA1LDcgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwg
Y29ucwogICAgICAgICByZXR1cm47CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFk
b3B0Q0YsIHVybC5jcmVhdGVDRlVSTCgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0
UGFydHlGb3JDb29raWVzQ0YoQWRvcHRDRiwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVz
KCkuY3JlYXRlQ0ZVUkwoKSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9y
Q29va2llc0NGKEFkb3B0Q0YsIGZpcnN0UGFydHlGb3JDb29raWVzLmNyZWF0ZUNGVVJMKCkpOwog
CiAgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzE+LCA8
cmRhcjovLzQ0MDkwMzQ+CiAgICAgLy8gY29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkcyBk
b2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBhIHZhbHVlCkBAIC0xMjMsNyArMTIyLDcgQEAg
dm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIENGSFRUUENvb2tp
ZVN0b3JhZ2VTZXRDb29raWVzKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRlckNvb2tpZXMoY29v
a2llc0NGLmdldCgpKS5nZXQoKSwgdXJsQ0YuZ2V0KCksIGZpcnN0UGFydHlGb3JDb29raWVzQ0Yu
Z2V0KCkpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCov
LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0xMzcsNyArMTM2
LDcgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbgogICAgIHJldHVy
biAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVhZGVyQ0YuZ2V0KCksIHNfY29v
a2llQ0YpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3Qg
RG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENv
b2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTE1MSw3ICsxNTAsNyBAQCBTdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIChDRlN0cmluZ1Jl
ZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRik7CiB9CiAK
LWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wg
Q29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJM
JiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFj
Y2VwdFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5T25seUZy
b21NYWluRG9jdW1lbnREb21haW47CiAgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9y
YWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkKQEAg
LTE1OSw3ICsxNTgsNyBAQCBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRv
CiAgICAgcmV0dXJuIHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5T25s
eUZyb21NYWluRG9jdW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VB
Y2NlcHRQb2xpY3lBbHdheXM7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENv
b2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmly
c3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAg
cmF3Q29va2llcy5jbGVhcigpOwogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKQEAgLTE5Myw3
ICsxOTIsNyBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRl
Q29va2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0yMTQsNyArMjEz
LDcgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAgIH0KIH0K
IAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1l
cykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmlu
Zz4mIGhvc3RuYW1lcykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4g
Y29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFj
b29raWVTdG9yYWdlKQpAQCAtMjMyLDcgKzIzMSw3IEBAIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHIKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTI1MSw3ICsyNTAsNyBAQCB2
b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpCiAgICAgfQogfQogCi12b2lk
IGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQog
ewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNo
cm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDUyICszMiw3NCBAQAogI2luY2x1ZGUgIkNvb2tpZUph
ci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29va2llLmg+Cisj
aW5jbHVkZSA8cHVibGljL1dlYkNvb2tpZUphci5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJp
bmcuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlZl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQg
Q29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQ
YXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgUGxhdGZvcm1TdXBw
b3J0OjpzZXRDb29raWVzKGRvY3VtZW50LCB1cmwsIHZhbHVlKTsKKyAgICBpZiAobV93ZWJDb29r
aWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5zZXRDb29raWUodXJsLCBmaXJzdFBhcnR5
Rm9yQ29va2llcywgdmFsdWUpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICBy
ZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzKGRvY3VtZW50LCB1cmwpOworICAgIGlmICgh
bV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV93
ZWJDb29raWVKYXItPmNvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9CiAKLVN0
cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNv
b2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7CisgICAgaWYgKCFtX3dlYkNvb2tpZUphcikKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX3dlYkNvb2tpZUphci0+Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9CiAK
LWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQorYm9vbCBDb29r
aWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQ
YXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llc0Vu
YWJsZWQoZG9jdW1lbnQpOworICAgIGlmICghbV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gbV93ZWJDb29raWVKYXItPmNvb2tpZXNFbmFibGVkKHVybCwg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29r
aWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMp
CiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6cmF3Q29va2llcyhkb2N1bWVudCwgdXJs
LCByYXdDb29raWVzKTsKKyAgICByYXdDb29raWVzLmNsZWFyKCk7CisgICAgV2ViS2l0OjpXZWJW
ZWN0b3I8V2ViS2l0OjpXZWJDb29raWU+IHdlYkNvb2tpZXM7CisKKyAgICBpZiAobV93ZWJDb29r
aWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5yYXdDb29raWVzKHVybCwgZmlyc3RQYXJ0
eUZvckNvb2tpZXMsIHdlYkNvb2tpZXMpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJDb29r
aWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07CisgICAgICAgIENvb2tpZSBjb29raWUod2Vi
Q29va2llLm5hbWUsIHdlYkNvb2tpZS52YWx1ZSwgd2ViQ29va2llLmRvbWFpbiwgd2ViQ29va2ll
LnBhdGgsIHdlYkNvb2tpZS5leHBpcmVzLCB3ZWJDb29raWUuaHR0cE9ubHksIHdlYkNvb2tpZS5z
ZWN1cmUsIHdlYkNvb2tpZS5zZXNzaW9uKTsKKyAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoY29v
a2llKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNv
b2tpZU5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6
OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgdXJsLCBjb29raWVOYW1lKTsKKyAgICBpZiAobV93ZWJD
b29raWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5kZWxldGVDb29raWUodXJsLCBjb29r
aWVOYW1lKTsKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmlu
Zz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhI
YXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1w
bGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpk
ZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1
cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJDdXJsLmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAKICNpbmNsdWRlICJDb29r
aWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTI2
LDM3ICsyNSwzNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBjb29raWVKYXI7CitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
c19jb29raWVKYXI7CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogLypkb2N1bWVudCovLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0
Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBjb29raWVKYXIuc2V0KHVybC5zdHJp
bmcoKSwgdmFsdWUpOworICAgIHNfY29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsK
IH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3Qg
S1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKLSAgICByZXR1cm4gY29va2ll
SmFyLmdldCh1cmwuc3RyaW5nKCkpOworICAgIHJldHVybiBzX2Nvb2tpZUphci5nZXQodXJsLnN0
cmluZygpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0
IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVK
YXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
S1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIC8vIEZJWE1FOiBpbmNsdWRl
IEh0dHBPbmx5IGNvb2tpZS4KLSAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkp
OworICAgIHJldHVybiBzX2Nvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKIH0KIAotYm9vbCBj
b29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29raWVK
YXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmly
c3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRS
YXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgLyp1
cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2ll
PiYgcmF3Q29va2llcykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogICAg
IHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdo
ZW4gaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUo
Y29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsKICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpAQCAtNjgsMTcgKzY3LDE3IEBAIHZv
aWQgc2V0Q29va2llU3RvcmFnZVByaXZhdGVCcm93c2luZ0VuYWIKIH0KICNlbmRpZgogCi12b2lk
IGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9p
ZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgLypo
b3N0bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12
b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9p
ZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIC8qaG9z
dG5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lk
IGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQog
ewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHAJKHJl
dmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nv
b2tpZUphcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1
ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1
ZGUgPFdpbmluZXQuaD4KQEAgLTM2LDE1ICszNSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQogewotICAgIC8vIEZJWE1FOiBEZWFsIHdpdGggZG9jdW1lbnQtPmZp
cnN0UGFydHlGb3JDb29raWVzKCkuCisgICAgLy8gRklYTUU6IERlYWwgd2l0aCBmaXJzdFBhcnR5
Rm9yQ29va2llcy4KICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwogICAgIFN0cmluZyB2
YWwgPSB2YWx1ZTsKICAgICBJbnRlcm5ldFNldENvb2tpZShzdHIuY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKSwgMCwgdmFsLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwog
fQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBL
VVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIFN0cmluZyBzdHIgPSB1
cmwuc3RyaW5nKCk7CiAKQEAgLTYzLDQwICs2Myw0MCBAQCBTdHJpbmcgY29va2llcyhjb25zdCBE
b2N1bWVudCogLypkb2N1bWVuCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKIH0K
IAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5
Rm9yQ29va2llcykKIHsKICAgICAvLyBGSVhNRTogaW5jbHVkZSBIdHRwT25seSBjb29raWUKLSAg
ICByZXR1cm4gY29va2llcyhkb2N1bWVudCwgdXJsKTsKKyAgICByZXR1cm4gY29va2llcyh1cmws
IGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNv
bnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykK
IHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29r
aWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypm
aXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsK
ICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQKIH0KIAot
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgLyp1cmwqLywg
Y29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHll
dCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb25zdCBTdHJpbmcmIC8qaG9zdG5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVk
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCShy
ZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDYgQEAKIAogI2luY2x1ZGUgIkNvb2tp
ZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIktVUkwu
aCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlRoaXJkUGFydHlD
b29raWVzUXQuaCIKQEAgLTQ5LDMxICs0NiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyBTaGFyZWRDb29raWVKYXJRdCogc19zaGFyZWRDb29raWVKYXJRdCA9IDA7CiAKLXN0YXRp
YyBOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRleHQoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50KQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAg
ICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwotICAgIGlmICghbG9hZGVy
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbG9hZGVyLT5uZXR3b3JraW5nQ29udGV4
dCgpOwotfQotCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQor
ICAgIGlmICghbV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwotICAgIFFOZXR3
b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29r
aWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gbV9uZXR3b3JraW5nQ29udGV4
dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CiAgICAgaWYgKCFqYXIpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwg
Zmlyc3RQYXJ0eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgaWYg
KCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBm
aXJzdFBhcnR5VXJsKSkKKyAgICBRVXJsIGZpcnN0UGFydHlVcmwoZmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSk7CisgICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhtX25ldHdvcmtp
bmdDb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBRTmV0d29ya0Nvb2tpZTo6
cGFyc2VDb29raWVzKFFTdHJpbmcodmFsdWUpLnRvTGF0aW4xKCkpOwpAQCAtODgsMTYgKzcxLDE1
IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBqYXItPnNl
dENvb2tpZXNGcm9tVXJsKGNvb2tpZXMsIHVybEZvckNvb2tpZXMpOwogfQogCi1TdHJpbmcgY29v
a2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBD
b29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5
Rm9yQ29va2llcykKIHsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtp
bmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdv
cmtpbmdDb250ZXh0KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5ldHdvcmtDb29r
aWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigp
OworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3
b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKIAogICAgIFFVcmwgdXJsRm9yQ29va2ll
cyh1cmwpOwotICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhjb250ZXh0
LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKKyAgICBRVXJsIGZpcnN0UGFydHlVcmwo
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5
UGVybWl0cyhtX25ldHdvcmtpbmdDb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJs
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+
IGNvb2tpZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwodXJsRm9yQ29va2llcyk7CkBAIC0xMTQsMTIg
Kzk2LDExIEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwKICAgICBy
ZXR1cm4gcmVzdWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1TdHJp
bmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMICZ1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLykKIHsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdD
b250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtp
bmdDb250ZXh0KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5ldHdvcmtDb29raWVK
YXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwor
ICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3Jr
QWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKIAogICAgIFFMaXN0PFFOZXR3b3JrQ29va2ll
PiBjb29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKFFVcmwodXJsKSk7CiAgICAgaWYgKGNvb2tp
ZXMuaXNFbXB0eSgpKQpAQCAtMTMyLDQxICsxMTMsNDAgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbgogICAgIHJldHVybiByZXN1bHRDb29raWVzLmpvaW4oUUxhdGlu
MVN0cmluZygiOyAiKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50KQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8q
dXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKLSAgICBOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAg
ICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkt
PmNvb2tpZUphcigpOworICAgIHJldHVybiBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNj
ZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0
IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9v
bCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VS
TCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykK
IHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogICAgIHJhd0Nvb2tpZXMuY2xl
YXIoKTsKICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQK
IH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgLyp1
cmwqLywgY29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90
IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIFNoYXJlZENvb2tpZUph
clF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGphcikKICAg
ICAgICAgamFyLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMpOwogfQogCi12b2lk
IGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBD
b29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQogewogICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hh
cmVkKCk7CiAgICAgaWYgKGphcikKICAgICAgICAgamFyLT5kZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoaG9zdG5hbWUpOwogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVK
YXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBT
aGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGphcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5Miw3ICsx
MzkyLDcgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTChOUE5VUgogICAgICAg
ICBpZiAodS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1l
KHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoZnJhbWUpIHsKLSAg
ICAgICAgICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9IGNvb2tpZXMoZnJhbWUtPmRv
Y3VtZW50KCksIHUpLnV0ZjgoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tp
ZVN0ciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZXModSwg
ZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0UGFydHlGb3JDb29raWVzKCkpLnV0ZjgoKTsKICAgICAg
ICAgICAgICAgICBpZiAoIWNvb2tpZVN0ci5pc051bGwoKSkgewogICAgICAgICAgICAgICAgICAg
ICBjb25zdCBpbnQgc2l6ZSA9IGNvb2tpZVN0ci5sZW5ndGgoKTsKICAgICAgICAgICAgICAgICAg
ICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKQEAg
LTE0NTQsNyArMTQ1NCw3IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoTlBO
VVIKICAgICAgICAgICAgIGNvbnN0IFN0cmluZyBjb29raWVTdHIgPSBTdHJpbmc6OmZyb21VVEY4
KHZhbHVlLCBsZW4pOwogICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50
RnJhbWUoKSwgbV9lbGVtZW50KTsKICAgICAgICAgICAgIGlmIChmcmFtZSAmJiAhY29va2llU3Ry
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBzZXRDb29raWVzKGZyYW1lLT5kb2N1bWVudCgp
LCB1LCBjb29raWVTdHIpOworICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCktPmNvb2tpZUphcigpLnNldENvb2tpZXModSwgZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0UGFy
dHlGb3JDb29raWVzKCksIGNvb2tpZVN0cik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
cmVzdWx0ID0gTlBFUlJfSU5WQUxJRF9VUkw7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjgyOCkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMTAt
MjkgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJv
bWl1bV0gUmVtb3ZlIGNvb2tpZS1yZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlv
bmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxl
LiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKwor
ICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmNvb2tpZUphcik6CisgICAgICAgICogc3JjL0ZyYW1l
TG9hZGVyQ2xpZW50SW1wbC5oOgorICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnRJbXBsKToKKyAg
ICAgICAgKiBzcmMvUGxhdGZvcm1TdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorCiAy
MDEyLTEwLTI5ICBQYXRyaWNrIER1YnJveSAgPGR1YnJveUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogU3R5bGUgdG9vbGJhciB0byBtYXRjaCBDaHJvbWl1bSB0b29sYmFy
IG9uIENocm9taXVtL01hYy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1l
TG9hZGVyQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY1MSw1ICsxNjUxLDE0IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBs
OjpkaXNwYXRjaFdpbGwKIH0KICNlbmRpZgogCitXZWJDb3JlOjpDb29raWVKYXIgRnJhbWVMb2Fk
ZXJDbGllbnRJbXBsOjpjb29raWVKYXIoKQoreworICAgIGlmICghbV93ZWJGcmFtZSB8fCAhbV93
ZWJGcmFtZS0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIoMCk7
CisgICAgV2ViQ29va2llSmFyKiB3ZWJDb29raWVKYXIgPSBtX3dlYkZyYW1lLT5jbGllbnQoKS0+
Y29va2llSmFyKG1fd2ViRnJhbWUpOworICAgIGlmICghd2ViQ29va2llSmFyKQorICAgICAgICB3
ZWJDb29raWVKYXIgPSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNvb2tpZUphcigpOwor
ICAgIHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIod2ViQ29va2llSmFyKTsKK30KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxv
YWRlckNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9GcmFtZUxvYWRlckNsaWVudEltcGwuaAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIyNSw2ICsyMjUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2ls
bFN0YXJ0VXNpbmdQZWVyQ29ubmVjdGlvbkhhbmRsZXIoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rp
b25IYW5kbGVyKikgT1ZFUlJJREU7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29v
a2llSmFyIGNvb2tpZUphcigpIE9WRVJSSURFOworCiBwcml2YXRlOgogICAgIHZvaWQgbWFrZURv
Y3VtZW50VmlldygpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9y
bVN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Bs
YXRmb3JtU3VwcG9ydC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4NiAr
MTAwLDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgV2ViQ29va2llSmFyKiBnZXRDb29raWVKYXIoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50KQotewotICAgIFdlYkZyYW1lSW1wbCogZnJhbWVJbXBsID0gV2ViRnJhbWVJbXBsOjpmcm9t
RnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIGlmICghZnJhbWVJbXBsIHx8ICFmcmFtZUlt
cGwtPmNsaWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tp
ZUphciA9IGZyYW1lSW1wbC0+Y2xpZW50KCktPmNvb2tpZUphcihmcmFtZUltcGwpOwotICAgIGlm
ICghY29va2llSmFyKQotICAgICAgICBjb29raWVKYXIgPSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJy
ZW50KCktPmNvb2tpZUphcigpOwotICAgIHJldHVybiBjb29raWVKYXI7Ci19Ci0KLS8vIENvb2tp
ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotdm9pZCBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgV2ViQ29va2llSmFyKiBj
b29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0g
ICAgICAgIGNvb2tpZUphci0+c2V0Q29va2llKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JD
b29raWVzKCksIHZhbHVlKTsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llcyhj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBTdHJpbmcg
cmVzdWx0OwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3Vt
ZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNv
b2tpZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiB1cmwpCi17Ci0g
ICAgU3RyaW5nIHJlc3VsdDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tp
ZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29v
a2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJz
dFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFBsYXRm
b3JtU3VwcG9ydDo6cmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtV
UkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgcmF3Q29va2llcy5j
bGVhcigpOwotICAgIFdlYlZlY3RvcjxXZWJDb29raWU+IHdlYkNvb2tpZXM7Ci0KLSAgICBXZWJD
b29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNv
b2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5yYXdDb29raWVzKHVybCwgZG9jdW1lbnQtPmZp
cnN0UGFydHlGb3JDb29raWVzKCksIHdlYkNvb2tpZXMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgV2ViQ29v
a2llJiB3ZWJDb29raWUgPSB3ZWJDb29raWVzW2ldOwotICAgICAgICBDb29raWUgY29va2llKHdl
YkNvb2tpZS5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS52YWx1ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuZG9tYWluLAotICAgICAgICAgICAgICAgICAg
ICAgIHdlYkNvb2tpZS5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5leHBp
cmVzLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5odHRwT25seSwKLSAgICAgICAg
ICAgICAgICAgICAgICB3ZWJDb29raWUuc2VjdXJlLAotICAgICAgICAgICAgICAgICAgICAgIHdl
YkNvb2tpZS5zZXNzaW9uKTsKLSAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoY29va2llKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVD
b29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENv
b2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFy
LT5kZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKTsKLX0KLQotYm9vbCBQbGF0Zm9ybVN1cHBv
cnQ6OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBib29s
IHJlc3VsdCA9IGZhbHNlOwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2ll
SmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29r
aWVKYXItPmNvb2tpZXNFbmFibGVkKGRvY3VtZW50LT5jb29raWVVUkwoKSwgZG9jdW1lbnQtPmZp
cnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIC8vIEZvbnQg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAogI2lmIE9TKFdJTkRPV1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2
aXNpb24gMTMyODI4KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMC0yOSAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgY29va2llLXJlbGF0ZWQg
ZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5n
ZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRl
c2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dFF0Ojpjb29raWVKYXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChGcmFtZUxvYWRlckNsaWVudFF0KToKKwogMjAxMi0xMC0yNCAgQnJhZHkgRWlkc29uICA8YmVp
ZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgc3RyYXRlZ3kgZm9yIGxvYWRlciBjdXN0
b21pemF0aW9uLgpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjc2LDYgKzE2NzYsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0
OjplbWl0TG9hZEZpbmlzaAogICAgIGVtaXQgbV93ZWJGcmFtZS0+bG9hZEZpbmlzaGVkKG9rKTsK
IH0KIAorV2ViQ29yZTo6Q29va2llSmFyIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNvb2tpZUphcigp
Cit7CisgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5sb2FkZXIoKSkKKyAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OkNvb2tpZUphcigwKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFy
KG1fZnJhbWUtPmxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpKTsKK30KKwogfQogCiAjaW5j
bHVkZSAibW9jX0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIgpJbmRleDogU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgJKHJldmlz
aW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjZGVmaW5lIEZy
YW1lTG9hZGVyQ2xpZW50UXRfaAogCiAKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnQuaCIKQEAgLTUzLDYgKzU0LDcgQEAgY2xhc3MgUVdlYkZyYW1lOwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKK2NsYXNzIENvb2tp
ZUphcjsKIGNsYXNzIERvY3VtZW50TG9hZGVyOwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZvcm1T
dGF0ZTsKQEAgLTIyNyw2ICsyMjksOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBLVVJMJiBsYXN0
UmVxdWVzdGVkVXJsKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UmVxdWVzdGVkVXJsOyB9CiAKKyAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZUphciBjb29raWVKYXIoKSBPVkVSUklERTsKKwogICAg
IHN0YXRpYyBib29sIGR1bXBGcmFtZUxvYWRlckNhbGxiYWNrczsKICAgICBzdGF0aWMgYm9vbCBk
dW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrOwogICAgIHN0YXRpYyBib29sIGR1bXBVc2VyR2Vz
dHVyZUluRnJhbWVMb2FkZXJDYWxsYmFja3M7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171284</attachid>
            <date>2012-10-29 11:30:10 -0700</date>
            <delta_ts>2012-10-29 12:03:18 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-99340-20121029142832.patch</filename>
            <type>text/plain</type>
            <size>50310</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjgyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0xMC0yOSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAg
ICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6Cisg
ICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAgICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29va2llRW5hYmxlZCk6CisgICAgICAgICogcGxh
dGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUph
cik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OkNvb2tpZUphcik6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1
cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGlt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNl
dENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
a2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2ll
SmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6
ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29v
a2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVB
bGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsdWdp
bnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1
ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6
CisKIDIwMTItMTAtMjkgIEFybmF1ZCBSZW5ldmllciAgPGEucmVuZXZpZXJAc2lzYS5zYW1zdW5n
LmNvbT4KIAogICAgICAgICB3ZWJ2aWV3IG5vdCByZWRyYXduIGFzIG5lZWRlZCB3aGVuIGFjY2Vs
ZXJhdGVkIGNvbXBvc2l0aW5nIGlzIGVuYWJsZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lv
biAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3ICs0MzAsNyBAQCBib29sIFdlYlNv
Y2tldENoYW5uZWw6OnByb2Nlc3NCdWZmZXIoKQogICAgICAgICAgICAgaWYgKG1faWRlbnRpZmll
cikKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVX
ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZShtX2RvY3VtZW50LCBtX2lkZW50aWZpZXIsIG1faGFu
ZHNoYWtlLT5zZXJ2ZXJIYW5kc2hha2VSZXNwb25zZSgpKTsKICAgICAgICAgICAgIGlmICghbV9o
YW5kc2hha2UtPnNlcnZlclNldENvb2tpZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAg
IGlmIChjb29raWVzRW5hYmxlZChtX2RvY3VtZW50KSkgeworICAgICAgICAgICAgICAgIGlmICht
X2RvY3VtZW50LT5jb29raWVzRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7IC8vIEV4Y2VwdGlvbiAoZm9yIHNhbmRib3hlZCBkb2N1bWVudHMpIGlnbm9y
ZWQuCiAgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnNldENvb2tpZShtX2hhbmRzaGFr
ZS0+c2VydmVyU2V0Q29va2llKCksIGVjKTsKICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYg
KzM5LDkgQEAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkhUVFBI
ZWFkZXJNYXAuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIktVUkwuaCIK
QEAgLTIwMCw3ICsyMDMsMTAgQEAgQ1N0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaAogICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2llcygp
OwogICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4dCk7Ci0gICAgICAgIFN0
cmluZyBjb29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJs
KTsKKyAgICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkKKyAgICAgICAgICAgIGNvb2tpZSA9IGZy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwogICAgICAg
ICBpZiAoIWNvb2tpZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCJDb29r
aWU6ICIgKyBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxjb29raWU+IiBpZiBj
b29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkBAIC0yNDksNyArMjU1LDEyIEBAIFBhc3NSZWZQdHI8
V2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdD4gV2UKICAgICBLVVJMIHVybCA9IGh0dHBVUkxGb3JB
dXRoZW50aWNhdGlvbkFuZENvb2tpZXMoKTsKICAgICBpZiAobV9jb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQq
PihtX2NvbnRleHQpOwotICAgICAgICBTdHJpbmcgY29va2llID0gY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7CisgICAgICAgIFN0cmluZyBjb29raWU7CisgICAg
ICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgICAgICBpZiAoZnJhbWUp
IHsKKyAgICAgICAgICAgIENvb2tpZUphciBjb29raWVKYXIgPSBmcmFtZS0+bG9hZGVyKCktPmNs
aWVudCgpLT5jb29raWVKYXIoKTsKKyAgICAgICAgICAgIGNvb2tpZSA9IGNvb2tpZUphci5jb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWNvb2tpZS5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXF1ZXN0LT5hZGRIZWFkZXJGaWVsZCgiQ29va2llIiwgY29va2llKTsKICAgICAg
ICAgLy8gU2V0ICJDb29raWUyOiA8Y29va2llPiIgaWYgY29va2llcyAyIGV4aXN0cyBmb3IgdXJs
PwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODE2LDcgKzM4
MTYsOSBAQCBTdHJpbmcgRG9jdW1lbnQ6OmNvb2tpZShFeGNlcHRpb25Db2RlJiBlCiAgICAgaWYg
KGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJl
dHVybiBjb29raWVzKHRoaXMsIGNvb2tpZVVSTCk7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQo
KS0+Y29va2llSmFyKCkuY29va2llcyhjb29raWVVUkwsIHRoaXMtPmZpcnN0UGFydHlGb3JDb29r
aWVzKCkpOwogfQogCiB2b2lkIERvY3VtZW50OjpzZXRDb29raWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0zODM3LDcgKzM4MzksMjMgQEAgdm9pZCBEb2N1bWVu
dDo6c2V0Q29va2llKGNvbnN0IFN0cmluZyYgdgogICAgIGlmIChjb29raWVVUkwuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRDb29raWVzKHRoaXMsIGNvb2tpZVVSTCwgdmFs
dWUpOworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGZyYW1lKCktPmxv
YWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuc2V0Q29va2llcyhjb29raWVVUkwsIHRoaXMt
PmZpcnN0UGFydHlGb3JDb29raWVzKCksIHZhbHVlKTsKK30KKworYm9vbCBEb2N1bWVudDo6Y29v
a2llc0VuYWJsZWQoKQoreworICAgIGlmICghcGFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIXBhZ2UoKS0+c2V0dGluZ3MoKS0+Y29va2llRW5hYmxlZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigp
LmNvb2tpZXNFbmFibGVkKHRoaXMtPmNvb2tpZVVSTCgpLCB0aGlzLT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKTsKIH0KIAogU3RyaW5nIERvY3VtZW50OjpyZWZlcnJlcigpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxNyw2ICs4MTcsNyBAQCBwdWJsaWM6CiAK
ICAgICBTdHJpbmcgY29va2llKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICB2b2lkIHNldENv
b2tpZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBjb29raWVzRW5h
YmxlZCgpOwogCiAgICAgU3RyaW5nIHJlZmVycmVyKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiAx
MzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOCBAQAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJHZW9sb2NhdGlvbkVycm9yLmgiCkBAIC01MTIsOSArNTE0LDEwIEBAIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm8KICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
IG1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQo
bWFpbkZyYW1lKCkpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1
bWVudCgpOwogICAgICAgICBWZWN0b3I8S1VSTD4gYWxsVVJMcyA9IGFsbFJlc291cmNlc1VSTHNG
b3JGcmFtZShmcmFtZSk7CisgICAgICAgIENvb2tpZUphciBjb29raWVKYXIgPSBmcmFtZS0+bG9h
ZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKTsKICAgICAgICAgZm9yIChWZWN0b3I8S1VSTD46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsVVJMcy5iZWdpbigpOyBpdCAhPSBhbGxVUkxzLmVuZCgp
OyArK2l0KSB7CiAgICAgICAgICAgICBWZWN0b3I8Q29va2llPiBkb2NDb29raWVzTGlzdDsKLSAg
ICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGdldFJhd0Nvb2tpZXMoZG9jdW1lbnQs
IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBkb2NDb29raWVzTGlzdCk7CisgICAgICAgICAg
ICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBjb29raWVKYXIuZ2V0UmF3Q29va2llcyhLVVJMKFBh
cnNlZFVSTFN0cmluZywgKml0KSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIGRv
Y0Nvb2tpZXNMaXN0KTsKICAgICAgICAgICAgIGlmICghcmF3Q29va2llc0ltcGxlbWVudGVkKSB7
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgZHVwbGljYXRpb24gY2hlY2tpbmcg
Zm9yIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29va2llcy4KICAgICAgICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTU1MCw4ICs1NTMsOSBAQCB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKEVyCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBWZWN0b3I8S1VSTD4gYWxsVVJMcyA9IGFsbFJlc291cmNlc1VSTHNGb3JGcmFtZShmcmFt
ZSk7CisgICAgICAgIENvb2tpZUphciBjb29raWVKYXIgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVu
dCgpLT5jb29raWVKYXIoKTsKICAgICAgICAgZm9yIChWZWN0b3I8S1VSTD46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gYWxsVVJMcy5iZWdpbigpOyBpdCAhPSBhbGxVUkxzLmVuZCgpOyArK2l0KQotICAg
ICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCBLVVJMKFBhcnNlZFVSTFN0
cmluZywgKml0KSwgY29va2llTmFtZSk7CisgICAgICAgICAgICBjb29raWVKYXIuZGVsZXRlQ29v
a2llKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVOYW1lKTsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lv
biAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmbmRlZiBGcmFtZUxvYWRlckNsaWVu
dF9oCiAjZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50X2gKIAorI2luY2x1ZGUgIkNvb2tpZUphci5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJJY29uVVJMLmgiCiAj
aW5jbHVkZSAiTGF5b3V0TWlsZXN0b25lcy5oIgpAQCAtNjQsNiArNjUsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CiAgICAgY2xhc3Mg
Q2FjaGVkRnJhbWU7CiAgICAgY2xhc3MgQ29sb3I7CisgICAgY2xhc3MgQ29va2llSmFyOwogICAg
IGNsYXNzIERPTVdpbmRvd0V4dGVuc2lvbjsKICAgICBjbGFzcyBET01XcmFwcGVyV29ybGQ7CiAg
ICAgY2xhc3MgRG9jdW1lbnRMb2FkZXI7CkBAIC0zNDksNiArMzUxLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaFdpbGxTdGFydFVzaW5nUGVlckNvbm5lY3Rpb25IYW5kbGVyKFJUQ1BlZXJDb25uZWN0
aW9uSGFuZGxlciopIHsgfQogI2VuZGlmCisKKyAgICAgICAgdmlydHVhbCBDb29raWVKYXIgY29v
a2llSmFyKCkgeyByZXR1cm4gQ29va2llSmFyKCk7IH0KICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiAxMzI3
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOYXZpZ2F0
b3IuaCIKIAotI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRPTU1pbWVUeXBlQXJy
YXkuaCIKICNpbmNsdWRlICJET01QbHVnaW5BcnJheS5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CkBAIC0xMTgsNyArMTE3LDcgQEAgYm9vbCBOYXZpZ2F0b3I6OmNvb2tpZUVuYWJsZWQoKSBjb25z
dAogICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkgJiYgIW1fZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3Mo
KS0+Y29va2llRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
Y29va2llc0VuYWJsZWQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIG1fZnJhbWUt
PmRvY3VtZW50KCktPmNvb2tpZXNFbmFibGVkKCk7CiB9CiAKIGJvb2wgTmF2aWdhdG9yOjpqYXZh
RW5hYmxlZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkocmV2
aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDEzIEBACiAjaWZuZGVmIENvb2tpZUphcl9oCiAjZGVm
aW5lIENvb2tpZUphcl9oCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlIDxwdWJs
aWMvV2ViQ29va2llSmFyLmg+CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJO
ZXR3b3JraW5nQ29udGV4dC5oIgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CkBAIC0zMywyMyArNDAsNTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3Mg
RG9jdW1lbnQ7Ci0gICAgY2xhc3MgS1VSTDsKK2NsYXNzIEtVUkw7CitzdHJ1Y3QgQ29va2llOwog
Ci0gICAgc3RydWN0IENvb2tpZTsKK2NsYXNzIENvb2tpZUphciB7CitwdWJsaWM6CisgICAgQ29v
a2llSmFyKCkKKyAgICB7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgIG1fd2ViQ29v
a2llSmFyID0gMDsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKFFUKQorICAgICAgICBtX25ldHdvcmtp
bmdDb250ZXh0ID0gMDsKKyNlbmRpZgorICAgIH07CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisg
ICAgZXhwbGljaXQgQ29va2llSmFyKFdlYktpdDo6V2ViQ29va2llSmFyKiB3ZWJDb29raWVKYXIp
CisgICAgeworICAgICAgICBtX3dlYkNvb2tpZUphciA9IHdlYkNvb2tpZUphcjsKKyAgICB9Owor
I2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisgICAgZXhwbGljaXQgQ29va2llSmFyKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgbV9uZXR3b3JraW5nQ29udGV4dCA9
IGNvbnRleHQ7CisgICAgfTsKKyNlbmRpZgogCiAgICAgLy8gY29va2llcyBvbWl0cyBIdHRwT25s
eSBjb29raWVzLgotICAgIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYpOwotICAgIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCopOwotICAgIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwotICAgIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBjb29raWVz
KGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAgdm9pZCBzZXRDb29r
aWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBj
b29raWVzRW5hYmxlZChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOworICAgIGJvb2wgZ2V0UmF3
Q29va2llcyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7CisgICAg
dm9pZCBkZWxldGVDb29raWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9p
ZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7CiAg
ICAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7
CiAgICAgdm9pZCBkZWxldGVBbGxDb29raWVzKCk7CiAKLX0KK3ByaXZhdGU6CisjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCisgICAgV2ViS2l0OjpXZWJDb29raWVKYXIqIG1fd2ViQ29va2llSmFyOwor
I2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisgICAgTmV0d29ya2luZ0NvbnRleHQqIG1fbmV0d29y
a2luZ0NvbnRleHQ7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBv
cnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0
Zm9ybVN1cHBvcnQuaAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDE0ICs3
OCw2IEBAIHN0cnVjdCBGb250UmVuZGVyU3R5bGU7CiAKIGNsYXNzIFBsYXRmb3JtU3VwcG9ydCB7
CiBwdWJsaWM6Ci0gICAgLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVz
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAg
IHN0YXRpYyBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAg
ICBzdGF0aWMgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyBib29sIHJhd0Nvb2tpZXMoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKLSAgICBzdGF0aWMgdm9pZCBk
ZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBj
b29raWVOYW1lKTsKLSAgICBzdGF0aWMgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVu
dCopOwotCiAgICAgLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZiBPUyhXSU5ET1dTKQogICAgIHN0YXRpYyBi
b29sIGVuc3VyZUZvbnRMb2FkZWQoSEZPTlQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9N
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAkocmV2aXNpb24gMTMy
NzkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw4IEBACiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2Fk
ZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5j
bHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJLVVJMLmgiCkBAIC0yNjgsNyArMjcw
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDbwogCiAgICAgS1VS
TCBtb3ZpZVVSTCA9IEtVUkwoS1VSTCgpLCB1cmwpOwogICAgIFZlY3RvcjxDb29raWU+IGRvY3Vt
ZW50Q29va2llczsKLSAgICBpZiAoIWdldFJhd0Nvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIG1v
dmllVVJMLCBkb2N1bWVudENvb2tpZXMpKQorICAgIGlmICghZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKS0+Y29va2llSmFyKCkuZ2V0UmF3Q29va2llcyhtb3ZpZVVSTCwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCksIGRvY3VtZW50Q29va2llcykpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGZvciAoc2l6ZV90IG5keCA9IDA7IG5keCA8IGRvY3VtZW50Q29va2llcy5zaXplKCk7IG5k
eCsrKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0JKHJl
dmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIFJldGFpblB0cjxOU0Fy
cmF5PiBmaWx0ZXJDb29raWVzKAogICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9CiAKLVN0
cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENv
b2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0
eUZvckNvb2tpZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAg
LTk1LDcgKzk1LDcgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVQog
ICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogCkBAIC0xMTQsNyArMTE0LDcgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBzZXRDb29r
aWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNv
b2tpZVN0cikKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQog
ewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTMyLDE1ICsxMzIsMTUg
QEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogCiAjaWYgVVNFKENG
VVJMU1RPUkFHRVNFU1NJT05TKQogICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkKLSAg
ICAgICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRl
cmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSk7CisgICAgICAgIHdrU2V0SFRUUENvb2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLmdl
dCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZmlyc3RQYXJ0eUZvckNvb2tp
ZXMpOwogICAgIGVsc2UKICNlbmRpZgotICAgICAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hh
cmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6ZmlsdGVyZWRDb29raWVzLmdldCgpIGZv
clVSTDpjb29raWVVUkwgbWFpbkRvY3VtZW50VVJMOmRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpXTsKKyAgICAgICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVT
dG9yYWdlXSBzZXRDb29raWVzOmZpbHRlcmVkQ29va2llcy5nZXQoKSBmb3JVUkw6Y29va2llVVJM
IG1haW5Eb2N1bWVudFVSTDpmaXJzdFBhcnR5Rm9yQ29va2llc107CiAKICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50
KikKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBj
b25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogCkBAIC0xNTgsNyArMTU4LDcgQEAgYm9vbCBjb29raWVzRW5hYmxl
ZChjb25zdCBEb2N1bWVudCopCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGdldFJhd0Nv
b2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBnZXRSYXdDb29raWVzKGNv
bnN0IERvY3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNv
b2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29r
aWVOYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29va2llTmFtZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CiAKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29v
a2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1l
cykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgCkBAIC0yMzgsNyAr
MjM4LDcgQEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogICAgIApAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFs
bENvb2tpZXMoKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2ll
SmFyQ0ZOZXQuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llU3RvcmFnZUNG
TmV0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgpAQCAtOTUsNyAr
OTQsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZpbHRlckNvb2tpCiAgICAgcmV0
dXJuIGZpbHRlcmVkQ29va2llczsKIH0KIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29raWVK
YXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9y
Q29va2llcywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAvLyA8cmRhcjovL3Byb2JsZW0v
NTYzMjg4Mz4gQ0ZIVFRQQ29va2llU3RvcmFnZSBzdG9yZXMgYW4gZW1wdHkgY29va2llLCB3aGlj
aCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgogICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkp
CkBAIC0xMDYsNyArMTA1LDcgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwg
Y29ucwogICAgICAgICByZXR1cm47CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFk
b3B0Q0YsIHVybC5jcmVhdGVDRlVSTCgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0
UGFydHlGb3JDb29raWVzQ0YoQWRvcHRDRiwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVz
KCkuY3JlYXRlQ0ZVUkwoKSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9y
Q29va2llc0NGKEFkb3B0Q0YsIGZpcnN0UGFydHlGb3JDb29raWVzLmNyZWF0ZUNGVVJMKCkpOwog
CiAgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzE+LCA8
cmRhcjovLzQ0MDkwMzQ+CiAgICAgLy8gY29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkcyBk
b2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBhIHZhbHVlCkBAIC0xMjMsNyArMTIyLDcgQEAg
dm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIENGSFRUUENvb2tp
ZVN0b3JhZ2VTZXRDb29raWVzKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRlckNvb2tpZXMoY29v
a2llc0NGLmdldCgpKS5nZXQoKSwgdXJsQ0YuZ2V0KCksIGZpcnN0UGFydHlGb3JDb29raWVzQ0Yu
Z2V0KCkpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCov
LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0xMzcsNyArMTM2
LDcgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbgogICAgIHJldHVy
biAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVhZGVyQ0YuZ2V0KCksIHNfY29v
a2llQ0YpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3Qg
RG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENv
b2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTE1MSw3ICsxNTAsNyBAQCBTdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIChDRlN0cmluZ1Jl
ZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRik7CiB9CiAK
LWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wg
Q29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJM
JiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFj
Y2VwdFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5T25seUZy
b21NYWluRG9jdW1lbnREb21haW47CiAgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9y
YWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkKQEAg
LTE1OSw3ICsxNTgsNyBAQCBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRv
CiAgICAgcmV0dXJuIHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5T25s
eUZyb21NYWluRG9jdW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VB
Y2NlcHRQb2xpY3lBbHdheXM7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENv
b2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmly
c3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAg
cmF3Q29va2llcy5jbGVhcigpOwogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKQEAgLTE5Myw3
ICsxOTIsNyBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRl
Q29va2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0yMTQsNyArMjEz
LDcgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAgIH0KIH0K
IAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1l
cykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmlu
Zz4mIGhvc3RuYW1lcykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4g
Y29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFj
b29raWVTdG9yYWdlKQpAQCAtMjMyLDcgKzIzMSw3IEBAIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHIKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTI1MSw3ICsyNTAsNyBAQCB2
b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpCiAgICAgfQogfQogCi12b2lk
IGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQog
ewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNo
cm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDUyICszMiw3NCBAQAogI2luY2x1ZGUgIkNvb2tpZUph
ci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29va2llLmg+Cisj
aW5jbHVkZSA8cHVibGljL1dlYkNvb2tpZUphci5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJp
bmcuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlZl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQg
Q29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQ
YXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgUGxhdGZvcm1TdXBw
b3J0OjpzZXRDb29raWVzKGRvY3VtZW50LCB1cmwsIHZhbHVlKTsKKyAgICBpZiAobV93ZWJDb29r
aWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5zZXRDb29raWUodXJsLCBmaXJzdFBhcnR5
Rm9yQ29va2llcywgdmFsdWUpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICBy
ZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzKGRvY3VtZW50LCB1cmwpOworICAgIGlmICgh
bV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV93
ZWJDb29raWVKYXItPmNvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9CiAKLVN0
cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNv
b2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7CisgICAgaWYgKCFtX3dlYkNvb2tpZUphcikKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX3dlYkNvb2tpZUphci0+Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9CiAK
LWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQorYm9vbCBDb29r
aWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQ
YXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llc0Vu
YWJsZWQoZG9jdW1lbnQpOworICAgIGlmICghbV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gbV93ZWJDb29raWVKYXItPmNvb2tpZXNFbmFibGVkKHVybCwg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29r
aWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMp
CiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6cmF3Q29va2llcyhkb2N1bWVudCwgdXJs
LCByYXdDb29raWVzKTsKKyAgICByYXdDb29raWVzLmNsZWFyKCk7CisgICAgV2ViS2l0OjpXZWJW
ZWN0b3I8V2ViS2l0OjpXZWJDb29raWU+IHdlYkNvb2tpZXM7CisKKyAgICBpZiAobV93ZWJDb29r
aWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5yYXdDb29raWVzKHVybCwgZmlyc3RQYXJ0
eUZvckNvb2tpZXMsIHdlYkNvb2tpZXMpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJDb29r
aWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07CisgICAgICAgIENvb2tpZSBjb29raWUod2Vi
Q29va2llLm5hbWUsIHdlYkNvb2tpZS52YWx1ZSwgd2ViQ29va2llLmRvbWFpbiwgd2ViQ29va2ll
LnBhdGgsIHdlYkNvb2tpZS5leHBpcmVzLCB3ZWJDb29raWUuaHR0cE9ubHksIHdlYkNvb2tpZS5z
ZWN1cmUsIHdlYkNvb2tpZS5zZXNzaW9uKTsKKyAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoY29v
a2llKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNv
b2tpZU5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6
OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgdXJsLCBjb29raWVOYW1lKTsKKyAgICBpZiAobV93ZWJD
b29raWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5kZWxldGVDb29raWUodXJsLCBjb29r
aWVOYW1lKTsKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmlu
Zz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhI
YXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1w
bGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpk
ZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1
cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJDdXJsLmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAKICNpbmNsdWRlICJDb29r
aWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTI2
LDM3ICsyNSwzNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBjb29raWVKYXI7CitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
c19jb29raWVKYXI7CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogLypkb2N1bWVudCovLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0
Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBjb29raWVKYXIuc2V0KHVybC5zdHJp
bmcoKSwgdmFsdWUpOworICAgIHNfY29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsK
IH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3Qg
S1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKLSAgICByZXR1cm4gY29va2ll
SmFyLmdldCh1cmwuc3RyaW5nKCkpOworICAgIHJldHVybiBzX2Nvb2tpZUphci5nZXQodXJsLnN0
cmluZygpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0
IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVK
YXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
S1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIC8vIEZJWE1FOiBpbmNsdWRl
IEh0dHBPbmx5IGNvb2tpZS4KLSAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkp
OworICAgIHJldHVybiBzX2Nvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKIH0KIAotYm9vbCBj
b29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29raWVK
YXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmly
c3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRS
YXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgLyp1
cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2ll
PiYgcmF3Q29va2llcykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogICAg
IHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdo
ZW4gaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUo
Y29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsKICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpAQCAtNjgsMTcgKzY3LDE3IEBAIHZv
aWQgc2V0Q29va2llU3RvcmFnZVByaXZhdGVCcm93c2luZ0VuYWIKIH0KICNlbmRpZgogCi12b2lk
IGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9p
ZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgLypo
b3N0bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12
b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9p
ZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIC8qaG9z
dG5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lk
IGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQog
ewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHAJKHJl
dmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nv
b2tpZUphcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1
ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1
ZGUgPFdpbmluZXQuaD4KQEAgLTM2LDE1ICszNSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQogewotICAgIC8vIEZJWE1FOiBEZWFsIHdpdGggZG9jdW1lbnQtPmZp
cnN0UGFydHlGb3JDb29raWVzKCkuCisgICAgLy8gRklYTUU6IERlYWwgd2l0aCBmaXJzdFBhcnR5
Rm9yQ29va2llcy4KICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwogICAgIFN0cmluZyB2
YWwgPSB2YWx1ZTsKICAgICBJbnRlcm5ldFNldENvb2tpZShzdHIuY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKSwgMCwgdmFsLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwog
fQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBL
VVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIFN0cmluZyBzdHIgPSB1
cmwuc3RyaW5nKCk7CiAKQEAgLTYzLDQwICs2Myw0MCBAQCBTdHJpbmcgY29va2llcyhjb25zdCBE
b2N1bWVudCogLypkb2N1bWVuCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKIH0K
IAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5
Rm9yQ29va2llcykKIHsKICAgICAvLyBGSVhNRTogaW5jbHVkZSBIdHRwT25seSBjb29raWUKLSAg
ICByZXR1cm4gY29va2llcyhkb2N1bWVudCwgdXJsKTsKKyAgICByZXR1cm4gY29va2llcyh1cmws
IGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNv
bnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykK
IHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29r
aWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypm
aXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsK
ICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQKIH0KIAot
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgLyp1cmwqLywg
Y29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHll
dCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb25zdCBTdHJpbmcmIC8qaG9zdG5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVk
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCShy
ZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDYgQEAKIAogI2luY2x1ZGUgIkNvb2tp
ZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIktVUkwu
aCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlRoaXJkUGFydHlD
b29raWVzUXQuaCIKQEAgLTQ5LDMxICs0NiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyBTaGFyZWRDb29raWVKYXJRdCogc19zaGFyZWRDb29raWVKYXJRdCA9IDA7CiAKLXN0YXRp
YyBOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRleHQoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50KQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAg
ICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwotICAgIGlmICghbG9hZGVy
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbG9hZGVyLT5uZXR3b3JraW5nQ29udGV4
dCgpOwotfQotCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQor
ICAgIGlmICghbV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwotICAgIFFOZXR3
b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29r
aWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gbV9uZXR3b3JraW5nQ29udGV4
dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CiAgICAgaWYgKCFqYXIpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwg
Zmlyc3RQYXJ0eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgaWYg
KCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBm
aXJzdFBhcnR5VXJsKSkKKyAgICBRVXJsIGZpcnN0UGFydHlVcmwoZmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSk7CisgICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhtX25ldHdvcmtp
bmdDb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBRTmV0d29ya0Nvb2tpZTo6
cGFyc2VDb29raWVzKFFTdHJpbmcodmFsdWUpLnRvTGF0aW4xKCkpOwpAQCAtODgsMTYgKzcxLDE1
IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBqYXItPnNl
dENvb2tpZXNGcm9tVXJsKGNvb2tpZXMsIHVybEZvckNvb2tpZXMpOwogfQogCi1TdHJpbmcgY29v
a2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBD
b29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5
Rm9yQ29va2llcykKIHsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtp
bmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdv
cmtpbmdDb250ZXh0KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5ldHdvcmtDb29r
aWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigp
OworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3
b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKIAogICAgIFFVcmwgdXJsRm9yQ29va2ll
cyh1cmwpOwotICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhjb250ZXh0
LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKKyAgICBRVXJsIGZpcnN0UGFydHlVcmwo
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5
UGVybWl0cyhtX25ldHdvcmtpbmdDb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJs
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+
IGNvb2tpZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwodXJsRm9yQ29va2llcyk7CkBAIC0xMTQsMTIg
Kzk2LDExIEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwKICAgICBy
ZXR1cm4gcmVzdWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1TdHJp
bmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMICZ1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLykKIHsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdD
b250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtp
bmdDb250ZXh0KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5ldHdvcmtDb29raWVK
YXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwor
ICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3Jr
QWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKIAogICAgIFFMaXN0PFFOZXR3b3JrQ29va2ll
PiBjb29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKFFVcmwodXJsKSk7CiAgICAgaWYgKGNvb2tp
ZXMuaXNFbXB0eSgpKQpAQCAtMTMyLDQxICsxMTMsNDAgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbgogICAgIHJldHVybiByZXN1bHRDb29raWVzLmpvaW4oUUxhdGlu
MVN0cmluZygiOyAiKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50KQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8q
dXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKLSAgICBOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAg
ICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkt
PmNvb2tpZUphcigpOworICAgIHJldHVybiBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNj
ZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0
IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9v
bCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VS
TCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykK
IHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogICAgIHJhd0Nvb2tpZXMuY2xl
YXIoKTsKICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQK
IH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgLyp1
cmwqLywgY29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90
IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIFNoYXJlZENvb2tpZUph
clF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGphcikKICAg
ICAgICAgamFyLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMpOwogfQogCi12b2lk
IGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBD
b29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQogewogICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hh
cmVkKCk7CiAgICAgaWYgKGphcikKICAgICAgICAgamFyLT5kZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoaG9zdG5hbWUpOwogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVK
YXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBT
aGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGphcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dl
YkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5Miw3ICsx
MzkyLDcgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTChOUE5VUgogICAgICAg
ICBpZiAodS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1l
KHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoZnJhbWUpIHsKLSAg
ICAgICAgICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9IGNvb2tpZXMoZnJhbWUtPmRv
Y3VtZW50KCksIHUpLnV0ZjgoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tp
ZVN0ciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZXModSwg
ZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0UGFydHlGb3JDb29raWVzKCkpLnV0ZjgoKTsKICAgICAg
ICAgICAgICAgICBpZiAoIWNvb2tpZVN0ci5pc051bGwoKSkgewogICAgICAgICAgICAgICAgICAg
ICBjb25zdCBpbnQgc2l6ZSA9IGNvb2tpZVN0ci5sZW5ndGgoKTsKICAgICAgICAgICAgICAgICAg
ICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKQEAg
LTE0NTQsNyArMTQ1NCw3IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoTlBO
VVIKICAgICAgICAgICAgIGNvbnN0IFN0cmluZyBjb29raWVTdHIgPSBTdHJpbmc6OmZyb21VVEY4
KHZhbHVlLCBsZW4pOwogICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50
RnJhbWUoKSwgbV9lbGVtZW50KTsKICAgICAgICAgICAgIGlmIChmcmFtZSAmJiAhY29va2llU3Ry
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBzZXRDb29raWVzKGZyYW1lLT5kb2N1bWVudCgp
LCB1LCBjb29raWVTdHIpOworICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCktPmNvb2tpZUphcigpLnNldENvb2tpZXModSwgZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0UGFy
dHlGb3JDb29raWVzKCksIGNvb2tpZVN0cik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
cmVzdWx0ID0gTlBFUlJfSU5WQUxJRF9VUkw7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTMyODI5KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTAtMjkgIE1hcmsgUGlsZ3JpbSAgPHBpbGdy
aW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIGNvb2tpZS1yZWxh
dGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBj
aGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlv
biBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6Y29va2ll
c0ZvclVSTCk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnNldENvb2tpZXNGb3JVUkwp
OgorCiAyMDEyLTEwLTI5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAg
ICAgICAgIFdLU3RyaW5nQ29weUNGU3RyaW5nKCkgc2hvdWxkIGRpcmVjdGx5IHVzZSA4IGJpdCBT
dHJpbmdzIGRhdGEgaW5zdGVhZCBvZiB1cCBjb252ZXJ0aW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxMzI3
OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMTAsMTIgKzEzMTAsMTkgQEAgU3RyaW5nIFBsdWdpblZpZXc6
OnByb3hpZXNGb3JVUkwoY29uc3QgUwogCiBTdHJpbmcgUGx1Z2luVmlldzo6Y29va2llc0ZvclVS
TChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKLSAgICByZXR1cm4gY29va2llcyhtX3BsdWdp
bkVsZW1lbnQtPmRvY3VtZW50KCksIEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpKTsKKyAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29r
aWVKYXIoKS5jb29raWVzKEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpLCBkb2N1bWVudC0+Zmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0Q29va2llc0ZvclVS
TChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCiB7
Ci0gICAgc2V0Q29va2llcyhtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCksIEtVUkwoS1VSTCgp
LCB1cmxTdHJpbmcpLCBjb29raWVTdHJpbmcpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1f
cGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKTsKKyAgICBpZiAoZnJhbWUpCisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCktPmNvb2tpZUphcigpLT5zZXRDb29raWVzKEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpLCBkb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgY29va2llU3RyaW5nKTsKIH0KIAogYm9vbCBQ
bHVnaW5WaWV3OjpnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgUHJvdGVjdGlvblNwYWNlJiBw
cm90ZWN0aW9uU3BhY2UsIFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFzc3dvcmQpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyODI5KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAor
MjAxMi0xMC0yOSAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgW0Nocm9taXVtXSBSZW1vdmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZv
cm1TdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05OTM0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCBy
YXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09Q
UyEpLgorCisgICAgICAgICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y29va2llSmFyKToKKyAgICAgICAgKiBz
cmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmg6CisgICAgICAgIChGcmFtZUxvYWRlckNsaWVudElt
cGwpOgorICAgICAgICAqIHNyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZSk6CisKIDIwMTItMTAtMjkgIFBhdHJpY2sgRHVicm95ICA8ZHVicm95QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTdHlsZSB0b29sYmFyIHRvIG1hdGNoIENocm9taXVt
IHRvb2xiYXIgb24gQ2hyb21pdW0vTWFjLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCShyZXZpc2lvbiAxMzI3OTMp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjUxLDUgKzE2NTEsMTQgQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudEltcGw6OmRpc3BhdGNoV2lsbAogfQogI2VuZGlmCiAKK1dlYkNvcmU6OkNvb2tpZUphciBG
cmFtZUxvYWRlckNsaWVudEltcGw6OmNvb2tpZUphcigpCit7CisgICAgaWYgKCFtX3dlYkZyYW1l
IHx8ICFtX3dlYkZyYW1lLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tp
ZUphcigwKTsKKyAgICBXZWJDb29raWVKYXIqIHdlYkNvb2tpZUphciA9IG1fd2ViRnJhbWUtPmNs
aWVudCgpLT5jb29raWVKYXIobV93ZWJGcmFtZSk7CisgICAgaWYgKCF3ZWJDb29raWVKYXIpCisg
ICAgICAgIHdlYkNvb2tpZUphciA9IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y29va2ll
SmFyKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tpZUphcih3ZWJDb29raWVKYXIpOworfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCShyZXZpc2lvbiAxMzI3OTMpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hXaWxsU3RhcnRVc2luZ1BlZXJDb25uZWN0aW9uSGFuZGxlcihXZWJDb3JlOjpSVENQZWVy
Q29ubmVjdGlvbkhhbmRsZXIqKSBPVkVSUklERTsKICNlbmRpZgogCisgICAgdmlydHVhbCBXZWJD
b3JlOjpDb29raWVKYXIgY29va2llSmFyKCkgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgdm9p
ZCBtYWtlRG9jdW1lbnRWaWV3KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1BsYXRmb3JtU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAwLDg2ICsxMDAsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0YXRpYyBXZWJDb29raWVKYXIqIGdldENvb2tpZUphcihjb25zdCBEb2N1bWVu
dCogZG9jdW1lbnQpCi17Ci0gICAgV2ViRnJhbWVJbXBsKiBmcmFtZUltcGwgPSBXZWJGcmFtZUlt
cGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgaWYgKCFmcmFtZUltcGwgfHwg
IWZyYW1lSW1wbC0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIFdlYkNvb2tpZUph
ciogY29va2llSmFyID0gZnJhbWVJbXBsLT5jbGllbnQoKS0+Y29va2llSmFyKGZyYW1lSW1wbCk7
Ci0gICAgaWYgKCFjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphciA9IFdlYktpdDo6UGxhdGZv
cm06OmN1cnJlbnQoKS0+Y29va2llSmFyKCk7Ci0gICAgcmV0dXJuIGNvb2tpZUphcjsKLX0KLQot
Ly8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2ll
cyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBXZWJDb29r
aWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tp
ZUphcikKLSAgICAgICAgY29va2llSmFyLT5zZXRDb29raWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUpOwotfQotCi1TdHJpbmcgUGxhdGZvcm1TdXBwb3J0Ojpj
b29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQotewotICAg
IFN0cmluZyByZXN1bHQ7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVK
YXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJlc3VsdCA9IGNvb2tp
ZUphci0+Y29va2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJpbmcgUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIHVy
bCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0g
Z2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1
bHQgPSBjb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwgZG9jdW1l
bnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJv
b2wgUGxhdGZvcm1TdXBwb3J0OjpyYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKLXsKLSAgICByYXdD
b29raWVzLmNsZWFyKCk7Ci0gICAgV2ViVmVjdG9yPFdlYkNvb2tpZT4gd2ViQ29va2llczsKLQot
ICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAg
ICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXItPnJhd0Nvb2tpZXModXJsLCBkb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgd2ViQ29va2llcyk7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25z
dCBXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07Ci0gICAgICAgIENvb2tpZSBj
b29raWUod2ViQ29va2llLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnZh
bHVlLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5kb21haW4sCi0gICAgICAgICAg
ICAgICAgICAgICAgd2ViQ29va2llLnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29v
a2llLmV4cGlyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmh0dHBPbmx5LAot
ICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5zZWN1cmUsCi0gICAgICAgICAgICAgICAg
ICAgICAgd2ViQ29va2llLnNlc3Npb24pOwotICAgICAgICByYXdDb29raWVzLmFwcGVuZChjb29r
aWUpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybVN1cHBvcnQ6
OmRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewotICAgIFdlYkNvb2tpZUphciogY29va2llSmFy
ID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBj
b29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwotfQotCi1ib29sIFBsYXRm
b3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQotewot
ICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBn
ZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJlc3Vs
dCA9IGNvb2tpZUphci0+Y29va2llc0VuYWJsZWQoZG9jdW1lbnQtPmNvb2tpZVVSTCgpLCBkb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQog
Ly8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgT1MoV0lORE9XUykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMzI4MjkpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTEwLTI5ICBNYXJrIFBpbGdyaW0gIDxw
aWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92ZSBjb29raWUt
cmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0
aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVu
Y3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50UXQ6OmNvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0Lmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50UXQpOgorCiAyMDEyLTEwLTI0ICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBzdHJhdGVneSBmb3IgbG9h
ZGVyIGN1c3RvbWl6YXRpb24uCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAJKHJldmlzaW9uIDEzMjc5MykK
KysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzYsNiArMTY3NiwxMyBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50UXQ6OmVtaXRMb2FkRmluaXNoCiAgICAgZW1pdCBtX3dlYkZyYW1lLT5sb2FkRmluaXNo
ZWQob2spOwogfQogCitXZWJDb3JlOjpDb29raWVKYXIgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y29v
a2llSmFyKCkKK3sKKyAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPmxvYWRlcigpKQorICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKDApOworICAgIHJldHVybiBXZWJDb3JlOjpD
b29raWVKYXIobV9mcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCkpOworfQorCiB9
CiAKICNpbmNsdWRlICJtb2NfRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAiCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQu
aAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNk
ZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRRdF9oCiAKIAorI2luY2x1ZGUgIkNvb2tpZUphci5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNTMsNiArNTQsNyBAQCBjbGFzcyBRV2ViRnJhbWU7CiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworY2xh
c3MgQ29va2llSmFyOwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBFbGVtZW50OwogY2xh
c3MgRm9ybVN0YXRlOwpAQCAtMjI3LDYgKzIyOSw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEtV
UkwmIGxhc3RSZXF1ZXN0ZWRVcmwoKSBjb25zdCB7IHJldHVybiBtX2xhc3RSZXF1ZXN0ZWRVcmw7
IH0KIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29va2llSmFyIGNvb2tpZUphcigpIE9WRVJSSURF
OworCiAgICAgc3RhdGljIGJvb2wgZHVtcEZyYW1lTG9hZGVyQ2FsbGJhY2tzOwogICAgIHN0YXRp
YyBib29sIGR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2s7CiAgICAgc3RhdGljIGJvb2wgZHVt
cFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRlckNhbGxiYWNrczsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171287</attachid>
            <date>2012-10-29 12:03:26 -0700</date>
            <delta_ts>2012-10-29 12:19:09 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-99340-20121029150146.patch</filename>
            <type>text/plain</type>
            <size>50306</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjgyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0xMC0yOSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAg
ICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6Cisg
ICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAgICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29va2llRW5hYmxlZCk6CisgICAgICAgICogcGxh
dGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUph
cik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OkNvb2tpZUphcik6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1
cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGlt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNl
dENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
a2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2ll
SmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6
ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29v
a2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVB
bGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsdWdp
bnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1
ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6
CisKIDIwMTItMTAtMjkgIEFybmF1ZCBSZW5ldmllciAgPGEucmVuZXZpZXJAc2lzYS5zYW1zdW5n
LmNvbT4KIAogICAgICAgICB3ZWJ2aWV3IG5vdCByZWRyYXduIGFzIG5lZWRlZCB3aGVuIGFjY2Vs
ZXJhdGVkIGNvbXBvc2l0aW5nIGlzIGVuYWJsZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lv
biAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3ICs0MzAsNyBAQCBib29sIFdlYlNv
Y2tldENoYW5uZWw6OnByb2Nlc3NCdWZmZXIoKQogICAgICAgICAgICAgaWYgKG1faWRlbnRpZmll
cikKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlY2VpdmVX
ZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZShtX2RvY3VtZW50LCBtX2lkZW50aWZpZXIsIG1faGFu
ZHNoYWtlLT5zZXJ2ZXJIYW5kc2hha2VSZXNwb25zZSgpKTsKICAgICAgICAgICAgIGlmICghbV9o
YW5kc2hha2UtPnNlcnZlclNldENvb2tpZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAg
IGlmIChjb29raWVzRW5hYmxlZChtX2RvY3VtZW50KSkgeworICAgICAgICAgICAgICAgIGlmICht
X2RvY3VtZW50LT5jb29raWVzRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7IC8vIEV4Y2VwdGlvbiAoZm9yIHNhbmRib3hlZCBkb2N1bWVudHMpIGlnbm9y
ZWQuCiAgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnNldENvb2tpZShtX2hhbmRzaGFr
ZS0+c2VydmVyU2V0Q29va2llKCksIGVjKTsKICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYg
KzM5LDkgQEAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkhUVFBI
ZWFkZXJNYXAuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1ZGUgIktVUkwuaCIK
QEAgLTIwMCw3ICsyMDMsMTAgQEAgQ1N0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaAogICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2llcygp
OwogICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4dCk7Ci0gICAgICAgIFN0
cmluZyBjb29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJs
KTsKKyAgICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkKKyAgICAgICAgICAgIGNvb2tpZSA9IGZy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwogICAgICAg
ICBpZiAoIWNvb2tpZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCJDb29r
aWU6ICIgKyBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxjb29raWU+IiBpZiBj
b29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkBAIC0yNDksNyArMjU1LDEyIEBAIFBhc3NSZWZQdHI8
V2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdD4gV2UKICAgICBLVVJMIHVybCA9IGh0dHBVUkxGb3JB
dXRoZW50aWNhdGlvbkFuZENvb2tpZXMoKTsKICAgICBpZiAobV9jb250ZXh0LT5pc0RvY3VtZW50
KCkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQq
PihtX2NvbnRleHQpOwotICAgICAgICBTdHJpbmcgY29va2llID0gY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7CisgICAgICAgIFN0cmluZyBjb29raWU7CisgICAg
ICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgICAgICBpZiAoZnJhbWUp
IHsKKyAgICAgICAgICAgIENvb2tpZUphciBjb29raWVKYXIgPSBmcmFtZS0+bG9hZGVyKCktPmNs
aWVudCgpLT5jb29raWVKYXIoKTsKKyAgICAgICAgICAgIGNvb2tpZSA9IGNvb2tpZUphci5jb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWNvb2tpZS5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXF1ZXN0LT5hZGRIZWFkZXJGaWVsZCgiQ29va2llIiwgY29va2llKTsKICAgICAg
ICAgLy8gU2V0ICJDb29raWUyOiA8Y29va2llPiIgaWYgY29va2llcyAyIGV4aXN0cyBmb3IgdXJs
PwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODE2LDcgKzM4
MTYsOSBAQCBTdHJpbmcgRG9jdW1lbnQ6OmNvb2tpZShFeGNlcHRpb25Db2RlJiBlCiAgICAgaWYg
KGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJl
dHVybiBjb29raWVzKHRoaXMsIGNvb2tpZVVSTCk7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQo
KS0+Y29va2llSmFyKCkuY29va2llcyhjb29raWVVUkwsIHRoaXMtPmZpcnN0UGFydHlGb3JDb29r
aWVzKCkpOwogfQogCiB2b2lkIERvY3VtZW50OjpzZXRDb29raWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0zODM3LDcgKzM4MzksMjMgQEAgdm9pZCBEb2N1bWVu
dDo6c2V0Q29va2llKGNvbnN0IFN0cmluZyYgdgogICAgIGlmIChjb29raWVVUkwuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRDb29raWVzKHRoaXMsIGNvb2tpZVVSTCwgdmFs
dWUpOworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGZyYW1lKCktPmxv
YWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuc2V0Q29va2llcyhjb29raWVVUkwsIHRoaXMt
PmZpcnN0UGFydHlGb3JDb29raWVzKCksIHZhbHVlKTsKK30KKworYm9vbCBEb2N1bWVudDo6Y29v
a2llc0VuYWJsZWQoKQoreworICAgIGlmICghcGFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIXBhZ2UoKS0+c2V0dGluZ3MoKS0+Y29va2llRW5hYmxlZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigp
LmNvb2tpZXNFbmFibGVkKHRoaXMtPmNvb2tpZVVSTCgpLCB0aGlzLT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKTsKIH0KIAogU3RyaW5nIERvY3VtZW50OjpyZWZlcnJlcigpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxNyw2ICs4MTcsNyBAQCBwdWJsaWM6CiAK
ICAgICBTdHJpbmcgY29va2llKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICB2b2lkIHNldENv
b2tpZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBjb29raWVzRW5h
YmxlZCgpOwogCiAgICAgU3RyaW5nIHJlZmVycmVyKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiAx
MzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOCBAQAogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJHZW9sb2NhdGlvbkVycm9yLmgiCkBAIC01MTIsOSArNTE0LDEwIEBAIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm8KICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
IG1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQo
bWFpbkZyYW1lKCkpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1
bWVudCgpOwogICAgICAgICBWZWN0b3I8S1VSTD4gYWxsVVJMcyA9IGFsbFJlc291cmNlc1VSTHNG
b3JGcmFtZShmcmFtZSk7CisgICAgICAgIENvb2tpZUphciBjb29raWVKYXIgPSBmcmFtZS0+bG9h
ZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKTsKICAgICAgICAgZm9yIChWZWN0b3I8S1VSTD46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsVVJMcy5iZWdpbigpOyBpdCAhPSBhbGxVUkxzLmVuZCgp
OyArK2l0KSB7CiAgICAgICAgICAgICBWZWN0b3I8Q29va2llPiBkb2NDb29raWVzTGlzdDsKLSAg
ICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGdldFJhd0Nvb2tpZXMoZG9jdW1lbnQs
IEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBkb2NDb29raWVzTGlzdCk7CisgICAgICAgICAg
ICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBjb29raWVKYXIuZ2V0UmF3Q29va2llcyhLVVJMKFBh
cnNlZFVSTFN0cmluZywgKml0KSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIGRv
Y0Nvb2tpZXNMaXN0KTsKICAgICAgICAgICAgIGlmICghcmF3Q29va2llc0ltcGxlbWVudGVkKSB7
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgZHVwbGljYXRpb24gY2hlY2tpbmcg
Zm9yIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29va2llcy4KICAgICAgICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTU1MCw4ICs1NTMsOSBAQCB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKEVyCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICBWZWN0b3I8S1VSTD4gYWxsVVJMcyA9IGFsbFJlc291cmNlc1VSTHNGb3JGcmFtZShmcmFt
ZSk7CisgICAgICAgIENvb2tpZUphciBjb29raWVKYXIgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVu
dCgpLT5jb29raWVKYXIoKTsKICAgICAgICAgZm9yIChWZWN0b3I8S1VSTD46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gYWxsVVJMcy5iZWdpbigpOyBpdCAhPSBhbGxVUkxzLmVuZCgpOyArK2l0KQotICAg
ICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCBLVVJMKFBhcnNlZFVSTFN0
cmluZywgKml0KSwgY29va2llTmFtZSk7CisgICAgICAgICAgICBjb29raWVKYXIuZGVsZXRlQ29v
a2llKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVOYW1lKTsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCShyZXZpc2lv
biAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmbmRlZiBGcmFtZUxvYWRlckNsaWVu
dF9oCiAjZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50X2gKIAorI2luY2x1ZGUgIkNvb2tpZUphci5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJJY29uVVJMLmgiCiAj
aW5jbHVkZSAiTGF5b3V0TWlsZXN0b25lcy5oIgpAQCAtNjQsNiArNjUsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CiAgICAgY2xhc3Mg
Q2FjaGVkRnJhbWU7CiAgICAgY2xhc3MgQ29sb3I7CisgICAgY2xhc3MgQ29va2llSmFyOwogICAg
IGNsYXNzIERPTVdpbmRvd0V4dGVuc2lvbjsKICAgICBjbGFzcyBET01XcmFwcGVyV29ybGQ7CiAg
ICAgY2xhc3MgRG9jdW1lbnRMb2FkZXI7CkBAIC0zNDksNiArMzUxLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaFdpbGxTdGFydFVzaW5nUGVlckNvbm5lY3Rpb25IYW5kbGVyKFJUQ1BlZXJDb25uZWN0
aW9uSGFuZGxlciopIHsgfQogI2VuZGlmCisKKyAgICAgICAgdmlydHVhbCBDb29raWVKYXIgY29v
a2llSmFyKCkgeyByZXR1cm4gQ29va2llSmFyKCk7IH0KICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiAxMzI3
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOYXZpZ2F0
b3IuaCIKIAotI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRPTU1pbWVUeXBlQXJy
YXkuaCIKICNpbmNsdWRlICJET01QbHVnaW5BcnJheS5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CkBAIC0xMTgsNyArMTE3LDcgQEAgYm9vbCBOYXZpZ2F0b3I6OmNvb2tpZUVuYWJsZWQoKSBjb25z
dAogICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkgJiYgIW1fZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3Mo
KS0+Y29va2llRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
Y29va2llc0VuYWJsZWQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIG1fZnJhbWUt
PmRvY3VtZW50KCktPmNvb2tpZXNFbmFibGVkKCk7CiB9CiAKIGJvb2wgTmF2aWdhdG9yOjpqYXZh
RW5hYmxlZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkocmV2
aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDEzIEBACiAjaWZuZGVmIENvb2tpZUphcl9oCiAjZGVm
aW5lIENvb2tpZUphcl9oCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlIDxwdWJs
aWMvV2ViQ29va2llSmFyLmg+CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJO
ZXR3b3JraW5nQ29udGV4dC5oIgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CkBAIC0zMywyMyArNDAsNTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3Mg
RG9jdW1lbnQ7Ci0gICAgY2xhc3MgS1VSTDsKK2NsYXNzIEtVUkw7CitzdHJ1Y3QgQ29va2llOwog
Ci0gICAgc3RydWN0IENvb2tpZTsKK2NsYXNzIENvb2tpZUphciB7CitwdWJsaWM6CisgICAgQ29v
a2llSmFyKCkKKyAgICB7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgIG1fd2ViQ29v
a2llSmFyID0gMDsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKFFUKQorICAgICAgICBtX25ldHdvcmtp
bmdDb250ZXh0ID0gMDsKKyNlbmRpZgorICAgIH07CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisg
ICAgZXhwbGljaXQgQ29va2llSmFyKFdlYktpdDo6V2ViQ29va2llSmFyKiB3ZWJDb29raWVKYXIp
CisgICAgeworICAgICAgICBtX3dlYkNvb2tpZUphciA9IHdlYkNvb2tpZUphcjsKKyAgICB9Owor
I2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisgICAgZXhwbGljaXQgQ29va2llSmFyKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgbV9uZXR3b3JraW5nQ29udGV4dCA9
IGNvbnRleHQ7CisgICAgfTsKKyNlbmRpZgogCiAgICAgLy8gY29va2llcyBvbWl0cyBIdHRwT25s
eSBjb29raWVzLgotICAgIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYpOwotICAgIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCopOwotICAgIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwotICAgIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBjb29raWVz
KGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAgdm9pZCBzZXRDb29r
aWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBj
b29raWVzRW5hYmxlZChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOworICAgIGJvb2wgZ2V0UmF3
Q29va2llcyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7CisgICAg
dm9pZCBkZWxldGVDb29raWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9p
ZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7CiAg
ICAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7
CiAgICAgdm9pZCBkZWxldGVBbGxDb29raWVzKCk7CiAKLX0KK3ByaXZhdGU6CisjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCisgICAgV2ViS2l0OjpXZWJDb29raWVKYXIqIG1fd2ViQ29va2llSmFyOwor
I2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisgICAgTmV0d29ya2luZ0NvbnRleHQqIG1fbmV0d29y
a2luZ0NvbnRleHQ7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBv
cnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0
Zm9ybVN1cHBvcnQuaAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDE0ICs3
OCw2IEBAIHN0cnVjdCBGb250UmVuZGVyU3R5bGU7CiAKIGNsYXNzIFBsYXRmb3JtU3VwcG9ydCB7
CiBwdWJsaWM6Ci0gICAgLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVz
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAg
IHN0YXRpYyBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAg
ICBzdGF0aWMgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyBib29sIHJhd0Nvb2tpZXMoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKLSAgICBzdGF0aWMgdm9pZCBk
ZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBj
b29raWVOYW1lKTsKLSAgICBzdGF0aWMgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVu
dCopOwotCiAgICAgLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZiBPUyhXSU5ET1dTKQogICAgIHN0YXRpYyBi
b29sIGVuc3VyZUZvbnRMb2FkZWQoSEZPTlQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9N
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAkocmV2aXNpb24gMTMy
NzkzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw4IEBACiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2Fk
ZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5j
bHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJLVVJMLmgiCkBAIC0yNjgsNyArMjcw
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDbwogCiAgICAgS1VS
TCBtb3ZpZVVSTCA9IEtVUkwoS1VSTCgpLCB1cmwpOwogICAgIFZlY3RvcjxDb29raWU+IGRvY3Vt
ZW50Q29va2llczsKLSAgICBpZiAoIWdldFJhd0Nvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIG1v
dmllVVJMLCBkb2N1bWVudENvb2tpZXMpKQorICAgIGlmICghZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKS0+Y29va2llSmFyKCkuZ2V0UmF3Q29va2llcyhtb3ZpZVVSTCwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCksIGRvY3VtZW50Q29va2llcykpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGZvciAoc2l6ZV90IG5keCA9IDA7IG5keCA8IGRvY3VtZW50Q29va2llcy5zaXplKCk7IG5k
eCsrKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0JKHJl
dmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIFJldGFpblB0cjxOU0Fy
cmF5PiBmaWx0ZXJDb29raWVzKAogICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9CiAKLVN0
cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENv
b2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0
eUZvckNvb2tpZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAg
LTk1LDcgKzk1LDcgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVQog
ICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogCkBAIC0xMTQsNyArMTE0LDcgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBzZXRDb29r
aWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNv
b2tpZVN0cikKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQog
ewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTMyLDE1ICsxMzIsMTUg
QEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogCiAjaWYgVVNFKENG
VVJMU1RPUkFHRVNFU1NJT05TKQogICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkKLSAg
ICAgICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRl
cmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSk7CisgICAgICAgIHdrU2V0SFRUUENvb2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLmdl
dCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZmlyc3RQYXJ0eUZvckNvb2tp
ZXMpOwogICAgIGVsc2UKICNlbmRpZgotICAgICAgICBbW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hh
cmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6ZmlsdGVyZWRDb29raWVzLmdldCgpIGZv
clVSTDpjb29raWVVUkwgbWFpbkRvY3VtZW50VVJMOmRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpXTsKKyAgICAgICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVT
dG9yYWdlXSBzZXRDb29raWVzOmZpbHRlcmVkQ29va2llcy5nZXQoKSBmb3JVUkw6Y29va2llVVJM
IG1haW5Eb2N1bWVudFVSTDpmaXJzdFBhcnR5Rm9yQ29va2llc107CiAKICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50
KikKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBj
b25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogCkBAIC0xNTgsNyArMTU4LDcgQEAgYm9vbCBjb29raWVzRW5hYmxl
ZChjb25zdCBEb2N1bWVudCopCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGdldFJhd0Nv
b2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBnZXRSYXdDb29raWVzKGNv
bnN0IERvY3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNv
b2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29r
aWVOYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29va2llTmFtZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CiAKQEAgLTIyNSw3ICsyMjUsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29v
a2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1l
cykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgCkBAIC0yMzgsNyAr
MjM4LDcgQEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogICAgIApAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFs
bENvb2tpZXMoKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2ll
SmFyQ0ZOZXQuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llU3RvcmFnZUNG
TmV0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTb2Z0TGlua2luZy5oIgpAQCAtOTUsNyAr
OTQsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZpbHRlckNvb2tpCiAgICAgcmV0
dXJuIGZpbHRlcmVkQ29va2llczsKIH0KIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29raWVK
YXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9y
Q29va2llcywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAvLyA8cmRhcjovL3Byb2JsZW0v
NTYzMjg4Mz4gQ0ZIVFRQQ29va2llU3RvcmFnZSBzdG9yZXMgYW4gZW1wdHkgY29va2llLCB3aGlj
aCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgogICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkp
CkBAIC0xMDYsNyArMTA1LDcgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwg
Y29ucwogICAgICAgICByZXR1cm47CiAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybENGKEFk
b3B0Q0YsIHVybC5jcmVhdGVDRlVSTCgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0
UGFydHlGb3JDb29raWVzQ0YoQWRvcHRDRiwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVz
KCkuY3JlYXRlQ0ZVUkwoKSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9y
Q29va2llc0NGKEFkb3B0Q0YsIGZpcnN0UGFydHlGb3JDb29raWVzLmNyZWF0ZUNGVVJMKCkpOwog
CiAgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MzE+LCA8
cmRhcjovLzQ0MDkwMzQ+CiAgICAgLy8gY29va2llc1dpdGhSZXNwb25zZUhlYWRlckZpZWxkcyBk
b2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBhIHZhbHVlCkBAIC0xMjMsNyArMTIyLDcgQEAg
dm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIENGSFRUUENvb2tp
ZVN0b3JhZ2VTZXRDb29raWVzKGNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRlckNvb2tpZXMoY29v
a2llc0NGLmdldCgpKS5nZXQoKSwgdXJsQ0YuZ2V0KCksIGZpcnN0UGFydHlGb3JDb29raWVzQ0Yu
Z2V0KCkpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCov
LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0xMzcsNyArMTM2
LDcgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbgogICAgIHJldHVy
biAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVhZGVyQ0YuZ2V0KCksIHNfY29v
a2llQ0YpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3Qg
RG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENv
b2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFn
ZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTE1MSw3ICsxNTAsNyBAQCBTdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIChDRlN0cmluZ1Jl
ZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRik7CiB9CiAK
LWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wg
Q29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJM
JiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZUFj
Y2VwdFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5T25seUZy
b21NYWluRG9jdW1lbnREb21haW47CiAgICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9y
YWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkKQEAg
LTE1OSw3ICsxNTgsNyBAQCBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRv
CiAgICAgcmV0dXJuIHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5T25s
eUZyb21NYWluRG9jdW1lbnREb21haW4gfHwgcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VB
Y2NlcHRQb2xpY3lBbHdheXM7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENv
b2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmly
c3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAg
cmF3Q29va2llcy5jbGVhcigpOwogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKQEAgLTE5Myw3
ICsxOTIsNyBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRl
Q29va2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0yMTQsNyArMjEz
LDcgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAgIH0KIH0K
IAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1l
cykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmlu
Zz4mIGhvc3RuYW1lcykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4g
Y29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFj
b29raWVTdG9yYWdlKQpAQCAtMjMyLDcgKzIzMSw3IEBAIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHIKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTI1MSw3ICsyNTAsNyBAQCB2
b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpCiAgICAgfQogfQogCi12b2lk
IGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQog
ewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0g
Y3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNo
cm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDUyICszMiw3NCBAQAogI2luY2x1ZGUgIkNvb2tpZUph
ci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29va2llLmg+Cisj
aW5jbHVkZSA8cHVibGljL1dlYkNvb2tpZUphci5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJTdHJp
bmcuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlZl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQg
Q29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQ
YXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgUGxhdGZvcm1TdXBw
b3J0OjpzZXRDb29raWVzKGRvY3VtZW50LCB1cmwsIHZhbHVlKTsKKyAgICBpZiAobV93ZWJDb29r
aWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5zZXRDb29raWUodXJsLCBmaXJzdFBhcnR5
Rm9yQ29va2llcywgdmFsdWUpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICBy
ZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzKGRvY3VtZW50LCB1cmwpOworICAgIGlmICgh
bV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV93
ZWJDb29raWVKYXItPmNvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9CiAKLVN0
cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNv
b2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7CisgICAgaWYgKCFtX3dlYkNvb2tpZUphcikKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX3dlYkNvb2tpZUphci0+Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9CiAK
LWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQorYm9vbCBDb29r
aWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQ
YXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llc0Vu
YWJsZWQoZG9jdW1lbnQpOworICAgIGlmICghbV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gbV93ZWJDb29raWVKYXItPmNvb2tpZXNFbmFibGVkKHVybCwg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29r
aWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMp
CiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6cmF3Q29va2llcyhkb2N1bWVudCwgdXJs
LCByYXdDb29raWVzKTsKKyAgICByYXdDb29raWVzLmNsZWFyKCk7CisgICAgV2ViS2l0OjpXZWJW
ZWN0b3I8V2ViS2l0OjpXZWJDb29raWU+IHdlYkNvb2tpZXM7CisKKyAgICBpZiAobV93ZWJDb29r
aWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5yYXdDb29raWVzKHVybCwgZmlyc3RQYXJ0
eUZvckNvb2tpZXMsIHdlYkNvb2tpZXMpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJDb29r
aWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07CisgICAgICAgIENvb2tpZSBjb29raWUod2Vi
Q29va2llLm5hbWUsIHdlYkNvb2tpZS52YWx1ZSwgd2ViQ29va2llLmRvbWFpbiwgd2ViQ29va2ll
LnBhdGgsIHdlYkNvb2tpZS5leHBpcmVzLCB3ZWJDb29raWUuaHR0cE9ubHksIHdlYkNvb2tpZS5z
ZWN1cmUsIHdlYkNvb2tpZS5zZXNzaW9uKTsKKyAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoY29v
a2llKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNv
b2tpZU5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6
OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgdXJsLCBjb29raWVOYW1lKTsKKyAgICBpZiAobV93ZWJD
b29raWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5kZWxldGVDb29raWUodXJsLCBjb29r
aWVOYW1lKTsKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmlu
Zz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhI
YXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1w
bGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpk
ZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1
cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJDdXJsLmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAKICNpbmNsdWRlICJDb29r
aWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTI2
LDM3ICsyNSwzNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBjb29raWVKYXI7CitzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
c19jb29raWVKYXI7CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogLypkb2N1bWVudCovLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0
Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBjb29raWVKYXIuc2V0KHVybC5zdHJp
bmcoKSwgdmFsdWUpOworICAgIHNfY29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsK
IH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3Qg
S1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKLSAgICByZXR1cm4gY29va2ll
SmFyLmdldCh1cmwuc3RyaW5nKCkpOworICAgIHJldHVybiBzX2Nvb2tpZUphci5nZXQodXJsLnN0
cmluZygpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0
IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVK
YXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
S1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIC8vIEZJWE1FOiBpbmNsdWRl
IEh0dHBPbmx5IGNvb2tpZS4KLSAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkp
OworICAgIHJldHVybiBzX2Nvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKIH0KIAotYm9vbCBj
b29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29raWVK
YXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmly
c3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRS
YXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgLyp1
cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2ll
PiYgcmF3Q29va2llcykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogICAg
IHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdo
ZW4gaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUo
Y29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsKICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpAQCAtNjgsMTcgKzY3LDE3IEBAIHZv
aWQgc2V0Q29va2llU3RvcmFnZVByaXZhdGVCcm93c2luZ0VuYWIKIH0KICNlbmRpZgogCi12b2lk
IGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9p
ZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgLypo
b3N0bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12
b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9p
ZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIC8qaG9z
dG5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lk
IGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQog
ewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHAJKHJl
dmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nv
b2tpZUphcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1
ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1
ZGUgPFdpbmluZXQuaD4KQEAgLTM2LDE1ICszNSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQogewotICAgIC8vIEZJWE1FOiBEZWFsIHdpdGggZG9jdW1lbnQtPmZp
cnN0UGFydHlGb3JDb29raWVzKCkuCisgICAgLy8gRklYTUU6IERlYWwgd2l0aCBmaXJzdFBhcnR5
Rm9yQ29va2llcy4KICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwogICAgIFN0cmluZyB2
YWwgPSB2YWx1ZTsKICAgICBJbnRlcm5ldFNldENvb2tpZShzdHIuY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKSwgMCwgdmFsLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOwog
fQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBL
VVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIFN0cmluZyBzdHIgPSB1
cmwuc3RyaW5nKCk7CiAKQEAgLTYzLDQwICs2Myw0MCBAQCBTdHJpbmcgY29va2llcyhjb25zdCBE
b2N1bWVudCogLypkb2N1bWVuCiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQoYnVmZmVyKTsKIH0K
IAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5
Rm9yQ29va2llcykKIHsKICAgICAvLyBGSVhNRTogaW5jbHVkZSBIdHRwT25seSBjb29raWUKLSAg
ICByZXR1cm4gY29va2llcyhkb2N1bWVudCwgdXJsKTsKKyAgICByZXR1cm4gY29va2llcyh1cmws
IGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNv
bnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykK
IHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29r
aWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypm
aXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsK
ICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQKIH0KIAot
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgLyp1cmwqLywg
Y29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHll
dCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb25zdCBTdHJpbmcmIC8qaG9zdG5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVk
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCShy
ZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDYgQEAKIAogI2luY2x1ZGUgIkNvb2tp
ZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIktVUkwu
aCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlRoaXJkUGFydHlD
b29raWVzUXQuaCIKQEAgLTQ5LDMxICs0NiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyBTaGFyZWRDb29raWVKYXJRdCogc19zaGFyZWRDb29raWVKYXJRdCA9IDA7CiAKLXN0YXRp
YyBOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRleHQoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50KQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAg
ICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwotICAgIGlmICghbG9hZGVy
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbG9hZGVyLT5uZXR3b3JraW5nQ29udGV4
dCgpOwotfQotCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQor
ICAgIGlmICghbV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwotICAgIFFOZXR3
b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29r
aWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gbV9uZXR3b3JraW5nQ29udGV4
dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CiAgICAgaWYgKCFqYXIpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwg
Zmlyc3RQYXJ0eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgaWYg
KCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBm
aXJzdFBhcnR5VXJsKSkKKyAgICBRVXJsIGZpcnN0UGFydHlVcmwoZmlyc3RQYXJ0eUZvckNvb2tp
ZXMpOworICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMobV9uZXR3b3JraW5n
Q29udGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gUU5ldHdvcmtDb29raWU6OnBh
cnNlQ29va2llcyhRU3RyaW5nKHZhbHVlKS50b0xhdGluMSgpKTsKQEAgLTg4LDE2ICs3MSwxNSBA
QCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgamFyLT5zZXRD
b29raWVzRnJvbVVybChjb29raWVzLCB1cmxGb3JDb29raWVzKTsKIH0KIAotU3RyaW5nIGNvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29v
a2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZv
ckNvb2tpZXMpCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5n
Q29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQorICAgIGlmICghbV9uZXR3b3Jr
aW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFFOZXR3b3JrQ29va2ll
SmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsK
KyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gbV9uZXR3b3JraW5nQ29udGV4dC0+bmV0d29y
a0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CiAKICAgICBRVXJsIHVybEZvckNvb2tpZXMo
dXJsKTsKLSAgICBRVXJsIGZpcnN0UGFydHlVcmwoZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29r
aWVzKCkpOwotICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMoY29udGV4dCwg
dXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCisgICAgUVVybCBmaXJzdFBhcnR5VXJsKGZp
cnN0UGFydHlGb3JDb29raWVzKTsKKyAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJt
aXRzKG1fbmV0d29ya2luZ0NvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29v
a2llcyA9IGphci0+Y29va2llc0ZvclVybCh1cmxGb3JDb29raWVzKTsKQEAgLTExNCwxMiArOTYs
MTEgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LAogICAgIHJldHVy
biByZXN1bHRDb29raWVzLmpvaW4oUUxhdGluMVN0cmluZygiOyAiKSk7CiB9CiAKLVN0cmluZyBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwgJnVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2ll
cyovKQogewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRl
eHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKKyAgICBpZiAoIW1fbmV0d29ya2luZ0Nv
bnRleHQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBRTmV0d29ya0Nvb2tpZUphciog
amFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CisgICAg
UU5ldHdvcmtDb29raWVKYXIqIGphciA9IG1fbmV0d29ya2luZ0NvbnRleHQtPm5ldHdvcmtBY2Nl
c3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwogCiAgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNv
b2tpZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwoUVVybCh1cmwpKTsKICAgICBpZiAoY29va2llcy5p
c0VtcHR5KCkpCkBAIC0xMzIsNDEgKzExMyw0MCBAQCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihRTGF0aW4xU3Ry
aW5nKCI7ICIpKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQpCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwq
LywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewotICAgIE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlm
ICghY29udGV4dCkKKyAgICBpZiAoIW1fbmV0d29ya2luZ0NvbnRleHQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29v
a2llSmFyKCk7CisgICAgcmV0dXJuIG1fbmV0d29ya2luZ0NvbnRleHQtPm5ldHdvcmtBY2Nlc3NN
YW5hZ2VyKCktPmNvb2tpZUphcigpOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENv
b2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAv
KmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewog
ICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiAgICAgcmF3Q29va2llcy5jbGVhcigp
OwogICAgIHJldHVybiBmYWxzZTsgLy8gcmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAogfQog
Ci12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiAvKnVybCov
LCBjb25zdCBTdHJpbmcmIC8qY29va2llTmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0
IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxT
dHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgU2hhcmVkQ29va2llSmFyUXQq
IGphciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKICAgICBpZiAoamFyKQogICAgICAg
ICBqYXItPmdldEhvc3RuYW1lc1dpdGhDb29raWVzKGhvc3RuYW1lcyk7CiB9CiAKLXZvaWQgZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tp
ZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7
CiAgICAgU2hhcmVkQ29va2llSmFyUXQqIGphciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQo
KTsKICAgICBpZiAoamFyKQogICAgICAgICBqYXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSho
b3N0bmFtZSk7CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tpZUphcjo6
ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgU2hhcmVkQ29va2llSmFyUXQqIGphciA9IFNoYXJl
ZENvb2tpZUphclF0OjpzaGFyZWQoKTsKICAgICBpZiAoamFyKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkyLDcgKzEzOTIs
NyBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlRm9yVVJMKE5QTlVSCiAgICAgICAgIGlm
ICh1LmlzVmFsaWQoKSkgewogICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFy
ZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKICAgICAgICAgICAgIGlmIChmcmFtZSkgewotICAgICAg
ICAgICAgICAgIGNvbnN0IENTdHJpbmcgY29va2llU3RyID0gY29va2llcyhmcmFtZS0+ZG9jdW1l
bnQoKSwgdSkudXRmOCgpOworICAgICAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgY29va2llU3Ry
ID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llcyh1LCBmcmFt
ZS0+ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSkudXRmOCgpOwogICAgICAgICAg
ICAgICAgIGlmICghY29va2llU3RyLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGludCBzaXplID0gY29va2llU3RyLmxlbmd0aCgpOwogICAgICAgICAgICAgICAgICAgICAq
dmFsdWUgPSBzdGF0aWNfY2FzdDxjaGFyKj4oTlBOX01lbUFsbG9jKHNpemUrMSkpOwpAQCAtMTQ1
NCw3ICsxNDU0LDcgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTChOUE5VUgog
ICAgICAgICAgICAgY29uc3QgU3RyaW5nIGNvb2tpZVN0ciA9IFN0cmluZzo6ZnJvbVVURjgodmFs
dWUsIGxlbik7CiAgICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBnZXRGcmFtZShwYXJlbnRGcmFt
ZSgpLCBtX2VsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGZyYW1lICYmICFjb29raWVTdHIuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgIHNldENvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIHUs
IGNvb2tpZVN0cik7CisgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
Y29va2llSmFyKCkuc2V0Q29va2llcyh1LCBmcmFtZS0+ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0eUZv
ckNvb2tpZXMoKSwgY29va2llU3RyKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXN1
bHQgPSBOUEVSUl9JTlZBTElEX1VSTDsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMzI4MjkpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0xMC0yOSAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgY29va2llLXJlbGF0ZWQg
ZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5n
ZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRl
c2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojpjb29raWVzRm9y
VVJMKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6c2V0Q29va2llc0ZvclVSTCk6CisK
IDIwMTItMTAtMjkgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAg
ICAgV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoKSBzaG91bGQgZGlyZWN0bHkgdXNlIDggYml0IFN0cmlu
Z3MgZGF0YSBpbnN0ZWFkIG9mIHVwIGNvbnZlcnRpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDEzMjc5MykK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMxMCwxMiArMTMxMCwxOSBAQCBTdHJpbmcgUGx1Z2luVmlldzo6cHJv
eGllc0ZvclVSTChjb25zdCBTCiAKIFN0cmluZyBQbHVnaW5WaWV3Ojpjb29raWVzRm9yVVJMKGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewotICAgIHJldHVybiBjb29raWVzKG1fcGx1Z2luRWxl
bWVudC0+ZG9jdW1lbnQoKSwgS1VSTChLVVJMKCksIHVybFN0cmluZykpOworICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBGcmFtZSogZnJh
bWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUph
cigpLmNvb2tpZXMoS1VSTChLVVJMKCksIHVybFN0cmluZyksIGRvY3VtZW50LT5maXJzdFBhcnR5
Rm9yQ29va2llcygpKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpzZXRDb29raWVzRm9yVVJMKGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKIHsKLSAg
ICBzZXRDb29raWVzKG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKSwgS1VSTChLVVJMKCksIHVy
bFN0cmluZyksIGNvb2tpZVN0cmluZyk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9wbHVn
aW5FbGVtZW50LT5kb2N1bWVudCgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFt
ZSgpOworICAgIGlmIChmcmFtZSkKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
Y29va2llSmFyKCktPnNldENvb2tpZXMoS1VSTChLVVJMKCksIHVybFN0cmluZyksIGRvY3VtZW50
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVTdHJpbmcpOwogfQogCiBib29sIFBsdWdp
blZpZXc6OmdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3Rl
Y3Rpb25TcGFjZSwgU3RyaW5nJiB1c2VybmFtZSwgU3RyaW5nJiBwYXNzd29yZCkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzI4MjkpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEy
LTEwLTI5ICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBb
Q2hyb21pdW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1
cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5
MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
aXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlv
bmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISku
CisKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjb29raWVKYXIpOgorICAgICAgICAqIHNyYy9G
cmFtZUxvYWRlckNsaWVudEltcGwuaDoKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50SW1wbCk6
CisgICAgICAgICogc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KwogMjAxMi0xMC0yOSAgUGF0cmljayBEdWJyb3kgIDxkdWJyb3lAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IFN0eWxlIHRvb2xiYXIgdG8gbWF0Y2ggQ2hyb21pdW0gdG9v
bGJhciBvbiBDaHJvbWl1bS9NYWMuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9G
cmFtZUxvYWRlckNsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2NTEsNSArMTY1MSwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SW1wbDo6ZGlzcGF0Y2hXaWxsCiB9CiAjZW5kaWYKIAorV2ViQ29yZTo6Q29va2llSmFyIEZyYW1l
TG9hZGVyQ2xpZW50SW1wbDo6Y29va2llSmFyKCkKK3sKKyAgICBpZiAoIW1fd2ViRnJhbWUgfHwg
IW1fd2ViRnJhbWUtPmNsaWVudCgpKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFy
KDApOworICAgIFdlYkNvb2tpZUphciogd2ViQ29va2llSmFyID0gbV93ZWJGcmFtZS0+Y2xpZW50
KCktPmNvb2tpZUphcihtX3dlYkZyYW1lKTsKKyAgICBpZiAoIXdlYkNvb2tpZUphcikKKyAgICAg
ICAgd2ViQ29va2llSmFyID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jb29raWVKYXIo
KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKHdlYkNvb2tpZUphcik7Cit9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJh
bWVMb2FkZXJDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjUsNiArMjI1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aFdpbGxTdGFydFVzaW5nUGVlckNvbm5lY3Rpb25IYW5kbGVyKFdlYkNvcmU6OlJUQ1BlZXJDb25u
ZWN0aW9uSGFuZGxlciopIE9WRVJSSURFOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OkNvb2tpZUphciBjb29raWVKYXIoKSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICB2b2lkIG1h
a2VEb2N1bWVudFZpZXcoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxh
dGZvcm1TdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9QbGF0Zm9ybVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAs
ODYgKzEwMCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotc3RhdGljIFdlYkNvb2tpZUphciogZ2V0Q29va2llSmFyKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCkKLXsKLSAgICBXZWJGcmFtZUltcGwqIGZyYW1lSW1wbCA9IFdlYkZyYW1lSW1wbDo6
ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICBpZiAoIWZyYW1lSW1wbCB8fCAhZnJh
bWVJbXBsLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgV2ViQ29va2llSmFyKiBj
b29raWVKYXIgPSBmcmFtZUltcGwtPmNsaWVudCgpLT5jb29raWVKYXIoZnJhbWVJbXBsKTsKLSAg
ICBpZiAoIWNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyID0gV2ViS2l0OjpQbGF0Zm9ybTo6
Y3VycmVudCgpLT5jb29raWVKYXIoKTsKLSAgICByZXR1cm4gY29va2llSmFyOwotfQotCi0vLyBD
b29raWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29raWVzKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFdlYkNvb2tpZUph
ciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFy
KQotICAgICAgICBjb29raWVKYXItPnNldENvb2tpZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5
Rm9yQ29va2llcygpLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgU3Ry
aW5nIHJlc3VsdDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihk
b2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFy
LT5jb29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsKQot
ewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRD
b29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJlc3VsdCA9
IGNvb2tpZUphci0+Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBQ
bGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIHJhd0Nvb2tp
ZXMuY2xlYXIoKTsKLSAgICBXZWJWZWN0b3I8V2ViQ29va2llPiB3ZWJDb29raWVzOwotCi0gICAg
V2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlm
IChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+cmF3Q29va2llcyh1cmwsIGRvY3VtZW50
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB3ZWJDb29raWVzKTsKLQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFdl
YkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29va2llc1tpXTsKLSAgICAgICAgQ29va2llIGNvb2tp
ZSh3ZWJDb29raWUubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUudmFsdWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmRvbWFpbiwKLSAgICAgICAgICAgICAg
ICAgICAgICB3ZWJDb29raWUucGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUu
ZXhwaXJlcywKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuaHR0cE9ubHksCi0gICAg
ICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlY3VyZSwKLSAgICAgICAgICAgICAgICAgICAg
ICB3ZWJDb29raWUuc2Vzc2lvbik7Ci0gICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNvb2tpZSk7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtU3VwcG9ydDo6ZGVs
ZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIGNvb2tpZU5hbWUpCi17Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBn
ZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tp
ZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1T
dXBwb3J0Ojpjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENv
b2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0g
Y29va2llSmFyLT5jb29raWVzRW5hYmxlZChkb2N1bWVudC0+Y29va2llVVJMKCksIGRvY3VtZW50
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiAvLyBG
b250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKICNpZiBPUyhXSU5ET1dTKQpJbmRleDogU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDEzMjgyOSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMTAtMjkgIE1hcmsgUGlsZ3JpbSAgPHBpbGdy
aW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIGNvb2tpZS1yZWxh
dGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBj
aGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlv
biBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRRdDo6Y29va2llSmFyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoRnJhbWVMb2FkZXJDbGllbnRRdCk6CisKIDIwMTItMTAtMjQgIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIHN0cmF0ZWd5IGZvciBsb2FkZXIg
Y3VzdG9taXphdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysg
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTY3Niw2ICsxNjc2LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGll
bnRRdDo6ZW1pdExvYWRGaW5pc2gKICAgICBlbWl0IG1fd2ViRnJhbWUtPmxvYWRGaW5pc2hlZChv
ayk7CiB9CiAKK1dlYkNvcmU6OkNvb2tpZUphciBGcmFtZUxvYWRlckNsaWVudFF0Ojpjb29raWVK
YXIoKQoreworICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+bG9hZGVyKCkpCisgICAgICAg
IHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIoMCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tp
ZUphcihtX2ZyYW1lLT5sb2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSk7Cit9CisKIH0KIAog
I2luY2x1ZGUgIm1vY19GcmFtZUxvYWRlckNsaWVudFF0LmNwcCIKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCShy
ZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2RlZmlu
ZSBGcmFtZUxvYWRlckNsaWVudFF0X2gKIAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCkBAIC01Myw2ICs1NCw3IEBAIGNsYXNzIFFXZWJGcmFtZTsKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CitjbGFzcyBD
b29raWVKYXI7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBG
b3JtU3RhdGU7CkBAIC0yMjcsNiArMjI5LDggQEAgcHVibGljOgogCiAgICAgY29uc3QgS1VSTCYg
bGFzdFJlcXVlc3RlZFVybCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJlcXVlc3RlZFVybDsgfQog
CisgICAgdmlydHVhbCBXZWJDb3JlOjpDb29raWVKYXIgY29va2llSmFyKCkgT1ZFUlJJREU7CisK
ICAgICBzdGF0aWMgYm9vbCBkdW1wRnJhbWVMb2FkZXJDYWxsYmFja3M7CiAgICAgc3RhdGljIGJv
b2wgZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsKICAgICBzdGF0aWMgYm9vbCBkdW1wVXNl
ckdlc3R1cmVJbkZyYW1lTG9hZGVyQ2FsbGJhY2tzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171290</attachid>
            <date>2012-10-29 12:19:13 -0700</date>
            <delta_ts>2012-10-29 12:32:12 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-99340-20121029151734.patch</filename>
            <type>text/plain</type>
            <size>51935</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjgzNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0xMC0yOSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAg
ICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6Cisg
ICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAgICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29va2llRW5hYmxlZCk6CisgICAgICAgICogcGxh
dGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUph
cik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OkNvb2tpZUphcik6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1
cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGlt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNl
dENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
a2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2ll
SmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6
ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29v
a2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVB
bGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsdWdp
bnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1
ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6
CisKIDIwMTItMTAtMjkgIEdsZW5uIEFkYW1zICA8Z2xlbm5Ac2t5bmF2LmNvbT4KIAogICAgICAg
ICBbQ1NTT01dIEV4dHJhbmVvdXMgd2hpdGVzcGFjZSBpbiBDU1NJbXBvcnRSdWxlLmNzc1RleHQK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMwLDcgKzQzMCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0J1ZmZlcigpCiAg
ICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyKQogICAgICAgICAgICAgICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKG1fZG9j
dW1lbnQsIG1faWRlbnRpZmllciwgbV9oYW5kc2hha2UtPnNlcnZlckhhbmRzaGFrZVJlc3BvbnNl
KCkpOwogICAgICAgICAgICAgaWYgKCFtX2hhbmRzaGFrZS0+c2VydmVyU2V0Q29va2llKCkuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvb2tpZXNFbmFibGVkKG1fZG9jdW1lbnQp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmNvb2tpZXNFbmFibGVkKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsgLy8gRXhjZXB0aW9uIChmb3Ig
c2FuZGJveGVkIGRvY3VtZW50cykgaWdub3JlZC4KICAgICAgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC0+c2V0Q29va2llKG1faGFuZHNoYWtlLT5zZXJ2ZXJTZXRDb29raWUoKSwgZWMpOwogICAg
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOSBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgog
I2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVy
Q2xpZW50LmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgIkhUVFBQYXJz
ZXJzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjAwLDcgKzIwMywxMCBAQCBDU3RyaW5nIFdl
YlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoCiAgICAgS1VSTCB1cmwgPSBodHRwVVJMRm9y
QXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYgKG1fY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50
Kj4obV9jb250ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAgICBTdHJpbmcgY29va2llOworICAg
ICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAgICAgaWYgKGZyYW1l
KQorICAgICAgICAgICAgY29va2llID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2ll
SmFyKCkuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSk7CiAgICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIGZpZWxkcy5hcHBlbmQoIkNvb2tpZTogIiArIGNvb2tpZSk7CiAgICAgICAgIC8vIFNl
dCAiQ29va2llMjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBleGlzdHMgZm9yIHVybD8KQEAgLTI0
OSw3ICsyNTUsMTIgQEAgUGFzc1JlZlB0cjxXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0PiBXZQog
ICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2llcygpOwogICAg
IGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4dCk7Ci0gICAgICAgIFN0cmluZyBj
b29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAg
ICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAgICAgQ29va2llSmFyIGNvb2tp
ZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOworICAgICAgICAg
ICAgY29va2llID0gY29va2llSmFyLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwg
ZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgICAgICB9CiAgICAgICAgIGlm
ICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlcXVlc3QtPmFkZEhlYWRlckZpZWxk
KCJDb29raWUiLCBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxjb29raWU+IiBp
ZiBjb29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4MTYsNyArMzgxNiw5IEBAIFN0cmluZyBEb2N1bWVudDo6Y29va2ll
KEV4Y2VwdGlvbkNvZGUmIGUKICAgICBpZiAoY29va2llVVJMLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGNvb2tpZXModGhpcywgY29va2llVVJMKTsK
KyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4g
ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVzKGNvb2tpZVVS
TCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNl
dENvb2tpZShjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTM4Mzcs
NyArMzgzOSwyMyBAQCB2b2lkIERvY3VtZW50OjpzZXRDb29raWUoY29uc3QgU3RyaW5nJiB2CiAg
ICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldENv
b2tpZXModGhpcywgY29va2llVVJMLCB2YWx1ZSk7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAg
ICByZXR1cm47CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5z
ZXRDb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUp
OworfQorCitib29sIERvY3VtZW50Ojpjb29raWVzRW5hYmxlZCgpCit7CisgICAgaWYgKCFwYWdl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcGFnZSgpLT5zZXR0aW5ncygp
LT5jb29raWVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZnJh
bWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZyYW1lKCktPmxvYWRl
cigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llc0VuYWJsZWQodGhpcy0+Y29va2llVVJM
KCksIHRoaXMtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwogfQogCiBTdHJpbmcgRG9jdW1lbnQ6
OnJlZmVycmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMzI3
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
ODE3LDYgKzgxNyw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjb29raWUoRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29va2llKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKCk7CiAKICAgICBTdHJpbmcgcmVmZXJyZXIo
KSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw4
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdl
b2xvY2F0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uRXJyb3IuaCIKQEAg
LTUxMiw5ICs1MTQsMTAgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJy
bwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUoKSkpIHsKICAgICAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIFZlY3RvcjxLVVJMPiBh
bGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2ll
SmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwog
ICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJl
Z2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgIFZlY3RvcjxD
b29raWU+IGRvY0Nvb2tpZXNMaXN0OwotICAgICAgICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVk
ID0gZ2V0UmF3Q29va2llcyhkb2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCksIGRv
Y0Nvb2tpZXNMaXN0KTsKKyAgICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGNvb2tp
ZUphci5nZXRSYXdDb29raWVzKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBkb2N1bWVudC0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jQ29va2llc0xpc3QpOwogICAgICAgICAgICAgaWYg
KCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
bmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBmb3IgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBv
ZiBjb29raWVzLgogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNTUw
LDggKzU1Myw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXIKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0gYWxs
UmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tpZUph
ciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwogICAgICAgICBmb3Ig
KFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0ICE9
IGFsbFVSTHMuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVDb29raWUo
ZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVOYW1lKTsKKyAgICAg
ICAgICAgIGNvb2tpZUphci5kZWxldGVDb29raWUoS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCks
IGNvb2tpZU5hbWUpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRf
aAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5o
IgogI2luY2x1ZGUgIkljb25VUkwuaCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmVzLmgiCkBA
IC02NCw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBDYWNoZWRGcmFtZTsKICAgICBjbGFzcyBDb2xvcjsK
KyAgICBjbGFzcyBDb29raWVKYXI7CiAgICAgY2xhc3MgRE9NV2luZG93RXh0ZW5zaW9uOwogICAg
IGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKICAgICBjbGFzcyBEb2N1bWVudExvYWRlcjsKQEAgLTM0
OSw2ICszNTEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN0YXJ0VXNpbmdQZWVyQ29ubmVj
dGlvbkhhbmRsZXIoUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKikgeyB9CiAjZW5kaWYKKworICAg
ICAgICB2aXJ0dWFsIENvb2tpZUphciBjb29raWVKYXIoKSB7IHJldHVybiBDb29raWVKYXIoKTsg
fQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvTmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL05h
dmlnYXRvci5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2
aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogCi0jaW5jbHVkZSAiQ29va2llSmFyLmgi
CiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgogI2luY2x1ZGUgIkRPTVBsdWdpbkFycmF5
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTExOCw3ICsxMTcsNyBAQCBib29sIE5hdmln
YXRvcjo6Y29va2llRW5hYmxlZCgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSAmJiAh
bV9mcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJldHVybiBjb29raWVzRW5hYmxlZChtX2ZyYW1lLT5kb2N1bWVu
dCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29va2llc0VuYWJsZWQoKTsK
IH0KIAogYm9vbCBOYXZpZ2F0b3I6OmphdmFFbmFibGVkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTMgQEAK
ICNpZm5kZWYgQ29va2llSmFyX2gKICNkZWZpbmUgQ29va2llSmFyX2gKIAorI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KKyNlbmRpZgorI2lm
IFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCisjZW5kaWYKKwog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTMzLDIzICs0MCw1NCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBEb2N1bWVudDsKLSAgICBjbGFzcyBLVVJMOworY2xh
c3MgS1VSTDsKK3N0cnVjdCBDb29raWU7CiAKLSAgICBzdHJ1Y3QgQ29va2llOworY2xhc3MgQ29v
a2llSmFyIHsKK3B1YmxpYzoKKyAgICBDb29raWVKYXIoKQorICAgIHsKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyAgICAgICAgbV93ZWJDb29raWVKYXIgPSAwOworI2VuZGlmCisjaWYgUExBVEZP
Uk0oUVQpCisgICAgICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSAwOworI2VuZGlmCisgICAgfTsK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBleHBsaWNpdCBDb29raWVKYXIoV2ViS2l0OjpX
ZWJDb29raWVKYXIqIHdlYkNvb2tpZUphcikKKyAgICB7CisgICAgICAgIG1fd2ViQ29va2llSmFy
ID0gd2ViQ29va2llSmFyOworICAgIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyAgICBl
eHBsaWNpdCBDb29raWVKYXIoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCisgICAgeworICAg
ICAgICBtX25ldHdvcmtpbmdDb250ZXh0ID0gY29udGV4dDsKKyAgICB9OworI2VuZGlmCiAKICAg
ICAvLyBjb29raWVzIG9taXRzIEh0dHBPbmx5IGNvb2tpZXMuCi0gICAgU3RyaW5nIGNvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHZvaWQg
c2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKLSAgICBi
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0gICAgYm9vbCBnZXRSYXdDb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci0gICAg
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJik7CisgICAgU3RyaW5nIGNvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKKyAg
ICBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYsIGNvbnN0
IEtVUkwmKTsKKyAgICB2b2lkIHNldENvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmLCBjb25z
dCBLVVJMJik7CisgICAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJM
JiwgVmVjdG9yPENvb2tpZT4mKTsKKyAgICB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKICAgICB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKICAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsK
IAotfQorcHJpdmF0ZToKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBXZWJLaXQ6OldlYkNv
b2tpZUphciogbV93ZWJDb29raWVKYXI7CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyAgICBO
ZXR3b3JraW5nQ29udGV4dCogbV9uZXR3b3JraW5nQ29udGV4dDsKKyNlbmRpZgorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCShyZXZpc2lvbiAxMzI3OTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNzgsMTQgKzc4LDYgQEAgc3RydWN0IEZvbnRSZW5kZXJTdHlsZTsK
IAogY2xhc3MgUGxhdGZvcm1TdXBwb3J0IHsKIHB1YmxpYzoKLSAgICAvLyBDb29raWVzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgc3RhdGljIFN0cmluZyBjb29raWVzKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyBTdHJpbmcgY29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgc3RhdGlj
IGJvb2wgcmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29v
a2llPiYpOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpOwotICAgIHN0YXRpYyBib29sIGNv
b2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0KICAgICAvLyBGb250IC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lm
IE9TKFdJTkRPV1MpCiAgICAgc3RhdGljIGJvb2wgZW5zdXJlRm9udExvYWRlZChIRk9OVCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3Vh
bENvbnRleHQuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJDb29raWVKYXIu
aCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIktVUkwuaCIKQEAgLTI2OCw3ICsyNzAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvCiAKICAgICBLVVJMIG1vdmllVVJMID0gS1VSTChLVVJMKCksIHVybCk7
CiAgICAgVmVjdG9yPENvb2tpZT4gZG9jdW1lbnRDb29raWVzOwotICAgIGlmICghZ2V0UmF3Q29v
a2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgbW92aWVVUkwsIGRvY3VtZW50Q29va2llcykpCisgICAg
aWYgKCFmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5nZXRSYXdDb29raWVz
KG1vdmllVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jdW1lbnRDb29r
aWVzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChzaXplX3QgbmR4ID0gMDsgbmR4IDwg
ZG9jdW1lbnRDb29raWVzLnNpemUoKTsgbmR4KyspIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9Db29raWVKYXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0Nvb2tpZUphci5tbQkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYs
NyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlckNvb2tpZXMoCiAgICAgcmV0dXJu
IGZpbHRlcmVkQ29va2llczsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBj
b25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtOTUsNyArOTUsNyBAQCBTdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1TdHJp
bmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykK
IHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTExNCw3ICsxMTQsNyBA
QCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIFN0
cmluZygpOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQordm9pZCBDb29raWVKYXI6OnNldENv
b2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywg
Y29uc3QgU3RyaW5nJiBjb29raWVTdHIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogCkBAIC0xMzIsMTUgKzEzMiwxNSBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zCiAKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCiAgICAgaWYgKFJl
dGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50
Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQotICAgICAgICB3a1NldEhUVFBDb29raWVzRm9yVVJMKGNm
Q29va2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGRv
Y3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICAgICAgd2tTZXRIVFRQQ29va2ll
c0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29v
a2llVVJMLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiAgICAgZWxzZQogI2VuZGlmCi0gICAgICAg
IFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2ll
czpmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9jdW1lbnRVUkw6
ZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCldOworICAgICAgICBbW05TSFRUUENvb2tp
ZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6ZmlsdGVyZWRDb29r
aWVzLmdldCgpIGZvclVSTDpjb29raWVVUkwgbWFpbkRvY3VtZW50VVJMOmZpcnN0UGFydHlGb3JD
b29raWVzXTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLWJvb2wgY29v
a2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTE1OCw3ICsx
NTgsNyBAQCBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KikKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtV
UkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0
UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3Q29va2llcy5j
bGVhcigpOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKQEAgLTE5MSw3ICsxOTEs
NyBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRl
Q29va2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewogICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQg
ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKICAgICAKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lkIGdldEhvc3RuYW1lc1dpdGhD
b29raWVzKEhhc2hTZXQ8U3RyCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAot
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3Zv
aWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgCkBAIC0yNTUs
NyArMjU1LDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaQogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygp
Cit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAJKHJldmlzaW9uIDEzMjc5MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJDb29raWUuaCIK
ICNpbmNsdWRlICJDb29raWVTdG9yYWdlQ0ZOZXQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUg
IlNvZnRMaW5raW5nLmgiCkBAIC05NSw3ICs5NCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZBcnJh
eVJlZj4gZmlsdGVyQ29va2kKICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwogfQogCi12b2lk
IHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmws
IGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQog
ewogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBDRkhUVFBDb29raWVTdG9yYWdlIHN0
b3JlcyBhbiBlbXB0eSBjb29raWUsIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIu
CiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKQEAgLTEwNiw3ICsxMDUsNyBAQCB2b2lkIHNldENv
b2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgICAgIHJldHVybjsKIAogICAgIFJl
dGFpblB0cjxDRlVSTFJlZj4gdXJsQ0YoQWRvcHRDRiwgdXJsLmNyZWF0ZUNGVVJMKCkpOwotICAg
IFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9wdENGLCBkb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5jcmVhdGVDRlVSTCgpKTsKKyAgICBSZXRhaW5Q
dHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JDb29raWVzQ0YoQWRvcHRDRiwgZmlyc3RQYXJ0eUZv
ckNvb2tpZXMuY3JlYXRlQ0ZVUkwoKSk7CiAKICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4KICAgICAvLyBjb29raWVz
V2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3aXRob3V0IGEg
dmFsdWUKQEAgLTEyMyw3ICsxMjIsNyBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zCiAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMoY29va2llU3RvcmFn
ZS5nZXQoKSwgZmlsdGVyQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpLmdldCgpLCB1cmxDRi5nZXQo
KSwgZmlyc3RQYXJ0eUZvckNvb2tpZXNDRi5nZXQoKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29r
aWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlG
b3JDb29raWVzKi8pCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNv
b2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29v
a2llU3RvcmFnZSkKQEAgLTEzNyw3ICsxMzYsNyBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCogLypkb2N1bWVuCiAgICAgcmV0dXJuIChDRlN0cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRW
YWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRik7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBL
VVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykK
IHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9
IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpA
QCAtMTUxLDcgKzE1MCw3IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b24KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNG
LmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1
bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0
IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsK
ICAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IHBvbGljeSA9IENGSFRUUENvb2tp
ZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKICAgICBpZiAo
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50
Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQpAQCAtMTU5LDcgKzE1OCw3IEBAIGJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG8KICAgICByZXR1cm4gcG9saWN5ID09IENGSFRUUENv
b2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiB8fCBwb2xp
Y3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5czsKIH0KIAotYm9vbCBn
ZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKIHsKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpOwpAQCAtMTkzLDcgKzE5Miw3IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhj
b25zdCBEb2N1bWVudCosIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVD
b29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNv
b2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29v
a2llU3RvcmFnZSkKQEAgLTIxNCw3ICsyMTMsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBE
b2N1bWVudCosIGNvbnN0CiAgICAgfQogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENv
b2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0yMzIsNyArMjMxLDcg
QEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAgIH0KIH0KIAot
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3Zv
aWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3Rv
cmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9y
YWdlKQpAQCAtMjUxLDcgKzI1MCw3IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNv
bnN0IFN0cmkKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tp
ZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwog
ICAgIGlmICghY29va2llU3RvcmFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2No
cm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNTIgKzMy
LDc0IEBACiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAKICNpbmNsdWRlICJDb29raWUuaCIKLSNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1
ZGUgPHB1YmxpYy9XZWJDb29raWUuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29va2llSmFyLmg+
CisjaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwu
aD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKIHsKLSAgICBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoZG9jdW1lbnQsIHVybCwg
dmFsdWUpOworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJDb29raWVKYXIt
PnNldENvb2tpZSh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzLCB2YWx1ZSk7CiB9CiAKLVN0cmlu
ZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3Ry
aW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0
UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXMo
ZG9jdW1lbnQsIHVybCk7CisgICAgaWYgKCFtX3dlYkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIHJldHVybiBtX3dlYkNvb2tpZUphci0+Y29va2llcyh1cmwsIGZpcnN0
UGFydHlGb3JDb29raWVzKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENv
b2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1T
dXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAg
ICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0
dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGZp
cnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQpCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICByZXR1cm4g
UGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxlZChkb2N1bWVudCk7CisgICAgaWYgKCFtX3dl
YkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3dlYkNvb2tp
ZUphci0+Y29va2llc0VuYWJsZWQodXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9CiAKLWJv
b2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3Q29v
a2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0
OjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIHJhd0Nvb2tpZXMpOworICAgIHJhd0Nvb2tpZXMu
Y2xlYXIoKTsKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNvb2tpZT4gd2ViQ29v
a2llczsKKworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJDb29raWVKYXIt
PnJhd0Nvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcywgd2ViQ29va2llcyk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBjb25zdCBXZWJLaXQ6OldlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29va2llc1tpXTsK
KyAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwgd2ViQ29va2llLnZhbHVlLCB3
ZWJDb29raWUuZG9tYWluLCB3ZWJDb29raWUucGF0aCwgd2ViQ29va2llLmV4cGlyZXMsIHdlYkNv
b2tpZS5odHRwT25seSwgd2ViQ29va2llLnNlY3VyZSwgd2ViQ29va2llLnNlc3Npb24pOworICAg
ICAgICByYXdDb29raWVzLmFwcGVuZChjb29raWUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxl
dGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7Ci0g
ICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNv
b2tpZU5hbWUpOworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJDb29raWVK
YXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwogfQogCi12b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6
OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0bmFtZXMqLykK
IHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIC8qaG9zdG5hbWUqLykKIHsK
ICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENv
b2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIC8vIEZJ
WE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCShyZXZpc2lvbiAx
MzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFy
Q3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlICJDb29r
aWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtMjYsMzcgKzI1LDM3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tpZUphcjsKK3N0YXRp
YyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBzX2Nvb2tpZUphcjsKIAotdm9pZCBzZXRDb29raWVz
KERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
S1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewot
ICAgIGNvb2tpZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7CisgICAgc19jb29raWVKYXIu
c2V0KHVybC5zdHJpbmcoKSwgdmFsdWUpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpj
b29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2ll
cyovKQogewotICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CisgICAgcmV0
dXJuIHNfY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOwogfQogCi1TdHJpbmcgY29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3Qg
S1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8p
CiB7CiAgICAgLy8gRklYTUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llLgotICAgIHJldHVybiBj
b29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CisgICAgcmV0dXJuIHNfY29va2llSmFyLmdldCh1
cmwuc3RyaW5nKCkpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAv
KmRvY3VtZW50Ki8pCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYg
Lyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0
UmF3Q29va2llcyhjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlG
b3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1F
OiBOb3QgeWV0IGltcGxlbWVudGVkCiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVy
biBmYWxzZTsgLy8gcmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0
ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9p
ZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBTdHJp
bmcmIC8qY29va2llTmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVk
CiB9CkBAIC02OCwxNyArNjcsMTcgQEAgdm9pZCBzZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJyb3dz
aW5nRW5hYgogfQogI2VuZGlmCiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNl
dDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1lcyovKQogewogICAgIC8vIEZJWE1FOiBO
b3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNv
bnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3Qg
eWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tp
ZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tp
ZUphcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay93aW4vQ29va2llSmFyV2luLmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiS1VSTC5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNp
bmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8V2luaW5ldC5oPgpAQCAtMzYsMTUgKzM1LDE2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiAv
KmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKwordm9p
ZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZp
cnN0UGFydHlGb3JDb29raWVzKi8sIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgLy8gRklY
TUU6IERlYWwgd2l0aCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS4KKyAgICAvLyBG
SVhNRTogRGVhbCB3aXRoIGZpcnN0UGFydHlGb3JDb29raWVzLgogICAgIFN0cmluZyBzdHIgPSB1
cmwuc3RyaW5nKCk7CiAgICAgU3RyaW5nIHZhbCA9IHZhbHVlOwogICAgIEludGVybmV0U2V0Q29v
a2llKHN0ci5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2YWwuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3Vt
ZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNv
b2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVz
Ki8pCiB7CiAgICAgU3RyaW5nIHN0ciA9IHVybC5zdHJpbmcoKTsKIApAQCAtNjMsNDAgKzYzLDQw
IEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW4KICAgICByZXR1cm4g
U3RyaW5nOjphZG9wdChidWZmZXIpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJp
bmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBp
bmNsdWRlIEh0dHBPbmx5IGNvb2tpZQotICAgIHJldHVybiBjb29raWVzKGRvY3VtZW50LCB1cmwp
OworICAgIHJldHVybiBjb29raWVzKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1i
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIENv
b2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYg
LypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tp
ZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJM
JiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxD
b29raWU+JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVk
CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsgLy8gcmV0dXJuIHRy
dWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZShjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBTdHJpbmcmIC8qY29va2llTmFtZSovKQog
ewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZ2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUph
cjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1lcyov
KQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUph
cjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSovKQog
ewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxs
Q29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L0Nvb2tpZUphclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSAr
MzEsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0
LmgiCiAjaW5jbHVkZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgpAQCAtNDksMzEgKzQ2LDE3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIFNoYXJlZENvb2tpZUphclF0KiBzX3NoYXJl
ZENvb2tpZUphclF0ID0gMDsKIAotc3RhdGljIE5ldHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5n
Q29udGV4dChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit2b2lkIENvb2tpZUphcjo6c2V0Q29v
a2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVy
biAwOwotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJh
bWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+
bG9hZGVyKCk7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3Vt
ZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQog
ICAgICAgICByZXR1cm47Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFy
KiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29r
aWVKYXIoKTsKICAgICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgUVVybCB1cmxG
b3JDb29raWVzKHVybCk7Ci0gICAgUVVybCBmaXJzdFBhcnR5VXJsKGRvY3VtZW50LT5maXJzdFBh
cnR5Rm9yQ29va2llcygpKTsKLSAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRz
KGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQorICAgIFFVcmwgZmlyc3RQ
YXJ0eVVybChmaXJzdFBhcnR5Rm9yQ29va2llcyk7CisgICAgaWYgKCF0aGlyZFBhcnR5Q29va2ll
UG9saWN5UGVybWl0cyhtX25ldHdvcmtpbmdDb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBh
cnR5VXJsKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNv
b2tpZXMgPSBRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJpbmcodmFsdWUpLnRvTGF0
aW4xKCkpOwpAQCAtODgsMTYgKzcxLDE1IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnMKICAgICBqYXItPnNldENvb2tpZXNGcm9tVXJsKGNvb2tpZXMsIHVybEZvckNv
b2tpZXMpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICBOZXR3b3JraW5nQ29u
dGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNv
bnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nl
c3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBt
X25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsK
IAogICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQYXJ0eVVybChk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5Q29v
a2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkK
KyAgICBRVXJsIGZpcnN0UGFydHlVcmwoZmlyc3RQYXJ0eUZvckNvb2tpZXMpOworICAgIGlmICgh
dGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMobV9uZXR3b3JraW5nQ29udGV4dCwgdXJsRm9y
Q29va2llcywgZmlyc3RQYXJ0eVVybCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAg
IFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKHVybEZv
ckNvb2tpZXMpOwpAQCAtMTE0LDEyICs5NiwxMSBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsCiAgICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihRTGF0aW4xU3Ry
aW5nKCI7ICIpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0
KQorICAgIGlmICghbV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFu
YWdlcigpLT5jb29raWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gbV9uZXR3
b3JraW5nQ29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CiAKICAg
ICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0ZvclVybChRVXJs
KHVybCkpOwogICAgIGlmIChjb29raWVzLmlzRW1wdHkoKSkKQEAgLTEzMiw0MSArMTEzLDQwIEBA
IFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24KICAgICByZXR1cm4gcmVz
dWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1ib29sIGNvb2tpZXNF
bmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgQ29va2llSmFyOjpjb29raWVz
RW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JD
b29raWVzKi8pCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5n
Q29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQorICAgIGlmICghbV9uZXR3b3Jr
aW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb250ZXh0LT5u
ZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICByZXR1cm4gbV9uZXR3b3Jr
aW5nQ29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CiB9CiAKLWJv
b2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtV
UkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9y
PENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50
ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4g
dHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRl
Q29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29raWVOYW1lKi8p
CiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2ll
SmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykK
IHsKICAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJl
ZCgpOwogICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
aG9zdG5hbWVzKTsKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKICAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0g
U2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKIH0KIAotdm9pZCBkZWxldGVBbGxD
b29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBTaGFy
ZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlm
IChqYXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9u
IDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzOTIsNyArMTM5Miw3IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFs
dWVGb3JVUkwoTlBOVVIKICAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBG
cmFtZSogZnJhbWUgPSBnZXRGcmFtZShwYXJlbnRGcmFtZSgpLCBtX2VsZW1lbnQpOwogICAgICAg
ICAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ1N0cmluZyBjb29raWVT
dHIgPSBjb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCB1KS51dGY4KCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgQ1N0cmluZyBjb29raWVTdHIgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5j
b29raWVKYXIoKS5jb29raWVzKHUsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKS51dGY4KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFjb29raWVTdHIuaXNOdWxsKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHNpemUgPSBjb29raWVTdHIubGVuZ3Ro
KCk7CiAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5f
TWVtQWxsb2Moc2l6ZSsxKSk7CkBAIC0xNDU0LDcgKzE0NTQsNyBAQCBOUEVycm9yIFBsdWdpblZp
ZXc6OnNldFZhbHVlRm9yVVJMKE5QTlVSCiAgICAgICAgICAgICBjb25zdCBTdHJpbmcgY29va2ll
U3RyID0gU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSwgbGVuKTsKICAgICAgICAgICAgIEZyYW1lKiBm
cmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7CiAgICAgICAgICAgICBp
ZiAoZnJhbWUgJiYgIWNvb2tpZVN0ci5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgc2V0Q29v
a2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSwgY29va2llU3RyKTsKKyAgICAgICAgICAgICAgICBm
cmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVzKHUsIGZyYW1l
LT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVTdHIpOwogICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOwogICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjgzNikKKysrIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTEwLTI5
ICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25h
bCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4g
UGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQWxsQ29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnN0YXJ0T2JzZXJ2aW5nQ29va2ll
Q2hhbmdlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdl
YktpdDo6UGx1Z2luVmlldzo6c2V0Q29va2llc0ZvclVSTCk6CisKIDIwMTItMTAtMjkgIE1pY2hh
ZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgV0tTdHJpbmdDb3B5Q0ZT
dHJpbmcoKSBzaG91bGQgZGlyZWN0bHkgdXNlIDggYml0IFN0cmluZ3MgZGF0YSBpbnN0ZWFkIG9m
IHVwIGNvbnZlcnRpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhv
c3RuYW1lc1dpdGhDCiAKICAgICBIYXNoU2V0PFN0cmluZz4gaG9zdG5hbWVzOwogCi0gICAgV2Vi
Q29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKKyAgICBXZWJDb3JlOjpD
b29raWVKYXIoKS0+Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKIAogICAgIFZl
Y3RvcjxTdHJpbmc+IGhvc3RuYW1lTGlzdDsKICAgICBjb3B5VG9WZWN0b3IoaG9zdG5hbWVzLCBo
b3N0bmFtZUxpc3QpOwpAQCAtNjksMjEgKzY5LDIxIEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6
ZGVsZXRlQ29va2llc0ZvckgKIHsKICAgICBXZWJQcm9jZXNzOjpMb2NhbFRlcm1pbmF0aW9uRGlz
YWJsZXIgdGVybWluYXRpb25EaXNhYmxlcihXZWJQcm9jZXNzOjpzaGFyZWQoKSk7CiAKLSAgICBX
ZWJDb3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoaG9zdG5hbWUpOworICAgIFdlYkNvcmU6
OkNvb2tpZUphcigpLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWUoaG9zdG5hbWUpOwogfQogCiB2
b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIFdlYlByb2Nl
c3M6OkxvY2FsVGVybWluYXRpb25EaXNhYmxlciB0ZXJtaW5hdGlvbkRpc2FibGVyKFdlYlByb2Nl
c3M6OnNoYXJlZCgpKTsKIAotICAgIFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMoKTsKKyAgICBX
ZWJDb3JlOjpDb29raWVKYXIoKS0+ZGVsZXRlQWxsQ29va2llcygpOwogfQogCiB2b2lkIFdlYkNv
b2tpZU1hbmFnZXI6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcygpCiB7CiAgICAgV2ViUHJv
Y2Vzczo6TG9jYWxUZXJtaW5hdGlvbkRpc2FibGVyIHRlcm1pbmF0aW9uRGlzYWJsZXIoV2ViUHJv
Y2Vzczo6c2hhcmVkKCkpOwogCi0gICAgV2ViQ29yZTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFu
Z2VzKCk7CisgICAgV2ViQ29yZTo6Q29va2llSmFyKCktPnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hh
bmdlcygpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnN0b3BPYnNlcnZpbmdDb29raWVD
aGFuZ2VzKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxMCwxMiAr
MTMxMCwxOSBAQCBTdHJpbmcgUGx1Z2luVmlldzo6cHJveGllc0ZvclVSTChjb25zdCBTCiAKIFN0
cmluZyBQbHVnaW5WaWV3Ojpjb29raWVzRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQog
ewotICAgIHJldHVybiBjb29raWVzKG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKSwgS1VSTChL
VVJMKCksIHVybFN0cmluZykpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fcGx1Z2luRWxl
bWVudC0+ZG9jdW1lbnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsK
KyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGZy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZXMoS1VSTChLVVJMKCks
IHVybFN0cmluZyksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKIH0KIAogdm9p
ZCBQbHVnaW5WaWV3OjpzZXRDb29raWVzRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBj
b25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKIHsKLSAgICBzZXRDb29raWVzKG1fcGx1Z2luRWxl
bWVudC0+ZG9jdW1lbnQoKSwgS1VSTChLVVJMKCksIHVybFN0cmluZyksIGNvb2tpZVN0cmluZyk7
CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpOwor
ICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgIGlmIChmcmFtZSkKKyAg
ICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCktPnNldENvb2tpZXMo
S1VSTChLVVJMKCksIHVybFN0cmluZyksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygp
LCBjb29raWVTdHJpbmcpOwogfQogCiBib29sIFBsdWdpblZpZXc6OmdldEF1dGhlbnRpY2F0aW9u
SW5mbyhjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSwgU3RyaW5nJiB1c2Vy
bmFtZSwgU3RyaW5nJiBwYXNzd29yZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMzI4MzYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTEwLTI5ICBNYXJrIFBpbGdyaW0gIDxw
aWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92ZSBjb29raWUt
cmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0
aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVu
Y3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvRnJhbWVM
b2FkZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJ
bXBsOjpjb29raWVKYXIpOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaDoK
KyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50SW1wbCk6CisgICAgICAgICogc3JjL1BsYXRmb3Jt
U3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0xMC0yOSAgUGF0cmljayBE
dWJyb3kgIDxkdWJyb3lAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN0
eWxlIHRvb2xiYXIgdG8gbWF0Y2ggQ2hyb21pdW0gdG9vbGJhciBvbiBDaHJvbWl1bS9NYWMuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xp
ZW50SW1wbC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NTEsNSAr
MTY1MSwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlzcGF0Y2hXaWxsCiB9CiAj
ZW5kaWYKIAorV2ViQ29yZTo6Q29va2llSmFyIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y29va2ll
SmFyKCkKK3sKKyAgICBpZiAoIW1fd2ViRnJhbWUgfHwgIW1fd2ViRnJhbWUtPmNsaWVudCgpKQor
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKDApOworICAgIFdlYkNvb2tpZUphciog
d2ViQ29va2llSmFyID0gbV93ZWJGcmFtZS0+Y2xpZW50KCktPmNvb2tpZUphcihtX3dlYkZyYW1l
KTsKKyAgICBpZiAoIXdlYkNvb2tpZUphcikKKyAgICAgICAgd2ViQ29va2llSmFyID0gV2ViS2l0
OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jb29raWVKYXIoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6
Q29va2llSmFyKHdlYkNvb2tpZUphcik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJ
bXBsLmgJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Zy
YW1lTG9hZGVyQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTdGFydFVzaW5nUGVlckNvbm5l
Y3Rpb25IYW5kbGVyKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlciopIE9WRVJSSURF
OwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZUphciBjb29raWVKYXIoKSBP
VkVSUklERTsKKwogcHJpdmF0ZToKICAgICB2b2lkIG1ha2VEb2N1bWVudFZpZXcoKTsKIApJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCShy
ZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1
cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsODYgKzEwMCw2IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFdlYkNvb2tpZUph
ciogZ2V0Q29va2llSmFyKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBXZWJGcmFt
ZUltcGwqIGZyYW1lSW1wbCA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFt
ZSgpKTsKLSAgICBpZiAoIWZyYW1lSW1wbCB8fCAhZnJhbWVJbXBsLT5jbGllbnQoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBmcmFtZUltcGwtPmNs
aWVudCgpLT5jb29raWVKYXIoZnJhbWVJbXBsKTsKLSAgICBpZiAoIWNvb2tpZUphcikKLSAgICAg
ICAgY29va2llSmFyID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jb29raWVKYXIoKTsK
LSAgICByZXR1cm4gY29va2llSmFyOwotfQotCi0vLyBDb29raWVzIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZv
aWQgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCYgdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2ll
SmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXItPnNl
dENvb2tpZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7Ci19
Ci0KLVN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBXZWJDb29r
aWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tp
ZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzKHVybCwgZG9jdW1lbnQt
PmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cmlu
ZyBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERv
Y3VtZW50KiBkb2N1bWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0g
ICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAg
IGlmIChjb29raWVKYXIpCi0gICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29r
aWU+JiByYXdDb29raWVzKQotewotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBXZWJWZWN0
b3I8V2ViQ29va2llPiB3ZWJDb29raWVzOwotCi0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIg
PSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNv
b2tpZUphci0+cmF3Q29va2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygp
LCB3ZWJDb29raWVzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvb2tpZSYgd2ViQ29va2llID0gd2Vi
Q29va2llc1tpXTsKLSAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICB3ZWJDb29raWUudmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAg
d2ViQ29va2llLmRvbWFpbiwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUucGF0aCwK
LSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuZXhwaXJlcywKLSAgICAgICAgICAgICAg
ICAgICAgICB3ZWJDb29raWUuaHR0cE9ubHksCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29v
a2llLnNlY3VyZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2Vzc2lvbik7Ci0g
ICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNvb2tpZSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCi17
Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwot
ICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwg
Y29va2llTmFtZSk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxlZChj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAg
ICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAg
aWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzRW5hYmxl
ZChkb2N1bWVudC0+Y29va2llVVJMKCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygp
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiAvLyBGb250IC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICNp
ZiBPUyhXSU5ET1dTKQpJbmRleDogU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjgzNikKKysrIFNv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTItMTAtMjkgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFtDaHJvbWl1bV0gUmVtb3ZlIGNvb2tpZS1yZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRm
b3JtU3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTkzNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwg
cmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6Y29va2llSmFyKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50UXQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnRR
dCk6CisKIDIwMTItMTAtMjQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCBhIHN0cmF0ZWd5IGZvciBsb2FkZXIgY3VzdG9taXphdGlvbi4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFF0LmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3Niw2
ICsxNjc2LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZW1pdExvYWRGaW5pc2gKICAg
ICBlbWl0IG1fd2ViRnJhbWUtPmxvYWRGaW5pc2hlZChvayk7CiB9CiAKK1dlYkNvcmU6OkNvb2tp
ZUphciBGcmFtZUxvYWRlckNsaWVudFF0Ojpjb29raWVKYXIoKQoreworICAgIGlmICghbV9mcmFt
ZSB8fCAhbV9mcmFtZS0+bG9hZGVyKCkpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpDb29raWVK
YXIoMCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tpZUphcihtX2ZyYW1lLT5sb2FkZXIoKS0+
bmV0d29ya2luZ0NvbnRleHQoKSk7Cit9CisKIH0KIAogI2luY2x1ZGUgIm1vY19GcmFtZUxvYWRl
ckNsaWVudFF0LmNwcCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2RlZmluZSBGcmFtZUxvYWRlckNsaWVudFF0X2gK
IAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC01Myw2
ICs1NCw3IEBAIGNsYXNzIFFXZWJGcmFtZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
QXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CitjbGFzcyBDb29raWVKYXI7CiBjbGFzcyBEb2N1bWVu
dExvYWRlcjsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGb3JtU3RhdGU7CkBAIC0yMjcsNiArMjI5
LDggQEAgcHVibGljOgogCiAgICAgY29uc3QgS1VSTCYgbGFzdFJlcXVlc3RlZFVybCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGFzdFJlcXVlc3RlZFVybDsgfQogCisgICAgdmlydHVhbCBXZWJDb3JlOjpD
b29raWVKYXIgY29va2llSmFyKCkgT1ZFUlJJREU7CisKICAgICBzdGF0aWMgYm9vbCBkdW1wRnJh
bWVMb2FkZXJDYWxsYmFja3M7CiAgICAgc3RhdGljIGJvb2wgZHVtcFByb2dyZXNzRmluaXNoZWRD
YWxsYmFjazsKICAgICBzdGF0aWMgYm9vbCBkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZGVyQ2Fs
bGJhY2tzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171293</attachid>
            <date>2012-10-29 12:32:16 -0700</date>
            <delta_ts>2012-10-29 13:00:24 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-99340-20121029153038.patch</filename>
            <type>text/plain</type>
            <size>51681</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjgzNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0xMC0yOSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAg
ICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6Cisg
ICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAgICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29va2llRW5hYmxlZCk6CisgICAgICAgICogcGxh
dGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUph
cik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OkNvb2tpZUphcik6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1
cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGlt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNl
dENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
a2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2ll
SmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6
ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29v
a2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVB
bGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsdWdp
bnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1
ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6
CisKIDIwMTItMTAtMjkgIEdsZW5uIEFkYW1zICA8Z2xlbm5Ac2t5bmF2LmNvbT4KIAogICAgICAg
ICBbQ1NTT01dIEV4dHJhbmVvdXMgd2hpdGVzcGFjZSBpbiBDU1NJbXBvcnRSdWxlLmNzc1RleHQK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMwLDcgKzQzMCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0J1ZmZlcigpCiAg
ICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyKQogICAgICAgICAgICAgICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKG1fZG9j
dW1lbnQsIG1faWRlbnRpZmllciwgbV9oYW5kc2hha2UtPnNlcnZlckhhbmRzaGFrZVJlc3BvbnNl
KCkpOwogICAgICAgICAgICAgaWYgKCFtX2hhbmRzaGFrZS0+c2VydmVyU2V0Q29va2llKCkuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvb2tpZXNFbmFibGVkKG1fZG9jdW1lbnQp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmNvb2tpZXNFbmFibGVkKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsgLy8gRXhjZXB0aW9uIChmb3Ig
c2FuZGJveGVkIGRvY3VtZW50cykgaWdub3JlZC4KICAgICAgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC0+c2V0Q29va2llKG1faGFuZHNoYWtlLT5zZXJ2ZXJTZXRDb29raWUoKSwgZWMpOwogICAg
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOSBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgog
I2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVy
Q2xpZW50LmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgIkhUVFBQYXJz
ZXJzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjAwLDcgKzIwMywxMCBAQCBDU3RyaW5nIFdl
YlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoCiAgICAgS1VSTCB1cmwgPSBodHRwVVJMRm9y
QXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYgKG1fY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50
Kj4obV9jb250ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAgICBTdHJpbmcgY29va2llOworICAg
ICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAgICAgaWYgKGZyYW1l
KQorICAgICAgICAgICAgY29va2llID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2ll
SmFyKCkuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSk7CiAgICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIGZpZWxkcy5hcHBlbmQoIkNvb2tpZTogIiArIGNvb2tpZSk7CiAgICAgICAgIC8vIFNl
dCAiQ29va2llMjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBleGlzdHMgZm9yIHVybD8KQEAgLTI0
OSw3ICsyNTUsMTIgQEAgUGFzc1JlZlB0cjxXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0PiBXZQog
ICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2llcygpOwogICAg
IGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4dCk7Ci0gICAgICAgIFN0cmluZyBj
b29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAg
ICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAgICAgQ29va2llSmFyIGNvb2tp
ZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOworICAgICAgICAg
ICAgY29va2llID0gY29va2llSmFyLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwg
ZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgICAgICB9CiAgICAgICAgIGlm
ICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlcXVlc3QtPmFkZEhlYWRlckZpZWxk
KCJDb29raWUiLCBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxjb29raWU+IiBp
ZiBjb29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4MTYsNyArMzgxNiw5IEBAIFN0cmluZyBEb2N1bWVudDo6Y29va2ll
KEV4Y2VwdGlvbkNvZGUmIGUKICAgICBpZiAoY29va2llVVJMLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGNvb2tpZXModGhpcywgY29va2llVVJMKTsK
KyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4g
ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVzKGNvb2tpZVVS
TCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNl
dENvb2tpZShjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTM4Mzcs
NyArMzgzOSwyMyBAQCB2b2lkIERvY3VtZW50OjpzZXRDb29raWUoY29uc3QgU3RyaW5nJiB2CiAg
ICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldENv
b2tpZXModGhpcywgY29va2llVVJMLCB2YWx1ZSk7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAg
ICByZXR1cm47CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5z
ZXRDb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUp
OworfQorCitib29sIERvY3VtZW50Ojpjb29raWVzRW5hYmxlZCgpCit7CisgICAgaWYgKCFwYWdl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcGFnZSgpLT5zZXR0aW5ncygp
LT5jb29raWVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZnJh
bWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZyYW1lKCktPmxvYWRl
cigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llc0VuYWJsZWQodGhpcy0+Y29va2llVVJM
KCksIHRoaXMtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwogfQogCiBTdHJpbmcgRG9jdW1lbnQ6
OnJlZmVycmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMzI3
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
ODE3LDYgKzgxNyw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjb29raWUoRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29va2llKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKCk7CiAKICAgICBTdHJpbmcgcmVmZXJyZXIo
KSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw4
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdl
b2xvY2F0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uRXJyb3IuaCIKQEAg
LTUxMiw5ICs1MTQsMTAgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJy
bwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUoKSkpIHsKICAgICAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIFZlY3RvcjxLVVJMPiBh
bGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2ll
SmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwog
ICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJl
Z2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgIFZlY3RvcjxD
b29raWU+IGRvY0Nvb2tpZXNMaXN0OwotICAgICAgICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVk
ID0gZ2V0UmF3Q29va2llcyhkb2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCksIGRv
Y0Nvb2tpZXNMaXN0KTsKKyAgICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGNvb2tp
ZUphci5nZXRSYXdDb29raWVzKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBkb2N1bWVudC0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jQ29va2llc0xpc3QpOwogICAgICAgICAgICAgaWYg
KCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
bmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBmb3IgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBv
ZiBjb29raWVzLgogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNTUw
LDggKzU1Myw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXIKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0gYWxs
UmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tpZUph
ciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwogICAgICAgICBmb3Ig
KFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0ICE9
IGFsbFVSTHMuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVDb29raWUo
ZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVOYW1lKTsKKyAgICAg
ICAgICAgIGNvb2tpZUphci5kZWxldGVDb29raWUoS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCks
IGNvb2tpZU5hbWUpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRf
aAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5o
IgogI2luY2x1ZGUgIkljb25VUkwuaCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmVzLmgiCkBA
IC02NCw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBDYWNoZWRGcmFtZTsKICAgICBjbGFzcyBDb2xvcjsK
KyAgICBjbGFzcyBDb29raWVKYXI7CiAgICAgY2xhc3MgRE9NV2luZG93RXh0ZW5zaW9uOwogICAg
IGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKICAgICBjbGFzcyBEb2N1bWVudExvYWRlcjsKQEAgLTM0
OSw2ICszNTEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN0YXJ0VXNpbmdQZWVyQ29ubmVj
dGlvbkhhbmRsZXIoUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKikgeyB9CiAjZW5kaWYKKworICAg
ICAgICB2aXJ0dWFsIENvb2tpZUphciBjb29raWVKYXIoKSB7IHJldHVybiBDb29raWVKYXIoKTsg
fQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvTmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL05h
dmlnYXRvci5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2
aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogCi0jaW5jbHVkZSAiQ29va2llSmFyLmgi
CiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgogI2luY2x1ZGUgIkRPTVBsdWdpbkFycmF5
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTExOCw3ICsxMTcsNyBAQCBib29sIE5hdmln
YXRvcjo6Y29va2llRW5hYmxlZCgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSAmJiAh
bV9mcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJldHVybiBjb29raWVzRW5hYmxlZChtX2ZyYW1lLT5kb2N1bWVu
dCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29va2llc0VuYWJsZWQoKTsK
IH0KIAogYm9vbCBOYXZpZ2F0b3I6OmphdmFFbmFibGVkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTMgQEAK
ICNpZm5kZWYgQ29va2llSmFyX2gKICNkZWZpbmUgQ29va2llSmFyX2gKIAorI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KKyNlbmRpZgorI2lm
IFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCisjZW5kaWYKKwog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTMzLDIzICs0MCw1NCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBEb2N1bWVudDsKLSAgICBjbGFzcyBLVVJMOworY2xh
c3MgS1VSTDsKK3N0cnVjdCBDb29raWU7CiAKLSAgICBzdHJ1Y3QgQ29va2llOworY2xhc3MgQ29v
a2llSmFyIHsKK3B1YmxpYzoKKyAgICBDb29raWVKYXIoKQorICAgIHsKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyAgICAgICAgbV93ZWJDb29raWVKYXIgPSAwOworI2VuZGlmCisjaWYgUExBVEZP
Uk0oUVQpCisgICAgICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSAwOworI2VuZGlmCisgICAgfTsK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBleHBsaWNpdCBDb29raWVKYXIoV2ViS2l0OjpX
ZWJDb29raWVKYXIqIHdlYkNvb2tpZUphcikKKyAgICB7CisgICAgICAgIG1fd2ViQ29va2llSmFy
ID0gd2ViQ29va2llSmFyOworICAgIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyAgICBl
eHBsaWNpdCBDb29raWVKYXIoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCisgICAgeworICAg
ICAgICBtX25ldHdvcmtpbmdDb250ZXh0ID0gY29udGV4dDsKKyAgICB9OworI2VuZGlmCiAKICAg
ICAvLyBjb29raWVzIG9taXRzIEh0dHBPbmx5IGNvb2tpZXMuCi0gICAgU3RyaW5nIGNvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHZvaWQg
c2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKLSAgICBi
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0gICAgYm9vbCBnZXRSYXdDb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci0gICAg
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJik7CisgICAgU3RyaW5nIGNvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKKyAg
ICBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYsIGNvbnN0
IEtVUkwmKTsKKyAgICB2b2lkIHNldENvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmLCBjb25z
dCBLVVJMJik7CisgICAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJM
JiwgVmVjdG9yPENvb2tpZT4mKTsKKyAgICB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKICAgICB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKICAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsK
IAotfQorcHJpdmF0ZToKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBXZWJLaXQ6OldlYkNv
b2tpZUphciogbV93ZWJDb29raWVKYXI7CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyAgICBO
ZXR3b3JraW5nQ29udGV4dCogbV9uZXR3b3JraW5nQ29udGV4dDsKKyNlbmRpZgorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCShyZXZpc2lvbiAxMzI3OTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNzgsMTQgKzc4LDYgQEAgc3RydWN0IEZvbnRSZW5kZXJTdHlsZTsK
IAogY2xhc3MgUGxhdGZvcm1TdXBwb3J0IHsKIHB1YmxpYzoKLSAgICAvLyBDb29raWVzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgc3RhdGljIFN0cmluZyBjb29raWVzKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyBTdHJpbmcgY29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgc3RhdGlj
IGJvb2wgcmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29v
a2llPiYpOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpOwotICAgIHN0YXRpYyBib29sIGNv
b2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0KICAgICAvLyBGb250IC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lm
IE9TKFdJTkRPV1MpCiAgICAgc3RhdGljIGJvb2wgZW5zdXJlRm9udExvYWRlZChIRk9OVCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3Vh
bENvbnRleHQuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJDb29raWVKYXIu
aCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIktVUkwuaCIKQEAgLTI2OCw3ICsyNzAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvCiAKICAgICBLVVJMIG1vdmllVVJMID0gS1VSTChLVVJMKCksIHVybCk7
CiAgICAgVmVjdG9yPENvb2tpZT4gZG9jdW1lbnRDb29raWVzOwotICAgIGlmICghZ2V0UmF3Q29v
a2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgbW92aWVVUkwsIGRvY3VtZW50Q29va2llcykpCisgICAg
aWYgKCFmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5nZXRSYXdDb29raWVz
KG1vdmllVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jdW1lbnRDb29r
aWVzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChzaXplX3QgbmR4ID0gMDsgbmR4IDwg
ZG9jdW1lbnRDb29raWVzLnNpemUoKTsgbmR4KyspIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9Db29raWVKYXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0Nvb2tpZUphci5tbQkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYs
NyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlckNvb2tpZXMoCiAgICAgcmV0dXJu
IGZpbHRlcmVkQ29va2llczsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBj
b25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtOTUsNyArOTUsNyBAQCBTdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1TdHJp
bmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykK
IHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTExNCw3ICsxMTQsNyBA
QCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIFN0
cmluZygpOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQordm9pZCBDb29raWVKYXI6OnNldENv
b2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywg
Y29uc3QgU3RyaW5nJiBjb29raWVTdHIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogCkBAIC0xMzIsMTUgKzEzMiwxNSBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zCiAKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCiAgICAgaWYgKFJl
dGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50
Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQotICAgICAgICB3a1NldEhUVFBDb29raWVzRm9yVVJMKGNm
Q29va2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGRv
Y3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICAgICAgd2tTZXRIVFRQQ29va2ll
c0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29v
a2llVVJMLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiAgICAgZWxzZQogI2VuZGlmCi0gICAgICAg
IFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2ll
czpmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9jdW1lbnRVUkw6
ZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCldOworICAgICAgICBbW05TSFRUUENvb2tp
ZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6ZmlsdGVyZWRDb29r
aWVzLmdldCgpIGZvclVSTDpjb29raWVVUkwgbWFpbkRvY3VtZW50VVJMOmZpcnN0UGFydHlGb3JD
b29raWVzXTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLWJvb2wgY29v
a2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTE1OCw3ICsx
NTgsNyBAQCBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KikKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtV
UkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0
UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3Q29va2llcy5j
bGVhcigpOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKQEAgLTE5MSw3ICsxOTEs
NyBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRl
Q29va2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewogICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQg
ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKICAgICAKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lkIGdldEhvc3RuYW1lc1dpdGhD
b29raWVzKEhhc2hTZXQ8U3RyCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAot
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3Zv
aWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgCkBAIC0yNTUs
NyArMjU1LDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaQogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygp
Cit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAJKHJldmlzaW9uIDEzMjc5MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJDb29raWUuaCIK
ICNpbmNsdWRlICJDb29raWVTdG9yYWdlQ0ZOZXQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUg
IlNvZnRMaW5raW5nLmgiCkBAIC05NSw3ICs5NCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZBcnJh
eVJlZj4gZmlsdGVyQ29va2kKICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwogfQogCi12b2lk
IHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmws
IGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQog
ewogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBDRkhUVFBDb29raWVTdG9yYWdlIHN0
b3JlcyBhbiBlbXB0eSBjb29raWUsIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIu
CiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKQEAgLTEwNiw3ICsxMDUsNyBAQCB2b2lkIHNldENv
b2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgICAgIHJldHVybjsKIAogICAgIFJl
dGFpblB0cjxDRlVSTFJlZj4gdXJsQ0YoQWRvcHRDRiwgdXJsLmNyZWF0ZUNGVVJMKCkpOwotICAg
IFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9wdENGLCBkb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5jcmVhdGVDRlVSTCgpKTsKKyAgICBSZXRhaW5Q
dHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JDb29raWVzQ0YoQWRvcHRDRiwgZmlyc3RQYXJ0eUZv
ckNvb2tpZXMuY3JlYXRlQ0ZVUkwoKSk7CiAKICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4KICAgICAvLyBjb29raWVz
V2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3aXRob3V0IGEg
dmFsdWUKQEAgLTEyMyw3ICsxMjIsNyBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zCiAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMoY29va2llU3RvcmFn
ZS5nZXQoKSwgZmlsdGVyQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpLmdldCgpLCB1cmxDRi5nZXQo
KSwgZmlyc3RQYXJ0eUZvckNvb2tpZXNDRi5nZXQoKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29r
aWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlG
b3JDb29raWVzKi8pCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNv
b2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29v
a2llU3RvcmFnZSkKQEAgLTEzNyw3ICsxMzYsNyBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCogLypkb2N1bWVuCiAgICAgcmV0dXJuIChDRlN0cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRW
YWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRik7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBL
VVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykK
IHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9
IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpA
QCAtMTUxLDcgKzE1MCw3IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b24KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNG
LmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1
bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0
IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsK
ICAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IHBvbGljeSA9IENGSFRUUENvb2tp
ZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKICAgICBpZiAo
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50
Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQpAQCAtMTU5LDcgKzE1OCw3IEBAIGJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG8KICAgICByZXR1cm4gcG9saWN5ID09IENGSFRUUENv
b2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiB8fCBwb2xp
Y3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5czsKIH0KIAotYm9vbCBn
ZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKIHsKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpOwpAQCAtMTkzLDcgKzE5Miw3IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhj
b25zdCBEb2N1bWVudCosIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVD
b29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNv
b2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29v
a2llU3RvcmFnZSkKQEAgLTIxNCw3ICsyMTMsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBE
b2N1bWVudCosIGNvbnN0CiAgICAgfQogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENv
b2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0yMzIsNyArMjMxLDcg
QEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAgIH0KIH0KIAot
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3Zv
aWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3Rv
cmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9y
YWdlKQpAQCAtMjUxLDcgKzI1MCw3IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNv
bnN0IFN0cmkKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tp
ZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwog
ICAgIGlmICghY29va2llU3RvcmFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2No
cm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNTIgKzMy
LDc0IEBACiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAKICNpbmNsdWRlICJDb29raWUuaCIKLSNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1
ZGUgPHB1YmxpYy9XZWJDb29raWUuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29va2llSmFyLmg+
CisjaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwu
aD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKIHsKLSAgICBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoZG9jdW1lbnQsIHVybCwg
dmFsdWUpOworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJDb29raWVKYXIt
PnNldENvb2tpZSh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzLCB2YWx1ZSk7CiB9CiAKLVN0cmlu
ZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3Ry
aW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0
UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXMo
ZG9jdW1lbnQsIHVybCk7CisgICAgaWYgKCFtX3dlYkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIHJldHVybiBtX3dlYkNvb2tpZUphci0+Y29va2llcyh1cmwsIGZpcnN0
UGFydHlGb3JDb29raWVzKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENv
b2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1T
dXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAg
ICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0
dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGZp
cnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQpCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICByZXR1cm4g
UGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxlZChkb2N1bWVudCk7CisgICAgaWYgKCFtX3dl
YkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3dlYkNvb2tp
ZUphci0+Y29va2llc0VuYWJsZWQodXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9CiAKLWJv
b2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3Q29v
a2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0
OjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIHJhd0Nvb2tpZXMpOworICAgIHJhd0Nvb2tpZXMu
Y2xlYXIoKTsKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNvb2tpZT4gd2ViQ29v
a2llczsKKworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJDb29raWVKYXIt
PnJhd0Nvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcywgd2ViQ29va2llcyk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBjb25zdCBXZWJLaXQ6OldlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29va2llc1tpXTsK
KyAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwgd2ViQ29va2llLnZhbHVlLCB3
ZWJDb29raWUuZG9tYWluLCB3ZWJDb29raWUucGF0aCwgd2ViQ29va2llLmV4cGlyZXMsIHdlYkNv
b2tpZS5odHRwT25seSwgd2ViQ29va2llLnNlY3VyZSwgd2ViQ29va2llLnNlc3Npb24pOworICAg
ICAgICByYXdDb29raWVzLmFwcGVuZChjb29raWUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxl
dGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7Ci0g
ICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNv
b2tpZU5hbWUpOworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJDb29raWVK
YXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwogfQogCi12b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6
OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0bmFtZXMqLykK
IHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIC8qaG9zdG5hbWUqLykKIHsK
ICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENv
b2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIC8vIEZJ
WE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCShyZXZpc2lvbiAx
MzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFy
Q3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlICJDb29r
aWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtMjYsMzcgKzI1LDM3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tpZUphcjsKK3N0YXRp
YyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBzX2Nvb2tpZUphcjsKIAotdm9pZCBzZXRDb29raWVz
KERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
S1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewot
ICAgIGNvb2tpZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7CisgICAgc19jb29raWVKYXIu
c2V0KHVybC5zdHJpbmcoKSwgdmFsdWUpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpj
b29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2ll
cyovKQogewotICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CisgICAgcmV0
dXJuIHNfY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOwogfQogCi1TdHJpbmcgY29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3Qg
S1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8p
CiB7CiAgICAgLy8gRklYTUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llLgotICAgIHJldHVybiBj
b29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CisgICAgcmV0dXJuIHNfY29va2llSmFyLmdldCh1
cmwuc3RyaW5nKCkpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAv
KmRvY3VtZW50Ki8pCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYg
Lyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0
UmF3Q29va2llcyhjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlG
b3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1F
OiBOb3QgeWV0IGltcGxlbWVudGVkCiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVy
biBmYWxzZTsgLy8gcmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0
ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9p
ZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBTdHJp
bmcmIC8qY29va2llTmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVk
CiB9CkBAIC02OCwxNyArNjcsMTcgQEAgdm9pZCBzZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJyb3dz
aW5nRW5hYgogfQogI2VuZGlmCiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNl
dDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1lcyovKQogewogICAgIC8vIEZJWE1FOiBO
b3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNv
bnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3Qg
eWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tp
ZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tp
ZUphcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay93aW4vQ29va2llSmFyV2luLmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiS1VSTC5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNp
bmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8V2luaW5ldC5oPgpAQCAtMzYsMTUgKzM1LDE2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiAv
KmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKwordm9p
ZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZp
cnN0UGFydHlGb3JDb29raWVzKi8sIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgLy8gRklY
TUU6IERlYWwgd2l0aCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS4KKyAgICAvLyBG
SVhNRTogRGVhbCB3aXRoIGZpcnN0UGFydHlGb3JDb29raWVzLgogICAgIFN0cmluZyBzdHIgPSB1
cmwuc3RyaW5nKCk7CiAgICAgU3RyaW5nIHZhbCA9IHZhbHVlOwogICAgIEludGVybmV0U2V0Q29v
a2llKHN0ci5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2YWwuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3Vt
ZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNv
b2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVz
Ki8pCiB7CiAgICAgU3RyaW5nIHN0ciA9IHVybC5zdHJpbmcoKTsKIApAQCAtNjMsNDAgKzYzLDQw
IEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW4KICAgICByZXR1cm4g
U3RyaW5nOjphZG9wdChidWZmZXIpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJp
bmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBp
bmNsdWRlIEh0dHBPbmx5IGNvb2tpZQotICAgIHJldHVybiBjb29raWVzKGRvY3VtZW50LCB1cmwp
OworICAgIHJldHVybiBjb29raWVzKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1i
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIENv
b2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYg
LypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tp
ZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJM
JiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxD
b29raWU+JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVk
CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsgLy8gcmV0dXJuIHRy
dWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZShjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBTdHJpbmcmIC8qY29va2llTmFtZSovKQog
ewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZ2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUph
cjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1lcyov
KQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUph
cjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSovKQog
ewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxs
Q29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L0Nvb2tpZUphclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSAr
MzEsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0
LmgiCiAjaW5jbHVkZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgpAQCAtNDksMzEgKzQ2LDE3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIFNoYXJlZENvb2tpZUphclF0KiBzX3NoYXJl
ZENvb2tpZUphclF0ID0gMDsKIAotc3RhdGljIE5ldHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5n
Q29udGV4dChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit2b2lkIENvb2tpZUphcjo6c2V0Q29v
a2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVy
biAwOwotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJh
bWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+
bG9hZGVyKCk7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3Vt
ZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQog
ICAgICAgICByZXR1cm47Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFy
KiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29r
aWVKYXIoKTsKICAgICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgUVVybCB1cmxG
b3JDb29raWVzKHVybCk7Ci0gICAgUVVybCBmaXJzdFBhcnR5VXJsKGRvY3VtZW50LT5maXJzdFBh
cnR5Rm9yQ29va2llcygpKTsKLSAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRz
KGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQorICAgIFFVcmwgZmlyc3RQ
YXJ0eVVybChmaXJzdFBhcnR5Rm9yQ29va2llcyk7CisgICAgaWYgKCF0aGlyZFBhcnR5Q29va2ll
UG9saWN5UGVybWl0cyhtX25ldHdvcmtpbmdDb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBh
cnR5VXJsKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNv
b2tpZXMgPSBRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJpbmcodmFsdWUpLnRvTGF0
aW4xKCkpOwpAQCAtODgsMTYgKzcxLDE1IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnMKICAgICBqYXItPnNldENvb2tpZXNGcm9tVXJsKGNvb2tpZXMsIHVybEZvckNv
b2tpZXMpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICBOZXR3b3JraW5nQ29u
dGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNv
bnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nl
c3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBt
X25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsK
IAogICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQYXJ0eVVybChk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5Q29v
a2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkK
KyAgICBRVXJsIGZpcnN0UGFydHlVcmwoZmlyc3RQYXJ0eUZvckNvb2tpZXMpOworICAgIGlmICgh
dGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMobV9uZXR3b3JraW5nQ29udGV4dCwgdXJsRm9y
Q29va2llcywgZmlyc3RQYXJ0eVVybCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAg
IFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKHVybEZv
ckNvb2tpZXMpOwpAQCAtMTE0LDEyICs5NiwxMSBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsCiAgICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihRTGF0aW4xU3Ry
aW5nKCI7ICIpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0
KQorICAgIGlmICghbV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFu
YWdlcigpLT5jb29raWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gbV9uZXR3
b3JraW5nQ29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CiAKICAg
ICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0ZvclVybChRVXJs
KHVybCkpOwogICAgIGlmIChjb29raWVzLmlzRW1wdHkoKSkKQEAgLTEzMiw0MSArMTEzLDQwIEBA
IFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24KICAgICByZXR1cm4gcmVz
dWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1ib29sIGNvb2tpZXNF
bmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgQ29va2llSmFyOjpjb29raWVz
RW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JD
b29raWVzKi8pCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5n
Q29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQorICAgIGlmICghbV9uZXR3b3Jr
aW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb250ZXh0LT5u
ZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICByZXR1cm4gbV9uZXR3b3Jr
aW5nQ29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CiB9CiAKLWJv
b2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtV
UkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9y
PENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50
ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4g
dHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRl
Q29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29raWVOYW1lKi8p
CiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2ll
SmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykK
IHsKICAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJl
ZCgpOwogICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
aG9zdG5hbWVzKTsKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKICAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0g
U2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKIH0KIAotdm9pZCBkZWxldGVBbGxD
b29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBTaGFy
ZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlm
IChqYXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9u
IDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzOTIsNyArMTM5Miw3IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFs
dWVGb3JVUkwoTlBOVVIKICAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBG
cmFtZSogZnJhbWUgPSBnZXRGcmFtZShwYXJlbnRGcmFtZSgpLCBtX2VsZW1lbnQpOwogICAgICAg
ICAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ1N0cmluZyBjb29raWVT
dHIgPSBjb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCB1KS51dGY4KCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgQ1N0cmluZyBjb29raWVTdHIgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5j
b29raWVKYXIoKS5jb29raWVzKHUsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKS51dGY4KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFjb29raWVTdHIuaXNOdWxsKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHNpemUgPSBjb29raWVTdHIubGVuZ3Ro
KCk7CiAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5f
TWVtQWxsb2Moc2l6ZSsxKSk7CkBAIC0xNDU0LDcgKzE0NTQsNyBAQCBOUEVycm9yIFBsdWdpblZp
ZXc6OnNldFZhbHVlRm9yVVJMKE5QTlVSCiAgICAgICAgICAgICBjb25zdCBTdHJpbmcgY29va2ll
U3RyID0gU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSwgbGVuKTsKICAgICAgICAgICAgIEZyYW1lKiBm
cmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7CiAgICAgICAgICAgICBp
ZiAoZnJhbWUgJiYgIWNvb2tpZVN0ci5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgc2V0Q29v
a2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSwgY29va2llU3RyKTsKKyAgICAgICAgICAgICAgICBm
cmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVzKHUsIGZyYW1l
LT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVTdHIpOwogICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOwogICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjgzNikKKysrIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTEwLTI5
ICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25h
bCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4g
UGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQWxsQ29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnN0YXJ0T2JzZXJ2aW5nQ29va2ll
Q2hhbmdlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdl
YktpdDo6UGx1Z2luVmlldzo6c2V0Q29va2llc0ZvclVSTCk6CisKIDIwMTItMTAtMjkgIE1pY2hh
ZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgV0tTdHJpbmdDb3B5Q0ZT
dHJpbmcoKSBzaG91bGQgZGlyZWN0bHkgdXNlIDggYml0IFN0cmluZ3MgZGF0YSBpbnN0ZWFkIG9m
IHVwIGNvbnZlcnRpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhv
c3RuYW1lc1dpdGhDCiAKICAgICBIYXNoU2V0PFN0cmluZz4gaG9zdG5hbWVzOwogCi0gICAgV2Vi
Q29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKKyAgICBXZWJDb3JlOjpD
b29raWVKYXIoKS5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMpOwogCiAgICAgVmVj
dG9yPFN0cmluZz4gaG9zdG5hbWVMaXN0OwogICAgIGNvcHlUb1ZlY3Rvcihob3N0bmFtZXMsIGhv
c3RuYW1lTGlzdCk7CkBAIC02OSwxNCArNjksMTQgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpk
ZWxldGVDb29raWVzRm9ySAogewogICAgIFdlYlByb2Nlc3M6OkxvY2FsVGVybWluYXRpb25EaXNh
YmxlciB0ZXJtaW5hdGlvbkRpc2FibGVyKFdlYlByb2Nlc3M6OnNoYXJlZCgpKTsKIAotICAgIFdl
YkNvcmU6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShob3N0bmFtZSk7CisgICAgV2ViQ29yZTo6
Q29va2llSmFyKCkuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBXZWJQcm9jZXNz
OjpMb2NhbFRlcm1pbmF0aW9uRGlzYWJsZXIgdGVybWluYXRpb25EaXNhYmxlcihXZWJQcm9jZXNz
OjpzaGFyZWQoKSk7CiAKLSAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKCk7CisgICAgV2Vi
Q29yZTo6Q29va2llSmFyKCkuZGVsZXRlQWxsQ29va2llcygpOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXI6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcygpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAx
MzI3OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTAsMTIgKzEzMTAsMTkgQEAgU3RyaW5nIFBsdWdpblZp
ZXc6OnByb3hpZXNGb3JVUkwoY29uc3QgUwogCiBTdHJpbmcgUGx1Z2luVmlldzo6Y29va2llc0Zv
clVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKLSAgICByZXR1cm4gY29va2llcyhtX3Bs
dWdpbkVsZW1lbnQtPmRvY3VtZW50KCksIEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpKTsKKyAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5j
b29raWVKYXIoKS5jb29raWVzKEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpLCBkb2N1bWVudC0+Zmly
c3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0Q29va2llc0Zv
clVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcp
CiB7Ci0gICAgc2V0Q29va2llcyhtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCksIEtVUkwoS1VS
TCgpLCB1cmxTdHJpbmcpLCBjb29raWVTdHJpbmcpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVu
dC0+ZnJhbWUoKTsKKyAgICBpZiAoZnJhbWUpCisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPmNvb2tpZUphcigpLT5zZXRDb29raWVzKEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpLCBk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgY29va2llU3RyaW5nKTsKIH0KIAogYm9v
bCBQbHVnaW5WaWV3OjpnZXRBdXRoZW50aWNhdGlvbkluZm8oY29uc3QgUHJvdGVjdGlvblNwYWNl
JiBwcm90ZWN0aW9uU3BhY2UsIFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFzc3dvcmQpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyODM2KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBA
QAorMjAxMi0xMC0yOSAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW0Nocm9taXVtXSBSZW1vdmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxh
dGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05OTM0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNo
LCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAo
T09QUyEpLgorCisgICAgICAgICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y29va2llSmFyKToKKyAgICAgICAg
KiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmg6CisgICAgICAgIChGcmFtZUxvYWRlckNsaWVu
dEltcGwpOgorICAgICAgICAqIHNyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZSk6CisKIDIwMTItMTAtMjkgIFBhdHJpY2sgRHVicm95ICA8ZHVicm95QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTdHlsZSB0b29sYmFyIHRvIG1hdGNoIENocm9t
aXVtIHRvb2xiYXIgb24gQ2hyb21pdW0vTWFjLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCShyZXZpc2lvbiAxMzI3
OTMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUxLDUgKzE2NTEsMTQgQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudEltcGw6OmRpc3BhdGNoV2lsbAogfQogI2VuZGlmCiAKK1dlYkNvcmU6OkNvb2tpZUph
ciBGcmFtZUxvYWRlckNsaWVudEltcGw6OmNvb2tpZUphcigpCit7CisgICAgaWYgKCFtX3dlYkZy
YW1lIHx8ICFtX3dlYkZyYW1lLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNv
b2tpZUphcigwKTsKKyAgICBXZWJDb29raWVKYXIqIHdlYkNvb2tpZUphciA9IG1fd2ViRnJhbWUt
PmNsaWVudCgpLT5jb29raWVKYXIobV93ZWJGcmFtZSk7CisgICAgaWYgKCF3ZWJDb29raWVKYXIp
CisgICAgICAgIHdlYkNvb2tpZUphciA9IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y29v
a2llSmFyKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tpZUphcih3ZWJDb29raWVKYXIpOwor
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCShyZXZpc2lvbiAxMzI3OTMpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hXaWxsU3RhcnRVc2luZ1BlZXJDb25uZWN0aW9uSGFuZGxlcihXZWJDb3JlOjpSVENQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXIqKSBPVkVSUklERTsKICNlbmRpZgogCisgICAgdmlydHVhbCBX
ZWJDb3JlOjpDb29raWVKYXIgY29va2llSmFyKCkgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAg
dm9pZCBtYWtlRG9jdW1lbnRWaWV3KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAwLDg2ICsxMDAsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBXZWJDb29raWVKYXIqIGdldENvb2tpZUphcihjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQpCi17Ci0gICAgV2ViRnJhbWVJbXBsKiBmcmFtZUltcGwgPSBXZWJGcmFt
ZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgaWYgKCFmcmFtZUltcGwg
fHwgIWZyYW1lSW1wbC0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIFdlYkNvb2tp
ZUphciogY29va2llSmFyID0gZnJhbWVJbXBsLT5jbGllbnQoKS0+Y29va2llSmFyKGZyYW1lSW1w
bCk7Ci0gICAgaWYgKCFjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphciA9IFdlYktpdDo6UGxh
dGZvcm06OmN1cnJlbnQoKS0+Y29va2llSmFyKCk7Ci0gICAgcmV0dXJuIGNvb2tpZUphcjsKLX0K
LQotLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29v
a2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBXZWJD
b29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNv
b2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5zZXRDb29raWUodXJsLCBkb2N1bWVudC0+Zmly
c3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUpOwotfQotCi1TdHJpbmcgUGxhdGZvcm1TdXBwb3J0
Ojpjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQotewot
ICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29r
aWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJlc3VsdCA9IGNv
b2tpZUphci0+Y29va2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJpbmcgUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwm
IHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFy
ID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBy
ZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwgZG9j
dW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LWJvb2wgUGxhdGZvcm1TdXBwb3J0OjpyYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKLXsKLSAgICBy
YXdDb29raWVzLmNsZWFyKCk7Ci0gICAgV2ViVmVjdG9yPFdlYkNvb2tpZT4gd2ViQ29va2llczsK
LQotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsK
LSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXItPnJhd0Nvb2tpZXModXJsLCBk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgd2ViQ29va2llcyk7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsraSkgewotICAgICAgICBj
b25zdCBXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07Ci0gICAgICAgIENvb2tp
ZSBjb29raWUod2ViQ29va2llLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2ll
LnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5kb21haW4sCi0gICAgICAg
ICAgICAgICAgICAgICAgd2ViQ29va2llLnBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgd2Vi
Q29va2llLmV4cGlyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmh0dHBPbmx5
LAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5zZWN1cmUsCi0gICAgICAgICAgICAg
ICAgICAgICAgd2ViQ29va2llLnNlc3Npb24pOwotICAgICAgICByYXdDb29raWVzLmFwcGVuZChj
b29raWUpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybVN1cHBv
cnQ6OmRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewotICAgIFdlYkNvb2tpZUphciogY29va2ll
SmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAg
ICBjb29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwotfQotCi1ib29sIFBs
YXRmb3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQot
ewotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIg
PSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJl
c3VsdCA9IGNvb2tpZUphci0+Y29va2llc0VuYWJsZWQoZG9jdW1lbnQtPmNvb2tpZVVSTCgpLCBk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQogLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgT1MoV0lORE9XUykKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMzI4MzYpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTEwLTI5ICBNYXJrIFBpbGdyaW0g
IDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92ZSBjb29r
aWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBv
ZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXIt
ZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50UXQ6OmNvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0Lmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50UXQpOgorCiAyMDEyLTEwLTI0ICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBzdHJhdGVneSBmb3Ig
bG9hZGVyIGN1c3RvbWl6YXRpb24uCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAJKHJldmlzaW9uIDEzMjc5
MykKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzYsNiArMTY3NiwxMyBAQCB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50UXQ6OmVtaXRMb2FkRmluaXNoCiAgICAgZW1pdCBtX3dlYkZyYW1lLT5sb2FkRmlu
aXNoZWQob2spOwogfQogCitXZWJDb3JlOjpDb29raWVKYXIgRnJhbWVMb2FkZXJDbGllbnRRdDo6
Y29va2llSmFyKCkKK3sKKyAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPmxvYWRlcigpKQor
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKDApOworICAgIHJldHVybiBXZWJDb3Jl
OjpDb29raWVKYXIobV9mcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdDb250ZXh0KCkpOworfQor
CiB9CiAKICNpbmNsdWRlICJtb2NfRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAiCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
UXQuaAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRRdF9oCiAKIAorI2luY2x1ZGUgIkNvb2tpZUphci5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRl
ICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNTMsNiArNTQsNyBAQCBjbGFzcyBRV2ViRnJhbWU7
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwor
Y2xhc3MgQ29va2llSmFyOwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBjbGFzcyBFbGVtZW50Owog
Y2xhc3MgRm9ybVN0YXRlOwpAQCAtMjI3LDYgKzIyOSw4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0
IEtVUkwmIGxhc3RSZXF1ZXN0ZWRVcmwoKSBjb25zdCB7IHJldHVybiBtX2xhc3RSZXF1ZXN0ZWRV
cmw7IH0KIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29va2llSmFyIGNvb2tpZUphcigpIE9WRVJS
SURFOworCiAgICAgc3RhdGljIGJvb2wgZHVtcEZyYW1lTG9hZGVyQ2FsbGJhY2tzOwogICAgIHN0
YXRpYyBib29sIGR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2s7CiAgICAgc3RhdGljIGJvb2wg
ZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRlckNhbGxiYWNrczsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171296</attachid>
            <date>2012-10-29 13:00:31 -0700</date>
            <delta_ts>2012-10-31 10:54:09 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-99340-20121029155852.patch</filename>
            <type>text/plain</type>
            <size>51680</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjgzNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOSBAQAorMjAxMi0xMC0yOSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAg
ICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6Cisg
ICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAgICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29va2llRW5hYmxlZCk6CisgICAgICAgICogcGxh
dGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUph
cik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OkNvb2tpZUphcik6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1
cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGlt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNl
dENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
a2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2ll
SmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6
ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29r
aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29v
a2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVB
bGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsdWdp
bnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1
ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6
CisKIDIwMTItMTAtMjkgIEdsZW5uIEFkYW1zICA8Z2xlbm5Ac2t5bmF2LmNvbT4KIAogICAgICAg
ICBbQ1NTT01dIEV4dHJhbmVvdXMgd2hpdGVzcGFjZSBpbiBDU1NJbXBvcnRSdWxlLmNzc1RleHQK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2Vi
U29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMwLDcgKzQzMCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0J1ZmZlcigpCiAg
ICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyKQogICAgICAgICAgICAgICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKG1fZG9j
dW1lbnQsIG1faWRlbnRpZmllciwgbV9oYW5kc2hha2UtPnNlcnZlckhhbmRzaGFrZVJlc3BvbnNl
KCkpOwogICAgICAgICAgICAgaWYgKCFtX2hhbmRzaGFrZS0+c2VydmVyU2V0Q29va2llKCkuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvb2tpZXNFbmFibGVkKG1fZG9jdW1lbnQp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmNvb2tpZXNFbmFibGVkKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsgLy8gRXhjZXB0aW9uIChmb3Ig
c2FuZGJveGVkIGRvY3VtZW50cykgaWdub3JlZC4KICAgICAgICAgICAgICAgICAgICAgbV9kb2N1
bWVudC0+c2V0Q29va2llKG1faGFuZHNoYWtlLT5zZXJ2ZXJTZXRDb29raWUoKSwgZWMpOwogICAg
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOSBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgog
I2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVy
Q2xpZW50LmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgIkhUVFBQYXJz
ZXJzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjAwLDcgKzIwMywxMCBAQCBDU3RyaW5nIFdl
YlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoCiAgICAgS1VSTCB1cmwgPSBodHRwVVJMRm9y
QXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYgKG1fY29udGV4dC0+aXNEb2N1bWVu
dCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50
Kj4obV9jb250ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAgICBTdHJpbmcgY29va2llOworICAg
ICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAgICAgaWYgKGZyYW1l
KQorICAgICAgICAgICAgY29va2llID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2ll
SmFyKCkuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSk7CiAgICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIGZpZWxkcy5hcHBlbmQoIkNvb2tpZTogIiArIGNvb2tpZSk7CiAgICAgICAgIC8vIFNl
dCAiQ29va2llMjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBleGlzdHMgZm9yIHVybD8KQEAgLTI0
OSw3ICsyNTUsMTIgQEAgUGFzc1JlZlB0cjxXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0PiBXZQog
ICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2llcygpOwogICAg
IGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4dCk7Ci0gICAgICAgIFN0cmluZyBj
b29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAg
ICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAgICAgQ29va2llSmFyIGNvb2tp
ZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOworICAgICAgICAg
ICAgY29va2llID0gY29va2llSmFyLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwg
ZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgICAgICB9CiAgICAgICAgIGlm
ICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlcXVlc3QtPmFkZEhlYWRlckZpZWxk
KCJDb29raWUiLCBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxjb29raWU+IiBp
ZiBjb29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4MTYsNyArMzgxNiw5IEBAIFN0cmluZyBEb2N1bWVudDo6Y29va2ll
KEV4Y2VwdGlvbkNvZGUmIGUKICAgICBpZiAoY29va2llVVJMLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGNvb2tpZXModGhpcywgY29va2llVVJMKTsK
KyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4g
ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVzKGNvb2tpZVVS
TCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNl
dENvb2tpZShjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTM4Mzcs
NyArMzgzOSwyMyBAQCB2b2lkIERvY3VtZW50OjpzZXRDb29raWUoY29uc3QgU3RyaW5nJiB2CiAg
ICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldENv
b2tpZXModGhpcywgY29va2llVVJMLCB2YWx1ZSk7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAg
ICByZXR1cm47CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5z
ZXRDb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUp
OworfQorCitib29sIERvY3VtZW50Ojpjb29raWVzRW5hYmxlZCgpCit7CisgICAgaWYgKCFwYWdl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcGFnZSgpLT5zZXR0aW5ncygp
LT5jb29raWVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZnJh
bWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZyYW1lKCktPmxvYWRl
cigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llc0VuYWJsZWQodGhpcy0+Y29va2llVVJM
KCksIHRoaXMtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwogfQogCiBTdHJpbmcgRG9jdW1lbnQ6
OnJlZmVycmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMzI3
OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
ODE3LDYgKzgxNyw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjb29raWUoRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29va2llKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKCk7CiAKICAgICBTdHJpbmcgcmVmZXJyZXIo
KSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VB
Z2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw4
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdl
b2xvY2F0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uRXJyb3IuaCIKQEAg
LTUxMiw5ICs1MTQsMTAgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJy
bwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUoKSkpIHsKICAgICAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIFZlY3RvcjxLVVJMPiBh
bGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2ll
SmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwog
ICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJl
Z2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgIFZlY3RvcjxD
b29raWU+IGRvY0Nvb2tpZXNMaXN0OwotICAgICAgICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVk
ID0gZ2V0UmF3Q29va2llcyhkb2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCksIGRv
Y0Nvb2tpZXNMaXN0KTsKKyAgICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGNvb2tp
ZUphci5nZXRSYXdDb29raWVzKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBkb2N1bWVudC0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jQ29va2llc0xpc3QpOwogICAgICAgICAgICAgaWYg
KCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
bmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBmb3IgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBv
ZiBjb29raWVzLgogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNTUw
LDggKzU1Myw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXIKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0gYWxs
UmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tpZUph
ciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwogICAgICAgICBmb3Ig
KFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0ICE9
IGFsbFVSTHMuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVDb29raWUo
ZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVOYW1lKTsKKyAgICAg
ICAgICAgIGNvb2tpZUphci5kZWxldGVDb29raWUoS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCks
IGNvb2tpZU5hbWUpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zy
YW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBA
CiAjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRf
aAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5o
IgogI2luY2x1ZGUgIkljb25VUkwuaCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmVzLmgiCkBA
IC02NCw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBDYWNoZWRGcmFtZTsKICAgICBjbGFzcyBDb2xvcjsK
KyAgICBjbGFzcyBDb29raWVKYXI7CiAgICAgY2xhc3MgRE9NV2luZG93RXh0ZW5zaW9uOwogICAg
IGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKICAgICBjbGFzcyBEb2N1bWVudExvYWRlcjsKQEAgLTM0
OSw2ICszNTEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN0YXJ0VXNpbmdQZWVyQ29ubmVj
dGlvbkhhbmRsZXIoUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKikgeyB9CiAjZW5kaWYKKworICAg
ICAgICB2aXJ0dWFsIENvb2tpZUphciBjb29raWVKYXIoKSB7IHJldHVybiBDb29raWVKYXIoKTsg
fQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvTmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL05h
dmlnYXRvci5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2
aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogCi0jaW5jbHVkZSAiQ29va2llSmFyLmgi
CiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgogI2luY2x1ZGUgIkRPTVBsdWdpbkFycmF5
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTExOCw3ICsxMTcsNyBAQCBib29sIE5hdmln
YXRvcjo6Y29va2llRW5hYmxlZCgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSAmJiAh
bV9mcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJldHVybiBjb29raWVzRW5hYmxlZChtX2ZyYW1lLT5kb2N1bWVu
dCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29va2llc0VuYWJsZWQoKTsK
IH0KIAogYm9vbCBOYXZpZ2F0b3I6OmphdmFFbmFibGVkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTMgQEAK
ICNpZm5kZWYgQ29va2llSmFyX2gKICNkZWZpbmUgQ29va2llSmFyX2gKIAorI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KKyNlbmRpZgorI2lm
IFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCisjZW5kaWYKKwog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTMzLDIzICs0MCw1NCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBEb2N1bWVudDsKLSAgICBjbGFzcyBLVVJMOworY2xh
c3MgS1VSTDsKK3N0cnVjdCBDb29raWU7CiAKLSAgICBzdHJ1Y3QgQ29va2llOworY2xhc3MgQ29v
a2llSmFyIHsKK3B1YmxpYzoKKyAgICBDb29raWVKYXIoKQorICAgIHsKKyNpZiBQTEFURk9STShD
SFJPTUlVTSkKKyAgICAgICAgbV93ZWJDb29raWVKYXIgPSAwOworI2VuZGlmCisjaWYgUExBVEZP
Uk0oUVQpCisgICAgICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSAwOworI2VuZGlmCisgICAgfTsK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBleHBsaWNpdCBDb29raWVKYXIoV2ViS2l0OjpX
ZWJDb29raWVKYXIqIHdlYkNvb2tpZUphcikKKyAgICB7CisgICAgICAgIG1fd2ViQ29va2llSmFy
ID0gd2ViQ29va2llSmFyOworICAgIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyAgICBl
eHBsaWNpdCBDb29raWVKYXIoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCisgICAgeworICAg
ICAgICBtX25ldHdvcmtpbmdDb250ZXh0ID0gY29udGV4dDsKKyAgICB9OworI2VuZGlmCiAKICAg
ICAvLyBjb29raWVzIG9taXRzIEh0dHBPbmx5IGNvb2tpZXMuCi0gICAgU3RyaW5nIGNvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHZvaWQg
c2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKLSAgICBi
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0gICAgYm9vbCBnZXRSYXdDb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci0gICAg
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJik7CisgICAgU3RyaW5nIGNvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKKyAg
ICBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYsIGNvbnN0
IEtVUkwmKTsKKyAgICB2b2lkIHNldENvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmLCBjb25z
dCBLVVJMJik7CisgICAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJM
JiwgVmVjdG9yPENvb2tpZT4mKTsKKyAgICB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hT
ZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKICAgICB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKICAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsK
IAotfQorcHJpdmF0ZToKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBXZWJLaXQ6OldlYkNv
b2tpZUphciogbV93ZWJDb29raWVKYXI7CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyAgICBO
ZXR3b3JraW5nQ29udGV4dCogbV9uZXR3b3JraW5nQ29udGV4dDsKKyNlbmRpZgorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCShyZXZpc2lvbiAxMzI3OTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNzgsMTQgKzc4LDYgQEAgc3RydWN0IEZvbnRSZW5kZXJTdHlsZTsK
IAogY2xhc3MgUGxhdGZvcm1TdXBwb3J0IHsKIHB1YmxpYzoKLSAgICAvLyBDb29raWVzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgc3RhdGljIFN0cmluZyBjb29raWVzKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyBTdHJpbmcgY29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgc3RhdGlj
IGJvb2wgcmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29v
a2llPiYpOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpOwotICAgIHN0YXRpYyBib29sIGNv
b2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0KICAgICAvLyBGb250IC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lm
IE9TKFdJTkRPV1MpCiAgICAgc3RhdGljIGJvb2wgZW5zdXJlRm9udExvYWRlZChIRk9OVCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2
YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3Vh
bENvbnRleHQuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJDb29raWVKYXIu
aCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIktVUkwuaCIKQEAgLTI2OCw3ICsyNzAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVZpc3VhbENvCiAKICAgICBLVVJMIG1vdmllVVJMID0gS1VSTChLVVJMKCksIHVybCk7
CiAgICAgVmVjdG9yPENvb2tpZT4gZG9jdW1lbnRDb29raWVzOwotICAgIGlmICghZ2V0UmF3Q29v
a2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgbW92aWVVUkwsIGRvY3VtZW50Q29va2llcykpCisgICAg
aWYgKCFmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5nZXRSYXdDb29raWVz
KG1vdmllVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jdW1lbnRDb29r
aWVzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChzaXplX3QgbmR4ID0gMDsgbmR4IDwg
ZG9jdW1lbnRDb29raWVzLnNpemUoKTsgbmR4KyspIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9Db29raWVKYXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0Nvb2tpZUphci5tbQkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYs
NyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlckNvb2tpZXMoCiAgICAgcmV0dXJu
IGZpbHRlcmVkQ29va2llczsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBj
b25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIEJFR0lOX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtOTUsNyArOTUsNyBAQCBTdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1TdHJp
bmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykK
IHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTExNCw3ICsxMTQsNyBA
QCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIFN0
cmluZygpOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQordm9pZCBDb29raWVKYXI6OnNldENv
b2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywg
Y29uc3QgU3RyaW5nJiBjb29raWVTdHIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogCkBAIC0xMzIsMTUgKzEzMiwxNSBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zCiAKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCiAgICAgaWYgKFJl
dGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50
Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQotICAgICAgICB3a1NldEhUVFBDb29raWVzRm9yVVJMKGNm
Q29va2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGRv
Y3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICAgICAgd2tTZXRIVFRQQ29va2ll
c0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29v
a2llVVJMLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiAgICAgZWxzZQogI2VuZGlmCi0gICAgICAg
IFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2ll
czpmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9jdW1lbnRVUkw6
ZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCldOworICAgICAgICBbW05TSFRUUENvb2tp
ZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6ZmlsdGVyZWRDb29r
aWVzLmdldCgpIGZvclVSTDpjb29raWVVUkwgbWFpbkRvY3VtZW50VVJMOmZpcnN0UGFydHlGb3JD
b29raWVzXTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLWJvb2wgY29v
a2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTE1OCw3ICsx
NTgsNyBAQCBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KikKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtV
UkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0
UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3Q29va2llcy5j
bGVhcigpOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKQEAgLTE5MSw3ICsxOTEs
NyBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRl
Q29va2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewogICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMjI1LDcgKzIyNSw3IEBAIHZvaWQg
ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKICAgICAKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lkIGdldEhvc3RuYW1lc1dpdGhD
b29raWVzKEhhc2hTZXQ8U3RyCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAot
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3Zv
aWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgCkBAIC0yNTUs
NyArMjU1LDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaQogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygp
Cit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAJKHJldmlzaW9uIDEzMjc5MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJDb29raWUuaCIK
ICNpbmNsdWRlICJDb29raWVTdG9yYWdlQ0ZOZXQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUg
IlNvZnRMaW5raW5nLmgiCkBAIC05NSw3ICs5NCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZBcnJh
eVJlZj4gZmlsdGVyQ29va2kKICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwogfQogCi12b2lk
IHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmws
IGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQog
ewogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBDRkhUVFBDb29raWVTdG9yYWdlIHN0
b3JlcyBhbiBlbXB0eSBjb29raWUsIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIu
CiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKQEAgLTEwNiw3ICsxMDUsNyBAQCB2b2lkIHNldENv
b2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgICAgIHJldHVybjsKIAogICAgIFJl
dGFpblB0cjxDRlVSTFJlZj4gdXJsQ0YoQWRvcHRDRiwgdXJsLmNyZWF0ZUNGVVJMKCkpOwotICAg
IFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9wdENGLCBkb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5jcmVhdGVDRlVSTCgpKTsKKyAgICBSZXRhaW5Q
dHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JDb29raWVzQ0YoQWRvcHRDRiwgZmlyc3RQYXJ0eUZv
ckNvb2tpZXMuY3JlYXRlQ0ZVUkwoKSk7CiAKICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4KICAgICAvLyBjb29raWVz
V2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3aXRob3V0IGEg
dmFsdWUKQEAgLTEyMyw3ICsxMjIsNyBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zCiAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMoY29va2llU3RvcmFn
ZS5nZXQoKSwgZmlsdGVyQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpLmdldCgpLCB1cmxDRi5nZXQo
KSwgZmlyc3RQYXJ0eUZvckNvb2tpZXNDRi5nZXQoKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29r
aWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlG
b3JDb29raWVzKi8pCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNv
b2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29v
a2llU3RvcmFnZSkKQEAgLTEzNyw3ICsxMzYsNyBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCogLypkb2N1bWVuCiAgICAgcmV0dXJuIChDRlN0cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRW
YWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRik7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBL
VVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykK
IHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9
IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpA
QCAtMTUxLDcgKzE1MCw3IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b24KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNG
LmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1
bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0
IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsK
ICAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IHBvbGljeSA9IENGSFRUUENvb2tp
ZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsKICAgICBpZiAo
UmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50
Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQpAQCAtMTU5LDcgKzE1OCw3IEBAIGJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG8KICAgICByZXR1cm4gcG9saWN5ID09IENGSFRUUENv
b2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbiB8fCBwb2xp
Y3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5czsKIH0KIAotYm9vbCBn
ZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKIHsKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpOwpAQCAtMTkzLDcgKzE5Miw3IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhj
b25zdCBEb2N1bWVudCosIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVD
b29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIG5hbWUpCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNv
b2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29v
a2llU3RvcmFnZSkKQEAgLTIxNCw3ICsyMTMsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBE
b2N1bWVudCosIGNvbnN0CiAgICAgfQogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIFJldGFpblB0
cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENv
b2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0yMzIsNyArMjMxLDcg
QEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAgIH0KIH0KIAot
dm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3Zv
aWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3Rv
cmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9y
YWdlKQpAQCAtMjUxLDcgKzI1MCw3IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNv
bnN0IFN0cmkKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tp
ZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0
b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwog
ICAgIGlmICghY29va2llU3RvcmFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2No
cm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNTIgKzMy
LDc0IEBACiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAKICNpbmNsdWRlICJDb29raWUuaCIKLSNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1
ZGUgPHB1YmxpYy9XZWJDb29raWUuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29va2llSmFyLmg+
CisjaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwu
aD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKIHsKLSAgICBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoZG9jdW1lbnQsIHVybCwg
dmFsdWUpOworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJDb29raWVKYXIt
PnNldENvb2tpZSh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzLCB2YWx1ZSk7CiB9CiAKLVN0cmlu
ZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3Ry
aW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0
UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXMo
ZG9jdW1lbnQsIHVybCk7CisgICAgaWYgKCFtX3dlYkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIHJldHVybiBtX3dlYkNvb2tpZUphci0+Y29va2llcyh1cmwsIGZpcnN0
UGFydHlGb3JDb29raWVzKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENv
b2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1T
dXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAg
ICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0
dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGZp
cnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQpCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICByZXR1cm4g
UGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxlZChkb2N1bWVudCk7CisgICAgaWYgKCFtX3dl
YkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3dlYkNvb2tp
ZUphci0+Y29va2llc0VuYWJsZWQodXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9CiAKLWJv
b2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3Q29v
a2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0
OjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIHJhd0Nvb2tpZXMpOworICAgIHJhd0Nvb2tpZXMu
Y2xlYXIoKTsKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNvb2tpZT4gd2ViQ29v
a2llczsKKworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJDb29raWVKYXIt
PnJhd0Nvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcywgd2ViQ29va2llcyk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBjb25zdCBXZWJLaXQ6OldlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29va2llc1tpXTsK
KyAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwgd2ViQ29va2llLnZhbHVlLCB3
ZWJDb29raWUuZG9tYWluLCB3ZWJDb29raWUucGF0aCwgd2ViQ29va2llLmV4cGlyZXMsIHdlYkNv
b2tpZS5odHRwT25seSwgd2ViQ29va2llLnNlY3VyZSwgd2ViQ29va2llLnNlc3Npb24pOworICAg
ICAgICByYXdDb29raWVzLmFwcGVuZChjb29raWUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxl
dGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7Ci0g
ICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNv
b2tpZU5hbWUpOworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJDb29raWVK
YXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwogfQogCi12b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6
OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0bmFtZXMqLykK
IHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIC8qaG9zdG5hbWUqLykKIHsK
ICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENv
b2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIC8vIEZJ
WE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCShyZXZpc2lvbiAx
MzI3OTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFy
Q3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlICJDb29r
aWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtMjYsMzcgKzI1LDM3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tpZUphcjsKK3N0YXRp
YyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBzX2Nvb2tpZUphcjsKIAotdm9pZCBzZXRDb29raWVz
KERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
S1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewot
ICAgIGNvb2tpZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7CisgICAgc19jb29raWVKYXIu
c2V0KHVybC5zdHJpbmcoKSwgdmFsdWUpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpj
b29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2ll
cyovKQogewotICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CisgICAgcmV0
dXJuIHNfY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOwogfQogCi1TdHJpbmcgY29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3Qg
S1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8p
CiB7CiAgICAgLy8gRklYTUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llLgotICAgIHJldHVybiBj
b29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CisgICAgcmV0dXJuIHNfY29va2llSmFyLmdldCh1
cmwuc3RyaW5nKCkpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAv
KmRvY3VtZW50Ki8pCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYg
Lyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0
UmF3Q29va2llcyhjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlG
b3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1F
OiBOb3QgeWV0IGltcGxlbWVudGVkCiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVy
biBmYWxzZTsgLy8gcmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0
ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9p
ZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBTdHJp
bmcmIC8qY29va2llTmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVk
CiB9CkBAIC02OCwxNyArNjcsMTcgQEAgdm9pZCBzZXRDb29raWVTdG9yYWdlUHJpdmF0ZUJyb3dz
aW5nRW5hYgogfQogI2VuZGlmCiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNl
dDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1lcyovKQogewogICAgIC8vIEZJWE1FOiBO
b3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNv
bnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3Qg
eWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tp
ZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tp
ZUphcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay93aW4vQ29va2llSmFyV2luLmNwcAkocmV2aXNpb24gMTMyNzkzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiS1VSTC5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNp
bmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8V2luaW5ldC5oPgpAQCAtMzYsMTUgKzM1LDE2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiAv
KmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKwordm9p
ZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZp
cnN0UGFydHlGb3JDb29raWVzKi8sIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgLy8gRklY
TUU6IERlYWwgd2l0aCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS4KKyAgICAvLyBG
SVhNRTogRGVhbCB3aXRoIGZpcnN0UGFydHlGb3JDb29raWVzLgogICAgIFN0cmluZyBzdHIgPSB1
cmwuc3RyaW5nKCk7CiAgICAgU3RyaW5nIHZhbCA9IHZhbHVlOwogICAgIEludGVybmV0U2V0Q29v
a2llKHN0ci5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2YWwuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3Vt
ZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNv
b2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVz
Ki8pCiB7CiAgICAgU3RyaW5nIHN0ciA9IHVybC5zdHJpbmcoKTsKIApAQCAtNjMsNDAgKzYzLDQw
IEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW4KICAgICByZXR1cm4g
U3RyaW5nOjphZG9wdChidWZmZXIpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJp
bmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBp
bmNsdWRlIEh0dHBPbmx5IGNvb2tpZQotICAgIHJldHVybiBjb29raWVzKGRvY3VtZW50LCB1cmwp
OworICAgIHJldHVybiBjb29raWVzKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1i
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIENv
b2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYg
LypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tp
ZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJM
JiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxD
b29raWU+JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVk
CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsgLy8gcmV0dXJuIHRy
dWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZShjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBTdHJpbmcmIC8qY29va2llTmFtZSovKQog
ewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZ2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUph
cjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1lcyov
KQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUph
cjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSovKQog
ewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxs
Q29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L0Nvb2tpZUphclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSAr
MzEsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0
LmgiCiAjaW5jbHVkZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgpAQCAtNDksMzEgKzQ2LDE3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIFNoYXJlZENvb2tpZUphclF0KiBzX3NoYXJl
ZENvb2tpZUphclF0ID0gMDsKIAotc3RhdGljIE5ldHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5n
Q29udGV4dChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit2b2lkIENvb2tpZUphcjo6c2V0Q29v
a2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVy
biAwOwotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJh
bWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+
bG9hZGVyKCk7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3Vt
ZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQog
ICAgICAgICByZXR1cm47Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFy
KiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29r
aWVKYXIoKTsKICAgICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgUVVybCB1cmxG
b3JDb29raWVzKHVybCk7Ci0gICAgUVVybCBmaXJzdFBhcnR5VXJsKGRvY3VtZW50LT5maXJzdFBh
cnR5Rm9yQ29va2llcygpKTsKLSAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRz
KGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQorICAgIFFVcmwgZmlyc3RQ
YXJ0eVVybChmaXJzdFBhcnR5Rm9yQ29va2llcyk7CisgICAgaWYgKCF0aGlyZFBhcnR5Q29va2ll
UG9saWN5UGVybWl0cyhtX25ldHdvcmtpbmdDb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBh
cnR5VXJsKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNv
b2tpZXMgPSBRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJpbmcodmFsdWUpLnRvTGF0
aW4xKCkpOwpAQCAtODgsMTYgKzcxLDE1IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnMKICAgICBqYXItPnNldENvb2tpZXNGcm9tVXJsKGNvb2tpZXMsIHVybEZvckNv
b2tpZXMpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICBOZXR3b3JraW5nQ29u
dGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNv
bnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nl
c3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBt
X25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsK
IAogICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQYXJ0eVVybChk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5Q29v
a2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkK
KyAgICBRVXJsIGZpcnN0UGFydHlVcmwoZmlyc3RQYXJ0eUZvckNvb2tpZXMpOworICAgIGlmICgh
dGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMobV9uZXR3b3JraW5nQ29udGV4dCwgdXJsRm9y
Q29va2llcywgZmlyc3RQYXJ0eVVybCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAg
IFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKHVybEZv
ckNvb2tpZXMpOwpAQCAtMTE0LDEyICs5NiwxMSBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsCiAgICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihRTGF0aW4xU3Ry
aW5nKCI7ICIpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0
KQorICAgIGlmICghbV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFu
YWdlcigpLT5jb29raWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gbV9uZXR3
b3JraW5nQ29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CiAKICAg
ICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0ZvclVybChRVXJs
KHVybCkpOwogICAgIGlmIChjb29raWVzLmlzRW1wdHkoKSkKQEAgLTEzMiw0MSArMTEzLDQwIEBA
IFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24KICAgICByZXR1cm4gcmVz
dWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1ib29sIGNvb2tpZXNF
bmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgQ29va2llSmFyOjpjb29raWVz
RW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JD
b29raWVzKi8pCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5n
Q29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQorICAgIGlmICghbV9uZXR3b3Jr
aW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb250ZXh0LT5u
ZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICByZXR1cm4gbV9uZXR3b3Jr
aW5nQ29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CiB9CiAKLWJv
b2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtV
UkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9y
PENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50
ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4g
dHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRl
Q29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29raWVOYW1lKi8p
CiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2ll
SmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykK
IHsKICAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJl
ZCgpOwogICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
aG9zdG5hbWVzKTsKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKICAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0g
U2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKIH0KIAotdm9pZCBkZWxldGVBbGxD
b29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBTaGFy
ZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlm
IChqYXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9u
IDEzMjc5MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzOTIsNyArMTM5Miw3IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFs
dWVGb3JVUkwoTlBOVVIKICAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBG
cmFtZSogZnJhbWUgPSBnZXRGcmFtZShwYXJlbnRGcmFtZSgpLCBtX2VsZW1lbnQpOwogICAgICAg
ICAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ1N0cmluZyBjb29raWVT
dHIgPSBjb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCB1KS51dGY4KCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgQ1N0cmluZyBjb29raWVTdHIgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5j
b29raWVKYXIoKS5jb29raWVzKHUsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKS51dGY4KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFjb29raWVTdHIuaXNOdWxsKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHNpemUgPSBjb29raWVTdHIubGVuZ3Ro
KCk7CiAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5f
TWVtQWxsb2Moc2l6ZSsxKSk7CkBAIC0xNDU0LDcgKzE0NTQsNyBAQCBOUEVycm9yIFBsdWdpblZp
ZXc6OnNldFZhbHVlRm9yVVJMKE5QTlVSCiAgICAgICAgICAgICBjb25zdCBTdHJpbmcgY29va2ll
U3RyID0gU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSwgbGVuKTsKICAgICAgICAgICAgIEZyYW1lKiBm
cmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7CiAgICAgICAgICAgICBp
ZiAoZnJhbWUgJiYgIWNvb2tpZVN0ci5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgc2V0Q29v
a2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSwgY29va2llU3RyKTsKKyAgICAgICAgICAgICAgICBm
cmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVzKHUsIGZyYW1l
LT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVTdHIpOwogICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOwogICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjgzNikKKysrIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEyLTEwLTI5
ICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25h
bCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4g
UGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQWxsQ29va2llcyk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OnN0YXJ0T2JzZXJ2aW5nQ29va2ll
Q2hhbmdlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdl
YktpdDo6UGx1Z2luVmlldzo6c2V0Q29va2llc0ZvclVSTCk6CisKIDIwMTItMTAtMjkgIE1pY2hh
ZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgV0tTdHJpbmdDb3B5Q0ZT
dHJpbmcoKSBzaG91bGQgZGlyZWN0bHkgdXNlIDggYml0IFN0cmluZ3MgZGF0YSBpbnN0ZWFkIG9m
IHVwIGNvbnZlcnRpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDEzMjc5MykKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhv
c3RuYW1lc1dpdGhDCiAKICAgICBIYXNoU2V0PFN0cmluZz4gaG9zdG5hbWVzOwogCi0gICAgV2Vi
Q29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKKyAgICBXZWJDb3JlOjpD
b29raWVKYXIoKS5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMpOwogCiAgICAgVmVj
dG9yPFN0cmluZz4gaG9zdG5hbWVMaXN0OwogICAgIGNvcHlUb1ZlY3Rvcihob3N0bmFtZXMsIGhv
c3RuYW1lTGlzdCk7CkBAIC02OSwxNCArNjksMTQgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpk
ZWxldGVDb29raWVzRm9ySAogewogICAgIFdlYlByb2Nlc3M6OkxvY2FsVGVybWluYXRpb25EaXNh
YmxlciB0ZXJtaW5hdGlvbkRpc2FibGVyKFdlYlByb2Nlc3M6OnNoYXJlZCgpKTsKIAotICAgIFdl
YkNvcmU6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShob3N0bmFtZSk7CisgICAgV2ViQ29yZTo6
Q29va2llSmFyKCkuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKIH0KIAogdm9p
ZCBXZWJDb29raWVNYW5hZ2VyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBXZWJQcm9jZXNz
OjpMb2NhbFRlcm1pbmF0aW9uRGlzYWJsZXIgdGVybWluYXRpb25EaXNhYmxlcihXZWJQcm9jZXNz
OjpzaGFyZWQoKSk7CiAKLSAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKCk7CisgICAgV2Vi
Q29yZTo6Q29va2llSmFyKCkuZGVsZXRlQWxsQ29va2llcygpOwogfQogCiB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXI6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcygpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAx
MzI3OTMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTAsMTIgKzEzMTAsMTkgQEAgU3RyaW5nIFBsdWdpblZp
ZXc6OnByb3hpZXNGb3JVUkwoY29uc3QgUwogCiBTdHJpbmcgUGx1Z2luVmlldzo6Y29va2llc0Zv
clVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKLSAgICByZXR1cm4gY29va2llcyhtX3Bs
dWdpbkVsZW1lbnQtPmRvY3VtZW50KCksIEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpKTsKKyAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5j
b29raWVKYXIoKS5jb29raWVzKEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpLCBkb2N1bWVudC0+Zmly
c3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0Q29va2llc0Zv
clVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcp
CiB7Ci0gICAgc2V0Q29va2llcyhtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCksIEtVUkwoS1VS
TCgpLCB1cmxTdHJpbmcpLCBjb29raWVTdHJpbmcpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVu
dC0+ZnJhbWUoKTsKKyAgICBpZiAoZnJhbWUpCisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPmNvb2tpZUphcigpLnNldENvb2tpZXMoS1VSTChLVVJMKCksIHVybFN0cmluZyksIGRv
Y3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVTdHJpbmcpOwogfQogCiBib29s
IFBsdWdpblZpZXc6OmdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBQcm90ZWN0aW9uU3BhY2Um
IHByb3RlY3Rpb25TcGFjZSwgU3RyaW5nJiB1c2VybmFtZSwgU3RyaW5nJiBwYXNzd29yZCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzI4MzYpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDEyLTEwLTI5ICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0
Zm9ybVN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gs
IHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChP
T1BTISkuCisKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjb29raWVKYXIpOgorICAgICAgICAq
IHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaDoKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50
SW1wbCk6CisgICAgICAgICogc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKwogMjAxMi0xMC0yOSAgUGF0cmljayBEdWJyb3kgIDxkdWJyb3lAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN0eWxlIHRvb2xiYXIgdG8gbWF0Y2ggQ2hyb21p
dW0gdG9vbGJhciBvbiBDaHJvbWl1bS9NYWMuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDEzMjc5
MykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NTEsNSArMTY1MSwxNCBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SW1wbDo6ZGlzcGF0Y2hXaWxsCiB9CiAjZW5kaWYKIAorV2ViQ29yZTo6Q29va2llSmFy
IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y29va2llSmFyKCkKK3sKKyAgICBpZiAoIW1fd2ViRnJh
bWUgfHwgIW1fd2ViRnJhbWUtPmNsaWVudCgpKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29v
a2llSmFyKDApOworICAgIFdlYkNvb2tpZUphciogd2ViQ29va2llSmFyID0gbV93ZWJGcmFtZS0+
Y2xpZW50KCktPmNvb2tpZUphcihtX3dlYkZyYW1lKTsKKyAgICBpZiAoIXdlYkNvb2tpZUphcikK
KyAgICAgICAgd2ViQ29va2llSmFyID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jb29r
aWVKYXIoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKHdlYkNvb2tpZUphcik7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgJKHJldmlzaW9uIDEzMjc5MykKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaFdpbGxTdGFydFVzaW5nUGVlckNvbm5lY3Rpb25IYW5kbGVyKFdlYkNvcmU6OlJUQ1Bl
ZXJDb25uZWN0aW9uSGFuZGxlciopIE9WRVJSSURFOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIFdl
YkNvcmU6OkNvb2tpZUphciBjb29raWVKYXIoKSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICB2
b2lkIG1ha2VEb2N1bWVudFZpZXcoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvUGxhdGZvcm1TdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAsODYgKzEwMCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotc3RhdGljIFdlYkNvb2tpZUphciogZ2V0Q29va2llSmFyKGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCkKLXsKLSAgICBXZWJGcmFtZUltcGwqIGZyYW1lSW1wbCA9IFdlYkZyYW1l
SW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICBpZiAoIWZyYW1lSW1wbCB8
fCAhZnJhbWVJbXBsLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgV2ViQ29va2ll
SmFyKiBjb29raWVKYXIgPSBmcmFtZUltcGwtPmNsaWVudCgpLT5jb29raWVKYXIoZnJhbWVJbXBs
KTsKLSAgICBpZiAoIWNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyID0gV2ViS2l0OjpQbGF0
Zm9ybTo6Y3VycmVudCgpLT5jb29raWVKYXIoKTsKLSAgICByZXR1cm4gY29va2llSmFyOwotfQot
Ci0vLyBDb29raWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29r
aWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFdlYkNv
b2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29v
a2llSmFyKQotICAgICAgICBjb29raWVKYXItPnNldENvb2tpZSh1cmwsIGRvY3VtZW50LT5maXJz
dFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6
OmNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCi17Ci0g
ICAgU3RyaW5nIHJlc3VsdDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tp
ZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29v
a2llSmFyLT5jb29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYg
dXJsKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIg
PSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJl
c3VsdCA9IGNvb2tpZUphci0+Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
Ym9vbCBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIHJh
d0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBXZWJWZWN0b3I8V2ViQ29va2llPiB3ZWJDb29raWVzOwot
Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwot
ICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+cmF3Q29va2llcyh1cmwsIGRv
Y3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB3ZWJDb29raWVzKTsKLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNv
bnN0IFdlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29va2llc1tpXTsKLSAgICAgICAgQ29va2ll
IGNvb2tpZSh3ZWJDb29raWUubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUu
dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmRvbWFpbiwKLSAgICAgICAg
ICAgICAgICAgICAgICB3ZWJDb29raWUucGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJD
b29raWUuZXhwaXJlcywKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuaHR0cE9ubHks
Ci0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlY3VyZSwKLSAgICAgICAgICAgICAg
ICAgICAgICB3ZWJDb29raWUuc2Vzc2lvbik7Ci0gICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNv
b2tpZSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtU3VwcG9y
dDo6ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCi17Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVK
YXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAg
IGNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7Ci19Ci0KLWJvb2wgUGxh
dGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17
Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9
IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVz
dWx0ID0gY29va2llSmFyLT5jb29raWVzRW5hYmxlZChkb2N1bWVudC0+Y29va2llVVJMKCksIGRv
Y3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
CiAvLyBGb250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICNpZiBPUyhXSU5ET1dTKQpJbmRleDogU291cmNl
L1dlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFu
Z2VMb2cJKHJldmlzaW9uIDEzMjgzNikKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMTAtMjkgIE1hcmsgUGlsZ3JpbSAg
PHBpbGdyaW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIGNvb2tp
ZS1yZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9m
IHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1m
dW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnRRdDo6Y29va2llSmFyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnRRdCk6CisKIDIwMTItMTAtMjQgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhIHN0cmF0ZWd5IGZvciBs
b2FkZXIgY3VzdG9taXphdGlvbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkocmV2aXNpb24gMTMyNzkz
KQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3Niw2ICsxNjc2LDEzIEBAIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRRdDo6ZW1pdExvYWRGaW5pc2gKICAgICBlbWl0IG1fd2ViRnJhbWUtPmxvYWRGaW5p
c2hlZChvayk7CiB9CiAKK1dlYkNvcmU6OkNvb2tpZUphciBGcmFtZUxvYWRlckNsaWVudFF0Ojpj
b29raWVKYXIoKQoreworICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+bG9hZGVyKCkpCisg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIoMCk7CisgICAgcmV0dXJuIFdlYkNvcmU6
OkNvb2tpZUphcihtX2ZyYW1lLT5sb2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSk7Cit9CisK
IH0KIAogI2luY2x1ZGUgIm1vY19GcmFtZUxvYWRlckNsaWVudFF0LmNwcCIKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRR
dC5oCShyZXZpc2lvbiAxMzI3OTMpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2RlZmluZSBGcmFtZUxvYWRlckNsaWVudFF0X2gKIAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC01Myw2ICs1NCw3IEBAIGNsYXNzIFFXZWJGcmFtZTsK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7Citj
bGFzcyBDb29raWVKYXI7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEVsZW1lbnQ7CiBj
bGFzcyBGb3JtU3RhdGU7CkBAIC0yMjcsNiArMjI5LDggQEAgcHVibGljOgogCiAgICAgY29uc3Qg
S1VSTCYgbGFzdFJlcXVlc3RlZFVybCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJlcXVlc3RlZFVy
bDsgfQogCisgICAgdmlydHVhbCBXZWJDb3JlOjpDb29raWVKYXIgY29va2llSmFyKCkgT1ZFUlJJ
REU7CisKICAgICBzdGF0aWMgYm9vbCBkdW1wRnJhbWVMb2FkZXJDYWxsYmFja3M7CiAgICAgc3Rh
dGljIGJvb2wgZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsKICAgICBzdGF0aWMgYm9vbCBk
dW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZGVyQ2FsbGJhY2tzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171684</attachid>
            <date>2012-10-31 10:54:13 -0700</date>
            <delta_ts>2012-11-01 07:32:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99340-20121031135230.patch</filename>
            <type>text/plain</type>
            <size>54160</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzA0NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxMi0xMC0zMSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xp
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAg
ICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29v
a2llRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OkNvb2tpZUphcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBw
b3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nv
b2tpZUphci5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0Vu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tp
ZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9Db29raWVKYXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2ll
SmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFs
bENvb2tpZXMpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6CisKIDIwMTItMTAtMzEgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBbVjhdIEdhcmJhZ2UgY29sbGVjdGlvbiBzaG91
bGQgdXNlIG9wYXF1ZSByb290cyByYXRoZXIgdGhhbiBpbXBsaWNpdCByZWZlcmVuY2VzCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTMzMDQ0KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDYgQEAgX19aTjdXZWJD
b3JlMTBTY3JvbGxWaWV3MjR3aW5kb3dSZXNpemVyUgogX19aTjdXZWJDb3JlMTBTY3JvbGxWaWV3
OGFkZENoaWxkRU4zV1RGMTBQYXNzUmVmUHRySU5TXzZXaWRnZXRFRUUKIF9fWk43V2ViQ29yZTEw
U2hhZG93Um9vdDZjcmVhdGVFUE5TXzdFbGVtZW50RVJpCiBfX1pON1dlYkNvcmUxMGRlbGV0ZUZp
bGVFUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxMHNldENvb2tpZXNFUE5TXzhEb2N1bWVu
dEVSS05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTB0b0RvY3VtZW50RU4z
SlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxMUJpdG1hcEltYWdlQzFFUDdDR0ltYWdlUE5TXzEz
SW1hZ2VPYnNlcnZlckUKIF9fWk43V2ViQ29yZTExQml0bWFwSW1hZ2VDMUVQTlNfMTNJbWFnZU9i
c2VydmVyRQpAQCAtNDY0LDcgKzQ2Myw2IEBAIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlv
bkMxRVJLTlNfMTUKIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVJLTlNfMTVWaXNp
YmxlUG9zaXRpb25FYgogX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNE5vZGVF
CiBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU181UmFuZ2VFCi1fX1pON1dlYkNv
cmUxNmRlbGV0ZUFsbENvb2tpZXNFdgogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJL
TlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEUKIF9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVj
dEVSS05TXzlGbG9hdFJlY3RFCiBfX1pON1dlYkNvcmUxNmlzRW5kT2ZQYXJhZ3JhcGhFUktOU18x
NVZpc2libGVQb3NpdGlvbkVOU18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKQEAgLTYy
NCw3ICs2MjIsNiBAQCBfX1pON1dlYkNvcmUyM2NyZWF0ZUZyYWdtZW50RnJvbU5vZGVzRVBOCiBf
X1pON1dlYkNvcmUyM2RhdGFGb3JVUkxDb21wb25lbnRUeXBlRVA1TlNVUkxsCiBfX1pON1dlYkNv
cmUyM2RlY29kZUhvc3ROYW1lV2l0aFJhbmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UKIF9fWk43V2Vi
Q29yZTIzZW5jb2RlSG9zdE5hbWVXaXRoUmFuZ2VFUDhOU1N0cmluZzhfTlNSYW5nZQotX19aTjdX
ZWJDb3JlMjNnZXRIb3N0bmFtZXNXaXRoQ29va2llc0VSTjNXVEY3SGFzaFNldElOUzBfNlN0cmlu
Z0VOUzBfMTBTdHJpbmdIYXNoRU5TMF8xMEhhc2hUcmFpdHNJUzJfRUVFRQogX19aTjdXZWJDb3Jl
MjRCaW5hcnlQcm9wZXJ0eUxpc3RXcml0ZXIxN3dyaXRlUHJvcGVydHlMaXN0RXYKIF9fWk43V2Vi
Q29yZTI0Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlMTFzZXRSZXNvdXJjZUVQTlNfMTRDYWNoZWRS
ZXNvdXJjZUUKIF9fWk43V2ViQ29yZTI0Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyMTBmaXJzdENo
aWxkRXYKQEAgLTY0Myw3ICs2NDAsNiBAQCBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25P
YnNlcnZlckMyCiBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckQyRXYKIF9f
Wk43V2ViQ29yZTI0Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwRVBOU184RG9jdW1lbnRFUktOM1dU
RjZTdHJpbmdFUzVfTlNfMjdGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb25FCiBfX1pON1dlYkNv
cmUyNGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0VSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29y
ZTI0ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
MjRmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25FUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUy
NG5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZEUKIF9fWk43V2ViQ29yZTI1SGlzdG9yeVByb3BlcnR5
TGlzdFdyaXRlcjExcmVsZWFzZURhdGFFdgpAQCAtODc4LDcgKzg3NCw2IEBAIF9fWk43V2ViQ29y
ZTdSdW5Mb29wOVRpbWVyQmFzZUQyRXYKIF9fWk43V2ViQ29yZTdUZXh0UnVuMTlhbGxvd3NSb3Vu
ZGluZ0hhY2tzRXYKIF9fWk43V2ViQ29yZTdUZXh0UnVuMjFzX2FsbG93c1JvdW5kaW5nSGFja3NF
CiBfX1pON1dlYkNvcmU3VGV4dFJ1bjIyc2V0QWxsb3dzUm91bmRpbmdIYWNrc0ViCi1fX1pON1dl
YkNvcmU3Y29va2llc0VQS05TXzhEb2N1bWVudEVSS05TXzRLVVJMRQogX19aTjdXZWJDb3JlN2pz
QXJyYXlFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFz
c1JlZlB0cklOU18xM0RPTVN0cmluZ0xpc3RFRUUKIF9fWk43V2ViQ29yZTdtYWtlUkdCRWlpaQog
X19aTjdXZWJDb3JlN3JlcGxhY2VFUk4zV1RGNlN0cmluZ0VSS05TXzE3UmVndWxhckV4cHJlc3Np
b25FUktTMV8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2Nr
ZXRDaGFubmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDEzMzA0NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0J1
ZmZlcigpCiAgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyKQogICAgICAgICAgICAgICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3Bv
bnNlKG1fZG9jdW1lbnQsIG1faWRlbnRpZmllciwgbV9oYW5kc2hha2UtPnNlcnZlckhhbmRzaGFr
ZVJlc3BvbnNlKCkpOwogICAgICAgICAgICAgaWYgKCFtX2hhbmRzaGFrZS0+c2VydmVyU2V0Q29v
a2llKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvb2tpZXNFbmFibGVkKG1f
ZG9jdW1lbnQpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmNvb2tpZXNFbmFi
bGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsgLy8gRXhjZXB0
aW9uIChmb3Igc2FuZGJveGVkIGRvY3VtZW50cykgaWdub3JlZC4KICAgICAgICAgICAgICAgICAg
ICAgbV9kb2N1bWVudC0+c2V0Q29va2llKG1faGFuZHNoYWtlLT5zZXJ2ZXJTZXRDb29raWUoKSwg
ZWMpOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAx
MzMwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOSBAQAogI2luY2x1ZGUgIkNv
b2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZy
YW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUg
IkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjAwLDcgKzIwMywxMCBAQCBD
U3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoCiAgICAgS1VSTCB1cmwgPSBo
dHRwVVJMRm9yQXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYgKG1fY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0
PERvY3VtZW50Kj4obV9jb250ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAgICBTdHJpbmcgY29v
a2llOworICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAgICAg
aWYgKGZyYW1lKQorICAgICAgICAgICAgY29va2llID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQo
KS0+Y29va2llSmFyKCkuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVu
dC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiAgICAgICAgIGlmICghY29va2llLmlzRW1wdHko
KSkKICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoIkNvb2tpZTogIiArIGNvb2tpZSk7CiAgICAg
ICAgIC8vIFNldCAiQ29va2llMjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBleGlzdHMgZm9yIHVy
bD8KQEAgLTI0OSw3ICsyNTUsMTIgQEAgUGFzc1JlZlB0cjxXZWJTb2NrZXRIYW5kc2hha2VSZXF1
ZXN0PiBXZQogICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2ll
cygpOwogICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4dCk7Ci0gICAgICAg
IFN0cmluZyBjb29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwg
dXJsKTsKKyAgICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAgICAgQ29va2ll
SmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwor
ICAgICAgICAgICAgY29va2llID0gY29va2llSmFyLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgICAgICB9CiAg
ICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlcXVlc3QtPmFkZEhl
YWRlckZpZWxkKCJDb29raWUiLCBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxj
b29raWU+IiBpZiBjb29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDEzMzA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MjAsNyArMzgyMCw5IEBAIFN0cmluZyBEb2N1bWVu
dDo6Y29va2llKEV4Y2VwdGlvbkNvZGUmIGUKICAgICBpZiAoY29va2llVVJMLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGNvb2tpZXModGhpcywgY29v
a2llVVJMKTsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVz
KGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9CiAKIHZvaWQgRG9j
dW1lbnQ6OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykK
QEAgLTM4NDEsNyArMzg0MywyMyBAQCB2b2lkIERvY3VtZW50OjpzZXRDb29raWUoY29uc3QgU3Ry
aW5nJiB2CiAgICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHNldENvb2tpZXModGhpcywgY29va2llVVJMLCB2YWx1ZSk7CisgICAgaWYgKCFmcmFtZSgp
KQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29r
aWVKYXIoKS5zZXRDb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMo
KSwgdmFsdWUpOworfQorCitib29sIERvY3VtZW50Ojpjb29raWVzRW5hYmxlZCgpCit7CisgICAg
aWYgKCFwYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcGFnZSgpLT5z
ZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZyYW1l
KCktPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llc0VuYWJsZWQodGhpcy0+
Y29va2llVVJMKCksIHRoaXMtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwogfQogCiBTdHJpbmcg
RG9jdW1lbnQ6OnJlZmVycmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZp
c2lvbiAxMzMwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtODE3LDYgKzgxNyw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjb29raWUoRXhj
ZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29va2llKGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKCk7CiAKICAgICBTdHJpbmcg
cmVmZXJyZXIoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDEzMzA0NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uRXJy
b3IuaCIKQEAgLTUxMiw5ICs1MTQsMTAgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENv
b2tpZXMoRXJybwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUoKSkpIHsKICAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIFZlY3Rv
cjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAg
ICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tp
ZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBh
bGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAg
IFZlY3RvcjxDb29raWU+IGRvY0Nvb2tpZXNMaXN0OwotICAgICAgICAgICAgcmF3Q29va2llc0lt
cGxlbWVudGVkID0gZ2V0UmF3Q29va2llcyhkb2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJpbmcs
ICppdCksIGRvY0Nvb2tpZXNMaXN0KTsKKyAgICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRl
ZCA9IGNvb2tpZUphci5nZXRSYXdDb29raWVzKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jQ29va2llc0xpc3QpOwogICAgICAg
ICAgICAgaWYgKCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2UgbmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBmb3IgdGhlIFN0cmluZyByZXByZXNl
bnRhdGlvbiBvZiBjb29raWVzLgogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwpAQCAtNTUwLDggKzU1Myw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29r
aWUoRXIKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxV
UkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2llSmFy
IGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwogICAg
ICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2lu
KCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBXZWJDb3JlOjpkZWxl
dGVDb29raWUoZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVOYW1l
KTsKKyAgICAgICAgICAgIGNvb2tpZUphci5kZWxldGVDb29raWUoS1VSTChQYXJzZWRVUkxTdHJp
bmcsICppdCksIGNvb2tpZU5hbWUpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDEzMzA0NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgRnJhbWVMb2Fk
ZXJDbGllbnRfaAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJUeXBlcy5oIgogI2luY2x1ZGUgIkljb25VUkwuaCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3Rv
bmVzLmgiCkBAIC02NCw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBDYWNoZWRGcmFtZTsKICAgICBjbGFz
cyBDb2xvcjsKKyAgICBjbGFzcyBDb29raWVKYXI7CiAgICAgY2xhc3MgRE9NV2luZG93RXh0ZW5z
aW9uOwogICAgIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKICAgICBjbGFzcyBEb2N1bWVudExvYWRl
cjsKQEAgLTM0OSw2ICszNTEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN0YXJ0VXNpbmdQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXIoUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKikgeyB9CiAjZW5k
aWYKKworICAgICAgICB2aXJ0dWFsIENvb2tpZUphciBjb29raWVKYXIoKSB7IHJldHVybiBDb29r
aWVKYXIoKTsgfQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL05hdmlnYXRvci5jcHAJKHJldmlzaW9uIDEzMzA0NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvTmF2aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogCi0jaW5jbHVkZSAiQ29v
a2llSmFyLmgiCiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgogI2luY2x1ZGUgIkRPTVBs
dWdpbkFycmF5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTExOCw3ICsxMTcsNyBAQCBi
b29sIE5hdmlnYXRvcjo6Y29va2llRW5hYmxlZCgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWUtPnBh
Z2UoKSAmJiAhbV9mcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBjb29raWVzRW5hYmxlZChtX2ZyYW1l
LT5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29va2llc0Vu
YWJsZWQoKTsKIH0KIAogYm9vbCBOYXZpZ2F0b3I6OmphdmFFbmFibGVkKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzMwNDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsMTMgQEAKICNpZm5kZWYgQ29va2llSmFyX2gKICNkZWZpbmUgQ29va2llSmFyX2gKIAorI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KKyNl
bmRpZgorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCisj
ZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTMzLDIzICs0MCw1NCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBEb2N1bWVudDsKLSAgICBjbGFzcyBL
VVJMOworY2xhc3MgS1VSTDsKK3N0cnVjdCBDb29raWU7CiAKLSAgICBzdHJ1Y3QgQ29va2llOwor
Y2xhc3MgQ29va2llSmFyIHsKK3B1YmxpYzoKKyAgICBDb29raWVKYXIoKQorICAgIHsKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyAgICAgICAgbV93ZWJDb29raWVKYXIgPSAwOworI2VuZGlmCisj
aWYgUExBVEZPUk0oUVQpCisgICAgICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSAwOworI2VuZGlm
CisgICAgfTsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBleHBsaWNpdCBDb29raWVKYXIo
V2ViS2l0OjpXZWJDb29raWVKYXIqIHdlYkNvb2tpZUphcikKKyAgICB7CisgICAgICAgIG1fd2Vi
Q29va2llSmFyID0gd2ViQ29va2llSmFyOworICAgIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShR
VCkKKyAgICBleHBsaWNpdCBDb29raWVKYXIoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCisg
ICAgeworICAgICAgICBtX25ldHdvcmtpbmdDb250ZXh0ID0gY29udGV4dDsKKyAgICB9OworI2Vu
ZGlmCiAKICAgICAvLyBjb29raWVzIG9taXRzIEh0dHBPbmx5IGNvb2tpZXMuCi0gICAgU3RyaW5n
IGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgU3RyaW5nIGNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwot
ICAgIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
KTsKLSAgICBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0gICAgYm9vbCBn
ZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+
Jik7Ci0gICAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIGNvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0IEtV
UkwmKTsKKyAgICBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VS
TCYsIGNvbnN0IEtVUkwmKTsKKyAgICB2b2lkIHNldENvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0
IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IEtV
UkwmLCBjb25zdCBLVVJMJik7CisgICAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmLCBj
b25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKKyAgICB2b2lkIGRlbGV0ZUNvb2tpZShjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKICAgICB2b2lkIGRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKICAgICB2b2lkIGRlbGV0ZUFsbENv
b2tpZXMoKTsKIAotfQorcHJpdmF0ZToKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBXZWJL
aXQ6OldlYkNvb2tpZUphciogbV93ZWJDb29raWVKYXI7CisjZW5kaWYKKyNpZiBQTEFURk9STShR
VCkKKyAgICBOZXR3b3JraW5nQ29udGV4dCogbV9uZXR3b3JraW5nQ29udGV4dDsKKyNlbmRpZgor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCShyZXZpc2lv
biAxMzMwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1
cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTQgKzc4LDYgQEAgc3RydWN0IEZvbnRSZW5k
ZXJTdHlsZTsKIAogY2xhc3MgUGxhdGZvcm1TdXBwb3J0IHsKIHB1YmxpYzoKLSAgICAvLyBDb29r
aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgc3RhdGljIFN0cmluZyBjb29raWVz
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyBTdHJpbmcgY29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0g
ICAgc3RhdGljIGJvb2wgcmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBW
ZWN0b3I8Q29va2llPiYpOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpOwotICAgIHN0YXRp
YyBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0KICAgICAvLyBGb250IC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogI2lmIE9TKFdJTkRPV1MpCiAgICAgc3RhdGljIGJvb2wgZW5zdXJlRm9udExvYWRlZChI
Rk9OVCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVZpc3VhbENvbnRleHQuY3BwCShyZXZpc2lvbiAxMzMwNDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJD
b29raWVKYXIuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTI2OCw3ICsyNzAsNyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvCiAKICAgICBLVVJMIG1vdmllVVJMID0gS1VSTChLVVJM
KCksIHVybCk7CiAgICAgVmVjdG9yPENvb2tpZT4gZG9jdW1lbnRDb29raWVzOwotICAgIGlmICgh
Z2V0UmF3Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgbW92aWVVUkwsIGRvY3VtZW50Q29va2ll
cykpCisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5nZXRS
YXdDb29raWVzKG1vdmllVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9j
dW1lbnRDb29raWVzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChzaXplX3QgbmR4ID0g
MDsgbmR4IDwgZG9jdW1lbnRDb29raWVzLnNpemUoKTsgbmR4KyspIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkocmV2aXNpb24gMTMzMDQ0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAt
NzYsNyArNzYsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlckNvb2tpZXMoCiAg
ICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtOTUsNyArOTUsNyBAQCBTdHJpbmcg
Y29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVCiAgICAgcmV0dXJuIFN0cmluZygpOwog
fQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTExNCw3
ICsxMTQsNyBAQCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAg
cmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQordm9pZCBDb29raWVK
YXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9y
Q29va2llcywgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogCkBAIC0xMzIsMTUgKzEzMiwxNSBAQCB2b2lkIHNldENvb2tpZXMoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zCiAKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCiAg
ICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNvb2tpZVN0b3JhZ2Ug
PSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQotICAgICAgICB3a1NldEhUVFBDb29raWVz
Rm9yVVJMKGNmQ29va2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29r
aWVVUkwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICAgICAgd2tTZXRI
VFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5n
ZXQoKSwgY29va2llVVJMLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiAgICAgZWxzZQogI2VuZGlm
Ci0gICAgICAgIFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0g
c2V0Q29va2llczpmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9j
dW1lbnRVUkw6ZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCldOworICAgICAgICBbW05T
SFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6Zmls
dGVyZWRDb29raWVzLmdldCgpIGZvclVSTDpjb29raWVVUkwgbWFpbkRvY3VtZW50VVJMOmZpcnN0
UGFydHlGb3JDb29raWVzXTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAK
LWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQorYm9vbCBDb29raWVKYXI6OmNv
b2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0
eUZvckNvb2tpZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAg
LTE1OCw3ICsxNTgsNyBAQCBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KikKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQ
YXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3
Q29va2llcy5jbGVhcigpOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKQEAgLTE5
MSw3ICsxOTEsNyBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit2b2lkIENvb2tpZUph
cjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1l
KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMjI1LDcgKzIyNSw3
IEBAIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhh
c2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dp
dGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKICAgICAKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lkIGdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAg
CkBAIC0yNTUsNyArMjU1LDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3Qg
U3RyaQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZGVsZXRlQWxs
Q29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAJKHJldmlzaW9u
IDEzMzA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFy
Q0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJD
b29raWUuaCIKICNpbmNsdWRlICJDb29raWVTdG9yYWdlQ0ZOZXQuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgog
I2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCkBAIC05NSw3ICs5NCw3IEBAIHN0YXRpYyBSZXRhaW5Q
dHI8Q0ZBcnJheVJlZj4gZmlsdGVyQ29va2kKICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwog
fQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQogewogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBDRkhUVFBDb29raWVT
dG9yYWdlIHN0b3JlcyBhbiBlbXB0eSBjb29raWUsIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNv
b2tpZTogPSIuCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKQEAgLTEwNiw3ICsxMDUsNyBAQCB2
b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgICAgIHJldHVybjsK
IAogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsQ0YoQWRvcHRDRiwgdXJsLmNyZWF0ZUNGVVJM
KCkpOwotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9w
dENGLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5jcmVhdGVDRlVSTCgpKTsKKyAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JDb29raWVzQ0YoQWRvcHRDRiwgZmly
c3RQYXJ0eUZvckNvb2tpZXMuY3JlYXRlQ0ZVUkwoKSk7CiAKICAgICAvLyA8aHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4KICAgICAv
LyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3
aXRob3V0IGEgdmFsdWUKQEAgLTEyMyw3ICsxMjIsNyBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zCiAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMoY29v
a2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpLmdldCgpLCB1
cmxDRi5nZXQoKSwgZmlyc3RQYXJ0eUZvckNvb2tpZXNDRi5nZXQoKSk7CiB9CiAKLVN0cmluZyBj
b29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0
cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZp
cnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAg
IGlmICghY29va2llU3RvcmFnZSkKQEAgLTEzNyw3ICsxMzYsNyBAQCBTdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCogLypkb2N1bWVuCiAgICAgcmV0dXJuIChDRlN0cmluZ1JlZilDRkRpY3Rp
b25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRik7CiB9CiAKLVN0cmluZyBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCov
LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVT
dG9yYWdlKQpAQCAtMTUxLDcgKzE1MCw3IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShjb24KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChj
b25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLykKIHsKICAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IHBvbGljeSA9IENG
SFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsK
ICAgICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2Ug
PSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQpAQCAtMTU5LDcgKzE1OCw3IEBAIGJvb2wg
Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG8KICAgICByZXR1cm4gcG9saWN5ID09
IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFp
biB8fCBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5czsKIH0K
IAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVz
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAg
ICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwpAQCAtMTkzLDcgKzE5Miw3IEBAIGJvb2wgZ2V0UmF3
Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgbmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAg
IGlmICghY29va2llU3RvcmFnZSkKQEAgLTIxNCw3ICsyMTMsNyBAQCB2b2lkIGRlbGV0ZUNvb2tp
ZShjb25zdCBEb2N1bWVudCosIGNvbnN0CiAgICAgfQogfQogCi12b2lkIGdldEhvc3RuYW1lc1dp
dGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6Omdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAg
IFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVu
dENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0yMzIs
NyArMjMxLDcgQEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAg
IH0KIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4g
Y29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFj
b29raWVTdG9yYWdlKQpAQCAtMjUxLDcgKzI1MCw3IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmkKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2
b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3Rv
cmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiAxMzMwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNTIgKzMyLDc0IEBACiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAKICNpbmNsdWRlICJDb29r
aWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5o
IgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWUuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29v
a2llSmFyLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgorI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJVUkwuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoZG9jdW1l
bnQsIHVybCwgdmFsdWUpOworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJD
b29raWVKYXItPnNldENvb2tpZSh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzLCB2YWx1ZSk7CiB9
CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6
OmNvb2tpZXMoZG9jdW1lbnQsIHVybCk7CisgICAgaWYgKCFtX3dlYkNvb2tpZUphcikKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX3dlYkNvb2tpZUphci0+Y29va2llcyh1
cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQor
U3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICByZXR1cm4g
UGxhdGZvcm1TdXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwg
dXJsKTsKKyAgICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgcmV0dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZSh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAg
ICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxlZChkb2N1bWVudCk7CisgICAg
aWYgKCFtX3dlYkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBt
X3dlYkNvb2tpZUphci0+Y29va2llc0VuYWJsZWQodXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7
CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6
Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JD
b29raWVzLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKLSAgICByZXR1cm4gUGxhdGZv
cm1TdXBwb3J0OjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIHJhd0Nvb2tpZXMpOworICAgIHJh
d0Nvb2tpZXMuY2xlYXIoKTsKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNvb2tp
ZT4gd2ViQ29va2llczsKKworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJD
b29raWVKYXItPnJhd0Nvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcywgd2ViQ29va2ll
cyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBjb25zdCBXZWJLaXQ6OldlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29v
a2llc1tpXTsKKyAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwgd2ViQ29va2ll
LnZhbHVlLCB3ZWJDb29raWUuZG9tYWluLCB3ZWJDb29raWUucGF0aCwgd2ViQ29va2llLmV4cGly
ZXMsIHdlYkNvb2tpZS5odHRwT25seSwgd2ViQ29va2llLnNlY3VyZSwgd2ViQ29va2llLnNlc3Np
b24pOworICAgICAgICByYXdDb29raWVzLmFwcGVuZChjb29raWUpOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3ZvaWQgQ29va2ll
SmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5h
bWUpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGRvY3VtZW50
LCB1cmwsIGNvb2tpZU5hbWUpOworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93
ZWJDb29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwogfQogCi12b2lkIGdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBD
b29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0
bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lk
IGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBD
b29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIC8qaG9zdG5h
bWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRl
bGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewog
ICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCShy
ZXZpc2lvbiAxMzMwNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q29va2llSmFyQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNs
dWRlICJDb29raWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtMjYsMzcgKzI1LDM3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tpZUph
cjsKK3N0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBzX2Nvb2tpZUphcjsKIAotdm9pZCBz
ZXRDb29raWVzKERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogewotICAgIGNvb2tpZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7CisgICAgc19j
b29raWVKYXIuc2V0KHVybC5zdHJpbmcoKSwgdmFsdWUpOwogfQogCi1TdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29v
a2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5
Rm9yQ29va2llcyovKQogewotICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7
CisgICAgcmV0dXJuIHNfY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOwogfQogCi1TdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQq
LywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JD
b29raWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llLgotICAg
IHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CisgICAgcmV0dXJuIHNfY29va2ll
SmFyLmdldCh1cmwuc3RyaW5nKCkpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERv
Y3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29u
c3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQog
ewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1l
bnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZp
cnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAg
IC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiAgICAgcmF3Q29va2llcy5jbGVhcigpOwog
ICAgIHJldHVybiBmYWxzZTsgLy8gcmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12
b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiAvKnVybCovLCBj
b25zdCBTdHJpbmcmIC8qY29va2llTmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGlt
cGxlbWVudGVkCiB9CkBAIC02OCwxNyArNjcsMTcgQEAgdm9pZCBzZXRDb29raWVTdG9yYWdlUHJp
dmF0ZUJyb3dzaW5nRW5hYgogfQogI2VuZGlmCiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1lcyovKQogewogICAgIC8v
IEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSovKQogewogICAgIC8vIEZJ
WE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2
b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5
ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
d2luL0Nvb2tpZUphcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcAkocmV2aXNpb24gMTMzMDQ0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGUuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8V2luaW5ldC5oPgpAQCAtMzYs
MTUgKzM1LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBzZXRDb29raWVzKERv
Y3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKwordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0g
ICAgLy8gRklYTUU6IERlYWwgd2l0aCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS4K
KyAgICAvLyBGSVhNRTogRGVhbCB3aXRoIGZpcnN0UGFydHlGb3JDb29raWVzLgogICAgIFN0cmlu
ZyBzdHIgPSB1cmwuc3RyaW5nKCk7CiAgICAgU3RyaW5nIHZhbCA9IHZhbHVlOwogICAgIEludGVy
bmV0U2V0Q29va2llKHN0ci5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2YWwu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29r
aWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlG
b3JDb29raWVzKi8pCiB7CiAgICAgU3RyaW5nIHN0ciA9IHVybC5zdHJpbmcoKTsKIApAQCAtNjMs
NDAgKzYzLDQwIEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW4KICAg
ICByZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewogICAgIC8v
IEZJWE1FOiBpbmNsdWRlIEh0dHBPbmx5IGNvb2tpZQotICAgIHJldHVybiBjb29raWVzKGRvY3Vt
ZW50LCB1cmwpOworICAgIHJldHVybiBjb29raWVzKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMp
OwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8p
Citib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29u
c3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVj
dG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3Q29va2llcyhj
b25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8s
IFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGlt
cGxlbWVudGVkCiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsgLy8g
cmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBTdHJpbmcmIC8qY29va2ll
TmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQg
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lk
IENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhv
c3RuYW1lcyovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZv
aWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lk
IENvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0
bmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQg
ZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7
CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAJKHJldmlzaW9uIDEzMzA0NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsOSArMzEsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2ll
SmFyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5ldHdvcmtp
bmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgpAQCAtNDksMzEg
KzQ2LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIFNoYXJlZENvb2tpZUphclF0
KiBzX3NoYXJlZENvb2tpZUphclF0ID0gMDsKIAotc3RhdGljIE5ldHdvcmtpbmdDb250ZXh0KiBu
ZXR3b3JraW5nQ29udGV4dChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit2b2lkIENvb2tpZUph
cjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JD
b29raWVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmICghZG9jdW1lbnQpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIg
PSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgc2V0Q29v
a2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250
ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdD
b250ZXh0KQogICAgICAgICByZXR1cm47Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNv
bnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3Jr
Q29va2llSmFyKiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdl
cigpLT5jb29raWVKYXIoKTsKICAgICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UVVybCB1cmxGb3JDb29raWVzKHVybCk7Ci0gICAgUVVybCBmaXJzdFBhcnR5VXJsKGRvY3VtZW50
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xp
Y3lQZXJtaXRzKGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQorICAgIFFV
cmwgZmlyc3RQYXJ0eVVybChmaXJzdFBhcnR5Rm9yQ29va2llcyk7CisgICAgaWYgKCF0aGlyZFBh
cnR5Q29va2llUG9saWN5UGVybWl0cyhtX25ldHdvcmtpbmdDb250ZXh0LCB1cmxGb3JDb29raWVz
LCBmaXJzdFBhcnR5VXJsKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUUxpc3Q8UU5ldHdvcmtD
b29raWU+IGNvb2tpZXMgPSBRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJpbmcodmFs
dWUpLnRvTGF0aW4xKCkpOwpAQCAtODgsMTYgKzcxLDE1IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBqYXItPnNldENvb2tpZXNGcm9tVXJsKGNvb2tpZXMs
IHVybEZvckNvb2tpZXMpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICBOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAg
ICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFy
KiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29r
aWVKYXIoKTsKIAogICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQ
YXJ0eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgaWYgKCF0aGly
ZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBh
cnR5VXJsKSkKKyAgICBRVXJsIGZpcnN0UGFydHlVcmwoZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwor
ICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMobV9uZXR3b3JraW5nQ29udGV4
dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKIAogICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9y
VXJsKHVybEZvckNvb2tpZXMpOwpAQCAtMTE0LDEyICs5NiwxMSBAQCBTdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQsCiAgICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihR
TGF0aW4xU3RyaW5nKCI7ICIpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQorU3RyaW5n
IENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYg
KCFjb250ZXh0KQorICAgIGlmICghbV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3Jr
QWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFy
ID0gbV9uZXR3b3JraW5nQ29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFy
KCk7CiAKICAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0Zv
clVybChRVXJsKHVybCkpOwogICAgIGlmIChjb29raWVzLmlzRW1wdHkoKSkKQEAgLTEzMiw0MSAr
MTEzLDQwIEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24KICAgICBy
ZXR1cm4gcmVzdWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1ib29s
IGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgQ29va2llSmFy
Ojpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0
UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBu
ZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQorICAgIGlmICgh
bV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBj
b250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICByZXR1cm4g
bV9uZXR3b3JraW5nQ29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7
CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVz
KGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMq
LywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAv
LyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNv
bnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUph
cjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29r
aWVOYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9p
ZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3Zv
aWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhv
c3RuYW1lcykKIHsKICAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFy
UXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+Z2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoaG9zdG5hbWVzKTsKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKICAgICBTaGFyZWRDb29raWVKYXJR
dCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAg
ICAgIGphci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKIH0KIAotdm9pZCBk
ZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsK
ICAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgp
OwogICAgIGlmIChqYXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJ
KHJldmlzaW9uIDEzMzA0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTIsNyArMTM5Miw3IEBAIE5QRXJyb3IgUGx1Z2luVmll
dzo6Z2V0VmFsdWVGb3JVUkwoTlBOVVIKICAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7CiAgICAg
ICAgICAgICBGcmFtZSogZnJhbWUgPSBnZXRGcmFtZShwYXJlbnRGcmFtZSgpLCBtX2VsZW1lbnQp
OwogICAgICAgICAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ1N0cmlu
ZyBjb29raWVTdHIgPSBjb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCB1KS51dGY4KCk7CisgICAg
ICAgICAgICAgICAgY29uc3QgQ1N0cmluZyBjb29raWVTdHIgPSBmcmFtZS0+bG9hZGVyKCktPmNs
aWVudCgpLT5jb29raWVKYXIoKS5jb29raWVzKHUsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBh
cnR5Rm9yQ29va2llcygpKS51dGY4KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFjb29raWVTdHIu
aXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHNpemUgPSBjb29raWVT
dHIubGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGNo
YXIqPihOUE5fTWVtQWxsb2Moc2l6ZSsxKSk7CkBAIC0xNDU0LDcgKzE0NTQsNyBAQCBOUEVycm9y
IFBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKE5QTlVSCiAgICAgICAgICAgICBjb25zdCBTdHJp
bmcgY29va2llU3RyID0gU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSwgbGVuKTsKICAgICAgICAgICAg
IEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7CiAgICAg
ICAgICAgICBpZiAoZnJhbWUgJiYgIWNvb2tpZVN0ci5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgc2V0Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSwgY29va2llU3RyKTsKKyAgICAgICAg
ICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVz
KHUsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVTdHIp
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJM
OwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzA0NSkKKysrIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisy
MDEyLTEwLTMxICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbQ2hyb21pdW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9y
bVN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJh
dGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OmdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdl
YktpdDo6UGx1Z2luVmlldzo6c2V0Q29va2llc0ZvclVSTCk6CisKIDIwMTItMTAtMzAgIEFuZGVy
cyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBDb25uZWN0aW9uOjpD
bGllbnQ6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSBzaG91bGQgdGFrZSB0aGUgZnVsbCBtZXNz
YWdlIG5hbWUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9XZWJDb29r
aWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Nv
b2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJKHJldmlzaW9uIDEzMzA0NCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhvc3RuYW1l
c1dpdGhDCiAKICAgICBIYXNoU2V0PFN0cmluZz4gaG9zdG5hbWVzOwogCi0gICAgV2ViQ29yZTo6
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKKyAgICBXZWJDb3JlOjpDb29raWVK
YXIoKS5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMpOwogCiAgICAgVmVjdG9yPFN0
cmluZz4gaG9zdG5hbWVMaXN0OwogICAgIGNvcHlUb1ZlY3Rvcihob3N0bmFtZXMsIGhvc3RuYW1l
TGlzdCk7CkBAIC02OSwxNCArNjksMTQgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpkZWxldGVD
b29raWVzRm9ySAogewogICAgIFdlYlByb2Nlc3M6OkxvY2FsVGVybWluYXRpb25EaXNhYmxlciB0
ZXJtaW5hdGlvbkRpc2FibGVyKFdlYlByb2Nlc3M6OnNoYXJlZCgpKTsKIAotICAgIFdlYkNvcmU6
OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShob3N0bmFtZSk7CisgICAgV2ViQ29yZTo6Q29va2ll
SmFyKCkuZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKIH0KIAogdm9pZCBXZWJD
b29raWVNYW5hZ2VyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBXZWJQcm9jZXNzOjpMb2Nh
bFRlcm1pbmF0aW9uRGlzYWJsZXIgdGVybWluYXRpb25EaXNhYmxlcihXZWJQcm9jZXNzOjpzaGFy
ZWQoKSk7CiAKLSAgICBXZWJDb3JlOjpkZWxldGVBbGxDb29raWVzKCk7CisgICAgV2ViQ29yZTo6
Q29va2llSmFyKCkuZGVsZXRlQWxsQ29va2llcygpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFn
ZXI6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcygpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxMzMwNDQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMDksMTIgKzEzMDksMTkgQEAgU3RyaW5nIFBsdWdpblZpZXc6OnBy
b3hpZXNGb3JVUkwoY29uc3QgUwogCiBTdHJpbmcgUGx1Z2luVmlldzo6Y29va2llc0ZvclVSTChj
b25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKLSAgICByZXR1cm4gY29va2llcyhtX3BsdWdpbkVs
ZW1lbnQtPmRvY3VtZW50KCksIEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpKTsKKyAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVK
YXIoKS5jb29raWVzKEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0Q29va2llc0ZvclVSTChj
b25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCiB7Ci0g
ICAgc2V0Q29va2llcyhtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCksIEtVUkwoS1VSTCgpLCB1
cmxTdHJpbmcpLCBjb29raWVTdHJpbmcpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fcGx1
Z2luRWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJh
bWUoKTsKKyAgICBpZiAoZnJhbWUpCisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkt
PmNvb2tpZUphcigpLnNldENvb2tpZXMoS1VSTChLVVJMKCksIHVybFN0cmluZyksIGRvY3VtZW50
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVTdHJpbmcpOwogfQogCiBib29sIFBsdWdp
blZpZXc6OmdldEF1dGhlbnRpY2F0aW9uSW5mbyhjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3Rl
Y3Rpb25TcGFjZSwgU3RyaW5nJiB1c2VybmFtZSwgU3RyaW5nJiBwYXNzd29yZCkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzMwNDUpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEy
LTEwLTMxICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBb
Q2hyb21pdW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1
cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5
MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
aXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlv
bmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISku
CisKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBsOjpjb29raWVKYXIpOgorICAgICAgICAqIHNyYy9G
cmFtZUxvYWRlckNsaWVudEltcGwuaDoKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50SW1wbCk6
CisgICAgICAgICogc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KwogMjAxMi0xMC0zMSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmVtb3ZlIGNvZGUgdG8gaGlkZS9yZXNob3cgdGV4dCBjYXJldCBmb3IgUGFnZVBvcHVwcwpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNs
aWVudEltcGwuY3BwCShyZXZpc2lvbiAxMzMwNDQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUxLDUg
KzE2NTEsMTQgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpc3BhdGNoV2lsbAogfQog
I2VuZGlmCiAKK1dlYkNvcmU6OkNvb2tpZUphciBGcmFtZUxvYWRlckNsaWVudEltcGw6OmNvb2tp
ZUphcigpCit7CisgICAgaWYgKCFtX3dlYkZyYW1lIHx8ICFtX3dlYkZyYW1lLT5jbGllbnQoKSkK
KyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tpZUphcigwKTsKKyAgICBXZWJDb29raWVKYXIq
IHdlYkNvb2tpZUphciA9IG1fd2ViRnJhbWUtPmNsaWVudCgpLT5jb29raWVKYXIobV93ZWJGcmFt
ZSk7CisgICAgaWYgKCF3ZWJDb29raWVKYXIpCisgICAgICAgIHdlYkNvb2tpZUphciA9IFdlYktp
dDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y29va2llSmFyKCk7CisgICAgcmV0dXJuIFdlYkNvcmU6
OkNvb2tpZUphcih3ZWJDb29raWVKYXIpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50
SW1wbC5oCShyZXZpc2lvbiAxMzMwNDQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9G
cmFtZUxvYWRlckNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsU3RhcnRVc2luZ1BlZXJDb25u
ZWN0aW9uSGFuZGxlcihXZWJDb3JlOjpSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIqKSBPVkVSUklE
RTsKICNlbmRpZgogCisgICAgdmlydHVhbCBXZWJDb3JlOjpDb29raWVKYXIgY29va2llSmFyKCkg
T1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgdm9pZCBtYWtlRG9jdW1lbnRWaWV3KCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAko
cmV2aXNpb24gMTMzMDQ0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1T
dXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDg2ICsxMDAsNiBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBXZWJDb29raWVK
YXIqIGdldENvb2tpZUphcihjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgV2ViRnJh
bWVJbXBsKiBmcmFtZUltcGwgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJh
bWUoKSk7Ci0gICAgaWYgKCFmcmFtZUltcGwgfHwgIWZyYW1lSW1wbC0+Y2xpZW50KCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZnJhbWVJbXBsLT5j
bGllbnQoKS0+Y29va2llSmFyKGZyYW1lSW1wbCk7Ci0gICAgaWYgKCFjb29raWVKYXIpCi0gICAg
ICAgIGNvb2tpZUphciA9IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y29va2llSmFyKCk7
Ci0gICAgcmV0dXJuIGNvb2tpZUphcjsKLX0KLQotLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12
b2lkIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IEtVUkwmIHVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tp
ZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5z
ZXRDb29raWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUpOwot
fQotCi1TdHJpbmcgUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgdXJsKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgV2ViQ29v
a2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29r
aWVKYXIpCi0gICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llcyh1cmwsIGRvY3VtZW50
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJp
bmcgUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0Owot
ICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAg
ICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgUGxhdGZvcm1TdXBwb3J0OjpyYXdDb29r
aWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKLXsKLSAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgV2ViVmVj
dG9yPFdlYkNvb2tpZT4gd2ViQ29va2llczsKLQotICAgIFdlYkNvb2tpZUphciogY29va2llSmFy
ID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBj
b29raWVKYXItPnJhd0Nvb2tpZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMo
KSwgd2ViQ29va2llcyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2ll
cy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdl
YkNvb2tpZXNbaV07Ci0gICAgICAgIENvb2tpZSBjb29raWUod2ViQ29va2llLm5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAg
IHdlYkNvb2tpZS5kb21haW4sCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnBhdGgs
Ci0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmV4cGlyZXMsCi0gICAgICAgICAgICAg
ICAgICAgICAgd2ViQ29va2llLmh0dHBPbmx5LAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNv
b2tpZS5zZWN1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlc3Npb24pOwot
ICAgICAgICByYXdDb29raWVzLmFwcGVuZChjb29raWUpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBQbGF0Zm9ybVN1cHBvcnQ6OmRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQot
ewotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsK
LSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmws
IGNvb2tpZU5hbWUpOwotfQotCi1ib29sIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQo
Y29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0g
ICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAg
IGlmIChjb29raWVKYXIpCi0gICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llc0VuYWJs
ZWQoZG9jdW1lbnQtPmNvb2tpZVVSTCgpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMo
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAj
aWYgT1MoV0lORE9XUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzMwNDUpCisrKyBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDEyLTEwLTMxICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0
Zm9ybVN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gs
IHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNvb2tpZUphcik6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFF0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50
UXQpOgorCiAyMDEyLTEwLTMxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWls
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTMzMDE2LgpJbmRleDog
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50UXQuY3BwCShyZXZpc2lvbiAxMzMwNDQpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc2
LDYgKzE2NzYsMTMgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjplbWl0TG9hZEZpbmlzaAog
ICAgIGVtaXQgbV93ZWJGcmFtZS0+bG9hZEZpbmlzaGVkKG9rKTsKIH0KIAorV2ViQ29yZTo6Q29v
a2llSmFyIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNvb2tpZUphcigpCit7CisgICAgaWYgKCFtX2Zy
YW1lIHx8ICFtX2ZyYW1lLT5sb2FkZXIoKSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tp
ZUphcigwKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKG1fZnJhbWUtPmxvYWRlcigp
LT5uZXR3b3JraW5nQ29udGV4dCgpKTsKK30KKwogfQogCiAjaW5jbHVkZSAibW9jX0ZyYW1lTG9h
ZGVyQ2xpZW50UXQuY3BwIgpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgJKHJldmlzaW9uIDEzMzA0NCkKKysrIFNv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50UXRf
aAogCiAKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTUz
LDYgKzU0LDcgQEAgY2xhc3MgUVdlYkZyYW1lOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKK2NsYXNzIENvb2tpZUphcjsKIGNsYXNzIERvY3Vt
ZW50TG9hZGVyOwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZvcm1TdGF0ZTsKQEAgLTIyNyw2ICsy
MjksOCBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBLVVJMJiBsYXN0UmVxdWVzdGVkVXJsKCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0UmVxdWVzdGVkVXJsOyB9CiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6
OkNvb2tpZUphciBjb29raWVKYXIoKSBPVkVSUklERTsKKwogICAgIHN0YXRpYyBib29sIGR1bXBG
cmFtZUxvYWRlckNhbGxiYWNrczsKICAgICBzdGF0aWMgYm9vbCBkdW1wUHJvZ3Jlc3NGaW5pc2hl
ZENhbGxiYWNrOwogICAgIHN0YXRpYyBib29sIGR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkZXJD
YWxsYmFja3M7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171848</attachid>
            <date>2012-11-01 07:32:27 -0700</date>
            <delta_ts>2012-11-01 09:43:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99340-20121101103042.patch</filename>
            <type>text/plain</type>
            <size>56322</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzE2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxMi0xMS0wMSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xp
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAg
ICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29v
a2llRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OkNvb2tpZUphcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBw
b3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nv
b2tpZUphci5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0Vu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tp
ZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9Db29raWVKYXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2ll
SmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFs
bENvb2tpZXMpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6CisKIDIwMTItMTEtMDEgIFN0ZXBoZW4gV2hpdGUg
IDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjEzMzE0My4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMzMxNjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtODMs
NyArODMsNiBAQCBfX1pON1dlYkNvcmUxMFNjcm9sbFZpZXcyNHdpbmRvd1Jlc2l6ZXJSCiBfX1pO
N1dlYkNvcmUxMFNjcm9sbFZpZXc4YWRkQ2hpbGRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNldpZGdl
dEVFRQogX19aTjdXZWJDb3JlMTBTaGFkb3dSb290NmNyZWF0ZUVQTlNfN0VsZW1lbnRFUmkKIF9f
Wk43V2ViQ29yZTEwZGVsZXRlRmlsZUVSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29yZTEwc2V0
Q29va2llc0VQTlNfOERvY3VtZW50RVJLTlNfNEtVUkxFUktOM1dURjZTdHJpbmdFCiBfX1pON1dl
YkNvcmUxMHRvRG9jdW1lbnRFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTExQml0bWFwSW1h
Z2VDMUVQN0NHSW1hZ2VQTlNfMTNJbWFnZU9ic2VydmVyRQogX19aTjdXZWJDb3JlMTFCaXRtYXBJ
bWFnZUMxRVBOU18xM0ltYWdlT2JzZXJ2ZXJFCkBAIC00NjQsNyArNDYzLDYgQEAgX19aTjdXZWJD
b3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktOU18xNQogX19aTjdXZWJDb3JlMTZWaXNpYmxlU2Vs
ZWN0aW9uQzFFUktOU18xNVZpc2libGVQb3NpdGlvbkViCiBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1
bGxNYXJrdXBFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE2Y3JlYXRlRnVsbE1hcmt1cEVQS05T
XzVSYW5nZUUKLV9fWk43V2ViQ29yZTE2ZGVsZXRlQWxsQ29va2llc0V2CiBfX1pON1dlYkNvcmUx
NmVuY2xvc2luZ0ludFJlY3RFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRSZWN0RQogX19aTjdXZWJD
b3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNfOUZsb2F0UmVjdEUKIF9fWk43V2ViQ29yZTE2aXNF
bmRPZlBhcmFncmFwaEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5
Q3Jvc3NpbmdSdWxlRQpAQCAtNjI0LDcgKzYyMiw2IEBAIF9fWk43V2ViQ29yZTIzY3JlYXRlRnJh
Z21lbnRGcm9tTm9kZXNFUE4KIF9fWk43V2ViQ29yZTIzZGF0YUZvclVSTENvbXBvbmVudFR5cGVF
UDVOU1VSTGwKIF9fWk43V2ViQ29yZTIzZGVjb2RlSG9zdE5hbWVXaXRoUmFuZ2VFUDhOU1N0cmlu
ZzhfTlNSYW5nZQogX19aTjdXZWJDb3JlMjNlbmNvZGVIb3N0TmFtZVdpdGhSYW5nZUVQOE5TU3Ry
aW5nOF9OU1JhbmdlCi1fX1pON1dlYkNvcmUyM2dldEhvc3RuYW1lc1dpdGhDb29raWVzRVJOM1dU
RjdIYXNoU2V0SU5TMF82U3RyaW5nRU5TMF8xMFN0cmluZ0hhc2hFTlMwXzEwSGFzaFRyYWl0c0lT
Ml9FRUVFCiBfX1pON1dlYkNvcmUyNEJpbmFyeVByb3BlcnR5TGlzdFdyaXRlcjE3d3JpdGVQcm9w
ZXJ0eUxpc3RFdgogX19aTjdXZWJDb3JlMjRDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UxMXNldFJl
c291cmNlRVBOU18xNENhY2hlZFJlc291cmNlRQogX19aTjdXZWJDb3JlMjRDb21wb3NlZFNoYWRv
d1RyZWVXYWxrZXIxMGZpcnN0Q2hpbGRFdgpAQCAtNjQzLDcgKzY0MCw2IEBAIF9fWk43V2ViQ29y
ZTI0RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyQzIKIF9fWk43V2ViQ29yZTI0RnJhbWVEZXN0cnVj
dGlvbk9ic2VydmVyRDJFdgogX19aTjdXZWJDb3JlMjRjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBF
UE5TXzhEb2N1bWVudEVSS04zV1RGNlN0cmluZ0VTNV9OU18yN0ZyYWdtZW50U2NyaXB0aW5nUGVy
bWlzc2lvbkUKIF9fWk43V2ViQ29yZTI0ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzRVJLTjNXVEY2
U3RyaW5nRQotX19aTjdXZWJDb3JlMjRkZWxldGVDb29raWVzRm9ySG9zdG5hbWVFUktOM1dURjZT
dHJpbmdFCiBfX1pON1dlYkNvcmUyNGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbkVSS04zV1RGNlN0
cmluZ0UKIF9fWk43V2ViQ29yZTI0bm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkRQogX19aTjdXZWJD
b3JlMjVIaXN0b3J5UHJvcGVydHlMaXN0V3JpdGVyMTFyZWxlYXNlRGF0YUV2CkBAIC04NzgsNyAr
ODc0LDYgQEAgX19aTjdXZWJDb3JlN1J1bkxvb3A5VGltZXJCYXNlRDJFdgogX19aTjdXZWJDb3Jl
N1RleHRSdW4xOWFsbG93c1JvdW5kaW5nSGFja3NFdgogX19aTjdXZWJDb3JlN1RleHRSdW4yMXNf
YWxsb3dzUm91bmRpbmdIYWNrc0UKIF9fWk43V2ViQ29yZTdUZXh0UnVuMjJzZXRBbGxvd3NSb3Vu
ZGluZ0hhY2tzRWIKLV9fWk43V2ViQ29yZTdjb29raWVzRVBLTlNfOERvY3VtZW50RVJLTlNfNEtV
UkxFCiBfX1pON1dlYkNvcmU3anNBcnJheUVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xv
YmFsT2JqZWN0RU4zV1RGMTBQYXNzUmVmUHRySU5TXzEzRE9NU3RyaW5nTGlzdEVFRQogX19aTjdX
ZWJDb3JlN21ha2VSR0JFaWlpCiBfX1pON1dlYkNvcmU3cmVwbGFjZUVSTjNXVEY2U3RyaW5nRVJL
TlNfMTdSZWd1bGFyRXhwcmVzc2lvbkVSS1MxXwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAkocmV2aXNpb24g
MTMzMTYwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENo
YW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzAsNyArNDMwLDcgQEAgYm9vbCBXZWJTb2Nr
ZXRDaGFubmVsOjpwcm9jZXNzQnVmZmVyKCkKICAgICAgICAgICAgIGlmIChtX2lkZW50aWZpZXIp
CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlV2Vi
U29ja2V0SGFuZHNoYWtlUmVzcG9uc2UobV9kb2N1bWVudCwgbV9pZGVudGlmaWVyLCBtX2hhbmRz
aGFrZS0+c2VydmVySGFuZHNoYWtlUmVzcG9uc2UoKSk7CiAgICAgICAgICAgICBpZiAoIW1faGFu
ZHNoYWtlLT5zZXJ2ZXJTZXRDb29raWUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY29va2llc0VuYWJsZWQobV9kb2N1bWVudCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9k
b2N1bWVudC0+Y29va2llc0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgICAgICBFeGNlcHRp
b25Db2RlIGVjOyAvLyBFeGNlcHRpb24gKGZvciBzYW5kYm94ZWQgZG9jdW1lbnRzKSBpZ25vcmVk
LgogICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5zZXRDb29raWUobV9oYW5kc2hha2Ut
PnNlcnZlclNldENvb2tpZSgpLCBlYyk7CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw5IEBACiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJIVFRQSGVh
ZGVyTWFwLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJLVVJMLmgiCkBA
IC0yMDAsNyArMjAzLDEwIEBAIENTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpjbGllbnRIYW5k
c2gKICAgICBLVVJMIHVybCA9IGh0dHBVUkxGb3JBdXRoZW50aWNhdGlvbkFuZENvb2tpZXMoKTsK
ICAgICBpZiAobV9jb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX2NvbnRleHQpOwotICAgICAgICBTdHJp
bmcgY29va2llID0gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7
CisgICAgICAgIFN0cmluZyBjb29raWU7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpOworICAgICAgICBpZiAoZnJhbWUpCisgICAgICAgICAgICBjb29raWUgPSBmcmFt
ZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKICAgICAgICAg
aWYgKCFjb29raWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgZmllbGRzLmFwcGVuZCgiQ29va2ll
OiAiICsgY29va2llKTsKICAgICAgICAgLy8gU2V0ICJDb29raWUyOiA8Y29va2llPiIgaWYgY29v
a2llcyAyIGV4aXN0cyBmb3IgdXJsPwpAQCAtMjQ5LDcgKzI1NSwxMiBAQCBQYXNzUmVmUHRyPFdl
YlNvY2tldEhhbmRzaGFrZVJlcXVlc3Q+IFdlCiAgICAgS1VSTCB1cmwgPSBodHRwVVJMRm9yQXV0
aGVudGljYXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYgKG1fY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4o
bV9jb250ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAgICBTdHJpbmcgY29va2llOworICAgICAg
ICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAgICAgaWYgKGZyYW1lKSB7
CisgICAgICAgICAgICBDb29raWVKYXIgY29va2llSmFyID0gZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKS0+Y29va2llSmFyKCk7CisgICAgICAgICAgICBjb29raWUgPSBjb29raWVKYXIuY29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSk7CisgICAgICAgIH0KICAgICAgICAgaWYgKCFjb29raWUuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgcmVxdWVzdC0+YWRkSGVhZGVyRmllbGQoIkNvb2tpZSIsIGNvb2tpZSk7CiAgICAgICAg
IC8vIFNldCAiQ29va2llMjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBleGlzdHMgZm9yIHVybD8K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgxOSw3ICszODE5
LDkgQEAgU3RyaW5nIERvY3VtZW50Ojpjb29raWUoRXhjZXB0aW9uQ29kZSYgZQogICAgIGlmIChj
b29raWVVUkwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1
cm4gY29va2llcyh0aGlzLCBjb29raWVVUkwpOworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCkt
PmNvb2tpZUphcigpLmNvb2tpZXMoY29va2llVVJMLCB0aGlzLT5maXJzdFBhcnR5Rm9yQ29va2ll
cygpKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0Q29va2llKGNvbnN0IFN0cmluZyYgdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMzg0MCw3ICszODQyLDIzIEBAIHZvaWQgRG9jdW1lbnQ6
OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHYKICAgICBpZiAoY29va2llVVJMLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0Q29va2llcyh0aGlzLCBjb29raWVVUkwsIHZhbHVl
KTsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKyAgICBmcmFtZSgpLT5sb2Fk
ZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLnNldENvb2tpZXMoY29va2llVVJMLCB0aGlzLT5m
aXJzdFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgRG9jdW1lbnQ6OmNvb2tp
ZXNFbmFibGVkKCkKK3sKKyAgICBpZiAoIXBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCFwYWdlKCktPnNldHRpbmdzKCktPmNvb2tpZUVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5j
b29raWVzRW5hYmxlZCh0aGlzLT5jb29raWVVUkwoKSwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSk7CiB9CiAKIFN0cmluZyBEb2N1bWVudDo6cmVmZXJyZXIoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MTcsNiArODE3LDcgQEAgcHVibGljOgogCiAg
ICAgU3RyaW5nIGNvb2tpZShFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgdm9pZCBzZXRDb29r
aWUoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgY29va2llc0VuYWJs
ZWQoKTsKIAogICAgIFN0cmluZyByZWZlcnJlcigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkocmV2aXNpb24gMTMz
MTYwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDggQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25Db250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiR2VvbG9jYXRpb25FcnJvci5oIgpAQCAtNTA5LDkgKzUxMSwxMCBAQCB2b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvCiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBt
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1h
aW5GcmFtZSgpKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1l
bnQoKTsKICAgICAgICAgVmVjdG9yPEtVUkw+IGFsbFVSTHMgPSBhbGxSZXNvdXJjZXNVUkxzRm9y
RnJhbWUoZnJhbWUpOworICAgICAgICBDb29raWVKYXIgY29va2llSmFyID0gZnJhbWUtPmxvYWRl
cigpLT5jbGllbnQoKS0+Y29va2llSmFyKCk7CiAgICAgICAgIGZvciAoVmVjdG9yPEtVUkw+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IGFsbFVSTHMuYmVnaW4oKTsgaXQgIT0gYWxsVVJMcy5lbmQoKTsg
KytpdCkgewogICAgICAgICAgICAgVmVjdG9yPENvb2tpZT4gZG9jQ29va2llc0xpc3Q7Ci0gICAg
ICAgICAgICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBnZXRSYXdDb29raWVzKGRvY3VtZW50LCBL
VVJMKFBhcnNlZFVSTFN0cmluZywgKml0KSwgZG9jQ29va2llc0xpc3QpOworICAgICAgICAgICAg
cmF3Q29va2llc0ltcGxlbWVudGVkID0gY29va2llSmFyLmdldFJhd0Nvb2tpZXMoS1VSTChQYXJz
ZWRVUkxTdHJpbmcsICppdCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBkb2ND
b29raWVzTGlzdCk7CiAgICAgICAgICAgICBpZiAoIXJhd0Nvb2tpZXNJbXBsZW1lbnRlZCkgewog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGR1cGxpY2F0aW9uIGNoZWNraW5nIGZv
ciB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNvb2tpZXMuCiAgICAgICAgICAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC01NDcsOCArNTUwLDkgQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgVmVjdG9yPEtVUkw+IGFsbFVSTHMgPSBhbGxSZXNvdXJjZXNVUkxzRm9yRnJhbWUoZnJhbWUp
OworICAgICAgICBDb29raWVKYXIgY29va2llSmFyID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQo
KS0+Y29va2llSmFyKCk7CiAgICAgICAgIGZvciAoVmVjdG9yPEtVUkw+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGFsbFVSTHMuYmVnaW4oKTsgaXQgIT0gYWxsVVJMcy5lbmQoKTsgKytpdCkKLSAgICAg
ICAgICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJp
bmcsICppdCksIGNvb2tpZU5hbWUpOworICAgICAgICAgICAgY29va2llSmFyLmRlbGV0ZUNvb2tp
ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgKml0KSwgY29va2llTmFtZSk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24g
MTMzMTYwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5kZWYgRnJhbWVMb2FkZXJDbGllbnRf
aAogI2RlZmluZSBGcmFtZUxvYWRlckNsaWVudF9oCiAKKyNpbmNsdWRlICJDb29raWVKYXIuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiSWNvblVSTC5oIgogI2lu
Y2x1ZGUgIkxheW91dE1pbGVzdG9uZXMuaCIKQEAgLTY0LDYgKzY1LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogICAgIGNsYXNzIENh
Y2hlZEZyYW1lOwogICAgIGNsYXNzIENvbG9yOworICAgIGNsYXNzIENvb2tpZUphcjsKICAgICBj
bGFzcyBET01XaW5kb3dFeHRlbnNpb247CiAgICAgY2xhc3MgRE9NV3JhcHBlcldvcmxkOwogICAg
IGNsYXNzIERvY3VtZW50TG9hZGVyOwpAQCAtMzQ5LDYgKzM1MSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hXaWxsU3RhcnRVc2luZ1BlZXJDb25uZWN0aW9uSGFuZGxlcihSVENQZWVyQ29ubmVjdGlv
bkhhbmRsZXIqKSB7IH0KICNlbmRpZgorCisgICAgICAgIHZpcnR1YWwgQ29va2llSmFyIGNvb2tp
ZUphcigpIHsgcmV0dXJuIENvb2tpZUphcigpOyB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAkocmV2aXNpb24gMTMzMTYw
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9y
LmgiCiAKLSNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJET01NaW1lVHlwZUFycmF5
LmgiCiAjaW5jbHVkZSAiRE9NUGx1Z2luQXJyYXkuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpA
QCAtMTE4LDcgKzExNyw3IEBAIGJvb2wgTmF2aWdhdG9yOjpjb29raWVFbmFibGVkKCkgY29uc3QK
ICAgICBpZiAobV9mcmFtZS0+cGFnZSgpICYmICFtX2ZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCkt
PmNvb2tpZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGNv
b2tpZXNFbmFibGVkKG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgIHJldHVybiBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5jb29raWVzRW5hYmxlZCgpOwogfQogCiBib29sIE5hdmlnYXRvcjo6amF2YUVu
YWJsZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgJKHJldmlz
aW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiwxMyBAQAogI2lmbmRlZiBDb29raWVKYXJfaAogI2RlZmlu
ZSBDb29raWVKYXJfaAogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSA8cHVibGlj
L1dlYkNvb2tpZUphci5oPgorI2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSAiTmV0
d29ya2luZ0NvbnRleHQuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpA
QCAtMzMsMjMgKzQwLDU0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIERv
Y3VtZW50OwotICAgIGNsYXNzIEtVUkw7CitjbGFzcyBLVVJMOworc3RydWN0IENvb2tpZTsKIAot
ICAgIHN0cnVjdCBDb29raWU7CitjbGFzcyBDb29raWVKYXIgeworcHVibGljOgorICAgIENvb2tp
ZUphcigpCisgICAgeworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICBtX3dlYkNvb2tp
ZUphciA9IDA7CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyAgICAgICAgbV9uZXR3b3JraW5n
Q29udGV4dCA9IDA7CisjZW5kaWYKKyAgICB9OworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAg
IGV4cGxpY2l0IENvb2tpZUphcihXZWJLaXQ6OldlYkNvb2tpZUphciogd2ViQ29va2llSmFyKQor
ICAgIHsKKyAgICAgICAgbV93ZWJDb29raWVKYXIgPSB3ZWJDb29raWVKYXI7CisgICAgfTsKKyNl
bmRpZgorI2lmIFBMQVRGT1JNKFFUKQorICAgIGV4cGxpY2l0IENvb2tpZUphcihOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSBj
b250ZXh0OworICAgIH07CisjZW5kaWYKIAogICAgIC8vIGNvb2tpZXMgb21pdHMgSHR0cE9ubHkg
Y29va2llcy4KLSAgICBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
KTsKLSAgICBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1l
bnQqLCBjb25zdCBLVVJMJik7Ci0gICAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiwgY29uc3Qg
S1VSTCYsIGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9j
dW1lbnQqKTsKLSAgICBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKLSAgICB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgY29va2llcyhj
b25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOworICAgIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOworICAgIHZvaWQgc2V0Q29va2ll
cyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgY29v
a2llc0VuYWJsZWQoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKKyAgICBib29sIGdldFJhd0Nv
b2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOworICAgIHZv
aWQgZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQg
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOwogICAg
IHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOwog
ICAgIHZvaWQgZGVsZXRlQWxsQ29va2llcygpOwogCi19Citwcml2YXRlOgorI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQorICAgIFdlYktpdDo6V2ViQ29va2llSmFyKiBtX3dlYkNvb2tpZUphcjsKKyNl
bmRpZgorI2lmIFBMQVRGT1JNKFFUKQorICAgIE5ldHdvcmtpbmdDb250ZXh0KiBtX25ldHdvcmtp
bmdDb250ZXh0OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZv
cm1TdXBwb3J0LmgJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxNCArNzgs
NiBAQCBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwogCiBjbGFzcyBQbGF0Zm9ybVN1cHBvcnQgewog
cHVibGljOgotICAgIC8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgc3RhdGljIHZvaWQgc2V0Q29va2llcyhj
b25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICBz
dGF0aWMgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAg
c3RhdGljIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgYm9vbCByYXdDb29raWVzKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci0gICAgc3RhdGljIHZvaWQgZGVs
ZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgY29v
a2llTmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQq
KTsKLQogICAgIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgT1MoV0lORE9XUykKICAgICBzdGF0aWMgYm9v
bCBlbnN1cmVGb250TG9hZGVkKEhGT05UKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDEzMzE2
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsOCBAQAogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVy
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjY4LDcgKzI3MCw3
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ28KIAogICAgIEtVUkwg
bW92aWVVUkwgPSBLVVJMKEtVUkwoKSwgdXJsKTsKICAgICBWZWN0b3I8Q29va2llPiBkb2N1bWVu
dENvb2tpZXM7Ci0gICAgaWYgKCFnZXRSYXdDb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCBtb3Zp
ZVVSTCwgZG9jdW1lbnRDb29raWVzKSkKKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCktPmNvb2tpZUphcigpLmdldFJhd0Nvb2tpZXMobW92aWVVUkwsIGRvY3VtZW50LT5maXJzdFBh
cnR5Rm9yQ29va2llcygpLCBkb2N1bWVudENvb2tpZXMpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBmb3IgKHNpemVfdCBuZHggPSAwOyBuZHggPCBkb2N1bWVudENvb2tpZXMuc2l6ZSgpOyBuZHgr
KykgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCShyZXZp
c2lvbiAxMzMxNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJh
eT4gZmlsdGVyQ29va2llcygKICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwogfQogCi1TdHJp
bmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29r
aWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlG
b3JDb29raWVzKi8pCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC05
NSw3ICs5NSw3IEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1UKICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6
OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VS
TCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKIApAQCAtMTE0LDcgKzExNCw3IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb24KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgc2V0Q29va2ll
cyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29r
aWVTdHIpCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKIHsK
ICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTEzMiwxNSArMTMyLDE1IEBA
IHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKIAogI2lmIFVTRShDRlVS
TFNUT1JBR0VTRVNTSU9OUykKICAgICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VS
ZWY+IGNmQ29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCi0gICAg
ICAgIHdrU2V0SFRUUENvb2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLmdldCgpLCBmaWx0ZXJl
ZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVz
KCkpOworICAgICAgICB3a1NldEhUVFBDb29raWVzRm9yVVJMKGNmQ29va2llU3RvcmFnZS5nZXQo
KSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGZpcnN0UGFydHlGb3JDb29raWVz
KTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgW1tOU0hUVFBDb29raWVTdG9yYWdlIHNoYXJl
ZEhUVFBDb29raWVTdG9yYWdlXSBzZXRDb29raWVzOmZpbHRlcmVkQ29va2llcy5nZXQoKSBmb3JV
Ukw6Y29va2llVVJMIG1haW5Eb2N1bWVudFVSTDpkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKV07CisgICAgICAgIFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3Rv
cmFnZV0gc2V0Q29va2llczpmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgZm9yVVJMOmNvb2tpZVVSTCBt
YWluRG9jdW1lbnRVUkw6Zmlyc3RQYXJ0eUZvckNvb2tpZXNdOwogCiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCop
Citib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29u
c3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIApAQCAtMTU4LDcgKzE1OCw3IEBAIGJvb2wgY29va2llc0VuYWJsZWQo
Y29uc3QgRG9jdW1lbnQqKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBnZXRSYXdDb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3
Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3
Q29va2llcykKIHsKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwpAQCAtMTkxLDcgKzE5MSw3IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhjb25z
dCBEb2N1bWVudCosIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29r
aWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2ll
TmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwogCkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQq
LCBjb25zdAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tp
ZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMp
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIApAQCAtMjM4LDcgKzIz
OCw3IEBAIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHIKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogewogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKICAgICAKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIGRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
IH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxD
b29raWVzKCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUph
ckNGTmV0LmNwcAkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDYgQEAKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2VDRk5l
dC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKQEAgLTk1LDcgKzk0
LDcgQEAgc3RhdGljIFJldGFpblB0cjxDRkFycmF5UmVmPiBmaWx0ZXJDb29raQogICAgIHJldHVy
biBmaWx0ZXJlZENvb2tpZXM7CiB9CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFy
OjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNv
b2tpZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2
MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugc3RvcmVzIGFuIGVtcHR5IGNvb2tpZSwgd2hpY2gg
d291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQpA
QCAtMTA2LDcgKzEwNSw3IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnMKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxDRihBZG9w
dENGLCB1cmwuY3JlYXRlQ0ZVUkwoKSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBh
cnR5Rm9yQ29va2llc0NGKEFkb3B0Q0YsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygp
LmNyZWF0ZUNGVVJMKCkpOworICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNv
b2tpZXNDRihBZG9wdENGLCBmaXJzdFBhcnR5Rm9yQ29va2llcy5jcmVhdGVDRlVSTCgpKTsKIAog
ICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJk
YXI6Ly80NDA5MDM0PgogICAgIC8vIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9l
c24ndCBwYXJzZSBjb29raWVzIHdpdGhvdXQgYSB2YWx1ZQpAQCAtMTIzLDcgKzEyMiw3IEBAIHZv
aWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBDRkhUVFBDb29raWVT
dG9yYWdlU2V0Q29va2llcyhjb29raWVTdG9yYWdlLmdldCgpLCBmaWx0ZXJDb29raWVzKGNvb2tp
ZXNDRi5nZXQoKSkuZ2V0KCksIHVybENGLmdldCgpLCBmaXJzdFBhcnR5Rm9yQ29va2llc0NGLmdl
dCgpKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywg
Y29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBD
b29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpAQCAtMTM3LDcgKzEzNiw3
IEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW4KICAgICByZXR1cm4g
KENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNGLmdldCgpLCBzX2Nvb2tp
ZUNGKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERv
Y3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6
OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VS
TCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29r
aWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2Uo
KTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0xNTEsNyArMTUwLDcgQEAgU3RyaW5nIGNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbgogICAgIHJldHVybiAoQ0ZTdHJpbmdSZWYp
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVhZGVyQ0YuZ2V0KCksIHNfY29va2llQ0YpOwogfQogCi1i
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIENv
b2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYg
LypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2Nl
cHRQb2xpY3kgcG9saWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9t
TWFpbkRvY3VtZW50RG9tYWluOwogICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCkBAIC0x
NTksNyArMTU4LDcgQEAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkbwog
ICAgIHJldHVybiBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlG
cm9tTWFpbkRvY3VtZW50RG9tYWluIHx8IHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNj
ZXB0UG9saWN5QWx3YXlzOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29r
aWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0
UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIHJh
d0Nvb2tpZXMuY2xlYXIoKTsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4g
Y29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CkBAIC0xOTMsNyAr
MTkyLDcgQEAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29ucwogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBD
b29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpAQCAtMjE0LDcgKzIxMyw3
IEBAIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAgICB9CiB9CiAK
LXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMp
Cit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+
JiBob3N0bmFtZXMpCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNv
b2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29v
a2llU3RvcmFnZSkKQEAgLTIzMiw3ICsyMzEsNyBAQCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKEhhc2hTZXQ8U3RyCiAgICAgfQogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogewogICAgIFJldGFpblB0cjxDRkhU
VFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0
b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0yNTEsNyArMjUwLDcgQEAgdm9p
ZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaQogICAgIH0KIH0KIAotdm9pZCBk
ZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsK
ICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1
cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJv
bWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
aHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw1MiArMzIsNzQgQEAKICNpbmNsdWRlICJDb29raWVKYXIu
aCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSA8cHVibGljL1dlYkNvb2tpZS5oPgorI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5n
Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlVSTC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJWZWN0
b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENv
b2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFy
dHlGb3JDb29raWVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIFBsYXRmb3JtU3VwcG9y
dDo6c2V0Q29va2llcyhkb2N1bWVudCwgdXJsLCB2YWx1ZSk7CisgICAgaWYgKG1fd2ViQ29va2ll
SmFyKQorICAgICAgICBtX3dlYkNvb2tpZUphci0+c2V0Q29va2llKHVybCwgZmlyc3RQYXJ0eUZv
ckNvb2tpZXMsIHZhbHVlKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0
dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llcyhkb2N1bWVudCwgdXJsKTsKKyAgICBpZiAoIW1f
d2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fd2Vi
Q29va2llSmFyLT5jb29raWVzKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1TdHJp
bmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29r
aWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgIGlmICghbV93ZWJDb29raWVKYXIpCisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV93ZWJDb29raWVKYXItPmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1i
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgQ29va2ll
SmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFy
dHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXNFbmFi
bGVkKGRvY3VtZW50KTsKKyAgICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVzRW5hYmxlZCh1cmwsIGZp
cnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2ll
cykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
S1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQog
ewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwg
cmF3Q29va2llcyk7CisgICAgcmF3Q29va2llcy5jbGVhcigpOworICAgIFdlYktpdDo6V2ViVmVj
dG9yPFdlYktpdDo6V2ViQ29va2llPiB3ZWJDb29raWVzOworCisgICAgaWYgKG1fd2ViQ29va2ll
SmFyKQorICAgICAgICBtX3dlYkNvb2tpZUphci0+cmF3Q29va2llcyh1cmwsIGZpcnN0UGFydHlG
b3JDb29raWVzLCB3ZWJDb29raWVzKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3
ZWJDb29raWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViQ29va2ll
JiB3ZWJDb29raWUgPSB3ZWJDb29raWVzW2ldOworICAgICAgICBDb29raWUgY29va2llKHdlYkNv
b2tpZS5uYW1lLCB3ZWJDb29raWUudmFsdWUsIHdlYkNvb2tpZS5kb21haW4sIHdlYkNvb2tpZS5w
YXRoLCB3ZWJDb29raWUuZXhwaXJlcywgd2ViQ29va2llLmh0dHBPbmx5LCB3ZWJDb29raWUuc2Vj
dXJlLCB3ZWJDb29raWUuc2Vzc2lvbik7CisgICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNvb2tp
ZSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29r
aWVOYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29va2llTmFtZSkKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpk
ZWxldGVDb29raWUoZG9jdW1lbnQsIHVybCwgY29va2llTmFtZSk7CisgICAgaWYgKG1fd2ViQ29v
a2llSmFyKQorICAgICAgICBtX3dlYkNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2ll
TmFtZSk7CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+
JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFz
aFNldDxTdHJpbmc+JiAvKmhvc3RuYW1lcyovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGlt
cGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmlu
ZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNv
bnN0IFN0cmluZyYgLypob3N0bmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxl
bWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVs
ZXRlQWxsQ29va2llcygpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q29va2llSmFyQ3VybC5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTgsNyArMTgsNiBAQAogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2ll
LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0yNiwz
NyArMjUsMzcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gY29va2llSmFyOworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHNf
Y29va2llSmFyOwogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29raWVKYXI6OnNldENv
b2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVz
Ki8sIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgY29va2llSmFyLnNldCh1cmwuc3RyaW5n
KCksIHZhbHVlKTsKKyAgICBzX2Nvb2tpZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7CiB9
CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtV
UkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgcmV0dXJuIGNvb2tpZUph
ci5nZXQodXJsLnN0cmluZygpKTsKKyAgICByZXR1cm4gc19jb29raWVKYXIuZ2V0KHVybC5zdHJp
bmcoKSk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBE
b2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFy
Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtV
UkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICAvLyBGSVhNRTogaW5jbHVkZSBI
dHRwT25seSBjb29raWUuCi0gICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsK
KyAgICByZXR1cm4gc19jb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLWJvb2wgY29v
a2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgQ29va2llSmFy
Ojpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0
UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0UmF3
Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3
Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIC8qdXJs
Ki8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4m
IHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICBy
YXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVu
IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29u
c3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNv
bnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29raWVOYW1lKi8pCiB7CiAgICAg
Ly8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KQEAgLTY4LDE3ICs2NywxNyBAQCB2b2lk
IHNldENvb2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdFbmFiCiB9CiAjZW5kaWYKIAotdm9pZCBn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQg
Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9z
dG5hbWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9p
ZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQg
Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3Ru
YW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBk
ZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsK
ICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCShyZXZp
c2lvbiAxMzMxNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29r
aWVKYXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRl
ICJDb29raWUuaCIKICNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRl
IDxXaW5pbmV0Lmg+CkBAIC0zNiwxNSArMzUsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQorCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICAvLyBGSVhNRTogRGVhbCB3aXRoIGRvY3VtZW50LT5maXJz
dFBhcnR5Rm9yQ29va2llcygpLgorICAgIC8vIEZJWE1FOiBEZWFsIHdpdGggZmlyc3RQYXJ0eUZv
ckNvb2tpZXMuCiAgICAgU3RyaW5nIHN0ciA9IHVybC5zdHJpbmcoKTsKICAgICBTdHJpbmcgdmFs
ID0gdmFsdWU7CiAgICAgSW50ZXJuZXRTZXRDb29raWUoc3RyLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCksIDAsIHZhbC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKIH0K
IAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VS
TCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBTdHJpbmcgc3RyID0gdXJs
LnN0cmluZygpOwogCkBAIC02Myw0MCArNjMsNDAgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9j
dW1lbnQqIC8qZG9jdW1lbgogICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7CiB9CiAK
LVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZv
ckNvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llCi0gICAg
cmV0dXJuIGNvb2tpZXMoZG9jdW1lbnQsIHVybCk7CisgICAgcmV0dXJuIGNvb2tpZXModXJsLCBm
aXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9j
dW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25z
dCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2ll
SmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmly
c3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAg
Ly8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAg
ICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZv
aWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNv
bnN0IFN0cmluZyYgLypjb29raWVOYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1w
bGVtZW50ZWQKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmlu
Zz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhI
YXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1w
bGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpk
ZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAkocmV2
aXNpb24gMTMzMTYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw2IEBACiAKICNpbmNsdWRlICJDb29raWUu
aCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJUaGlyZFBhcnR5Q29v
a2llc1F0LmgiCkBAIC00OSwzMSArNDYsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0
aWMgU2hhcmVkQ29va2llSmFyUXQqIHNfc2hhcmVkQ29va2llSmFyUXQgPSAwOwogCi1zdGF0aWMg
TmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250ZXh0KGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
S1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAg
aWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
RnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKLSAgICBpZiAoIWxvYWRlcikK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGxvYWRlci0+bmV0d29ya2luZ0NvbnRleHQo
KTsKLX0KLQotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKKyAg
ICBpZiAoIW1fbmV0d29ya2luZ0NvbnRleHQpCiAgICAgICAgIHJldHVybjsKLSAgICBRTmV0d29y
a0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2ll
SmFyKCk7CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IG1fbmV0d29ya2luZ0NvbnRleHQt
Pm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwogICAgIGlmICghamFyKQogICAg
ICAgICByZXR1cm47CiAKICAgICBRVXJsIHVybEZvckNvb2tpZXModXJsKTsKLSAgICBRVXJsIGZp
cnN0UGFydHlVcmwoZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIGlmICgh
dGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMoY29udGV4dCwgdXJsRm9yQ29va2llcywgZmly
c3RQYXJ0eVVybCkpCisgICAgUVVybCBmaXJzdFBhcnR5VXJsKGZpcnN0UGFydHlGb3JDb29raWVz
KTsKKyAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRzKG1fbmV0d29ya2luZ0Nv
bnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IFFOZXR3b3JrQ29va2llOjpwYXJz
ZUNvb2tpZXMoUVN0cmluZyh2YWx1ZSkudG9MYXRpbjEoKSk7CkBAIC04OCwxNiArNzEsMTUgQEAg
dm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIGphci0+c2V0Q29v
a2llc0Zyb21VcmwoY29va2llcywgdXJsRm9yQ29va2llcyk7CiB9CiAKLVN0cmluZyBjb29raWVz
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tp
ZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JD
b29raWVzKQogewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0Nv
bnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKKyAgICBpZiAoIW1fbmV0d29ya2lu
Z0NvbnRleHQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBRTmV0d29ya0Nvb2tpZUph
ciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7Cisg
ICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IG1fbmV0d29ya2luZ0NvbnRleHQtPm5ldHdvcmtB
Y2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwogCiAgICAgUVVybCB1cmxGb3JDb29raWVzKHVy
bCk7Ci0gICAgUVVybCBmaXJzdFBhcnR5VXJsKGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2ll
cygpKTsKLSAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRzKGNvbnRleHQsIHVy
bEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQorICAgIFFVcmwgZmlyc3RQYXJ0eVVybChmaXJz
dFBhcnR5Rm9yQ29va2llcyk7CisgICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWl0
cyhtX25ldHdvcmtpbmdDb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tp
ZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwodXJsRm9yQ29va2llcyk7CkBAIC0xMTQsMTIgKzk2LDEx
IEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwKICAgICByZXR1cm4g
cmVzdWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1TdHJpbmcgY29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBLVVJMICZ1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMq
LykKIHsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0
KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250
ZXh0KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGph
ciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFO
ZXR3b3JrQ29va2llSmFyKiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNz
TWFuYWdlcigpLT5jb29raWVKYXIoKTsKIAogICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29r
aWVzID0gamFyLT5jb29raWVzRm9yVXJsKFFVcmwodXJsKSk7CiAgICAgaWYgKGNvb2tpZXMuaXNF
bXB0eSgpKQpAQCAtMTMyLDQxICsxMTMsNDAgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGNvbgogICAgIHJldHVybiByZXN1bHRDb29raWVzLmpvaW4oUUxhdGluMVN0cmlu
ZygiOyAiKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50KQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8s
IGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKLSAgICBOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAo
IWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tp
ZUphcigpOworICAgIHJldHVybiBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFu
YWdlcigpLT5jb29raWVKYXIoKTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29r
aWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypm
aXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsK
ICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQKIH0KIAot
dm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgLyp1cmwqLywg
Y29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIFNoYXJlZENvb2tpZUphclF0KiBq
YXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGphcikKICAgICAgICAg
amFyLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMpOwogfQogCi12b2lkIGRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVK
YXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogewog
ICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7
CiAgICAgaWYgKGphcikKICAgICAgICAgamFyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWUoaG9z
dG5hbWUpOwogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRl
bGV0ZUFsbENvb2tpZXMoKQogewogICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRD
b29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGphcikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1
Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5Miw3ICsxMzkyLDcg
QEAgTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTChOUE5VUgogICAgICAgICBpZiAo
dS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVu
dEZyYW1lKCksIG1fZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9IGNvb2tpZXMoZnJhbWUtPmRvY3VtZW50
KCksIHUpLnV0ZjgoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9
IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZXModSwgZnJhbWUt
PmRvY3VtZW50KCktPmZpcnN0UGFydHlGb3JDb29raWVzKCkpLnV0ZjgoKTsKICAgICAgICAgICAg
ICAgICBpZiAoIWNvb2tpZVN0ci5pc051bGwoKSkgewogICAgICAgICAgICAgICAgICAgICBjb25z
dCBpbnQgc2l6ZSA9IGNvb2tpZVN0ci5sZW5ndGgoKTsKICAgICAgICAgICAgICAgICAgICAgKnZh
bHVlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKQEAgLTE0NTQs
NyArMTQ1NCw3IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoTlBOVVIKICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyBjb29raWVTdHIgPSBTdHJpbmc6OmZyb21VVEY4KHZhbHVl
LCBsZW4pOwogICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50RnJhbWUo
KSwgbV9lbGVtZW50KTsKICAgICAgICAgICAgIGlmIChmcmFtZSAmJiAhY29va2llU3RyLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICBzZXRDb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCB1LCBj
b29raWVTdHIpOworICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNv
b2tpZUphcigpLnNldENvb2tpZXModSwgZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0UGFydHlGb3JD
b29raWVzKCksIGNvb2tpZVN0cik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmVzdWx0
ID0gTlBFUlJfSU5WQUxJRF9VUkw7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2
aXNpb24gMTMzMTY3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMTEtMDEgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIGNvb2tpZS1yZWxhdGVkIGZ1
bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ug
c3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNj
cmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5h
Z2VyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29r
aWVNYW5hZ2VyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OmNvb2tpZXNG
b3JVUkwpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpzZXRDb29raWVzRm9yVVJMKToK
KwogMjAxMi0xMS0wMSAgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgW0VGTF0gQ29ycmVjdCBvdXIgdXNlIG9mIHRoZSBjb29yZGluYXRl
ZCBncmFwaGljcwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Db29raWVzL1dlYkNv
b2tpZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Q29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6Z2V0SG9zdG5h
bWVzV2l0aEMKIAogICAgIEhhc2hTZXQ8U3RyaW5nPiBob3N0bmFtZXM7CiAKLSAgICBXZWJDb3Jl
OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMpOworICAgIFdlYkNvcmU6OkNvb2tp
ZUphcigpLmdldEhvc3RuYW1lc1dpdGhDb29raWVzKGhvc3RuYW1lcyk7CiAKICAgICBWZWN0b3I8
U3RyaW5nPiBob3N0bmFtZUxpc3Q7CiAgICAgY29weVRvVmVjdG9yKGhvc3RuYW1lcywgaG9zdG5h
bWVMaXN0KTsKQEAgLTY5LDE0ICs2OSwxNCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmRlbGV0
ZUNvb2tpZXNGb3JICiB7CiAgICAgV2ViUHJvY2Vzczo6TG9jYWxUZXJtaW5hdGlvbkRpc2FibGVy
IHRlcm1pbmF0aW9uRGlzYWJsZXIoV2ViUHJvY2Vzczo6c2hhcmVkKCkpOwogCi0gICAgV2ViQ29y
ZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKKyAgICBXZWJDb3JlOjpDb29r
aWVKYXIoKS5kZWxldGVDb29raWVzRm9ySG9zdG5hbWUoaG9zdG5hbWUpOwogfQogCiB2b2lkIFdl
YkNvb2tpZU1hbmFnZXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIFdlYlByb2Nlc3M6Okxv
Y2FsVGVybWluYXRpb25EaXNhYmxlciB0ZXJtaW5hdGlvbkRpc2FibGVyKFdlYlByb2Nlc3M6OnNo
YXJlZCgpKTsKIAotICAgIFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMoKTsKKyAgICBXZWJDb3Jl
OjpDb29raWVKYXIoKS5kZWxldGVBbGxDb29raWVzKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFu
YWdlcjo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDEzMzE2
MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMwOSwxMiArMTMwOSwxOSBAQCBTdHJpbmcgUGx1Z2luVmlldzo6
cHJveGllc0ZvclVSTChjb25zdCBTCiAKIFN0cmluZyBQbHVnaW5WaWV3Ojpjb29raWVzRm9yVVJM
KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewotICAgIHJldHVybiBjb29raWVzKG1fcGx1Z2lu
RWxlbWVudC0+ZG9jdW1lbnQoKSwgS1VSTChLVVJMKCksIHVybFN0cmluZykpOworICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tp
ZUphcigpLmNvb2tpZXMoS1VSTChLVVJMKCksIHVybFN0cmluZyksIGRvY3VtZW50LT5maXJzdFBh
cnR5Rm9yQ29va2llcygpKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpzZXRDb29raWVzRm9yVVJM
KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKIHsK
LSAgICBzZXRDb29raWVzKG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKSwgS1VSTChLVVJMKCks
IHVybFN0cmluZyksIGNvb2tpZVN0cmluZyk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9w
bHVnaW5FbGVtZW50LT5kb2N1bWVudCgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5m
cmFtZSgpOworICAgIGlmIChmcmFtZSkKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQo
KS0+Y29va2llSmFyKCkuc2V0Q29va2llcyhLVVJMKEtVUkwoKSwgdXJsU3RyaW5nKSwgZG9jdW1l
bnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIGNvb2tpZVN0cmluZyk7CiB9CiAKIGJvb2wgUGx1
Z2luVmlldzo6Z2V0QXV0aGVudGljYXRpb25JbmZvKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJv
dGVjdGlvblNwYWNlLCBTdHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3JkKQpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzE2NykKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTItMTEtMDEgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFtDaHJvbWl1bV0gUmVtb3ZlIGNvb2tpZS1yZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3Jt
U3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTkzNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0
aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMh
KS4KKworICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudEltcGw6OmNvb2tpZUphcik6CisgICAgICAgICogc3Jj
L0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oOgorICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnRJbXBs
KToKKyAgICAgICAgKiBzcmMvUGxhdGZvcm1TdXBwb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorCiAyMDEyLTExLTAxICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW2Nocm9taXVtXSBBdm9pZCBhdHRlbXB0aW5nIHRvIGRlZmVyIGNvbW1pdHMgd2hl
biB0aGV5IGFyZSBhbHJlYWR5IGRlZmVycmVkCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAJKHJldmlzaW9uIDEzMzE2
MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NTEsNSArMTY1MSwxNCBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SW1wbDo6ZGlzcGF0Y2hXaWxsCiB9CiAjZW5kaWYKIAorV2ViQ29yZTo6Q29va2llSmFy
IEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y29va2llSmFyKCkKK3sKKyAgICBpZiAoIW1fd2ViRnJh
bWUgfHwgIW1fd2ViRnJhbWUtPmNsaWVudCgpKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29v
a2llSmFyKDApOworICAgIFdlYkNvb2tpZUphciogd2ViQ29va2llSmFyID0gbV93ZWJGcmFtZS0+
Y2xpZW50KCktPmNvb2tpZUphcihtX3dlYkZyYW1lKTsKKyAgICBpZiAoIXdlYkNvb2tpZUphcikK
KyAgICAgICAgd2ViQ29va2llSmFyID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jb29r
aWVKYXIoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKHdlYkNvb2tpZUphcik7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgJKHJldmlzaW9uIDEzMzE2MCkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaFdpbGxTdGFydFVzaW5nUGVlckNvbm5lY3Rpb25IYW5kbGVyKFdlYkNvcmU6OlJUQ1Bl
ZXJDb25uZWN0aW9uSGFuZGxlciopIE9WRVJSSURFOwogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIFdl
YkNvcmU6OkNvb2tpZUphciBjb29raWVKYXIoKSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICB2
b2lkIG1ha2VEb2N1bWVudFZpZXcoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvUGxhdGZvcm1TdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMzMxNjApCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAsODYgKzEwMCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotc3RhdGljIFdlYkNvb2tpZUphciogZ2V0Q29va2llSmFyKGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCkKLXsKLSAgICBXZWJGcmFtZUltcGwqIGZyYW1lSW1wbCA9IFdlYkZyYW1l
SW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICBpZiAoIWZyYW1lSW1wbCB8
fCAhZnJhbWVJbXBsLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgV2ViQ29va2ll
SmFyKiBjb29raWVKYXIgPSBmcmFtZUltcGwtPmNsaWVudCgpLT5jb29raWVKYXIoZnJhbWVJbXBs
KTsKLSAgICBpZiAoIWNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyID0gV2ViS2l0OjpQbGF0
Zm9ybTo6Y3VycmVudCgpLT5jb29raWVKYXIoKTsKLSAgICByZXR1cm4gY29va2llSmFyOwotfQot
Ci0vLyBDb29raWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29r
aWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFdlYkNv
b2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29v
a2llSmFyKQotICAgICAgICBjb29raWVKYXItPnNldENvb2tpZSh1cmwsIGRvY3VtZW50LT5maXJz
dFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6
OmNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCi17Ci0g
ICAgU3RyaW5nIHJlc3VsdDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tp
ZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29v
a2llSmFyLT5jb29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYg
dXJsKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIg
PSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJl
c3VsdCA9IGNvb2tpZUphci0+Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
Ym9vbCBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIHJh
d0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBXZWJWZWN0b3I8V2ViQ29va2llPiB3ZWJDb29raWVzOwot
Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwot
ICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+cmF3Q29va2llcyh1cmwsIGRv
Y3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB3ZWJDb29raWVzKTsKLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNv
bnN0IFdlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29va2llc1tpXTsKLSAgICAgICAgQ29va2ll
IGNvb2tpZSh3ZWJDb29raWUubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUu
dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmRvbWFpbiwKLSAgICAgICAg
ICAgICAgICAgICAgICB3ZWJDb29raWUucGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJD
b29raWUuZXhwaXJlcywKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuaHR0cE9ubHks
Ci0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlY3VyZSwKLSAgICAgICAgICAgICAg
ICAgICAgICB3ZWJDb29raWUuc2Vzc2lvbik7Ci0gICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNv
b2tpZSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtU3VwcG9y
dDo6ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCi17Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVK
YXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAg
IGNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7Ci19Ci0KLWJvb2wgUGxh
dGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17
Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9
IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVz
dWx0ID0gY29va2llSmFyLT5jb29raWVzRW5hYmxlZChkb2N1bWVudC0+Y29va2llVVJMKCksIGRv
Y3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
CiAvLyBGb250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICNpZiBPUyhXSU5ET1dTKQpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkocmV2aXNpb24gMTMzMTY3KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTEtMDEgIE1hcmsgUGlsZ3Jp
bSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIGNv
b2tpZS1yZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9u
IG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBl
ci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICAqIFBsdWdp
bnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbToKKyAgICAgICAgKFdlYktp
dDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRDb29raWVzKToKKyAgICAgICAgKFdl
YktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRDb29raWVzKToKKwogMjAxMi0x
MC0zMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEZp
eCBidWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSW5zdGFuY2VQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDEz
MzE2MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2lu
SW5zdGFuY2VQcm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxv
YWRlckNsaWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUuaD4KICNpbXBvcnQgPFdl
YkNvcmUvS1VSTC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Qcm94eVNlcnZlci5oPgpAQCAtMTUxNSw3
ICsxNTE2LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldENvbwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW21f
cGx1Z2luVmlldyB3ZWJGcmFtZV0pKSB7Ci0gICAgICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBj
b29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCB1cmwpOyAKKyAgICAgICAgU3RyaW5nIGNvb2tpZVN0
cmluZyA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZXModXJs
LCBmcmFtZS0+ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7IAogICAgICAgICBX
VEY6OkNTdHJpbmcgY29va2llU3RyaW5nVVRGOCA9IGNvb2tpZVN0cmluZy51dGY4KCk7CiAgICAg
ICAgIGlmIChjb29raWVTdHJpbmdVVEY4LmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTU0Myw3ICsxNTQ0LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJv
eHk6OnNldENvbwogICAgICAgICBpZiAoIWNvb2tpZVN0cmluZykKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIFdlYkNvcmU6OnNldENvb2tpZXMoZnJhbWUtPmRv
Y3VtZW50KCksIHVybCwgY29va2llU3RyaW5nKTsKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5j
bGllbnQoKS0+Y29va2llSmFyKCkuc2V0Q29va2llcyh1cmwsIGZyYW1lLT5kb2N1bWVudCgpLT5m
aXJzdFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVTdHJpbmcpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzMxNjcpCisrKyBTb3Vy
Y2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisy
MDEyLTExLTAxICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbQ2hyb21pdW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9y
bVN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJh
dGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNvb2tpZUphcik6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFF0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50UXQp
OgorCiAyMDEyLTExLTAxICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzMxNDMuCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRRdC5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzYsNiAr
MTY3NiwxMyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmVtaXRMb2FkRmluaXNoCiAgICAg
ZW1pdCBtX3dlYkZyYW1lLT5sb2FkRmluaXNoZWQob2spOwogfQogCitXZWJDb3JlOjpDb29raWVK
YXIgRnJhbWVMb2FkZXJDbGllbnRRdDo6Y29va2llSmFyKCkKK3sKKyAgICBpZiAoIW1fZnJhbWUg
fHwgIW1fZnJhbWUtPmxvYWRlcigpKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFy
KDApOworICAgIHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIobV9mcmFtZS0+bG9hZGVyKCktPm5l
dHdvcmtpbmdDb250ZXh0KCkpOworfQorCiB9CiAKICNpbmNsdWRlICJtb2NfRnJhbWVMb2FkZXJD
bGllbnRRdC5jcHAiCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRRdF9oCiAK
IAorI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNTMsNiAr
NTQsNyBAQCBjbGFzcyBRV2ViRnJhbWU7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworY2xhc3MgQ29va2llSmFyOwogY2xhc3MgRG9jdW1lbnRM
b2FkZXI7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRm9ybVN0YXRlOwpAQCAtMjI3LDYgKzIyOSw4
IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IEtVUkwmIGxhc3RSZXF1ZXN0ZWRVcmwoKSBjb25zdCB7
IHJldHVybiBtX2xhc3RSZXF1ZXN0ZWRVcmw7IH0KIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29v
a2llSmFyIGNvb2tpZUphcigpIE9WRVJSSURFOworCiAgICAgc3RhdGljIGJvb2wgZHVtcEZyYW1l
TG9hZGVyQ2FsbGJhY2tzOwogICAgIHN0YXRpYyBib29sIGR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2Fs
bGJhY2s7CiAgICAgc3RhdGljIGJvb2wgZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRlckNhbGxi
YWNrczsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171875</attachid>
            <date>2012-11-01 09:43:52 -0700</date>
            <delta_ts>2012-11-01 12:31:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99340-20121101124206.patch</filename>
            <type>text/plain</type>
            <size>57966</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzE4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxMi0xMS0wMSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xp
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAg
ICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29v
a2llRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OkNvb2tpZUphcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBw
b3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nv
b2tpZUphci5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0Vu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tp
ZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9Db29raWVKYXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2ll
SmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFs
bENvb2tpZXMpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6CisKIDIwMTItMTEtMDEgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBCdWlsZCBmaXguCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDYgQEAgX19aTjdXZWJD
b3JlMTBTY3JvbGxWaWV3MjR3aW5kb3dSZXNpemVyUgogX19aTjdXZWJDb3JlMTBTY3JvbGxWaWV3
OGFkZENoaWxkRU4zV1RGMTBQYXNzUmVmUHRySU5TXzZXaWRnZXRFRUUKIF9fWk43V2ViQ29yZTEw
U2hhZG93Um9vdDZjcmVhdGVFUE5TXzdFbGVtZW50RVJpCiBfX1pON1dlYkNvcmUxMGRlbGV0ZUZp
bGVFUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxMHNldENvb2tpZXNFUE5TXzhEb2N1bWVu
dEVSS05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTB0b0RvY3VtZW50RU4z
SlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxMUJpdG1hcEltYWdlQzFFUDdDR0ltYWdlUE5TXzEz
SW1hZ2VPYnNlcnZlckUKIF9fWk43V2ViQ29yZTExQml0bWFwSW1hZ2VDMUVQTlNfMTNJbWFnZU9i
c2VydmVyRQpAQCAtNDY0LDcgKzQ2Myw2IEBAIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlv
bkMxRVJLTlNfMTUKIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVJLTlNfMTVWaXNp
YmxlUG9zaXRpb25FYgogX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNE5vZGVF
CiBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU181UmFuZ2VFCi1fX1pON1dlYkNv
cmUxNmRlbGV0ZUFsbENvb2tpZXNFdgogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJL
TlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEUKIF9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVj
dEVSS05TXzlGbG9hdFJlY3RFCiBfX1pON1dlYkNvcmUxNmlzRW5kT2ZQYXJhZ3JhcGhFUktOU18x
NVZpc2libGVQb3NpdGlvbkVOU18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKQEAgLTYy
NCw3ICs2MjIsNiBAQCBfX1pON1dlYkNvcmUyM2NyZWF0ZUZyYWdtZW50RnJvbU5vZGVzRVBOCiBf
X1pON1dlYkNvcmUyM2RhdGFGb3JVUkxDb21wb25lbnRUeXBlRVA1TlNVUkxsCiBfX1pON1dlYkNv
cmUyM2RlY29kZUhvc3ROYW1lV2l0aFJhbmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UKIF9fWk43V2Vi
Q29yZTIzZW5jb2RlSG9zdE5hbWVXaXRoUmFuZ2VFUDhOU1N0cmluZzhfTlNSYW5nZQotX19aTjdX
ZWJDb3JlMjNnZXRIb3N0bmFtZXNXaXRoQ29va2llc0VSTjNXVEY3SGFzaFNldElOUzBfNlN0cmlu
Z0VOUzBfMTBTdHJpbmdIYXNoRU5TMF8xMEhhc2hUcmFpdHNJUzJfRUVFRQogX19aTjdXZWJDb3Jl
MjRCaW5hcnlQcm9wZXJ0eUxpc3RXcml0ZXIxN3dyaXRlUHJvcGVydHlMaXN0RXYKIF9fWk43V2Vi
Q29yZTI0Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlMTFzZXRSZXNvdXJjZUVQTlNfMTRDYWNoZWRS
ZXNvdXJjZUUKIF9fWk43V2ViQ29yZTI0Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyMTBmaXJzdENo
aWxkRXYKQEAgLTY0Myw3ICs2NDAsNiBAQCBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25P
YnNlcnZlckMyCiBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckQyRXYKIF9f
Wk43V2ViQ29yZTI0Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwRVBOU184RG9jdW1lbnRFUktOM1dU
RjZTdHJpbmdFUzVfTlNfMjdGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb25FCiBfX1pON1dlYkNv
cmUyNGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0VSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29y
ZTI0ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
MjRmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25FUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUy
NG5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZEUKIF9fWk43V2ViQ29yZTI1SGlzdG9yeVByb3BlcnR5
TGlzdFdyaXRlcjExcmVsZWFzZURhdGFFdgpAQCAtODc4LDcgKzg3NCw2IEBAIF9fWk43V2ViQ29y
ZTdSdW5Mb29wOVRpbWVyQmFzZUQyRXYKIF9fWk43V2ViQ29yZTdUZXh0UnVuMTlhbGxvd3NSb3Vu
ZGluZ0hhY2tzRXYKIF9fWk43V2ViQ29yZTdUZXh0UnVuMjFzX2FsbG93c1JvdW5kaW5nSGFja3NF
CiBfX1pON1dlYkNvcmU3VGV4dFJ1bjIyc2V0QWxsb3dzUm91bmRpbmdIYWNrc0ViCi1fX1pON1dl
YkNvcmU3Y29va2llc0VQS05TXzhEb2N1bWVudEVSS05TXzRLVVJMRQogX19aTjdXZWJDb3JlN2pz
QXJyYXlFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFz
c1JlZlB0cklOU18xM0RPTVN0cmluZ0xpc3RFRUUKIF9fWk43V2ViQ29yZTdtYWtlUkdCRWlpaQog
X19aTjdXZWJDb3JlN3JlcGxhY2VFUk4zV1RGNlN0cmluZ0VSS05TXzE3UmVndWxhckV4cHJlc3Np
b25FUktTMV8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2Nr
ZXRDaGFubmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0J1
ZmZlcigpCiAgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyKQogICAgICAgICAgICAgICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3Bv
bnNlKG1fZG9jdW1lbnQsIG1faWRlbnRpZmllciwgbV9oYW5kc2hha2UtPnNlcnZlckhhbmRzaGFr
ZVJlc3BvbnNlKCkpOwogICAgICAgICAgICAgaWYgKCFtX2hhbmRzaGFrZS0+c2VydmVyU2V0Q29v
a2llKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvb2tpZXNFbmFibGVkKG1f
ZG9jdW1lbnQpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmNvb2tpZXNFbmFi
bGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsgLy8gRXhjZXB0
aW9uIChmb3Igc2FuZGJveGVkIGRvY3VtZW50cykgaWdub3JlZC4KICAgICAgICAgICAgICAgICAg
ICAgbV9kb2N1bWVudC0+c2V0Q29va2llKG1faGFuZHNoYWtlLT5zZXJ2ZXJTZXRDb29raWUoKSwg
ZWMpOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAx
MzMxNjApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOSBAQAogI2luY2x1ZGUgIkNv
b2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZy
YW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUg
IkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjAwLDcgKzIwMywxMCBAQCBD
U3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoCiAgICAgS1VSTCB1cmwgPSBo
dHRwVVJMRm9yQXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYgKG1fY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0
PERvY3VtZW50Kj4obV9jb250ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAgICBTdHJpbmcgY29v
a2llOworICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAgICAg
aWYgKGZyYW1lKQorICAgICAgICAgICAgY29va2llID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQo
KS0+Y29va2llSmFyKCkuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVu
dC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiAgICAgICAgIGlmICghY29va2llLmlzRW1wdHko
KSkKICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoIkNvb2tpZTogIiArIGNvb2tpZSk7CiAgICAg
ICAgIC8vIFNldCAiQ29va2llMjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBleGlzdHMgZm9yIHVy
bD8KQEAgLTI0OSw3ICsyNTUsMTIgQEAgUGFzc1JlZlB0cjxXZWJTb2NrZXRIYW5kc2hha2VSZXF1
ZXN0PiBXZQogICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2ll
cygpOwogICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4dCk7Ci0gICAgICAg
IFN0cmluZyBjb29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwg
dXJsKTsKKyAgICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAgICAgQ29va2ll
SmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwor
ICAgICAgICAgICAgY29va2llID0gY29va2llSmFyLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgICAgICB9CiAg
ICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlcXVlc3QtPmFkZEhl
YWRlckZpZWxkKCJDb29raWUiLCBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxj
b29raWU+IiBpZiBjb29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MTksNyArMzgxOSw5IEBAIFN0cmluZyBEb2N1bWVu
dDo6Y29va2llKEV4Y2VwdGlvbkNvZGUmIGUKICAgICBpZiAoY29va2llVVJMLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGNvb2tpZXModGhpcywgY29v
a2llVVJMKTsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVz
KGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9CiAKIHZvaWQgRG9j
dW1lbnQ6OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykK
QEAgLTM4NDAsNyArMzg0MiwyMyBAQCB2b2lkIERvY3VtZW50OjpzZXRDb29raWUoY29uc3QgU3Ry
aW5nJiB2CiAgICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHNldENvb2tpZXModGhpcywgY29va2llVVJMLCB2YWx1ZSk7CisgICAgaWYgKCFmcmFtZSgp
KQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29r
aWVKYXIoKS5zZXRDb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMo
KSwgdmFsdWUpOworfQorCitib29sIERvY3VtZW50Ojpjb29raWVzRW5hYmxlZCgpCit7CisgICAg
aWYgKCFwYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcGFnZSgpLT5z
ZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZyYW1l
KCktPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llc0VuYWJsZWQodGhpcy0+
Y29va2llVVJMKCksIHRoaXMtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwogfQogCiBTdHJpbmcg
RG9jdW1lbnQ6OnJlZmVycmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZp
c2lvbiAxMzMxNjApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtODE3LDYgKzgxNyw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjb29raWUoRXhj
ZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29va2llKGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKCk7CiAKICAgICBTdHJpbmcg
cmVmZXJyZXIoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uRXJy
b3IuaCIKQEAgLTUwOSw5ICs1MTEsMTAgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENv
b2tpZXMoRXJybwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUoKSkpIHsKICAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIFZlY3Rv
cjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAg
ICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tp
ZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBh
bGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAg
IFZlY3RvcjxDb29raWU+IGRvY0Nvb2tpZXNMaXN0OwotICAgICAgICAgICAgcmF3Q29va2llc0lt
cGxlbWVudGVkID0gZ2V0UmF3Q29va2llcyhkb2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJpbmcs
ICppdCksIGRvY0Nvb2tpZXNMaXN0KTsKKyAgICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRl
ZCA9IGNvb2tpZUphci5nZXRSYXdDb29raWVzKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jQ29va2llc0xpc3QpOwogICAgICAg
ICAgICAgaWYgKCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2UgbmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBmb3IgdGhlIFN0cmluZyByZXByZXNl
bnRhdGlvbiBvZiBjb29raWVzLgogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwpAQCAtNTQ3LDggKzU1MCw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29r
aWUoRXIKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxV
UkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2llSmFy
IGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwogICAg
ICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2lu
KCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBXZWJDb3JlOjpkZWxl
dGVDb29raWUoZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVOYW1l
KTsKKyAgICAgICAgICAgIGNvb2tpZUphci5kZWxldGVDb29raWUoS1VSTChQYXJzZWRVUkxTdHJp
bmcsICppdCksIGNvb2tpZU5hbWUpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgRnJhbWVMb2Fk
ZXJDbGllbnRfaAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJUeXBlcy5oIgogI2luY2x1ZGUgIkljb25VUkwuaCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3Rv
bmVzLmgiCkBAIC02NCw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBDYWNoZWRGcmFtZTsKICAgICBjbGFz
cyBDb2xvcjsKKyAgICBjbGFzcyBDb29raWVKYXI7CiAgICAgY2xhc3MgRE9NV2luZG93RXh0ZW5z
aW9uOwogICAgIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKICAgICBjbGFzcyBEb2N1bWVudExvYWRl
cjsKQEAgLTM0OSw2ICszNTEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN0YXJ0VXNpbmdQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXIoUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKikgeyB9CiAjZW5k
aWYKKworICAgICAgICB2aXJ0dWFsIENvb2tpZUphciBjb29raWVKYXIoKSB7IHJldHVybiBDb29r
aWVKYXIoKTsgfQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL05hdmlnYXRvci5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvTmF2aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogCi0jaW5jbHVkZSAiQ29v
a2llSmFyLmgiCiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgogI2luY2x1ZGUgIkRPTVBs
dWdpbkFycmF5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTExOCw3ICsxMTcsNyBAQCBi
b29sIE5hdmlnYXRvcjo6Y29va2llRW5hYmxlZCgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWUtPnBh
Z2UoKSAmJiAhbV9mcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBjb29raWVzRW5hYmxlZChtX2ZyYW1l
LT5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29va2llc0Vu
YWJsZWQoKTsKIH0KIAogYm9vbCBOYXZpZ2F0b3I6OmphdmFFbmFibGVkKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzMxNjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsMTMgQEAKICNpZm5kZWYgQ29va2llSmFyX2gKICNkZWZpbmUgQ29va2llSmFyX2gKIAorI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KKyNl
bmRpZgorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCisj
ZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTMzLDIzICs0MCw1NCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBEb2N1bWVudDsKLSAgICBjbGFzcyBL
VVJMOworY2xhc3MgS1VSTDsKK3N0cnVjdCBDb29raWU7CiAKLSAgICBzdHJ1Y3QgQ29va2llOwor
Y2xhc3MgQ29va2llSmFyIHsKK3B1YmxpYzoKKyAgICBDb29raWVKYXIoKQorICAgIHsKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyAgICAgICAgbV93ZWJDb29raWVKYXIgPSAwOworI2VuZGlmCisj
aWYgUExBVEZPUk0oUVQpCisgICAgICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSAwOworI2VuZGlm
CisgICAgfTsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBleHBsaWNpdCBDb29raWVKYXIo
V2ViS2l0OjpXZWJDb29raWVKYXIqIHdlYkNvb2tpZUphcikKKyAgICB7CisgICAgICAgIG1fd2Vi
Q29va2llSmFyID0gd2ViQ29va2llSmFyOworICAgIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShR
VCkKKyAgICBleHBsaWNpdCBDb29raWVKYXIoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCisg
ICAgeworICAgICAgICBtX25ldHdvcmtpbmdDb250ZXh0ID0gY29udGV4dDsKKyAgICB9OworI2Vu
ZGlmCiAKICAgICAvLyBjb29raWVzIG9taXRzIEh0dHBPbmx5IGNvb2tpZXMuCi0gICAgU3RyaW5n
IGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgU3RyaW5nIGNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwot
ICAgIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
KTsKLSAgICBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0gICAgYm9vbCBn
ZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+
Jik7Ci0gICAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIGNvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0IEtV
UkwmKTsKKyAgICBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VS
TCYsIGNvbnN0IEtVUkwmKTsKKyAgICB2b2lkIHNldENvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0
IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IEtV
UkwmLCBjb25zdCBLVVJMJik7CisgICAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmLCBj
b25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKKyAgICB2b2lkIGRlbGV0ZUNvb2tpZShjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKICAgICB2b2lkIGRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKICAgICB2b2lkIGRlbGV0ZUFsbENv
b2tpZXMoKTsKIAotfQorcHJpdmF0ZToKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBXZWJL
aXQ6OldlYkNvb2tpZUphciogbV93ZWJDb29raWVKYXI7CisjZW5kaWYKKyNpZiBQTEFURk9STShR
VCkKKyAgICBOZXR3b3JraW5nQ29udGV4dCogbV9uZXR3b3JraW5nQ29udGV4dDsKKyNlbmRpZgor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCShyZXZpc2lv
biAxMzMxNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1
cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTQgKzc4LDYgQEAgc3RydWN0IEZvbnRSZW5k
ZXJTdHlsZTsKIAogY2xhc3MgUGxhdGZvcm1TdXBwb3J0IHsKIHB1YmxpYzoKLSAgICAvLyBDb29r
aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgc3RhdGljIFN0cmluZyBjb29raWVz
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyBTdHJpbmcgY29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0g
ICAgc3RhdGljIGJvb2wgcmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBW
ZWN0b3I8Q29va2llPiYpOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpOwotICAgIHN0YXRp
YyBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0KICAgICAvLyBGb250IC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogI2lmIE9TKFdJTkRPV1MpCiAgICAgc3RhdGljIGJvb2wgZW5zdXJlRm9udExvYWRlZChI
Rk9OVCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVZpc3VhbENvbnRleHQuY3BwCShyZXZpc2lvbiAxMzMxNjApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJD
b29raWVKYXIuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTI2OCw3ICsyNzAsNyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvCiAKICAgICBLVVJMIG1vdmllVVJMID0gS1VSTChLVVJM
KCksIHVybCk7CiAgICAgVmVjdG9yPENvb2tpZT4gZG9jdW1lbnRDb29raWVzOwotICAgIGlmICgh
Z2V0UmF3Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgbW92aWVVUkwsIGRvY3VtZW50Q29va2ll
cykpCisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5nZXRS
YXdDb29raWVzKG1vdmllVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9j
dW1lbnRDb29raWVzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChzaXplX3QgbmR4ID0g
MDsgbmR4IDwgZG9jdW1lbnRDb29raWVzLnNpemUoKTsgbmR4KyspIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkocmV2aXNpb24gMTMzMTYwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAt
NzYsNyArNzYsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlckNvb2tpZXMoCiAg
ICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtOTUsNyArOTUsNyBAQCBTdHJpbmcg
Y29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVCiAgICAgcmV0dXJuIFN0cmluZygpOwog
fQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTExNCw3
ICsxMTQsNyBAQCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAg
cmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQordm9pZCBDb29raWVK
YXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9y
Q29va2llcywgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogCkBAIC0xMzIsMTUgKzEzMiwxNSBAQCB2b2lkIHNldENvb2tpZXMoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zCiAKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCiAg
ICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNvb2tpZVN0b3JhZ2Ug
PSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQotICAgICAgICB3a1NldEhUVFBDb29raWVz
Rm9yVVJMKGNmQ29va2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29r
aWVVUkwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICAgICAgd2tTZXRI
VFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5n
ZXQoKSwgY29va2llVVJMLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiAgICAgZWxzZQogI2VuZGlm
Ci0gICAgICAgIFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0g
c2V0Q29va2llczpmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9j
dW1lbnRVUkw6ZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCldOworICAgICAgICBbW05T
SFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6Zmls
dGVyZWRDb29raWVzLmdldCgpIGZvclVSTDpjb29raWVVUkwgbWFpbkRvY3VtZW50VVJMOmZpcnN0
UGFydHlGb3JDb29raWVzXTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAK
LWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQorYm9vbCBDb29raWVKYXI6OmNv
b2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0
eUZvckNvb2tpZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAg
LTE1OCw3ICsxNTgsNyBAQCBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KikKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQ
YXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3
Q29va2llcy5jbGVhcigpOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKQEAgLTE5
MSw3ICsxOTEsNyBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit2b2lkIENvb2tpZUph
cjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1l
KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMjI1LDcgKzIyNSw3
IEBAIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhh
c2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dp
dGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKICAgICAKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lkIGdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAg
CkBAIC0yNTUsNyArMjU1LDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3Qg
U3RyaQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZGVsZXRlQWxs
Q29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAJKHJldmlzaW9u
IDEzMzE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFy
Q0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJD
b29raWUuaCIKICNpbmNsdWRlICJDb29raWVTdG9yYWdlQ0ZOZXQuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgog
I2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCkBAIC05NSw3ICs5NCw3IEBAIHN0YXRpYyBSZXRhaW5Q
dHI8Q0ZBcnJheVJlZj4gZmlsdGVyQ29va2kKICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwog
fQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQogewogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBDRkhUVFBDb29raWVT
dG9yYWdlIHN0b3JlcyBhbiBlbXB0eSBjb29raWUsIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNv
b2tpZTogPSIuCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKQEAgLTEwNiw3ICsxMDUsNyBAQCB2
b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgICAgIHJldHVybjsK
IAogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsQ0YoQWRvcHRDRiwgdXJsLmNyZWF0ZUNGVVJM
KCkpOwotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9w
dENGLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5jcmVhdGVDRlVSTCgpKTsKKyAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JDb29raWVzQ0YoQWRvcHRDRiwgZmly
c3RQYXJ0eUZvckNvb2tpZXMuY3JlYXRlQ0ZVUkwoKSk7CiAKICAgICAvLyA8aHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4KICAgICAv
LyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3
aXRob3V0IGEgdmFsdWUKQEAgLTEyMyw3ICsxMjIsNyBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zCiAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMoY29v
a2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpLmdldCgpLCB1
cmxDRi5nZXQoKSwgZmlyc3RQYXJ0eUZvckNvb2tpZXNDRi5nZXQoKSk7CiB9CiAKLVN0cmluZyBj
b29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0
cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZp
cnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAg
IGlmICghY29va2llU3RvcmFnZSkKQEAgLTEzNyw3ICsxMzYsNyBAQCBTdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCogLypkb2N1bWVuCiAgICAgcmV0dXJuIChDRlN0cmluZ1JlZilDRkRpY3Rp
b25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRik7CiB9CiAKLVN0cmluZyBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCov
LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVT
dG9yYWdlKQpAQCAtMTUxLDcgKzE1MCw3IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShjb24KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChj
b25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLykKIHsKICAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IHBvbGljeSA9IENG
SFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsK
ICAgICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2Ug
PSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQpAQCAtMTU5LDcgKzE1OCw3IEBAIGJvb2wg
Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG8KICAgICByZXR1cm4gcG9saWN5ID09
IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFp
biB8fCBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5czsKIH0K
IAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVz
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAg
ICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwpAQCAtMTkzLDcgKzE5Miw3IEBAIGJvb2wgZ2V0UmF3
Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgbmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAg
IGlmICghY29va2llU3RvcmFnZSkKQEAgLTIxNCw3ICsyMTMsNyBAQCB2b2lkIGRlbGV0ZUNvb2tp
ZShjb25zdCBEb2N1bWVudCosIGNvbnN0CiAgICAgfQogfQogCi12b2lkIGdldEhvc3RuYW1lc1dp
dGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6Omdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAg
IFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVu
dENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0yMzIs
NyArMjMxLDcgQEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAg
IH0KIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4g
Y29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFj
b29raWVTdG9yYWdlKQpAQCAtMjUxLDcgKzI1MCw3IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmkKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2
b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3Rv
cmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiAxMzMxNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNTIgKzMyLDc0IEBACiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAKICNpbmNsdWRlICJDb29r
aWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5o
IgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWUuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29v
a2llSmFyLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgorI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJVUkwuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoZG9jdW1l
bnQsIHVybCwgdmFsdWUpOworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJD
b29raWVKYXItPnNldENvb2tpZSh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzLCB2YWx1ZSk7CiB9
CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6
OmNvb2tpZXMoZG9jdW1lbnQsIHVybCk7CisgICAgaWYgKCFtX3dlYkNvb2tpZUphcikKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX3dlYkNvb2tpZUphci0+Y29va2llcyh1
cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQor
U3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICByZXR1cm4g
UGxhdGZvcm1TdXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwg
dXJsKTsKKyAgICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgcmV0dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZSh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAg
ICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxlZChkb2N1bWVudCk7CisgICAg
aWYgKCFtX3dlYkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBt
X3dlYkNvb2tpZUphci0+Y29va2llc0VuYWJsZWQodXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7
CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6
Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JD
b29raWVzLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKLSAgICByZXR1cm4gUGxhdGZv
cm1TdXBwb3J0OjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIHJhd0Nvb2tpZXMpOworICAgIHJh
d0Nvb2tpZXMuY2xlYXIoKTsKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNvb2tp
ZT4gd2ViQ29va2llczsKKworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJD
b29raWVKYXItPnJhd0Nvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcywgd2ViQ29va2ll
cyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBjb25zdCBXZWJLaXQ6OldlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29v
a2llc1tpXTsKKyAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwgd2ViQ29va2ll
LnZhbHVlLCB3ZWJDb29raWUuZG9tYWluLCB3ZWJDb29raWUucGF0aCwgd2ViQ29va2llLmV4cGly
ZXMsIHdlYkNvb2tpZS5odHRwT25seSwgd2ViQ29va2llLnNlY3VyZSwgd2ViQ29va2llLnNlc3Np
b24pOworICAgICAgICByYXdDb29raWVzLmFwcGVuZChjb29raWUpOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3ZvaWQgQ29va2ll
SmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5h
bWUpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGRvY3VtZW50
LCB1cmwsIGNvb2tpZU5hbWUpOworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93
ZWJDb29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwogfQogCi12b2lkIGdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBD
b29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0
bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lk
IGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBD
b29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIC8qaG9zdG5h
bWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRl
bGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewog
ICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCShy
ZXZpc2lvbiAxMzMxNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q29va2llSmFyQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNs
dWRlICJDb29raWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtMjYsMzcgKzI1LDM3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tpZUph
cjsKK3N0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBzX2Nvb2tpZUphcjsKIAotdm9pZCBz
ZXRDb29raWVzKERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogewotICAgIGNvb2tpZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7CisgICAgc19j
b29raWVKYXIuc2V0KHVybC5zdHJpbmcoKSwgdmFsdWUpOwogfQogCi1TdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29v
a2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5
Rm9yQ29va2llcyovKQogewotICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7
CisgICAgcmV0dXJuIHNfY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOwogfQogCi1TdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQq
LywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JD
b29raWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llLgotICAg
IHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CisgICAgcmV0dXJuIHNfY29va2ll
SmFyLmdldCh1cmwuc3RyaW5nKCkpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERv
Y3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29u
c3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQog
ewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1l
bnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZp
cnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAg
IC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiAgICAgcmF3Q29va2llcy5jbGVhcigpOwog
ICAgIHJldHVybiBmYWxzZTsgLy8gcmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12
b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiAvKnVybCovLCBj
b25zdCBTdHJpbmcmIC8qY29va2llTmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGlt
cGxlbWVudGVkCiB9CkBAIC02OCwxNyArNjcsMTcgQEAgdm9pZCBzZXRDb29raWVTdG9yYWdlUHJp
dmF0ZUJyb3dzaW5nRW5hYgogfQogI2VuZGlmCiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1lcyovKQogewogICAgIC8v
IEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSovKQogewogICAgIC8vIEZJ
WE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2
b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5
ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
d2luL0Nvb2tpZUphcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcAkocmV2aXNpb24gMTMzMTYwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGUuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8V2luaW5ldC5oPgpAQCAtMzYs
MTUgKzM1LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBzZXRDb29raWVzKERv
Y3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKwordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0g
ICAgLy8gRklYTUU6IERlYWwgd2l0aCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS4K
KyAgICAvLyBGSVhNRTogRGVhbCB3aXRoIGZpcnN0UGFydHlGb3JDb29raWVzLgogICAgIFN0cmlu
ZyBzdHIgPSB1cmwuc3RyaW5nKCk7CiAgICAgU3RyaW5nIHZhbCA9IHZhbHVlOwogICAgIEludGVy
bmV0U2V0Q29va2llKHN0ci5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2YWwu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29r
aWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlG
b3JDb29raWVzKi8pCiB7CiAgICAgU3RyaW5nIHN0ciA9IHVybC5zdHJpbmcoKTsKIApAQCAtNjMs
NDAgKzYzLDQwIEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW4KICAg
ICByZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewogICAgIC8v
IEZJWE1FOiBpbmNsdWRlIEh0dHBPbmx5IGNvb2tpZQotICAgIHJldHVybiBjb29raWVzKGRvY3Vt
ZW50LCB1cmwpOworICAgIHJldHVybiBjb29raWVzKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMp
OwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8p
Citib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29u
c3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVj
dG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3Q29va2llcyhj
b25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8s
IFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGlt
cGxlbWVudGVkCiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsgLy8g
cmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBTdHJpbmcmIC8qY29va2ll
TmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQg
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lk
IENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhv
c3RuYW1lcyovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZv
aWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lk
IENvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0
bmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQg
ZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7
CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsOSArMzEsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2ll
SmFyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5ldHdvcmtp
bmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgpAQCAtNDksMzEg
KzQ2LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIFNoYXJlZENvb2tpZUphclF0
KiBzX3NoYXJlZENvb2tpZUphclF0ID0gMDsKIAotc3RhdGljIE5ldHdvcmtpbmdDb250ZXh0KiBu
ZXR3b3JraW5nQ29udGV4dChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit2b2lkIENvb2tpZUph
cjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JD
b29raWVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmICghZG9jdW1lbnQpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIg
PSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgc2V0Q29v
a2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250
ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdD
b250ZXh0KQogICAgICAgICByZXR1cm47Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNv
bnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3Jr
Q29va2llSmFyKiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdl
cigpLT5jb29raWVKYXIoKTsKICAgICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UVVybCB1cmxGb3JDb29raWVzKHVybCk7Ci0gICAgUVVybCBmaXJzdFBhcnR5VXJsKGRvY3VtZW50
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xp
Y3lQZXJtaXRzKGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQorICAgIFFV
cmwgZmlyc3RQYXJ0eVVybChmaXJzdFBhcnR5Rm9yQ29va2llcyk7CisgICAgaWYgKCF0aGlyZFBh
cnR5Q29va2llUG9saWN5UGVybWl0cyhtX25ldHdvcmtpbmdDb250ZXh0LCB1cmxGb3JDb29raWVz
LCBmaXJzdFBhcnR5VXJsKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUUxpc3Q8UU5ldHdvcmtD
b29raWU+IGNvb2tpZXMgPSBRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJpbmcodmFs
dWUpLnRvTGF0aW4xKCkpOwpAQCAtODgsMTYgKzcxLDE1IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBqYXItPnNldENvb2tpZXNGcm9tVXJsKGNvb2tpZXMs
IHVybEZvckNvb2tpZXMpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICBOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAg
ICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFy
KiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29r
aWVKYXIoKTsKIAogICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQ
YXJ0eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgaWYgKCF0aGly
ZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBh
cnR5VXJsKSkKKyAgICBRVXJsIGZpcnN0UGFydHlVcmwoZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwor
ICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMobV9uZXR3b3JraW5nQ29udGV4
dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKIAogICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9y
VXJsKHVybEZvckNvb2tpZXMpOwpAQCAtMTE0LDEyICs5NiwxMSBAQCBTdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQsCiAgICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihR
TGF0aW4xU3RyaW5nKCI7ICIpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQorU3RyaW5n
IENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYg
KCFjb250ZXh0KQorICAgIGlmICghbV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3Jr
QWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFy
ID0gbV9uZXR3b3JraW5nQ29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFy
KCk7CiAKICAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0Zv
clVybChRVXJsKHVybCkpOwogICAgIGlmIChjb29raWVzLmlzRW1wdHkoKSkKQEAgLTEzMiw0MSAr
MTEzLDQwIEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24KICAgICBy
ZXR1cm4gcmVzdWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1ib29s
IGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgQ29va2llSmFy
Ojpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0
UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBu
ZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQorICAgIGlmICgh
bV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBj
b250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICByZXR1cm4g
bV9uZXR3b3JraW5nQ29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7
CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVz
KGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMq
LywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAv
LyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNv
bnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUph
cjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29r
aWVOYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9p
ZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3Zv
aWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhv
c3RuYW1lcykKIHsKICAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFy
UXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+Z2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoaG9zdG5hbWVzKTsKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKICAgICBTaGFyZWRDb29raWVKYXJR
dCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAg
ICAgIGphci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKIH0KIAotdm9pZCBk
ZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsK
ICAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgp
OwogICAgIGlmIChqYXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJ
KHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTIsNyArMTM5Miw3IEBAIE5QRXJyb3IgUGx1Z2luVmll
dzo6Z2V0VmFsdWVGb3JVUkwoTlBOVVIKICAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7CiAgICAg
ICAgICAgICBGcmFtZSogZnJhbWUgPSBnZXRGcmFtZShwYXJlbnRGcmFtZSgpLCBtX2VsZW1lbnQp
OwogICAgICAgICAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ1N0cmlu
ZyBjb29raWVTdHIgPSBjb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCB1KS51dGY4KCk7CisgICAg
ICAgICAgICAgICAgY29uc3QgQ1N0cmluZyBjb29raWVTdHIgPSBmcmFtZS0+bG9hZGVyKCktPmNs
aWVudCgpLT5jb29raWVKYXIoKS5jb29raWVzKHUsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBh
cnR5Rm9yQ29va2llcygpKS51dGY4KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFjb29raWVTdHIu
aXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHNpemUgPSBjb29raWVT
dHIubGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGNo
YXIqPihOUE5fTWVtQWxsb2Moc2l6ZSsxKSk7CkBAIC0xNDU0LDcgKzE0NTQsNyBAQCBOUEVycm9y
IFBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKE5QTlVSCiAgICAgICAgICAgICBjb25zdCBTdHJp
bmcgY29va2llU3RyID0gU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSwgbGVuKTsKICAgICAgICAgICAg
IEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7CiAgICAg
ICAgICAgICBpZiAoZnJhbWUgJiYgIWNvb2tpZVN0ci5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgc2V0Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSwgY29va2llU3RyKTsKKyAgICAgICAg
ICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVz
KHUsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVTdHIp
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJM
OwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzE4NCkKKysrIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisy
MDEyLTExLTAxICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbQ2hyb21pdW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9y
bVN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJh
dGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OmdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdl
YktpdDo6UGx1Z2luVmlldzo6c2V0Q29va2llc0ZvclVSTCk6CisKIDIwMTItMTEtMDEgIEh1YW5n
IERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgQ29vcmRpbmF0
ZWQgR3JhcGhpY3M6IENsZWFuIHVwIGhlYWRlcnMgb2YgQ29vcmRpbmF0ZWQgR3JhcGhpY3MuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Db29raWVzL1dlYkNv
b2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxMzMxNjApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDcgKzU3LDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIb3N0bmFtZXNXaXRoQwogCiAg
ICAgSGFzaFNldDxTdHJpbmc+IGhvc3RuYW1lczsKIAotICAgIFdlYkNvcmU6OmdldEhvc3RuYW1l
c1dpdGhDb29raWVzKGhvc3RuYW1lcyk7CisgICAgV2ViQ29yZTo6Q29va2llSmFyKCkuZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IGhvc3Ru
YW1lTGlzdDsKICAgICBjb3B5VG9WZWN0b3IoaG9zdG5hbWVzLCBob3N0bmFtZUxpc3QpOwpAQCAt
NjksMTQgKzY5LDE0IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0ZvckgK
IHsKICAgICBXZWJQcm9jZXNzOjpMb2NhbFRlcm1pbmF0aW9uRGlzYWJsZXIgdGVybWluYXRpb25E
aXNhYmxlcihXZWJQcm9jZXNzOjpzaGFyZWQoKSk7CiAKLSAgICBXZWJDb3JlOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoaG9zdG5hbWUpOworICAgIFdlYkNvcmU6OkNvb2tpZUphcigpLmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZShob3N0bmFtZSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
cjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgV2ViUHJvY2Vzczo6TG9jYWxUZXJtaW5hdGlv
bkRpc2FibGVyIHRlcm1pbmF0aW9uRGlzYWJsZXIoV2ViUHJvY2Vzczo6c2hhcmVkKCkpOwogCi0g
ICAgV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llcygpOworICAgIFdlYkNvcmU6OkNvb2tpZUphcigp
LmRlbGV0ZUFsbENvb2tpZXMoKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzA5LDEyICsxMzA5LDE5IEBAIFN0cmluZyBQbHVnaW5WaWV3Ojpwcm94aWVzRm9yVVJM
KGNvbnN0IFMKIAogU3RyaW5nIFBsdWdpblZpZXc6OmNvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpCiB7Ci0gICAgcmV0dXJuIGNvb2tpZXMobV9wbHVnaW5FbGVtZW50LT5kb2N1
bWVudCgpLCBLVVJMKEtVUkwoKSwgdXJsU3RyaW5nKSk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICByZXR1cm4gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2ll
cyhLVVJMKEtVUkwoKSwgdXJsU3RyaW5nKSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVz
KCkpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OnNldENvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQogewotICAgIHNldENvb2tp
ZXMobV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLCBLVVJMKEtVUkwoKSwgdXJsU3RyaW5nKSwg
Y29va2llU3RyaW5nKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX3BsdWdpbkVsZW1lbnQt
PmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAg
aWYgKGZyYW1lKQorICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIo
KS5zZXRDb29raWVzKEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSwgY29va2llU3RyaW5nKTsKIH0KIAogYm9vbCBQbHVnaW5WaWV3OjpnZXRB
dXRoZW50aWNhdGlvbkluZm8oY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2Us
IFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFzc3dvcmQpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkocmV2aXNpb24gMTMzMTg0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMS0wMSAgTWFy
ayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBS
ZW1vdmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5m
b3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFz
ZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAg
ICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50SW1wbDo6Y29va2llSmFyKToKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJD
bGllbnRJbXBsLmg6CisgICAgICAgIChGcmFtZUxvYWRlckNsaWVudEltcGwpOgorICAgICAgICAq
IHNyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMTEt
MDEgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIEF2b2lkIGF0dGVtcHRpbmcgdG8gZGVmZXIgY29tbWl0cyB3aGVuIHRoZXkgYXJlIGFs
cmVhZHkgZGVmZXJyZWQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9h
ZGVyQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY1MSw1ICsxNjUxLDE0IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpk
aXNwYXRjaFdpbGwKIH0KICNlbmRpZgogCitXZWJDb3JlOjpDb29raWVKYXIgRnJhbWVMb2FkZXJD
bGllbnRJbXBsOjpjb29raWVKYXIoKQoreworICAgIGlmICghbV93ZWJGcmFtZSB8fCAhbV93ZWJG
cmFtZS0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIoMCk7Cisg
ICAgV2ViQ29va2llSmFyKiB3ZWJDb29raWVKYXIgPSBtX3dlYkZyYW1lLT5jbGllbnQoKS0+Y29v
a2llSmFyKG1fd2ViRnJhbWUpOworICAgIGlmICghd2ViQ29va2llSmFyKQorICAgICAgICB3ZWJD
b29raWVKYXIgPSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNvb2tpZUphcigpOworICAg
IHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIod2ViQ29va2llSmFyKTsKK30KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRl
ckNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9G
cmFtZUxvYWRlckNsaWVudEltcGwuaAkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIyNSw2ICsyMjUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN0
YXJ0VXNpbmdQZWVyQ29ubmVjdGlvbkhhbmRsZXIoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb25I
YW5kbGVyKikgT1ZFUlJJREU7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29va2ll
SmFyIGNvb2tpZUphcigpIE9WRVJSSURFOworCiBwcml2YXRlOgogICAgIHZvaWQgbWFrZURvY3Vt
ZW50VmlldygpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1
cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRm
b3JtU3VwcG9ydC5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4NiArMTAw
LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1z
dGF0aWMgV2ViQ29va2llSmFyKiBnZXRDb29raWVKYXIoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
KQotewotICAgIFdlYkZyYW1lSW1wbCogZnJhbWVJbXBsID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJh
bWUoZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIGlmICghZnJhbWVJbXBsIHx8ICFmcmFtZUltcGwt
PmNsaWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUph
ciA9IGZyYW1lSW1wbC0+Y2xpZW50KCktPmNvb2tpZUphcihmcmFtZUltcGwpOwotICAgIGlmICgh
Y29va2llSmFyKQotICAgICAgICBjb29raWVKYXIgPSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50
KCktPmNvb2tpZUphcigpOwotICAgIHJldHVybiBjb29raWVKYXI7Ci19Ci0KLS8vIENvb2tpZXMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotdm9pZCBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgV2ViQ29va2llSmFyKiBjb29r
aWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAg
ICAgIGNvb2tpZUphci0+c2V0Q29va2llKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29r
aWVzKCksIHZhbHVlKTsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llcyhjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVz
dWx0OwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50
KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tp
ZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAg
U3RyaW5nIHJlc3VsdDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUph
cihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2ll
SmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBh
cnR5Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFBsYXRmb3Jt
U3VwcG9ydDo6cmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgcmF3Q29va2llcy5jbGVh
cigpOwotICAgIFdlYlZlY3RvcjxXZWJDb29raWU+IHdlYkNvb2tpZXM7Ci0KLSAgICBXZWJDb29r
aWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tp
ZUphcikKLSAgICAgICAgY29va2llSmFyLT5yYXdDb29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCksIHdlYkNvb2tpZXMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgV2ViQ29va2ll
JiB3ZWJDb29raWUgPSB3ZWJDb29raWVzW2ldOwotICAgICAgICBDb29raWUgY29va2llKHdlYkNv
b2tpZS5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS52YWx1ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICB3ZWJDb29raWUuZG9tYWluLAotICAgICAgICAgICAgICAgICAgICAg
IHdlYkNvb2tpZS5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5leHBpcmVz
LAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5odHRwT25seSwKLSAgICAgICAgICAg
ICAgICAgICAgICB3ZWJDb29raWUuc2VjdXJlLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNv
b2tpZS5zZXNzaW9uKTsKLSAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoY29va2llKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29r
aWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY29va2llTmFtZSkKLXsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tp
ZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5k
ZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKTsKLX0KLQotYm9vbCBQbGF0Zm9ybVN1cHBvcnQ6
OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBib29sIHJl
c3VsdCA9IGZhbHNlOwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFy
KGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVK
YXItPmNvb2tpZXNFbmFibGVkKGRvY3VtZW50LT5jb29raWVVUkwoKSwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIC8vIEZvbnQgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogI2lmIE9TKFdJTkRPV1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMzMxODQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMS0wMSAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgY29va2llLXJlbGF0ZWQg
ZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5n
ZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRl
c2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OmdldENvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldENvb2tpZXMpOgorICAgICAgICAqIFBsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcg
Z2V0VmFyaWFibGU6Zm9yVVJMOnZhbHVlOmxlbmd0aDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3IHNldFZhcmlhYmxlOmZvclVSTDp2YWx1ZTpsZW5ndGg6XSk6CisKIDIwMTIt
MTAtMzEgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBG
aXggYnVpbGQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1
Z2luVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5l
dHNjYXBlUGx1Z2luVmlldy5tbQkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTYx
LDYgKzYxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZS5oPiAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4gCisjaW1wb3J0IDxX
ZWJDb3JlL0ZyYW1lTG9hZGVyQ2xpZW50Lmg+IAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxQ
bHVnSW5FbGVtZW50Lmg+CkBAIC0yMjE2LDcgKzIyMTcsNyBAQCAtIChOUEVycm9yKWdldFZhcmlh
YmxlOihOUE5VUkxWYXJpYWJsZSl2CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSkp
IHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgY29va2llU3RyaW5nID0gY29va2llcyhmcmFtZS0+
ZG9jdW1lbnQoKSwgVVJMKTsgCisgICAgICAgICAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9
IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZXMoVVJMLCBmcmFt
ZS0+ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7IAogICAgICAgICAgICAgICAg
IENTdHJpbmcgY29va2llU3RyaW5nVVRGOCA9IGNvb2tpZVN0cmluZy51dGY4KCk7CiAgICAgICAg
ICAgICAgICAgaWYgKGNvb2tpZVN0cmluZ1VURjguaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwpAQCAtMjI3MCw3ICsyMjcxLDcgQEAgLSAo
TlBFcnJvcilzZXRWYXJpYWJsZTooTlBOVVJMVmFyaWFibGUpdgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShb
c2VsZiB3ZWJGcmFtZV0pKSB7Ci0gICAgICAgICAgICAgICAgc2V0Q29va2llcyhmcmFtZS0+ZG9j
dW1lbnQoKSwgVVJMLCBjb29raWVTdHJpbmcpOworICAgICAgICAgICAgICAgIGZyYW1lLT5jbGll
bnQoKS0+bG9hZGVyKCktPmNvb2tpZUphcigpLnNldENvb2tpZXMoVVJMLCBmcmFtZS0+ZG9jdW1l
bnQoKS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgY29va2llU3RyaW5nKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDEzMzE2MCkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9Eb2N1bWVudExvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZUxvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlckNsaWVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvS1VS
TC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Qcm94eVNlcnZlci5oPgpAQCAtMTUxNSw3ICsxNTE2LDcg
QEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldENvbwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmll
dyB3ZWJGcmFtZV0pKSB7Ci0gICAgICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjb29raWVzKGZy
YW1lLT5kb2N1bWVudCgpLCB1cmwpOyAKKyAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGZy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZXModXJsLCBmcmFtZS0+
ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7IAogICAgICAgICBXVEY6OkNTdHJp
bmcgY29va2llU3RyaW5nVVRGOCA9IGNvb2tpZVN0cmluZy51dGY4KCk7CiAgICAgICAgIGlmIChj
b29raWVTdHJpbmdVVEY4LmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTU0Myw3ICsxNTQ0LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldENv
bwogICAgICAgICBpZiAoIWNvb2tpZVN0cmluZykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCi0gICAgICAgIFdlYkNvcmU6OnNldENvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCks
IHVybCwgY29va2llU3RyaW5nKTsKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
Y29va2llSmFyKCkuc2V0Q29va2llcyh1cmwsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5
Rm9yQ29va2llcygpLCBjb29raWVTdHJpbmcpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzMxODQpCisrKyBTb3VyY2UvV2ViS2l0
L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTExLTAx
ICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25h
bCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4g
UGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNvb2tpZUphcik6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0Lmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50UXQpOgorCiAyMDEy
LTExLTAxICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzMxNDMuCkluZGV4OiBTb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAJ
KHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzYsNiArMTY3NiwxMyBA
QCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmVtaXRMb2FkRmluaXNoCiAgICAgZW1pdCBtX3dl
YkZyYW1lLT5sb2FkRmluaXNoZWQob2spOwogfQogCitXZWJDb3JlOjpDb29raWVKYXIgRnJhbWVM
b2FkZXJDbGllbnRRdDo6Y29va2llSmFyKCkKK3sKKyAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJh
bWUtPmxvYWRlcigpKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKDApOworICAg
IHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIobV9mcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdD
b250ZXh0KCkpOworfQorCiB9CiAKICNpbmNsdWRlICJtb2NfRnJhbWVMb2FkZXJDbGllbnRRdC5j
cHAiCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50UXQuaAkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRRdF9oCiAKIAorI2luY2x1
ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNTMsNiArNTQsNyBAQCBj
bGFzcyBRV2ViRnJhbWU7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlOworY2xhc3MgQ29va2llSmFyOwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBj
bGFzcyBFbGVtZW50OwogY2xhc3MgRm9ybVN0YXRlOwpAQCAtMjI3LDYgKzIyOSw4IEBAIHB1Ymxp
YzoKIAogICAgIGNvbnN0IEtVUkwmIGxhc3RSZXF1ZXN0ZWRVcmwoKSBjb25zdCB7IHJldHVybiBt
X2xhc3RSZXF1ZXN0ZWRVcmw7IH0KIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29va2llSmFyIGNv
b2tpZUphcigpIE9WRVJSSURFOworCiAgICAgc3RhdGljIGJvb2wgZHVtcEZyYW1lTG9hZGVyQ2Fs
bGJhY2tzOwogICAgIHN0YXRpYyBib29sIGR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2s7CiAg
ICAgc3RhdGljIGJvb2wgZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRlckNhbGxiYWNrczsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171908</attachid>
            <date>2012-11-01 12:32:00 -0700</date>
            <delta_ts>2012-11-05 11:51:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99340-20121101153012.patch</filename>
            <type>text/plain</type>
            <size>57966</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzE4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxMi0xMS0wMSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xp
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAg
ICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29v
a2llRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OkNvb2tpZUphcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBw
b3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nv
b2tpZUphci5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0Vu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tp
ZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9Db29raWVKYXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2ll
SmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFs
bENvb2tpZXMpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6CisKIDIwMTItMTEtMDEgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBCdWlsZCBmaXguCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDYgQEAgX19aTjdXZWJD
b3JlMTBTY3JvbGxWaWV3MjR3aW5kb3dSZXNpemVyUgogX19aTjdXZWJDb3JlMTBTY3JvbGxWaWV3
OGFkZENoaWxkRU4zV1RGMTBQYXNzUmVmUHRySU5TXzZXaWRnZXRFRUUKIF9fWk43V2ViQ29yZTEw
U2hhZG93Um9vdDZjcmVhdGVFUE5TXzdFbGVtZW50RVJpCiBfX1pON1dlYkNvcmUxMGRlbGV0ZUZp
bGVFUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxMHNldENvb2tpZXNFUE5TXzhEb2N1bWVu
dEVSS05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTB0b0RvY3VtZW50RU4z
SlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxMUJpdG1hcEltYWdlQzFFUDdDR0ltYWdlUE5TXzEz
SW1hZ2VPYnNlcnZlckUKIF9fWk43V2ViQ29yZTExQml0bWFwSW1hZ2VDMUVQTlNfMTNJbWFnZU9i
c2VydmVyRQpAQCAtNDY0LDcgKzQ2Myw2IEBAIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlv
bkMxRVJLTlNfMTUKIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVJLTlNfMTVWaXNp
YmxlUG9zaXRpb25FYgogX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNE5vZGVF
CiBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU181UmFuZ2VFCi1fX1pON1dlYkNv
cmUxNmRlbGV0ZUFsbENvb2tpZXNFdgogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJL
TlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEUKIF9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVj
dEVSS05TXzlGbG9hdFJlY3RFCiBfX1pON1dlYkNvcmUxNmlzRW5kT2ZQYXJhZ3JhcGhFUktOU18x
NVZpc2libGVQb3NpdGlvbkVOU18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKQEAgLTYy
NCw3ICs2MjIsNiBAQCBfX1pON1dlYkNvcmUyM2NyZWF0ZUZyYWdtZW50RnJvbU5vZGVzRVBOCiBf
X1pON1dlYkNvcmUyM2RhdGFGb3JVUkxDb21wb25lbnRUeXBlRVA1TlNVUkxsCiBfX1pON1dlYkNv
cmUyM2RlY29kZUhvc3ROYW1lV2l0aFJhbmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UKIF9fWk43V2Vi
Q29yZTIzZW5jb2RlSG9zdE5hbWVXaXRoUmFuZ2VFUDhOU1N0cmluZzhfTlNSYW5nZQotX19aTjdX
ZWJDb3JlMjNnZXRIb3N0bmFtZXNXaXRoQ29va2llc0VSTjNXVEY3SGFzaFNldElOUzBfNlN0cmlu
Z0VOUzBfMTBTdHJpbmdIYXNoRU5TMF8xMEhhc2hUcmFpdHNJUzJfRUVFRQogX19aTjdXZWJDb3Jl
MjRCaW5hcnlQcm9wZXJ0eUxpc3RXcml0ZXIxN3dyaXRlUHJvcGVydHlMaXN0RXYKIF9fWk43V2Vi
Q29yZTI0Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlMTFzZXRSZXNvdXJjZUVQTlNfMTRDYWNoZWRS
ZXNvdXJjZUUKIF9fWk43V2ViQ29yZTI0Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyMTBmaXJzdENo
aWxkRXYKQEAgLTY0Myw3ICs2NDAsNiBAQCBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25P
YnNlcnZlckMyCiBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckQyRXYKIF9f
Wk43V2ViQ29yZTI0Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwRVBOU184RG9jdW1lbnRFUktOM1dU
RjZTdHJpbmdFUzVfTlNfMjdGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb25FCiBfX1pON1dlYkNv
cmUyNGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0VSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29y
ZTI0ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
MjRmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25FUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUy
NG5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZEUKIF9fWk43V2ViQ29yZTI1SGlzdG9yeVByb3BlcnR5
TGlzdFdyaXRlcjExcmVsZWFzZURhdGFFdgpAQCAtODc4LDcgKzg3NCw2IEBAIF9fWk43V2ViQ29y
ZTdSdW5Mb29wOVRpbWVyQmFzZUQyRXYKIF9fWk43V2ViQ29yZTdUZXh0UnVuMTlhbGxvd3NSb3Vu
ZGluZ0hhY2tzRXYKIF9fWk43V2ViQ29yZTdUZXh0UnVuMjFzX2FsbG93c1JvdW5kaW5nSGFja3NF
CiBfX1pON1dlYkNvcmU3VGV4dFJ1bjIyc2V0QWxsb3dzUm91bmRpbmdIYWNrc0ViCi1fX1pON1dl
YkNvcmU3Y29va2llc0VQS05TXzhEb2N1bWVudEVSS05TXzRLVVJMRQogX19aTjdXZWJDb3JlN2pz
QXJyYXlFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFz
c1JlZlB0cklOU18xM0RPTVN0cmluZ0xpc3RFRUUKIF9fWk43V2ViQ29yZTdtYWtlUkdCRWlpaQog
X19aTjdXZWJDb3JlN3JlcGxhY2VFUk4zV1RGNlN0cmluZ0VSS05TXzE3UmVndWxhckV4cHJlc3Np
b25FUktTMV8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2Nr
ZXRDaGFubmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNv
Y2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0J1
ZmZlcigpCiAgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVyKQogICAgICAgICAgICAgICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3Bv
bnNlKG1fZG9jdW1lbnQsIG1faWRlbnRpZmllciwgbV9oYW5kc2hha2UtPnNlcnZlckhhbmRzaGFr
ZVJlc3BvbnNlKCkpOwogICAgICAgICAgICAgaWYgKCFtX2hhbmRzaGFrZS0+c2VydmVyU2V0Q29v
a2llKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvb2tpZXNFbmFibGVkKG1f
ZG9jdW1lbnQpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmNvb2tpZXNFbmFi
bGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsgLy8gRXhjZXB0
aW9uIChmb3Igc2FuZGJveGVkIGRvY3VtZW50cykgaWdub3JlZC4KICAgICAgICAgICAgICAgICAg
ICAgbV9kb2N1bWVudC0+c2V0Q29va2llKG1faGFuZHNoYWtlLT5zZXJ2ZXJTZXRDb29raWUoKSwg
ZWMpOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAx
MzMxNjApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOSBAQAogI2luY2x1ZGUgIkNv
b2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZy
YW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUg
IkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjAwLDcgKzIwMywxMCBAQCBD
U3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoCiAgICAgS1VSTCB1cmwgPSBo
dHRwVVJMRm9yQXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYgKG1fY29udGV4dC0+
aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0
PERvY3VtZW50Kj4obV9jb250ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAgICBTdHJpbmcgY29v
a2llOworICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAgICAg
aWYgKGZyYW1lKQorICAgICAgICAgICAgY29va2llID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQo
KS0+Y29va2llSmFyKCkuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVu
dC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiAgICAgICAgIGlmICghY29va2llLmlzRW1wdHko
KSkKICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoIkNvb2tpZTogIiArIGNvb2tpZSk7CiAgICAg
ICAgIC8vIFNldCAiQ29va2llMjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBleGlzdHMgZm9yIHVy
bD8KQEAgLTI0OSw3ICsyNTUsMTIgQEAgUGFzc1JlZlB0cjxXZWJTb2NrZXRIYW5kc2hha2VSZXF1
ZXN0PiBXZQogICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2ll
cygpOwogICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkgewogICAgICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4dCk7Ci0gICAgICAg
IFN0cmluZyBjb29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwg
dXJsKTsKKyAgICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAgICAgQ29va2ll
SmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwor
ICAgICAgICAgICAgY29va2llID0gY29va2llSmFyLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgICAgICB9CiAg
ICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlcXVlc3QtPmFkZEhl
YWRlckZpZWxkKCJDb29raWUiLCBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxj
b29raWU+IiBpZiBjb29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MTksNyArMzgxOSw5IEBAIFN0cmluZyBEb2N1bWVu
dDo6Y29va2llKEV4Y2VwdGlvbkNvZGUmIGUKICAgICBpZiAoY29va2llVVJMLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0dXJuIGNvb2tpZXModGhpcywgY29v
a2llVVJMKTsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVz
KGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9CiAKIHZvaWQgRG9j
dW1lbnQ6OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykK
QEAgLTM4NDAsNyArMzg0MiwyMyBAQCB2b2lkIERvY3VtZW50OjpzZXRDb29raWUoY29uc3QgU3Ry
aW5nJiB2CiAgICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHNldENvb2tpZXModGhpcywgY29va2llVVJMLCB2YWx1ZSk7CisgICAgaWYgKCFmcmFtZSgp
KQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29r
aWVKYXIoKS5zZXRDb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMo
KSwgdmFsdWUpOworfQorCitib29sIERvY3VtZW50Ojpjb29raWVzRW5hYmxlZCgpCit7CisgICAg
aWYgKCFwYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcGFnZSgpLT5z
ZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZyYW1l
KCktPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llc0VuYWJsZWQodGhpcy0+
Y29va2llVVJMKCksIHRoaXMtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwogfQogCiBTdHJpbmcg
RG9jdW1lbnQ6OnJlZmVycmVyKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZp
c2lvbiAxMzMxNjApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtODE3LDYgKzgxNyw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjb29raWUoRXhj
ZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29va2llKGNvbnN0IFN0cmluZyYsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKCk7CiAKICAgICBTdHJpbmcg
cmVmZXJyZXIoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uRXJy
b3IuaCIKQEAgLTUwOSw5ICs1MTEsMTAgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENv
b2tpZXMoRXJybwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChtYWluRnJhbWUoKSkpIHsKICAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIFZlY3Rv
cjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAg
ICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tp
ZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBh
bGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAg
IFZlY3RvcjxDb29raWU+IGRvY0Nvb2tpZXNMaXN0OwotICAgICAgICAgICAgcmF3Q29va2llc0lt
cGxlbWVudGVkID0gZ2V0UmF3Q29va2llcyhkb2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJpbmcs
ICppdCksIGRvY0Nvb2tpZXNMaXN0KTsKKyAgICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRl
ZCA9IGNvb2tpZUphci5nZXRSYXdDb29raWVzKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9jQ29va2llc0xpc3QpOwogICAgICAg
ICAgICAgaWYgKCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsKICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2UgbmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBmb3IgdGhlIFN0cmluZyByZXByZXNl
bnRhdGlvbiBvZiBjb29raWVzLgogICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwpAQCAtNTQ3LDggKzU1MCw5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29r
aWUoRXIKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxV
UkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2llSmFy
IGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwogICAg
ICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2lu
KCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBXZWJDb3JlOjpkZWxl
dGVDb29raWUoZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVOYW1l
KTsKKyAgICAgICAgICAgIGNvb2tpZUphci5kZWxldGVDb29raWUoS1VSTChQYXJzZWRVUkxTdHJp
bmcsICppdCksIGNvb2tpZU5hbWUpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgRnJhbWVMb2Fk
ZXJDbGllbnRfaAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJUeXBlcy5oIgogI2luY2x1ZGUgIkljb25VUkwuaCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3Rv
bmVzLmgiCkBAIC02NCw2ICs2NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBDYWNoZWRGcmFtZTsKICAgICBjbGFz
cyBDb2xvcjsKKyAgICBjbGFzcyBDb29raWVKYXI7CiAgICAgY2xhc3MgRE9NV2luZG93RXh0ZW5z
aW9uOwogICAgIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKICAgICBjbGFzcyBEb2N1bWVudExvYWRl
cjsKQEAgLTM0OSw2ICszNTEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN0YXJ0VXNpbmdQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXIoUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyKikgeyB9CiAjZW5k
aWYKKworICAgICAgICB2aXJ0dWFsIENvb2tpZUphciBjb29raWVKYXIoKSB7IHJldHVybiBDb29r
aWVKYXIoKTsgfQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL05hdmlnYXRvci5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvTmF2aWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogCi0jaW5jbHVkZSAiQ29v
a2llSmFyLmgiCiAjaW5jbHVkZSAiRE9NTWltZVR5cGVBcnJheS5oIgogI2luY2x1ZGUgIkRPTVBs
dWdpbkFycmF5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTExOCw3ICsxMTcsNyBAQCBi
b29sIE5hdmlnYXRvcjo6Y29va2llRW5hYmxlZCgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWUtPnBh
Z2UoKSAmJiAhbV9mcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBjb29raWVzRW5hYmxlZChtX2ZyYW1l
LT5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Y29va2llc0Vu
YWJsZWQoKTsKIH0KIAogYm9vbCBOYXZpZ2F0b3I6OmphdmFFbmFibGVkKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCShyZXZpc2lvbiAxMzMxNjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsMTMgQEAKICNpZm5kZWYgQ29va2llSmFyX2gKICNkZWZpbmUgQ29va2llSmFyX2gKIAorI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KKyNl
bmRpZgorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCisj
ZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTMzLDIzICs0MCw1NCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBEb2N1bWVudDsKLSAgICBjbGFzcyBL
VVJMOworY2xhc3MgS1VSTDsKK3N0cnVjdCBDb29raWU7CiAKLSAgICBzdHJ1Y3QgQ29va2llOwor
Y2xhc3MgQ29va2llSmFyIHsKK3B1YmxpYzoKKyAgICBDb29raWVKYXIoKQorICAgIHsKKyNpZiBQ
TEFURk9STShDSFJPTUlVTSkKKyAgICAgICAgbV93ZWJDb29raWVKYXIgPSAwOworI2VuZGlmCisj
aWYgUExBVEZPUk0oUVQpCisgICAgICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSAwOworI2VuZGlm
CisgICAgfTsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBleHBsaWNpdCBDb29raWVKYXIo
V2ViS2l0OjpXZWJDb29raWVKYXIqIHdlYkNvb2tpZUphcikKKyAgICB7CisgICAgICAgIG1fd2Vi
Q29va2llSmFyID0gd2ViQ29va2llSmFyOworICAgIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShR
VCkKKyAgICBleHBsaWNpdCBDb29raWVKYXIoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCisg
ICAgeworICAgICAgICBtX25ldHdvcmtpbmdDb250ZXh0ID0gY29udGV4dDsKKyAgICB9OworI2Vu
ZGlmCiAKICAgICAvLyBjb29raWVzIG9taXRzIEh0dHBPbmx5IGNvb2tpZXMuCi0gICAgU3RyaW5n
IGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgU3RyaW5nIGNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwot
ICAgIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
KTsKLSAgICBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0gICAgYm9vbCBn
ZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+
Jik7Ci0gICAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwg
Y29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIGNvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0IEtV
UkwmKTsKKyAgICBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VS
TCYsIGNvbnN0IEtVUkwmKTsKKyAgICB2b2lkIHNldENvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0
IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IEtV
UkwmLCBjb25zdCBLVVJMJik7CisgICAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmLCBj
b25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKKyAgICB2b2lkIGRlbGV0ZUNvb2tpZShjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CiAKICAgICB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKICAgICB2b2lkIGRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKICAgICB2b2lkIGRlbGV0ZUFsbENv
b2tpZXMoKTsKIAotfQorcHJpdmF0ZToKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBXZWJL
aXQ6OldlYkNvb2tpZUphciogbV93ZWJDb29raWVKYXI7CisjZW5kaWYKKyNpZiBQTEFURk9STShR
VCkKKyAgICBOZXR3b3JraW5nQ29udGV4dCogbV9uZXR3b3JraW5nQ29udGV4dDsKKyNlbmRpZgor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCShyZXZpc2lv
biAxMzMxNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1
cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTQgKzc4LDYgQEAgc3RydWN0IEZvbnRSZW5k
ZXJTdHlsZTsKIAogY2xhc3MgUGxhdGZvcm1TdXBwb3J0IHsKIHB1YmxpYzoKLSAgICAvLyBDb29r
aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgc3RhdGljIFN0cmluZyBjb29raWVz
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyBTdHJpbmcgY29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0g
ICAgc3RhdGljIGJvb2wgcmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBW
ZWN0b3I8Q29va2llPiYpOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpOwotICAgIHN0YXRp
YyBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0KICAgICAvLyBGb250IC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogI2lmIE9TKFdJTkRPV1MpCiAgICAgc3RhdGljIGJvb2wgZW5zdXJlRm9udExvYWRlZChI
Rk9OVCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNr
VGltZVZpc3VhbENvbnRleHQuY3BwCShyZXZpc2lvbiAxMzMxNjApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFs
Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJD
b29raWVKYXIuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTI2OCw3ICsyNzAsNyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvCiAKICAgICBLVVJMIG1vdmllVVJMID0gS1VSTChLVVJM
KCksIHVybCk7CiAgICAgVmVjdG9yPENvb2tpZT4gZG9jdW1lbnRDb29raWVzOwotICAgIGlmICgh
Z2V0UmF3Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgbW92aWVVUkwsIGRvY3VtZW50Q29va2ll
cykpCisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5nZXRS
YXdDb29raWVzKG1vdmllVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9j
dW1lbnRDb29raWVzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yIChzaXplX3QgbmR4ID0g
MDsgbmR4IDwgZG9jdW1lbnRDb29raWVzLnNpemUoKTsgbmR4KyspIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkocmV2aXNpb24gMTMzMTYwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkod29ya2luZyBjb3B5KQpAQCAt
NzYsNyArNzYsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlckNvb2tpZXMoCiAg
ICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtOTUsNyArOTUsNyBAQCBTdHJpbmcg
Y29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVCiAgICAgcmV0dXJuIFN0cmluZygpOwog
fQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTExNCw3
ICsxMTQsNyBAQCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAg
cmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQordm9pZCBDb29raWVK
YXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9y
Q29va2llcywgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogCkBAIC0xMzIsMTUgKzEzMiwxNSBAQCB2b2lkIHNldENvb2tpZXMoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zCiAKICNpZiBVU0UoQ0ZVUkxTVE9SQUdFU0VTU0lPTlMpCiAg
ICAgaWYgKFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNvb2tpZVN0b3JhZ2Ug
PSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQotICAgICAgICB3a1NldEhUVFBDb29raWVz
Rm9yVVJMKGNmQ29va2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29r
aWVVUkwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICAgICAgd2tTZXRI
VFRQQ29va2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5n
ZXQoKSwgY29va2llVVJMLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiAgICAgZWxzZQogI2VuZGlm
Ci0gICAgICAgIFtbTlNIVFRQQ29va2llU3RvcmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0g
c2V0Q29va2llczpmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9j
dW1lbnRVUkw6ZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCldOworICAgICAgICBbW05T
SFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6Zmls
dGVyZWRDb29raWVzLmdldCgpIGZvclVSTDpjb29raWVVUkwgbWFpbkRvY3VtZW50VVJMOmZpcnN0
UGFydHlGb3JDb29raWVzXTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAK
LWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQorYm9vbCBDb29raWVKYXI6OmNv
b2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0
eUZvckNvb2tpZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAg
LTE1OCw3ICsxNTgsNyBAQCBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KikKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQ
YXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3
Q29va2llcy5jbGVhcigpOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKQEAgLTE5
MSw3ICsxOTEsNyBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit2b2lkIENvb2tpZUph
cjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1l
KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMjI1LDcgKzIyNSw3
IEBAIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhh
c2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dp
dGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKICAgICAKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lkIGdldEhvc3Ru
YW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAg
CkBAIC0yNTUsNyArMjU1LDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3Qg
U3RyaQogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQgZGVsZXRlQWxs
Q29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAJKHJldmlzaW9u
IDEzMzE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQ29va2llSmFy
Q0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlICJD
b29raWUuaCIKICNpbmNsdWRlICJDb29raWVTdG9yYWdlQ0ZOZXQuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgog
I2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCkBAIC05NSw3ICs5NCw3IEBAIHN0YXRpYyBSZXRhaW5Q
dHI8Q0ZBcnJheVJlZj4gZmlsdGVyQ29va2kKICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwog
fQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQogewogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81NjMyODgzPiBDRkhUVFBDb29raWVT
dG9yYWdlIHN0b3JlcyBhbiBlbXB0eSBjb29raWUsIHdoaWNoIHdvdWxkIGJlIHNlbnQgYXMgIkNv
b2tpZTogPSIuCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKQEAgLTEwNiw3ICsxMDUsNyBAQCB2
b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgICAgIHJldHVybjsK
IAogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsQ0YoQWRvcHRDRiwgdXJsLmNyZWF0ZUNGVVJM
KCkpOwotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9w
dENGLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5jcmVhdGVDRlVSTCgpKTsKKyAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JDb29raWVzQ0YoQWRvcHRDRiwgZmly
c3RQYXJ0eUZvckNvb2tpZXMuY3JlYXRlQ0ZVUkwoKSk7CiAKICAgICAvLyA8aHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxyZGFyOi8vNDQwOTAzND4KICAgICAv
LyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRvZXNuJ3QgcGFyc2UgY29va2llcyB3
aXRob3V0IGEgdmFsdWUKQEAgLTEyMyw3ICsxMjIsNyBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zCiAgICAgQ0ZIVFRQQ29va2llU3RvcmFnZVNldENvb2tpZXMoY29v
a2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyQ29va2llcyhjb29raWVzQ0YuZ2V0KCkpLmdldCgpLCB1
cmxDRi5nZXQoKSwgZmlyc3RQYXJ0eUZvckNvb2tpZXNDRi5nZXQoKSk7CiB9CiAKLVN0cmluZyBj
b29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0
cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZp
cnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAg
IGlmICghY29va2llU3RvcmFnZSkKQEAgLTEzNyw3ICsxMzYsNyBAQCBTdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCogLypkb2N1bWVuCiAgICAgcmV0dXJuIChDRlN0cmluZ1JlZilDRkRpY3Rp
b25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29raWVDRik7CiB9CiAKLVN0cmluZyBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCov
LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVT
dG9yYWdlKQpAQCAtMTUxLDcgKzE1MCw3IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShjb24KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChj
b25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLykKIHsKICAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5IHBvbGljeSA9IENG
SFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbjsK
ICAgICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2Ug
PSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQpAQCAtMTU5LDcgKzE1OCw3IEBAIGJvb2wg
Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG8KICAgICByZXR1cm4gcG9saWN5ID09
IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFp
biB8fCBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeUFsd2F5czsKIH0K
IAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVz
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAg
ICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwpAQCAtMTkzLDcgKzE5Miw3IEBAIGJvb2wgZ2V0UmF3
Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgbmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAg
IGlmICghY29va2llU3RvcmFnZSkKQEAgLTIxNCw3ICsyMTMsNyBAQCB2b2lkIGRlbGV0ZUNvb2tp
ZShjb25zdCBEb2N1bWVudCosIGNvbnN0CiAgICAgfQogfQogCi12b2lkIGdldEhvc3RuYW1lc1dp
dGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6Omdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAg
IFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVu
dENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0yMzIs
NyArMjMxLDcgQEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cgogICAg
IH0KIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3Ry
aW5nJiBob3N0bmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4g
Y29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFj
b29raWVTdG9yYWdlKQpAQCAtMjUxLDcgKzI1MCw3IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmkKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2
b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgUmV0YWluUHRyPENGSFRU
UENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3Rv
cmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiAxMzMxNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNTIgKzMyLDc0IEBACiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAKICNpbmNsdWRlICJDb29r
aWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5o
IgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWUuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29v
a2llSmFyLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlN0cmluZy5oPgorI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJVUkwuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoZG9jdW1l
bnQsIHVybCwgdmFsdWUpOworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJD
b29raWVKYXItPnNldENvb2tpZSh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzLCB2YWx1ZSk7CiB9
CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6
OmNvb2tpZXMoZG9jdW1lbnQsIHVybCk7CisgICAgaWYgKCFtX3dlYkNvb2tpZUphcikKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX3dlYkNvb2tpZUphci0+Y29va2llcyh1
cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQor
U3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICByZXR1cm4g
UGxhdGZvcm1TdXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwg
dXJsKTsKKyAgICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgcmV0dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZSh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAg
ICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxlZChkb2N1bWVudCk7CisgICAg
aWYgKCFtX3dlYkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBt
X3dlYkNvb2tpZUphci0+Y29va2llc0VuYWJsZWQodXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7
CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6
Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JD
b29raWVzLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKLSAgICByZXR1cm4gUGxhdGZv
cm1TdXBwb3J0OjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIHJhd0Nvb2tpZXMpOworICAgIHJh
d0Nvb2tpZXMuY2xlYXIoKTsKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNvb2tp
ZT4gd2ViQ29va2llczsKKworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93ZWJD
b29raWVKYXItPnJhd0Nvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcywgd2ViQ29va2ll
cyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBjb25zdCBXZWJLaXQ6OldlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29v
a2llc1tpXTsKKyAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwgd2ViQ29va2ll
LnZhbHVlLCB3ZWJDb29raWUuZG9tYWluLCB3ZWJDb29raWUucGF0aCwgd2ViQ29va2llLmV4cGly
ZXMsIHdlYkNvb2tpZS5odHRwT25seSwgd2ViQ29va2llLnNlY3VyZSwgd2ViQ29va2llLnNlc3Np
b24pOworICAgICAgICByYXdDb29raWVzLmFwcGVuZChjb29raWUpOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3ZvaWQgQ29va2ll
SmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5h
bWUpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGRvY3VtZW50
LCB1cmwsIGNvb2tpZU5hbWUpOworICAgIGlmIChtX3dlYkNvb2tpZUphcikKKyAgICAgICAgbV93
ZWJDb29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwogfQogCi12b2lkIGdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBD
b29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0
bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lk
IGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBD
b29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIC8qaG9zdG5h
bWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRl
bGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewog
ICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCShy
ZXZpc2lvbiAxMzMxNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q29va2llSmFyQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNs
dWRlICJDb29raWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtMjYsMzcgKzI1LDM3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tpZUph
cjsKK3N0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBzX2Nvb2tpZUphcjsKIAotdm9pZCBz
ZXRDb29raWVzKERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogewotICAgIGNvb2tpZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7CisgICAgc19j
b29raWVKYXIuc2V0KHVybC5zdHJpbmcoKSwgdmFsdWUpOwogfQogCi1TdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29v
a2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5
Rm9yQ29va2llcyovKQogewotICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7
CisgICAgcmV0dXJuIHNfY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOwogfQogCi1TdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQq
LywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JD
b29raWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llLgotICAg
IHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CisgICAgcmV0dXJuIHNfY29va2ll
SmFyLmdldCh1cmwuc3RyaW5nKCkpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERv
Y3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29u
c3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQog
ewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1l
bnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZp
cnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAg
IC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiAgICAgcmF3Q29va2llcy5jbGVhcigpOwog
ICAgIHJldHVybiBmYWxzZTsgLy8gcmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12
b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiAvKnVybCovLCBj
b25zdCBTdHJpbmcmIC8qY29va2llTmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGlt
cGxlbWVudGVkCiB9CkBAIC02OCwxNyArNjcsMTcgQEAgdm9pZCBzZXRDb29raWVTdG9yYWdlUHJp
dmF0ZUJyb3dzaW5nRW5hYgogfQogI2VuZGlmCiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1lcyovKQogewogICAgIC8v
IEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSovKQogewogICAgIC8vIEZJ
WE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2
b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5
ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
d2luL0Nvb2tpZUphcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcAkocmV2aXNpb24gMTMzMTYwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5k
bGUuaCIKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8V2luaW5ldC5oPgpAQCAtMzYs
MTUgKzM1LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBzZXRDb29raWVzKERv
Y3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKwordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0g
ICAgLy8gRklYTUU6IERlYWwgd2l0aCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS4K
KyAgICAvLyBGSVhNRTogRGVhbCB3aXRoIGZpcnN0UGFydHlGb3JDb29raWVzLgogICAgIFN0cmlu
ZyBzdHIgPSB1cmwuc3RyaW5nKCk7CiAgICAgU3RyaW5nIHZhbCA9IHZhbHVlOwogICAgIEludGVy
bmV0U2V0Q29va2llKHN0ci5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2YWwu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29r
aWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlG
b3JDb29raWVzKi8pCiB7CiAgICAgU3RyaW5nIHN0ciA9IHVybC5zdHJpbmcoKTsKIApAQCAtNjMs
NDAgKzYzLDQwIEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW4KICAg
ICByZXR1cm4gU3RyaW5nOjphZG9wdChidWZmZXIpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewogICAgIC8v
IEZJWE1FOiBpbmNsdWRlIEh0dHBPbmx5IGNvb2tpZQotICAgIHJldHVybiBjb29raWVzKGRvY3Vt
ZW50LCB1cmwpOworICAgIHJldHVybiBjb29raWVzKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMp
OwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8p
Citib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29u
c3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVj
dG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3Q29va2llcyhj
b25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8s
IFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGlt
cGxlbWVudGVkCiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsgLy8g
cmV0dXJuIHRydWUgd2hlbiBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBTdHJpbmcmIC8qY29va2ll
TmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQg
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lk
IENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhv
c3RuYW1lcyovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZv
aWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lk
IENvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0
bmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQg
ZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7
CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsOSArMzEsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2ll
SmFyLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5ldHdvcmtp
bmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgpAQCAtNDksMzEg
KzQ2LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIFNoYXJlZENvb2tpZUphclF0
KiBzX3NoYXJlZENvb2tpZUphclF0ID0gMDsKIAotc3RhdGljIE5ldHdvcmtpbmdDb250ZXh0KiBu
ZXR3b3JraW5nQ29udGV4dChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit2b2lkIENvb2tpZUph
cjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JD
b29raWVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGlmICghZG9jdW1lbnQpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIg
PSBmcmFtZS0+bG9hZGVyKCk7Ci0gICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBsb2FkZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgc2V0Q29v
a2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLXsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250
ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdD
b250ZXh0KQogICAgICAgICByZXR1cm47Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNv
bnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3Jr
Q29va2llSmFyKiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdl
cigpLT5jb29raWVKYXIoKTsKICAgICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuOwogCiAgICAg
UVVybCB1cmxGb3JDb29raWVzKHVybCk7Ci0gICAgUVVybCBmaXJzdFBhcnR5VXJsKGRvY3VtZW50
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xp
Y3lQZXJtaXRzKGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQorICAgIFFV
cmwgZmlyc3RQYXJ0eVVybChmaXJzdFBhcnR5Rm9yQ29va2llcyk7CisgICAgaWYgKCF0aGlyZFBh
cnR5Q29va2llUG9saWN5UGVybWl0cyhtX25ldHdvcmtpbmdDb250ZXh0LCB1cmxGb3JDb29raWVz
LCBmaXJzdFBhcnR5VXJsKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUUxpc3Q8UU5ldHdvcmtD
b29raWU+IGNvb2tpZXMgPSBRTmV0d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJpbmcodmFs
dWUpLnRvTGF0aW4xKCkpOwpAQCAtODgsMTYgKzcxLDE1IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBqYXItPnNldENvb2tpZXNGcm9tVXJsKGNvb2tpZXMs
IHVybEZvckNvb2tpZXMpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICBOZXR3
b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAg
ICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5l
dHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFy
KiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29r
aWVKYXIoKTsKIAogICAgIFFVcmwgdXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQ
YXJ0eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgaWYgKCF0aGly
ZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBh
cnR5VXJsKSkKKyAgICBRVXJsIGZpcnN0UGFydHlVcmwoZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwor
ICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMobV9uZXR3b3JraW5nQ29udGV4
dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKIAogICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9y
VXJsKHVybEZvckNvb2tpZXMpOwpAQCAtMTE0LDEyICs5NiwxMSBAQCBTdHJpbmcgY29va2llcyhj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQsCiAgICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihR
TGF0aW4xU3RyaW5nKCI7ICIpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQorU3RyaW5n
IENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYg
KCFjb250ZXh0KQorICAgIGlmICghbV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3Jr
QWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFy
ID0gbV9uZXR3b3JraW5nQ29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFy
KCk7CiAKICAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0Zv
clVybChRVXJsKHVybCkpOwogICAgIGlmIChjb29raWVzLmlzRW1wdHkoKSkKQEAgLTEzMiw0MSAr
MTEzLDQwIEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24KICAgICBy
ZXR1cm4gcmVzdWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1ib29s
IGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgQ29va2llSmFy
Ojpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0
UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBu
ZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQorICAgIGlmICgh
bV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBj
b250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICByZXR1cm4g
bV9uZXR3b3JraW5nQ29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7
CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVz
KGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMq
LywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAv
LyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNv
bnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUph
cjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29r
aWVOYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9p
ZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3Zv
aWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhv
c3RuYW1lcykKIHsKICAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFy
UXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+Z2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoaG9zdG5hbWVzKTsKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKICAgICBTaGFyZWRDb29raWVKYXJR
dCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAg
ICAgIGphci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKIH0KIAotdm9pZCBk
ZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsK
ICAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgp
OwogICAgIGlmIChqYXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJ
KHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTIsNyArMTM5Miw3IEBAIE5QRXJyb3IgUGx1Z2luVmll
dzo6Z2V0VmFsdWVGb3JVUkwoTlBOVVIKICAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7CiAgICAg
ICAgICAgICBGcmFtZSogZnJhbWUgPSBnZXRGcmFtZShwYXJlbnRGcmFtZSgpLCBtX2VsZW1lbnQp
OwogICAgICAgICAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ1N0cmlu
ZyBjb29raWVTdHIgPSBjb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCB1KS51dGY4KCk7CisgICAg
ICAgICAgICAgICAgY29uc3QgQ1N0cmluZyBjb29raWVTdHIgPSBmcmFtZS0+bG9hZGVyKCktPmNs
aWVudCgpLT5jb29raWVKYXIoKS5jb29raWVzKHUsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBh
cnR5Rm9yQ29va2llcygpKS51dGY4KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFjb29raWVTdHIu
aXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHNpemUgPSBjb29raWVT
dHIubGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGNo
YXIqPihOUE5fTWVtQWxsb2Moc2l6ZSsxKSk7CkBAIC0xNDU0LDcgKzE0NTQsNyBAQCBOUEVycm9y
IFBsdWdpblZpZXc6OnNldFZhbHVlRm9yVVJMKE5QTlVSCiAgICAgICAgICAgICBjb25zdCBTdHJp
bmcgY29va2llU3RyID0gU3RyaW5nOjpmcm9tVVRGOCh2YWx1ZSwgbGVuKTsKICAgICAgICAgICAg
IEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7CiAgICAg
ICAgICAgICBpZiAoZnJhbWUgJiYgIWNvb2tpZVN0ci5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgc2V0Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSwgY29va2llU3RyKTsKKyAgICAgICAg
ICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVz
KHUsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVTdHIp
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJM
OwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzE4NCkKKysrIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisy
MDEyLTExLTAxICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbQ2hyb21pdW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9y
bVN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJh
dGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OmdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQWxs
Q29va2llcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3Ojpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdl
YktpdDo6UGx1Z2luVmlldzo6c2V0Q29va2llc0ZvclVSTCk6CisKIDIwMTItMTEtMDEgIEh1YW5n
IERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgQ29vcmRpbmF0
ZWQgR3JhcGhpY3M6IENsZWFuIHVwIGhlYWRlcnMgb2YgQ29vcmRpbmF0ZWQgR3JhcGhpY3MuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Db29raWVzL1dlYkNv
b2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxMzMxNjApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDcgKzU3LDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIb3N0bmFtZXNXaXRoQwogCiAg
ICAgSGFzaFNldDxTdHJpbmc+IGhvc3RuYW1lczsKIAotICAgIFdlYkNvcmU6OmdldEhvc3RuYW1l
c1dpdGhDb29raWVzKGhvc3RuYW1lcyk7CisgICAgV2ViQ29yZTo6Q29va2llSmFyKCkuZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IGhvc3Ru
YW1lTGlzdDsKICAgICBjb3B5VG9WZWN0b3IoaG9zdG5hbWVzLCBob3N0bmFtZUxpc3QpOwpAQCAt
NjksMTQgKzY5LDE0IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0ZvckgK
IHsKICAgICBXZWJQcm9jZXNzOjpMb2NhbFRlcm1pbmF0aW9uRGlzYWJsZXIgdGVybWluYXRpb25E
aXNhYmxlcihXZWJQcm9jZXNzOjpzaGFyZWQoKSk7CiAKLSAgICBXZWJDb3JlOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoaG9zdG5hbWUpOworICAgIFdlYkNvcmU6OkNvb2tpZUphcigpLmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZShob3N0bmFtZSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
cjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgV2ViUHJvY2Vzczo6TG9jYWxUZXJtaW5hdGlv
bkRpc2FibGVyIHRlcm1pbmF0aW9uRGlzYWJsZXIoV2ViUHJvY2Vzczo6c2hhcmVkKCkpOwogCi0g
ICAgV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llcygpOworICAgIFdlYkNvcmU6OkNvb2tpZUphcigp
LmRlbGV0ZUFsbENvb2tpZXMoKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzA5LDEyICsxMzA5LDE5IEBAIFN0cmluZyBQbHVnaW5WaWV3Ojpwcm94aWVzRm9yVVJM
KGNvbnN0IFMKIAogU3RyaW5nIFBsdWdpblZpZXc6OmNvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpCiB7Ci0gICAgcmV0dXJuIGNvb2tpZXMobV9wbHVnaW5FbGVtZW50LT5kb2N1
bWVudCgpLCBLVVJMKEtVUkwoKSwgdXJsU3RyaW5nKSk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICByZXR1cm4gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2ll
cyhLVVJMKEtVUkwoKSwgdXJsU3RyaW5nKSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVz
KCkpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OnNldENvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQogewotICAgIHNldENvb2tp
ZXMobV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLCBLVVJMKEtVUkwoKSwgdXJsU3RyaW5nKSwg
Y29va2llU3RyaW5nKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX3BsdWdpbkVsZW1lbnQt
PmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAg
aWYgKGZyYW1lKQorICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIo
KS5zZXRDb29raWVzKEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSwgY29va2llU3RyaW5nKTsKIH0KIAogYm9vbCBQbHVnaW5WaWV3OjpnZXRB
dXRoZW50aWNhdGlvbkluZm8oY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2Us
IFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFzc3dvcmQpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkocmV2aXNpb24gMTMzMTg0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMS0wMSAgTWFy
ayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBS
ZW1vdmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5m
b3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFz
ZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAg
ICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50SW1wbDo6Y29va2llSmFyKToKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJD
bGllbnRJbXBsLmg6CisgICAgICAgIChGcmFtZUxvYWRlckNsaWVudEltcGwpOgorICAgICAgICAq
IHNyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMTEt
MDEgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hy
b21pdW1dIEF2b2lkIGF0dGVtcHRpbmcgdG8gZGVmZXIgY29tbWl0cyB3aGVuIHRoZXkgYXJlIGFs
cmVhZHkgZGVmZXJyZWQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9h
ZGVyQ2xpZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY1MSw1ICsxNjUxLDE0IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpk
aXNwYXRjaFdpbGwKIH0KICNlbmRpZgogCitXZWJDb3JlOjpDb29raWVKYXIgRnJhbWVMb2FkZXJD
bGllbnRJbXBsOjpjb29raWVKYXIoKQoreworICAgIGlmICghbV93ZWJGcmFtZSB8fCAhbV93ZWJG
cmFtZS0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIoMCk7Cisg
ICAgV2ViQ29va2llSmFyKiB3ZWJDb29raWVKYXIgPSBtX3dlYkZyYW1lLT5jbGllbnQoKS0+Y29v
a2llSmFyKG1fd2ViRnJhbWUpOworICAgIGlmICghd2ViQ29va2llSmFyKQorICAgICAgICB3ZWJD
b29raWVKYXIgPSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNvb2tpZUphcigpOworICAg
IHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIod2ViQ29va2llSmFyKTsKK30KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRl
ckNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9G
cmFtZUxvYWRlckNsaWVudEltcGwuaAkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIyNSw2ICsyMjUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN0
YXJ0VXNpbmdQZWVyQ29ubmVjdGlvbkhhbmRsZXIoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb25I
YW5kbGVyKikgT1ZFUlJJREU7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29va2ll
SmFyIGNvb2tpZUphcigpIE9WRVJSSURFOworCiBwcml2YXRlOgogICAgIHZvaWQgbWFrZURvY3Vt
ZW50VmlldygpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1
cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRm
b3JtU3VwcG9ydC5jcHAJKHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw4NiArMTAw
LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1z
dGF0aWMgV2ViQ29va2llSmFyKiBnZXRDb29raWVKYXIoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
KQotewotICAgIFdlYkZyYW1lSW1wbCogZnJhbWVJbXBsID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJh
bWUoZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIGlmICghZnJhbWVJbXBsIHx8ICFmcmFtZUltcGwt
PmNsaWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUph
ciA9IGZyYW1lSW1wbC0+Y2xpZW50KCktPmNvb2tpZUphcihmcmFtZUltcGwpOwotICAgIGlmICgh
Y29va2llSmFyKQotICAgICAgICBjb29raWVKYXIgPSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50
KCktPmNvb2tpZUphcigpOwotICAgIHJldHVybiBjb29raWVKYXI7Ci19Ci0KLS8vIENvb2tpZXMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotdm9pZCBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgV2ViQ29va2llSmFyKiBjb29r
aWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAg
ICAgIGNvb2tpZUphci0+c2V0Q29va2llKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29r
aWVzKCksIHZhbHVlKTsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llcyhjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVz
dWx0OwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50
KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tp
ZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAg
U3RyaW5nIHJlc3VsdDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUph
cihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2ll
SmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBh
cnR5Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFBsYXRmb3Jt
U3VwcG9ydDo6cmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgcmF3Q29va2llcy5jbGVh
cigpOwotICAgIFdlYlZlY3RvcjxXZWJDb29raWU+IHdlYkNvb2tpZXM7Ci0KLSAgICBXZWJDb29r
aWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tp
ZUphcikKLSAgICAgICAgY29va2llSmFyLT5yYXdDb29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCksIHdlYkNvb2tpZXMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgV2ViQ29va2ll
JiB3ZWJDb29raWUgPSB3ZWJDb29raWVzW2ldOwotICAgICAgICBDb29raWUgY29va2llKHdlYkNv
b2tpZS5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS52YWx1ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICB3ZWJDb29raWUuZG9tYWluLAotICAgICAgICAgICAgICAgICAgICAg
IHdlYkNvb2tpZS5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5leHBpcmVz
LAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5odHRwT25seSwKLSAgICAgICAgICAg
ICAgICAgICAgICB3ZWJDb29raWUuc2VjdXJlLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNv
b2tpZS5zZXNzaW9uKTsKLSAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoY29va2llKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29r
aWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgY29va2llTmFtZSkKLXsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tp
ZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5k
ZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKTsKLX0KLQotYm9vbCBQbGF0Zm9ybVN1cHBvcnQ6
OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBib29sIHJl
c3VsdCA9IGZhbHNlOwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFy
KGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVK
YXItPmNvb2tpZXNFbmFibGVkKGRvY3VtZW50LT5jb29raWVVUkwoKSwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIC8vIEZvbnQgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogI2lmIE9TKFdJTkRPV1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMzMxODQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMS0wMSAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgY29va2llLXJlbGF0ZWQg
ZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5n
ZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRl
c2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OmdldENvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldENvb2tpZXMpOgorICAgICAgICAqIFBsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcg
Z2V0VmFyaWFibGU6Zm9yVVJMOnZhbHVlOmxlbmd0aDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3IHNldFZhcmlhYmxlOmZvclVSTDp2YWx1ZTpsZW5ndGg6XSk6CisKIDIwMTIt
MTAtMzEgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBG
aXggYnVpbGQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1
Z2luVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5l
dHNjYXBlUGx1Z2luVmlldy5tbQkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNlL1dlYktpdC9t
YWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTYx
LDYgKzYxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZS5oPiAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4gCisjaW1wb3J0IDxX
ZWJDb3JlL0ZyYW1lTG9hZGVyQ2xpZW50Lmg+IAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxQ
bHVnSW5FbGVtZW50Lmg+CkBAIC0yMjE2LDcgKzIyMTcsNyBAQCAtIChOUEVycm9yKWdldFZhcmlh
YmxlOihOUE5VUkxWYXJpYWJsZSl2CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSkp
IHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgY29va2llU3RyaW5nID0gY29va2llcyhmcmFtZS0+
ZG9jdW1lbnQoKSwgVVJMKTsgCisgICAgICAgICAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9
IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZXMoVVJMLCBmcmFt
ZS0+ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7IAogICAgICAgICAgICAgICAg
IENTdHJpbmcgY29va2llU3RyaW5nVVRGOCA9IGNvb2tpZVN0cmluZy51dGY4KCk7CiAgICAgICAg
ICAgICAgICAgaWYgKGNvb2tpZVN0cmluZ1VURjguaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOUEVSUl9HRU5FUklDX0VSUk9SOwpAQCAtMjI3MCw3ICsyMjcxLDcgQEAgLSAo
TlBFcnJvcilzZXRWYXJpYWJsZTooTlBOVVJMVmFyaWFibGUpdgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShb
c2VsZiB3ZWJGcmFtZV0pKSB7Ci0gICAgICAgICAgICAgICAgc2V0Q29va2llcyhmcmFtZS0+ZG9j
dW1lbnQoKSwgVVJMLCBjb29raWVTdHJpbmcpOworICAgICAgICAgICAgICAgIGZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLnNldENvb2tpZXMoVVJMLCBmcmFtZS0+ZG9jdW1l
bnQoKS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgY29va2llU3RyaW5nKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5z
dGFuY2VQcm94eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDEzMzE2MCkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQ
cm94eS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9Eb2N1bWVudExvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZUxvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlckNsaWVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvS1VS
TC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Qcm94eVNlcnZlci5oPgpAQCAtMTUxNSw3ICsxNTE2LDcg
QEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldENvbwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmll
dyB3ZWJGcmFtZV0pKSB7Ci0gICAgICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjb29raWVzKGZy
YW1lLT5kb2N1bWVudCgpLCB1cmwpOyAKKyAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGZy
YW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZXModXJsLCBmcmFtZS0+
ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7IAogICAgICAgICBXVEY6OkNTdHJp
bmcgY29va2llU3RyaW5nVVRGOCA9IGNvb2tpZVN0cmluZy51dGY4KCk7CiAgICAgICAgIGlmIChj
b29raWVTdHJpbmdVVEY4LmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTU0Myw3ICsxNTQ0LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldENv
bwogICAgICAgICBpZiAoIWNvb2tpZVN0cmluZykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCi0gICAgICAgIFdlYkNvcmU6OnNldENvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCks
IHVybCwgY29va2llU3RyaW5nKTsKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
Y29va2llSmFyKCkuc2V0Q29va2llcyh1cmwsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5
Rm9yQ29va2llcygpLCBjb29raWVTdHJpbmcpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzMxODQpCisrKyBTb3VyY2UvV2ViS2l0
L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTExLTAx
ICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21p
dW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25h
bCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4g
UGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNvb2tpZUphcik6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0Lmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50UXQpOgorCiAyMDEy
LTExLTAxICBTdGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzMxNDMuCkluZGV4OiBTb3VyY2UvV2ViS2l0
L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAJ
KHJldmlzaW9uIDEzMzE2MCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzYsNiArMTY3NiwxMyBA
QCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmVtaXRMb2FkRmluaXNoCiAgICAgZW1pdCBtX3dl
YkZyYW1lLT5sb2FkRmluaXNoZWQob2spOwogfQogCitXZWJDb3JlOjpDb29raWVKYXIgRnJhbWVM
b2FkZXJDbGllbnRRdDo6Y29va2llSmFyKCkKK3sKKyAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJh
bWUtPmxvYWRlcigpKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKDApOworICAg
IHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIobV9mcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtpbmdD
b250ZXh0KCkpOworfQorCiB9CiAKICNpbmNsdWRlICJtb2NfRnJhbWVMb2FkZXJDbGllbnRRdC5j
cHAiCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50UXQuaAkocmV2aXNpb24gMTMzMTYwKQorKysgU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRRdF9oCiAKIAorI2luY2x1
ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNTMsNiArNTQsNyBAQCBj
bGFzcyBRV2ViRnJhbWU7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlOworY2xhc3MgQ29va2llSmFyOwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7CiBj
bGFzcyBFbGVtZW50OwogY2xhc3MgRm9ybVN0YXRlOwpAQCAtMjI3LDYgKzIyOSw4IEBAIHB1Ymxp
YzoKIAogICAgIGNvbnN0IEtVUkwmIGxhc3RSZXF1ZXN0ZWRVcmwoKSBjb25zdCB7IHJldHVybiBt
X2xhc3RSZXF1ZXN0ZWRVcmw7IH0KIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29va2llSmFyIGNv
b2tpZUphcigpIE9WRVJSSURFOworCiAgICAgc3RhdGljIGJvb2wgZHVtcEZyYW1lTG9hZGVyQ2Fs
bGJhY2tzOwogICAgIHN0YXRpYyBib29sIGR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2s7CiAg
ICAgc3RhdGljIGJvb2wgZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRlckNhbGxiYWNrczsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172373</attachid>
            <date>2012-11-05 11:51:24 -0800</date>
            <delta_ts>2012-11-05 13:06:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99340-20121105144938.patch</filename>
            <type>text/plain</type>
            <size>58582</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxMi0xMS0wNSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xp
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAg
ICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29v
a2llRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OkNvb2tpZUphcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBw
b3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nv
b2tpZUphci5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0Vu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tp
ZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9Db29raWVKYXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2ll
SmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFs
bENvb2tpZXMpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6CisKIDIwMTItMTEtMDUgIEFsb2sgUHJpeWFkYXJz
aGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBQYXNzIGNhblBh
aW50TENEVGV4dCB0byBXZWJDb250ZW50TGF5ZXJDbGllbnQ6OnBhaW50Q29udGVudHMKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsOCBAQCBfX1pOM1dURjEw
U3RyaW5nSW1wbGN2UDhOU1N0cmluZ0V2CiBfX1pOM1dURjEyQXRvbWljU3RyaW5nM2FkZEVQSzEw
X19DRlN0cmluZwogX19aTjNXVEY2U3RyaW5nQzFFUDhOU1N0cmluZwogX19aTjNXVEY2U3RyaW5n
QzFFUEsxMF9fQ0ZTdHJpbmcKK19fWk43V2ViQ29yZTlDb29raWVKYXIxMHNldENvb2tpZXNFUktO
U180S1VSTEVTM19SS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTlDb29raWVKYXI3Y29va2ll
c0VSS05TXzRLVVJMRVMzXwogX19aTjdXZWJDb3JlMTBDbGllbnRSZWN0QzFFUktOU183SW50UmVj
dEUKIF9fWk43V2ViQ29yZTEwQ2xpZW50UmVjdEMxRXYKIF9fWk43V2ViQ29yZTEwQ3JlZGVudGlh
bEMxRVJLTjNXVEY2U3RyaW5nRVM0X05TXzIxQ3JlZGVudGlhbFBlcnNpc3RlbmNlRQpAQCAtODMs
NyArODUsNiBAQCBfX1pON1dlYkNvcmUxMFNjcm9sbFZpZXcyNHdpbmRvd1Jlc2l6ZXJSCiBfX1pO
N1dlYkNvcmUxMFNjcm9sbFZpZXc4YWRkQ2hpbGRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfNldpZGdl
dEVFRQogX19aTjdXZWJDb3JlMTBTaGFkb3dSb290NmNyZWF0ZUVQTlNfN0VsZW1lbnRFUmkKIF9f
Wk43V2ViQ29yZTEwZGVsZXRlRmlsZUVSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29yZTEwc2V0
Q29va2llc0VQTlNfOERvY3VtZW50RVJLTlNfNEtVUkxFUktOM1dURjZTdHJpbmdFCiBfX1pON1dl
YkNvcmUxMHRvRG9jdW1lbnRFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTExQml0bWFwSW1h
Z2VDMUVQN0NHSW1hZ2VQTlNfMTNJbWFnZU9ic2VydmVyRQogX19aTjdXZWJDb3JlMTFCaXRtYXBJ
bWFnZUMxRVBOU18xM0ltYWdlT2JzZXJ2ZXJFCkBAIC00NjUsNyArNDY2LDYgQEAgX19aTjdXZWJD
b3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktOU18xNQogX19aTjdXZWJDb3JlMTZWaXNpYmxlU2Vs
ZWN0aW9uQzFFUktOU18xNVZpc2libGVQb3NpdGlvbkViCiBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1
bGxNYXJrdXBFUEtOU180Tm9kZUUKIF9fWk43V2ViQ29yZTE2Y3JlYXRlRnVsbE1hcmt1cEVQS05T
XzVSYW5nZUUKLV9fWk43V2ViQ29yZTE2ZGVsZXRlQWxsQ29va2llc0V2CiBfX1pON1dlYkNvcmUx
NmVuY2xvc2luZ0ludFJlY3RFUktOU18yMEZyYWN0aW9uYWxMYXlvdXRSZWN0RQogX19aTjdXZWJD
b3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNfOUZsb2F0UmVjdEUKIF9fWk43V2ViQ29yZTE2aXNF
bmRPZlBhcmFncmFwaEVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5
Q3Jvc3NpbmdSdWxlRQpAQCAtNjI1LDcgKzYyNSw2IEBAIF9fWk43V2ViQ29yZTIzY3JlYXRlRnJh
Z21lbnRGcm9tTm9kZXNFUE4KIF9fWk43V2ViQ29yZTIzZGF0YUZvclVSTENvbXBvbmVudFR5cGVF
UDVOU1VSTGwKIF9fWk43V2ViQ29yZTIzZGVjb2RlSG9zdE5hbWVXaXRoUmFuZ2VFUDhOU1N0cmlu
ZzhfTlNSYW5nZQogX19aTjdXZWJDb3JlMjNlbmNvZGVIb3N0TmFtZVdpdGhSYW5nZUVQOE5TU3Ry
aW5nOF9OU1JhbmdlCi1fX1pON1dlYkNvcmUyM2dldEhvc3RuYW1lc1dpdGhDb29raWVzRVJOM1dU
RjdIYXNoU2V0SU5TMF82U3RyaW5nRU5TMF8xMFN0cmluZ0hhc2hFTlMwXzEwSGFzaFRyYWl0c0lT
Ml9FRUVFCiBfX1pON1dlYkNvcmUyNEJpbmFyeVByb3BlcnR5TGlzdFdyaXRlcjE3d3JpdGVQcm9w
ZXJ0eUxpc3RFdgogX19aTjdXZWJDb3JlMjRDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2UxMXNldFJl
c291cmNlRVBOU18xNENhY2hlZFJlc291cmNlRQogX19aTjdXZWJDb3JlMjRDb21wb3NlZFNoYWRv
d1RyZWVXYWxrZXIxMGZpcnN0Q2hpbGRFdgpAQCAtNjQ0LDcgKzY0Myw2IEBAIF9fWk43V2ViQ29y
ZTI0RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyQzIKIF9fWk43V2ViQ29yZTI0RnJhbWVEZXN0cnVj
dGlvbk9ic2VydmVyRDJFdgogX19aTjdXZWJDb3JlMjRjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBF
UE5TXzhEb2N1bWVudEVSS04zV1RGNlN0cmluZ0VTNV9OU18yN0ZyYWdtZW50U2NyaXB0aW5nUGVy
bWlzc2lvbkUKIF9fWk43V2ViQ29yZTI0ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzRVJLTjNXVEY2
U3RyaW5nRQotX19aTjdXZWJDb3JlMjRkZWxldGVDb29raWVzRm9ySG9zdG5hbWVFUktOM1dURjZT
dHJpbmdFCiBfX1pON1dlYkNvcmUyNGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbkVSS04zV1RGNlN0
cmluZ0UKIF9fWk43V2ViQ29yZTI0bm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkRQogX19aTjdXZWJD
b3JlMjVIaXN0b3J5UHJvcGVydHlMaXN0V3JpdGVyMTFyZWxlYXNlRGF0YUV2CkBAIC04ODAsNyAr
ODc4LDYgQEAgX19aTjdXZWJDb3JlN1J1bkxvb3A5VGltZXJCYXNlRDJFdgogX19aTjdXZWJDb3Jl
N1RleHRSdW4xOWFsbG93c1JvdW5kaW5nSGFja3NFdgogX19aTjdXZWJDb3JlN1RleHRSdW4yMXNf
YWxsb3dzUm91bmRpbmdIYWNrc0UKIF9fWk43V2ViQ29yZTdUZXh0UnVuMjJzZXRBbGxvd3NSb3Vu
ZGluZ0hhY2tzRWIKLV9fWk43V2ViQ29yZTdjb29raWVzRVBLTlNfOERvY3VtZW50RVJLTlNfNEtV
UkxFCiBfX1pON1dlYkNvcmU3anNBcnJheUVQTjNKU0M5RXhlY1N0YXRlRVBOU18xN0pTRE9NR2xv
YmFsT2JqZWN0RU4zV1RGMTBQYXNzUmVmUHRySU5TXzEzRE9NU3RyaW5nTGlzdEVFRQogX19aTjdX
ZWJDb3JlN21ha2VSR0JFaWlpCiBfX1pON1dlYkNvcmU3cmVwbGFjZUVSTjNXVEY2U3RyaW5nRVJL
TlNfMTdSZWd1bGFyRXhwcmVzc2lvbkVSS1MxXwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAkocmV2aXNpb24g
MTMzNTAwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENo
YW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzAsNyArNDMwLDcgQEAgYm9vbCBXZWJTb2Nr
ZXRDaGFubmVsOjpwcm9jZXNzQnVmZmVyKCkKICAgICAgICAgICAgIGlmIChtX2lkZW50aWZpZXIp
CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRSZWNlaXZlV2Vi
U29ja2V0SGFuZHNoYWtlUmVzcG9uc2UobV9kb2N1bWVudCwgbV9pZGVudGlmaWVyLCBtX2hhbmRz
aGFrZS0+c2VydmVySGFuZHNoYWtlUmVzcG9uc2UoKSk7CiAgICAgICAgICAgICBpZiAoIW1faGFu
ZHNoYWtlLT5zZXJ2ZXJTZXRDb29raWUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY29va2llc0VuYWJsZWQobV9kb2N1bWVudCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9k
b2N1bWVudC0+Y29va2llc0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgICAgICBFeGNlcHRp
b25Db2RlIGVjOyAvLyBFeGNlcHRpb24gKGZvciBzYW5kYm94ZWQgZG9jdW1lbnRzKSBpZ25vcmVk
LgogICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5zZXRDb29raWUobV9oYW5kc2hha2Ut
PnNlcnZlclNldENvb2tpZSgpLCBlYyk7CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHAJKHJldmlzaW9uIDEzMzUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw5IEBACiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJIVFRQSGVh
ZGVyTWFwLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRlICJLVVJMLmgiCkBA
IC0yMDAsNyArMjAzLDEwIEBAIENTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpjbGllbnRIYW5k
c2gKICAgICBLVVJMIHVybCA9IGh0dHBVUkxGb3JBdXRoZW50aWNhdGlvbkFuZENvb2tpZXMoKTsK
ICAgICBpZiAobV9jb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX2NvbnRleHQpOwotICAgICAgICBTdHJp
bmcgY29va2llID0gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7
CisgICAgICAgIFN0cmluZyBjb29raWU7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpOworICAgICAgICBpZiAoZnJhbWUpCisgICAgICAgICAgICBjb29raWUgPSBmcmFt
ZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKICAgICAgICAg
aWYgKCFjb29raWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgZmllbGRzLmFwcGVuZCgiQ29va2ll
OiAiICsgY29va2llKTsKICAgICAgICAgLy8gU2V0ICJDb29raWUyOiA8Y29va2llPiIgaWYgY29v
a2llcyAyIGV4aXN0cyBmb3IgdXJsPwpAQCAtMjQ5LDcgKzI1NSwxMiBAQCBQYXNzUmVmUHRyPFdl
YlNvY2tldEhhbmRzaGFrZVJlcXVlc3Q+IFdlCiAgICAgS1VSTCB1cmwgPSBodHRwVVJMRm9yQXV0
aGVudGljYXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYgKG1fY29udGV4dC0+aXNEb2N1bWVudCgp
KSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4o
bV9jb250ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAgICBTdHJpbmcgY29va2llOworICAgICAg
ICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAgICAgaWYgKGZyYW1lKSB7
CisgICAgICAgICAgICBDb29raWVKYXIgY29va2llSmFyID0gZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKS0+Y29va2llSmFyKCk7CisgICAgICAgICAgICBjb29raWUgPSBjb29raWVKYXIuY29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSk7CisgICAgICAgIH0KICAgICAgICAgaWYgKCFjb29raWUuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgcmVxdWVzdC0+YWRkSGVhZGVyRmllbGQoIkNvb2tpZSIsIGNvb2tpZSk7CiAgICAgICAg
IC8vIFNldCAiQ29va2llMjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBleGlzdHMgZm9yIHVybD8K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTMzNTAwKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgxNCw3ICszODE0
LDkgQEAgU3RyaW5nIERvY3VtZW50Ojpjb29raWUoRXhjZXB0aW9uQ29kZSYgZQogICAgIGlmIChj
b29raWVVUkwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICByZXR1
cm4gY29va2llcyh0aGlzLCBjb29raWVVUkwpOworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCkt
PmNvb2tpZUphcigpLmNvb2tpZXMoY29va2llVVJMLCB0aGlzLT5maXJzdFBhcnR5Rm9yQ29va2ll
cygpKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0Q29va2llKGNvbnN0IFN0cmluZyYgdmFsdWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMzgzNSw3ICszODM3LDIzIEBAIHZvaWQgRG9jdW1lbnQ6
OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHYKICAgICBpZiAoY29va2llVVJMLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0Q29va2llcyh0aGlzLCBjb29raWVVUkwsIHZhbHVl
KTsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKyAgICBmcmFtZSgpLT5sb2Fk
ZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLnNldENvb2tpZXMoY29va2llVVJMLCB0aGlzLT5m
aXJzdFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgRG9jdW1lbnQ6OmNvb2tp
ZXNFbmFibGVkKCkKK3sKKyAgICBpZiAoIXBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCFwYWdlKCktPnNldHRpbmdzKCktPmNvb2tpZUVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5j
b29raWVzRW5hYmxlZCh0aGlzLT5jb29raWVVUkwoKSwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSk7CiB9CiAKIFN0cmluZyBEb2N1bWVudDo6cmVmZXJyZXIoKSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDEzMzUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MTIsNiArODEyLDcgQEAgcHVibGljOgogCiAg
ICAgU3RyaW5nIGNvb2tpZShFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAgICAgdm9pZCBzZXRDb29r
aWUoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgY29va2llc0VuYWJs
ZWQoKTsKIAogICAgIFN0cmluZyByZWZlcnJlcigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkocmV2aXNpb24gMTMz
NTAwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDggQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25Db250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiR2VvbG9jYXRpb25FcnJvci5oIgpAQCAtNTA5LDkgKzUxMSwxMCBAQCB2b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvCiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBt
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KG1h
aW5GcmFtZSgpKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1l
bnQoKTsKICAgICAgICAgVmVjdG9yPEtVUkw+IGFsbFVSTHMgPSBhbGxSZXNvdXJjZXNVUkxzRm9y
RnJhbWUoZnJhbWUpOworICAgICAgICBDb29raWVKYXIgY29va2llSmFyID0gZnJhbWUtPmxvYWRl
cigpLT5jbGllbnQoKS0+Y29va2llSmFyKCk7CiAgICAgICAgIGZvciAoVmVjdG9yPEtVUkw+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IGFsbFVSTHMuYmVnaW4oKTsgaXQgIT0gYWxsVVJMcy5lbmQoKTsg
KytpdCkgewogICAgICAgICAgICAgVmVjdG9yPENvb2tpZT4gZG9jQ29va2llc0xpc3Q7Ci0gICAg
ICAgICAgICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBnZXRSYXdDb29raWVzKGRvY3VtZW50LCBL
VVJMKFBhcnNlZFVSTFN0cmluZywgKml0KSwgZG9jQ29va2llc0xpc3QpOworICAgICAgICAgICAg
cmF3Q29va2llc0ltcGxlbWVudGVkID0gY29va2llSmFyLmdldFJhd0Nvb2tpZXMoS1VSTChQYXJz
ZWRVUkxTdHJpbmcsICppdCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBkb2ND
b29raWVzTGlzdCk7CiAgICAgICAgICAgICBpZiAoIXJhd0Nvb2tpZXNJbXBsZW1lbnRlZCkgewog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGR1cGxpY2F0aW9uIGNoZWNraW5nIGZv
ciB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNvb2tpZXMuCiAgICAgICAgICAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC01NDcsOCArNTUwLDkgQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgVmVjdG9yPEtVUkw+IGFsbFVSTHMgPSBhbGxSZXNvdXJjZXNVUkxzRm9yRnJhbWUoZnJhbWUp
OworICAgICAgICBDb29raWVKYXIgY29va2llSmFyID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQo
KS0+Y29va2llSmFyKCk7CiAgICAgICAgIGZvciAoVmVjdG9yPEtVUkw+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGFsbFVSTHMuYmVnaW4oKTsgaXQgIT0gYWxsVVJMcy5lbmQoKTsgKytpdCkKLSAgICAg
ICAgICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJp
bmcsICppdCksIGNvb2tpZU5hbWUpOworICAgICAgICAgICAgY29va2llSmFyLmRlbGV0ZUNvb2tp
ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgKml0KSwgY29va2llTmFtZSk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGllbnQuaAkocmV2aXNpb24g
MTMzNTAwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5kZWYgRnJhbWVMb2FkZXJDbGllbnRf
aAogI2RlZmluZSBGcmFtZUxvYWRlckNsaWVudF9oCiAKKyNpbmNsdWRlICJDb29raWVKYXIuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiSWNvblVSTC5oIgogI2lu
Y2x1ZGUgIkxheW91dE1pbGVzdG9uZXMuaCIKQEAgLTY0LDYgKzY1LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogICAgIGNsYXNzIENh
Y2hlZEZyYW1lOwogICAgIGNsYXNzIENvbG9yOworICAgIGNsYXNzIENvb2tpZUphcjsKICAgICBj
bGFzcyBET01XaW5kb3dFeHRlbnNpb247CiAgICAgY2xhc3MgRE9NV3JhcHBlcldvcmxkOwogICAg
IGNsYXNzIERvY3VtZW50TG9hZGVyOwpAQCAtMzUzLDYgKzM1NSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICNpZiBFTkFCTEUoUkVRVUVTVF9BVVRPQ09NUExFVEUpCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRSZXF1ZXN0QXV0b2NvbXBsZXRlKFBhc3NSZWZQdHI8Rm9ybVN0YXRlPikgPSAwOwog
I2VuZGlmCisKKyAgICAgICAgdmlydHVhbCBDb29raWVKYXIgY29va2llSmFyKCkgeyByZXR1cm4g
Q29va2llSmFyKCk7IH0KICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDYgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKIAotI2luY2x1ZGUg
IkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRPTU1pbWVUeXBlQXJyYXkuaCIKICNpbmNsdWRlICJE
T01QbHVnaW5BcnJheS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC0xMTgsNyArMTE3LDcg
QEAgYm9vbCBOYXZpZ2F0b3I6OmNvb2tpZUVuYWJsZWQoKSBjb25zdAogICAgIGlmIChtX2ZyYW1l
LT5wYWdlKCkgJiYgIW1fZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+Y29va2llRW5hYmxlZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gY29va2llc0VuYWJsZWQobV9m
cmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPmNvb2tp
ZXNFbmFibGVkKCk7CiB9CiAKIGJvb2wgTmF2aWdhdG9yOjpqYXZhRW5hYmxlZCgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkocmV2aXNpb24gMTMzNTAwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDEzIEBACiAjaWZuZGVmIENvb2tpZUphcl9oCiAjZGVmaW5lIENvb2tpZUphcl9oCiAK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29va2llSmFyLmg+
CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5o
IgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0zMywyMyArNDAsNTQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgRG9jdW1lbnQ7Ci0gICAgY2xh
c3MgS1VSTDsKK2NsYXNzIEtVUkw7CitzdHJ1Y3QgQ29va2llOwogCi0gICAgc3RydWN0IENvb2tp
ZTsKK2NsYXNzIENvb2tpZUphciB7CitwdWJsaWM6CisgICAgQ29va2llSmFyKCkKKyAgICB7Cisj
aWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgICAgIG1fd2ViQ29va2llSmFyID0gMDsKKyNlbmRp
ZgorI2lmIFBMQVRGT1JNKFFUKQorICAgICAgICBtX25ldHdvcmtpbmdDb250ZXh0ID0gMDsKKyNl
bmRpZgorICAgIH07CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgZXhwbGljaXQgQ29va2ll
SmFyKFdlYktpdDo6V2ViQ29va2llSmFyKiB3ZWJDb29raWVKYXIpCisgICAgeworICAgICAgICBt
X3dlYkNvb2tpZUphciA9IHdlYkNvb2tpZUphcjsKKyAgICB9OworI2VuZGlmCisjaWYgUExBVEZP
Uk0oUVQpCisgICAgZXhwbGljaXQgQ29va2llSmFyKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0
KQorICAgIHsKKyAgICAgICAgbV9uZXR3b3JraW5nQ29udGV4dCA9IGNvbnRleHQ7CisgICAgfTsK
KyNlbmRpZgogCiAgICAgLy8gY29va2llcyBvbWl0cyBIdHRwT25seSBjb29raWVzLgotICAgIFN0
cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIFN0cmluZyBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
KTsKLSAgICB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJik7Ci0gICAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOwotICAgIGJv
b2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29v
a2llPiYpOwotICAgIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYsIGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBjb29raWVzKGNvbnN0IEtVUkwmLCBjb25z
dCBLVVJMJik7CisgICAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0
IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAgdm9pZCBzZXRDb29raWVzKGNvbnN0IEtVUkwmLCBj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBjb29raWVzRW5hYmxlZChjb25z
dCBLVVJMJiwgY29uc3QgS1VSTCYpOworICAgIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBLVVJM
JiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7CisgICAgdm9pZCBkZWxldGVDb29raWUo
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwogCiAgICAgdm9pZCBnZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7CiAgICAgdm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7CiAgICAgdm9pZCBkZWxldGVB
bGxDb29raWVzKCk7CiAKLX0KK3ByaXZhdGU6CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAg
V2ViS2l0OjpXZWJDb29raWVKYXIqIG1fd2ViQ29va2llSmFyOworI2VuZGlmCisjaWYgUExBVEZP
Uk0oUVQpCisgICAgTmV0d29ya2luZ0NvbnRleHQqIG1fbmV0d29ya2luZ0NvbnRleHQ7CisjZW5k
aWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaAkocmV2
aXNpb24gMTMzNTAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZv
cm1TdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDE0ICs3OCw2IEBAIHN0cnVjdCBGb250
UmVuZGVyU3R5bGU7CiAKIGNsYXNzIFBsYXRmb3JtU3VwcG9ydCB7CiBwdWJsaWM6Ci0gICAgLy8g
Q29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVzKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHN0YXRpYyBTdHJpbmcgY29v
a2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYp
OwotICAgIHN0YXRpYyBib29sIHJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJM
JiwgVmVjdG9yPENvb2tpZT4mKTsKLSAgICBzdGF0aWMgdm9pZCBkZWxldGVDb29raWUoY29uc3Qg
RG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKTsKLSAgICBz
dGF0aWMgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOwotCiAgICAgLy8gRm9u
dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KICNpZiBPUyhXSU5ET1dTKQogICAgIHN0YXRpYyBib29sIGVuc3VyZUZvbnRMb2Fk
ZWQoSEZPTlQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01l
ZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVR
dWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAkocmV2aXNpb24gMTMzNTAwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZp
c3VhbENvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVk
ZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJLVVJMLmgiCkBAIC0yNjgsNyArMjcwLDcgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDbwogCiAgICAgS1VSTCBtb3ZpZVVSTCA9IEtVUkwo
S1VSTCgpLCB1cmwpOwogICAgIFZlY3RvcjxDb29raWU+IGRvY3VtZW50Q29va2llczsKLSAgICBp
ZiAoIWdldFJhd0Nvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIG1vdmllVVJMLCBkb2N1bWVudENv
b2tpZXMpKQorICAgIGlmICghZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCku
Z2V0UmF3Q29va2llcyhtb3ZpZVVSTCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCks
IGRvY3VtZW50Q29va2llcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAoc2l6ZV90IG5k
eCA9IDA7IG5keCA8IGRvY3VtZW50Q29va2llcy5zaXplKCk7IG5keCsrKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0JKHJldmlzaW9uIDEzMzUwMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0JKHdvcmtpbmcgY29weSkK
QEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJDb29raWVz
KAogICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0
IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsK
ICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTkzLDcgKzkzLDcgQEAgU3Ry
aW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVQogICAgIHJldHVybiBTdHJpbmco
KTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlG
b3JDb29raWVzKi8pCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0x
MTAsNyArMTEwLDcgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbgog
ICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKK3ZvaWQgQ29v
a2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0
eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQogewogICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTI3LDE0ICsxMjcsMTQgQEAgdm9pZCBzZXRDb29raWVz
KERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIFJldGFpblB0cjxOU0FycmF5PiBmaWx0ZXJl
ZENvb2tpZXMgPSBmaWx0ZXJDb29raWVzKFtOU0hUVFBDb29raWUgY29va2llc1dpdGhSZXNwb25z
ZUhlYWRlckZpZWxkczpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OmNvb2tpZVN0
cmluZyBmb3JLZXk6QCJTZXQtQ29va2llIl0gZm9yVVJMOmNvb2tpZVVSTF0pOwogCiAgICAgaWYg
KFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjZkNvb2tpZVN0b3JhZ2UgPSBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQotICAgICAgICB3a1NldEhUVFBDb29raWVzRm9yVVJM
KGNmQ29va2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkws
IGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICAgICAgd2tTZXRIVFRQQ29v
a2llc0ZvclVSTChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwg
Y29va2llVVJMLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiAgICAgZWxzZQotICAgICAgICBbW05T
SFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0b3JhZ2VdIHNldENvb2tpZXM6Zmls
dGVyZWRDb29raWVzLmdldCgpIGZvclVSTDpjb29raWVVUkwgbWFpbkRvY3VtZW50VVJMOmRvY3Vt
ZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpXTsKKyAgICAgICAgW1tOU0hUVFBDb29raWVTdG9y
YWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBzZXRDb29raWVzOmZpbHRlcmVkQ29va2llcy5n
ZXQoKSBmb3JVUkw6Y29va2llVVJMIG1haW5Eb2N1bWVudFVSTDpmaXJzdFBhcnR5Rm9yQ29va2ll
c107CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi1ib29sIGNvb2tpZXNF
bmFibGVkKGNvbnN0IERvY3VtZW50KikKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChj
b25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8p
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0xNTAsNyArMTUwLDcg
QEAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1
cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nv
b2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVz
Ki8sIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIo
KTsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CkBAIC0xODEsNyArMTgxLDcgQEAg
Ym9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tp
ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKIHsKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTIxMSw3ICsyMTEsNyBAQCB2b2lkIGRlbGV0
ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4m
IGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNo
U2V0PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CiAgICAgCkBAIC0yMjQsNyArMjI0LDcgQEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyhIYXNoU2V0PFN0cgogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLXZvaWQg
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENv
b2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUp
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIApAQCAtMjQxLDcgKzI0
MSw3IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmkKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9p
ZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvQ29va2llSmFyQ0ZOZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3BwCShyZXZpc2lvbiAxMzM1MDApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5j
bHVkZSAiQ29va2llU3RvcmFnZUNGTmV0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTb2Z0
TGlua2luZy5oIgpAQCAtOTUsNyArOTQsNyBAQCBzdGF0aWMgUmV0YWluUHRyPENGQXJyYXlSZWY+
IGZpbHRlckNvb2tpCiAgICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKIH0KIAotdm9pZCBzZXRD
b29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAg
ICAvLyA8cmRhcjovL3Byb2JsZW0vNTYzMjg4Mz4gQ0ZIVFRQQ29va2llU3RvcmFnZSBzdG9yZXMg
YW4gZW1wdHkgY29va2llLCB3aGljaCB3b3VsZCBiZSBzZW50IGFzICJDb29raWU6ID0iLgogICAg
IGlmICh2YWx1ZS5pc0VtcHR5KCkpCkBAIC0xMDYsNyArMTA1LDcgQEAgdm9pZCBzZXRDb29raWVz
KERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgICAgICByZXR1cm47CiAKICAgICBSZXRhaW5Q
dHI8Q0ZVUkxSZWY+IHVybENGKEFkb3B0Q0YsIHVybC5jcmVhdGVDRlVSTCgpKTsKLSAgICBSZXRh
aW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JDb29raWVzQ0YoQWRvcHRDRiwgZG9jdW1lbnQt
PmZpcnN0UGFydHlGb3JDb29raWVzKCkuY3JlYXRlQ0ZVUkwoKSk7CisgICAgUmV0YWluUHRyPENG
VVJMUmVmPiBmaXJzdFBhcnR5Rm9yQ29va2llc0NGKEFkb3B0Q0YsIGZpcnN0UGFydHlGb3JDb29r
aWVzLmNyZWF0ZUNGVVJMKCkpOwogCiAgICAgLy8gPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY1MzE+LCA8cmRhcjovLzQ0MDkwMzQ+CiAgICAgLy8gY29va2llc1dpdGhS
ZXNwb25zZUhlYWRlckZpZWxkcyBkb2Vzbid0IHBhcnNlIGNvb2tpZXMgd2l0aG91dCBhIHZhbHVl
CkBAIC0xMjMsNyArMTIyLDcgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwg
Y29ucwogICAgIENGSFRUUENvb2tpZVN0b3JhZ2VTZXRDb29raWVzKGNvb2tpZVN0b3JhZ2UuZ2V0
KCksIGZpbHRlckNvb2tpZXMoY29va2llc0NGLmdldCgpKS5nZXQoKSwgdXJsQ0YuZ2V0KCksIGZp
cnN0UGFydHlGb3JDb29raWVzQ0YuZ2V0KCkpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBE
b2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFy
Ojpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29v
a2llcyovKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVT
dG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0
b3JhZ2UpCkBAIC0xMzcsNyArMTM2LDcgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQq
IC8qZG9jdW1lbgogICAgIHJldHVybiAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
aGVhZGVyQ0YuZ2V0KCksIHNfY29va2llQ0YpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYg
dXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAg
ICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJy
ZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTE1
MSw3ICsxNTAsNyBAQCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAg
ICAgcmV0dXJuIChDRlN0cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQo
KSwgc19jb29raWVDRik7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQq
IC8qZG9jdW1lbnQqLykKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJM
JiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAg
Q0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeSBwb2xpY3kgPSBDRkhUVFBDb29raWVTdG9y
YWdlQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW47CiAgICAgaWYgKFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRU
UENvb2tpZVN0b3JhZ2UoKSkKQEAgLTE1OSw3ICsxNTgsNyBAQCBib29sIGNvb2tpZXNFbmFibGVk
KGNvbnN0IERvY3VtZW50KiAvKmRvCiAgICAgcmV0dXJuIHBvbGljeSA9PSBDRkhUVFBDb29raWVT
dG9yYWdlQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW4gfHwgcG9saWN5ID09
IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lBbHdheXM7CiB9CiAKLWJvb2wgZ2V0UmF3
Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4m
IHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4m
IHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIFJldGFpblB0cjxD
RkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tp
ZVN0b3JhZ2UoKTsKQEAgLTE5Myw3ICsxOTIsNyBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqLCBjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2ll
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCit2
b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBuYW1lKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVT
dG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0
b3JhZ2UpCkBAIC0yMTQsNyArMjEzLDcgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1l
bnQqLCBjb25zdAogICAgIH0KIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNo
U2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKICAgICBSZXRhaW5QdHI8Q0ZI
VFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVT
dG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpAQCAtMjMyLDcgKzIzMSw3IEBAIHZv
aWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHIKICAgICB9CiB9CiAKLXZvaWQg
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENv
b2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUp
CiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2Ug
PSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkK
QEAgLTI1MSw3ICsyNTAsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBT
dHJpCiAgICAgfQogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdl
UmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBp
ZiAoIWNvb2tpZVN0b3JhZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2
aXNpb24gMTMzNTAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1
bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDUyICszMiw3NCBA
QAogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlIDxw
dWJsaWMvV2ViQ29va2llLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYkNvb2tpZUphci5oPgorI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJTdHJpbmcuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVVJMLmg+Cisj
aW5jbHVkZSA8cHVibGljL1dlYlZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUp
CiB7Ci0gICAgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29raWVzKGRvY3VtZW50LCB1cmwsIHZhbHVl
KTsKKyAgICBpZiAobV93ZWJDb29raWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5zZXRD
b29raWUodXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcywgdmFsdWUpOwogfQogCi1TdHJpbmcgY29v
a2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBD
b29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5
Rm9yQ29va2llcykKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzKGRvY3Vt
ZW50LCB1cmwpOworICAgIGlmICghbV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICByZXR1cm4gbV93ZWJDb29raWVKYXItPmNvb2tpZXModXJsLCBmaXJzdFBhcnR5
Rm9yQ29va2llcyk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVK
YXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
S1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9y
dDo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7CisgICAgaWYg
KCFtX3dlYkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBt
X3dlYkNvb2tpZUphci0+Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBmaXJzdFBh
cnR5Rm9yQ29va2llcyk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50KQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRm
b3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoZG9jdW1lbnQpOworICAgIGlmICghbV93ZWJDb29r
aWVKYXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV93ZWJDb29raWVKYXIt
PmNvb2tpZXNFbmFibGVkKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1ib29sIGdl
dFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZl
Y3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgVmVjdG9y
PENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6cmF3
Q29va2llcyhkb2N1bWVudCwgdXJsLCByYXdDb29raWVzKTsKKyAgICByYXdDb29raWVzLmNsZWFy
KCk7CisgICAgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJDb29raWU+IHdlYkNvb2tpZXM7
CisKKyAgICBpZiAobV93ZWJDb29raWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5yYXdD
b29raWVzKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIHdlYkNvb2tpZXMpOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Y29uc3QgV2ViS2l0OjpXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07CisgICAg
ICAgIENvb2tpZSBjb29raWUod2ViQ29va2llLm5hbWUsIHdlYkNvb2tpZS52YWx1ZSwgd2ViQ29v
a2llLmRvbWFpbiwgd2ViQ29va2llLnBhdGgsIHdlYkNvb2tpZS5leHBpcmVzLCB3ZWJDb29raWUu
aHR0cE9ubHksIHdlYkNvb2tpZS5zZWN1cmUsIHdlYkNvb2tpZS5zZXNzaW9uKTsKKyAgICAgICAg
cmF3Q29va2llcy5hcHBlbmQoY29va2llKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29v
a2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewotICAgIHJl
dHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgdXJsLCBjb29raWVO
YW1lKTsKKyAgICBpZiAobV93ZWJDb29raWVKYXIpCisgICAgICAgIG1fd2ViQ29va2llSmFyLT5k
ZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKTsKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRI
b3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7CiAg
ICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxl
dGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAgICAg
Ly8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVz
KCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhNRTog
Tm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAkocmV2aXNpb24gMTMzNTAw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSAiQ29va2llSmFy
LmgiCiAKICNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KQEAgLTI2LDM3ICsyNSwzNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBjb29raWVKYXI7CitzdGF0aWMgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gc19jb29raWVKYXI7CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwm
IC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBj
b29raWVKYXIuc2V0KHVybC5zdHJpbmcoKSwgdmFsdWUpOworICAgIHNfY29va2llSmFyLnNldCh1
cmwuc3RyaW5nKCksIHZhbHVlKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQq
IC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2ll
cyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykK
IHsKLSAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOworICAgIHJldHVybiBz
X2Nvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwm
IHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewog
ICAgIC8vIEZJWE1FOiBpbmNsdWRlIEh0dHBPbmx5IGNvb2tpZS4KLSAgICByZXR1cm4gY29va2ll
SmFyLmdldCh1cmwuc3RyaW5nKCkpOworICAgIHJldHVybiBzX2Nvb2tpZUphci5nZXQodXJsLnN0
cmluZygpKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkb2N1
bWVudCovKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8qdXJs
Ki8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nv
b2tpZXMoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29v
a2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICAvLyBGSVhNRTogTm90
IHlldCBpbXBsZW1lbnRlZAogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1cm4gZmFs
c2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29r
aWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQ29v
a2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgU3RyaW5nJiAv
KmNvb2tpZU5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpA
QCAtNjgsMTcgKzY3LDE3IEBAIHZvaWQgc2V0Q29va2llU3RvcmFnZVByaXZhdGVCcm93c2luZ0Vu
YWIKIH0KICNlbmRpZgogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVz
KEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHll
dCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb25zdCBTdHJpbmcmIC8qaG9zdG5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVk
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2lu
L0Nvb2tpZUphcldpbi5jcHAJKHJldmlzaW9uIDEzMzUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVk
ZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPFdpbmluZXQuaD4KQEAgLTM2LDE1ICszNSwxNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogLypkb2N1
bWVudCovLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisKK3ZvaWQgQ29v
a2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBh
cnR5Rm9yQ29va2llcyovLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIC8vIEZJWE1FOiBE
ZWFsIHdpdGggZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkuCisgICAgLy8gRklYTUU6
IERlYWwgd2l0aCBmaXJzdFBhcnR5Rm9yQ29va2llcy4KICAgICBTdHJpbmcgc3RyID0gdXJsLnN0
cmluZygpOwogICAgIFN0cmluZyB2YWwgPSB2YWx1ZTsKICAgICBJbnRlcm5ldFNldENvb2tpZShz
dHIuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgdmFsLmNoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uKCkpOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCog
Lypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVz
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQog
ewogICAgIFN0cmluZyBzdHIgPSB1cmwuc3RyaW5nKCk7CiAKQEAgLTYzLDQwICs2Myw0MCBAQCBT
dHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVuCiAgICAgcmV0dXJuIFN0cmlu
Zzo6YWRvcHQoYnVmZmVyKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENv
b2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKICAgICAvLyBGSVhNRTogaW5jbHVk
ZSBIdHRwT25seSBjb29raWUKLSAgICByZXR1cm4gY29va2llcyhkb2N1bWVudCwgdXJsKTsKKyAg
ICByZXR1cm4gY29va2llcyh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9vbCBj
b29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBDb29raWVK
YXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmly
c3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBnZXRS
YXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiBy
YXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgLyp1
cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2ll
PiYgcmF3Q29va2llcykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogICAg
IHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdo
ZW4gaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUo
Y29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsKICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1lc1dp
dGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6Omdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgLypob3N0bmFtZXMqLykKIHsK
ICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIC8qaG9zdG5hbWUqLykKIHsKICAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tp
ZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIC8vIEZJWE1F
OiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9Db29raWVKYXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvQ29va2llSmFyUXQuY3BwCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9Db29raWVKYXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDYg
QEAKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgog
I2luY2x1ZGUgIlRoaXJkUGFydHlDb29raWVzUXQuaCIKQEAgLTQ5LDMxICs0NiwxNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBTaGFyZWRDb29raWVKYXJRdCogc19zaGFyZWRDb29r
aWVKYXJRdCA9IDA7CiAKLXN0YXRpYyBOZXR3b3JraW5nQ29udGV4dCogbmV0d29ya2luZ0NvbnRl
eHQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gMDsK
LSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRl
cigpOwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbG9h
ZGVyLT5uZXR3b3JraW5nQ29udGV4dCgpOwotfQotCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
TmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7
Ci0gICAgaWYgKCFjb250ZXh0KQorICAgIGlmICghbV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAg
ICAgcmV0dXJuOwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3Jr
QWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFy
ID0gbV9uZXR3b3JraW5nQ29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFy
KCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIFFVcmwgdXJsRm9yQ29v
a2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZv
ckNvb2tpZXMoKSk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhjb250
ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKKyAgICBRVXJsIGZpcnN0UGFydHlV
cmwoZmlyc3RQYXJ0eUZvckNvb2tpZXMpOworICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGlj
eVBlcm1pdHMobV9uZXR3b3JraW5nQ29udGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVy
bCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVz
ID0gUU5ldHdvcmtDb29raWU6OnBhcnNlQ29va2llcyhRU3RyaW5nKHZhbHVlKS50b0xhdGluMSgp
KTsKQEAgLTg4LDE2ICs3MSwxNSBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zCiAgICAgamFyLT5zZXRDb29raWVzRnJvbVVybChjb29raWVzLCB1cmxGb3JDb29raWVz
KTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0
KQorICAgIGlmICghbV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFu
YWdlcigpLT5jb29raWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gbV9uZXR3
b3JraW5nQ29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CiAKICAg
ICBRVXJsIHVybEZvckNvb2tpZXModXJsKTsKLSAgICBRVXJsIGZpcnN0UGFydHlVcmwoZG9jdW1l
bnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBv
bGljeVBlcm1pdHMoY29udGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCisgICAg
UVVybCBmaXJzdFBhcnR5VXJsKGZpcnN0UGFydHlGb3JDb29raWVzKTsKKyAgICBpZiAoIXRoaXJk
UGFydHlDb29raWVQb2xpY3lQZXJtaXRzKG1fbmV0d29ya2luZ0NvbnRleHQsIHVybEZvckNvb2tp
ZXMsIGZpcnN0UGFydHlVcmwpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBRTGlz
dDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0ZvclVybCh1cmxGb3JDb29r
aWVzKTsKQEAgLTExNCwxMiArOTYsMTEgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50LAogICAgIHJldHVybiByZXN1bHRDb29raWVzLmpvaW4oUUxhdGluMVN0cmluZygi
OyAiKSk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwgJnVybCkKK1N0cmluZyBDb29raWVKYXI6OmNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYg
LypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKKyAg
ICBpZiAoIW1fbmV0d29ya2luZ0NvbnRleHQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIo
KS0+Y29va2llSmFyKCk7CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IG1fbmV0d29ya2lu
Z0NvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwogCiAgICAgUUxp
c3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwoUVVybCh1cmwp
KTsKICAgICBpZiAoY29va2llcy5pc0VtcHR5KCkpCkBAIC0xMzIsNDEgKzExMyw0MCBAQCBTdHJp
bmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIHJlc3VsdENv
b2tpZXMuam9pbihRTGF0aW4xU3RyaW5nKCI7ICIpKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxl
ZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJs
ZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2ll
cyovKQogewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRl
eHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKKyAgICBpZiAoIW1fbmV0d29ya2luZ0Nv
bnRleHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gY29udGV4dC0+bmV0d29y
a0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CisgICAgcmV0dXJuIG1fbmV0d29ya2luZ0Nv
bnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwogfQogCi1ib29sIGdl
dFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4m
IHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiAv
KnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29r
aWU+JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiAg
ICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsgLy8gcmV0dXJuIHRydWUg
d2hlbiBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tp
ZShjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBTdHJpbmcmIC8qY29va2llTmFtZSovKQogewog
ICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAg
ICAgU2hhcmVkQ29va2llSmFyUXQqIGphciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsK
ICAgICBpZiAoamFyKQogICAgICAgICBqYXItPmdldEhvc3RuYW1lc1dpdGhDb29raWVzKGhvc3Ru
YW1lcyk7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYg
aG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0
IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgU2hhcmVkQ29va2llSmFyUXQqIGphciA9IFNoYXJl
ZENvb2tpZUphclF0OjpzaGFyZWQoKTsKICAgICBpZiAoamFyKQogICAgICAgICBqYXItPmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZShob3N0bmFtZSk7CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2ll
cygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgU2hhcmVkQ29v
a2llSmFyUXQqIGphciA9IFNoYXJlZENvb2tpZUphclF0OjpzaGFyZWQoKTsKICAgICBpZiAoamFy
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxMzM1
MDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzkyLDcgKzEzOTIsNyBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmdldFZhbHVlRm9y
VVJMKE5QTlVSCiAgICAgICAgIGlmICh1LmlzVmFsaWQoKSkgewogICAgICAgICAgICAgRnJhbWUq
IGZyYW1lID0gZ2V0RnJhbWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKICAgICAgICAgICAg
IGlmIChmcmFtZSkgewotICAgICAgICAgICAgICAgIGNvbnN0IENTdHJpbmcgY29va2llU3RyID0g
Y29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdSkudXRmOCgpOworICAgICAgICAgICAgICAgIGNv
bnN0IENTdHJpbmcgY29va2llU3RyID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2ll
SmFyKCkuY29va2llcyh1LCBmcmFtZS0+ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMo
KSkudXRmOCgpOwogICAgICAgICAgICAgICAgIGlmICghY29va2llU3RyLmlzTnVsbCgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBzaXplID0gY29va2llU3RyLmxlbmd0aCgpOwog
ICAgICAgICAgICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxjaGFyKj4oTlBOX01lbUFs
bG9jKHNpemUrMSkpOwpAQCAtMTQ1NCw3ICsxNDU0LDcgQEAgTlBFcnJvciBQbHVnaW5WaWV3Ojpz
ZXRWYWx1ZUZvclVSTChOUE5VUgogICAgICAgICAgICAgY29uc3QgU3RyaW5nIGNvb2tpZVN0ciA9
IFN0cmluZzo6ZnJvbVVURjgodmFsdWUsIGxlbik7CiAgICAgICAgICAgICBGcmFtZSogZnJhbWUg
PSBnZXRGcmFtZShwYXJlbnRGcmFtZSgpLCBtX2VsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGZy
YW1lICYmICFjb29raWVTdHIuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHNldENvb2tpZXMo
ZnJhbWUtPmRvY3VtZW50KCksIHUsIGNvb2tpZVN0cik7CisgICAgICAgICAgICAgICAgZnJhbWUt
PmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuc2V0Q29va2llcyh1LCBmcmFtZS0+ZG9j
dW1lbnQoKS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgY29va2llU3RyKTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICByZXN1bHQgPSBOUEVSUl9JTlZBTElEX1VSTDsKICAgICAgICAgYnJl
YWs7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0xMS0wNSAgTWFy
ayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBS
ZW1vdmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5m
b3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFz
ZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb29raWVNYW5hZ2VyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UGx1Z2luVmlldzo6Y29va2llc0ZvclVSTCk6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZp
ZXc6OnNldENvb2tpZXNGb3JVUkwpOgorCiAyMDEyLTExLTA1ICBZYWVsIEFoYXJvbiAgPHlhZWwu
YWhhcm9uQGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIEFsbG93IHVzaW5nIEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HIHdpdGhvdXQgQ09PUkRJTkFURURfR1JBUEhJQ1MKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFu
YWdlci5jcHAJKHJldmlzaW9uIDEzMzUwMCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Q29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmdldEhvc3RuYW1lc1dpdGhDCiAKICAgICBIYXNo
U2V0PFN0cmluZz4gaG9zdG5hbWVzOwogCi0gICAgV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoaG9zdG5hbWVzKTsKKyAgICBXZWJDb3JlOjpDb29raWVKYXIoKS5nZXRIb3N0bmFtZXNX
aXRoQ29va2llcyhob3N0bmFtZXMpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gaG9zdG5hbWVMaXN0
OwogICAgIGNvcHlUb1ZlY3Rvcihob3N0bmFtZXMsIGhvc3RuYW1lTGlzdCk7CkBAIC02OSwxNCAr
NjksMTQgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpkZWxldGVDb29raWVzRm9ySAogewogICAg
IFdlYlByb2Nlc3M6OkxvY2FsVGVybWluYXRpb25EaXNhYmxlciB0ZXJtaW5hdGlvbkRpc2FibGVy
KFdlYlByb2Nlc3M6OnNoYXJlZCgpKTsKIAotICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZShob3N0bmFtZSk7CisgICAgV2ViQ29yZTo6Q29va2llSmFyKCkuZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpkZWxl
dGVBbGxDb29raWVzKCkKIHsKICAgICBXZWJQcm9jZXNzOjpMb2NhbFRlcm1pbmF0aW9uRGlzYWJs
ZXIgdGVybWluYXRpb25EaXNhYmxlcihXZWJQcm9jZXNzOjpzaGFyZWQoKSk7CiAKLSAgICBXZWJD
b3JlOjpkZWxldGVBbGxDb29raWVzKCk7CisgICAgV2ViQ29yZTo6Q29va2llSmFyKCkuZGVsZXRl
QWxsQ29va2llcygpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnN0YXJ0T2JzZXJ2aW5n
Q29va2llQ2hhbmdlcygpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MDksMTIgKzEzMDksMTkgQEAgU3RyaW5nIFBsdWdpblZpZXc6OnByb3hpZXNGb3JVUkwoY29uc3Qg
UwogCiBTdHJpbmcgUGx1Z2luVmlldzo6Y29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0
cmluZykKIHsKLSAgICByZXR1cm4gY29va2llcyhtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCks
IEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX3Bs
dWdpbkVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJl
dHVybiBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVzKEtVUkwo
S1VSTCgpLCB1cmxTdHJpbmcpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9
CiAKIHZvaWQgUGx1Z2luVmlldzo6c2V0Q29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0
cmluZywgY29uc3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCiB7Ci0gICAgc2V0Q29va2llcyhtX3Bs
dWdpbkVsZW1lbnQtPmRvY3VtZW50KCksIEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpLCBjb29raWVT
dHJpbmcpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1l
bnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoZnJh
bWUpCisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLnNldENv
b2tpZXMoS1VSTChLVVJMKCksIHVybFN0cmluZyksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpLCBjb29raWVTdHJpbmcpOwogfQogCiBib29sIFBsdWdpblZpZXc6OmdldEF1dGhlbnRp
Y2F0aW9uSW5mbyhjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSwgU3RyaW5n
JiB1c2VybmFtZSwgU3RyaW5nJiBwYXNzd29yZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTExLTA1ICBNYXJrIFBpbGdy
aW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92ZSBj
b29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlv
biBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBw
ZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgKiBzcmMv
RnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJD
bGllbnRJbXBsOjpjb29raWVKYXIpOgorICAgICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudElt
cGwuaDoKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50SW1wbCk6CisgICAgICAgICogc3JjL1Bs
YXRmb3JtU3VwcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0xMS0wNSAgQWxv
ayBQcml5YWRhcnNoaSAgPGFsb2twQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1d
IFBhc3MgY2FuUGFpbnRMQ0RUZXh0IHRvIFdlYkNvbnRlbnRMYXllckNsaWVudDo6cGFpbnRDb250
ZW50cwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJ
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxv
YWRlckNsaWVudEltcGwuY3BwCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjYyLDQgKzE2NjIsMTQgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpZFJlcXVlc3RB
dQogfQogI2VuZGlmCiAKK1dlYkNvcmU6OkNvb2tpZUphciBGcmFtZUxvYWRlckNsaWVudEltcGw6
OmNvb2tpZUphcigpCit7CisgICAgaWYgKCFtX3dlYkZyYW1lIHx8ICFtX3dlYkZyYW1lLT5jbGll
bnQoKSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tpZUphcigwKTsKKyAgICBXZWJDb29r
aWVKYXIqIHdlYkNvb2tpZUphciA9IG1fd2ViRnJhbWUtPmNsaWVudCgpLT5jb29raWVKYXIobV93
ZWJGcmFtZSk7CisgICAgaWYgKCF3ZWJDb29raWVKYXIpCisgICAgICAgIHdlYkNvb2tpZUphciA9
IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y29va2llSmFyKCk7CisgICAgcmV0dXJuIFdl
YkNvcmU6OkNvb2tpZUphcih3ZWJDb29raWVKYXIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVy
Q2xpZW50SW1wbC5oCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDYgKzIy
OSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVxdWVzdEF1dG9jb21wbGV0ZShQ
YXNzUmVmUHRyPFdlYkNvcmU6OkZvcm1TdGF0ZT4pIE9WRVJSSURFOwogI2VuZGlmCiAKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZUphciBjb29raWVKYXIoKSBPVkVSUklERTsKKwogcHJpdmF0
ZToKICAgICB2b2lkIG1ha2VEb2N1bWVudFZpZXcoKTsKIApJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMzM1MDApCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDAsODYgKzEwMCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFdlYkNvb2tpZUphciogZ2V0Q29va2llSmFyKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBXZWJGcmFtZUltcGwqIGZyYW1lSW1wbCA9
IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICBpZiAoIWZy
YW1lSW1wbCB8fCAhZnJhbWVJbXBsLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
V2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBmcmFtZUltcGwtPmNsaWVudCgpLT5jb29raWVKYXIo
ZnJhbWVJbXBsKTsKLSAgICBpZiAoIWNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyID0gV2Vi
S2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jb29raWVKYXIoKTsKLSAgICByZXR1cm4gY29va2ll
SmFyOwotfQotCi0vLyBDb29raWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgUGxhdGZvcm1TdXBwb3J0
OjpzZXRDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlKQotewot
ICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAg
ICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXItPnNldENvb2tpZSh1cmwsIGRvY3Vt
ZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBQbGF0Zm9y
bVN1cHBvcnQ6OmNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwpCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9
IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVz
dWx0ID0gY29va2llSmFyLT5jb29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29r
aWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6
OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgS1VSTCYgdXJsKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgV2ViQ29va2llSmFyKiBj
b29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0g
ICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
dXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotYm9vbCBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQot
ewotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBXZWJWZWN0b3I8V2ViQ29va2llPiB3ZWJD
b29raWVzOwotCi0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9j
dW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+cmF3Q29va2ll
cyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB3ZWJDb29raWVzKTsKLQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IFdlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29va2llc1tpXTsKLSAgICAg
ICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICB3
ZWJDb29raWUudmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmRvbWFpbiwK
LSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUucGF0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICB3ZWJDb29raWUuZXhwaXJlcywKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUu
aHR0cE9ubHksCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlY3VyZSwKLSAgICAg
ICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2Vzc2lvbik7Ci0gICAgICAgIHJhd0Nvb2tpZXMu
YXBwZW5kKGNvb2tpZSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFBsYXRm
b3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCi17Ci0gICAgV2ViQ29va2llSmFy
KiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIp
Ci0gICAgICAgIGNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7Ci19Ci0K
LWJvb2wgUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBXZWJDb29raWVKYXIqIGNv
b2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAg
ICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzRW5hYmxlZChkb2N1bWVudC0+Y29va2ll
VVJMKCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCiAvLyBGb250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICNpZiBPUyhXSU5ET1dTKQpJbmRl
eDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTMzNTAwKQorKysgU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMTEtMDUgIE1h
cmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0g
UmVtb3ZlIGNvb2tpZS1yZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGlu
Zm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVh
c2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAg
ICAqIFBsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbToKKyAgICAg
ICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRDb29raWVzKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRDb29raWVzKToK
KyAgICAgICAgKiBQbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbToKKyAgICAgICAgKC1b
V2ViTmV0c2NhcGVQbHVnaW5WaWV3IGdldFZhcmlhYmxlOmZvclVSTDp2YWx1ZTpsZW5ndGg6XSk6
CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBzZXRWYXJpYWJsZTpmb3JVUkw6dmFs
dWU6bGVuZ3RoOl0pOgorCiAyMDEyLTExLTAzICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBw
bGUuY29tPgogCiAgICAgICAgIEdldCByaWQgb2YgVVNFKENGVVJMU1RPUkFHRVNFU1NJT05TKQpJ
bmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdp
blZpZXcubW0JKHJldmlzaW9uIDEzMzUwMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMv
V2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBA
CiAjaW1wb3J0IDxXZWJDb3JlL0VsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4g
CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+IAorI2ltcG9ydCA8V2ViQ29yZS9GcmFt
ZUxvYWRlckNsaWVudC5oPiAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVUcmVlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MUGx1Z0luRWxlbWVu
dC5oPgpAQCAtMjIxNiw3ICsyMjE3LDcgQEAgLSAoTlBFcnJvcilnZXRWYXJpYWJsZTooTlBOVVJM
VmFyaWFibGUpdgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0pKSB7Ci0gICAgICAg
ICAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGNvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCks
IFVSTCk7IAorICAgICAgICAgICAgICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBmcmFtZS0+bG9h
ZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVzKFVSTCwgZnJhbWUtPmRvY3VtZW50
KCktPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOyAKICAgICAgICAgICAgICAgICBDU3RyaW5nIGNv
b2tpZVN0cmluZ1VURjggPSBjb29raWVTdHJpbmcudXRmOCgpOwogICAgICAgICAgICAgICAgIGlm
IChjb29raWVTdHJpbmdVVEY4LmlzTnVsbCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
TlBFUlJfR0VORVJJQ19FUlJPUjsKQEAgLTIyNzAsNyArMjI3MSw3IEBAIC0gKE5QRXJyb3Ipc2V0
VmFyaWFibGU6KE5QTlVSTFZhcmlhYmxlKXYKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJh
bWVdKSkgewotICAgICAgICAgICAgICAgIHNldENvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIFVS
TCwgY29va2llU3RyaW5nKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVu
dCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVzKFVSTCwgZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0
UGFydHlGb3JDb29raWVzKCksIGNvb2tpZVN0cmluZyk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX05PX0VSUk9SOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHku
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHdv
cmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRM
b2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVMb2FkZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXJDbGllbnQuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRnJhbWVUcmVlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tVUkwuaD4KICNpbXBv
cnQgPFdlYkNvcmUvUHJveHlTZXJ2ZXIuaD4KQEAgLTE1MTUsNyArMTUxNiw3IEBAIGJvb2wgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpnZXRDb28KICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVd
KSkgewotICAgICAgICBTdHJpbmcgY29va2llU3RyaW5nID0gY29va2llcyhmcmFtZS0+ZG9jdW1l
bnQoKSwgdXJsKTsgCisgICAgICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBmcmFtZS0+bG9hZGVy
KCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVzKHVybCwgZnJhbWUtPmRvY3VtZW50KCkt
PmZpcnN0UGFydHlGb3JDb29raWVzKCkpOyAKICAgICAgICAgV1RGOjpDU3RyaW5nIGNvb2tpZVN0
cmluZ1VURjggPSBjb29raWVTdHJpbmcudXRmOCgpOwogICAgICAgICBpZiAoY29va2llU3RyaW5n
VVRGOC5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1NDMsNyArMTU0
NCw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRDb28KICAgICAgICAg
aWYgKCFjb29raWVTdHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAot
ICAgICAgICBXZWJDb3JlOjpzZXRDb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCB1cmwsIGNvb2tp
ZVN0cmluZyk7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigp
LnNldENvb2tpZXModXJsLCBmcmFtZS0+ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMo
KSwgY29va2llU3RyaW5nKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwkocmV2aXNpb24gMTMzNTAwKQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMS0wNSAgTWFyayBQaWxn
cmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUg
Y29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRp
b24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQg
cGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudFF0Ojpjb29raWVKYXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChGcmFtZUxvYWRlckNsaWVudFF0KToKKwogMjAxMi0xMS0wMSAgU3Rl
cGhlbiBXaGl0ZSAgPHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByMTMzMTQzLgpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiAx
MzM1MDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc2LDYgKzE2NzYsMTMgQEAgdm9pZCBGcmFt
ZUxvYWRlckNsaWVudFF0OjplbWl0TG9hZEZpbmlzaAogICAgIGVtaXQgbV93ZWJGcmFtZS0+bG9h
ZEZpbmlzaGVkKG9rKTsKIH0KIAorV2ViQ29yZTo6Q29va2llSmFyIEZyYW1lTG9hZGVyQ2xpZW50
UXQ6OmNvb2tpZUphcigpCit7CisgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5sb2FkZXIo
KSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tpZUphcigwKTsKKyAgICByZXR1cm4gV2Vi
Q29yZTo6Q29va2llSmFyKG1fZnJhbWUtPmxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpKTsK
K30KKwogfQogCiAjaW5jbHVkZSAibW9jX0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIgpJbmRleDog
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFF0LmgJKHJldmlzaW9uIDEzMzUwMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAjZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50UXRfaAogCiAKKyNpbmNsdWRlICJDb29raWVK
YXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTUzLDYgKzU0LDcgQEAgY2xhc3MgUVdlYkZy
YW1lOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZTsKK2NsYXNzIENvb2tpZUphcjsKIGNsYXNzIERvY3VtZW50TG9hZGVyOwogY2xhc3MgRWxlbWVu
dDsKIGNsYXNzIEZvcm1TdGF0ZTsKQEAgLTIyNyw2ICsyMjksOCBAQCBwdWJsaWM6CiAKICAgICBj
b25zdCBLVVJMJiBsYXN0UmVxdWVzdGVkVXJsKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UmVxdWVz
dGVkVXJsOyB9CiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZUphciBjb29raWVKYXIoKSBP
VkVSUklERTsKKwogICAgIHN0YXRpYyBib29sIGR1bXBGcmFtZUxvYWRlckNhbGxiYWNrczsKICAg
ICBzdGF0aWMgYm9vbCBkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrOwogICAgIHN0YXRpYyBi
b29sIGR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkZXJDYWxsYmFja3M7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172384</attachid>
            <date>2012-11-05 13:06:44 -0800</date>
            <delta_ts>2012-11-07 12:56:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99340-20121105160457.patch</filename>
            <type>text/plain</type>
            <size>58811</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMCBAQAorMjAxMi0xMS0wNSAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xp
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAg
ICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29v
a2llRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OkNvb2tpZUphcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBw
b3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nv
b2tpZUphci5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0Vu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tp
ZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b2tpZUphcjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9Db29raWVKYXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2ll
SmFyOjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFs
bENvb2tpZXMpOgorICAgICAgICAqIHBsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5WaWV3OjpzZXRWYWx1ZUZvclVSTCk6CisKIDIwMTItMTEtMDUgIEFsb2sgUHJpeWFkYXJz
aGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBQYXNzIGNhblBh
aW50TENEVGV4dCB0byBXZWJDb250ZW50TGF5ZXJDbGllbnQ6OnBhaW50Q29udGVudHMKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsMTEgQEAgX19aTjNXVEYx
MFN0cmluZ0ltcGxjdlA4TlNTdHJpbmdFdgogX19aTjNXVEYxMkF0b21pY1N0cmluZzNhZGRFUEsx
MF9fQ0ZTdHJpbmcKIF9fWk4zV1RGNlN0cmluZ0MxRVA4TlNTdHJpbmcKIF9fWk4zV1RGNlN0cmlu
Z0MxRVBLMTBfX0NGU3RyaW5nCitfX1pON1dlYkNvcmU5Q29va2llSmFyMTBzZXRDb29raWVzRVJL
TlNfNEtVUkxFUzNfUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmU5Q29va2llSmFyMTZkZWxl
dGVBbGxDb29raWVzRXYKK19fWk43V2ViQ29yZTlDb29raWVKYXIyM2dldEhvc3RuYW1lc1dpdGhD
b29raWVzRVJOM1dURjdIYXNoU2V0SU5TMV82U3RyaW5nRU5TMV8xMFN0cmluZ0hhc2hFTlMxXzEw
SGFzaFRyYWl0c0lTM19FRUVFCitfX1pON1dlYkNvcmU5Q29va2llSmFyMjRkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWVFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmU5Q29va2llSmFyN2Nvb2tp
ZXNFUktOU180S1VSTEVTM18KIF9fWk43V2ViQ29yZTEwQ2xpZW50UmVjdEMxRVJLTlNfN0ludFJl
Y3RFCiBfX1pON1dlYkNvcmUxMENsaWVudFJlY3RDMUV2CiBfX1pON1dlYkNvcmUxMENyZWRlbnRp
YWxDMUVSS04zV1RGNlN0cmluZ0VTNF9OU18yMUNyZWRlbnRpYWxQZXJzaXN0ZW5jZUUKQEAgLTgz
LDcgKzg4LDYgQEAgX19aTjdXZWJDb3JlMTBTY3JvbGxWaWV3MjR3aW5kb3dSZXNpemVyUgogX19a
TjdXZWJDb3JlMTBTY3JvbGxWaWV3OGFkZENoaWxkRU4zV1RGMTBQYXNzUmVmUHRySU5TXzZXaWRn
ZXRFRUUKIF9fWk43V2ViQ29yZTEwU2hhZG93Um9vdDZjcmVhdGVFUE5TXzdFbGVtZW50RVJpCiBf
X1pON1dlYkNvcmUxMGRlbGV0ZUZpbGVFUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxMHNl
dENvb2tpZXNFUE5TXzhEb2N1bWVudEVSS05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdX
ZWJDb3JlMTB0b0RvY3VtZW50RU4zSlNDN0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxMUJpdG1hcElt
YWdlQzFFUDdDR0ltYWdlUE5TXzEzSW1hZ2VPYnNlcnZlckUKIF9fWk43V2ViQ29yZTExQml0bWFw
SW1hZ2VDMUVQTlNfMTNJbWFnZU9ic2VydmVyRQpAQCAtNDY1LDcgKzQ2OSw2IEBAIF9fWk43V2Vi
Q29yZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVJLTlNfMTUKIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNl
bGVjdGlvbkMxRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FYgogX19aTjdXZWJDb3JlMTZjcmVhdGVG
dWxsTWFya3VwRVBLTlNfNE5vZGVFCiBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtO
U181UmFuZ2VFCi1fX1pON1dlYkNvcmUxNmRlbGV0ZUFsbENvb2tpZXNFdgogX19aTjdXZWJDb3Jl
MTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNfMjBGcmFjdGlvbmFsTGF5b3V0UmVjdEUKIF9fWk43V2Vi
Q29yZTE2ZW5jbG9zaW5nSW50UmVjdEVSS05TXzlGbG9hdFJlY3RFCiBfX1pON1dlYkNvcmUxNmlz
RW5kT2ZQYXJhZ3JhcGhFUktOU18xNVZpc2libGVQb3NpdGlvbkVOU18yN0VkaXRpbmdCb3VuZGFy
eUNyb3NzaW5nUnVsZUUKQEAgLTYyNSw3ICs2MjgsNiBAQCBfX1pON1dlYkNvcmUyM2NyZWF0ZUZy
YWdtZW50RnJvbU5vZGVzRVBOCiBfX1pON1dlYkNvcmUyM2RhdGFGb3JVUkxDb21wb25lbnRUeXBl
RVA1TlNVUkxsCiBfX1pON1dlYkNvcmUyM2RlY29kZUhvc3ROYW1lV2l0aFJhbmdlRVA4TlNTdHJp
bmc4X05TUmFuZ2UKIF9fWk43V2ViQ29yZTIzZW5jb2RlSG9zdE5hbWVXaXRoUmFuZ2VFUDhOU1N0
cmluZzhfTlNSYW5nZQotX19aTjdXZWJDb3JlMjNnZXRIb3N0bmFtZXNXaXRoQ29va2llc0VSTjNX
VEY3SGFzaFNldElOUzBfNlN0cmluZ0VOUzBfMTBTdHJpbmdIYXNoRU5TMF8xMEhhc2hUcmFpdHNJ
UzJfRUVFRQogX19aTjdXZWJDb3JlMjRCaW5hcnlQcm9wZXJ0eUxpc3RXcml0ZXIxN3dyaXRlUHJv
cGVydHlMaXN0RXYKIF9fWk43V2ViQ29yZTI0Q2FjaGVkUmVzb3VyY2VIYW5kbGVCYXNlMTFzZXRS
ZXNvdXJjZUVQTlNfMTRDYWNoZWRSZXNvdXJjZUUKIF9fWk43V2ViQ29yZTI0Q29tcG9zZWRTaGFk
b3dUcmVlV2Fsa2VyMTBmaXJzdENoaWxkRXYKQEAgLTY0NCw3ICs2NDYsNiBAQCBfX1pON1dlYkNv
cmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckMyCiBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1
Y3Rpb25PYnNlcnZlckQyRXYKIF9fWk43V2ViQ29yZTI0Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3Vw
RVBOU184RG9jdW1lbnRFUktOM1dURjZTdHJpbmdFUzVfTlNfMjdGcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb25FCiBfX1pON1dlYkNvcmUyNGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlc0VSS04zV1RG
NlN0cmluZ0UKLV9fWk43V2ViQ29yZTI0ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lRVJLTjNXVEY2
U3RyaW5nRQogX19aTjdXZWJDb3JlMjRmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25FUktOM1dURjZT
dHJpbmdFCiBfX1pON1dlYkNvcmUyNG5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZEUKIF9fWk43V2Vi
Q29yZTI1SGlzdG9yeVByb3BlcnR5TGlzdFdyaXRlcjExcmVsZWFzZURhdGFFdgpAQCAtODgwLDcg
Kzg4MSw2IEBAIF9fWk43V2ViQ29yZTdSdW5Mb29wOVRpbWVyQmFzZUQyRXYKIF9fWk43V2ViQ29y
ZTdUZXh0UnVuMTlhbGxvd3NSb3VuZGluZ0hhY2tzRXYKIF9fWk43V2ViQ29yZTdUZXh0UnVuMjFz
X2FsbG93c1JvdW5kaW5nSGFja3NFCiBfX1pON1dlYkNvcmU3VGV4dFJ1bjIyc2V0QWxsb3dzUm91
bmRpbmdIYWNrc0ViCi1fX1pON1dlYkNvcmU3Y29va2llc0VQS05TXzhEb2N1bWVudEVSS05TXzRL
VVJMRQogX19aTjdXZWJDb3JlN2pzQXJyYXlFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUds
b2JhbE9iamVjdEVOM1dURjEwUGFzc1JlZlB0cklOU18xM0RPTVN0cmluZ0xpc3RFRUUKIF9fWk43
V2ViQ29yZTdtYWtlUkdCRWlpaQogX19aTjdXZWJDb3JlN3JlcGxhY2VFUk4zV1RGNlN0cmluZ0VS
S05TXzE3UmVndWxhckV4cHJlc3Npb25FUktTMV8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9u
IDEzMzUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRD
aGFubmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBAIGJvb2wgV2ViU29j
a2V0Q2hhbm5lbDo6cHJvY2Vzc0J1ZmZlcigpCiAgICAgICAgICAgICBpZiAobV9pZGVudGlmaWVy
KQogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUmVjZWl2ZVdl
YlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKG1fZG9jdW1lbnQsIG1faWRlbnRpZmllciwgbV9oYW5k
c2hha2UtPnNlcnZlckhhbmRzaGFrZVJlc3BvbnNlKCkpOwogICAgICAgICAgICAgaWYgKCFtX2hh
bmRzaGFrZS0+c2VydmVyU2V0Q29va2llKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGNvb2tpZXNFbmFibGVkKG1fZG9jdW1lbnQpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1f
ZG9jdW1lbnQtPmNvb2tpZXNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYzsgLy8gRXhjZXB0aW9uIChmb3Igc2FuZGJveGVkIGRvY3VtZW50cykgaWdub3Jl
ZC4KICAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+c2V0Q29va2llKG1faGFuZHNoYWtl
LT5zZXJ2ZXJTZXRDb29raWUoKSwgZWMpOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5k
c2hha2UuY3BwCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiAr
MzksOSBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiSFRUUEhl
YWRlck1hcC5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpA
QCAtMjAwLDcgKzIwMywxMCBAQCBDU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFu
ZHNoCiAgICAgS1VSTCB1cmwgPSBodHRwVVJMRm9yQXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7
CiAgICAgaWYgKG1fY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9jb250ZXh0KTsKLSAgICAgICAgU3Ry
aW5nIGNvb2tpZSA9IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwp
OworICAgICAgICBTdHJpbmcgY29va2llOworICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVu
dC0+ZnJhbWUoKTsKKyAgICAgICAgaWYgKGZyYW1lKQorICAgICAgICAgICAgY29va2llID0gZnJh
bWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiAgICAgICAg
IGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoIkNvb2tp
ZTogIiArIGNvb2tpZSk7CiAgICAgICAgIC8vIFNldCAiQ29va2llMjogPGNvb2tpZT4iIGlmIGNv
b2tpZXMgMiBleGlzdHMgZm9yIHVybD8KQEAgLTI0OSw3ICsyNTUsMTIgQEAgUGFzc1JlZlB0cjxX
ZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0PiBXZQogICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1
dGhlbnRpY2F0aW9uQW5kQ29va2llcygpOwogICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQo
KSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KG1fY29udGV4dCk7Ci0gICAgICAgIFN0cmluZyBjb29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAgICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAg
ICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkg
eworICAgICAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPmNvb2tpZUphcigpOworICAgICAgICAgICAgY29va2llID0gY29va2llSmFyLmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29r
aWVzKCkpOworICAgICAgICB9CiAgICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIHJlcXVlc3QtPmFkZEhlYWRlckZpZWxkKCJDb29raWUiLCBjb29raWUpOwogICAgICAg
ICAvLyBTZXQgIkNvb2tpZTI6IDxjb29raWU+IiBpZiBjb29raWVzIDIgZXhpc3RzIGZvciB1cmw/
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEzMzUwMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MTQsNyArMzgx
NCw5IEBAIFN0cmluZyBEb2N1bWVudDo6Y29va2llKEV4Y2VwdGlvbkNvZGUmIGUKICAgICBpZiAo
Y29va2llVVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmV0
dXJuIGNvb2tpZXModGhpcywgY29va2llVVJMKTsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgp
LT5jb29raWVKYXIoKS5jb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHZhbHVl
LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTM4MzUsNyArMzgzNywyMyBAQCB2b2lkIERvY3VtZW50
OjpzZXRDb29raWUoY29uc3QgU3RyaW5nJiB2CiAgICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHNldENvb2tpZXModGhpcywgY29va2llVVJMLCB2YWx1
ZSk7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUoKS0+bG9h
ZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUpOworfQorCitib29sIERvY3VtZW50Ojpjb29r
aWVzRW5hYmxlZCgpCit7CisgICAgaWYgKCFwYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghcGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVFbmFibGVkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCku
Y29va2llc0VuYWJsZWQodGhpcy0+Y29va2llVVJMKCksIHRoaXMtPmZpcnN0UGFydHlGb3JDb29r
aWVzKCkpOwogfQogCiBTdHJpbmcgRG9jdW1lbnQ6OnJlZmVycmVyKCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODEyLDYgKzgxMiw3IEBAIHB1YmxpYzoKIAog
ICAgIFN0cmluZyBjb29raWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29v
a2llKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIGNvb2tpZXNFbmFi
bGVkKCk7CiAKICAgICBTdHJpbmcgcmVmZXJyZXIoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlzaW9uIDEz
MzUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIkdlb2xvY2F0aW9uRXJyb3IuaCIKQEAgLTUwOSw5ICs1MTEsMTAgQEAgdm9pZCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJybwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCht
YWluRnJhbWUoKSkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3Vt
ZW50KCk7CiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0Zv
ckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7
ICsraXQpIHsKICAgICAgICAgICAgIFZlY3RvcjxDb29raWU+IGRvY0Nvb2tpZXNMaXN0OwotICAg
ICAgICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZ2V0UmF3Q29va2llcyhkb2N1bWVudCwg
S1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCksIGRvY0Nvb2tpZXNMaXN0KTsKKyAgICAgICAgICAg
IHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGNvb2tpZUphci5nZXRSYXdDb29raWVzKEtVUkwoUGFy
c2VkVVJMU3RyaW5nLCAqaXQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgZG9j
Q29va2llc0xpc3QpOwogICAgICAgICAgICAgaWYgKCFyYXdDb29raWVzSW1wbGVtZW50ZWQpIHsK
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBkdXBsaWNhdGlvbiBjaGVja2luZyBm
b3IgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBjb29raWVzLgogICAgICAgICAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNTQ3LDggKzU1MCw5IEBAIHZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpkZWxldGVDb29raWUoRXIKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1l
KTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCktPmNvb2tpZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7ICsraXQpCi0gICAg
ICAgICAgICBXZWJDb3JlOjpkZWxldGVDb29raWUoZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3Ry
aW5nLCAqaXQpLCBjb29raWVOYW1lKTsKKyAgICAgICAgICAgIGNvb2tpZUphci5kZWxldGVDb29r
aWUoS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCksIGNvb2tpZU5hbWUpOwogICAgIH0KIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9u
IDEzMzUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlckNsaWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50
X2gKICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRfaAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIkljb25VUkwuaCIKICNp
bmNsdWRlICJMYXlvdXRNaWxlc3RvbmVzLmgiCkBAIC02NCw2ICs2NSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBD
YWNoZWRGcmFtZTsKICAgICBjbGFzcyBDb2xvcjsKKyAgICBjbGFzcyBDb29raWVKYXI7CiAgICAg
Y2xhc3MgRE9NV2luZG93RXh0ZW5zaW9uOwogICAgIGNsYXNzIERPTVdyYXBwZXJXb3JsZDsKICAg
ICBjbGFzcyBEb2N1bWVudExvYWRlcjsKQEAgLTM1Myw2ICszNTUsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQVVUT0NPTVBMRVRFKQogICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVxdWVzdEF1dG9jb21wbGV0ZShQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pID0gMDsK
ICNlbmRpZgorCisgICAgICAgIHZpcnR1YWwgQ29va2llSmFyIGNvb2tpZUphcigpIHsgcmV0dXJu
IENvb2tpZUphcigpOyB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAkocmV2aXNpb24gMTMzNTAwKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCiAKLSNpbmNsdWRl
ICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJET01NaW1lVHlwZUFycmF5LmgiCiAjaW5jbHVkZSAi
RE9NUGx1Z2luQXJyYXkuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMTE4LDcgKzExNyw3
IEBAIGJvb2wgTmF2aWdhdG9yOjpjb29raWVFbmFibGVkKCkgY29uc3QKICAgICBpZiAobV9mcmFt
ZS0+cGFnZSgpICYmICFtX2ZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPmNvb2tpZUVuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGNvb2tpZXNFbmFibGVkKG1f
ZnJhbWUtPmRvY3VtZW50KCkpOworICAgIHJldHVybiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5jb29r
aWVzRW5hYmxlZCgpOwogfQogCiBib29sIE5hdmlnYXRvcjo6amF2YUVuYWJsZWQoKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgJKHJldmlzaW9uIDEzMzUwMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2ICsyNiwxMyBAQAogI2lmbmRlZiBDb29raWVKYXJfaAogI2RlZmluZSBDb29raWVKYXJfaAog
CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSA8cHVibGljL1dlYkNvb2tpZUphci5o
PgorI2VuZGlmCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQu
aCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzMsMjMgKzQwLDU0
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIERvY3VtZW50OwotICAgIGNs
YXNzIEtVUkw7CitjbGFzcyBLVVJMOworc3RydWN0IENvb2tpZTsKIAotICAgIHN0cnVjdCBDb29r
aWU7CitjbGFzcyBDb29raWVKYXIgeworcHVibGljOgorICAgIENvb2tpZUphcigpCisgICAgewor
I2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICBtX3dlYkNvb2tpZUphciA9IDA7CisjZW5k
aWYKKyNpZiBQTEFURk9STShRVCkKKyAgICAgICAgbV9uZXR3b3JraW5nQ29udGV4dCA9IDA7Cisj
ZW5kaWYKKyAgICB9OworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIGV4cGxpY2l0IENvb2tp
ZUphcihXZWJLaXQ6OldlYkNvb2tpZUphciogd2ViQ29va2llSmFyKQorICAgIHsKKyAgICAgICAg
bV93ZWJDb29raWVKYXIgPSB3ZWJDb29raWVKYXI7CisgICAgfTsKKyNlbmRpZgorI2lmIFBMQVRG
T1JNKFFUKQorICAgIGV4cGxpY2l0IENvb2tpZUphcihOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCkKKyAgICB7CisgICAgICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSBjb250ZXh0OworICAgIH07
CisjZW5kaWYKIAogICAgIC8vIGNvb2tpZXMgb21pdHMgSHR0cE9ubHkgY29va2llcy4KLSAgICBT
dHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICBTdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJM
Jik7Ci0gICAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYpOwotICAgIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKLSAgICBi
b29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENv
b2tpZT4mKTsKLSAgICB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtV
UkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgY29va2llcyhjb25zdCBLVVJMJiwgY29u
c3QgS1VSTCYpOworICAgIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25z
dCBLVVJMJiwgY29uc3QgS1VSTCYpOworICAgIHZvaWQgc2V0Q29va2llcyhjb25zdCBLVVJMJiwg
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgY29va2llc0VuYWJsZWQoY29u
c3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKKyAgICBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgS1VS
TCYsIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOworICAgIHZvaWQgZGVsZXRlQ29va2ll
KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgZ2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpOwogICAgIHZvaWQgZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOwogICAgIHZvaWQgZGVsZXRl
QWxsQ29va2llcygpOwogCi19Citwcml2YXRlOgorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAg
IFdlYktpdDo6V2ViQ29va2llSmFyKiBtX3dlYkNvb2tpZUphcjsKKyNlbmRpZgorI2lmIFBMQVRG
T1JNKFFUKQorICAgIE5ldHdvcmtpbmdDb250ZXh0KiBtX25ldHdvcmtpbmdDb250ZXh0OworI2Vu
ZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgJKHJl
dmlzaW9uIDEzMzUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRm
b3JtU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxNCArNzgsNiBAQCBzdHJ1Y3QgRm9u
dFJlbmRlclN0eWxlOwogCiBjbGFzcyBQbGF0Zm9ybVN1cHBvcnQgewogcHVibGljOgotICAgIC8v
IENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gICAgc3RhdGljIHZvaWQgc2V0Q29va2llcyhjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNv
b2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgc3RhdGljIFN0cmluZyBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
KTsKLSAgICBzdGF0aWMgYm9vbCByYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYsIFZlY3RvcjxDb29raWU+Jik7Ci0gICAgc3RhdGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0
IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSk7Ci0gICAg
c3RhdGljIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKLQogICAgIC8vIEZv
bnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAjaWYgT1MoV0lORE9XUykKICAgICBzdGF0aWMgYm9vbCBlbnN1cmVGb250TG9h
ZGVkKEhGT05UKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9N
ZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDEzMzUwMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVW
aXN1YWxDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1
ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVy
Q2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjY4LDcgKzI3MCw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ28KIAogICAgIEtVUkwgbW92aWVVUkwgPSBLVVJM
KEtVUkwoKSwgdXJsKTsKICAgICBWZWN0b3I8Q29va2llPiBkb2N1bWVudENvb2tpZXM7Ci0gICAg
aWYgKCFnZXRSYXdDb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCBtb3ZpZVVSTCwgZG9jdW1lbnRD
b29raWVzKSkKKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigp
LmdldFJhd0Nvb2tpZXMobW92aWVVUkwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygp
LCBkb2N1bWVudENvb2tpZXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHNpemVfdCBu
ZHggPSAwOyBuZHggPCBkb2N1bWVudENvb2tpZXMuc2l6ZSgpOyBuZHgrKykgewpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCShyZXZpc2lvbiAxMzM1MDApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyQ29va2ll
cygKICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwogfQogCi1TdHJpbmcgY29va2llcyhjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC05Myw3ICs5Myw3IEBAIFN0
cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1UKICAgICByZXR1cm4gU3RyaW5n
KCk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5
Rm9yQ29va2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAt
MTEwLDcgKzExMCw3IEBAIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24K
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCit2b2lkIENv
b2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFy
dHlGb3JDb29raWVzLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikKIHsKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTEyNywxNCArMTI3LDE0IEBAIHZvaWQgc2V0Q29va2ll
cyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVy
ZWRDb29raWVzID0gZmlsdGVyQ29va2llcyhbTlNIVFRQQ29va2llIGNvb2tpZXNXaXRoUmVzcG9u
c2VIZWFkZXJGaWVsZHM6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpjb29raWVT
dHJpbmcgZm9yS2V5OkAiU2V0LUNvb2tpZSJdIGZvclVSTDpjb29raWVVUkxdKTsKIAogICAgIGlm
IChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY2ZDb29raWVTdG9yYWdlID0gY3Vy
cmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKSkKLSAgICAgICAgd2tTZXRIVFRQQ29va2llc0ZvclVS
TChjZkNvb2tpZVN0b3JhZ2UuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJM
LCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgICAgIHdrU2V0SFRUUENv
b2tpZXNGb3JVUkwoY2ZDb29raWVTdG9yYWdlLmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCks
IGNvb2tpZVVSTCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogICAgIGVsc2UKLSAgICAgICAgW1tO
U0hUVFBDb29raWVTdG9yYWdlIHNoYXJlZEhUVFBDb29raWVTdG9yYWdlXSBzZXRDb29raWVzOmZp
bHRlcmVkQ29va2llcy5nZXQoKSBmb3JVUkw6Y29va2llVVJMIG1haW5Eb2N1bWVudFVSTDpkb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKV07CisgICAgICAgIFtbTlNIVFRQQ29va2llU3Rv
cmFnZSBzaGFyZWRIVFRQQ29va2llU3RvcmFnZV0gc2V0Q29va2llczpmaWx0ZXJlZENvb2tpZXMu
Z2V0KCkgZm9yVVJMOmNvb2tpZVVSTCBtYWluRG9jdW1lbnRVUkw6Zmlyc3RQYXJ0eUZvckNvb2tp
ZXNdOwogCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotYm9vbCBjb29raWVz
RW5hYmxlZChjb25zdCBEb2N1bWVudCopCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQo
Y29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyov
KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTUwLDcgKzE1MCw3
IEBAIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYg
dXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdD
b29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2ll
cyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICByYXdDb29raWVzLmNsZWFy
KCk7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwpAQCAtMTgxLDcgKzE4MSw3IEBA
IGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnMKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29r
aWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7CiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBkZWxl
dGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQ
VElPTlM7CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+
JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFz
aFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogICAgIApAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoSGFzaFNldDxTdHIKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lk
IGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBD
b29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAKQEAgLTI0MSw3ICsy
NDEsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpCiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3Zv
aWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL0Nvb2tpZUphckNGTmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAkocmV2aXNpb24gMTMzNTAwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2lu
Y2x1ZGUgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU29m
dExpbmtpbmcuaCIKQEAgLTk1LDcgKzk0LDcgQEAgc3RhdGljIFJldGFpblB0cjxDRkFycmF5UmVm
PiBmaWx0ZXJDb29raQogICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9CiAKLXZvaWQgc2V0
Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugc3RvcmVz
IGFuIGVtcHR5IGNvb2tpZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KICAg
ICBpZiAodmFsdWUuaXNFbXB0eSgpKQpAQCAtMTA2LDcgKzEwNSw3IEBAIHZvaWQgc2V0Q29va2ll
cyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmV0YWlu
UHRyPENGVVJMUmVmPiB1cmxDRihBZG9wdENGLCB1cmwuY3JlYXRlQ0ZVUkwoKSk7Ci0gICAgUmV0
YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9yQ29va2llc0NGKEFkb3B0Q0YsIGRvY3VtZW50
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLmNyZWF0ZUNGVVJMKCkpOworICAgIFJldGFpblB0cjxD
RlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9wdENGLCBmaXJzdFBhcnR5Rm9yQ29v
a2llcy5jcmVhdGVDRlVSTCgpKTsKIAogICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0PgogICAgIC8vIGNvb2tpZXNXaXRo
UmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBjb29raWVzIHdpdGhvdXQgYSB2YWx1
ZQpAQCAtMTIzLDcgKzEyMiw3IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnMKICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhjb29raWVTdG9yYWdlLmdl
dCgpLCBmaWx0ZXJDb29raWVzKGNvb2tpZXNDRi5nZXQoKSkuZ2V0KCksIHVybENGLmdldCgpLCBm
aXJzdFBhcnR5Rm9yQ29va2llc0NGLmdldCgpKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVT
dG9yYWdlKQpAQCAtMTM3LDcgKzEzNiw3IEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50
KiAvKmRvY3VtZW4KICAgICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwm
IHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewog
ICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3Vy
cmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0x
NTEsNyArMTUwLDcgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbgog
ICAgIHJldHVybiAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVhZGVyQ0YuZ2V0
KCksIHNfY29va2llQ0YpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50
KiAvKmRvY3VtZW50Ki8pCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VS
TCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAg
IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kgcG9saWN5ID0gQ0ZIVFRQQ29va2llU3Rv
cmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAgIGlmIChSZXRh
aW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhU
VFBDb29raWVTdG9yYWdlKCkpCkBAIC0xNTksNyArMTU4LDcgQEAgYm9vbCBjb29raWVzRW5hYmxl
ZChjb25zdCBEb2N1bWVudCogLypkbwogICAgIHJldHVybiBwb2xpY3kgPT0gQ0ZIVFRQQ29va2ll
U3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluIHx8IHBvbGljeSA9
PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5QWx3YXlzOwogfQogCi1ib29sIGdldFJh
d0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+
JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+
JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICBSZXRhaW5QdHI8
Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29r
aWVTdG9yYWdlKCk7CkBAIC0xOTMsNyArMTkyLDcgQEAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0
IERvY3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNvb2tp
ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQor
dm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVT
dG9yYWdlKQpAQCAtMjE0LDcgKzIxMyw3IEBAIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFz
aFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgUmV0YWluUHRyPENG
SFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2ll
U3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTIzMiw3ICsyMzEsNyBAQCB2
b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyCiAgICAgfQogfQogCi12b2lk
IGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBD
b29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1l
KQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdl
ID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2Up
CkBAIC0yNTEsNyArMjUwLDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3Qg
U3RyaQogICAgIH0KIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFy
OjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFn
ZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAg
aWYgKCFjb29raWVTdG9yYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDEzMzUwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21p
dW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw1MiArMzIsNzQg
QEAKICNpbmNsdWRlICJDb29raWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSA8
cHVibGljL1dlYkNvb2tpZS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KKyNp
bmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlVSTC5oPgor
I2luY2x1ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQogewotICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1bWVudCwgdXJsLCB2YWx1
ZSk7CisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNvb2tpZUphci0+c2V0
Q29va2llKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIHZhbHVlKTsKIH0KIAotU3RyaW5nIGNv
b2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcg
Q29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0
eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llcyhkb2N1
bWVudCwgdXJsKTsKKyAgICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisgICAgcmV0dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVzKHVybCwgZmlyc3RQYXJ0
eUZvckNvb2tpZXMpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
Y29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2ll
SmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBv
cnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgIGlm
ICghbV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4g
bV93ZWJDb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwgZmlyc3RQ
YXJ0eUZvckNvb2tpZXMpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCkKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0
Zm9ybVN1cHBvcnQ6OmNvb2tpZXNFbmFibGVkKGRvY3VtZW50KTsKKyAgICBpZiAoIW1fd2ViQ29v
a2llSmFyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fd2ViQ29va2llSmFy
LT5jb29raWVzRW5hYmxlZCh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9vbCBn
ZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBW
ZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVz
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIFZlY3Rv
cjxDb29raWU+JiByYXdDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnJh
d0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2llcyk7CisgICAgcmF3Q29va2llcy5jbGVh
cigpOworICAgIFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViQ29va2llPiB3ZWJDb29raWVz
OworCisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNvb2tpZUphci0+cmF3
Q29va2llcyh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzLCB3ZWJDb29raWVzKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGNvbnN0IFdlYktpdDo6V2ViQ29va2llJiB3ZWJDb29raWUgPSB3ZWJDb29raWVzW2ldOworICAg
ICAgICBDb29raWUgY29va2llKHdlYkNvb2tpZS5uYW1lLCB3ZWJDb29raWUudmFsdWUsIHdlYkNv
b2tpZS5kb21haW4sIHdlYkNvb2tpZS5wYXRoLCB3ZWJDb29raWUuZXhwaXJlcywgd2ViQ29va2ll
Lmh0dHBPbmx5LCB3ZWJDb29raWUuc2VjdXJlLCB3ZWJDb29raWUuc2Vzc2lvbik7CisgICAgICAg
IHJhd0Nvb2tpZXMuYXBwZW5kKGNvb2tpZSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKIHsKLSAgICBy
ZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29raWUoZG9jdW1lbnQsIHVybCwgY29va2ll
TmFtZSk7CisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNvb2tpZUphci0+
ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1lcyovKQogewog
ICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSovKQogewogICAg
IC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2ll
cygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAJKHJldmlzaW9uIDEzMzUw
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgIkNvb2tpZUph
ci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJLVVJMLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CkBAIC0yNiwzNyArMjUsMzcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY29va2llSmFyOworc3RhdGljIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IHNfY29va2llSmFyOwogCi12b2lkIHNldENvb2tpZXMoRG9j
dW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJM
JiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAg
Y29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsKKyAgICBzX2Nvb2tpZUphci5zZXQo
dXJsLnN0cmluZygpLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50
KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tp
ZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8p
CiB7Ci0gICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKKyAgICByZXR1cm4g
c19jb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0
SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJM
JiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsK
ICAgICAvLyBGSVhNRTogaW5jbHVkZSBIdHRwT25seSBjb29raWUuCi0gICAgcmV0dXJuIGNvb2tp
ZUphci5nZXQodXJsLnN0cmluZygpKTsKKyAgICByZXR1cm4gc19jb29raWVKYXIuZ2V0KHVybC5z
dHJpbmcoKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9j
dW1lbnQqLykKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVy
bCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtV
UkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdD
b29raWVzKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5v
dCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZh
bHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29v
a2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENv
b2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYg
Lypjb29raWVOYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0K
QEAgLTY4LDE3ICs2NywxNyBAQCB2b2lkIHNldENvb2tpZVN0b3JhZ2VQcml2YXRlQnJvd3NpbmdF
bmFiCiB9CiAjZW5kaWYKIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0
cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5
ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3Qg
U3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFy
OjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRl
ZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFy
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dp
bi9Db29raWVKYXJXaW4uY3BwCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJLVVJMLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1
ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxXaW5pbmV0Lmg+CkBAIC0zNiwxNSArMzUsMTYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIC8qZG9j
dW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorCit2b2lkIENv
b2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQ
YXJ0eUZvckNvb2tpZXMqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICAvLyBGSVhNRTog
RGVhbCB3aXRoIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLgorICAgIC8vIEZJWE1F
OiBEZWFsIHdpdGggZmlyc3RQYXJ0eUZvckNvb2tpZXMuCiAgICAgU3RyaW5nIHN0ciA9IHVybC5z
dHJpbmcoKTsKICAgICBTdHJpbmcgdmFsID0gdmFsdWU7CiAgICAgSW50ZXJuZXRTZXRDb29raWUo
c3RyLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIHZhbC5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQq
IC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2ll
cyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykK
IHsKICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwogCkBAIC02Myw0MCArNjMsNDAgQEAg
U3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbgogICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KGJ1ZmZlcik7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBD
b29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IGluY2x1
ZGUgSHR0cE9ubHkgY29va2llCi0gICAgcmV0dXJuIGNvb2tpZXMoZG9jdW1lbnQsIHVybCk7Cisg
ICAgcmV0dXJuIGNvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9CiAKLWJvb2wg
Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgQ29va2ll
SmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZp
cnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0
UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYg
cmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIC8q
dXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tp
ZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAg
ICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3
aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2ll
KGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29raWVOYW1lKi8pCiB7CiAg
ICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7
CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAg
ICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29r
aWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhN
RTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvQ29va2llSmFyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L0Nvb2tpZUphclF0LmNwcAkocmV2aXNpb24gMTMzNTAwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw2
IEBACiAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKLSNpbmNs
dWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJUaGlyZFBhcnR5Q29va2llc1F0LmgiCkBAIC00OSwzMSArNDYsMTcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgU2hhcmVkQ29va2llSmFyUXQqIHNfc2hhcmVkQ29v
a2llSmFyUXQgPSAwOwogCi1zdGF0aWMgTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250
ZXh0KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVz
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2Fk
ZXIoKTsKLSAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGxv
YWRlci0+bmV0d29ya2luZ0NvbnRleHQoKTsKLX0KLQotdm9pZCBzZXRDb29raWVzKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQp
OwotICAgIGlmICghY29udGV4dCkKKyAgICBpZiAoIW1fbmV0d29ya2luZ0NvbnRleHQpCiAgICAg
ICAgIHJldHVybjsKLSAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29y
a0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGph
ciA9IG1fbmV0d29ya2luZ0NvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUph
cigpOwogICAgIGlmICghamFyKQogICAgICAgICByZXR1cm47CiAKICAgICBRVXJsIHVybEZvckNv
b2tpZXModXJsKTsKLSAgICBRVXJsIGZpcnN0UGFydHlVcmwoZG9jdW1lbnQtPmZpcnN0UGFydHlG
b3JDb29raWVzKCkpOwotICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMoY29u
dGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCisgICAgUVVybCBmaXJzdFBhcnR5
VXJsKGZpcnN0UGFydHlGb3JDb29raWVzKTsKKyAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xp
Y3lQZXJtaXRzKG1fbmV0d29ya2luZ0NvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlV
cmwpKQogICAgICAgICByZXR1cm47CiAKICAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2ll
cyA9IFFOZXR3b3JrQ29va2llOjpwYXJzZUNvb2tpZXMoUVN0cmluZyh2YWx1ZSkudG9MYXRpbjEo
KSk7CkBAIC04OCwxNiArNzEsMTUgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVu
dCwgY29ucwogICAgIGphci0+c2V0Q29va2llc0Zyb21VcmwoY29va2llcywgdXJsRm9yQ29va2ll
cyk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4
dCkKKyAgICBpZiAoIW1fbmV0d29ya2luZ0NvbnRleHQpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01h
bmFnZXIoKS0+Y29va2llSmFyKCk7CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IG1fbmV0
d29ya2luZ0NvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwogCiAg
ICAgUVVybCB1cmxGb3JDb29raWVzKHVybCk7Ci0gICAgUVVybCBmaXJzdFBhcnR5VXJsKGRvY3Vt
ZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQ
b2xpY3lQZXJtaXRzKGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQorICAg
IFFVcmwgZmlyc3RQYXJ0eVVybChmaXJzdFBhcnR5Rm9yQ29va2llcyk7CisgICAgaWYgKCF0aGly
ZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhtX25ldHdvcmtpbmdDb250ZXh0LCB1cmxGb3JDb29r
aWVzLCBmaXJzdFBhcnR5VXJsKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgUUxp
c3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwodXJsRm9yQ29v
a2llcyk7CkBAIC0xMTQsMTIgKzk2LDExIEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwKICAgICByZXR1cm4gcmVzdWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmco
IjsgIikpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMICZ1cmwpCitTdHJpbmcgQ29va2llSmFyOjpj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwm
IC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisg
ICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0g
ICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
KCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBtX25ldHdvcmtp
bmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKIAogICAgIFFM
aXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKFFVcmwodXJs
KSk7CiAgICAgaWYgKGNvb2tpZXMuaXNFbXB0eSgpKQpAQCAtMTMyLDQxICsxMTMsNDAgQEAgU3Ry
aW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbgogICAgIHJldHVybiByZXN1bHRD
b29raWVzLmpvaW4oUUxhdGluMVN0cmluZygiOyAiKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJs
ZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLykKIHsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250
ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdD
b250ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbnRleHQtPm5ldHdv
cmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIHJldHVybiBtX25ldHdvcmtpbmdD
b250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKIH0KIAotYm9vbCBn
ZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+
JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYg
Lyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAog
ICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVl
IHdoZW4gaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29r
aWUoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsK
ICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6
OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewog
ICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7
CiAgICAgaWYgKGphcikKICAgICAgICAgamFyLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0
bmFtZXMpOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lKQogewogICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFy
ZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGphcikKICAgICAgICAgamFyLT5kZWxl
dGVDb29raWVzRm9ySG9zdG5hbWUoaG9zdG5hbWUpOwogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tp
ZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIFNoYXJlZENv
b2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGph
cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMTMz
NTAwKQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM5Miw3ICsxMzkyLDcgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZUZv
clVSTChOUE5VUgogICAgICAgICBpZiAodS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIEZyYW1l
KiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7CiAgICAgICAgICAg
ICBpZiAoZnJhbWUpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9
IGNvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIHUpLnV0ZjgoKTsKKyAgICAgICAgICAgICAgICBj
b25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tp
ZUphcigpLmNvb2tpZXModSwgZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0UGFydHlGb3JDb29raWVz
KCkpLnV0ZjgoKTsKICAgICAgICAgICAgICAgICBpZiAoIWNvb2tpZVN0ci5pc051bGwoKSkgewog
ICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9IGNvb2tpZVN0ci5sZW5ndGgoKTsK
ICAgICAgICAgICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1B
bGxvYyhzaXplKzEpKTsKQEAgLTE0NTQsNyArMTQ1NCw3IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6
c2V0VmFsdWVGb3JVUkwoTlBOVVIKICAgICAgICAgICAgIGNvbnN0IFN0cmluZyBjb29raWVTdHIg
PSBTdHJpbmc6OmZyb21VVEY4KHZhbHVlLCBsZW4pOwogICAgICAgICAgICAgRnJhbWUqIGZyYW1l
ID0gZ2V0RnJhbWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKICAgICAgICAgICAgIGlmIChm
cmFtZSAmJiAhY29va2llU3RyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBzZXRDb29raWVz
KGZyYW1lLT5kb2N1bWVudCgpLCB1LCBjb29raWVTdHIpOworICAgICAgICAgICAgICAgIGZyYW1l
LT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLnNldENvb2tpZXModSwgZnJhbWUtPmRv
Y3VtZW50KCktPmZpcnN0UGFydHlGb3JDb29raWVzKCksIGNvb2tpZVN0cik7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfSU5WQUxJRF9VUkw7CiAgICAgICAgIGJy
ZWFrOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTMzNTAwKQorKysgU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMTEtMDUgIE1h
cmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0g
UmVtb3ZlIGNvb2tpZS1yZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGlu
Zm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVh
c2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpkZWxldGVBbGxDb29raWVzKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlBsdWdpblZpZXc6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5W
aWV3OjpzZXRDb29raWVzRm9yVVJMKToKKwogMjAxMi0xMS0wNSAgWWFlbCBBaGFyb24gIDx5YWVs
LmFoYXJvbkBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBBbGxvdyB1c2luZyBBQ0NF
TEVSQVRFRF9DT01QT1NJVElORyB3aXRob3V0IENPT1JESU5BVEVEX0dSQVBISUNTCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1h
bmFnZXIuY3BwCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3
LDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIb3N0bmFtZXNXaXRoQwogCiAgICAgSGFz
aFNldDxTdHJpbmc+IGhvc3RuYW1lczsKIAotICAgIFdlYkNvcmU6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKGhvc3RuYW1lcyk7CisgICAgV2ViQ29yZTo6Q29va2llSmFyKCkuZ2V0SG9zdG5hbWVz
V2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IGhvc3RuYW1lTGlz
dDsKICAgICBjb3B5VG9WZWN0b3IoaG9zdG5hbWVzLCBob3N0bmFtZUxpc3QpOwpAQCAtNjksMTQg
KzY5LDE0IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0ZvckgKIHsKICAg
ICBXZWJQcm9jZXNzOjpMb2NhbFRlcm1pbmF0aW9uRGlzYWJsZXIgdGVybWluYXRpb25EaXNhYmxl
cihXZWJQcm9jZXNzOjpzaGFyZWQoKSk7CiAKLSAgICBXZWJDb3JlOjpkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoaG9zdG5hbWUpOworICAgIFdlYkNvcmU6OkNvb2tpZUphcigpLmRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZShob3N0bmFtZSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6ZGVs
ZXRlQWxsQ29va2llcygpCiB7CiAgICAgV2ViUHJvY2Vzczo6TG9jYWxUZXJtaW5hdGlvbkRpc2Fi
bGVyIHRlcm1pbmF0aW9uRGlzYWJsZXIoV2ViUHJvY2Vzczo6c2hhcmVkKCkpOwogCi0gICAgV2Vi
Q29yZTo6ZGVsZXRlQWxsQ29va2llcygpOworICAgIFdlYkNvcmU6OkNvb2tpZUphcigpLmRlbGV0
ZUFsbENvb2tpZXMoKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzdGFydE9ic2Vydmlu
Z0Nvb2tpZUNoYW5nZXMoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMTMzNTAwKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzA5LDEyICsxMzA5LDE5IEBAIFN0cmluZyBQbHVnaW5WaWV3Ojpwcm94aWVzRm9yVVJMKGNvbnN0
IFMKIAogU3RyaW5nIFBsdWdpblZpZXc6OmNvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcpCiB7Ci0gICAgcmV0dXJuIGNvb2tpZXMobV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgp
LCBLVVJMKEtVUkwoKSwgdXJsU3RyaW5nKSk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9w
bHVnaW5FbGVtZW50LT5kb2N1bWVudCgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llcyhLVVJM
KEtVUkwoKSwgdXJsU3RyaW5nKSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwog
fQogCiB2b2lkIFBsdWdpblZpZXc6OnNldENvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQogewotICAgIHNldENvb2tpZXMobV9w
bHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLCBLVVJMKEtVUkwoKSwgdXJsU3RyaW5nKSwgY29va2ll
U3RyaW5nKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX3BsdWdpbkVsZW1lbnQtPmRvY3Vt
ZW50KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKGZy
YW1lKQorICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5zZXRD
b29raWVzKEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSwgY29va2llU3RyaW5nKTsKIH0KIAogYm9vbCBQbHVnaW5WaWV3OjpnZXRBdXRoZW50
aWNhdGlvbkluZm8oY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UsIFN0cmlu
ZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFzc3dvcmQpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTMzNTAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMS0wNSAgTWFyayBQaWxn
cmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUg
Y29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRp
b24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQg
cGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogc3Jj
L0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVy
Q2xpZW50SW1wbDo6Y29va2llSmFyKToKKyAgICAgICAgKiBzcmMvRnJhbWVMb2FkZXJDbGllbnRJ
bXBsLmg6CisgICAgICAgIChGcmFtZUxvYWRlckNsaWVudEltcGwpOgorICAgICAgICAqIHNyYy9Q
bGF0Zm9ybVN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMTEtMDUgIEFs
b2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBQYXNzIGNhblBhaW50TENEVGV4dCB0byBXZWJDb250ZW50TGF5ZXJDbGllbnQ6OnBhaW50Q29u
dGVudHMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVM
b2FkZXJDbGllbnRJbXBsLmNwcAkocmV2aXNpb24gMTMzNTAwKQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY2Miw0ICsxNjYyLDE0IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRJbXBsOjpkaWRSZXF1ZXN0
QXUKIH0KICNlbmRpZgogCitXZWJDb3JlOjpDb29raWVKYXIgRnJhbWVMb2FkZXJDbGllbnRJbXBs
Ojpjb29raWVKYXIoKQoreworICAgIGlmICghbV93ZWJGcmFtZSB8fCAhbV93ZWJGcmFtZS0+Y2xp
ZW50KCkpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIoMCk7CisgICAgV2ViQ29v
a2llSmFyKiB3ZWJDb29raWVKYXIgPSBtX3dlYkZyYW1lLT5jbGllbnQoKS0+Y29va2llSmFyKG1f
d2ViRnJhbWUpOworICAgIGlmICghd2ViQ29va2llSmFyKQorICAgICAgICB3ZWJDb29raWVKYXIg
PSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNvb2tpZUphcigpOworICAgIHJldHVybiBX
ZWJDb3JlOjpDb29raWVKYXIod2ViQ29va2llSmFyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudElt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRl
ckNsaWVudEltcGwuaAkocmV2aXNpb24gMTMzNTAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw2ICsy
MjksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlcXVlc3RBdXRvY29tcGxldGUo
UGFzc1JlZlB0cjxXZWJDb3JlOjpGb3JtU3RhdGU+KSBPVkVSUklERTsKICNlbmRpZgogCisgICAg
dmlydHVhbCBXZWJDb3JlOjpDb29raWVKYXIgY29va2llSmFyKCkgT1ZFUlJJREU7CisKIHByaXZh
dGU6CiAgICAgdm9pZCBtYWtlRG9jdW1lbnRWaWV3KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAkocmV2aXNpb24gMTMzNTAwKQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAwLDg2ICsxMDAsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBXZWJDb29raWVKYXIqIGdldENvb2tpZUphcihj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgV2ViRnJhbWVJbXBsKiBmcmFtZUltcGwg
PSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7Ci0gICAgaWYgKCFm
cmFtZUltcGwgfHwgIWZyYW1lSW1wbC0+Y2xpZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IFdlYkNvb2tpZUphciogY29va2llSmFyID0gZnJhbWVJbXBsLT5jbGllbnQoKS0+Y29va2llSmFy
KGZyYW1lSW1wbCk7Ci0gICAgaWYgKCFjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphciA9IFdl
YktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y29va2llSmFyKCk7Ci0gICAgcmV0dXJuIGNvb2tp
ZUphcjsKLX0KLQotLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFBsYXRmb3JtU3VwcG9y
dDo6c2V0Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsK
LSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0g
ICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5zZXRDb29raWUodXJsLCBkb2N1
bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUpOwotfQotCi1TdHJpbmcgUGxhdGZv
cm1TdXBwb3J0Ojpjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIg
PSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJl
c3VsdCA9IGNvb2tpZUphci0+Y29va2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1TdHJpbmcgUGxhdGZvcm1TdXBwb3J0
Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEtVUkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tpZUphciog
Y29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQot
ICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLWJvb2wgUGxhdGZvcm1TdXBwb3J0OjpyYXdDb29raWVzKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykK
LXsKLSAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgV2ViVmVjdG9yPFdlYkNvb2tpZT4gd2Vi
Q29va2llczsKLQotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRv
Y3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXItPnJhd0Nvb2tp
ZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgd2ViQ29va2llcyk7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBjb25zdCBXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07Ci0gICAg
ICAgIENvb2tpZSBjb29raWUod2ViQ29va2llLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
d2ViQ29va2llLnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5kb21haW4s
Ci0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnBhdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgd2ViQ29va2llLmV4cGlyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2ll
Lmh0dHBPbmx5LAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5zZWN1cmUsCi0gICAg
ICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlc3Npb24pOwotICAgICAgICByYXdDb29raWVz
LmFwcGVuZChjb29raWUpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQbGF0
Zm9ybVN1cHBvcnQ6OmRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQotewotICAgIFdlYkNvb2tpZUph
ciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFy
KQotICAgICAgICBjb29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwotfQot
Ci1ib29sIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50KQotewotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgV2ViQ29va2llSmFyKiBj
b29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0g
ICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llc0VuYWJsZWQoZG9jdW1lbnQtPmNvb2tp
ZVVSTCgpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQogLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgT1MoV0lORE9XUykKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzUwMCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTExLTA1ICBN
YXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBp
bmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxl
YXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAg
ICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW06CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0Q29va2llcyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0Q29va2llcyk6
CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW06CisgICAgICAgICgt
W1dlYk5ldHNjYXBlUGx1Z2luVmlldyBnZXRWYXJpYWJsZTpmb3JVUkw6dmFsdWU6bGVuZ3RoOl0p
OgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc2V0VmFyaWFibGU6Zm9yVVJMOnZh
bHVlOmxlbmd0aDpdKToKKwogMjAxMi0xMS0wMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIFVTRShDRlVSTFNUT1JBR0VTRVNTSU9OUykK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVn
aW5WaWV3Lm1tCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+
IAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPiAKKyNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVMb2FkZXJDbGllbnQuaD4gCiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTFBsdWdJbkVsZW1l
bnQuaD4KQEAgLTIyMTYsNyArMjIxNyw3IEBAIC0gKE5QRXJyb3IpZ2V0VmFyaWFibGU6KE5QTlVS
TFZhcmlhYmxlKXYKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKSkgewotICAgICAg
ICAgICAgICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjb29raWVzKGZyYW1lLT5kb2N1bWVudCgp
LCBVUkwpOyAKKyAgICAgICAgICAgICAgICBTdHJpbmcgY29va2llU3RyaW5nID0gZnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llcyhVUkwsIGZyYW1lLT5kb2N1bWVu
dCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsgCiAgICAgICAgICAgICAgICAgQ1N0cmluZyBj
b29raWVTdHJpbmdVVEY4ID0gY29va2llU3RyaW5nLnV0ZjgoKTsKICAgICAgICAgICAgICAgICBp
ZiAoY29va2llU3RyaW5nVVRGOC5pc051bGwoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5QRVJSX0dFTkVSSUNfRVJST1I7CkBAIC0yMjcwLDcgKzIyNzEsNyBAQCAtIChOUEVycm9yKXNl
dFZhcmlhYmxlOihOUE5VUkxWYXJpYWJsZSl2CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZy
YW1lXSkpIHsKLSAgICAgICAgICAgICAgICBzZXRDb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCBV
UkwsIGNvb2tpZVN0cmluZyk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKS0+Y29va2llSmFyKCkuc2V0Q29va2llcyhVUkwsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJz
dFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVTdHJpbmcpOwogICAgICAgICAgICAgICAgIHJldHVy
biBOUEVSUl9OT19FUlJPUjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291
cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNj
YXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24gMTMzNTAwKQorKysgU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50
TG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zy
YW1lTG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyQ2xpZW50Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9LVVJMLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1Byb3h5U2VydmVyLmg+CkBAIC0xNTE1LDcgKzE1MTYsNyBAQCBib29sIE5l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0Q29vCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZyYW1l
XSkpIHsKLSAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGNvb2tpZXMoZnJhbWUtPmRvY3Vt
ZW50KCksIHVybCk7IAorICAgICAgICBTdHJpbmcgY29va2llU3RyaW5nID0gZnJhbWUtPmxvYWRl
cigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llcyh1cmwsIGZyYW1lLT5kb2N1bWVudCgp
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsgCiAgICAgICAgIFdURjo6Q1N0cmluZyBjb29raWVT
dHJpbmdVVEY4ID0gY29va2llU3RyaW5nLnV0ZjgoKTsKICAgICAgICAgaWYgKGNvb2tpZVN0cmlu
Z1VURjguaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTQzLDcgKzE1
NDQsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0Q29vCiAgICAgICAg
IGlmICghY29va2llU3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAK
LSAgICAgICAgV2ViQ29yZTo6c2V0Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdXJsLCBjb29r
aWVTdHJpbmcpOworICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIo
KS5zZXRDb29raWVzKHVybCwgZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0UGFydHlGb3JDb29raWVz
KCksIGNvb2tpZVN0cmluZyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRleDog
U291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzUwMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMTEtMDUgIE1hcmsgUGls
Z3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVtb3Zl
IGNvb2tpZS1yZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0
aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRk
IHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRRdDo6Y29va2llSmFyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnRRdCk6CisKIDIwMTItMTEtMDEgIFN0
ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjEzMzE0My4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkocmV2aXNpb24g
MTMzNTAwKQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3Niw2ICsxNjc2LDEzIEBAIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnRRdDo6ZW1pdExvYWRGaW5pc2gKICAgICBlbWl0IG1fd2ViRnJhbWUtPmxv
YWRGaW5pc2hlZChvayk7CiB9CiAKK1dlYkNvcmU6OkNvb2tpZUphciBGcmFtZUxvYWRlckNsaWVu
dFF0Ojpjb29raWVKYXIoKQoreworICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+bG9hZGVy
KCkpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIoMCk7CisgICAgcmV0dXJuIFdl
YkNvcmU6OkNvb2tpZUphcihtX2ZyYW1lLT5sb2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSk7
Cit9CisKIH0KIAogI2luY2x1ZGUgIm1vY19GcmFtZUxvYWRlckNsaWVudFF0LmNwcCIKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRRdC5oCShyZXZpc2lvbiAxMzM1MDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
NyBAQAogI2RlZmluZSBGcmFtZUxvYWRlckNsaWVudFF0X2gKIAogCisjaW5jbHVkZSAiQ29va2ll
SmFyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC01Myw2ICs1NCw3IEBAIGNsYXNzIFFXZWJG
cmFtZTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2U7CitjbGFzcyBDb29raWVKYXI7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEVsZW1l
bnQ7CiBjbGFzcyBGb3JtU3RhdGU7CkBAIC0yMjcsNiArMjI5LDggQEAgcHVibGljOgogCiAgICAg
Y29uc3QgS1VSTCYgbGFzdFJlcXVlc3RlZFVybCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJlcXVl
c3RlZFVybDsgfQogCisgICAgdmlydHVhbCBXZWJDb3JlOjpDb29raWVKYXIgY29va2llSmFyKCkg
T1ZFUlJJREU7CisKICAgICBzdGF0aWMgYm9vbCBkdW1wRnJhbWVMb2FkZXJDYWxsYmFja3M7CiAg
ICAgc3RhdGljIGJvb2wgZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsKICAgICBzdGF0aWMg
Ym9vbCBkdW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZGVyQ2FsbGJhY2tzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172862</attachid>
            <date>2012-11-07 12:56:42 -0800</date>
            <delta_ts>2012-11-07 15:15:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99340-20121107155440.patch</filename>
            <type>text/plain</type>
            <size>66277</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzc5NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBAQAorMjAxMi0xMS0wNyAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xp
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAg
ICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29v
a2llRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OkNvb2tpZUphcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBw
b3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nv
b2tpZUphci5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0Vu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tp
ZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
SmFyRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0ZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
Ojpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3
Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICog
cGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpk
ZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwpOgorCiAyMDEyLTExLTA3ICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1Y4XSBJbnRydXNpdmVET01XcmFw
cGVyTWFwIGlzIG5vIGxvbmdlciBuZWVkZWQgYW5kIGNhbiBiZSBkZWxldGVkCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTMzNzkwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDYgQEAgX19aTjdXZWJDb3JlMTBT
Y3JvbGxWaWV3MjR3aW5kb3dSZXNpemVyUgogX19aTjdXZWJDb3JlMTBTY3JvbGxWaWV3OGFkZENo
aWxkRU4zV1RGMTBQYXNzUmVmUHRySU5TXzZXaWRnZXRFRUUKIF9fWk43V2ViQ29yZTEwU2hhZG93
Um9vdDZjcmVhdGVFUE5TXzdFbGVtZW50RVJpCiBfX1pON1dlYkNvcmUxMGRlbGV0ZUZpbGVFUktO
M1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxMHNldENvb2tpZXNFUE5TXzhEb2N1bWVudEVSS05T
XzRLVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTB0b0RvY3VtZW50RU4zSlNDN0pT
VmFsdWVFCiBfX1pON1dlYkNvcmUxMUJpdG1hcEltYWdlQzFFUDdDR0ltYWdlUE5TXzEzSW1hZ2VP
YnNlcnZlckUKIF9fWk43V2ViQ29yZTExQml0bWFwSW1hZ2VDMUVQTlNfMTNJbWFnZU9ic2VydmVy
RQpAQCAtNDYzLDcgKzQ2Miw2IEBAIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVJL
TlNfMTUKIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVJLTlNfMTVWaXNpYmxlUG9z
aXRpb25FYgogX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNE5vZGVFCiBfX1pO
N1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU181UmFuZ2VFCi1fX1pON1dlYkNvcmUxNmRl
bGV0ZUFsbENvb2tpZXNFdgogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNfOUZs
b2F0UmVjdEUKIF9fWk43V2ViQ29yZTE2aXNFbmRPZlBhcmFncmFwaEVSS05TXzE1VmlzaWJsZVBv
c2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQogX19aTjdXZWJDb3JlMTZp
c1VzZXJWaXNpYmxlVVJMRVA4TlNTdHJpbmcKQEAgLTYyMiw3ICs2MjAsNiBAQCBfX1pON1dlYkNv
cmUyM2NyZWF0ZUZyYWdtZW50RnJvbU5vZGVzRVBOCiBfX1pON1dlYkNvcmUyM2RhdGFGb3JVUkxD
b21wb25lbnRUeXBlRVA1TlNVUkxsCiBfX1pON1dlYkNvcmUyM2RlY29kZUhvc3ROYW1lV2l0aFJh
bmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UKIF9fWk43V2ViQ29yZTIzZW5jb2RlSG9zdE5hbWVXaXRo
UmFuZ2VFUDhOU1N0cmluZzhfTlNSYW5nZQotX19aTjdXZWJDb3JlMjNnZXRIb3N0bmFtZXNXaXRo
Q29va2llc0VSTjNXVEY3SGFzaFNldElOUzBfNlN0cmluZ0VOUzBfMTBTdHJpbmdIYXNoRU5TMF8x
MEhhc2hUcmFpdHNJUzJfRUVFRQogX19aTjdXZWJDb3JlMjRCaW5hcnlQcm9wZXJ0eUxpc3RXcml0
ZXIxN3dyaXRlUHJvcGVydHlMaXN0RXYKIF9fWk43V2ViQ29yZTI0Q2FjaGVkUmVzb3VyY2VIYW5k
bGVCYXNlMTFzZXRSZXNvdXJjZUVQTlNfMTRDYWNoZWRSZXNvdXJjZUUKIF9fWk43V2ViQ29yZTI0
Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyMTBmaXJzdENoaWxkRXYKQEAgLTY0MSw3ICs2MzgsNiBA
QCBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckMyCiBfX1pON1dlYkNvcmUy
NEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckQyRXYKIF9fWk43V2ViQ29yZTI0Y3JlYXRlRnJhZ21l
bnRGcm9tTWFya3VwRVBOU184RG9jdW1lbnRFUktOM1dURjZTdHJpbmdFUzVfTlNfMjdGcmFnbWVu
dFNjcmlwdGluZ1Blcm1pc3Npb25FCiBfX1pON1dlYkNvcmUyNGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlc0VSS04zV1RGNlN0cmluZ0UKLV9fWk43V2ViQ29yZTI0ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjRmaWxlU3lzdGVtUmVwcmVzZW50YXRp
b25FUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUyNG5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdl
ZEUKIF9fWk43V2ViQ29yZTI1SGlzdG9yeVByb3BlcnR5TGlzdFdyaXRlcjExcmVsZWFzZURhdGFF
dgpAQCAtODc2LDcgKzg3Miw2IEBAIF9fWk43V2ViQ29yZTdSdW5Mb29wOVRpbWVyQmFzZUQyRXYK
IF9fWk43V2ViQ29yZTdUZXh0UnVuMTlhbGxvd3NSb3VuZGluZ0hhY2tzRXYKIF9fWk43V2ViQ29y
ZTdUZXh0UnVuMjFzX2FsbG93c1JvdW5kaW5nSGFja3NFCiBfX1pON1dlYkNvcmU3VGV4dFJ1bjIy
c2V0QWxsb3dzUm91bmRpbmdIYWNrc0ViCi1fX1pON1dlYkNvcmU3Y29va2llc0VQS05TXzhEb2N1
bWVudEVSS05TXzRLVVJMRQogX19aTjdXZWJDb3JlN2pzQXJyYXlFUE4zSlNDOUV4ZWNTdGF0ZUVQ
TlNfMTdKU0RPTUdsb2JhbE9iamVjdEVOM1dURjEwUGFzc1JlZlB0cklOU18xM0RPTVN0cmluZ0xp
c3RFRUUKIF9fWk43V2ViQ29yZTdtYWtlUkdCRWlpaQogX19aTjdXZWJDb3JlN3JlcGxhY2VFUk4z
V1RGNlN0cmluZ0VSS05TXzE3UmVndWxhckV4cHJlc3Npb25FUktTMV8KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5j
cHAJKHJldmlzaW9uIDEzMzc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0
cy9XZWJTb2NrZXRDaGFubmVsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBA
IGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0J1ZmZlcigpCiAgICAgICAgICAgICBpZiAo
bV9pZGVudGlmaWVyKQogICAgICAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKG1fZG9jdW1lbnQsIG1faWRlbnRp
ZmllciwgbV9oYW5kc2hha2UtPnNlcnZlckhhbmRzaGFrZVJlc3BvbnNlKCkpOwogICAgICAgICAg
ICAgaWYgKCFtX2hhbmRzaGFrZS0+c2VydmVyU2V0Q29va2llKCkuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvb2tpZXNFbmFibGVkKG1fZG9jdW1lbnQpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1fZG9jdW1lbnQtPmNvb2tpZXNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlYzsgLy8gRXhjZXB0aW9uIChmb3Igc2FuZGJveGVkIGRvY3Vt
ZW50cykgaWdub3JlZC4KICAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+c2V0Q29va2ll
KG1faGFuZHNoYWtlLT5zZXJ2ZXJTZXRDb29raWUoKSwgZWMpOwogICAgICAgICAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hh
a2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9X
ZWJTb2NrZXRIYW5kc2hha2UuY3BwCShyZXZpc2lvbiAxMzM3OTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksOSBAQAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tp
ZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgpAQCAtMjAwLDcgKzIwMywxMCBAQCBDU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFr
ZTo6Y2xpZW50SGFuZHNoCiAgICAgS1VSTCB1cmwgPSBodHRwVVJMRm9yQXV0aGVudGljYXRpb25B
bmRDb29raWVzKCk7CiAgICAgaWYgKG1fY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9jb250ZXh0KTsK
LSAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRv
Y3VtZW50LCB1cmwpOworICAgICAgICBTdHJpbmcgY29va2llOworICAgICAgICBGcmFtZSogZnJh
bWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAgICAgaWYgKGZyYW1lKQorICAgICAgICAgICAg
Y29va2llID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMo
KSk7CiAgICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGZpZWxkcy5h
cHBlbmQoIkNvb2tpZTogIiArIGNvb2tpZSk7CiAgICAgICAgIC8vIFNldCAiQ29va2llMjogPGNv
b2tpZT4iIGlmIGNvb2tpZXMgMiBleGlzdHMgZm9yIHVybD8KQEAgLTI0OSw3ICsyNTUsMTIgQEAg
UGFzc1JlZlB0cjxXZWJTb2NrZXRIYW5kc2hha2VSZXF1ZXN0PiBXZQogICAgIEtVUkwgdXJsID0g
aHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2llcygpOwogICAgIGlmIChtX2NvbnRleHQt
PmlzRG9jdW1lbnQoKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2Fz
dDxEb2N1bWVudCo+KG1fY29udGV4dCk7Ci0gICAgICAgIFN0cmluZyBjb29raWUgPSBjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAgICAgICAgU3RyaW5nIGNv
b2tpZTsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgICAg
IGlmIChmcmFtZSkgeworICAgICAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5s
b2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOworICAgICAgICAgICAgY29va2llID0gY29v
a2llSmFyLmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCkpOworICAgICAgICB9CiAgICAgICAgIGlmICghY29va2llLmlzRW1w
dHkoKSkKICAgICAgICAgICAgIHJlcXVlc3QtPmFkZEhlYWRlckZpZWxkKCJDb29raWUiLCBjb29r
aWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxjb29raWU+IiBpZiBjb29raWVzIDIgZXhp
c3RzIGZvciB1cmw/CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEzMzc5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4MTUsNyArMzgxNSw5IEBAIFN0cmluZyBEb2N1bWVudDo6Y29va2llKEV4Y2VwdGlvbkNvZGUm
IGUKICAgICBpZiAoY29va2llVVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogCi0gICAgcmV0dXJuIGNvb2tpZXModGhpcywgY29va2llVVJMKTsKKyAgICBpZiAoIWZyYW1l
KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVy
KCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVzKGNvb2tpZVVSTCwgdGhpcy0+Zmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnNldENvb2tpZShjb25zdCBT
dHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTM4MzYsNyArMzgzOCwyMyBAQCB2
b2lkIERvY3VtZW50OjpzZXRDb29raWUoY29uc3QgU3RyaW5nJiB2CiAgICAgaWYgKGNvb2tpZVVS
TC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldENvb2tpZXModGhpcywgY29v
a2llVVJMLCB2YWx1ZSk7CisgICAgaWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm47CisgICAg
ZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVzKGNvb2tp
ZVVSTCwgdGhpcy0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUpOworfQorCitib29sIERv
Y3VtZW50Ojpjb29raWVzRW5hYmxlZCgpCit7CisgICAgaWYgKCFwYWdlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghcGFnZSgpLT5zZXR0aW5ncygpLT5jb29raWVFbmFibGVk
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+
Y29va2llSmFyKCkuY29va2llc0VuYWJsZWQodGhpcy0+Y29va2llVVJMKCksIHRoaXMtPmZpcnN0
UGFydHlGb3JDb29raWVzKCkpOwogfQogCiBTdHJpbmcgRG9jdW1lbnQ6OnJlZmVycmVyKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxMzM3OTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODIzLDYgKzgyMyw3IEBA
IHB1YmxpYzoKIAogICAgIFN0cmluZyBjb29raWUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAg
IHZvaWQgc2V0Q29va2llKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29s
IGNvb2tpZXNFbmFibGVkKCk7CiAKICAgICBTdHJpbmcgcmVmZXJyZXIoKSBjb25zdDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJ
KHJldmlzaW9uIDEzMzc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQ
YWdlQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw4IEBACiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uRXJyb3IuaCIKQEAgLTUwOSw5ICs1MTEsMTAg
QEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJybwogICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRy
YXZlcnNlTmV4dChtYWluRnJhbWUoKSkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
ZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0gYWxsUmVz
b3VyY2VzVVJMc0ZvckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9
IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwogICAgICAgICBmb3IgKFZl
Y3RvcjxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFs
bFVSTHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgIFZlY3RvcjxDb29raWU+IGRvY0Nvb2tp
ZXNMaXN0OwotICAgICAgICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVkID0gZ2V0UmF3Q29va2ll
cyhkb2N1bWVudCwgS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCksIGRvY0Nvb2tpZXNMaXN0KTsK
KyAgICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGNvb2tpZUphci5nZXRSYXdDb29r
aWVzKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSwgZG9jQ29va2llc0xpc3QpOwogICAgICAgICAgICAgaWYgKCFyYXdDb29raWVzSW1w
bGVtZW50ZWQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCBkdXBsaWNhdGlv
biBjaGVja2luZyBmb3IgdGhlIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBjb29raWVzLgogICAg
ICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwpAQCAtNTQ3LDggKzU1MCw5IEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXIKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgIFZlY3RvcjxLVVJMPiBhbGxVUkxzID0gYWxsUmVzb3VyY2VzVVJMc0Zv
ckZyYW1lKGZyYW1lKTsKKyAgICAgICAgQ29va2llSmFyIGNvb2tpZUphciA9IGZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpOwogICAgICAgICBmb3IgKFZlY3RvcjxLVVJMPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBhbGxVUkxzLmJlZ2luKCk7IGl0ICE9IGFsbFVSTHMuZW5kKCk7
ICsraXQpCi0gICAgICAgICAgICBXZWJDb3JlOjpkZWxldGVDb29raWUoZG9jdW1lbnQsIEtVUkwo
UGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29raWVOYW1lKTsKKyAgICAgICAgICAgIGNvb2tpZUph
ci5kZWxldGVDb29raWUoS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCksIGNvb2tpZU5hbWUpOwog
ICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50
LmgJKHJldmlzaW9uIDEzMzc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaWZuZGVmIEZyYW1l
TG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRfaAogCisjaW5jbHVkZSAi
Q29va2llSmFyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJUeXBlcy5oIgogI2luY2x1ZGUgIklj
b25VUkwuaCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmVzLmgiCkBAIC02NCw2ICs2NSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsK
ICAgICBjbGFzcyBDYWNoZWRGcmFtZTsKICAgICBjbGFzcyBDb2xvcjsKKyAgICBjbGFzcyBDb29r
aWVKYXI7CiAgICAgY2xhc3MgRE9NV2luZG93RXh0ZW5zaW9uOwogICAgIGNsYXNzIERPTVdyYXBw
ZXJXb3JsZDsKICAgICBjbGFzcyBEb2N1bWVudExvYWRlcjsKQEAgLTM1Myw2ICszNTUsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKFJFUVVFU1RfQVVUT0NPTVBMRVRFKQogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVxdWVzdEF1dG9jb21wbGV0ZShQYXNzUmVmUHRyPEZvcm1T
dGF0ZT4pID0gMDsKICNlbmRpZgorCisgICAgICAgIHZpcnR1YWwgQ29va2llSmFyIGNvb2tpZUph
cigpIHsgcmV0dXJuIENvb2tpZUphcigpOyB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAkocmV2aXNpb24gMTMzNzkwKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Myw3ICsyMyw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgi
CiAKLSNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJET01NaW1lVHlwZUFycmF5Lmgi
CiAjaW5jbHVkZSAiRE9NUGx1Z2luQXJyYXkuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAt
MTE4LDcgKzExNyw3IEBAIGJvb2wgTmF2aWdhdG9yOjpjb29raWVFbmFibGVkKCkgY29uc3QKICAg
ICBpZiAobV9mcmFtZS0+cGFnZSgpICYmICFtX2ZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPmNv
b2tpZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGNvb2tp
ZXNFbmFibGVkKG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgIHJldHVybiBtX2ZyYW1lLT5kb2N1
bWVudCgpLT5jb29raWVzRW5hYmxlZCgpOwogfQogCiBib29sIE5hdmlnYXRvcjo6amF2YUVuYWJs
ZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgJKHJldmlzaW9u
IDEzMzc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiwxMiBAQAogI2lmbmRlZiBDb29raWVKYXJfaAogI2RlZmluZSBD
b29raWVKYXJfaAogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSA8cHVibGljL1dl
YkNvb2tpZUphci5oPgorI2VuZGlmCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkK
KyNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgpAQCAtMzMsMjUgKzM5LDU0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBLVVJMOwogc3RydWN0IENvb2tpZTsKIAotLy8gVGhlc2Ug
dHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgZG9jdW1lbnQuY29va2llIEFQSSwgd2l0aCBzcGVjaWFs
IHJ1bGVzIGZvciBIdHRwT25seSBjb29raWVzLgotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1l
bnQqLCBjb25zdCBLVVJMJik7Ci12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqLCBjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJik7Ci0KLS8vIFRoZXNlIG1ldGhvZHMgdXNlIGN1cnJlbnQgY29va2ll
IHN0b3JhZ2UsIHRodXMgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRvIGFjY291bnQu
Ci1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci1TdHJpbmcgY29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci1ib29s
IGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tp
ZT4mKTsKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYpOwotCi0vLyBUaGVzZSBmdW5jdGlvbnMgYWx3YXlzIGFjY2VzcyBkZWZhdWx0
IGNvb2tpZSBzdG9yYWdlLCBub3QgdGFraW5nIHByaXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRvIGFj
Y291bnQuCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9z
dG5hbWVzKTsKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9z
dG5hbWUpOwotdm9pZCBkZWxldGVBbGxDb29raWVzKCk7CitjbGFzcyBDb29raWVKYXIgeworcHVi
bGljOgorICAgIENvb2tpZUphcigpCisgICAgeworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAg
ICAgICBtX3dlYkNvb2tpZUphciA9IDA7CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkgfHwgUExB
VEZPUk0oRUZMKQorICAgICAgICBtX25ldHdvcmtpbmdDb250ZXh0ID0gMDsKKyNlbmRpZgorICAg
IH07CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgZXhwbGljaXQgQ29va2llSmFyKFdlYktp
dDo6V2ViQ29va2llSmFyKiB3ZWJDb29raWVKYXIpCisgICAgeworICAgICAgICBtX3dlYkNvb2tp
ZUphciA9IHdlYkNvb2tpZUphcjsKKyAgICB9OworI2VuZGlmCisjaWYgUExBVEZPUk0oUVQpIHx8
IFBMQVRGT1JNKEVGTCkKKyAgICBleHBsaWNpdCBDb29raWVKYXIoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQpCisgICAgeworICAgICAgICBtX25ldHdvcmtpbmdDb250ZXh0ID0gY29udGV4dDsK
KyAgICB9OworI2VuZGlmCisKKyAgICAvLyBjb29raWVzIG9taXRzIEh0dHBPbmx5IGNvb2tpZXMu
CisgICAgU3RyaW5nIGNvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsKKyAgICBTdHJp
bmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwm
KTsKKyAgICB2b2lkIHNldENvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmKTsKKyAgICBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJM
Jik7CisgICAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiwgVmVj
dG9yPENvb2tpZT4mKTsKKyAgICB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiwgY29uc3Qg
U3RyaW5nJik7CisKKyAgICB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3Ry
aW5nPiYgaG9zdG5hbWVzKTsKKyAgICB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lKTsKKyAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoKTsKKworcHJp
dmF0ZToKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICBXZWJLaXQ6OldlYkNvb2tpZUphciog
bV93ZWJDb29raWVKYXI7CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZM
KQorICAgIE5ldHdvcmtpbmdDb250ZXh0KiBtX25ldHdvcmtpbmdDb250ZXh0OworI2VuZGlmCit9
OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0LmgJKHJldmlz
aW9uIDEzMzc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3Jt
U3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxNCArNzgsNiBAQCBzdHJ1Y3QgRm9udFJl
bmRlclN0eWxlOwogCiBjbGFzcyBQbGF0Zm9ybVN1cHBvcnQgewogcHVibGljOgotICAgIC8vIENv
b2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gICAgc3RhdGljIHZvaWQgc2V0Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAgc3RhdGljIFN0cmluZyBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsK
LSAgICBzdGF0aWMgYm9vbCByYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYs
IFZlY3RvcjxDb29raWU+Jik7Ci0gICAgc3RhdGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSk7Ci0gICAgc3Rh
dGljIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKLQogICAgIC8vIEZvbnQg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAjaWYgT1MoV0lORE9XUykKICAgICBzdGF0aWMgYm9vbCBlbnN1cmVGb250TG9hZGVk
KEhGT05UKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVp
Y2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDEzMzc5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1
YWxDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUg
IkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjY4LDcgKzI3MCw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ28KIAogICAgIEtVUkwgbW92aWVVUkwgPSBLVVJMKEtV
UkwoKSwgdXJsKTsKICAgICBWZWN0b3I8Q29va2llPiBkb2N1bWVudENvb2tpZXM7Ci0gICAgaWYg
KCFnZXRSYXdDb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCBtb3ZpZVVSTCwgZG9jdW1lbnRDb29r
aWVzKSkKKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmdl
dFJhd0Nvb2tpZXMobW92aWVVUkwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBk
b2N1bWVudENvb2tpZXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHNpemVfdCBuZHgg
PSAwOyBuZHggPCBkb2N1bWVudENvb2tpZXMuc2l6ZSgpOyBuZHgrKykgewpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCShyZXZpc2lvbiAxMzM3OTApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC02MSw3ICs2MSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gZmlsdGVyQ29va2llcygK
ICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwogfQogCi1TdHJpbmcgY29va2llcyhjb25zdCBE
b2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC03Miw3ICs3Miw3IEBAIFN0cmlu
ZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1UKICAgICByZXR1cm4gU3RyaW5nKCk7
CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9y
Q29va2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtODMs
NyArODMsNyBAQCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uCiAgICAg
cmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQordm9pZCBDb29raWVK
YXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9y
Q29va2llcywgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogCkBAIC0xMDAsMTIgKzEwMCwxMiBAQCB2b2lkIHNldENvb2tpZXMoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgUmV0YWluUHRyPE5TQXJyYXk+IGZpbHRlcmVkQ29v
a2llcyA9IGZpbHRlckNvb2tpZXMoW05TSFRUUENvb2tpZSBjb29raWVzV2l0aFJlc3BvbnNlSGVh
ZGVyRmllbGRzOltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6Y29va2llU3RyaW5n
IGZvcktleTpAIlNldC1Db29raWUiXSBmb3JVUkw6Y29va2llVVJMXSk7CiAgICAgQVNTRVJUKFtm
aWx0ZXJlZENvb2tpZXMuZ2V0KCkgY291bnRdIDw9IDEpOwogCi0gICAgd2tTZXRIVFRQQ29va2ll
c0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpLmdldCgpLCBmaWx0ZXJlZENvb2tp
ZXMuZ2V0KCksIGNvb2tpZVVSTCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwor
ICAgIHdrU2V0SFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5n
ZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGZpcnN0UGFydHlGb3JDb29r
aWVzKTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKLWJvb2wgY29va2ll
c0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVk
KGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMq
LykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTExNiw3ICsxMTYs
NyBAQCBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KikKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
IHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3
Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3Q29va2llcy5jbGVh
cigpOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKQEAgLTEzNSw3ICsxMzUsNyBA
QCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29v
a2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewogICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTU1LDcgKzE1NSw3IEBAIHZvaWQgZGVs
ZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5n
PiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhh
c2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKIApAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
SGFzaFNldDxTdHIKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIGRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29r
aWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQog
ewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTg0LDcgKzE4NCw3IEBA
IHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmkKICAgICBFTkRfQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29r
aWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIHdrRGVsZXRlQWxsSFRUUENvb2tpZXMo
ZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNGTmV0LmNwcAko
cmV2aXNpb24gMTMzNzkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9D
b29raWVKYXJDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2lu
Y2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2VDRk5ldC5oIgotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlLmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKQEAgLTk1LDcgKzk0LDcgQEAgc3RhdGlj
IFJldGFpblB0cjxDRkFycmF5UmVmPiBmaWx0ZXJDb29raQogICAgIHJldHVybiBmaWx0ZXJlZENv
b2tpZXM7CiB9CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVz
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzU2MzI4ODM+IENGSFRU
UENvb2tpZVN0b3JhZ2Ugc3RvcmVzIGFuIGVtcHR5IGNvb2tpZSwgd2hpY2ggd291bGQgYmUgc2Vu
dCBhcyAiQ29va2llOiA9Ii4KICAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQpAQCAtMTA2LDcgKzEw
NSw3IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICAgICAg
cmV0dXJuOwogCiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxDRihBZG9wdENGLCB1cmwuY3Jl
YXRlQ0ZVUkwoKSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBmaXJzdFBhcnR5Rm9yQ29va2ll
c0NGKEFkb3B0Q0YsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLmNyZWF0ZUNGVVJM
KCkpOworICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQYXJ0eUZvckNvb2tpZXNDRihBZG9w
dENGLCBmaXJzdFBhcnR5Rm9yQ29va2llcy5jcmVhdGVDRlVSTCgpKTsKIAogICAgIC8vIDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTMxPiwgPHJkYXI6Ly80NDA5MDM0
PgogICAgIC8vIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJGaWVsZHMgZG9lc24ndCBwYXJzZSBj
b29raWVzIHdpdGhvdXQgYSB2YWx1ZQpAQCAtMTIzLDcgKzEyMiw3IEBAIHZvaWQgc2V0Q29va2ll
cyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBDRkhUVFBDb29raWVTdG9yYWdlU2V0Q29v
a2llcyhjb29raWVTdG9yYWdlLmdldCgpLCBmaWx0ZXJDb29raWVzKGNvb2tpZXNDRi5nZXQoKSku
Z2V0KCksIHVybENGLmdldCgpLCBmaXJzdFBhcnR5Rm9yQ29va2llc0NGLmdldCgpKTsKIH0KIAot
U3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYg
dXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtV
UkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdl
KCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpAQCAtMTM3LDcgKzEzNiw3IEBAIFN0cmluZyBj
b29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW4KICAgICByZXR1cm4gKENGU3RyaW5nUmVm
KUNGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAot
U3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiAvKmRv
Y3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBh
cnR5Rm9yQ29va2llcyovKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVm
PiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAo
IWNvb2tpZVN0b3JhZ2UpCkBAIC0xNTEsNyArMTUwLDcgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbgogICAgIHJldHVybiAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUoaGVhZGVyQ0YuZ2V0KCksIHNfY29va2llQ0YpOwogfQogCi1ib29sIGNvb2tpZXNF
bmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIENvb2tpZUphcjo6Y29v
a2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5
Rm9yQ29va2llcyovKQogewogICAgIENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3kgcG9s
aWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50
RG9tYWluOwogICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2ll
U3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCkpCkBAIC0xNTksNyArMTU4LDcg
QEAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkbwogICAgIHJldHVybiBw
b2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3Vt
ZW50RG9tYWluIHx8IHBvbGljeSA9PSBDRkhUVFBDb29raWVTdG9yYWdlQWNjZXB0UG9saWN5QWx3
YXlzOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJM
JiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJh
d0Nvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29r
aWVzKi8sIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xl
YXIoKTsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFn
ZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CkBAIC0xOTMsNyArMTkyLDcgQEAgYm9v
bCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29ucwogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdl
KCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpAQCAtMjE0LDcgKzIxMyw3IEBAIHZvaWQgZGVs
ZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAgICB9CiB9CiAKLXZvaWQgZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tp
ZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMp
CiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2Ug
PSBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkK
QEAgLTIzMiw3ICsyMzEsNyBAQCB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8
U3RyCiAgICAgfQogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJp
bmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShj
b25zdCBTdHJpbmcmIGhvc3RuYW1lKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9y
YWdlUmVmPiBjb29raWVTdG9yYWdlID0gZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAg
ICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0yNTEsNyArMjUwLDcgQEAgdm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaQogICAgIH0KIH0KIAotdm9pZCBkZWxldGVBbGxDb29r
aWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBSZXRhaW5Q
dHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGRlZmF1bHRDRkhUVFBD
b29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29r
aWVKYXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEzMzc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw1MiArMzIsNzQgQEAKICNpbmNsdWRlICJDb29raWVKYXIuaCIKIAogI2luY2x1
ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1T
dXBwb3J0LmgiCisjaW5jbHVkZSA8cHVibGljL1dlYkNvb2tpZS5oPgorI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJDb29raWVKYXIuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViU3RyaW5nLmg+CisjaW5jbHVk
ZSA8cHVibGljL1dlYlVSTC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUphcjo6c2V0
Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVz
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2ll
cyhkb2N1bWVudCwgdXJsLCB2YWx1ZSk7CisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAg
ICBtX3dlYkNvb2tpZUphci0+c2V0Q29va2llKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIHZh
bHVlKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3Jt
U3VwcG9ydDo6Y29va2llcyhkb2N1bWVudCwgdXJsKTsKKyAgICBpZiAoIW1fd2ViQ29va2llSmFy
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fd2ViQ29va2llSmFyLT5j
b29raWVzKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1TdHJpbmcgY29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAg
IHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRv
Y3VtZW50LCB1cmwpOworICAgIGlmICghbV93ZWJDb29raWVKYXIpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICByZXR1cm4gbV93ZWJDb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1ib29sIGNvb2tpZXNF
bmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgQ29va2llSmFyOjpjb29raWVz
RW5hYmxlZChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVz
KQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXNFbmFibGVkKGRvY3VtZW50
KTsKKyAgICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVzRW5hYmxlZCh1cmwsIGZpcnN0UGFydHlGb3JD
b29raWVzKTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29v
a2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQ
YXJ0eUZvckNvb2tpZXMsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewotICAgIHJldHVy
biBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2llcyk7
CisgICAgcmF3Q29va2llcy5jbGVhcigpOworICAgIFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6
V2ViQ29va2llPiB3ZWJDb29raWVzOworCisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAgICAg
ICBtX3dlYkNvb2tpZUphci0+cmF3Q29va2llcyh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzLCB3
ZWJDb29raWVzKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViQ29va2llJiB3ZWJDb29raWUg
PSB3ZWJDb29raWVzW2ldOworICAgICAgICBDb29raWUgY29va2llKHdlYkNvb2tpZS5uYW1lLCB3
ZWJDb29raWUudmFsdWUsIHdlYkNvb2tpZS5kb21haW4sIHdlYkNvb2tpZS5wYXRoLCB3ZWJDb29r
aWUuZXhwaXJlcywgd2ViQ29va2llLmh0dHBPbmx5LCB3ZWJDb29raWUuc2VjdXJlLCB3ZWJDb29r
aWUuc2Vzc2lvbik7CisgICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNvb2tpZSk7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQordm9p
ZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y29va2llTmFtZSkKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29raWUo
ZG9jdW1lbnQsIHVybCwgY29va2llTmFtZSk7CisgICAgaWYgKG1fd2ViQ29va2llSmFyKQorICAg
ICAgICBtX3dlYkNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7CiB9CiAK
LXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMp
Cit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+
JiAvKmhvc3RuYW1lcyovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9
CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUp
Cit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYg
Lypob3N0bmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAK
LXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2ll
cygpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3Vy
bC5jcHAJKHJldmlzaW9uIDEzMzc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNiBA
QAogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0yNiw1MiArMjUsNTIgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
Y29va2llSmFyOworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHNfY29va2llSmFyOwog
Ci12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIGNvbnN0IFN0
cmluZyYgdmFsdWUpCiB7Ci0gICAgY29va2llSmFyLnNldCh1cmwuc3RyaW5nKCksIHZhbHVlKTsK
KyAgICBzX2Nvb2tpZUphci5zZXQodXJsLnN0cmluZygpLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBj
b29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0
cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZp
cnN0UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnN0
cmluZygpKTsKKyAgICByZXR1cm4gc19jb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAK
LVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogLypk
b2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQ
YXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICAvLyBGSVhNRTogaW5jbHVkZSBIdHRwT25seSBjb29r
aWUuCi0gICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKKyAgICByZXR1cm4g
c19jb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQo
Y29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5h
YmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29r
aWVzKi8pCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jv
b2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtV
UkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMp
CiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNs
ZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVk
CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIC8q
dXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29raWVOYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5v
dCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNo
U2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRo
Q29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7CiAgICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9y
SG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5v
dCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29v
a2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBs
ZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nv
b2tpZUphclNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAkocmV2aXNpb24gMTMzNzkwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiQ29va2llSmFyU291cC5oIgogCiAj
aW5jbHVkZSAiQ29va2llLmgiCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCkBA
IC0zNCwxNyArMzUsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBTb3VwQ29v
a2llSmFyKiBjb29raWVKYXJGb3JEb2N1bWVudChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCitz
dGF0aWMgU291cENvb2tpZUphciogY29va2llSmFyRm9yQ29udGV4dChjb25zdCBOZXR3b3JraW5n
Q29udGV4dCogY29udGV4dCkKIHsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4g
MDsKLSAgICBjb25zdCBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAo
IWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBGcmFtZUxvYWRlciogbG9hZGVy
ID0gZnJhbWUtPmxvYWRlcigpOwotICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm4gMDsK
LSAgICBjb25zdCBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IGxvYWRlci0+bmV0d29ya2lu
Z0NvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJl
dHVybiBTT1VQX0NPT0tJRV9KQVIoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKGNvbnRleHQtPnNv
dXBTZXNzaW9uKCksIFNPVVBfVFlQRV9DT09LSUVfSkFSKSk7CkBAIC04NiwxNCArNzgsMTQgQEAg
c3RhdGljIGlubGluZSBib29sIGh0dHBPbmx5Q29va2llRXhpc3RzKAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKIHsKLSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXJGb3JEb2N1
bWVudChkb2N1bWVudCk7CisgICAgU291cENvb2tpZUphciogamFyID0gY29va2llSmFyRm9yQ29u
dGV4dChtX25ldHdvcmtpbmdDb250ZXh0KTsKICAgICBpZiAoIWphcikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgR093blB0cjxTb3VwVVJJPiBvcmlnaW4oc291cF91cmlfbmV3KHVybC5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgR093blB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5KHNvdXBf
dXJpX25ldyhkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKSk7CisgICAgR093blB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5KHNvdXBfdXJpX25ldyhm
aXJzdFBhcnR5Rm9yQ29va2llcy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CiAKICAgICAvLyBH
ZXQgZXhpc3RpbmcgY29va2llcyBmb3IgdGhpcyBvcmlnaW4uCiAgICAgR1NMaXN0KiBleGlzdGlu
Z0Nvb2tpZXMgPSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tpZV9saXN0KGphciwgb3JpZ2luLmdl
dCgpLCBUUlVFKTsKQEAgLTEyMCw5ICsxMTIsOSBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zCiAgICAgc291cF9jb29raWVzX2ZyZWUoZXhpc3RpbmdDb29raWVzKTsK
IH0KIAotc3RhdGljIFN0cmluZyBjb29raWVzRm9yRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgZm9ySFRUUEhlYWRlcikKK3N0YXRpYyBTdHJp
bmcgY29va2llc0ZvckNvbnRleHQoY29uc3QgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEtVUkwmIHVybCwgYm9vbCBmb3JIVFRQSGVhZGVyKQogewotICAgIFNvdXBDb29raWVKYXIq
IGphciA9IGNvb2tpZUphckZvckRvY3VtZW50KGRvY3VtZW50KTsKKyAgICBTb3VwQ29va2llSmFy
KiBqYXIgPSBjb29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQpOwogICAgIGlmICghamFyKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTEzMSwyNSArMTIzLDI1IEBAIHN0YXRpYyBTdHJp
bmcgY29va2llc0ZvckRvY3VtZW50KGNvbnN0IEQKICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChjb29raWVzLmdldCgpKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewotICAg
IHJldHVybiBjb29raWVzRm9yRG9jdW1lbnQoZG9jdW1lbnQsIHVybCwgZmFsc2UpOworICAgIHJl
dHVybiBjb29raWVzRm9yQ29udGV4dChtX25ldHdvcmtpbmdDb250ZXh0LCB1cmwsIGZhbHNlKTsK
IH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0
UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgcmV0dXJuIGNvb2tpZXNGb3JEb2N1bWVudChkb2N1
bWVudCwgdXJsLCB0cnVlKTsKKyAgICByZXR1cm4gY29va2llc0ZvckNvbnRleHQobV9uZXR3b3Jr
aW5nQ29udGV4dCwgdXJsLCB0cnVlKTsKIH0KIAotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQpCitib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3Qg
S1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewot
ICAgIHJldHVybiAhIWNvb2tpZUphckZvckRvY3VtZW50KGRvY3VtZW50KTsKKyAgICByZXR1cm4g
ISFtX25ldHdvcmtpbmdDb250ZXh0OwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29r
aWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiByYXdDb29r
aWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBTb3VwQ29va2llSmFyKiBqYXIg
PSBjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7CisgICAgU291cENvb2tpZUphciogamFy
ID0gY29va2llSmFyRm9yQ29udGV4dChtX25ldHdvcmtpbmdDb250ZXh0KTsKICAgICBpZiAoIWph
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNzAsOSArMTYyLDkgQEAgYm9vbCBnZXRS
YXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bQogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBTb3VwQ29va2llSmFyKiBq
YXIgPSBjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7CisgICAgU291cENvb2tpZUphciog
amFyID0gY29va2llSmFyRm9yQ29udGV4dChtX25ldHdvcmtpbmdDb250ZXh0KTsKICAgICBpZiAo
IWphcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xOTEsNyArMTgzLDcgQEAgdm9pZCBkZWxldGVD
b29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZQogICAgIH0KIH0KIAotdm9pZCBnZXRIb3N0bmFt
ZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFy
OjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKIHsK
ICAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBzb3VwQ29va2llSmFyKCk7CiAgICAgR093
blB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUph
cikpOwpAQCAtMjAzLDcgKzE5NSw3IEBAIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFz
aFNldDxTdHIKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0
IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgQ1N0cmluZyBob3N0TmFtZVN0cmlu
ZyA9IGhvc3RuYW1lLnV0ZjgoKTsKICAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBzb3Vw
Q29va2llSmFyKCk7CkBAIC0yMTYsNyArMjA4LDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9z
dG5hbWUoY29uc3QgU3RyaQogICAgIH0KIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3Zv
aWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBTb3VwQ29va2llSmFyKiBj
b29raWVKYXIgPSBzb3VwQ29va2llSmFyKCk7CiAgICAgR093blB0cjxHU0xpc3Q+IGNvb2tpZXMo
c291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcikpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCShy
ZXZpc2lvbiAxMzM3OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dpbi9D
b29raWVKYXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNs
dWRlICJDb29raWUuaCIKICNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNs
dWRlIDxXaW5pbmV0Lmg+CkBAIC0zNiwxNSArMzUsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICAvLyBGSVhNRTogRGVhbCB3aXRoIGRvY3VtZW50LT5m
aXJzdFBhcnR5Rm9yQ29va2llcygpLgorICAgIC8vIEZJWE1FOiBEZWFsIHdpdGggZmlyc3RQYXJ0
eUZvckNvb2tpZXMuCiAgICAgU3RyaW5nIHN0ciA9IHVybC5zdHJpbmcoKTsKICAgICBTdHJpbmcg
dmFsID0gdmFsdWU7CiAgICAgSW50ZXJuZXRTZXRDb29raWUoc3RyLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCksIDAsIHZhbC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsK
IH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3Qg
S1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBTdHJpbmcgc3RyID0g
dXJsLnN0cmluZygpOwogCkBAIC02Myw0MCArNjMsNDAgQEAgU3RyaW5nIGNvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqIC8qZG9jdW1lbgogICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7CiB9
CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0
eUZvckNvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IGluY2x1ZGUgSHR0cE9ubHkgY29va2llCi0g
ICAgcmV0dXJuIGNvb2tpZXMoZG9jdW1lbnQsIHVybCk7CisgICAgcmV0dXJuIGNvb2tpZXModXJs
LCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3Qg
RG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChj
b25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8p
CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29v
a2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8q
Zmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAg
ICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7
CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAK
LXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8s
IGNvbnN0IFN0cmluZyYgLypjb29raWVOYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0
cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5
ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3Qg
U3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQg
aW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFy
OjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRl
ZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmNwcAko
cmV2aXNpb24gMTMzNzkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFy
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw2IEBACiAKICNpbmNsdWRlICJDb29r
aWUuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJLVVJM
LmgiCiAjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJUaGlyZFBhcnR5
Q29va2llc1F0LmgiCkBAIC00OSwzMSArNDYsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dGF0aWMgU2hhcmVkQ29va2llSmFyUXQqIHNfc2hhcmVkQ29va2llSmFyUXQgPSAwOwogCi1zdGF0
aWMgTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250ZXh0KGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0g
ICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKLSAgICBpZiAoIWxvYWRl
cikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGxvYWRlci0+bmV0d29ya2luZ0NvbnRl
eHQoKTsKLX0KLQotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBj
b250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkK
KyAgICBpZiAoIW1fbmV0d29ya2luZ0NvbnRleHQpCiAgICAgICAgIHJldHVybjsKLSAgICBRTmV0
d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29v
a2llSmFyKCk7CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IG1fbmV0d29ya2luZ0NvbnRl
eHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwogICAgIGlmICghamFyKQog
ICAgICAgICByZXR1cm47CiAKICAgICBRVXJsIHVybEZvckNvb2tpZXModXJsKTsKLSAgICBRVXJs
IGZpcnN0UGFydHlVcmwoZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIGlm
ICghdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMoY29udGV4dCwgdXJsRm9yQ29va2llcywg
Zmlyc3RQYXJ0eVVybCkpCisgICAgUVVybCBmaXJzdFBhcnR5VXJsKGZpcnN0UGFydHlGb3JDb29r
aWVzKTsKKyAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRzKG1fbmV0d29ya2lu
Z0NvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQogICAgICAgICByZXR1cm47
CiAKICAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2llcyA9IFFOZXR3b3JrQ29va2llOjpw
YXJzZUNvb2tpZXMoUVN0cmluZyh2YWx1ZSkudG9MYXRpbjEoKSk7CkBAIC04OCwxNiArNzEsMTUg
QEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIGphci0+c2V0
Q29va2llc0Zyb21VcmwoY29va2llcywgdXJsRm9yQ29va2llcyk7CiB9CiAKLVN0cmluZyBjb29r
aWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENv
b2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlG
b3JDb29raWVzKQogewotICAgIE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2lu
Z0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4dCkKKyAgICBpZiAoIW1fbmV0d29y
a2luZ0NvbnRleHQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBRTmV0d29ya0Nvb2tp
ZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7
CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IG1fbmV0d29ya2luZ0NvbnRleHQtPm5ldHdv
cmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwogCiAgICAgUVVybCB1cmxGb3JDb29raWVz
KHVybCk7Ci0gICAgUVVybCBmaXJzdFBhcnR5VXJsKGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKTsKLSAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRzKGNvbnRleHQs
IHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQorICAgIFFVcmwgZmlyc3RQYXJ0eVVybChm
aXJzdFBhcnR5Rm9yQ29va2llcyk7CisgICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVy
bWl0cyhtX25ldHdvcmtpbmdDb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNv
b2tpZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwodXJsRm9yQ29va2llcyk7CkBAIC0xMTQsMTIgKzk2
LDExIEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwKICAgICByZXR1
cm4gcmVzdWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1TdHJpbmcg
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMICZ1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLykKIHsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250
ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdD
b250ZXh0KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgUU5ldHdvcmtDb29raWVKYXIq
IGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAg
IFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNj
ZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKIAogICAgIFFMaXN0PFFOZXR3b3JrQ29va2llPiBj
b29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKFFVcmwodXJsKSk7CiAgICAgaWYgKGNvb2tpZXMu
aXNFbXB0eSgpKQpAQCAtMTMyLDQxICsxMTMsNDAgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbgogICAgIHJldHVybiByZXN1bHRDb29raWVzLmpvaW4oUUxhdGluMVN0
cmluZygiOyAiKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50KQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8qdXJs
Ki8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKLSAgICBOZXR3b3Jr
aW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBp
ZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNv
b2tpZUphcigpOworICAgIHJldHVybiBtX25ldHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNz
TWFuYWdlcigpLT5jb29raWVKYXIoKTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBD
b29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYg
LypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsK
ICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogICAgIHJhd0Nvb2tpZXMuY2xlYXIo
KTsKICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVlIHdoZW4gaW1wbGVtZW50ZWQKIH0K
IAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3Qg
U3RyaW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgLyp1cmwq
LywgY29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHll
dCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8
U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIFNoYXJlZENvb2tpZUphclF0
KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGphcikKICAgICAg
ICAgamFyLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMpOwogfQogCi12b2lkIGRl
bGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29r
aWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQog
ewogICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVk
KCk7CiAgICAgaWYgKGphcikKICAgICAgICAgamFyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
aG9zdG5hbWUpOwogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFy
ZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGphcikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMTMzNzkwKQorKysgU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5Miw3ICsxMzky
LDcgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZUZvclVSTChOUE5VUgogICAgICAgICBp
ZiAodS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKHBh
cmVudEZyYW1lKCksIG1fZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoZnJhbWUpIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9IGNvb2tpZXMoZnJhbWUtPmRvY3Vt
ZW50KCksIHUpLnV0ZjgoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tpZVN0
ciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZXModSwgZnJh
bWUtPmRvY3VtZW50KCktPmZpcnN0UGFydHlGb3JDb29raWVzKCkpLnV0ZjgoKTsKICAgICAgICAg
ICAgICAgICBpZiAoIWNvb2tpZVN0ci5pc051bGwoKSkgewogICAgICAgICAgICAgICAgICAgICBj
b25zdCBpbnQgc2l6ZSA9IGNvb2tpZVN0ci5sZW5ndGgoKTsKICAgICAgICAgICAgICAgICAgICAg
KnZhbHVlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1BbGxvYyhzaXplKzEpKTsKQEAgLTE0
NTQsNyArMTQ1NCw3IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwoTlBOVVIK
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyBjb29raWVTdHIgPSBTdHJpbmc6OmZyb21VVEY4KHZh
bHVlLCBsZW4pOwogICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gZ2V0RnJhbWUocGFyZW50RnJh
bWUoKSwgbV9lbGVtZW50KTsKICAgICAgICAgICAgIGlmIChmcmFtZSAmJiAhY29va2llU3RyLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICBzZXRDb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCB1
LCBjb29raWVTdHIpOworICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkt
PmNvb2tpZUphcigpLnNldENvb2tpZXModSwgZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0UGFydHlG
b3JDb29raWVzKCksIGNvb2tpZVN0cik7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmVz
dWx0ID0gTlBFUlJfSU5WQUxJRF9VUkw7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
cmV2aXNpb24gMTMzNzk3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMTEtMDcgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIGNvb2tpZS1yZWxhdGVk
IGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFu
Z2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBk
ZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvQ29va2ll
cy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29va2llTWFuYWdl
cjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVN
YW5hZ2VyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b29raWVNYW5hZ2VyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OmNvb2tp
ZXNGb3JVUkwpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpzZXRDb29raWVzRm9yVVJM
KToKKwogMjAxMi0xMS0wNyAgQWxleGFuZHJ1IENoaWN1bGl0YSAgPGFjaGljdUBhZG9iZS5jb20+
CiAKICAgICAgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzIHNob3VsZCB1c2Ug
VmFsaWRhdGVkQ3VzdG9tRml0bGVyT3BlcmF0aW9uIGluc3RlYWQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJ
KHJldmlzaW9uIDEzMzc5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCB2b2lk
IFdlYkNvb2tpZU1hbmFnZXI6OmdldEhvc3RuYW1lc1dpdGhDCiAKICAgICBIYXNoU2V0PFN0cmlu
Zz4gaG9zdG5hbWVzOwogCi0gICAgV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9z
dG5hbWVzKTsKKyAgICBXZWJDb3JlOjpDb29raWVKYXIoKS5nZXRIb3N0bmFtZXNXaXRoQ29va2ll
cyhob3N0bmFtZXMpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gaG9zdG5hbWVMaXN0OwogICAgIGNv
cHlUb1ZlY3Rvcihob3N0bmFtZXMsIGhvc3RuYW1lTGlzdCk7CkBAIC02OSwxNCArNjksMTQgQEAg
dm9pZCBXZWJDb29raWVNYW5hZ2VyOjpkZWxldGVDb29raWVzRm9ySAogewogICAgIFdlYlByb2Nl
c3M6OkxvY2FsVGVybWluYXRpb25EaXNhYmxlciB0ZXJtaW5hdGlvbkRpc2FibGVyKFdlYlByb2Nl
c3M6OnNoYXJlZCgpKTsKIAotICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSho
b3N0bmFtZSk7CisgICAgV2ViQ29yZTo6Q29va2llSmFyKCkuZGVsZXRlQ29va2llc0Zvckhvc3Ru
YW1lKGhvc3RuYW1lKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpkZWxldGVBbGxDb29r
aWVzKCkKIHsKICAgICBXZWJQcm9jZXNzOjpMb2NhbFRlcm1pbmF0aW9uRGlzYWJsZXIgdGVybWlu
YXRpb25EaXNhYmxlcihXZWJQcm9jZXNzOjpzaGFyZWQoKSk7CiAKLSAgICBXZWJDb3JlOjpkZWxl
dGVBbGxDb29raWVzKCk7CisgICAgV2ViQ29yZTo6Q29va2llSmFyKCkuZGVsZXRlQWxsQ29va2ll
cygpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hh
bmdlcygpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuY3BwCShyZXZpc2lvbiAxMzM3OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDksMTIgKzEz
MDksMTkgQEAgU3RyaW5nIFBsdWdpblZpZXc6OnByb3hpZXNGb3JVUkwoY29uc3QgUwogCiBTdHJp
bmcgUGx1Z2luVmlldzo6Y29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsK
LSAgICByZXR1cm4gY29va2llcyhtX3BsdWdpbkVsZW1lbnQtPmRvY3VtZW50KCksIEtVUkwoS1VS
TCgpLCB1cmxTdHJpbmcpKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX3BsdWdpbkVsZW1l
bnQtPmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Cisg
ICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBmcmFt
ZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVzKEtVUkwoS1VSTCgpLCB1
cmxTdHJpbmcpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9CiAKIHZvaWQg
UGx1Z2luVmlldzo6c2V0Q29va2llc0ZvclVSTChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29u
c3QgU3RyaW5nJiBjb29raWVTdHJpbmcpCiB7Ci0gICAgc2V0Q29va2llcyhtX3BsdWdpbkVsZW1l
bnQtPmRvY3VtZW50KCksIEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpLCBjb29raWVTdHJpbmcpOwor
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAg
ICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoZnJhbWUpCisgICAg
ICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLnNldENvb2tpZXMoS1VS
TChLVVJMKCksIHVybFN0cmluZyksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBj
b29raWVTdHJpbmcpOwogfQogCiBib29sIFBsdWdpblZpZXc6OmdldEF1dGhlbnRpY2F0aW9uSW5m
byhjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSwgU3RyaW5nJiB1c2VybmFt
ZSwgU3RyaW5nJiBwYXNzd29yZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMzM3OTcpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEyLTExLTA3ICBNYXJrIFBpbGdyaW0gIDxwaWxn
cmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92ZSBjb29raWUtcmVs
YXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUg
Y2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rp
b24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvRnJhbWVMb2Fk
ZXJDbGllbnRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnRJbXBs
Ojpjb29raWVKYXIpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBzcmMvRnJhbWVMb2Fk
ZXJDbGllbnRJbXBsLmg6CisgICAgICAgIChGcmFtZUxvYWRlckNsaWVudEltcGwpOgorICAgICAg
ICAqIHNyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTIt
MTEtMDcgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBbVjhdIFdl
IHNob3VsZCBoaWRlIHRoZSBET01XcmFwcGVyTWFwcyBpbnNpZGUgRE9NRGF0YVN0b3JlCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50
SW1wbC5jcHAJKHJldmlzaW9uIDEzMzc5MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NjIsNCArMTY2
MiwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlkUmVxdWVzdEF1CiB9CiAjZW5k
aWYKIAorV2ViQ29yZTo6Q29va2llSmFyIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y29va2llSmFy
KCkKK3sKKyAgICBpZiAoIW1fd2ViRnJhbWUgfHwgIW1fd2ViRnJhbWUtPmNsaWVudCgpKQorICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKDApOworICAgIFdlYkNvb2tpZUphciogd2Vi
Q29va2llSmFyID0gbV93ZWJGcmFtZS0+Y2xpZW50KCktPmNvb2tpZUphcihtX3dlYkZyYW1lKTsK
KyAgICBpZiAoIXdlYkNvb2tpZUphcikKKyAgICAgICAgd2ViQ29va2llSmFyID0gV2ViS2l0OjpQ
bGF0Zm9ybTo6Y3VycmVudCgpLT5jb29raWVKYXIoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Q29v
a2llSmFyKHdlYkNvb2tpZUphcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBs
LmgJKHJldmlzaW9uIDEzMzc5MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1l
TG9hZGVyQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksNiArMjI5LDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZXF1ZXN0QXV0b2NvbXBsZXRlKFBhc3NSZWZQdHI8
V2ViQ29yZTo6Rm9ybVN0YXRlPikgT1ZFUlJJREU7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgV2Vi
Q29yZTo6Q29va2llSmFyIGNvb2tpZUphcigpIE9WRVJSSURFOworCiBwcml2YXRlOgogICAgIHZv
aWQgbWFrZURvY3VtZW50VmlldygpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9QbGF0Zm9ybVN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAJKHJldmlzaW9uIDEzMzc5MCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMCw4NiArMTAwLDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgV2ViQ29va2llSmFyKiBnZXRDb29raWVKYXIoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50KQotewotICAgIFdlYkZyYW1lSW1wbCogZnJhbWVJbXBsID0gV2ViRnJhbWVJ
bXBsOjpmcm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIGlmICghZnJhbWVJbXBsIHx8
ICFmcmFtZUltcGwtPmNsaWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBXZWJDb29raWVK
YXIqIGNvb2tpZUphciA9IGZyYW1lSW1wbC0+Y2xpZW50KCktPmNvb2tpZUphcihmcmFtZUltcGwp
OwotICAgIGlmICghY29va2llSmFyKQotICAgICAgICBjb29raWVKYXIgPSBXZWJLaXQ6OlBsYXRm
b3JtOjpjdXJyZW50KCktPmNvb2tpZUphcigpOwotICAgIHJldHVybiBjb29raWVKYXI7Ci19Ci0K
LS8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgV2ViQ29v
a2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29r
aWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+c2V0Q29va2llKHVybCwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCksIHZhbHVlKTsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6
Y29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAg
ICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2ll
SmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29r
aWVKYXItPmNvb2tpZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiB1
cmwpCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9
IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVz
dWx0ID0gY29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3Vt
ZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1i
b29sIFBsYXRmb3JtU3VwcG9ydDo6cmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgcmF3
Q29va2llcy5jbGVhcigpOwotICAgIFdlYlZlY3RvcjxXZWJDb29raWU+IHdlYkNvb2tpZXM7Ci0K
LSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0g
ICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5yYXdDb29raWVzKHVybCwgZG9j
dW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHdlYkNvb2tpZXMpOwotCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29u
c3QgV2ViQ29va2llJiB3ZWJDb29raWUgPSB3ZWJDb29raWVzW2ldOwotICAgICAgICBDb29raWUg
Y29va2llKHdlYkNvb2tpZS5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS52
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuZG9tYWluLAotICAgICAgICAg
ICAgICAgICAgICAgIHdlYkNvb2tpZS5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNv
b2tpZS5leHBpcmVzLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5odHRwT25seSwK
LSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2VjdXJlLAotICAgICAgICAgICAgICAg
ICAgICAgIHdlYkNvb2tpZS5zZXNzaW9uKTsKLSAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoY29v
a2llKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1TdXBwb3J0
OjpkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUph
ciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAg
Y29va2llSmFyLT5kZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKTsKLX0KLQotYm9vbCBQbGF0
Zm9ybVN1cHBvcnQ6OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsK
LSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0g
Z2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1
bHQgPSBjb29raWVKYXItPmNvb2tpZXNFbmFibGVkKGRvY3VtZW50LT5jb29raWVVUkwoKSwgZG9j
dW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
IC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2lmIE9TKFdJTkRPV1MpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMzM3OTcpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMS0wNyAgTWFyayBQaWxncmlt
ICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgY29v
a2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24g
b2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVy
LWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVMb2FkZXJDbGllbnRRdDo6Y29va2llSmFyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50RWZsKToKKwogMjAxMi0xMS0wNyAgRW1p
bCBBIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBFRkwg
YnVpbGQgZml4LgpJbmRleDogU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcAkocmV2aXNpb24gMTMzNzkwKQorKysg
U291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUzLDQgKzEwNTMsMTEgQEAgUGFzc1JlZlB0cjxGcmFtZU5l
dHdvcmtpbmdDb250ZXh0PiBGcmFtZQogICAgIHJldHVybiBGcmFtZU5ldHdvcmtpbmdDb250ZXh0
RWZsOjpjcmVhdGUoRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKG1fZnJhbWUpLCBtX2ZyYW1lKTsKIH0K
IAorV2ViQ29yZTo6Q29va2llSmFyIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNvb2tpZUphcigpCit7
CisgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5sb2FkZXIoKSkKKyAgICAgICAgcmV0dXJu
IFdlYkNvcmU6OkNvb2tpZUphcigwKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKG1f
ZnJhbWUtPmxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpKTsKK30KKwogfQpJbmRleDogU291
cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEVmbC5oCShyZXZpc2lvbiAxMzM3OTApCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50RWZsX2gKICNkZWZpbmUgRnJhbWVMb2Fk
ZXJDbGllbnRFZmxfaAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRVdlYktp
dC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luVmll
dy5oIgpAQCAtNDEsNiArNDIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENv
b2tpZUphcjsKIGNsYXNzIEZvcm1TdGF0ZTsKIAogY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRFZmwg
OiBwdWJsaWMgRnJhbWVMb2FkZXJDbGllbnQgewpAQCAtMjEwLDYgKzIxMiw5IEBAIGNsYXNzIEZy
YW1lTG9hZGVyQ2xpZW50RWZsIDogcHVibGljIEZyYW0KICAgICB2aXJ0dWFsIHZvaWQgZG93bmxv
YWQoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJik7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWVOZXR3
b3JraW5nQ29udGV4dD4gY3JlYXRlTmV0d29ya2luZ0NvbnRleHQoKTsKKworICAgIHZpcnR1YWwg
V2ViQ29yZTo6Q29va2llSmFyIGNvb2tpZUphcigpIE9WRVJSSURFOworCiAgcHJpdmF0ZToKICAg
ICBib29sIGlzTG9hZGluZ01haW5GcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWUgPT0gZXdr
X3ZpZXdfZnJhbWVfbWFpbl9nZXQobV92aWV3KTsgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxMzM3OTcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMS0wNyAgTWFyayBQaWxncmltICA8cGlsZ3Jp
bUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgY29va2llLXJlbGF0
ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNo
YW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9u
IGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQv
TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6OmdldENvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXRz
Y2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldENvb2tpZXMpOgorICAgICAgICAqIFBsdWdpbnMv
V2ViTmV0c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZp
ZXcgZ2V0VmFyaWFibGU6Zm9yVVJMOnZhbHVlOmxlbmd0aDpdKToKKyAgICAgICAgKC1bV2ViTmV0
c2NhcGVQbHVnaW5WaWV3IHNldFZhcmlhYmxlOmZvclVSTDp2YWx1ZTpsZW5ndGg6XSk6CisKIDIw
MTItMTEtMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkIGF0dGVtcHQgdG8gZml4IHRoZSBjaHJvbWl1bS1tYWMgYnVpbGQuCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQko
cmV2aXNpb24gMTMzNzkwKQorKysgU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2Fw
ZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAKICNpbXBvcnQg
PFdlYkNvcmUvRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPiAKICNpbXBvcnQg
PFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4gCisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyQ2xp
ZW50Lmg+IAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUuaD4KICNpbXBvcnQgPFdlYkNvcmUv
RnJhbWVWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxQbHVnSW5FbGVtZW50Lmg+CkBAIC0y
MjE2LDcgKzIyMTcsNyBAQCAtIChOUEVycm9yKWdldFZhcmlhYmxlOihOUE5VUkxWYXJpYWJsZSl2
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdlYkZyYW1lXSkpIHsKLSAgICAgICAgICAgICAgICBT
dHJpbmcgY29va2llU3RyaW5nID0gY29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgVVJMKTsgCisg
ICAgICAgICAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPmNvb2tpZUphcigpLmNvb2tpZXMoVVJMLCBmcmFtZS0+ZG9jdW1lbnQoKS0+Zmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSk7IAogICAgICAgICAgICAgICAgIENTdHJpbmcgY29va2llU3RyaW5n
VVRGOCA9IGNvb2tpZVN0cmluZy51dGY4KCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvb2tpZVN0
cmluZ1VURjguaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOUEVSUl9HRU5F
UklDX0VSUk9SOwpAQCAtMjI3MCw3ICsyMjcxLDcgQEAgLSAoTlBFcnJvcilzZXRWYXJpYWJsZToo
TlBOVVJMVmFyaWFibGUpdgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0pKSB7Ci0g
ICAgICAgICAgICAgICAgc2V0Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgVVJMLCBjb29raWVT
dHJpbmcpOworICAgICAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tp
ZUphcigpLnNldENvb2tpZXMoVVJMLCBmcmFtZS0+ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSwgY29va2llU3RyaW5nKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfTk9f
RVJST1I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbklu
c3RhbmNlUHJveHkubW0JKHJldmlzaW9uIDEzMzc5MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1Bs
dWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkod29ya2luZyBjb3B5
KQpAQCAtNTEsNiArNTEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5o
PgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlckNsaWVudC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZVRyZWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvS1VSTC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9Qcm94eVNlcnZlci5oPgpAQCAtMTUxNSw3ICsxNTE2LDcgQEAgYm9vbCBOZXRzY2FwZVBsdWdp
bkluc3RhbmNlUHJveHk6OmdldENvbwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW21fcGx1Z2luVmlldyB3ZWJGcmFtZV0pKSB7Ci0gICAg
ICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCB1cmwp
OyAKKyAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCktPmNvb2tpZUphcigpLmNvb2tpZXModXJsLCBmcmFtZS0+ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSk7IAogICAgICAgICBXVEY6OkNTdHJpbmcgY29va2llU3RyaW5nVVRGOCA9
IGNvb2tpZVN0cmluZy51dGY4KCk7CiAgICAgICAgIGlmIChjb29raWVTdHJpbmdVVEY4LmlzTnVs
bCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTU0Myw3ICsxNTQ0LDcgQEAgYm9v
bCBOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldENvbwogICAgICAgICBpZiAoIWNvb2tp
ZVN0cmluZykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIFdl
YkNvcmU6OnNldENvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIHVybCwgY29va2llU3RyaW5nKTsK
KyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuc2V0Q29va2ll
cyh1cmwsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVT
dHJpbmcpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMzM3OTcpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTExLTA3ICBNYXJrIFBpbGdyaW0gIDxwaWxn
cmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92ZSBjb29raWUtcmVs
YXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUg
Y2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rp
b24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50UXQ6OmNvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50UXQpOgorCiAyMDEyLTExLTA3ICBBbGxhbiBTYW5kZmVs
ZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5AZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF0gT3BlbiBs
aW5rIGluIHRoaXMgd2luZG93IGFjdGlvbgpJbmRleDogU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCShyZXZpc2lvbiAx
MzM3OTApCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc2LDYgKzE2NzYsMTMgQEAgdm9pZCBGcmFt
ZUxvYWRlckNsaWVudFF0OjplbWl0TG9hZEZpbmlzaAogICAgIGVtaXQgbV93ZWJGcmFtZS0+bG9h
ZEZpbmlzaGVkKG9rKTsKIH0KIAorV2ViQ29yZTo6Q29va2llSmFyIEZyYW1lTG9hZGVyQ2xpZW50
UXQ6OmNvb2tpZUphcigpCit7CisgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5sb2FkZXIo
KSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tpZUphcigwKTsKKyAgICByZXR1cm4gV2Vi
Q29yZTo6Q29va2llSmFyKG1fZnJhbWUtPmxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpKTsK
K30KKwogfQogCiAjaW5jbHVkZSAibW9jX0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwIgpJbmRleDog
U291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFF0LmgJKHJldmlzaW9uIDEzMzc5MCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAjZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50UXRfaAogCiAKKyNpbmNsdWRlICJDb29raWVK
YXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTUzLDYgKzU0LDcgQEAgY2xhc3MgUVdlYkZy
YW1lOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZTsKK2NsYXNzIENvb2tpZUphcjsKIGNsYXNzIERvY3VtZW50TG9hZGVyOwogY2xhc3MgRWxlbWVu
dDsKIGNsYXNzIEZvcm1TdGF0ZTsKQEAgLTIyNyw2ICsyMjksOCBAQCBwdWJsaWM6CiAKICAgICBj
b25zdCBLVVJMJiBsYXN0UmVxdWVzdGVkVXJsKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UmVxdWVz
dGVkVXJsOyB9CiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZUphciBjb29raWVKYXIoKSBP
VkVSUklERTsKKwogICAgIHN0YXRpYyBib29sIGR1bXBGcmFtZUxvYWRlckNhbGxiYWNrczsKICAg
ICBzdGF0aWMgYm9vbCBkdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrOwogICAgIHN0YXRpYyBi
b29sIGR1bXBVc2VyR2VzdHVyZUluRnJhbWVMb2FkZXJDYWxsYmFja3M7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172878</attachid>
            <date>2012-11-07 15:15:36 -0800</date>
            <delta_ts>2012-11-08 06:18:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99340-20121107181334.patch</filename>
            <type>text/plain</type>
            <size>69350</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzgxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBAQAorMjAxMi0xMS0wNyAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xp
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAg
ICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29v
a2llRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OkNvb2tpZUphcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBw
b3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nv
b2tpZUphci5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0Vu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tp
ZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
SmFyRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0ZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
Ojpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3
Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICog
cGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpk
ZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwpOgorCiAyMDEyLTExLTA3ICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1Y4XSBJbnRydXNpdmVET01XcmFw
cGVyTWFwIHNob3VsZCBiZSB1c2FibGUgZm9yIG1vcmUgdGhhbiBqdXN0IE5vZGVzCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTMzODA5KQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDYgQEAgX19aTjdXZWJDb3Jl
MTBTY3JvbGxWaWV3MjR3aW5kb3dSZXNpemVyUgogX19aTjdXZWJDb3JlMTBTY3JvbGxWaWV3OGFk
ZENoaWxkRU4zV1RGMTBQYXNzUmVmUHRySU5TXzZXaWRnZXRFRUUKIF9fWk43V2ViQ29yZTEwU2hh
ZG93Um9vdDZjcmVhdGVFUE5TXzdFbGVtZW50RVJpCiBfX1pON1dlYkNvcmUxMGRlbGV0ZUZpbGVF
UktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUxMHNldENvb2tpZXNFUE5TXzhEb2N1bWVudEVS
S05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTB0b0RvY3VtZW50RU4zSlND
N0pTVmFsdWVFCiBfX1pON1dlYkNvcmUxMUJpdG1hcEltYWdlQzFFUDdDR0ltYWdlUE5TXzEzSW1h
Z2VPYnNlcnZlckUKIF9fWk43V2ViQ29yZTExQml0bWFwSW1hZ2VDMUVQTlNfMTNJbWFnZU9ic2Vy
dmVyRQpAQCAtMjY5LDYgKzI2OCwxMSBAQCBfX1pON1dlYkNvcmUxNEZyYW1lU2VsZWN0aW9uQzFF
UE5TXzVGcmFtCiBfX1pON1dlYkNvcmUxNExvYWRlclN0cmF0ZWd5MjFyZXNvdXJjZUxvYWRTY2hl
ZHVsZXJFdgogX19aTjdXZWJDb3JlMTRQbHVnaW5Eb2N1bWVudDEwcGx1Z2luTm9kZUV2CiBfX1pO
SzdXZWJDb3JlNUZyYW1lMjV0cmFja2VkUmVwYWludFJlY3RzQXNUZXh0RXYKK19fWk43V2ViQ29y
ZTlDb29raWVKYXIxMHNldENvb2tpZXNFUktOU180S1VSTEVTM19SS04zV1RGNlN0cmluZ0UKK19f
Wk43V2ViQ29yZTlDb29raWVKYXIxNmRlbGV0ZUFsbENvb2tpZXNFdgorX19aTjdXZWJDb3JlOUNv
b2tpZUphcjIzZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXNFUk4zV1RGN0hhc2hTZXRJTlMxXzZTdHJp
bmdFTlMxXzEwU3RyaW5nSGFzaEVOUzFfMTBIYXNoVHJhaXRzSVMzX0VFRUUKK19fWk43V2ViQ29y
ZTlDb29raWVKYXIyNGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZUVSS04zV1RGNlN0cmluZ0UKK19f
Wk43V2ViQ29yZTlDb29raWVKYXI3Y29va2llc0VSS05TXzRLVVJMRVMzXwogX19aTjdXZWJDb3Jl
OUZyYW1lVmlldzE3c2V0VHJhY2tzUmVwYWludHNFYgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzIw
cmVzZXRUcmFja2VkUmVwYWludHNFdgogX19aTjdXZWJDb3JlMTRQbHVnaW5Eb2N1bWVudDEycGx1
Z2luV2lkZ2V0RXYKQEAgLTQ2Myw3ICs0NjcsNiBAQCBfX1pON1dlYkNvcmUxNlZpc2libGVTZWxl
Y3Rpb25DMUVSS05TXzE1CiBfX1pON1dlYkNvcmUxNlZpc2libGVTZWxlY3Rpb25DMUVSS05TXzE1
VmlzaWJsZVBvc2l0aW9uRWIKIF9fWk43V2ViQ29yZTE2Y3JlYXRlRnVsbE1hcmt1cEVQS05TXzRO
b2RlRQogX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNVJhbmdlRQotX19aTjdX
ZWJDb3JlMTZkZWxldGVBbGxDb29raWVzRXYKIF9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVj
dEVSS05TXzlGbG9hdFJlY3RFCiBfX1pON1dlYkNvcmUxNmlzRW5kT2ZQYXJhZ3JhcGhFUktOU18x
NVZpc2libGVQb3NpdGlvbkVOU18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk43
V2ViQ29yZTE2aXNVc2VyVmlzaWJsZVVSTEVQOE5TU3RyaW5nCkBAIC02MjIsNyArNjI1LDYgQEAg
X19aTjdXZWJDb3JlMjNjcmVhdGVGcmFnbWVudEZyb21Ob2Rlc0VQTgogX19aTjdXZWJDb3JlMjNk
YXRhRm9yVVJMQ29tcG9uZW50VHlwZUVQNU5TVVJMbAogX19aTjdXZWJDb3JlMjNkZWNvZGVIb3N0
TmFtZVdpdGhSYW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCiBfX1pON1dlYkNvcmUyM2VuY29kZUhv
c3ROYW1lV2l0aFJhbmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UKLV9fWk43V2ViQ29yZTIzZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXNFUk4zV1RGN0hhc2hTZXRJTlMwXzZTdHJpbmdFTlMwXzEwU3RyaW5n
SGFzaEVOUzBfMTBIYXNoVHJhaXRzSVMyX0VFRUUKIF9fWk43V2ViQ29yZTI0QmluYXJ5UHJvcGVy
dHlMaXN0V3JpdGVyMTd3cml0ZVByb3BlcnR5TGlzdEV2CiBfX1pON1dlYkNvcmUyNENhY2hlZFJl
c291cmNlSGFuZGxlQmFzZTExc2V0UmVzb3VyY2VFUE5TXzE0Q2FjaGVkUmVzb3VyY2VFCiBfX1pO
N1dlYkNvcmUyNENvbXBvc2VkU2hhZG93VHJlZVdhbGtlcjEwZmlyc3RDaGlsZEV2CkBAIC02NDEs
NyArNjQzLDYgQEAgX19aTjdXZWJDb3JlMjRGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXJDMgogX19a
TjdXZWJDb3JlMjRGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXJEMkV2CiBfX1pON1dlYkNvcmUyNGNy
ZWF0ZUZyYWdtZW50RnJvbU1hcmt1cEVQTlNfOERvY3VtZW50RVJLTjNXVEY2U3RyaW5nRVM1X05T
XzI3RnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uRQogX19aTjdXZWJDb3JlMjRkZWNvZGVVUkxF
c2NhcGVTZXF1ZW5jZXNFUktOM1dURjZTdHJpbmdFCi1fX1pON1dlYkNvcmUyNGRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI0ZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjRub3RpZnlIaXN0b3J5
SXRlbUNoYW5nZWRFCiBfX1pON1dlYkNvcmUyNUhpc3RvcnlQcm9wZXJ0eUxpc3RXcml0ZXIxMXJl
bGVhc2VEYXRhRXYKQEAgLTg3Niw3ICs4NzcsNiBAQCBfX1pON1dlYkNvcmU3UnVuTG9vcDlUaW1l
ckJhc2VEMkV2CiBfX1pON1dlYkNvcmU3VGV4dFJ1bjE5YWxsb3dzUm91bmRpbmdIYWNrc0V2CiBf
X1pON1dlYkNvcmU3VGV4dFJ1bjIxc19hbGxvd3NSb3VuZGluZ0hhY2tzRQogX19aTjdXZWJDb3Jl
N1RleHRSdW4yMnNldEFsbG93c1JvdW5kaW5nSGFja3NFYgotX19aTjdXZWJDb3JlN2Nvb2tpZXNF
UEtOU184RG9jdW1lbnRFUktOU180S1VSTEUKIF9fWk43V2ViQ29yZTdqc0FycmF5RVBOM0pTQzlF
eGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTNE
T01TdHJpbmdMaXN0RUVFCiBfX1pON1dlYkNvcmU3bWFrZVJHQkVpaWkKIF9fWk43V2ViQ29yZTdy
ZXBsYWNlRVJOM1dURjZTdHJpbmdFUktOU18xN1JlZ3VsYXJFeHByZXNzaW9uRVJLUzFfCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tl
dENoYW5uZWwuY3BwCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3
ICs0MzAsNyBAQCBib29sIFdlYlNvY2tldENoYW5uZWw6OnByb2Nlc3NCdWZmZXIoKQogICAgICAg
ICAgICAgaWYgKG1faWRlbnRpZmllcikKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZShtX2RvY3VtZW50
LCBtX2lkZW50aWZpZXIsIG1faGFuZHNoYWtlLT5zZXJ2ZXJIYW5kc2hha2VSZXNwb25zZSgpKTsK
ICAgICAgICAgICAgIGlmICghbV9oYW5kc2hha2UtPnNlcnZlclNldENvb2tpZSgpLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgICAgIGlmIChjb29raWVzRW5hYmxlZChtX2RvY3VtZW50KSkgewor
ICAgICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50LT5jb29raWVzRW5hYmxlZCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7IC8vIEV4Y2VwdGlvbiAoZm9yIHNhbmRi
b3hlZCBkb2N1bWVudHMpIGlnbm9yZWQuCiAgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQt
PnNldENvb2tpZShtX2hhbmRzaGFrZS0+c2VydmVyU2V0Q29va2llKCksIGVjKTsKICAgICAgICAg
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0SGFuZHNoYWtlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAkocmV2aXNpb24gMTMzODA5KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDkgQEAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNs
dWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgogI2luY2x1ZGUgIkhUVFBIZWFkZXJNYXAuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5o
IgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTIwMCw3ICsyMDMsMTAgQEAgQ1N0cmluZyBXZWJTb2Nr
ZXRIYW5kc2hha2U6OmNsaWVudEhhbmRzaAogICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1dGhl
bnRpY2F0aW9uQW5kQ29va2llcygpOwogICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkg
ewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1f
Y29udGV4dCk7Ci0gICAgICAgIFN0cmluZyBjb29raWUgPSBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAgICAgICAgU3RyaW5nIGNvb2tpZTsKKyAgICAgICAg
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkKKyAg
ICAgICAgICAgIGNvb2tpZSA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigp
LmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlG
b3JDb29raWVzKCkpOwogICAgICAgICBpZiAoIWNvb2tpZS5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBmaWVsZHMuYXBwZW5kKCJDb29raWU6ICIgKyBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNv
b2tpZTI6IDxjb29raWU+IiBpZiBjb29raWVzIDIgZXhpc3RzIGZvciB1cmw/CkBAIC0yNDksNyAr
MjU1LDEyIEBAIFBhc3NSZWZQdHI8V2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdD4gV2UKICAgICBL
VVJMIHVybCA9IGh0dHBVUkxGb3JBdXRoZW50aWNhdGlvbkFuZENvb2tpZXMoKTsKICAgICBpZiAo
bV9jb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX2NvbnRleHQpOwotICAgICAgICBTdHJpbmcgY29va2ll
ID0gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7CisgICAgICAg
IFN0cmluZyBjb29raWU7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgp
OworICAgICAgICBpZiAoZnJhbWUpIHsKKyAgICAgICAgICAgIENvb2tpZUphciBjb29raWVKYXIg
PSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKTsKKyAgICAgICAgICAgIGNv
b2tpZSA9IGNvb2tpZUphci5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3Vt
ZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWNv
b2tpZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXF1ZXN0LT5hZGRIZWFkZXJGaWVsZCgiQ29v
a2llIiwgY29va2llKTsKICAgICAgICAgLy8gU2V0ICJDb29raWUyOiA8Y29va2llPiIgaWYgY29v
a2llcyAyIGV4aXN0cyBmb3IgdXJsPwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZp
c2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zODE1LDcgKzM4MTUsOSBAQCBTdHJpbmcgRG9jdW1lbnQ6OmNvb2tpZShFeGNl
cHRpb25Db2RlJiBlCiAgICAgaWYgKGNvb2tpZVVSTC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAotICAgIHJldHVybiBjb29raWVzKHRoaXMsIGNvb2tpZVVSTCk7CisgICAg
aWYgKCFmcmFtZSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIGZyYW1l
KCktPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llcyhjb29raWVVUkwsIHRo
aXMtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwogfQogCiB2b2lkIERvY3VtZW50OjpzZXRDb29r
aWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0zODM2LDcgKzM4
MzgsMjMgQEAgdm9pZCBEb2N1bWVudDo6c2V0Q29va2llKGNvbnN0IFN0cmluZyYgdgogICAgIGlm
IChjb29raWVVUkwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRDb29raWVz
KHRoaXMsIGNvb2tpZVVSTCwgdmFsdWUpOworICAgIGlmICghZnJhbWUoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuc2V0Q29v
a2llcyhjb29raWVVUkwsIHRoaXMtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHZhbHVlKTsKK30K
KworYm9vbCBEb2N1bWVudDo6Y29va2llc0VuYWJsZWQoKQoreworICAgIGlmICghcGFnZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXBhZ2UoKS0+c2V0dGluZ3MoKS0+Y29v
a2llRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWZyYW1lKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBmcmFtZSgpLT5sb2FkZXIoKS0+
Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZXNFbmFibGVkKHRoaXMtPmNvb2tpZVVSTCgpLCB0
aGlzLT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKIH0KIAogU3RyaW5nIERvY3VtZW50OjpyZWZl
cnJlcigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTMzODA5KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyMyw2
ICs4MjMsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgY29va2llKEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKICAgICB2b2lkIHNldENvb2tpZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7
CisgICAgYm9vbCBjb29raWVzRW5hYmxlZCgpOwogCiAgICAgU3RyaW5nIHJlZmVycmVyKCkgY29u
c3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdl
QWdlbnQuY3BwCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUGFnZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOCBAQAog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHZW9sb2Nh
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlvbkVycm9yLmgiCkBAIC01MDks
OSArNTExLDEwIEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm8KICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLT50cmF2ZXJzZU5leHQobWFpbkZyYW1lKCkpKSB7CiAgICAgICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwogICAgICAgICBWZWN0b3I8S1VSTD4gYWxsVVJM
cyA9IGFsbFJlc291cmNlc1VSTHNGb3JGcmFtZShmcmFtZSk7CisgICAgICAgIENvb2tpZUphciBj
b29raWVKYXIgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKTsKICAgICAg
ICAgZm9yIChWZWN0b3I8S1VSTD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsVVJMcy5iZWdpbigp
OyBpdCAhPSBhbGxVUkxzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgICAgICBWZWN0b3I8Q29va2ll
PiBkb2NDb29raWVzTGlzdDsKLSAgICAgICAgICAgIHJhd0Nvb2tpZXNJbXBsZW1lbnRlZCA9IGdl
dFJhd0Nvb2tpZXMoZG9jdW1lbnQsIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBkb2NDb29r
aWVzTGlzdCk7CisgICAgICAgICAgICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBjb29raWVKYXIu
Z2V0UmF3Q29va2llcyhLVVJMKFBhcnNlZFVSTFN0cmluZywgKml0KSwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCksIGRvY0Nvb2tpZXNMaXN0KTsKICAgICAgICAgICAgIGlmICghcmF3
Q29va2llc0ltcGxlbWVudGVkKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQg
ZHVwbGljYXRpb24gY2hlY2tpbmcgZm9yIHRoZSBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgY29v
a2llcy4KICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTU0Nyw4ICs1
NTAsOSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKEVyCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICBWZWN0b3I8S1VSTD4gYWxsVVJMcyA9IGFsbFJlc291
cmNlc1VSTHNGb3JGcmFtZShmcmFtZSk7CisgICAgICAgIENvb2tpZUphciBjb29raWVKYXIgPSBm
cmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKTsKICAgICAgICAgZm9yIChWZWN0
b3I8S1VSTD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWxsVVJMcy5iZWdpbigpOyBpdCAhPSBhbGxV
UkxzLmVuZCgpOyArK2l0KQotICAgICAgICAgICAgV2ViQ29yZTo6ZGVsZXRlQ29va2llKGRvY3Vt
ZW50LCBLVVJMKFBhcnNlZFVSTFN0cmluZywgKml0KSwgY29va2llTmFtZSk7CisgICAgICAgICAg
ICBjb29raWVKYXIuZGVsZXRlQ29va2llKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCAqaXQpLCBjb29r
aWVOYW1lKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlckNsaWVudC5oCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lm
bmRlZiBGcmFtZUxvYWRlckNsaWVudF9oCiAjZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50X2gKIAor
I2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNp
bmNsdWRlICJJY29uVVJMLmgiCiAjaW5jbHVkZSAiTGF5b3V0TWlsZXN0b25lcy5oIgpAQCAtNjQs
NiArNjUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2U7CiAgICAgY2xhc3MgQ2FjaGVkRnJhbWU7CiAgICAgY2xhc3MgQ29sb3I7CisgICAg
Y2xhc3MgQ29va2llSmFyOwogICAgIGNsYXNzIERPTVdpbmRvd0V4dGVuc2lvbjsKICAgICBjbGFz
cyBET01XcmFwcGVyV29ybGQ7CiAgICAgY2xhc3MgRG9jdW1lbnRMb2FkZXI7CkBAIC0zNTMsNiAr
MzU1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShSRVFVRVNUX0FVVE9DT01Q
TEVURSkKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlcXVlc3RBdXRvY29tcGxldGUoUGFzc1Jl
ZlB0cjxGb3JtU3RhdGU+KSA9IDA7CiAjZW5kaWYKKworICAgICAgICB2aXJ0dWFsIENvb2tpZUph
ciBjb29raWVKYXIoKSB7IHJldHVybiBDb29raWVKYXIoKTsgfQogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHJldmlzaW9u
IDEzMzgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvTmF2aWdhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5h
dmlnYXRvci5oIgogCi0jaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRE9NTWltZVR5
cGVBcnJheS5oIgogI2luY2x1ZGUgIkRPTVBsdWdpbkFycmF5LmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKQEAgLTExOCw3ICsxMTcsNyBAQCBib29sIE5hdmlnYXRvcjo6Y29va2llRW5hYmxlZCgp
IGNvbnN0CiAgICAgaWYgKG1fZnJhbWUtPnBhZ2UoKSAmJiAhbV9mcmFtZS0+cGFnZSgpLT5zZXR0
aW5ncygpLT5jb29raWVFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiBjb29raWVzRW5hYmxlZChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+Y29va2llc0VuYWJsZWQoKTsKIH0KIAogYm9vbCBOYXZpZ2F0b3I6
OmphdmFFbmFibGVkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tp
ZUphci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nvb2tpZUphci5o
CShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTIgQEAKICNpZm5kZWYgQ29va2llSmFyX2gK
ICNkZWZpbmUgQ29va2llSmFyX2gKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUg
PHB1YmxpYy9XZWJDb29raWVKYXIuaD4KKyNlbmRpZgorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFU
Rk9STShFRkwpIHx8IFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5o
IgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzMsMjUgKzM5LDU0IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBLVVJMOwog
c3RydWN0IENvb2tpZTsKIAotLy8gVGhlc2UgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgZG9jdW1l
bnQuY29va2llIEFQSSwgd2l0aCBzcGVjaWFsIHJ1bGVzIGZvciBIdHRwT25seSBjb29raWVzLgot
U3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci12b2lkIHNldENv
b2tpZXMoRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0KLS8vIFRoZXNl
IG1ldGhvZHMgdXNlIGN1cnJlbnQgY29va2llIHN0b3JhZ2UsIHRodXMgdGFraW5nIHByaXZhdGUg
YnJvd3NpbmcgbW9kZSBpbnRvIGFjY291bnQuCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERv
Y3VtZW50Kik7Ci1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJik7Ci1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0
IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwotCi0vLyBUaGVzZSBmdW5j
dGlvbnMgYWx3YXlzIGFjY2VzcyBkZWZhdWx0IGNvb2tpZSBzdG9yYWdlLCBub3QgdGFraW5nIHBy
aXZhdGUgYnJvd3NpbmcgbW9kZSBpbnRvIGFjY291bnQuCi12b2lkIGdldEhvc3RuYW1lc1dpdGhD
b29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKLXZvaWQgZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOwotdm9pZCBkZWxldGVBbGxDb29raWVz
KCk7CitjbGFzcyBDb29raWVKYXIgeworcHVibGljOgorICAgIENvb2tpZUphcigpCisgICAgewor
I2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgICAgICBtX3dlYkNvb2tpZUphciA9IDA7CisjZW5k
aWYKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEspCisg
ICAgICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSAwOworI2VuZGlmCisgICAgfTsKKyNpZiBQTEFU
Rk9STShDSFJPTUlVTSkKKyAgICBleHBsaWNpdCBDb29raWVKYXIoV2ViS2l0OjpXZWJDb29raWVK
YXIqIHdlYkNvb2tpZUphcikKKyAgICB7CisgICAgICAgIG1fd2ViQ29va2llSmFyID0gd2ViQ29v
a2llSmFyOworICAgIH07CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZM
KSB8fCBQTEFURk9STShHVEspCisgICAgZXhwbGljaXQgQ29va2llSmFyKE5ldHdvcmtpbmdDb250
ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgbV9uZXR3b3JraW5nQ29udGV4dCA9IGNvbnRl
eHQ7CisgICAgfTsKKyNlbmRpZgorCisgICAgLy8gY29va2llcyBvbWl0cyBIdHRwT25seSBjb29r
aWVzLgorICAgIFN0cmluZyBjb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJik7CisgICAg
U3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmLCBjb25zdCBL
VVJMJik7CisgICAgdm9pZCBzZXRDb29raWVzKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJik7CisgICAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiwgY29uc3Qg
S1VSTCYpOworICAgIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYs
IFZlY3RvcjxDb29raWU+Jik7CisgICAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYpOworCisgICAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0
PFN0cmluZz4mIGhvc3RuYW1lcyk7CisgICAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSk7CisgICAgdm9pZCBkZWxldGVBbGxDb29raWVzKCk7CisK
K3ByaXZhdGU6CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgV2ViS2l0OjpXZWJDb29raWVK
YXIqIG1fd2ViQ29va2llSmFyOworI2VuZGlmCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KEVGTCkgfHwgUExBVEZPUk0oR1RLKQorICAgIE5ldHdvcmtpbmdDb250ZXh0KiBtX25ldHdvcmtp
bmdDb250ZXh0OworI2VuZGlmCit9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBw
b3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1TdXBwb3J0LmgJKHJldmlzaW9uIDEzMzgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxNCAr
NzgsNiBAQCBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwogCiBjbGFzcyBQbGF0Zm9ybVN1cHBvcnQg
ewogcHVibGljOgotICAgIC8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgc3RhdGljIHZvaWQgc2V0Q29va2ll
cyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAg
ICBzdGF0aWMgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0g
ICAgc3RhdGljIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgYm9vbCByYXdDb29raWVzKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci0gICAgc3RhdGljIHZvaWQg
ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYg
Y29va2llTmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1l
bnQqKTsKLQogICAgIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgT1MoV0lORE9XUykKICAgICBzdGF0aWMg
Ym9vbCBlbnN1cmVGb250TG9hZGVkKEhGT05UKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHJldmlzaW9uIDEz
MzgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsOCBAQAogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMjY4LDcgKzI3
MCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ28KIAogICAgIEtV
UkwgbW92aWVVUkwgPSBLVVJMKEtVUkwoKSwgdXJsKTsKICAgICBWZWN0b3I8Q29va2llPiBkb2N1
bWVudENvb2tpZXM7Ci0gICAgaWYgKCFnZXRSYXdDb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCBt
b3ZpZVVSTCwgZG9jdW1lbnRDb29raWVzKSkKKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPmNvb2tpZUphcigpLmdldFJhd0Nvb2tpZXMobW92aWVVUkwsIGRvY3VtZW50LT5maXJz
dFBhcnR5Rm9yQ29va2llcygpLCBkb2N1bWVudENvb2tpZXMpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBmb3IgKHNpemVfdCBuZHggPSAwOyBuZHggPCBkb2N1bWVudENvb2tpZXMuc2l6ZSgpOyBu
ZHgrKykgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFyLm1tCShy
ZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ29va2llSmFy
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNB
cnJheT4gZmlsdGVyQ29va2llcygKICAgICByZXR1cm4gZmlsdGVyZWRDb29raWVzOwogfQogCi1T
dHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBD
b29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFy
dHlGb3JDb29raWVzKi8pCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBA
IC03Miw3ICs3Miw3IEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1UK
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVK
YXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
S1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKIApAQCAtODMsNyArODMsNyBAQCBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIHNldENvb2tp
ZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29v
a2llU3RyKQordm9pZCBDb29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiBjb29raWVTdHIpCiB7
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0xMDAsMTIgKzEwMCwxMiBA
QCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgUmV0YWluUHRy
PE5TQXJyYXk+IGZpbHRlcmVkQ29va2llcyA9IGZpbHRlckNvb2tpZXMoW05TSFRUUENvb2tpZSBj
b29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzOltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdp
dGhPYmplY3Q6Y29va2llU3RyaW5nIGZvcktleTpAIlNldC1Db29raWUiXSBmb3JVUkw6Y29va2ll
VVJMXSk7CiAgICAgQVNTRVJUKFtmaWx0ZXJlZENvb2tpZXMuZ2V0KCkgY291bnRdIDw9IDEpOwog
Ci0gICAgd2tTZXRIVFRQQ29va2llc0ZvclVSTChjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgp
LmdldCgpLCBmaWx0ZXJlZENvb2tpZXMuZ2V0KCksIGNvb2tpZVVSTCwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCkpOworICAgIHdrU2V0SFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENG
SFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwgZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVV
UkwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CiB9CiAKLWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKQorYm9vbCBDb29r
aWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8q
Zmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CiAKQEAgLTExNiw3ICsxMTYsNyBAQCBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3Vt
ZW50KikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBE
b2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiti
b29sIENvb2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwm
IC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7
CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKQEAgLTEzNSw3ICsxMzUsNyBAQCBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQq
LCBjb25zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERv
Y3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit2b2lk
IENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBj
b29raWVOYW1lKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTU1
LDcgKzE1NSw3IEBAIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhD
b29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhv
c3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewogICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgZ2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHIKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
IApAQCAtMTg0LDcgKzE4NCw3IEBAIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0
IFN0cmkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCi12b2lkIGRlbGV0ZUFs
bENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIHdr
RGVsZXRlQWxsSFRUUENvb2tpZXMoZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0Nvb2tpZUphckNG
TmV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L0Nvb2tpZUphckNGTmV0LmNwcAkocmV2aXNpb24gMTMzODA5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgogI2luY2x1ZGUgIkNvb2tpZVN0
b3JhZ2VDRk5ldC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgog
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKQEAg
LTk1LDcgKzk0LDcgQEAgc3RhdGljIFJldGFpblB0cjxDRkFycmF5UmVmPiBmaWx0ZXJDb29raQog
ICAgIHJldHVybiBmaWx0ZXJlZENvb2tpZXM7CiB9CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQg
Q29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQ
YXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgLy8gPHJkYXI6Ly9w
cm9ibGVtLzU2MzI4ODM+IENGSFRUUENvb2tpZVN0b3JhZ2Ugc3RvcmVzIGFuIGVtcHR5IGNvb2tp
ZSwgd2hpY2ggd291bGQgYmUgc2VudCBhcyAiQ29va2llOiA9Ii4KICAgICBpZiAodmFsdWUuaXNF
bXB0eSgpKQpAQCAtMTA2LDcgKzEwNSw3IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnMKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1
cmxDRihBZG9wdENGLCB1cmwuY3JlYXRlQ0ZVUkwoKSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVm
PiBmaXJzdFBhcnR5Rm9yQ29va2llc0NGKEFkb3B0Q0YsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9y
Q29va2llcygpLmNyZWF0ZUNGVVJMKCkpOworICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQ
YXJ0eUZvckNvb2tpZXNDRihBZG9wdENGLCBmaXJzdFBhcnR5Rm9yQ29va2llcy5jcmVhdGVDRlVS
TCgpKTsKIAogICAgIC8vIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NTMxPiwgPHJkYXI6Ly80NDA5MDM0PgogICAgIC8vIGNvb2tpZXNXaXRoUmVzcG9uc2VIZWFkZXJG
aWVsZHMgZG9lc24ndCBwYXJzZSBjb29raWVzIHdpdGhvdXQgYSB2YWx1ZQpAQCAtMTIzLDcgKzEy
Miw3IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMKICAgICBDRkhU
VFBDb29raWVTdG9yYWdlU2V0Q29va2llcyhjb29raWVTdG9yYWdlLmdldCgpLCBmaWx0ZXJDb29r
aWVzKGNvb2tpZXNDRi5nZXQoKSkuZ2V0KCksIHVybENGLmdldCgpLCBmaXJzdFBhcnR5Rm9yQ29v
a2llc0NGLmdldCgpKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9j
dW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAg
ICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJl
bnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpAQCAtMTM3
LDcgKzEzNiw3IEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW4KICAg
ICByZXR1cm4gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNGLmdldCgp
LCBzX2Nvb2tpZUNGKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBD
b29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIFJldGFpblB0cjxD
RkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gY3VycmVudENGSFRUUENvb2tp
ZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0xNTEsNyArMTUwLDcgQEAg
U3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbgogICAgIHJldHVybiAoQ0ZT
dHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoaGVhZGVyQ0YuZ2V0KCksIHNfY29va2llQ0Yp
OwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8p
Citib29sIENvb2tpZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29u
c3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIENGSFRUUENvb2tpZVN0
b3JhZ2VBY2NlcHRQb2xpY3kgcG9saWN5ID0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBvbGlj
eU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluOwogICAgIGlmIChSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdl
KCkpCkBAIC0xNTksNyArMTU4LDcgQEAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVu
dCogLypkbwogICAgIHJldHVybiBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFjY2VwdFBv
bGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluIHx8IHBvbGljeSA9PSBDRkhUVFBDb29raWVT
dG9yYWdlQWNjZXB0UG9saWN5QWx3YXlzOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQor
Ym9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJM
JiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQog
ewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3Rv
cmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CkBA
IC0xOTMsNyArMTkyLDcgQEAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29u
cwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBDb29raWVKYXI6
OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAg
ICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJl
bnRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpAQCAtMjE0
LDcgKzIxMyw3IEBAIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QKICAg
ICB9CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBo
b3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNl
dDxTdHJpbmc+JiBob3N0bmFtZXMpCiB7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBkZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAg
IGlmICghY29va2llU3RvcmFnZSkKQEAgLTIzMiw3ICsyMzEsNyBAQCB2b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyCiAgICAgfQogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogewogICAgIFJldGFp
blB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBjb29raWVTdG9yYWdlID0gZGVmYXVsdENGSFRU
UENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNvb2tpZVN0b3JhZ2UpCkBAIC0yNTEsNyArMjUw
LDcgQEAgdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaQogICAgIH0KIH0K
IAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29r
aWVzKCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3Rv
cmFnZSA9IGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9y
YWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29r
aWVKYXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEzMzgwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw1MiArMzIsNzQgQEAKICNpbmNsdWRlICJD
b29raWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSA8cHVibGljL1dlYkNvb2tp
ZS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KKyNpbmNsdWRlIDxwdWJsaWMv
V2ViU3RyaW5nLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlVSTC5oPgorI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJWZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHNldENvb2tpZXMo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwm
IGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIFBsYXRm
b3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1bWVudCwgdXJsLCB2YWx1ZSk7CisgICAgaWYgKG1f
d2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNvb2tpZUphci0+c2V0Q29va2llKHVybCwgZmly
c3RQYXJ0eUZvckNvb2tpZXMsIHZhbHVlKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29r
aWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7
Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llcyhkb2N1bWVudCwgdXJsKTsKKyAg
ICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0
dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVzKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwog
fQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFy
dHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgIGlmICghbV93ZWJDb29raWVK
YXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV93ZWJDb29raWVKYXIt
PmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMp
OwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jv
b2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwm
IGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNv
b2tpZXNFbmFibGVkKGRvY3VtZW50KTsKKyAgICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVzRW5hYmxl
ZCh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYg
cmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIFZlY3RvcjxDb29raWU+JiByYXdD
b29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1l
bnQsIHVybCwgcmF3Q29va2llcyk7CisgICAgcmF3Q29va2llcy5jbGVhcigpOworICAgIFdlYktp
dDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViQ29va2llPiB3ZWJDb29raWVzOworCisgICAgaWYgKG1f
d2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNvb2tpZUphci0+cmF3Q29va2llcyh1cmwsIGZp
cnN0UGFydHlGb3JDb29raWVzLCB3ZWJDb29raWVzKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFdlYktpdDo6
V2ViQ29va2llJiB3ZWJDb29raWUgPSB3ZWJDb29raWVzW2ldOworICAgICAgICBDb29raWUgY29v
a2llKHdlYkNvb2tpZS5uYW1lLCB3ZWJDb29raWUudmFsdWUsIHdlYkNvb2tpZS5kb21haW4sIHdl
YkNvb2tpZS5wYXRoLCB3ZWJDb29raWUuZXhwaXJlcywgd2ViQ29va2llLmh0dHBPbmx5LCB3ZWJD
b29raWUuc2VjdXJlLCB3ZWJDb29raWUuc2Vzc2lvbik7CisgICAgICAgIHJhd0Nvb2tpZXMuYXBw
ZW5kKGNvb2tpZSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNv
b2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBjb29raWVOYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1T
dXBwb3J0OjpkZWxldGVDb29raWUoZG9jdW1lbnQsIHVybCwgY29va2llTmFtZSk7CisgICAgaWYg
KG1fd2ViQ29va2llSmFyKQorICAgICAgICBtX3dlYkNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVy
bCwgY29va2llTmFtZSk7CiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNl
dDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENv
b2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1lcyovKQogewogICAgIC8vIEZJWE1FOiBO
b3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNv
bnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSovKQogewogICAgIC8vIEZJWE1FOiBOb3Qg
eWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tp
ZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29r
aWVKYXJDdXJsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAJKHJldmlzaW9uIDEzMzgwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogCiAjaW5jbHVk
ZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CkBAIC0yNiw1MiArMjUsNTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gY29va2llSmFyOworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IHNfY29va2llSmFyOwogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIC8qZG9jdW1l
bnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29raWVK
YXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlG
b3JDb29raWVzKi8sIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgY29va2llSmFyLnNldCh1
cmwuc3RyaW5nKCksIHZhbHVlKTsKKyAgICBzX2Nvb2tpZUphci5zZXQodXJsLnN0cmluZygpLCB2
YWx1ZSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8s
IGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgcmV0dXJu
IGNvb2tpZUphci5nZXQodXJsLnN0cmluZygpKTsKKyAgICByZXR1cm4gc19jb29raWVKYXIuZ2V0
KHVybC5zdHJpbmcoKSk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcg
Q29va2llSmFyOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmws
IGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICAvLyBGSVhNRTog
aW5jbHVkZSBIdHRwT25seSBjb29raWUuCi0gICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnN0
cmluZygpKTsKKyAgICByZXR1cm4gc19jb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7CiB9CiAK
LWJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wg
Q29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJM
JiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtV
UkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9y
PENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50
ZWQKICAgICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4g
dHJ1ZSB3aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRl
Q29va2llKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29raWVOYW1lKi8p
CiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2ll
SmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVz
Ki8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxl
dGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2ll
SmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8p
CiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVB
bGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAv
LyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAkocmV2aXNp
b24gMTMzODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tp
ZUphclNvdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAi
Q29va2llSmFyU291cC5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCisjaW5jbHVkZSAiQ29va2ll
SmFyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCkBAIC0zNCwxNyArMzUsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0YXRpYyBTb3VwQ29va2llSmFyKiBjb29raWVKYXJGb3JEb2N1bWVudChjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQpCitzdGF0aWMgU291cENvb2tpZUphciogY29va2llSmFyRm9yQ29u
dGV4dChjb25zdCBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBpZiAoIWRvY3Vt
ZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBGcmFtZSogZnJhbWUgPSBkb2N1bWVu
dC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjb25z
dCBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwotICAgIGlmICghbG9hZGVy
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCA9IGxvYWRlci0+bmV0d29ya2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIHJldHVybiBTT1VQX0NPT0tJRV9KQVIoc291cF9zZXNzaW9uX2dl
dF9mZWF0dXJlKGNvbnRleHQtPnNvdXBTZXNzaW9uKCksIFNPVVBfVFlQRV9DT09LSUVfSkFSKSk7
CkBAIC04NiwxNCArNzgsMTQgQEAgc3RhdGljIGlubGluZSBib29sIGh0dHBPbmx5Q29va2llRXhp
c3RzKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBDb29r
aWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5
Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBTb3VwQ29va2llSmFyKiBq
YXIgPSBjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7CisgICAgU291cENvb2tpZUphciog
amFyID0gY29va2llSmFyRm9yQ29udGV4dChtX25ldHdvcmtpbmdDb250ZXh0KTsKICAgICBpZiAo
IWphcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgR093blB0cjxTb3VwVVJJPiBvcmlnaW4oc291
cF91cmlfbmV3KHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgR093blB0cjxTb3Vw
VVJJPiBmaXJzdFBhcnR5KHNvdXBfdXJpX25ldyhkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgR093blB0cjxTb3VwVVJJPiBmaXJz
dFBhcnR5KHNvdXBfdXJpX25ldyhmaXJzdFBhcnR5Rm9yQ29va2llcy5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKSk7CiAKICAgICAvLyBHZXQgZXhpc3RpbmcgY29va2llcyBmb3IgdGhpcyBvcmlnaW4u
CiAgICAgR1NMaXN0KiBleGlzdGluZ0Nvb2tpZXMgPSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Nvb2tp
ZV9saXN0KGphciwgb3JpZ2luLmdldCgpLCBUUlVFKTsKQEAgLTEyMCw5ICsxMTIsOSBAQCB2b2lk
IHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgc291cF9jb29raWVzX2Zy
ZWUoZXhpc3RpbmdDb29raWVzKTsKIH0KIAotc3RhdGljIFN0cmluZyBjb29raWVzRm9yRG9jdW1l
bnQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgZm9ySFRU
UEhlYWRlcikKK3N0YXRpYyBTdHJpbmcgY29va2llc0ZvckNvbnRleHQoY29uc3QgTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCwgYm9vbCBmb3JIVFRQSGVhZGVyKQog
ewotICAgIFNvdXBDb29raWVKYXIqIGphciA9IGNvb2tpZUphckZvckRvY3VtZW50KGRvY3VtZW50
KTsKKyAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXJGb3JDb250ZXh0KGNvbnRleHQp
OwogICAgIGlmICghamFyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTEzMSwyNSAr
MTIzLDI1IEBAIHN0YXRpYyBTdHJpbmcgY29va2llc0ZvckRvY3VtZW50KGNvbnN0IEQKICAgICBy
ZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChjb29raWVzLmdldCgpKTsKIH0KIAotU3RyaW5nIGNvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29v
a2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5
Rm9yQ29va2llcyovKQogewotICAgIHJldHVybiBjb29raWVzRm9yRG9jdW1lbnQoZG9jdW1lbnQs
IHVybCwgZmFsc2UpOworICAgIHJldHVybiBjb29raWVzRm9yQ29udGV4dChtX25ldHdvcmtpbmdD
b250ZXh0LCB1cmwsIGZhbHNlKTsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5n
IENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgcmV0dXJuIGNv
b2tpZXNGb3JEb2N1bWVudChkb2N1bWVudCwgdXJsLCB0cnVlKTsKKyAgICByZXR1cm4gY29va2ll
c0ZvckNvbnRleHQobV9uZXR3b3JraW5nQ29udGV4dCwgdXJsLCB0cnVlKTsKIH0KIAotYm9vbCBj
b29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCitib29sIENvb2tpZUphcjo6
Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBh
cnR5Rm9yQ29va2llcyovKQogewotICAgIHJldHVybiAhIWNvb2tpZUphckZvckRvY3VtZW50KGRv
Y3VtZW50KTsKKyAgICByZXR1cm4gISFtX25ldHdvcmtpbmdDb250ZXh0OwogfQogCi1ib29sIGdl
dFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZl
Y3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZl
Y3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAg
ICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7Cisg
ICAgU291cENvb2tpZUphciogamFyID0gY29va2llSmFyRm9yQ29udGV4dChtX25ldHdvcmtpbmdD
b250ZXh0KTsKICAgICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNzAs
OSArMTYyLDkgQEAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bQogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQordm9pZCBDb29raWVK
YXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsK
LSAgICBTb3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7
CisgICAgU291cENvb2tpZUphciogamFyID0gY29va2llSmFyRm9yQ29udGV4dChtX25ldHdvcmtp
bmdDb250ZXh0KTsKICAgICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xOTEsNyAr
MTgzLDcgQEAgdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZQogICAgIH0K
IH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3Ru
YW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0
cmluZz4mIGhvc3RuYW1lcykKIHsKICAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBzb3Vw
Q29va2llSmFyKCk7CiAgICAgR093blB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFy
X2FsbF9jb29raWVzKGNvb2tpZUphcikpOwpAQCAtMjAzLDcgKzE5NSw3IEBAIHZvaWQgZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHIKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAg
Q1N0cmluZyBob3N0TmFtZVN0cmluZyA9IGhvc3RuYW1lLnV0ZjgoKTsKICAgICBTb3VwQ29va2ll
SmFyKiBjb29raWVKYXIgPSBzb3VwQ29va2llSmFyKCk7CkBAIC0yMTYsNyArMjA4LDcgQEAgdm9p
ZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaQogICAgIH0KIH0KIAotdm9pZCBk
ZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsK
ICAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBzb3VwQ29va2llSmFyKCk7CiAgICAgR093
blB0cjxHU0xpc3Q+IGNvb2tpZXMoc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUph
cikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFy
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dp
bi9Db29raWVKYXJXaW4uY3BwCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJLVVJMLmgiCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1
ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDxXaW5pbmV0Lmg+CkBAIC0zNiwxNSArMzUsMTYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIC8qZG9j
dW1lbnQqLywgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorCit2b2lkIENv
b2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQ
YXJ0eUZvckNvb2tpZXMqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICAvLyBGSVhNRTog
RGVhbCB3aXRoIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLgorICAgIC8vIEZJWE1F
OiBEZWFsIHdpdGggZmlyc3RQYXJ0eUZvckNvb2tpZXMuCiAgICAgU3RyaW5nIHN0ciA9IHVybC5z
dHJpbmcoKTsKICAgICBTdHJpbmcgdmFsID0gdmFsdWU7CiAgICAgSW50ZXJuZXRTZXRDb29raWUo
c3RyLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIHZhbC5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQq
IC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2ll
cyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykK
IHsKICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygpOwogCkBAIC02Myw0MCArNjMsNDAgQEAg
U3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbgogICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KGJ1ZmZlcik7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBD
b29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IGluY2x1
ZGUgSHR0cE9ubHkgY29va2llCi0gICAgcmV0dXJuIGNvb2tpZXMoZG9jdW1lbnQsIHVybCk7Cisg
ICAgcmV0dXJuIGNvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9CiAKLWJvb2wg
Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG9jdW1lbnQqLykKK2Jvb2wgQ29va2ll
SmFyOjpjb29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZp
cnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgZ2V0
UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYg
cmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIC8q
dXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tp
ZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAg
ICByYXdDb29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3
aGVuIGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2ll
KGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29raWVOYW1lKi8pCiB7CiAg
ICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8pCiB7
CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAg
ICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVBbGxDb29r
aWVzKCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICAvLyBGSVhN
RTogTm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvQ29va2llSmFyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L0Nvb2tpZUphclF0LmNwcAkocmV2aXNpb24gMTMzODA5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw2
IEBACiAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVKYXIuaCIKLSNpbmNs
dWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJUaGlyZFBhcnR5Q29va2llc1F0LmgiCkBAIC00OSwzMSArNDYsMTcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgU2hhcmVkQ29va2llSmFyUXQqIHNfc2hhcmVkQ29v
a2llSmFyUXQgPSAwOwogCi1zdGF0aWMgTmV0d29ya2luZ0NvbnRleHQqIG5ldHdvcmtpbmdDb250
ZXh0KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVz
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2Fk
ZXIoKTsKLSAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGxv
YWRlci0+bmV0d29ya2luZ0NvbnRleHQoKTsKLX0KLQotdm9pZCBzZXRDb29raWVzKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAg
IE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQp
OwotICAgIGlmICghY29udGV4dCkKKyAgICBpZiAoIW1fbmV0d29ya2luZ0NvbnRleHQpCiAgICAg
ICAgIHJldHVybjsKLSAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29y
a0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGph
ciA9IG1fbmV0d29ya2luZ0NvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUph
cigpOwogICAgIGlmICghamFyKQogICAgICAgICByZXR1cm47CiAKICAgICBRVXJsIHVybEZvckNv
b2tpZXModXJsKTsKLSAgICBRVXJsIGZpcnN0UGFydHlVcmwoZG9jdW1lbnQtPmZpcnN0UGFydHlG
b3JDb29raWVzKCkpOwotICAgIGlmICghdGhpcmRQYXJ0eUNvb2tpZVBvbGljeVBlcm1pdHMoY29u
dGV4dCwgdXJsRm9yQ29va2llcywgZmlyc3RQYXJ0eVVybCkpCisgICAgUVVybCBmaXJzdFBhcnR5
VXJsKGZpcnN0UGFydHlGb3JDb29raWVzKTsKKyAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xp
Y3lQZXJtaXRzKG1fbmV0d29ya2luZ0NvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlV
cmwpKQogICAgICAgICByZXR1cm47CiAKICAgICBRTGlzdDxRTmV0d29ya0Nvb2tpZT4gY29va2ll
cyA9IFFOZXR3b3JrQ29va2llOjpwYXJzZUNvb2tpZXMoUVN0cmluZyh2YWx1ZSkudG9MYXRpbjEo
KSk7CkBAIC04OCwxNiArNzEsMTUgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVu
dCwgY29ucwogICAgIGphci0+c2V0Q29va2llc0Zyb21VcmwoY29va2llcywgdXJsRm9yQ29va2ll
cyk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQpOwotICAgIGlmICghY29udGV4
dCkKKyAgICBpZiAoIW1fbmV0d29ya2luZ0NvbnRleHQpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gY29udGV4dC0+bmV0d29ya0FjY2Vzc01h
bmFnZXIoKS0+Y29va2llSmFyKCk7CisgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IG1fbmV0
d29ya2luZ0NvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOwogCiAg
ICAgUVVybCB1cmxGb3JDb29raWVzKHVybCk7Ci0gICAgUVVybCBmaXJzdFBhcnR5VXJsKGRvY3Vt
ZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQ
b2xpY3lQZXJtaXRzKGNvbnRleHQsIHVybEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQorICAg
IFFVcmwgZmlyc3RQYXJ0eVVybChmaXJzdFBhcnR5Rm9yQ29va2llcyk7CisgICAgaWYgKCF0aGly
ZFBhcnR5Q29va2llUG9saWN5UGVybWl0cyhtX25ldHdvcmtpbmdDb250ZXh0LCB1cmxGb3JDb29r
aWVzLCBmaXJzdFBhcnR5VXJsKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgUUxp
c3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBqYXItPmNvb2tpZXNGb3JVcmwodXJsRm9yQ29v
a2llcyk7CkBAIC0xMTQsMTIgKzk2LDExIEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwKICAgICByZXR1cm4gcmVzdWx0Q29va2llcy5qb2luKFFMYXRpbjFTdHJpbmco
IjsgIikpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMICZ1cmwpCitTdHJpbmcgQ29va2llSmFyOjpj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwm
IC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisg
ICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0g
ICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2Vy
KCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBtX25ldHdvcmtp
bmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKIAogICAgIFFM
aXN0PFFOZXR3b3JrQ29va2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKFFVcmwodXJs
KSk7CiAgICAgaWYgKGNvb2tpZXMuaXNFbXB0eSgpKQpAQCAtMTMyLDQxICsxMTMsNDAgQEAgU3Ry
aW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbgogICAgIHJldHVybiByZXN1bHRD
b29raWVzLmpvaW4oUUxhdGluMVN0cmluZygiOyAiKSk7CiB9CiAKLWJvb2wgY29va2llc0VuYWJs
ZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNFbmFi
bGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLykKIHsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250
ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdD
b250ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbnRleHQtPm5ldHdv
cmtBY2Nlc3NNYW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIHJldHVybiBtX25ldHdvcmtpbmdD
b250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKIH0KIAotYm9vbCBn
ZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+
JiByYXdDb29raWVzKQorYm9vbCBDb29raWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYg
Lyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAog
ICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKICAgICByZXR1cm4gZmFsc2U7IC8vIHJldHVybiB0cnVl
IHdoZW4gaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29r
aWUoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgU3RyaW5nJiAvKmNvb2tpZU5hbWUqLykKIHsK
ICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6
OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQogewog
ICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7
CiAgICAgaWYgKGphcikKICAgICAgICAgamFyLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhob3N0
bmFtZXMpOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lKQogewogICAgIFNoYXJlZENvb2tpZUphclF0KiBqYXIgPSBTaGFy
ZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGphcikKICAgICAgICAgamFyLT5kZWxl
dGVDb29raWVzRm9ySG9zdG5hbWUoaG9zdG5hbWUpOwogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tp
ZXMoKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIFNoYXJlZENv
b2tpZUphclF0KiBqYXIgPSBTaGFyZWRDb29raWVKYXJRdDo6c2hhcmVkKCk7CiAgICAgaWYgKGph
cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMTMz
ODA5KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM5Miw3ICsxMzkyLDcgQEAgTlBFcnJvciBQbHVnaW5WaWV3OjpnZXRWYWx1ZUZv
clVSTChOUE5VUgogICAgICAgICBpZiAodS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgIEZyYW1l
KiBmcmFtZSA9IGdldEZyYW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7CiAgICAgICAgICAg
ICBpZiAoZnJhbWUpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9
IGNvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIHUpLnV0ZjgoKTsKKyAgICAgICAgICAgICAgICBj
b25zdCBDU3RyaW5nIGNvb2tpZVN0ciA9IGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tp
ZUphcigpLmNvb2tpZXModSwgZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0UGFydHlGb3JDb29raWVz
KCkpLnV0ZjgoKTsKICAgICAgICAgICAgICAgICBpZiAoIWNvb2tpZVN0ci5pc051bGwoKSkgewog
ICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgc2l6ZSA9IGNvb2tpZVN0ci5sZW5ndGgoKTsK
ICAgICAgICAgICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KE5QTl9NZW1B
bGxvYyhzaXplKzEpKTsKQEAgLTE0NTQsNyArMTQ1NCw3IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6
c2V0VmFsdWVGb3JVUkwoTlBOVVIKICAgICAgICAgICAgIGNvbnN0IFN0cmluZyBjb29raWVTdHIg
PSBTdHJpbmc6OmZyb21VVEY4KHZhbHVlLCBsZW4pOwogICAgICAgICAgICAgRnJhbWUqIGZyYW1l
ID0gZ2V0RnJhbWUocGFyZW50RnJhbWUoKSwgbV9lbGVtZW50KTsKICAgICAgICAgICAgIGlmIChm
cmFtZSAmJiAhY29va2llU3RyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBzZXRDb29raWVz
KGZyYW1lLT5kb2N1bWVudCgpLCB1LCBjb29raWVTdHIpOworICAgICAgICAgICAgICAgIGZyYW1l
LT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLnNldENvb2tpZXModSwgZnJhbWUtPmRv
Y3VtZW50KCktPmZpcnN0UGFydHlGb3JDb29raWVzKCksIGNvb2tpZVN0cik7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gTlBFUlJfSU5WQUxJRF9VUkw7CiAgICAgICAgIGJy
ZWFrOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTMzODEwKQorKysgU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMTEtMDcgIE1h
cmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0g
UmVtb3ZlIGNvb2tpZS1yZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGlu
Zm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVh
c2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29va2llTWFuYWdlcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyOjpkZWxldGVBbGxDb29raWVzKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlBsdWdpblZpZXc6OmNvb2tpZXNGb3JVUkwpOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5W
aWV3OjpzZXRDb29raWVzRm9yVVJMKToKKwogMjAxMi0xMS0wNyAgQ2hyaXN0b3BoZSBEdW1leiAg
PGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0gQWxsb3cg
Y2xpZW50IHRvIG92ZXJyaWRlIHNldFdpbmRvd0ZyYW1lKCkgLyBnZXRXaW5kb3dGcmFtZSgpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Db29raWVzL1dlYkNv
b2tpZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDcgKzU3LDcgQEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpnZXRIb3N0bmFtZXNXaXRoQwogCiAg
ICAgSGFzaFNldDxTdHJpbmc+IGhvc3RuYW1lczsKIAotICAgIFdlYkNvcmU6OmdldEhvc3RuYW1l
c1dpdGhDb29raWVzKGhvc3RuYW1lcyk7CisgICAgV2ViQ29yZTo6Q29va2llSmFyKCkuZ2V0SG9z
dG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IGhvc3Ru
YW1lTGlzdDsKICAgICBjb3B5VG9WZWN0b3IoaG9zdG5hbWVzLCBob3N0bmFtZUxpc3QpOwpAQCAt
NjksMTQgKzY5LDE0IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0ZvckgK
IHsKICAgICBXZWJQcm9jZXNzOjpMb2NhbFRlcm1pbmF0aW9uRGlzYWJsZXIgdGVybWluYXRpb25E
aXNhYmxlcihXZWJQcm9jZXNzOjpzaGFyZWQoKSk7CiAKLSAgICBXZWJDb3JlOjpkZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoaG9zdG5hbWUpOworICAgIFdlYkNvcmU6OkNvb2tpZUphcigpLmRlbGV0
ZUNvb2tpZXNGb3JIb3N0bmFtZShob3N0bmFtZSk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdl
cjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgV2ViUHJvY2Vzczo6TG9jYWxUZXJtaW5hdGlv
bkRpc2FibGVyIHRlcm1pbmF0aW9uRGlzYWJsZXIoV2ViUHJvY2Vzczo6c2hhcmVkKCkpOwogCi0g
ICAgV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llcygpOworICAgIFdlYkNvcmU6OkNvb2tpZUphcigp
LmRlbGV0ZUFsbENvb2tpZXMoKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyOjpzdGFydE9i
c2VydmluZ0Nvb2tpZUNoYW5nZXMoKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkocmV2aXNpb24gMTMzODA5KQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzA5LDEyICsxMzA5LDE5IEBAIFN0cmluZyBQbHVnaW5WaWV3Ojpwcm94aWVzRm9yVVJM
KGNvbnN0IFMKIAogU3RyaW5nIFBsdWdpblZpZXc6OmNvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpCiB7Ci0gICAgcmV0dXJuIGNvb2tpZXMobV9wbHVnaW5FbGVtZW50LT5kb2N1
bWVudCgpLCBLVVJMKEtVUkwoKSwgdXJsU3RyaW5nKSk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gbV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICByZXR1cm4gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2ll
cyhLVVJMKEtVUkwoKSwgdXJsU3RyaW5nKSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVz
KCkpOwogfQogCiB2b2lkIFBsdWdpblZpZXc6OnNldENvb2tpZXNGb3JVUkwoY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgY29va2llU3RyaW5nKQogewotICAgIHNldENvb2tp
ZXMobV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLCBLVVJMKEtVUkwoKSwgdXJsU3RyaW5nKSwg
Y29va2llU3RyaW5nKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX3BsdWdpbkVsZW1lbnQt
PmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAg
aWYgKGZyYW1lKQorICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIo
KS5zZXRDb29raWVzKEtVUkwoS1VSTCgpLCB1cmxTdHJpbmcpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0
eUZvckNvb2tpZXMoKSwgY29va2llU3RyaW5nKTsKIH0KIAogYm9vbCBQbHVnaW5WaWV3OjpnZXRB
dXRoZW50aWNhdGlvbkluZm8oY29uc3QgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2Us
IFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFzc3dvcmQpCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkocmV2aXNpb24gMTMzODEwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0xMS0wNyAgTWFy
ayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBS
ZW1vdmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5m
b3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFz
ZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAg
ICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZyYW1l
TG9hZGVyQ2xpZW50SW1wbDo6Y29va2llSmFyKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
ICogc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oOgorICAgICAgICAoRnJhbWVMb2FkZXJDbGll
bnRJbXBsKToKKyAgICAgICAgKiBzcmMvUGxhdGZvcm1TdXBwb3J0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmUpOgorCiAyMDEyLTExLTA3ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgW1Y4XSBXZSBzaG91bGQgaGlkZSB0aGUgRE9NV3JhcHBlck1hcHMgaW5zaWRlIERP
TURhdGFTdG9yZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJD
bGllbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9G
cmFtZUxvYWRlckNsaWVudEltcGwuY3BwCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjYyLDQgKzE2NjIsMTQgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEltcGw6OmRpZFJl
cXVlc3RBdQogfQogI2VuZGlmCiAKK1dlYkNvcmU6OkNvb2tpZUphciBGcmFtZUxvYWRlckNsaWVu
dEltcGw6OmNvb2tpZUphcigpCit7CisgICAgaWYgKCFtX3dlYkZyYW1lIHx8ICFtX3dlYkZyYW1l
LT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tpZUphcigwKTsKKyAgICBX
ZWJDb29raWVKYXIqIHdlYkNvb2tpZUphciA9IG1fd2ViRnJhbWUtPmNsaWVudCgpLT5jb29raWVK
YXIobV93ZWJGcmFtZSk7CisgICAgaWYgKCF3ZWJDb29raWVKYXIpCisgICAgICAgIHdlYkNvb2tp
ZUphciA9IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y29va2llSmFyKCk7CisgICAgcmV0
dXJuIFdlYkNvcmU6OkNvb2tpZUphcih3ZWJDb29raWVKYXIpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xp
ZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1l
TG9hZGVyQ2xpZW50SW1wbC5oCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjI5
LDYgKzIyOSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVxdWVzdEF1dG9jb21w
bGV0ZShQYXNzUmVmUHRyPFdlYkNvcmU6OkZvcm1TdGF0ZT4pIE9WRVJSSURFOwogI2VuZGlmCiAK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZUphciBjb29raWVKYXIoKSBPVkVSUklERTsKKwog
cHJpdmF0ZToKICAgICB2b2lkIG1ha2VEb2N1bWVudFZpZXcoKTsKIApJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1TdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMzM4
MDkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDAsODYgKzEwMCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFdlYkNvb2tpZUphciogZ2V0Q29va2ll
SmFyKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBXZWJGcmFtZUltcGwqIGZyYW1l
SW1wbCA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICBp
ZiAoIWZyYW1lSW1wbCB8fCAhZnJhbWVJbXBsLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBmcmFtZUltcGwtPmNsaWVudCgpLT5jb29r
aWVKYXIoZnJhbWVJbXBsKTsKLSAgICBpZiAoIWNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFy
ID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jb29raWVKYXIoKTsKLSAgICByZXR1cm4g
Y29va2llSmFyOwotfQotCi0vLyBDb29raWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgUGxhdGZvcm1T
dXBwb3J0OjpzZXRDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50
KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXItPnNldENvb2tpZSh1cmws
IGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBQ
bGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwpCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tp
ZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAg
ICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlG
b3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN1
cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgS1VSTCYgdXJsKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgV2ViQ29va2ll
SmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVK
YXIpCi0gICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotYm9vbCBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29r
aWVzKQotewotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBXZWJWZWN0b3I8V2ViQ29va2ll
PiB3ZWJDb29raWVzOwotCi0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVK
YXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+cmF3
Q29va2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB3ZWJDb29raWVz
KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29va2llc1tpXTsK
LSAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwKLSAgICAgICAgICAgICAgICAg
ICAgICB3ZWJDb29raWUudmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmRv
bWFpbiwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUucGF0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICB3ZWJDb29raWUuZXhwaXJlcywKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJD
b29raWUuaHR0cE9ubHksCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlY3VyZSwK
LSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2Vzc2lvbik7Ci0gICAgICAgIHJhd0Nv
b2tpZXMuYXBwZW5kKGNvb2tpZSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCi17Ci0gICAgV2ViQ29v
a2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29r
aWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7
Ci19Ci0KLWJvb2wgUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVu
dCogZG9jdW1lbnQpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBXZWJDb29raWVK
YXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUph
cikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzRW5hYmxlZChkb2N1bWVudC0+
Y29va2llVVJMKCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCiAvLyBGb250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICNpZiBPUyhXSU5ET1dT
KQpJbmRleDogU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkocmV2aXNpb24gMTMzODEwKQorKysgU291cmNlL1dlYktp
dC9lZmwvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMTEt
MDcgIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJv
bWl1bV0gUmVtb3ZlIGNvb2tpZS1yZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlv
bmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxl
LiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsOjpjb29raWVKYXIpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnRFZmwpOgor
CiAyMDEyLTExLTA3ICBFbWlsIEEgRWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVbnJldmlld2VkIEVGTCBidWlsZCBmaXguCkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCShyZXZp
c2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNTMsNCArMTA1MywxMSBAQCBQ
YXNzUmVmUHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHQ+IEZyYW1lCiAgICAgcmV0dXJuIEZyYW1l
TmV0d29ya2luZ0NvbnRleHRFZmw6OmNyZWF0ZShFV0tQcml2YXRlOjpjb3JlRnJhbWUobV9mcmFt
ZSksIG1fZnJhbWUpOwogfQogCitXZWJDb3JlOjpDb29raWVKYXIgRnJhbWVMb2FkZXJDbGllbnRF
Zmw6OmNvb2tpZUphcigpCit7CisgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5sb2FkZXIo
KSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tpZUphcigwKTsKKyAgICByZXR1cm4gV2Vi
Q29yZTo6Q29va2llSmFyKG1fZnJhbWUtPmxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpKTsK
K30KKwogfQpJbmRleDogU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRFZmwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5oCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2Uv
V2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50RWZsX2gK
ICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRFZmxfaAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgi
CiAjaW5jbHVkZSAiRVdlYktpdC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAj
aW5jbHVkZSAiUGx1Z2luVmlldy5oIgpAQCAtNDEsNiArNDIsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIENvb2tpZUphcjsKIGNsYXNzIEZvcm1TdGF0ZTsKIAogY2xhc3MgRnJh
bWVMb2FkZXJDbGllbnRFZmwgOiBwdWJsaWMgRnJhbWVMb2FkZXJDbGllbnQgewpAQCAtMjEwLDYg
KzIxMiw5IEBAIGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50RWZsIDogcHVibGljIEZyYW0KICAgICB2
aXJ0dWFsIHZvaWQgZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6RnJhbWVOZXR3b3JraW5nQ29udGV4dD4gY3JlYXRlTmV0d29ya2luZ0NvbnRleHQo
KTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29va2llSmFyIGNvb2tpZUphcigpIE9WRVJSSURF
OworCiAgcHJpdmF0ZToKICAgICBib29sIGlzTG9hZGluZ01haW5GcmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZnJhbWUgPT0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQobV92aWV3KTsgfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzM4MTApCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0xMS0wNyAgTWFy
ayBQaWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBS
ZW1vdmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5m
b3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFz
ZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpGcmFtZUxvYWRlckNsaWVudDo6Y29va2llSmFyKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaDoKKyAgICAgICAg
KEZyYW1lTG9hZGVyQ2xpZW50KToKKwogMjAxMi0xMS0wNSAgU2ltb24gRnJhc2VyICA8c2ltb24u
ZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggbGF5ZXIgYm9yZGVycyB0byBjbGVhbmlu
ZyBhcHBlYXIgYW5kIGRpc2FwcGVhciBvbiBzd2l0Y2hpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHAJKHJldmlzaW9uIDEzMzgwOSkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2MSw0ICsxMjYx
LDExIEBAIFBhc3NSZWZQdHI8RnJhbWVOZXR3b3JraW5nQ29udGV4dD4gRnJhbWUKICAgICByZXR1
cm4gRnJhbWVOZXR3b3JraW5nQ29udGV4dEd0azo6Y3JlYXRlKGNvcmUobV9mcmFtZSkpOwogfQog
CitXZWJDb3JlOjpDb29raWVKYXIgRnJhbWVMb2FkZXJDbGllbnQ6OmNvb2tpZUphcigpCit7Cisg
ICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5sb2FkZXIoKSkKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OkNvb2tpZUphcigwKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKG1fZnJh
bWUtPmxvYWRlcigpLT5uZXR3b3JraW5nQ29udGV4dCgpKTsKK30KKwogfQpJbmRleDogU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5oCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjaWZuZGVmIEZyYW1lTG9hZGVyQ2xpZW50R3RrX2gKICNkZWZpbmUgRnJhbWVMb2FkZXJD
bGllbnRHdGtfaAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiUGx1
Z2luVmlldy5oIgpAQCAtMTg4LDYgKzE4OSw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAgICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBj
cmVhdGVOZXR3b3JraW5nQ29udGV4dCgpOwogCisgICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29v
a2llSmFyIGNvb2tpZUphcigpIE9WRVJSSURFOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgV2Vi
S2l0V2ViRnJhbWUqIG1fZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Ug
bV9yZXNwb25zZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzgxMCkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDEyLTExLTA3ICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbQ2hyb21pdW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0
Zm9ybVN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gs
IHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChP
T1BTISkuCisKKyAgICAgICAgKiBQbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNl
UHJveHkubW06CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6
Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94
eTo6c2V0Q29va2llcyk6CisgICAgICAgICogUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcu
bW06CisgICAgICAgICgtW1dlYk5ldHNjYXBlUGx1Z2luVmlldyBnZXRWYXJpYWJsZTpmb3JVUkw6
dmFsdWU6bGVuZ3RoOl0pOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcgc2V0VmFy
aWFibGU6Zm9yVVJMOnZhbHVlOmxlbmd0aDpdKToKKwogMjAxMi0xMS0wNyAgQW5kcmVhcyBLbGlu
ZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGJ1aWxkLXdlYmtpdCBkZXBl
bmRlbmN5IG9uIEphdmEgU0RLIGZvciBBcHBsZSBNYWMgV2ViS2l0LgpJbmRleDogU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblZpZXcubW0JKHJldmlz
aW9uIDEzMzgwOSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVn
aW5WaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL0VsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4gCiAjaW1wb3J0IDxXZWJD
b3JlL0ZyYW1lTG9hZGVyLmg+IAorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlckNsaWVudC5o
PiAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVUcmVlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
Vmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MUGx1Z0luRWxlbWVudC5oPgpAQCAtMjIxNiw3
ICsyMjE3LDcgQEAgLSAoTlBFcnJvcilnZXRWYXJpYWJsZTooTlBOVVJMVmFyaWFibGUpdgogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gY29yZShbc2VsZiB3ZWJGcmFtZV0pKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5n
IGNvb2tpZVN0cmluZyA9IGNvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIFVSTCk7IAorICAgICAg
ICAgICAgICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgp
LT5jb29raWVKYXIoKS5jb29raWVzKFVSTCwgZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0UGFydHlG
b3JDb29raWVzKCkpOyAKICAgICAgICAgICAgICAgICBDU3RyaW5nIGNvb2tpZVN0cmluZ1VURjgg
PSBjb29raWVTdHJpbmcudXRmOCgpOwogICAgICAgICAgICAgICAgIGlmIChjb29raWVTdHJpbmdV
VEY4LmlzTnVsbCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlBFUlJfR0VORVJJQ19F
UlJPUjsKQEAgLTIyNzAsNyArMjI3MSw3IEBAIC0gKE5QRXJyb3Ipc2V0VmFyaWFibGU6KE5QTlVS
TFZhcmlhYmxlKXYKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKSkgewotICAgICAg
ICAgICAgICAgIHNldENvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIFVSTCwgY29va2llU3RyaW5n
KTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIo
KS5zZXRDb29raWVzKFVSTCwgZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0UGFydHlGb3JDb29raWVz
KCksIGNvb2tpZVN0cmluZyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5QRVJSX05PX0VSUk9S
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5j
ZVByb3h5Lm1tCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L0hvc3RlZC9OZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHkubW0JKHdvcmtpbmcgY29weSkKQEAg
LTUxLDYgKzUxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXJDbGllbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVUcmVlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tVUkwuaD4KICNpbXBvcnQgPFdlYkNvcmUvUHJv
eHlTZXJ2ZXIuaD4KQEAgLTE1MTUsNyArMTUxNiw3IEBAIGJvb2wgTmV0c2NhcGVQbHVnaW5JbnN0
YW5jZVByb3h5OjpnZXRDb28KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGlmIChG
cmFtZSogZnJhbWUgPSBjb3JlKFttX3BsdWdpblZpZXcgd2ViRnJhbWVdKSkgewotICAgICAgICBT
dHJpbmcgY29va2llU3RyaW5nID0gY29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdXJsKTsgCisg
ICAgICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5j
b29raWVKYXIoKS5jb29raWVzKHVybCwgZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0UGFydHlGb3JD
b29raWVzKCkpOyAKICAgICAgICAgV1RGOjpDU3RyaW5nIGNvb2tpZVN0cmluZ1VURjggPSBjb29r
aWVTdHJpbmcudXRmOCgpOwogICAgICAgICBpZiAoY29va2llU3RyaW5nVVRGOC5pc051bGwoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE1NDMsNyArMTU0NCw3IEBAIGJvb2wgTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5OjpzZXRDb28KICAgICAgICAgaWYgKCFjb29raWVTdHJp
bmcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBXZWJDb3Jl
OjpzZXRDb29raWVzKGZyYW1lLT5kb2N1bWVudCgpLCB1cmwsIGNvb2tpZVN0cmluZyk7CisgICAg
ICAgIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLnNldENvb2tpZXModXJs
LCBmcmFtZS0+ZG9jdW1lbnQoKS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgY29va2llU3RyaW5n
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2
aXNpb24gMTMzODEwKQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMS0wNyAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgY29va2llLXJlbGF0ZWQg
ZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5n
ZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRl
c2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dFF0Ojpjb29raWVKYXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChGcmFtZUxvYWRlckNsaWVudFF0KToKKwogMjAxMi0xMS0wNyAgQWxsYW4gU2FuZGZlbGQgSmVu
c2VuICA8YWxsYW4uamVuc2VuQGRpZ2lhLmNvbT4KIAogICAgICAgICBbUXRdIE9wZW4gbGluayBp
biB0aGlzIHdpbmRvdyBhY3Rpb24KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcAkocmV2aXNpb24gMTMzODA5
KQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3Niw2ICsxNjc2LDEzIEBAIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRRdDo6ZW1pdExvYWRGaW5pc2gKICAgICBlbWl0IG1fd2ViRnJhbWUtPmxvYWRGaW5p
c2hlZChvayk7CiB9CiAKK1dlYkNvcmU6OkNvb2tpZUphciBGcmFtZUxvYWRlckNsaWVudFF0Ojpj
b29raWVKYXIoKQoreworICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+bG9hZGVyKCkpCisg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIoMCk7CisgICAgcmV0dXJuIFdlYkNvcmU6
OkNvb2tpZUphcihtX2ZyYW1lLT5sb2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSk7Cit9CisK
IH0KIAogI2luY2x1ZGUgIm1vY19GcmFtZUxvYWRlckNsaWVudFF0LmNwcCIKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRR
dC5oCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2RlZmluZSBGcmFtZUxvYWRlckNsaWVudFF0X2gKIAogCisjaW5jbHVkZSAiQ29va2llSmFyLmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC01Myw2ICs1NCw3IEBAIGNsYXNzIFFXZWJGcmFtZTsK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7Citj
bGFzcyBDb29raWVKYXI7CiBjbGFzcyBEb2N1bWVudExvYWRlcjsKIGNsYXNzIEVsZW1lbnQ7CiBj
bGFzcyBGb3JtU3RhdGU7CkBAIC0yMjcsNiArMjI5LDggQEAgcHVibGljOgogCiAgICAgY29uc3Qg
S1VSTCYgbGFzdFJlcXVlc3RlZFVybCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJlcXVlc3RlZFVy
bDsgfQogCisgICAgdmlydHVhbCBXZWJDb3JlOjpDb29raWVKYXIgY29va2llSmFyKCkgT1ZFUlJJ
REU7CisKICAgICBzdGF0aWMgYm9vbCBkdW1wRnJhbWVMb2FkZXJDYWxsYmFja3M7CiAgICAgc3Rh
dGljIGJvb2wgZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjazsKICAgICBzdGF0aWMgYm9vbCBk
dW1wVXNlckdlc3R1cmVJbkZyYW1lTG9hZGVyQ2FsbGJhY2tzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173031</attachid>
            <date>2012-11-08 06:18:27 -0800</date>
            <delta_ts>2012-11-14 10:13:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99340-20121108091623.patch</filename>
            <type>text/plain</type>
            <size>69540</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzg5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBAQAorMjAxMi0xMS0wOCAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1v
dmUgY29va2llLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3Jt
YXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBh
ZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cHJv
Y2Vzc0J1ZmZlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VSZXF1ZXN0KToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tp
ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0Q29va2llKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKERvY3VtZW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyQ2xp
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZyYW1lTG9hZGVyQ2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50Ojpjb29raWVKYXIpOgorICAgICAg
ICAqIHBhZ2UvTmF2aWdhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvcjo6Y29v
a2llRW5hYmxlZCk6CisgICAgICAgICogcGxhdGZvcm0vQ29va2llSmFyLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OkNvb2tpZUphcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TdXBw
b3J0Lmg6CisgICAgICAgIChQbGF0Zm9ybVN1cHBvcnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRl
eHQ6OnNldFVwQ29va2llc0ZvclF1aWNrVGltZSk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0Nv
b2tpZUphci5tbToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tp
ZUphcjo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0
ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q29va2llSmFyOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
cjo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0Vu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29r
aWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tp
ZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3Q29va2llcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
SmFyRm9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OnNldENvb2tpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0ZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
Ojpjb29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldFJhd0Nv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpkZWxldGVDb29raWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRIb3N0bmFtZXNXaXRoQ29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpDb29raWVKYXI6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXI6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Z2V0UmF3
Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmRlbGV0ZUNvb2tpZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICog
cGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29raWVKYXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6Y29va2llc0VuYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29va2llSmFyOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb2tpZUphcjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphcjo6
Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpk
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyOjpk
ZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKiBwbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwpOgorICAgICAgICAoV2Vi
Q29yZTo6UGx1Z2luVmlldzo6c2V0VmFsdWVGb3JVUkwpOgorCiAyMDEyLTExLTA4ICBMYXN6bG8g
R29tYm9zICA8bC5nb21ib3NAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0gUmVtb3ZlIG5v
bi12YXJpYWJsZSBvcHRpb25zIGZyb20gdGhlIGJ1aWxkIHN5c3RlbQpJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4JKHJldmlzaW9uIDEzMzg4NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhw
LmluCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw2IEBAIF9fWk43V2ViQ29yZTEwU2Nyb2xs
VmlldzI0d2luZG93UmVzaXplclIKIF9fWk43V2ViQ29yZTEwU2Nyb2xsVmlldzhhZGRDaGlsZEVO
M1dURjEwUGFzc1JlZlB0cklOU182V2lkZ2V0RUVFCiBfX1pON1dlYkNvcmUxMFNoYWRvd1Jvb3Q2
Y3JlYXRlRVBOU183RWxlbWVudEVSaQogX19aTjdXZWJDb3JlMTBkZWxldGVGaWxlRVJLTjNXVEY2
U3RyaW5nRQotX19aTjdXZWJDb3JlMTBzZXRDb29raWVzRVBOU184RG9jdW1lbnRFUktOU180S1VS
TEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTEwdG9Eb2N1bWVudEVOM0pTQzdKU1ZhbHVl
RQogX19aTjdXZWJDb3JlMTFCaXRtYXBJbWFnZUMxRVA3Q0dJbWFnZVBOU18xM0ltYWdlT2JzZXJ2
ZXJFCiBfX1pON1dlYkNvcmUxMUJpdG1hcEltYWdlQzFFUE5TXzEzSW1hZ2VPYnNlcnZlckUKQEAg
LTI2OSw2ICsyNjgsMTEgQEAgX19aTjdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbkMxRVBOU181RnJh
bQogX19aTjdXZWJDb3JlMTRMb2FkZXJTdHJhdGVneTIxcmVzb3VyY2VMb2FkU2NoZWR1bGVyRXYK
IF9fWk43V2ViQ29yZTE0UGx1Z2luRG9jdW1lbnQxMHBsdWdpbk5vZGVFdgogX19aTks3V2ViQ29y
ZTVGcmFtZTI1dHJhY2tlZFJlcGFpbnRSZWN0c0FzVGV4dEV2CitfX1pON1dlYkNvcmU5Q29va2ll
SmFyMTBzZXRDb29raWVzRVJLTlNfNEtVUkxFUzNfUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNv
cmU5Q29va2llSmFyMTZkZWxldGVBbGxDb29raWVzRXYKK19fWk43V2ViQ29yZTlDb29raWVKYXIy
M2dldEhvc3RuYW1lc1dpdGhDb29raWVzRVJOM1dURjdIYXNoU2V0SU5TMV82U3RyaW5nRU5TMV8x
MFN0cmluZ0hhc2hFTlMxXzEwSGFzaFRyYWl0c0lTM19FRUVFCitfX1pON1dlYkNvcmU5Q29va2ll
SmFyMjRkZWxldGVDb29raWVzRm9ySG9zdG5hbWVFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNv
cmU5Q29va2llSmFyN2Nvb2tpZXNFUktOU180S1VSTEVTM18KIF9fWk43V2ViQ29yZTlGcmFtZVZp
ZXcxN3NldFRyYWNrc1JlcGFpbnRzRWIKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyMHJlc2V0VHJh
Y2tlZFJlcGFpbnRzRXYKIF9fWk43V2ViQ29yZTE0UGx1Z2luRG9jdW1lbnQxMnBsdWdpbldpZGdl
dEV2CkBAIC00NjMsNyArNDY3LDYgQEAgX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFF
UktOU18xNQogX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktOU18xNVZpc2libGVQ
b3NpdGlvbkViCiBfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU180Tm9kZUUKIF9f
Wk43V2ViQ29yZTE2Y3JlYXRlRnVsbE1hcmt1cEVQS05TXzVSYW5nZUUKLV9fWk43V2ViQ29yZTE2
ZGVsZXRlQWxsQ29va2llc0V2CiBfX1pON1dlYkNvcmUxNmVuY2xvc2luZ0ludFJlY3RFUktOU185
RmxvYXRSZWN0RQogX19aTjdXZWJDb3JlMTZpc0VuZE9mUGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxl
UG9zaXRpb25FTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pON1dlYkNvcmUx
NmlzVXNlclZpc2libGVVUkxFUDhOU1N0cmluZwpAQCAtNjIyLDcgKzYyNSw2IEBAIF9fWk43V2Vi
Q29yZTIzY3JlYXRlRnJhZ21lbnRGcm9tTm9kZXNFUE4KIF9fWk43V2ViQ29yZTIzZGF0YUZvclVS
TENvbXBvbmVudFR5cGVFUDVOU1VSTGwKIF9fWk43V2ViQ29yZTIzZGVjb2RlSG9zdE5hbWVXaXRo
UmFuZ2VFUDhOU1N0cmluZzhfTlNSYW5nZQogX19aTjdXZWJDb3JlMjNlbmNvZGVIb3N0TmFtZVdp
dGhSYW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCi1fX1pON1dlYkNvcmUyM2dldEhvc3RuYW1lc1dp
dGhDb29raWVzRVJOM1dURjdIYXNoU2V0SU5TMF82U3RyaW5nRU5TMF8xMFN0cmluZ0hhc2hFTlMw
XzEwSGFzaFRyYWl0c0lTMl9FRUVFCiBfX1pON1dlYkNvcmUyNEJpbmFyeVByb3BlcnR5TGlzdFdy
aXRlcjE3d3JpdGVQcm9wZXJ0eUxpc3RFdgogX19aTjdXZWJDb3JlMjRDYWNoZWRSZXNvdXJjZUhh
bmRsZUJhc2UxMXNldFJlc291cmNlRVBOU18xNENhY2hlZFJlc291cmNlRQogX19aTjdXZWJDb3Jl
MjRDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIxMGZpcnN0Q2hpbGRFdgpAQCAtNjQxLDcgKzY0Myw2
IEBAIF9fWk43V2ViQ29yZTI0RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyQzIKIF9fWk43V2ViQ29y
ZTI0RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyRDJFdgogX19aTjdXZWJDb3JlMjRjcmVhdGVGcmFn
bWVudEZyb21NYXJrdXBFUE5TXzhEb2N1bWVudEVSS04zV1RGNlN0cmluZ0VTNV9OU18yN0ZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbkUKIF9fWk43V2ViQ29yZTI0ZGVjb2RlVVJMRXNjYXBlU2Vx
dWVuY2VzRVJLTjNXVEY2U3RyaW5nRQotX19aTjdXZWJDb3JlMjRkZWxldGVDb29raWVzRm9ySG9z
dG5hbWVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUyNGZpbGVTeXN0ZW1SZXByZXNlbnRh
dGlvbkVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI0bm90aWZ5SGlzdG9yeUl0ZW1DaGFu
Z2VkRQogX19aTjdXZWJDb3JlMjVIaXN0b3J5UHJvcGVydHlMaXN0V3JpdGVyMTFyZWxlYXNlRGF0
YUV2CkBAIC04NzYsNyArODc3LDYgQEAgX19aTjdXZWJDb3JlN1J1bkxvb3A5VGltZXJCYXNlRDJF
dgogX19aTjdXZWJDb3JlN1RleHRSdW4xOWFsbG93c1JvdW5kaW5nSGFja3NFdgogX19aTjdXZWJD
b3JlN1RleHRSdW4yMXNfYWxsb3dzUm91bmRpbmdIYWNrc0UKIF9fWk43V2ViQ29yZTdUZXh0UnVu
MjJzZXRBbGxvd3NSb3VuZGluZ0hhY2tzRWIKLV9fWk43V2ViQ29yZTdjb29raWVzRVBLTlNfOERv
Y3VtZW50RVJLTlNfNEtVUkxFCiBfX1pON1dlYkNvcmU3anNBcnJheUVQTjNKU0M5RXhlY1N0YXRl
RVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RU4zV1RGMTBQYXNzUmVmUHRySU5TXzEzRE9NU3RyaW5n
TGlzdEVFRQogX19aTjdXZWJDb3JlN21ha2VSR0JFaWlpCiBfX1pON1dlYkNvcmU3cmVwbGFjZUVS
TjNXVEY2U3RyaW5nRVJLTlNfMTdSZWd1bGFyRXhwcmVzc2lvbkVSS1MxXwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVs
LmNwcAkocmV2aXNpb24gMTMzODA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzAsNyArNDMwLDcg
QEAgYm9vbCBXZWJTb2NrZXRDaGFubmVsOjpwcm9jZXNzQnVmZmVyKCkKICAgICAgICAgICAgIGlm
IChtX2lkZW50aWZpZXIpCiAgICAgICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRSZWNlaXZlV2ViU29ja2V0SGFuZHNoYWtlUmVzcG9uc2UobV9kb2N1bWVudCwgbV9pZGVu
dGlmaWVyLCBtX2hhbmRzaGFrZS0+c2VydmVySGFuZHNoYWtlUmVzcG9uc2UoKSk7CiAgICAgICAg
ICAgICBpZiAoIW1faGFuZHNoYWtlLT5zZXJ2ZXJTZXRDb29raWUoKS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoY29va2llc0VuYWJsZWQobV9kb2N1bWVudCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9kb2N1bWVudC0+Y29va2llc0VuYWJsZWQoKSkgewogICAgICAgICAgICAg
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjOyAvLyBFeGNlcHRpb24gKGZvciBzYW5kYm94ZWQgZG9j
dW1lbnRzKSBpZ25vcmVkLgogICAgICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5zZXRDb29r
aWUobV9oYW5kc2hha2UtPnNlcnZlclNldENvb2tpZSgpLCBlYyk7CiAgICAgICAgICAgICAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldEhhbmRzaGFrZS5jcHAJKHJldmlzaW9uIDEzMzgwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw2ICszOSw5IEBACiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29v
a2llSmFyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNp
bmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNs
dWRlICJLVVJMLmgiCkBAIC0yMDAsNyArMjAzLDEwIEBAIENTdHJpbmcgV2ViU29ja2V0SGFuZHNo
YWtlOjpjbGllbnRIYW5kc2gKICAgICBLVVJMIHVybCA9IGh0dHBVUkxGb3JBdXRoZW50aWNhdGlv
bkFuZENvb2tpZXMoKTsKICAgICBpZiAobV9jb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKICAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX2NvbnRleHQp
OwotICAgICAgICBTdHJpbmcgY29va2llID0gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
ZG9jdW1lbnQsIHVybCk7CisgICAgICAgIFN0cmluZyBjb29raWU7CisgICAgICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOworICAgICAgICBpZiAoZnJhbWUpCisgICAgICAgICAg
ICBjb29raWUgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5jb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2ll
cygpKTsKICAgICAgICAgaWYgKCFjb29raWUuaXNFbXB0eSgpKQogICAgICAgICAgICAgZmllbGRz
LmFwcGVuZCgiQ29va2llOiAiICsgY29va2llKTsKICAgICAgICAgLy8gU2V0ICJDb29raWUyOiA8
Y29va2llPiIgaWYgY29va2llcyAyIGV4aXN0cyBmb3IgdXJsPwpAQCAtMjQ5LDcgKzI1NSwxMiBA
QCBQYXNzUmVmUHRyPFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3Q+IFdlCiAgICAgS1VSTCB1cmwg
PSBodHRwVVJMRm9yQXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7CiAgICAgaWYgKG1fY29udGV4
dC0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19j
YXN0PERvY3VtZW50Kj4obV9jb250ZXh0KTsKLSAgICAgICAgU3RyaW5nIGNvb2tpZSA9IGNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgICAgICBTdHJpbmcg
Y29va2llOworICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAg
ICAgaWYgKGZyYW1lKSB7CisgICAgICAgICAgICBDb29raWVKYXIgY29va2llSmFyID0gZnJhbWUt
PmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCk7CisgICAgICAgICAgICBjb29raWUgPSBj
b29raWVKYXIuY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmly
c3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgICAgIH0KICAgICAgICAgaWYgKCFjb29raWUuaXNF
bXB0eSgpKQogICAgICAgICAgICAgcmVxdWVzdC0+YWRkSGVhZGVyRmllbGQoIkNvb2tpZSIsIGNv
b2tpZSk7CiAgICAgICAgIC8vIFNldCAiQ29va2llMjogPGNvb2tpZT4iIGlmIGNvb2tpZXMgMiBl
eGlzdHMgZm9yIHVybD8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTMz
ODg1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgxNCw3ICszODE0LDkgQEAgU3RyaW5nIERvY3VtZW50Ojpjb29raWUoRXhjZXB0aW9uQ29k
ZSYgZQogICAgIGlmIChjb29raWVVUkwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAKLSAgICByZXR1cm4gY29va2llcyh0aGlzLCBjb29raWVVUkwpOworICAgIGlmICghZnJh
bWUoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBmcmFtZSgpLT5sb2Fk
ZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNvb2tpZXMoY29va2llVVJMLCB0aGlzLT5maXJz
dFBhcnR5Rm9yQ29va2llcygpKTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0Q29va2llKGNvbnN0
IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMzgzNSw3ICszODM3LDIzIEBA
IHZvaWQgRG9jdW1lbnQ6OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHYKICAgICBpZiAoY29va2ll
VVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0Q29va2llcyh0aGlzLCBj
b29raWVVUkwsIHZhbHVlKTsKKyAgICBpZiAoIWZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLnNldENvb2tpZXMoY29v
a2llVVJMLCB0aGlzLT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7Cit9CisKK2Jvb2wg
RG9jdW1lbnQ6OmNvb2tpZXNFbmFibGVkKCkKK3sKKyAgICBpZiAoIXBhZ2UoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFwYWdlKCktPnNldHRpbmdzKCktPmNvb2tpZUVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFmcmFtZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgp
LT5jb29raWVKYXIoKS5jb29raWVzRW5hYmxlZCh0aGlzLT5jb29raWVVUkwoKSwgdGhpcy0+Zmly
c3RQYXJ0eUZvckNvb2tpZXMoKSk7CiB9CiAKIFN0cmluZyBEb2N1bWVudDo6cmVmZXJyZXIoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDEzMzgwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MjMsNiArODIzLDcg
QEAgcHVibGljOgogCiAgICAgU3RyaW5nIGNvb2tpZShFeGNlcHRpb25Db2RlJikgY29uc3Q7CiAg
ICAgdm9pZCBzZXRDb29raWUoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJv
b2wgY29va2llc0VuYWJsZWQoKTsKIAogICAgIFN0cmluZyByZWZlcnJlcigpIGNvbnN0OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cAkocmV2aXNpb24gMTMzODA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDggQEAKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiR2VvbG9jYXRpb25FcnJvci5oIgpAQCAtNTA5LDkgKzUxMSwx
MCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvCiAgICAgZm9yIChG
cmFtZSogZnJhbWUgPSBtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+
dHJhdmVyc2VOZXh0KG1haW5GcmFtZSgpKSkgewogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBmcmFtZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgVmVjdG9yPEtVUkw+IGFsbFVSTHMgPSBhbGxS
ZXNvdXJjZXNVUkxzRm9yRnJhbWUoZnJhbWUpOworICAgICAgICBDb29raWVKYXIgY29va2llSmFy
ID0gZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCk7CiAgICAgICAgIGZvciAo
VmVjdG9yPEtVUkw+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFVSTHMuYmVnaW4oKTsgaXQgIT0g
YWxsVVJMcy5lbmQoKTsgKytpdCkgewogICAgICAgICAgICAgVmVjdG9yPENvb2tpZT4gZG9jQ29v
a2llc0xpc3Q7Ci0gICAgICAgICAgICByYXdDb29raWVzSW1wbGVtZW50ZWQgPSBnZXRSYXdDb29r
aWVzKGRvY3VtZW50LCBLVVJMKFBhcnNlZFVSTFN0cmluZywgKml0KSwgZG9jQ29va2llc0xpc3Qp
OworICAgICAgICAgICAgcmF3Q29va2llc0ltcGxlbWVudGVkID0gY29va2llSmFyLmdldFJhd0Nv
b2tpZXMoS1VSTChQYXJzZWRVUkxTdHJpbmcsICppdCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9y
Q29va2llcygpLCBkb2NDb29raWVzTGlzdCk7CiAgICAgICAgICAgICBpZiAoIXJhd0Nvb2tpZXNJ
bXBsZW1lbnRlZCkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIGR1cGxpY2F0
aW9uIGNoZWNraW5nIGZvciB0aGUgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGNvb2tpZXMuCiAg
ICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC01NDcsOCArNTUwLDkgQEAg
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcgogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgVmVjdG9yPEtVUkw+IGFsbFVSTHMgPSBhbGxSZXNvdXJjZXNVUkxz
Rm9yRnJhbWUoZnJhbWUpOworICAgICAgICBDb29raWVKYXIgY29va2llSmFyID0gZnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCk7CiAgICAgICAgIGZvciAoVmVjdG9yPEtVUkw+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFsbFVSTHMuYmVnaW4oKTsgaXQgIT0gYWxsVVJMcy5lbmQo
KTsgKytpdCkKLSAgICAgICAgICAgIFdlYkNvcmU6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgS1VS
TChQYXJzZWRVUkxTdHJpbmcsICppdCksIGNvb2tpZU5hbWUpOworICAgICAgICAgICAgY29va2ll
SmFyLmRlbGV0ZUNvb2tpZShLVVJMKFBhcnNlZFVSTFN0cmluZywgKml0KSwgY29va2llTmFtZSk7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJDbGll
bnQuaAkocmV2aXNpb24gMTMzODA5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5kZWYgRnJh
bWVMb2FkZXJDbGllbnRfaAogI2RlZmluZSBGcmFtZUxvYWRlckNsaWVudF9oCiAKKyNpbmNsdWRl
ICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAi
SWNvblVSTC5oIgogI2luY2x1ZGUgIkxheW91dE1pbGVzdG9uZXMuaCIKQEAgLTY0LDYgKzY1LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
OwogICAgIGNsYXNzIENhY2hlZEZyYW1lOwogICAgIGNsYXNzIENvbG9yOworICAgIGNsYXNzIENv
b2tpZUphcjsKICAgICBjbGFzcyBET01XaW5kb3dFeHRlbnNpb247CiAgICAgY2xhc3MgRE9NV3Jh
cHBlcldvcmxkOwogICAgIGNsYXNzIERvY3VtZW50TG9hZGVyOwpAQCAtMzUzLDYgKzM1NSw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoUkVRVUVTVF9BVVRPQ09NUExFVEUpCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZXF1ZXN0QXV0b2NvbXBsZXRlKFBhc3NSZWZQdHI8Rm9y
bVN0YXRlPikgPSAwOwogI2VuZGlmCisKKyAgICAgICAgdmlydHVhbCBDb29raWVKYXIgY29va2ll
SmFyKCkgeyByZXR1cm4gQ29va2llSmFyKCk7IH0KICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiAxMzM4MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL05hdmlnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3Iu
aCIKIAotI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkRPTU1pbWVUeXBlQXJyYXku
aCIKICNpbmNsdWRlICJET01QbHVnaW5BcnJheS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBA
IC0xMTgsNyArMTE3LDcgQEAgYm9vbCBOYXZpZ2F0b3I6OmNvb2tpZUVuYWJsZWQoKSBjb25zdAog
ICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkgJiYgIW1fZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3MoKS0+
Y29va2llRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gY29v
a2llc0VuYWJsZWQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmRv
Y3VtZW50KCktPmNvb2tpZXNFbmFibGVkKCk7CiB9CiAKIGJvb2wgTmF2aWdhdG9yOjpqYXZhRW5h
YmxlZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db29raWVKYXIuaAkocmV2aXNp
b24gMTMzODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29va2llSmFyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDEyIEBACiAjaWZuZGVmIENvb2tpZUphcl9oCiAjZGVmaW5l
IENvb2tpZUphcl9oCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlIDxwdWJsaWMv
V2ViQ29va2llSmFyLmg+CisjZW5kaWYKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZM
KSB8fCBQTEFURk9STShHVEspCisjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKKyNlbmRp
ZgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTMzLDI1ICszOSw1NCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50OwogY2xhc3MgS1VSTDsKIHN0cnVjdCBD
b29raWU7CiAKLS8vIFRoZXNlIHR3byBmdW5jdGlvbnMgaW1wbGVtZW50IGRvY3VtZW50LmNvb2tp
ZSBBUEksIHdpdGggc3BlY2lhbCBydWxlcyBmb3IgSHR0cE9ubHkgY29va2llcy4KLVN0cmluZyBj
b29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotdm9pZCBzZXRDb29raWVzKERv
Y3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwotCi0vLyBUaGVzZSBtZXRob2Rz
IHVzZSBjdXJyZW50IGNvb2tpZSBzdG9yYWdlLCB0aHVzIHRha2luZyBwcml2YXRlIGJyb3dzaW5n
IG1vZGUgaW50byBhY2NvdW50LgotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCop
OwotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYpOwotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3Qg
S1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKLQotLy8gVGhlc2UgZnVuY3Rpb25zIGFs
d2F5cyBhY2Nlc3MgZGVmYXVsdCBjb29raWUgc3RvcmFnZSwgbm90IHRha2luZyBwcml2YXRlIGJy
b3dzaW5nIG1vZGUgaW50byBhY2NvdW50Lgotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhI
YXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcyk7Ci12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFt
ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpOworY2xh
c3MgQ29va2llSmFyIHsKK3B1YmxpYzoKKyAgICBDb29raWVKYXIoKQorICAgIHsKKyNpZiBQTEFU
Rk9STShDSFJPTUlVTSkKKyAgICAgICAgbV93ZWJDb29raWVKYXIgPSAwOworI2VuZGlmCisjaWYg
UExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQorICAgICAgICBt
X25ldHdvcmtpbmdDb250ZXh0ID0gMDsKKyNlbmRpZgorICAgIH07CisjaWYgUExBVEZPUk0oQ0hS
T01JVU0pCisgICAgZXhwbGljaXQgQ29va2llSmFyKFdlYktpdDo6V2ViQ29va2llSmFyKiB3ZWJD
b29raWVKYXIpCisgICAgeworICAgICAgICBtX3dlYkNvb2tpZUphciA9IHdlYkNvb2tpZUphcjsK
KyAgICB9OworI2VuZGlmCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExB
VEZPUk0oR1RLKQorICAgIGV4cGxpY2l0IENvb2tpZUphcihOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCkKKyAgICB7CisgICAgICAgIG1fbmV0d29ya2luZ0NvbnRleHQgPSBjb250ZXh0OworICAg
IH07CisjZW5kaWYKKworICAgIC8vIGNvb2tpZXMgb21pdHMgSHR0cE9ubHkgY29va2llcy4KKyAg
ICBTdHJpbmcgY29va2llcyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOworICAgIFN0cmluZyBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYpOwor
ICAgIHZvaWQgc2V0Q29va2llcyhjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYpOworICAgIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmKTsK
KyAgICBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmLCBWZWN0b3I8
Q29va2llPiYpOworICAgIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmKTsKKworICAgIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+
JiBob3N0bmFtZXMpOworICAgIHZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0
cmluZyYgaG9zdG5hbWUpOworICAgIHZvaWQgZGVsZXRlQWxsQ29va2llcygpOworCitwcml2YXRl
OgorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIFdlYktpdDo6V2ViQ29va2llSmFyKiBtX3dl
YkNvb2tpZUphcjsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwpIHx8
IFBMQVRGT1JNKEdUSykKKyAgICBOZXR3b3JraW5nQ29udGV4dCogbV9uZXR3b3JraW5nQ29udGV4
dDsKKyNlbmRpZgorfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3Vw
cG9ydC5oCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9QbGF0Zm9ybVN1cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsMTQgKzc4LDYgQEAg
c3RydWN0IEZvbnRSZW5kZXJTdHlsZTsKIAogY2xhc3MgUGxhdGZvcm1TdXBwb3J0IHsKIHB1Ymxp
YzoKLSAgICAvLyBDb29raWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgc3RhdGlj
IFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRp
YyBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBj
b25zdCBLVVJMJik7Ci0gICAgc3RhdGljIGJvb2wgcmF3Q29va2llcyhjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYpOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUNv
b2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5h
bWUpOwotICAgIHN0YXRpYyBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0K
ICAgICAvLyBGb250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogI2lmIE9TKFdJTkRPV1MpCiAgICAgc3RhdGljIGJvb2wgZW5z
dXJlRm9udExvYWRlZChIRk9OVCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCShyZXZpc2lvbiAxMzM4MDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDgg
QEAKICNpbmNsdWRlICJDb29raWVKYXIuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTI2OCw3ICsyNzAsNyBAQCB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvCiAKICAgICBLVVJMIG1vdmll
VVJMID0gS1VSTChLVVJMKCksIHVybCk7CiAgICAgVmVjdG9yPENvb2tpZT4gZG9jdW1lbnRDb29r
aWVzOwotICAgIGlmICghZ2V0UmF3Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgbW92aWVVUkws
IGRvY3VtZW50Q29va2llcykpCisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5j
b29raWVKYXIoKS5nZXRSYXdDb29raWVzKG1vdmllVVJMLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZv
ckNvb2tpZXMoKSwgZG9jdW1lbnRDb29raWVzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9y
IChzaXplX3QgbmR4ID0gMDsgbmR4IDwgZG9jdW1lbnRDb29raWVzLnNpemUoKTsgbmR4KyspIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Db29raWVKYXIubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkocmV2aXNpb24g
MTMzODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Nvb2tpZUphci5tbQkod29y
a2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+IGZp
bHRlckNvb2tpZXMoCiAgICAgcmV0dXJuIGZpbHRlcmVkQ29va2llczsKIH0KIAotU3RyaW5nIGNv
b2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFy
Ojpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29v
a2llcyovKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtNzIsNyAr
NzIsNyBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVCiAgICAgcmV0
dXJuIFN0cmluZygpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
Y29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8q
Zmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CiAKQEAgLTgzLDcgKzgzLDcgQEAgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBzZXRDb29raWVzKERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cikK
K3ZvaWQgQ29va2llSmFyOjpzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYg
Zmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IFN0cmluZyYgY29va2llU3RyKQogewogICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMTAwLDEyICsxMDAsMTIgQEAgdm9pZCBz
ZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIFJldGFpblB0cjxOU0FycmF5
PiBmaWx0ZXJlZENvb2tpZXMgPSBmaWx0ZXJDb29raWVzKFtOU0hUVFBDb29raWUgY29va2llc1dp
dGhSZXNwb25zZUhlYWRlckZpZWxkczpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0
OmNvb2tpZVN0cmluZyBmb3JLZXk6QCJTZXQtQ29va2llIl0gZm9yVVJMOmNvb2tpZVVSTF0pOwog
ICAgIEFTU0VSVChbZmlsdGVyZWRDb29raWVzLmdldCgpIGNvdW50XSA8PSAxKTsKIAotICAgIHdr
U2V0SFRUUENvb2tpZXNGb3JVUkwoY3VycmVudENGSFRUUENvb2tpZVN0b3JhZ2UoKS5nZXQoKSwg
ZmlsdGVyZWRDb29raWVzLmdldCgpLCBjb29raWVVUkwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9y
Q29va2llcygpKTsKKyAgICB3a1NldEhUVFBDb29raWVzRm9yVVJMKGN1cnJlbnRDRkhUVFBDb29r
aWVTdG9yYWdlKCkuZ2V0KCksIGZpbHRlcmVkQ29va2llcy5nZXQoKSwgY29va2llVVJMLCBmaXJz
dFBhcnR5Rm9yQ29va2llcyk7CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQog
Ci1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KikKK2Jvb2wgQ29va2llSmFyOjpj
b29raWVzRW5hYmxlZChjb25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFy
dHlGb3JDb29raWVzKi8pCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBA
IC0xMTYsNyArMTE2LDcgQEAgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBDb29r
aWVKYXI6OmdldFJhd0Nvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0
UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIHJh
d0Nvb2tpZXMuY2xlYXIoKTsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CkBAIC0x
MzUsNyArMTM1LDcgQEAgYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29ucwog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCos
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQordm9pZCBDb29raWVK
YXI6OmRlbGV0ZUNvb2tpZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFt
ZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTE1NSw3ICsxNTUs
NyBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0CiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhI
YXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0bmFtZXNX
aXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCB2b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
IH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFt
ZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5n
JiBob3N0bmFtZSkKIHsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKQEAgLTE4
NCw3ICsxODQsNyBAQCB2b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpCiAg
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVz
KCkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICB3a0RlbGV0ZUFs
bEhUVFBDb29raWVzKGRlZmF1bHRDRkhUVFBDb29raWVTdG9yYWdlKCkuZ2V0KCkpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVKYXJDRk5ldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Db29raWVK
YXJDRk5ldC5jcHAJKHJldmlzaW9uIDEzMzgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvQ29va2llSmFyQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw2IEBACiAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRlICJDb29raWVTdG9yYWdlQ0ZO
ZXQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCkBAIC05NSw3ICs5
NCw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZmlsdGVyQ29va2kKICAgICByZXR1
cm4gZmlsdGVyZWRDb29raWVzOwogfQogCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIENvb2tpZUph
cjo6c2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JD
b29raWVzLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81
NjMyODgzPiBDRkhUVFBDb29raWVTdG9yYWdlIHN0b3JlcyBhbiBlbXB0eSBjb29raWUsIHdoaWNo
IHdvdWxkIGJlIHNlbnQgYXMgIkNvb2tpZTogPSIuCiAgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkK
QEAgLTEwNiw3ICsxMDUsNyBAQCB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zCiAgICAgICAgIHJldHVybjsKIAogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsQ0YoQWRv
cHRDRiwgdXJsLmNyZWF0ZUNGVVJMKCkpOwotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gZmlyc3RQ
YXJ0eUZvckNvb2tpZXNDRihBZG9wdENGLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMo
KS5jcmVhdGVDRlVSTCgpKTsKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGZpcnN0UGFydHlGb3JD
b29raWVzQ0YoQWRvcHRDRiwgZmlyc3RQYXJ0eUZvckNvb2tpZXMuY3JlYXRlQ0ZVUkwoKSk7CiAK
ICAgICAvLyA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUzMT4sIDxy
ZGFyOi8vNDQwOTAzND4KICAgICAvLyBjb29raWVzV2l0aFJlc3BvbnNlSGVhZGVyRmllbGRzIGRv
ZXNuJ3QgcGFyc2UgY29va2llcyB3aXRob3V0IGEgdmFsdWUKQEAgLTEyMyw3ICsxMjIsNyBAQCB2
b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zCiAgICAgQ0ZIVFRQQ29va2ll
U3RvcmFnZVNldENvb2tpZXMoY29va2llU3RvcmFnZS5nZXQoKSwgZmlsdGVyQ29va2llcyhjb29r
aWVzQ0YuZ2V0KCkpLmdldCgpLCB1cmxDRi5nZXQoKSwgZmlyc3RQYXJ0eUZvckNvb2tpZXNDRi5n
ZXQoKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8s
IGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTEzNyw3ICsxMzYs
NyBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVuCiAgICAgcmV0dXJu
IChDRlN0cmluZ1JlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZShoZWFkZXJDRi5nZXQoKSwgc19jb29r
aWVDRik7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBE
b2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFy
Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtV
UkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBSZXRhaW5QdHI8Q0ZIVFRQQ29v
a2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGN1cnJlbnRDRkhUVFBDb29raWVTdG9yYWdl
KCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpAQCAtMTUxLDcgKzE1MCw3IEBAIFN0cmluZyBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24KICAgICByZXR1cm4gKENGU3RyaW5nUmVm
KUNGRGljdGlvbmFyeUdldFZhbHVlKGhlYWRlckNGLmdldCgpLCBzX2Nvb2tpZUNGKTsKIH0KIAot
Ym9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovKQorYm9vbCBD
b29raWVKYXI6OmNvb2tpZXNFbmFibGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwm
IC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLykKIHsKICAgICBDRkhUVFBDb29raWVTdG9yYWdlQWNj
ZXB0UG9saWN5IHBvbGljeSA9IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5RnJv
bU1haW5Eb2N1bWVudERvbWFpbjsKICAgICBpZiAoUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3Jh
Z2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpKQpAQCAt
MTU5LDcgKzE1OCw3IEBAIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIC8qZG8K
ICAgICByZXR1cm4gcG9saWN5ID09IENGSFRUUENvb2tpZVN0b3JhZ2VBY2NlcHRQb2xpY3lPbmx5
RnJvbU1haW5Eb2N1bWVudERvbWFpbiB8fCBwb2xpY3kgPT0gQ0ZIVFRQQ29va2llU3RvcmFnZUFj
Y2VwdFBvbGljeUFsd2F5czsKIH0KIAotYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50
KiwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29v
a2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJz
dFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICAgICBy
YXdDb29raWVzLmNsZWFyKCk7CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+
IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwpAQCAtMTkzLDcg
KzE5Miw3IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnMKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVD
b29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgUmV0YWlu
UHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBjdXJyZW50Q0ZIVFRQ
Q29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKQEAgLTIxNCw3ICsyMTMs
NyBAQCB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0CiAgICAgfQogfQog
Ci12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVz
KQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5n
PiYgaG9zdG5hbWVzKQogewogICAgIFJldGFpblB0cjxDRkhUVFBDb29raWVTdG9yYWdlUmVmPiBj
b29raWVTdG9yYWdlID0gZGVmYXVsdENGSFRUUENvb2tpZVN0b3JhZ2UoKTsKICAgICBpZiAoIWNv
b2tpZVN0b3JhZ2UpCkBAIC0yMzIsNyArMjMxLDcgQEAgdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhIYXNoU2V0PFN0cgogICAgIH0KIH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5h
bWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKICAgICBSZXRhaW5QdHI8Q0ZI
VFRQQ29va2llU3RvcmFnZVJlZj4gY29va2llU3RvcmFnZSA9IGRlZmF1bHRDRkhUVFBDb29raWVT
dG9yYWdlKCk7CiAgICAgaWYgKCFjb29raWVTdG9yYWdlKQpAQCAtMjUxLDcgKzI1MCw3IEBAIHZv
aWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmkKICAgICB9CiB9CiAKLXZvaWQg
ZGVsZXRlQWxsQ29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7
CiAgICAgUmV0YWluUHRyPENGSFRUUENvb2tpZVN0b3JhZ2VSZWY+IGNvb2tpZVN0b3JhZ2UgPSBk
ZWZhdWx0Q0ZIVFRQQ29va2llU3RvcmFnZSgpOwogICAgIGlmICghY29va2llU3RvcmFnZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNTIgKzMyLDc0IEBACiAjaW5jbHVkZSAiQ29va2llSmFy
LmgiCiAKICNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWUuaD4KKyNp
bmNsdWRlIDxwdWJsaWMvV2ViQ29va2llSmFyLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlN0cmlu
Zy5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJVUkwuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBD
b29raWVKYXI6OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBh
cnR5Rm9yQ29va2llcywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBQbGF0Zm9ybVN1cHBv
cnQ6OnNldENvb2tpZXMoZG9jdW1lbnQsIHVybCwgdmFsdWUpOworICAgIGlmIChtX3dlYkNvb2tp
ZUphcikKKyAgICAgICAgbV93ZWJDb29raWVKYXItPnNldENvb2tpZSh1cmwsIGZpcnN0UGFydHlG
b3JDb29raWVzLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llcyhjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJl
dHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXMoZG9jdW1lbnQsIHVybCk7CisgICAgaWYgKCFt
X3dlYkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBtX3dl
YkNvb2tpZUphci0+Y29va2llcyh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAotU3Ry
aW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29v
a2llcykKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAgICBpZiAoIW1fd2ViQ29va2llSmFyKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fd2ViQ29va2llSmFyLT5jb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKIH0KIAot
Ym9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCitib29sIENvb2tp
ZUphcjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBmaXJzdFBh
cnR5Rm9yQ29va2llcykKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5h
YmxlZChkb2N1bWVudCk7CisgICAgaWYgKCFtX3dlYkNvb2tpZUphcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBtX3dlYkNvb2tpZUphci0+Y29va2llc0VuYWJsZWQodXJsLCBm
aXJzdFBhcnR5Rm9yQ29va2llcyk7CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tp
ZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykK
IHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmws
IHJhd0Nvb2tpZXMpOworICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKKyAgICBXZWJLaXQ6OldlYlZl
Y3RvcjxXZWJLaXQ6OldlYkNvb2tpZT4gd2ViQ29va2llczsKKworICAgIGlmIChtX3dlYkNvb2tp
ZUphcikKKyAgICAgICAgbV93ZWJDb29raWVKYXItPnJhd0Nvb2tpZXModXJsLCBmaXJzdFBhcnR5
Rm9yQ29va2llcywgd2ViQ29va2llcyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
d2ViQ29va2llcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBXZWJLaXQ6OldlYkNvb2tp
ZSYgd2ViQ29va2llID0gd2ViQ29va2llc1tpXTsKKyAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJD
b29raWUubmFtZSwgd2ViQ29va2llLnZhbHVlLCB3ZWJDb29raWUuZG9tYWluLCB3ZWJDb29raWUu
cGF0aCwgd2ViQ29va2llLmV4cGlyZXMsIHdlYkNvb2tpZS5odHRwT25seSwgd2ViQ29va2llLnNl
Y3VyZSwgd2ViQ29va2llLnNlc3Npb24pOworICAgICAgICByYXdDb29raWVzLmFwcGVuZChjb29r
aWUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29v
a2llTmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6
ZGVsZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOworICAgIGlmIChtX3dlYkNv
b2tpZUphcikKKyAgICAgICAgbV93ZWJDb29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tp
ZU5hbWUpOwogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5n
PiYgaG9zdG5hbWVzKQordm9pZCBDb29raWVKYXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhh
c2hTZXQ8U3RyaW5nPiYgLypob3N0bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJp
bmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShj
b25zdCBTdHJpbmcmIC8qaG9zdG5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBs
ZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBDb29raWVKYXI6OmRl
bGV0ZUFsbENvb2tpZXMoKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3Vy
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0Nvb2tpZUphckN1cmwuY3BwCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlICJDb29raWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tp
ZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtMjYs
NTIgKzI1LDUyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IGNvb2tpZUphcjsKK3N0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBz
X2Nvb2tpZUphcjsKIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiAvKmRvY3VtZW50Ki8sIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpzZXRD
b29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2ll
cyovLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGNvb2tpZUphci5zZXQodXJsLnN0cmlu
ZygpLCB2YWx1ZSk7CisgICAgc19jb29raWVKYXIuc2V0KHVybC5zdHJpbmcoKSwgdmFsdWUpOwog
fQogCi1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogLypkb2N1bWVudCovLCBjb25zdCBL
VVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFyOjpjb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewotICAgIHJldHVybiBjb29raWVK
YXIuZ2V0KHVybC5zdHJpbmcoKSk7CisgICAgcmV0dXJuIHNfY29va2llSmFyLmdldCh1cmwuc3Ry
aW5nKCkpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3Qg
RG9jdW1lbnQqIC8qZG9jdW1lbnQqLywgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUph
cjo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBL
VVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAgLy8gRklYTUU6IGluY2x1ZGUg
SHR0cE9ubHkgY29va2llLgotICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVybC5zdHJpbmcoKSk7
CisgICAgcmV0dXJuIHNfY29va2llSmFyLmdldCh1cmwuc3RyaW5nKCkpOwogfQogCi1ib29sIGNv
b2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIENvb2tpZUph
cjo6Y29va2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJz
dFBhcnR5Rm9yQ29va2llcyovKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGdldFJh
d0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJh
d0Nvb2tpZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiAvKnVy
bCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+
JiByYXdDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiAgICAg
cmF3Q29va2llcy5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsgLy8gcmV0dXJuIHRydWUgd2hl
biBpbXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShj
b25zdCBLVVJMJiAvKnVybCovLCBjb25zdCBTdHJpbmcmIC8qY29va2llTmFtZSovKQogewogICAg
IC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0
aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0
SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1lcyovKQogewog
ICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSovKQogewogICAg
IC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2ll
cygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgLy8gRklYTUU6
IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAJKHJldmlzaW9uIDEzMzgw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3Vw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgIkNvb2tpZUph
clNvdXAuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgorI2luY2x1ZGUgIkNvb2tpZUphci5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgpAQCAtMzQsMTcgKzM1LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1z
dGF0aWMgU291cENvb2tpZUphciogY29va2llSmFyRm9yRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50KQorc3RhdGljIFNvdXBDb29raWVKYXIqIGNvb2tpZUphckZvckNvbnRleHQoY29u
c3QgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgY29uc3QgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1l
KCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY29uc3QgRnJhbWVM
b2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKLSAgICBpZiAoIWxvYWRlcikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgY29uc3QgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBsb2Fk
ZXItPm5ldHdvcmtpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1
cm4gMDsKICAgICByZXR1cm4gU09VUF9DT09LSUVfSkFSKHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVy
ZShjb250ZXh0LT5zb3VwU2Vzc2lvbigpLCBTT1VQX1RZUEVfQ09PS0lFX0pBUikpOwpAQCAtODYs
MTQgKzc4LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodHRwT25seUNvb2tpZUV4aXN0cygKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29va2llSmFyOjpz
ZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tp
ZXMsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgU291cENvb2tpZUphciogamFyID0gY29v
a2llSmFyRm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIFNvdXBDb29raWVKYXIqIGphciA9IGNv
b2tpZUphckZvckNvbnRleHQobV9uZXR3b3JraW5nQ29udGV4dCk7CiAgICAgaWYgKCFqYXIpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEdPd25QdHI8U291cFVSST4gb3JpZ2luKHNvdXBfdXJpX25l
dyh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOwotICAgIEdPd25QdHI8U291cFVSST4gZmly
c3RQYXJ0eShzb3VwX3VyaV9uZXcoZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSkpOworICAgIEdPd25QdHI8U291cFVSST4gZmlyc3RQYXJ0eShz
b3VwX3VyaV9uZXcoZmlyc3RQYXJ0eUZvckNvb2tpZXMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSkp
OwogCiAgICAgLy8gR2V0IGV4aXN0aW5nIGNvb2tpZXMgZm9yIHRoaXMgb3JpZ2luLgogICAgIEdT
TGlzdCogZXhpc3RpbmdDb29raWVzID0gc291cF9jb29raWVfamFyX2dldF9jb29raWVfbGlzdChq
YXIsIG9yaWdpbi5nZXQoKSwgVFJVRSk7CkBAIC0xMjAsOSArMTEyLDkgQEAgdm9pZCBzZXRDb29r
aWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29ucwogICAgIHNvdXBfY29va2llc19mcmVlKGV4aXN0
aW5nQ29va2llcyk7CiB9CiAKLXN0YXRpYyBTdHJpbmcgY29va2llc0ZvckRvY3VtZW50KGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBib29sIGZvckhUVFBIZWFkZXIp
CitzdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JDb250ZXh0KGNvbnN0IE5ldHdvcmtpbmdDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgZm9ySFRUUEhlYWRlcikKIHsKLSAgICBT
b3VwQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7CisgICAg
U291cENvb2tpZUphciogamFyID0gY29va2llSmFyRm9yQ29udGV4dChjb250ZXh0KTsKICAgICBp
ZiAoIWphcikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCkBAIC0xMzEsMjUgKzEyMywyNSBA
QCBzdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JEb2N1bWVudChjb25zdCBECiAgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoY29va2llcy5nZXQoKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIENvb2tpZUphcjo6
Y29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tp
ZXMqLykKIHsKLSAgICByZXR1cm4gY29va2llc0ZvckRvY3VtZW50KGRvY3VtZW50LCB1cmwsIGZh
bHNlKTsKKyAgICByZXR1cm4gY29va2llc0ZvckNvbnRleHQobV9uZXR3b3JraW5nQ29udGV4dCwg
dXJsLCBmYWxzZSk7CiB9CiAKLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVK
YXI6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
S1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovKQogewotICAgIHJldHVybiBjb29raWVzRm9y
RG9jdW1lbnQoZG9jdW1lbnQsIHVybCwgdHJ1ZSk7CisgICAgcmV0dXJuIGNvb2tpZXNGb3JDb250
ZXh0KG1fbmV0d29ya2luZ0NvbnRleHQsIHVybCwgdHJ1ZSk7CiB9CiAKLWJvb2wgY29va2llc0Vu
YWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQorYm9vbCBDb29raWVKYXI6OmNvb2tpZXNF
bmFibGVkKGNvbnN0IEtVUkwmIC8qdXJsKi8sIGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNv
b2tpZXMqLykKIHsKLSAgICByZXR1cm4gISFjb29raWVKYXJGb3JEb2N1bWVudChkb2N1bWVudCk7
CisgICAgcmV0dXJuICEhbV9uZXR3b3JraW5nQ29udGV4dDsKIH0KIAotYm9vbCBnZXRSYXdDb29r
aWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5Rm9yQ29va2llcyovLCBWZWN0b3I8Q29v
a2llPiYgcmF3Q29va2llcykKIHsKICAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgU291cENv
b2tpZUphciogamFyID0gY29va2llSmFyRm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIFNvdXBD
b29raWVKYXIqIGphciA9IGNvb2tpZUphckZvckNvbnRleHQobV9uZXR3b3JraW5nQ29udGV4dCk7
CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTcwLDkgKzE2Miw5
IEBAIGJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW0KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxl
dGVDb29raWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgU291
cENvb2tpZUphciogamFyID0gY29va2llSmFyRm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIFNv
dXBDb29raWVKYXIqIGphciA9IGNvb2tpZUphckZvckNvbnRleHQobV9uZXR3b3JraW5nQ29udGV4
dCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTkxLDcgKzE4Myw3IEBA
IHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWUKICAgICB9CiB9CiAKLXZv
aWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2
b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiBo
b3N0bmFtZXMpCiB7CiAgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gc291cENvb2tpZUph
cigpOwogICAgIEdPd25QdHI8R1NMaXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29v
a2llcyhjb29raWVKYXIpKTsKQEAgLTIwMyw3ICsxOTUsNyBAQCB2b2lkIGdldEhvc3RuYW1lc1dp
dGhDb29raWVzKEhhc2hTZXQ8U3RyCiAgICAgfQogfQogCi12b2lkIGRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNv
b2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogewogICAgIENTdHJpbmcg
aG9zdE5hbWVTdHJpbmcgPSBob3N0bmFtZS51dGY4KCk7CiAgICAgU291cENvb2tpZUphciogY29v
a2llSmFyID0gc291cENvb2tpZUphcigpOwpAQCAtMjE2LDcgKzIwOCw3IEBAIHZvaWQgZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmkKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQWxs
Q29va2llcygpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgU291
cENvb2tpZUphciogY29va2llSmFyID0gc291cENvb2tpZUphcigpOwogICAgIEdPd25QdHI8R1NM
aXN0PiBjb29raWVzKHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2ll
SmFyV2luLmNwcAkocmV2aXNpb24gMTMzODA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NiBAQAogCiAjaW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlIDx3aW5k
b3dzLmg+CiAjaW5jbHVkZSA8V2luaW5ldC5oPgpAQCAtMzYsMTUgKzM1LDE2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiAvKmRvY3VtZW50Ki8s
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKwordm9pZCBDb29raWVKYXI6
OnNldENvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JD
b29raWVzKi8sIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgLy8gRklYTUU6IERlYWwgd2l0
aCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKS4KKyAgICAvLyBGSVhNRTogRGVhbCB3
aXRoIGZpcnN0UGFydHlGb3JDb29raWVzLgogICAgIFN0cmluZyBzdHIgPSB1cmwuc3RyaW5nKCk7
CiAgICAgU3RyaW5nIHZhbCA9IHZhbHVlOwogICAgIEludGVybmV0U2V0Q29va2llKHN0ci5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCB2YWwuY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKSk7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3Vt
ZW50Ki8sIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7CiAgICAg
U3RyaW5nIHN0ciA9IHVybC5zdHJpbmcoKTsKIApAQCAtNjMsNDAgKzYzLDQwIEBAIFN0cmluZyBj
b29raWVzKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW4KICAgICByZXR1cm4gU3RyaW5nOjphZG9w
dChidWZmZXIpOwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgQ29va2llSmFy
Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewogICAgIC8vIEZJWE1FOiBpbmNsdWRlIEh0dHBP
bmx5IGNvb2tpZQotICAgIHJldHVybiBjb29raWVzKGRvY3VtZW50LCB1cmwpOworICAgIHJldHVy
biBjb29raWVzKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOwogfQogCi1ib29sIGNvb2tpZXNF
bmFibGVkKGNvbnN0IERvY3VtZW50KiAvKmRvY3VtZW50Ki8pCitib29sIENvb2tpZUphcjo6Y29v
a2llc0VuYWJsZWQoY29uc3QgS1VSTCYgLyp1cmwqLywgY29uc3QgS1VSTCYgLypmaXJzdFBhcnR5
Rm9yQ29va2llcyovKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIGdldFJhd0Nvb2tp
ZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tp
ZXMpCitib29sIENvb2tpZUphcjo6Z2V0UmF3Q29va2llcyhjb25zdCBLVVJMJiAvKnVybCovLCBj
b25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8sIFZlY3RvcjxDb29raWU+JiByYXdD
b29raWVzKQogewogICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiAgICAgcmF3Q29v
a2llcy5jbGVhcigpOwogICAgIHJldHVybiBmYWxzZTsgLy8gcmV0dXJuIHRydWUgd2hlbiBpbXBs
ZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtV
UkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBDb29raWVKYXI6OmRlbGV0ZUNvb2tpZShjb25zdCBL
VVJMJiAvKnVybCovLCBjb25zdCBTdHJpbmcmIC8qY29va2llTmFtZSovKQogewogICAgIC8vIEZJ
WE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoSGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCit2b2lkIENvb2tpZUphcjo6Z2V0SG9zdG5h
bWVzV2l0aENvb2tpZXMoSGFzaFNldDxTdHJpbmc+JiAvKmhvc3RuYW1lcyovKQogewogICAgIC8v
IEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgLypob3N0bmFtZSovKQogewogICAgIC8vIEZJ
WE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llcygpCit2
b2lkIENvb2tpZUphcjo6ZGVsZXRlQWxsQ29va2llcygpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5
ZXQgaW1wbGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Nvb2tp
ZUphclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db29r
aWVKYXJRdC5jcHAJKHJldmlzaW9uIDEzMzgwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L0Nvb2tpZUphclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsNiBAQAogCiAj
aW5jbHVkZSAiQ29va2llLmgiCiAjaW5jbHVkZSAiQ29va2llSmFyLmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAj
aW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk5ldHdvcmtpbmdDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiVGhpcmRQYXJ0eUNvb2tpZXNRdC5oIgpAQCAtNDksMzEgKzQ2LDE3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIFNoYXJlZENvb2tpZUphclF0KiBzX3NoYXJlZENvb2tpZUphclF0
ID0gMDsKIAotc3RhdGljIE5ldHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5nQ29udGV4dChjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQpCit2b2lkIENvb2tpZUphcjo6c2V0Q29va2llcyhjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQogewotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybiAwOwotICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7Ci0g
ICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBsb2FkZXItPm5l
dHdvcmtpbmdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBOZXR3b3Jr
aW5nQ29udGV4dCogY29udGV4dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBp
ZiAoIWNvbnRleHQpCisgICAgaWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICByZXR1
cm47Ci0gICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NN
YW5hZ2VyKCktPmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBtX25l
dHdvcmtpbmdDb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKICAg
ICBpZiAoIWphcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgUVVybCB1cmxGb3JDb29raWVzKHVy
bCk7Ci0gICAgUVVybCBmaXJzdFBhcnR5VXJsKGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2ll
cygpKTsKLSAgICBpZiAoIXRoaXJkUGFydHlDb29raWVQb2xpY3lQZXJtaXRzKGNvbnRleHQsIHVy
bEZvckNvb2tpZXMsIGZpcnN0UGFydHlVcmwpKQorICAgIFFVcmwgZmlyc3RQYXJ0eVVybChmaXJz
dFBhcnR5Rm9yQ29va2llcyk7CisgICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVybWl0
cyhtX25ldHdvcmtpbmdDb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgUUxpc3Q8UU5ldHdvcmtDb29raWU+IGNvb2tpZXMgPSBRTmV0
d29ya0Nvb2tpZTo6cGFyc2VDb29raWVzKFFTdHJpbmcodmFsdWUpLnRvTGF0aW4xKCkpOwpAQCAt
ODgsMTYgKzcxLDE1IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnMK
ICAgICBqYXItPnNldENvb2tpZXNGcm9tVXJsKGNvb2tpZXMsIHVybEZvckNvb2tpZXMpOwogfQog
Ci1TdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCkKK1N0cmluZyBDb29raWVKYXI6OmNvb2tpZXMoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJM
JiBmaXJzdFBhcnR5Rm9yQ29va2llcykKIHsKLSAgICBOZXR3b3JraW5nQ29udGV4dCogY29udGV4
dCA9IG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KTsKLSAgICBpZiAoIWNvbnRleHQpCisgICAg
aWYgKCFtX25ldHdvcmtpbmdDb250ZXh0KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAg
UU5ldHdvcmtDb29raWVKYXIqIGphciA9IGNvbnRleHQtPm5ldHdvcmtBY2Nlc3NNYW5hZ2VyKCkt
PmNvb2tpZUphcigpOworICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBtX25ldHdvcmtpbmdD
b250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29raWVKYXIoKTsKIAogICAgIFFVcmwg
dXJsRm9yQ29va2llcyh1cmwpOwotICAgIFFVcmwgZmlyc3RQYXJ0eVVybChkb2N1bWVudC0+Zmly
c3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5Q29va2llUG9saWN5UGVy
bWl0cyhjb250ZXh0LCB1cmxGb3JDb29raWVzLCBmaXJzdFBhcnR5VXJsKSkKKyAgICBRVXJsIGZp
cnN0UGFydHlVcmwoZmlyc3RQYXJ0eUZvckNvb2tpZXMpOworICAgIGlmICghdGhpcmRQYXJ0eUNv
b2tpZVBvbGljeVBlcm1pdHMobV9uZXR3b3JraW5nQ29udGV4dCwgdXJsRm9yQ29va2llcywgZmly
c3RQYXJ0eVVybCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIFFMaXN0PFFOZXR3
b3JrQ29va2llPiBjb29raWVzID0gamFyLT5jb29raWVzRm9yVXJsKHVybEZvckNvb2tpZXMpOwpA
QCAtMTE0LDEyICs5NiwxMSBAQCBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQsCiAgICAgcmV0dXJuIHJlc3VsdENvb2tpZXMuam9pbihRTGF0aW4xU3RyaW5nKCI7ICIpKTsK
IH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCAmdXJsKQorU3RyaW5nIENvb2tpZUphcjo6Y29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiAvKmZpcnN0
UGFydHlGb3JDb29raWVzKi8pCiB7Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBu
ZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQorICAgIGlmICgh
bV9uZXR3b3JraW5nQ29udGV4dCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFFOZXR3
b3JrQ29va2llSmFyKiBqYXIgPSBjb250ZXh0LT5uZXR3b3JrQWNjZXNzTWFuYWdlcigpLT5jb29r
aWVKYXIoKTsKKyAgICBRTmV0d29ya0Nvb2tpZUphciogamFyID0gbV9uZXR3b3JraW5nQ29udGV4
dC0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CiAKICAgICBRTGlzdDxRTmV0
d29ya0Nvb2tpZT4gY29va2llcyA9IGphci0+Y29va2llc0ZvclVybChRVXJsKHVybCkpOwogICAg
IGlmIChjb29raWVzLmlzRW1wdHkoKSkKQEAgLTEzMiw0MSArMTEzLDQwIEBAIFN0cmluZyBjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb24KICAgICByZXR1cm4gcmVzdWx0Q29va2llcy5q
b2luKFFMYXRpbjFTdHJpbmcoIjsgIikpOwogfQogCi1ib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgQ29va2llSmFyOjpjb29raWVzRW5hYmxlZChjb25z
dCBLVVJMJiAvKnVybCovLCBjb25zdCBLVVJMJiAvKmZpcnN0UGFydHlGb3JDb29raWVzKi8pCiB7
Ci0gICAgTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQgPSBuZXR3b3JraW5nQ29udGV4dChkb2N1
bWVudCk7Ci0gICAgaWYgKCFjb250ZXh0KQorICAgIGlmICghbV9uZXR3b3JraW5nQ29udGV4dCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb250ZXh0LT5uZXR3b3JrQWNjZXNz
TWFuYWdlcigpLT5jb29raWVKYXIoKTsKKyAgICByZXR1cm4gbV9uZXR3b3JraW5nQ29udGV4dC0+
bmV0d29ya0FjY2Vzc01hbmFnZXIoKS0+Y29va2llSmFyKCk7CiB9CiAKLWJvb2wgZ2V0UmF3Q29v
a2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYgcmF3Q29v
a2llcykKK2Jvb2wgQ29va2llSmFyOjpnZXRSYXdDb29raWVzKGNvbnN0IEtVUkwmIC8qdXJsKi8s
IGNvbnN0IEtVUkwmIC8qZmlyc3RQYXJ0eUZvckNvb2tpZXMqLywgVmVjdG9yPENvb2tpZT4mIHJh
d0Nvb2tpZXMpCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICByYXdD
b29raWVzLmNsZWFyKCk7CiAgICAgcmV0dXJuIGZhbHNlOyAvLyByZXR1cm4gdHJ1ZSB3aGVuIGlt
cGxlbWVudGVkCiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3Qg
S1VSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIENvb2tpZUphcjo6ZGVsZXRlQ29va2llKGNvbnN0
IEtVUkwmIC8qdXJsKi8sIGNvbnN0IFN0cmluZyYgLypjb29raWVOYW1lKi8pCiB7CiAgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgQ29va2llSmFyOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKIHsKICAgICBTaGFy
ZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlm
IChqYXIpCiAgICAgICAgIGphci0+Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoaG9zdG5hbWVzKTsK
IH0KIAotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFt
ZSkKK3ZvaWQgQ29va2llSmFyOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5n
JiBob3N0bmFtZSkKIHsKICAgICBTaGFyZWRDb29raWVKYXJRdCogamFyID0gU2hhcmVkQ29va2ll
SmFyUXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCiAgICAgICAgIGphci0+ZGVsZXRlQ29va2ll
c0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3Zv
aWQgQ29va2llSmFyOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBTaGFyZWRDb29raWVKYXJR
dCogamFyID0gU2hhcmVkQ29va2llSmFyUXQ6OnNoYXJlZCgpOwogICAgIGlmIChqYXIpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL1BsdWdpblZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDEzMzgwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzOTIsNyArMTM5Miw3IEBAIE5QRXJyb3IgUGx1Z2luVmlldzo6Z2V0VmFsdWVGb3JVUkwoTlBO
VVIKICAgICAgICAgaWYgKHUuaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBGcmFtZSogZnJhbWUg
PSBnZXRGcmFtZShwYXJlbnRGcmFtZSgpLCBtX2VsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGZy
YW1lKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ1N0cmluZyBjb29raWVTdHIgPSBjb29raWVz
KGZyYW1lLT5kb2N1bWVudCgpLCB1KS51dGY4KCk7CisgICAgICAgICAgICAgICAgY29uc3QgQ1N0
cmluZyBjb29raWVTdHIgPSBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5j
b29raWVzKHUsIGZyYW1lLT5kb2N1bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygpKS51dGY4
KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFjb29raWVTdHIuaXNOdWxsKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgaW50IHNpemUgPSBjb29raWVTdHIubGVuZ3RoKCk7CiAgICAgICAg
ICAgICAgICAgICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihOUE5fTWVtQWxsb2Moc2l6
ZSsxKSk7CkBAIC0xNDU0LDcgKzE0NTQsNyBAQCBOUEVycm9yIFBsdWdpblZpZXc6OnNldFZhbHVl
Rm9yVVJMKE5QTlVSCiAgICAgICAgICAgICBjb25zdCBTdHJpbmcgY29va2llU3RyID0gU3RyaW5n
Ojpmcm9tVVRGOCh2YWx1ZSwgbGVuKTsKICAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGdldEZy
YW1lKHBhcmVudEZyYW1lKCksIG1fZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoZnJhbWUgJiYg
IWNvb2tpZVN0ci5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgc2V0Q29va2llcyhmcmFtZS0+
ZG9jdW1lbnQoKSwgdSwgY29va2llU3RyKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVy
KCktPmNsaWVudCgpLT5jb29raWVKYXIoKS5zZXRDb29raWVzKHUsIGZyYW1lLT5kb2N1bWVudCgp
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVTdHIpOwogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIHJlc3VsdCA9IE5QRVJSX0lOVkFMSURfVVJMOwogICAgICAgICBicmVhazsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzg5MSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEyLTExLTA4ICBNYXJrIFBpbGdy
aW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92ZSBj
b29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlv
biBvZiB0aGUgY2hhbmdlIHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBw
ZXItZnVuY3Rpb24gZGVzY3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNvb2tpZU1hbmFnZXI6OmdldEhvc3RuYW1lc1dpdGhDb29raWVzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQ29va2llTWFuYWdlcjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVn
aW5WaWV3Ojpjb29raWVzRm9yVVJMKToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luVmlldzo6c2V0
Q29va2llc0ZvclVSTCk6CisKIDIwMTItMTEtMDggIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1
c21hbm5AZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF0gRml4IGJ1aWxkIHdpdGhvdXQgV2ViS2l0
MQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTMzODA5KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1Nyw3IEBAIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6Z2V0SG9zdG5hbWVzV2l0aEMK
IAogICAgIEhhc2hTZXQ8U3RyaW5nPiBob3N0bmFtZXM7CiAKLSAgICBXZWJDb3JlOjpnZXRIb3N0
bmFtZXNXaXRoQ29va2llcyhob3N0bmFtZXMpOworICAgIFdlYkNvcmU6OkNvb2tpZUphcigpLmdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKGhvc3RuYW1lcyk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBo
b3N0bmFtZUxpc3Q7CiAgICAgY29weVRvVmVjdG9yKGhvc3RuYW1lcywgaG9zdG5hbWVMaXN0KTsK
QEAgLTY5LDE0ICs2OSwxNCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXI6OmRlbGV0ZUNvb2tpZXNG
b3JICiB7CiAgICAgV2ViUHJvY2Vzczo6TG9jYWxUZXJtaW5hdGlvbkRpc2FibGVyIHRlcm1pbmF0
aW9uRGlzYWJsZXIoV2ViUHJvY2Vzczo6c2hhcmVkKCkpOwogCi0gICAgV2ViQ29yZTo6ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKKyAgICBXZWJDb3JlOjpDb29raWVKYXIoKS5k
ZWxldGVDb29raWVzRm9ySG9zdG5hbWUoaG9zdG5hbWUpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1h
bmFnZXI6OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIFdlYlByb2Nlc3M6OkxvY2FsVGVybWlu
YXRpb25EaXNhYmxlciB0ZXJtaW5hdGlvbkRpc2FibGVyKFdlYlByb2Nlc3M6OnNoYXJlZCgpKTsK
IAotICAgIFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMoKTsKKyAgICBXZWJDb3JlOjpDb29raWVK
YXIoKS5kZWxldGVBbGxDb29raWVzKCk7CiB9CiAKIHZvaWQgV2ViQ29va2llTWFuYWdlcjo6c3Rh
cnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAJKHJldmlzaW9uIDEzMzgwOSkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMwOSwxMiArMTMwOSwxOSBAQCBTdHJpbmcgUGx1Z2luVmlldzo6cHJveGllc0Zv
clVSTChjb25zdCBTCiAKIFN0cmluZyBQbHVnaW5WaWV3Ojpjb29raWVzRm9yVVJMKGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKQogewotICAgIHJldHVybiBjb29raWVzKG1fcGx1Z2luRWxlbWVudC0+
ZG9jdW1lbnQoKSwgS1VSTChLVVJMKCksIHVybFN0cmluZykpOworICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPmNvb2tpZUphcigpLmNv
b2tpZXMoS1VSTChLVVJMKCksIHVybFN0cmluZyksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKTsKIH0KIAogdm9pZCBQbHVnaW5WaWV3OjpzZXRDb29raWVzRm9yVVJMKGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmluZykKIHsKLSAgICBzZXRD
b29raWVzKG1fcGx1Z2luRWxlbWVudC0+ZG9jdW1lbnQoKSwgS1VSTChLVVJMKCksIHVybFN0cmlu
ZyksIGNvb2tpZVN0cmluZyk7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9wbHVnaW5FbGVt
ZW50LT5kb2N1bWVudCgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwor
ICAgIGlmIChmcmFtZSkKKyAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2ll
SmFyKCkuc2V0Q29va2llcyhLVVJMKEtVUkwoKSwgdXJsU3RyaW5nKSwgZG9jdW1lbnQtPmZpcnN0
UGFydHlGb3JDb29raWVzKCksIGNvb2tpZVN0cmluZyk7CiB9CiAKIGJvb2wgUGx1Z2luVmlldzo6
Z2V0QXV0aGVudGljYXRpb25JbmZvKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNw
YWNlLCBTdHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3JkKQpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzg5MSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMTEtMDgg
IE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1
bV0gUmVtb3ZlIGNvb2tpZS1yZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFs
IGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQ
bGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAg
ICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpG
cmFtZUxvYWRlckNsaWVudEltcGw6OmNvb2tpZUphcik6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAqIHNyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaDoKKyAgICAgICAgKEZyYW1lTG9hZGVy
Q2xpZW50SW1wbCk6CisgICAgICAgICogc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKwogMjAxMi0xMS0wOCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIGZyb250LWVuZCBtZXRob2Rz
IGNhbGxlZCBmcm9tIG5hdGl2ZSBwYXJ0IHRvIEluc3BlY3RvckZyb250ZW5kQVBJCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1w
bC5jcHAJKHJldmlzaW9uIDEzMzgwOSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Zy
YW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NjIsNCArMTY2Miwx
NCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6ZGlkUmVxdWVzdEF1CiB9CiAjZW5kaWYK
IAorV2ViQ29yZTo6Q29va2llSmFyIEZyYW1lTG9hZGVyQ2xpZW50SW1wbDo6Y29va2llSmFyKCkK
K3sKKyAgICBpZiAoIW1fd2ViRnJhbWUgfHwgIW1fd2ViRnJhbWUtPmNsaWVudCgpKQorICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKDApOworICAgIFdlYkNvb2tpZUphciogd2ViQ29v
a2llSmFyID0gbV93ZWJGcmFtZS0+Y2xpZW50KCktPmNvb2tpZUphcihtX3dlYkZyYW1lKTsKKyAg
ICBpZiAoIXdlYkNvb2tpZUphcikKKyAgICAgICAgd2ViQ29va2llSmFyID0gV2ViS2l0OjpQbGF0
Zm9ybTo6Y3VycmVudCgpLT5jb29raWVKYXIoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Q29va2ll
SmFyKHdlYkNvb2tpZUphcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgJ
KHJldmlzaW9uIDEzMzgwOSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTG9h
ZGVyQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksNiArMjI5LDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBkaWRSZXF1ZXN0QXV0b2NvbXBsZXRlKFBhc3NSZWZQdHI8V2Vi
Q29yZTo6Rm9ybVN0YXRlPikgT1ZFUlJJREU7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgV2ViQ29y
ZTo6Q29va2llSmFyIGNvb2tpZUphcigpIE9WRVJSSURFOworCiBwcml2YXRlOgogICAgIHZvaWQg
bWFrZURvY3VtZW50VmlldygpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Q
bGF0Zm9ybVN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAJKHJldmlzaW9uIDEzMzgwOSkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MCw4NiArMTAwLDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zdGF0aWMgV2ViQ29va2llSmFyKiBnZXRDb29raWVKYXIoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50KQotewotICAgIFdlYkZyYW1lSW1wbCogZnJhbWVJbXBsID0gV2ViRnJhbWVJbXBs
Ojpmcm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIGlmICghZnJhbWVJbXBsIHx8ICFm
cmFtZUltcGwtPmNsaWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBXZWJDb29raWVKYXIq
IGNvb2tpZUphciA9IGZyYW1lSW1wbC0+Y2xpZW50KCktPmNvb2tpZUphcihmcmFtZUltcGwpOwot
ICAgIGlmICghY29va2llSmFyKQotICAgICAgICBjb29raWVKYXIgPSBXZWJLaXQ6OlBsYXRmb3Jt
OjpjdXJyZW50KCktPmNvb2tpZUphcigpOwotICAgIHJldHVybiBjb29raWVKYXI7Ci19Ci0KLS8v
IENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgV2ViQ29va2ll
SmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVK
YXIpCi0gICAgICAgIGNvb2tpZUphci0+c2V0Q29va2llKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFy
dHlGb3JDb29raWVzKCksIHZhbHVlKTsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y29v
a2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBT
dHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFy
KGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVK
YXItPmNvb2tpZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiB1cmwp
Ci17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdl
dENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0
ID0gY29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29s
IFBsYXRmb3JtU3VwcG9ydDo6cmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgcmF3Q29v
a2llcy5jbGVhcigpOwotICAgIFdlYlZlY3RvcjxXZWJDb29raWU+IHdlYkNvb2tpZXM7Ci0KLSAg
ICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAg
aWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5yYXdDb29raWVzKHVybCwgZG9jdW1l
bnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHdlYkNvb2tpZXMpOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3Qg
V2ViQ29va2llJiB3ZWJDb29raWUgPSB3ZWJDb29raWVzW2ldOwotICAgICAgICBDb29raWUgY29v
a2llKHdlYkNvb2tpZS5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS52YWx1
ZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuZG9tYWluLAotICAgICAgICAgICAg
ICAgICAgICAgIHdlYkNvb2tpZS5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tp
ZS5leHBpcmVzLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5odHRwT25seSwKLSAg
ICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2VjdXJlLAotICAgICAgICAgICAgICAgICAg
ICAgIHdlYkNvb2tpZS5zZXNzaW9uKTsKLSAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoY29va2ll
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1TdXBwb3J0Ojpk
ZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9
IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29v
a2llSmFyLT5kZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKTsKLX0KLQotYm9vbCBQbGF0Zm9y
bVN1cHBvcnQ6OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAg
ICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0
Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQg
PSBjb29raWVKYXItPmNvb2tpZXNFbmFibGVkKGRvY3VtZW50LT5jb29raWVVUkwoKSwgZG9jdW1l
bnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIC8v
IEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2lmIE9TKFdJTkRPV1MpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMzM4OTEpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMS0wOCAgTWFyayBQaWxncmltICA8
cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgY29va2ll
LXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2Yg
dGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1
bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnRFZmw6OmNvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChGcmFtZUxvYWRlckNsaWVudEVmbCk6CisKIDIwMTItMTEtMDcgIEVtaWwg
QSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgRUZMIGJ1
aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAJKHJldmlzaW9uIDEzMzgwOSkKKysrIFNv
dXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA1Myw0ICsxMDUzLDE0IEBAIFBhc3NSZWZQdHI8RnJhbWVOZXR3
b3JraW5nQ29udGV4dD4gRnJhbWUKICAgICByZXR1cm4gRnJhbWVOZXR3b3JraW5nQ29udGV4dEVm
bDo6Y3JlYXRlKEVXS1ByaXZhdGU6OmNvcmVGcmFtZShtX2ZyYW1lKSwgbV9mcmFtZSk7CiB9CiAK
K1dlYkNvcmU6OkNvb2tpZUphciBGcmFtZUxvYWRlckNsaWVudEVmbDo6Y29va2llSmFyKCkKK3sK
KyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIoMCk7
CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1lKG1fZnJh
bWUpOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5sb2FkZXIoKSkKKyAgICAgICAgcmV0dXJu
IFdlYkNvcmU6OkNvb2tpZUphcigwKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKGZy
YW1lLT5sb2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRFZmwuaAkocmV2aXNpb24gMTMzODA5KQorKysgU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
NyBAQAogI2lmbmRlZiBGcmFtZUxvYWRlckNsaWVudEVmbF9oCiAjZGVmaW5lIEZyYW1lTG9hZGVy
Q2xpZW50RWZsX2gKIAorI2luY2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkVXZWJLaXQu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXcu
aCIKQEAgLTQxLDYgKzQyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb29r
aWVKYXI7CiBjbGFzcyBGb3JtU3RhdGU7CiAKIGNsYXNzIEZyYW1lTG9hZGVyQ2xpZW50RWZsIDog
cHVibGljIEZyYW1lTG9hZGVyQ2xpZW50IHsKQEAgLTIxMCw2ICsyMTIsOSBAQCBjbGFzcyBGcmFt
ZUxvYWRlckNsaWVudEVmbCA6IHB1YmxpYyBGcmFtCiAgICAgdmlydHVhbCB2b2lkIGRvd25sb2Fk
KFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lTmV0d29y
a2luZ0NvbnRleHQ+IGNyZWF0ZU5ldHdvcmtpbmdDb250ZXh0KCk7CisKKyAgICB2aXJ0dWFsIFdl
YkNvcmU6OkNvb2tpZUphciBjb29raWVKYXIoKSBPVkVSUklERTsKKwogIHByaXZhdGU6CiAgICAg
Ym9vbCBpc0xvYWRpbmdNYWluRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lID09IGV3a192
aWV3X2ZyYW1lX21haW5fZ2V0KG1fdmlldyk7IH0KIApJbmRleDogU291cmNlL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2
aXNpb24gMTMzODkxKQorKysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMTEtMDggIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIGNvb2tpZS1yZWxhdGVk
IGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFu
Z2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBk
ZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGll
bnQ6OmNvb2tpZUphcik6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmg6CisgICAgICAgIChGcmFtZUxvYWRlckNsaWVudCk6
CisKIDIwMTItMTEtMDUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgRml4IGxheWVyIGJvcmRlcnMgdG8gY2xlYW5pbmcgYXBwZWFyIGFuZCBkaXNhcHBl
YXIgb24gc3dpdGNoaW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAxMzM4MDkp
CisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNjEsNCArMTI2MSwxNCBAQCBQYXNzUmVmUHRyPEZy
YW1lTmV0d29ya2luZ0NvbnRleHQ+IEZyYW1lCiAgICAgcmV0dXJuIEZyYW1lTmV0d29ya2luZ0Nv
bnRleHRHdGs6OmNyZWF0ZShjb3JlKG1fZnJhbWUpKTsKIH0KIAorV2ViQ29yZTo6Q29va2llSmFy
IEZyYW1lTG9hZGVyQ2xpZW50Ojpjb29raWVKYXIoKQoreworICAgIGlmICghbV9mcmFtZSkKKyAg
ICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tpZUphcigwKTsKKyAgICBXZWJDb3JlOjpGcmFtZSog
ZnJhbWUgPSBjb3JlKG1fZnJhbWUpOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5sb2FkZXIo
KSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNvb2tpZUphcigwKTsKKyAgICByZXR1cm4gV2Vi
Q29yZTo6Q29va2llSmFyKGZyYW1lLT5sb2FkZXIoKS0+bmV0d29ya2luZ0NvbnRleHQoKSk7Cit9
CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkocmV2aXNpb24gMTMzODA5KQorKysgU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmbmRlZiBGcmFtZUxvYWRlckNsaWVudEd0a19oCiAj
ZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50R3RrX2gKIAorI2luY2x1ZGUgIkNvb2tpZUphci5oIgog
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25z
ZS5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIKQEAgLTE4OCw2ICsxODksOCBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWVO
ZXR3b3JraW5nQ29udGV4dD4gY3JlYXRlTmV0d29ya2luZ0NvbnRleHQoKTsKIAorICAgICAgICB2
aXJ0dWFsIFdlYkNvcmU6OkNvb2tpZUphciBjb29raWVKYXIoKSBPVkVSUklERTsKKwogICAgIHBy
aXZhdGU6CiAgICAgICAgIFdlYktpdFdlYkZyYW1lKiBtX2ZyYW1lOwogICAgICAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMzM4OTEpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0xMS0wOCAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgY29va2llLXJlbGF0ZWQg
ZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5n
ZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRl
c2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvTmV0
c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2FwZVBs
dWdpbkluc3RhbmNlUHJveHk6OmdldENvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXRzY2Fw
ZVBsdWdpbkluc3RhbmNlUHJveHk6OnNldENvb2tpZXMpOgorICAgICAgICAqIFBsdWdpbnMvV2Vi
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAoLVtXZWJOZXRzY2FwZVBsdWdpblZpZXcg
Z2V0VmFyaWFibGU6Zm9yVVJMOnZhbHVlOmxlbmd0aDpdKToKKyAgICAgICAgKC1bV2ViTmV0c2Nh
cGVQbHVnaW5WaWV3IHNldFZhcmlhYmxlOmZvclVSTDp2YWx1ZTpsZW5ndGg6XSk6CisKIDIwMTIt
MTEtMDcgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBidWlsZC13ZWJraXQgZGVwZW5kZW5jeSBvbiBKYXZhIFNESyBmb3IgQXBwbGUgTWFjIFdlYktp
dC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5WaWV3
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQ
bHVnaW5WaWV3Lm1tCShyZXZpc2lvbiAxMzM4MDkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL1dlYk5ldHNjYXBlUGx1Z2luVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEs
NyBAQAogI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
Lmg+IAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPiAKKyNpbXBvcnQgPFdlYkNvcmUv
RnJhbWVMb2FkZXJDbGllbnQuaD4gCiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTFBsdWdJbkVs
ZW1lbnQuaD4KQEAgLTIyMTYsNyArMjIxNyw3IEBAIC0gKE5QRXJyb3IpZ2V0VmFyaWFibGU6KE5Q
TlVSTFZhcmlhYmxlKXYKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgd2ViRnJhbWVdKSkgewotICAg
ICAgICAgICAgICAgIFN0cmluZyBjb29raWVTdHJpbmcgPSBjb29raWVzKGZyYW1lLT5kb2N1bWVu
dCgpLCBVUkwpOyAKKyAgICAgICAgICAgICAgICBTdHJpbmcgY29va2llU3RyaW5nID0gZnJhbWUt
PmxvYWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llcyhVUkwsIGZyYW1lLT5kb2N1
bWVudCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsgCiAgICAgICAgICAgICAgICAgQ1N0cmlu
ZyBjb29raWVTdHJpbmdVVEY4ID0gY29va2llU3RyaW5nLnV0ZjgoKTsKICAgICAgICAgICAgICAg
ICBpZiAoY29va2llU3RyaW5nVVRGOC5pc051bGwoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE5QRVJSX0dFTkVSSUNfRVJST1I7CkBAIC0yMjcwLDcgKzIyNzEsNyBAQCAtIChOUEVycm9y
KXNldFZhcmlhYmxlOihOUE5VUkxWYXJpYWJsZSl2CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIHdl
YkZyYW1lXSkpIHsKLSAgICAgICAgICAgICAgICBzZXRDb29raWVzKGZyYW1lLT5kb2N1bWVudCgp
LCBVUkwsIGNvb2tpZVN0cmluZyk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5j
bGllbnQoKS0+Y29va2llSmFyKCkuc2V0Q29va2llcyhVUkwsIGZyYW1lLT5kb2N1bWVudCgpLT5m
aXJzdFBhcnR5Rm9yQ29va2llcygpLCBjb29raWVTdHJpbmcpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBOUEVSUl9OT19FUlJPUjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDog
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVBy
b3h5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eS5tbQkocmV2aXNpb24gMTMzODA5KQorKysgU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0RvY3Vt
ZW50TG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0ZyYW1lTG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyQ2xpZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9LVVJMLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1Byb3h5U2VydmVyLmg+CkBAIC0xNTE1LDcgKzE1MTYsNyBAQCBib29s
IE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6Z2V0Q29vCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbbV9wbHVnaW5WaWV3IHdlYkZy
YW1lXSkpIHsKLSAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9IGNvb2tpZXMoZnJhbWUtPmRv
Y3VtZW50KCksIHVybCk7IAorICAgICAgICBTdHJpbmcgY29va2llU3RyaW5nID0gZnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKS0+Y29va2llSmFyKCkuY29va2llcyh1cmwsIGZyYW1lLT5kb2N1bWVu
dCgpLT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsgCiAgICAgICAgIFdURjo6Q1N0cmluZyBjb29r
aWVTdHJpbmdVVEY4ID0gY29va2llU3RyaW5nLnV0ZjgoKTsKICAgICAgICAgaWYgKGNvb2tpZVN0
cmluZ1VURjguaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTQzLDcg
KzE1NDQsNyBAQCBib29sIE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eTo6c2V0Q29vCiAgICAg
ICAgIGlmICghY29va2llU3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAKLSAgICAgICAgV2ViQ29yZTo6c2V0Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgdXJsLCBj
b29raWVTdHJpbmcpOworICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5jb29raWVK
YXIoKS5zZXRDb29raWVzKHVybCwgZnJhbWUtPmRvY3VtZW50KCktPmZpcnN0UGFydHlGb3JDb29r
aWVzKCksIGNvb2tpZVN0cmluZyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMzg5MSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMTEtMDggIE1hcmsg
UGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVt
b3ZlIGNvb2tpZS1yZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9y
bWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2Ug
YWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6Y29va2llSmFyKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnRRdCk6CisKIDIwMTItMTEtMDcg
IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBkaWdpYS5jb20+CiAKICAgICAg
ICAgW1F0XSBPcGVuIGxpbmsgaW4gdGhpcyB3aW5kb3cgYWN0aW9uCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5j
cHAJKHJldmlzaW9uIDEzMzgwOSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzYsNiArMTY3Niwx
MyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmVtaXRMb2FkRmluaXNoCiAgICAgZW1pdCBt
X3dlYkZyYW1lLT5sb2FkRmluaXNoZWQob2spOwogfQogCitXZWJDb3JlOjpDb29raWVKYXIgRnJh
bWVMb2FkZXJDbGllbnRRdDo6Y29va2llSmFyKCkKK3sKKyAgICBpZiAoIW1fZnJhbWUgfHwgIW1f
ZnJhbWUtPmxvYWRlcigpKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q29va2llSmFyKDApOwor
ICAgIHJldHVybiBXZWJDb3JlOjpDb29raWVKYXIobV9mcmFtZS0+bG9hZGVyKCktPm5ldHdvcmtp
bmdDb250ZXh0KCkpOworfQorCiB9CiAKICNpbmNsdWRlICJtb2NfRnJhbWVMb2FkZXJDbGllbnRR
dC5jcHAiCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50UXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50UXQuaAkocmV2aXNpb24gMTMzODA5KQorKysgU291cmNlL1dlYktp
dC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgRnJhbWVMb2FkZXJDbGllbnRRdF9oCiAKIAorI2lu
Y2x1ZGUgIkNvb2tpZUphci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNTMsNiArNTQsNyBA
QCBjbGFzcyBRV2ViRnJhbWU7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlOworY2xhc3MgQ29va2llSmFyOwogY2xhc3MgRG9jdW1lbnRMb2FkZXI7
CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRm9ybVN0YXRlOwpAQCAtMjI3LDYgKzIyOSw4IEBAIHB1
YmxpYzoKIAogICAgIGNvbnN0IEtVUkwmIGxhc3RSZXF1ZXN0ZWRVcmwoKSBjb25zdCB7IHJldHVy
biBtX2xhc3RSZXF1ZXN0ZWRVcmw7IH0KIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6Q29va2llSmFy
IGNvb2tpZUphcigpIE9WRVJSSURFOworCiAgICAgc3RhdGljIGJvb2wgZHVtcEZyYW1lTG9hZGVy
Q2FsbGJhY2tzOwogICAgIHN0YXRpYyBib29sIGR1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2s7
CiAgICAgc3RhdGljIGJvb2wgZHVtcFVzZXJHZXN0dXJlSW5GcmFtZUxvYWRlckNhbGxiYWNrczsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174188</attachid>
            <date>2012-11-14 10:13:17 -0800</date>
            <delta_ts>2012-11-14 11:11:36 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-99340-20121114131058.patch</filename>
            <type>text/plain</type>
            <size>15583</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDYyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEyLTExLTE0ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW1vdmUgY29va2llLXJl
bGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhl
IGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0
aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAo
T09QUyEpLgorCisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Om5ldHdvcmtpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Q29va2llSmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llcyk6CisgICAgICAgIChXZWJD
b3JlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b29raWVzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRSYXdDb29raWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
UGxhdGZvcm1TdXBwb3J0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBsYXRmb3Jt
U3VwcG9ydCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9OZXR3b3JraW5nQ29udGV4dC5o
OgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKE5ldHdvcmtpbmdDb250ZXh0KToKKwogMjAx
Mi0xMS0xNCAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbUXRdIFVzZSBhIG5vZGUgaW1hZ2UgaWYgdGhlcmUgaXMgbm8gZHJhZyBpbWFnZSBzZXQg
Zm9yIERyYWcmRHJvcApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0Nvb2tp
ZUphckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hy
b21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMzQ1OTgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw0MCArMzMsMTAwIEBACiAKICNpbmNsdWRlICJDb29raWUuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JraW5nQ29u
dGV4dC5oIgorI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHB1YmxpYy9X
ZWJDb29raWUuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29va2llSmFyLmg+CisjaW5jbHVkZSA8
cHVibGljL1dlYlZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBV
bmZvcmsuIFRoaXMgZmlsZSBpcyBmb3JrZWQgYmVjYXVzZSBhbGwgb3RoZXIgcGxhdGZvcm1zIHVz
ZSBOZXR3b3JraW5nQ29udGV4dCB0byBhY2Nlc3MgY29va2llIGphciwgbm90IERvY3VtZW50IG9y
IEZyYW1lLgorc3RhdGljIE5ldHdvcmtpbmdDb250ZXh0KiBuZXR3b3JraW5nQ29udGV4dChjb25z
dCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFm
cmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1l
LT5sb2FkZXIoKTsKKyAgICBpZiAoIWxvYWRlcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIGxvYWRlci0+bmV0d29ya2luZ0NvbnRleHQoKTsKK30KKworc3RhdGljIFdlYktpdDo6V2Vi
Q29va2llSmFyKiBnZXRDb29raWVKYXIoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAg
IE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0ID0gbmV0d29ya2luZ0NvbnRleHQoZG9jdW1lbnQp
OworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIFdlYktpdDo6UGxhdGZvcm06OmN1
cnJlbnQoKS0+Y29va2llSmFyKCk7CisgICAgcmV0dXJuIGNvbnRleHQtPmNvb2tpZUphcigpOwor
fQogCiB2b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29raWVz
KGRvY3VtZW50LCB1cmwsIHZhbHVlKTsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZUphciogY29va2ll
SmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKKyAgICBpZiAoY29va2llSmFyKQorICAgICAg
ICBjb29raWVKYXItPnNldENvb2tpZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2ll
cygpLCB2YWx1ZSk7CiB9CiAKIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tp
ZXMoZG9jdW1lbnQsIHVybCk7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBXZWJLaXQ6OldlYkNv
b2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKKyAgICBpZiAoY29v
a2llSmFyKQorICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXModXJsLCBkb2N1bWVu
dC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogU3Ry
aW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tp
ZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgIFN0cmluZyByZXN1
bHQ7CisgICAgV2ViS2l0OjpXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihk
b2N1bWVudCk7CisgICAgaWYgKGNvb2tpZUphcikKKyAgICAgICAgcmVzdWx0ID0gY29va2llSmFy
LT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5
Rm9yQ29va2llcygpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBib29sIGNvb2tpZXNFbmFi
bGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBw
b3J0Ojpjb29raWVzRW5hYmxlZChkb2N1bWVudCk7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
KyAgICBXZWJLaXQ6OldlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3Vt
ZW50KTsKKyAgICBpZiAoY29va2llSmFyKQorICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNv
b2tpZXNFbmFibGVkKGRvY3VtZW50LT5jb29raWVVUkwoKSwgZG9jdW1lbnQtPmZpcnN0UGFydHlG
b3JDb29raWVzKCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGJvb2wgZ2V0UmF3Q29va2ll
cyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tp
ZT4mIHJhd0Nvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6cmF3Q29va2ll
cyhkb2N1bWVudCwgdXJsLCByYXdDb29raWVzKTsKKyAgICByYXdDb29raWVzLmNsZWFyKCk7Cisg
ICAgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJDb29raWU+IHdlYkNvb2tpZXM7CisKKyAg
ICBXZWJLaXQ6OldlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50
KTsKKyAgICBpZiAoY29va2llSmFyKQorICAgICAgICBjb29raWVKYXItPnJhd0Nvb2tpZXModXJs
LCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgd2ViQ29va2llcyk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBjb25zdCBXZWJLaXQ6OldlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29va2llc1tpXTsKKyAg
ICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICB3ZWJDb29raWUudmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmRvbWFp
biwKKyAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUucGF0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICB3ZWJDb29raWUuZXhwaXJlcywKKyAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29r
aWUuaHR0cE9ubHksCisgICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlY3VyZSwKKyAg
ICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2Vzc2lvbik7CisgICAgICAgIHJhd0Nvb2tp
ZXMuYXBwZW5kKGNvb2tpZSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIGRl
bGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBjb29raWVOYW1lKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmRl
bGV0ZUNvb2tpZShkb2N1bWVudCwgdXJsLCBjb29raWVOYW1lKTsKKyAgICBXZWJLaXQ6OldlYkNv
b2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKKyAgICBpZiAoY29v
a2llSmFyKQorICAgICAgICBjb29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUp
OwogfQogCiB2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9z
dG5hbWVzKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1T
dXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
UGxhdGZvcm1TdXBwb3J0LmgJKHJldmlzaW9uIDEzNDU5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3
ICs2OSw2IEBAIGNsYXNzIEtVUkw7CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiBjbGFz
cyBXaWRnZXQ7CiAKLXN0cnVjdCBDb29raWU7CiBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwogCiAv
LyBQbGF0Zm9ybVN1cHBvcnQgYW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRpbmcgbGF5ZXIgdGhh
dCBsZXRzIHRoZSBlbWJlZGRlcgpAQCAtNzgsMTQgKzc3LDYgQEAgc3RydWN0IEZvbnRSZW5kZXJT
dHlsZTsKIAogY2xhc3MgUGxhdGZvcm1TdXBwb3J0IHsKIHB1YmxpYzoKLSAgICAvLyBDb29raWVz
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgc3RhdGljIFN0cmluZyBjb29raWVzKGNv
bnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyBTdHJpbmcgY29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJik7Ci0gICAg
c3RhdGljIGJvb2wgcmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0
b3I8Q29va2llPiYpOwotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVu
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpOwotICAgIHN0YXRpYyBi
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7Ci0KICAgICAvLyBGb250IC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogI2lmIE9TKFdJTkRPV1MpCiAgICAgc3RhdGljIGJvb2wgZW5zdXJlRm9udExvYWRlZChIRk9O
VCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtpbmdDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3
b3JraW5nQ29udGV4dC5oCShyZXZpc2lvbiAxMzQ1OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL05ldHdvcmtpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDEyIEBAIE9CSkNfQ0xBU1MgTlNPcGVyYXRpb25RdWV1ZTsKICNpbmNsdWRlICJTY2hlZHVs
ZVBhaXIuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pCituYW1lc3BhY2UgV2Vi
S2l0IHsKKyAgICBjbGFzcyBXZWJDb29raWVKYXI7Cit9CisjZW5kaWYKKwogI2lmIFBMQVRGT1JN
KFFUKQogI2luY2x1ZGUgPHFnbG9iYWwuaD4KIFFUX0JFR0lOX05BTUVTUEFDRQpAQCAtNTEsNiAr
NTcsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICB2aXJ0dWFsIFdlYktp
dDo6V2ViQ29va2llSmFyKiBjb29raWVKYXIoKSBjb25zdCA9IDA7CisjZW5kaWYKKwogI2lmIFBM
QVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIGJvb2wgbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGxvY2FsRmlsZUNvbnRlbnRTbmlmZmluZ0VuYWJs
ZWQoKSBjb25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24g
MTM0NjIyKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMi0xMS0xNCAgTWFyayBQaWxncmltICA8cGlsZ3JpbUBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGNvb2tpZS1yZWxhdGVkIGZ1bmN0aW9ucyBm
cm9tIFBsYXRmb3JtU3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBhcyBh
cHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlvbnMg
YmVsb3cgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogc3JjL0Zy
YW1lTmV0d29ya2luZ0NvbnRleHRJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViS2l0OjpGcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbDo6Y29va2llSmFyKToK
KyAgICAgICAgKiBzcmMvRnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGwuaDoKKyAgICAgICAgKEZy
YW1lTmV0d29ya2luZ0NvbnRleHRJbXBsKToKKyAgICAgICAgKiBzcmMvUGxhdGZvcm1TdXBwb3J0
LmNwcDoKKwogMjAxMi0xMS0xNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFp
bC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNDUyMy4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDEzNDU5OCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtMzk0LDYgKzM5NCw3
IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9GaW5kSW5QYWdlQ29vcmRpbmF0ZXMuaCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3Jj
L0ZyYW1lTmV0d29ya2luZ0NvbnRleHRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9G
cmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL0dlb2xv
Y2F0aW9uQ2xpZW50UHJveHkuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0dlb2xvY2F0aW9u
Q2xpZW50UHJveHkuaCcsCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZU5l
dHdvcmtpbmdDb250ZXh0SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvRnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGwuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGwuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHRJbXBsLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBs
LmgiCisjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CisjaW5jbHVkZSAicHVibGljL1dlYkZy
YW1lQ2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJDb29raWVKYXIqIEZyYW1l
TmV0d29ya2luZ0NvbnRleHRJbXBsOjpjb29raWVKYXIoKSBjb25zdAoreworICAgIFdlYkZyYW1l
SW1wbCogZnJhbWVJbXBsID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUoKSk7CisgICAg
aWYgKCFmcmFtZUltcGwgfHwgIWZyYW1lSW1wbC0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybiAw
OworICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZnJhbWVJbXBsLT5jbGllbnQoKS0+Y29v
a2llSmFyKGZyYW1lSW1wbCk7CisgICAgaWYgKCFjb29raWVKYXIpCisgICAgICAgIGNvb2tpZUph
ciA9IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y29va2llSmFyKCk7CisgICAgcmV0dXJu
IGNvb2tpZUphcjsKK30KKworfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJh
bWVOZXR3b3JraW5nQ29udGV4dEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9GcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbC5oCShyZXZpc2lvbiAxMzQ1OTgp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsMTQgQEAKICNkZWZpbmUgRnJhbWVOZXR3
b3JraW5nQ29udGV4dEltcGxfaAogCiAjaW5jbHVkZSAiRnJhbWVOZXR3b3JraW5nQ29udGV4dC5o
IgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIEZyYW1lTmV0d29ya2luZ0NvbnRleHRJbXBsIDogcHVibGljIFdlYkNvcmU6OkZy
YW1lTmV0d29ya2luZ0NvbnRleHQgewogcHVibGljOgorICAgIHZpcnR1YWwgV2ViQ29va2llSmFy
KiBjb29raWVKYXIoKSBjb25zdCBPVkVSUklERTsKKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZy
YW1lTmV0d29ya2luZ0NvbnRleHRJbXBsPiBjcmVhdGUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcmFtZU5ldHdvcmtpbmdDb250ZXh0
SW1wbChmcmFtZSkpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1T
dXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0
Zm9ybVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMzQ1OTgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw4ICs3Niw2
IEBACiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAKICNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SURCRmFjdG9yeUJhY2tlbmRQcm94eS5oIgpAQCAtODksOCArODcsNiBAQAogCiAjaW5jbHVkZSAi
V29ya2VyLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dFByb3h5LmgiCi0jaW5jbHVkZSA8cHVi
bGljL1dlYkNvb2tpZS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KICNpbmNs
dWRlIDxwdWJsaWMvV2ViTWltZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0xMDAsODYgKzk2LDYgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgV2Vi
Q29va2llSmFyKiBnZXRDb29raWVKYXIoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAg
IFdlYkZyYW1lSW1wbCogZnJhbWVJbXBsID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZG9jdW1l
bnQtPmZyYW1lKCkpOwotICAgIGlmICghZnJhbWVJbXBsIHx8ICFmcmFtZUltcGwtPmNsaWVudCgp
KQotICAgICAgICByZXR1cm4gMDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGZyYW1l
SW1wbC0+Y2xpZW50KCktPmNvb2tpZUphcihmcmFtZUltcGwpOwotICAgIGlmICghY29va2llSmFy
KQotICAgICAgICBjb29raWVKYXIgPSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNvb2tp
ZUphcigpOwotICAgIHJldHVybiBjb29raWVKYXI7Ci19Ci0KLS8vIENvb2tpZXMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotdm9pZCBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBLVVJMJiB1cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBn
ZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tp
ZUphci0+c2V0Q29va2llKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHZh
bHVlKTsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llcyhjb25zdCBEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAg
IFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBp
ZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXModXJsLCBk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
Y29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgU3RyaW5nIHJl
c3VsdDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVu
dCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29v
a2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFBsYXRmb3JtU3VwcG9ydDo6
cmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVj
dG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgcmF3Q29va2llcy5jbGVhcigpOwotICAg
IFdlYlZlY3RvcjxXZWJDb29raWU+IHdlYkNvb2tpZXM7Ci0KLSAgICBXZWJDb29raWVKYXIqIGNv
b2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAg
ICAgICAgY29va2llSmFyLT5yYXdDb29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JD
b29raWVzKCksIHdlYkNvb2tpZXMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdl
YkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgV2ViQ29va2llJiB3ZWJDb29r
aWUgPSB3ZWJDb29raWVzW2ldOwotICAgICAgICBDb29raWUgY29va2llKHdlYkNvb2tpZS5uYW1l
LAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS52YWx1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICB3ZWJDb29raWUuZG9tYWluLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tp
ZS5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5leHBpcmVzLAotICAgICAg
ICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5odHRwT25seSwKLSAgICAgICAgICAgICAgICAgICAg
ICB3ZWJDb29raWUuc2VjdXJlLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5zZXNz
aW9uKTsKLSAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoY29va2llKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29raWUoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2ll
TmFtZSkKLXsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1
bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5kZWxldGVDb29r
aWUodXJsLCBjb29raWVOYW1lKTsKLX0KLQotYm9vbCBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXNF
bmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZh
bHNlOwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50
KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tp
ZXNFbmFibGVkKGRvY3VtZW50LT5jb29raWVVUkwoKSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JD
b29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIC8vIEZvbnQgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogI2lmIE9TKFdJTkRPV1MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174206</attachid>
            <date>2012-11-14 11:11:44 -0800</date>
            <delta_ts>2012-11-16 06:57:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99340-20121114140925.patch</filename>
            <type>text/plain</type>
            <size>28061</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDYzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDEyLTExLTE0ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW1vdmUgY29va2llLXJl
bGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM0MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgY29va2llIGZ1bmN0aW9ucyBvdXQgb2Yg
UGxhdGZvcm1TdXBwb3J0IGFuZCBpbnRvIG5ldworICAgICAgICBQbGF0Zm9ybUNvb2tpZUphciBp
bnRlcmZhY2UgaW50cm9kdWNlZCBpbiBidWcgMTAxNjIxLgorCisgICAgICAgICogV2ViQ29yZS5n
eXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGxvYWRl
ci9Db29raWVKYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgICogbG9hZGVyL2Nocm9taXVtL0Nvb2tp
ZUphckNocm9taXVtLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9Q
bGF0Zm9ybVN1cHBvcnQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUGxhdGZvcm1T
dXBwb3J0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtpbmdDb250ZXh0Lmg6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoTmV0d29ya2luZ0NvbnRleHQpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvUGxhdGZvcm1Db29raWVKYXIuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21p
dW0uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2ll
SmFyQ2hyb21pdW0uY3BwLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llc0Zyb21ET00pOgor
ICAgICAgICAoV2ViQ29yZTo6Y29va2llc0ZvckRPTSk6CisgICAgICAgIChXZWJDb3JlOjpjb29r
aWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRSYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6ZGVsZXRlQWxsQ29va2llcyk6CisKIDIwMTItMTEtMTQgIEhpZGVraSBZ
b3NoaWRhICA8eW9zaGlkYS1oeGFAbmVjc3QubmVjLmNvLmpwPgogCiAgICAgICAgIFtXaW5DYWly
b10gRml4IGNhaXJvX3QqIG1lbW9yeSBsZWFrIGluIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1J
bml0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMzQ2MjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMwNDAsNyArMzA0MCw2IEBACiAg
ICAgICAgICAgICAnbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCcsCiAgICAgICAgICAgICAn
bG9hZGVyL2NmL1Jlc291cmNlTG9hZGVyQ0ZOZXQuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIv
Y2hyb21pdW0vQ2FjaGVkUmF3UmVzb3VyY2VDaHJvbWl1bS5jcHAnLAotICAgICAgICAgICAgJ2xv
YWRlci9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRl
ci9jaHJvbWl1bS9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXJDaHJvbWl1bS5jcHAnLAogICAgICAg
ICAgICAgJ2xvYWRlci9jaHJvbWl1bS9SZXNvdXJjZUxvYWRlckNocm9taXVtLmNwcCcsCiAgICAg
ICAgICAgICAnbG9hZGVyL2Nocm9taXVtL1N1YnJlc291cmNlTG9hZGVyQ2hyb21pdW0uY3BwJywK
QEAgLTU1NjcsNiArNTU2Niw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jZi9T
b2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdv
cmsvY2hyb21pdW0vQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vbmV0d29yay9jaHJvbWl1bS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNocm9taXVtLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJv
bWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vRE5TQ2hy
b21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291
cmNlRXJyb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9SZXNv
dXJjZUhhbmRsZS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5n
eXAJKHJldmlzaW9uIDEzNDYyOSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYzLDcgKzIwNjMsNiBAQAogICAgICAgICBbJ2V4
Y2x1ZGUnLCAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxcXC5jcHAkJ10s
CiAgICAgICAgIFsnZXhjbHVkZScsICdpbnNwZWN0b3IvSmF2YVNjcmlwdFteL10qXFwuY3BwJCdd
LAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnbG9hZGVyL1VzZXJTdHlsZVNoZWV0TG9hZGVyXFwuY3Bw
JCddLAotICAgICAgICBbJ2V4Y2x1ZGUnLCAnbG9hZGVyL0Nvb2tpZUphclxcLmNwcCQnXSwKICAg
ICAgICAgWydleGNsdWRlJywgJ2xvYWRlci9hcHBjYWNoZS8nXSwKICAgICAgICAgWydleGNsdWRl
JywgJ2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmVNYWNcXC5tbSQnXSwKICAgICAg
ICAgWydleGNsdWRlJywgJ2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmVcXC5jcHAk
J10sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmNwcAkocmV2aXNpb24gMTM0NjI5
KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDggKzMwLDggQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
Q29va2llSmFyLmgiCiAKLSNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0oQkxBQ0tC
RVJSWSkKLSNlcnJvciBDaHJvbWl1bSBhbmQgQmxhY2tiZXJyeSBjdXJyZW50bHkgdXNlIGEgZm9y
ayBvZiB0aGlzIGZpbGUgYmVjYXVzZSBvZiBsYXllcmluZyB2aW9sYXRpb25zCisjaWYgUExBVEZP
Uk0oQkxBQ0tCRVJSWSkKKyNlcnJvciBCbGFja2JlcnJ5IGN1cnJlbnRseSB1c2VzIGEgZm9yayBv
ZiB0aGlzIGZpbGUgYmVjYXVzZSBvZiBsYXllcmluZyB2aW9sYXRpb25zCiAjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNjEsMTcgKzYxLDI5IEBAIHZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnMKIAogYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVu
dCogZG9jdW1lbnQpCiB7CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgcmV0dXJuIGNvb2tp
ZXNFbmFibGVkKG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgZG9jdW1lbnQtPmNvb2tpZVVS
TCgpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7CisjZWxzZQogICAgIHJldHVy
biBjb29raWVzRW5hYmxlZChuZXR3b3JraW5nQ29udGV4dChkb2N1bWVudCkpOworI2VuZGlmCiB9
CiAKIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKIHsKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAg
ICByZXR1cm4gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUobmV0d29ya2luZ0NvbnRleHQo
ZG9jdW1lbnQpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdXJsKTsKKyNlbHNl
CiAgICAgcmV0dXJuIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKG5ldHdvcmtpbmdDb250
ZXh0KGRvY3VtZW50KSwgdXJsKTsKKyNlbmRpZgogfQogCiBib29sIGdldFJhd0Nvb2tpZXMoY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiBj
b29raWVzKQogeworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIHJldHVybiBnZXRSYXdDb29r
aWVzKG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JD
b29raWVzKCksIHVybCwgY29va2llcyk7CisjZWxzZQogICAgIHJldHVybiBnZXRSYXdDb29raWVz
KG5ldHdvcmtpbmdDb250ZXh0KGRvY3VtZW50KSwgdXJsLCBjb29raWVzKTsKKyNlbmRpZgogfQog
CiB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAx
MzQ2MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21p
dW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgotCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5j
bHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogVW5mb3JrLiBUaGlzIGZpbGUgaXMgZm9ya2VkIGJl
Y2F1c2UgYWxsIG90aGVyIHBsYXRmb3JtcyB1c2UgTmV0d29ya2luZ0NvbnRleHQgdG8gYWNjZXNz
IGNvb2tpZSBqYXIsIG5vdCBEb2N1bWVudCBvciBGcmFtZS4KLQotdm9pZCBzZXRDb29raWVzKERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1bWVudCwgdXJsLCB2YWx1ZSk7
Ci19Ci0KLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsKQotewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXMoZG9jdW1lbnQs
IHVybCk7Ci19Ci0KLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICByZXR1cm4gUGxhdGZv
cm1TdXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsK
LX0KLQotYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0g
ICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoZG9jdW1lbnQpOwotfQot
Ci1ib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIHJldHVybiBQbGF0Zm9y
bVN1cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2llcyk7Ci19Ci0KLXZv
aWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9y
dDo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOwotfQotCi12b2lkIGdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAg
IC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCi19Ci0KLXZvaWQgZGVsZXRlQ29va2llc0Zv
ckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5
ZXQgaW1wbGVtZW50ZWQKLX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKLXsKLSAgICAvLyBG
SVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1
cHBvcnQuaAkocmV2aXNpb24gMTM0NjI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUGxhdGZvcm1TdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDYgQEAg
Y2xhc3MgS1VSTDsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIGNsYXNzIFdpZGdldDsK
IAotc3RydWN0IENvb2tpZTsKIHN0cnVjdCBGb250UmVuZGVyU3R5bGU7CiAKIC8vIFBsYXRmb3Jt
U3VwcG9ydCBhbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGluZyBsYXllciB0aGF0IGxldHMgdGhl
IGVtYmVkZGVyCkBAIC03OCwxNCArNzcsNiBAQCBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwogCiBj
bGFzcyBQbGF0Zm9ybVN1cHBvcnQgewogcHVibGljOgotICAgIC8vIENvb2tpZXMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAg
c3RhdGljIHZvaWQgc2V0Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1l
bnQqLCBjb25zdCBLVVJMJik7Ci0gICAgc3RhdGljIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVy
RmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgYm9v
bCByYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+
Jik7Ci0gICAgc3RhdGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3Qg
S1VSTCYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgY29va2ll
c0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqKTsKLQogICAgIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgT1Mo
V0lORE9XUykKICAgICBzdGF0aWMgYm9vbCBlbnN1cmVGb250TG9hZGVkKEhGT05UKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtpbmdDb250
ZXh0LmgJKHJldmlzaW9uIDEzNDYyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvTmV0d29ya2luZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsMTIgQEAg
T0JKQ19DTEFTUyBOU09wZXJhdGlvblF1ZXVlOwogI2luY2x1ZGUgIlNjaGVkdWxlUGFpci5oIgog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK25hbWVzcGFjZSBXZWJLaXQgeworY2xh
c3MgV2ViQ29va2llSmFyOworfQorI2VuZGlmCisKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRl
IDxxZ2xvYmFsLmg+CiBRVF9CRUdJTl9OQU1FU1BBQ0UKQEAgLTUxLDYgKzU3LDEwIEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CisjaWYgUExBVEZPUk0oQ0hST01JVU0pCisgICAgdmlydHVhbCBXZWJLaXQ6OldlYkNvb2tpZUph
ciogY29va2llSmFyKCkgY29uc3QgPSAwOworI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgdmlydHVhbCBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCBsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkgY29uc3QgPSAw
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUph
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUGxhdGZv
cm1Db29raWVKYXIuaAkocmV2aXNpb24gMTM0NjI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9QbGF0Zm9ybUNvb2tpZUphci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0
MCwxNSBAQCBzdHJ1Y3QgQ29va2llOwogLy8gSWYgbmV0d29ya2luZyBjb250ZXh0IGlzIG51bGws
IGRlZmF1bHQgY29va2llIHN0b3JhZ2UgaXMgdXNlZC4KIFN0cmluZyBjb29raWVzRm9yRE9NKE5l
dHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYpOwog
dm9pZCBzZXRDb29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dCosIGNvbnN0IEtVUkwmIGZp
cnN0UGFydHksIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKyNpZiBQTEFURk9STShDSFJP
TUlVTSkKK2Jvb2wgY29va2llc0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqLCBjb25zdCBLVVJM
JiwgY29uc3QgS1VSTCYpOworU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKE5l
dHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eSwgY29uc3QgS1VSTCYpOwor
Ym9vbCBnZXRSYXdDb29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYgZmlyc3RQ
YXJ0eSwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7CisjZWxzZQogYm9vbCBjb29raWVz
RW5hYmxlZChOZXR3b3JraW5nQ29udGV4dCopOwogU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYpOwogYm9vbCBnZXRSYXdD
b29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7
CisjZW5kaWYKIHZvaWQgZGVsZXRlQ29va2llKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgS1VS
TCYsIGNvbnN0IFN0cmluZyYpOwogdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhOZXR3b3Jr
aW5nQ29udGV4dCosIEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKTsKIHZvaWQgZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBob3N0bmFt
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tp
ZUphckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24gMTM0NTk4KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3Bw
OjEzNDU5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29v
a2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb2tpZUphci5oIgorCisjaW5jbHVkZSAiQ29v
a2llLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogVW5mb3JrLiBUaGlzIGZpbGUg
aXMgZm9ya2VkIGJlY2F1c2UgYWxsIG90aGVyIHBsYXRmb3JtcyB1c2UgTmV0d29ya2luZ0NvbnRl
eHQgdG8gYWNjZXNzIGNvb2tpZSBqYXIsIG5vdCBEb2N1bWVudCBvciBGcmFtZS4KKwordm9pZCBz
ZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQoreworICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1bWVudCwg
dXJsLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tp
ZXMoZG9jdW1lbnQsIHVybCk7Cit9CisKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBy
ZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1
bWVudCwgdXJsKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoZG9j
dW1lbnQpOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQoreworICAgIHJl
dHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2ll
cyk7Cit9CisKK3ZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgcmV0dXJuIFBs
YXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOwor
fQorCit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5h
bWVzKQoreworICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCit9CisKK3ZvaWQgZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK30KKwordm9pZCBkZWxldGVBbGxDb29raWVzKCkK
K3sKKyAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVt
L0Nvb2tpZUphckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24gMTM0
NTk4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVK
YXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDU0ICszMiw5NCBAQAogI2luY2x1
ZGUgIkNvb2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlICJOZXR3b3JraW5n
Q29udGV4dC5oIgorI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJDb29raWUuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29va2llSmFyLmg+CisjaW5jbHVk
ZSA8cHVibGljL1dlYlVSTC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogVW5mb3JrLiBUaGlzIGZpbGUgaXMgZm9ya2Vk
IGJlY2F1c2UgYWxsIG90aGVyIHBsYXRmb3JtcyB1c2UgTmV0d29ya2luZ0NvbnRleHQgdG8gYWNj
ZXNzIGNvb2tpZSBqYXIsIG5vdCBEb2N1bWVudCBvciBGcmFtZS4KLQotdm9pZCBzZXRDb29raWVz
KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQordm9pZCBzZXRDb29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29u
c3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBjb29raWVTdHIpCiB7Ci0gICAgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29raWVzKGRvY3Vt
ZW50LCB1cmwsIHZhbHVlKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKyAg
ICBXZWJLaXQ6OldlYkNvb2tpZUphciogY29va2llSmFyID0gY29udGV4dC0+Y29va2llSmFyKCk7
CisgICAgaWYgKGNvb2tpZUphcikKKyAgICAgICAgY29va2llSmFyLT5zZXRDb29raWUodXJsLCBm
aXJzdFBhcnR5Rm9yQ29va2llcywgY29va2llU3RyKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29va2llc0Zv
ckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZv
ckNvb2tpZXMsIGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0
Ojpjb29raWVzKGRvY3VtZW50LCB1cmwpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgIFN0cmluZyByZXN1bHQ7CisgICAgV2ViS2l0OjpXZWJDb29raWVK
YXIqIGNvb2tpZUphciA9IGNvbnRleHQtPmNvb2tpZUphcigpOworICAgIGlmIChjb29raWVKYXIp
CisgICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llcyh1cmwsIGZpcnN0UGFydHlGb3JD
b29raWVzKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwp
CitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBLVVJMJiB1
cmwpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZUph
ciogY29va2llSmFyID0gY29udGV4dC0+Y29va2llSmFyKCk7CisgICAgaWYgKGNvb2tpZUphcikK
KyAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZSh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1i
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgY29va2ll
c0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGNvb2tpZVVS
TCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRm
b3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoZG9jdW1lbnQpOworICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIFdl
YktpdDo6V2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBjb250ZXh0LT5jb29raWVKYXIoKTsKKyAg
ICBpZiAoY29va2llSmFyKQorICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXNFbmFi
bGVkKGNvb2tpZVVSTCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nvb2tp
ZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JD
b29raWVzLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewot
ICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3
Q29va2llcyk7CisgICAgcmF3Q29va2llcy5jbGVhcigpOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViQ29v
a2llPiB3ZWJDb29raWVzOworICAgIFdlYktpdDo6V2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBj
b250ZXh0LT5jb29raWVKYXIoKTsKKyAgICBpZiAoY29va2llSmFyKQorICAgICAgICBjb29raWVK
YXItPnJhd0Nvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcywgd2ViQ29va2llcyk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgY29uc3QgV2ViS2l0OjpXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07
CisgICAgICAgIENvb2tpZSBjb29raWUod2ViQ29va2llLm5hbWUsIHdlYkNvb2tpZS52YWx1ZSwg
d2ViQ29va2llLmRvbWFpbiwgd2ViQ29va2llLnBhdGgsIHdlYkNvb2tpZS5leHBpcmVzLCB3ZWJD
b29raWUuaHR0cE9ubHksIHdlYkNvb2tpZS5zZWN1cmUsIHdlYkNvb2tpZS5zZXNzaW9uKTsKKyAg
ICAgICAgcmF3Q29va2llcy5hcHBlbmQoY29va2llKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZShO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IGNvb2tpZU5hbWUpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2ll
KGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAg
cmV0dXJuOworICAgIFdlYktpdDo6V2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBjb250ZXh0LT5j
b29raWVKYXIoKTsKKyAgICBpZiAoY29va2llSmFyKQorICAgICAgICBjb29raWVKYXItPmRlbGV0
ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhOZXR3b3JraW5nQ29udGV4dCogLypjb250ZXh0Ki8sIEhhc2hTZXQ8U3RyaW5nPiYgLypo
b3N0bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12
b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9p
ZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqIC8qY29udGV4dCov
LCBjb25zdCBTdHJpbmcmIC8qaG9zdG5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBkZWxldGVBbGxD
b29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiAvKmNvbnRleHQqLykKIHsKICAgICAvLyBGSVhNRTog
Tm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEzNDYzMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTItMTEtMTQgIE1hcmsgUGlsZ3JpbSAgPHBp
bGdyaW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5j
dGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW92ZSBjb29raWUgZnVuY3Rpb25zIG91dCBvZiBQbGF0Zm9ybVN1
cHBvcnQgYW5kIGludG8gbmV3CisgICAgICAgIFBsYXRmb3JtQ29va2llSmFyIGludGVyZmFjZSBp
bnRyb2R1Y2VkIGluIGJ1ZyAxMDE2MjEuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAg
ICAqIHNyYy9GcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGw6OmNv
b2tpZUphcik6CisgICAgICAgICogc3JjL0ZyYW1lTmV0d29ya2luZ0NvbnRleHRJbXBsLmg6Cisg
ICAgICAgIChGcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbCk6CisgICAgICAgICogc3JjL1BsYXRm
b3JtU3VwcG9ydC5jcHA6CisKIDIwMTItMTEtMTQgIE1pa2UgUmVlZCAgPHJlZWRAZ29vZ2xlLmNv
bT4KIAogICAgICAgICBEeW5hbWljYWxseSBjcmVhdGUgY2FudmFzIGluIFNldHVwKCkgdG8gYXZv
aWQgY2FsbGluZyBERVBSRUNBVEVEIGZ1bmN0aW9uIHNldERldmljZSgpLgpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gMTM0NjI5KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNiArMzk0LDcgQEAKICAg
ICAgICAgICAgICAgICAnc3JjL0ZpbmRJblBhZ2VDb29yZGluYXRlcy5oJywKICAgICAgICAgICAg
ICAgICAnc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvRnJhbWVO
ZXR3b3JraW5nQ29udGV4dEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0ZyYW1lTmV0
d29ya2luZ0NvbnRleHRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvR2VvbG9jYXRpb25D
bGllbnRQcm94eS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvR2VvbG9jYXRpb25DbGllbnRQ
cm94eS5oJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTmV0d29ya2lu
Z0NvbnRleHRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9GcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnJh
bWVOZXR3b3JraW5nQ29udGV4dEltcGwuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgor
I2luY2x1ZGUgInB1YmxpYy9XZWJGcmFtZUNsaWVudC5oIgorI2luY2x1ZGUgPHB1YmxpYy9QbGF0
Zm9ybS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQ29va2llSmFyKiBGcmFtZU5ldHdv
cmtpbmdDb250ZXh0SW1wbDo6Y29va2llSmFyKCkgY29uc3QKK3sKKyAgICBXZWJGcmFtZUltcGwq
IGZyYW1lSW1wbCA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKCkpOworICAgIGlmICgh
ZnJhbWVJbXBsIHx8ICFmcmFtZUltcGwtPmNsaWVudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGZyYW1lSW1wbC0+Y2xpZW50KCktPmNvb2tpZUph
cihmcmFtZUltcGwpOworICAgIGlmICghY29va2llSmFyKQorICAgICAgICBjb29raWVKYXIgPSBX
ZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmNvb2tpZUphcigpOworICAgIHJldHVybiBjb29r
aWVKYXI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTmV0
d29ya2luZ0NvbnRleHRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvRnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGwuaAkocmV2aXNpb24gMTM0NjI5KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDE0IEBACiAjZGVmaW5lIEZyYW1lTmV0d29ya2lu
Z0NvbnRleHRJbXBsX2gKIAogI2luY2x1ZGUgIkZyYW1lTmV0d29ya2luZ0NvbnRleHQuaCIKKyNp
bmNsdWRlIDxwdWJsaWMvV2ViQ29va2llSmFyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBj
bGFzcyBGcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpGcmFtZU5l
dHdvcmtpbmdDb250ZXh0IHsKIHB1YmxpYzoKKyAgICB2aXJ0dWFsIFdlYkNvb2tpZUphciogY29v
a2llSmFyKCkgY29uc3QgT1ZFUlJJREU7CisKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGcmFtZU5l
dHdvcmtpbmdDb250ZXh0SW1wbD4gY3JlYXRlKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKICAgICB7
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGwo
ZnJhbWUpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtU3VwcG9y
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1T
dXBwb3J0LmNwcAkocmV2aXNpb24gMTM0NjI5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvUGxhdGZvcm1TdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsOCArNzYsNiBAQAog
I2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
LSNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklEQkZh
Y3RvcnlCYWNrZW5kUHJveHkuaCIKQEAgLTg5LDggKzg3LDYgQEAKIAogI2luY2x1ZGUgIldvcmtl
ci5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRQcm94eS5oIgotI2luY2x1ZGUgPHB1YmxpYy9X
ZWJDb29raWUuaD4KLSNpbmNsdWRlIDxwdWJsaWMvV2ViQ29va2llSmFyLmg+CiAjaW5jbHVkZSA8
cHVibGljL1dlYk1pbWVSZWdpc3RyeS5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMTAwLDg2ICs5Niw2IEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFdlYkNvb2tp
ZUphciogZ2V0Q29va2llSmFyKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBXZWJG
cmFtZUltcGwqIGZyYW1lSW1wbCA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5m
cmFtZSgpKTsKLSAgICBpZiAoIWZyYW1lSW1wbCB8fCAhZnJhbWVJbXBsLT5jbGllbnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBmcmFtZUltcGwt
PmNsaWVudCgpLT5jb29raWVKYXIoZnJhbWVJbXBsKTsKLSAgICBpZiAoIWNvb2tpZUphcikKLSAg
ICAgICAgY29va2llSmFyID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jb29raWVKYXIo
KTsKLSAgICByZXR1cm4gY29va2llSmFyOwotfQotCi0vLyBDb29raWVzIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LXZvaWQgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIHZhbHVlKQotewotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29v
a2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXIt
PnNldENvb2tpZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7
Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBXZWJD
b29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNv
b2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzKHVybCwgZG9jdW1l
bnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVN0
cmluZyBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsKQotewotICAgIFN0cmluZyByZXN1bHQ7
Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwot
ICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMo
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nv
b2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxD
b29raWU+JiByYXdDb29raWVzKQotewotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBXZWJW
ZWN0b3I8V2ViQ29va2llPiB3ZWJDb29raWVzOwotCi0gICAgV2ViQ29va2llSmFyKiBjb29raWVK
YXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAg
IGNvb2tpZUphci0+cmF3Q29va2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2ll
cygpLCB3ZWJDb29raWVzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29r
aWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvb2tpZSYgd2ViQ29va2llID0g
d2ViQ29va2llc1tpXTsKLSAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUudmFsdWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgd2ViQ29va2llLmRvbWFpbiwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUucGF0
aCwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuZXhwaXJlcywKLSAgICAgICAgICAg
ICAgICAgICAgICB3ZWJDb29raWUuaHR0cE9ubHksCi0gICAgICAgICAgICAgICAgICAgICAgd2Vi
Q29va2llLnNlY3VyZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2Vzc2lvbik7
Ci0gICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNvb2tpZSk7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUp
Ci17Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQp
OwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVy
bCwgY29va2llTmFtZSk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzRW5hYmxl
ZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsK
LSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0g
ICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzRW5h
YmxlZChkb2N1bWVudC0+Y29va2llVVJMKCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2ll
cygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiAvLyBGb250IC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
ICNpZiBPUyhXSU5ET1dTKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174675</attachid>
            <date>2012-11-16 06:57:15 -0800</date>
            <delta_ts>2012-11-16 13:51:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99340-20121116095451.patch</filename>
            <type>text/plain</type>
            <size>25564</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDEyLTExLTE2ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92
ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBjb29raWUtcmVsYXRl
ZCBmdW5jdGlvbnMgb3V0IG9mIFBsYXRmb3JtU3VwcG9ydCBhbmQgaW1wbGVtZW50CisgICAgICAg
IG5ldyBQbGF0Zm9ybUNvb2tpZUphciBpbnRlcmZhY2UgdmlhIE5ldHdvcmtDb250ZXh0LgorCisg
ICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIGxvYWRlci9Db29raWVKYXIuY3BwOgorICAgICAgICAqIGxvYWRlci9jaHJv
bWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFBsYXRmb3JtU3VwcG9ydCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9OZXR3b3JraW5n
Q29udGV4dC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKE5ldHdvcmtpbmdDb250ZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVt
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUph
ckNocm9taXVtLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnNldENvb2tpZXNGcm9tRE9NKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JET00pOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3Jl
OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorCiAyMDEyLTExLTE2ICBFdWdlbmUgS2x5
dWNobmlrb3YgIDxldXN0YXMuYnVnQGdtYWlsLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBXb3JrYXJvdW5kIHRvIHNob3cgc2hvcnRjdXRzIGZvciBwYW5lbHMgdGhhdCBoYXNuJ3QgYmVl
biBsb2FkZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMzQ5NDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTMwNDksNyArMzA0OSw2
IEBACiAgICAgICAgICAgICAnbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCcsCiAgICAgICAg
ICAgICAnbG9hZGVyL2NmL1Jlc291cmNlTG9hZGVyQ0ZOZXQuY3BwJywKICAgICAgICAgICAgICds
b2FkZXIvY2hyb21pdW0vQ2FjaGVkUmF3UmVzb3VyY2VDaHJvbWl1bS5jcHAnLAotICAgICAgICAg
ICAgJ2xvYWRlci9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAg
J2xvYWRlci9jaHJvbWl1bS9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXJDaHJvbWl1bS5jcHAnLAog
ICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1bS9SZXNvdXJjZUxvYWRlckNocm9taXVtLmNwcCcs
CiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9taXVtL1N1YnJlc291cmNlTG9hZGVyQ2hyb21pdW0u
Y3BwJywKQEAgLTU1NzgsNiArNTU3Nyw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29y
ay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L25ldHdvcmsvY2hyb21pdW0vQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNocm9t
aXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVK
YXJDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0v
RE5TQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVt
L1Jlc291cmNlRXJyb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1
bS9SZXNvdXJjZUhhbmRsZS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAv
V2ViQ29yZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAJKHJldmlzaW9uIDEzNDk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDg1LDcgKzIwODUsNiBAQAogICAgICAg
ICBbJ2V4Y2x1ZGUnLCAnaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWxcXC5j
cHAkJ10sCiAgICAgICAgIFsnZXhjbHVkZScsICdpbnNwZWN0b3IvSmF2YVNjcmlwdFteL10qXFwu
Y3BwJCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnbG9hZGVyL1VzZXJTdHlsZVNoZWV0TG9hZGVy
XFwuY3BwJCddLAotICAgICAgICBbJ2V4Y2x1ZGUnLCAnbG9hZGVyL0Nvb2tpZUphclxcLmNwcCQn
XSwKICAgICAgICAgWydleGNsdWRlJywgJ2xvYWRlci9hcHBjYWNoZS8nXSwKICAgICAgICAgWydl
eGNsdWRlJywgJ2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmVNYWNcXC5tbSQnXSwK
ICAgICAgICAgWydleGNsdWRlJywgJ2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmVc
XC5jcHAkJ10sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmNwcAkocmV2aXNpb24g
MTM0OTQ0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nvb2tpZUphci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDggKzMwLDggQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtQ29va2llSmFyLmgiCiAKLSNpZiBQTEFURk9STShDSFJPTUlVTSkgfHwgUExBVEZPUk0o
QkxBQ0tCRVJSWSkKLSNlcnJvciBDaHJvbWl1bSBhbmQgQmxhY2tiZXJyeSBjdXJyZW50bHkgdXNl
IGEgZm9yayBvZiB0aGlzIGZpbGUgYmVjYXVzZSBvZiBsYXllcmluZyB2aW9sYXRpb25zCisjaWYg
UExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNlcnJvciBCbGFja2JlcnJ5IGN1cnJlbnRseSB1c2VzIGEg
Zm9yayBvZiB0aGlzIGZpbGUgYmVjYXVzZSBvZiBsYXllcmluZyB2aW9sYXRpb25zCiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9t
aXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMzQ5NDQpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkNvb2tpZUphci5oIgotCi0jaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0vLyBGSVhNRTogVW5mb3JrLiBUaGlzIGZpbGUgaXMgZm9ya2VkIGJlY2F1c2UgYWxs
IG90aGVyIHBsYXRmb3JtcyB1c2UgTmV0d29ya2luZ0NvbnRleHQgdG8gYWNjZXNzIGNvb2tpZSBq
YXIsIG5vdCBEb2N1bWVudCBvciBGcmFtZS4KLQotdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFBs
YXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1bWVudCwgdXJsLCB2YWx1ZSk7Ci19Ci0KLVN0
cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQot
ewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXMoZG9jdW1lbnQsIHVybCk7Ci19
Ci0KLVN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0
Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKLX0KLQotYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJu
IFBsYXRmb3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoZG9jdW1lbnQpOwotfQotCi1ib29sIGdl
dFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZl
Y3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6
OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2llcyk7Ci19Ci0KLXZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIGNvb2tpZU5hbWUpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRl
Q29va2llKGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOwotfQotCi12b2lkIGdldEhvc3RuYW1l
c1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQotewotICAgIC8vIEZJWE1F
OiBOb3QgeWV0IGltcGxlbWVudGVkCi19Ci0KLXZvaWQgZGVsZXRlQ29va2llc0Zvckhvc3RuYW1l
KGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVt
ZW50ZWQKLX0KLQotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKLXsKLSAgICAvLyBGSVhNRTogTm90
IHlldCBpbXBsZW1lbnRlZAotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQuaAko
cmV2aXNpb24gMTM0OTQ0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1TdXBwb3J0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDYgQEAgY2xhc3MgS1VS
TDsKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIGNsYXNzIFdpZGdldDsKIAotc3RydWN0
IENvb2tpZTsKIHN0cnVjdCBGb250UmVuZGVyU3R5bGU7CiAKIC8vIFBsYXRmb3JtU3VwcG9ydCBh
biBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGluZyBsYXllciB0aGF0IGxldHMgdGhlIGVtYmVkZGVy
CkBAIC03OCwxNCArNzcsNiBAQCBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwogCiBjbGFzcyBQbGF0
Zm9ybVN1cHBvcnQgewogcHVibGljOgotICAgIC8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgc3RhdGljIHZv
aWQgc2V0Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
IHZhbHVlKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25z
dCBLVVJMJik7Ci0gICAgc3RhdGljIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICBzdGF0aWMgYm9vbCByYXdDb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIFZlY3RvcjxDb29raWU+Jik7Ci0gICAg
c3RhdGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYgY29va2llTmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgY29va2llc0VuYWJsZWQo
Y29uc3QgRG9jdW1lbnQqKTsKLQogICAgIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgT1MoV0lORE9XUykK
ICAgICBzdGF0aWMgYm9vbCBlbnN1cmVGb250TG9hZGVkKEhGT05UKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtpbmdDb250ZXh0LmgJKHJl
dmlzaW9uIDEzNDk0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29y
a2luZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsMTIgQEAgT0JKQ19DTEFT
UyBOU09wZXJhdGlvblF1ZXVlOwogI2luY2x1ZGUgIlNjaGVkdWxlUGFpci5oIgogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShDSFJPTUlVTSkKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViQ29v
a2llSmFyOworfQorI2VuZGlmCisKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxxZ2xvYmFs
Lmg+CiBRVF9CRUdJTl9OQU1FU1BBQ0UKQEAgLTUxLDYgKzU3LDEwIEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCisjaWYgUExB
VEZPUk0oQ0hST01JVU0pCisgICAgdmlydHVhbCBXZWJLaXQ6OldlYkNvb2tpZUphciogY29va2ll
SmFyKCkgY29uc3QgPSAwOworI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAgICAgdmlydHVh
bCBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkgY29uc3QgPSAwOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEzNDk0MikJKGZyb20gU291cmNl
L1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcDoxMzQ5NDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9t
aXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0
IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKworI2luY2x1ZGUgIkNvb2tpZS5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFVuZm9yay4gVGhpcyBmaWxlIGlzIGZvcmtlZCBi
ZWNhdXNlIGFsbCBvdGhlciBwbGF0Zm9ybXMgdXNlIE5ldHdvcmtpbmdDb250ZXh0IHRvIGFjY2Vz
cyBjb29raWUgamFyLCBub3QgRG9jdW1lbnQgb3IgRnJhbWUuCisKK3ZvaWQgc2V0Q29va2llcyhE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoZG9jdW1lbnQsIHVybCwgdmFsdWUp
OworfQorCitTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtV
UkwmIHVybCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVzKGRvY3VtZW50
LCB1cmwpOworfQorCitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIFBsYXRm
b3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7
Cit9CisKK2Jvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQorewor
ICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXNFbmFibGVkKGRvY3VtZW50KTsKK30K
KworYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK3sKKyAgICByZXR1cm4gUGxhdGZv
cm1TdXBwb3J0OjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIHJhd0Nvb2tpZXMpOworfQorCit2
b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQoreworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBv
cnQ6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwgdXJsLCBjb29raWVOYW1lKTsKK30KKwordm9pZCBn
ZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0PFN0cmluZz4mIGhvc3RuYW1lcykKK3sKKyAg
ICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorfQorCit2b2lkIGRlbGV0ZUNvb2tpZXNG
b3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQoreworICAgIC8vIEZJWE1FOiBOb3Qg
eWV0IGltcGxlbWVudGVkCit9CisKK3ZvaWQgZGVsZXRlQWxsQ29va2llcygpCit7CisgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJD
aHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEzNDk0MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw1NCArMzIsOTQgQEAKICNpbmNsdWRlICJDb29raWVK
YXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIK
KyNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29va2ll
Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYkNvb2tpZUphci5oPgorI2luY2x1ZGUgPHB1YmxpYy9X
ZWJVUkwuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotLy8gRklYTUU6IFVuZm9yay4gVGhpcyBmaWxlIGlzIGZvcmtlZCBiZWNhdXNlIGFs
bCBvdGhlciBwbGF0Zm9ybXMgdXNlIE5ldHdvcmtpbmdDb250ZXh0IHRvIGFjY2VzcyBjb29raWUg
amFyLCBub3QgRG9jdW1lbnQgb3IgRnJhbWUuCi0KLXZvaWQgc2V0Q29va2llcyhEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgc2V0
Q29va2llc0Zyb21ET00oTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZp
cnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2ll
U3RyKQogewotICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1bWVudCwgdXJsLCB2
YWx1ZSk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgV2ViS2l0OjpX
ZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGNvbnRleHQtPmNvb2tpZUphcigpOworICAgIGlmIChj
b29raWVKYXIpCisgICAgICAgIGNvb2tpZUphci0+c2V0Q29va2llKHVybCwgZmlyc3RQYXJ0eUZv
ckNvb2tpZXMsIGNvb2tpZVN0cik7CiB9CiAKLVN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIGNvb2tpZXNGb3JET00oTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBj
b25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llcyhk
b2N1bWVudCwgdXJsKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIFdlYktpdDo6V2ViQ29va2llSmFyKiBjb29raWVK
YXIgPSBjb250ZXh0LT5jb29raWVKYXIoKTsKKyAgICBpZiAoY29va2llSmFyKQorICAgICAgICBy
ZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcyk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQorU3RyaW5nIGNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgS1VSTCYgdXJsKQogewotICAg
IHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRv
Y3VtZW50LCB1cmwpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgIFN0cmluZyByZXN1bHQ7CisgICAgV2ViS2l0OjpXZWJDb29raWVKYXIqIGNvb2tpZUph
ciA9IGNvbnRleHQtPmNvb2tpZUphcigpOworICAgIGlmIChjb29raWVKYXIpCisgICAgICAgIHJl
c3VsdCA9IGNvb2tpZUphci0+Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBmaXJz
dFBhcnR5Rm9yQ29va2llcyk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBjb29raWVz
RW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCitib29sIGNvb2tpZXNFbmFibGVkKE5l
dHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBjb29raWVVUkwsIGNvbnN0IEtV
UkwmIGZpcnN0UGFydHlGb3JDb29raWVzKQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6
OmNvb2tpZXNFbmFibGVkKGRvY3VtZW50KTsKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBXZWJLaXQ6OldlYkNv
b2tpZUphciogY29va2llSmFyID0gY29udGV4dC0+Y29va2llSmFyKCk7CisgICAgaWYgKGNvb2tp
ZUphcikKKyAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzRW5hYmxlZChjb29raWVV
UkwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29s
IGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmws
IFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBnZXRSYXdDb29raWVzKE5ldHdvcmtp
bmdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBLVVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29u
c3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKLSAgICByZXR1cm4g
UGxhdGZvcm1TdXBwb3J0OjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIHJhd0Nvb2tpZXMpOwor
ICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNvb2tpZT4gd2ViQ29v
a2llczsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZUphciogY29va2llSmFyID0gY29udGV4dC0+Y29v
a2llSmFyKCk7CisgICAgaWYgKGNvb2tpZUphcikKKyAgICAgICAgY29va2llSmFyLT5yYXdDb29r
aWVzKHVybCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIHdlYkNvb2tpZXMpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0
IFdlYktpdDo6V2ViQ29va2llJiB3ZWJDb29raWUgPSB3ZWJDb29raWVzW2ldOworICAgICAgICBD
b29raWUgY29va2llKHdlYkNvb2tpZS5uYW1lLCB3ZWJDb29raWUudmFsdWUsIHdlYkNvb2tpZS5k
b21haW4sIHdlYkNvb2tpZS5wYXRoLCB3ZWJDb29raWUuZXhwaXJlcywgd2ViQ29va2llLmh0dHBP
bmx5LCB3ZWJDb29raWUuc2VjdXJlLCB3ZWJDb29raWUuc2Vzc2lvbik7CisgICAgICAgIHJhd0Nv
b2tpZXMuYXBwZW5kKGNvb2tpZSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQordm9pZCBkZWxldGVDb29raWUoTmV0d29ya2luZ0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1l
KQogewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmRlbGV0ZUNvb2tpZShkb2N1bWVudCwg
dXJsLCBjb29raWVOYW1lKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKyAg
ICBXZWJLaXQ6OldlYkNvb2tpZUphciogY29va2llSmFyID0gY29udGV4dC0+Y29va2llSmFyKCk7
CisgICAgaWYgKGNvb2tpZUphcikKKyAgICAgICAgY29va2llSmFyLT5kZWxldGVDb29raWUodXJs
LCBjb29raWVOYW1lKTsKIH0KIAotdm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29va2llcyhIYXNoU2V0
PFN0cmluZz4mIGhvc3RuYW1lcykKK3ZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoTmV0d29y
a2luZ0NvbnRleHQqIC8qY29udGV4dCovLCBIYXNoU2V0PFN0cmluZz4mIC8qaG9zdG5hbWVzKi8p
CiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKIH0KIAotdm9pZCBkZWxldGVD
b29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgZGVsZXRlQ29v
a2llc0Zvckhvc3RuYW1lKE5ldHdvcmtpbmdDb250ZXh0KiAvKmNvbnRleHQqLywgY29uc3QgU3Ry
aW5nJiAvKmhvc3RuYW1lKi8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQK
IH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzKCkKK3ZvaWQgZGVsZXRlQWxsQ29va2llcyhOZXR3
b3JraW5nQ29udGV4dCogLypjb250ZXh0Ki8pCiB7CiAgICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1w
bGVtZW50ZWQKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzQ5
NDQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIxIEBACisyMDEyLTExLTE2ICBNYXJrIFBpbGdyaW0gIDxwaWxncmltQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92ZSBjb29raWUtcmVsYXRlZCBmdW5j
dGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW92ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgb3V0IG9mIFBs
YXRmb3JtU3VwcG9ydCBhbmQgaW1wbGVtZW50CisgICAgICAgIG5ldyBQbGF0Zm9ybUNvb2tpZUph
ciBpbnRlcmZhY2UgdmlhIE5ldHdvcmtDb250ZXh0LgorCisgICAgICAgICogV2ViS2l0Lmd5cDoK
KyAgICAgICAgKiBzcmMvRnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGwuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTmV0d29ya2luZ0NvbnRleHRJ
bXBsOjpjb29raWVKYXIpOgorICAgICAgICAqIHNyYy9GcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1w
bC5oOgorICAgICAgICAoRnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGwpOgorICAgICAgICAqIHNy
Yy9QbGF0Zm9ybVN1cHBvcnQuY3BwOgorCiAyMDEyLTExLTE2ICBQZXRlciBCZXZlcmxvbyAgPHBl
dGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiAgUm9sbGVkIERFUFMuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiAxMzQ5NDQpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTM5NCw2ICsz
OTQsNyBAQAogICAgICAgICAgICAgICAgICdzcmMvRmluZEluUGFnZUNvb3JkaW5hdGVzLmgnLAog
ICAgICAgICAgICAgICAgICdzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9GcmFtZUxvYWRlckNsaWVudEltcGwuaCcsCisgICAgICAgICAgICAgICAg
J3NyYy9GcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvRnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9H
ZW9sb2NhdGlvbkNsaWVudFByb3h5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9HZW9sb2Nh
dGlvbkNsaWVudFByb3h5LmgnLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJh
bWVOZXR3b3JraW5nQ29udGV4dEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0ZyYW1lTmV0d29ya2luZ0NvbnRleHRJbXBsLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0ZyYW1lTmV0d29ya2luZ0NvbnRleHRJbXBs
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbC5oIgorCisjaW5jbHVkZSAiV2ViRnJh
bWVJbXBsLmgiCisjaW5jbHVkZSAicHVibGljL1dlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVkZSA8
cHVibGljL1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJDb29raWVKYXIq
IEZyYW1lTmV0d29ya2luZ0NvbnRleHRJbXBsOjpjb29raWVKYXIoKSBjb25zdAoreworICAgIFdl
YkZyYW1lSW1wbCogZnJhbWVJbXBsID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUoKSk7
CisgICAgaWYgKCFmcmFtZUltcGwgfHwgIWZyYW1lSW1wbC0+Y2xpZW50KCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZnJhbWVJbXBsLT5jbGllbnQo
KS0+Y29va2llSmFyKGZyYW1lSW1wbCk7CisgICAgaWYgKCFjb29raWVKYXIpCisgICAgICAgIGNv
b2tpZUphciA9IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y29va2llSmFyKCk7CisgICAg
cmV0dXJuIGNvb2tpZUphcjsKK30KKworfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvRnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9GcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbC5oCShyZXZpc2lvbiAx
MzQ5NDQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZU5ldHdvcmtpbmdDb250
ZXh0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsMTQgQEAKICNkZWZpbmUgRnJh
bWVOZXR3b3JraW5nQ29udGV4dEltcGxfaAogCiAjaW5jbHVkZSAiRnJhbWVOZXR3b3JraW5nQ29u
dGV4dC5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGNsYXNzIEZyYW1lTmV0d29ya2luZ0NvbnRleHRJbXBsIDogcHVibGljIFdlYkNv
cmU6OkZyYW1lTmV0d29ya2luZ0NvbnRleHQgewogcHVibGljOgorICAgIHZpcnR1YWwgV2ViQ29v
a2llSmFyKiBjb29raWVKYXIoKSBjb25zdCBPVkVSUklERTsKKwogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEZyYW1lTmV0d29ya2luZ0NvbnRleHRJbXBsPiBjcmVhdGUoV2ViQ29yZTo6RnJhbWUqIGZy
YW1lKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcmFtZU5ldHdvcmtpbmdD
b250ZXh0SW1wbChmcmFtZSkpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxh
dGZvcm1TdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9QbGF0Zm9ybVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMzQ5NDQpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw4
ICs3Niw2IEBACiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAKICNpbmNsdWRlICJCaXRt
YXBJbWFnZS5oIgotI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oIgpAQCAtODksOCArODcsNiBAQAogCiAjaW5j
bHVkZSAiV29ya2VyLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dFByb3h5LmgiCi0jaW5jbHVk
ZSA8cHVibGljL1dlYkNvb2tpZS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4K
ICNpbmNsdWRlIDxwdWJsaWMvV2ViTWltZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8cHVibGljL1dl
YlZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0xMDAsODYgKzk2LDYg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgV2ViQ29va2llSmFyKiBnZXRDb29raWVKYXIoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQot
ewotICAgIFdlYkZyYW1lSW1wbCogZnJhbWVJbXBsID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUo
ZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIGlmICghZnJhbWVJbXBsIHx8ICFmcmFtZUltcGwtPmNs
aWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9
IGZyYW1lSW1wbC0+Y2xpZW50KCktPmNvb2tpZUphcihmcmFtZUltcGwpOwotICAgIGlmICghY29v
a2llSmFyKQotICAgICAgICBjb29raWVKYXIgPSBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCkt
PmNvb2tpZUphcigpOwotICAgIHJldHVybiBjb29raWVKYXI7Ci19Ci0KLS8vIENvb2tpZXMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotdm9pZCBQbGF0Zm9ybVN1cHBvcnQ6OnNldENvb2tpZXMoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVK
YXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAg
IGNvb2tpZUphci0+c2V0Q29va2llKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVz
KCksIHZhbHVlKTsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llcyhjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0
OwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsK
LSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXMo
dXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotU3RyaW5nIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgU3Ry
aW5nIHJlc3VsdDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihk
b2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFy
LT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5
Rm9yQ29va2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIFBsYXRmb3JtU3Vw
cG9ydDo6cmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCi17Ci0gICAgcmF3Q29va2llcy5jbGVhcigp
OwotICAgIFdlYlZlY3RvcjxXZWJDb29raWU+IHdlYkNvb2tpZXM7Ci0KLSAgICBXZWJDb29raWVK
YXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUph
cikKLSAgICAgICAgY29va2llSmFyLT5yYXdDb29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFy
dHlGb3JDb29raWVzKCksIHdlYkNvb2tpZXMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgV2ViQ29va2llJiB3
ZWJDb29raWUgPSB3ZWJDb29raWVzW2ldOwotICAgICAgICBDb29raWUgY29va2llKHdlYkNvb2tp
ZS5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS52YWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICB3ZWJDb29raWUuZG9tYWluLAotICAgICAgICAgICAgICAgICAgICAgIHdl
YkNvb2tpZS5wYXRoLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5leHBpcmVzLAot
ICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5odHRwT25seSwKLSAgICAgICAgICAgICAg
ICAgICAgICB3ZWJDb29raWUuc2VjdXJlLAotICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tp
ZS5zZXNzaW9uKTsKLSAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoY29va2llKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29raWUo
Y29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y29va2llTmFtZSkKLXsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUph
cihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5kZWxl
dGVDb29raWUodXJsLCBjb29raWVOYW1lKTsKLX0KLQotYm9vbCBQbGF0Zm9ybVN1cHBvcnQ6OmNv
b2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBib29sIHJlc3Vs
dCA9IGZhbHNlOwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRv
Y3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXIt
PmNvb2tpZXNFbmFibGVkKGRvY3VtZW50LT5jb29raWVVUkwoKSwgZG9jdW1lbnQtPmZpcnN0UGFy
dHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIC8vIEZvbnQgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogI2lmIE9TKFdJTkRPV1MpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174753</attachid>
            <date>2012-11-16 13:51:27 -0800</date>
            <delta_ts>2012-11-16 15:53:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99340-20121116164902.patch</filename>
            <type>text/plain</type>
            <size>25616</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNDk5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDEyLTExLTE2ICBNYXJrIFBp
bGdyaW0gIDxwaWxncmltQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbW92
ZSBjb29raWUtcmVsYXRlZCBmdW5jdGlvbnMgZnJvbSBQbGF0Zm9ybVN1cHBvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MzQwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBjb29raWUtcmVsYXRl
ZCBmdW5jdGlvbnMgb3V0IG9mIFBsYXRmb3JtU3VwcG9ydCBhbmQgaW1wbGVtZW50CisgICAgICAg
IG5ldyBQbGF0Zm9ybUNvb2tpZUphciBpbnRlcmZhY2UgdmlhIE5ldHdvcmtDb250ZXh0LgorCisg
ICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIGxvYWRlci9Db29raWVKYXIuY3BwOgorICAgICAgICAqIGxvYWRlci9jaHJv
bWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vUGxhdGZvcm1TdXBwb3J0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFBsYXRmb3JtU3VwcG9ydCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9OZXR3b3JraW5n
Q29udGV4dC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKE5ldHdvcmtpbmdDb250ZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVt
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nocm9taXVtL0Nvb2tpZUph
ckNocm9taXVtLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnNldENvb2tpZXNGcm9tRE9NKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JET00pOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3Jl
OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRlbGV0ZUFsbENvb2tpZXMpOgorCiAyMDEyLTExLTE2ICBNaWNoYWVsIFBy
dWV0dCAgPG1pY2hhZWxANjhrLm9yZz4KIAogICAgICAgICBJbmRleGVkREI6IFByb3BhZ2F0ZSBE
T01SZXF1ZXN0U3RhdGUgdG8gSW5kZXhlZERCIGJpbmRpbmcgdXRpbGl0eSBmdW5jdGlvbnMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEzNDk5MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzA0OSw3ICszMDQ5LDYgQEAKICAgICAgICAg
ICAgICdsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIv
Y2YvUmVzb3VyY2VMb2FkZXJDRk5ldC5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9jaHJvbWl1
bS9DYWNoZWRSYXdSZXNvdXJjZUNocm9taXVtLmNwcCcsCi0gICAgICAgICAgICAnbG9hZGVyL2No
cm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2Nocm9t
aXVtL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAn
bG9hZGVyL2Nocm9taXVtL1Jlc291cmNlTG9hZGVyQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAg
ICdsb2FkZXIvY2hyb21pdW0vU3VicmVzb3VyY2VMb2FkZXJDaHJvbWl1bS5jcHAnLApAQCAtNTU4
NCw2ICs1NTgzLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0
cmVhbUhhbmRsZUNGTmV0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ2hyb21pdW0uY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9ETlNDaHJvbWl1bS5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vUmVzb3VyY2VFcnJv
ci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL1Jlc291cmNlSGFu
ZGxlLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2
aXNpb24gMTM0OTkwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMTYsNyArMjExNiw2IEBACiAgICAgICAgIFsnZXhjbHVkZScs
ICdpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbFxcLmNwcCQnXSwKICAgICAg
ICAgWydleGNsdWRlJywgJ2luc3BlY3Rvci9KYXZhU2NyaXB0W14vXSpcXC5jcHAkJ10sCiAgICAg
ICAgIFsnZXhjbHVkZScsICdsb2FkZXIvVXNlclN0eWxlU2hlZXRMb2FkZXJcXC5jcHAkJ10sCi0g
ICAgICAgIFsnZXhjbHVkZScsICdsb2FkZXIvQ29va2llSmFyXFwuY3BwJCddLAogICAgICAgICBb
J2V4Y2x1ZGUnLCAnbG9hZGVyL2FwcGNhY2hlLyddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnbG9h
ZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZU1hY1xcLm1tJCddLAogICAgICAgICBbJ2V4
Y2x1ZGUnLCAnbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZVxcLmNwcCQnXSwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9Db29raWVKYXIuY3BwCShyZXZpc2lvbiAxMzQ5OTApCisrKyBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvQ29va2llSmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
OCArMzAsOCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db29raWVK
YXIuaCIKIAotI2lmIFBMQVRGT1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKQot
I2Vycm9yIENocm9taXVtIGFuZCBCbGFja2JlcnJ5IGN1cnJlbnRseSB1c2UgYSBmb3JrIG9mIHRo
aXMgZmlsZSBiZWNhdXNlIG9mIGxheWVyaW5nIHZpb2xhdGlvbnMKKyNpZiBQTEFURk9STShCTEFD
S0JFUlJZKQorI2Vycm9yIEJsYWNrYmVycnkgY3VycmVudGx5IHVzZXMgYSBmb3JrIG9mIHRoaXMg
ZmlsZSBiZWNhdXNlIG9mIGxheWVyaW5nIHZpb2xhdGlvbnMKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFy
Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jaHJvbWl1
bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDEzNDk5MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29va2ll
SmFyLmgiCi0KLSNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEZJ
WE1FOiBVbmZvcmsuIFRoaXMgZmlsZSBpcyBmb3JrZWQgYmVjYXVzZSBhbGwgb3RoZXIgcGxhdGZv
cm1zIHVzZSBOZXR3b3JraW5nQ29udGV4dCB0byBhY2Nlc3MgY29va2llIGphciwgbm90IERvY3Vt
ZW50IG9yIEZyYW1lLgotCi12b2lkIHNldENvb2tpZXMoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgUGxhdGZvcm1TdXBwb3J0
OjpzZXRDb29raWVzKGRvY3VtZW50LCB1cmwsIHZhbHVlKTsKLX0KLQotU3RyaW5nIGNvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgcmV0dXJu
IFBsYXRmb3JtU3VwcG9ydDo6Y29va2llcyhkb2N1bWVudCwgdXJsKTsKLX0KLQotU3RyaW5nIGNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgS1VSTCYgdXJsKQotewotICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOwotfQotCi1ib29sIGNvb2tpZXNFbmFi
bGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBw
b3J0Ojpjb29raWVzRW5hYmxlZChkb2N1bWVudCk7Ci19Ci0KLWJvb2wgZ2V0UmF3Q29va2llcyhj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4m
IHJhd0Nvb2tpZXMpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6cmF3Q29va2llcyhk
b2N1bWVudCwgdXJsLCByYXdDb29raWVzKTsKLX0KLQotdm9pZCBkZWxldGVDb29raWUoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2ll
TmFtZSkKLXsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjpkZWxldGVDb29raWUoZG9jdW1l
bnQsIHVybCwgY29va2llTmFtZSk7Ci19Ci0KLXZvaWQgZ2V0SG9zdG5hbWVzV2l0aENvb2tpZXMo
SGFzaFNldDxTdHJpbmc+JiBob3N0bmFtZXMpCi17Ci0gICAgLy8gRklYTUU6IE5vdCB5ZXQgaW1w
bGVtZW50ZWQKLX0KLQotdm9pZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5n
JiBob3N0bmFtZSkKLXsKLSAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAotfQotCi12
b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQotewotICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVu
dGVkCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU3VwcG9ydC5oCShyZXZpc2lvbiAxMzQ5
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVN1cHBvcnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNiBAQCBjbGFzcyBLVVJMOwogY2xhc3MgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOwogY2xhc3MgV2lkZ2V0OwogCi1zdHJ1Y3QgQ29va2llOwogc3Ry
dWN0IEZvbnRSZW5kZXJTdHlsZTsKIAogLy8gUGxhdGZvcm1TdXBwb3J0IGFuIGludGVyZmFjZSB0
byB0aGUgZW1iZWRkaW5nIGxheWVyIHRoYXQgbGV0cyB0aGUgZW1iZWRkZXIKQEAgLTc4LDE0ICs3
Nyw2IEBAIHN0cnVjdCBGb250UmVuZGVyU3R5bGU7CiAKIGNsYXNzIFBsYXRmb3JtU3VwcG9ydCB7
CiBwdWJsaWM6Ci0gICAgLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVz
KGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAg
IHN0YXRpYyBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAg
ICBzdGF0aWMgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYpOwotICAgIHN0YXRpYyBib29sIHJhd0Nvb2tpZXMoY29uc3QgRG9j
dW1lbnQqLCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKLSAgICBzdGF0aWMgdm9pZCBk
ZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBj
b29raWVOYW1lKTsKLSAgICBzdGF0aWMgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVu
dCopOwotCiAgICAgLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZiBPUyhXSU5ET1dTKQogICAgIHN0YXRpYyBi
b29sIGVuc3VyZUZvbnRMb2FkZWQoSEZPTlQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9OZXR3b3JraW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya2luZ0NvbnRleHQuaAkocmV2aXNpb24gMTM0OTkw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JraW5nQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiwxMiBAQAogI2luY2x1ZGUgIlNjaGVkdWxlUGFp
ci5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKK25hbWVzcGFjZSBXZWJLaXQg
eworY2xhc3MgV2ViQ29va2llSmFyOworfQorI2VuZGlmCisKICNpZiBQTEFURk9STShRVCkKICNp
bmNsdWRlIDxxZ2xvYmFsLmg+CiAjZW5kaWYKQEAgLTYxLDYgKzY3LDEwIEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCisjaWYg
UExBVEZPUk0oQ0hST01JVU0pCisgICAgdmlydHVhbCBXZWJLaXQ6OldlYkNvb2tpZUphciogY29v
a2llSmFyKCkgY29uc3QgPSAwOworI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCiAgICAgdmly
dHVhbCBib29sIG5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBsb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCkgY29uc3QgPSAwOyAvLyBG
SVhNRTogUmVjb25jaWxlIHdpdGggUmVzb3VyY2VIYW5kbGU6OmZvcmNlQ29udGVudFNuaWZmaW5n
KCkuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tp
ZUphckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24gMTM0OTQyKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3Bw
OjEzNDk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29v
a2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb2tpZUphci5oIgorCisjaW5jbHVkZSAiQ29v
a2llLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhNRTogVW5mb3JrLiBUaGlzIGZpbGUg
aXMgZm9ya2VkIGJlY2F1c2UgYWxsIG90aGVyIHBsYXRmb3JtcyB1c2UgTmV0d29ya2luZ0NvbnRl
eHQgdG8gYWNjZXNzIGNvb2tpZSBqYXIsIG5vdCBEb2N1bWVudCBvciBGcmFtZS4KKwordm9pZCBz
ZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQoreworICAgIFBsYXRmb3JtU3VwcG9ydDo6c2V0Q29va2llcyhkb2N1bWVudCwg
dXJsLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tp
ZXMoZG9jdW1lbnQsIHVybCk7Cit9CisKK1N0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBy
ZXR1cm4gUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1
bWVudCwgdXJsKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoZG9j
dW1lbnQpOworfQorCitib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQoreworICAgIHJl
dHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2ll
cyk7Cit9CisKK3ZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgcmV0dXJuIFBs
YXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOwor
fQorCit2b2lkIGdldEhvc3RuYW1lc1dpdGhDb29raWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5h
bWVzKQoreworICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCit9CisKK3ZvaWQgZGVs
ZXRlQ29va2llc0Zvckhvc3RuYW1lKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7CisgICAgLy8g
RklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK30KKwordm9pZCBkZWxldGVBbGxDb29raWVzKCkK
K3sKKyAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVt
L0Nvb2tpZUphckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0Nvb2tpZUphckNocm9taXVtLmNwcAkocmV2aXNpb24gMTM0
OTQyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVK
YXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDU0ICszMiw5NCBAQAogI2luY2x1
ZGUgIkNvb2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN1cHBvcnQuaCIKKyNpbmNsdWRlICJOZXR3b3JraW5n
Q29udGV4dC5oIgorI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJDb29raWUuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViQ29va2llSmFyLmg+CisjaW5jbHVk
ZSA8cHVibGljL1dlYlVSTC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJWZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogVW5mb3JrLiBUaGlzIGZpbGUgaXMgZm9ya2Vk
IGJlY2F1c2UgYWxsIG90aGVyIHBsYXRmb3JtcyB1c2UgTmV0d29ya2luZ0NvbnRleHQgdG8gYWNj
ZXNzIGNvb2tpZSBqYXIsIG5vdCBEb2N1bWVudCBvciBGcmFtZS4KLQotdm9pZCBzZXRDb29raWVz
KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQordm9pZCBzZXRDb29raWVzRnJvbURPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29u
c3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBjb29raWVTdHIpCiB7Ci0gICAgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29raWVzKGRvY3Vt
ZW50LCB1cmwsIHZhbHVlKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybjsKKyAg
ICBXZWJLaXQ6OldlYkNvb2tpZUphciogY29va2llSmFyID0gY29udGV4dC0+Y29va2llSmFyKCk7
CisgICAgaWYgKGNvb2tpZUphcikKKyAgICAgICAgY29va2llSmFyLT5zZXRDb29raWUodXJsLCBm
aXJzdFBhcnR5Rm9yQ29va2llcywgY29va2llU3RyKTsKIH0KIAotU3RyaW5nIGNvb2tpZXMoY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgY29va2llc0Zv
ckRPTShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZv
ckNvb2tpZXMsIGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0
Ojpjb29raWVzKGRvY3VtZW50LCB1cmwpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgIFN0cmluZyByZXN1bHQ7CisgICAgV2ViS2l0OjpXZWJDb29raWVK
YXIqIGNvb2tpZUphciA9IGNvbnRleHQtPmNvb2tpZUphcigpOworICAgIGlmIChjb29raWVKYXIp
CisgICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llcyh1cmwsIGZpcnN0UGFydHlGb3JD
b29raWVzKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1TdHJpbmcgY29va2llUmVxdWVzdEhl
YWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwp
CitTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JDb29raWVzLCBjb25zdCBLVVJMJiB1
cmwpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6Y29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBXZWJLaXQ6OldlYkNvb2tpZUph
ciogY29va2llSmFyID0gY29udGV4dC0+Y29va2llSmFyKCk7CisgICAgaWYgKGNvb2tpZUphcikK
KyAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZSh1cmwsIGZpcnN0UGFydHlGb3JDb29raWVzKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1i
b29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgY29va2ll
c0VuYWJsZWQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGNvb2tpZVVS
TCwgY29uc3QgS1VSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMpCiB7Ci0gICAgcmV0dXJuIFBsYXRm
b3JtU3VwcG9ydDo6Y29va2llc0VuYWJsZWQoZG9jdW1lbnQpOworICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIFdl
YktpdDo6V2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBjb250ZXh0LT5jb29raWVKYXIoKTsKKyAg
ICBpZiAoY29va2llSmFyKQorICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXNFbmFi
bGVkKGNvb2tpZVVSTCwgZmlyc3RQYXJ0eUZvckNvb2tpZXMpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLWJvb2wgZ2V0UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCitib29sIGdldFJhd0Nvb2tp
ZXMoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEtVUkwmIGZpcnN0UGFydHlGb3JD
b29raWVzLCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewot
ICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3
Q29va2llcyk7CisgICAgcmF3Q29va2llcy5jbGVhcigpOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViQ29v
a2llPiB3ZWJDb29raWVzOworICAgIFdlYktpdDo6V2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBj
b250ZXh0LT5jb29raWVKYXIoKTsKKyAgICBpZiAoY29va2llSmFyKQorICAgICAgICBjb29raWVK
YXItPnJhd0Nvb2tpZXModXJsLCBmaXJzdFBhcnR5Rm9yQ29va2llcywgd2ViQ29va2llcyk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdlYkNvb2tpZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgY29uc3QgV2ViS2l0OjpXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07
CisgICAgICAgIENvb2tpZSBjb29raWUod2ViQ29va2llLm5hbWUsIHdlYkNvb2tpZS52YWx1ZSwg
d2ViQ29va2llLmRvbWFpbiwgd2ViQ29va2llLnBhdGgsIHdlYkNvb2tpZS5leHBpcmVzLCB3ZWJD
b29raWUuaHR0cE9ubHksIHdlYkNvb2tpZS5zZWN1cmUsIHdlYkNvb2tpZS5zZXNzaW9uKTsKKyAg
ICAgICAgcmF3Q29va2llcy5hcHBlbmQoY29va2llKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit2b2lkIGRlbGV0ZUNvb2tpZShO
ZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IGNvb2tpZU5hbWUpCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2ll
KGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAg
cmV0dXJuOworICAgIFdlYktpdDo6V2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBjb250ZXh0LT5j
b29raWVKYXIoKTsKKyAgICBpZiAoY29va2llSmFyKQorICAgICAgICBjb29raWVKYXItPmRlbGV0
ZUNvb2tpZSh1cmwsIGNvb2tpZU5hbWUpOwogfQogCi12b2lkIGdldEhvc3RuYW1lc1dpdGhDb29r
aWVzKEhhc2hTZXQ8U3RyaW5nPiYgaG9zdG5hbWVzKQordm9pZCBnZXRIb3N0bmFtZXNXaXRoQ29v
a2llcyhOZXR3b3JraW5nQ29udGV4dCogLypjb250ZXh0Ki8sIEhhc2hTZXQ8U3RyaW5nPiYgLypo
b3N0bmFtZXMqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAogfQogCi12
b2lkIGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9p
ZCBkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoTmV0d29ya2luZ0NvbnRleHQqIC8qY29udGV4dCov
LCBjb25zdCBTdHJpbmcmIC8qaG9zdG5hbWUqLykKIHsKICAgICAvLyBGSVhNRTogTm90IHlldCBp
bXBsZW1lbnRlZAogfQogCi12b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQordm9pZCBkZWxldGVBbGxD
b29raWVzKE5ldHdvcmtpbmdDb250ZXh0KiAvKmNvbnRleHQqLykKIHsKICAgICAvLyBGSVhNRTog
Tm90IHlldCBpbXBsZW1lbnRlZAogfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEzNDk5MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTItMTEtMTYgIE1hcmsgUGlsZ3JpbSAgPHBp
bGdyaW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIGNvb2tpZS1y
ZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIFBsYXRmb3JtU3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTkzNDAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGNvb2tpZS1yZWxhdGVkIGZ1bmN0aW9u
cyBvdXQgb2YgUGxhdGZvcm1TdXBwb3J0IGFuZCBpbXBsZW1lbnQKKyAgICAgICAgbmV3IFBsYXRm
b3JtQ29va2llSmFyIGludGVyZmFjZSB2aWEgTmV0d29ya0NvbnRleHQuCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwOgorICAgICAgICAqIHNyYy9GcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6RnJhbWVOZXR3b3Jr
aW5nQ29udGV4dEltcGw6OmNvb2tpZUphcik6CisgICAgICAgICogc3JjL0ZyYW1lTmV0d29ya2lu
Z0NvbnRleHRJbXBsLmg6CisgICAgICAgIChGcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbCk6Cisg
ICAgICAgICogc3JjL1BsYXRmb3JtU3VwcG9ydC5jcHA6CisKIDIwMTItMTEtMTYgIE1pY2hhZWwg
UHJ1ZXR0ICA8bWljaGFlbEA2OGsub3JnPgogCiAgICAgICAgIEluZGV4ZWREQjogUHJvcGFnYXRl
IERPTVJlcXVlc3RTdGF0ZSB0byBJbmRleGVkREIgYmluZGluZyB1dGlsaXR5IGZ1bmN0aW9ucwpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gMTM0OTkwKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNiAr
Mzk0LDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL0ZpbmRJblBhZ2VDb29yZGluYXRlcy5oJywK
ICAgICAgICAgICAgICAgICAnc3JjL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbC5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvRnJhbWVMb2FkZXJDbGllbnRJbXBsLmgnLAorICAgICAgICAgICAgICAg
ICdzcmMvRnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL0ZyYW1lTmV0d29ya2luZ0NvbnRleHRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMv
R2VvbG9jYXRpb25DbGllbnRQcm94eS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvR2VvbG9j
YXRpb25DbGllbnRQcm94eS5oJywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Zy
YW1lTmV0d29ya2luZ0NvbnRleHRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9GcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1w
bC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRnJhbWVOZXR3b3JraW5nQ29udGV4dEltcGwuaCIKKworI2luY2x1ZGUgIldlYkZy
YW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSA8cHVibGlj
L1BsYXRmb3JtLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJDb29raWVKYXIqIEZyYW1l
TmV0d29ya2luZ0NvbnRleHRJbXBsOjpjb29raWVKYXIoKSBjb25zdAoreworICAgIFdlYkZyYW1l
SW1wbCogZnJhbWVJbXBsID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUoKSk7CisgICAg
aWYgKCFmcmFtZUltcGwgfHwgIWZyYW1lSW1wbC0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybiAw
OworICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZnJhbWVJbXBsLT5jbGllbnQoKS0+Y29v
a2llSmFyKGZyYW1lSW1wbCk7CisgICAgaWYgKCFjb29raWVKYXIpCisgICAgICAgIGNvb2tpZUph
ciA9IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y29va2llSmFyKCk7CisgICAgcmV0dXJu
IGNvb2tpZUphcjsKK30KKworfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRnJh
bWVOZXR3b3JraW5nQ29udGV4dEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9GcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1wbC5oCShyZXZpc2lvbiAxMzQ5OTAp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9GcmFtZU5ldHdvcmtpbmdDb250ZXh0SW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsMTQgQEAKICNkZWZpbmUgRnJhbWVOZXR3
b3JraW5nQ29udGV4dEltcGxfaAogCiAjaW5jbHVkZSAiRnJhbWVOZXR3b3JraW5nQ29udGV4dC5o
IgorI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIEZyYW1lTmV0d29ya2luZ0NvbnRleHRJbXBsIDogcHVibGljIFdlYkNvcmU6OkZy
YW1lTmV0d29ya2luZ0NvbnRleHQgewogcHVibGljOgorICAgIHZpcnR1YWwgV2ViQ29va2llSmFy
KiBjb29raWVKYXIoKSBjb25zdCBPVkVSUklERTsKKwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZy
YW1lTmV0d29ya2luZ0NvbnRleHRJbXBsPiBjcmVhdGUoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGcmFtZU5ldHdvcmtpbmdDb250ZXh0
SW1wbChmcmFtZSkpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1T
dXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0
Zm9ybVN1cHBvcnQuY3BwCShyZXZpc2lvbiAxMzQ5OTApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9QbGF0Zm9ybVN1cHBvcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw4ICs4NCw2
IEBACiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAKICNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SURCRmFjdG9yeUJhY2tlbmRQcm94eS5oIgpAQCAtOTcsOCArOTUsNiBAQAogCiAjaW5jbHVkZSAi
V29ya2VyLmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dFByb3h5LmgiCi0jaW5jbHVkZSA8cHVi
bGljL1dlYkNvb2tpZS5oPgotI2luY2x1ZGUgPHB1YmxpYy9XZWJDb29raWVKYXIuaD4KICNpbmNs
dWRlIDxwdWJsaWMvV2ViTWltZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlZlY3Rv
ci5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0xMDgsODYgKzEwNCw2IEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFdl
YkNvb2tpZUphciogZ2V0Q29va2llSmFyKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAg
ICBXZWJGcmFtZUltcGwqIGZyYW1lSW1wbCA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3Vt
ZW50LT5mcmFtZSgpKTsKLSAgICBpZiAoIWZyYW1lSW1wbCB8fCAhZnJhbWVJbXBsLT5jbGllbnQo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBmcmFt
ZUltcGwtPmNsaWVudCgpLT5jb29raWVKYXIoZnJhbWVJbXBsKTsKLSAgICBpZiAoIWNvb2tpZUph
cikKLSAgICAgICAgY29va2llSmFyID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jb29r
aWVKYXIoKTsKLSAgICByZXR1cm4gY29va2llSmFyOwotfQotCi0vLyBDb29raWVzIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLXZvaWQgUGxhdGZvcm1TdXBwb3J0OjpzZXRDb29raWVzKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0g
Z2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29r
aWVKYXItPnNldENvb2tpZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB2
YWx1ZSk7Ci19Ci0KLVN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZXMoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAg
ICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAg
aWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzKHVybCwg
ZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLVN0cmluZyBQbGF0Zm9ybVN1cHBvcnQ6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVl
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsKQotewotICAgIFN0cmluZyBy
ZXN1bHQ7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1l
bnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29v
a2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNv
b2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBQbGF0Zm9ybVN1cHBvcnQ6
OnJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZl
Y3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAg
ICBXZWJWZWN0b3I8V2ViQ29va2llPiB3ZWJDb29raWVzOwotCi0gICAgV2ViQ29va2llSmFyKiBj
b29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0g
ICAgICAgIGNvb2tpZUphci0+cmF3Q29va2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9y
Q29va2llcygpLCB3ZWJDb29raWVzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3
ZWJDb29raWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvb2tpZSYgd2ViQ29v
a2llID0gd2ViQ29va2llc1tpXTsKLSAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUudmFsdWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgd2ViQ29va2llLmRvbWFpbiwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29r
aWUucGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuZXhwaXJlcywKLSAgICAg
ICAgICAgICAgICAgICAgICB3ZWJDb29raWUuaHR0cE9ubHksCi0gICAgICAgICAgICAgICAgICAg
ICAgd2ViQ29va2llLnNlY3VyZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2Vz
c2lvbik7Ci0gICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNvb2tpZSk7Ci0gICAgfQotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIFBsYXRmb3JtU3VwcG9ydDo6ZGVsZXRlQ29va2llKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tp
ZU5hbWUpCi17Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9j
dW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+ZGVsZXRlQ29v
a2llKHVybCwgY29va2llTmFtZSk7Ci19Ci0KLWJvb2wgUGxhdGZvcm1TdXBwb3J0Ojpjb29raWVz
RW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBm
YWxzZTsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVu
dCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29r
aWVzRW5hYmxlZChkb2N1bWVudC0+Y29va2llVVJMKCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9y
Q29va2llcygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiAvLyBGb250IC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKICNpZiBPUyhXSU5ET1dTKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>