<?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>30416</bug_id>
          
          <creation_ts>2009-10-15 16:37:53 -0700</creation_ts>
          <short_desc>dataTransfer.types (HTML5 drag &amp; drop) should return DOMStringList</short_desc>
          <delta_ts>2016-10-04 13:25:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>39429</dependson>
          <blocked>76198</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>webkit</reporter>
          <assigned_to name="Daniel Cheng">dcheng</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>arv</cc>
    
    <cc>danya.postfactum</cc>
    
    <cc>dcheng</cc>
    
    <cc>d</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>ian</cc>
    
    <cc>japhet</cc>
    
    <cc>me</cc>
    
    <cc>ojan</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>154944</commentid>
    <comment_count>0</comment_count>
    <who name="">webkit</who>
    <bug_when>2009-10-15 16:37:53 -0700</bug_when>
    <thetext>Currently returns flat array. Firefox nightlies implement this correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363039</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-03-05 23:25:56 -0800</bug_when>
    <thetext>*** Bug 55837 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516922</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-12-07 14:26:09 -0800</bug_when>
    <thetext>*** Bug 73968 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541205</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-24 03:02:02 -0800</bug_when>
    <thetext>This is covered by IETC Test:
http://samples.msdn.microsoft.com/ietestcenter/html5/dragdrop/types_attribute.htm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541206</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-24 03:02:16 -0800</bug_when>
    <thetext>http://dev.w3.org/html5/spec/dnd.html#datatransfer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541207</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-24 03:02:26 -0800</bug_when>
    <thetext>And http://www.whatwg.org/specs/web-apps/current-work/#the-datatransfer-interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555817</commentid>
    <comment_count>6</comment_count>
      <attachid>126878</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-02-13 17:55:06 -0800</bug_when>
    <thetext>Created attachment 126878
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555820</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-13 17:58:46 -0800</bug_when>
    <thetext>Attachment 126878 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/edit...&quot; exit_code: 1

Source/WebCore/dom/Clipboard.h:36:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555830</commentid>
    <comment_count>8</comment_count>
      <attachid>126878</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-13 18:10:57 -0800</bug_when>
    <thetext>Comment on attachment 126878
Patch

Attachment 126878 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11522007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555869</commentid>
    <comment_count>9</comment_count>
      <attachid>126878</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-13 19:10:56 -0800</bug_when>
    <thetext>Comment on attachment 126878
Patch

Attachment 126878 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11523020</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555888</commentid>
    <comment_count>10</comment_count>
      <attachid>126878</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-13 19:39:27 -0800</bug_when>
    <thetext>Comment on attachment 126878
Patch

Attachment 126878 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11518075

New failing tests:
http/tests/security/clipboard/clipboard-file-access.html
http/tests/local/fileapi/send-dragged-file.html
http/tests/local/fileapi/file-last-modified.html
http/tests/local/fileapi/send-sliced-dragged-file.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555973</commentid>
    <comment_count>11</comment_count>
      <attachid>126878</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-13 22:46:31 -0800</bug_when>
    <thetext>Comment on attachment 126878
Patch

Attachment 126878 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11515140</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556482</commentid>
    <comment_count>12</comment_count>
      <attachid>127014</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-02-14 12:18:36 -0800</bug_when>
    <thetext>Created attachment 127014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556536</commentid>
    <comment_count>13</comment_count>
      <attachid>127014</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-14 13:13:04 -0800</bug_when>
    <thetext>Comment on attachment 127014
Patch

Attachment 127014 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11523349</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556548</commentid>
    <comment_count>14</comment_count>
      <attachid>127027</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-02-14 13:19:39 -0800</bug_when>
    <thetext>Created attachment 127027
Patch

Fixed compile on all platforms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556730</commentid>
    <comment_count>15</comment_count>
      <attachid>127027</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-14 16:00:10 -0800</bug_when>
    <thetext>Comment on attachment 127027
Patch

I would like to review this before you land.  When I scanned earlier, I had doubts.  I&apos;ll look shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556756</commentid>
    <comment_count>16</comment_count>
      <attachid>127027</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-14 16:34:39 -0800</bug_when>
    <thetext>Comment on attachment 127027
Patch

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

I strongly recommend reading http://www.webkit.org/coding/RefPtr.html if you haven&apos;t already.  I think Señor Levin might also want to take another look.

&gt; Source/WebCore/dom/Clipboard.cpp:151
&gt; +    return types()-&gt;contains(type); 

It&apos;s sad that we&apos;re creating a new object every time. :(  I guess we were doing that before, but it wasn&apos;t as obvious.

Also, this is no longer null-safe.  If platform Clipboard implementations ever return NULL this will crash. :(

&gt; Source/WebCore/platform/chromium/ChromiumDataObject.cpp:115
&gt; +        for (HashSet&lt;String&gt;::const_iterator it = hashedResults.begin();
&gt; +             it != hashedResults.end();
&gt; +             ++it) {

WebKit has no 80c rule.  Also, I&apos;m not sure if we use { } for single line for statements.

&gt; Source/WebCore/platform/chromium/ChromiumDataObject.cpp:118
&gt; +        return results;

This should be results.release();

&gt; Source/WebCore/platform/chromium/ClipboardChromium.cpp:306
&gt;      return results;

results.release();

&gt; Source/WebCore/platform/efl/ClipboardEfl.cpp:84
&gt; +    return 0;

This will cause crashes based on other changes you made. :(

&gt; Source/WebCore/platform/win/ClipboardWin.cpp:489
&gt; +static void addMimeTypesForFormat(PassRefPtr&lt;DOMStringList&gt; results, const FORMATETC&amp; format)

This should not be a PassRefPtr.  This function does not take ownership of the List.  RefPtr&amp; or just a raw ptr is fine.

&gt; LayoutTests/ChangeLog:8
&gt; +        Update tests to use contains() instead of indexOf().

Lame that it doensn&apos;t have indexOf.  I wonder if this will break sites...

http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList

&gt; LayoutTests/ChangeLog:9
&gt; +

I would like to see a test of clipboard.types == clipboard.types.  I suspect they&apos;re !=.  I suspect they were != before (since it looks like our code created a new array for each call, but it would be nice to confirm, and have an expectation for that behavior.  (It would also be nice to know what FF does.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556786</commentid>
    <comment_count>17</comment_count>
      <attachid>127084</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-02-14 17:08:34 -0800</bug_when>
    <thetext>Created attachment 127084
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556815</commentid>
    <comment_count>18</comment_count>
      <attachid>127084</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-14 17:35:19 -0800</bug_when>
    <thetext>Comment on attachment 127084
Patch

Seems OK.  I would like to see you comment on the possible compatibility concern in the ChangeLog.  There is also now a risk that we could be adding types twice.  DOMStringList is ordered and will not remove duplicates like the HashSet would have.  Do you know if we care about the order at all?  Do we match our previous ordering behavior?  (I know these seem like small things, but it&apos;s best to think about them now, instead of when we have strange compatibility troubles.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556817</commentid>
    <comment_count>19</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-02-14 17:37:18 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 127027 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=127027&amp;action=review
&gt; 
&gt; I strongly recommend reading http://www.webkit.org/coding/RefPtr.html if you haven&apos;t already.  I think Señor Levin might also want to take another look.
&gt; 

I&apos;ve fixed all the RefPtr and null issues. Whether or not this is the way we should fix it remains TBD.

&gt; &gt; Source/WebCore/dom/Clipboard.cpp:151
&gt; &gt; +    return types()-&gt;contains(type); 
&gt; 
&gt; It&apos;s sad that we&apos;re creating a new object every time. :(  I guess we were doing that before, but it wasn&apos;t as obvious.
&gt; 
&gt; Also, this is no longer null-safe.  If platform Clipboard implementations ever return NULL this will crash. :(
&gt; 

I&apos;ve addressed this for now by changing all implementations to return a DOMStringList.

&gt; &gt; Source/WebCore/platform/chromium/ChromiumDataObject.cpp:115
&gt; &gt; +        for (HashSet&lt;String&gt;::const_iterator it = hashedResults.begin();
&gt; &gt; +             it != hashedResults.end();
&gt; &gt; +             ++it) {
&gt; 
&gt; WebKit has no 80c rule.  Also, I&apos;m not sure if we use { } for single line for statements.
&gt; 

I&apos;m surprised the style checker didn&apos;t catch this. Fixed.

&gt; &gt; Source/WebCore/platform/chromium/ChromiumDataObject.cpp:118
&gt; &gt; +        return results;
&gt; 
&gt; This should be results.release();
&gt; 
&gt; &gt; Source/WebCore/platform/chromium/ClipboardChromium.cpp:306
&gt; &gt;      return results;
&gt; 
&gt; results.release();
&gt; 
&gt; &gt; Source/WebCore/platform/efl/ClipboardEfl.cpp:84
&gt; &gt; +    return 0;
&gt; 
&gt; This will cause crashes based on other changes you made. :(
&gt; 
&gt; &gt; Source/WebCore/platform/win/ClipboardWin.cpp:489
&gt; &gt; +static void addMimeTypesForFormat(PassRefPtr&lt;DOMStringList&gt; results, const FORMATETC&amp; format)
&gt; 
&gt; This should not be a PassRefPtr.  This function does not take ownership of the List.  RefPtr&amp; or just a raw ptr is fine.
&gt; 
&gt; &gt; LayoutTests/ChangeLog:8
&gt; &gt; +        Update tests to use contains() instead of indexOf().
&gt; 
&gt; Lame that it doensn&apos;t have indexOf.  I wonder if this will break sites...
&gt; 

FF doesn&apos;t support indexOf, so websites that want to work cross-browser /should/ be using if (types.indexOf) { } else if (types.contains) { }.

&gt; http://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMStringList
&gt; 
&gt; &gt; LayoutTests/ChangeLog:9
&gt; &gt; +
&gt; 
&gt; I would like to see a test of clipboard.types == clipboard.types.  I suspect they&apos;re !=.  I suspect they were != before (since it looks like our code created a new array for each call, but it would be nice to confirm, and have an expectation for that behavior.  (It would also be nice to know what FF does.)

Hmm. From the spec:
The types attribute must return a live DOMStringList giving the strings that the following steps would produce. The same object must be returned each time.

Firefox currently returns a different object each time.

Fixing this is probably a separate patch, but I don&apos;t see a way to do it without coming into conflict with layering issues (to be fair, Clipboard and its various implementations are already a pretty big mess in this regard). If we return a HashSet&lt;String&gt;, it&apos;d be impossible to make it live since the Clipboard object won&apos;t know how to tell the glue object to update its view. Note that the &quot;items&quot; and &quot;files&quot; attributes currently suffer from this problem as well, since they aren&apos;t live and always return a copy.

In order to implement a live view like some other things like document.getElementsByname, I think we&apos;d have to create TypesDOMStringList, keep a cached pointer to it in Clipboard once it&apos;s created, and make sure all Clipboard implementations update it as appropriate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556820</commentid>
    <comment_count>20</comment_count>
      <attachid>127084</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-02-14 17:41:00 -0800</bug_when>
    <thetext>Comment on attachment 127084
Patch

(In reply to comment #18)
&gt; (From update of attachment 127084 [details])
&gt; Seems OK.  I would like to see you comment on the possible compatibility concern in the ChangeLog.  There is also now a risk that we could be adding types twice.  DOMStringList is ordered and will not remove duplicates like the HashSet would have.  Do you know if we care about the order at all?  Do we match our previous ordering behavior?  (I know these seem like small things, but it&apos;s best to think about them now, instead of when we have strange compatibility troubles.)

I&apos;ll update the ChangeLogs with my findings about Firefox (IE, to my knowledge, did not previously implement the types attribute at all).

Duplicates: That reminds me--I should add a new layout test for this. Previously, we didn&apos;t conform completely to the spec--it actually allows for &quot;Files&quot; to show up twice in the types attribute if there are files in the drag as well as data associated with the type &quot;Files&quot;.

Order: Unimportant, since we used to use a HashSet, which gave no ordering guarantees as far as I know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557062</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 01:53:01 -0800</bug_when>
    <thetext>Attachment 127014 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/edit...&quot; exit_code: 1

Source/WebCore/dom/Clipboard.h:36:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557070</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 02:09:59 -0800</bug_when>
    <thetext>Attachment 127027 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/edit...&quot; exit_code: 1

Source/WebCore/dom/Clipboard.h:36:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557100</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-15 03:08:56 -0800</bug_when>
    <thetext>Attachment 127084 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/edit...&quot; exit_code: 1

Source/WebCore/dom/Clipboard.h:36:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557788</commentid>
    <comment_count>24</comment_count>
      <attachid>127287</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-02-15 18:08:18 -0800</bug_when>
    <thetext>Created attachment 127287
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557789</commentid>
    <comment_count>25</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-02-15 18:10:38 -0800</bug_when>
    <thetext>Upon further inspection, I realized that &quot;Files&quot; will never appear twice anyway, since we always lowercase the format name in setData().

I still added a test to document the fact that we don&apos;t conform to the spec for returning the same, live object each time for some datatransfer attributes though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557871</commentid>
    <comment_count>26</comment_count>
      <attachid>127287</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-15 20:31:08 -0800</bug_when>
    <thetext>Comment on attachment 127287
Patch

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

LGTM.  Thanks.

&gt; Source/WebCore/platform/chromium/ChromiumDataObject.cpp:113
&gt; +        for (HashSet&lt;String&gt;::const_iterator it = hashedResults.begin(); it != hashedResults.end(); ++it)
&gt; +          results-&gt;append(*it);

I think it would be totally OK to add a DOMStringList::fromHashSet function which did this.  But this is also OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>557939</commentid>
    <comment_count>27</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-02-15 23:26:31 -0800</bug_when>
    <thetext>Committed r107894: &lt;http://trac.webkit.org/changeset/107894&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563365</commentid>
    <comment_count>28</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-02-23 12:25:22 -0800</bug_when>
    <thetext>This is a serious step backwards. Before this change things like indexOf, map, forEach all worked.

DOMStringList is deprecated and should not be used in new APIs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563381</commentid>
    <comment_count>29</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-02-23 12:58:14 -0800</bug_when>
    <thetext>If we intend to roll this change back, we should do it sooner rather than later. As far as I&apos;m aware, WebKit was the only browser that returned an Array rather than a DOMStringList. Once this change goes out to stable versions of Safari and Chrome, pages will stop using the compatibility code they used to need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563450</commentid>
    <comment_count>30</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-23 13:59:24 -0800</bug_when>
    <thetext>I&apos;m all for avoiding DOMStringList, it&apos;s ugly.  But as Daniel points out, we were the odd-man out.  I&apos;m happy to revert this if you plan to lead the evangelizing charge arv?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563510</commentid>
    <comment_count>31</comment_count>
    <who name="Erik Arvidsson">arv</who>
    <bug_when>2012-02-23 14:49:05 -0800</bug_when>
    <thetext>I think we should just add contains to Array.prototype and then we will be compatible with Firefox.

I did start the evangelizing. DOM4 now have a warning that DOMStringList should not be used for new APIs and the discussion about adding Array.prototype.contains to ES6 has started.

Cameron also suggested adding [ArrayClass] to DOMTokenList to make existing cases work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>563526</commentid>
    <comment_count>32</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-02-23 15:03:22 -0800</bug_when>
    <thetext>Since event.dataTransfer.types is not a legacy API and DOMStringList is deprecated, I think the best course of action would be to evangelize changing the property type in the spec to Array rather than add contains to Array.prototype.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564531</commentid>
    <comment_count>33</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-02-24 11:56:32 -0800</bug_when>
    <thetext>So it looks like there&apos;s a good chance we&apos;ll be rolling this change back...
http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-February/034954.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564709</commentid>
    <comment_count>34</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2012-02-24 15:35:53 -0800</bug_when>
    <thetext>As far as the spec goes, do whichever you think makes sense (sounds like returning an Array is it) and then mention on the HTML spec bug that you&apos;ve done that, and I&apos;ll make the spec match the implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567304</commentid>
    <comment_count>35</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-02-28 18:20:32 -0800</bug_when>
    <thetext>Reverted r107894 for reason:

dataTransfer.types should be an Array since DOMStringList is deprecated.

Committed r109182: &lt;http://trac.webkit.org/changeset/109182&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824668</commentid>
    <comment_count>36</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-02-04 12:54:15 -0800</bug_when>
    <thetext>*** Bug 108767 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236332</commentid>
    <comment_count>37</comment_count>
    <who name="Domenic Denicola">d</who>
    <bug_when>2016-10-04 13:25:05 -0700</bug_when>
    <thetext>FWIW years later we&apos;re trying to align all browsers on this using the new FrozenArray construct. I filed https://bugs.webkit.org/show_bug.cgi?id=162932 to track that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126878</attachid>
            <date>2012-02-13 17:55:06 -0800</date>
            <delta_ts>2012-02-14 12:18:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-30416-20120213175504.patch</filename>
            <type>text/plain</type>
            <size>31852</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGJlYzViYTYzMWUzNDc5
NGVkZWJjMDAxMjhkZTljYWZiODQ1OTgxMy4uMDExYjE3NmYwMWFmZTE1ZmQ5MTY2Y2M4YzRkOWY4
MGU2MTllMDVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEyLTAyLTEzICBEYW5p
ZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIGRhdGFUcmFuc2Zlci50
eXBlcyAoSFRNTDUgZHJhZyAmIGRyb3ApIHNob3VsZCByZXR1cm4gRE9NU3RyaW5nTGlzdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA0MTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2xpcGJvYXJkQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBkb20vQ2xpcGJvYXJkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6aGFzU3RyaW5nT2ZUeXBlKToKKyAgICAgICAgKiBkb20v
Q2xpcGJvYXJkLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENsaXBib2FyZCk6Cisg
ICAgICAgICogZG9tL0NsaXBib2FyZC5pZGw6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
Q2hyb21pdW1EYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdDo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9i
amVjdC5oOgorICAgICAgICAoQ2hyb21pdW1EYXRhT2JqZWN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlw
Ym9hcmRDaHJvbWl1bTo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21p
dW06Om1heVVwZGF0ZUl0ZW1zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRDaHJvbWl1bS5oOgorICAgICAgICAoQ2xpcGJvYXJkQ2hyb21pdW0pOgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y29udGFpbnNIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc1VSTCk6
CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNVUkwpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRh
OjpjYW5TbWFydFJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzRnJhZ21l
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2xpcGJvYXJkRWZsOjp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vZWZsL0Ns
aXBib2FyZEVmbC5oOgorICAgICAgICAoQ2xpcGJvYXJkRWZsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEd0azo6
dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaDoKKyAgICAgICAg
KENsaXBib2FyZEd0ayk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oOgor
ICAgICAgICAoQ2xpcGJvYXJkTWFjKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJk
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6YWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZE1hYzo6dHlwZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2Fy
ZFF0Ojp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaDoKKyAgICAg
ICAgKENsaXBib2FyZFF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1pbWVUeXBlc0ZvckZvcm1hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDbGlwYm9hcmRXaW46OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xp
cGJvYXJkV2luLmg6CisgICAgICAgIChDbGlwYm9hcmRXaW4pOgorICAgICAgICAqIHBsYXRmb3Jt
L3d4L0NsaXBib2FyZFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZFd4Ojp0eXBl
cyk6CisgICAgICAgICogcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guaDoKKyAgICAgICAgKENsaXBi
b2FyZFd4KToKKwogMjAxMi0wMi0xMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5j
b20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjogd3JhcCBzZXR0aW5ncyBzZWxlY3RvciB0ZXh0
IGFuZCBhZGRpbmcgYSBydWxlIHdpdGggdW5kb2FibGUgYWN0aW9ucy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAppbmRleCBlZmNlNzliYzA3
YjNkNTE5NDQyYjM4ODg4ZjhkYThlYzEwYWMzYzQ2Li4zNTMyYzc4NTkyNGZhZGRjMmZkMjlmMDc2
NDUxZmNlOTNiMjI4OWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NsaXBib2FyZEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
bGlwYm9hcmRDdXN0b20uY3BwCkBAIC00OCwyMSArNDgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUpTVmFsdWUgSlNDbGlwYm9hcmQ6OnR5
cGVzKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLXsKLSAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9
IGltcGwoKTsKLQotICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcyA9IGNsaXBib2FyZC0+dHlwZXMo
KTsKLSAgICBpZiAodHlwZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0K
LSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gdHlwZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdHlwZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBsaXN0LmFwcGVuZChqc1N0cmluZyhleGVjLCBzdHJpbmdUb1VTdHJpbmcoKml0KSkpOwot
ICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19
Ci0KIEpTVmFsdWUgSlNDbGlwYm9hcmQ6OmNsZWFyRGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAppbmRleCBkODVk
N2EwNmM2YzQzYWQwNjVkYWM0NTY3YjkzYmQzMjUxYTMxYTZhLi41MWQ2ZjJjNzIxMmI4ZDE4MDM3
NjcyZmIxYmY3ZjBiYjY1MzFiYTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3RvbS5jcHAKQEAgLTQ0LDI0ICs0NCw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q2xpcGJv
YXJkOjp0eXBlc0FjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLkNsaXBib2Fy
ZC50eXBlcygpIik7Ci0gICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBWOENsaXBib2FyZDo6dG9O
YXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0KLSAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMgPSBjbGlw
Ym9hcmQtPnR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IHY4OjpOdWxsKCk7Ci0KLSAgICB2ODo6TG9jYWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJy
YXk6Ok5ldyh0eXBlcy5zaXplKCkpOwotICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gdHlwZXMuZW5kKCk7Ci0gICAgaW50IGluZGV4ID0gMDsKLSAgICBmb3IgKEhhc2hT
ZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQsICsraW5kZXgpCi0gICAgICAgIHJlc3VsdC0+U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaW5k
ZXgpLCB2OFN0cmluZygqaXQpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOENsaXBib2FyZDo6Y2xlYXJEYXRhQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5DbGlwYm9hcmQuY2xlYXJEYXRh
KCkiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAKaW5kZXggMDI3OTkyNTE1MmVlMmIxMWUxZDE5
MTAyYjU5MDMyOWJlMzJkM2FkNi4uZWJiODM3ZmY0N2JiODQ4NzVmMDRmMTFiOGQ4ZTkyZWM2OTRk
Y2ZhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJDbGlwYm9hcmQuaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAi
RE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtMTQ3LDcgKzE0OCw3IEBAIGJvb2wgQ2xp
cGJvYXJkOjpoYXNTdHJpbmdPZlR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAogICAgIGlm
IChtX3BvbGljeSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBtX3BvbGljeSAhPSBDbGlwYm9hcmRU
eXBlc1JlYWRhYmxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIHR5
cGVzKCkuY29udGFpbnModHlwZSk7IAorICAgIHJldHVybiB0eXBlcygpLT5jb250YWlucyh0eXBl
KTsgCiB9CiAgICAgCiB2b2lkIENsaXBib2FyZDo6c2V0RHJvcEVmZmVjdChjb25zdCBTdHJpbmcg
JmVmZmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaAppbmRleCBhMDdhZTlmYzU3ZmM1NjU2ZTkzZTYz
MGJlOGE2MjgxMzY3YzE5NTUwLi5kMzM4MjlhNmMxOWMxMWI2ZDMyYTc5MmUzNzE0ZWM0ODgzYjMx
ZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5oCkBAIC0zMyw2ICszMyw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgY2xhc3MgRGF0YVRy
YW5zZmVySXRlbUxpc3Q7CiAgICAgY2xhc3MgRHJhZ0RhdGE7CiAgICAgY2xhc3MgRmlsZUxpc3Q7
CkBAIC02Niw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBi
b29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpID0gMDsK
ICAgICAKICAgICAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICAgICAgdmly
dHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNvbnN0ID0gMDsKICAgICAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0ID0gMDsKIAogICAgICAgICBJ
bnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2RyYWdMb2M7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaWRsIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NsaXBib2FyZC5pZGwKaW5kZXggYjAwNTA0NmNiMTIzMzhhZTA1MzNiNjI4YTNjNDkwZGU4
YTQ4NDRlMy4uYzFjNTg1MGVjMTMwZDAzNmZhN2FlYmZmNzExMGY5YjBlMmZjNjg1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0NsaXBib2FyZC5pZGwKQEAgLTMxLDcgKzMxLDcgQEAgbW9kdWxlIGNvcmUgewogICAg
IGludGVyZmFjZSBDbGlwYm9hcmQgewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW1RyZWF0
UmV0dXJuZWROdWxsU3RyaW5nQXM9VW5kZWZpbmVkXSBET01TdHJpbmcgZHJvcEVmZmVjdDsKICAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPVVuZGVm
aW5lZF0gRE9NU3RyaW5nIGVmZmVjdEFsbG93ZWQ7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBbQ3VzdG9tR2V0dGVyXSBBcnJheSB0eXBlczsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZ0xpc3QgdHlwZXM7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBGaWxlTGlz
dCBmaWxlczsKIAogICAgICAgICBbQ3VzdG9tXSB2b2lkIGNsZWFyRGF0YShpbiBbT3B0aW9uYWxd
IERPTVN0cmluZyB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKaW5kZXggNmFkMTBjN2RhMzRhYzdkNWE3Yjgw
NmMzZDc3MTE5MjhmZDdkNDQ3MS4uNzViNzBmMGYzZWEzYzAxODdjMDY4OTUxOGE0NTZhMWQ3MjA4
YzYwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1EYXRhT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
aHJvbWl1bURhdGFPYmplY3QuY3BwCkBAIC0xMDEsMzAgKzEwMSwzNyBAQCBib29sIENocm9taXVt
RGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0CiAgICAgICAgIHx8IG1fZmlsZUNvbnRlbnQ7CiB9
CiAKLUhhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKK1Bh
c3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gQ2hyb21pdW1EYXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0
CiB7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHJlc3VsdHMgPSBET01TdHJpbmdMaXN0Ojpj
cmVhdGUoKTsKKwogICAgIGlmIChtX3N0b3JhZ2VNb2RlID09IFBhc3RlYm9hcmQpIHsKICAgICAg
ICAgYm9vbCBpZ25vcmVkQ29udGFpbnNGaWxlbmFtZXM7Ci0gICAgICAgIHJldHVybiBQbGF0Zm9y
bVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcyhjdXJyZW50UGFzdGVib2FyZEJ1
ZmZlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmlnbm9yZWRDb250YWluc0ZpbGVuYW1lcyk7CisgICAgICAgIEhhc2hTZXQ8
U3RyaW5nPiBoYXNoZWRSZXN1bHRzID0gUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkQXZh
aWxhYmxlVHlwZXMoCisgICAgICAgICAgICBjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLCAmaWdu
b3JlZENvbnRhaW5zRmlsZW5hbWVzKTsKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hv
dWxkIGJlIGEgdXRpbGl0eSBvZiBET01TdHJpbmdMaXN0LgorICAgICAgICBmb3IgKEhhc2hTZXQ8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoYXNoZWRSZXN1bHRzLmJlZ2luKCk7CisgICAg
ICAgICAgICAgaXQgIT0gaGFzaGVkUmVzdWx0cy5lbmQoKTsKKyAgICAgICAgICAgICArK2l0KSB7
CisgICAgICAgICAgcmVzdWx0cy0+YXBwZW5kKCppdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHJlc3VsdHM7CiAgICAgfQogCi0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7Ci0KICAg
ICBpZiAoIW1fcGxhaW5UZXh0LmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHRzLmFkZChtaW1l
VHlwZVRleHQpOwotICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVRleHRQbGFpbik7CisgICAg
ICAgIHJlc3VsdHMtPmFwcGVuZChtaW1lVHlwZVRleHQpOworICAgICAgICByZXN1bHRzLT5hcHBl
bmQobWltZVR5cGVUZXh0UGxhaW4pOwogICAgIH0KIAogICAgIGlmICghbV91cmlMaXN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0VVJJTGlzdCk7CisgICAgICAg
IHJlc3VsdHMtPmFwcGVuZChtaW1lVHlwZVRleHRVUklMaXN0KTsKIAogICAgIGlmICghbV90ZXh0
SHRtbC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dEhUTUwpOwor
ICAgICAgICByZXN1bHRzLT5hcHBlbmQobWltZVR5cGVUZXh0SFRNTCk7CiAKICAgICBmb3IgKEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvcjo6S2V5cyBpdCA9IG1fY3VzdG9t
RGF0YS5iZWdpbigpLmtleXMoKTsKICAgICAgICAgIGl0ICE9IG1fY3VzdG9tRGF0YS5lbmQoKS5r
ZXlzKCk7ICsraXQpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQoKml0KTsKKyAgICAgICAgcmVzdWx0
cy0+YXBwZW5kKCppdCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdHM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCmlu
ZGV4IDdlNjc1YmY5Mzk5NTBiZmU4ODUyMzRiMDcxZTlhODQyZDE0ZjFiMTguLjlhNmY1NjJkMTFm
NzE2ZTUxNzgyOGI2YTkzOWIzOGE5YzM0ZWNkYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCkBAIC0zMSwxMSArMzEs
MTEgQEAKICNpZm5kZWYgQ2hyb21pdW1EYXRhT2JqZWN0X2gKICNkZWZpbmUgQ2hyb21pdW1EYXRh
T2JqZWN0X2gKIAorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaGFzRGF0YSgpIGNvbnN0OwogCi0gICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7
CisgICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNvbnN0OwogICAgIFN0cmlu
ZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3Q7CiAgICAg
Ym9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hy
b21pdW0uY3BwCmluZGV4IDc1ZjhmNjMwYzA5YzkyMjhjMDMzYWM5YjZhYjZhYWExOTk0MmExZDMu
LmE3MjMwMDRlMTZiOGMxOTQyMGI0YmY5MDYxNGFkOTBmYTA3MWMyMzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKICNpbmNs
dWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXND
aHJvbWl1bS5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJEYXRhVHJh
bnNmZXJJdGVtQ2hyb21pdW0uaCIKICNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9t
aXVtLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTI4OSwxOSArMjkwLDE4IEBAIGJvb2wg
Q2xpcGJvYXJkQ2hyb21pdW06OnBsYXRmb3JtQ2xpcGJvYXJkQ2hhbmdlZCgpIGNvbnN0CiB9CiAK
IC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJk
Q2hyb21pdW06OnR5cGVzKCkgY29uc3QKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gQ2xpcGJv
YXJkQ2hyb21pdW06OnR5cGVzKCkgY29uc3QKIHsKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0
czsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0g
Q2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAg
IHJldHVybiBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKIAogICAgIGlmICghbV9kYXRhT2JqZWN0
KQotICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZ0xpc3Q6
OmNyZWF0ZSgpOwogCi0gICAgcmVzdWx0cyA9IG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKKyAgICBS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gcmVzdWx0cyA9IG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKIAog
ICAgIGlmIChtX2RhdGFPYmplY3QtPmNvbnRhaW5zRmlsZW5hbWVzKCkpCi0gICAgICAgIHJlc3Vs
dHMuYWRkKG1pbWVUeXBlRmlsZXMpOworICAgICAgICByZXN1bHRzLT5hcHBlbmQobWltZVR5cGVG
aWxlcyk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTUxOCw5ICs1MTgsOSBAQCB2b2lk
IENsaXBib2FyZENocm9taXVtOjptYXlVcGRhdGVJdGVtcyhWZWN0b3I8UmVmUHRyPERhdGFUcmFu
c2Zlckl0ZW0+ID4mIGl0ZW1zKQogCiAgICAgaWYgKGlzRm9yQ29weUFuZFBhc3RlKCkgJiYgcG9s
aWN5KCkgPT0gQ2xpcGJvYXJkUmVhZGFibGUpIHsKICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdo
IHRoZSB0eXBlcyBhbmQgYWRkIHRoZW0uCi0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcyA9
IG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gdHlwZXMuYmVnaW4oKTsgaXQgIT0gdHlwZXMuZW5kKCk7ICsraXQp
Ci0gICAgICAgICAgICBpdGVtcy5hcHBlbmQoRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVh
dGVGcm9tUGFzdGVib2FyZCh0aGlzLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCAqaXQpKTsKKyAg
ICAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHR5cGVzID0gbV9kYXRhT2JqZWN0LT50eXBlcygp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHR5cGVzLT5sZW5ndGgoKTsgKytpKQor
ICAgICAgICAgICAgaXRlbXMuYXBwZW5kKERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRl
RnJvbVBhc3RlYm9hcmQodGhpcywgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdHlwZXMtPml0ZW0o
aSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgKaW5kZXggOTI0MjI2ZGYzMjU2
NWU2OTU3MjMwMTA2MzViZjJlNmY0ZmMwMDlhOC4uYWU5ZWI3MTFiMWQ4MmNkYjU4ZWQyMmRhM2Uw
MTIwMmM4MmYwYTU3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgYm9vbCBwbGF0Zm9ybUNsaXBib2FyZENoYW5nZWQoKSBjb25zdDsKIAog
ICAgICAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgICAgICB2aXJ0dWFsIEhh
c2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gdHlwZXMoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENh
Y2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKaW5kZXggM2Q5NGExOWIyNWI4
NjhiMGYwYmUxZTAyZTZlMDk2OTkxZTQzYjk0Yy4uYTdhODUzNTU5OGExZTY3MThmYmVjY2JhYmU5
YmQxM2M4YWY2YTU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKQEAgLTQ1LDE5ICs0NSwxOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIGNvbnRhaW5zSFRNTChjb25zdCBDaHJvbWl1bURhdGFP
YmplY3QqIGRyb3BEYXRhKQogewotICAgIHJldHVybiBkcm9wRGF0YS0+dHlwZXMoKS5jb250YWlu
cyhtaW1lVHlwZVRleHRIVE1MKTsKKyAgICByZXR1cm4gZHJvcERhdGEtPnR5cGVzKCktPmNvbnRh
aW5zKG1pbWVUeXBlVGV4dEhUTUwpOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWluc1VSTChG
cmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBl
VGV4dFVSSUxpc3QpCisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS0+Y29u
dGFpbnMobWltZVR5cGVUZXh0VVJJTGlzdCkKICAgICAgICAgfHwgKGZpbGVuYW1lUG9saWN5ID09
IENvbnZlcnRGaWxlbmFtZXMgJiYgbV9wbGF0Zm9ybURyYWdEYXRhLT5jb250YWluc0ZpbGVuYW1l
cygpKTsKIH0KIAogU3RyaW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVy
c2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKIHsKICAgICBT
dHJpbmcgdXJsOwotICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMo
bWltZVR5cGVUZXh0VVJJTGlzdCkpIHsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLT50eXBl
cygpLT5jb250YWlucyhtaW1lVHlwZVRleHRVUklMaXN0KSkgewogICAgICAgICBib29sIGlnbm9y
ZWRTdWNjZXNzOwogICAgICAgICB1cmwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldERhdGEobWlt
ZVR5cGVVUkwsIGlnbm9yZWRTdWNjZXNzKTsKICAgICAgICAgaWYgKHRpdGxlKQpAQCAtODcsNyAr
ODcsNyBAQCB2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0
KSBjb25zdAogCiBib29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRl
eHRQbGFpbik7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS0+Y29udGFp
bnMobWltZVR5cGVUZXh0UGxhaW4pOwogfQogCiBTdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0
KEZyYW1lKikgY29uc3QKQEAgLTEwOCw4ICsxMDgsOCBAQCBib29sIERyYWdEYXRhOjpjYW5TbWFy
dFJlcGxhY2UoKSBjb25zdAogICAgIC8vIFRoaXMgaXMgYWxsb3dlZCB3aGVuZXZlciB0aGUgZHJh
ZyBkYXRhIGNvbnRhaW5zIGEgJ3JhbmdlJyAoaWUuLAogICAgIC8vIENsaXBib2FyZFdpbjo6d3Jp
dGVSYW5nZSBpcyBjYWxsZWQpLiAgRm9yIGV4YW1wbGUsIGRyYWdnaW5nIGEgbGluawogICAgIC8v
IHNob3VsZCBub3QgcmVzdWx0IGluIGEgc3BhY2UgYmVpbmcgYWRkZWQuCi0gICAgcmV0dXJuIG1f
cGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRQbGFpbikKLSAg
ICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRl
eHRVUklMaXN0KTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLT5jb250
YWlucyhtaW1lVHlwZVRleHRQbGFpbikKKyAgICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+
dHlwZXMoKS0+Y29udGFpbnMobWltZVR5cGVUZXh0VVJJTGlzdCk7CiB9CiAKIGJvb2wgRHJhZ0Rh
dGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSBjb25zdApAQCAtMTQxLDcgKzE0MSw3IEBA
IFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUq
IGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlCiAgICAgICAgIC8vICAgIHJldHVybiBmcmFnbWVudDsK
ICAgICB9CiAKLSAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1p
bWVUeXBlVGV4dEhUTUwpKSB7CisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS0+
Y29udGFpbnMobWltZVR5cGVUZXh0SFRNTCkpIHsKICAgICAgICAgYm9vbCBpZ25vcmVkU3VjY2Vz
czsKICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJh
Z21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLAogICAgICAgICAgICAgbV9wbGF0Zm9y
bURyYWdEYXRhLT5nZXREYXRhKG1pbWVUeXBlVGV4dEhUTUwsIGlnbm9yZWRTdWNjZXNzKSwgbV9w
bGF0Zm9ybURyYWdEYXRhLT5odG1sQmFzZVVybCgpLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93
ZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVm
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcAppbmRl
eCA4ZGM5NWU4NjViMzA4ZTFlNmZiMzE3YjZmZDJiNWRlMmYwZmU0NTQxLi45YTczYzY5OWJlYTUz
MTY1ZGI4YTQwOGZhNTMwODcyMjc3MDhmODQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvQ2xpcGJvYXJkRWZsLmNwcApAQCAtNzcsMTAgKzc3LDEwIEBAIGJvb2wgQ2xpcGJvYXJk
RWZsOjpzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkRWZsOjp0eXBlcygpIGNvbnN0CitQ
YXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IENsaXBib2FyZEVmbDo6dHlwZXMoKSBjb25zdAogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOworICAg
IHJldHVybiAwOwogfQogCiBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRFZmw6OmZpbGVz
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9h
cmRFZmwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuaAppbmRl
eCA1NzUzODJmN2ZhN2E4YjFhOTIwZWViZDQzOWJjNzZkYTMxZTg2YWU2Li41NjQ1NTE5MGY1YzY5
MjRmNTY2M2Y5MmQ4Zjc3MzYzMGI1NmExMjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL0NsaXBib2FyZEVmbC5oCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcg
Z2V0RGF0YShjb25zdCBTdHJpbmcmLCBib29sJikgY29uc3Q7CiAgICAgYm9vbCBzZXREYXRhKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgSGFzaFNldDxTdHJpbmc+IHR5cGVz
KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNvbnN0Owog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAogICAgIElu
dFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvQ2xpcGJvYXJkR3RrLmNwcAppbmRleCBiMWQyYjUyNjk2YzE4ZTBhZDA1YmE0Yzc5YWMwNTBh
Zjc3OTFiODAwLi5hNGU1MzlhY2NhNDE4MjZlNDc1NDE1OGI1NGMzMGM5MTgyNGNmNmFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcApAQCAtMTg5LDMx
ICsxODksMzEgQEAgYm9vbCBDbGlwYm9hcmRHdGs6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBl
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLUhh
c2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRHdGs6OnR5cGVzKCkgY29uc3QKK1Bhc3NSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gQ2xpcGJvYXJkR3RrOjp0eXBlcygpIGNvbnN0CiB7CiAgICAgaWYgKHBvbGlj
eSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVh
ZGFibGUpCi0gICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJu
IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogCiAgICAgaWYgKG1fY2xpcGJvYXJkKQogICAgICAg
ICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5nZXRDbGlwYm9h
cmRDb250ZW50cyhtX2NsaXBib2FyZCk7CiAKLSAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXM7Cisg
ICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHR5cGVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7
CiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7Ci0gICAgICAgIHR5cGVzLmFkZCgi
dGV4dC9wbGFpbiIpOwotICAgICAgICB0eXBlcy5hZGQoIlRleHQiKTsKLSAgICAgICAgdHlwZXMu
YWRkKCJ0ZXh0Iik7CisgICAgICAgIHR5cGVzLT5hcHBlbmQoInRleHQvcGxhaW4iKTsKKyAgICAg
ICAgdHlwZXMtPmFwcGVuZCgiVGV4dCIpOworICAgICAgICB0eXBlcy0+YXBwZW5kKCJ0ZXh0Iik7
CiAgICAgfQogCiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzTWFya3VwKCkpCi0gICAgICAgIHR5
cGVzLmFkZCgidGV4dC9odG1sIik7CisgICAgICAgIHR5cGVzLT5hcHBlbmQoInRleHQvaHRtbCIp
OwogCiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVVJJTGlzdCgpKSB7Ci0gICAgICAgIHR5cGVz
LmFkZCgidGV4dC91cmktbGlzdCIpOwotICAgICAgICB0eXBlcy5hZGQoIlVSTCIpOworICAgICAg
ICB0eXBlcy0+YXBwZW5kKCJ0ZXh0L3VyaS1saXN0Iik7CisgICAgICAgIHR5cGVzLT5hcHBlbmQo
IlVSTCIpOwogICAgIH0KIAogICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc0ZpbGVuYW1lcygpKQot
ICAgICAgICB0eXBlcy5hZGQoIkZpbGVzIik7CisgICAgICAgIHR5cGVzLT5hcHBlbmQoIkZpbGVz
Iik7CiAKICAgICByZXR1cm4gdHlwZXM7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
Q2xpcGJvYXJkR3RrLmgKaW5kZXggZDhiNzUxODI1NGM5OGY5NWNkMTE3YjE0NTY2M2Y3ZmQzMjIz
Y2Y0Yy4uYjcyZTFjODFiZTY5YmU4NzgzMzdmYzk4OWI0MzBiODVkZWYzMTMwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaApAQCAtNTcsNyArNTcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYs
IGJvb2wmKSBjb25zdDsKICAgICAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpOwogCi0gICAgICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNv
bnN0OwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7
CiAKICAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2lu
dCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1h
Yy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCmluZGV4IDI0
ZTliODA2MGEyOWM2OWM4OTE2OTIwOGZjYTc0ZjlmZTdkMTVkNGIuLmM0OTY4YjI4ZDJiMjMzNDQ5
ZDZkNDE5YTM2Y2IxMjNjYTZlZTE3YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9DbGlwYm9hcmRNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
Q2xpcGJvYXJkTWFjLmgKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBoYXNEYXRhKCk7CiAgICAgCiAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAg
ICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENh
Y2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvQ2xpcGJvYXJkTWFjLm1tCmluZGV4IGQzN2M1ZjNmM2YxMzI0MWNjZGQ0MTEzMDg0Mzk3Yzgw
ODY1MDBmNDguLmRhY2QyOGY1M2M5ZjczNDEwYjcxYTY5OWFjNmY5M2Y3NDAyZmJhOGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQpAQCAtMTA3LDE1ICsx
MDcsMTUgQEAgc3RhdGljIFN0cmluZyB1dGlUeXBlRnJvbUNvY29hVHlwZShOU1N0cmluZyAqdHlw
ZSkKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9h
cmRUeXBlc0ZvckNvY29hVHlwZShIYXNoU2V0PFN0cmluZz4mIHJlc3VsdFR5cGVzLCBOU1N0cmlu
ZyAqY29jb2FUeXBlLCBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQpCitzdGF0aWMgdm9pZCBhZGRI
VE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBy
ZXN1bHRUeXBlcywgTlNTdHJpbmcgKmNvY29hVHlwZSwgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJk
KQogewogICAgIC8vIFVUSSBtYXkgbm90IGRvIHRoZXNlIHJpZ2h0LCBzbyBtYWtlIHN1cmUgd2Ug
Z2V0IHRoZSByaWdodCwgcHJlZGljdGFibGUgcmVzdWx0CiAgICAgaWYgKFtjb2NvYVR5cGUgaXNF
cXVhbFRvU3RyaW5nOk5TU3RyaW5nUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgcmVzdWx0VHlwZXMu
YWRkKCJ0ZXh0L3BsYWluIik7CisgICAgICAgIHJlc3VsdFR5cGVzLT5hcHBlbmQoInRleHQvcGxh
aW4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoW2NvY29hVHlwZSBpc0VxdWFs
VG9TdHJpbmc6TlNVUkxQYm9hcmRUeXBlXSkgewotICAgICAgICByZXN1bHRUeXBlcy5hZGQoInRl
eHQvdXJpLWxpc3QiKTsKKyAgICAgICAgcmVzdWx0VHlwZXMtPmFwcGVuZCgidGV4dC91cmktbGlz
dCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChbY29jb2FUeXBlIGlzRXF1YWxU
b1N0cmluZzpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdKSB7CkBAIC0xMjYsMTggKzEyNiwxOCBAQCBz
dGF0aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoSGFzaFNldDxTdHJp
bmc+JiByZXN1bHRUeXBlcywgTlNTdAogICAgICAgICBpZiAoW2ZpbGVMaXN0IGNvdW50XSkgewog
ICAgICAgICAgICAgLy8gSXQgaXMgdW5rbm93biBpZiBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUgYWx3
YXlzIGltcGxpZXMgTlNVUkxQYm9hcmRUeXBlIGluIENvY29hLAogICAgICAgICAgICAgLy8gYnV0
IE5TRmlsZW5hbWVzUGJvYXJkVHlwZSBzaG91bGQgaW1wbHkgYm90aCAndGV4dC91cmktbGlzdCcg
YW5kICdGaWxlcycKLSAgICAgICAgICAgIHJlc3VsdFR5cGVzLmFkZCgidGV4dC91cmktbGlzdCIp
OwotICAgICAgICAgICAgcmVzdWx0VHlwZXMuYWRkKCJGaWxlcyIpOworICAgICAgICAgICAgcmVz
dWx0VHlwZXMtPmFwcGVuZCgidGV4dC91cmktbGlzdCIpOworICAgICAgICAgICAgcmVzdWx0VHlw
ZXMtPmFwcGVuZCgiRmlsZXMiKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIFN0cmluZyB1dGlUeXBlID0gdXRpVHlwZUZyb21Db2NvYVR5cGUoY29jb2FUeXBlKTsKICAg
ICBpZiAoIXV0aVR5cGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdFR5cGVzLmFkZCh1dGlU
eXBlKTsKKyAgICAgICAgcmVzdWx0VHlwZXMtPmFwcGVuZCh1dGlUeXBlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAvLyBObyBtYXBwaW5nLCBqdXN0IHBhc3MgdGhlIHdob2xlIHN0cmlu
ZyB0aG91Z2gKLSAgICByZXN1bHRUeXBlcy5hZGQoY29jb2FUeXBlKTsKKyAgICByZXN1bHRUeXBl
cy0+YXBwZW5kKGNvY29hVHlwZSk7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkTWFjOjpjbGVhckRhdGEo
Y29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtMjcwLDE5ICsyNzAsMTkgQEAgYm9vbCBDbGlwYm9hcmRN
YWM6OnNldERhdGEoY29uc3QgU3RyaW5nICZ0eXBlLCBjb25zdCBTdHJpbmcgJmRhdGEpCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkTWFjOjp0eXBlcygp
IGNvbnN0CitQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IENsaXBib2FyZE1hYzo6dHlwZXMoKSBj
b25zdAogewogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3ko
KSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gSGFzaFNldDxTdHJp
bmc+KCk7CisgICAgICAgIHJldHVybiBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKIAogICAgIE5T
QXJyYXkgKnR5cGVzID0gW21fcGFzdGVib2FyZC5nZXQoKSB0eXBlc107CiAKICAgICAvLyBFbmZv
cmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuICBXZSBjaGVjayBhZnRlciBy
ZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCiAgICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNo
YW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0
aGUgZGF0YS4KICAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBbbV9wYXN0ZWJvYXJkLmdldCgpIGNo
YW5nZUNvdW50XSkKLSAgICAgICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICBy
ZXR1cm4gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVz
dWx0OworICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiByZXN1bHQgPSBET01TdHJpbmdMaXN0Ojpj
cmVhdGUoKTsKICAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW3R5cGVzIGNvdW50XTsKICAgICAvLyBG
SVhNRTogVGhpcyBsb29wIGNvdWxkIGJlIHNwbGl0IGludG8gdHdvIHN0YWdlcy4gT25lIHdoaWNo
IGFkZHMgYWxsIHRoZSBIVE1MNSBzcGVjaWZpZWQgdHlwZXMKICAgICAvLyBhbmQgYSBzZWNvbmQg
d2hpY2ggYWRkcyBhbGwgdGhlIGV4dHJhIHR5cGVzIGZyb20gdGhlIGNvY29hIGNsaXBib2FyZCAo
d2hpY2ggaXMgTWFjLW9ubHkgYmVoYXZpb3IpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
Q2xpcGJvYXJkUXQuY3BwCmluZGV4IDI3MzQ5NTJkOTg2YzEwMjYyMDA3OTlmYzc2NzU3NTMwNTA3
ZDFkNGMuLmE2ZGEzNTc0ZGQ1NGIyY2FkNWY2NWFmYTgwNDRjNTRhNzQ1NzEyMTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKQEAgLTE4OSwxNiArMTg5LDE2
IEBAIGJvb2wgQ2xpcGJvYXJkUXQ6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGRhdGEpCiB9CiAKIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi1IYXNoU2V0
PFN0cmluZz4gQ2xpcGJvYXJkUXQ6OnR5cGVzKCkgY29uc3QKK1Bhc3NSZWZQdHI8RE9NU3RyaW5n
TGlzdD4gQ2xpcGJvYXJkUXQ6OnR5cGVzKCkgY29uc3QKIHsKICAgICBpZiAocG9saWN5KCkgIT0g
Q2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkK
LSAgICAgICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICByZXR1cm4gRE9NU3Ry
aW5nTGlzdDo6Y3JlYXRlKCk7CiAKICAgICBBU1NFUlQobV9yZWFkYWJsZURhdGEpOwotICAgIEhh
c2hTZXQ8U3RyaW5nPiByZXN1bHQ7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHJlc3VsdCA9
IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIFFTdHJpbmdMaXN0IGZvcm1hdHMgPSBtX3Jl
YWRhYmxlRGF0YS0+Zm9ybWF0cygpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9ybWF0cy5j
b3VudCgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hZGQoZm9ybWF0cy5hdChpKSk7CisgICAgICAg
IHJlc3VsdC0+YXBwZW5kKGZvcm1hdHMuYXQoaSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oCmluZGV4IGRjNmJhNDE3M2M4
NzRiMGViZjQzMjdmZDI3ZDNmYjViNzZlZWY1MmUuLmE4NDBiZWNmNmQ5OTZmZTc2MjcxMTdlYmVj
MTkzNTA5OGY3ODEzZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0Ns
aXBib2FyZFF0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQu
aApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogICAgIC8vIGV4dGVuc2lvbnMgYmV5b25k
IElFJ3MgQVBJCi0gICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdHlwZXMoKSBjb25zdDsKICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICB2b2lkIHNl
dERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCmluZGV4IGFhMzgzODgxYWMwNjhjMjc5
ZDkxYzc4ZjNhMWJiOTA2ZGFjY2E2ZDUuLmUwMTYwYjFiODczMTUzMTc2ZmUwNjIyMTM0YTZmMGMy
Y2YzZjY5MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9h
cmRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4u
Y3BwCkBAIC00ODUsMjQgKzQ4NSwyNCBAQCBib29sIENsaXBib2FyZFdpbjo6c2V0RGF0YShjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXN0YXRpYyB2b2lkIGFkZE1pbWVUeXBlc0ZvckZvcm1hdChIYXNoU2V0PFN0cmluZz4mIHJl
c3VsdHMsIGNvbnN0IEZPUk1BVEVUQyYgZm9ybWF0KQorc3RhdGljIHZvaWQgYWRkTWltZVR5cGVz
Rm9yRm9ybWF0KFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gcmVzdWx0cywgY29uc3QgRk9STUFU
RVRDJiBmb3JtYXQpCiB7CiAgICAgLy8gVVJMIGFuZCBUZXh0IGFyZSBwcm92aWRlZCBmb3IgY29t
cGF0aWJpbGl0eSB3aXRoIElFJ3MgbW9kZWwKICAgICBpZiAoZm9ybWF0LmNmRm9ybWF0ID09IHVy
bEZvcm1hdCgpLT5jZkZvcm1hdCB8fCBmb3JtYXQuY2ZGb3JtYXQgPT0gdXJsV0Zvcm1hdCgpLT5j
ZkZvcm1hdCkgewotICAgICAgICByZXN1bHRzLmFkZCgiVVJMIik7Ci0gICAgICAgIHJlc3VsdHMu
YWRkKCJ0ZXh0L3VyaS1saXN0Iik7CisgICAgICAgIHJlc3VsdHMtPmFwcGVuZCgiVVJMIik7Cisg
ICAgICAgIHJlc3VsdHMtPmFwcGVuZCgidGV4dC91cmktbGlzdCIpOwogICAgIH0KIAogICAgIGlm
IChmb3JtYXQuY2ZGb3JtYXQgPT0gcGxhaW5UZXh0V0Zvcm1hdCgpLT5jZkZvcm1hdCB8fCBmb3Jt
YXQuY2ZGb3JtYXQgPT0gcGxhaW5UZXh0Rm9ybWF0KCktPmNmRm9ybWF0KSB7Ci0gICAgICAgIHJl
c3VsdHMuYWRkKCJUZXh0Iik7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJ0ZXh0L3BsYWluIik7Cisg
ICAgICAgIHJlc3VsdHMtPmFwcGVuZCgiVGV4dCIpOworICAgICAgICByZXN1bHRzLT5hcHBlbmQo
InRleHQvcGxhaW4iKTsKICAgICB9CiB9CiAKIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJ
Ci1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkV2luOjp0eXBlcygpIGNvbnN0CitQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IENsaXBib2FyZFdpbjo6dHlwZXMoKSBjb25zdAogeyAKLSAgICBIYXNo
U2V0PFN0cmluZz4gcmVzdWx0czsgCisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHJlc3VsdHMg
PSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJk
UmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9DbGlwYm9hcmRXaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRX
aW4uaAppbmRleCBhMzVkOGI0OGFhYzY4YWU3ZWE5MjdlZDFhNjQ5YWMwMWFlZWRmMDkwLi44YzIy
YzBhMzVmNWU4NTYzN2ViYTI2Y2EwYjNhODJjNzYxMTliMTE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5oCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAg
ICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwog
CiAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICB2aXJ0dWFsIEhhc2hTZXQ8
U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiB0eXBlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmls
ZXMoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3Qg
SW50UG9pbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBi
b2FyZFd4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4LmNwcApp
bmRleCAzMjIxNmE2NTI0MjRiZTM2NmMwYWUyYWY1OTgxODgzMGFlMTg4ZWMxLi4xZDEzNjdmOWMz
OWU1Y2Y5NmJhMzc1YTJiNThjMzdmY2EzNGFiZTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3gvQ2xpcGJvYXJkV3guY3BwCkBAIC03MCwxMSArNzAsMTAgQEAgYm9vbCBDbGlwYm9hcmRX
eDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKIH0KIAog
Ly8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRX
eDo6dHlwZXMoKSBjb25zdCAKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gQ2xpcGJvYXJkV3g6
OnR5cGVzKCkgY29uc3QgCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBIYXNoU2V0PFN0
cmluZz4gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIDA7CiB9CiAKIFBh
c3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZFd4OjpmaWxlcygpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guaAppbmRleCAxMzg2MzVhYWU5NjE1ZWQzMTA2OTRm
NWM1ZGQxMzg2ODJmZWVkOGJiLi5mOTI3MjZhZTZhMDRmMzQzYjBhOTllNDlkZmM3ZGE5YjE0NTBm
ZDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4LmgKQEAgLTQ2LDcg
KzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHNldERhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogICAgIAogICAgICAgICAvLyBleHRl
bnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgICAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0
eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4g
dHlwZXMoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxl
cygpIGNvbnN0OwogICAgIAogICAgICAgICBJbnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlMWY5ZjYzYTdlNDVkODRjOGExODUwMzIyMWZiOWY0OTAzNDE3NTkyLi40OWM1ZDJi
MjRmZjRhMGI1MGFmODAwMGEyYTVhMGY3NjdiNTZmNmRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTItMDItMTMgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgRml4IENsaXBib2FyZDo6dHlwZXMoKSB0byByZXR1cm4gYSBET01TdHJpbmdMaXN0LgorCisg
ICAgICAgIGRhdGFUcmFuc2Zlci50eXBlcyAoSFRNTDUgZHJhZyAmIGRyb3ApIHNob3VsZCByZXR1
cm4gRE9NU3RyaW5nTGlzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzA0MTYKKworICAgICAgICBVcGRhdGUgdGVzdHMgdG8gdXNlIGNvbnRhaW5zKCkg
aW5zdGVhZCBvZiBpbmRleE9mKCkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvY2xpcGJvYXJkLWN1c3RvbURhdGEu
aHRtbDoKKyAgICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvb25wYXN0ZS10ZXh0LWh0bWwtdHlw
ZXMuaHRtbDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9kcmFnLWFuZC1kcm9wLWRhdGFUcmFuc2Zl
ci10eXBlcy1ub2NyYXNoLmh0bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvZHJhZy1jdXN0b21E
YXRhLmh0bWw6CisKIDIwMTItMDItMTMgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUu
Y29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHdyYXAgc2V0dGluZ3Mgc2VsZWN0b3IgdGV4
dCBhbmQgYWRkaW5nIGEgcnVsZSB3aXRoIHVuZG9hYmxlIGFjdGlvbnMuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvY2xpcGJvYXJkLWN1c3RvbURhdGEuaHRtbCBi
L0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jbGlwYm9hcmQtY3VzdG9tRGF0YS5odG1s
CmluZGV4IDMxZDk5YmI3MzhjMWUyNjE0ZWFjOTI3YzEwZjA5NzdiOGM0NjZmNWEuLjBjZTRjYmI3
M2QwMTUwNjcwYmY5ZmZlMzRhY2Y3ZTJkMDdiZmQ0YjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2VkaXRpbmcvcGFzdGVib2FyZC9jbGlwYm9hcmQtY3VzdG9tRGF0YS5odG1sCisrKyBiL0xheW91
dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jbGlwYm9hcmQtY3VzdG9tRGF0YS5odG1sCkBAIC0x
Nyw4ICsxNyw4IEBAIGZ1bmN0aW9uIGNvcHkoZXZlbnQpIHsKIAogZnVuY3Rpb24gcGFzdGUoZXZl
bnQpIHsKICAgICB2YXIgZmFpbGVkID0gZmFsc2U7Ci0gICAgaWYgKGV2ZW50LmNsaXBib2FyZERh
dGEudHlwZXMuaW5kZXhPZigndGV4dC9wbGFpbicpIDwgMAotICAgICAgICB8fCBldmVudC5jbGlw
Ym9hcmREYXRhLnR5cGVzLmluZGV4T2YoJ2N1c3RvbS1kYXRhJykgPCAwKQorICAgIGlmICghZXZl
bnQuY2xpcGJvYXJkRGF0YS50eXBlcy5jb250YWlucygndGV4dC9wbGFpbicpCisgICAgICAgIHx8
ICFldmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmNvbnRhaW5zKCdjdXN0b20tZGF0YScpKQogICAg
ICAgICBmYWlsZWQgPSB0cnVlOwogICAgIGlmIChldmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEo
J3RleHQnKSAhPSAnc2FtcGxlJwogICAgICAgICB8fCBldmVudC5jbGlwYm9hcmREYXRhLmdldERh
dGEoJ2N1c3RvbS1kYXRhJykgIT0gJ2hlbGxvIHdvcmxkJykKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2VkaXRpbmcvcGFzdGVib2FyZC9vbnBhc3RlLXRleHQtaHRtbC10eXBlcy5odG1sIGIvTGF5
b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL29ucGFzdGUtdGV4dC1odG1sLXR5cGVzLmh0bWwK
aW5kZXggM2I3NGNlNDg3YWNmMTM2NzM5MmVmNjVlNTE1YWI0ZDFiODYwZWUzMy4uZjg3ZmJlNTlm
YjVkMTYyNmY4ZDcyY2ZlNTRmMzk2MDY1MTU1NTdlOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
ZWRpdGluZy9wYXN0ZWJvYXJkL29ucGFzdGUtdGV4dC1odG1sLXR5cGVzLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL29ucGFzdGUtdGV4dC1odG1sLXR5cGVzLmh0bWwK
QEAgLTgsOCArOCw3IEBAIGR1cmluZyBhbiBvbnBhc3RlIGV2ZW50LiAgVGhpcyB0ZXN0IHJlcXVp
cmVzIERSVC48L2Rpdj4KIGZ1bmN0aW9uIHBhc3RlKGV2KQogewogICAgIHZhciB0eXBlcyA9IGV2
LmNsaXBib2FyZERhdGEudHlwZXM7Ci0gICAgaWYgKHR5cGVzLmluZGV4T2YoJ3RleHQvcGxhaW4n
KSA+PSAwICYmCi0gICAgICAgIHR5cGVzLmluZGV4T2YoJ3RleHQvaHRtbCcpID49IDApCisgICAg
aWYgKHR5cGVzLmNvbnRhaW5zKCd0ZXh0L3BsYWluJykgJiYgdHlwZXMuY29udGFpbnMoJ3RleHQv
aHRtbCcpKQogICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0cyIpLmlubmVy
SFRNTCA9ICJQQVNTIjsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
ZHJhZy1hbmQtZHJvcC1kYXRhVHJhbnNmZXItdHlwZXMtbm9jcmFzaC5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvZHJhZy1hbmQtZHJvcC1kYXRhVHJhbnNmZXItdHlwZXMtbm9jcmFzaC5o
dG1sCmluZGV4IDIxMjhlNDA4Mzc2Y2VkYTU2YzJkMWExMTBhNTFkNGYxZTEyYTlhMWIuLjM3Mzk2
NTViOThlYjYzYzg2N2M0YThiZjNmMjM0M2ExZjVkODljNGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL2RyYWctYW5kLWRyb3AtZGF0YVRyYW5zZmVyLXR5cGVzLW5vY3Jhc2gu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9kcmFnLWFuZC1kcm9wLWRhdGFUcmFu
c2Zlci10eXBlcy1ub2NyYXNoLmh0bWwKQEAgLTg0LDcgKzg0LDcgQEAKICAgICB7CiAgICAgICAg
IGV2ZW50ID0gZTsKICAgICAgICAgdmFyIGZvcm1hdFR5cGVzID0gZS5kYXRhVHJhbnNmZXIudHlw
ZXM7IC8vIFRoaXMgbGluZSBjYXVzZXMgdGhlIGNyYXNoLgotICAgICAgICBpZiAoZXZlbnQuZGF0
YVRyYW5zZmVyLnR5cGVzLmluZGV4T2YoRk9STUFUX1RZUEUpID09IC0xKQorICAgICAgICBpZiAo
ZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmNvbnRhaW5zKEZPUk1BVF9UWVBFKSA9PSAtMSkKICAg
ICAgICAgICAgIHRlc3RGYWlsZWQoJ2V2ZW50LmRhdGFUcmFuc2Zlci50eXBlcyBzaG91bGQgY29u
dGFpbiBmb3JtYXQgIicgKyBGT1JNQVRfVFlQRSArICciLCBidXQgaXQgZG9lcyBub3QuJyk7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIHRlc3RQYXNzZWQoJ2V2ZW50LmRhdGFUcmFuc2Zlci50
eXBlcyBjb250YWlucyBmb3JtYXQgIicgKyBGT1JNQVRfVFlQRSArICciJyk7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9kcmFnLWN1c3RvbURhdGEuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL2RyYWctY3VzdG9tRGF0YS5odG1sCmluZGV4IGRjYTU3ZWZkNDYyMzU1
ODRmYjllMjc3MGFkM2I5MDI1ZTllNzJmMGQuLmQ4Y2UyNWM2NzM5YTU5OWUxMDlmYTIxMmRlNTJi
Y2ZkY2Q2M2Q3NTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RyYWctY3Vz
dG9tRGF0YS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RyYWctY3VzdG9tRGF0
YS5odG1sCkBAIC0zMiw4ICszMiw4IEBAIGZ1bmN0aW9uIGRyYWdvdmVyKGV2ZW50KSB7CiB9CiBm
dW5jdGlvbiBkcm9wKGV2ZW50KSB7CiAgICAgdmFyIGZhaWxlZCA9IGZhbHNlOwotICAgIGlmIChl
dmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5kZXhPZigndGV4dC9wbGFpbicpIDwgMAotICAgICAg
ICB8fCBldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5kZXhPZignY3VzdG9tLWRhdGEnKSA8IDAp
CisgICAgaWYgKCFldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuY29udGFpbnMoJ3RleHQvcGxhaW4n
KQorICAgICAgICB8fCAhZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmNvbnRhaW5zKCdjdXN0b20t
ZGF0YScpKQogICAgICAgICBmYWlsZWQgPSB0cnVlOwogICAgIGlmIChldmVudC5kYXRhVHJhbnNm
ZXIuZ2V0RGF0YSgndGV4dCcpICE9ICdzYW1wbGUnCiAgICAgICAgIHx8IGV2ZW50LmRhdGFUcmFu
c2Zlci5nZXREYXRhKCdjdXN0b20tZGF0YScpICE9ICdoZWxsbyB3b3JsZCcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127014</attachid>
            <date>2012-02-14 12:18:36 -0800</date>
            <delta_ts>2012-02-14 13:19:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-30416-20120214121835.patch</filename>
            <type>text/plain</type>
            <size>34622</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGJlYzViYTYzMWUzNDc5
NGVkZWJjMDAxMjhkZTljYWZiODQ1OTgxMy4uYWNkZjk5ZjU0MGRlOTQ2YWJlNTU1YTM4Mjc5Y2Iy
NmYxOGI0MmFhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEyLTAyLTE0ICBEYW5p
ZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIGRhdGFUcmFuc2Zlci50
eXBlcyAoSFRNTDUgZHJhZyAmIGRyb3ApIHNob3VsZCByZXR1cm4gRE9NU3RyaW5nTGlzdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA0MTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2xpcGJvYXJkQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBkb20vQ2xpcGJvYXJkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6aGFzU3RyaW5nT2ZUeXBlKToKKyAgICAgICAgKiBkb20v
Q2xpcGJvYXJkLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENsaXBib2FyZCk6Cisg
ICAgICAgICogZG9tL0NsaXBib2FyZC5pZGw6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
Q2hyb21pdW1EYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9taXVtRGF0YU9i
amVjdDo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9i
amVjdC5oOgorICAgICAgICAoQ2hyb21pdW1EYXRhT2JqZWN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlw
Ym9hcmRDaHJvbWl1bTo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21p
dW06Om1heVVwZGF0ZUl0ZW1zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9h
cmRDaHJvbWl1bS5oOgorICAgICAgICAoQ2xpcGJvYXJkQ2hyb21pdW0pOgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y29udGFpbnNIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc1VSTCk6
CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNVUkwpOgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRh
OjpjYW5TbWFydFJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzRnJhZ21l
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2xpcGJvYXJkRWZsOjp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vZWZsL0Ns
aXBib2FyZEVmbC5oOgorICAgICAgICAoQ2xpcGJvYXJkRWZsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEd0azo6
dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuaDoKKyAgICAgICAg
KENsaXBib2FyZEd0ayk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oOgor
ICAgICAgICAoQ2xpcGJvYXJkTWFjKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJk
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6YWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZE1hYzo6dHlwZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2Fy
ZFF0Ojp0eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaDoKKyAgICAg
ICAgKENsaXBib2FyZFF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZE1pbWVUeXBlc0ZvckZvcm1hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDbGlwYm9hcmRXaW46OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xp
cGJvYXJkV2luLmg6CisgICAgICAgIChDbGlwYm9hcmRXaW4pOgorICAgICAgICAqIHBsYXRmb3Jt
L3d4L0NsaXBib2FyZFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZFd4Ojp0eXBl
cyk6CisgICAgICAgICogcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guaDoKKyAgICAgICAgKENsaXBi
b2FyZFd4KToKKwogMjAxMi0wMi0xMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5j
b20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjogd3JhcCBzZXR0aW5ncyBzZWxlY3RvciB0ZXh0
IGFuZCBhZGRpbmcgYSBydWxlIHdpdGggdW5kb2FibGUgYWN0aW9ucy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcAppbmRleCBlZmNlNzliYzA3
YjNkNTE5NDQyYjM4ODg4ZjhkYThlYzEwYWMzYzQ2Li4zNTMyYzc4NTkyNGZhZGRjMmZkMjlmMDc2
NDUxZmNlOTNiMjI4OWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NsaXBib2FyZEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
bGlwYm9hcmRDdXN0b20uY3BwCkBAIC00OCwyMSArNDgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUpTVmFsdWUgSlNDbGlwYm9hcmQ6OnR5
cGVzKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLXsKLSAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9
IGltcGwoKTsKLQotICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcyA9IGNsaXBib2FyZC0+dHlwZXMo
KTsKLSAgICBpZiAodHlwZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0K
LSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gdHlwZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdHlwZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBsaXN0LmFwcGVuZChqc1N0cmluZyhleGVjLCBzdHJpbmdUb1VTdHJpbmcoKml0KSkpOwot
ICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19
Ci0KIEpTVmFsdWUgSlNDbGlwYm9hcmQ6OmNsZWFyRGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAppbmRleCBkODVk
N2EwNmM2YzQzYWQwNjVkYWM0NTY3YjkzYmQzMjUxYTMxYTZhLi41MWQ2ZjJjNzIxMmI4ZDE4MDM3
NjcyZmIxYmY3ZjBiYjY1MzFiYTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3RvbS5jcHAKQEAgLTQ0LDI0ICs0NCw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q2xpcGJv
YXJkOjp0eXBlc0FjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQotewotICAgIElOQ19TVEFUUygiRE9NLkNsaXBib2Fy
ZC50eXBlcygpIik7Ci0gICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBWOENsaXBib2FyZDo6dG9O
YXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0KLSAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMgPSBjbGlw
Ym9hcmQtPnR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IHY4OjpOdWxsKCk7Ci0KLSAgICB2ODo6TG9jYWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJy
YXk6Ok5ldyh0eXBlcy5zaXplKCkpOwotICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gdHlwZXMuZW5kKCk7Ci0gICAgaW50IGluZGV4ID0gMDsKLSAgICBmb3IgKEhhc2hT
ZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQsICsraW5kZXgpCi0gICAgICAgIHJlc3VsdC0+U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaW5k
ZXgpLCB2OFN0cmluZygqaXQpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOENsaXBib2FyZDo6Y2xlYXJEYXRhQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5DbGlwYm9hcmQuY2xlYXJEYXRh
KCkiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAKaW5kZXggMDI3OTkyNTE1MmVlMmIxMWUxZDE5
MTAyYjU5MDMyOWJlMzJkM2FkNi4uZWJiODM3ZmY0N2JiODQ4NzVmMDRmMTFiOGQ4ZTkyZWM2OTRk
Y2ZhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJDbGlwYm9hcmQuaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAi
RE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtMTQ3LDcgKzE0OCw3IEBAIGJvb2wgQ2xp
cGJvYXJkOjpoYXNTdHJpbmdPZlR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAogICAgIGlm
IChtX3BvbGljeSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBtX3BvbGljeSAhPSBDbGlwYm9hcmRU
eXBlc1JlYWRhYmxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIHR5
cGVzKCkuY29udGFpbnModHlwZSk7IAorICAgIHJldHVybiB0eXBlcygpLT5jb250YWlucyh0eXBl
KTsgCiB9CiAgICAgCiB2b2lkIENsaXBib2FyZDo6c2V0RHJvcEVmZmVjdChjb25zdCBTdHJpbmcg
JmVmZmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaAppbmRleCBhMDdhZTlmYzU3ZmM1NjU2ZTkzZTYz
MGJlOGE2MjgxMzY3YzE5NTUwLi5kMzM4MjlhNmMxOWMxMWI2ZDMyYTc5MmUzNzE0ZWM0ODgzYjMx
ZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5oCkBAIC0zMyw2ICszMyw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIERPTVN0cmluZ0xpc3Q7CiAgICAgY2xhc3MgRGF0YVRy
YW5zZmVySXRlbUxpc3Q7CiAgICAgY2xhc3MgRHJhZ0RhdGE7CiAgICAgY2xhc3MgRmlsZUxpc3Q7
CkBAIC02Niw3ICs2Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBi
b29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpID0gMDsK
ICAgICAKICAgICAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICAgICAgdmly
dHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNvbnN0ID0gMDsKICAgICAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0ID0gMDsKIAogICAgICAgICBJ
bnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2RyYWdMb2M7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaWRsIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NsaXBib2FyZC5pZGwKaW5kZXggYjAwNTA0NmNiMTIzMzhhZTA1MzNiNjI4YTNjNDkwZGU4
YTQ4NDRlMy4uYzFjNTg1MGVjMTMwZDAzNmZhN2FlYmZmNzExMGY5YjBlMmZjNjg1YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0NsaXBib2FyZC5pZGwKQEAgLTMxLDcgKzMxLDcgQEAgbW9kdWxlIGNvcmUgewogICAg
IGludGVyZmFjZSBDbGlwYm9hcmQgewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW1RyZWF0
UmV0dXJuZWROdWxsU3RyaW5nQXM9VW5kZWZpbmVkXSBET01TdHJpbmcgZHJvcEVmZmVjdDsKICAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPVVuZGVm
aW5lZF0gRE9NU3RyaW5nIGVmZmVjdEFsbG93ZWQ7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBbQ3VzdG9tR2V0dGVyXSBBcnJheSB0eXBlczsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZ0xpc3QgdHlwZXM7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBGaWxlTGlz
dCBmaWxlczsKIAogICAgICAgICBbQ3VzdG9tXSB2b2lkIGNsZWFyRGF0YShpbiBbT3B0aW9uYWxd
IERPTVN0cmluZyB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKaW5kZXggNmFkMTBjN2RhMzRhYzdkNWE3Yjgw
NmMzZDc3MTE5MjhmZDdkNDQ3MS4uNzViNzBmMGYzZWEzYzAxODdjMDY4OTUxOGE0NTZhMWQ3MjA4
YzYwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1EYXRhT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
aHJvbWl1bURhdGFPYmplY3QuY3BwCkBAIC0xMDEsMzAgKzEwMSwzNyBAQCBib29sIENocm9taXVt
RGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0CiAgICAgICAgIHx8IG1fZmlsZUNvbnRlbnQ7CiB9
CiAKLUhhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKK1Bh
c3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gQ2hyb21pdW1EYXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0
CiB7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHJlc3VsdHMgPSBET01TdHJpbmdMaXN0Ojpj
cmVhdGUoKTsKKwogICAgIGlmIChtX3N0b3JhZ2VNb2RlID09IFBhc3RlYm9hcmQpIHsKICAgICAg
ICAgYm9vbCBpZ25vcmVkQ29udGFpbnNGaWxlbmFtZXM7Ci0gICAgICAgIHJldHVybiBQbGF0Zm9y
bVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcyhjdXJyZW50UGFzdGVib2FyZEJ1
ZmZlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmlnbm9yZWRDb250YWluc0ZpbGVuYW1lcyk7CisgICAgICAgIEhhc2hTZXQ8
U3RyaW5nPiBoYXNoZWRSZXN1bHRzID0gUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkQXZh
aWxhYmxlVHlwZXMoCisgICAgICAgICAgICBjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLCAmaWdu
b3JlZENvbnRhaW5zRmlsZW5hbWVzKTsKKyAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hv
dWxkIGJlIGEgdXRpbGl0eSBvZiBET01TdHJpbmdMaXN0LgorICAgICAgICBmb3IgKEhhc2hTZXQ8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoYXNoZWRSZXN1bHRzLmJlZ2luKCk7CisgICAg
ICAgICAgICAgaXQgIT0gaGFzaGVkUmVzdWx0cy5lbmQoKTsKKyAgICAgICAgICAgICArK2l0KSB7
CisgICAgICAgICAgcmVzdWx0cy0+YXBwZW5kKCppdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHJlc3VsdHM7CiAgICAgfQogCi0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7Ci0KICAg
ICBpZiAoIW1fcGxhaW5UZXh0LmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHRzLmFkZChtaW1l
VHlwZVRleHQpOwotICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVRleHRQbGFpbik7CisgICAg
ICAgIHJlc3VsdHMtPmFwcGVuZChtaW1lVHlwZVRleHQpOworICAgICAgICByZXN1bHRzLT5hcHBl
bmQobWltZVR5cGVUZXh0UGxhaW4pOwogICAgIH0KIAogICAgIGlmICghbV91cmlMaXN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0VVJJTGlzdCk7CisgICAgICAg
IHJlc3VsdHMtPmFwcGVuZChtaW1lVHlwZVRleHRVUklMaXN0KTsKIAogICAgIGlmICghbV90ZXh0
SHRtbC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dEhUTUwpOwor
ICAgICAgICByZXN1bHRzLT5hcHBlbmQobWltZVR5cGVUZXh0SFRNTCk7CiAKICAgICBmb3IgKEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvcjo6S2V5cyBpdCA9IG1fY3VzdG9t
RGF0YS5iZWdpbigpLmtleXMoKTsKICAgICAgICAgIGl0ICE9IG1fY3VzdG9tRGF0YS5lbmQoKS5r
ZXlzKCk7ICsraXQpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQoKml0KTsKKyAgICAgICAgcmVzdWx0
cy0+YXBwZW5kKCppdCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdHM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCmlu
ZGV4IDdlNjc1YmY5Mzk5NTBiZmU4ODUyMzRiMDcxZTlhODQyZDE0ZjFiMTguLjlhNmY1NjJkMTFm
NzE2ZTUxNzgyOGI2YTkzOWIzOGE5YzM0ZWNkYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCkBAIC0zMSwxMSArMzEs
MTEgQEAKICNpZm5kZWYgQ2hyb21pdW1EYXRhT2JqZWN0X2gKICNkZWZpbmUgQ2hyb21pdW1EYXRh
T2JqZWN0X2gKIAorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJLVVJMLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaGFzRGF0YSgpIGNvbnN0OwogCi0gICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7
CisgICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNvbnN0OwogICAgIFN0cmlu
ZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3Q7CiAgICAg
Ym9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hy
b21pdW0uY3BwCmluZGV4IDc1ZjhmNjMwYzA5YzkyMjhjMDMzYWM5YjZhYjZhYWExOTk0MmExZDMu
LmE3MjMwMDRlMTZiOGMxOTQyMGI0YmY5MDYxNGFkOTBmYTA3MWMyMzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKICNpbmNs
dWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXND
aHJvbWl1bS5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJEYXRhVHJh
bnNmZXJJdGVtQ2hyb21pdW0uaCIKICNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9t
aXVtLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTI4OSwxOSArMjkwLDE4IEBAIGJvb2wg
Q2xpcGJvYXJkQ2hyb21pdW06OnBsYXRmb3JtQ2xpcGJvYXJkQ2hhbmdlZCgpIGNvbnN0CiB9CiAK
IC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJk
Q2hyb21pdW06OnR5cGVzKCkgY29uc3QKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gQ2xpcGJv
YXJkQ2hyb21pdW06OnR5cGVzKCkgY29uc3QKIHsKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0
czsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0g
Q2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAg
IHJldHVybiBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKIAogICAgIGlmICghbV9kYXRhT2JqZWN0
KQotICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZ0xpc3Q6
OmNyZWF0ZSgpOwogCi0gICAgcmVzdWx0cyA9IG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKKyAgICBS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gcmVzdWx0cyA9IG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKIAog
ICAgIGlmIChtX2RhdGFPYmplY3QtPmNvbnRhaW5zRmlsZW5hbWVzKCkpCi0gICAgICAgIHJlc3Vs
dHMuYWRkKG1pbWVUeXBlRmlsZXMpOworICAgICAgICByZXN1bHRzLT5hcHBlbmQobWltZVR5cGVG
aWxlcyk7CiAKICAgICByZXR1cm4gcmVzdWx0czsKIH0KQEAgLTUxOCw5ICs1MTgsOSBAQCB2b2lk
IENsaXBib2FyZENocm9taXVtOjptYXlVcGRhdGVJdGVtcyhWZWN0b3I8UmVmUHRyPERhdGFUcmFu
c2Zlckl0ZW0+ID4mIGl0ZW1zKQogCiAgICAgaWYgKGlzRm9yQ29weUFuZFBhc3RlKCkgJiYgcG9s
aWN5KCkgPT0gQ2xpcGJvYXJkUmVhZGFibGUpIHsKICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdo
IHRoZSB0eXBlcyBhbmQgYWRkIHRoZW0uCi0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcyA9
IG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gdHlwZXMuYmVnaW4oKTsgaXQgIT0gdHlwZXMuZW5kKCk7ICsraXQp
Ci0gICAgICAgICAgICBpdGVtcy5hcHBlbmQoRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVh
dGVGcm9tUGFzdGVib2FyZCh0aGlzLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCAqaXQpKTsKKyAg
ICAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHR5cGVzID0gbV9kYXRhT2JqZWN0LT50eXBlcygp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHR5cGVzLT5sZW5ndGgoKTsgKytpKQor
ICAgICAgICAgICAgaXRlbXMuYXBwZW5kKERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRl
RnJvbVBhc3RlYm9hcmQodGhpcywgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdHlwZXMtPml0ZW0o
aSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgKaW5kZXggOTI0MjI2ZGYzMjU2
NWU2OTU3MjMwMTA2MzViZjJlNmY0ZmMwMDlhOC4uYWU5ZWI3MTFiMWQ4MmNkYjU4ZWQyMmRhM2Uw
MTIwMmM4MmYwYTU3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgYm9vbCBwbGF0Zm9ybUNsaXBib2FyZENoYW5nZWQoKSBjb25zdDsKIAog
ICAgICAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgICAgICB2aXJ0dWFsIEhh
c2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gdHlwZXMoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENh
Y2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKaW5kZXggM2Q5NGExOWIyNWI4
NjhiMGYwYmUxZTAyZTZlMDk2OTkxZTQzYjk0Yy4uYTdhODUzNTU5OGExZTY3MThmYmVjY2JhYmU5
YmQxM2M4YWY2YTU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKQEAgLTQ1LDE5ICs0NSwxOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIGNvbnRhaW5zSFRNTChjb25zdCBDaHJvbWl1bURhdGFP
YmplY3QqIGRyb3BEYXRhKQogewotICAgIHJldHVybiBkcm9wRGF0YS0+dHlwZXMoKS5jb250YWlu
cyhtaW1lVHlwZVRleHRIVE1MKTsKKyAgICByZXR1cm4gZHJvcERhdGEtPnR5cGVzKCktPmNvbnRh
aW5zKG1pbWVUeXBlVGV4dEhUTUwpOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWluc1VSTChG
cmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBl
VGV4dFVSSUxpc3QpCisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS0+Y29u
dGFpbnMobWltZVR5cGVUZXh0VVJJTGlzdCkKICAgICAgICAgfHwgKGZpbGVuYW1lUG9saWN5ID09
IENvbnZlcnRGaWxlbmFtZXMgJiYgbV9wbGF0Zm9ybURyYWdEYXRhLT5jb250YWluc0ZpbGVuYW1l
cygpKTsKIH0KIAogU3RyaW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVy
c2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKIHsKICAgICBT
dHJpbmcgdXJsOwotICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMo
bWltZVR5cGVUZXh0VVJJTGlzdCkpIHsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLT50eXBl
cygpLT5jb250YWlucyhtaW1lVHlwZVRleHRVUklMaXN0KSkgewogICAgICAgICBib29sIGlnbm9y
ZWRTdWNjZXNzOwogICAgICAgICB1cmwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldERhdGEobWlt
ZVR5cGVVUkwsIGlnbm9yZWRTdWNjZXNzKTsKICAgICAgICAgaWYgKHRpdGxlKQpAQCAtODcsNyAr
ODcsNyBAQCB2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0
KSBjb25zdAogCiBib29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRl
eHRQbGFpbik7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS0+Y29udGFp
bnMobWltZVR5cGVUZXh0UGxhaW4pOwogfQogCiBTdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0
KEZyYW1lKikgY29uc3QKQEAgLTEwOCw4ICsxMDgsOCBAQCBib29sIERyYWdEYXRhOjpjYW5TbWFy
dFJlcGxhY2UoKSBjb25zdAogICAgIC8vIFRoaXMgaXMgYWxsb3dlZCB3aGVuZXZlciB0aGUgZHJh
ZyBkYXRhIGNvbnRhaW5zIGEgJ3JhbmdlJyAoaWUuLAogICAgIC8vIENsaXBib2FyZFdpbjo6d3Jp
dGVSYW5nZSBpcyBjYWxsZWQpLiAgRm9yIGV4YW1wbGUsIGRyYWdnaW5nIGEgbGluawogICAgIC8v
IHNob3VsZCBub3QgcmVzdWx0IGluIGEgc3BhY2UgYmVpbmcgYWRkZWQuCi0gICAgcmV0dXJuIG1f
cGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRQbGFpbikKLSAg
ICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRl
eHRVUklMaXN0KTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLT5jb250
YWlucyhtaW1lVHlwZVRleHRQbGFpbikKKyAgICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+
dHlwZXMoKS0+Y29udGFpbnMobWltZVR5cGVUZXh0VVJJTGlzdCk7CiB9CiAKIGJvb2wgRHJhZ0Rh
dGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSBjb25zdApAQCAtMTQxLDcgKzE0MSw3IEBA
IFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUq
IGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlCiAgICAgICAgIC8vICAgIHJldHVybiBmcmFnbWVudDsK
ICAgICB9CiAKLSAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1p
bWVUeXBlVGV4dEhUTUwpKSB7CisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS0+
Y29udGFpbnMobWltZVR5cGVUZXh0SFRNTCkpIHsKICAgICAgICAgYm9vbCBpZ25vcmVkU3VjY2Vz
czsKICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJh
Z21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLAogICAgICAgICAgICAgbV9wbGF0Zm9y
bURyYWdEYXRhLT5nZXREYXRhKG1pbWVUeXBlVGV4dEhUTUwsIGlnbm9yZWRTdWNjZXNzKSwgbV9w
bGF0Zm9ybURyYWdEYXRhLT5odG1sQmFzZVVybCgpLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93
ZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVm
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcAppbmRl
eCA4ZGM5NWU4NjViMzA4ZTFlNmZiMzE3YjZmZDJiNWRlMmYwZmU0NTQxLi45YTczYzY5OWJlYTUz
MTY1ZGI4YTQwOGZhNTMwODcyMjc3MDhmODQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvQ2xpcGJvYXJkRWZsLmNwcApAQCAtNzcsMTAgKzc3LDEwIEBAIGJvb2wgQ2xpcGJvYXJk
RWZsOjpzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkRWZsOjp0eXBlcygpIGNvbnN0CitQ
YXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IENsaXBib2FyZEVmbDo6dHlwZXMoKSBjb25zdAogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOworICAg
IHJldHVybiAwOwogfQogCiBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRFZmw6OmZpbGVz
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9h
cmRFZmwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuaAppbmRl
eCA1NzUzODJmN2ZhN2E4YjFhOTIwZWViZDQzOWJjNzZkYTMxZTg2YWU2Li41NjQ1NTE5MGY1YzY5
MjRmNTY2M2Y5MmQ4Zjc3MzYzMGI1NmExMjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL0NsaXBib2FyZEVmbC5oCkBAIC0zOSw3ICszOSw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcg
Z2V0RGF0YShjb25zdCBTdHJpbmcmLCBib29sJikgY29uc3Q7CiAgICAgYm9vbCBzZXREYXRhKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgSGFzaFNldDxTdHJpbmc+IHR5cGVz
KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNvbnN0Owog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAogICAgIElu
dFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvQ2xpcGJvYXJkR3RrLmNwcAppbmRleCBiMWQyYjUyNjk2YzE4ZTBhZDA1YmE0Yzc5YWMwNTBh
Zjc3OTFiODAwLi5mMWJkMzI4YjU0MmM4Yzk5ZjI5Yjc4N2I1OWE5ODcxOGJjYjk5YzBjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcApAQCAtMTgsNiAr
MTgsNyBAQAogI2luY2x1ZGUgIkNsaXBib2FyZEd0ay5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkSW1h
Z2UuaCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIK
ICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCkBAIC0xODksMzEgKzE5
MCwzMSBAQCBib29sIENsaXBib2FyZEd0azo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGVTdHJp
bmcsIGNvbnN0IFN0cmluZyYgZGF0YSkKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAotSGFzaFNl
dDxTdHJpbmc+IENsaXBib2FyZEd0azo6dHlwZXMoKSBjb25zdAorUGFzc1JlZlB0cjxET01TdHJp
bmdMaXN0PiBDbGlwYm9hcmRHdGs6OnR5cGVzKCkgY29uc3QKIHsKICAgICBpZiAocG9saWN5KCkg
IT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJs
ZSkKLSAgICAgICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICByZXR1cm4gRE9N
U3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAKICAgICBpZiAobV9jbGlwYm9hcmQpCiAgICAgICAgIFBh
c3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENv
bnRlbnRzKG1fY2xpcGJvYXJkKTsKIAotICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlczsKKyAgICBS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gdHlwZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKICAg
ICBpZiAobV9kYXRhT2JqZWN0LT5oYXNUZXh0KCkpIHsKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0
L3BsYWluIik7Ci0gICAgICAgIHR5cGVzLmFkZCgiVGV4dCIpOwotICAgICAgICB0eXBlcy5hZGQo
InRleHQiKTsKKyAgICAgICAgdHlwZXMtPmFwcGVuZCgidGV4dC9wbGFpbiIpOworICAgICAgICB0
eXBlcy0+YXBwZW5kKCJUZXh0Iik7CisgICAgICAgIHR5cGVzLT5hcHBlbmQoInRleHQiKTsKICAg
ICB9CiAKICAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkKLSAgICAgICAgdHlwZXMu
YWRkKCJ0ZXh0L2h0bWwiKTsKKyAgICAgICAgdHlwZXMtPmFwcGVuZCgidGV4dC9odG1sIik7CiAK
ICAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkpIHsKLSAgICAgICAgdHlwZXMuYWRk
KCJ0ZXh0L3VyaS1saXN0Iik7Ci0gICAgICAgIHR5cGVzLmFkZCgiVVJMIik7CisgICAgICAgIHR5
cGVzLT5hcHBlbmQoInRleHQvdXJpLWxpc3QiKTsKKyAgICAgICAgdHlwZXMtPmFwcGVuZCgiVVJM
Iik7CiAgICAgfQogCiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzRmlsZW5hbWVzKCkpCi0gICAg
ICAgIHR5cGVzLmFkZCgiRmlsZXMiKTsKKyAgICAgICAgdHlwZXMtPmFwcGVuZCgiRmlsZXMiKTsK
IAogICAgIHJldHVybiB0eXBlczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9DbGlwYm9hcmRHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlw
Ym9hcmRHdGsuaAppbmRleCBkOGI3NTE4MjU0Yzk4Zjk1Y2QxMTdiMTQ1NjYzZjdmZDMyMjNjZjRj
Li5iNzJlMWM4MWJlNjliZTg3ODMzN2ZjOTg5YjQzMGI4NWRlZjMxMzA1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiwgYm9v
bCYpIGNvbnN0OwogICAgICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJik7CiAKLSAgICAgICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsK
KyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHR5cGVzKCkgY29uc3Q7
CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAog
ICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgKaW5kZXggMjRlOWI4
MDYwYTI5YzY5Yzg5MTY5MjA4ZmNhNzRmOWZlN2QxNWQ0Yi4uYzQ5NjhiMjhkMmIyMzM0NDlkNmQ0
MTlhMzZjYjEyM2NhNmVlMTdjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL0NsaXBib2FyZE1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlw
Ym9hcmRNYWMuaApAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhh
c0RhdGEoKTsKICAgICAKICAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZp
cnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IHR5cGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OwogCiAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVk
SW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9D
bGlwYm9hcmRNYWMubW0KaW5kZXggZDM3YzVmM2YzZjEzMjQxY2NkZDQxMTMwODQzOTdjODA4NjUw
MGY0OC4uOGM5YjE4MThkNWE1ZGU0MjlhOGUxMzliZmE4ZTFmNGUwYzQzMDQwMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCkBAIC0yNyw2ICsyNyw3IEBA
CiAjaW1wb3J0ICJDbGlwYm9hcmRNYWMuaCIKIAogI2ltcG9ydCAiRE9NRWxlbWVudEludGVybmFs
LmgiCisjaW1wb3J0ICJET01TdHJpbmdMaXN0LmgiCiAjaW1wb3J0ICJEcmFnQ2xpZW50LmgiCiAj
aW1wb3J0ICJEcmFnQ29udHJvbGxlci5oIgogI2ltcG9ydCAiRHJhZ0RhdGEuaCIKQEAgLTEwNywx
NSArMTA4LDE1IEBAIHN0YXRpYyBTdHJpbmcgdXRpVHlwZUZyb21Db2NvYVR5cGUoTlNTdHJpbmcg
KnR5cGUpCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRIVE1MQ2xp
cGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoSGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywgTlNT
dHJpbmcgKmNvY29hVHlwZSwgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkKQorc3RhdGljIHZvaWQg
YWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gcmVzdWx0VHlwZXMsIE5TU3RyaW5nICpjb2NvYVR5cGUsIE5TUGFzdGVib2FyZCAqcGFzdGVi
b2FyZCkKIHsKICAgICAvLyBVVEkgbWF5IG5vdCBkbyB0aGVzZSByaWdodCwgc28gbWFrZSBzdXJl
IHdlIGdldCB0aGUgcmlnaHQsIHByZWRpY3RhYmxlIHJlc3VsdAogICAgIGlmIChbY29jb2FUeXBl
IGlzRXF1YWxUb1N0cmluZzpOU1N0cmluZ1Bib2FyZFR5cGVdKSB7Ci0gICAgICAgIHJlc3VsdFR5
cGVzLmFkZCgidGV4dC9wbGFpbiIpOworICAgICAgICByZXN1bHRUeXBlcy0+YXBwZW5kKCJ0ZXh0
L3BsYWluIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKFtjb2NvYVR5cGUgaXNF
cXVhbFRvU3RyaW5nOk5TVVJMUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgcmVzdWx0VHlwZXMuYWRk
KCJ0ZXh0L3VyaS1saXN0Iik7CisgICAgICAgIHJlc3VsdFR5cGVzLT5hcHBlbmQoInRleHQvdXJp
LWxpc3QiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoW2NvY29hVHlwZSBpc0Vx
dWFsVG9TdHJpbmc6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXSkgewpAQCAtMTI2LDE4ICsxMjcsMTgg
QEAgc3RhdGljIHZvaWQgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKEhhc2hTZXQ8
U3RyaW5nPiYgcmVzdWx0VHlwZXMsIE5TU3QKICAgICAgICAgaWYgKFtmaWxlTGlzdCBjb3VudF0p
IHsKICAgICAgICAgICAgIC8vIEl0IGlzIHVua25vd24gaWYgTlNGaWxlbmFtZXNQYm9hcmRUeXBl
IGFsd2F5cyBpbXBsaWVzIE5TVVJMUGJvYXJkVHlwZSBpbiBDb2NvYSwKICAgICAgICAgICAgIC8v
IGJ1dCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUgc2hvdWxkIGltcGx5IGJvdGggJ3RleHQvdXJpLWxp
c3QnIGFuZCAnRmlsZXMnCi0gICAgICAgICAgICByZXN1bHRUeXBlcy5hZGQoInRleHQvdXJpLWxp
c3QiKTsKLSAgICAgICAgICAgIHJlc3VsdFR5cGVzLmFkZCgiRmlsZXMiKTsKKyAgICAgICAgICAg
IHJlc3VsdFR5cGVzLT5hcHBlbmQoInRleHQvdXJpLWxpc3QiKTsKKyAgICAgICAgICAgIHJlc3Vs
dFR5cGVzLT5hcHBlbmQoIkZpbGVzIik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBTdHJpbmcgdXRpVHlwZSA9IHV0aVR5cGVGcm9tQ29jb2FUeXBlKGNvY29hVHlwZSk7
CiAgICAgaWYgKCF1dGlUeXBlLmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHRUeXBlcy5hZGQo
dXRpVHlwZSk7CisgICAgICAgIHJlc3VsdFR5cGVzLT5hcHBlbmQodXRpVHlwZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgLy8gTm8gbWFwcGluZywganVzdCBwYXNzIHRoZSB3aG9sZSBz
dHJpbmcgdGhvdWdoCi0gICAgcmVzdWx0VHlwZXMuYWRkKGNvY29hVHlwZSk7CisgICAgcmVzdWx0
VHlwZXMtPmFwcGVuZChjb2NvYVR5cGUpOwogfQogCiB2b2lkIENsaXBib2FyZE1hYzo6Y2xlYXJE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKQEAgLTI3MCwxOSArMjcxLDE5IEBAIGJvb2wgQ2xpcGJv
YXJkTWFjOjpzZXREYXRhKGNvbnN0IFN0cmluZyAmdHlwZSwgY29uc3QgU3RyaW5nICZkYXRhKQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZE1hYzo6dHlw
ZXMoKSBjb25zdAorUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBDbGlwYm9hcmRNYWM6OnR5cGVz
KCkgY29uc3QKIHsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9s
aWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIEhhc2hTZXQ8
U3RyaW5nPigpOworICAgICAgICByZXR1cm4gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAKICAg
ICBOU0FycmF5ICp0eXBlcyA9IFttX3Bhc3RlYm9hcmQuZ2V0KCkgdHlwZXNdOwogCiAgICAgLy8g
RW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiAgV2UgY2hlY2sgYWZ0
ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQogICAgIC8vIHN1cmUgaXQgZG9lc24n
dCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3Np
bmcgdGhlIGRhdGEuCiAgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gW21fcGFzdGVib2FyZC5nZXQo
KSBjaGFuZ2VDb3VudF0pCi0gICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAg
ICAgcmV0dXJuIERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogCi0gICAgSGFzaFNldDxTdHJpbmc+
IHJlc3VsdDsKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gcmVzdWx0ID0gRE9NU3RyaW5nTGlz
dDo6Y3JlYXRlKCk7CiAgICAgTlNVSW50ZWdlciBjb3VudCA9IFt0eXBlcyBjb3VudF07CiAgICAg
Ly8gRklYTUU6IFRoaXMgbG9vcCBjb3VsZCBiZSBzcGxpdCBpbnRvIHR3byBzdGFnZXMuIE9uZSB3
aGljaCBhZGRzIGFsbCB0aGUgSFRNTDUgc3BlY2lmaWVkIHR5cGVzCiAgICAgLy8gYW5kIGEgc2Vj
b25kIHdoaWNoIGFkZHMgYWxsIHRoZSBleHRyYSB0eXBlcyBmcm9tIHRoZSBjb2NvYSBjbGlwYm9h
cmQgKHdoaWNoIGlzIE1hYy1vbmx5IGJlaGF2aW9yKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L0NsaXBib2FyZFF0LmNwcAppbmRleCAyNzM0OTUyZDk4NmMxMDI2MjAwNzk5ZmM3Njc1NzUz
MDUwN2QxZDRjLi4yOGNhOTIzMTQyMTJlNjg4NGQ2NDgzMWVkZjkyMDI0ZWE3YmMzYjMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiQ2xpcGJvYXJkUXQuaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgi
CisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1M
aXN0UXQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgiCkBA
IC0xODksMTYgKzE5MCwxNiBAQCBib29sIENsaXBib2FyZFF0OjpzZXREYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogfQogCiAvLyBleHRlbnNpb25zIGJleW9uZCBJ
RSdzIEFQSQotSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZFF0Ojp0eXBlcygpIGNvbnN0CitQYXNz
UmVmUHRyPERPTVN0cmluZ0xpc3Q+IENsaXBib2FyZFF0Ojp0eXBlcygpIGNvbnN0CiB7CiAgICAg
aWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2Fy
ZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAg
ICAgcmV0dXJuIERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogCiAgICAgQVNTRVJUKG1fcmVhZGFi
bGVEYXRhKTsKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIFJlZlB0cjxET01TdHJp
bmdMaXN0PiByZXN1bHQgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKICAgICBRU3RyaW5nTGlz
dCBmb3JtYXRzID0gbV9yZWFkYWJsZURhdGEtPmZvcm1hdHMoKTsKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGZvcm1hdHMuY291bnQoKTsgKytpKQotICAgICAgICByZXN1bHQuYWRkKGZvcm1hdHMu
YXQoaSkpOworICAgICAgICByZXN1bHQtPmFwcGVuZChmb3JtYXRzLmF0KGkpKTsKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9D
bGlwYm9hcmRRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaApp
bmRleCBkYzZiYTQxNzNjODc0YjBlYmY0MzI3ZmQyN2QzZmI1Yjc2ZWVmNTJlLi5hODQwYmVjZjZk
OTk2ZmU3NjI3MTE3ZWJlYzE5MzUwOThmNzgxM2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L0NsaXBib2FyZFF0LmgKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKICAgICAvLyBl
eHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5
cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHR5cGVz
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0
OwogCiAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAppbmRleCBh
YTM4Mzg4MWFjMDY4YzI3OWQ5MWM3OGYzYTFiYjkwNmRhY2NhNmQ1Li5iMDc4YmJjNTk3YzFjNzQ2
MjE2Nzg4NmM5NzA2YWY5ZDdiM2RlNzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vQ2xpcGJvYXJkV2luLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVk
SW1hZ2UuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNXaW4uaCIKKyNpbmNsdWRlICJE
T01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEcmFnRGF0
YS5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgpAQCAtNDg1LDI0ICs0ODYsMjQgQEAgYm9vbCBDbGlw
Ym9hcmRXaW46OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCBhZGRNaW1lVHlwZXNGb3JGb3Jt
YXQoSGFzaFNldDxTdHJpbmc+JiByZXN1bHRzLCBjb25zdCBGT1JNQVRFVEMmIGZvcm1hdCkKK3N0
YXRpYyB2b2lkIGFkZE1pbWVUeXBlc0ZvckZvcm1hdChQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IHJlc3VsdHMsIGNvbnN0IEZPUk1BVEVUQyYgZm9ybWF0KQogewogICAgIC8vIFVSTCBhbmQgVGV4
dCBhcmUgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBJRSdzIG1vZGVsCiAgICAgaWYg
KGZvcm1hdC5jZkZvcm1hdCA9PSB1cmxGb3JtYXQoKS0+Y2ZGb3JtYXQgfHwgZm9ybWF0LmNmRm9y
bWF0ID09IHVybFdGb3JtYXQoKS0+Y2ZGb3JtYXQpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQoIlVS
TCIpOwotICAgICAgICByZXN1bHRzLmFkZCgidGV4dC91cmktbGlzdCIpOworICAgICAgICByZXN1
bHRzLT5hcHBlbmQoIlVSTCIpOworICAgICAgICByZXN1bHRzLT5hcHBlbmQoInRleHQvdXJpLWxp
c3QiKTsKICAgICB9CiAKICAgICBpZiAoZm9ybWF0LmNmRm9ybWF0ID09IHBsYWluVGV4dFdGb3Jt
YXQoKS0+Y2ZGb3JtYXQgfHwgZm9ybWF0LmNmRm9ybWF0ID09IHBsYWluVGV4dEZvcm1hdCgpLT5j
ZkZvcm1hdCkgewotICAgICAgICByZXN1bHRzLmFkZCgiVGV4dCIpOwotICAgICAgICByZXN1bHRz
LmFkZCgidGV4dC9wbGFpbiIpOworICAgICAgICByZXN1bHRzLT5hcHBlbmQoIlRleHQiKTsKKyAg
ICAgICAgcmVzdWx0cy0+YXBwZW5kKCJ0ZXh0L3BsYWluIik7CiAgICAgfQogfQogCiAvLyBleHRl
bnNpb25zIGJleW9uZCBJRSdzIEFQSQotSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZFdpbjo6dHlw
ZXMoKSBjb25zdAorUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBDbGlwYm9hcmRXaW46OnR5cGVz
KCkgY29uc3QKIHsgCi0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7IAorICAgIFJlZlB0cjxE
T01TdHJpbmdMaXN0PiByZXN1bHRzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgaWYg
KHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5
cGVzUmVhZGFibGUpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmgKaW5kZXggYTM1ZDhiNDhhYWM2OGFlN2VhOTI3ZWQx
YTY0OWFjMDFhZWVkZjA5MC4uOGMyMmMwYTM1ZjVlODU2MzdlYmEyNmNhMGIzYTgyYzc2MTE5YjEx
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uaApAQCAtNjQs
NyArNjQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiBkYXRhKTsKIAogICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJ
Ci0gICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldERyYWdJbWFn
ZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93eC9DbGlwYm9hcmRXeC5jcHAKaW5kZXggMzIyMTZhNjUyNDI0YmUzNjZjMGFlMmFmNTk4MTg4
MzBhZTE4OGVjMS4uMWQxMzY3ZjljMzllNWNmOTZiYTM3NWEyYjU4YzM3ZmNhMzRhYmU2NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4LmNwcApAQCAtNzAsMTEgKzcw
LDEwIEBAIGJvb2wgQ2xpcGJvYXJkV3g6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25z
dCBTdHJpbmcmIGRhdGEpCiB9CiAKIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi1IYXNo
U2V0PFN0cmluZz4gQ2xpcGJvYXJkV3g6OnR5cGVzKCkgY29uc3QgCitQYXNzUmVmUHRyPERPTVN0
cmluZ0xpc3Q+IENsaXBib2FyZFd4Ojp0eXBlcygpIGNvbnN0IAogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKLSAgICByZXR1cm4gcmVzdWx0Owor
ICAgIHJldHVybiAwOwogfQogCiBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRXeDo6Zmls
ZXMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ2xpcGJv
YXJkV3guaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4LmgKaW5kZXgg
MTM4NjM1YWFlOTYxNWVkMzEwNjk0ZjVjNWRkMTM4NjgyZmVlZDhiYi4uZjkyNzI2YWU2YTA0ZjM0
M2IwYTk5ZTQ5ZGZjN2RhOWIxNDUwZmQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd3gvQ2xpcGJvYXJkV3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9D
bGlwYm9hcmRXeC5oCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsK
ICAgICAKICAgICAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICAgICAgdmly
dHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPERPTVN0cmluZ0xpc3Q+IHR5cGVzKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKICAgICAKICAgICAgICAgSW50UG9pbnQg
ZHJhZ0xvY2F0aW9uKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZTFmOWY2M2E3ZTQ1ZDg0YzhhMTg1MDMyMjFm
YjlmNDkwMzQxNzU5Mi4uMjNjZGZhOThhYTdjMTU0N2ViMDQ1YzZmYmQ5YTAyZjE5Mzc1MGY0MyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAyLTE0ICBEYW5pZWwgQ2hlbmcgIDxkY2hlbmdA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIEZpeCBDbGlwYm9hcmQ6OnR5cGVzKCkgdG8gcmV0dXJu
IGEgRE9NU3RyaW5nTGlzdC4KKworICAgICAgICBkYXRhVHJhbnNmZXIudHlwZXMgKEhUTUw1IGRy
YWcgJiBkcm9wKSBzaG91bGQgcmV0dXJuIERPTVN0cmluZ0xpc3QKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMwNDE2CisKKyAgICAgICAgVXBkYXRlIHRl
c3RzIHRvIHVzZSBjb250YWlucygpIGluc3RlYWQgb2YgaW5kZXhPZigpLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJk
L2NsaXBib2FyZC1jdXN0b21EYXRhLmh0bWw6CisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJk
L29ucGFzdGUtdGV4dC1odG1sLXR5cGVzLmh0bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvZHJh
Zy1hbmQtZHJvcC1kYXRhVHJhbnNmZXItdHlwZXMtbm9jcmFzaC5odG1sOgorICAgICAgICAqIGZh
c3QvZXZlbnRzL2RyYWctY3VzdG9tRGF0YS5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMvbG9j
YWwvZmlsZWFwaS9yZXNvdXJjZXMvc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpz
OgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL3NjcmlwdC10ZXN0cy9j
bGlwYm9hcmQtZmlsZS1hY2Nlc3MuanM6CisgICAgICAgIChjaGVja0ZvckV2ZW50VHJhbnNmZXJU
eXBlKToKKwogMjAxMi0wMi0xMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+
CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjogd3JhcCBzZXR0aW5ncyBzZWxlY3RvciB0ZXh0IGFu
ZCBhZGRpbmcgYSBydWxlIHdpdGggdW5kb2FibGUgYWN0aW9ucy4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jbGlwYm9hcmQtY3VzdG9tRGF0YS5odG1sIGIvTGF5
b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2NsaXBib2FyZC1jdXN0b21EYXRhLmh0bWwKaW5k
ZXggMzFkOTliYjczOGMxZTI2MTRlYWM5MjdjMTBmMDk3N2I4YzQ2NmY1YS4uMGNlNGNiYjczZDAx
NTA2NzBiZjlmZmUzNGFjZjdlMmQwN2JmZDRiNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRp
dGluZy9wYXN0ZWJvYXJkL2NsaXBib2FyZC1jdXN0b21EYXRhLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZWRpdGluZy9wYXN0ZWJvYXJkL2NsaXBib2FyZC1jdXN0b21EYXRhLmh0bWwKQEAgLTE3LDgg
KzE3LDggQEAgZnVuY3Rpb24gY29weShldmVudCkgewogCiBmdW5jdGlvbiBwYXN0ZShldmVudCkg
ewogICAgIHZhciBmYWlsZWQgPSBmYWxzZTsKLSAgICBpZiAoZXZlbnQuY2xpcGJvYXJkRGF0YS50
eXBlcy5pbmRleE9mKCd0ZXh0L3BsYWluJykgPCAwCi0gICAgICAgIHx8IGV2ZW50LmNsaXBib2Fy
ZERhdGEudHlwZXMuaW5kZXhPZignY3VzdG9tLWRhdGEnKSA8IDApCisgICAgaWYgKCFldmVudC5j
bGlwYm9hcmREYXRhLnR5cGVzLmNvbnRhaW5zKCd0ZXh0L3BsYWluJykKKyAgICAgICAgfHwgIWV2
ZW50LmNsaXBib2FyZERhdGEudHlwZXMuY29udGFpbnMoJ2N1c3RvbS1kYXRhJykpCiAgICAgICAg
IGZhaWxlZCA9IHRydWU7CiAgICAgaWYgKGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4
dCcpICE9ICdzYW1wbGUnCiAgICAgICAgIHx8IGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgn
Y3VzdG9tLWRhdGEnKSAhPSAnaGVsbG8gd29ybGQnKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZWRpdGluZy9wYXN0ZWJvYXJkL29ucGFzdGUtdGV4dC1odG1sLXR5cGVzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvb25wYXN0ZS10ZXh0LWh0bWwtdHlwZXMuaHRtbAppbmRl
eCAzYjc0Y2U0ODdhY2YxMzY3MzkyZWY2NWU1MTVhYjRkMWI4NjBlZTMzLi5mODdmYmU1OWZiNWQx
NjI2ZjhkNzJjZmU1NGYzOTYwNjUxNTU1N2U5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0
aW5nL3Bhc3RlYm9hcmQvb25wYXN0ZS10ZXh0LWh0bWwtdHlwZXMuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvb25wYXN0ZS10ZXh0LWh0bWwtdHlwZXMuaHRtbApAQCAt
OCw4ICs4LDcgQEAgZHVyaW5nIGFuIG9ucGFzdGUgZXZlbnQuICBUaGlzIHRlc3QgcmVxdWlyZXMg
RFJULjwvZGl2PgogZnVuY3Rpb24gcGFzdGUoZXYpCiB7CiAgICAgdmFyIHR5cGVzID0gZXYuY2xp
cGJvYXJkRGF0YS50eXBlczsKLSAgICBpZiAodHlwZXMuaW5kZXhPZigndGV4dC9wbGFpbicpID49
IDAgJiYKLSAgICAgICAgdHlwZXMuaW5kZXhPZigndGV4dC9odG1sJykgPj0gMCkKKyAgICBpZiAo
dHlwZXMuY29udGFpbnMoJ3RleHQvcGxhaW4nKSAmJiB0eXBlcy5jb250YWlucygndGV4dC9odG1s
JykpCiAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRzIikuaW5uZXJIVE1M
ID0gIlBBU1MiOwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9kcmFn
LWFuZC1kcm9wLWRhdGFUcmFuc2Zlci10eXBlcy1ub2NyYXNoLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2V2ZW50cy9kcmFnLWFuZC1kcm9wLWRhdGFUcmFuc2Zlci10eXBlcy1ub2NyYXNoLmh0bWwK
aW5kZXggMjEyOGU0MDgzNzZjZWRhNTZjMmQxYTExMGE1MWQ0ZjFlMTJhOWExYi4uMzczOTY1NWI5
OGViNjNjODY3YzRhOGJmM2YyMzQzYTFmNWQ4OWM0ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvZHJhZy1hbmQtZHJvcC1kYXRhVHJhbnNmZXItdHlwZXMtbm9jcmFzaC5odG1s
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RyYWctYW5kLWRyb3AtZGF0YVRyYW5zZmVy
LXR5cGVzLW5vY3Jhc2guaHRtbApAQCAtODQsNyArODQsNyBAQAogICAgIHsKICAgICAgICAgZXZl
bnQgPSBlOwogICAgICAgICB2YXIgZm9ybWF0VHlwZXMgPSBlLmRhdGFUcmFuc2Zlci50eXBlczsg
Ly8gVGhpcyBsaW5lIGNhdXNlcyB0aGUgY3Jhc2guCi0gICAgICAgIGlmIChldmVudC5kYXRhVHJh
bnNmZXIudHlwZXMuaW5kZXhPZihGT1JNQVRfVFlQRSkgPT0gLTEpCisgICAgICAgIGlmIChldmVu
dC5kYXRhVHJhbnNmZXIudHlwZXMuY29udGFpbnMoRk9STUFUX1RZUEUpID09IC0xKQogICAgICAg
ICAgICAgdGVzdEZhaWxlZCgnZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzIHNob3VsZCBjb250YWlu
IGZvcm1hdCAiJyArIEZPUk1BVF9UWVBFICsgJyIsIGJ1dCBpdCBkb2VzIG5vdC4nKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgdGVzdFBhc3NlZCgnZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVz
IGNvbnRhaW5zIGZvcm1hdCAiJyArIEZPUk1BVF9UWVBFICsgJyInKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RyYWctY3VzdG9tRGF0YS5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvZHJhZy1jdXN0b21EYXRhLmh0bWwKaW5kZXggZGNhNTdlZmQ0NjIzNTU4NGZi
OWUyNzcwYWQzYjkwMjVlOWU3MmYwZC4uZDhjZTI1YzY3MzlhNTk5ZTEwOWZhMjEyZGU1MmJjZmRj
ZDYzZDc1OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZHJhZy1jdXN0b21E
YXRhLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZHJhZy1jdXN0b21EYXRhLmh0
bWwKQEAgLTMyLDggKzMyLDggQEAgZnVuY3Rpb24gZHJhZ292ZXIoZXZlbnQpIHsKIH0KIGZ1bmN0
aW9uIGRyb3AoZXZlbnQpIHsKICAgICB2YXIgZmFpbGVkID0gZmFsc2U7Ci0gICAgaWYgKGV2ZW50
LmRhdGFUcmFuc2Zlci50eXBlcy5pbmRleE9mKCd0ZXh0L3BsYWluJykgPCAwCi0gICAgICAgIHx8
IGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5pbmRleE9mKCdjdXN0b20tZGF0YScpIDwgMCkKKyAg
ICBpZiAoIWV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5jb250YWlucygndGV4dC9wbGFpbicpCisg
ICAgICAgIHx8ICFldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuY29udGFpbnMoJ2N1c3RvbS1kYXRh
JykpCiAgICAgICAgIGZhaWxlZCA9IHRydWU7CiAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlci5n
ZXREYXRhKCd0ZXh0JykgIT0gJ3NhbXBsZScKICAgICAgICAgfHwgZXZlbnQuZGF0YVRyYW5zZmVy
LmdldERhdGEoJ2N1c3RvbS1kYXRhJykgIT0gJ2hlbGxvIHdvcmxkJykKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvZmlsZWFwaS9yZXNvdXJjZXMvc2V0dXAtZmlsZS1p
bnB1dC1lbGVtZW50LWZvci1kcmFnLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9m
aWxlYXBpL3Jlc291cmNlcy9zZXR1cC1maWxlLWlucHV0LWVsZW1lbnQtZm9yLWRyYWcuanMKaW5k
ZXggYzUxYzY4MGJmZWYzMDI5MDNjZjM2ZGMxYzk0ZWZjNWMyYmM0MzlmZi4uMzc4ZmViODE5ZDE2
ZDg4ZmFhNjFkMWQ2ZWZhNzVjN2M4MjJmZjA3YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9sb2NhbC9maWxlYXBpL3Jlc291cmNlcy9zZXR1cC1maWxlLWlucHV0LWVsZW1lbnQt
Zm9yLWRyYWcuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9maWxlYXBpL3Jl
c291cmNlcy9zZXR1cC1maWxlLWlucHV0LWVsZW1lbnQtZm9yLWRyYWcuanMKQEAgLTE2LDcgKzE2
LDcgQEAgZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIiwgZnVuY3Rpb24oKSB7
CiAKIHZhciBmaWxlSW5wdXREcm9wQ2FsbGJhY2sgPSBudWxsOwogZmlsZUlucHV0LmFkZEV2ZW50
TGlzdGVuZXIoImRyb3AiLCBmdW5jdGlvbigpIHsKLSAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVy
LnR5cGVzLmluZGV4T2YoIkZpbGVzIikgIT0gLTEgJiYgZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVz
Lmxlbmd0aCA9PSAxKQorICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuY29udGFpbnMo
IkZpbGVzIikgJiYgZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzLmxlbmd0aCA9PSAxKQogICAgICAg
ICB0ZXN0UGFzc2VkKCJldmVudC5kYXRhVHJhbnNmZXIgY29udGFpbnMgYSBGaWxlIG9iamVjdCBv
biBkcm9wLiIpOwogICAgIGVsc2UgewogICAgICAgICB0ZXN0RmFpbGVkKCJldmVudC5kYXRhVHJh
bnNmZXIgZG9lcyBub3QgY29udGFpbiBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuIik7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2NsaXBib2FyZC9zY3JpcHQtdGVz
dHMvY2xpcGJvYXJkLWZpbGUtYWNjZXNzLmpzIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS9jbGlwYm9hcmQvc2NyaXB0LXRlc3RzL2NsaXBib2FyZC1maWxlLWFjY2Vzcy5qcwppbmRl
eCA0YjYzNjhkNDYzMjE2YjE0MTQyNjIxMjg5YWFhYzE4Y2RmZjAwN2QyLi45YjI4YTBiYmVkYTNh
NmMxYWE3YzVhNzg0ZGYwZWRmYjU2ZDgxOWU2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L2NsaXBib2FyZC9zY3JpcHQtdGVzdHMvY2xpcGJvYXJkLWZpbGUtYWNj
ZXNzLmpzCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL3Nj
cmlwdC10ZXN0cy9jbGlwYm9hcmQtZmlsZS1hY2Nlc3MuanMKQEAgLTc1LDcgKzc1LDcgQEAgZnVu
Y3Rpb24gY2hlY2tGb3JFdmVudFRyYW5zZmVyVHlwZShldmVudCwgdHlwZVN0cmluZywgc2hvdWxk
Q29udGFpblR5cGUpCiB7CiAgICAgdmFyIHBhc3NlZENoZWNrOwogICAgIHZhciBtZXNzYWdlOwot
ICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIudHlwZXMgJiYgZXZlbnQuZGF0YVRyYW5zZmVyLnR5
cGVzLmluZGV4T2YodHlwZVN0cmluZykgIT0gLTEpIHsKKyAgICBpZiAoZXZlbnQuZGF0YVRyYW5z
ZmVyLnR5cGVzICYmIGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5jb250YWlucyh0eXBlU3RyaW5n
KSkgewogICAgICAgICBwYXNzZWRDaGVjayA9IHNob3VsZENvbnRhaW5UeXBlOwogICAgICAgICBt
ZXNzYWdlID0gImV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcyBjb250YWlucyAiICsgdHlwZVN0cmlu
ZyArICIuIjsKICAgICB9IGVsc2Ugewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127027</attachid>
            <date>2012-02-14 13:19:39 -0800</date>
            <delta_ts>2012-02-14 17:08:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-30416-20120214131938.patch</filename>
            <type>text/plain</type>
            <size>37041</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGJlYzViYTYzMWUzNDc5
NGVkZWJjMDAxMjhkZTljYWZiODQ1OTgxMy4uNDRiOTZhOGVlNTRmMTYxOGVlZGZjYzI0MTlhZDI2
NTQyMjc0MDYxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTAyLTE0ICBEYW5p
ZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIGRhdGFUcmFuc2Zlci50
eXBlcyAoSFRNTDUgZHJhZyAmIGRyb3ApIHNob3VsZCByZXR1cm4gRE9NU3RyaW5nTGlzdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA0MTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2xpcGJvYXJkQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBkb20vQ2xpcGJvYXJkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6aGFzU3RyaW5nT2ZUeXBlKToKKyAgICAgICAgKiBkb20v
Q2xpcGJvYXJkLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENsaXBib2FyZCk6Cisg
ICAgICAgICogZG9tL0NsaXBib2FyZC5pZGw6CisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJy
eS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEJs
YWNrQmVycnk6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2Fy
ZEJsYWNrQmVycnkuaDoKKyAgICAgICAgKENsaXBib2FyZEJsYWNrQmVycnkpOgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJv
bWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaDoKKyAgICAgICAgKENocm9taXVtRGF0YU9iamVjdCk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNsaXBib2FyZENocm9taXVtOjptYXlVcGRhdGVJdGVtcyk6CisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaDoKKyAgICAgICAgKENsaXBib2FyZENocm9t
aXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFn
RGF0YTo6Y29udGFpbnNVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYWdEYXRhOjphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvQ2xpcGJvYXJk
RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEVmbDo6dHlwZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuaDoKKyAgICAgICAgKENsaXBib2FyZEVmbCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDbGlwYm9hcmRHdGs6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvQ2xpcGJv
YXJkR3RrLmg6CisgICAgICAgIChDbGlwYm9hcmRHdGspOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9DbGlwYm9hcmRNYWMuaDoKKyAgICAgICAgKENsaXBib2FyZE1hYyk6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFkZEhUTUxDbGlw
Ym9hcmRUeXBlc0ZvckNvY29hVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRNYWM6
OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRRdDo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0Ns
aXBib2FyZFF0Lmg6CisgICAgICAgIChDbGlwYm9hcmRRdCk6CisgICAgICAgICogcGxhdGZvcm0v
d2luL0NsaXBib2FyZFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRNaW1lVHlwZXNGb3JG
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkV2luOjp0eXBlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5oOgorICAgICAgICAoQ2xpcGJvYXJkV2luKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRXeDo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L0NsaXBib2FyZFd4
Lmg6CisgICAgICAgIChDbGlwYm9hcmRXeCk6CisKIDIwMTItMDItMTMgIFBhdmVsIEZlbGRtYW4g
IDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHdyYXAgc2V0
dGluZ3Mgc2VsZWN0b3IgdGV4dCBhbmQgYWRkaW5nIGEgcnVsZSB3aXRoIHVuZG9hYmxlIGFjdGlv
bnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5j
cHAKaW5kZXggZWZjZTc5YmMwN2IzZDUxOTQ0MmIzODg4OGY4ZGE4ZWMxMGFjM2M0Ni4uMzUzMmM3
ODU5MjRmYWRkYzJmZDI5ZjA3NjQ1MWZjZTkzYjIyODlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcApAQCAtNDgsMjEgKzQ4LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1KU1Zh
bHVlIEpTQ2xpcGJvYXJkOjp0eXBlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAgQ2xp
cGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7Ci0KLSAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMg
PSBjbGlwYm9hcmQtPnR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICBI
YXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHR5cGVzLmVuZCgpOwotICAgIGZv
ciAoSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmcoZXhlYywgc3RyaW5n
VG9VU3RyaW5nKCppdCkpKTsKLSAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGxpc3QpOwotfQotCiBKU1ZhbHVlIEpTQ2xpcGJvYXJkOjpjbGVhckRhdGEoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1
c3RvbS5jcHAKaW5kZXggZDg1ZDdhMDZjNmM0M2FkMDY1ZGFjNDU2N2I5M2JkMzI1MWEzMWE2YS4u
NTFkNmYyYzcyMTJiOGQxODAzNzY3MmZiMWJmN2YwYmI2NTMxYmExNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3Bw
CkBAIC00NCwyNCArNDQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOENsaXBib2FyZDo6dHlwZXNBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6
OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNf
U1RBVFMoIkRPTS5DbGlwYm9hcmQudHlwZXMoKSIpOwotICAgIENsaXBib2FyZCogY2xpcGJvYXJk
ID0gVjhDbGlwYm9hcmQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotCi0gICAgSGFzaFNldDxT
dHJpbmc+IHR5cGVzID0gY2xpcGJvYXJkLT50eXBlcygpOwotICAgIGlmICh0eXBlcy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotCi0gICAgdjg6OkxvY2FsPHY4OjpBcnJh
eT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXcodHlwZXMuc2l6ZSgpKTsKLSAgICBIYXNoU2V0PFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHR5cGVzLmVuZCgpOwotICAgIGludCBpbmRleCA9
IDA7Ci0gICAgZm9yIChIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdHlwZXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0LCArK2luZGV4KQotICAgICAgICByZXN1bHQtPlNldCh2
ODo6SW50ZWdlcjo6TmV3KGluZGV4KSwgdjhTdHJpbmcoKml0KSk7Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDbGlwYm9hcmQ6OmNsZWFyRGF0YUNh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00u
Q2xpcGJvYXJkLmNsZWFyRGF0YSgpIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2xpcGJvYXJkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwCmluZGV4IDAy
Nzk5MjUxNTJlZTJiMTFlMWQxOTEwMmI1OTAzMjliZTMyZDNhZDYuLmViYjgzN2ZmNDdiYjg0ODc1
ZjA0ZjExYjhkOGU5MmVjNjk0ZGNmYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9D
bGlwYm9hcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCiAKICNpbmNsdWRlICJDYWNoZWRJ
bWFnZS5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJGaWxlTGlzdC5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTE0Nyw3
ICsxNDgsNyBAQCBib29sIENsaXBib2FyZDo6aGFzU3RyaW5nT2ZUeXBlKGNvbnN0IFN0cmluZyYg
dHlwZSkgY29uc3QKICAgICBpZiAobV9wb2xpY3kgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgbV9w
b2xpY3kgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIHJldHVybiB0eXBlcygpLmNvbnRhaW5zKHR5cGUpOyAKKyAgICByZXR1cm4gdHlw
ZXMoKS0+Y29udGFpbnModHlwZSk7IAogfQogICAgIAogdm9pZCBDbGlwYm9hcmQ6OnNldERyb3BF
ZmZlY3QoY29uc3QgU3RyaW5nICZlZmZlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ2xpcGJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKaW5kZXggYTA3
YWU5ZmM1N2ZjNTY1NmU5M2U2MzBiZThhNjI4MTM2N2MxOTU1MC4uZDMzODI5YTZjMTljMTFiNmQz
MmE3OTJlMzcxNGVjNDg4M2IzMWZmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Ns
aXBib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaApAQCAtMzMsNiAr
MzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBET01TdHJpbmdMaXN0
OwogICAgIGNsYXNzIERhdGFUcmFuc2Zlckl0ZW1MaXN0OwogICAgIGNsYXNzIERyYWdEYXRhOwog
ICAgIGNsYXNzIEZpbGVMaXN0OwpAQCAtNjYsNyArNjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiBkYXRhKSA9IDA7CiAgICAgCiAgICAgICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElF
J3MgQVBJCi0gICAgICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3QgPSAw
OworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdHlwZXMoKSBjb25z
dCA9IDA7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25z
dCA9IDA7CiAKICAgICAgICAgSW50UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kcmFnTG9jOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaWRsCmluZGV4IGIwMDUwNDZjYjEyMzM4
YWUwNTMzYjYyOGEzYzQ5MGRlOGE0ODQ0ZTMuLmMxYzU4NTBlYzEzMGQwMzZmYTdhZWJmZjcxMTBm
OWIwZTJmYzY4NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaWRsCkBAIC0zMSw3ICszMSw3IEBA
IG1vZHVsZSBjb3JlIHsKICAgICBpbnRlcmZhY2UgQ2xpcGJvYXJkIHsKICAgICAgICAgICAgICAg
ICAgYXR0cmlidXRlIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPVVuZGVmaW5lZF0gRE9NU3Ry
aW5nIGRyb3BFZmZlY3Q7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbVHJlYXRSZXR1cm5l
ZE51bGxTdHJpbmdBcz1VbmRlZmluZWRdIERPTVN0cmluZyBlZmZlY3RBbGxvd2VkOwotICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbUdldHRlcl0gQXJyYXkgdHlwZXM7CisgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmdMaXN0IHR5cGVzOwogICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRmlsZUxpc3QgZmlsZXM7CiAKICAgICAgICAgW0N1c3RvbV0gdm9pZCBjbGVh
ckRhdGEoaW4gW09wdGlvbmFsXSBET01TdHJpbmcgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuY3BwCmlu
ZGV4IDE2MTI3Mzc2ZTZlYjFkMjVlOWFjNmRjYmE0YmYwNDhhZGYyN2IyM2IuLmI1MmI0NTA4NWU1
YjczY2VmZTQ0NjVjODI0NDYwZmIyZTUxM2FiNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcApAQCAt
MTksNiArMTksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNsaXBib2FyZEJs
YWNrQmVycnkuaCIKIAorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJGaWxl
TGlzdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKQEAgLTcyLDEzICs3MywxMyBA
QCBib29sIENsaXBib2FyZEJsYWNrQmVycnk6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBj
b25zdCBTdHJpbmcmIHRleHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUhhc2hTZXQ8U3RyaW5n
PiBDbGlwYm9hcmRCbGFja0JlcnJ5Ojp0eXBlcygpIGNvbnN0CitQYXNzUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+IENsaXBib2FyZEJsYWNrQmVycnk6OnR5cGVzKCkgY29uc3QKIHsKICAgICAvLyBXZSB1
c2UgaGFyZGNvZGVkIGxpc3QgaGVyZSBzaW5jZSB0aGVyZSBzZWVtcyB0byBiZSBubyBBUEkgdG8g
Z2V0IHRoZSBsaXN0LgotICAgIEhhc2hTZXQ8U3RyaW5nPiByZXQ7Ci0gICAgcmV0LmFkZCgidGV4
dC9wbGFpbiIpOwotICAgIHJldC5hZGQoInRleHQvaHRtbCIpOwotICAgIHJldC5hZGQoInRleHQv
dXJsIik7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHJldCA9IERPTVN0cmluZ0xpc3Q6OmNy
ZWF0ZSgpOworICAgIHJldC0+YXBwZW5kKCJ0ZXh0L3BsYWluIik7CisgICAgcmV0LT5hcHBlbmQo
InRleHQvaHRtbCIpOworICAgIHJldC0+YXBwZW5kKCJ0ZXh0L3VybCIpOwogICAgIHJldHVybiBy
ZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkv
Q2xpcGJvYXJkQmxhY2tCZXJyeS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJy
eS9DbGlwYm9hcmRCbGFja0JlcnJ5LmgKaW5kZXggMmYzOWY0NjVlMGZkMWRhNmRiNjBkODZiMjdk
YjYyYTViZmJkMDYxYi4uMjU1ZDZhYTI4NGNjNjkyM2ZjMmYwYzQ0NzI5YmIwNDZiMThiNDBlNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRC
bGFja0JlcnJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlw
Ym9hcmRCbGFja0JlcnJ5LmgKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKICAgICAvLyBl
eHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5
cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHR5cGVz
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0
OwogICAgIHZpcnR1YWwgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCos
IGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAK
aW5kZXggNmFkMTBjN2RhMzRhYzdkNWE3YjgwNmMzZDc3MTE5MjhmZDdkNDQ3MS4uNzViNzBmMGYz
ZWEzYzAxODdjMDY4OTUxOGE0NTZhMWQ3MjA4YzYwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCkBAIC0xMDEs
MzAgKzEwMSwzNyBAQCBib29sIENocm9taXVtRGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0CiAg
ICAgICAgIHx8IG1fZmlsZUNvbnRlbnQ7CiB9CiAKLUhhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bURh
dGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gQ2hyb21p
dW1EYXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0CiB7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IHJlc3VsdHMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKwogICAgIGlmIChtX3N0b3JhZ2VN
b2RlID09IFBhc3RlYm9hcmQpIHsKICAgICAgICAgYm9vbCBpZ25vcmVkQ29udGFpbnNGaWxlbmFt
ZXM7Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2FyZFJlYWRBdmFpbGFi
bGVUeXBlcyhjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlnbm9yZWRDb250YWluc0Zp
bGVuYW1lcyk7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBoYXNoZWRSZXN1bHRzID0gUGxhdGZv
cm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoCisgICAgICAgICAgICBjdXJy
ZW50UGFzdGVib2FyZEJ1ZmZlcigpLCAmaWdub3JlZENvbnRhaW5zRmlsZW5hbWVzKTsKKyAgICAg
ICAgLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGEgdXRpbGl0eSBvZiBET01TdHJpbmdM
aXN0LgorICAgICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBo
YXNoZWRSZXN1bHRzLmJlZ2luKCk7CisgICAgICAgICAgICAgaXQgIT0gaGFzaGVkUmVzdWx0cy5l
bmQoKTsKKyAgICAgICAgICAgICArK2l0KSB7CisgICAgICAgICAgcmVzdWx0cy0+YXBwZW5kKCpp
dCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgfQogCi0gICAgSGFz
aFNldDxTdHJpbmc+IHJlc3VsdHM7Ci0KICAgICBpZiAoIW1fcGxhaW5UZXh0LmlzRW1wdHkoKSkg
ewotICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVRleHQpOwotICAgICAgICByZXN1bHRzLmFk
ZChtaW1lVHlwZVRleHRQbGFpbik7CisgICAgICAgIHJlc3VsdHMtPmFwcGVuZChtaW1lVHlwZVRl
eHQpOworICAgICAgICByZXN1bHRzLT5hcHBlbmQobWltZVR5cGVUZXh0UGxhaW4pOwogICAgIH0K
IAogICAgIGlmICghbV91cmlMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0cy5hZGQobWlt
ZVR5cGVUZXh0VVJJTGlzdCk7CisgICAgICAgIHJlc3VsdHMtPmFwcGVuZChtaW1lVHlwZVRleHRV
UklMaXN0KTsKIAogICAgIGlmICghbV90ZXh0SHRtbC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3Vs
dHMuYWRkKG1pbWVUeXBlVGV4dEhUTUwpOworICAgICAgICByZXN1bHRzLT5hcHBlbmQobWltZVR5
cGVUZXh0SFRNTCk7CiAKICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvcjo6S2V5cyBpdCA9IG1fY3VzdG9tRGF0YS5iZWdpbigpLmtleXMoKTsKICAgICAgICAg
IGl0ICE9IG1fY3VzdG9tRGF0YS5lbmQoKS5rZXlzKCk7ICsraXQpIHsKLSAgICAgICAgcmVzdWx0
cy5hZGQoKml0KTsKKyAgICAgICAgcmVzdWx0cy0+YXBwZW5kKCppdCk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHJlc3VsdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCmluZGV4IDdlNjc1YmY5Mzk5NTBiZmU4ODUyMzRiMDcx
ZTlhODQyZDE0ZjFiMTguLjlhNmY1NjJkMTFmNzE2ZTUxNzgyOGI2YTkzOWIzOGE5YzM0ZWNkYTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0
YU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
RGF0YU9iamVjdC5oCkBAIC0zMSwxMSArMzEsMTEgQEAKICNpZm5kZWYgQ2hyb21pdW1EYXRhT2Jq
ZWN0X2gKICNkZWZpbmUgQ2hyb21pdW1EYXRhT2JqZWN0X2gKIAorI2luY2x1ZGUgIkRPTVN0cmlu
Z0xpc3QuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC03NSw3
ICs3NSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzRGF0YSgpIGNvbnN0OwogCi0gICAgSGFz
aFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0
PiB0eXBlcygpIGNvbnN0OwogICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Ym9vbCYgc3VjY2VzcykgY29uc3Q7CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCmluZGV4IDc1ZjhmNjMwYzA5Yzky
MjhjMDMzYWM5YjZhYjZhYWExOTk0MmExZDMuLmE3MjMwMDRlMTZiOGMxOTQyMGI0YmY5MDYxNGFk
OTBmYTA3MWMyMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJD
aHJvbWl1bURhdGFPYmplY3QuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKICNp
bmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkRPTVN0cmlu
Z0xpc3QuaCIKICNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJEYXRhVHJhbnNmZXJJdGVtTGlzdENocm9taXVtLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
QEAgLTI4OSwxOSArMjkwLDE4IEBAIGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06OnBsYXRmb3JtQ2xp
cGJvYXJkQ2hhbmdlZCgpIGNvbnN0CiB9CiAKIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJ
Ci1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKCkgY29uc3QKK1Bhc3NS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gQ2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKCkgY29uc3QKIHsK
LSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJv
YXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIHJldHVybiBET01TdHJpbmdMaXN0OjpjcmVhdGUo
KTsKIAogICAgIGlmICghbV9kYXRhT2JqZWN0KQotICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAg
ICAgICAgcmV0dXJuIERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogCi0gICAgcmVzdWx0cyA9IG1f
ZGF0YU9iamVjdC0+dHlwZXMoKTsKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gcmVzdWx0cyA9
IG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKIAogICAgIGlmIChtX2RhdGFPYmplY3QtPmNvbnRhaW5z
RmlsZW5hbWVzKCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlRmlsZXMpOworICAgICAg
ICByZXN1bHRzLT5hcHBlbmQobWltZVR5cGVGaWxlcyk7CiAKICAgICByZXR1cm4gcmVzdWx0czsK
IH0KQEAgLTUxOCw5ICs1MTgsOSBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjptYXlVcGRhdGVJ
dGVtcyhWZWN0b3I8UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+ID4mIGl0ZW1zKQogCiAgICAgaWYg
KGlzRm9yQ29weUFuZFBhc3RlKCkgJiYgcG9saWN5KCkgPT0gQ2xpcGJvYXJkUmVhZGFibGUpIHsK
ICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSB0eXBlcyBhbmQgYWRkIHRoZW0uCi0gICAg
ICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcyA9IG1fZGF0YU9iamVjdC0+dHlwZXMoKTsKLSAgICAg
ICAgZm9yIChIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdHlwZXMuYmVnaW4o
KTsgaXQgIT0gdHlwZXMuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBpdGVtcy5hcHBlbmQoRGF0
YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tUGFzdGVib2FyZCh0aGlzLCBzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCAqaXQpKTsKKyAgICAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHR5
cGVzID0gbV9kYXRhT2JqZWN0LT50eXBlcygpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHR5cGVzLT5sZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgaXRlbXMuYXBwZW5kKERhdGFU
cmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbVBhc3RlYm9hcmQodGhpcywgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgdHlwZXMtPml0ZW0oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJk
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmgKaW5kZXggOTI0MjI2ZGYzMjU2NWU2OTU3MjMwMTA2MzViZjJlNmY0ZmMwMDlhOC4u
YWU5ZWI3MTFiMWQ4MmNkYjU4ZWQyMmRhM2UwMTIwMmM4MmYwYTU3NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCkBAIC02
Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBwbGF0Zm9ybUNs
aXBib2FyZENoYW5nZWQoKSBjb25zdDsKIAogICAgICAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJ
RSdzIEFQSQotICAgICAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0Owor
ICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdHlwZXMoKSBjb25zdDsK
ICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OwogCiAg
ICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJv
bWl1bS5jcHAKaW5kZXggM2Q5NGExOWIyNWI4NjhiMGYwYmUxZTAyZTZlMDk2OTkxZTQzYjk0Yy4u
YTdhODUzNTU5OGExZTY3MThmYmVjY2JhYmU5YmQxM2M4YWY2YTU4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKQEAg
LTQ1LDE5ICs0NSwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIGNvbnRh
aW5zSFRNTChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QqIGRyb3BEYXRhKQogewotICAgIHJldHVy
biBkcm9wRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRIVE1MKTsKKyAgICByZXR1
cm4gZHJvcERhdGEtPnR5cGVzKCktPmNvbnRhaW5zKG1pbWVUeXBlVGV4dEhUTUwpOwogfQogCiBi
b29sIERyYWdEYXRhOjpjb250YWluc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGlj
eSBmaWxlbmFtZVBvbGljeSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRh
LT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dFVSSUxpc3QpCisgICAgcmV0dXJuIG1fcGxh
dGZvcm1EcmFnRGF0YS0+dHlwZXMoKS0+Y29udGFpbnMobWltZVR5cGVUZXh0VVJJTGlzdCkKICAg
ICAgICAgfHwgKGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMgJiYgbV9wbGF0Zm9y
bURyYWdEYXRhLT5jb250YWluc0ZpbGVuYW1lcygpKTsKIH0KIAogU3RyaW5nIERyYWdEYXRhOjph
c1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSwgU3Ry
aW5nKiB0aXRsZSkgY29uc3QKIHsKICAgICBTdHJpbmcgdXJsOwotICAgIGlmIChtX3BsYXRmb3Jt
RHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0VVJJTGlzdCkpIHsKKyAgICBp
ZiAobV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLT5jb250YWlucyhtaW1lVHlwZVRleHRVUklM
aXN0KSkgewogICAgICAgICBib29sIGlnbm9yZWRTdWNjZXNzOwogICAgICAgICB1cmwgPSBtX3Bs
YXRmb3JtRHJhZ0RhdGEtPmdldERhdGEobWltZVR5cGVVUkwsIGlnbm9yZWRTdWNjZXNzKTsKICAg
ICAgICAgaWYgKHRpdGxlKQpAQCAtODcsNyArODcsNyBAQCB2b2lkIERyYWdEYXRhOjphc0ZpbGVu
YW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdAogCiBib29sIERyYWdEYXRhOjpjb250
YWluc1BsYWluVGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+
dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRQbGFpbik7CisgICAgcmV0dXJuIG1fcGxhdGZv
cm1EcmFnRGF0YS0+dHlwZXMoKS0+Y29udGFpbnMobWltZVR5cGVUZXh0UGxhaW4pOwogfQogCiBT
dHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KEZyYW1lKikgY29uc3QKQEAgLTEwOCw4ICsxMDgs
OCBAQCBib29sIERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25zdAogICAgIC8vIFRoaXMg
aXMgYWxsb3dlZCB3aGVuZXZlciB0aGUgZHJhZyBkYXRhIGNvbnRhaW5zIGEgJ3JhbmdlJyAoaWUu
LAogICAgIC8vIENsaXBib2FyZFdpbjo6d3JpdGVSYW5nZSBpcyBjYWxsZWQpLiAgRm9yIGV4YW1w
bGUsIGRyYWdnaW5nIGEgbGluawogICAgIC8vIHNob3VsZCBub3QgcmVzdWx0IGluIGEgc3BhY2Ug
YmVpbmcgYWRkZWQuCi0gICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250
YWlucyhtaW1lVHlwZVRleHRQbGFpbikKLSAgICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+
dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRVUklMaXN0KTsKKyAgICByZXR1cm4gbV9wbGF0
Zm9ybURyYWdEYXRhLT50eXBlcygpLT5jb250YWlucyhtaW1lVHlwZVRleHRQbGFpbikKKyAgICAg
ICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS0+Y29udGFpbnMobWltZVR5cGVUZXh0
VVJJTGlzdCk7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQo
KSBjb25zdApAQCAtMTQxLDcgKzE0MSw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
RHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlCiAgICAg
ICAgIC8vICAgIHJldHVybiBmcmFnbWVudDsKICAgICB9CiAKLSAgICBpZiAobV9wbGF0Zm9ybURy
YWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dEhUTUwpKSB7CisgICAgaWYgKG1f
cGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS0+Y29udGFpbnMobWltZVR5cGVUZXh0SFRNTCkpIHsK
ICAgICAgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsKICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVu
dCgpLAogICAgICAgICAgICAgbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXREYXRhKG1pbWVUeXBlVGV4
dEhUTUwsIGlnbm9yZWRTdWNjZXNzKSwgbV9wbGF0Zm9ybURyYWdEYXRhLT5odG1sQmFzZVVybCgp
LCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lZmwvQ2xpcGJvYXJkRWZsLmNwcAppbmRleCA4ZGM5NWU4NjViMzA4ZTFlNmZiMzE3YjZmZDJi
NWRlMmYwZmU0NTQxLi5mOTczYWQ5OWE4YTMzZDAxM2Q2ZTE1OGMxNzExNmE2NDg3MmNlODQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcApAQCAtMjEs
NiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNsaXBib2FyZEVmbC5o
IgogCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0
ZW1MaXN0LmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRmlsZUxpc3QuaCIKQEAg
LTc3LDEwICs3OCwxMCBAQCBib29sIENsaXBib2FyZEVmbDo6c2V0RGF0YShjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSGFzaFNldDxTdHJpbmc+
IENsaXBib2FyZEVmbDo6dHlwZXMoKSBjb25zdAorUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBD
bGlwYm9hcmRFZmw6OnR5cGVzKCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICByZXR1cm4gMDsKIH0KIAogUGFzc1JlZlB0
cjxGaWxlTGlzdD4gQ2xpcGJvYXJkRWZsOjpmaWxlcygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmgKaW5kZXggNTc1MzgyZjdmYTdhOGIxYTkyMGVlYmQ0
MzliYzc2ZGEzMWU4NmFlNi4uNTY0NTUxOTBmNWM2OTI0ZjU2NjNmOTJkOGY3NzM2MzBiNTZhMTIz
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuaApAQCAtMzks
NyArMzksNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiwgYm9v
bCYpIGNvbnN0OwogICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
KTsKIAotICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8
RE9NU3RyaW5nTGlzdD4gdHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Rmls
ZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICBJbnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAKaW5kZXgg
YjFkMmI1MjY5NmMxOGUwYWQwNWJhNGM3OWFjMDUwYWY3NzkxYjgwMC4uZjFiZDMyOGI1NDJjOGM5
OWYyOWI3ODdiNTlhOTg3MThiY2I5OWMwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0NsaXBib2FyZEd0ay5jcHAKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJDbGlwYm9h
cmRHdGsuaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRE9NU3RyaW5n
TGlzdC5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5j
bHVkZSAiRWxlbWVudC5oIgpAQCAtMTg5LDMxICsxOTAsMzEgQEAgYm9vbCBDbGlwYm9hcmRHdGs6
OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRhdGEpCiAg
ICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLUhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRHdGs6OnR5
cGVzKCkgY29uc3QKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gQ2xpcGJvYXJkR3RrOjp0eXBl
cygpIGNvbnN0CiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBv
bGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJldHVybiBIYXNoU2V0
PFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogCiAg
ICAgaWYgKG1fY2xpcGJvYXJkKQogICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFz
dGVib2FyZEhlbHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7CiAKLSAg
ICBIYXNoU2V0PFN0cmluZz4gdHlwZXM7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHR5cGVz
ID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVGV4
dCgpKSB7Ci0gICAgICAgIHR5cGVzLmFkZCgidGV4dC9wbGFpbiIpOwotICAgICAgICB0eXBlcy5h
ZGQoIlRleHQiKTsKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0Iik7CisgICAgICAgIHR5cGVzLT5h
cHBlbmQoInRleHQvcGxhaW4iKTsKKyAgICAgICAgdHlwZXMtPmFwcGVuZCgiVGV4dCIpOworICAg
ICAgICB0eXBlcy0+YXBwZW5kKCJ0ZXh0Iik7CiAgICAgfQogCiAgICAgaWYgKG1fZGF0YU9iamVj
dC0+aGFzTWFya3VwKCkpCi0gICAgICAgIHR5cGVzLmFkZCgidGV4dC9odG1sIik7CisgICAgICAg
IHR5cGVzLT5hcHBlbmQoInRleHQvaHRtbCIpOwogCiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFz
VVJJTGlzdCgpKSB7Ci0gICAgICAgIHR5cGVzLmFkZCgidGV4dC91cmktbGlzdCIpOwotICAgICAg
ICB0eXBlcy5hZGQoIlVSTCIpOworICAgICAgICB0eXBlcy0+YXBwZW5kKCJ0ZXh0L3VyaS1saXN0
Iik7CisgICAgICAgIHR5cGVzLT5hcHBlbmQoIlVSTCIpOwogICAgIH0KIAogICAgIGlmIChtX2Rh
dGFPYmplY3QtPmhhc0ZpbGVuYW1lcygpKQotICAgICAgICB0eXBlcy5hZGQoIkZpbGVzIik7Cisg
ICAgICAgIHR5cGVzLT5hcHBlbmQoIkZpbGVzIik7CiAKICAgICByZXR1cm4gdHlwZXM7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgKaW5kZXggZDhiNzUxODI1
NGM5OGY5NWNkMTE3YjE0NTY2M2Y3ZmQzMjIzY2Y0Yy4uYjcyZTFjODFiZTY5YmU4NzgzMzdmYzk4
OWI0MzBiODVkZWYzMTMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0NsaXBib2FyZEd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9h
cmRHdGsuaApAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0
cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYsIGJvb2wmKSBjb25zdDsKICAgICAgICAgYm9vbCBz
ZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogCi0gICAgICAgIHZpcnR1YWwg
SGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2Uo
Q2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL0NsaXBib2FyZE1hYy5oCmluZGV4IDI0ZTliODA2MGEyOWM2OWM4OTE2OTIwOGZjYTc0Zjlm
ZTdkMTVkNGIuLmM0OTY4YjI4ZDJiMjMzNDQ5ZDZkNDE5YTM2Y2IxMjNjYTZlZTE3YzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgKQEAgLTU2LDcgKzU2LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7CiAgICAgCiAgICAgLy8gZXh0
ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBl
cygpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcygp
IGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsK
IAogICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCmluZGV4IGQzN2M1
ZjNmM2YxMzI0MWNjZGQ0MTEzMDg0Mzk3YzgwODY1MDBmNDguLjhjOWIxODE4ZDVhNWRlNDI5YThl
MTM5YmZhOGUxZjRlMGM0MzA0MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9DbGlwYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Ns
aXBib2FyZE1hYy5tbQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiQ2xpcGJvYXJkTWFjLmgi
CiAKICNpbXBvcnQgIkRPTUVsZW1lbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NU3RyaW5nTGlz
dC5oIgogI2ltcG9ydCAiRHJhZ0NsaWVudC5oIgogI2ltcG9ydCAiRHJhZ0NvbnRyb2xsZXIuaCIK
ICNpbXBvcnQgIkRyYWdEYXRhLmgiCkBAIC0xMDcsMTUgKzEwOCwxNSBAQCBzdGF0aWMgU3RyaW5n
IHV0aVR5cGVGcm9tQ29jb2FUeXBlKE5TU3RyaW5nICp0eXBlKQogICAgIHJldHVybiBTdHJpbmco
KTsKIH0KIAotc3RhdGljIHZvaWQgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKEhh
c2hTZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIE5TU3RyaW5nICpjb2NvYVR5cGUsIE5TUGFzdGVi
b2FyZCAqcGFzdGVib2FyZCkKK3N0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNv
Y29hVHlwZShQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHJlc3VsdFR5cGVzLCBOU1N0cmluZyAq
Y29jb2FUeXBlLCBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQpCiB7CiAgICAgLy8gVVRJIG1heSBu
b3QgZG8gdGhlc2UgcmlnaHQsIHNvIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIHJpZ2h0LCBwcmVkaWN0
YWJsZSByZXN1bHQKICAgICBpZiAoW2NvY29hVHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNTdHJpbmdQ
Ym9hcmRUeXBlXSkgewotICAgICAgICByZXN1bHRUeXBlcy5hZGQoInRleHQvcGxhaW4iKTsKKyAg
ICAgICAgcmVzdWx0VHlwZXMtPmFwcGVuZCgidGV4dC9wbGFpbiIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGlmIChbY29jb2FUeXBlIGlzRXF1YWxUb1N0cmluZzpOU1VSTFBib2FyZFR5
cGVdKSB7Ci0gICAgICAgIHJlc3VsdFR5cGVzLmFkZCgidGV4dC91cmktbGlzdCIpOworICAgICAg
ICByZXN1bHRUeXBlcy0+YXBwZW5kKCJ0ZXh0L3VyaS1saXN0Iik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKFtjb2NvYVR5cGUgaXNFcXVhbFRvU3RyaW5nOk5TRmlsZW5hbWVzUGJv
YXJkVHlwZV0pIHsKQEAgLTEyNiwxOCArMTI3LDE4IEBAIHN0YXRpYyB2b2lkIGFkZEhUTUxDbGlw
Ym9hcmRUeXBlc0ZvckNvY29hVHlwZShIYXNoU2V0PFN0cmluZz4mIHJlc3VsdFR5cGVzLCBOU1N0
CiAgICAgICAgIGlmIChbZmlsZUxpc3QgY291bnRdKSB7CiAgICAgICAgICAgICAvLyBJdCBpcyB1
bmtub3duIGlmIE5TRmlsZW5hbWVzUGJvYXJkVHlwZSBhbHdheXMgaW1wbGllcyBOU1VSTFBib2Fy
ZFR5cGUgaW4gQ29jb2EsCiAgICAgICAgICAgICAvLyBidXQgTlNGaWxlbmFtZXNQYm9hcmRUeXBl
IHNob3VsZCBpbXBseSBib3RoICd0ZXh0L3VyaS1saXN0JyBhbmQgJ0ZpbGVzJwotICAgICAgICAg
ICAgcmVzdWx0VHlwZXMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7Ci0gICAgICAgICAgICByZXN1bHRU
eXBlcy5hZGQoIkZpbGVzIik7CisgICAgICAgICAgICByZXN1bHRUeXBlcy0+YXBwZW5kKCJ0ZXh0
L3VyaS1saXN0Iik7CisgICAgICAgICAgICByZXN1bHRUeXBlcy0+YXBwZW5kKCJGaWxlcyIpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgU3RyaW5nIHV0aVR5cGUgPSB1
dGlUeXBlRnJvbUNvY29hVHlwZShjb2NvYVR5cGUpOwogICAgIGlmICghdXRpVHlwZS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgcmVzdWx0VHlwZXMuYWRkKHV0aVR5cGUpOworICAgICAgICByZXN1bHRU
eXBlcy0+YXBwZW5kKHV0aVR5cGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8vIE5v
IG1hcHBpbmcsIGp1c3QgcGFzcyB0aGUgd2hvbGUgc3RyaW5nIHRob3VnaAotICAgIHJlc3VsdFR5
cGVzLmFkZChjb2NvYVR5cGUpOworICAgIHJlc3VsdFR5cGVzLT5hcHBlbmQoY29jb2FUeXBlKTsK
IH0KIAogdm9pZCBDbGlwYm9hcmRNYWM6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCkBA
IC0yNzAsMTkgKzI3MSwxOSBAQCBib29sIENsaXBib2FyZE1hYzo6c2V0RGF0YShjb25zdCBTdHJp
bmcgJnR5cGUsIGNvbnN0IFN0cmluZyAmZGF0YSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUhh
c2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRNYWM6OnR5cGVzKCkgY29uc3QKK1Bhc3NSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gQ2xpcGJvYXJkTWFjOjp0eXBlcygpIGNvbnN0CiB7CiAgICAgaWYgKHBvbGlj
eSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVh
ZGFibGUpCi0gICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJu
IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogCiAgICAgTlNBcnJheSAqdHlwZXMgPSBbbV9wYXN0
ZWJvYXJkLmdldCgpIHR5cGVzXTsKIAogICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2Vs
dmVzIGZvciBzZWN1cml0eS4gIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZv
cmUgdG8gYmUKICAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3Rp
bmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgogICAgIGlmIChtX2No
YW5nZUNvdW50ICE9IFttX3Bhc3RlYm9hcmQuZ2V0KCkgY2hhbmdlQ291bnRdKQotICAgICAgICBy
ZXR1cm4gSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIHJldHVybiBET01TdHJpbmdMaXN0Ojpj
cmVhdGUoKTsKIAotICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7CisgICAgUmVmUHRyPERPTVN0
cmluZ0xpc3Q+IHJlc3VsdCA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIE5TVUludGVn
ZXIgY291bnQgPSBbdHlwZXMgY291bnRdOwogICAgIC8vIEZJWE1FOiBUaGlzIGxvb3AgY291bGQg
YmUgc3BsaXQgaW50byB0d28gc3RhZ2VzLiBPbmUgd2hpY2ggYWRkcyBhbGwgdGhlIEhUTUw1IHNw
ZWNpZmllZCB0eXBlcwogICAgIC8vIGFuZCBhIHNlY29uZCB3aGljaCBhZGRzIGFsbCB0aGUgZXh0
cmEgdHlwZXMgZnJvbSB0aGUgY29jb2EgY2xpcGJvYXJkICh3aGljaCBpcyBNYWMtb25seSBiZWhh
dmlvcikuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRR
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKaW5kZXgg
MjczNDk1MmQ5ODZjMTAyNjIwMDc5OWZjNzY3NTc1MzA1MDdkMWQ0Yy4uMjhjYTkyMzE0MjEyZTY4
ODRkNjQ4MzFlZGY5MjAyNGVhN2JjM2IzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L0NsaXBib2FyZFF0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNsaXBib2FyZFF0
LmgiCiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3Qu
aCIKICNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdFF0LmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJEcmFnRGF0YS5oIgpAQCAtMTg5LDE2ICsxOTAsMTYgQEAgYm9vbCBD
bGlwYm9hcmRRdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0
YSkKIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUhhc2hTZXQ8U3RyaW5nPiBD
bGlwYm9hcmRRdDo6dHlwZXMoKSBjb25zdAorUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBDbGlw
Ym9hcmRRdDo6dHlwZXMoKSBjb25zdAogewogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRS
ZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQotICAgICAgICBy
ZXR1cm4gSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIHJldHVybiBET01TdHJpbmdMaXN0Ojpj
cmVhdGUoKTsKIAogICAgIEFTU0VSVChtX3JlYWRhYmxlRGF0YSk7Ci0gICAgSGFzaFNldDxTdHJp
bmc+IHJlc3VsdDsKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gcmVzdWx0ID0gRE9NU3RyaW5n
TGlzdDo6Y3JlYXRlKCk7CiAgICAgUVN0cmluZ0xpc3QgZm9ybWF0cyA9IG1fcmVhZGFibGVEYXRh
LT5mb3JtYXRzKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3JtYXRzLmNvdW50KCk7ICsr
aSkKLSAgICAgICAgcmVzdWx0LmFkZChmb3JtYXRzLmF0KGkpKTsKKyAgICAgICAgcmVzdWx0LT5h
cHBlbmQoZm9ybWF0cy5hdChpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmgKaW5kZXggZGM2YmE0MTczYzg3NGIwZWJmNDMy
N2ZkMjdkM2ZiNWI3NmVlZjUyZS4uYTg0MGJlY2Y2ZDk5NmZlNzYyNzExN2ViZWMxOTM1MDk4Zjc4
MTNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oCkBAIC01Nyw3
ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBj
b25zdCBTdHJpbmcmIGRhdGEpOwogCiAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkK
LSAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RHJhZ0ltYWdl
KENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0NsaXBib2FyZFdpbi5jcHAKaW5kZXggYWEzODM4ODFhYzA2OGMyNzlkOTFjNzhmM2Ex
YmI5MDZkYWNjYTZkNS4uYjA3OGJiYzU5N2MxYzc0NjIxNjc4ODZjOTcwNmFmOWQ3YjNkZTczMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2xpcGJv
YXJkVXRpbGl0aWVzV2luLmgiCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIK
QEAgLTQ4NSwyNCArNDg2LDI0IEBAIGJvb2wgQ2xpcGJvYXJkV2luOjpzZXREYXRhKGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
c3RhdGljIHZvaWQgYWRkTWltZVR5cGVzRm9yRm9ybWF0KEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0
cywgY29uc3QgRk9STUFURVRDJiBmb3JtYXQpCitzdGF0aWMgdm9pZCBhZGRNaW1lVHlwZXNGb3JG
b3JtYXQoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiByZXN1bHRzLCBjb25zdCBGT1JNQVRFVEMm
IGZvcm1hdCkKIHsKICAgICAvLyBVUkwgYW5kIFRleHQgYXJlIHByb3ZpZGVkIGZvciBjb21wYXRp
YmlsaXR5IHdpdGggSUUncyBtb2RlbAogICAgIGlmIChmb3JtYXQuY2ZGb3JtYXQgPT0gdXJsRm9y
bWF0KCktPmNmRm9ybWF0IHx8IGZvcm1hdC5jZkZvcm1hdCA9PSB1cmxXRm9ybWF0KCktPmNmRm9y
bWF0KSB7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJVUkwiKTsKLSAgICAgICAgcmVzdWx0cy5hZGQo
InRleHQvdXJpLWxpc3QiKTsKKyAgICAgICAgcmVzdWx0cy0+YXBwZW5kKCJVUkwiKTsKKyAgICAg
ICAgcmVzdWx0cy0+YXBwZW5kKCJ0ZXh0L3VyaS1saXN0Iik7CiAgICAgfQogCiAgICAgaWYgKGZv
cm1hdC5jZkZvcm1hdCA9PSBwbGFpblRleHRXRm9ybWF0KCktPmNmRm9ybWF0IHx8IGZvcm1hdC5j
ZkZvcm1hdCA9PSBwbGFpblRleHRGb3JtYXQoKS0+Y2ZGb3JtYXQpIHsKLSAgICAgICAgcmVzdWx0
cy5hZGQoIlRleHQiKTsKLSAgICAgICAgcmVzdWx0cy5hZGQoInRleHQvcGxhaW4iKTsKKyAgICAg
ICAgcmVzdWx0cy0+YXBwZW5kKCJUZXh0Iik7CisgICAgICAgIHJlc3VsdHMtPmFwcGVuZCgidGV4
dC9wbGFpbiIpOwogICAgIH0KIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUhh
c2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRXaW46OnR5cGVzKCkgY29uc3QKK1Bhc3NSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gQ2xpcGJvYXJkV2luOjp0eXBlcygpIGNvbnN0CiB7IAotICAgIEhhc2hTZXQ8
U3RyaW5nPiByZXN1bHRzOyAKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gcmVzdWx0cyA9IERP
TVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFk
YWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQogICAgICAgICByZXR1
cm4gcmVzdWx0czsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0Ns
aXBib2FyZFdpbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5o
CmluZGV4IGEzNWQ4YjQ4YWFjNjhhZTdlYTkyN2VkMWE2NDlhYzAxYWVlZGYwOTAuLjhjMjJjMGEz
NWY1ZTg1NjM3ZWJhMjZjYTBiM2E4MmM3NjExOWIxMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmgKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIGJv
b2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKICAg
ICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgIHZpcnR1YWwgSGFzaFNldDxTdHJp
bmc+IHR5cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IHR5cGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygp
IGNvbnN0OwogCiAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQ
b2ludCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ2xpcGJvYXJk
V3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guY3BwCmluZGV4
IDMyMjE2YTY1MjQyNGJlMzY2YzBhZTJhZjU5ODE4ODMwYWUxODhlYzEuLmUxYmQ3YjdmZDcwNDQw
MDA5ODIxMjI1NzEwZDY2Y2JiY2ZlM2RmNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3d4L0NsaXBib2FyZFd4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
eC9DbGlwYm9hcmRXeC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJDbGlwYm9hcmRXeC5oIgogCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgog
I2luY2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiSGFzaFRhYmxlLmgiCiAjaW5jbHVkZSAi
SW50UG9pbnQuaCIKQEAgLTcwLDExICs3MSwxMCBAQCBib29sIENsaXBib2FyZFd4OjpzZXREYXRh
KGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogfQogCiAvLyBleHRlbnNp
b25zIGJleW9uZCBJRSdzIEFQSQotSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZFd4Ojp0eXBlcygp
IGNvbnN0IAorUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBDbGlwYm9hcmRXeDo6dHlwZXMoKSBj
b25zdCAKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1
bHQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gMDsKIH0KIAogUGFzc1JlZlB0cjxG
aWxlTGlzdD4gQ2xpcGJvYXJkV3g6OmZpbGVzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93eC9DbGlwYm9hcmRXeC5oCmluZGV4IDEzODYzNWFhZTk2MTVlZDMxMDY5NGY1YzVkZDEzODY4
MmZlZWQ4YmIuLmY5MjcyNmFlNmEwNGYzNDNiMGE5OWU0OWRmYzdkYTliMTQ1MGZkNDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guaApAQCAtNDYsNyArNDYsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5
cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAgICAgCiAgICAgICAgIC8vIGV4dGVuc2lvbnMgYmV5
b25kIElFJ3MgQVBJCi0gICAgICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNv
bnN0OwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7
CiAgICAgCiAgICAgICAgIEludFBvaW50IGRyYWdMb2NhdGlvbigpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGUx
ZjlmNjNhN2U0NWQ4NGM4YTE4NTAzMjIxZmI5ZjQ5MDM0MTc1OTIuLjIzY2RmYTk4YWE3YzE1NDdl
YjA0NWM2ZmJkOWEwMmYxOTM3NTBmNDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0wMi0x
NCAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KKworICAgICAgICBGaXggQ2xp
cGJvYXJkOjp0eXBlcygpIHRvIHJldHVybiBhIERPTVN0cmluZ0xpc3QuCisKKyAgICAgICAgZGF0
YVRyYW5zZmVyLnR5cGVzIChIVE1MNSBkcmFnICYgZHJvcCkgc2hvdWxkIHJldHVybiBET01TdHJp
bmdMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
MDQxNgorCisgICAgICAgIFVwZGF0ZSB0ZXN0cyB0byB1c2UgY29udGFpbnMoKSBpbnN0ZWFkIG9m
IGluZGV4T2YoKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9jbGlwYm9hcmQtY3VzdG9tRGF0YS5odG1sOgorICAg
ICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9vbnBhc3RlLXRleHQtaHRtbC10eXBlcy5odG1sOgor
ICAgICAgICAqIGZhc3QvZXZlbnRzL2RyYWctYW5kLWRyb3AtZGF0YVRyYW5zZmVyLXR5cGVzLW5v
Y3Jhc2guaHRtbDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9kcmFnLWN1c3RvbURhdGEuaHRtbDoK
KyAgICAgICAgKiBodHRwL3Rlc3RzL2xvY2FsL2ZpbGVhcGkvcmVzb3VyY2VzL3NldHVwLWZpbGUt
aW5wdXQtZWxlbWVudC1mb3ItZHJhZy5qczoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5
L2NsaXBib2FyZC9zY3JpcHQtdGVzdHMvY2xpcGJvYXJkLWZpbGUtYWNjZXNzLmpzOgorICAgICAg
ICAoY2hlY2tGb3JFdmVudFRyYW5zZmVyVHlwZSk6CisKIDIwMTItMDItMTMgIFBhdmVsIEZlbGRt
YW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHdyYXAg
c2V0dGluZ3Mgc2VsZWN0b3IgdGV4dCBhbmQgYWRkaW5nIGEgcnVsZSB3aXRoIHVuZG9hYmxlIGFj
dGlvbnMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvY2xpcGJv
YXJkLWN1c3RvbURhdGEuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jbGlw
Ym9hcmQtY3VzdG9tRGF0YS5odG1sCmluZGV4IDMxZDk5YmI3MzhjMWUyNjE0ZWFjOTI3YzEwZjA5
NzdiOGM0NjZmNWEuLjBjZTRjYmI3M2QwMTUwNjcwYmY5ZmZlMzRhY2Y3ZTJkMDdiZmQ0YjQgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jbGlwYm9hcmQtY3VzdG9t
RGF0YS5odG1sCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jbGlwYm9hcmQt
Y3VzdG9tRGF0YS5odG1sCkBAIC0xNyw4ICsxNyw4IEBAIGZ1bmN0aW9uIGNvcHkoZXZlbnQpIHsK
IAogZnVuY3Rpb24gcGFzdGUoZXZlbnQpIHsKICAgICB2YXIgZmFpbGVkID0gZmFsc2U7Ci0gICAg
aWYgKGV2ZW50LmNsaXBib2FyZERhdGEudHlwZXMuaW5kZXhPZigndGV4dC9wbGFpbicpIDwgMAot
ICAgICAgICB8fCBldmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmluZGV4T2YoJ2N1c3RvbS1kYXRh
JykgPCAwKQorICAgIGlmICghZXZlbnQuY2xpcGJvYXJkRGF0YS50eXBlcy5jb250YWlucygndGV4
dC9wbGFpbicpCisgICAgICAgIHx8ICFldmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmNvbnRhaW5z
KCdjdXN0b20tZGF0YScpKQogICAgICAgICBmYWlsZWQgPSB0cnVlOwogICAgIGlmIChldmVudC5j
bGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKSAhPSAnc2FtcGxlJwogICAgICAgICB8fCBldmVu
dC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ2N1c3RvbS1kYXRhJykgIT0gJ2hlbGxvIHdvcmxkJykK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9vbnBhc3RlLXRleHQt
aHRtbC10eXBlcy5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL29ucGFzdGUt
dGV4dC1odG1sLXR5cGVzLmh0bWwKaW5kZXggM2I3NGNlNDg3YWNmMTM2NzM5MmVmNjVlNTE1YWI0
ZDFiODYwZWUzMy4uZjg3ZmJlNTlmYjVkMTYyNmY4ZDcyY2ZlNTRmMzk2MDY1MTU1NTdlOSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL29ucGFzdGUtdGV4dC1odG1s
LXR5cGVzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL29ucGFzdGUt
dGV4dC1odG1sLXR5cGVzLmh0bWwKQEAgLTgsOCArOCw3IEBAIGR1cmluZyBhbiBvbnBhc3RlIGV2
ZW50LiAgVGhpcyB0ZXN0IHJlcXVpcmVzIERSVC48L2Rpdj4KIGZ1bmN0aW9uIHBhc3RlKGV2KQog
ewogICAgIHZhciB0eXBlcyA9IGV2LmNsaXBib2FyZERhdGEudHlwZXM7Ci0gICAgaWYgKHR5cGVz
LmluZGV4T2YoJ3RleHQvcGxhaW4nKSA+PSAwICYmCi0gICAgICAgIHR5cGVzLmluZGV4T2YoJ3Rl
eHQvaHRtbCcpID49IDApCisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKCd0ZXh0L3BsYWluJykgJiYg
dHlwZXMuY29udGFpbnMoJ3RleHQvaHRtbCcpKQogICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicmVzdWx0cyIpLmlubmVySFRNTCA9ICJQQVNTIjsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvZHJhZy1hbmQtZHJvcC1kYXRhVHJhbnNmZXItdHlwZXMtbm9j
cmFzaC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZHJhZy1hbmQtZHJvcC1kYXRhVHJh
bnNmZXItdHlwZXMtbm9jcmFzaC5odG1sCmluZGV4IDIxMjhlNDA4Mzc2Y2VkYTU2YzJkMWExMTBh
NTFkNGYxZTEyYTlhMWIuLjM3Mzk2NTViOThlYjYzYzg2N2M0YThiZjNmMjM0M2ExZjVkODljNGQg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RyYWctYW5kLWRyb3AtZGF0YVRy
YW5zZmVyLXR5cGVzLW5vY3Jhc2guaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9k
cmFnLWFuZC1kcm9wLWRhdGFUcmFuc2Zlci10eXBlcy1ub2NyYXNoLmh0bWwKQEAgLTg0LDcgKzg0
LDcgQEAKICAgICB7CiAgICAgICAgIGV2ZW50ID0gZTsKICAgICAgICAgdmFyIGZvcm1hdFR5cGVz
ID0gZS5kYXRhVHJhbnNmZXIudHlwZXM7IC8vIFRoaXMgbGluZSBjYXVzZXMgdGhlIGNyYXNoLgot
ICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmluZGV4T2YoRk9STUFUX1RZUEUp
ID09IC0xKQorICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmNvbnRhaW5zKEZP
Uk1BVF9UWVBFKSA9PSAtMSkKICAgICAgICAgICAgIHRlc3RGYWlsZWQoJ2V2ZW50LmRhdGFUcmFu
c2Zlci50eXBlcyBzaG91bGQgY29udGFpbiBmb3JtYXQgIicgKyBGT1JNQVRfVFlQRSArICciLCBi
dXQgaXQgZG9lcyBub3QuJyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRlc3RQYXNzZWQo
J2V2ZW50LmRhdGFUcmFuc2Zlci50eXBlcyBjb250YWlucyBmb3JtYXQgIicgKyBGT1JNQVRfVFlQ
RSArICciJyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9kcmFnLWN1c3Rv
bURhdGEuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RyYWctY3VzdG9tRGF0YS5odG1s
CmluZGV4IGRjYTU3ZWZkNDYyMzU1ODRmYjllMjc3MGFkM2I5MDI1ZTllNzJmMGQuLmQ4Y2UyNWM2
NzM5YTU5OWUxMDlmYTIxMmRlNTJiY2ZkY2Q2M2Q3NTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2RyYWctY3VzdG9tRGF0YS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL2RyYWctY3VzdG9tRGF0YS5odG1sCkBAIC0zMiw4ICszMiw4IEBAIGZ1bmN0aW9uIGRy
YWdvdmVyKGV2ZW50KSB7CiB9CiBmdW5jdGlvbiBkcm9wKGV2ZW50KSB7CiAgICAgdmFyIGZhaWxl
ZCA9IGZhbHNlOwotICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5kZXhPZigndGV4
dC9wbGFpbicpIDwgMAotICAgICAgICB8fCBldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5kZXhP
ZignY3VzdG9tLWRhdGEnKSA8IDApCisgICAgaWYgKCFldmVudC5kYXRhVHJhbnNmZXIudHlwZXMu
Y29udGFpbnMoJ3RleHQvcGxhaW4nKQorICAgICAgICB8fCAhZXZlbnQuZGF0YVRyYW5zZmVyLnR5
cGVzLmNvbnRhaW5zKCdjdXN0b20tZGF0YScpKQogICAgICAgICBmYWlsZWQgPSB0cnVlOwogICAg
IGlmIChldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGV4dCcpICE9ICdzYW1wbGUnCiAgICAg
ICAgIHx8IGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCdjdXN0b20tZGF0YScpICE9ICdoZWxs
byB3b3JsZCcpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2ZpbGVh
cGkvcmVzb3VyY2VzL3NldHVwLWZpbGUtaW5wdXQtZWxlbWVudC1mb3ItZHJhZy5qcyBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvZmlsZWFwaS9yZXNvdXJjZXMvc2V0dXAtZmlsZS1pbnB1
dC1lbGVtZW50LWZvci1kcmFnLmpzCmluZGV4IGM1MWM2ODBiZmVmMzAyOTAzY2YzNmRjMWM5NGVm
YzVjMmJjNDM5ZmYuLjM3OGZlYjgxOWQxNmQ4OGZhYTYxZDFkNmVmYTc1YzdjODIyZmYwN2MgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvZmlsZWFwaS9yZXNvdXJjZXMv
c2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzCisrKyBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvbG9jYWwvZmlsZWFwaS9yZXNvdXJjZXMvc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50
LWZvci1kcmFnLmpzCkBAIC0xNiw3ICsxNiw3IEBAIGZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVy
KCJkcmFnb3ZlciIsIGZ1bmN0aW9uKCkgewogCiB2YXIgZmlsZUlucHV0RHJvcENhbGxiYWNrID0g
bnVsbDsKIGZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJkcm9wIiwgZnVuY3Rpb24oKSB7Ci0g
ICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5pbmRleE9mKCJGaWxlcyIpICE9IC0xICYm
IGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGggPT0gMSkKKyAgICBpZiAoZXZlbnQuZGF0
YVRyYW5zZmVyLnR5cGVzLmNvbnRhaW5zKCJGaWxlcyIpICYmIGV2ZW50LmRhdGFUcmFuc2Zlci5m
aWxlcy5sZW5ndGggPT0gMSkKICAgICAgICAgdGVzdFBhc3NlZCgiZXZlbnQuZGF0YVRyYW5zZmVy
IGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qgb24gZHJvcC4iKTsKICAgICBlbHNlIHsKICAgICAgICAg
dGVzdEZhaWxlZCgiZXZlbnQuZGF0YVRyYW5zZmVyIGRvZXMgbm90IGNvbnRhaW4gYSBGaWxlIG9i
amVjdCBvbiBkcm9wLiIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS9jbGlwYm9hcmQvc2NyaXB0LXRlc3RzL2NsaXBib2FyZC1maWxlLWFjY2Vzcy5qcyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL3NjcmlwdC10ZXN0cy9jbGlw
Ym9hcmQtZmlsZS1hY2Nlc3MuanMKaW5kZXggNGI2MzY4ZDQ2MzIxNmIxNDE0MjYyMTI4OWFhYWMx
OGNkZmYwMDdkMi4uOWIyOGEwYmJlZGEzYTZjMWFhN2M1YTc4NGRmMGVkZmI1NmQ4MTllNiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jbGlwYm9hcmQvc2NyaXB0
LXRlc3RzL2NsaXBib2FyZC1maWxlLWFjY2Vzcy5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L2NsaXBib2FyZC9zY3JpcHQtdGVzdHMvY2xpcGJvYXJkLWZpbGUtYWNjZXNz
LmpzCkBAIC03NSw3ICs3NSw3IEBAIGZ1bmN0aW9uIGNoZWNrRm9yRXZlbnRUcmFuc2ZlclR5cGUo
ZXZlbnQsIHR5cGVTdHJpbmcsIHNob3VsZENvbnRhaW5UeXBlKQogewogICAgIHZhciBwYXNzZWRD
aGVjazsKICAgICB2YXIgbWVzc2FnZTsKLSAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVz
ICYmIGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5pbmRleE9mKHR5cGVTdHJpbmcpICE9IC0xKSB7
CisgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcyAmJiBldmVudC5kYXRhVHJhbnNmZXIu
dHlwZXMuY29udGFpbnModHlwZVN0cmluZykpIHsKICAgICAgICAgcGFzc2VkQ2hlY2sgPSBzaG91
bGRDb250YWluVHlwZTsKICAgICAgICAgbWVzc2FnZSA9ICJldmVudC5kYXRhVHJhbnNmZXIudHlw
ZXMgY29udGFpbnMgIiArIHR5cGVTdHJpbmcgKyAiLiI7CiAgICAgfSBlbHNlIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127084</attachid>
            <date>2012-02-14 17:08:34 -0800</date>
            <delta_ts>2012-02-15 18:08:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-30416-20120214170833.patch</filename>
            <type>text/plain</type>
            <size>38670</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGJlYzViYTYzMWUzNDc5
NGVkZWJjMDAxMjhkZTljYWZiODQ1OTgxMy4uNDRiOTZhOGVlNTRmMTYxOGVlZGZjYzI0MTlhZDI2
NTQyMjc0MDYxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTAyLTE0ICBEYW5p
ZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIGRhdGFUcmFuc2Zlci50
eXBlcyAoSFRNTDUgZHJhZyAmIGRyb3ApIHNob3VsZCByZXR1cm4gRE9NU3RyaW5nTGlzdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA0MTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2xpcGJvYXJkQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBkb20vQ2xpcGJvYXJkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNsaXBib2FyZDo6aGFzU3RyaW5nT2ZUeXBlKToKKyAgICAgICAgKiBkb20v
Q2xpcGJvYXJkLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENsaXBib2FyZCk6Cisg
ICAgICAgICogZG9tL0NsaXBib2FyZC5pZGw6CisgICAgICAgICogcGxhdGZvcm0vYmxhY2tiZXJy
eS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEJs
YWNrQmVycnk6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2Fy
ZEJsYWNrQmVycnkuaDoKKyAgICAgICAgKENsaXBib2FyZEJsYWNrQmVycnkpOgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJv
bWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaDoKKyAgICAgICAgKENocm9taXVtRGF0YU9iamVjdCk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNsaXBib2FyZENocm9taXVtOjptYXlVcGRhdGVJdGVtcyk6CisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaDoKKyAgICAgICAgKENsaXBib2FyZENocm9t
aXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFn
RGF0YTo6Y29udGFpbnNVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYWdEYXRhOjphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvQ2xpcGJvYXJk
RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEVmbDo6dHlwZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuaDoKKyAgICAgICAgKENsaXBib2FyZEVmbCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDbGlwYm9hcmRHdGs6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvQ2xpcGJv
YXJkR3RrLmg6CisgICAgICAgIChDbGlwYm9hcmRHdGspOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9DbGlwYm9hcmRNYWMuaDoKKyAgICAgICAgKENsaXBib2FyZE1hYyk6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFkZEhUTUxDbGlw
Ym9hcmRUeXBlc0ZvckNvY29hVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRNYWM6
OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRRdDo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0Ns
aXBib2FyZFF0Lmg6CisgICAgICAgIChDbGlwYm9hcmRRdCk6CisgICAgICAgICogcGxhdGZvcm0v
d2luL0NsaXBib2FyZFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRNaW1lVHlwZXNGb3JG
b3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkV2luOjp0eXBlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5oOgorICAgICAgICAoQ2xpcGJvYXJkV2luKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRXeDo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L0NsaXBib2FyZFd4
Lmg6CisgICAgICAgIChDbGlwYm9hcmRXeCk6CisKIDIwMTItMDItMTMgIFBhdmVsIEZlbGRtYW4g
IDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHdyYXAgc2V0
dGluZ3Mgc2VsZWN0b3IgdGV4dCBhbmQgYWRkaW5nIGEgcnVsZSB3aXRoIHVuZG9hYmxlIGFjdGlv
bnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5j
cHAKaW5kZXggZWZjZTc5YmMwN2IzZDUxOTQ0MmIzODg4OGY4ZGE4ZWMxMGFjM2M0Ni4uMzUzMmM3
ODU5MjRmYWRkYzJmZDI5ZjA3NjQ1MWZjZTkzYjIyODlkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcApAQCAtNDgsMjEgKzQ4LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1KU1Zh
bHVlIEpTQ2xpcGJvYXJkOjp0eXBlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0gICAgQ2xp
cGJvYXJkKiBjbGlwYm9hcmQgPSBpbXBsKCk7Ci0KLSAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMg
PSBjbGlwYm9hcmQtPnR5cGVzKCk7Ci0gICAgaWYgKHR5cGVzLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOwotCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICBI
YXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHR5cGVzLmVuZCgpOwotICAgIGZv
ciAoSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IHR5cGVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmcoZXhlYywgc3RyaW5n
VG9VU3RyaW5nKCppdCkpKTsKLSAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGxpc3QpOwotfQotCiBKU1ZhbHVlIEpTQ2xpcGJvYXJkOjpjbGVhckRhdGEoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gaW1wbCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1
c3RvbS5jcHAKaW5kZXggZDg1ZDdhMDZjNmM0M2FkMDY1ZGFjNDU2N2I5M2JkMzI1MWEzMWE2YS4u
NTFkNmYyYzcyMTJiOGQxODAzNzY3MmZiMWJmN2YwYmI2NTMxYmExNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3Bw
CkBAIC00NCwyNCArNDQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOENsaXBib2FyZDo6dHlwZXNBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6
OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKLXsKLSAgICBJTkNf
U1RBVFMoIkRPTS5DbGlwYm9hcmQudHlwZXMoKSIpOwotICAgIENsaXBib2FyZCogY2xpcGJvYXJk
ID0gVjhDbGlwYm9hcmQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotCi0gICAgSGFzaFNldDxT
dHJpbmc+IHR5cGVzID0gY2xpcGJvYXJkLT50eXBlcygpOwotICAgIGlmICh0eXBlcy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotCi0gICAgdjg6OkxvY2FsPHY4OjpBcnJh
eT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXcodHlwZXMuc2l6ZSgpKTsKLSAgICBIYXNoU2V0PFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHR5cGVzLmVuZCgpOwotICAgIGludCBpbmRleCA9
IDA7Ci0gICAgZm9yIChIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdHlwZXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0LCArK2luZGV4KQotICAgICAgICByZXN1bHQtPlNldCh2
ODo6SW50ZWdlcjo6TmV3KGluZGV4KSwgdjhTdHJpbmcoKml0KSk7Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDbGlwYm9hcmQ6OmNsZWFyRGF0YUNh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00u
Q2xpcGJvYXJkLmNsZWFyRGF0YSgpIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2xpcGJvYXJkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwCmluZGV4IDAy
Nzk5MjUxNTJlZTJiMTFlMWQxOTEwMmI1OTAzMjliZTMyZDNhZDYuLmViYjgzN2ZmNDdiYjg0ODc1
ZjA0ZjExYjhkOGU5MmVjNjk0ZGNmYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9D
bGlwYm9hcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwCkBAIC0y
Nyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCiAKICNpbmNsdWRlICJDYWNoZWRJ
bWFnZS5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJGaWxlTGlzdC5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTE0Nyw3
ICsxNDgsNyBAQCBib29sIENsaXBib2FyZDo6aGFzU3RyaW5nT2ZUeXBlKGNvbnN0IFN0cmluZyYg
dHlwZSkgY29uc3QKICAgICBpZiAobV9wb2xpY3kgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgbV9w
b2xpY3kgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAotICAgIHJldHVybiB0eXBlcygpLmNvbnRhaW5zKHR5cGUpOyAKKyAgICByZXR1cm4gdHlw
ZXMoKS0+Y29udGFpbnModHlwZSk7IAogfQogICAgIAogdm9pZCBDbGlwYm9hcmQ6OnNldERyb3BF
ZmZlY3QoY29uc3QgU3RyaW5nICZlZmZlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ2xpcGJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKaW5kZXggYTA3
YWU5ZmM1N2ZjNTY1NmU5M2U2MzBiZThhNjI4MTM2N2MxOTU1MC4uZDMzODI5YTZjMTljMTFiNmQz
MmE3OTJlMzcxNGVjNDg4M2IzMWZmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Ns
aXBib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaApAQCAtMzMsNiAr
MzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBET01TdHJpbmdMaXN0
OwogICAgIGNsYXNzIERhdGFUcmFuc2Zlckl0ZW1MaXN0OwogICAgIGNsYXNzIERyYWdEYXRhOwog
ICAgIGNsYXNzIEZpbGVMaXN0OwpAQCAtNjYsNyArNjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiBkYXRhKSA9IDA7CiAgICAgCiAgICAgICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElF
J3MgQVBJCi0gICAgICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3QgPSAw
OworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdHlwZXMoKSBjb25z
dCA9IDA7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25z
dCA9IDA7CiAKICAgICAgICAgSW50UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kcmFnTG9jOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaWRsCmluZGV4IGIwMDUwNDZjYjEyMzM4
YWUwNTMzYjYyOGEzYzQ5MGRlOGE0ODQ0ZTMuLmMxYzU4NTBlYzEzMGQwMzZmYTdhZWJmZjcxMTBm
OWIwZTJmYzY4NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaWRsCkBAIC0zMSw3ICszMSw3IEBA
IG1vZHVsZSBjb3JlIHsKICAgICBpbnRlcmZhY2UgQ2xpcGJvYXJkIHsKICAgICAgICAgICAgICAg
ICAgYXR0cmlidXRlIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPVVuZGVmaW5lZF0gRE9NU3Ry
aW5nIGRyb3BFZmZlY3Q7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbVHJlYXRSZXR1cm5l
ZE51bGxTdHJpbmdBcz1VbmRlZmluZWRdIERPTVN0cmluZyBlZmZlY3RBbGxvd2VkOwotICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbUdldHRlcl0gQXJyYXkgdHlwZXM7CisgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmdMaXN0IHR5cGVzOwogICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgRmlsZUxpc3QgZmlsZXM7CiAKICAgICAgICAgW0N1c3RvbV0gdm9pZCBjbGVh
ckRhdGEoaW4gW09wdGlvbmFsXSBET01TdHJpbmcgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuY3BwCmlu
ZGV4IDE2MTI3Mzc2ZTZlYjFkMjVlOWFjNmRjYmE0YmYwNDhhZGYyN2IyM2IuLmIyMjRkNWNiMDE5
ZTU3NzM3YWJjNjg0MDc1ZTNhMDM0NGM2YWJjOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcApAQCAt
MTksNiArMTksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNsaXBib2FyZEJs
YWNrQmVycnkuaCIKIAorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJGaWxl
TGlzdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKQEAgLTcyLDE0ICs3MywxNCBA
QCBib29sIENsaXBib2FyZEJsYWNrQmVycnk6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBj
b25zdCBTdHJpbmcmIHRleHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUhhc2hTZXQ8U3RyaW5n
PiBDbGlwYm9hcmRCbGFja0JlcnJ5Ojp0eXBlcygpIGNvbnN0CitQYXNzUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+IENsaXBib2FyZEJsYWNrQmVycnk6OnR5cGVzKCkgY29uc3QKIHsKICAgICAvLyBXZSB1
c2UgaGFyZGNvZGVkIGxpc3QgaGVyZSBzaW5jZSB0aGVyZSBzZWVtcyB0byBiZSBubyBBUEkgdG8g
Z2V0IHRoZSBsaXN0LgotICAgIEhhc2hTZXQ8U3RyaW5nPiByZXQ7Ci0gICAgcmV0LmFkZCgidGV4
dC9wbGFpbiIpOwotICAgIHJldC5hZGQoInRleHQvaHRtbCIpOwotICAgIHJldC5hZGQoInRleHQv
dXJsIik7Ci0gICAgcmV0dXJuIHJldDsKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gcmV0ID0g
RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CisgICAgcmV0LT5hcHBlbmQoInRleHQvcGxhaW4iKTsK
KyAgICByZXQtPmFwcGVuZCgidGV4dC9odG1sIik7CisgICAgcmV0LT5hcHBlbmQoInRleHQvdXJs
Iik7CisgICAgcmV0dXJuIHJldC5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8RmlsZUxpc3Q+
IENsaXBib2FyZEJsYWNrQmVycnk6OmZpbGVzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmgKaW5kZXgg
MmYzOWY0NjVlMGZkMWRhNmRiNjBkODZiMjdkYjYyYTViZmJkMDYxYi4uMjU1ZDZhYTI4NGNjNjky
M2ZjMmYwYzQ0NzI5YmIwNDZiMThiNDBlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmgKQEAgLTM2LDcgKzM2
LDcgQEAgcHVibGljOgogICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0
IFN0cmluZyYgZGF0YSk7CiAKICAgICAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAg
IHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPERPTVN0cmluZ0xpc3Q+IHR5cGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgRHJhZ0ltYWdlUmVmIGNy
ZWF0ZURyYWdJbWFnZShJbnRQb2ludCYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJl
QW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHRp
dGxlLCBGcmFtZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKaW5kZXggNmFkMTBjN2RhMzRhYzdkNWE3YjgwNmMz
ZDc3MTE5MjhmZDdkNDQ3MS4uZDZiNzNlNWYwOTNkMjQxZjM1YmM3OWE1MzE5YWE1ZTZiMjdhMjUz
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1E
YXRhT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJv
bWl1bURhdGFPYmplY3QuY3BwCkBAIC0xMDEsMzMgKzEwMSwzNiBAQCBib29sIENocm9taXVtRGF0
YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0CiAgICAgICAgIHx8IG1fZmlsZUNvbnRlbnQ7CiB9CiAK
LUhhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKK1Bhc3NS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gQ2hyb21pdW1EYXRhT2JqZWN0Ojp0eXBlcygpIGNvbnN0CiB7
CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHJlc3VsdHMgPSBET01TdHJpbmdMaXN0OjpjcmVh
dGUoKTsKKwogICAgIGlmIChtX3N0b3JhZ2VNb2RlID09IFBhc3RlYm9hcmQpIHsKICAgICAgICAg
Ym9vbCBpZ25vcmVkQ29udGFpbnNGaWxlbmFtZXM7Ci0gICAgICAgIHJldHVybiBQbGF0Zm9ybVN1
cHBvcnQ6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcyhjdXJyZW50UGFzdGVib2FyZEJ1ZmZl
cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmlnbm9yZWRDb250YWluc0ZpbGVuYW1lcyk7CisgICAgICAgIEhhc2hTZXQ8U3Ry
aW5nPiBoYXNoZWRSZXN1bHRzID0gUGxhdGZvcm1TdXBwb3J0OjpjbGlwYm9hcmRSZWFkQXZhaWxh
YmxlVHlwZXMoCisgICAgICAgICAgICBjdXJyZW50UGFzdGVib2FyZEJ1ZmZlcigpLCAmaWdub3Jl
ZENvbnRhaW5zRmlsZW5hbWVzKTsKKyAgICAgICAgZm9yIChIYXNoU2V0PFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaGFzaGVkUmVzdWx0cy5iZWdpbigpOyBpdCAhPSBoYXNoZWRSZXN1bHRz
LmVuZCgpOyArK2l0KQorICAgICAgICAgIHJlc3VsdHMtPmFwcGVuZCgqaXQpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0cy5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgSGFzaFNldDxTdHJpbmc+IHJl
c3VsdHM7Ci0KICAgICBpZiAoIW1fcGxhaW5UZXh0LmlzRW1wdHkoKSkgewotICAgICAgICByZXN1
bHRzLmFkZChtaW1lVHlwZVRleHQpOwotICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZVRleHRQ
bGFpbik7CisgICAgICAgIHJlc3VsdHMtPmFwcGVuZChtaW1lVHlwZVRleHQpOworICAgICAgICBy
ZXN1bHRzLT5hcHBlbmQobWltZVR5cGVUZXh0UGxhaW4pOwogICAgIH0KIAogICAgIGlmICghbV91
cmlMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVUZXh0VVJJTGlz
dCk7CisgICAgICAgIHJlc3VsdHMtPmFwcGVuZChtaW1lVHlwZVRleHRVUklMaXN0KTsKIAogICAg
IGlmICghbV90ZXh0SHRtbC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBl
VGV4dEhUTUwpOworICAgICAgICByZXN1bHRzLT5hcHBlbmQobWltZVR5cGVUZXh0SFRNTCk7CiAK
ICAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvcjo6S2V5cyBp
dCA9IG1fY3VzdG9tRGF0YS5iZWdpbigpLmtleXMoKTsKICAgICAgICAgIGl0ICE9IG1fY3VzdG9t
RGF0YS5lbmQoKS5rZXlzKCk7ICsraXQpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQoKml0KTsKKyAg
ICAgICAgcmVzdWx0cy0+YXBwZW5kKCppdCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdHM7
CisgICAgcmV0dXJuIHJlc3VsdHMucmVsZWFzZSgpOwogfQogCiBTdHJpbmcgQ2hyb21pdW1EYXRh
T2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0
YU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0LmgKaW5kZXggN2U2NzViZjkzOTk1MGJmZTg4NTIzNGIwNzFlOWE4NDJkMTRmMWIxOC4u
OWE2ZjU2MmQxMWY3MTZlNTE3ODI4YjZhOTM5YjM4YTljMzRlY2RhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKQEAg
LTMxLDExICszMSwxMSBAQAogI2lmbmRlZiBDaHJvbWl1bURhdGFPYmplY3RfaAogI2RlZmluZSBD
aHJvbWl1bURhdGFPYmplY3RfaAogCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1
ZGUgIktVUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KQEAgLTc1LDcgKzc1LDcgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBoYXNEYXRhKCkgY29uc3Q7CiAKLSAgICBIYXNoU2V0PFN0cmluZz4gdHlw
ZXMoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHR5cGVzKCkgY29uc3Q7
CiAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBj
b25zdDsKICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bS5jcHAKaW5kZXggNzVmOGY2MzBjMDljOTIyOGMwMzNhYzliNmFiNmFh
YTE5OTQyYTFkMy4uMWIxNTM2ZTM1NDU0MjFkMzFlZWYyZTVmYmZiZDc4NjBhYjM5NDg5NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVj
dC5oIgogI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgogI2luY2x1ZGUgIkNsaXBib2Fy
ZFV0aWxpdGllc0Nocm9taXVtLmgiCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1
ZGUgIkRhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bS5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0
ZW1MaXN0Q2hyb21pdW0uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtMjg5LDIxICsyOTAs
MjAgQEAgYm9vbCBDbGlwYm9hcmRDaHJvbWl1bTo6cGxhdGZvcm1DbGlwYm9hcmRDaGFuZ2VkKCkg
Y29uc3QKIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUhhc2hTZXQ8U3RyaW5n
PiBDbGlwYm9hcmRDaHJvbWl1bTo6dHlwZXMoKSBjb25zdAorUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBDbGlwYm9hcmRDaHJvbWl1bTo6dHlwZXMoKSBjb25zdAogewotICAgIEhhc2hTZXQ8U3Ry
aW5nPiByZXN1bHRzOwogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBw
b2xpY3koKSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gcmVzdWx0
czsKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogCiAgICAgaWYgKCFt
X2RhdGFPYmplY3QpCi0gICAgICAgIHJldHVybiByZXN1bHRzOworICAgICAgICByZXR1cm4gRE9N
U3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAKLSAgICByZXN1bHRzID0gbV9kYXRhT2JqZWN0LT50eXBl
cygpOworICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiByZXN1bHRzID0gbV9kYXRhT2JqZWN0LT50
eXBlcygpOwogCiAgICAgaWYgKG1fZGF0YU9iamVjdC0+Y29udGFpbnNGaWxlbmFtZXMoKSkKLSAg
ICAgICAgcmVzdWx0cy5hZGQobWltZVR5cGVGaWxlcyk7CisgICAgICAgIHJlc3VsdHMtPmFwcGVu
ZChtaW1lVHlwZUZpbGVzKTsKIAotICAgIHJldHVybiByZXN1bHRzOworICAgIHJldHVybiByZXN1
bHRzLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkQ2hyb21p
dW06OmZpbGVzKCkgY29uc3QKQEAgLTUxOCw5ICs1MTgsOSBAQCB2b2lkIENsaXBib2FyZENocm9t
aXVtOjptYXlVcGRhdGVJdGVtcyhWZWN0b3I8UmVmUHRyPERhdGFUcmFuc2Zlckl0ZW0+ID4mIGl0
ZW1zKQogCiAgICAgaWYgKGlzRm9yQ29weUFuZFBhc3RlKCkgJiYgcG9saWN5KCkgPT0gQ2xpcGJv
YXJkUmVhZGFibGUpIHsKICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSB0eXBlcyBhbmQg
YWRkIHRoZW0uCi0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcyA9IG1fZGF0YU9iamVjdC0+
dHlwZXMoKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gdHlwZXMuYmVnaW4oKTsgaXQgIT0gdHlwZXMuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICBp
dGVtcy5hcHBlbmQoRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9tUGFzdGVib2Fy
ZCh0aGlzLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCAqaXQpKTsKKyAgICAgICAgUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IHR5cGVzID0gbV9kYXRhT2JqZWN0LT50eXBlcygpOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHR5cGVzLT5sZW5ndGgoKTsgKytpKQorICAgICAgICAgICAgaXRl
bXMuYXBwZW5kKERhdGFUcmFuc2Zlckl0ZW1DaHJvbWl1bTo6Y3JlYXRlRnJvbVBhc3RlYm9hcmQo
dGhpcywgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgdHlwZXMtPml0ZW0oaSkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmgKaW5kZXggOTI0MjI2ZGYzMjU2NWU2OTU3MjMwMTA2MzVi
ZjJlNmY0ZmMwMDlhOC4uYWU5ZWI3MTFiMWQ4MmNkYjU4ZWQyMmRhM2UwMTIwMmM4MmYwYTU3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hy
b21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRD
aHJvbWl1bS5oCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
Ym9vbCBwbGF0Zm9ybUNsaXBib2FyZENoYW5nZWQoKSBjb25zdDsKIAogICAgICAgICAvLyBleHRl
bnNpb25zIGJleW9uZCBJRSdzIEFQSQotICAgICAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0
eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4g
dHlwZXMoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxl
cygpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29u
c3QgSW50UG9pbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKaW5kZXggM2Q5NGExOWIyNWI4NjhiMGYwYmUxZTAyZTZl
MDk2OTkxZTQzYjk0Yy4uYTdhODUzNTU5OGExZTY3MThmYmVjY2JhYmU5YmQxM2M4YWY2YTU4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFD
aHJvbWl1bS5jcHAKQEAgLTQ1LDE5ICs0NSwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0
YXRpYyBib29sIGNvbnRhaW5zSFRNTChjb25zdCBDaHJvbWl1bURhdGFPYmplY3QqIGRyb3BEYXRh
KQogewotICAgIHJldHVybiBkcm9wRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRI
VE1MKTsKKyAgICByZXR1cm4gZHJvcERhdGEtPnR5cGVzKCktPmNvbnRhaW5zKG1pbWVUeXBlVGV4
dEhUTUwpOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWluc1VSTChGcmFtZSosIEZpbGVuYW1l
Q29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9w
bGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dFVSSUxpc3QpCisg
ICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS0+Y29udGFpbnMobWltZVR5cGVU
ZXh0VVJJTGlzdCkKICAgICAgICAgfHwgKGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFt
ZXMgJiYgbV9wbGF0Zm9ybURyYWdEYXRhLT5jb250YWluc0ZpbGVuYW1lcygpKTsKIH0KIAogU3Ry
aW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSBmaWxl
bmFtZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKIHsKICAgICBTdHJpbmcgdXJsOwotICAg
IGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0VVJJ
TGlzdCkpIHsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLT5jb250YWlucyht
aW1lVHlwZVRleHRVUklMaXN0KSkgewogICAgICAgICBib29sIGlnbm9yZWRTdWNjZXNzOwogICAg
ICAgICB1cmwgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldERhdGEobWltZVR5cGVVUkwsIGlnbm9y
ZWRTdWNjZXNzKTsKICAgICAgICAgaWYgKHRpdGxlKQpAQCAtODcsNyArODcsNyBAQCB2b2lkIERy
YWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdAogCiBib29s
IERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGxh
dGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRQbGFpbik7CisgICAg
cmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS0+Y29udGFpbnMobWltZVR5cGVUZXh0
UGxhaW4pOwogfQogCiBTdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KEZyYW1lKikgY29uc3QK
QEAgLTEwOCw4ICsxMDgsOCBAQCBib29sIERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25z
dAogICAgIC8vIFRoaXMgaXMgYWxsb3dlZCB3aGVuZXZlciB0aGUgZHJhZyBkYXRhIGNvbnRhaW5z
IGEgJ3JhbmdlJyAoaWUuLAogICAgIC8vIENsaXBib2FyZFdpbjo6d3JpdGVSYW5nZSBpcyBjYWxs
ZWQpLiAgRm9yIGV4YW1wbGUsIGRyYWdnaW5nIGEgbGluawogICAgIC8vIHNob3VsZCBub3QgcmVz
dWx0IGluIGEgc3BhY2UgYmVpbmcgYWRkZWQuCi0gICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0
YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRQbGFpbikKLSAgICAgICAgJiYgIW1fcGxh
dGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1lVHlwZVRleHRVUklMaXN0KTsKKyAg
ICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLT5jb250YWlucyhtaW1lVHlwZVRl
eHRQbGFpbikKKyAgICAgICAgJiYgIW1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS0+Y29udGFp
bnMobWltZVR5cGVUZXh0VVJJTGlzdCk7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29t
cGF0aWJsZUNvbnRlbnQoKSBjb25zdApAQCAtMTQxLDcgKzE0MSw3IEBAIFBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVm
UHRyPFJhbmdlCiAgICAgICAgIC8vICAgIHJldHVybiBmcmFnbWVudDsKICAgICB9CiAKLSAgICBp
ZiAobV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dEhUTUwp
KSB7CisgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS0+Y29udGFpbnMobWltZVR5
cGVUZXh0SFRNTCkpIHsKICAgICAgICAgYm9vbCBpZ25vcmVkU3VjY2VzczsKICAgICAgICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3Vw
KGZyYW1lLT5kb2N1bWVudCgpLAogICAgICAgICAgICAgbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXRE
YXRhKG1pbWVUeXBlVGV4dEhUTUwsIGlnbm9yZWRTdWNjZXNzKSwgbV9wbGF0Zm9ybURyYWdEYXRh
LT5odG1sQmFzZVVybCgpLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNwcAppbmRleCA4ZGM5NWU4NjViMzA4
ZTFlNmZiMzE3YjZmZDJiNWRlMmYwZmU0NTQxLi42MDE1MjcyNmE0OTUyMzdjOWMyNTgyNjgzNjE0
OTM1ZjJiZDZlYTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xp
cGJvYXJkRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJk
RWZsLmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkNsaXBib2FyZEVmbC5oIgogCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUg
IkRhdGFUcmFuc2Zlckl0ZW1MaXN0LmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAi
RmlsZUxpc3QuaCIKQEAgLTc3LDEwICs3OCwxMCBAQCBib29sIENsaXBib2FyZEVmbDo6c2V0RGF0
YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
SGFzaFNldDxTdHJpbmc+IENsaXBib2FyZEVmbDo6dHlwZXMoKSBjb25zdAorUGFzc1JlZlB0cjxE
T01TdHJpbmdMaXN0PiBDbGlwYm9hcmRFZmw6OnR5cGVzKCkgY29uc3QKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICByZXR1cm4gRE9N
U3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiB9CiAKIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2Fy
ZEVmbDo6ZmlsZXMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL0NsaXBib2FyZEVmbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2Fy
ZEVmbC5oCmluZGV4IDU3NTM4MmY3ZmE3YThiMWE5MjBlZWJkNDM5YmM3NmRhMzFlODZhZTYuLjU2
NDU1MTkwZjVjNjkyNGY1NjYzZjkyZDhmNzczNjMwYjU2YTEyMzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmgKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgog
ICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYsIGJvb2wmKSBjb25zdDsKICAgICBib29s
IHNldERhdGEoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CiAKLSAgICBIYXNoU2V0PFN0
cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHR5cGVz
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0
OwogCiAgICAgSW50UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwCmluZGV4IGIxZDJiNTI2OTZjMThlMGFkMDVi
YTRjNzlhYzA1MGFmNzc5MWI4MDAuLmIyMDIxNjc2MGJhNTg2MjlmMjVjZjczYTY4NzczODRiYmZh
NDQ5YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRH
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3Bw
CkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSAiQ2xpcGJvYXJkR3RrLmgiCiAKICNpbmNsdWRl
ICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJE
cmFnRGF0YS5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKQEAg
LTE4OSwzMyArMTkwLDMzIEBAIGJvb2wgQ2xpcGJvYXJkR3RrOjpzZXREYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZVN0cmluZywgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIHJldHVybiBzdWNjZXNzOwog
fQogCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkR3RrOjp0eXBlcygpIGNvbnN0CitQYXNzUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IENsaXBib2FyZEd0azo6dHlwZXMoKSBjb25zdAogewogICAgIGlm
IChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRU
eXBlc1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAg
IHJldHVybiBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKIAogICAgIGlmIChtX2NsaXBib2FyZCkK
ICAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0
Q2xpcGJvYXJkQ29udGVudHMobV9jbGlwYm9hcmQpOwogCi0gICAgSGFzaFNldDxTdHJpbmc+IHR5
cGVzOworICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcyA9IERPTVN0cmluZ0xpc3Q6OmNy
ZWF0ZSgpOwogICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc1RleHQoKSkgewotICAgICAgICB0eXBl
cy5hZGQoInRleHQvcGxhaW4iKTsKLSAgICAgICAgdHlwZXMuYWRkKCJUZXh0Iik7Ci0gICAgICAg
IHR5cGVzLmFkZCgidGV4dCIpOworICAgICAgICB0eXBlcy0+YXBwZW5kKCJ0ZXh0L3BsYWluIik7
CisgICAgICAgIHR5cGVzLT5hcHBlbmQoIlRleHQiKTsKKyAgICAgICAgdHlwZXMtPmFwcGVuZCgi
dGV4dCIpOwogICAgIH0KIAogICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc01hcmt1cCgpKQotICAg
ICAgICB0eXBlcy5hZGQoInRleHQvaHRtbCIpOworICAgICAgICB0eXBlcy0+YXBwZW5kKCJ0ZXh0
L2h0bWwiKTsKIAogICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSkgewotICAgICAg
ICB0eXBlcy5hZGQoInRleHQvdXJpLWxpc3QiKTsKLSAgICAgICAgdHlwZXMuYWRkKCJVUkwiKTsK
KyAgICAgICAgdHlwZXMtPmFwcGVuZCgidGV4dC91cmktbGlzdCIpOworICAgICAgICB0eXBlcy0+
YXBwZW5kKCJVUkwiKTsKICAgICB9CiAKICAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNGaWxlbmFt
ZXMoKSkKLSAgICAgICAgdHlwZXMuYWRkKCJGaWxlcyIpOworICAgICAgICB0eXBlcy0+YXBwZW5k
KCJGaWxlcyIpOwogCi0gICAgcmV0dXJuIHR5cGVzOworICAgIHJldHVybiB0eXBlcy5yZWxlYXNl
KCk7CiB9CiAKIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZEd0azo6ZmlsZXMoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCmluZGV4IGQ4Yjc1
MTgyNTRjOThmOTVjZDExN2IxNDU2NjNmN2ZkMzIyM2NmNGMuLmI3MmUxYzgxYmU2OWJlODc4MzM3
ZmM5ODliNDMwYjg1ZGVmMzEzMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9DbGlwYm9hcmRHdGsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xp
cGJvYXJkR3RrLmgKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmLCBib29sJikgY29uc3Q7CiAgICAgICAgIGJv
b2wgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKIAotICAgICAgICB2aXJ0
dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4gdHlwZXMoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEZpbGVMaXN0PiBmaWxlcygpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgc2V0RHJhZ0lt
YWdlKENhY2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9DbGlwYm9hcmRNYWMuaAppbmRleCAyNGU5YjgwNjBhMjljNjljODkxNjkyMDhmY2E3
NGY5ZmU3ZDE1ZDRiLi5jNDk2OGIyOGQyYjIzMzQ0OWQ2ZDQxOWEzNmNiMTIzY2E2ZWUxN2MxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCkBAIC01Niw3ICs1
Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOwogICAgIAogICAgIC8v
IGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4g
dHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdHlw
ZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29u
c3Q7CiAKICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBvaW50
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQppbmRleCBk
MzdjNWYzZjNmMTMyNDFjY2RkNDExMzA4NDM5N2M4MDg2NTAwZjQ4Li5hZDU3MWRmOWEyN2MwYjY5
M2E2ZjI4OGNjYzU4YjdmY2Y5ZWNjMmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9DbGlwYm9hcmRNYWMubW0KQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIkNsaXBib2FyZE1h
Yy5oIgogCiAjaW1wb3J0ICJET01FbGVtZW50SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVN0cmlu
Z0xpc3QuaCIKICNpbXBvcnQgIkRyYWdDbGllbnQuaCIKICNpbXBvcnQgIkRyYWdDb250cm9sbGVy
LmgiCiAjaW1wb3J0ICJEcmFnRGF0YS5oIgpAQCAtMTA3LDE1ICsxMDgsMTUgQEAgc3RhdGljIFN0
cmluZyB1dGlUeXBlRnJvbUNvY29hVHlwZShOU1N0cmluZyAqdHlwZSkKICAgICByZXR1cm4gU3Ry
aW5nKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlw
ZShIYXNoU2V0PFN0cmluZz4mIHJlc3VsdFR5cGVzLCBOU1N0cmluZyAqY29jb2FUeXBlLCBOU1Bh
c3RlYm9hcmQgKnBhc3RlYm9hcmQpCitzdGF0aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNG
b3JDb2NvYVR5cGUoRE9NU3RyaW5nTGlzdCogcmVzdWx0VHlwZXMsIE5TU3RyaW5nICpjb2NvYVR5
cGUsIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCkKIHsKICAgICAvLyBVVEkgbWF5IG5vdCBkbyB0
aGVzZSByaWdodCwgc28gbWFrZSBzdXJlIHdlIGdldCB0aGUgcmlnaHQsIHByZWRpY3RhYmxlIHJl
c3VsdAogICAgIGlmIChbY29jb2FUeXBlIGlzRXF1YWxUb1N0cmluZzpOU1N0cmluZ1Bib2FyZFR5
cGVdKSB7Ci0gICAgICAgIHJlc3VsdFR5cGVzLmFkZCgidGV4dC9wbGFpbiIpOworICAgICAgICBy
ZXN1bHRUeXBlcy0+YXBwZW5kKCJ0ZXh0L3BsYWluIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgaWYgKFtjb2NvYVR5cGUgaXNFcXVhbFRvU3RyaW5nOk5TVVJMUGJvYXJkVHlwZV0pIHsK
LSAgICAgICAgcmVzdWx0VHlwZXMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7CisgICAgICAgIHJlc3Vs
dFR5cGVzLT5hcHBlbmQoInRleHQvdXJpLWxpc3QiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBpZiAoW2NvY29hVHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNGaWxlbmFtZXNQYm9hcmRUeXBl
XSkgewpAQCAtMTI2LDE4ICsxMjcsMTggQEAgc3RhdGljIHZvaWQgYWRkSFRNTENsaXBib2FyZFR5
cGVzRm9yQ29jb2FUeXBlKEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIE5TU3QKICAgICAg
ICAgaWYgKFtmaWxlTGlzdCBjb3VudF0pIHsKICAgICAgICAgICAgIC8vIEl0IGlzIHVua25vd24g
aWYgTlNGaWxlbmFtZXNQYm9hcmRUeXBlIGFsd2F5cyBpbXBsaWVzIE5TVVJMUGJvYXJkVHlwZSBp
biBDb2NvYSwKICAgICAgICAgICAgIC8vIGJ1dCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUgc2hvdWxk
IGltcGx5IGJvdGggJ3RleHQvdXJpLWxpc3QnIGFuZCAnRmlsZXMnCi0gICAgICAgICAgICByZXN1
bHRUeXBlcy5hZGQoInRleHQvdXJpLWxpc3QiKTsKLSAgICAgICAgICAgIHJlc3VsdFR5cGVzLmFk
ZCgiRmlsZXMiKTsKKyAgICAgICAgICAgIHJlc3VsdFR5cGVzLT5hcHBlbmQoInRleHQvdXJpLWxp
c3QiKTsKKyAgICAgICAgICAgIHJlc3VsdFR5cGVzLT5hcHBlbmQoIkZpbGVzIik7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBTdHJpbmcgdXRpVHlwZSA9IHV0aVR5cGVG
cm9tQ29jb2FUeXBlKGNvY29hVHlwZSk7CiAgICAgaWYgKCF1dGlUeXBlLmlzRW1wdHkoKSkgewot
ICAgICAgICByZXN1bHRUeXBlcy5hZGQodXRpVHlwZSk7CisgICAgICAgIHJlc3VsdFR5cGVzLT5h
cHBlbmQodXRpVHlwZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgLy8gTm8gbWFwcGlu
ZywganVzdCBwYXNzIHRoZSB3aG9sZSBzdHJpbmcgdGhvdWdoCi0gICAgcmVzdWx0VHlwZXMuYWRk
KGNvY29hVHlwZSk7CisgICAgcmVzdWx0VHlwZXMtPmFwcGVuZChjb2NvYVR5cGUpOwogfQogCiB2
b2lkIENsaXBib2FyZE1hYzo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKQEAgLTI3MCwx
OSArMjcxLDE5IEBAIGJvb2wgQ2xpcGJvYXJkTWFjOjpzZXREYXRhKGNvbnN0IFN0cmluZyAmdHlw
ZSwgY29uc3QgU3RyaW5nICZkYXRhKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSGFzaFNldDxT
dHJpbmc+IENsaXBib2FyZE1hYzo6dHlwZXMoKSBjb25zdAorUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBDbGlwYm9hcmRNYWM6OnR5cGVzKCkgY29uc3QKIHsKICAgICBpZiAocG9saWN5KCkgIT0g
Q2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkK
LSAgICAgICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICByZXR1cm4gRE9NU3Ry
aW5nTGlzdDo6Y3JlYXRlKCk7CiAKICAgICBOU0FycmF5ICp0eXBlcyA9IFttX3Bhc3RlYm9hcmQu
Z2V0KCkgdHlwZXNdOwogCiAgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9y
IHNlY3VyaXR5LiAgV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBi
ZQogICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUg
Y2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCiAgICAgaWYgKG1fY2hhbmdlQ291
bnQgIT0gW21fcGFzdGVib2FyZC5nZXQoKSBjaGFuZ2VDb3VudF0pCi0gICAgICAgIHJldHVybiBI
YXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgp
OwogCi0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gcmVzdWx0ID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgTlNVSW50ZWdlciBjb3Vu
dCA9IFt0eXBlcyBjb3VudF07CiAgICAgLy8gRklYTUU6IFRoaXMgbG9vcCBjb3VsZCBiZSBzcGxp
dCBpbnRvIHR3byBzdGFnZXMuIE9uZSB3aGljaCBhZGRzIGFsbCB0aGUgSFRNTDUgc3BlY2lmaWVk
IHR5cGVzCiAgICAgLy8gYW5kIGEgc2Vjb25kIHdoaWNoIGFkZHMgYWxsIHRoZSBleHRyYSB0eXBl
cyBmcm9tIHRoZSBjb2NvYSBjbGlwYm9hcmQgKHdoaWNoIGlzIE1hYy1vbmx5IGJlaGF2aW9yKS4K
QEAgLTI5MSwxMCArMjkyLDEwIEBAIEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRNYWM6OnR5cGVz
KCkgY29uc3QKICAgICAgICAgaWYgKFtwYlR5cGUgaXNFcXVhbFRvU3RyaW5nOkAiTmVYVCBwbGFp
biBhc2NpaSBwYXN0ZWJvYXJkIHR5cGUiXSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8vIHNr
aXAgdGhpcyBhbmNpZW50IHR5cGUgdGhhdCBnZXRzIGF1dG8tc3VwcGxpZWQgYnkgc29tZSBzeXN0
ZW0gY29udmVyc2lvbgogCi0gICAgICAgIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlw
ZShyZXN1bHQsIHBiVHlwZSwgbV9wYXN0ZWJvYXJkLmdldCgpKTsKKyAgICAgICAgYWRkSFRNTENs
aXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKHJlc3VsdC5nZXQoKSwgcGJUeXBlLCBtX3Bhc3RlYm9h
cmQuZ2V0KCkpOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlKCk7CiB9CiAKIC8vIEZJWE1FOiBXZSBjb3VsZCBjYWNoZSB0aGUgY29tcHV0ZWQg
ZmlsZUxpc3QgaWYgbmVjZXNzYXJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9DbGlwYm9hcmRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9h
cmRRdC5jcHAKaW5kZXggMjczNDk1MmQ5ODZjMTAyNjIwMDc5OWZjNzY3NTc1MzA1MDdkMWQ0Yy4u
M2Q4YmFiMWY2NWFiOWMzNjliYjQ1MTQ5Mjg1NmRmMjk3M2UwZTQ3YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgIkNsaXBib2FyZFF0LmgiCiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUg
IkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdFF0LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEcmFnRGF0YS5oIgpAQCAtMTg5LDE3ICsx
OTAsMTcgQEAgYm9vbCBDbGlwYm9hcmRRdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNv
bnN0IFN0cmluZyYgZGF0YSkKIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUhh
c2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRRdDo6dHlwZXMoKSBjb25zdAorUGFzc1JlZlB0cjxET01T
dHJpbmdMaXN0PiBDbGlwYm9hcmRRdDo6dHlwZXMoKSBjb25zdAogewogICAgIGlmIChwb2xpY3ko
KSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRh
YmxlKQotICAgICAgICByZXR1cm4gSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIHJldHVybiBE
T01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKIAogICAgIEFTU0VSVChtX3JlYWRhYmxlRGF0YSk7Ci0g
ICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gcmVz
dWx0ID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgUVN0cmluZ0xpc3QgZm9ybWF0cyA9
IG1fcmVhZGFibGVEYXRhLT5mb3JtYXRzKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3Jt
YXRzLmNvdW50KCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFkZChmb3JtYXRzLmF0KGkpKTsKLSAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXN1bHQtPmFwcGVuZChmb3JtYXRzLmF0KGkpKTsK
KyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxGaWxlTGlzdD4g
Q2xpcGJvYXJkUXQ6OmZpbGVzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L0NsaXBib2FyZFF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlw
Ym9hcmRRdC5oCmluZGV4IGRjNmJhNDE3M2M4NzRiMGViZjQzMjdmZDI3ZDNmYjViNzZlZWY1MmUu
LmE4NDBiZWNmNmQ5OTZmZTc2MjcxMTdlYmVjMTkzNTA5OGY3ODEzZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaApAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsK
IAogICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmlydHVhbCBIYXNoU2V0
PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5n
TGlzdD4gdHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZp
bGVzKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0
IEludFBvaW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xp
cGJvYXJkV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4u
Y3BwCmluZGV4IGFhMzgzODgxYWMwNjhjMjc5ZDkxYzc4ZjNhMWJiOTA2ZGFjY2E2ZDUuLjg5Y2Fj
YjM1MWFiZTU5Yjc3YzNlNzc0YWY2ZjljMWRmNDRkYjY4OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc1dpbi5oIgor
I2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkRyYWdEYXRhLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCkBAIC00ODUsMjQgKzQ4NiwyNCBA
QCBib29sIENsaXBib2FyZFdpbjo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0
cmluZyYgZGF0YSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZE1pbWVU
eXBlc0ZvckZvcm1hdChIYXNoU2V0PFN0cmluZz4mIHJlc3VsdHMsIGNvbnN0IEZPUk1BVEVUQyYg
Zm9ybWF0KQorc3RhdGljIHZvaWQgYWRkTWltZVR5cGVzRm9yRm9ybWF0KERPTVN0cmluZ0xpc3Qq
IHJlc3VsdHMsIGNvbnN0IEZPUk1BVEVUQyYgZm9ybWF0KQogewogICAgIC8vIFVSTCBhbmQgVGV4
dCBhcmUgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBJRSdzIG1vZGVsCiAgICAgaWYg
KGZvcm1hdC5jZkZvcm1hdCA9PSB1cmxGb3JtYXQoKS0+Y2ZGb3JtYXQgfHwgZm9ybWF0LmNmRm9y
bWF0ID09IHVybFdGb3JtYXQoKS0+Y2ZGb3JtYXQpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQoIlVS
TCIpOwotICAgICAgICByZXN1bHRzLmFkZCgidGV4dC91cmktbGlzdCIpOworICAgICAgICByZXN1
bHRzLT5hcHBlbmQoIlVSTCIpOworICAgICAgICByZXN1bHRzLT5hcHBlbmQoInRleHQvdXJpLWxp
c3QiKTsKICAgICB9CiAKICAgICBpZiAoZm9ybWF0LmNmRm9ybWF0ID09IHBsYWluVGV4dFdGb3Jt
YXQoKS0+Y2ZGb3JtYXQgfHwgZm9ybWF0LmNmRm9ybWF0ID09IHBsYWluVGV4dEZvcm1hdCgpLT5j
ZkZvcm1hdCkgewotICAgICAgICByZXN1bHRzLmFkZCgiVGV4dCIpOwotICAgICAgICByZXN1bHRz
LmFkZCgidGV4dC9wbGFpbiIpOworICAgICAgICByZXN1bHRzLT5hcHBlbmQoIlRleHQiKTsKKyAg
ICAgICAgcmVzdWx0cy0+YXBwZW5kKCJ0ZXh0L3BsYWluIik7CiAgICAgfQogfQogCiAvLyBleHRl
bnNpb25zIGJleW9uZCBJRSdzIEFQSQotSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZFdpbjo6dHlw
ZXMoKSBjb25zdAorUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBDbGlwYm9hcmRXaW46OnR5cGVz
KCkgY29uc3QKIHsgCi0gICAgSGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7IAorICAgIFJlZlB0cjxE
T01TdHJpbmdMaXN0PiByZXN1bHRzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgaWYg
KHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5
cGVzUmVhZGFibGUpCiAgICAgICAgIHJldHVybiByZXN1bHRzOwogCkBAIC01MjIsMTYgKzUyMywx
NiBAQCBIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkV2luOjp0eXBlcygpIGNvbnN0CiAKICAgICAg
ICAgLy8gSUVudW1GT1JNQVRFVEM6Ok5leHQgcmV0dXJucyBTX0ZBTFNFIGlmIHRoZXJlIGFyZSBu
byBtb3JlIGl0ZW1zLgogICAgICAgICB3aGlsZSAoaXRyLT5OZXh0KDEsICZkYXRhLCAwKSA9PSBT
X09LKQotICAgICAgICAgICAgYWRkTWltZVR5cGVzRm9yRm9ybWF0KHJlc3VsdHMsIGRhdGEpOwor
ICAgICAgICAgICAgYWRkTWltZVR5cGVzRm9yRm9ybWF0KHJlc3VsdHMuZ2V0KCksIGRhdGEpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoRHJhZ0RhdGFNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9kcmFnRGF0YU1hcC5iZWdpbigpOyBpdCAhPSBtX2RyYWdEYXRhTWFwLmVuZCgpOyArK2l0
KSB7CiAgICAgICAgICAgICBGT1JNQVRFVEMgZGF0YTsKICAgICAgICAgICAgIGRhdGEuY2ZGb3Jt
YXQgPSAoKml0KS5maXJzdDsKLSAgICAgICAgICAgIGFkZE1pbWVUeXBlc0ZvckZvcm1hdChyZXN1
bHRzLCBkYXRhKTsKKyAgICAgICAgICAgIGFkZE1pbWVUeXBlc0ZvckZvcm1hdChyZXN1bHRzLmdl
dCgpLCBkYXRhKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiByZXN1bHRzOworICAg
IHJldHVybiByZXN1bHRzLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xp
cGJvYXJkV2luOjpmaWxlcygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xp
cGJvYXJkV2luLmgKaW5kZXggYTM1ZDhiNDhhYWM2OGFlN2VhOTI3ZWQxYTY0OWFjMDFhZWVkZjA5
MC4uOGMyMmMwYTM1ZjVlODU2MzdlYmEyNmNhMGIzYTgyYzc2MTE5YjExOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uaApAQCAtNjQsNyArNjQsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBk
YXRhKTsKIAogICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmlydHVhbCBI
YXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9N
U3RyaW5nTGlzdD4gdHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxp
c3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSos
IGNvbnN0IEludFBvaW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
eC9DbGlwYm9hcmRXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRX
eC5jcHAKaW5kZXggMzIyMTZhNjUyNDI0YmUzNjZjMGFlMmFmNTk4MTg4MzBhZTE4OGVjMS4uMTYx
YmNlOGFhYWQ0Zjc1ZWU1YzFiYWEwNDBlNDk2MzU3MmI5Zjg3ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkNsaXBib2FyZFd4LmgiCiAKKyNpbmNsdWRlICJET01TdHJp
bmdMaXN0LmgiCiAjaW5jbHVkZSAiRmlsZUxpc3QuaCIKICNpbmNsdWRlICJIYXNoVGFibGUuaCIK
ICNpbmNsdWRlICJJbnRQb2ludC5oIgpAQCAtNzAsMTEgKzcxLDEwIEBAIGJvb2wgQ2xpcGJvYXJk
V3g6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiB9CiAK
IC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJk
V3g6OnR5cGVzKCkgY29uc3QgCitQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IENsaXBib2FyZFd4
Ojp0eXBlcygpIGNvbnN0IAogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgSGFzaFNldDxT
dHJpbmc+IHJlc3VsdDsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBET01TdHJpbmdM
aXN0OjpjcmVhdGUoKTsKIH0KIAogUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkV3g6OmZp
bGVzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBi
b2FyZFd4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5oCmluZGV4
IDEzODYzNWFhZTk2MTVlZDMxMDY5NGY1YzVkZDEzODY4MmZlZWQ4YmIuLmY5MjcyNmFlNmEwNGYz
NDNiMGE5OWU0OWRmYzdkYTliMTQ1MGZkNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3d4L0NsaXBib2FyZFd4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gv
Q2xpcGJvYXJkV3guaApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSk7
CiAgICAgCiAgICAgICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgICAgIHZp
cnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAgICAgCiAgICAgICAgIEludFBvaW50
IGRyYWdMb2NhdGlvbigpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGUxZjlmNjNhN2U0NWQ4NGM4YTE4NTAzMjIx
ZmI5ZjQ5MDM0MTc1OTIuLjIzY2RmYTk4YWE3YzE1NDdlYjA0NWM2ZmJkOWEwMmYxOTM3NTBmNDMg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0wMi0xNCAgRGFuaWVsIENoZW5nICA8ZGNoZW5n
QGNocm9taXVtLm9yZz4KKworICAgICAgICBGaXggQ2xpcGJvYXJkOjp0eXBlcygpIHRvIHJldHVy
biBhIERPTVN0cmluZ0xpc3QuCisKKyAgICAgICAgZGF0YVRyYW5zZmVyLnR5cGVzIChIVE1MNSBk
cmFnICYgZHJvcCkgc2hvdWxkIHJldHVybiBET01TdHJpbmdMaXN0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDQxNgorCisgICAgICAgIFVwZGF0ZSB0
ZXN0cyB0byB1c2UgY29udGFpbnMoKSBpbnN0ZWFkIG9mIGluZGV4T2YoKS4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2Fy
ZC9jbGlwYm9hcmQtY3VzdG9tRGF0YS5odG1sOgorICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2Fy
ZC9vbnBhc3RlLXRleHQtaHRtbC10eXBlcy5odG1sOgorICAgICAgICAqIGZhc3QvZXZlbnRzL2Ry
YWctYW5kLWRyb3AtZGF0YVRyYW5zZmVyLXR5cGVzLW5vY3Jhc2guaHRtbDoKKyAgICAgICAgKiBm
YXN0L2V2ZW50cy9kcmFnLWN1c3RvbURhdGEuaHRtbDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL2xv
Y2FsL2ZpbGVhcGkvcmVzb3VyY2VzL3NldHVwLWZpbGUtaW5wdXQtZWxlbWVudC1mb3ItZHJhZy5q
czoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L2NsaXBib2FyZC9zY3JpcHQtdGVzdHMv
Y2xpcGJvYXJkLWZpbGUtYWNjZXNzLmpzOgorICAgICAgICAoY2hlY2tGb3JFdmVudFRyYW5zZmVy
VHlwZSk6CisKIDIwMTItMDItMTMgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29t
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHdyYXAgc2V0dGluZ3Mgc2VsZWN0b3IgdGV4dCBh
bmQgYWRkaW5nIGEgcnVsZSB3aXRoIHVuZG9hYmxlIGFjdGlvbnMuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvY2xpcGJvYXJkLWN1c3RvbURhdGEuaHRtbCBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jbGlwYm9hcmQtY3VzdG9tRGF0YS5odG1sCmlu
ZGV4IDMxZDk5YmI3MzhjMWUyNjE0ZWFjOTI3YzEwZjA5NzdiOGM0NjZmNWEuLjBjZTRjYmI3M2Qw
MTUwNjcwYmY5ZmZlMzRhY2Y3ZTJkMDdiZmQ0YjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Vk
aXRpbmcvcGFzdGVib2FyZC9jbGlwYm9hcmQtY3VzdG9tRGF0YS5odG1sCisrKyBiL0xheW91dFRl
c3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jbGlwYm9hcmQtY3VzdG9tRGF0YS5odG1sCkBAIC0xNyw4
ICsxNyw4IEBAIGZ1bmN0aW9uIGNvcHkoZXZlbnQpIHsKIAogZnVuY3Rpb24gcGFzdGUoZXZlbnQp
IHsKICAgICB2YXIgZmFpbGVkID0gZmFsc2U7Ci0gICAgaWYgKGV2ZW50LmNsaXBib2FyZERhdGEu
dHlwZXMuaW5kZXhPZigndGV4dC9wbGFpbicpIDwgMAotICAgICAgICB8fCBldmVudC5jbGlwYm9h
cmREYXRhLnR5cGVzLmluZGV4T2YoJ2N1c3RvbS1kYXRhJykgPCAwKQorICAgIGlmICghZXZlbnQu
Y2xpcGJvYXJkRGF0YS50eXBlcy5jb250YWlucygndGV4dC9wbGFpbicpCisgICAgICAgIHx8ICFl
dmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmNvbnRhaW5zKCdjdXN0b20tZGF0YScpKQogICAgICAg
ICBmYWlsZWQgPSB0cnVlOwogICAgIGlmIChldmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3Rl
eHQnKSAhPSAnc2FtcGxlJwogICAgICAgICB8fCBldmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEo
J2N1c3RvbS1kYXRhJykgIT0gJ2hlbGxvIHdvcmxkJykKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2VkaXRpbmcvcGFzdGVib2FyZC9vbnBhc3RlLXRleHQtaHRtbC10eXBlcy5odG1sIGIvTGF5b3V0
VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL29ucGFzdGUtdGV4dC1odG1sLXR5cGVzLmh0bWwKaW5k
ZXggM2I3NGNlNDg3YWNmMTM2NzM5MmVmNjVlNTE1YWI0ZDFiODYwZWUzMy4uZjg3ZmJlNTlmYjVk
MTYyNmY4ZDcyY2ZlNTRmMzk2MDY1MTU1NTdlOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZWRp
dGluZy9wYXN0ZWJvYXJkL29ucGFzdGUtdGV4dC1odG1sLXR5cGVzLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL29ucGFzdGUtdGV4dC1odG1sLXR5cGVzLmh0bWwKQEAg
LTgsOCArOCw3IEBAIGR1cmluZyBhbiBvbnBhc3RlIGV2ZW50LiAgVGhpcyB0ZXN0IHJlcXVpcmVz
IERSVC48L2Rpdj4KIGZ1bmN0aW9uIHBhc3RlKGV2KQogewogICAgIHZhciB0eXBlcyA9IGV2LmNs
aXBib2FyZERhdGEudHlwZXM7Ci0gICAgaWYgKHR5cGVzLmluZGV4T2YoJ3RleHQvcGxhaW4nKSA+
PSAwICYmCi0gICAgICAgIHR5cGVzLmluZGV4T2YoJ3RleHQvaHRtbCcpID49IDApCisgICAgaWYg
KHR5cGVzLmNvbnRhaW5zKCd0ZXh0L3BsYWluJykgJiYgdHlwZXMuY29udGFpbnMoJ3RleHQvaHRt
bCcpKQogICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0cyIpLmlubmVySFRN
TCA9ICJQQVNTIjsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZHJh
Zy1hbmQtZHJvcC1kYXRhVHJhbnNmZXItdHlwZXMtbm9jcmFzaC5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHMvZHJhZy1hbmQtZHJvcC1kYXRhVHJhbnNmZXItdHlwZXMtbm9jcmFzaC5odG1s
CmluZGV4IDIxMjhlNDA4Mzc2Y2VkYTU2YzJkMWExMTBhNTFkNGYxZTEyYTlhMWIuLjM3Mzk2NTVi
OThlYjYzYzg2N2M0YThiZjNmMjM0M2ExZjVkODljNGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2RyYWctYW5kLWRyb3AtZGF0YVRyYW5zZmVyLXR5cGVzLW5vY3Jhc2guaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9kcmFnLWFuZC1kcm9wLWRhdGFUcmFuc2Zl
ci10eXBlcy1ub2NyYXNoLmh0bWwKQEAgLTg0LDcgKzg0LDcgQEAKICAgICB7CiAgICAgICAgIGV2
ZW50ID0gZTsKICAgICAgICAgdmFyIGZvcm1hdFR5cGVzID0gZS5kYXRhVHJhbnNmZXIudHlwZXM7
IC8vIFRoaXMgbGluZSBjYXVzZXMgdGhlIGNyYXNoLgotICAgICAgICBpZiAoZXZlbnQuZGF0YVRy
YW5zZmVyLnR5cGVzLmluZGV4T2YoRk9STUFUX1RZUEUpID09IC0xKQorICAgICAgICBpZiAoZXZl
bnQuZGF0YVRyYW5zZmVyLnR5cGVzLmNvbnRhaW5zKEZPUk1BVF9UWVBFKSA9PSAtMSkKICAgICAg
ICAgICAgIHRlc3RGYWlsZWQoJ2V2ZW50LmRhdGFUcmFuc2Zlci50eXBlcyBzaG91bGQgY29udGFp
biBmb3JtYXQgIicgKyBGT1JNQVRfVFlQRSArICciLCBidXQgaXQgZG9lcyBub3QuJyk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHRlc3RQYXNzZWQoJ2V2ZW50LmRhdGFUcmFuc2Zlci50eXBl
cyBjb250YWlucyBmb3JtYXQgIicgKyBGT1JNQVRfVFlQRSArICciJyk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9kcmFnLWN1c3RvbURhdGEuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL2RyYWctY3VzdG9tRGF0YS5odG1sCmluZGV4IGRjYTU3ZWZkNDYyMzU1ODRm
YjllMjc3MGFkM2I5MDI1ZTllNzJmMGQuLmQ4Y2UyNWM2NzM5YTU5OWUxMDlmYTIxMmRlNTJiY2Zk
Y2Q2M2Q3NTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RyYWctY3VzdG9t
RGF0YS5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RyYWctY3VzdG9tRGF0YS5o
dG1sCkBAIC0zMiw4ICszMiw4IEBAIGZ1bmN0aW9uIGRyYWdvdmVyKGV2ZW50KSB7CiB9CiBmdW5j
dGlvbiBkcm9wKGV2ZW50KSB7CiAgICAgdmFyIGZhaWxlZCA9IGZhbHNlOwotICAgIGlmIChldmVu
dC5kYXRhVHJhbnNmZXIudHlwZXMuaW5kZXhPZigndGV4dC9wbGFpbicpIDwgMAotICAgICAgICB8
fCBldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5kZXhPZignY3VzdG9tLWRhdGEnKSA8IDApCisg
ICAgaWYgKCFldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuY29udGFpbnMoJ3RleHQvcGxhaW4nKQor
ICAgICAgICB8fCAhZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmNvbnRhaW5zKCdjdXN0b20tZGF0
YScpKQogICAgICAgICBmYWlsZWQgPSB0cnVlOwogICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIu
Z2V0RGF0YSgndGV4dCcpICE9ICdzYW1wbGUnCiAgICAgICAgIHx8IGV2ZW50LmRhdGFUcmFuc2Zl
ci5nZXREYXRhKCdjdXN0b20tZGF0YScpICE9ICdoZWxsbyB3b3JsZCcpCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2ZpbGVhcGkvcmVzb3VyY2VzL3NldHVwLWZpbGUt
aW5wdXQtZWxlbWVudC1mb3ItZHJhZy5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwv
ZmlsZWFwaS9yZXNvdXJjZXMvc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzCmlu
ZGV4IGM1MWM2ODBiZmVmMzAyOTAzY2YzNmRjMWM5NGVmYzVjMmJjNDM5ZmYuLjM3OGZlYjgxOWQx
NmQ4OGZhYTYxZDFkNmVmYTc1YzdjODIyZmYwN2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvbG9jYWwvZmlsZWFwaS9yZXNvdXJjZXMvc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50
LWZvci1kcmFnLmpzCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9jYWwvZmlsZWFwaS9y
ZXNvdXJjZXMvc2V0dXAtZmlsZS1pbnB1dC1lbGVtZW50LWZvci1kcmFnLmpzCkBAIC0xNiw3ICsx
Niw3IEBAIGZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIGZ1bmN0aW9uKCkg
ewogCiB2YXIgZmlsZUlucHV0RHJvcENhbGxiYWNrID0gbnVsbDsKIGZpbGVJbnB1dC5hZGRFdmVu
dExpc3RlbmVyKCJkcm9wIiwgZnVuY3Rpb24oKSB7Ci0gICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zl
ci50eXBlcy5pbmRleE9mKCJGaWxlcyIpICE9IC0xICYmIGV2ZW50LmRhdGFUcmFuc2Zlci5maWxl
cy5sZW5ndGggPT0gMSkKKyAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmNvbnRhaW5z
KCJGaWxlcyIpICYmIGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGggPT0gMSkKICAgICAg
ICAgdGVzdFBhc3NlZCgiZXZlbnQuZGF0YVRyYW5zZmVyIGNvbnRhaW5zIGEgRmlsZSBvYmplY3Qg
b24gZHJvcC4iKTsKICAgICBlbHNlIHsKICAgICAgICAgdGVzdEZhaWxlZCgiZXZlbnQuZGF0YVRy
YW5zZmVyIGRvZXMgbm90IGNvbnRhaW4gYSBGaWxlIG9iamVjdCBvbiBkcm9wLiIpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS9jbGlwYm9hcmQvc2NyaXB0LXRl
c3RzL2NsaXBib2FyZC1maWxlLWFjY2Vzcy5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2Vj
dXJpdHkvY2xpcGJvYXJkL3NjcmlwdC10ZXN0cy9jbGlwYm9hcmQtZmlsZS1hY2Nlc3MuanMKaW5k
ZXggNGI2MzY4ZDQ2MzIxNmIxNDE0MjYyMTI4OWFhYWMxOGNkZmYwMDdkMi4uOWIyOGEwYmJlZGEz
YTZjMWFhN2M1YTc4NGRmMGVkZmI1NmQ4MTllNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS9jbGlwYm9hcmQvc2NyaXB0LXRlc3RzL2NsaXBib2FyZC1maWxlLWFj
Y2Vzcy5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2NsaXBib2FyZC9z
Y3JpcHQtdGVzdHMvY2xpcGJvYXJkLWZpbGUtYWNjZXNzLmpzCkBAIC03NSw3ICs3NSw3IEBAIGZ1
bmN0aW9uIGNoZWNrRm9yRXZlbnRUcmFuc2ZlclR5cGUoZXZlbnQsIHR5cGVTdHJpbmcsIHNob3Vs
ZENvbnRhaW5UeXBlKQogewogICAgIHZhciBwYXNzZWRDaGVjazsKICAgICB2YXIgbWVzc2FnZTsK
LSAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzICYmIGV2ZW50LmRhdGFUcmFuc2Zlci50
eXBlcy5pbmRleE9mKHR5cGVTdHJpbmcpICE9IC0xKSB7CisgICAgaWYgKGV2ZW50LmRhdGFUcmFu
c2Zlci50eXBlcyAmJiBldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuY29udGFpbnModHlwZVN0cmlu
ZykpIHsKICAgICAgICAgcGFzc2VkQ2hlY2sgPSBzaG91bGRDb250YWluVHlwZTsKICAgICAgICAg
bWVzc2FnZSA9ICJldmVudC5kYXRhVHJhbnNmZXIudHlwZXMgY29udGFpbnMgIiArIHR5cGVTdHJp
bmcgKyAiLiI7CiAgICAgfSBlbHNlIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127287</attachid>
            <date>2012-02-15 18:08:18 -0800</date>
            <delta_ts>2012-02-15 20:31:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-30416-20120215180817.patch</filename>
            <type>text/plain</type>
            <size>42796</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjE4MWU1N2JlMTI5MTMy
ZjkxMDc0YWI5NDVkNGJiNDNmNGIwYTA3NC4uMjI0YTdkOThhNDhhZWUyYjFhNzI4NTg1YjQ4YzIz
NDg4ZTM2NzBjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEyLTAyLTE1ICBEYW5p
ZWwgQ2hlbmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIGRhdGFUcmFuc2Zlci50
eXBlcyAoSFRNTDUgZHJhZyAmIGRyb3ApIHNob3VsZCByZXR1cm4gRE9NU3RyaW5nTGlzdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA0MTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBi
cmVha3MgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk7IGhvd2V2ZXIsIHNpbmNlIEZpcmVmb3ggb25s
eSBzdXBwb3J0ZWQKKyAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVzLmNvbnRhaW5zLCBz
aXRlcyBhbHJlYWR5IG5lZWRlZCB0byBjaGVjayB3aGV0aGVyIHRvIHVzZSBjb250YWlucyBvcgor
ICAgICAgICBpbmRleE9mLiBUaGVyZWZvcmUsIHRoZSBuZXQgY29tcGF0aWJpbGl0eSBlZmZlY3Qg
b2YgdGhpcyBjaGFuZ2Ugc2hvdWxkIGJlIG1pbmltYWwuCisKKyAgICAgICAgVGVzdDogZmFzdC9l
dmVudHMvZHJhZy1kYXRhVHJhbnNmZXItbGl2ZS1hdHRyaWJ1dGVzLmh0bWwKKworICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQ2xpcGJvYXJkQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3RvbS5jcHA6CisgICAg
ICAgICogZG9tL0NsaXBib2FyZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6Omhh
c1N0cmluZ09mVHlwZSk6CisgICAgICAgICogZG9tL0NsaXBib2FyZC5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChDbGlwYm9hcmQpOgorICAgICAgICAqIGRvbS9DbGlwYm9hcmQuaWRs
OgorICAgICAgICAqIHBsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tCZXJyeS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRCbGFja0JlcnJ5Ojp0eXBlcyk6CisgICAgICAg
ICogcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5Lmg6CisgICAgICAgIChD
bGlwYm9hcmRCbGFja0JlcnJ5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1
bURhdGFPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0Ojp0
eXBlcyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0Lmg6
CisgICAgICAgIChDaHJvbWl1bURhdGFPYmplY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL0NsaXBib2FyZENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENo
cm9taXVtOjp0eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6bWF5
VXBkYXRlSXRlbXMpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9t
aXVtLmg6CisgICAgICAgIChDbGlwYm9hcmRDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb250YWlu
c0hUTUwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zVVJMKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0
YTo6Y29udGFpbnNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNhblNt
YXJ0UmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNGcmFnbWVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmRFZmw6OnR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvQ2xpcGJvYXJk
RWZsLmg6CisgICAgICAgIChDbGlwYm9hcmRFZmwpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9D
bGlwYm9hcmRHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkR3RrOjp0eXBlcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oOgorICAgICAgICAoQ2xpcGJv
YXJkR3RrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmg6CisgICAgICAg
IChDbGlwYm9hcmRNYWMpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjphZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkTWFjOjp0eXBlcyk6CisgICAgICAgICogcGxhdGZv
cm0vcXQvQ2xpcGJvYXJkUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkUXQ6OnR5
cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oOgorICAgICAgICAoQ2xp
cGJvYXJkUXQpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6YWRkTWltZVR5cGVzRm9yRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBib2FyZFdpbjo6dHlwZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9DbGlwYm9hcmRX
aW4uaDoKKyAgICAgICAgKENsaXBib2FyZFdpbik6CisgICAgICAgICogcGxhdGZvcm0vd3gvQ2xp
cGJvYXJkV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkV3g6OnR5cGVzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5oOgorICAgICAgICAoQ2xpcGJvYXJkV3gp
OgorCiAyMDEyLTAyLTE0ICBUYWthc2hpIFRveW9zaGltYSAgPHRveW9zaGltQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWJTb2NrZXRDaGFubmVsIG1pbm9yIHJlZmFjdG9yaW5nIGZvciBjb2Rl
IG1hbmFnZWFiaWxpdHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2xpcGJvYXJkQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2xpcGJv
YXJkQ3VzdG9tLmNwcAppbmRleCBlZmNlNzliYzA3YjNkNTE5NDQyYjM4ODg4ZjhkYThlYzEwYWMz
YzQ2Li4zNTMyYzc4NTkyNGZhZGRjMmZkMjlmMDc2NDUxZmNlOTNiMjI4OWQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NsaXBib2FyZEN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDbGlwYm9hcmRDdXN0b20uY3BwCkBAIC00OCwy
MSArNDgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKLUpTVmFsdWUgSlNDbGlwYm9hcmQ6OnR5cGVzKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
LXsKLSAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IGltcGwoKTsKLQotICAgIEhhc2hTZXQ8U3Ry
aW5nPiB0eXBlcyA9IGNsaXBib2FyZC0+dHlwZXMoKTsKLSAgICBpZiAodHlwZXMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBs
aXN0OwotICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdHlwZXMuZW5k
KCk7Ci0gICAgZm9yIChIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdHlwZXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBsaXN0LmFwcGVuZChqc1N0cmluZyhl
eGVjLCBzdHJpbmdUb1VTdHJpbmcoKml0KSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShl
eGVjLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19Ci0KIEpTVmFsdWUgSlNDbGlwYm9hcmQ6OmNs
ZWFyRGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBp
bXBsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
bGlwYm9hcmRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2xpcGJvYXJkQ3VzdG9tLmNwcAppbmRleCBkODVkN2EwNmM2YzQzYWQwNjVkYWM0NTY3YjkzYmQz
MjUxYTMxYTZhLi41MWQ2ZjJjNzIxMmI4ZDE4MDM3NjcyZmIxYmY3ZjBiYjY1MzFiYTE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2Fy
ZEN1c3RvbS5jcHAKQEAgLTQ0LDI0ICs0NCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q2xpcGJvYXJkOjp0eXBlc0FjY2Vzc29yR2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQot
ewotICAgIElOQ19TVEFUUygiRE9NLkNsaXBib2FyZC50eXBlcygpIik7Ci0gICAgQ2xpcGJvYXJk
KiBjbGlwYm9hcmQgPSBWOENsaXBib2FyZDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0KLSAg
ICBIYXNoU2V0PFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5cGVzKCk7Ci0gICAgaWYgKHR5
cGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7Ci0KLSAgICB2ODo6TG9j
YWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldyh0eXBlcy5zaXplKCkpOwotICAg
IEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gdHlwZXMuZW5kKCk7Ci0gICAg
aW50IGluZGV4ID0gMDsKLSAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQsICsraW5kZXgpCi0gICAgICAgIHJl
c3VsdC0+U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaW5kZXgpLCB2OFN0cmluZygqaXQpKTsKLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENsaXBib2FyZDo6
Y2xlYXJEYXRhQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5DbGlwYm9hcmQuY2xlYXJEYXRhKCkiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DbGlwYm9hcmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5j
cHAKaW5kZXggMDI3OTkyNTE1MmVlMmIxMWUxZDE5MTAyYjU5MDMyOWJlMzJkM2FkNi4uZWJiODM3
ZmY0N2JiODQ4NzVmMDRmMTFiOGQ4ZTkyZWM2OTRkY2ZhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0NsaXBib2FyZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2Fy
ZC5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJDbGlwYm9hcmQuaCIKIAogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUg
IkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgpAQCAtMTQ3LDcgKzE0OCw3IEBAIGJvb2wgQ2xpcGJvYXJkOjpoYXNTdHJpbmdPZlR5cGUoY29u
c3QgU3RyaW5nJiB0eXBlKSBjb25zdAogICAgIGlmIChtX3BvbGljeSAhPSBDbGlwYm9hcmRSZWFk
YWJsZSAmJiBtX3BvbGljeSAhPSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIHR5cGVzKCkuY29udGFpbnModHlwZSk7IAorICAg
IHJldHVybiB0eXBlcygpLT5jb250YWlucyh0eXBlKTsgCiB9CiAgICAgCiB2b2lkIENsaXBib2Fy
ZDo6c2V0RHJvcEVmZmVjdChjb25zdCBTdHJpbmcgJmVmZmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQu
aAppbmRleCBhMDdhZTlmYzU3ZmM1NjU2ZTkzZTYzMGJlOGE2MjgxMzY3YzE5NTUwLi5kMzM4Mjlh
NmMxOWMxMWI2ZDMyYTc5MmUzNzE0ZWM0ODgzYjMxZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2xpcGJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5o
CkBAIC0zMyw2ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNsYXNzIERP
TVN0cmluZ0xpc3Q7CiAgICAgY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxpc3Q7CiAgICAgY2xhc3Mg
RHJhZ0RhdGE7CiAgICAgY2xhc3MgRmlsZUxpc3Q7CkBAIC02Niw3ICs2Nyw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0
eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpID0gMDsKICAgICAKICAgICAgICAgLy8gZXh0ZW5zaW9u
cyBiZXlvbmQgSUUncyBBUEkKLSAgICAgICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMo
KSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0
eXBlcygpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBm
aWxlcygpIGNvbnN0ID0gMDsKIAogICAgICAgICBJbnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2RyYWdMb2M7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9D
bGlwYm9hcmQuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5pZGwKaW5kZXggYjAw
NTA0NmNiMTIzMzhhZTA1MzNiNjI4YTNjNDkwZGU4YTQ4NDRlMy4uYzFjNTg1MGVjMTMwZDAzNmZh
N2FlYmZmNzExMGY5YjBlMmZjNjg1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Ns
aXBib2FyZC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5pZGwKQEAgLTMx
LDcgKzMxLDcgQEAgbW9kdWxlIGNvcmUgewogICAgIGludGVyZmFjZSBDbGlwYm9hcmQgewogICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGUgW1RyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9VW5kZWZp
bmVkXSBET01TdHJpbmcgZHJvcEVmZmVjdDsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtU
cmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPVVuZGVmaW5lZF0gRE9NU3RyaW5nIGVmZmVjdEFsbG93
ZWQ7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBBcnJheSB0eXBl
czsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ0xpc3QgdHlwZXM7CiAgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBGaWxlTGlzdCBmaWxlczsKIAogICAgICAgICBbQ3VzdG9t
XSB2b2lkIGNsZWFyRGF0YShpbiBbT3B0aW9uYWxdIERPTVN0cmluZyB0eXBlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvQ2xpcGJvYXJkQmxhY2tC
ZXJyeS5jcHAKaW5kZXggMTYxMjczNzZlNmViMWQyNWU5YWM2ZGNiYTRiZjA0OGFkZjI3YjIzYi4u
YjIyNGQ1Y2IwMTllNTc3MzdhYmM2ODQwNzVlM2EwMzQ0YzZhYmM5MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVy
cnkuY3BwCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
Q2xpcGJvYXJkQmxhY2tCZXJyeS5oIgogCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2lu
Y2x1ZGUgIkZpbGVMaXN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIApAQCAtNzIs
MTQgKzczLDE0IEBAIGJvb2wgQ2xpcGJvYXJkQmxhY2tCZXJyeTo6c2V0RGF0YShjb25zdCBTdHJp
bmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSGFz
aFNldDxTdHJpbmc+IENsaXBib2FyZEJsYWNrQmVycnk6OnR5cGVzKCkgY29uc3QKK1Bhc3NSZWZQ
dHI8RE9NU3RyaW5nTGlzdD4gQ2xpcGJvYXJkQmxhY2tCZXJyeTo6dHlwZXMoKSBjb25zdAogewog
ICAgIC8vIFdlIHVzZSBoYXJkY29kZWQgbGlzdCBoZXJlIHNpbmNlIHRoZXJlIHNlZW1zIHRvIGJl
IG5vIEFQSSB0byBnZXQgdGhlIGxpc3QuCi0gICAgSGFzaFNldDxTdHJpbmc+IHJldDsKLSAgICBy
ZXQuYWRkKCJ0ZXh0L3BsYWluIik7Ci0gICAgcmV0LmFkZCgidGV4dC9odG1sIik7Ci0gICAgcmV0
LmFkZCgidGV4dC91cmwiKTsKLSAgICByZXR1cm4gcmV0OworICAgIFJlZlB0cjxET01TdHJpbmdM
aXN0PiByZXQgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKKyAgICByZXQtPmFwcGVuZCgidGV4
dC9wbGFpbiIpOworICAgIHJldC0+YXBwZW5kKCJ0ZXh0L2h0bWwiKTsKKyAgICByZXQtPmFwcGVu
ZCgidGV4dC91cmwiKTsKKyAgICByZXR1cm4gcmV0LnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0
cjxGaWxlTGlzdD4gQ2xpcGJvYXJkQmxhY2tCZXJyeTo6ZmlsZXMoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9DbGlwYm9hcmRCbGFja0JlcnJ5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVy
cnkuaAppbmRleCAyZjM5ZjQ2NWUwZmQxZGE2ZGI2MGQ4NmIyN2RiNjJhNWJmYmQwNjFiLi4yNTVk
NmFhMjg0Y2M2OTIzZmMyZjBjNDQ3MjliYjA0NmIxOGI0MGU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ibGFja2JlcnJ5L0NsaXBib2FyZEJsYWNrQmVycnkuaApA
QCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElF
J3MgQVBJCi0gICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdHlwZXMoKSBjb25zdDsKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBEcmFn
SW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JikgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgdGl0bGUsIEZyYW1lKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcAppbmRleCA2YWQxMGM3ZGEzNGFj
N2Q1YTdiODA2YzNkNzcxMTkyOGZkN2Q0NDcxLi5kNmI3M2U1ZjA5M2QyNDFmMzViYzc5YTUzMTlh
YTVlNmIyN2EyNTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9DaHJvbWl1bURhdGFPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKQEAgLTEwMSwzMyArMTAxLDM2IEBAIGJvb2wg
Q2hyb21pdW1EYXRhT2JqZWN0OjpoYXNEYXRhKCkgY29uc3QKICAgICAgICAgfHwgbV9maWxlQ29u
dGVudDsKIH0KIAotSGFzaFNldDxTdHJpbmc+IENocm9taXVtRGF0YU9iamVjdDo6dHlwZXMoKSBj
b25zdAorUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBDaHJvbWl1bURhdGFPYmplY3Q6OnR5cGVz
KCkgY29uc3QKIHsKKyAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gcmVzdWx0cyA9IERPTVN0cmlu
Z0xpc3Q6OmNyZWF0ZSgpOworCiAgICAgaWYgKG1fc3RvcmFnZU1vZGUgPT0gUGFzdGVib2FyZCkg
ewogICAgICAgICBib29sIGlnbm9yZWRDb250YWluc0ZpbGVuYW1lczsKLSAgICAgICAgcmV0dXJu
IFBsYXRmb3JtU3VwcG9ydDo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKGN1cnJlbnRQYXN0
ZWJvYXJkQnVmZmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmaWdub3JlZENvbnRhaW5zRmlsZW5hbWVzKTsKKyAgICAgICAg
SGFzaFNldDxTdHJpbmc+IGhhc2hlZFJlc3VsdHMgPSBQbGF0Zm9ybVN1cHBvcnQ6OmNsaXBib2Fy
ZFJlYWRBdmFpbGFibGVUeXBlcygKKyAgICAgICAgICAgIGN1cnJlbnRQYXN0ZWJvYXJkQnVmZmVy
KCksICZpZ25vcmVkQ29udGFpbnNGaWxlbmFtZXMpOworICAgICAgICBmb3IgKEhhc2hTZXQ8U3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoYXNoZWRSZXN1bHRzLmJlZ2luKCk7IGl0ICE9IGhh
c2hlZFJlc3VsdHMuZW5kKCk7ICsraXQpCisgICAgICAgICAgcmVzdWx0cy0+YXBwZW5kKCppdCk7
CisgICAgICAgIHJldHVybiByZXN1bHRzLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICBIYXNoU2V0
PFN0cmluZz4gcmVzdWx0czsKLQogICAgIGlmICghbV9wbGFpblRleHQuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIHJlc3VsdHMuYWRkKG1pbWVUeXBlVGV4dCk7Ci0gICAgICAgIHJlc3VsdHMuYWRkKG1p
bWVUeXBlVGV4dFBsYWluKTsKKyAgICAgICAgcmVzdWx0cy0+YXBwZW5kKG1pbWVUeXBlVGV4dCk7
CisgICAgICAgIHJlc3VsdHMtPmFwcGVuZChtaW1lVHlwZVRleHRQbGFpbik7CiAgICAgfQogCiAg
ICAgaWYgKCFtX3VyaUxpc3QuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlw
ZVRleHRVUklMaXN0KTsKKyAgICAgICAgcmVzdWx0cy0+YXBwZW5kKG1pbWVUeXBlVGV4dFVSSUxp
c3QpOwogCiAgICAgaWYgKCFtX3RleHRIdG1sLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0cy5h
ZGQobWltZVR5cGVUZXh0SFRNTCk7CisgICAgICAgIHJlc3VsdHMtPmFwcGVuZChtaW1lVHlwZVRl
eHRIVE1MKTsKIAogICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yOjpLZXlzIGl0ID0gbV9jdXN0b21EYXRhLmJlZ2luKCkua2V5cygpOwogICAgICAgICAgaXQg
IT0gbV9jdXN0b21EYXRhLmVuZCgpLmtleXMoKTsgKytpdCkgewotICAgICAgICByZXN1bHRzLmFk
ZCgqaXQpOworICAgICAgICByZXN1bHRzLT5hcHBlbmQoKml0KTsKICAgICB9CiAKLSAgICByZXR1
cm4gcmVzdWx0czsKKyAgICByZXR1cm4gcmVzdWx0cy5yZWxlYXNlKCk7CiB9CiAKIFN0cmluZyBD
aHJvbWl1bURhdGFPYmplY3Q6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNj
ZXNzKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
Q2hyb21pdW1EYXRhT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
aHJvbWl1bURhdGFPYmplY3QuaAppbmRleCA3ZTY3NWJmOTM5OTUwYmZlODg1MjM0YjA3MWU5YTg0
MmQxNGYxYjE4Li45YTZmNTYyZDExZjcxNmU1MTc4MjhiNmE5MzliMzhhOWMzNGVjZGE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmpl
Y3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFP
YmplY3QuaApAQCAtMzEsMTEgKzMxLDExIEBACiAjaWZuZGVmIENocm9taXVtRGF0YU9iamVjdF9o
CiAjZGVmaW5lIENocm9taXVtRGF0YU9iamVjdF9oCiAKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0
LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgpAQCAtNzUsNyArNzUs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0RhdGEoKSBjb25zdDsKIAotICAgIEhhc2hTZXQ8
U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdHlw
ZXMoKSBjb25zdDsKICAgICBTdHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wm
IHN1Y2Nlc3MpIGNvbnN0OwogICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNv
bnN0IFN0cmluZyYgZGF0YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAppbmRleCA3NWY4ZjYzMGMwOWM5MjI4YzAz
M2FjOWI2YWI2YWFhMTk5NDJhMWQzLi4xYjE1MzZlMzU0NTQyMWQzMWVlZjJlNWZiZmJkNzg2MGFi
Mzk0ODk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlw
Ym9hcmRDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
Q2xpcGJvYXJkQ2hyb21pdW0uY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQ2hyb21p
dW1EYXRhT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVk
ZSAiQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0
LmgiCiAjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUNocm9taXVtLmgiCiAjaW5jbHVkZSAiRGF0
YVRyYW5zZmVySXRlbUxpc3RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC0y
ODksMjEgKzI5MCwyMCBAQCBib29sIENsaXBib2FyZENocm9taXVtOjpwbGF0Zm9ybUNsaXBib2Fy
ZENoYW5nZWQoKSBjb25zdAogfQogCiAvLyBleHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQotSGFz
aFNldDxTdHJpbmc+IENsaXBib2FyZENocm9taXVtOjp0eXBlcygpIGNvbnN0CitQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IENsaXBib2FyZENocm9taXVtOjp0eXBlcygpIGNvbnN0CiB7Ci0gICAg
SGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJl
YWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJl
dHVybiByZXN1bHRzOworICAgICAgICByZXR1cm4gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAK
ICAgICBpZiAoIW1fZGF0YU9iamVjdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAg
IHJldHVybiBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKIAotICAgIHJlc3VsdHMgPSBtX2RhdGFP
YmplY3QtPnR5cGVzKCk7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHJlc3VsdHMgPSBtX2Rh
dGFPYmplY3QtPnR5cGVzKCk7CiAKICAgICBpZiAobV9kYXRhT2JqZWN0LT5jb250YWluc0ZpbGVu
YW1lcygpKQotICAgICAgICByZXN1bHRzLmFkZChtaW1lVHlwZUZpbGVzKTsKKyAgICAgICAgcmVz
dWx0cy0+YXBwZW5kKG1pbWVUeXBlRmlsZXMpOwogCi0gICAgcmV0dXJuIHJlc3VsdHM7CisgICAg
cmV0dXJuIHJlc3VsdHMucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlw
Ym9hcmRDaHJvbWl1bTo6ZmlsZXMoKSBjb25zdApAQCAtNTE4LDkgKzUxOCw5IEBAIHZvaWQgQ2xp
cGJvYXJkQ2hyb21pdW06Om1heVVwZGF0ZUl0ZW1zKFZlY3RvcjxSZWZQdHI8RGF0YVRyYW5zZmVy
SXRlbT4gPiYgaXRlbXMpCiAKICAgICBpZiAoaXNGb3JDb3B5QW5kUGFzdGUoKSAmJiBwb2xpY3ko
KSA9PSBDbGlwYm9hcmRSZWFkYWJsZSkgewogICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhl
IHR5cGVzIGFuZCBhZGQgdGhlbS4KLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzID0gbV9k
YXRhT2JqZWN0LT50eXBlcygpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSB0eXBlcy5iZWdpbigpOyBpdCAhPSB0eXBlcy5lbmQoKTsgKytpdCkKLSAg
ICAgICAgICAgIGl0ZW1zLmFwcGVuZChEYXRhVHJhbnNmZXJJdGVtQ2hyb21pdW06OmNyZWF0ZUZy
b21QYXN0ZWJvYXJkKHRoaXMsIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsICppdCkpOworICAgICAg
ICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdHlwZXMgPSBtX2RhdGFPYmplY3QtPnR5cGVzKCk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHlwZXMtPmxlbmd0aCgpOyArK2kpCisgICAg
ICAgICAgICBpdGVtcy5hcHBlbmQoRGF0YVRyYW5zZmVySXRlbUNocm9taXVtOjpjcmVhdGVGcm9t
UGFzdGVib2FyZCh0aGlzLCBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCB0eXBlcy0+aXRlbShpKSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAppbmRleCA5MjQyMjZkZjMyNTY1ZTY5
NTcyMzAxMDYzNWJmMmU2ZjRmYzAwOWE4Li5hZTllYjcxMWIxZDgyY2RiNThlZDIyZGEzZTAxMjAy
YzgyZjBhNTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtLmgKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBib29sIHBsYXRmb3JtQ2xpcGJvYXJkQ2hhbmdlZCgpIGNvbnN0OwogCiAgICAg
ICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgICAgIHZpcnR1YWwgSGFzaFNl
dDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01T
dHJpbmdMaXN0PiB0eXBlcygpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Rmls
ZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVk
SW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAppbmRleCAzZDk0YTE5YjI1Yjg2OGIw
ZjBiZTFlMDJlNmUwOTY5OTFlNDNiOTRjLi5hN2E4NTM1NTk4YTFlNjcxOGZiZWNjYmFiZTliZDEz
YzhhZjZhNThlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9E
cmFnRGF0YUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9EcmFnRGF0YUNocm9taXVtLmNwcApAQCAtNDUsMTkgKzQ1LDE5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RhdGljIGJvb2wgY29udGFpbnNIVE1MKGNvbnN0IENocm9taXVtRGF0YU9iamVj
dCogZHJvcERhdGEpCiB7Ci0gICAgcmV0dXJuIGRyb3BEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1p
bWVUeXBlVGV4dEhUTUwpOworICAgIHJldHVybiBkcm9wRGF0YS0+dHlwZXMoKS0+Y29udGFpbnMo
bWltZVR5cGVUZXh0SFRNTCk7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zVVJMKEZyYW1l
KiwgRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5KSBjb25zdAogewotICAg
IHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5cGVUZXh0
VVJJTGlzdCkKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLT5jb250YWlu
cyhtaW1lVHlwZVRleHRVUklMaXN0KQogICAgICAgICB8fCAoZmlsZW5hbWVQb2xpY3kgPT0gQ29u
dmVydEZpbGVuYW1lcyAmJiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmNvbnRhaW5zRmlsZW5hbWVzKCkp
OwogfQogCiBTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZyYW1lKiwgRmlsZW5hbWVDb252ZXJzaW9u
UG9saWN5IGZpbGVuYW1lUG9saWN5LCBTdHJpbmcqIHRpdGxlKSBjb25zdAogewogICAgIFN0cmlu
ZyB1cmw7Ci0gICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucyhtaW1l
VHlwZVRleHRVUklMaXN0KSkgeworICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkt
PmNvbnRhaW5zKG1pbWVUeXBlVGV4dFVSSUxpc3QpKSB7CiAgICAgICAgIGJvb2wgaWdub3JlZFN1
Y2Nlc3M7CiAgICAgICAgIHVybCA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0RGF0YShtaW1lVHlw
ZVVSTCwgaWdub3JlZFN1Y2Nlc3MpOwogICAgICAgICBpZiAodGl0bGUpCkBAIC04Nyw3ICs4Nyw3
IEBAIHZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JiByZXN1bHQpIGNv
bnN0CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dFBs
YWluKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLT5jb250YWlucyht
aW1lVHlwZVRleHRQbGFpbik7CiB9CiAKIFN0cmluZyBEcmFnRGF0YTo6YXNQbGFpblRleHQoRnJh
bWUqKSBjb25zdApAQCAtMTA4LDggKzEwOCw4IEBAIGJvb2wgRHJhZ0RhdGE6OmNhblNtYXJ0UmVw
bGFjZSgpIGNvbnN0CiAgICAgLy8gVGhpcyBpcyBhbGxvd2VkIHdoZW5ldmVyIHRoZSBkcmFnIGRh
dGEgY29udGFpbnMgYSAncmFuZ2UnIChpZS4sCiAgICAgLy8gQ2xpcGJvYXJkV2luOjp3cml0ZVJh
bmdlIGlzIGNhbGxlZCkuICBGb3IgZXhhbXBsZSwgZHJhZ2dpbmcgYSBsaW5rCiAgICAgLy8gc2hv
dWxkIG5vdCByZXN1bHQgaW4gYSBzcGFjZSBiZWluZyBhZGRlZC4KLSAgICByZXR1cm4gbV9wbGF0
Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dFBsYWluKQotICAgICAg
ICAmJiAhbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKG1pbWVUeXBlVGV4dFVS
SUxpc3QpOworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCktPmNvbnRhaW5z
KG1pbWVUeXBlVGV4dFBsYWluKQorICAgICAgICAmJiAhbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBl
cygpLT5jb250YWlucyhtaW1lVHlwZVRleHRVUklMaXN0KTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6
Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCgpIGNvbnN0CkBAIC0xNDEsNyArMTQxLDcgQEAgUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChGcmFtZSogZnJh
bWUsIFBhc3NSZWZQdHI8UmFuZ2UKICAgICAgICAgLy8gICAgcmV0dXJuIGZyYWdtZW50OwogICAg
IH0KIAotICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMobWltZVR5
cGVUZXh0SFRNTCkpIHsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLT5jb250
YWlucyhtaW1lVHlwZVRleHRIVE1MKSkgewogICAgICAgICBib29sIGlnbm9yZWRTdWNjZXNzOwog
ICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksCiAgICAgICAgICAgICBtX3BsYXRmb3JtRHJh
Z0RhdGEtPmdldERhdGEobWltZVR5cGVUZXh0SFRNTCwgaWdub3JlZFN1Y2Nlc3MpLCBtX3BsYXRm
b3JtRHJhZ0RhdGEtPmh0bWxCYXNlVXJsKCksIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwCmluZGV4IDhk
Yzk1ZTg2NWIzMDhlMWU2ZmIzMTdiNmZkMmI1ZGUyZjBmZTQ1NDEuLjYwMTUyNzI2YTQ5NTIzN2M5
YzI1ODI2ODM2MTQ5MzVmMmJkNmVhNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VmbC9DbGlwYm9hcmRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vm
bC9DbGlwYm9hcmRFZmwuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiQ2xpcGJvYXJkRWZsLmgiCiAKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0Lmgi
CiAjaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUxpc3QuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIK
ICNpbmNsdWRlICJGaWxlTGlzdC5oIgpAQCAtNzcsMTAgKzc4LDEwIEBAIGJvb2wgQ2xpcGJvYXJk
RWZsOjpzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkRWZsOjp0eXBlcygpIGNvbnN0CitQ
YXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IENsaXBib2FyZEVmbDo6dHlwZXMoKSBjb25zdAogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOworICAg
IHJldHVybiBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKIH0KIAogUGFzc1JlZlB0cjxGaWxlTGlz
dD4gQ2xpcGJvYXJkRWZsOjpmaWxlcygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lZmwvQ2xpcGJvYXJkRWZsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvQ2xpcGJvYXJkRWZsLmgKaW5kZXggNTc1MzgyZjdmYTdhOGIxYTkyMGVlYmQ0MzliYzc2ZGEz
MWU4NmFlNi4uNTY0NTUxOTBmNWM2OTI0ZjU2NjNmOTJkOGY3NzM2MzBiNTZhMTIzMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0NsaXBib2FyZEVmbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9DbGlwYm9hcmRFZmwuaApAQCAtMzksNyArMzksNyBA
QCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiwgYm9vbCYpIGNvbnN0
OwogICAgIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKIAotICAg
IEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5n
TGlzdD4gdHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZp
bGVzKCkgY29uc3Q7CiAKICAgICBJbnRQb2ludCBkcmFnTG9jYXRpb24oKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRHdGsuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAKaW5kZXggYjFkMmI1MjY5
NmMxOGUwYWQwNWJhNGM3OWFjMDUwYWY3NzkxYjgwMC4uYjIwMjE2NzYwYmE1ODYyOWYyNWNmNzNh
Njg3NzM4NGJiZmE0NDlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0NsaXBib2FyZEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBi
b2FyZEd0ay5jcHAKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJDbGlwYm9hcmRHdGsuaCIK
IAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgog
I2luY2x1ZGUgIkRyYWdEYXRhLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRWxl
bWVudC5oIgpAQCAtMTg5LDMzICsxOTAsMzMgQEAgYm9vbCBDbGlwYm9hcmRHdGs6OnNldERhdGEo
Y29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAgcmV0dXJu
IHN1Y2Nlc3M7CiB9CiAKLUhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRHdGs6OnR5cGVzKCkgY29u
c3QKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gQ2xpcGJvYXJkR3RrOjp0eXBlcygpIGNvbnN0
CiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9
IENsaXBib2FyZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4o
KTsKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogCiAgICAgaWYgKG1f
Y2xpcGJvYXJkKQogICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhl
bHBlcigpLT5nZXRDbGlwYm9hcmRDb250ZW50cyhtX2NsaXBib2FyZCk7CiAKLSAgICBIYXNoU2V0
PFN0cmluZz4gdHlwZXM7CisgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHR5cGVzID0gRE9NU3Ry
aW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7Ci0g
ICAgICAgIHR5cGVzLmFkZCgidGV4dC9wbGFpbiIpOwotICAgICAgICB0eXBlcy5hZGQoIlRleHQi
KTsKLSAgICAgICAgdHlwZXMuYWRkKCJ0ZXh0Iik7CisgICAgICAgIHR5cGVzLT5hcHBlbmQoInRl
eHQvcGxhaW4iKTsKKyAgICAgICAgdHlwZXMtPmFwcGVuZCgiVGV4dCIpOworICAgICAgICB0eXBl
cy0+YXBwZW5kKCJ0ZXh0Iik7CiAgICAgfQogCiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzTWFy
a3VwKCkpCi0gICAgICAgIHR5cGVzLmFkZCgidGV4dC9odG1sIik7CisgICAgICAgIHR5cGVzLT5h
cHBlbmQoInRleHQvaHRtbCIpOwogCiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVVJJTGlzdCgp
KSB7Ci0gICAgICAgIHR5cGVzLmFkZCgidGV4dC91cmktbGlzdCIpOwotICAgICAgICB0eXBlcy5h
ZGQoIlVSTCIpOworICAgICAgICB0eXBlcy0+YXBwZW5kKCJ0ZXh0L3VyaS1saXN0Iik7CisgICAg
ICAgIHR5cGVzLT5hcHBlbmQoIlVSTCIpOwogICAgIH0KIAogICAgIGlmIChtX2RhdGFPYmplY3Qt
Pmhhc0ZpbGVuYW1lcygpKQotICAgICAgICB0eXBlcy5hZGQoIkZpbGVzIik7CisgICAgICAgIHR5
cGVzLT5hcHBlbmQoIkZpbGVzIik7CiAKLSAgICByZXR1cm4gdHlwZXM7CisgICAgcmV0dXJuIHR5
cGVzLnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkR3RrOjpm
aWxlcygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xp
cGJvYXJkR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmgK
aW5kZXggZDhiNzUxODI1NGM5OGY5NWNkMTE3YjE0NTY2M2Y3ZmQzMjIzY2Y0Yy4uYjcyZTFjODFi
ZTY5YmU4NzgzMzdmYzk4OWI0MzBiODVkZWYzMTMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9DbGlwYm9hcmRHdGsuaApAQCAtNTcsNyArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYsIGJvb2wmKSBjb25zdDsK
ICAgICAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogCi0g
ICAgICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNvbnN0OwogICAgICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkgY29uc3Q7CiAKICAgICAgICAgdm9p
ZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5oCmluZGV4IDI0ZTliODA2MGEyOWM2OWM4
OTE2OTIwOGZjYTc0ZjlmZTdkMTVkNGIuLmM0OTY4YjI4ZDJiMjMzNDQ5ZDZkNDE5YTM2Y2IxMjNj
YTZlZTE3YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9h
cmRNYWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFjLmgK
QEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7CiAg
ICAgCiAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICB2aXJ0dWFsIEhhc2hT
ZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxET01TdHJp
bmdMaXN0PiB0eXBlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4g
ZmlsZXMoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgY29u
c3QgSW50UG9pbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9D
bGlwYm9hcmRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvQ2xpcGJvYXJkTWFj
Lm1tCmluZGV4IGQzN2M1ZjNmM2YxMzI0MWNjZGQ0MTEzMDg0Mzk3YzgwODY1MDBmNDguLmFkNTcx
ZGY5YTI3YzBiNjkzYTZmMjg4Y2NjNThiN2ZjZjllY2MyZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9DbGlwYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0NsaXBib2FyZE1hYy5tbQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAi
Q2xpcGJvYXJkTWFjLmgiCiAKICNpbXBvcnQgIkRPTUVsZW1lbnRJbnRlcm5hbC5oIgorI2ltcG9y
dCAiRE9NU3RyaW5nTGlzdC5oIgogI2ltcG9ydCAiRHJhZ0NsaWVudC5oIgogI2ltcG9ydCAiRHJh
Z0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkRyYWdEYXRhLmgiCkBAIC0xMDcsMTUgKzEwOCwxNSBA
QCBzdGF0aWMgU3RyaW5nIHV0aVR5cGVGcm9tQ29jb2FUeXBlKE5TU3RyaW5nICp0eXBlKQogICAg
IHJldHVybiBTdHJpbmcoKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkSFRNTENsaXBib2FyZFR5cGVz
Rm9yQ29jb2FUeXBlKEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIE5TU3RyaW5nICpjb2Nv
YVR5cGUsIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCkKK3N0YXRpYyB2b2lkIGFkZEhUTUxDbGlw
Ym9hcmRUeXBlc0ZvckNvY29hVHlwZShET01TdHJpbmdMaXN0KiByZXN1bHRUeXBlcywgTlNTdHJp
bmcgKmNvY29hVHlwZSwgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkKQogewogICAgIC8vIFVUSSBt
YXkgbm90IGRvIHRoZXNlIHJpZ2h0LCBzbyBtYWtlIHN1cmUgd2UgZ2V0IHRoZSByaWdodCwgcHJl
ZGljdGFibGUgcmVzdWx0CiAgICAgaWYgKFtjb2NvYVR5cGUgaXNFcXVhbFRvU3RyaW5nOk5TU3Ry
aW5nUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgcmVzdWx0VHlwZXMuYWRkKCJ0ZXh0L3BsYWluIik7
CisgICAgICAgIHJlc3VsdFR5cGVzLT5hcHBlbmQoInRleHQvcGxhaW4iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBpZiAoW2NvY29hVHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNVUkxQYm9h
cmRUeXBlXSkgewotICAgICAgICByZXN1bHRUeXBlcy5hZGQoInRleHQvdXJpLWxpc3QiKTsKKyAg
ICAgICAgcmVzdWx0VHlwZXMtPmFwcGVuZCgidGV4dC91cmktbGlzdCIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGlmIChbY29jb2FUeXBlIGlzRXF1YWxUb1N0cmluZzpOU0ZpbGVuYW1l
c1Bib2FyZFR5cGVdKSB7CkBAIC0xMjYsMTggKzEyNywxOCBAQCBzdGF0aWMgdm9pZCBhZGRIVE1M
Q2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoSGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywg
TlNTdAogICAgICAgICBpZiAoW2ZpbGVMaXN0IGNvdW50XSkgewogICAgICAgICAgICAgLy8gSXQg
aXMgdW5rbm93biBpZiBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUgYWx3YXlzIGltcGxpZXMgTlNVUkxQ
Ym9hcmRUeXBlIGluIENvY29hLAogICAgICAgICAgICAgLy8gYnV0IE5TRmlsZW5hbWVzUGJvYXJk
VHlwZSBzaG91bGQgaW1wbHkgYm90aCAndGV4dC91cmktbGlzdCcgYW5kICdGaWxlcycKLSAgICAg
ICAgICAgIHJlc3VsdFR5cGVzLmFkZCgidGV4dC91cmktbGlzdCIpOwotICAgICAgICAgICAgcmVz
dWx0VHlwZXMuYWRkKCJGaWxlcyIpOworICAgICAgICAgICAgcmVzdWx0VHlwZXMtPmFwcGVuZCgi
dGV4dC91cmktbGlzdCIpOworICAgICAgICAgICAgcmVzdWx0VHlwZXMtPmFwcGVuZCgiRmlsZXMi
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFN0cmluZyB1dGlUeXBl
ID0gdXRpVHlwZUZyb21Db2NvYVR5cGUoY29jb2FUeXBlKTsKICAgICBpZiAoIXV0aVR5cGUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdFR5cGVzLmFkZCh1dGlUeXBlKTsKKyAgICAgICAgcmVz
dWx0VHlwZXMtPmFwcGVuZCh1dGlUeXBlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAv
LyBObyBtYXBwaW5nLCBqdXN0IHBhc3MgdGhlIHdob2xlIHN0cmluZyB0aG91Z2gKLSAgICByZXN1
bHRUeXBlcy5hZGQoY29jb2FUeXBlKTsKKyAgICByZXN1bHRUeXBlcy0+YXBwZW5kKGNvY29hVHlw
ZSk7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkTWFjOjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBl
KQpAQCAtMjcwLDE5ICsyNzEsMTkgQEAgYm9vbCBDbGlwYm9hcmRNYWM6OnNldERhdGEoY29uc3Qg
U3RyaW5nICZ0eXBlLCBjb25zdCBTdHJpbmcgJmRhdGEpCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1IYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkTWFjOjp0eXBlcygpIGNvbnN0CitQYXNzUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IENsaXBib2FyZE1hYzo6dHlwZXMoKSBjb25zdAogewogICAgIGlmIChw
b2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9hcmRUeXBl
c1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIHJl
dHVybiBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKIAogICAgIE5TQXJyYXkgKnR5cGVzID0gW21f
cGFzdGVib2FyZC5nZXQoKSB0eXBlc107CiAKICAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91
cnNlbHZlcyBmb3Igc2VjdXJpdHkuICBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2Yg
YmVmb3JlIHRvIGJlCiAgICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0
ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KICAgICBpZiAo
bV9jaGFuZ2VDb3VudCAhPSBbbV9wYXN0ZWJvYXJkLmdldCgpIGNoYW5nZUNvdW50XSkKLSAgICAg
ICAgcmV0dXJuIEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICByZXR1cm4gRE9NU3RyaW5nTGlz
dDo6Y3JlYXRlKCk7CiAKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIFJlZlB0cjxE
T01TdHJpbmdMaXN0PiByZXN1bHQgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKICAgICBOU1VJ
bnRlZ2VyIGNvdW50ID0gW3R5cGVzIGNvdW50XTsKICAgICAvLyBGSVhNRTogVGhpcyBsb29wIGNv
dWxkIGJlIHNwbGl0IGludG8gdHdvIHN0YWdlcy4gT25lIHdoaWNoIGFkZHMgYWxsIHRoZSBIVE1M
NSBzcGVjaWZpZWQgdHlwZXMKICAgICAvLyBhbmQgYSBzZWNvbmQgd2hpY2ggYWRkcyBhbGwgdGhl
IGV4dHJhIHR5cGVzIGZyb20gdGhlIGNvY29hIGNsaXBib2FyZCAod2hpY2ggaXMgTWFjLW9ubHkg
YmVoYXZpb3IpLgpAQCAtMjkxLDEwICsyOTIsMTAgQEAgSGFzaFNldDxTdHJpbmc+IENsaXBib2Fy
ZE1hYzo6dHlwZXMoKSBjb25zdAogICAgICAgICBpZiAoW3BiVHlwZSBpc0VxdWFsVG9TdHJpbmc6
QCJOZVhUIHBsYWluIGFzY2lpIHBhc3RlYm9hcmQgdHlwZSJdKQogICAgICAgICAgICAgY29udGlu
dWU7ICAgLy8gc2tpcCB0aGlzIGFuY2llbnQgdHlwZSB0aGF0IGdldHMgYXV0by1zdXBwbGllZCBi
eSBzb21lIHN5c3RlbSBjb252ZXJzaW9uCiAKLSAgICAgICAgYWRkSFRNTENsaXBib2FyZFR5cGVz
Rm9yQ29jb2FUeXBlKHJlc3VsdCwgcGJUeXBlLCBtX3Bhc3RlYm9hcmQuZ2V0KCkpOworICAgICAg
ICBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUocmVzdWx0LmdldCgpLCBwYlR5cGUs
IG1fcGFzdGVib2FyZC5nZXQoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAogLy8gRklYTUU6IFdlIGNvdWxkIGNhY2hlIHRo
ZSBjb21wdXRlZCBmaWxlTGlzdCBpZiBuZWNlc3NhcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L0NsaXBib2FyZFF0LmNwcAppbmRleCAyNzM0OTUyZDk4NmMxMDI2MjAwNzk5ZmM3Njc1NzUz
MDUwN2QxZDRjLi4zZDhiYWIxZjY1YWI5YzM2OWJiNDUxNDkyODU2ZGYyOTczZTBlNDdiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiQ2xpcGJvYXJkUXQuaCIKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgi
CisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlckl0ZW1M
aXN0UXQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgiCkBA
IC0xODksMTcgKzE5MCwxNyBAQCBib29sIENsaXBib2FyZFF0OjpzZXREYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogfQogCiAvLyBleHRlbnNpb25zIGJleW9uZCBJ
RSdzIEFQSQotSGFzaFNldDxTdHJpbmc+IENsaXBib2FyZFF0Ojp0eXBlcygpIGNvbnN0CitQYXNz
UmVmUHRyPERPTVN0cmluZ0xpc3Q+IENsaXBib2FyZFF0Ojp0eXBlcygpIGNvbnN0CiB7CiAgICAg
aWYgKHBvbGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlICYmIHBvbGljeSgpICE9IENsaXBib2Fy
ZFR5cGVzUmVhZGFibGUpCi0gICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAg
ICAgcmV0dXJuIERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogCiAgICAgQVNTRVJUKG1fcmVhZGFi
bGVEYXRhKTsKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIFJlZlB0cjxET01TdHJp
bmdMaXN0PiByZXN1bHQgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKICAgICBRU3RyaW5nTGlz
dCBmb3JtYXRzID0gbV9yZWFkYWJsZURhdGEtPmZvcm1hdHMoKTsKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGZvcm1hdHMuY291bnQoKTsgKytpKQotICAgICAgICByZXN1bHQuYWRkKGZvcm1hdHMu
YXQoaSkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC0+YXBwZW5kKGZvcm1h
dHMuYXQoaSkpOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRy
PEZpbGVMaXN0PiBDbGlwYm9hcmRRdDo6ZmlsZXMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L0NsaXBib2FyZFF0LmgKaW5kZXggZGM2YmE0MTczYzg3NGIwZWJmNDMyN2ZkMjdkM2Zi
NWI3NmVlZjUyZS4uYTg0MGJlY2Y2ZDk5NmZlNzYyNzExN2ViZWMxOTM1MDk4Zjc4MTNkMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oCkBAIC01Nyw3ICs1Nyw3IEBA
IHB1YmxpYzoKICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIGRhdGEpOwogCiAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICB2aXJ0
dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxG
aWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZElt
YWdlKiwgY29uc3QgSW50UG9pbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0Ns
aXBib2FyZFdpbi5jcHAKaW5kZXggYWEzODM4ODFhYzA2OGMyNzlkOTFjNzhmM2ExYmI5MDZkYWNj
YTZkNS4uODljYWNiMzUxYWJlNTliNzdjM2U3NzRhZjZmOWMxZGY0NGRiNjg5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0
aWVzV2luLmgiCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKQEAgLTQ4NSwy
NCArNDg2LDI0IEBAIGJvb2wgQ2xpcGJvYXJkV2luOjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIHZv
aWQgYWRkTWltZVR5cGVzRm9yRm9ybWF0KEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0cywgY29uc3Qg
Rk9STUFURVRDJiBmb3JtYXQpCitzdGF0aWMgdm9pZCBhZGRNaW1lVHlwZXNGb3JGb3JtYXQoRE9N
U3RyaW5nTGlzdCogcmVzdWx0cywgY29uc3QgRk9STUFURVRDJiBmb3JtYXQpCiB7CiAgICAgLy8g
VVJMIGFuZCBUZXh0IGFyZSBwcm92aWRlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIElFJ3MgbW9k
ZWwKICAgICBpZiAoZm9ybWF0LmNmRm9ybWF0ID09IHVybEZvcm1hdCgpLT5jZkZvcm1hdCB8fCBm
b3JtYXQuY2ZGb3JtYXQgPT0gdXJsV0Zvcm1hdCgpLT5jZkZvcm1hdCkgewotICAgICAgICByZXN1
bHRzLmFkZCgiVVJMIik7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJ0ZXh0L3VyaS1saXN0Iik7Cisg
ICAgICAgIHJlc3VsdHMtPmFwcGVuZCgiVVJMIik7CisgICAgICAgIHJlc3VsdHMtPmFwcGVuZCgi
dGV4dC91cmktbGlzdCIpOwogICAgIH0KIAogICAgIGlmIChmb3JtYXQuY2ZGb3JtYXQgPT0gcGxh
aW5UZXh0V0Zvcm1hdCgpLT5jZkZvcm1hdCB8fCBmb3JtYXQuY2ZGb3JtYXQgPT0gcGxhaW5UZXh0
Rm9ybWF0KCktPmNmRm9ybWF0KSB7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJUZXh0Iik7Ci0gICAg
ICAgIHJlc3VsdHMuYWRkKCJ0ZXh0L3BsYWluIik7CisgICAgICAgIHJlc3VsdHMtPmFwcGVuZCgi
VGV4dCIpOworICAgICAgICByZXN1bHRzLT5hcHBlbmQoInRleHQvcGxhaW4iKTsKICAgICB9CiB9
CiAKIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi1IYXNoU2V0PFN0cmluZz4gQ2xpcGJv
YXJkV2luOjp0eXBlcygpIGNvbnN0CitQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IENsaXBib2Fy
ZFdpbjo6dHlwZXMoKSBjb25zdAogeyAKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsgCisg
ICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHJlc3VsdHMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUo
KTsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkgIT0g
Q2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAKQEAgLTUy
MiwxNiArNTIzLDE2IEBAIEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRXaW46OnR5cGVzKCkgY29u
c3QKIAogICAgICAgICAvLyBJRW51bUZPUk1BVEVUQzo6TmV4dCByZXR1cm5zIFNfRkFMU0UgaWYg
dGhlcmUgYXJlIG5vIG1vcmUgaXRlbXMuCiAgICAgICAgIHdoaWxlIChpdHItPk5leHQoMSwgJmRh
dGEsIDApID09IFNfT0spCi0gICAgICAgICAgICBhZGRNaW1lVHlwZXNGb3JGb3JtYXQocmVzdWx0
cywgZGF0YSk7CisgICAgICAgICAgICBhZGRNaW1lVHlwZXNGb3JGb3JtYXQocmVzdWx0cy5nZXQo
KSwgZGF0YSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChEcmFnRGF0YU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2RyYWdEYXRhTWFwLmJlZ2luKCk7IGl0ICE9IG1fZHJhZ0RhdGFNYXAu
ZW5kKCk7ICsraXQpIHsKICAgICAgICAgICAgIEZPUk1BVEVUQyBkYXRhOwogICAgICAgICAgICAg
ZGF0YS5jZkZvcm1hdCA9ICgqaXQpLmZpcnN0OwotICAgICAgICAgICAgYWRkTWltZVR5cGVzRm9y
Rm9ybWF0KHJlc3VsdHMsIGRhdGEpOworICAgICAgICAgICAgYWRkTWltZVR5cGVzRm9yRm9ybWF0
KHJlc3VsdHMuZ2V0KCksIGRhdGEpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIHJl
c3VsdHM7CisgICAgcmV0dXJuIHJlc3VsdHMucmVsZWFzZSgpOwogfQogCiBQYXNzUmVmUHRyPEZp
bGVMaXN0PiBDbGlwYm9hcmRXaW46OmZpbGVzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9DbGlwYm9hcmRXaW4uaAppbmRleCBhMzVkOGI0OGFhYzY4YWU3ZWE5MjdlZDFhNjQ5
YWMwMWFlZWRmMDkwLi44YzIyYzBhMzVmNWU4NTYzN2ViYTI2Y2EwYjNhODJjNzYxMTliMTE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5oCkBAIC02NCw3ICs2
NCw3IEBAIHB1YmxpYzoKICAgICBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25z
dCBTdHJpbmcmIGRhdGEpOwogCiAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAg
ICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcygpIGNvbnN0OworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxET01TdHJpbmdMaXN0PiB0eXBlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENh
Y2hlZEltYWdlKiwgY29uc3QgSW50UG9pbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3d4L0NsaXBib2FyZFd4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4
L0NsaXBib2FyZFd4LmNwcAppbmRleCAzMjIxNmE2NTI0MjRiZTM2NmMwYWUyYWY1OTgxODgzMGFl
MTg4ZWMxLi4xNjFiY2U4YWFhZDRmNzVlZTVjMWJhYTA0MGU0OTYzNTcyYjlmODdlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guY3BwCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkV3guaCIKIAorI2luY2x1
ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJGaWxlTGlzdC5oIgogI2luY2x1ZGUgIkhh
c2hUYWJsZS5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCkBAIC03MCwxMSArNzEsMTAgQEAgYm9v
bCBDbGlwYm9hcmRXeDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYg
ZGF0YSkKIH0KIAogLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLUhhc2hTZXQ8U3RyaW5n
PiBDbGlwYm9hcmRXeDo6dHlwZXMoKSBjb25zdCAKK1Bhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4g
Q2xpcGJvYXJkV3g6OnR5cGVzKCkgY29uc3QgCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJu
IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogfQogCiBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlw
Ym9hcmRXeDo6ZmlsZXMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3gvQ2xpcGJvYXJkV3guaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L0NsaXBib2Fy
ZFd4LmgKaW5kZXggMTM4NjM1YWFlOTYxNWVkMzEwNjk0ZjVjNWRkMTM4NjgyZmVlZDhiYi4uZjky
NzI2YWU2YTA0ZjM0M2IwYTk5ZTQ5ZGZjN2RhOWIxNDUwZmQ0MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd3gvQ2xpcGJvYXJkV3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93eC9DbGlwYm9hcmRXeC5oCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3Ry
aW5nJiBkYXRhKTsKICAgICAKICAgICAgICAgLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkK
LSAgICAgICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHR5cGVzKCkgY29uc3Q7CiAgICAgICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxGaWxlTGlzdD4gZmlsZXMoKSBjb25zdDsKICAgICAKICAgICAg
ICAgSW50UG9pbnQgZHJhZ0xvY2F0aW9uKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTUzYzRkOGUzMmE0MTRj
ZmU3YTY4NmNhZDBmZjNkNGZmYjA2M2YwZS4uZmQ4MmE5NjMxMjdiYWMxYWU2MWY3OWVkMjM2MGJk
ZDhhYTFmNzhmMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAyLTE1ICBEYW5pZWwgQ2hl
bmcgIDxkY2hlbmdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIGRhdGFUcmFuc2Zlci50eXBlcyAo
SFRNTDUgZHJhZyAmIGRyb3ApIHNob3VsZCByZXR1cm4gRE9NU3RyaW5nTGlzdAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA0MTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSB0ZXN0IHRvIGRvY3Vt
ZW50IHRoZSBmYWN0IHRoYXQgbWFueSBkYXRhVHJhbnNmZXIgYXR0cmlidXRlcyBhcmVuJ3QgbGl2
ZSBhbmQgcmV0dXJuIGEKKyAgICAgICAgZGlmZmVyZW50IG9iamVjdCBlYWNoIHRpbWUgdGhleSdy
ZSBhY2Nlc3NlZC4gQWxzbyB1cGRhdGUgdGVzdHMgdG8gdXNlIGNvbnRhaW5zKCkgaW5zdGVhZCBv
ZgorICAgICAgICBpbmRleE9mKCkuCisKKyAgICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvY2xp
cGJvYXJkLWN1c3RvbURhdGEuaHRtbDoKKyAgICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvb25w
YXN0ZS10ZXh0LWh0bWwtdHlwZXMuaHRtbDoKKyAgICAgICAgKiBmYXN0L2V2ZW50cy9kcmFnLWFu
ZC1kcm9wLWRhdGFUcmFuc2Zlci10eXBlcy1ub2NyYXNoLmh0bWw6CisgICAgICAgICogZmFzdC9l
dmVudHMvZHJhZy1jdXN0b21EYXRhLmh0bWw6CisgICAgICAgICogZmFzdC9ldmVudHMvZHJhZy1k
YXRhVHJhbnNmZXItbGl2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9ldmVudHMvZHJhZy1kYXRhVHJhbnNmZXItbGl2ZS1hdHRyaWJ1dGVzLmh0bWw6IENv
cGllZCBmcm9tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RyYWctY3VzdG9tRGF0YS5odG1sLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvbG9jYWwvZmlsZWFwaS9yZXNvdXJjZXMvc2V0dXAtZmlsZS1p
bnB1dC1lbGVtZW50LWZvci1kcmFnLmpzOgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkv
Y2xpcGJvYXJkL3NjcmlwdC10ZXN0cy9jbGlwYm9hcmQtZmlsZS1hY2Nlc3MuanM6CisgICAgICAg
IChjaGVja0ZvckV2ZW50VHJhbnNmZXJUeXBlKToKKwogMjAxMi0wMi0xNCAgS2VudCBUYW11cmEg
IDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3RvcCB1c2luZyBzY3JpcHQtdGVzdHMg
aW4gTGF5b3V0VGVzdHMvZmFzdC9mb3JtcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGlu
Zy9wYXN0ZWJvYXJkL2NsaXBib2FyZC1jdXN0b21EYXRhLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL3Bhc3RlYm9hcmQvY2xpcGJvYXJkLWN1c3RvbURhdGEuaHRtbAppbmRleCAzMWQ5OWJiNzM4
YzFlMjYxNGVhYzkyN2MxMGYwOTc3YjhjNDY2ZjVhLi4wY2U0Y2JiNzNkMDE1MDY3MGJmOWZmZTM0
YWNmN2UyZDA3YmZkNGI0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9h
cmQvY2xpcGJvYXJkLWN1c3RvbURhdGEuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bh
c3RlYm9hcmQvY2xpcGJvYXJkLWN1c3RvbURhdGEuaHRtbApAQCAtMTcsOCArMTcsOCBAQCBmdW5j
dGlvbiBjb3B5KGV2ZW50KSB7CiAKIGZ1bmN0aW9uIHBhc3RlKGV2ZW50KSB7CiAgICAgdmFyIGZh
aWxlZCA9IGZhbHNlOwotICAgIGlmIChldmVudC5jbGlwYm9hcmREYXRhLnR5cGVzLmluZGV4T2Yo
J3RleHQvcGxhaW4nKSA8IDAKLSAgICAgICAgfHwgZXZlbnQuY2xpcGJvYXJkRGF0YS50eXBlcy5p
bmRleE9mKCdjdXN0b20tZGF0YScpIDwgMCkKKyAgICBpZiAoIWV2ZW50LmNsaXBib2FyZERhdGEu
dHlwZXMuY29udGFpbnMoJ3RleHQvcGxhaW4nKQorICAgICAgICB8fCAhZXZlbnQuY2xpcGJvYXJk
RGF0YS50eXBlcy5jb250YWlucygnY3VzdG9tLWRhdGEnKSkKICAgICAgICAgZmFpbGVkID0gdHJ1
ZTsKICAgICBpZiAoZXZlbnQuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0JykgIT0gJ3NhbXBs
ZScKICAgICAgICAgfHwgZXZlbnQuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCdjdXN0b20tZGF0YScp
ICE9ICdoZWxsbyB3b3JsZCcpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3Rl
Ym9hcmQvb25wYXN0ZS10ZXh0LWh0bWwtdHlwZXMuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9vbnBhc3RlLXRleHQtaHRtbC10eXBlcy5odG1sCmluZGV4IDNiNzRjZTQ4N2Fj
ZjEzNjczOTJlZjY1ZTUxNWFiNGQxYjg2MGVlMzMuLmY4N2ZiZTU5ZmI1ZDE2MjZmOGQ3MmNmZTU0
ZjM5NjA2NTE1NTU3ZTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2Fy
ZC9vbnBhc3RlLXRleHQtaHRtbC10eXBlcy5odG1sCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9vbnBhc3RlLXRleHQtaHRtbC10eXBlcy5odG1sCkBAIC04LDggKzgsNyBAQCBk
dXJpbmcgYW4gb25wYXN0ZSBldmVudC4gIFRoaXMgdGVzdCByZXF1aXJlcyBEUlQuPC9kaXY+CiBm
dW5jdGlvbiBwYXN0ZShldikKIHsKICAgICB2YXIgdHlwZXMgPSBldi5jbGlwYm9hcmREYXRhLnR5
cGVzOwotICAgIGlmICh0eXBlcy5pbmRleE9mKCd0ZXh0L3BsYWluJykgPj0gMCAmJgotICAgICAg
ICB0eXBlcy5pbmRleE9mKCd0ZXh0L2h0bWwnKSA+PSAwKQorICAgIGlmICh0eXBlcy5jb250YWlu
cygndGV4dC9wbGFpbicpICYmIHR5cGVzLmNvbnRhaW5zKCd0ZXh0L2h0bWwnKSkKICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdHMiKS5pbm5lckhUTUwgPSAiUEFTUyI7CiB9
CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RyYWctYW5kLWRyb3AtZGF0
YVRyYW5zZmVyLXR5cGVzLW5vY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2Ry
YWctYW5kLWRyb3AtZGF0YVRyYW5zZmVyLXR5cGVzLW5vY3Jhc2guaHRtbAppbmRleCAyMTI4ZTQw
ODM3NmNlZGE1NmMyZDFhMTEwYTUxZDRmMWUxMmE5YTFiLi4zNzM5NjU1Yjk4ZWI2M2M4NjdjNGE4
YmYzZjIzNDNhMWY1ZDg5YzRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9k
cmFnLWFuZC1kcm9wLWRhdGFUcmFuc2Zlci10eXBlcy1ub2NyYXNoLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvZHJhZy1hbmQtZHJvcC1kYXRhVHJhbnNmZXItdHlwZXMtbm9jcmFz
aC5odG1sCkBAIC04NCw3ICs4NCw3IEBACiAgICAgewogICAgICAgICBldmVudCA9IGU7CiAgICAg
ICAgIHZhciBmb3JtYXRUeXBlcyA9IGUuZGF0YVRyYW5zZmVyLnR5cGVzOyAvLyBUaGlzIGxpbmUg
Y2F1c2VzIHRoZSBjcmFzaC4KLSAgICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5p
bmRleE9mKEZPUk1BVF9UWVBFKSA9PSAtMSkKKyAgICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zl
ci50eXBlcy5jb250YWlucyhGT1JNQVRfVFlQRSkgPT0gLTEpCiAgICAgICAgICAgICB0ZXN0RmFp
bGVkKCdldmVudC5kYXRhVHJhbnNmZXIudHlwZXMgc2hvdWxkIGNvbnRhaW4gZm9ybWF0ICInICsg
Rk9STUFUX1RZUEUgKyAnIiwgYnV0IGl0IGRvZXMgbm90LicpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICB0ZXN0UGFzc2VkKCdldmVudC5kYXRhVHJhbnNmZXIudHlwZXMgY29udGFpbnMgZm9y
bWF0ICInICsgRk9STUFUX1RZUEUgKyAnIicpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvZHJhZy1jdXN0b21EYXRhLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9k
cmFnLWN1c3RvbURhdGEuaHRtbAppbmRleCBkY2E1N2VmZDQ2MjM1NTg0ZmI5ZTI3NzBhZDNiOTAy
NWU5ZTcyZjBkLi5kOGNlMjVjNjczOWE1OTllMTA5ZmEyMTJkZTUyYmNmZGNkNjNkNzU4IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9kcmFnLWN1c3RvbURhdGEuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9kcmFnLWN1c3RvbURhdGEuaHRtbApAQCAtMzIsOCAr
MzIsOCBAQCBmdW5jdGlvbiBkcmFnb3ZlcihldmVudCkgewogfQogZnVuY3Rpb24gZHJvcChldmVu
dCkgewogICAgIHZhciBmYWlsZWQgPSBmYWxzZTsKLSAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVy
LnR5cGVzLmluZGV4T2YoJ3RleHQvcGxhaW4nKSA8IDAKLSAgICAgICAgfHwgZXZlbnQuZGF0YVRy
YW5zZmVyLnR5cGVzLmluZGV4T2YoJ2N1c3RvbS1kYXRhJykgPCAwKQorICAgIGlmICghZXZlbnQu
ZGF0YVRyYW5zZmVyLnR5cGVzLmNvbnRhaW5zKCd0ZXh0L3BsYWluJykKKyAgICAgICAgfHwgIWV2
ZW50LmRhdGFUcmFuc2Zlci50eXBlcy5jb250YWlucygnY3VzdG9tLWRhdGEnKSkKICAgICAgICAg
ZmFpbGVkID0gdHJ1ZTsKICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQn
KSAhPSAnc2FtcGxlJwogICAgICAgICB8fCBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgnY3Vz
dG9tLWRhdGEnKSAhPSAnaGVsbG8gd29ybGQnKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvZHJhZy1kYXRhVHJhbnNmZXItbGl2ZS1hdHRyaWJ1dGVzLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2RyYWctZGF0YVRyYW5zZmVyLWxpdmUtYXR0cmlidXRl
cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDEwYWNjMWQ2YjVmMzdjNDAyNjMzM2EyNGIxOGUz
YjQ1ZmExYTY3ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2Ry
YWctZGF0YVRyYW5zZmVyLWxpdmUtYXR0cmlidXRlcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5
IEBACitUaGlzIGlzIGEgdGVzdCB0aGF0IHZhcmlvdXMgZGF0YVRyYW5zZmVyIGF0dHJpYnV0ZXMg
YXJlIGxpdmUgYW5kIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBhY2Nlc3NlZCBtdWx0aXBs
ZSB0aW1lcy4gVG8gbWFudWFsbHkgdGVzdCwgZHJhZyAnRHJhZyBNZScgdG8gJ0Ryb3AgSGVyZScg
YW5kIGRyb3AuIFRoZSB3b3JkICdTVUNDRVNTJyBzaG91bGQgYXBwZWFyLgorCitEcmFnIE1lCitE
cm9wIEhlcmUKK3R5cGVzICE9IHR5cGVzCitmaWxlcyAhPSBmaWxlcworaXRlbXMgIT0gaXRlbXMK
K0ZBSUxVUkUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZHJhZy1kYXRh
VHJhbnNmZXItbGl2ZS1hdHRyaWJ1dGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9k
cmFnLWRhdGFUcmFuc2Zlci1saXZlLWF0dHJpYnV0ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2FlY2Rk
ZDQ2OTlkYmE2NDc2YTU5ZjIwOTk2YjJlZTkxZGYzOGM3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvZHJhZy1kYXRhVHJhbnNmZXItbGl2ZS1hdHRyaWJ1dGVzLmh0
bWwKQEAgLTAsMCArMSw4NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0
eWxlPgorI2RyYWcgeworICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworICAgIGhlaWdodDog
MjAwcHg7CisgICAgd2lkdGg6IDIwMHB4OworfQorI2Ryb3AgeworICAgIGJvcmRlcjogMXB4IHNv
bGlkIGJsYWNrOworICAgIGhlaWdodDogMjAwcHg7CisgICAgd2lkdGg6IDIwMHB4OworfQorPC9z
dHlsZT4KKzxzY3JpcHQ+Cit2YXIgZmFpbGVkOworCitmdW5jdGlvbiBsb2coc3RyKQoreworICAg
IHZhciByZXN1bHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0Jyk7CisgICAgcmVz
dWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0cikpOworICAgIHJlc3Vs
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKK30KK2Z1bmN0aW9u
IGRyYWdzdGFydChldmVudCkKK3sKKyAgICBmYWlsZWQgPSBmYWxzZTsKKyAgICBldmVudC5kYXRh
VHJhbnNmZXIuc2V0RGF0YSgndGV4dCcsICdzYW1wbGUnKTsKKyAgICBpZiAoZXZlbnQuZGF0YVRy
YW5zZmVyLnR5cGVzICE9IGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcykgeworICAgICAgICBmYWls
ZWQgPSB0cnVlOworICAgICAgICBsb2coJ3R5cGVzICE9IHR5cGVzJyk7CisgICAgfQorICAgIGlm
IChldmVudC5kYXRhVHJhbnNmZXIuZmlsZXMgIT0gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKSB7
CisgICAgICAgIGZhaWxlZCA9IHRydWU7CisgICAgICAgIGxvZygnZmlsZXMgIT0gZmlsZXMnKTsK
KyAgICB9CisgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlci5pdGVtcyAhPSBldmVudC5kYXRhVHJh
bnNmZXIuaXRlbXMpIHsKKyAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgbG9nKCdpdGVt
cyAhPSBpdGVtcycpOworICAgIH0KK30KK2Z1bmN0aW9uIGRyYWdlbnRlcihldmVudCkKK3sKKyAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworfQorZnVuY3Rpb24gZHJhZ292ZXIoZXZlbnQpCit7
CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30KK2Z1bmN0aW9uIGRyb3AoZXZlbnQpCit7
CisgICAgaWYgKCFldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuY29udGFpbnMoJ3RleHQvcGxhaW4n
KSkKKyAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyLmdl
dERhdGEoJ3RleHQnKSAhPSAnc2FtcGxlJykKKyAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICBs
b2coZmFpbGVkID8gJ0ZBSUxVUkUnIDogJ1NVQ0NFU1MnKTsKKyAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7Cit9Cit3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKQoreworICAgIGlmICghd2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICByZXR1cm47CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKKworICAgIHZhciBkcmFnRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdk
cmFnJyk7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oZHJhZ0VsZW1lbnQub2Zmc2V0TGVm
dCArIGRyYWdFbGVtZW50Lm9mZnNldFdpZHRoIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkcmFnRWxlbWVudC5vZmZzZXRUb3AgKyBkcmFnRWxlbWVudC5vZmZzZXRIZWlnaHQgLyAy
KTsKKyAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICBldmVudFNlbmRlci5sZWFwRm9y
d2FyZCgxMDApOworICAgIHZhciBkcm9wRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdkcm9wJyk7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oZHJvcEVsZW1lbnQub2Zmc2V0
TGVmdCArIGRyb3BFbGVtZW50Lm9mZnNldFdpZHRoIC8gMiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkcm9wRWxlbWVudC5vZmZzZXRUb3AgKyBkcm9wRWxlbWVudC5vZmZzZXRIZWlnaHQg
LyAyKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHA+VGhpcyBpcyBhIHRlc3QgdGhhdCB2YXJpb3VzIGRhdGFUcmFuc2ZlciBhdHRy
aWJ1dGVzIGFyZSBsaXZlIGFuZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdoZW4gYWNjZXNzZWQg
bXVsdGlwbGUgdGltZXMuIFRvIG1hbnVhbGx5IHRlc3QsIGRyYWcgJ0RyYWcgTWUnIHRvICdEcm9w
IEhlcmUnIGFuZCBkcm9wLiBUaGUgd29yZCAnU1VDQ0VTUycgc2hvdWxkIGFwcGVhci4KKzxkaXYg
ZHJhZ2dhYmxlPSJ0cnVlIiBpZD0iZHJhZyIgb25kcmFnc3RhcnQ9ImRyYWdzdGFydChldmVudCki
PkRyYWcgTWU8L2Rpdj4KKzxkaXYgaWQ9ImRyb3AiIG9uZHJhZ2VudGVyPSJkcmFnZW50ZXIoZXZl
bnQpIiBvbmRyYWdvdmVyPSJkcmFnb3ZlcihldmVudCkiIG9uZHJvcD0iZHJvcChldmVudCkiPkRy
b3AgSGVyZTwvZGl2PgorPC9kaXY+Cis8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9sb2NhbC9maWxlYXBp
L3Jlc291cmNlcy9zZXR1cC1maWxlLWlucHV0LWVsZW1lbnQtZm9yLWRyYWcuanMgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2ZpbGVhcGkvcmVzb3VyY2VzL3NldHVwLWZpbGUtaW5wdXQt
ZWxlbWVudC1mb3ItZHJhZy5qcwppbmRleCBjNTFjNjgwYmZlZjMwMjkwM2NmMzZkYzFjOTRlZmM1
YzJiYzQzOWZmLi4zNzhmZWI4MTlkMTZkODhmYWE2MWQxZDZlZmE3NWM3YzgyMmZmMDdjIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2xvY2FsL2ZpbGVhcGkvcmVzb3VyY2VzL3Nl
dHVwLWZpbGUtaW5wdXQtZWxlbWVudC1mb3ItZHJhZy5qcworKysgYi9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2xvY2FsL2ZpbGVhcGkvcmVzb3VyY2VzL3NldHVwLWZpbGUtaW5wdXQtZWxlbWVudC1m
b3ItZHJhZy5qcwpAQCAtMTYsNyArMTYsNyBAQCBmaWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigi
ZHJhZ292ZXIiLCBmdW5jdGlvbigpIHsKIAogdmFyIGZpbGVJbnB1dERyb3BDYWxsYmFjayA9IG51
bGw7CiBmaWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsIGZ1bmN0aW9uKCkgewotICAg
IGlmIChldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5kZXhPZigiRmlsZXMiKSAhPSAtMSAmJiBl
dmVudC5kYXRhVHJhbnNmZXIuZmlsZXMubGVuZ3RoID09IDEpCisgICAgaWYgKGV2ZW50LmRhdGFU
cmFuc2Zlci50eXBlcy5jb250YWlucygiRmlsZXMiKSAmJiBldmVudC5kYXRhVHJhbnNmZXIuZmls
ZXMubGVuZ3RoID09IDEpCiAgICAgICAgIHRlc3RQYXNzZWQoImV2ZW50LmRhdGFUcmFuc2ZlciBj
b250YWlucyBhIEZpbGUgb2JqZWN0IG9uIGRyb3AuIik7CiAgICAgZWxzZSB7CiAgICAgICAgIHRl
c3RGYWlsZWQoImV2ZW50LmRhdGFUcmFuc2ZlciBkb2VzIG5vdCBjb250YWluIGEgRmlsZSBvYmpl
Y3Qgb24gZHJvcC4iKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJp
dHkvY2xpcGJvYXJkL3NjcmlwdC10ZXN0cy9jbGlwYm9hcmQtZmlsZS1hY2Nlc3MuanMgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L2NsaXBib2FyZC9zY3JpcHQtdGVzdHMvY2xpcGJv
YXJkLWZpbGUtYWNjZXNzLmpzCmluZGV4IDRiNjM2OGQ0NjMyMTZiMTQxNDI2MjEyODlhYWFjMThj
ZGZmMDA3ZDIuLjliMjhhMGJiZWRhM2E2YzFhYTdjNWE3ODRkZjBlZGZiNTZkODE5ZTYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvY2xpcGJvYXJkL3NjcmlwdC10
ZXN0cy9jbGlwYm9hcmQtZmlsZS1hY2Nlc3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS9jbGlwYm9hcmQvc2NyaXB0LXRlc3RzL2NsaXBib2FyZC1maWxlLWFjY2Vzcy5q
cwpAQCAtNzUsNyArNzUsNyBAQCBmdW5jdGlvbiBjaGVja0ZvckV2ZW50VHJhbnNmZXJUeXBlKGV2
ZW50LCB0eXBlU3RyaW5nLCBzaG91bGRDb250YWluVHlwZSkKIHsKICAgICB2YXIgcGFzc2VkQ2hl
Y2s7CiAgICAgdmFyIG1lc3NhZ2U7Ci0gICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcyAm
JiBldmVudC5kYXRhVHJhbnNmZXIudHlwZXMuaW5kZXhPZih0eXBlU3RyaW5nKSAhPSAtMSkgewor
ICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIudHlwZXMgJiYgZXZlbnQuZGF0YVRyYW5zZmVyLnR5
cGVzLmNvbnRhaW5zKHR5cGVTdHJpbmcpKSB7CiAgICAgICAgIHBhc3NlZENoZWNrID0gc2hvdWxk
Q29udGFpblR5cGU7CiAgICAgICAgIG1lc3NhZ2UgPSAiZXZlbnQuZGF0YVRyYW5zZmVyLnR5cGVz
IGNvbnRhaW5zICIgKyB0eXBlU3RyaW5nICsgIi4iOwogICAgIH0gZWxzZSB7Cg==
</data>
<flag name="review"
          id="129380"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>