<?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>96990</bug_id>
          
          <creation_ts>2012-09-18 00:50:54 -0700</creation_ts>
          <short_desc>Make ContentSelectorQuery work when siblings are passed explicitly.</short_desc>
          <delta_ts>2012-10-11 09:10:48 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>97160</dependson>
    
    <dependson>97298</dependson>
    
    <dependson>98868</dependson>
          <blocked>96988</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Shinya Kawanaka">shinyak</reporter>
          <assigned_to name="Shinya Kawanaka">shinyak</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>hayato</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>philn</cc>
    
    <cc>webcomponents-bugzilla</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>722569</commentid>
    <comment_count>0</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-09-18 00:50:54 -0700</bug_when>
    <thetext>As the first step of Bug 96988, we would like to refactor ContentSelectorQuery when parent and children are passed explicitly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723374</commentid>
    <comment_count>1</comment_count>
      <attachid>164686</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-09-19 01:15:52 -0700</bug_when>
    <thetext>Created attachment 164686
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723380</commentid>
    <comment_count>2</comment_count>
      <attachid>164689</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-09-19 01:22:31 -0700</bug_when>
    <thetext>Created attachment 164689
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723609</commentid>
    <comment_count>3</comment_count>
      <attachid>164689</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-09-19 09:25:11 -0700</bug_when>
    <thetext>Comment on attachment 164689
Patch

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

This is a nice WIP patch, but there are severe issues that make it a pretty sad patch for review. You can do much better! :)

&gt; Source/WebCore/ChangeLog:18
&gt; +        * css/SelectorChecker.cpp:
&gt; +        (WebCore::SelectorChecker::checkOneSelector):
&gt; +        (WebCore::SelectorChecker::checkAttributeSelector): Extracted to share the code with ContentSelectorChecker.

This is a separate patch.

&gt; Source/WebCore/css/SelectorChecker.cpp:1274
&gt; +bool SelectorChecker::checkAttributeSelector(CSSSelector* selector, Element* element, bool&amp; matched) const

Can we improve the signature a bit? The method takes a bool by-ref param, then returns a bool value. It&apos;s pretty hard to understand what&apos;s going on.

&gt; Source/WebCore/html/shadow/ContentSelectorQuery.cpp:140
&gt; +bool ContentSelectorChecker::checkContentSelector(CSSSelector* selector, ReifiedElement* virtualElement) const

I suspect the awkwardness in naming here is primarily due to the somewhat forced &quot;is-a&quot; relationship with SelectorChecker.

&gt; Source/WebCore/html/shadow/ContentSelectorQuery.cpp:168
&gt; +    ASSERT(mode() == SelectorChecker::CollectingRules);

When will this ever ASSERT?

&gt; Source/WebCore/html/shadow/ContentSelectorQuery.cpp:247
&gt; +            // Even though WinIE allows checked and indeterminate to co-exist, the CSS selector spec says that
&gt; +            // you can&apos;t be both checked and indeterminate. We will behave like WinIE behind the scenes and just
&gt; +            // obey the CSS spec here in the test for matching the pseudo.

I am very unhappy with copy-pasting code from SelectorChecker. I suspected as much, and this comment confirmed my suspicions. We can&apos;t land this -- need to keep looking for better solutions.

&gt; Source/WebCore/html/shadow/ContentSelectorQuery.h:48
&gt; +    ReifiedNode(Node* parent, const Vector&lt;RefPtr&lt;Node&gt; &gt;&amp; children, int nthChild);

Why do we need ReifiedNode? Our selectors will only ever match elements. We might as well drop pretending we can match nodes.

&gt; Source/WebCore/html/shadow/ContentSelectorQuery.h:79
&gt; +class ContentSelectorChecker : public SelectorChecker {

Creating a sub-class relationship like this with a piece of machinery as sensitive as SelectorChecker is extremely brittle. Can we have composition here, instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724315</commentid>
    <comment_count>4</comment_count>
      <attachid>164868</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-09-20 02:32:07 -0700</bug_when>
    <thetext>Created attachment 164868
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724316</commentid>
    <comment_count>5</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-09-20 02:32:32 -0700</bug_when>
    <thetext>Maybe we can remove ReifiedElement from the WIP patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724404</commentid>
    <comment_count>6</comment_count>
      <attachid>164868</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-20 04:22:41 -0700</bug_when>
    <thetext>Comment on attachment 164868
WIP

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

New failing tests:
css3/selectors3/html/css3-modsel-36.html
css3/css3-modsel-36.html
css3/selectors3/html/css3-modsel-81.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724450</commentid>
    <comment_count>7</comment_count>
      <attachid>164899</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-09-20 05:48:20 -0700</bug_when>
    <thetext>Created attachment 164899
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724601</commentid>
    <comment_count>8</comment_count>
      <attachid>164899</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-09-20 10:16:27 -0700</bug_when>
    <thetext>Comment on attachment 164899
Patch

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

This looks pretty cool, except:

1) can you split up the SelectorChecker patch out and let&apos;s work on landing this first
2) measure SelectorChecker patch for possible performance regression. This is a sensitive part of WebKit machinery?

Also:

&gt; Source/WebCore/css/SelectorChecker.cpp:33
&gt; +#include &quot;ContentSelectorQuery.h&quot;

This seems like a backward dependency. Why is this needed?

&gt; Source/WebCore/css/SelectorChecker.cpp:1426
&gt; +template
&gt; +bool SelectorChecker::checkOneSelectorWithStrategy&lt;ContentSelectorCheckingStrategy&gt;(const ContentSelectorCheckingStrategy&amp;, const SelectorCheckingContext&amp;, PseudoId&amp;, bool&amp;) const;

Why does this need to live here? WebCore/css stuff knowing about WebCore/html/shadow seems wrong.

&gt; Source/WebCore/css/SelectorChecker.h:154
&gt; +class DefaultSelectorCheckingStrategy {

Can this be SelectorChecker::DOMTraversalStrategy?

&gt; Source/WebCore/html/shadow/ContentSelectorQuery.h:64
&gt; +class ContentSelectorCheckingStrategy {

... and this now becomes ShadowDOMTraversalStrategy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725200</commentid>
    <comment_count>9</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-09-20 23:44:37 -0700</bug_when>
    <thetext>The refactoring will be done in Bug 97298</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725206</commentid>
    <comment_count>10</comment_count>
      <attachid>165057</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-09-20 23:55:16 -0700</bug_when>
    <thetext>Created attachment 165057
wip. including other patches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725207</commentid>
    <comment_count>11</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-09-20 23:56:52 -0700</bug_when>
    <thetext>webkit-patch seems to upload the patch to the unintentional bug. Please ignore that.

(In reply to comment #10)
&gt; Created an attachment (id=165057) [details]
&gt; wip. including other patches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727301</commentid>
    <comment_count>12</comment_count>
      <attachid>165525</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-09-24 22:52:37 -0700</bug_when>
    <thetext>Created attachment 165525
WIP including other patches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727405</commentid>
    <comment_count>13</comment_count>
      <attachid>165554</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-09-25 01:29:24 -0700</bug_when>
    <thetext>Created attachment 165554
WIP including other patches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727408</commentid>
    <comment_count>14</comment_count>
      <attachid>165554</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-25 01:37:38 -0700</bug_when>
    <thetext>Comment on attachment 165554
WIP including other patches

Attachment 165554 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13997923</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727425</commentid>
    <comment_count>15</comment_count>
      <attachid>165561</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-09-25 02:17:44 -0700</bug_when>
    <thetext>Created attachment 165561
WIP including other patches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734610</commentid>
    <comment_count>16</comment_count>
      <attachid>167079</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-10-04 05:22:20 -0700</bug_when>
    <thetext>Created attachment 167079
Rebase on dependent patch https://bugs.webkit.org/attachment.cgi?id=167073</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735367</commentid>
    <comment_count>17</comment_count>
      <attachid>167256</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2012-10-04 22:58:05 -0700</bug_when>
    <thetext>Created attachment 167256
Rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735694</commentid>
    <comment_count>18</comment_count>
      <attachid>167256</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-10-05 09:22:07 -0700</bug_when>
    <thetext>Comment on attachment 167256
Rebase

OMG, this patch is so tremendously ugly, I want to cry. The adding of the base class (!!!) for a simple struct like SelectorCheckingContext, the slopping around of the shadow DOM-specific logic in SelectorChecker, the extra dependencies of headers from html/shadow.. Ugh.

Folks, we _must_ find a better way. We can&apos;t land this. I&apos;ll help you next week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737409</commentid>
    <comment_count>19</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-10-08 22:04:24 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 167256 [details])
&gt; OMG, this patch is so tremendously ugly, I want to cry. The adding of the base class (!!!) for a simple struct like SelectorCheckingContext, the slopping around of the shadow DOM-specific logic in SelectorChecker, the extra dependencies of headers from html/shadow.. Ugh.
&gt; 
&gt; Folks, we _must_ find a better way. We can&apos;t land this. I&apos;ll help you next week.

I&apos;m back.

Now that the number of arguments of checkOneSelector is 1, we might be able to have 2 arguments without performance regression. When the number of arguments was 3, I detected 10% performance regression, though. Let me try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737469</commentid>
    <comment_count>20</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-10-08 23:55:19 -0700</bug_when>
    <thetext>When we make checkOneSelector a template and we cannot place ShadowDOM related things in SelectorChecker.cpp, we have to move checkOneSelector to header file in the current design. Since we have to instantiate checkOneSelector for ShadowDOM.

Of course we don&apos;t want to do this, though...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737470</commentid>
    <comment_count>21</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-10-08 23:57:33 -0700</bug_when>
    <thetext>Or, we create a new header like dom/ContainerNodeAlgorithm.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737732</commentid>
    <comment_count>22</comment_count>
      <attachid>167745</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-10-09 06:14:58 -0700</bug_when>
    <thetext>Created attachment 167745
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737735</commentid>
    <comment_count>23</comment_count>
      <attachid>167745</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-09 06:22:45 -0700</bug_when>
    <thetext>Comment on attachment 167745
WIP

Attachment 167745 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14246004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738180</commentid>
    <comment_count>24</comment_count>
      <attachid>167745</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-10-09 14:22:47 -0700</bug_when>
    <thetext>Comment on attachment 167745
WIP

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

This patch is marked improvement.

&gt; Source/WebCore/css/SelectorChecker.cpp:1369
&gt; +bool SelectorChecker::checkOneSelectorWith(const SelectorChecker::SelectorCheckingContext&amp;, const ShadowDOMTraversalStrategy&amp;) const;

&quot;With&quot; seems out of place. I understand what you mean here, but try looking at this code out of context of this patch? WithStrategy?

&gt; Source/WebCore/css/SelectorChecker.h:90
&gt; +    bool checkOneSelector(const SelectorCheckingContext&amp;) const;

This seems like an improvement.

&gt; Source/WebCore/css/SelectorCheckerStrategy.h:29
&gt; +#ifndef SelectorCheckerStrategy_h

It&apos;s not a strategy for checking selectors, right? So the naming is a bit off. Maybe SiblingTraversalStrategies?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738823</commentid>
    <comment_count>25</comment_count>
      <attachid>167976</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-10-10 04:07:02 -0700</bug_when>
    <thetext>Created attachment 167976
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738825</commentid>
    <comment_count>26</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-10-10 04:09:50 -0700</bug_when>
    <thetext>We cannot test content reprojection only with this patch. We need hayato&apos;s patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738833</commentid>
    <comment_count>27</comment_count>
      <attachid>167976</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-10 04:21:54 -0700</bug_when>
    <thetext>Comment on attachment 167976
WIP

Attachment 167976 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14238679</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738863</commentid>
    <comment_count>28</comment_count>
      <attachid>167976</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-10 05:33:10 -0700</bug_when>
    <thetext>Comment on attachment 167976
WIP

Attachment 167976 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14238698</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738881</commentid>
    <comment_count>29</comment_count>
      <attachid>167976</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 06:04:13 -0700</bug_when>
    <thetext>Comment on attachment 167976
WIP

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

New failing tests:
fast/dom/shadow/content-reprojection.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739064</commentid>
    <comment_count>30</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-10-10 10:22:11 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; We cannot test content reprojection only with this patch. We need hayato&apos;s patch.

That&apos;s ok. We can land the test with hayato&apos;s patch or even separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739117</commentid>
    <comment_count>31</comment_count>
      <attachid>167976</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-10-10 10:54:26 -0700</bug_when>
    <thetext>Comment on attachment 167976
WIP

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

&gt; Source/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp:194
&gt; +bool RuntimeEnabledFeatures::isContentReprojectionEnabled = false;

I don&apos;t think we need this flag. We&apos;re nearly there and there is no content on the Web that would depend on old behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739753</commentid>
    <comment_count>32</comment_count>
      <attachid>168178</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-10-11 02:41:22 -0700</bug_when>
    <thetext>Created attachment 168178
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739787</commentid>
    <comment_count>33</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2012-10-11 03:34:31 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 167976 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167976&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/generic/RuntimeEnabledFeatures.cpp:194
&gt; &gt; +bool RuntimeEnabledFeatures::isContentReprojectionEnabled = false;
&gt; 
&gt; I don&apos;t think we need this flag. We&apos;re nearly there and there is no content on the Web that would depend on old behavior.

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740028</commentid>
    <comment_count>34</comment_count>
      <attachid>168178</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-11 09:10:42 -0700</bug_when>
    <thetext>Comment on attachment 168178
Patch

Clearing flags on attachment: 168178

Committed r131068: &lt;http://trac.webkit.org/changeset/131068&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740029</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-11 09:10:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164686</attachid>
            <date>2012-09-19 01:15:52 -0700</date>
            <delta_ts>2012-09-19 01:22:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96990-20120919171518.patch</filename>
            <type>text/plain</type>
            <size>20601</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4OTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2Q2ZjgzNTQ4ZTMwYjYw
Yjg3NTY3M2UyNzA5MzVlOGJlN2I4OTg1OC4uNTgzYTAxOTMwOTFiYTA2NWRmNzRhMzcwYTg5YmQ0
NDQ2ODBhODAwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA5LTE5ICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIENvbnRl
bnRTZWxlY3RvclF1ZXJ5IHdvcmsgd2hlbiBhIG5vZGUgUE9PTCBpcyB1c2VkIGluc3RlYWQgb2Yg
bm9kZSdzIHJlYWwgY2hpbGRyZW4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05Njk5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdoZW4gd2UgaW1wbGVtZW50IGNvbnRlbnQgcmVwcm9qZWN0aW9uIGluIFNo
YWRvdyBET00sIHdlIGhhdmUgdG8gdXNlIGEgbm9kZSBwb29sIGFzIGNoaWxkcmVuCisgICAgICAg
IGluc3RlYWQgb2Ygbm9kZSdzIHJlYWwgY2hpbGRyZW4uCisKKyAgICAgICAgV2UgaW50cm9kdWNl
IFJlaWZpZWROb2RlIGFuZCBSZWlmaWVkRWxlbWVudCBoZXJlLCB3aGljaCB1c2UgYSBub2RlIHBv
b2wgYXMgdGhlaXIgY2hpbGRyZW4uCisgICAgICAgIEFsc28sIHdlIG1vZGlmeSBDb250ZW50U2Vs
ZWN0b3JRdWVyeSB0byB1c2UgUmVpZmllZE5vZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBl
eGlzdGluZyB0ZXN0cyBzaG91bGQgY292ZXIuCisKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVj
a2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrQXR0cmlidXRl
U2VsZWN0b3IpOiBFeHRyYWN0ZWQgdG8gc2hhcmUgdGhlIGNvZGUgd2l0aCBDb250ZW50U2VsZWN0
b3JDaGVja2VyLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hl
Y2tlci5oOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5Lmg6CisgICAgICAgIChTZWxlY3Rv
ckRhdGFMaXN0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2VsZWN0
aW9uc1RvKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWROb2RlOjpSZWlm
aWVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWlmaWVkRWxlbWVudDo6aXNGaXJzdENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWRFbGVtZW50Ojppc0xhc3RDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWlmaWVkRWxlbWVudDo6aXNGaXJzdE9mVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWlmaWVkRWxlbWVudDo6aXNMYXN0T2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVpZmllZEVsZW1lbnQ6OmNvdW50RWxlbWVudHNCZWZvcmVXaXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQWZ0ZXJXaXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tDb250ZW50U2Vs
ZWN0b3IpOiBUaGlzIGlzIHNvbWV0aGluZyBsaWtlIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVT
ZWxlY3RvcigpLAorICAgICAgICBidXQgdGhpcyB1c2VzIFJlaWZpZWROb2RlIGFuZCBSZWlmaWVk
RWxlbWVudC4gQWxzbywgQ29udGVudFNlbGVjdG9yIGRvZXMgbm90IGhhdmUgUHNldWRvRWxlbWVu
dCwgd2Ugb21pdCB0byBjaGVjaworICAgICAgICBQc2V1ZG9FbGVtZW50IGNvZGUgZnJvbSBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoKS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lUHNldWRvQ2xhc3NTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyk6CisgICAgICAgICogaHRtbC9z
aGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaDoKKyAgICAgICAgKFJlaWZpZWROb2RlKTogUmVp
ZmllZE5vZGUgaXMgc29tZXRoaW5nIGxpa2UgYSBub2RlLCBidXQgaXRzIHNpYmxpbmdzIGFyZSBm
cm9tIGEgbm9kZSBwb29sLgorICAgICAgICAoV2ViQ29yZTo6UmVpZmllZE5vZGU6OmRvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWROb2RlOjpub2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlaWZpZWROb2RlOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWRO
b2RlOjppc0VsZW1lbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUmVpZmll
ZEVsZW1lbnQpOiBSZWlmaWVkRWxlbWVudCBpcyBzb21ldGhpbmcgbGlrZSBhbiBlbGVtZW50LCBi
dXQgaXRzIHNpYmxpbmdzIGFyZSBmcm9tIGEgbm9kZSBwb29sLgorICAgICAgICAoV2ViQ29yZTo6
UmVpZmllZEVsZW1lbnQ6OnBhcmVudEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVpZmll
ZEVsZW1lbnQ6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVpZmllZEVsZW1lbnQ6Omhh
c1RhZ05hbWUpOgorICAgICAgICAoQ29udGVudFNlbGVjdG9yQ2hlY2tlcik6CisgICAgICAgIChD
b250ZW50U2VsZWN0b3JEYXRhTGlzdCk6CisgICAgICAgIChDb250ZW50U2VsZWN0b3JRdWVyeSk6
CisgICAgICAgIChXZWJDb3JlOjp0b1JlaWZpZWRFbGVtZW50KToKKwogMjAxMi0wOS0xOCAgS2Vu
aWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVt
XSBEb24ndCB0cmVhdCB0YWIgYXMgc3BhY2VzIGZvciB3b3JkLWVuZCBpbiBIYXJmQnV6elNoYXBl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCAxMzNlMmE4YWE0Y2U2
ZmUzMGNhYjNiZDc5ODM0MmY3N2RjNDhmYjMzLi40MDdiMjczMzQxZDA1MDZmNzg3NDA3MzNkODA5
YTNiYWM2ZDMyZDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAt
NzE3LDE1ICs3MTcsOSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihj
b25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAgICAgICByZXR1cm4g
ZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IHNl
bGVjdG9yLT52YWx1ZSgpOwogCiAgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9y
KCkpIHsKLSAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ciA9IHNlbGVjdG9yLT5hdHRy
aWJ1dGUoKTsKLQotICAgICAgICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSAhbV9k
b2N1bWVudElzSFRNTCB8fCAhaHRtbEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKGF0
dHIpOwotCi0gICAgICAgIGlmICghYW55QXR0cmlidXRlTWF0Y2hlcyhlbGVtZW50LCBzdGF0aWNf
Y2FzdDxDU1NTZWxlY3Rvcjo6TWF0Y2g+KHNlbGVjdG9yLT5tX21hdGNoKSwgYXR0ciwgc2VsZWN0
b3ItPnZhbHVlKCksIGNhc2VTZW5zaXRpdmUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBib29sIG1hdGNoZWQ7CisgICAgICAgIGlmIChjaGVja0F0dHJpYnV0ZVNlbGVjdG9y
KHNlbGVjdG9yLCBlbGVtZW50LCBtYXRjaGVkKSkKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVk
OwogICAgIH0KIAogICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3MpIHsKQEAgLTEyNzcsNiArMTI3MSwyNSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxlY3Rvciogc2VsLCBQc2V1ZG9JZCYpIGNv
bgogICAgIH0KIH0KIAorYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrQXR0cmlidXRlU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBib29sJiBtYXRjaGVk
KSBjb25zdAoreworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHIgPSBzZWxlY3Rvci0+YXR0
cmlidXRlKCk7CisKKyAgICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkgeworICAgICAg
ICBtYXRjaGVkID0gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJv
b2wgY2FzZVNlbnNpdGl2ZSA9ICFtX2RvY3VtZW50SXNIVE1MIHx8ICFodG1sQXR0cmlidXRlSGFz
Q2FzZUluc2Vuc2l0aXZlVmFsdWUoYXR0cik7CisKKyAgICBpZiAoIWFueUF0dHJpYnV0ZU1hdGNo
ZXMoZWxlbWVudCwgc3RhdGljX2Nhc3Q8Q1NTU2VsZWN0b3I6Ok1hdGNoPihzZWxlY3Rvci0+bV9t
YXRjaCksIGF0dHIsIHNlbGVjdG9yLT52YWx1ZSgpLCBjYXNlU2Vuc2l0aXZlKSkgeworICAgICAg
ICBtYXRjaGVkID0gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwogdm9pZCBTZWxlY3RvckNoZWNrZXI6OmFsbFZpc2l0ZWRTdGF0ZUNo
YW5nZWQoKQogewogICAgIGlmIChtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZS5pc0VtcHR5
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKaW5kZXggZjE1Y2UwZDA4ZWU0MzI5
OGI0MTIwNDEyY2Y3NmQ5NWFhNWJmM2MwMS4uMzUwMDhhZjFhMDM3NDc3YzNiZTYwNDM2ZjFlZjgz
NmEwNzRlZmM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAtMTE2LDYg
KzExNiw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkZXRlcm1pbmVTZWxlY3RvclNjb3Bl
cyhjb25zdCBDU1NTZWxlY3Rvckxpc3QmLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRT
Y29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFzc1Njb3Blcyk7CiAgICAgc3Rh
dGljIGJvb2wgZWxlbWVudE1hdGNoZXNTZWxlY3RvclNjb3Blcyhjb25zdCBTdHlsZWRFbGVtZW50
KiwgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBjb25zdCBIYXNo
U2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpOwogCitwcm90ZWN0ZWQ6CisgICAg
Ym9vbCBjaGVja0F0dHJpYnV0ZVNlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIGJvb2wm
IG1hdGNoZWQpIGNvbnN0OworCiBwcml2YXRlOgogICAgIGJvb2wgY2hlY2tPbmVTZWxlY3Rvcihj
b25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIFBzZXVkb0lkJiwgYm9vbCYgaGFzVW5rbm93
blBzZXVkb0VsZW1lbnRzKSBjb25zdDsKICAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xh
c3MoQ1NTU2VsZWN0b3IqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NlbGVjdG9yUXVlcnkuaAppbmRleCA4NjVhNDMxZjg5ODFmN2Y3NmRmYzlkNjhmNDFjOGFj
OGNiYTBiYmEzLi42MjM5MzRmMjc4YTgxMjI3ZWYwOTk1NjdmYjIxMWE0Mjc0Y2JhNDI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAg
IFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IHF1ZXJ5QWxsKGNvbnN0IFNlbGVjdG9yQ2hlY2tlciYsIE5v
ZGUqIHJvb3ROb2RlKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHF1ZXJ5Rmlyc3Qo
Y29uc3QgU2VsZWN0b3JDaGVja2VyJiwgTm9kZSogcm9vdE5vZGUpIGNvbnN0OwogCi1wcml2YXRl
OgorcHJvdGVjdGVkOgogICAgIHN0cnVjdCBTZWxlY3RvckRhdGEgewogICAgICAgICBTZWxlY3Rv
ckRhdGEoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29sIGlzRmFzdENoZWNrYWJsZSkgOiBzZWxl
Y3RvcihzZWxlY3RvciksIGlzRmFzdENoZWNrYWJsZShpc0Zhc3RDaGVja2FibGUpIHsgfQogICAg
ICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcAppbmRleCAwNzZhNzIzYzhhOTFhZmU5MzE4ODc2
NTg5NGNlNzczNmRjMzY2YTAwLi44NTkyZmE4MmY5MjJkMjc3YzRhMzg4NjYzMGQ2NzU2M2MwN2Ex
ZTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJp
YnV0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmli
dXRvci5jcHAKQEAgLTExOCw3ICsxMTgsOCBAQCB2b2lkIENvbnRlbnREaXN0cmlidXRvcjo6ZGlz
dHJpYnV0ZVNlbGVjdGlvbnNUbyhJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQsCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBOb2RlKiBjaGlsZCA9IHBvb2xbaV0uZ2V0KCk7
Ci0gICAgICAgIGlmICghcXVlcnkubWF0Y2hlcyhjaGlsZCkpCisgICAgICAgIFJlaWZpZWROb2Rl
IHJlaWZpZWROb2RlKGNoaWxkLT5wYXJlbnROb2RlKCksIHBvb2wsIGkpOworICAgICAgICBpZiAo
IXF1ZXJ5Lm1hdGNoZXMoJnJlaWZpZWROb2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgIGRpc3RyaWJ1dGlvbi5hcHBlbmQoY2hpbGQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwCmluZGV4IGYxMmM1OTkyNWY3
YzkzMjRmNmZlZmNiZWIyMjM1ODk1N2RmMjExZjMuLjIzYjc2MWUxZDZmYTZlMjVmMjA2Nzc0YTYw
MWQxZTE2NTY3ZmU2ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0Nv
bnRlbnRTZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9D
b250ZW50U2VsZWN0b3JRdWVyeS5jcHAKQEAgLTI5LDExICsyOSwyNjggQEAKIAogI2luY2x1ZGUg
IkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgorI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1M
T3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKICNpbmNs
dWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitSZWlmaWVkTm9k
ZTo6UmVpZmllZE5vZGUoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2Rl
PiA+JiBjaGlsZHJlbiwgaW50IG50aENoaWxkKQorICAgIDogbV9wYXJlbnROb2RlKHBhcmVudE5v
ZGUpCisgICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQorICAgICwgbV9udGhDaGlsZChudGhDaGls
ZCkKK3sKKyAgICBBU1NFUlQocGFyZW50Tm9kZSk7Cit9CisKK2Jvb2wgUmVpZmllZEVsZW1lbnQ6
OmlzRmlyc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgZm9yIChpbnQgaSA9IG1fbnRoQ2hpbGQgLSAx
OyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAobV9jaGlsZHJlbltpXSAmJiBtX2NoaWxkcmVu
W2ldLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVpZmllZEVsZW1lbnQ6OmlzTGFzdENoaWxk
KCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV9udGhDaGlsZCArIDE7IGkgPCBtX2No
aWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldICYmIG1fY2hp
bGRyZW5baV0tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZWlmaWVkRWxlbWVudDo6aXNGaXJz
dE9mVHlwZShjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAoreworICAgIGZvciAoaW50
IGkgPSBtX250aENoaWxkIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRy
ZW5baV0gJiYgbV9jaGlsZHJlbltpXS0+aXNFbGVtZW50Tm9kZSgpICYmIG1fY2hpbGRyZW5baV0t
Pmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVpZmllZEVsZW1lbnQ6OmlzTGFzdE9mVHlwZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSBt
X250aENoaWxkICsgMTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fY2hpbGRyZW5baV0gJiYgbV9jaGlsZHJlbltpXS0+aXNFbGVtZW50Tm9kZSgpICYmIG1fY2hp
bGRyZW5baV0tPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBSZWlmaWVkRWxlbWVudDo6Y291bnRF
bGVtZW50c0JlZm9yZSgpIGNvbnN0Cit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKGlu
dCBpID0gbV9udGhDaGlsZCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChtX2NoaWxk
cmVuW2ldICYmIG1fY2hpbGRyZW5baV0tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICsr
Y291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitpbnQgUmVpZmllZEVsZW1l
bnQ6OmNvdW50RWxlbWVudHNBZnRlcigpIGNvbnN0Cit7CisgICAgaW50IGNvdW50ID0gMDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gbV9udGhDaGlsZCArIDE7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldICYmIG1fY2hpbGRyZW5baV0tPmlzRWxl
bWVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiArK2NvdW50OworICAgIH0KKworICAgIHJl
dHVybiBjb3VudDsKK30KKworaW50IFJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQmVmb3Jl
V2l0aChjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAoreworICAgIGludCBjb3VudCA9
IDA7CisgICAgZm9yIChpbnQgaSA9IG1fbnRoQ2hpbGQgLSAxOyBpID49IDA7IC0taSkgeworICAg
ICAgICBpZiAobV9jaGlsZHJlbltpXSAmJiBtX2NoaWxkcmVuW2ldLT5pc0VsZW1lbnROb2RlKCkg
JiYgbV9jaGlsZHJlbltpXS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgICsrY291bnQ7
CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitpbnQgUmVpZmllZEVsZW1lbnQ6OmNv
dW50RWxlbWVudHNBZnRlcldpdGgoY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkgY29uc3QKK3sK
KyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSBtX250aENoaWxkICsgMTsg
aSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW5baV0g
JiYgbV9jaGlsZHJlbltpXS0+aXNFbGVtZW50Tm9kZSgpICYmIG1fY2hpbGRyZW5baV0tPmhhc1Rh
Z05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gKytjb3VudDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gY291bnQ7Cit9CisKK0NvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxlY3Rv
ckNoZWNrZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHN0cmljdFBhcnNpbmcpCisgICAgOiBT
ZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQsIHN0cmljdFBhcnNpbmcpCit7Cit9CisKK2Jvb2wgQ29u
dGVudFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tDb250ZW50U2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yLCBSZWlmaWVkRWxlbWVudCogdmlydHVhbEVsZW1lbnQpIGNvbnN0Cit7CisgICAgRWxl
bWVudCogZWxlbWVudCA9IHZpcnR1YWxFbGVtZW50LT5lbGVtZW50KCk7CisKKyAgICBpZiAoIVNl
bGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvcikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
Q2xhc3MpCisgICAgICAgIHJldHVybiBlbGVtZW50LT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0
PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbGVjdG9y
LT52YWx1ZSgpKTsKKworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
SWQpCisgICAgICAgIHJldHVybiBlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlkRm9yU3R5
bGVSZXNvbHV0aW9uKCkgPT0gc2VsZWN0b3ItPnZhbHVlKCk7CisKKyAgICBpZiAoc2VsZWN0b3It
PmlzQXR0cmlidXRlU2VsZWN0b3IoKSkgeworICAgICAgICBib29sIG1hdGNoZWQ7CisgICAgICAg
IGlmIChjaGVja0F0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yLCBlbGVtZW50LCBtYXRjaGVkKSkK
KyAgICAgICAgICAgIHJldHVybiBtYXRjaGVkOworICAgIH0KKworICAgIGlmIChzZWxlY3Rvci0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpCisgICAgICAgIHJldHVybiBjaGVj
a09uZVBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IsIHZpcnR1YWxFbGVtZW50KTsKKworICAg
IHJldHVybiB0cnVlOworfQorCisKK2Jvb2wgQ29udGVudFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmVQc2V1ZG9DbGFzc1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvciwgUmVpZmllZEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1vZGUoKSA9PSBTZWxlY3RvckNoZWNr
ZXI6OkNvbGxlY3RpbmdSdWxlcyk7CisgICAgCisgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRv
VHlwZSgpKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RDaGlsZDoKKyAgICAg
ICAgaWYgKGVsZW1lbnQtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50
LT5pc0ZpcnN0Q2hpbGQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvRmlyc3RPZlR5cGU6CisgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnROb2RlKCkpCisg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNGaXJzdE9mVHlwZShlbGVtZW50LT5lbGVtZW50
KCktPnRhZ1FOYW1lKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9MYXN0Q2hpbGQ6CisgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnROb2RlKCkpCisgICAg
ICAgICAgICByZXR1cm4gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpLT5pc0ZpbmlzaGVkUGFyc2lu
Z0NoaWxkcmVuKCkgJiYgZWxlbWVudC0+aXNMYXN0Q2hpbGQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFzdE9mVHlwZToKKyAgICAgICAgaWYgKGVsZW1l
bnQtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCktPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiBlbGVtZW50LT5pc0xhc3RPZlR5
cGUoZWxlbWVudC0+ZWxlbWVudCgpLT50YWdRTmFtZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seU9mVHlwZToKKyAgICAgICAgaWYgKGVsZW1lbnQt
PnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5pc0ZpcnN0T2ZUeXBl
KGVsZW1lbnQtPmVsZW1lbnQoKS0+dGFnUU5hbWUoKSkKKyAgICAgICAgICAgICAgICAmJiBlbGVt
ZW50LT5wYXJlbnRFbGVtZW50KCktPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKQorICAgICAg
ICAgICAgICAgICYmIGVsZW1lbnQtPmlzTGFzdE9mVHlwZShlbGVtZW50LT5lbGVtZW50KCktPnRh
Z1FOYW1lKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9O
dGhDaGlsZDoKKyAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBpZiAoZWxlbWVudC0+cGFyZW50Tm9kZSgpKQorICAgICAgICAgICAg
cmV0dXJuIHNlbGVjdG9yLT5tYXRjaE50aChlbGVtZW50LT5jb3VudEVsZW1lbnRzQmVmb3JlKCkg
KyAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoT2ZU
eXBlOgorICAgICAgICBpZiAoIXNlbGVjdG9yLT5wYXJzZU50aCgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlbGVtZW50LT5lbGVtZW50KCktPnRhZ1FOYW1lKCk7
CisgICAgICAgICAgICByZXR1cm4gc2VsZWN0b3ItPm1hdGNoTnRoKGVsZW1lbnQtPmNvdW50RWxl
bWVudHNCZWZvcmVXaXRoKHR5cGUpICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoTGFzdENoaWxkOgorICAgICAgICBpZiAoIXNl
bGVjdG9yLT5wYXJzZU50aCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChlbGVt
ZW50LT5wYXJlbnROb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+cGFyZW50RWxl
bWVudCgpLT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYgc2VsZWN0b3ItPm1hdGNoTnRo
KGVsZW1lbnQtPmNvdW50RWxlbWVudHNBZnRlcigpICsgMSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aExhc3RPZlR5cGU6CisgICAgICAgIGlmICghc2Vs
ZWN0b3ItPnBhcnNlTnRoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGVsZW1l
bnQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlw
ZSA9IGVsZW1lbnQtPmVsZW1lbnQoKS0+dGFnUU5hbWUoKTsKKyAgICAgICAgICAgIHJldHVybiBl
bGVtZW50LT5wYXJlbnRFbGVtZW50KCktPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiBz
ZWxlY3Rvci0+bWF0Y2hOdGgoZWxlbWVudC0+Y291bnRFbGVtZW50c0FmdGVyV2l0aCh0eXBlKSAr
IDEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb1RhcmdldDoKKyAgICAgICAgaWYgKGVsZW1lbnQtPmVsZW1lbnQoKSA9PSBlbGVtZW50LT5k
b2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgorICAgICAgICAvLyA6
dmlzaXRlZCBhbmQgOmxpbmsgbWF0Y2hlcyBhcmUgc2VwYXJhdGVkIGxhdGVyIHdoZW4gYXBwbHlp
bmcgdGhlIHN0eWxlLiBIZXJlIGJvdGggY2xhc3NlcyBtYXRjaCBhbGwgbGlua3MuLi4KKyAgICAg
ICAgcmV0dXJuIGVsZW1lbnQtPmVsZW1lbnQoKS0+aXNMaW5rKCk7CisgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvVmlzaXRlZDoKKyAgICAgICAgLy8gLi4uZXhjZXB0IGlmIDp2aXNpdGVkIG1h
dGNoaW5nIGlzIGRpc2FibGVkIGZvciBhbmNlc3Rvci9zaWJsaW5nIG1hdGNoaW5nLgorCisgICAg
ICAgIC8vIEZJWE1FOiB2aXNpdGVkIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgorICAgICAgICByZXR1
cm4gZWxlbWVudC0+ZWxlbWVudCgpLT5pc0xpbmsoKTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9FbmFibGVkOgorICAgICAgICBpZiAoZWxlbWVudCAmJiAoZWxlbWVudC0+ZWxlbWVudCgp
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9uVGFn
KSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGdyb3VwVGFnKSkpCisgICAgICAgICAgICByZXR1
cm4gZWxlbWVudC0+ZWxlbWVudCgpLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EaXNhYmxlZDoKKyAgICAgICAgaWYg
KGVsZW1lbnQgJiYgKGVsZW1lbnQtPmVsZW1lbnQoKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSB8
fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShv
cHRncm91cFRhZykpKQorICAgICAgICAgICAgcmV0dXJuICFlbGVtZW50LT5lbGVtZW50KCktPmlz
RW5hYmxlZEZvcm1Db250cm9sKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NoZWNrZWQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZWxlbWVudCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIFdpbklF
IGFsbG93cyBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlIHRvIGNvLWV4aXN0LCB0aGUgQ1NTIHNl
bGVjdG9yIHNwZWMgc2F5cyB0aGF0CisgICAgICAgICAgICAvLyB5b3UgY2FuJ3QgYmUgYm90aCBj
aGVja2VkIGFuZCBpbmRldGVybWluYXRlLiBXZSB3aWxsIGJlaGF2ZSBsaWtlIFdpbklFIGJlaGlu
ZCB0aGUgc2NlbmVzIGFuZCBqdXN0CisgICAgICAgICAgICAvLyBvYmV5IHRoZSBDU1Mgc3BlYyBo
ZXJlIGluIHRoZSB0ZXN0IGZvciBtYXRjaGluZyB0aGUgcHNldWRvLgorICAgICAgICAgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+ZWxlbWVudCgpLT50b0lucHV0
RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQt
PnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKG9wdGlvblRhZykgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50LT5l
bGVtZW50KCkpLT5zZWxlY3RlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9J
bmRldGVybWluYXRlOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisgICAgICAg
ICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsKKyAgICAgICAgICAg
ICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBwcm9ncmVzcyA9IHN0YXRpY19jYXN0PEhUTUxQcm9n
cmVzc0VsZW1lbnQqPihlbGVtZW50LT5lbGVtZW50KCkpOworICAgICAgICAgICAgICAgIGlmIChw
cm9ncmVzcyAmJiAhcHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisj
ZW5kaWYKKyAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1l
bnQtPmVsZW1lbnQoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChpbnB1dEVs
ZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgZGVmYXVs
dDoKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJob2dlIDogJWRcbiIsIHNlbGVjdG9yLT5wc2V1
ZG9UeXBlKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworCitib29sIENvbnRlbnRTZWxlY3RvckRh
dGFMaXN0OjptYXRjaGVzKGNvbnN0IENvbnRlbnRTZWxlY3RvckNoZWNrZXImIHNlbGVjdG9yQ2hl
Y2tlciwgUmVpZmllZEVsZW1lbnQqIHRhcmdldEVsZW1lbnQpIGNvbnN0Cit7CisgICAgQVNTRVJU
KHRhcmdldEVsZW1lbnQpOworCisgICAgdW5zaWduZWQgc2VsZWN0b3JDb3VudCA9IG1fc2VsZWN0
b3JzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VsZWN0b3JDb3VudDsg
KytpKSB7CisgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIuY2hlY2tDb250ZW50U2VsZWN0b3Io
bV9zZWxlY3RvcnNbaV0uc2VsZWN0b3IsIHRhcmdldEVsZW1lbnQpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiBDb250ZW50U2VsZWN0
b3JRdWVyeTo6Q29udGVudFNlbGVjdG9yUXVlcnkoY29uc3QgSW5zZXJ0aW9uUG9pbnQqIGluc2Vy
dGlvblBvaW50KQogICAgIDogbV9pbnNlcnRpb25Qb2ludChpbnNlcnRpb25Qb2ludCkKICAgICAs
IG1fc2VsZWN0b3JDaGVja2VyKGluc2VydGlvblBvaW50LT5kb2N1bWVudCgpLCAhaW5zZXJ0aW9u
UG9pbnQtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKQpAQCAtNTgsNyArMzE1LDcgQEAgYm9v
bCBDb250ZW50U2VsZWN0b3JRdWVyeTo6aXNWYWxpZFNlbGVjdG9yKCkgY29uc3QKICAgICByZXR1
cm4gbV9pc1ZhbGlkU2VsZWN0b3I7CiB9CiAKLWJvb2wgQ29udGVudFNlbGVjdG9yUXVlcnk6Om1h
dGNoZXMoTm9kZSogbm9kZSkgY29uc3QKK2Jvb2wgQ29udGVudFNlbGVjdG9yUXVlcnk6Om1hdGNo
ZXMoUmVpZmllZE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG5vZGUpOwogICAgIGlm
ICghbm9kZSkKQEAgLTc1LDcgKzMzMiw3IEBAIGJvb2wgQ29udGVudFNlbGVjdG9yUXVlcnk6Om1h
dGNoZXMoTm9kZSogbm9kZSkgY29uc3QKICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fc2VsZWN0b3JzLm1hdGNoZXMo
bV9zZWxlY3RvckNoZWNrZXIsIHRvRWxlbWVudChub2RlKSk7CisgICAgcmV0dXJuIG1fc2VsZWN0
b3JzLm1hdGNoZXMobV9zZWxlY3RvckNoZWNrZXIsIHRvUmVpZmllZEVsZW1lbnQobm9kZSkpOwog
fQogCiBzdGF0aWMgYm9vbCB2YWxpZGF0ZVN1YlNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3Rv
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3Rv
clF1ZXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVy
eS5oCmluZGV4IDk0ZmEzZWZjY2YzZjlkNzJlOTc0Nzc1ZTJkMmQzMTQwZDEzY2IzNGUuLmIyMDEy
YmJlZDY3ODdiNGY3ZWRjMzUzNDM2ZjFhM2M1YTc5OWYzYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaApAQCAtNDMsMjUgKzQzLDc2
IEBAIGNsYXNzIERvY3VtZW50OwogY2xhc3MgTm9kZTsKIGNsYXNzIEluc2VydGlvblBvaW50Owog
CitjbGFzcyBSZWlmaWVkTm9kZSB7CitwdWJsaWM6CisgICAgUmVpZmllZE5vZGUoTm9kZSogcGFy
ZW50LCBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIGNoaWxkcmVuLCBpbnQgbnRoQ2hpbGQp
OworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbm9kZSgpLT5kb2N1
bWVudCgpOyB9CisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5bbV9u
dGhDaGlsZF0uZ2V0KCk7IH0KKyAgICBOb2RlKiBwYXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9wYXJlbnROb2RlOyB9CisKKyAgICBib29sIGlzRWxlbWVudE5vZGUoKSBjb25zdCB7IHJldHVy
biBub2RlKCktPmlzRWxlbWVudE5vZGUoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgTm9kZSogbV9w
YXJlbnROb2RlOworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBtX2NoaWxkcmVuOworICAgIGlu
dCBtX250aENoaWxkOworfTsKKworY2xhc3MgUmVpZmllZEVsZW1lbnQgOiBwdWJsaWMgUmVpZmll
ZE5vZGUgeworcHVibGljOgorICAgIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBXZWJDb3JlOjp0b0VsZW1lbnQocGFyZW50Tm9kZSgpKTsgfQorICAgIEVsZW1lbnQqIGVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBXZWJDb3JlOjp0b0VsZW1lbnQobm9kZSgpKTsgfQorCisg
ICAgYm9vbCBoYXNUYWdOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0IHsgcmV0
dXJuIG5vZGUoKS0+aGFzVGFnTmFtZShuYW1lKTsgfQorCisgICAgYm9vbCBpc0ZpcnN0Q2hpbGQo
KSBjb25zdDsKKyAgICBib29sIGlzTGFzdENoaWxkKCkgY29uc3Q7CisgICAgYm9vbCBpc0ZpcnN0
T2ZUeXBlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpIGNvbnN0OworICAgIGJvb2wgaXNMYXN0
T2ZUeXBlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpIGNvbnN0OworICAgIGludCBjb3VudEVs
ZW1lbnRzQmVmb3JlKCkgY29uc3Q7CisgICAgaW50IGNvdW50RWxlbWVudHNBZnRlcigpIGNvbnN0
OworICAgIGludCBjb3VudEVsZW1lbnRzQmVmb3JlV2l0aChjb25zdCBRdWFsaWZpZWROYW1lJiB0
eXBlKSBjb25zdDsKKyAgICBpbnQgY291bnRFbGVtZW50c0FmdGVyV2l0aChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0eXBlKSBjb25zdDsKK307CisKK2NsYXNzIENvbnRlbnRTZWxlY3RvckNoZWNrZXIg
OiBwdWJsaWMgU2VsZWN0b3JDaGVja2VyIHsKK3B1YmxpYzoKKyAgICBDb250ZW50U2VsZWN0b3JD
aGVja2VyKERvY3VtZW50KiwgYm9vbCBzdHJpY3RQYXJzaW5nKTsKKworICAgIGJvb2wgY2hlY2tD
b250ZW50U2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBSZWlmaWVkRWxlbWVudCopIGNvbnN0OworcHJp
dmF0ZToKKyAgICBib29sIGNoZWNrT25lUHNldWRvQ2xhc3NTZWxlY3RvcihDU1NTZWxlY3Rvcios
IFJlaWZpZWRFbGVtZW50KikgY29uc3Q7Cit9OworCitjbGFzcyBDb250ZW50U2VsZWN0b3JEYXRh
TGlzdCA6IHB1YmxpYyBTZWxlY3RvckRhdGFMaXN0IHsKK3B1YmxpYzoKKyAgICBib29sIG1hdGNo
ZXMoY29uc3QgQ29udGVudFNlbGVjdG9yQ2hlY2tlciYsIFJlaWZpZWRFbGVtZW50KikgY29uc3Q7
Cit9OworCiBjbGFzcyBDb250ZW50U2VsZWN0b3JRdWVyeSB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ29udGVudFNlbGVjdG9yUXVlcnkpOwogcHVibGljOgogICAgIGV4cGxpY2l0IENvbnRl
bnRTZWxlY3RvclF1ZXJ5KGNvbnN0IEluc2VydGlvblBvaW50Kik7CiAKICAgICBib29sIGlzVmFs
aWRTZWxlY3RvcigpIGNvbnN0OwotICAgIGJvb2wgbWF0Y2hlcyhOb2RlKikgY29uc3Q7CisgICAg
Ym9vbCBtYXRjaGVzKFJlaWZpZWROb2RlKikgY29uc3Q7CiBwcml2YXRlOgogICAgIGJvb2wgdmFs
aWRhdGVTZWxlY3Rvckxpc3QoKTsKIAogICAgIGNvbnN0IEluc2VydGlvblBvaW50KiBtX2luc2Vy
dGlvblBvaW50OwotICAgIFNlbGVjdG9yRGF0YUxpc3QgbV9zZWxlY3RvcnM7CisgICAgQ29udGVu
dFNlbGVjdG9yRGF0YUxpc3QgbV9zZWxlY3RvcnM7CiAgICAgQ1NTU2VsZWN0b3JMaXN0IG1fc2Vs
ZWN0b3JMaXN0OwotICAgIFNlbGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKKyAgICBD
b250ZW50U2VsZWN0b3JDaGVja2VyIG1fc2VsZWN0b3JDaGVja2VyOwogICAgIGJvb2wgbV9pc1Zh
bGlkU2VsZWN0b3I7CiB9OwogCitpbmxpbmUgUmVpZmllZEVsZW1lbnQqIHRvUmVpZmllZEVsZW1l
bnQoUmVpZmllZE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IG5vZGUtPmlzRWxl
bWVudE5vZGUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlaWZpZWRFbGVtZW50Kj4obm9k
ZSk7CiB9CiAKLQorfQogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164689</attachid>
            <date>2012-09-19 01:22:31 -0700</date>
            <delta_ts>2012-09-20 02:32:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96990-20120919172157.patch</filename>
            <type>text/plain</type>
            <size>20536</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4OTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2Q2ZjgzNTQ4ZTMwYjYw
Yjg3NTY3M2UyNzA5MzVlOGJlN2I4OTg1OC4uNTgzYTAxOTMwOTFiYTA2NWRmNzRhMzcwYTg5YmQ0
NDQ2ODBhODAwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA5LTE5ICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIENvbnRl
bnRTZWxlY3RvclF1ZXJ5IHdvcmsgd2hlbiBhIG5vZGUgUE9PTCBpcyB1c2VkIGluc3RlYWQgb2Yg
bm9kZSdzIHJlYWwgY2hpbGRyZW4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05Njk5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdoZW4gd2UgaW1wbGVtZW50IGNvbnRlbnQgcmVwcm9qZWN0aW9uIGluIFNo
YWRvdyBET00sIHdlIGhhdmUgdG8gdXNlIGEgbm9kZSBwb29sIGFzIGNoaWxkcmVuCisgICAgICAg
IGluc3RlYWQgb2Ygbm9kZSdzIHJlYWwgY2hpbGRyZW4uCisKKyAgICAgICAgV2UgaW50cm9kdWNl
IFJlaWZpZWROb2RlIGFuZCBSZWlmaWVkRWxlbWVudCBoZXJlLCB3aGljaCB1c2UgYSBub2RlIHBv
b2wgYXMgdGhlaXIgY2hpbGRyZW4uCisgICAgICAgIEFsc28sIHdlIG1vZGlmeSBDb250ZW50U2Vs
ZWN0b3JRdWVyeSB0byB1c2UgUmVpZmllZE5vZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBl
eGlzdGluZyB0ZXN0cyBzaG91bGQgY292ZXIuCisKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVj
a2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrQXR0cmlidXRl
U2VsZWN0b3IpOiBFeHRyYWN0ZWQgdG8gc2hhcmUgdGhlIGNvZGUgd2l0aCBDb250ZW50U2VsZWN0
b3JDaGVja2VyLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hl
Y2tlci5oOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5Lmg6CisgICAgICAgIChTZWxlY3Rv
ckRhdGFMaXN0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2VsZWN0
aW9uc1RvKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWROb2RlOjpSZWlm
aWVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWlmaWVkRWxlbWVudDo6aXNGaXJzdENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWRFbGVtZW50Ojppc0xhc3RDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWlmaWVkRWxlbWVudDo6aXNGaXJzdE9mVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWlmaWVkRWxlbWVudDo6aXNMYXN0T2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVpZmllZEVsZW1lbnQ6OmNvdW50RWxlbWVudHNCZWZvcmVXaXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQWZ0ZXJXaXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tDb250ZW50U2Vs
ZWN0b3IpOiBUaGlzIGlzIHNvbWV0aGluZyBsaWtlIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVT
ZWxlY3RvcigpLAorICAgICAgICBidXQgdGhpcyB1c2VzIFJlaWZpZWROb2RlIGFuZCBSZWlmaWVk
RWxlbWVudC4gQWxzbywgQ29udGVudFNlbGVjdG9yIGRvZXMgbm90IGhhdmUgUHNldWRvRWxlbWVu
dCwgd2Ugb21pdCB0byBjaGVjaworICAgICAgICBQc2V1ZG9FbGVtZW50IGNvZGUgZnJvbSBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoKS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lUHNldWRvQ2xhc3NTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyk6CisgICAgICAgICogaHRtbC9z
aGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaDoKKyAgICAgICAgKFJlaWZpZWROb2RlKTogUmVp
ZmllZE5vZGUgaXMgc29tZXRoaW5nIGxpa2UgYSBub2RlLCBidXQgaXRzIHNpYmxpbmdzIGFyZSBm
cm9tIGEgbm9kZSBwb29sLgorICAgICAgICAoV2ViQ29yZTo6UmVpZmllZE5vZGU6OmRvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWROb2RlOjpub2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlaWZpZWROb2RlOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWRO
b2RlOjppc0VsZW1lbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUmVpZmll
ZEVsZW1lbnQpOiBSZWlmaWVkRWxlbWVudCBpcyBzb21ldGhpbmcgbGlrZSBhbiBlbGVtZW50LCBi
dXQgaXRzIHNpYmxpbmdzIGFyZSBmcm9tIGEgbm9kZSBwb29sLgorICAgICAgICAoV2ViQ29yZTo6
UmVpZmllZEVsZW1lbnQ6OnBhcmVudEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVpZmll
ZEVsZW1lbnQ6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVpZmllZEVsZW1lbnQ6Omhh
c1RhZ05hbWUpOgorICAgICAgICAoQ29udGVudFNlbGVjdG9yQ2hlY2tlcik6CisgICAgICAgIChD
b250ZW50U2VsZWN0b3JEYXRhTGlzdCk6CisgICAgICAgIChDb250ZW50U2VsZWN0b3JRdWVyeSk6
CisgICAgICAgIChXZWJDb3JlOjp0b1JlaWZpZWRFbGVtZW50KToKKwogMjAxMi0wOS0xOCAgS2Vu
aWNoaSBJc2hpYmFzaGkgIDxiYXNoaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVt
XSBEb24ndCB0cmVhdCB0YWIgYXMgc3BhY2VzIGZvciB3b3JkLWVuZCBpbiBIYXJmQnV6elNoYXBl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCAxMzNlMmE4YWE0Y2U2
ZmUzMGNhYjNiZDc5ODM0MmY3N2RjNDhmYjMzLi40MDdiMjczMzQxZDA1MDZmNzg3NDA3MzNkODA5
YTNiYWM2ZDMyZDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAt
NzE3LDE1ICs3MTcsOSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihj
b25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAgICAgICByZXR1cm4g
ZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IHNl
bGVjdG9yLT52YWx1ZSgpOwogCiAgICAgaWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9y
KCkpIHsKLSAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ciA9IHNlbGVjdG9yLT5hdHRy
aWJ1dGUoKTsKLQotICAgICAgICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSAhbV9k
b2N1bWVudElzSFRNTCB8fCAhaHRtbEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKGF0
dHIpOwotCi0gICAgICAgIGlmICghYW55QXR0cmlidXRlTWF0Y2hlcyhlbGVtZW50LCBzdGF0aWNf
Y2FzdDxDU1NTZWxlY3Rvcjo6TWF0Y2g+KHNlbGVjdG9yLT5tX21hdGNoKSwgYXR0ciwgc2VsZWN0
b3ItPnZhbHVlKCksIGNhc2VTZW5zaXRpdmUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBib29sIG1hdGNoZWQ7CisgICAgICAgIGlmIChjaGVja0F0dHJpYnV0ZVNlbGVjdG9y
KHNlbGVjdG9yLCBlbGVtZW50LCBtYXRjaGVkKSkKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVk
OwogICAgIH0KIAogICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3MpIHsKQEAgLTEyNzcsNiArMTI3MSwyNSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxlY3Rvciogc2VsLCBQc2V1ZG9JZCYpIGNv
bgogICAgIH0KIH0KIAorYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrQXR0cmlidXRlU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBib29sJiBtYXRjaGVk
KSBjb25zdAoreworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHIgPSBzZWxlY3Rvci0+YXR0
cmlidXRlKCk7CisKKyAgICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkgeworICAgICAg
ICBtYXRjaGVkID0gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJv
b2wgY2FzZVNlbnNpdGl2ZSA9ICFtX2RvY3VtZW50SXNIVE1MIHx8ICFodG1sQXR0cmlidXRlSGFz
Q2FzZUluc2Vuc2l0aXZlVmFsdWUoYXR0cik7CisKKyAgICBpZiAoIWFueUF0dHJpYnV0ZU1hdGNo
ZXMoZWxlbWVudCwgc3RhdGljX2Nhc3Q8Q1NTU2VsZWN0b3I6Ok1hdGNoPihzZWxlY3Rvci0+bV9t
YXRjaCksIGF0dHIsIHNlbGVjdG9yLT52YWx1ZSgpLCBjYXNlU2Vuc2l0aXZlKSkgeworICAgICAg
ICBtYXRjaGVkID0gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwogdm9pZCBTZWxlY3RvckNoZWNrZXI6OmFsbFZpc2l0ZWRTdGF0ZUNo
YW5nZWQoKQogewogICAgIGlmIChtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZS5pc0VtcHR5
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKaW5kZXggZjE1Y2UwZDA4ZWU0MzI5
OGI0MTIwNDEyY2Y3NmQ5NWFhNWJmM2MwMS4uMzUwMDhhZjFhMDM3NDc3YzNiZTYwNDM2ZjFlZjgz
NmEwNzRlZmM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAtMTE2LDYg
KzExNiw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkZXRlcm1pbmVTZWxlY3RvclNjb3Bl
cyhjb25zdCBDU1NTZWxlY3Rvckxpc3QmLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRT
Y29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFzc1Njb3Blcyk7CiAgICAgc3Rh
dGljIGJvb2wgZWxlbWVudE1hdGNoZXNTZWxlY3RvclNjb3Blcyhjb25zdCBTdHlsZWRFbGVtZW50
KiwgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBjb25zdCBIYXNo
U2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpOwogCitwcm90ZWN0ZWQ6CisgICAg
Ym9vbCBjaGVja0F0dHJpYnV0ZVNlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIGJvb2wm
IG1hdGNoZWQpIGNvbnN0OworCiBwcml2YXRlOgogICAgIGJvb2wgY2hlY2tPbmVTZWxlY3Rvcihj
b25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIFBzZXVkb0lkJiwgYm9vbCYgaGFzVW5rbm93
blBzZXVkb0VsZW1lbnRzKSBjb25zdDsKICAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xh
c3MoQ1NTU2VsZWN0b3IqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbykgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NlbGVjdG9yUXVlcnkuaAppbmRleCA4NjVhNDMxZjg5ODFmN2Y3NmRmYzlkNjhmNDFjOGFj
OGNiYTBiYmEzLi42MjM5MzRmMjc4YTgxMjI3ZWYwOTk1NjdmYjIxMWE0Mjc0Y2JhNDI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAg
IFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IHF1ZXJ5QWxsKGNvbnN0IFNlbGVjdG9yQ2hlY2tlciYsIE5v
ZGUqIHJvb3ROb2RlKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEVsZW1lbnQ+IHF1ZXJ5Rmlyc3Qo
Y29uc3QgU2VsZWN0b3JDaGVja2VyJiwgTm9kZSogcm9vdE5vZGUpIGNvbnN0OwogCi1wcml2YXRl
OgorcHJvdGVjdGVkOgogICAgIHN0cnVjdCBTZWxlY3RvckRhdGEgewogICAgICAgICBTZWxlY3Rv
ckRhdGEoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29sIGlzRmFzdENoZWNrYWJsZSkgOiBzZWxl
Y3RvcihzZWxlY3RvciksIGlzRmFzdENoZWNrYWJsZShpc0Zhc3RDaGVja2FibGUpIHsgfQogICAg
ICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcAppbmRleCAwNzZhNzIzYzhhOTFhZmU5MzE4ODc2
NTg5NGNlNzczNmRjMzY2YTAwLi44NTkyZmE4MmY5MjJkMjc3YzRhMzg4NjYzMGQ2NzU2M2MwN2Ex
ZTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJp
YnV0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmli
dXRvci5jcHAKQEAgLTExOCw3ICsxMTgsOCBAQCB2b2lkIENvbnRlbnREaXN0cmlidXRvcjo6ZGlz
dHJpYnV0ZVNlbGVjdGlvbnNUbyhJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQsCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBOb2RlKiBjaGlsZCA9IHBvb2xbaV0uZ2V0KCk7
Ci0gICAgICAgIGlmICghcXVlcnkubWF0Y2hlcyhjaGlsZCkpCisgICAgICAgIFJlaWZpZWROb2Rl
IHJlaWZpZWROb2RlKGNoaWxkLT5wYXJlbnROb2RlKCksIHBvb2wsIGkpOworICAgICAgICBpZiAo
IXF1ZXJ5Lm1hdGNoZXMoJnJlaWZpZWROb2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgIGRpc3RyaWJ1dGlvbi5hcHBlbmQoY2hpbGQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwCmluZGV4IGYxMmM1OTkyNWY3
YzkzMjRmNmZlZmNiZWIyMjM1ODk1N2RmMjExZjMuLmVlNjFhZWFlZDQwYTQzMTI2OGMyNzU0NjA1
YTliOTIxZmI4N2Y3NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0Nv
bnRlbnRTZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9D
b250ZW50U2VsZWN0b3JRdWVyeS5jcHAKQEAgLTI5LDExICsyOSwyNjcgQEAKIAogI2luY2x1ZGUg
IkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgorI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1M
T3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKICNpbmNs
dWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitSZWlmaWVkTm9k
ZTo6UmVpZmllZE5vZGUoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2Rl
PiA+JiBjaGlsZHJlbiwgaW50IG50aENoaWxkKQorICAgIDogbV9wYXJlbnROb2RlKHBhcmVudE5v
ZGUpCisgICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQorICAgICwgbV9udGhDaGlsZChudGhDaGls
ZCkKK3sKKyAgICBBU1NFUlQocGFyZW50Tm9kZSk7Cit9CisKK2Jvb2wgUmVpZmllZEVsZW1lbnQ6
OmlzRmlyc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgZm9yIChpbnQgaSA9IG1fbnRoQ2hpbGQgLSAx
OyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAobV9jaGlsZHJlbltpXSAmJiBtX2NoaWxkcmVu
W2ldLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVpZmllZEVsZW1lbnQ6OmlzTGFzdENoaWxk
KCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV9udGhDaGlsZCArIDE7IGkgPCBtX2No
aWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldICYmIG1fY2hp
bGRyZW5baV0tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZWlmaWVkRWxlbWVudDo6aXNGaXJz
dE9mVHlwZShjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAoreworICAgIGZvciAoaW50
IGkgPSBtX250aENoaWxkIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRy
ZW5baV0gJiYgbV9jaGlsZHJlbltpXS0+aXNFbGVtZW50Tm9kZSgpICYmIG1fY2hpbGRyZW5baV0t
Pmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVpZmllZEVsZW1lbnQ6OmlzTGFzdE9mVHlwZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSBt
X250aENoaWxkICsgMTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fY2hpbGRyZW5baV0gJiYgbV9jaGlsZHJlbltpXS0+aXNFbGVtZW50Tm9kZSgpICYmIG1fY2hp
bGRyZW5baV0tPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBSZWlmaWVkRWxlbWVudDo6Y291bnRF
bGVtZW50c0JlZm9yZSgpIGNvbnN0Cit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKGlu
dCBpID0gbV9udGhDaGlsZCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChtX2NoaWxk
cmVuW2ldICYmIG1fY2hpbGRyZW5baV0tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICsr
Y291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitpbnQgUmVpZmllZEVsZW1l
bnQ6OmNvdW50RWxlbWVudHNBZnRlcigpIGNvbnN0Cit7CisgICAgaW50IGNvdW50ID0gMDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gbV9udGhDaGlsZCArIDE7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldICYmIG1fY2hpbGRyZW5baV0tPmlzRWxl
bWVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiArK2NvdW50OworICAgIH0KKworICAgIHJl
dHVybiBjb3VudDsKK30KKworaW50IFJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQmVmb3Jl
V2l0aChjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAoreworICAgIGludCBjb3VudCA9
IDA7CisgICAgZm9yIChpbnQgaSA9IG1fbnRoQ2hpbGQgLSAxOyBpID49IDA7IC0taSkgeworICAg
ICAgICBpZiAobV9jaGlsZHJlbltpXSAmJiBtX2NoaWxkcmVuW2ldLT5pc0VsZW1lbnROb2RlKCkg
JiYgbV9jaGlsZHJlbltpXS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgICsrY291bnQ7
CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitpbnQgUmVpZmllZEVsZW1lbnQ6OmNv
dW50RWxlbWVudHNBZnRlcldpdGgoY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkgY29uc3QKK3sK
KyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSBtX250aENoaWxkICsgMTsg
aSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW5baV0g
JiYgbV9jaGlsZHJlbltpXS0+aXNFbGVtZW50Tm9kZSgpICYmIG1fY2hpbGRyZW5baV0tPmhhc1Rh
Z05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gKytjb3VudDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gY291bnQ7Cit9CisKK0NvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxlY3Rv
ckNoZWNrZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHN0cmljdFBhcnNpbmcpCisgICAgOiBT
ZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQsIHN0cmljdFBhcnNpbmcpCit7Cit9CisKK2Jvb2wgQ29u
dGVudFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tDb250ZW50U2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yLCBSZWlmaWVkRWxlbWVudCogdmlydHVhbEVsZW1lbnQpIGNvbnN0Cit7CisgICAgRWxl
bWVudCogZWxlbWVudCA9IHZpcnR1YWxFbGVtZW50LT5lbGVtZW50KCk7CisKKyAgICBpZiAoIVNl
bGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvcikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
Q2xhc3MpCisgICAgICAgIHJldHVybiBlbGVtZW50LT5oYXNDbGFzcygpICYmIHN0YXRpY19jYXN0
PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNlbGVjdG9y
LT52YWx1ZSgpKTsKKworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6
SWQpCisgICAgICAgIHJldHVybiBlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlkRm9yU3R5
bGVSZXNvbHV0aW9uKCkgPT0gc2VsZWN0b3ItPnZhbHVlKCk7CisKKyAgICBpZiAoc2VsZWN0b3It
PmlzQXR0cmlidXRlU2VsZWN0b3IoKSkgeworICAgICAgICBib29sIG1hdGNoZWQ7CisgICAgICAg
IGlmIChjaGVja0F0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yLCBlbGVtZW50LCBtYXRjaGVkKSkK
KyAgICAgICAgICAgIHJldHVybiBtYXRjaGVkOworICAgIH0KKworICAgIGlmIChzZWxlY3Rvci0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpCisgICAgICAgIHJldHVybiBjaGVj
a09uZVBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IsIHZpcnR1YWxFbGVtZW50KTsKKworICAg
IHJldHVybiB0cnVlOworfQorCisKK2Jvb2wgQ29udGVudFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmVQc2V1ZG9DbGFzc1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvciwgUmVpZmllZEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1vZGUoKSA9PSBTZWxlY3RvckNoZWNr
ZXI6OkNvbGxlY3RpbmdSdWxlcyk7CisgICAgCisgICAgc3dpdGNoIChzZWxlY3Rvci0+cHNldWRv
VHlwZSgpKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RDaGlsZDoKKyAgICAg
ICAgaWYgKGVsZW1lbnQtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50
LT5pc0ZpcnN0Q2hpbGQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvRmlyc3RPZlR5cGU6CisgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnROb2RlKCkpCisg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNGaXJzdE9mVHlwZShlbGVtZW50LT5lbGVtZW50
KCktPnRhZ1FOYW1lKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9MYXN0Q2hpbGQ6CisgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnROb2RlKCkpCisgICAg
ICAgICAgICByZXR1cm4gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpLT5pc0ZpbmlzaGVkUGFyc2lu
Z0NoaWxkcmVuKCkgJiYgZWxlbWVudC0+aXNMYXN0Q2hpbGQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFzdE9mVHlwZToKKyAgICAgICAgaWYgKGVsZW1l
bnQtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCktPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiBlbGVtZW50LT5pc0xhc3RPZlR5
cGUoZWxlbWVudC0+ZWxlbWVudCgpLT50YWdRTmFtZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seU9mVHlwZToKKyAgICAgICAgaWYgKGVsZW1lbnQt
PnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5pc0ZpcnN0T2ZUeXBl
KGVsZW1lbnQtPmVsZW1lbnQoKS0+dGFnUU5hbWUoKSkKKyAgICAgICAgICAgICAgICAmJiBlbGVt
ZW50LT5wYXJlbnRFbGVtZW50KCktPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKQorICAgICAg
ICAgICAgICAgICYmIGVsZW1lbnQtPmlzTGFzdE9mVHlwZShlbGVtZW50LT5lbGVtZW50KCktPnRh
Z1FOYW1lKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9O
dGhDaGlsZDoKKyAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBpZiAoZWxlbWVudC0+cGFyZW50Tm9kZSgpKQorICAgICAgICAgICAg
cmV0dXJuIHNlbGVjdG9yLT5tYXRjaE50aChlbGVtZW50LT5jb3VudEVsZW1lbnRzQmVmb3JlKCkg
KyAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoT2ZU
eXBlOgorICAgICAgICBpZiAoIXNlbGVjdG9yLT5wYXJzZU50aCgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlbGVtZW50LT5lbGVtZW50KCktPnRhZ1FOYW1lKCk7
CisgICAgICAgICAgICByZXR1cm4gc2VsZWN0b3ItPm1hdGNoTnRoKGVsZW1lbnQtPmNvdW50RWxl
bWVudHNCZWZvcmVXaXRoKHR5cGUpICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoTGFzdENoaWxkOgorICAgICAgICBpZiAoIXNl
bGVjdG9yLT5wYXJzZU50aCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChlbGVt
ZW50LT5wYXJlbnROb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+cGFyZW50RWxl
bWVudCgpLT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYgc2VsZWN0b3ItPm1hdGNoTnRo
KGVsZW1lbnQtPmNvdW50RWxlbWVudHNBZnRlcigpICsgMSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aExhc3RPZlR5cGU6CisgICAgICAgIGlmICghc2Vs
ZWN0b3ItPnBhcnNlTnRoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGVsZW1l
bnQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlw
ZSA9IGVsZW1lbnQtPmVsZW1lbnQoKS0+dGFnUU5hbWUoKTsKKyAgICAgICAgICAgIHJldHVybiBl
bGVtZW50LT5wYXJlbnRFbGVtZW50KCktPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiBz
ZWxlY3Rvci0+bWF0Y2hOdGgoZWxlbWVudC0+Y291bnRFbGVtZW50c0FmdGVyV2l0aCh0eXBlKSAr
IDEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb1RhcmdldDoKKyAgICAgICAgaWYgKGVsZW1lbnQtPmVsZW1lbnQoKSA9PSBlbGVtZW50LT5k
b2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgorICAgICAgICAvLyA6
dmlzaXRlZCBhbmQgOmxpbmsgbWF0Y2hlcyBhcmUgc2VwYXJhdGVkIGxhdGVyIHdoZW4gYXBwbHlp
bmcgdGhlIHN0eWxlLiBIZXJlIGJvdGggY2xhc3NlcyBtYXRjaCBhbGwgbGlua3MuLi4KKyAgICAg
ICAgcmV0dXJuIGVsZW1lbnQtPmVsZW1lbnQoKS0+aXNMaW5rKCk7CisgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvVmlzaXRlZDoKKyAgICAgICAgLy8gLi4uZXhjZXB0IGlmIDp2aXNpdGVkIG1h
dGNoaW5nIGlzIGRpc2FibGVkIGZvciBhbmNlc3Rvci9zaWJsaW5nIG1hdGNoaW5nLgorCisgICAg
ICAgIC8vIEZJWE1FOiB2aXNpdGVkIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgorICAgICAgICByZXR1
cm4gZWxlbWVudC0+ZWxlbWVudCgpLT5pc0xpbmsoKTsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9FbmFibGVkOgorICAgICAgICBpZiAoZWxlbWVudCAmJiAoZWxlbWVudC0+ZWxlbWVudCgp
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9uVGFn
KSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGdyb3VwVGFnKSkpCisgICAgICAgICAgICByZXR1
cm4gZWxlbWVudC0+ZWxlbWVudCgpLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EaXNhYmxlZDoKKyAgICAgICAgaWYg
KGVsZW1lbnQgJiYgKGVsZW1lbnQtPmVsZW1lbnQoKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSB8
fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShv
cHRncm91cFRhZykpKQorICAgICAgICAgICAgcmV0dXJuICFlbGVtZW50LT5lbGVtZW50KCktPmlz
RW5hYmxlZEZvcm1Db250cm9sKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NoZWNrZWQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZWxlbWVudCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIFdpbklF
IGFsbG93cyBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlIHRvIGNvLWV4aXN0LCB0aGUgQ1NTIHNl
bGVjdG9yIHNwZWMgc2F5cyB0aGF0CisgICAgICAgICAgICAvLyB5b3UgY2FuJ3QgYmUgYm90aCBj
aGVja2VkIGFuZCBpbmRldGVybWluYXRlLiBXZSB3aWxsIGJlaGF2ZSBsaWtlIFdpbklFIGJlaGlu
ZCB0aGUgc2NlbmVzIGFuZCBqdXN0CisgICAgICAgICAgICAvLyBvYmV5IHRoZSBDU1Mgc3BlYyBo
ZXJlIGluIHRoZSB0ZXN0IGZvciBtYXRjaGluZyB0aGUgcHNldWRvLgorICAgICAgICAgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+ZWxlbWVudCgpLT50b0lucHV0
RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQt
PnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKG9wdGlvblRhZykgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVtZW50LT5l
bGVtZW50KCkpLT5zZWxlY3RlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9J
bmRldGVybWluYXRlOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisgICAgICAg
ICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsKKyAgICAgICAgICAg
ICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBwcm9ncmVzcyA9IHN0YXRpY19jYXN0PEhUTUxQcm9n
cmVzc0VsZW1lbnQqPihlbGVtZW50LT5lbGVtZW50KCkpOworICAgICAgICAgICAgICAgIGlmIChw
cm9ncmVzcyAmJiAhcHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisj
ZW5kaWYKKyAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1l
bnQtPmVsZW1lbnQoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChpbnB1dEVs
ZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKKworYm9vbCBDb250ZW50U2VsZWN0b3JEYXRhTGlzdDo6
bWF0Y2hlcyhjb25zdCBDb250ZW50U2VsZWN0b3JDaGVja2VyJiBzZWxlY3RvckNoZWNrZXIsIFJl
aWZpZWRFbGVtZW50KiB0YXJnZXRFbGVtZW50KSBjb25zdAoreworICAgIEFTU0VSVCh0YXJnZXRF
bGVtZW50KTsKKworICAgIHVuc2lnbmVkIHNlbGVjdG9yQ291bnQgPSBtX3NlbGVjdG9ycy5zaXpl
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlbGVjdG9yQ291bnQ7ICsraSkgewor
ICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2VyLmNoZWNrQ29udGVudFNlbGVjdG9yKG1fc2VsZWN0
b3JzW2ldLnNlbGVjdG9yLCB0YXJnZXRFbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogQ29udGVudFNlbGVjdG9yUXVlcnk6
OkNvbnRlbnRTZWxlY3RvclF1ZXJ5KGNvbnN0IEluc2VydGlvblBvaW50KiBpbnNlcnRpb25Qb2lu
dCkKICAgICA6IG1faW5zZXJ0aW9uUG9pbnQoaW5zZXJ0aW9uUG9pbnQpCiAgICAgLCBtX3NlbGVj
dG9yQ2hlY2tlcihpbnNlcnRpb25Qb2ludC0+ZG9jdW1lbnQoKSwgIWluc2VydGlvblBvaW50LT5k
b2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkKQEAgLTU4LDcgKzMxNCw3IEBAIGJvb2wgQ29udGVu
dFNlbGVjdG9yUXVlcnk6OmlzVmFsaWRTZWxlY3RvcigpIGNvbnN0CiAgICAgcmV0dXJuIG1faXNW
YWxpZFNlbGVjdG9yOwogfQogCi1ib29sIENvbnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVzKE5v
ZGUqIG5vZGUpIGNvbnN0Citib29sIENvbnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVzKFJlaWZp
ZWROb2RlKiBub2RlKSBjb25zdAogewogICAgIEFTU0VSVChub2RlKTsKICAgICBpZiAoIW5vZGUp
CkBAIC03NSw3ICszMzEsNyBAQCBib29sIENvbnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVzKE5v
ZGUqIG5vZGUpIGNvbnN0CiAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtX3NlbGVjdG9ycy5tYXRjaGVzKG1fc2VsZWN0
b3JDaGVja2VyLCB0b0VsZW1lbnQobm9kZSkpOworICAgIHJldHVybiBtX3NlbGVjdG9ycy5tYXRj
aGVzKG1fc2VsZWN0b3JDaGVja2VyLCB0b1JlaWZpZWRFbGVtZW50KG5vZGUpKTsKIH0KIAogc3Rh
dGljIGJvb2wgdmFsaWRhdGVTdWJTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsZWN0b3IpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaAppbmRl
eCA5NGZhM2VmY2NmM2Y5ZDcyZTk3NDc3NWUyZDJkMzE0MGQxM2NiMzRlLi5iMjAxMmJiZWQ2Nzg3
YjRmN2VkYzM1MzQzNmYxYTNjNWE3OTlmM2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmgKQEAgLTQzLDI1ICs0Myw3NiBAQCBjbGFz
cyBEb2N1bWVudDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBJbnNlcnRpb25Qb2ludDsKIAorY2xhc3Mg
UmVpZmllZE5vZGUgeworcHVibGljOgorICAgIFJlaWZpZWROb2RlKE5vZGUqIHBhcmVudCwgY29u
c3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBjaGlsZHJlbiwgaW50IG50aENoaWxkKTsKKworICAg
IERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG5vZGUoKS0+ZG9jdW1lbnQoKTsg
fQorICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuW21fbnRoQ2hpbGRd
LmdldCgpOyB9CisgICAgTm9kZSogcGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50
Tm9kZTsgfQorCisgICAgYm9vbCBpc0VsZW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbm9kZSgp
LT5pc0VsZW1lbnROb2RlKCk7IH0KKworcHJvdGVjdGVkOgorICAgIE5vZGUqIG1fcGFyZW50Tm9k
ZTsKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbV9jaGlsZHJlbjsKKyAgICBpbnQgbV9udGhD
aGlsZDsKK307CisKK2NsYXNzIFJlaWZpZWRFbGVtZW50IDogcHVibGljIFJlaWZpZWROb2RlIHsK
K3B1YmxpYzoKKyAgICBFbGVtZW50KiBwYXJlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gV2Vi
Q29yZTo6dG9FbGVtZW50KHBhcmVudE5vZGUoKSk7IH0KKyAgICBFbGVtZW50KiBlbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gV2ViQ29yZTo6dG9FbGVtZW50KG5vZGUoKSk7IH0KKworICAgIGJvb2wg
aGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7IHJldHVybiBub2Rl
KCktPmhhc1RhZ05hbWUobmFtZSk7IH0KKworICAgIGJvb2wgaXNGaXJzdENoaWxkKCkgY29uc3Q7
CisgICAgYm9vbCBpc0xhc3RDaGlsZCgpIGNvbnN0OworICAgIGJvb2wgaXNGaXJzdE9mVHlwZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdDsKKyAgICBib29sIGlzTGFzdE9mVHlwZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdDsKKyAgICBpbnQgY291bnRFbGVtZW50c0Jl
Zm9yZSgpIGNvbnN0OworICAgIGludCBjb3VudEVsZW1lbnRzQWZ0ZXIoKSBjb25zdDsKKyAgICBp
bnQgY291bnRFbGVtZW50c0JlZm9yZVdpdGgoY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkgY29u
c3Q7CisgICAgaW50IGNvdW50RWxlbWVudHNBZnRlcldpdGgoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dHlwZSkgY29uc3Q7Cit9OworCitjbGFzcyBDb250ZW50U2VsZWN0b3JDaGVja2VyIDogcHVibGlj
IFNlbGVjdG9yQ2hlY2tlciB7CitwdWJsaWM6CisgICAgQ29udGVudFNlbGVjdG9yQ2hlY2tlcihE
b2N1bWVudCosIGJvb2wgc3RyaWN0UGFyc2luZyk7CisKKyAgICBib29sIGNoZWNrQ29udGVudFNl
bGVjdG9yKENTU1NlbGVjdG9yKiwgUmVpZmllZEVsZW1lbnQqKSBjb25zdDsKK3ByaXZhdGU6Cisg
ICAgYm9vbCBjaGVja09uZVBzZXVkb0NsYXNzU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBSZWlmaWVk
RWxlbWVudCopIGNvbnN0OworfTsKKworY2xhc3MgQ29udGVudFNlbGVjdG9yRGF0YUxpc3QgOiBw
dWJsaWMgU2VsZWN0b3JEYXRhTGlzdCB7CitwdWJsaWM6CisgICAgYm9vbCBtYXRjaGVzKGNvbnN0
IENvbnRlbnRTZWxlY3RvckNoZWNrZXImLCBSZWlmaWVkRWxlbWVudCopIGNvbnN0OworfTsKKwog
Y2xhc3MgQ29udGVudFNlbGVjdG9yUXVlcnkgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENv
bnRlbnRTZWxlY3RvclF1ZXJ5KTsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb250ZW50U2VsZWN0
b3JRdWVyeShjb25zdCBJbnNlcnRpb25Qb2ludCopOwogCiAgICAgYm9vbCBpc1ZhbGlkU2VsZWN0
b3IoKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXMoTm9kZSopIGNvbnN0OworICAgIGJvb2wgbWF0
Y2hlcyhSZWlmaWVkTm9kZSopIGNvbnN0OwogcHJpdmF0ZToKICAgICBib29sIHZhbGlkYXRlU2Vs
ZWN0b3JMaXN0KCk7CiAKICAgICBjb25zdCBJbnNlcnRpb25Qb2ludCogbV9pbnNlcnRpb25Qb2lu
dDsKLSAgICBTZWxlY3RvckRhdGFMaXN0IG1fc2VsZWN0b3JzOworICAgIENvbnRlbnRTZWxlY3Rv
ckRhdGFMaXN0IG1fc2VsZWN0b3JzOwogICAgIENTU1NlbGVjdG9yTGlzdCBtX3NlbGVjdG9yTGlz
dDsKLSAgICBTZWxlY3RvckNoZWNrZXIgbV9zZWxlY3RvckNoZWNrZXI7CisgICAgQ29udGVudFNl
bGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKICAgICBib29sIG1faXNWYWxpZFNlbGVj
dG9yOwogfTsKIAoraW5saW5lIFJlaWZpZWRFbGVtZW50KiB0b1JlaWZpZWRFbGVtZW50KFJlaWZp
ZWROb2RlKiBub2RlKQoreworICAgIEFTU0VSVCghbm9kZSB8fCBub2RlLT5pc0VsZW1lbnROb2Rl
KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZWlmaWVkRWxlbWVudCo+KG5vZGUpOwogfQog
Ci0KK30KIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164868</attachid>
            <date>2012-09-20 02:32:07 -0700</date>
            <delta_ts>2012-09-20 05:48:16 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-96990-20120920183132.patch</filename>
            <type>text/plain</type>
            <size>29232</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MDgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTA4Zjg0N2U0YzI5ZTUx
Yjg2NzY1OTVlYzE4MGRiM2Q5MmFlNjQwOC4uMzZlZGU4NTAyMzViZDc5N2FjZGVmY2U1NjlkODgy
NmFhYzUzYmQ2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA5LTE5ICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIENvbnRl
bnRTZWxlY3RvclF1ZXJ5IHdvcmsgd2hlbiBhIG5vZGUgUE9PTCBpcyB1c2VkIGluc3RlYWQgb2Yg
bm9kZSdzIHJlYWwgY2hpbGRyZW4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05Njk5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdoZW4gd2UgaW1wbGVtZW50IGNvbnRlbnQgcmVwcm9qZWN0aW9uIGluIFNo
YWRvdyBET00sIHdlIGhhdmUgdG8gdXNlIGEgbm9kZSBwb29sIGFzIGNoaWxkcmVuCisgICAgICAg
IGluc3RlYWQgb2Ygbm9kZSdzIHJlYWwgY2hpbGRyZW4uCisKKyAgICAgICAgV2UgaW50cm9kdWNl
IFJlaWZpZWROb2RlIGFuZCBSZWlmaWVkRWxlbWVudCBoZXJlLCB3aGljaCB1c2UgYSBub2RlIHBv
b2wgYXMgdGhlaXIgY2hpbGRyZW4uCisgICAgICAgIEFsc28sIHdlIG1vZGlmeSBDb250ZW50U2Vs
ZWN0b3JRdWVyeSB0byB1c2UgUmVpZmllZE5vZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBl
eGlzdGluZyB0ZXN0cyBzaG91bGQgY292ZXIuCisKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVj
a2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrQXR0cmlidXRl
U2VsZWN0b3IpOiBFeHRyYWN0ZWQgdG8gc2hhcmUgdGhlIGNvZGUgd2l0aCBDb250ZW50U2VsZWN0
b3JDaGVja2VyLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hl
Y2tlci5oOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5Lmg6CisgICAgICAgIChTZWxlY3Rv
ckRhdGFMaXN0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2VsZWN0
aW9uc1RvKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWROb2RlOjpSZWlm
aWVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWlmaWVkRWxlbWVudDo6aXNGaXJzdENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWRFbGVtZW50Ojppc0xhc3RDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWlmaWVkRWxlbWVudDo6aXNGaXJzdE9mVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWlmaWVkRWxlbWVudDo6aXNMYXN0T2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVpZmllZEVsZW1lbnQ6OmNvdW50RWxlbWVudHNCZWZvcmVXaXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQWZ0ZXJXaXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tDb250ZW50U2Vs
ZWN0b3IpOiBUaGlzIGlzIHNvbWV0aGluZyBsaWtlIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVT
ZWxlY3RvcigpLAorICAgICAgICBidXQgdGhpcyB1c2VzIFJlaWZpZWROb2RlIGFuZCBSZWlmaWVk
RWxlbWVudC4gQWxzbywgQ29udGVudFNlbGVjdG9yIGRvZXMgbm90IGhhdmUgUHNldWRvRWxlbWVu
dCwgd2Ugb21pdCB0byBjaGVjaworICAgICAgICBQc2V1ZG9FbGVtZW50IGNvZGUgZnJvbSBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoKS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lUHNldWRvQ2xhc3NTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyk6CisgICAgICAgICogaHRtbC9z
aGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaDoKKyAgICAgICAgKFJlaWZpZWROb2RlKTogUmVp
ZmllZE5vZGUgaXMgc29tZXRoaW5nIGxpa2UgYSBub2RlLCBidXQgaXRzIHNpYmxpbmdzIGFyZSBm
cm9tIGEgbm9kZSBwb29sLgorICAgICAgICAoV2ViQ29yZTo6UmVpZmllZE5vZGU6OmRvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWROb2RlOjpub2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlaWZpZWROb2RlOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWRO
b2RlOjppc0VsZW1lbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUmVpZmll
ZEVsZW1lbnQpOiBSZWlmaWVkRWxlbWVudCBpcyBzb21ldGhpbmcgbGlrZSBhbiBlbGVtZW50LCBi
dXQgaXRzIHNpYmxpbmdzIGFyZSBmcm9tIGEgbm9kZSBwb29sLgorICAgICAgICAoV2ViQ29yZTo6
UmVpZmllZEVsZW1lbnQ6OnBhcmVudEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVpZmll
ZEVsZW1lbnQ6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVpZmllZEVsZW1lbnQ6Omhh
c1RhZ05hbWUpOgorICAgICAgICAoQ29udGVudFNlbGVjdG9yQ2hlY2tlcik6CisgICAgICAgIChD
b250ZW50U2VsZWN0b3JEYXRhTGlzdCk6CisgICAgICAgIChDb250ZW50U2VsZWN0b3JRdWVyeSk6
CisgICAgICAgIChXZWJDb3JlOjp0b1JlaWZpZWRFbGVtZW50KToKKwogMjAxMi0wOS0xOSAgSnVs
aWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBUaGUgY29s
bGFwc2luZyBib3JkZXIgY29kZSBuZWVkcyBkaXJlY3Rpb24tYXdhcmUgYm9yZGVyIGdldHRlcnMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5kZXggMTMzZTJhOGFhNGNlNmZl
MzBjYWIzYmQ3OTgzNDJmNzdkYzQ4ZmIzMy4uNTNhMTkxNjM4ZGM3Y2EyY2QxY2Y0OGM2NWZlNTg0
MGQxYmM4ZTAyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKQEAgLTMw
LDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU2Vs
ZWN0b3JMaXN0LmgiCisjaW5jbHVkZSAiQ29udGVudFNlbGVjdG9yUXVlcnkuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCkBAIC03MDAsNyArNzAxLDggQEAgc3RhdGljIGJvb2wgYW55QXR0cmlidXRlTWF0Y2hl
cyhFbGVtZW50KiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0Y2gsIGNvbnMKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9y
KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQc2V1ZG9JZCYgZHluYW1p
Y1BzZXVkbywgYm9vbCYgaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSBjb25zdAordGVtcGxhdGU8
dHlwZW5hbWUgU2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5PgorYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lU2VsZWN0b3JXaXRoU3RyYXRlZ3koY29uc3QgU2VsZWN0b3JDaGVja2luZ1N0cmF0
ZWd5JiBzdHJhdGVneSwgY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFBz
ZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNv
bnN0CiB7CiAgICAgRWxlbWVudCogY29uc3QgJiBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50Owog
ICAgIENTU1NlbGVjdG9yKiBjb25zdCAmIHNlbGVjdG9yID0gY29udGV4dC5zZWxlY3RvcjsKQEAg
LTcxNywxNCArNzE5LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3Io
Y29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFAKICAgICAgICAgcmV0dXJu
IGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKSA9PSBz
ZWxlY3Rvci0+dmFsdWUoKTsKIAogICAgIGlmIChzZWxlY3Rvci0+aXNBdHRyaWJ1dGVTZWxlY3Rv
cigpKSB7Ci0gICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHIgPSBzZWxlY3Rvci0+YXR0
cmlidXRlKCk7Ci0KLSAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNBdHRyaWJ1dGVzKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gIW1f
ZG9jdW1lbnRJc0hUTUwgfHwgIWh0bWxBdHRyaWJ1dGVIYXNDYXNlSW5zZW5zaXRpdmVWYWx1ZShh
dHRyKTsKLQotICAgICAgICBpZiAoIWFueUF0dHJpYnV0ZU1hdGNoZXMoZWxlbWVudCwgc3RhdGlj
X2Nhc3Q8Q1NTU2VsZWN0b3I6Ok1hdGNoPihzZWxlY3Rvci0+bV9tYXRjaCksIGF0dHIsIHNlbGVj
dG9yLT52YWx1ZSgpLCBjYXNlU2Vuc2l0aXZlKSkKKyAgICAgICAgaWYgKCFjaGVja0F0dHJpYnV0
ZVNlbGVjdG9yKHNlbGVjdG9yLCBlbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTc5MSw5ICs3ODYsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdENoaWxkOgogICAgICAgICAgICAgLy8g
Zmlyc3QtY2hpbGQgbWF0Y2hlcyB0aGUgZmlyc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50CiAg
ICAgICAgICAgICBpZiAoZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQtPnBy
ZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHN0cmF0ZWd5LmlzRmlyc3RDaGlsZCgp
OwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRT
dHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVt
ZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IGVsZW1lbnQtPnBhcmVudE5v
ZGUoKS0+cmVuZGVyU3R5bGUoKTsKQEAgLTgwOCwxNCArODAxLDcgQEAgYm9vbCBTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNv
bnRleHQsIFAKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RPZlR5cGU6CiAg
ICAgICAgICAgICAvLyBmaXJzdC1vZi10eXBlIG1hdGNoZXMgdGhlIGZpcnN0IGVsZW1lbnQgb2Yg
aXRzIHR5cGUKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdHlwZSA9IGVsZW1lbnQtPnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAg
ICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNFbGVtZW50
U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2li
bGluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5
cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gc3RyYXRlZ3kuaXNGaXJzdE9m
VHlwZSgpOwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsK
ICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5l
bGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IGVsZW1lbnQtPnBhcmVu
dE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0
eWxlKQpAQCAtODI3LDcgKzgxMyw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNl
bGVjdG9yKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQCiAgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RDaGlsZDoKICAgICAgICAgICAgIC8vIGxhc3Qt
Y2hpbGQgbWF0Y2hlcyB0aGUgbGFzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKICAgICAgICAg
ICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgp
KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBwYXJlbnRFbGVtZW50LT5pc0Zpbmlz
aGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYgIWVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOwor
ICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBh
cnNpbmdDaGlsZHJlbigpICYmIHN0cmF0ZWd5LmlzTGFzdENoaWxkKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5l
bGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRl
eHQuZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKQEAg
LTg0NywyMSArODMzLDE2IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9y
KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQCiAgICAgICAgICAgICAg
ICAgICAgIGlmIChwYXJlbnRTdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0
eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOwogICAg
ICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNG
aW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGVsZW1lbnQt
PnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5n
ID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJs
aW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2li
bGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0cmF0ZWd5LmlzTGFzdE9mVHlwZSgpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b09ubHlDaGlsZDoKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxl
bWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBmaXJzdENoaWxk
ID0gIWVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICBi
b29sIG9ubHlDaGlsZCA9IGZpcnN0Q2hpbGQgJiYgcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBh
cnNpbmdDaGlsZHJlbigpICYmICFlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKLQorICAg
ICAgICAgICAgICAgIGJvb2wgZmlyc3RDaGlsZCA9IHN0cmF0ZWd5LmlzRmlyc3RDaGlsZCgpOwor
ICAgICAgICAgICAgICAgIGJvb2wgb25seUNoaWxkID0gZmlyc3RDaGlsZCAmJiBzdHJhdGVneS5p
c0xhc3RDaGlsZCgpOwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5nU3R5
bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBjb250
ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVuZGVy
U3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
Y29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVu
dEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CkBAIC04ODksMzMgKzg3MCwxNCBAQCBib29sIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4
dCYgY29udGV4dCwgUAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXBh
cmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUm
IHR5cGUgPSBlbGVtZW50LT50YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
RWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2li
bGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1l
bnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxp
bmcoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBl
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0cmF0ZWd5LmlzRmlyc3RPZlR5cGUoKSAmJiBzdHJhdGVneS5pc0xhc3RPZlR5cGUoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9OdGhDaGlsZDoKICAgICAgICAgICAgIGlmICghc2VsZWN0b3ItPnBhcnNlTnRoKCkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50
RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGlu
dCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5n
ID0gZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0g
c2libGluZy0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IFJlbmRlclN0eWxlKiBzID0gc2libGluZy0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSBzID8gcy0+Y2hpbGRJbmRleCgpIDogMDsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAr
PSBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICAgICAgfQot
CisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSArIHN0cmF0ZWd5LmNvdW50RWxlbWVudHNC
ZWZvcmUoKTsKICAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IFJlc29sdmluZ1N0eWxlKSB7
CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5l
bGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxl
KCk7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRl
eHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVt
ZW50LT5yZW5kZXJTdHlsZSgpOwpAQCAtOTMzLDEyICs4OTUsNyBAQCBib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29u
dGV4dCwgUAogICAgICAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0g
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50ID0g
MTsKLSAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZWxlbWVudC0+
dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcg
PSBlbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBz
aWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAr
K2NvdW50OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAx
ICsgc3RyYXRlZ3kuY291bnRFbGVtZW50c09mVHlwZUJlZm9yZSgpOwogICAgICAgICAgICAgICAg
IGlmIChtX21vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVs
ZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKQEAgLTk2MCw5ICs5MTcsNyBAQCBib29sIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCYgY29udGV4dCwgUAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAo
IXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7Ci0g
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4
dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVu
dFNpYmxpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgKytjb3VudDsKKyAgICAgICAgICAgICAg
ICBpbnQgY291bnQgPSAxICsgc3RyYXRlZ3kuY291bnRFbGVtZW50c0FmdGVyKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3VudCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtOTc4LDEyICs5MzMsOCBAQCBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5n
Q29udGV4dCYgY29udGV4dCwgUAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBp
ZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7
Ci0gICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGVsZW1lbnQtPnRh
Z1FOYW1lKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0g
ZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5n
LT5uZXh0RWxlbWVudFNpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2libGlu
Zy0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7Ci0g
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSArIHN0cmF0
ZWd5LmNvdW50RWxlbWVudHNPZlR5cGVBZnRlcigpOwogICAgICAgICAgICAgICAgIGlmIChzZWxl
Y3Rvci0+bWF0Y2hOdGgoY291bnQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH0KQEAgLTEyNzcsNiArMTIyOCwyMSBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxlY3Rvciogc2VsLCBQc2V1ZG9JZCYp
IGNvbgogICAgIH0KIH0KIAorYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrQXR0cmlidXRlU2Vs
ZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAorewor
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHIgPSBzZWxlY3Rvci0+YXR0cmlidXRlKCk7CisK
KyAgICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gIW1fZG9jdW1lbnRJc0hUTUwgfHwgIWh0bWxB
dHRyaWJ1dGVIYXNDYXNlSW5zZW5zaXRpdmVWYWx1ZShhdHRyKTsKKworICAgIGlmICghYW55QXR0
cmlidXRlTWF0Y2hlcyhlbGVtZW50LCBzdGF0aWNfY2FzdDxDU1NTZWxlY3Rvcjo6TWF0Y2g+KHNl
bGVjdG9yLT5tX21hdGNoKSwgYXR0ciwgc2VsZWN0b3ItPnZhbHVlKCksIGNhc2VTZW5zaXRpdmUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBT
ZWxlY3RvckNoZWNrZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKQogewogICAgIGlmIChtX2xp
bmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZS5pc0VtcHR5KCkpCkBAIC0xMzk1LDQgKzEzNjEsNzcg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZVNlbGVjdG9yU2NvcGVzKGNvbnN0IENT
U1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAoraW5saW5l
IGJvb2wgRGVmYXVsdFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6aXNGaXJzdE9mVHlwZSgpIGNv
bnN0Cit7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IG1fZWxlbWVudC0+dGFnUU5h
bWUoKTsKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBtX2VsZW1lbnQtPnByZXZp
b3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW5saW5lIGJvb2wgRGVmYXVsdFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6aXNMYXN0
T2ZUeXBlKCkgY29uc3QKK3sKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gbV9lbGVt
ZW50LT50YWdRTmFtZSgpOworICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IG1fZWxl
bWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5u
ZXh0RWxlbWVudFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0
eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2lubGluZSBpbnQgRGVmYXVsdFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6Y291bnRF
bGVtZW50c0JlZm9yZSgpIGNvbnN0Cit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKGNv
bnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBtX2VsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmco
KTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkg
eworICAgICAgICBSZW5kZXJTdHlsZSogcyA9IHNpYmxpbmctPnJlbmRlclN0eWxlKCk7CisgICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gcyA/IHMtPmNoaWxkSW5kZXgoKSA6IDA7CisgICAgICAgIGlm
IChpbmRleCkgeworICAgICAgICAgICAgY291bnQgKz0gaW5kZXg7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjb3VudCsrOworICAgIH0KKworICAgIHJldHVybiBjb3Vu
dDsKK30KKworaW5saW5lIGludCBEZWZhdWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojpjb3Vu
dEVsZW1lbnRzT2ZUeXBlQmVmb3JlKCkgY29uc3QKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBtX2VsZW1lbnQtPnRhZ1FOYW1lKCk7CisgICAg
Zm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gbV9lbGVtZW50LT5wcmV2aW91c0VsZW1lbnRT
aWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJs
aW5nKCkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAg
ICAgICArK2NvdW50OworICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworaW5saW5lIGlu
dCBEZWZhdWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzQWZ0ZXIoKSBj
b25zdAoreworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJs
aW5nID0gbV9lbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9
IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygpKQorICAgICAgICArK2NvdW50OworCisgICAg
cmV0dXJuIGNvdW50OworfQorCitpbmxpbmUgaW50IERlZmF1bHRTZWxlY3RvckNoZWNraW5nU3Ry
YXRlZ3k6OmNvdW50RWxlbWVudHNPZlR5cGVBZnRlcigpIGNvbnN0Cit7CisgICAgaW50IGNvdW50
ID0gMDsKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gbV9lbGVtZW50LT50YWdRTmFt
ZSgpOworICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IG1fZWxlbWVudC0+bmV4dEVs
ZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNp
YmxpbmcoKSkgeworICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAg
ICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCit0ZW1wbGF0
ZQorYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3JXaXRoU3RyYXRlZ3k8Q29u
dGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneT4oY29uc3QgQ29udGVudFNlbGVjdG9yQ2hlY2tp
bmdTdHJhdGVneSYsIGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgUHNldWRvSWQmLCBi
b29sJikgY29uc3Q7CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCBm
MTVjZTBkMDhlZTQzMjk4YjQxMjA0MTJjZjc2ZDk1YWE1YmYzYzAxLi4xOWJmZjBhMWNhZTgyN2U5
Y2QyZWIwZjQ3ZjU1OTE3NTVhYjEyZjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5oCkBAIC04Miw2ICs4MiwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNGYXN0Q2hl
Y2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKICAgICBib29sIGZhc3RDaGVja1Nl
bGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwogCisgICAg
Ym9vbCBjaGVja09uZVNlbGVjdG9yKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgUHNl
dWRvSWQmLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0OworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneT4KKyAgICBib29sIGNoZWNrT25l
U2VsZWN0b3JXaXRoU3RyYXRlZ3koY29uc3QgU2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5JiwgY29u
c3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYsIGJvb2wmIGhhc1Vua25vd25Q
c2V1ZG9FbGVtZW50cykgY29uc3Q7CisKICAgICB0ZW1wbGF0ZSA8dW5zaWduZWQgbWF4aW11bUlk
ZW50aWZpZXJDb3VudD4KICAgICBpbmxpbmUgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3Qg
dW5zaWduZWQqIGlkZW50aWZpZXJIYXNoZXMpIGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIGNvbGxl
Y3RJZGVudGlmaWVySGFzaGVzKGNvbnN0IENTU1NlbGVjdG9yKiwgdW5zaWduZWQqIGlkZW50aWZp
ZXJIYXNoZXMsIHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQpOwpAQCAtMTE3LDkgKzEy
MSw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBlbGVtZW50TWF0Y2hlc1NlbGVjdG9yU2Nv
cGVzKGNvbnN0IFN0eWxlZEVsZW1lbnQqLCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwq
PiYgaWRTY29wZXMsIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFzc1Njb3Bl
cyk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjaGVja09uZVNlbGVjdG9yKGNvbnN0IFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0JiwgUHNldWRvSWQmLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVu
dHMpIGNvbnN0OwogICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxlY3Rv
ciosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKSBjb25zdDsKICAgICBzdGF0aWMgYm9vbCBpc0Zy
YW1lRm9jdXNlZChjb25zdCBFbGVtZW50Kik7CisgICAgYm9vbCBjaGVja0F0dHJpYnV0ZVNlbGVj
dG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAgYm9vbCBmYXN0Q2hlY2tS
aWdodG1vc3RTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqLCBWaXNp
dGVkTWF0Y2hUeXBlKSBjb25zdDsKICAgICBib29sIGNvbW1vblBzZXVkb0NsYXNzU2VsZWN0b3JN
YXRjaGVzKGNvbnN0IEVsZW1lbnQqLCBjb25zdCBDU1NTZWxlY3RvciosIFZpc2l0ZWRNYXRjaFR5
cGUpIGNvbnN0OwpAQCAtMTQ4LDYgKzE1MiwyNCBAQCBwcml2YXRlOgogICAgIE93blB0cjxCbG9v
bUZpbHRlcjxibG9vbUZpbHRlcktleUJpdHM+ID4gbV9hbmNlc3RvcklkZW50aWZpZXJGaWx0ZXI7
CiB9OwogCitjbGFzcyBEZWZhdWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5IHsKK3B1YmxpYzoK
KyAgICBEZWZhdWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5KEVsZW1lbnQqIGVsZW1lbnQpIDog
bV9lbGVtZW50KGVsZW1lbnQpIHsgfQorCisgICAgYm9vbCBpc0ZpcnN0Q2hpbGQoKSBjb25zdCB7
IHJldHVybiAhbV9lbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IH0KKyAgICBib29s
IGlzTGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gIW1fZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJs
aW5nKCk7IH0KKyAgICBib29sIGlzRmlyc3RPZlR5cGUoKSBjb25zdDsKKyAgICBib29sIGlzTGFz
dE9mVHlwZSgpIGNvbnN0OworCisgICAgaW50IGNvdW50RWxlbWVudHNCZWZvcmUoKSBjb25zdDsK
KyAgICBpbnQgY291bnRFbGVtZW50c0FmdGVyKCkgY29uc3Q7CisgICAgaW50IGNvdW50RWxlbWVu
dHNPZlR5cGVCZWZvcmUoKSBjb25zdDsKKyAgICBpbnQgY291bnRFbGVtZW50c09mVHlwZUFmdGVy
KCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKK307CisK
IGlubGluZSBFSW5zaWRlTGluayBTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZShF
bGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+
aXNMaW5rKCkpCkBAIC0xNjYsNiArMTg4LDExIEBAIGlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6ZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IHVuc2lnbmVkKiBpZGVudGlmaWVySGFzaGVzCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCitpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNr
T25lU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFBzZXVk
b0lkJiBkeW5hbWljUHNldWRvLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNoZWNrT25lU2VsZWN0b3JXaXRoU3RyYXRlZ3k8RGVmYXVsdFNlbGVj
dG9yQ2hlY2tpbmdTdHJhdGVneT4oRGVmYXVsdFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneShjb250
ZXh0LmVsZW1lbnQpLCBjb250ZXh0LCBkeW5hbWljUHNldWRvLCBoYXNVbmtub3duUHNldWRvRWxl
bWVudHMpOworfQorCiBpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmlzQ29tbW9uUHNldWRv
Q2xhc3NTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCiB7CiAgICAgaWYgKHNl
bGVjdG9yLT5tX21hdGNoICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCmluZGV4IDA3NmE3
MjNjOGE5MWFmZTkzMTg4NzY1ODk0Y2U3NzM2ZGMzNjZhMDAuLmZmZGFiYWEyYzQ1YWEzOTVjYzdm
NmUyOGIxYmIwOTc4NzU4N2Q2MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcApAQCAtMTE4LDcgKzExOCw4IEBAIHZvaWQgQ29udGVu
dERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2VsZWN0aW9uc1RvKEluc2VydGlvblBvaW50KiBpbnNl
cnRpb25Qb2ludCwKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIE5vZGUqIGNoaWxk
ID0gcG9vbFtpXS5nZXQoKTsKLSAgICAgICAgaWYgKCFxdWVyeS5tYXRjaGVzKGNoaWxkKSkKKyAg
ICAgICAgUmVpZmllZEVsZW1lbnQgcmVpZmllZChjaGlsZC0+cGFyZW50Tm9kZSgpLCBwb29sLCBp
KTsKKyAgICAgICAgaWYgKCFxdWVyeS5tYXRjaGVzKCZyZWlmaWVkKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIGRpc3RyaWJ1dGlvbi5hcHBlbmQoY2hpbGQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwCmluZGV4
IGYxMmM1OTkyNWY3YzkzMjRmNmZlZmNiZWIyMjM1ODk1N2RmMjExZjMuLjViZDA1ZTYyOWZiZTg1
ZDVkYzMyMjhkODA4YWY0ZDhiNjFmNjg2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHAKQEAgLTI5LDE3ICsyOSwxNTQgQEAK
IAogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgor
I2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1l
bnQuaCIKICNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3Qu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwor
CitSZWlmaWVkRWxlbWVudDo6UmVpZmllZEVsZW1lbnQoTm9kZSogcGFyZW50Tm9kZSwgY29uc3Qg
VmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBjaGlsZHJlbiwgaW50IG50aENoaWxkKQorICAgIDogbV9w
YXJlbnROb2RlKHBhcmVudE5vZGUpCisgICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQorICAgICwg
bV9udGhDaGlsZChudGhDaGlsZCkKK3sKKyAgICBBU1NFUlQocGFyZW50Tm9kZSk7Cit9CisKK2Jv
b2wgUmVpZmllZEVsZW1lbnQ6OmlzRmlyc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgZm9yIChpbnQg
aSA9IG1fbnRoQ2hpbGQgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAobV9jaGlsZHJl
bltpXSAmJiBtX2NoaWxkcmVuW2ldLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVpZmllZEVs
ZW1lbnQ6OmlzTGFzdENoaWxkKCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV9udGhD
aGlsZCArIDE7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2No
aWxkcmVuW2ldICYmIG1fY2hpbGRyZW5baV0tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZWlm
aWVkRWxlbWVudDo6aXNGaXJzdE9mVHlwZSgpIGNvbnN0Cit7CisgICAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgdHlwZSA9IGVsZW1lbnQoKS0+dGFnUU5hbWUoKTsKKyAgICBmb3IgKGludCBpID0gbV9u
dGhDaGlsZCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldICYm
IG1fY2hpbGRyZW5baV0tPmlzRWxlbWVudE5vZGUoKSAmJiBtX2NoaWxkcmVuW2ldLT5oYXNUYWdO
YW1lKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFJlaWZpZWRFbGVtZW50Ojppc0xhc3RPZlR5cGUoKSBjb25zdAor
eworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlbGVtZW50KCktPnRhZ1FOYW1lKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IG1fbnRoQ2hpbGQgKyAxOyBpIDwgbV9jaGlsZHJlbi5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobV9jaGlsZHJlbltpXSAmJiBtX2NoaWxkcmVuW2ldLT5p
c0VsZW1lbnROb2RlKCkgJiYgbV9jaGlsZHJlbltpXS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW50
IFJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQmVmb3JlKCkgY29uc3QKK3sKKyAgICBpbnQg
Y291bnQgPSAwOworICAgIGZvciAoaW50IGkgPSBtX250aENoaWxkIC0gMTsgaSA+PSAwOyAtLWkp
IHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW5baV0gJiYgbV9jaGlsZHJlbltpXS0+aXNFbGVtZW50
Tm9kZSgpKQorICAgICAgICAgICAgKytjb3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7
Cit9CisKK2ludCBSZWlmaWVkRWxlbWVudDo6Y291bnRFbGVtZW50c0FmdGVyKCkgY29uc3QKK3sK
KyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSBtX250aENoaWxkICsgMTsg
aSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW5baV0g
JiYgbV9jaGlsZHJlbltpXS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuICsr
Y291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitpbnQgUmVpZmllZEVsZW1l
bnQ6OmNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUoKSBjb25zdAoreworICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHR5cGUgPSBlbGVtZW50KCktPnRhZ1FOYW1lKCk7CisKKyAgICBpbnQgY291bnQg
PSAwOworICAgIGZvciAoaW50IGkgPSBtX250aENoaWxkIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAg
ICAgICAgaWYgKG1fY2hpbGRyZW5baV0gJiYgbV9jaGlsZHJlbltpXS0+aXNFbGVtZW50Tm9kZSgp
ICYmIG1fY2hpbGRyZW5baV0tPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICArK2NvdW50
OworICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworaW50IFJlaWZpZWRFbGVtZW50Ojpj
b3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoKSBjb25zdAoreworICAgIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHR5cGUgPSBlbGVtZW50KCktPnRhZ1FOYW1lKCk7CisKKyAgICBpbnQgY291bnQgPSAwOwor
ICAgIGZvciAoc2l6ZV90IGkgPSBtX250aENoaWxkICsgMTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW5baV0gJiYgbV9jaGlsZHJlbltpXS0+aXNF
bGVtZW50Tm9kZSgpICYmIG1fY2hpbGRyZW5baV0tPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAg
ICAgICByZXR1cm4gKytjb3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK0Nv
bnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQqIGRv
Y3VtZW50LCBib29sIHN0cmljdFBhcnNpbmcpCisgICAgOiBtX3NlbGVjdG9yQ2hlY2tlcihkb2N1
bWVudCwgc3RyaWN0UGFyc2luZykKK3sKKyAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2RlKFNl
bGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKTsKK30KKworYm9vbCBDb250ZW50U2VsZWN0
b3JDaGVja2VyOjpjaGVja0NvbnRlbnRTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsZWN0b3IsIFJl
aWZpZWRFbGVtZW50KiByZWlmaWVkRWxlbWVudCkgY29uc3QKK3sKKyAgICBQc2V1ZG9JZCBkeW5h
bWljUHNldWRvID0gTk9QU0VVRE87CisgICAgYm9vbCBoYXNVbmtub3duUHNldWRvRWxlbWVudHMg
PSBmYWxzZTsKKyAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IGNv
bnRleHQoc2VsZWN0b3IsIHJlaWZpZWRFbGVtZW50LT5lbGVtZW50KCksIFNlbGVjdG9yQ2hlY2tl
cjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpOworICAgIENvbnRlbnRTZWxlY3RvckNoZWNraW5nU3Ry
YXRlZ3kgc3RyYXRlZ3kocmVpZmllZEVsZW1lbnQpOworICAgIAorICAgIHJldHVybiBtX3NlbGVj
dG9yQ2hlY2tlci5jaGVja09uZVNlbGVjdG9yV2l0aFN0cmF0ZWd5KHN0cmF0ZWd5LCBjb250ZXh0
LCBkeW5hbWljUHNldWRvLCBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpOworfQorCit2b2lkIENv
bnRlbnRTZWxlY3RvckRhdGFMaXN0Ojppbml0aWFsaXplKGNvbnN0IENTU1NlbGVjdG9yTGlzdCYg
c2VsZWN0b3JzKQoreworICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3Jz
LmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxl
Y3RvcikpCisgICAgICAgIG1fc2VsZWN0b3JzLmFwcGVuZChzZWxlY3Rvcik7Cit9CisKK2Jvb2wg
Q29udGVudFNlbGVjdG9yRGF0YUxpc3Q6Om1hdGNoZXMoY29uc3QgQ29udGVudFNlbGVjdG9yQ2hl
Y2tlciYgc2VsZWN0b3JDaGVja2VyLCBSZWlmaWVkRWxlbWVudCogdGFyZ2V0RWxlbWVudCkgY29u
c3QKK3sKKyAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7CisKKyAgICB1bnNpZ25lZCBzZWxlY3Rv
ckNvdW50ID0gbV9zZWxlY3RvcnMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzZWxlY3RvckNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5jaGVj
a0NvbnRlbnRTZWxlY3RvcihtX3NlbGVjdG9yc1tpXSwgdGFyZ2V0RWxlbWVudCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIENvbnRl
bnRTZWxlY3RvclF1ZXJ5OjpDb250ZW50U2VsZWN0b3JRdWVyeShjb25zdCBJbnNlcnRpb25Qb2lu
dCogaW5zZXJ0aW9uUG9pbnQpCiAgICAgOiBtX2luc2VydGlvblBvaW50KGluc2VydGlvblBvaW50
KQogICAgICwgbV9zZWxlY3RvckNoZWNrZXIoaW5zZXJ0aW9uUG9pbnQtPmRvY3VtZW50KCksICFp
bnNlcnRpb25Qb2ludC0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpCiB7Ci0gICAgbV9zZWxl
Y3RvckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7Ci0K
ICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPnNlbGVjdCgpLmlzTnVsbCgpIHx8IGluc2VydGlvblBv
aW50LT5zZWxlY3QoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9pc1ZhbGlkU2VsZWN0b3IgPSB0
cnVlOwogICAgICAgICByZXR1cm47CkBAIC01OCwxMyArMTk1LDEzIEBAIGJvb2wgQ29udGVudFNl
bGVjdG9yUXVlcnk6OmlzVmFsaWRTZWxlY3RvcigpIGNvbnN0CiAgICAgcmV0dXJuIG1faXNWYWxp
ZFNlbGVjdG9yOwogfQogCi1ib29sIENvbnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVzKE5vZGUq
IG5vZGUpIGNvbnN0Citib29sIENvbnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVzKFJlaWZpZWRF
bGVtZW50KiByZWlmaWVkKSBjb25zdAogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBpZiAoIW5v
ZGUpCisgICAgQVNTRVJUKHJlaWZpZWQpOworICAgIGlmICghcmVpZmllZCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKG5vZGUtPnBhcmVudE5vZGUoKSA9PSBtX2luc2VydGlv
blBvaW50LT5zaGFkb3dSb290KCktPmhvc3QoKSk7CisgICAgQVNTRVJUKHJlaWZpZWQtPnBhcmVu
dE5vZGUoKSA9PSBtX2luc2VydGlvblBvaW50LT5zaGFkb3dSb290KCktPmhvc3QoKSk7CiAKICAg
ICBpZiAobV9pbnNlcnRpb25Qb2ludC0+c2VsZWN0KCkuaXNOdWxsKCkgfHwgbV9pbnNlcnRpb25Q
b2ludC0+c2VsZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTcyLDEw
ICsyMDksMTAgQEAgYm9vbCBDb250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyhOb2RlKiBub2Rl
KSBjb25zdAogICAgIGlmICghbV9pc1ZhbGlkU2VsZWN0b3IpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgIGlmICghcmVpZmllZC0+
aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9z
ZWxlY3RvcnMubWF0Y2hlcyhtX3NlbGVjdG9yQ2hlY2tlciwgdG9FbGVtZW50KG5vZGUpKTsKKyAg
ICByZXR1cm4gbV9zZWxlY3RvcnMubWF0Y2hlcyhtX3NlbGVjdG9yQ2hlY2tlciwgcmVpZmllZCk7
CiB9CiAKIHN0YXRpYyBib29sIHZhbGlkYXRlU3ViU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVj
dG9yUXVlcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1
ZXJ5LmgKaW5kZXggOTRmYTNlZmNjZjNmOWQ3MmU5NzQ3NzVlMmQyZDMxNDBkMTNjYjM0ZS4uZTUz
YjI0NmI4YzYzMGE4MjM1OTJhM2VlMGZmOTcxMjZiYTdjZWJiZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oCkBAIC00MywyNSArNDMs
ODQgQEAgY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgSW5zZXJ0aW9uUG9pbnQ7
CiAKK2NsYXNzIFJlaWZpZWRFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBSZWlmaWVkRWxlbWVudChO
b2RlKiBwYXJlbnQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgY2hpbGRyZW4sIGludCBu
dGhDaGlsZCk7CisKKyAgICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbltt
X250aENoaWxkXS5nZXQoKTsgfQorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBXZWJDb3JlOjp0b0VsZW1lbnQobm9kZSgpKTsgfQorCisgICAgTm9kZSogcGFyZW50Tm9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50Tm9kZTsgfQorCisgICAgYm9vbCBpc0VsZW1lbnROb2Rl
KCkgY29uc3QgeyByZXR1cm4gbm9kZSgpLT5pc0VsZW1lbnROb2RlKCk7IH0KKworICAgIGJvb2wg
aXNGaXJzdENoaWxkKCkgY29uc3Q7CisgICAgYm9vbCBpc0xhc3RDaGlsZCgpIGNvbnN0OworICAg
IGJvb2wgaXNGaXJzdE9mVHlwZSgpIGNvbnN0OworICAgIGJvb2wgaXNMYXN0T2ZUeXBlKCkgY29u
c3Q7CisgICAgaW50IGNvdW50RWxlbWVudHNCZWZvcmUoKSBjb25zdDsKKyAgICBpbnQgY291bnRF
bGVtZW50c0FmdGVyKCkgY29uc3Q7CisgICAgaW50IGNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUo
KSBjb25zdDsKKyAgICBpbnQgY291bnRFbGVtZW50c09mVHlwZUFmdGVyKCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgTm9kZSogbV9wYXJlbnROb2RlOworICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4g
PiBtX2NoaWxkcmVuOworICAgIGludCBtX250aENoaWxkOworfTsKKworY2xhc3MgQ29udGVudFNl
bGVjdG9yQ2hlY2tlciB7CitwdWJsaWM6CisgICAgQ29udGVudFNlbGVjdG9yQ2hlY2tlcihEb2N1
bWVudCosIGJvb2wgc3RyaWN0UGFyc2luZyk7CisKKyAgICBib29sIGNoZWNrQ29udGVudFNlbGVj
dG9yKENTU1NlbGVjdG9yKiwgUmVpZmllZEVsZW1lbnQqKSBjb25zdDsKK3ByaXZhdGU6CisgICAg
U2VsZWN0b3JDaGVja2VyIG1fc2VsZWN0b3JDaGVja2VyOworfTsKKworY2xhc3MgQ29udGVudFNl
bGVjdG9yRGF0YUxpc3QgeworcHVibGljOgorICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBDU1NT
ZWxlY3Rvckxpc3QmKTsKKyAgICBib29sIG1hdGNoZXMoY29uc3QgQ29udGVudFNlbGVjdG9yQ2hl
Y2tlciYsIFJlaWZpZWRFbGVtZW50KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPENT
U1NlbGVjdG9yKj4gbV9zZWxlY3RvcnM7Cit9OworCitjbGFzcyBDb250ZW50U2VsZWN0b3JDaGVj
a2luZ1N0cmF0ZWd5IHsKK3B1YmxpYzoKKyAgICBDb250ZW50U2VsZWN0b3JDaGVja2luZ1N0cmF0
ZWd5KFJlaWZpZWRFbGVtZW50KiByZWlmaWVkRWxlbWVudCkgOiBtX3JlaWZpZWRFbGVtZW50KHJl
aWZpZWRFbGVtZW50KSB7IH0KKworICAgIGJvb2wgaXNGaXJzdENoaWxkKCkgY29uc3QgeyByZXR1
cm4gbV9yZWlmaWVkRWxlbWVudC0+aXNGaXJzdENoaWxkKCk7IH0KKyAgICBib29sIGlzRmlyc3RP
ZlR5cGUoKSBjb25zdCB7IHJldHVybiBtX3JlaWZpZWRFbGVtZW50LT5pc0ZpcnN0T2ZUeXBlKCk7
IH0KKyAgICBib29sIGlzTGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9yZWlmaWVkRWxlbWVu
dC0+aXNMYXN0Q2hpbGQoKTsgfQorICAgIGJvb2wgaXNMYXN0T2ZUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV9yZWlmaWVkRWxlbWVudC0+aXNMYXN0T2ZUeXBlKCk7IH0KKworICAgIGludCBjb3VudEVs
ZW1lbnRzQmVmb3JlKCkgY29uc3QgeyByZXR1cm4gbV9yZWlmaWVkRWxlbWVudC0+Y291bnRFbGVt
ZW50c0JlZm9yZSgpOyB9CisgICAgaW50IGNvdW50RWxlbWVudHNBZnRlcigpIGNvbnN0IHsgcmV0
dXJuIG1fcmVpZmllZEVsZW1lbnQtPmNvdW50RWxlbWVudHNBZnRlcigpOyB9CisgICAgaW50IGNv
dW50RWxlbWVudHNPZlR5cGVCZWZvcmUoKSBjb25zdCB7IHJldHVybiBtX3JlaWZpZWRFbGVtZW50
LT5jb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKCk7IH0KKyAgICBpbnQgY291bnRFbGVtZW50c09m
VHlwZUFmdGVyKCkgY29uc3QgeyByZXR1cm4gbV9yZWlmaWVkRWxlbWVudC0+Y291bnRFbGVtZW50
c09mVHlwZUFmdGVyKCk7IH0KK3ByaXZhdGU6CisgICAgUmVpZmllZEVsZW1lbnQqIG1fcmVpZmll
ZEVsZW1lbnQ7Cit9OworCiBjbGFzcyBDb250ZW50U2VsZWN0b3JRdWVyeSB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQ29udGVudFNlbGVjdG9yUXVlcnkpOwogcHVibGljOgogICAgIGV4cGxp
Y2l0IENvbnRlbnRTZWxlY3RvclF1ZXJ5KGNvbnN0IEluc2VydGlvblBvaW50Kik7CiAKICAgICBi
b29sIGlzVmFsaWRTZWxlY3RvcigpIGNvbnN0OwotICAgIGJvb2wgbWF0Y2hlcyhOb2RlKikgY29u
c3Q7CisgICAgYm9vbCBtYXRjaGVzKFJlaWZpZWRFbGVtZW50KikgY29uc3Q7CiBwcml2YXRlOgog
ICAgIGJvb2wgdmFsaWRhdGVTZWxlY3Rvckxpc3QoKTsKIAogICAgIGNvbnN0IEluc2VydGlvblBv
aW50KiBtX2luc2VydGlvblBvaW50OwotICAgIFNlbGVjdG9yRGF0YUxpc3QgbV9zZWxlY3RvcnM7
CisgICAgQ29udGVudFNlbGVjdG9yRGF0YUxpc3QgbV9zZWxlY3RvcnM7CiAgICAgQ1NTU2VsZWN0
b3JMaXN0IG1fc2VsZWN0b3JMaXN0OwotICAgIFNlbGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hl
Y2tlcjsKKyAgICBDb250ZW50U2VsZWN0b3JDaGVja2VyIG1fc2VsZWN0b3JDaGVja2VyOwogICAg
IGJvb2wgbV9pc1ZhbGlkU2VsZWN0b3I7CiB9OwogCiB9CiAKLQotCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164899</attachid>
            <date>2012-09-20 05:48:20 -0700</date>
            <delta_ts>2012-09-21 00:02:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96990-20120920214745.patch</filename>
            <type>text/plain</type>
            <size>27012</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MDgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTA4Zjg0N2U0YzI5ZTUx
Yjg2NzY1OTVlYzE4MGRiM2Q5MmFlNjQwOC4uMTViZTk5ZGQ4MGQ3MWIyZmI3ZDhmNThlNDdhYWVl
YjE0MGU0MWQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTA5LTIwICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIENvbnRl
bnRTZWxlY3RvclF1ZXJ5IHdvcmsgd2hlbiBhIG5vZGUgUE9PTCBpcyB1c2VkIGluc3RlYWQgb2Yg
bm9kZSdzIHJlYWwgc2libGluZ3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05Njk5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdoZW4gd2UgaW1wbGVtZW50IGNvbnRlbnQgcmVwcm9qZWN0aW9uIGluIFNo
YWRvdyBET00sIHdlIGhhdmUgdG8gdXNlIGEgbm9kZSBwb29sIGFzIHNpYmxpbmdzCisgICAgICAg
IGluc3RlYWQgb2Ygbm9kZSdzIHJlYWwgc2libGluZ3MuIFNlbGVjdG9yQ2hlY2tlciBzaG91bGQg
YmUgYWJsZSB0byBoYW5kbGUgaXQgYXMgd2VsbC4KKworICAgICAgICBXZSBpbnRyb2R1Y2UgU2Vs
ZWN0b3JDaGVja2luZ1N0cmF0ZWd5IGFzIGEgdGVtcGxhdGUgYXJndW1lbnQgb2YgY2hlY2tPbmVT
ZWxlY3RvciB0byBoYW5kbGUgdGhpcy4KKyAgICAgICAgVGhlIERlZmF1bHRTZWxlY3RvckNoZWNr
aW5nU3RyYXRlZ3kgaXMgdGhlIHNhbWUgYXMgZXhpc3RpbmcgYWxnb3JpdGhtLiBDb250ZW50U2Vs
ZWN0b3JDaGVja2luZ1N0cmF0ZWd5CisgICAgICAgIGlzIGEgbmV3IGFsZ29yaXRobSB0byByZW5k
ZXIgbm9kZSBwb29sIGFzIHNpYmxpbmdzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXhpc3Rp
bmcgdGVzdHMgc2hvdWxkIGNvdmVyLgorCisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmVTZWxlY3RvcldpdGhTdHJhdGVneSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZh
dWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojppc0ZpcnN0T2ZUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmlzTGFzdE9mVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWZhdWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojpjb3VudEVs
ZW1lbnRzQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5n
U3RyYXRlZ3k6OmNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RGVmYXVsdFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6Y291bnRFbGVtZW50c0FmdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50RWxl
bWVudHNPZlR5cGVBZnRlcik6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAg
ICAgICAoU2VsZWN0b3JDaGVja2VyKToKKyAgICAgICAgKERlZmF1bHRTZWxlY3RvckNoZWNraW5n
U3RyYXRlZ3kpOiBJbXBsZW1lbnRzIHRoZSBzYW1lIGFsZ29yaXRobSB3aGljaCB3YXMgd3JpdHRl
biBpbiBpbmxpbmUgYmVmb3JlLgorICAgICAgICBFeHRyYWN0cyBzZXZlcmFsIG1ldGhvZHMgdG8g
Y2hlY2sgYW4gZWxlbWVudCBpcyB0aGUgZmlyc3QgY2hpbGQsIGV0Yy4KKyAgICAgICAgKFdlYkNv
cmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OkRlZmF1bHRTZWxlY3RvckNoZWNr
aW5nU3RyYXRlZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNlbGVjdG9yQ2hlY2tpbmdT
dHJhdGVneTo6aXNGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTZWxlY3Rv
ckNoZWNraW5nU3RyYXRlZ3k6OmlzTGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2VsZWN0aW9uc1RvKToKKyAgICAgICAg
KiBodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxl
Y3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tDb250ZW50U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9y
RGF0YUxpc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9y
RGF0YUxpc3Q6Om1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hl
Y2tpbmdTdHJhdGVneTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneSk6IFVzZXMgYSBu
b2RlIHBvb2wgYXMKKyAgICAgICAgZWxlbWVudCdzIHNpYmxpbmdzLgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6aXNGaXJzdENoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmlzTGFzdENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6Omlz
Rmlyc3RPZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdT
dHJhdGVneTo6aXNMYXN0T2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3Rv
ckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNCZWZvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6Y291bnRFbGVtZW50c0FmdGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50
RWxlbWVudHNPZlR5cGVCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9y
Q2hlY2tpbmdTdHJhdGVneTo6Y291bnRFbGVtZW50c09mVHlwZUFmdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRTZWxlY3RvclF1ZXJ5OjpDb250ZW50U2VsZWN0b3JRdWVyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaDoKKyAgICAgICAgKENvbnRlbnRTZWxl
Y3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb250ZW50U2VsZWN0
b3JEYXRhTGlzdCk6CisgICAgICAgIChDb250ZW50U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmVsZW1l
bnQpOgorICAgICAgICAoQ29udGVudFNlbGVjdG9yUXVlcnkpOgorCiAyMDEyLTA5LTE5ICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFRoZSBjb2xs
YXBzaW5nIGJvcmRlciBjb2RlIG5lZWRzIGRpcmVjdGlvbi1hd2FyZSBib3JkZXIgZ2V0dGVycwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCAxMzNlMmE4YWE0Y2U2ZmUz
MGNhYjNiZDc5ODM0MmY3N2RjNDhmYjMzLi40ZWYwMzc4YTBkYjE2MDlhMjNhOGEzMjFmYzRiNjhl
ZjEzODk5NmM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtMzAs
NiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTZWxl
Y3Rvckxpc3QuaCIKKyNpbmNsdWRlICJDb250ZW50U2VsZWN0b3JRdWVyeS5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKQEAgLTcwMCw3ICs3MDEsOCBAQCBzdGF0aWMgYm9vbCBhbnlBdHRyaWJ1dGVNYXRjaGVz
KEVsZW1lbnQqIGVsZW1lbnQsIENTU1NlbGVjdG9yOjpNYXRjaCBtYXRjaCwgY29ucwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3Io
Y29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFBzZXVkb0lkJiBkeW5hbWlj
UHNldWRvLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k+Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tPbmVTZWxlY3RvcldpdGhTdHJhdGVneShjb25zdCBTZWxlY3RvckNoZWNraW5nU3RyYXRl
Z3kmIHN0cmF0ZWd5LCBjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUHNl
dWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wmIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cykgY29u
c3QKIHsKICAgICBFbGVtZW50KiBjb25zdCAmIGVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQ7CiAg
ICAgQ1NTU2VsZWN0b3IqIGNvbnN0ICYgc2VsZWN0b3IgPSBjb250ZXh0LnNlbGVjdG9yOwpAQCAt
NzkxLDkgKzc5Myw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNv
bnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQCiAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0ZpcnN0Q2hpbGQ6CiAgICAgICAgICAgICAvLyBmaXJzdC1jaGlsZCBt
YXRjaGVzIHRoZSBmaXJzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKICAgICAgICAgICAgIGlm
IChlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIHJlc3Vs
dCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC0+cHJldmlvdXNFbGVtZW50
U2libGluZygpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gc3RyYXRlZ3kuaXNGaXJzdENoaWxkKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgICAg
ICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4
dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNv
bnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDogZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5yZW5kZXJT
dHlsZSgpOwpAQCAtODA4LDE0ICs4MDgsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdE9mVHlwZToKICAgICAgICAgICAgIC8v
IGZpcnN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZQogICAg
ICAgICAgICAgaWYgKGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAg
IGJvb2wgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1l
JiB0eXBlID0gZWxlbWVudC0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0
IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNp
Ymxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBzdHJhdGVneS5pc0ZpcnN0T2ZUeXBlKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/
IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDogZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5yZW5k
ZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCkBAIC04Mjcs
NyArODIwLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoY29uc3Qg
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFAKICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvTGFzdENoaWxkOgogICAgICAgICAgICAgLy8gbGFzdC1jaGlsZCBtYXRjaGVz
IHRoZSBsYXN0IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVudAogICAgICAgICAgICAgaWYgKEVsZW1l
bnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAg
ICAgICAgICBib29sIHJlc3VsdCA9IHBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hp
bGRyZW4oKSAmJiAhZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7CisgICAgICAgICAgICAg
ICAgYm9vbCByZXN1bHQgPSBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVu
KCkgJiYgc3RyYXRlZ3kuaXNMYXN0Q2hpbGQoKTsKICAgICAgICAgICAgICAgICBpZiAobV9tb2Rl
ID09IFJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBj
aGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6
IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFy
ZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwpAQCAtODQ5LDE5ICs4NDIs
MTMgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0
b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFAKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZWxlbWVudC0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNp
YmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Ry
YXRlZ3kuaXNMYXN0T2ZUeXBlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seUNoaWxkOgogICAgICAgICAgICAg
aWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsK
LSAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSAhZWxlbWVudC0+cHJldmlvdXNFbGVt
ZW50U2libGluZygpOwotICAgICAgICAgICAgICAgIGJvb2wgb25seUNoaWxkID0gZmlyc3RDaGls
ZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYgIWVsZW1l
bnQtPm5leHRFbGVtZW50U2libGluZygpOwotCisgICAgICAgICAgICAgICAgYm9vbCBmaXJzdENo
aWxkID0gc3RyYXRlZ3kuaXNGaXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgYm9vbCBvbmx5
Q2hpbGQgPSBmaXJzdENoaWxkICYmIHBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hp
bGRyZW4oKSAmJiBzdHJhdGVneS5pc0xhc3RDaGlsZCgpOwogICAgICAgICAgICAgICAgIGlmICht
X21vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0
eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1l
bnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CkBAIC04ODksMzMg
Kzg3NiwxNCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRy
ZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlbGVtZW50LT50YWdRTmFtZSgpOwotICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxl
bWVudFNpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2libGluZy0+aGFzVGFn
TmFtZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5n
ID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJs
aW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2li
bGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0cmF0ZWd5LmlzRmlyc3RPZlR5cGUoKSAmJiBzdHJhdGVn
eS5pc0xhc3RPZlR5cGUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhDaGlsZDoKICAgICAgICAgICAgIGlmICgh
c2VsZWN0b3ItPnBhcnNlTnRoKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkg
ewotICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgZm9yIChj
b25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygp
OyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBzID0gc2libGluZy0+cmVuZGVyU3R5
bGUoKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzID8gcy0+Y2hpbGRJ
bmRleCgpIDogMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4KSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjb3VudCArPSBpbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7
Ci0gICAgICAgICAgICAgICAgfQotCisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSArIHN0
cmF0ZWd5LmNvdW50RWxlbWVudHNCZWZvcmUoKTsKICAgICAgICAgICAgICAgICBpZiAobV9tb2Rl
ID09IFJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBj
aGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6
IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFy
ZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwpAQCAtOTMzLDEyICs5MDEs
NyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAgICAgICAgICAgaWYgKCFzZWxlY3Rvci0+
cGFyc2VOdGgoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChFbGVt
ZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaW50IGNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWRO
YW1lJiB0eXBlID0gZWxlbWVudC0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGNv
bnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7
IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICArK2NvdW50OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpbnQgY291bnQgPSAxICsgc3RyYXRlZ3kuY291bnRFbGVtZW50c09mVHlwZUJlZm9y
ZSgpOwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVt
ZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJl
bmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKQEAgLTk2
MCw5ICs5MjMsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25z
dCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hp
bGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBz
aWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcg
PSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgKytj
b3VudDsKKyAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgc3RyYXRlZ3kuY291bnRFbGVt
ZW50c0FmdGVyKCk7CiAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3Vu
dCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAt
OTc4LDEyICs5MzksOCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihj
b25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5n
Q2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdHlwZSA9IGVsZW1lbnQtPnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25z
dCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxp
bmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICsrY291bnQ7Ci0gICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aW50IGNvdW50ID0gMSArIHN0cmF0ZWd5LmNvdW50RWxlbWVudHNPZlR5cGVBZnRlcigpOwogICAg
ICAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2hOdGgoY291bnQpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAgLTEzOTUsNCArMTM1Miw3NyBA
QCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lU2VsZWN0b3JTY29wZXMoY29uc3QgQ1NT
U2VsZWN0b3JMaXN0JiBzZWxlY3RvckxpcwogICAgIHJldHVybiB0cnVlOwogfQogCitpbmxpbmUg
Ym9vbCBEZWZhdWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojppc0ZpcnN0T2ZUeXBlKCkgY29u
c3QKK3sKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gbV9lbGVtZW50LT50YWdRTmFt
ZSgpOworICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IG1fZWxlbWVudC0+cHJldmlv
dXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNF
bGVtZW50U2libGluZygpKSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwor
fQorCitpbmxpbmUgYm9vbCBEZWZhdWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojppc0xhc3RP
ZlR5cGUoKSBjb25zdAoreworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBtX2VsZW1l
bnQtPnRhZ1FOYW1lKCk7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gbV9lbGVt
ZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5l
eHRFbGVtZW50U2libGluZygpKSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5
cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW5saW5lIGludCBEZWZhdWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojpjb3VudEVs
ZW1lbnRzQmVmb3JlKCkgY29uc3QKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoY29u
c3QgRWxlbWVudCogc2libGluZyA9IG1fZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygp
OyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7
CisgICAgICAgIFJlbmRlclN0eWxlKiBzID0gc2libGluZy0+cmVuZGVyU3R5bGUoKTsKKyAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBzID8gcy0+Y2hpbGRJbmRleCgpIDogMDsKKyAgICAgICAgaWYg
KGluZGV4KSB7CisgICAgICAgICAgICBjb3VudCArPSBpbmRleDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNvdW50Kys7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50
OworfQorCitpbmxpbmUgaW50IERlZmF1bHRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50
RWxlbWVudHNPZlR5cGVCZWZvcmUoKSBjb25zdAoreworICAgIGludCBjb3VudCA9IDA7CisgICAg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IG1fZWxlbWVudC0+dGFnUU5hbWUoKTsKKyAgICBm
b3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBtX2VsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNp
YmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxp
bmcoKSkgeworICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAg
ICAgICsrY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitpbmxpbmUgaW50
IERlZmF1bHRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNBZnRlcigpIGNv
bnN0Cit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxp
bmcgPSBtX2VsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0g
c2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpCisgICAgICAgICsrY291bnQ7CisKKyAgICBy
ZXR1cm4gY291bnQ7Cit9CisKK2lubGluZSBpbnQgRGVmYXVsdFNlbGVjdG9yQ2hlY2tpbmdTdHJh
dGVneTo6Y291bnRFbGVtZW50c09mVHlwZUFmdGVyKCkgY29uc3QKK3sKKyAgICBpbnQgY291bnQg
PSAwOworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBtX2VsZW1lbnQtPnRhZ1FOYW1l
KCk7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gbV9lbGVtZW50LT5uZXh0RWxl
bWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2li
bGluZygpKSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAg
ICAgICAgKytjb3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK3RlbXBsYXRl
Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcldpdGhTdHJhdGVneTxDb250
ZW50U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Pihjb25zdCBDb250ZW50U2VsZWN0b3JDaGVja2lu
Z1N0cmF0ZWd5JiwgY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYsIGJv
b2wmKSBjb25zdDsKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IGYx
NWNlMGQwOGVlNDMyOThiNDEyMDQxMmNmNzZkOTVhYTViZjNjMDEuLjFlZDk3YzBjMzhlM2Y4ZmE0
ODYxOWIwYjBiMmZhNjFiYWVlMjk3M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmgKQEAgLTgyLDYgKzgyLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc0Zhc3RDaGVj
a2FibGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciopOwogICAgIGJvb2wgZmFzdENoZWNrU2Vs
ZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CiAKKyAgICBi
b29sIGNoZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1
ZG9JZCYsIGJvb2wmIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cykgY29uc3Q7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgU2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5PgorICAgIGJvb2wgY2hlY2tPbmVT
ZWxlY3RvcldpdGhTdHJhdGVneShjb25zdCBTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3kmLCBjb25z
dCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIFBzZXVkb0lkJiwgYm9vbCYgaGFzVW5rbm93blBz
ZXVkb0VsZW1lbnRzKSBjb25zdDsKKwogICAgIHRlbXBsYXRlIDx1bnNpZ25lZCBtYXhpbXVtSWRl
bnRpZmllckNvdW50PgogICAgIGlubGluZSBib29sIGZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCB1
bnNpZ25lZCogaWRlbnRpZmllckhhc2hlcykgY29uc3Q7CiAgICAgc3RhdGljIHZvaWQgY29sbGVj
dElkZW50aWZpZXJIYXNoZXMoY29uc3QgQ1NTU2VsZWN0b3IqLCB1bnNpZ25lZCogaWRlbnRpZmll
ckhhc2hlcywgdW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudCk7CkBAIC0xMTcsNyArMTIx
LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGVsZW1lbnRNYXRjaGVzU2VsZWN0b3JTY29w
ZXMoY29uc3QgU3R5bGVkRWxlbWVudCosIGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+
JiBpZFNjb3BlcywgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVz
KTsKIAogcHJpdmF0ZToKLSAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JD
aGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYsIGJvb2wmIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50
cykgY29uc3Q7CiAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVjdG9y
KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0OwogICAgIHN0YXRpYyBib29sIGlzRnJh
bWVGb2N1c2VkKGNvbnN0IEVsZW1lbnQqKTsKIApAQCAtMTQ4LDYgKzE1MSwyNCBAQCBwcml2YXRl
OgogICAgIE93blB0cjxCbG9vbUZpbHRlcjxibG9vbUZpbHRlcktleUJpdHM+ID4gbV9hbmNlc3Rv
cklkZW50aWZpZXJGaWx0ZXI7CiB9OwogCitjbGFzcyBEZWZhdWx0U2VsZWN0b3JDaGVja2luZ1N0
cmF0ZWd5IHsKK3B1YmxpYzoKKyAgICBEZWZhdWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5KEVs
ZW1lbnQqIGVsZW1lbnQpIDogbV9lbGVtZW50KGVsZW1lbnQpIHsgfQorCisgICAgYm9vbCBpc0Zp
cnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiAhbV9lbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJs
aW5nKCk7IH0KKyAgICBib29sIGlzTGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gIW1fZWxlbWVu
dC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IH0KKyAgICBib29sIGlzRmlyc3RPZlR5cGUoKSBjb25z
dDsKKyAgICBib29sIGlzTGFzdE9mVHlwZSgpIGNvbnN0OworCisgICAgaW50IGNvdW50RWxlbWVu
dHNCZWZvcmUoKSBjb25zdDsKKyAgICBpbnQgY291bnRFbGVtZW50c0FmdGVyKCkgY29uc3Q7Cisg
ICAgaW50IGNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUoKSBjb25zdDsKKyAgICBpbnQgY291bnRF
bGVtZW50c09mVHlwZUFmdGVyKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRWxlbWVudCogbV9l
bGVtZW50OworfTsKKwogaW5saW5lIEVJbnNpZGVMaW5rIFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJt
aW5lTGlua1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFlbGVtZW50
IHx8ICFlbGVtZW50LT5pc0xpbmsoKSkKQEAgLTE2Niw2ICsxODcsMTEgQEAgaW5saW5lIGJvb2wg
U2VsZWN0b3JDaGVja2VyOjpmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgdW5zaWduZWQqIGlkZW50
aWZpZXJIYXNoZXMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2lubGluZSBib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYg
Y29udGV4dCwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wmIGhhc1Vua25vd25Qc2V1ZG9F
bGVtZW50cykgY29uc3QKK3sKKyAgICByZXR1cm4gY2hlY2tPbmVTZWxlY3RvcldpdGhTdHJhdGVn
eTxEZWZhdWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5PihEZWZhdWx0U2VsZWN0b3JDaGVja2lu
Z1N0cmF0ZWd5KGNvbnRleHQuZWxlbWVudCksIGNvbnRleHQsIGR5bmFtaWNQc2V1ZG8sIGhhc1Vu
a25vd25Qc2V1ZG9FbGVtZW50cyk7Cit9CisKIGlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6
aXNDb21tb25Qc2V1ZG9DbGFzc1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikK
IHsKICAgICBpZiAoc2VsZWN0b3ItPm1fbWF0Y2ggIT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5j
cHAKaW5kZXggMDc2YTcyM2M4YTkxYWZlOTMxODg3NjU4OTRjZTc3MzZkYzM2NmEwMC4uNjc0OGI1
OTkxZGI2N2ZiYjM1ZGVjNzlmMzUzNDg2YTRkYmQ3ZGVhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCkBAIC0xMTcsMTAgKzExNywx
MCBAQCB2b2lkIENvbnRlbnREaXN0cmlidXRvcjo6ZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyhJbnNl
cnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQsCiAgICAgICAgIGlmIChkaXN0cmlidXRlZFtpXSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIE5vZGUqIGNoaWxkID0gcG9vbFtpXS5n
ZXQoKTsKLSAgICAgICAgaWYgKCFxdWVyeS5tYXRjaGVzKGNoaWxkKSkKKyAgICAgICAgaWYgKCFx
dWVyeS5tYXRjaGVzKHBvb2wsIGkpKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAg
Tm9kZSogY2hpbGQgPSBwb29sW2ldLmdldCgpOwogICAgICAgICBkaXN0cmlidXRpb24uYXBwZW5k
KGNoaWxkKTsKICAgICAgICAgbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5hZGQoY2hpbGQsIGluc2Vy
dGlvblBvaW50KTsKICAgICAgICAgZGlzdHJpYnV0ZWRbaV0gPSB0cnVlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwCmluZGV4IGYx
MmM1OTkyNWY3YzkzMjRmNmZlZmNiZWIyMjM1ODk1N2RmMjExZjMuLjc1ZTk4YTlhNmRmNGM3MTA1
YWJjZTlkMzk4YjkzMGU5N2RlNmEwOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHAKQEAgLTI5LDE3ICsyOSwxNTAgQEAKIAog
I2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgorI2lu
Y2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQu
aCIKICNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitD
b250ZW50U2VsZWN0b3JDaGVja2VyOjpDb250ZW50U2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCBzdHJpY3RQYXJzaW5nKQorICAgIDogbV9zZWxlY3RvckNoZWNrZXIoZG9j
dW1lbnQsIHN0cmljdFBhcnNpbmcpCit7CisgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShT
ZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7Cit9CisKK2Jvb2wgQ29udGVudFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tDb250ZW50U2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBj
b25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzLCBpbnQgbnRoKSBjb25zdAorewor
ICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKKyAgICBib29sIGhhc1Vua25v
d25Qc2V1ZG9FbGVtZW50cyA9IGZhbHNlOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JD
aGVja2luZ0NvbnRleHQgY29udGV4dChzZWxlY3RvciwgdG9FbGVtZW50KHNpYmxpbmdzW250aF0u
Z2V0KCkpLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERpc2FibGVkKTsKKyAgICBDb250
ZW50U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5IHN0cmF0ZWd5KHNpYmxpbmdzLCBudGgpOworICAg
IAorICAgIHJldHVybiBtX3NlbGVjdG9yQ2hlY2tlci5jaGVja09uZVNlbGVjdG9yV2l0aFN0cmF0
ZWd5KHN0cmF0ZWd5LCBjb250ZXh0LCBkeW5hbWljUHNldWRvLCBoYXNVbmtub3duUHNldWRvRWxl
bWVudHMpOworfQorCit2b2lkIENvbnRlbnRTZWxlY3RvckRhdGFMaXN0Ojppbml0aWFsaXplKGNv
bnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JzKQoreworICAgIGZvciAoQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yID0gc2VsZWN0b3JzLmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1Nl
bGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpCisgICAgICAgIG1fc2VsZWN0b3JzLmFwcGVuZChz
ZWxlY3Rvcik7Cit9CisKK2Jvb2wgQ29udGVudFNlbGVjdG9yRGF0YUxpc3Q6Om1hdGNoZXMoY29u
c3QgQ29udGVudFNlbGVjdG9yQ2hlY2tlciYgc2VsZWN0b3JDaGVja2VyLCBjb25zdCBWZWN0b3I8
UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzLCBpbnQgbnRoKSBjb25zdAoreworICAgIHVuc2lnbmVk
IHNlbGVjdG9yQ291bnQgPSBtX3NlbGVjdG9ycy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNlbGVjdG9yQ291bnQ7ICsraSkgeworICAgICAgICBpZiAoc2VsZWN0b3JDaGVj
a2VyLmNoZWNrQ29udGVudFNlbGVjdG9yKG1fc2VsZWN0b3JzW2ldLCBzaWJsaW5ncywgbnRoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworQ29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6Q29udGVudFNlbGVjdG9yQ2hlY2tp
bmdTdHJhdGVneShjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzLCBpbnQgbnRo
KQorICAgIDogbV9zaWJsaW5ncyhzaWJsaW5ncykKKyAgICAsIG1fbnRoKG50aCkKK3sKK30KKwor
Ym9vbCBDb250ZW50U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojppc0ZpcnN0Q2hpbGQoKSBjb25z
dAoreworICAgIGZvciAoaW50IGkgPSBtX250aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAg
IGlmIChtX3NpYmxpbmdzW2ldICYmIG1fc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBDb250ZW50U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojppc0xhc3RDaGlsZCgpIGNvbnN0
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IG1fbnRoICsgMTsgaSA8IG1fc2libGluZ3Muc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKG1fc2libGluZ3NbaV0gJiYgbV9zaWJsaW5nc1tpXS0+aXNF
bGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIENvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6Omlz
Rmlyc3RPZlR5cGUoKSBjb25zdAoreworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBl
bGVtZW50KCktPnRhZ1FOYW1lKCk7CisgICAgZm9yIChpbnQgaSA9IG1fbnRoIC0gMTsgaSA+PSAw
OyAtLWkpIHsKKyAgICAgICAgaWYgKG1fc2libGluZ3NbaV0gJiYgbV9zaWJsaW5nc1tpXS0+aXNF
bGVtZW50Tm9kZSgpICYmIG1fc2libGluZ3NbaV0tPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6aXNMYXN0T2ZUeXBlKCkgY29uc3QKK3sK
KyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZWxlbWVudCgpLT50YWdRTmFtZSgpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSBtX250aCArIDE7IGkgPCBtX3NpYmxpbmdzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmIChtX3NpYmxpbmdzW2ldICYmIG1fc2libGluZ3NbaV0tPmlzRWxlbWVu
dE5vZGUoKSAmJiBtX3NpYmxpbmdzW2ldLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitpbnQgQ29udGVu
dFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6Y291bnRFbGVtZW50c0JlZm9yZSgpIGNvbnN0Cit7
CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKGludCBpID0gbV9udGggLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgICBpZiAobV9zaWJsaW5nc1tpXSAmJiBtX3NpYmxpbmdzW2ldLT5pc0Vs
ZW1lbnROb2RlKCkpCisgICAgICAgICAgICArK2NvdW50OworICAgIH0KKworICAgIHJldHVybiBj
b3VudDsKK30KKworaW50IENvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50RWxl
bWVudHNBZnRlcigpIGNvbnN0Cit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKHNpemVf
dCBpID0gbV9udGggKyAxOyBpIDwgbV9zaWJsaW5ncy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAobV9zaWJsaW5nc1tpXSAmJiBtX3NpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkpCisgICAg
ICAgICAgICByZXR1cm4gKytjb3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisK
K2ludCBDb250ZW50U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzT2ZUeXBl
QmVmb3JlKCkgY29uc3QKK3sKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZWxlbWVu
dCgpLT50YWdRTmFtZSgpOworCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKGludCBpID0g
bV9udGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAobV9zaWJsaW5nc1tpXSAmJiBt
X3NpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkgJiYgbV9zaWJsaW5nc1tpXS0+aGFzVGFnTmFt
ZSh0eXBlKSkKKyAgICAgICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50
OworfQorCitpbnQgQ29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6Y291bnRFbGVtZW50
c09mVHlwZUFmdGVyKCkgY29uc3QKK3sKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0g
ZWxlbWVudCgpLT50YWdRTmFtZSgpOworCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKHNp
emVfdCBpID0gbV9udGggKyAxOyBpIDwgbV9zaWJsaW5ncy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAobV9zaWJsaW5nc1tpXSAmJiBtX3NpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkgJiYg
bV9zaWJsaW5nc1tpXS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiArK2Nv
dW50OworICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKwogQ29udGVudFNlbGVjdG9yUXVl
cnk6OkNvbnRlbnRTZWxlY3RvclF1ZXJ5KGNvbnN0IEluc2VydGlvblBvaW50KiBpbnNlcnRpb25Q
b2ludCkKICAgICA6IG1faW5zZXJ0aW9uUG9pbnQoaW5zZXJ0aW9uUG9pbnQpCiAgICAgLCBtX3Nl
bGVjdG9yQ2hlY2tlcihpbnNlcnRpb25Qb2ludC0+ZG9jdW1lbnQoKSwgIWluc2VydGlvblBvaW50
LT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkKIHsKLSAgICBtX3NlbGVjdG9yQ2hlY2tlci5z
ZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKTsKLQogICAgIGlmIChpbnNl
cnRpb25Qb2ludC0+c2VsZWN0KCkuaXNOdWxsKCkgfHwgaW5zZXJ0aW9uUG9pbnQtPnNlbGVjdCgp
LmlzRW1wdHkoKSkgewogICAgICAgICBtX2lzVmFsaWRTZWxlY3RvciA9IHRydWU7CiAgICAgICAg
IHJldHVybjsKQEAgLTU4LDE0ICsxOTEsMTQgQEAgYm9vbCBDb250ZW50U2VsZWN0b3JRdWVyeTo6
aXNWYWxpZFNlbGVjdG9yKCkgY29uc3QKICAgICByZXR1cm4gbV9pc1ZhbGlkU2VsZWN0b3I7CiB9
CiAKLWJvb2wgQ29udGVudFNlbGVjdG9yUXVlcnk6Om1hdGNoZXMoTm9kZSogbm9kZSkgY29uc3QK
K2Jvb2wgQ29udGVudFNlbGVjdG9yUXVlcnk6Om1hdGNoZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxO
b2RlPiA+JiBzaWJsaW5ncywgaW50IG50aCkgY29uc3QKIHsKKyAgICBOb2RlKiBub2RlID0gc2li
bGluZ3NbbnRoXS5nZXQoKTsKKwogICAgIEFTU0VSVChub2RlKTsKICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEFTU0VSVChub2RlLT5wYXJlbnROb2RlKCkgPT0g
bV9pbnNlcnRpb25Qb2ludC0+c2hhZG93Um9vdCgpLT5ob3N0KCkpOwotCiAgICAgaWYgKG1faW5z
ZXJ0aW9uUG9pbnQtPnNlbGVjdCgpLmlzTnVsbCgpIHx8IG1faW5zZXJ0aW9uUG9pbnQtPnNlbGVj
dCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTc1LDcgKzIwOCw3IEBA
IGJvb2wgQ29udGVudFNlbGVjdG9yUXVlcnk6Om1hdGNoZXMoTm9kZSogbm9kZSkgY29uc3QKICAg
ICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgcmV0dXJuIG1fc2VsZWN0b3JzLm1hdGNoZXMobV9zZWxlY3RvckNoZWNrZXIsIHRvRWxlbWVu
dChub2RlKSk7CisgICAgcmV0dXJuIG1fc2VsZWN0b3JzLm1hdGNoZXMobV9zZWxlY3RvckNoZWNr
ZXIsIHNpYmxpbmdzLCBudGgpOwogfQogCiBzdGF0aWMgYm9vbCB2YWxpZGF0ZVN1YlNlbGVjdG9y
KENTU1NlbGVjdG9yKiBzZWxlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9Db250ZW50U2VsZWN0b3JRdWVyeS5oCmluZGV4IDk0ZmEzZWZjY2YzZjlkNzJlOTc0Nzc1ZTJk
MmQzMTQwZDEzY2IzNGUuLjliNjU2YTM4NTQ0ZTE0OGU5NmY3YThiMDNiMTEwMzFmOWQwOTM2MzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1
ZXJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVl
cnkuaApAQCAtNDMsMjUgKzQzLDYxIEBAIGNsYXNzIERvY3VtZW50OwogY2xhc3MgTm9kZTsKIGNs
YXNzIEluc2VydGlvblBvaW50OwogCitjbGFzcyBDb250ZW50U2VsZWN0b3JDaGVja2VyIHsKK3B1
YmxpYzoKKyAgICBDb250ZW50U2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiwgYm9vbCBzdHJpY3RQ
YXJzaW5nKTsKKworICAgIGJvb2wgY2hlY2tDb250ZW50U2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBj
b25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzLCBpbnQgbnRoTm9kZSkgY29uc3Q7
Citwcml2YXRlOgorICAgIFNlbGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKK307CisK
K2NsYXNzIENvbnRlbnRTZWxlY3RvckRhdGFMaXN0IHsKK3B1YmxpYzoKKyAgICB2b2lkIGluaXRp
YWxpemUoY29uc3QgQ1NTU2VsZWN0b3JMaXN0Jik7CisgICAgYm9vbCBtYXRjaGVzKGNvbnN0IENv
bnRlbnRTZWxlY3RvckNoZWNrZXImLCBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxp
bmdzLCBpbnQgbnRoTm9kZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPENTU1NlbGVj
dG9yKj4gbV9zZWxlY3RvcnM7Cit9OworCitjbGFzcyBDb250ZW50U2VsZWN0b3JDaGVja2luZ1N0
cmF0ZWd5IHsKK3B1YmxpYzoKKyAgICBDb250ZW50U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5KGNv
bnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGludCBudGgpOworCisgICAgYm9v
bCBpc0ZpcnN0Q2hpbGQoKSBjb25zdDsKKyAgICBib29sIGlzRmlyc3RPZlR5cGUoKSBjb25zdDsK
KyAgICBib29sIGlzTGFzdENoaWxkKCkgY29uc3Q7CisgICAgYm9vbCBpc0xhc3RPZlR5cGUoKSBj
b25zdDsKKworICAgIGludCBjb3VudEVsZW1lbnRzQmVmb3JlKCkgY29uc3Q7CisgICAgaW50IGNv
dW50RWxlbWVudHNBZnRlcigpIGNvbnN0OworICAgIGludCBjb3VudEVsZW1lbnRzT2ZUeXBlQmVm
b3JlKCkgY29uc3Q7CisgICAgaW50IGNvdW50RWxlbWVudHNPZlR5cGVBZnRlcigpIGNvbnN0Owor
cHJpdmF0ZToKKyAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50
KG1fc2libGluZ3NbbV9udGhdLmdldCgpKTsgfQorCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxO
b2RlPiA+IG1fc2libGluZ3M7CisgICAgaW50IG1fbnRoOworfTsKKwogY2xhc3MgQ29udGVudFNl
bGVjdG9yUXVlcnkgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnRlbnRTZWxlY3RvclF1
ZXJ5KTsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb250ZW50U2VsZWN0b3JRdWVyeShjb25zdCBJ
bnNlcnRpb25Qb2ludCopOwogCiAgICAgYm9vbCBpc1ZhbGlkU2VsZWN0b3IoKSBjb25zdDsKLSAg
ICBib29sIG1hdGNoZXMoTm9kZSopIGNvbnN0OworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBWZWN0
b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzLCBpbnQgbnRoTm9kZSkgY29uc3Q7CiBwcml2YXRl
OgogICAgIGJvb2wgdmFsaWRhdGVTZWxlY3Rvckxpc3QoKTsKIAogICAgIGNvbnN0IEluc2VydGlv
blBvaW50KiBtX2luc2VydGlvblBvaW50OwotICAgIFNlbGVjdG9yRGF0YUxpc3QgbV9zZWxlY3Rv
cnM7CisgICAgQ29udGVudFNlbGVjdG9yRGF0YUxpc3QgbV9zZWxlY3RvcnM7CiAgICAgQ1NTU2Vs
ZWN0b3JMaXN0IG1fc2VsZWN0b3JMaXN0OwotICAgIFNlbGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9y
Q2hlY2tlcjsKKyAgICBDb250ZW50U2VsZWN0b3JDaGVja2VyIG1fc2VsZWN0b3JDaGVja2VyOwog
ICAgIGJvb2wgbV9pc1ZhbGlkU2VsZWN0b3I7CiB9OwogCiB9CiAKLQotCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165057</attachid>
            <date>2012-09-20 23:55:16 -0700</date>
            <delta_ts>2012-09-24 22:52:32 -0700</delta_ts>
            <desc>wip. including other patches</desc>
            <filename>bug-96990-20120921155440.patch</filename>
            <type>text/plain</type>
            <size>23620</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5MTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjE5YzJkMjhhNmUxYWYx
ZmU3NjA0MGRhNGZmM2E2NWU5ZWIzZDdjNy4uOWEzYjViZDBiMTM0YzVlNjM1MmYwMDU2ODRjZTE4
ZTQ3ZTI4ZWNkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTA5LTE5ICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIENvbnRl
bnRTZWxlY3RvclF1ZXJ5IHdvcmsgd2hlbiBhIG5vZGUgUE9PTCBpcyB1c2VkIGluc3RlYWQgb2Yg
bm9kZSdzIHJlYWwgY2hpbGRyZW4uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05Njk5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdoZW4gd2UgaW1wbGVtZW50IGNvbnRlbnQgcmVwcm9qZWN0aW9uIGluIFNo
YWRvdyBET00sIHdlIGhhdmUgdG8gdXNlIGEgbm9kZSBwb29sIGFzIGNoaWxkcmVuCisgICAgICAg
IGluc3RlYWQgb2Ygbm9kZSdzIHJlYWwgY2hpbGRyZW4uCisKKyAgICAgICAgV2UgaW50cm9kdWNl
IFJlaWZpZWROb2RlIGFuZCBSZWlmaWVkRWxlbWVudCBoZXJlLCB3aGljaCB1c2UgYSBub2RlIHBv
b2wgYXMgdGhlaXIgY2hpbGRyZW4uCisgICAgICAgIEFsc28sIHdlIG1vZGlmeSBDb250ZW50U2Vs
ZWN0b3JRdWVyeSB0byB1c2UgUmVpZmllZE5vZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBl
eGlzdGluZyB0ZXN0cyBzaG91bGQgY292ZXIuCisKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVj
a2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxl
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrQXR0cmlidXRl
U2VsZWN0b3IpOiBFeHRyYWN0ZWQgdG8gc2hhcmUgdGhlIGNvZGUgd2l0aCBDb250ZW50U2VsZWN0
b3JDaGVja2VyLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hl
Y2tlci5oOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5Lmg6CisgICAgICAgIChTZWxlY3Rv
ckRhdGFMaXN0KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2VsZWN0
aW9uc1RvKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHA6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWROb2RlOjpSZWlm
aWVkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWlmaWVkRWxlbWVudDo6aXNGaXJzdENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWRFbGVtZW50Ojppc0xhc3RDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWlmaWVkRWxlbWVudDo6aXNGaXJzdE9mVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWlmaWVkRWxlbWVudDo6aXNMYXN0T2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVpZmllZEVsZW1lbnQ6OmNvdW50RWxlbWVudHNCZWZvcmVXaXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRzQWZ0ZXJXaXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tDb250ZW50U2Vs
ZWN0b3IpOiBUaGlzIGlzIHNvbWV0aGluZyBsaWtlIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVT
ZWxlY3RvcigpLAorICAgICAgICBidXQgdGhpcyB1c2VzIFJlaWZpZWROb2RlIGFuZCBSZWlmaWVk
RWxlbWVudC4gQWxzbywgQ29udGVudFNlbGVjdG9yIGRvZXMgbm90IGhhdmUgUHNldWRvRWxlbWVu
dCwgd2Ugb21pdCB0byBjaGVjaworICAgICAgICBQc2V1ZG9FbGVtZW50IGNvZGUgZnJvbSBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoKS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lUHNldWRvQ2xhc3NTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyk6CisgICAgICAgICogaHRtbC9z
aGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaDoKKyAgICAgICAgKFJlaWZpZWROb2RlKTogUmVp
ZmllZE5vZGUgaXMgc29tZXRoaW5nIGxpa2UgYSBub2RlLCBidXQgaXRzIHNpYmxpbmdzIGFyZSBm
cm9tIGEgbm9kZSBwb29sLgorICAgICAgICAoV2ViQ29yZTo6UmVpZmllZE5vZGU6OmRvY3VtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWROb2RlOjpub2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlaWZpZWROb2RlOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlaWZpZWRO
b2RlOjppc0VsZW1lbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUmVpZmll
ZEVsZW1lbnQpOiBSZWlmaWVkRWxlbWVudCBpcyBzb21ldGhpbmcgbGlrZSBhbiBlbGVtZW50LCBi
dXQgaXRzIHNpYmxpbmdzIGFyZSBmcm9tIGEgbm9kZSBwb29sLgorICAgICAgICAoV2ViQ29yZTo6
UmVpZmllZEVsZW1lbnQ6OnBhcmVudEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVpZmll
ZEVsZW1lbnQ6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVpZmllZEVsZW1lbnQ6Omhh
c1RhZ05hbWUpOgorICAgICAgICAoQ29udGVudFNlbGVjdG9yQ2hlY2tlcik6CisgICAgICAgIChD
b250ZW50U2VsZWN0b3JEYXRhTGlzdCk6CisgICAgICAgIChDb250ZW50U2VsZWN0b3JRdWVyeSk6
CisgICAgICAgIChXZWJDb3JlOjp0b1JlaWZpZWRFbGVtZW50KToKKwogMjAxMi0wOS0yMCAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtQbGF0Zm9ybV0g
VGhlcmUgYXJlIG1lbW9yeSBsZWFrIGluIExvY2FsZUlDVQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmNwcAppbmRleCAxMzNlMmE4YWE0Y2U2ZmUzMGNhYjNiZDc5ODM0MmY3N2RjNDhm
YjMzLi40MDdiMjczMzQxZDA1MDZmNzg3NDA3MzNkODA5YTNiYWM2ZDMyZDhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNzE3LDE1ICs3MTcsOSBAQCBib29sIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCYgY29udGV4dCwgUAogICAgICAgICByZXR1cm4gZWxlbWVudC0+aGFzSUQoKSAmJiBlbGVt
ZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IHNlbGVjdG9yLT52YWx1ZSgpOwogCiAgICAg
aWYgKHNlbGVjdG9yLT5pc0F0dHJpYnV0ZVNlbGVjdG9yKCkpIHsKLSAgICAgICAgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ciA9IHNlbGVjdG9yLT5hdHRyaWJ1dGUoKTsKLQotICAgICAgICBpZiAo
IWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSAhbV9kb2N1bWVudElzSFRNTCB8fCAhaHRtbEF0
dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKGF0dHIpOwotCi0gICAgICAgIGlmICghYW55
QXR0cmlidXRlTWF0Y2hlcyhlbGVtZW50LCBzdGF0aWNfY2FzdDxDU1NTZWxlY3Rvcjo6TWF0Y2g+
KHNlbGVjdG9yLT5tX21hdGNoKSwgYXR0ciwgc2VsZWN0b3ItPnZhbHVlKCksIGNhc2VTZW5zaXRp
dmUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBib29sIG1hdGNoZWQ7Cisg
ICAgICAgIGlmIChjaGVja0F0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yLCBlbGVtZW50LCBtYXRj
aGVkKSkKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVkOwogICAgIH0KIAogICAgIGlmIChzZWxl
Y3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpIHsKQEAgLTEyNzcsNiAr
MTI3MSwyNSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFz
cyhDU1NTZWxlY3Rvciogc2VsLCBQc2V1ZG9JZCYpIGNvbgogICAgIH0KIH0KIAorYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrQXR0cmlidXRlU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
LCBFbGVtZW50KiBlbGVtZW50LCBib29sJiBtYXRjaGVkKSBjb25zdAoreworICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHIgPSBzZWxlY3Rvci0+YXR0cmlidXRlKCk7CisKKyAgICBpZiAoIWVs
ZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkgeworICAgICAgICBtYXRjaGVkID0gZmFsc2U7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9ICFtX2Rv
Y3VtZW50SXNIVE1MIHx8ICFodG1sQXR0cmlidXRlSGFzQ2FzZUluc2Vuc2l0aXZlVmFsdWUoYXR0
cik7CisKKyAgICBpZiAoIWFueUF0dHJpYnV0ZU1hdGNoZXMoZWxlbWVudCwgc3RhdGljX2Nhc3Q8
Q1NTU2VsZWN0b3I6Ok1hdGNoPihzZWxlY3Rvci0+bV9tYXRjaCksIGF0dHIsIHNlbGVjdG9yLT52
YWx1ZSgpLCBjYXNlU2Vuc2l0aXZlKSkgeworICAgICAgICBtYXRjaGVkID0gZmFsc2U7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBT
ZWxlY3RvckNoZWNrZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKQogewogICAgIGlmIChtX2xp
bmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmgKaW5kZXggZjE1Y2UwZDA4ZWU0MzI5OGI0MTIwNDEyY2Y3NmQ5NWFhNWJmM2Mw
MS4uMzUwMDhhZjFhMDM3NDc3YzNiZTYwNDM2ZjFlZjgzNmEwNzRlZmM2ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuaApAQCAtMTE2LDYgKzExNiw5IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgYm9vbCBkZXRlcm1pbmVTZWxlY3RvclNjb3Blcyhjb25zdCBDU1NTZWxlY3Rvckxpc3Qm
LCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3Ry
aW5nSW1wbCo+JiBjbGFzc1Njb3Blcyk7CiAgICAgc3RhdGljIGJvb2wgZWxlbWVudE1hdGNoZXNT
ZWxlY3RvclNjb3Blcyhjb25zdCBTdHlsZWRFbGVtZW50KiwgY29uc3QgSGFzaFNldDxBdG9taWNT
dHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYg
Y2xhc3NTY29wZXMpOwogCitwcm90ZWN0ZWQ6CisgICAgYm9vbCBjaGVja0F0dHJpYnV0ZVNlbGVj
dG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIGJvb2wmIG1hdGNoZWQpIGNvbnN0OworCiBwcml2
YXRlOgogICAgIGJvb2wgY2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCYsIFBzZXVkb0lkJiwgYm9vbCYgaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSBjb25zdDsK
ICAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqLCBQc2V1ZG9J
ZCYgZHluYW1pY1BzZXVkbykgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3Nl
ZFNoYWRvd1RyZWVXYWxrZXIuY3BwCmluZGV4IGQzYTU0Zjg4N2E4NWZkMDU3NWQzNzAyYzgxMTdl
MmJiYTAyYWQ2YTYuLjVhZTYwN2IyZjBkODQ4ZGE1MGE1NmY3YzYzMjM4Mjk5M2M1NGU1YzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwCkBA
IC0yMzcsNiArMjM3LDIxIEBAIHZvaWQgQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyOjpwYXJlbnQo
KQogICAgIGFzc2VydFBvc3Rjb25kaXRpb24oKTsKIH0KIAorc3RhdGljIGlubGluZSBJbnNlcnRp
b25Qb2ludCogcmVzb2x2ZVJlcHJvamVjdGlvbihjb25zdCBOb2RlKiBub2RlKQoreworICAgIElu
c2VydGlvblBvaW50KiBpbnNlcnRpb25Qb2ludCA9IDA7CisgICAgY29uc3QgTm9kZSogY3VycmVu
dCA9IG5vZGU7CisgICAgd2hpbGUgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHNoYWRvd09mUGFy
ZW50KGN1cnJlbnQpKSB7CisgICAgICAgIHNoYWRvdy0+ZW5zdXJlRGlzdHJpYnV0aW9uKCk7Cisg
ICAgICAgIGlmIChJbnNlcnRpb25Qb2ludCogaW5zZXJ0ZWRUbyA9IHNoYWRvdy0+aW5zZXJ0aW9u
UG9pbnRGb3Iobm9kZSkpIHsKKyAgICAgICAgICAgIGN1cnJlbnQgPSBpbnNlcnRlZFRvOworICAg
ICAgICAgICAgaW5zZXJ0aW9uUG9pbnQgPSBpbnNlcnRlZFRvOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gaW5zZXJ0aW9uUG9pbnQ7Cit9CisK
IC8vIEZJWE1FOiBVc2UgYW4gaXRlcmF0aXZlIGFsZ29yaXRobSBzbyB0aGF0IGl0IGNhbiBiZSBp
bmxpbmVkLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNDE1
CiBOb2RlKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFyZW50KGNvbnN0IE5v
ZGUqIG5vZGUsIFBhcmVudFRyYXZlcnNhbERldGFpbHMqIGRldGFpbHMpIGNvbnN0CkBAIC0yNDUs
MTcgKzI2MCwxMCBAQCBOb2RlKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXI6OnRyYXZlcnNlUGFy
ZW50KGNvbnN0IE5vZGUqIG5vZGUsIFBhcmVudFRyYXZlcnNhbAogICAgICAgICBBU1NFUlQodG9T
aGFkb3dSb290KG5vZGUpLT5pc1lvdW5nZXN0KCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
Ci0gICAgaWYgKEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IHNoYWRvd09mUGFyZW50KG5vZGUpKSB7
Ci0gICAgICAgIHNoYWRvdy0+ZW5zdXJlRGlzdHJpYnV0aW9uKCk7Ci0gICAgICAgIGlmIChJbnNl
cnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQgPSBzaGFkb3ctPmluc2VydGlvblBvaW50Rm9yKG5v
ZGUpKSB7Ci0gICAgICAgICAgICBpZiAoZGV0YWlscykKLSAgICAgICAgICAgICAgICBkZXRhaWxz
LT5kaWRUcmF2ZXJzZUluc2VydGlvblBvaW50KGluc2VydGlvblBvaW50KTsKLSAgICAgICAgICAg
IHJldHVybiB0cmF2ZXJzZVBhcmVudChpbnNlcnRpb25Qb2ludCwgZGV0YWlscyk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBUaGUgbm9kZSBpcyBhIG5vbi1kaXN0cmlidXRlZCBsaWdodCBjaGls
ZCBvciBvbGRlciBzaGFkb3cncyBjaGlsZC4KKyAgICBpZiAoSW5zZXJ0aW9uUG9pbnQqIGluc2Vy
dGlvblBvaW50ID0gcmVzb2x2ZVJlcHJvamVjdGlvbihub2RlKSkgewogICAgICAgICBpZiAoZGV0
YWlscykKLSAgICAgICAgICAgIGRldGFpbHMtPmNoaWxkV2FzT3V0T2ZDb21wb3NpdGlvbigpOwor
ICAgICAgICAgICAgZGV0YWlscy0+ZGlkVHJhdmVyc2VJbnNlcnRpb25Qb2ludChpbnNlcnRpb25Q
b2ludCk7CisgICAgICAgIHJldHVybiB0cmF2ZXJzZVBhcmVudChpbnNlcnRpb25Qb2ludCwgZGV0
YWlscyk7CiAgICAgfQogICAgIHJldHVybiB0cmF2ZXJzZVBhcmVudEluQ3VycmVudFRyZWUobm9k
ZSwgZGV0YWlscyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JR
dWVyeS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaAppbmRleCA4NjVhNDMx
Zjg5ODFmN2Y3NmRmYzlkNjhmNDFjOGFjOGNiYTBiYmEzLi42MjM5MzRmMjc4YTgxMjI3ZWYwOTk1
NjdmYjIxMWE0Mjc0Y2JhNDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0
b3JRdWVyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmgKQEAgLTQ2
LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IHF1ZXJ5QWxsKGNv
bnN0IFNlbGVjdG9yQ2hlY2tlciYsIE5vZGUqIHJvb3ROb2RlKSBjb25zdDsKICAgICBQYXNzUmVm
UHRyPEVsZW1lbnQ+IHF1ZXJ5Rmlyc3QoY29uc3QgU2VsZWN0b3JDaGVja2VyJiwgTm9kZSogcm9v
dE5vZGUpIGNvbnN0OwogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIHN0cnVjdCBTZWxlY3Rv
ckRhdGEgewogICAgICAgICBTZWxlY3RvckRhdGEoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29s
IGlzRmFzdENoZWNrYWJsZSkgOiBzZWxlY3RvcihzZWxlY3RvciksIGlzRmFzdENoZWNrYWJsZShp
c0Zhc3RDaGVja2FibGUpIHsgfQogICAgICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3I7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcAppbmRl
eCAwNzZhNzIzYzhhOTFhZmU5MzE4ODc2NTg5NGNlNzczNmRjMzY2YTAwLi5hNWRhNjkzYTlhZWJk
MGY2ZDRmZTRkOWIwYjNiMzljMTAzOTY2MDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKQEAgLTU3LDggKzU3LDMwIEBAIHZvaWQg
Q29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlKEVsZW1lbnQqIGhvc3QpCiAgICAgbV92YWxp
ZGl0eSA9IFZhbGlkOwogCiAgICAgQ29udGVudERpc3RyaWJ1dGlvbiBwb29sOworCisjaWYgMAog
ICAgIGZvciAoTm9kZSogbm9kZSA9IGhvc3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5v
ZGUtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIHBvb2wuYXBwZW5kKG5vZGUpOworI2Vsc2UKKyAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBob3N0LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2Rl
LT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghaXNJbnNlcnRpb25Qb2ludChub2RlKSkg
eworICAgICAgICAgICAgcG9vbC5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIEluc2VydGlvblBvaW50KiBpbnNlcnRpb25Qb2ludCA9IHRv
SW5zZXJ0aW9uUG9pbnQobm9kZSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW5zZXJ0aW9u
UG9pbnQoJXApID0gJWRcbiIsIGluc2VydGlvblBvaW50LCAoaW50KWluc2VydGlvblBvaW50LT5z
aXplKCkpOworICAgICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmhhc0Rpc3RyaWJ1dGlvbigpKSB7
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluc2VydGlvblBvaW50LT5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgICAgICBwb29sLmFwcGVuZChpbnNlcnRpb25Qb2ludC0+YXQo
aSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChOb2RlKiBmYWxsYmFja05v
ZGUgPSBpbnNlcnRpb25Qb2ludC0+Zmlyc3RDaGlsZCgpOyBmYWxsYmFja05vZGU7IGZhbGxiYWNr
Tm9kZSA9IGZhbGxiYWNrTm9kZS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgICAgICAgICBwb29s
LmFwcGVuZChmYWxsYmFja05vZGUpOworICAgICAgICB9CisgICAgfQorCisjZW5kaWYKKwogICAg
IFZlY3Rvcjxib29sPiBkaXN0cmlidXRlZChwb29sLnNpemUoKSk7CiAgICAgZGlzdHJpYnV0ZWQu
ZmlsbChmYWxzZSk7CiAKQEAgLTExOCw3ICsxNDAsOCBAQCB2b2lkIENvbnRlbnREaXN0cmlidXRv
cjo6ZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyhJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQs
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBOb2RlKiBjaGlsZCA9IHBvb2xbaV0u
Z2V0KCk7Ci0gICAgICAgIGlmICghcXVlcnkubWF0Y2hlcyhjaGlsZCkpCisgICAgICAgIFJlaWZp
ZWROb2RlIHJlaWZpZWROb2RlKGNoaWxkLT5wYXJlbnROb2RlKCksIHBvb2wsIGkpOworICAgICAg
ICBpZiAoIXF1ZXJ5Lm1hdGNoZXMoJnJlaWZpZWROb2RlKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIGRpc3RyaWJ1dGlvbi5hcHBlbmQoY2hpbGQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwCmluZGV4IGYxMmM1
OTkyNWY3YzkzMjRmNmZlZmNiZWIyMjM1ODk1N2RmMjExZjMuLmVlNjFhZWFlZDQwYTQzMTI2OGMy
NzU0NjA1YTliOTIxZmI4N2Y3NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHAKQEAgLTI5LDExICsyOSwyNjcgQEAKIAogI2lu
Y2x1ZGUgIkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgorI2luY2x1
ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRl
ICJIVE1MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIK
ICNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitSZWlm
aWVkTm9kZTo6UmVpZmllZE5vZGUoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgVmVjdG9yPFJlZlB0
cjxOb2RlPiA+JiBjaGlsZHJlbiwgaW50IG50aENoaWxkKQorICAgIDogbV9wYXJlbnROb2RlKHBh
cmVudE5vZGUpCisgICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQorICAgICwgbV9udGhDaGlsZChu
dGhDaGlsZCkKK3sKKyAgICBBU1NFUlQocGFyZW50Tm9kZSk7Cit9CisKK2Jvb2wgUmVpZmllZEVs
ZW1lbnQ6OmlzRmlyc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgZm9yIChpbnQgaSA9IG1fbnRoQ2hp
bGQgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAobV9jaGlsZHJlbltpXSAmJiBtX2No
aWxkcmVuW2ldLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVpZmllZEVsZW1lbnQ6OmlzTGFz
dENoaWxkKCkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbV9udGhDaGlsZCArIDE7IGkg
PCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldICYm
IG1fY2hpbGRyZW5baV0tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZWlmaWVkRWxlbWVudDo6
aXNGaXJzdE9mVHlwZShjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAoreworICAgIGZv
ciAoaW50IGkgPSBtX250aENoaWxkIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKG1f
Y2hpbGRyZW5baV0gJiYgbV9jaGlsZHJlbltpXS0+aXNFbGVtZW50Tm9kZSgpICYmIG1fY2hpbGRy
ZW5baV0tPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVpZmllZEVsZW1lbnQ6OmlzTGFzdE9m
VHlwZShjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90
IGkgPSBtX250aENoaWxkICsgMTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKG1fY2hpbGRyZW5baV0gJiYgbV9jaGlsZHJlbltpXS0+aXNFbGVtZW50Tm9kZSgpICYm
IG1fY2hpbGRyZW5baV0tPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludCBSZWlmaWVkRWxlbWVudDo6
Y291bnRFbGVtZW50c0JlZm9yZSgpIGNvbnN0Cit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBm
b3IgKGludCBpID0gbV9udGhDaGlsZCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmICht
X2NoaWxkcmVuW2ldICYmIG1fY2hpbGRyZW5baV0tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAg
ICAgICsrY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitpbnQgUmVpZmll
ZEVsZW1lbnQ6OmNvdW50RWxlbWVudHNBZnRlcigpIGNvbnN0Cit7CisgICAgaW50IGNvdW50ID0g
MDsKKyAgICBmb3IgKHNpemVfdCBpID0gbV9udGhDaGlsZCArIDE7IGkgPCBtX2NoaWxkcmVuLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldICYmIG1fY2hpbGRyZW5baV0t
PmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiArK2NvdW50OworICAgIH0KKwor
ICAgIHJldHVybiBjb3VudDsKK30KKworaW50IFJlaWZpZWRFbGVtZW50Ojpjb3VudEVsZW1lbnRz
QmVmb3JlV2l0aChjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAoreworICAgIGludCBj
b3VudCA9IDA7CisgICAgZm9yIChpbnQgaSA9IG1fbnRoQ2hpbGQgLSAxOyBpID49IDA7IC0taSkg
eworICAgICAgICBpZiAobV9jaGlsZHJlbltpXSAmJiBtX2NoaWxkcmVuW2ldLT5pc0VsZW1lbnRO
b2RlKCkgJiYgbV9jaGlsZHJlbltpXS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgICsr
Y291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitpbnQgUmVpZmllZEVsZW1l
bnQ6OmNvdW50RWxlbWVudHNBZnRlcldpdGgoY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkgY29u
c3QKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSBtX250aENoaWxk
ICsgMTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRy
ZW5baV0gJiYgbV9jaGlsZHJlbltpXS0+aXNFbGVtZW50Tm9kZSgpICYmIG1fY2hpbGRyZW5baV0t
Pmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gKytjb3VudDsKKyAgICB9CisK
KyAgICByZXR1cm4gY291bnQ7Cit9CisKK0NvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRT
ZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHN0cmljdFBhcnNpbmcpCisg
ICAgOiBTZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQsIHN0cmljdFBhcnNpbmcpCit7Cit9CisKK2Jv
b2wgQ29udGVudFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tDb250ZW50U2VsZWN0b3IoQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yLCBSZWlmaWVkRWxlbWVudCogdmlydHVhbEVsZW1lbnQpIGNvbnN0Cit7Cisg
ICAgRWxlbWVudCogZWxlbWVudCA9IHZpcnR1YWxFbGVtZW50LT5lbGVtZW50KCk7CisKKyAgICBp
ZiAoIVNlbGVjdG9yQ2hlY2tlcjo6dGFnTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvcikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6Q2xhc3MpCisgICAgICAgIHJldHVybiBlbGVtZW50LT5oYXNDbGFzcygpICYmIHN0YXRp
Y19jYXN0PFN0eWxlZEVsZW1lbnQqPihlbGVtZW50KS0+Y2xhc3NOYW1lcygpLmNvbnRhaW5zKHNl
bGVjdG9yLT52YWx1ZSgpKTsKKworICAgIGlmIChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6SWQpCisgICAgICAgIHJldHVybiBlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlk
Rm9yU3R5bGVSZXNvbHV0aW9uKCkgPT0gc2VsZWN0b3ItPnZhbHVlKCk7CisKKyAgICBpZiAoc2Vs
ZWN0b3ItPmlzQXR0cmlidXRlU2VsZWN0b3IoKSkgeworICAgICAgICBib29sIG1hdGNoZWQ7Cisg
ICAgICAgIGlmIChjaGVja0F0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yLCBlbGVtZW50LCBtYXRj
aGVkKSkKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVkOworICAgIH0KKworICAgIGlmIChzZWxl
Y3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpCisgICAgICAgIHJldHVy
biBjaGVja09uZVBzZXVkb0NsYXNzU2VsZWN0b3Ioc2VsZWN0b3IsIHZpcnR1YWxFbGVtZW50KTsK
KworICAgIHJldHVybiB0cnVlOworfQorCisKK2Jvb2wgQ29udGVudFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tPbmVQc2V1ZG9DbGFzc1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvciwgUmVpZmll
ZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1vZGUoKSA9PSBTZWxlY3Rv
ckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CisgICAgCisgICAgc3dpdGNoIChzZWxlY3Rvci0+
cHNldWRvVHlwZSgpKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RDaGlsZDoK
KyAgICAgICAgaWYgKGVsZW1lbnQtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBl
bGVtZW50LT5pc0ZpcnN0Q2hpbGQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRmlyc3RPZlR5cGU6CisgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnROb2Rl
KCkpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+aXNGaXJzdE9mVHlwZShlbGVtZW50LT5l
bGVtZW50KCktPnRhZ1FOYW1lKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9MYXN0Q2hpbGQ6CisgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnROb2RlKCkp
CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpLT5pc0ZpbmlzaGVk
UGFyc2luZ0NoaWxkcmVuKCkgJiYgZWxlbWVudC0+aXNMYXN0Q2hpbGQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFzdE9mVHlwZToKKyAgICAgICAgaWYg
KGVsZW1lbnQtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5wYXJl
bnRFbGVtZW50KCktPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiBlbGVtZW50LT5pc0xh
c3RPZlR5cGUoZWxlbWVudC0+ZWxlbWVudCgpLT50YWdRTmFtZSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seU9mVHlwZToKKyAgICAgICAgaWYgKGVs
ZW1lbnQtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50LT5pc0ZpcnN0
T2ZUeXBlKGVsZW1lbnQtPmVsZW1lbnQoKS0+dGFnUU5hbWUoKSkKKyAgICAgICAgICAgICAgICAm
JiBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCktPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKQor
ICAgICAgICAgICAgICAgICYmIGVsZW1lbnQtPmlzTGFzdE9mVHlwZShlbGVtZW50LT5lbGVtZW50
KCktPnRhZ1FOYW1lKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9OdGhDaGlsZDoKKyAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBpZiAoZWxlbWVudC0+cGFyZW50Tm9kZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIHNlbGVjdG9yLT5tYXRjaE50aChlbGVtZW50LT5jb3VudEVsZW1lbnRzQmVm
b3JlKCkgKyAxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
TnRoT2ZUeXBlOgorICAgICAgICBpZiAoIXNlbGVjdG9yLT5wYXJzZU50aCgpKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAg
ICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlbGVtZW50LT5lbGVtZW50KCktPnRhZ1FO
YW1lKCk7CisgICAgICAgICAgICByZXR1cm4gc2VsZWN0b3ItPm1hdGNoTnRoKGVsZW1lbnQtPmNv
dW50RWxlbWVudHNCZWZvcmVXaXRoKHR5cGUpICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoTGFzdENoaWxkOgorICAgICAgICBp
ZiAoIXNlbGVjdG9yLT5wYXJzZU50aCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlm
IChlbGVtZW50LT5wYXJlbnROb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+cGFy
ZW50RWxlbWVudCgpLT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYgc2VsZWN0b3ItPm1h
dGNoTnRoKGVsZW1lbnQtPmNvdW50RWxlbWVudHNBZnRlcigpICsgMSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aExhc3RPZlR5cGU6CisgICAgICAgIGlm
ICghc2VsZWN0b3ItPnBhcnNlTnRoKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYg
KGVsZW1lbnQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdHlwZSA9IGVsZW1lbnQtPmVsZW1lbnQoKS0+dGFnUU5hbWUoKTsKKyAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCktPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4o
KSAmJiBzZWxlY3Rvci0+bWF0Y2hOdGgoZWxlbWVudC0+Y291bnRFbGVtZW50c0FmdGVyV2l0aCh0
eXBlKSArIDEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb1RhcmdldDoKKyAgICAgICAgaWYgKGVsZW1lbnQtPmVsZW1lbnQoKSA9PSBlbGVt
ZW50LT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MaW5rOgorICAgICAg
ICAvLyA6dmlzaXRlZCBhbmQgOmxpbmsgbWF0Y2hlcyBhcmUgc2VwYXJhdGVkIGxhdGVyIHdoZW4g
YXBwbHlpbmcgdGhlIHN0eWxlLiBIZXJlIGJvdGggY2xhc3NlcyBtYXRjaCBhbGwgbGlua3MuLi4K
KyAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmVsZW1lbnQoKS0+aXNMaW5rKCk7CisgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZDoKKyAgICAgICAgLy8gLi4uZXhjZXB0IGlmIDp2aXNp
dGVkIG1hdGNoaW5nIGlzIGRpc2FibGVkIGZvciBhbmNlc3Rvci9zaWJsaW5nIG1hdGNoaW5nLgor
CisgICAgICAgIC8vIEZJWE1FOiB2aXNpdGVkIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgorICAgICAg
ICByZXR1cm4gZWxlbWVudC0+ZWxlbWVudCgpLT5pc0xpbmsoKTsKKyAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9FbmFibGVkOgorICAgICAgICBpZiAoZWxlbWVudCAmJiAoZWxlbWVudC0+ZWxl
bWVudCgpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0
aW9uVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGdyb3VwVGFnKSkpCisgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudC0+ZWxlbWVudCgpLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9EaXNhYmxlZDoKKyAgICAg
ICAgaWYgKGVsZW1lbnQgJiYgKGVsZW1lbnQtPmVsZW1lbnQoKS0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShvcHRncm91cFRhZykpKQorICAgICAgICAgICAgcmV0dXJuICFlbGVtZW50LT5lbGVtZW50
KCktPmlzRW5hYmxlZEZvcm1Db250cm9sKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NoZWNrZWQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZWxl
bWVudCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdo
IFdpbklFIGFsbG93cyBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlIHRvIGNvLWV4aXN0LCB0aGUg
Q1NTIHNlbGVjdG9yIHNwZWMgc2F5cyB0aGF0CisgICAgICAgICAgICAvLyB5b3UgY2FuJ3QgYmUg
Ym90aCBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlLiBXZSB3aWxsIGJlaGF2ZSBsaWtlIFdpbklF
IGJlaGluZCB0aGUgc2NlbmVzIGFuZCBqdXN0CisgICAgICAgICAgICAvLyBvYmV5IHRoZSBDU1Mg
c3BlYyBoZXJlIGluIHRoZSB0ZXN0IGZvciBtYXRjaGluZyB0aGUgcHNldWRvLgorICAgICAgICAg
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+ZWxlbWVudCgpLT50
b0lucHV0RWxlbWVudCgpOworICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVs
ZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAhaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJt
aW5hdGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykgJiYgdG9IVE1MT3B0aW9uRWxlbWVudChlbGVt
ZW50LT5lbGVtZW50KCkpLT5zZWxlY3RlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9JbmRldGVybWluYXRlOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisjaWYgRU5BQkxFKFBST0dSRVNTX0VMRU1FTlQpCisg
ICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShwcm9ncmVzc1RhZykpIHsKKyAgICAg
ICAgICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBwcm9ncmVzcyA9IHN0YXRpY19jYXN0PEhU
TUxQcm9ncmVzc0VsZW1lbnQqPihlbGVtZW50LT5lbGVtZW50KCkpOworICAgICAgICAgICAgICAg
IGlmIChwcm9ncmVzcyAmJiAhcHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisjZW5kaWYKKyAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IGVsZW1lbnQtPmVsZW1lbnQoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChp
bnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKworYm9vbCBDb250ZW50U2VsZWN0b3JEYXRh
TGlzdDo6bWF0Y2hlcyhjb25zdCBDb250ZW50U2VsZWN0b3JDaGVja2VyJiBzZWxlY3RvckNoZWNr
ZXIsIFJlaWZpZWRFbGVtZW50KiB0YXJnZXRFbGVtZW50KSBjb25zdAoreworICAgIEFTU0VSVCh0
YXJnZXRFbGVtZW50KTsKKworICAgIHVuc2lnbmVkIHNlbGVjdG9yQ291bnQgPSBtX3NlbGVjdG9y
cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlbGVjdG9yQ291bnQ7ICsr
aSkgeworICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2VyLmNoZWNrQ29udGVudFNlbGVjdG9yKG1f
c2VsZWN0b3JzW2ldLnNlbGVjdG9yLCB0YXJnZXRFbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogQ29udGVudFNlbGVjdG9y
UXVlcnk6OkNvbnRlbnRTZWxlY3RvclF1ZXJ5KGNvbnN0IEluc2VydGlvblBvaW50KiBpbnNlcnRp
b25Qb2ludCkKICAgICA6IG1faW5zZXJ0aW9uUG9pbnQoaW5zZXJ0aW9uUG9pbnQpCiAgICAgLCBt
X3NlbGVjdG9yQ2hlY2tlcihpbnNlcnRpb25Qb2ludC0+ZG9jdW1lbnQoKSwgIWluc2VydGlvblBv
aW50LT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkKQEAgLTU4LDcgKzMxNCw3IEBAIGJvb2wg
Q29udGVudFNlbGVjdG9yUXVlcnk6OmlzVmFsaWRTZWxlY3RvcigpIGNvbnN0CiAgICAgcmV0dXJu
IG1faXNWYWxpZFNlbGVjdG9yOwogfQogCi1ib29sIENvbnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRj
aGVzKE5vZGUqIG5vZGUpIGNvbnN0Citib29sIENvbnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVz
KFJlaWZpZWROb2RlKiBub2RlKSBjb25zdAogewogICAgIEFTU0VSVChub2RlKTsKICAgICBpZiAo
IW5vZGUpCkBAIC03NSw3ICszMzEsNyBAQCBib29sIENvbnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRj
aGVzKE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtX3NlbGVjdG9ycy5tYXRjaGVzKG1f
c2VsZWN0b3JDaGVja2VyLCB0b0VsZW1lbnQobm9kZSkpOworICAgIHJldHVybiBtX3NlbGVjdG9y
cy5tYXRjaGVzKG1fc2VsZWN0b3JDaGVja2VyLCB0b1JlaWZpZWRFbGVtZW50KG5vZGUpKTsKIH0K
IAogc3RhdGljIGJvb2wgdmFsaWRhdGVTdWJTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsZWN0b3Ip
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JR
dWVyeS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnku
aAppbmRleCA5NGZhM2VmY2NmM2Y5ZDcyZTk3NDc3NWUyZDJkMzE0MGQxM2NiMzRlLi5iMjAxMmJi
ZWQ2Nzg3YjRmN2VkYzM1MzQzNmYxYTNjNWE3OTlmM2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmgKQEAgLTQzLDI1ICs0Myw3NiBA
QCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBJbnNlcnRpb25Qb2ludDsKIAor
Y2xhc3MgUmVpZmllZE5vZGUgeworcHVibGljOgorICAgIFJlaWZpZWROb2RlKE5vZGUqIHBhcmVu
dCwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBjaGlsZHJlbiwgaW50IG50aENoaWxkKTsK
KworICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG5vZGUoKS0+ZG9jdW1l
bnQoKTsgfQorICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuW21fbnRo
Q2hpbGRdLmdldCgpOyB9CisgICAgTm9kZSogcGFyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFyZW50Tm9kZTsgfQorCisgICAgYm9vbCBpc0VsZW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4g
bm9kZSgpLT5pc0VsZW1lbnROb2RlKCk7IH0KKworcHJvdGVjdGVkOgorICAgIE5vZGUqIG1fcGFy
ZW50Tm9kZTsKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbV9jaGlsZHJlbjsKKyAgICBpbnQg
bV9udGhDaGlsZDsKK307CisKK2NsYXNzIFJlaWZpZWRFbGVtZW50IDogcHVibGljIFJlaWZpZWRO
b2RlIHsKK3B1YmxpYzoKKyAgICBFbGVtZW50KiBwYXJlbnRFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gV2ViQ29yZTo6dG9FbGVtZW50KHBhcmVudE5vZGUoKSk7IH0KKyAgICBFbGVtZW50KiBlbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gV2ViQ29yZTo6dG9FbGVtZW50KG5vZGUoKSk7IH0KKworICAg
IGJvb2wgaGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7IHJldHVy
biBub2RlKCktPmhhc1RhZ05hbWUobmFtZSk7IH0KKworICAgIGJvb2wgaXNGaXJzdENoaWxkKCkg
Y29uc3Q7CisgICAgYm9vbCBpc0xhc3RDaGlsZCgpIGNvbnN0OworICAgIGJvb2wgaXNGaXJzdE9m
VHlwZShjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdDsKKyAgICBib29sIGlzTGFzdE9m
VHlwZShjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdDsKKyAgICBpbnQgY291bnRFbGVt
ZW50c0JlZm9yZSgpIGNvbnN0OworICAgIGludCBjb3VudEVsZW1lbnRzQWZ0ZXIoKSBjb25zdDsK
KyAgICBpbnQgY291bnRFbGVtZW50c0JlZm9yZVdpdGgoY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlw
ZSkgY29uc3Q7CisgICAgaW50IGNvdW50RWxlbWVudHNBZnRlcldpdGgoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdHlwZSkgY29uc3Q7Cit9OworCitjbGFzcyBDb250ZW50U2VsZWN0b3JDaGVja2VyIDog
cHVibGljIFNlbGVjdG9yQ2hlY2tlciB7CitwdWJsaWM6CisgICAgQ29udGVudFNlbGVjdG9yQ2hl
Y2tlcihEb2N1bWVudCosIGJvb2wgc3RyaWN0UGFyc2luZyk7CisKKyAgICBib29sIGNoZWNrQ29u
dGVudFNlbGVjdG9yKENTU1NlbGVjdG9yKiwgUmVpZmllZEVsZW1lbnQqKSBjb25zdDsKK3ByaXZh
dGU6CisgICAgYm9vbCBjaGVja09uZVBzZXVkb0NsYXNzU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBS
ZWlmaWVkRWxlbWVudCopIGNvbnN0OworfTsKKworY2xhc3MgQ29udGVudFNlbGVjdG9yRGF0YUxp
c3QgOiBwdWJsaWMgU2VsZWN0b3JEYXRhTGlzdCB7CitwdWJsaWM6CisgICAgYm9vbCBtYXRjaGVz
KGNvbnN0IENvbnRlbnRTZWxlY3RvckNoZWNrZXImLCBSZWlmaWVkRWxlbWVudCopIGNvbnN0Owor
fTsKKwogY2xhc3MgQ29udGVudFNlbGVjdG9yUXVlcnkgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENvbnRlbnRTZWxlY3RvclF1ZXJ5KTsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb250ZW50
U2VsZWN0b3JRdWVyeShjb25zdCBJbnNlcnRpb25Qb2ludCopOwogCiAgICAgYm9vbCBpc1ZhbGlk
U2VsZWN0b3IoKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXMoTm9kZSopIGNvbnN0OworICAgIGJv
b2wgbWF0Y2hlcyhSZWlmaWVkTm9kZSopIGNvbnN0OwogcHJpdmF0ZToKICAgICBib29sIHZhbGlk
YXRlU2VsZWN0b3JMaXN0KCk7CiAKICAgICBjb25zdCBJbnNlcnRpb25Qb2ludCogbV9pbnNlcnRp
b25Qb2ludDsKLSAgICBTZWxlY3RvckRhdGFMaXN0IG1fc2VsZWN0b3JzOworICAgIENvbnRlbnRT
ZWxlY3RvckRhdGFMaXN0IG1fc2VsZWN0b3JzOwogICAgIENTU1NlbGVjdG9yTGlzdCBtX3NlbGVj
dG9yTGlzdDsKLSAgICBTZWxlY3RvckNoZWNrZXIgbV9zZWxlY3RvckNoZWNrZXI7CisgICAgQ29u
dGVudFNlbGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKICAgICBib29sIG1faXNWYWxp
ZFNlbGVjdG9yOwogfTsKIAoraW5saW5lIFJlaWZpZWRFbGVtZW50KiB0b1JlaWZpZWRFbGVtZW50
KFJlaWZpZWROb2RlKiBub2RlKQoreworICAgIEFTU0VSVCghbm9kZSB8fCBub2RlLT5pc0VsZW1l
bnROb2RlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZWlmaWVkRWxlbWVudCo+KG5vZGUp
OwogfQogCi0KK30KIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165525</attachid>
            <date>2012-09-24 22:52:37 -0700</date>
            <delta_ts>2012-09-25 01:29:19 -0700</delta_ts>
            <desc>WIP including other patches</desc>
            <filename>bug-96990-20120925145157.patch</filename>
            <type>text/plain</type>
            <size>35352</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk2MGI5MzBmYjc3YTA2
NWJlNzNjYjNlODFlZWM1N2M3NjYwZTk3My4uNmM2MWU1NDg0NTdhMDhlMjA3NjAzYTZkYjM1MDkz
NzMxNTkyNzQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTA5LTIwICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIENvbnRl
bnRTZWxlY3RvclF1ZXJ5IHdvcmsgd2hlbiBhIG5vZGUgUE9PTCBpcyB1c2VkIGluc3RlYWQgb2Yg
bm9kZSdzIHJlYWwgc2libGluZ3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05Njk5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdoZW4gd2UgaW1wbGVtZW50IGNvbnRlbnQgcmVwcm9qZWN0aW9uIGluIFNo
YWRvdyBET00sIHdlIGhhdmUgdG8gdXNlIGEgbm9kZSBwb29sIGFzIHNpYmxpbmdzCisgICAgICAg
IGluc3RlYWQgb2Ygbm9kZSdzIHJlYWwgc2libGluZ3MuIFNlbGVjdG9yQ2hlY2tlciBzaG91bGQg
YmUgYWJsZSB0byBoYW5kbGUgaXQgYXMgd2VsbC4KKworICAgICAgICBXZSBpbnRyb2R1Y2UgU2Vs
ZWN0b3JDaGVja2luZ1N0cmF0ZWd5IGFzIGEgdGVtcGxhdGUgYXJndW1lbnQgb2YgY2hlY2tPbmVT
ZWxlY3RvciB0byBoYW5kbGUgdGhpcy4KKyAgICAgICAgVGhlIERlZmF1bHRTZWxlY3RvckNoZWNr
aW5nU3RyYXRlZ3kgaXMgdGhlIHNhbWUgYXMgZXhpc3RpbmcgYWxnb3JpdGhtLiBDb250ZW50U2Vs
ZWN0b3JDaGVja2luZ1N0cmF0ZWd5CisgICAgICAgIGlzIGEgbmV3IGFsZ29yaXRobSB0byByZW5k
ZXIgbm9kZSBwb29sIGFzIHNpYmxpbmdzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXhpc3Rp
bmcgdGVzdHMgc2hvdWxkIGNvdmVyLgorCisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmVTZWxlY3RvcldpdGhTdHJhdGVneSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZh
dWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojppc0ZpcnN0T2ZUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmlzTGFzdE9mVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWZhdWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojpjb3VudEVs
ZW1lbnRzQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5n
U3RyYXRlZ3k6OmNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RGVmYXVsdFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6Y291bnRFbGVtZW50c0FmdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50RWxl
bWVudHNPZlR5cGVBZnRlcik6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAg
ICAgICAoU2VsZWN0b3JDaGVja2VyKToKKyAgICAgICAgKERlZmF1bHRTZWxlY3RvckNoZWNraW5n
U3RyYXRlZ3kpOiBJbXBsZW1lbnRzIHRoZSBzYW1lIGFsZ29yaXRobSB3aGljaCB3YXMgd3JpdHRl
biBpbiBpbmxpbmUgYmVmb3JlLgorICAgICAgICBFeHRyYWN0cyBzZXZlcmFsIG1ldGhvZHMgdG8g
Y2hlY2sgYW4gZWxlbWVudCBpcyB0aGUgZmlyc3QgY2hpbGQsIGV0Yy4KKyAgICAgICAgKFdlYkNv
cmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OkRlZmF1bHRTZWxlY3RvckNoZWNr
aW5nU3RyYXRlZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNlbGVjdG9yQ2hlY2tpbmdT
dHJhdGVneTo6aXNGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTZWxlY3Rv
ckNoZWNraW5nU3RyYXRlZ3k6OmlzTGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2VsZWN0aW9uc1RvKToKKyAgICAgICAg
KiBodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxl
Y3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tDb250ZW50U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9y
RGF0YUxpc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9y
RGF0YUxpc3Q6Om1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hl
Y2tpbmdTdHJhdGVneTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneSk6IFVzZXMgYSBu
b2RlIHBvb2wgYXMKKyAgICAgICAgZWxlbWVudCdzIHNpYmxpbmdzLgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6aXNGaXJzdENoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmlzTGFzdENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6Omlz
Rmlyc3RPZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdT
dHJhdGVneTo6aXNMYXN0T2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3Rv
ckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNCZWZvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6Y291bnRFbGVtZW50c0FmdGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50
RWxlbWVudHNPZlR5cGVCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9y
Q2hlY2tpbmdTdHJhdGVneTo6Y291bnRFbGVtZW50c09mVHlwZUFmdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRTZWxlY3RvclF1ZXJ5OjpDb250ZW50U2VsZWN0b3JRdWVyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaDoKKyAgICAgICAgKENvbnRlbnRTZWxl
Y3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb250ZW50U2VsZWN0
b3JEYXRhTGlzdCk6CisgICAgICAgIChDb250ZW50U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmVsZW1l
bnQpOgorICAgICAgICAoQ29udGVudFNlbGVjdG9yUXVlcnkpOgorCiAyMDEyLTA5LTI0ICBQYXRy
aWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBTdHJp
bmc6Om9wZXJhdG9yKz0oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRl
eCBhYWU0N2UyY2Y5MzY5ODU0ZjVjYTE3ZDBlYjc3MDZiMDViMjMwNjM2Li4xY2Q0ZWY1YjgxODJl
ZDYxMzAzZmM2NDU4ZDgwZDE0ODkzNzhmNzgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKKyNpbmNsdWRlICJDb250ZW50U2VsZWN0b3JR
dWVyeS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNo
ZWV0Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgpAQCAtNDM5LDcg
KzQ0MCw4IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3Rvcihj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCiAvLyAqIFNlbGVjdG9yRmFpbHNMb2NhbGx5ICAg
ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQgZQogLy8gKiBTZWxlY3RvckZh
aWxzQWxsU2libGluZ3MgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFueSBzaWJsaW5n
IG9mIGUKIC8vICogU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgIC0gdGhlIHNlbGVjdG9yIGZhaWxz
IGZvciBlIGFuZCBhbnkgc2libGluZyBvciBhbmNlc3RvciBvZiBlCi1TZWxlY3RvckNoZWNrZXI6
OlNlbGVjdG9yTWF0Y2ggU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKGNvbnN0IFNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9v
bCYgaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgQ2hl
Y2tpbmdDb250ZXh0PgorU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFBzZXVk
b0lkJiBkeW5hbWljUHNldWRvLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0
CiB7CiAgICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoCiAgICAgaWYgKCFjaGVja09u
ZVNlbGVjdG9yKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG8sIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50
cykpCkBAIC00NTMsNyArNDU1LDcgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWMKICAgICBpZiAo
IWhpc3RvcnlTZWxlY3RvcikKICAgICAgICAgcmV0dXJuIFNlbGVjdG9yTWF0Y2hlczsKIAotICAg
IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IG5leHRDb250ZXh0KGNvbnRleHQpOworICAgIENoZWNr
aW5nQ29udGV4dCBuZXh0Q29udGV4dChjb250ZXh0KTsKICAgICBuZXh0Q29udGV4dC5zZWxlY3Rv
ciA9IGhpc3RvcnlTZWxlY3RvcjsKIAogICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6
U3ViU2VsZWN0b3IpIHsKQEAgLTcwMSw3ICs3MDMsOCBAQCBzdGF0aWMgYm9vbCBhbnlBdHRyaWJ1
dGVNYXRjaGVzKEVsZW1lbnQqIGVsZW1lbnQsIENTU1NlbGVjdG9yOjpNYXRjaCBtYXRjaCwgY29u
cwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25l
U2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFBzZXVkb0lk
JiBkeW5hbWljUHNldWRvLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja2luZ0NvbnRleHQ+Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFBzZXVkb0lk
JiBkeW5hbWljUHNldWRvLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0CiB7
CiAgICAgRWxlbWVudCogY29uc3QgJiBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50OwogICAgIENT
U1NlbGVjdG9yKiBjb25zdCAmIHNlbGVjdG9yID0gY29udGV4dC5zZWxlY3RvcjsKQEAgLTczOCw3
ICs3NDEsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAgICAgICAgICAgaWYgKCFzZWxl
Y3Rvckxpc3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCBzdWJDb250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAg
Q2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCk7CiAgICAgICAgICAgICBzdWJDb250
ZXh0LmlzU3ViU2VsZWN0b3IgPSB0cnVlOwogICAgICAgICAgICAgZm9yIChzdWJDb250ZXh0LnNl
bGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJDb250ZXh0LnNlbGVjdG9yOyBzdWJD
b250ZXh0LnNlbGVjdG9yID0gc3ViQ29udGV4dC5zZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gOm5vdCBjYW5ub3QgbmVzdC4gSSBkb24ndCByZWFsbHkga25vdyB3
aHkgdGhpcyBpcyBhCkBAIC03OTIsOSArNzk1LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFAK
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RDaGlsZDoKICAgICAgICAgICAg
IC8vIGZpcnN0LWNoaWxkIG1hdGNoZXMgdGhlIGZpcnN0IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVu
dAogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50
LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHRydWU7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBET01UcmF2ZXJzYWxTdHJhdGVn
eTxDaGVja2luZ0NvbnRleHQ+Ojppc0ZpcnN0Q2hpbGQoY29udGV4dCwgZWxlbWVudCk7CiAgICAg
ICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8g
Y29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHls
ZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDogZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5y
ZW5kZXJTdHlsZSgpOwpAQCAtODA5LDE0ICs4MTAsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwg
UAogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdE9mVHlwZToKICAgICAgICAg
ICAgIC8vIGZpcnN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlw
ZQogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZp
ZWROYW1lJiB0eXBlID0gZWxlbWVudC0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5n
KCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBET01UcmF2ZXJzYWxTdHJhdGVneTxDaGVj
a2luZ0NvbnRleHQ+Ojppc0ZpcnN0T2ZUeXBlKGNvbnRleHQsIGVsZW1lbnQsIGVsZW1lbnQtPnRh
Z1FOYW1lKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5nU3R5bGUp
IHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4
dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IGVsZW1lbnQtPnBh
cmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVu
dFN0eWxlKQpAQCAtODI4LDcgKzgyMiw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZVNlbGVjdG9yKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQCiAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RDaGlsZDoKICAgICAgICAgICAgIC8vIGxh
c3QtY2hpbGQgbWF0Y2hlcyB0aGUgbGFzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKICAgICAg
ICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBwYXJlbnRFbGVtZW50LT5pc0Zp
bmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYgIWVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygp
OworICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hl
ZFBhcnNpbmdDaGlsZHJlbigpICYmIERPTVRyYXZlcnNhbFN0cmF0ZWd5PENoZWNraW5nQ29udGV4
dD46OmlzTGFzdENoaWxkKGNvbnRleHQsIGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmICht
X21vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0
eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1l
bnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CkBAIC04NTAsMTkg
Kzg0NCwxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRy
ZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlbGVtZW50LT50YWdRTmFtZSgpOwotICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVt
ZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJs
aW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlw
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJldHVy
biBET01UcmF2ZXJzYWxTdHJhdGVneTxDaGVja2luZ0NvbnRleHQ+Ojppc0xhc3RPZlR5cGUoY29u
dGV4dCwgZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seUNoaWxk
OgogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJl
bnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSAhZWxlbWVu
dC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOwotICAgICAgICAgICAgICAgIGJvb2wgb25seUNo
aWxkID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxk
cmVuKCkgJiYgIWVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOwotCisgICAgICAgICAgICAg
ICAgYm9vbCBmaXJzdENoaWxkID0gRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0
Pjo6aXNGaXJzdENoaWxkKGNvbnRleHQsIGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGJvb2wg
b25seUNoaWxkID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2lu
Z0NoaWxkcmVuKCkgJiYgRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6aXNM
YXN0Q2hpbGQoY29udGV4dCwgZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9
PSBSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hp
bGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBl
bGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBhcmVu
dFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKQEAgLTg5MCwzMyArODc4LDE0
IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNvbnN0IFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdHlwZSA9IGVsZW1lbnQtPnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAg
ICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNFbGVtZW50
U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2li
bGluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5
cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVt
ZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5l
eHRFbGVtZW50U2libGluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLT5o
YXNUYWdOYW1lKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6aXNG
aXJzdE9mVHlwZShjb250ZXh0LCBlbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKSAmJiBET01U
cmF2ZXJzYWxTdHJhdGVneTxDaGVja2luZ0NvbnRleHQ+Ojppc0xhc3RPZlR5cGUoY29udGV4dCwg
ZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoQ2hpbGQ6CiAgICAg
ICAgICAgICBpZiAoIXNlbGVjdG9yLT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJl
bnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxl
bWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVu
dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcyA9IHNpYmxp
bmctPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
cyA/IHMtPmNoaWxkSW5kZXgoKSA6IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gaW5kZXg7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgICAgIGludCBj
b3VudCA9IDEgKyBET01UcmF2ZXJzYWxTdHJhdGVneTxDaGVja2luZ0NvbnRleHQ+Ojpjb3VudEVs
ZW1lbnRzQmVmb3JlKGNvbnRleHQsIGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChtX21v
ZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxl
IDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQ
YXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CkBAIC05MzQsMTIgKzkw
Myw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNvbnN0IFNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQCiAgICAgICAgICAgICBpZiAoIXNlbGVjdG9y
LT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHR5cGUgPSBlbGVtZW50LT50YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgIGZvciAo
Y29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmco
KTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGludCBjb3VudCA9IDEgKyBET01UcmF2ZXJzYWxTdHJhdGVneTxDaGVja2luZ0Nv
bnRleHQ+Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKGNvbnRleHQsIGVsZW1lbnQsIGVsZW1l
bnQtPnRhZ1FOYW1lKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5n
U3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
Y29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVu
dEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRT
dHlsZSkKQEAgLTk2MSw5ICs5MjUsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVT
ZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNo
ZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25z
dCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxp
bmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkKLSAgICAgICAgICAg
ICAgICAgICAgKytjb3VudDsKKyAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgRE9NVHJh
dmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6Y291bnRFbGVtZW50c0FmdGVyKGNvbnRl
eHQsIGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2hOdGgoY291
bnQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAg
LTk3OSwxMiArOTQxLDggQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3Io
Y29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFAKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2lu
Z0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHR5cGUgPSBlbGVtZW50LT50YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJs
aW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICArK2NvdW50OwotICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGludCBjb3VudCA9IDEgKyBET01UcmF2ZXJzYWxTdHJhdGVneTxDaGVja2luZ0NvbnRleHQ+Ojpj
b3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoY29udGV4dCwgZWxlbWVudCwgZWxlbWVudC0+dGFnUU5h
bWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3VudCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtOTk1LDcg
Kzk1Myw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNvbnN0IFNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55OgogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCk7CiAgICAg
ICAgICAgICAgICAgc3ViQ29udGV4dC5pc1N1YlNlbGVjdG9yID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkt
PmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NT
ZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxlY3RvcikpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoZWNrU2VsZWN0b3Ioc3ViQ29udGV4dCwgZHluYW1pY1BzZXVkbywgaGFzVW5r
bm93blBzZXVkb0VsZW1lbnRzKSA9PSBTZWxlY3Rvck1hdGNoZXMpCkBAIC0xMzkyLDQgKzEzNTAs
MTkwIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVTZWxlY3RvclNjb3Blcyhjb25z
dCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3Rl
bXBsYXRlPD4KK2lubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2FsU3RyYXRl
Z3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dD46OmlzRmlyc3RDaGls
ZChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgRWxlbWVu
dCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gIWVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxp
bmcoKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpET01U
cmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
Pjo6aXNMYXN0Q2hpbGQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCYsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgcmV0dXJuICFlbGVtZW50LT5uZXh0RWxl
bWVudFNpYmxpbmcoKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0Pjo6aXNGaXJzdE9mVHlwZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0JiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
dHlwZSkKK3sKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0
RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50
U2libGluZygpKSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVt
cGxhdGU8PgoraW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVn
eTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Pjo6aXNMYXN0T2ZUeXBl
KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQoreworICAgIGZvciAoY29uc3Qg
RWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2li
bGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAg
ICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBp
bnQgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6
OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Pjo6Y291bnRFbGVtZW50c0JlZm9yZShjb25zdCBTZWxl
Y3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgRWxlbWVudCogZWxlbWVudCkK
K3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9
IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNp
YmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAgICAgICBSZW5kZXJTdHlsZSog
cyA9IHNpYmxpbmctPnJlbmRlclN0eWxlKCk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gcyA/
IHMtPmNoaWxkSW5kZXgoKSA6IDA7CisgICAgICAgIGlmIChpbmRleCkgeworICAgICAgICAgICAg
Y291bnQgKz0gaW5kZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
b3VudCsrOworICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKwordGVtcGxhdGU8PgoraW5s
aW5lIGludCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ+Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3Jl
KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQoreworICAgIGludCBjb3VudCA9
IDA7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNF
bGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNFbGVt
ZW50U2libGluZygpKSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQor
ICAgICAgICAgICAgKytjb3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK3Rl
bXBsYXRlPD4KK2lubGluZSBpbnQgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVn
eTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Pjo6Y291bnRFbGVtZW50
c0FmdGVyKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBF
bGVtZW50KiBlbGVtZW50KQoreworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChjb25zdCBF
bGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7
IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkKKyAgICAgICAgKytjb3Vu
dDsKKworICAgIHJldHVybiBjb3VudDsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIGludCBTZWxl
Y3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JDaGVja2luZ0NvbnRleHQ+Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoY29uc3QgU2VsZWN0
b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3Ig
KGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsg
c2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7CisgICAg
ICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgKytjb3VudDsK
KyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpT
ZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbD46OmlzRmlyc3RDaGlsZChjb25zdCBT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sJiBjb250
ZXh0LCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4g
PiYgc2libGluZ3MgPSBjb250ZXh0LnNpYmxpbmdzOworICAgIGZvciAoaW50IGkgPSBjb250ZXh0
Lm50aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJs
aW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojppc0xhc3RDaGlsZChjb25zdCBTZWxlY3Rv
ckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sJiBjb250ZXh0LCBF
bGVtZW50KiBlbGVtZW50KQoreworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2li
bGluZ3MgPSBjb250ZXh0LnNpYmxpbmdzOworICAgIGZvciAoc2l6ZV90IGkgPSBjb250ZXh0Lm50
aCArIDE7IGkgPCBzaWJsaW5ncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoc2libGluZ3Nb
aV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8PgoraW5saW5l
IGJvb2wgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNr
ZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sPjo6aXNGaXJzdE9mVHlwZShj
b25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29s
JiBjb250ZXh0LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQor
eworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBjb250ZXh0LnNp
YmxpbmdzOworICAgIGZvciAoaW50IGkgPSBjb250ZXh0Lm50aCAtIDE7IGkgPj0gMDsgLS1pKSB7
CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgp
ICYmIHNpYmxpbmdzW2ldLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tl
cjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojppc0xhc3RPZlR5cGUoY29u
c3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbCYg
Y29udGV4dCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkKK3sK
KyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzID0gY29udGV4dC5zaWJs
aW5nczsKKyAgICBmb3IgKHNpemVfdCBpID0gY29udGV4dC5udGggKyAxOyBpIDwgc2libGluZ3Mu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ldLT5p
c0VsZW1lbnROb2RlKCkgJiYgc2libGluZ3NbaV0tPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBs
YXRlPD4KK2lubGluZSBpbnQgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sPjo6Y291
bnRFbGVtZW50c0JlZm9yZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0V2l0aE5vZGVQb29sJiBjb250ZXh0LCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBjb250ZXh0LnNpYmxpbmdzOwor
ICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChpbnQgaSA9IGNvbnRleHQubnRoIC0gMTsgaSA+
PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ldLT5pc0Vs
ZW1lbnROb2RlKCkpCisgICAgICAgICAgICArK2NvdW50OworICAgIH0KKworICAgIHJldHVybiBj
b3VudDsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIGludCBTZWxlY3RvckNoZWNrZXI6OkRPTVRy
YXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRX
aXRoTm9kZVBvb2w+Ojpjb3VudEVsZW1lbnRzQWZ0ZXIoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpT
ZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbCYgY29udGV4dCwgRWxlbWVudCogZWxl
bWVudCkKK3sKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzID0gY29u
dGV4dC5zaWJsaW5nczsKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSBj
b250ZXh0Lm50aCArIDE7IGkgPCBzaWJsaW5ncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
c2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAg
IHJldHVybiArK2NvdW50OworICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKwordGVtcGxh
dGU8PgoraW5saW5lIGludCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNl
bGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojpjb3Vu
dEVsZW1lbnRzT2ZUeXBlQmVmb3JlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVj
a2luZ0NvbnRleHRXaXRoTm9kZVBvb2wmIGNvbnRleHQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIHR5cGUpCit7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+
JiBzaWJsaW5ncyA9IGNvbnRleHQuc2libGluZ3M7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBm
b3IgKGludCBpID0gY29udGV4dC5udGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAo
c2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSAmJiBzaWJsaW5nc1tp
XS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAg
cmV0dXJuIGNvdW50OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgaW50IFNlbGVjdG9yQ2hlY2tl
cjo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5n
Q29udGV4dFdpdGhOb2RlUG9vbD46OmNvdW50RWxlbWVudHNPZlR5cGVBZnRlcihjb25zdCBTZWxl
Y3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sJiBjb250ZXh0
LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQoreworICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBjb250ZXh0LnNpYmxpbmdzOwor
ICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IGNvbnRleHQubnRoICsgMTsg
aSA8IHNpYmxpbmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBz
aWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgpICYmIHNpYmxpbmdzW2ldLT5oYXNUYWdOYW1lKHR5
cGUpKQorICAgICAgICAgICAgcmV0dXJuICsrY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNv
dW50OworfQorCit0ZW1wbGF0ZQorYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0
b3I8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbD4o
Y29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9v
bCYsIFBzZXVkb0lkJiwgYm9vbCYpIGNvbnN0OworCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmgKaW5kZXggZjE1Y2UwZDA4ZWU0MzI5OGI0MTIwNDEyY2Y3NmQ5NWFhNWJmM2MwMS4u
NDY3MDdmZThjZTVlNWYyZTI0MjFkMTg4YmRjMjI1YjhhMjQzOWRlOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXIuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNTU1NlbGVj
dG9yLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAi
TGlua0hhc2guaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0
eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU3BhY2VTcGxpdFN0cmluZy5oIgogI2luY2x1ZGUg
IlN0eWxlZEVsZW1lbnQuaCIKQEAgLTU0LDMxICs1NSw2NSBAQCBwdWJsaWM6CiAgICAgZW51bSBW
aXNpdGVkTWF0Y2hUeXBlIHsgVmlzaXRlZE1hdGNoRGlzYWJsZWQsIFZpc2l0ZWRNYXRjaEVuYWJs
ZWQgfTsKICAgICBlbnVtIE1vZGUgeyBSZXNvbHZpbmdTdHlsZSA9IDAsIENvbGxlY3RpbmdSdWxl
cywgUXVlcnlpbmdSdWxlcyB9OwogCi0gICAgc3RydWN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
IHsKKyAgICBzdHJ1Y3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHRCYXNlIHsKICAgICAgICAgLy8g
SW5pdGlhbCBzZWxlY3RvciBjb25zdHJ1Y3RvcgotICAgICAgICBTZWxlY3RvckNoZWNraW5nQ29u
dGV4dChDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIFZpc2l0ZWRNYXRj
aFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkKKyAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHRC
YXNlKENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVudCwgVmlzaXRlZE1hdGNo
VHlwZSB2aXNpdGVkTWF0Y2hUeXBlKQogICAgICAgICAgICAgOiBzZWxlY3RvcihzZWxlY3RvcikK
ICAgICAgICAgICAgICwgZWxlbWVudChlbGVtZW50KQogICAgICAgICAgICAgLCBzY29wZSgwKQog
ICAgICAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHZpc2l0ZWRNYXRjaFR5cGUpCisgICAgICAg
ICAgICAsIHBzZXVkb1N0eWxlKE5PUFNFVURPKQogICAgICAgICAgICAgLCBlbGVtZW50U3R5bGUo
MCkKICAgICAgICAgICAgICwgZWxlbWVudFBhcmVudFN0eWxlKDApCiAgICAgICAgICAgICAsIGlz
U3ViU2VsZWN0b3IoZmFsc2UpCi0gICAgICAgICAgICAsIHBzZXVkb1N0eWxlKE5PUFNFVURPKQog
ICAgICAgICB7IH0KIAogICAgICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3I7CiAgICAgICAgIEVs
ZW1lbnQqIGVsZW1lbnQ7CiAgICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlOwogICAg
ICAgICBWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGU7CisgICAgICAgIFBzZXVkb0lk
IHBzZXVkb1N0eWxlOwogICAgICAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlOwogICAgICAg
ICBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlOwogICAgICAgICBib29sIGlzU3ViU2Vs
ZWN0b3I7Ci0gICAgICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxlOworICAgIH07CisKKyAgICBzdHJ1
Y3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2luZ0NvbnRl
eHRCYXNlIHsKKyAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQoQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5
cGUpCisgICAgICAgICAgICA6IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0QmFzZShzZWxlY3Rvciwg
ZWxlbWVudCwgdmlzaXRlZE1hdGNoVHlwZSkKKyAgICAgICAgeyB9CisgICAgfTsKKworICAgIHN0
cnVjdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbCA6IHB1YmxpYyBTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dEJhc2UgeworICAgICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dFdp
dGhOb2RlUG9vbChDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9k
ZT4gPiYgcG9vbCwgaW50IG50aCwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlKQor
ICAgICAgICAgICAgOiBTZWxlY3RvckNoZWNraW5nQ29udGV4dEJhc2Uoc2VsZWN0b3IsIHRvRWxl
bWVudChwb29sW250aF0uZ2V0KCkpLCB2aXNpdGVkTWF0Y2hUeXBlKQorICAgICAgICAgICAgLCBz
aWJsaW5ncyhwb29sKQorICAgICAgICAgICAgLCBudGgobnRoKQorICAgICAgICB7IH0KKworICAg
ICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gc2libGluZ3M7CisgICAgICAgIGludCBudGg7Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CisgICAgc3RydWN0IERPTVRy
YXZlcnNhbFN0cmF0ZWd5IHsKKyAgICAgICAgc3RhdGljIGJvb2wgaXNGaXJzdENoaWxkKGNvbnN0
IENvbnRleHQmLCBFbGVtZW50Kik7CisgICAgICAgIHN0YXRpYyBib29sIGlzTGFzdENoaWxkKGNv
bnN0IENvbnRleHQmLCBFbGVtZW50Kik7CisgICAgICAgIHN0YXRpYyBib29sIGlzRmlyc3RPZlR5
cGUoY29uc3QgQ29udGV4dCYsIEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAg
ICAgIHN0YXRpYyBib29sIGlzTGFzdE9mVHlwZShjb25zdCBDb250ZXh0JiwgRWxlbWVudCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmKTsKKworICAgICAgICBzdGF0aWMgaW50IGNvdW50RWxlbWVudHNC
ZWZvcmUoY29uc3QgQ29udGV4dCYsIEVsZW1lbnQqKTsKKyAgICAgICAgc3RhdGljIGludCBjb3Vu
dEVsZW1lbnRzQWZ0ZXIoY29uc3QgQ29udGV4dCYsIEVsZW1lbnQqKTsKKyAgICAgICAgc3RhdGlj
IGludCBjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKGNvbnN0IENvbnRleHQmLCBFbGVtZW50Kiwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAgICAgICBzdGF0aWMgaW50IGNvdW50RWxlbWVudHNP
ZlR5cGVBZnRlcihjb25zdCBDb250ZXh0JiwgRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKICAgICB9OwogCiAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVu
dCosIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgPSBmYWxzZSkgY29uc3Q7Ci0gICAgU2Vs
ZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Jiwg
UHNldWRvSWQmLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0OworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoZWNraW5nQ29udGV4dD4KKyAgICBTZWxlY3Rvck1hdGNoIGNoZWNr
U2VsZWN0b3IoY29uc3QgQ2hlY2tpbmdDb250ZXh0JiwgUHNldWRvSWQmLCBib29sJiBoYXNVbmtu
b3duUHNldWRvRWxlbWVudHMpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNraW5n
Q29udGV4dD4KKyAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoY29uc3QgQ2hlY2tpbmdDb250ZXh0
JiwgUHNldWRvSWQmLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0OworCiAg
ICAgc3RhdGljIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3Iq
KTsKICAgICBib29sIGZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0OwogCkBAIC0xMTcsNyArMTUyLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBib29sIGVsZW1lbnRNYXRjaGVzU2VsZWN0b3JTY29wZXMoY29uc3QgU3R5bGVkRWxlbWVudCos
IGNvbnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgY29uc3QgSGFzaFNl
dDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKTsKIAogcHJpdmF0ZToKLSAgICBib29s
IGNoZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9J
ZCYsIGJvb2wmIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cykgY29uc3Q7CisKICAgICBib29sIGNo
ZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqLCBQc2V1ZG9JZCYgZHluYW1pY1Bz
ZXVkbykgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgaXNGcmFtZUZvY3VzZWQoY29uc3QgRWxlbWVu
dCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlz
dHJpYnV0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1
dG9yLmNwcAppbmRleCAwNzZhNzIzYzhhOTFhZmU5MzE4ODc2NTg5NGNlNzczNmRjMzY2YTAwLi42
NzQ4YjU5OTFkYjY3ZmJiMzVkZWM3OWYzNTM0ODZhNGRiZDdkZWFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKQEAgLTExNywxMCAr
MTE3LDEwIEBAIHZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2VsZWN0aW9uc1Rv
KEluc2VydGlvblBvaW50KiBpbnNlcnRpb25Qb2ludCwKICAgICAgICAgaWYgKGRpc3RyaWJ1dGVk
W2ldKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgTm9kZSogY2hpbGQgPSBwb29s
W2ldLmdldCgpOwotICAgICAgICBpZiAoIXF1ZXJ5Lm1hdGNoZXMoY2hpbGQpKQorICAgICAgICBp
ZiAoIXF1ZXJ5Lm1hdGNoZXMocG9vbCwgaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAg
ICAgICBOb2RlKiBjaGlsZCA9IHBvb2xbaV0uZ2V0KCk7CiAgICAgICAgIGRpc3RyaWJ1dGlvbi5h
cHBlbmQoY2hpbGQpOwogICAgICAgICBtX25vZGVUb0luc2VydGlvblBvaW50LmFkZChjaGlsZCwg
aW5zZXJ0aW9uUG9pbnQpOwogICAgICAgICBkaXN0cmlidXRlZFtpXSA9IHRydWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHAKaW5k
ZXggZjEyYzU5OTI1ZjdjOTMyNGY2ZmVmY2JlYjIyMzU4OTU3ZGYyMTFmMy4uMjViODQyNzA5OTU2
NGZiYWFiODgyZTk4YzAzYzlkY2I2ZTU0MDQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcApAQCAtMjksMTcgKzI5LDUzIEBA
CiAKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIK
KyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisj
aW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MUHJvZ3Jlc3NFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSW5zZXJ0aW9uUG9pbnQuaCIKICNpbmNsdWRlICJTaGFkb3dSb290
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
KworQ29udGVudFNlbGVjdG9yQ2hlY2tlcjo6Q29udGVudFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVu
dCogZG9jdW1lbnQsIGJvb2wgc3RyaWN0UGFyc2luZykKKyAgICA6IG1fc2VsZWN0b3JDaGVja2Vy
KGRvY3VtZW50LCBzdHJpY3RQYXJzaW5nKQoreworICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1v
ZGUoU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpOworfQorCitib29sIENvbnRlbnRT
ZWxlY3RvckNoZWNrZXI6OmNoZWNrQ29udGVudFNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3Rv
ciwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50IG50aCkgY29uc3QK
K3sKKyAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgYm9vbCBoYXNV
bmtub3duUHNldWRvRWxlbWVudHMgPSBmYWxzZTsKKyAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sIGNvbnRleHQoc2VsZWN0b3IsIHNpYmxpbmdz
LCBudGgsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpOworICAgIAorICAg
IHJldHVybiBtX3NlbGVjdG9yQ2hlY2tlci5jaGVja09uZVNlbGVjdG9yKGNvbnRleHQsIGR5bmFt
aWNQc2V1ZG8sIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cyk7Cit9CisKK3ZvaWQgQ29udGVudFNl
bGVjdG9yRGF0YUxpc3Q6OmluaXRpYWxpemUoY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rv
cnMpCit7CisgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWxlY3RvcnMuZmlyc3Qo
KTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkK
KyAgICAgICAgbV9zZWxlY3RvcnMuYXBwZW5kKHNlbGVjdG9yKTsKK30KKworYm9vbCBDb250ZW50
U2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyhjb25zdCBDb250ZW50U2VsZWN0b3JDaGVja2VyJiBz
ZWxlY3RvckNoZWNrZXIsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGlu
dCBudGgpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgc2VsZWN0b3JDb3VudCA9IG1fc2VsZWN0b3Jz
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VsZWN0b3JDb3VudDsgKytp
KSB7CisgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIuY2hlY2tDb250ZW50U2VsZWN0b3IobV9z
ZWxlY3RvcnNbaV0sIHNpYmxpbmdzLCBudGgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiBDb250ZW50U2VsZWN0b3JRdWVyeTo6Q29u
dGVudFNlbGVjdG9yUXVlcnkoY29uc3QgSW5zZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50KQog
ICAgIDogbV9pbnNlcnRpb25Qb2ludChpbnNlcnRpb25Qb2ludCkKICAgICAsIG1fc2VsZWN0b3JD
aGVja2VyKGluc2VydGlvblBvaW50LT5kb2N1bWVudCgpLCAhaW5zZXJ0aW9uUG9pbnQtPmRvY3Vt
ZW50KCktPmluUXVpcmtzTW9kZSgpKQogewotICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUo
U2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpOwotCiAgICAgaWYgKGluc2VydGlvblBv
aW50LT5zZWxlY3QoKS5pc051bGwoKSB8fCBpbnNlcnRpb25Qb2ludC0+c2VsZWN0KCkuaXNFbXB0
eSgpKSB7CiAgICAgICAgIG1faXNWYWxpZFNlbGVjdG9yID0gdHJ1ZTsKICAgICAgICAgcmV0dXJu
OwpAQCAtNTgsMTQgKzk0LDE0IEBAIGJvb2wgQ29udGVudFNlbGVjdG9yUXVlcnk6OmlzVmFsaWRT
ZWxlY3RvcigpIGNvbnN0CiAgICAgcmV0dXJuIG1faXNWYWxpZFNlbGVjdG9yOwogfQogCi1ib29s
IENvbnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVzKE5vZGUqIG5vZGUpIGNvbnN0Citib29sIENv
bnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYg
c2libGluZ3MsIGludCBudGgpIGNvbnN0CiB7CisgICAgTm9kZSogbm9kZSA9IHNpYmxpbmdzW250
aF0uZ2V0KCk7CisKICAgICBBU1NFUlQobm9kZSk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpID09IG1faW5zZXJ0
aW9uUG9pbnQtPnNoYWRvd1Jvb3QoKS0+aG9zdCgpKTsKLQogICAgIGlmIChtX2luc2VydGlvblBv
aW50LT5zZWxlY3QoKS5pc051bGwoKSB8fCBtX2luc2VydGlvblBvaW50LT5zZWxlY3QoKS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC03NSw3ICsxMTEsNyBAQCBib29sIENv
bnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVzKE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgaWYgKCFu
b2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVy
biBtX3NlbGVjdG9ycy5tYXRjaGVzKG1fc2VsZWN0b3JDaGVja2VyLCB0b0VsZW1lbnQobm9kZSkp
OworICAgIHJldHVybiBtX3NlbGVjdG9ycy5tYXRjaGVzKG1fc2VsZWN0b3JDaGVja2VyLCBzaWJs
aW5ncywgbnRoKTsKIH0KIAogc3RhdGljIGJvb2wgdmFsaWRhdGVTdWJTZWxlY3RvcihDU1NTZWxl
Y3Rvciogc2VsZWN0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9D
b250ZW50U2VsZWN0b3JRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVu
dFNlbGVjdG9yUXVlcnkuaAppbmRleCA5NGZhM2VmY2NmM2Y5ZDcyZTk3NDc3NWUyZDJkMzE0MGQx
M2NiMzRlLi4yYzcxMGE1ODUyZTkyZDc2ODgyYzdjMjA3NTBiZmQyNmRhMmFhMDNiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmgKQEAg
LTQzLDI1ICs0Myw0MSBAQCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBJbnNl
cnRpb25Qb2ludDsKIAorY2xhc3MgQ29udGVudFNlbGVjdG9yQ2hlY2tlciB7CitwdWJsaWM6Cisg
ICAgQ29udGVudFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCosIGJvb2wgc3RyaWN0UGFyc2luZyk7
CisKKyAgICBib29sIGNoZWNrQ29udGVudFNlbGVjdG9yKENTU1NlbGVjdG9yKiwgY29uc3QgVmVj
dG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50IG50aE5vZGUpIGNvbnN0OworcHJpdmF0
ZToKKyAgICBTZWxlY3RvckNoZWNrZXIgbV9zZWxlY3RvckNoZWNrZXI7Cit9OworCitjbGFzcyBD
b250ZW50U2VsZWN0b3JEYXRhTGlzdCB7CitwdWJsaWM6CisgICAgdm9pZCBpbml0aWFsaXplKGNv
bnN0IENTU1NlbGVjdG9yTGlzdCYpOworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBDb250ZW50U2Vs
ZWN0b3JDaGVja2VyJiwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50
IG50aE5vZGUpIGNvbnN0OworCitwcml2YXRlOgorICAgIFZlY3RvcjxDU1NTZWxlY3Rvcio+IG1f
c2VsZWN0b3JzOworfTsKKwogY2xhc3MgQ29udGVudFNlbGVjdG9yUXVlcnkgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvbnRlbnRTZWxlY3RvclF1ZXJ5KTsKIHB1YmxpYzoKICAgICBleHBs
aWNpdCBDb250ZW50U2VsZWN0b3JRdWVyeShjb25zdCBJbnNlcnRpb25Qb2ludCopOwogCiAgICAg
Ym9vbCBpc1ZhbGlkU2VsZWN0b3IoKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXMoTm9kZSopIGNv
bnN0OworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxp
bmdzLCBpbnQgbnRoTm9kZSkgY29uc3Q7CiBwcml2YXRlOgogICAgIGJvb2wgdmFsaWRhdGVTZWxl
Y3Rvckxpc3QoKTsKIAogICAgIGNvbnN0IEluc2VydGlvblBvaW50KiBtX2luc2VydGlvblBvaW50
OwotICAgIFNlbGVjdG9yRGF0YUxpc3QgbV9zZWxlY3RvcnM7CisgICAgQ29udGVudFNlbGVjdG9y
RGF0YUxpc3QgbV9zZWxlY3RvcnM7CiAgICAgQ1NTU2VsZWN0b3JMaXN0IG1fc2VsZWN0b3JMaXN0
OwotICAgIFNlbGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKKyAgICBDb250ZW50U2Vs
ZWN0b3JDaGVja2VyIG1fc2VsZWN0b3JDaGVja2VyOwogICAgIGJvb2wgbV9pc1ZhbGlkU2VsZWN0
b3I7CiB9OwogCiB9CiAKLQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
Q1NTL3BzZXVkb2NsYXNzLXNlbGVjdG9ycy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9DU1MvcHNl
dWRvY2xhc3Mtc2VsZWN0b3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmViZmJmY2NjZDIzNTUyNWZmNDFk
YjM0MjdjNjQwODQyODNhZjhjNAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMv
Q1NTL3BzZXVkb2NsYXNzLXNlbGVjdG9ycy5odG1sCkBAIC0wLDAgKzEsNDUgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKworPGRpdiBpZD0idGVzdC10YXJnZXQiPgorICAgIDxk
aXY+CisgICAgICAgIDxkaXY+PC9kaXY+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgICA8c3Bh
bj48L3NwYW4+CisgICAgICAgICAgICA8c3Bhbj48L3NwYW4+CisgICAgICAgICAgICA8c3Bhbj48
L3NwYW4+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2PjwvZGl2PgorICAgIDwvZGl2Pgor
ICAgIDxkaXY+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgICA8c3Bhbj48L3NwYW4+CisgICAg
ICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIDxzcGFuPjwvc3Bhbj4KKyAgICA8c3Bhbj48L3Nw
YW4+CisgICAgPHNwYW4+PC9zcGFuPgorICAgIDxzcGFuPjwvc3Bhbj4KKzwvZGl2PgorCis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorUGVy
ZlRlc3RSdW5uZXIucnVuUGVyU2Vjb25kKHsKKyAgICBkZXNjcmlwdGlvbjogIlRoaXMgYmVuY2ht
YXJrIHRlc3RzIENTUyBTZWxlY3RvciBwZXJmb3JtYW5jZSB3aXRoIHF1ZXJ5U2VsZWN0b3IoKS4i
LAorICAgIHJ1bjogZnVuY3Rpb24oKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAw
OyBpKyspIHsKKyAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNwYW46Zmlyc3Qt
Y2hpbGQiKTsKKyAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNwYW46bGFzdC1j
aGlsZCIpOworICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic3BhbjpmaXJzdC1v
Zi10eXBlIik7CisgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzcGFuOmxhc3Qt
b2YtdHlwZSIpOworICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic3BhbjpudGgt
Y2hpbGQoNG4rMykiKTsKKyAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNwYW46
bnRoLWxhc3QtY2hpbGQoNG4rMykiKTsKKyAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0
b3IoInNwYW46bnRoLW9mLXR5cGUoNG4rMykiKTsKKyAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5
U2VsZWN0b3IoInNwYW46bnRoLWxhc3Qtb2YtdHlwZSg0biszKSIpOworICAgICAgICB9CisgICAg
fQorfSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWI5
MTM4N2U3NWNhNDg1ODRkNDI4MTI4M2NiODc0YzM0OTA3OGNjZS4uM2EzYmY4ZDQyNDRiM2RkZjE4
MmZmYzYyOTc4OGQxYTE5ZmYwNmMxZCAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wOS0yMSAgU2hpbnlhIEthd2FuYWthICA8c2hpbnlha0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgW1JlZmFjdG9yaW5nXSBJbnRyb2R1Y2UgYSB0cmF2ZXJzYWwgc3RyYXRlZ3kgaW4gU2Vs
ZWN0b3JDaGVja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05Njk5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEludHJvZHVjZXMgcXVlcnlTZWxlY3RvcigpIHBlcmZvcm1hbmNlIHRlc3RzIHRvIGNoZWNr
IFNlbGVjdG9yQ2hlY2tlciBwZXJmb3JtYW5jZS4KKworICAgICAgICAqIENTUy9wc2V1ZG9jbGFz
cy1zZWxlY3RvcnMuaHRtbDogQWRkZWQuCisKIDIwMTItMDktMjAgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVzdWx0cyBwYWdlIHNob3VsZCBzaG93IGluZGl2
aXN1YWwgdmFsdWUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165554</attachid>
            <date>2012-09-25 01:29:24 -0700</date>
            <delta_ts>2012-09-25 02:17:40 -0700</delta_ts>
            <desc>WIP including other patches</desc>
            <filename>bug-96990-20120925172844.patch</filename>
            <type>text/plain</type>
            <size>34807</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk2MGI5MzBmYjc3YTA2
NWJlNzNjYjNlODFlZWM1N2M3NjYwZTk3My4uNmM2MWU1NDg0NTdhMDhlMjA3NjAzYTZkYjM1MDkz
NzMxNTkyNzQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTA5LTIwICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIENvbnRl
bnRTZWxlY3RvclF1ZXJ5IHdvcmsgd2hlbiBhIG5vZGUgUE9PTCBpcyB1c2VkIGluc3RlYWQgb2Yg
bm9kZSdzIHJlYWwgc2libGluZ3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05Njk5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdoZW4gd2UgaW1wbGVtZW50IGNvbnRlbnQgcmVwcm9qZWN0aW9uIGluIFNo
YWRvdyBET00sIHdlIGhhdmUgdG8gdXNlIGEgbm9kZSBwb29sIGFzIHNpYmxpbmdzCisgICAgICAg
IGluc3RlYWQgb2Ygbm9kZSdzIHJlYWwgc2libGluZ3MuIFNlbGVjdG9yQ2hlY2tlciBzaG91bGQg
YmUgYWJsZSB0byBoYW5kbGUgaXQgYXMgd2VsbC4KKworICAgICAgICBXZSBpbnRyb2R1Y2UgU2Vs
ZWN0b3JDaGVja2luZ1N0cmF0ZWd5IGFzIGEgdGVtcGxhdGUgYXJndW1lbnQgb2YgY2hlY2tPbmVT
ZWxlY3RvciB0byBoYW5kbGUgdGhpcy4KKyAgICAgICAgVGhlIERlZmF1bHRTZWxlY3RvckNoZWNr
aW5nU3RyYXRlZ3kgaXMgdGhlIHNhbWUgYXMgZXhpc3RpbmcgYWxnb3JpdGhtLiBDb250ZW50U2Vs
ZWN0b3JDaGVja2luZ1N0cmF0ZWd5CisgICAgICAgIGlzIGEgbmV3IGFsZ29yaXRobSB0byByZW5k
ZXIgbm9kZSBwb29sIGFzIHNpYmxpbmdzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXhpc3Rp
bmcgdGVzdHMgc2hvdWxkIGNvdmVyLgorCisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmVTZWxlY3RvcldpdGhTdHJhdGVneSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZh
dWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojppc0ZpcnN0T2ZUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmlzTGFzdE9mVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWZhdWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojpjb3VudEVs
ZW1lbnRzQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5n
U3RyYXRlZ3k6OmNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RGVmYXVsdFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6Y291bnRFbGVtZW50c0FmdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50RWxl
bWVudHNPZlR5cGVBZnRlcik6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAg
ICAgICAoU2VsZWN0b3JDaGVja2VyKToKKyAgICAgICAgKERlZmF1bHRTZWxlY3RvckNoZWNraW5n
U3RyYXRlZ3kpOiBJbXBsZW1lbnRzIHRoZSBzYW1lIGFsZ29yaXRobSB3aGljaCB3YXMgd3JpdHRl
biBpbiBpbmxpbmUgYmVmb3JlLgorICAgICAgICBFeHRyYWN0cyBzZXZlcmFsIG1ldGhvZHMgdG8g
Y2hlY2sgYW4gZWxlbWVudCBpcyB0aGUgZmlyc3QgY2hpbGQsIGV0Yy4KKyAgICAgICAgKFdlYkNv
cmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OkRlZmF1bHRTZWxlY3RvckNoZWNr
aW5nU3RyYXRlZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNlbGVjdG9yQ2hlY2tpbmdT
dHJhdGVneTo6aXNGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTZWxlY3Rv
ckNoZWNraW5nU3RyYXRlZ3k6OmlzTGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2VsZWN0aW9uc1RvKToKKyAgICAgICAg
KiBodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxl
Y3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tDb250ZW50U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9y
RGF0YUxpc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9y
RGF0YUxpc3Q6Om1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hl
Y2tpbmdTdHJhdGVneTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneSk6IFVzZXMgYSBu
b2RlIHBvb2wgYXMKKyAgICAgICAgZWxlbWVudCdzIHNpYmxpbmdzLgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6aXNGaXJzdENoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmlzTGFzdENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6Omlz
Rmlyc3RPZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdT
dHJhdGVneTo6aXNMYXN0T2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3Rv
ckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNCZWZvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6Y291bnRFbGVtZW50c0FmdGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50
RWxlbWVudHNPZlR5cGVCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9y
Q2hlY2tpbmdTdHJhdGVneTo6Y291bnRFbGVtZW50c09mVHlwZUFmdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRTZWxlY3RvclF1ZXJ5OjpDb250ZW50U2VsZWN0b3JRdWVyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaDoKKyAgICAgICAgKENvbnRlbnRTZWxl
Y3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb250ZW50U2VsZWN0
b3JEYXRhTGlzdCk6CisgICAgICAgIChDb250ZW50U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmVsZW1l
bnQpOgorICAgICAgICAoQ29udGVudFNlbGVjdG9yUXVlcnkpOgorCiAyMDEyLTA5LTI0ICBQYXRy
aWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBTdHJp
bmc6Om9wZXJhdG9yKz0oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRl
eCBhYWU0N2UyY2Y5MzY5ODU0ZjVjYTE3ZDBlYjc3MDZiMDViMjMwNjM2Li42M2JjYzhiNzNlODhk
YWIzMDU3NjcwMzY5MDQxMjk1NWJiYmZjNzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKKyNpbmNsdWRlICJDb250ZW50U2VsZWN0b3JR
dWVyeS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNo
ZWV0Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgpAQCAtNDM5LDcg
KzQ0MCw4IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3Rvcihj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCiAvLyAqIFNlbGVjdG9yRmFpbHNMb2NhbGx5ICAg
ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQgZQogLy8gKiBTZWxlY3RvckZh
aWxzQWxsU2libGluZ3MgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFueSBzaWJsaW5n
IG9mIGUKIC8vICogU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgIC0gdGhlIHNlbGVjdG9yIGZhaWxz
IGZvciBlIGFuZCBhbnkgc2libGluZyBvciBhbmNlc3RvciBvZiBlCi1TZWxlY3RvckNoZWNrZXI6
OlNlbGVjdG9yTWF0Y2ggU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKGNvbnN0IFNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9v
bCYgaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgQ2hl
Y2tpbmdDb250ZXh0PgorU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFBzZXVk
b0lkJiBkeW5hbWljUHNldWRvLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0
CiB7CiAgICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoCiAgICAgaWYgKCFjaGVja09u
ZVNlbGVjdG9yKGNvbnRleHQsIGR5bmFtaWNQc2V1ZG8sIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50
cykpCkBAIC00NTMsNyArNDU1LDcgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWMKICAgICBpZiAo
IWhpc3RvcnlTZWxlY3RvcikKICAgICAgICAgcmV0dXJuIFNlbGVjdG9yTWF0Y2hlczsKIAotICAg
IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IG5leHRDb250ZXh0KGNvbnRleHQpOworICAgIENoZWNr
aW5nQ29udGV4dCBuZXh0Q29udGV4dChjb250ZXh0KTsKICAgICBuZXh0Q29udGV4dC5zZWxlY3Rv
ciA9IGhpc3RvcnlTZWxlY3RvcjsKIAogICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6
U3ViU2VsZWN0b3IpIHsKQEAgLTcwMSw3ICs3MDMsOCBAQCBzdGF0aWMgYm9vbCBhbnlBdHRyaWJ1
dGVNYXRjaGVzKEVsZW1lbnQqIGVsZW1lbnQsIENTU1NlbGVjdG9yOjpNYXRjaCBtYXRjaCwgY29u
cwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25l
U2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFBzZXVkb0lk
JiBkeW5hbWljUHNldWRvLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja2luZ0NvbnRleHQ+Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFBzZXVkb0lk
JiBkeW5hbWljUHNldWRvLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0CiB7
CiAgICAgRWxlbWVudCogY29uc3QgJiBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50OwogICAgIENT
U1NlbGVjdG9yKiBjb25zdCAmIHNlbGVjdG9yID0gY29udGV4dC5zZWxlY3RvcjsKQEAgLTczOCw3
ICs3NDEsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAgICAgICAgICAgaWYgKCFzZWxl
Y3Rvckxpc3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCBzdWJDb250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAg
Q2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCk7CiAgICAgICAgICAgICBzdWJDb250
ZXh0LmlzU3ViU2VsZWN0b3IgPSB0cnVlOwogICAgICAgICAgICAgZm9yIChzdWJDb250ZXh0LnNl
bGVjdG9yID0gc2VsZWN0b3JMaXN0LT5maXJzdCgpOyBzdWJDb250ZXh0LnNlbGVjdG9yOyBzdWJD
b250ZXh0LnNlbGVjdG9yID0gc3ViQ29udGV4dC5zZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gOm5vdCBjYW5ub3QgbmVzdC4gSSBkb24ndCByZWFsbHkga25vdyB3
aHkgdGhpcyBpcyBhCkBAIC03OTIsOSArNzk1LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFAK
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RDaGlsZDoKICAgICAgICAgICAg
IC8vIGZpcnN0LWNoaWxkIG1hdGNoZXMgdGhlIGZpcnN0IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVu
dAogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50
LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHRydWU7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBET01UcmF2ZXJzYWxTdHJhdGVn
eTxDaGVja2luZ0NvbnRleHQ+Ojppc0ZpcnN0Q2hpbGQoY29udGV4dCwgZWxlbWVudCk7CiAgICAg
ICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAg
ICAgICAgICBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8g
Y29udGV4dC5lbGVtZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHls
ZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDogZWxlbWVudC0+cGFyZW50Tm9kZSgpLT5y
ZW5kZXJTdHlsZSgpOwpAQCAtODA5LDE0ICs4MTAsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwg
UAogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdE9mVHlwZToKICAgICAgICAg
ICAgIC8vIGZpcnN0LW9mLXR5cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlw
ZQogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZp
ZWROYW1lJiB0eXBlID0gZWxlbWVudC0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICBmb3Ig
KGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5n
KCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBET01UcmF2ZXJzYWxTdHJhdGVneTxDaGVj
a2luZ0NvbnRleHQ+Ojppc0ZpcnN0T2ZUeXBlKGNvbnRleHQsIGVsZW1lbnQsIGVsZW1lbnQtPnRh
Z1FOYW1lKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5nU3R5bGUp
IHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4
dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IGVsZW1lbnQtPnBh
cmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVu
dFN0eWxlKQpAQCAtODI4LDcgKzgyMiw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZVNlbGVjdG9yKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQCiAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RDaGlsZDoKICAgICAgICAgICAgIC8vIGxh
c3QtY2hpbGQgbWF0Y2hlcyB0aGUgbGFzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKICAgICAg
ICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBwYXJlbnRFbGVtZW50LT5pc0Zp
bmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkgJiYgIWVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygp
OworICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hl
ZFBhcnNpbmdDaGlsZHJlbigpICYmIERPTVRyYXZlcnNhbFN0cmF0ZWd5PENoZWNraW5nQ29udGV4
dD46OmlzTGFzdENoaWxkKGNvbnRleHQsIGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmICht
X21vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0
eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1l
bnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CkBAIC04NTAsMTkg
Kzg0NCwxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBT
ZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRy
ZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlbGVtZW50LT50YWdRTmFtZSgpOwotICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVt
ZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJs
aW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlw
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJldHVy
biBET01UcmF2ZXJzYWxTdHJhdGVneTxDaGVja2luZ0NvbnRleHQ+Ojppc0xhc3RPZlR5cGUoY29u
dGV4dCwgZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvT25seUNoaWxk
OgogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJl
bnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQgPSAhZWxlbWVu
dC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOwotICAgICAgICAgICAgICAgIGJvb2wgb25seUNo
aWxkID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxk
cmVuKCkgJiYgIWVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOwotCisgICAgICAgICAgICAg
ICAgYm9vbCBmaXJzdENoaWxkID0gRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0
Pjo6aXNGaXJzdENoaWxkKGNvbnRleHQsIGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGJvb2wg
b25seUNoaWxkID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2lu
Z0NoaWxkcmVuKCkgJiYgRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6aXNM
YXN0Q2hpbGQoY29udGV4dCwgZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9
PSBSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogY2hp
bGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50U3R5bGUgOiBl
bGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBhcmVu
dFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKQEAgLTg5MCwzMyArODc4LDE0
IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNvbnN0IFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdHlwZSA9IGVsZW1lbnQtPnRhZ1FOYW1lKCk7Ci0gICAgICAgICAgICAg
ICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNFbGVtZW50
U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2li
bGluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5
cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVt
ZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5l
eHRFbGVtZW50U2libGluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLT5o
YXNUYWdOYW1lKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6aXNG
aXJzdE9mVHlwZShjb250ZXh0LCBlbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKSAmJiBET01U
cmF2ZXJzYWxTdHJhdGVneTxDaGVja2luZ0NvbnRleHQ+Ojppc0xhc3RPZlR5cGUoY29udGV4dCwg
ZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRoQ2hpbGQ6CiAgICAg
ICAgICAgICBpZiAoIXNlbGVjdG9yLT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJl
bnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAg
ICAgICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxl
bWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVu
dFNpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcyA9IHNpYmxp
bmctPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
cyA/IHMtPmNoaWxkSW5kZXgoKSA6IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gaW5kZXg7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgICAgIGludCBj
b3VudCA9IDEgKyBET01UcmF2ZXJzYWxTdHJhdGVneTxDaGVja2luZ0NvbnRleHQ+Ojpjb3VudEVs
ZW1lbnRzQmVmb3JlKGNvbnRleHQsIGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChtX21v
ZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxl
IDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQ
YXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CkBAIC05MzQsMTIgKzkw
Myw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNvbnN0IFNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQCiAgICAgICAgICAgICBpZiAoIXNlbGVjdG9y
LT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHR5cGUgPSBlbGVtZW50LT50YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgIGZvciAo
Y29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmco
KTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGludCBjb3VudCA9IDEgKyBET01UcmF2ZXJzYWxTdHJhdGVneTxDaGVja2luZ0Nv
bnRleHQ+Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKGNvbnRleHQsIGVsZW1lbnQsIGVsZW1l
bnQtPnRhZ1FOYW1lKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5n
U3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
Y29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVu
dEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRT
dHlsZSkKQEAgLTk2MSw5ICs5MjUsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVT
ZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNo
ZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgZm9yIChjb25z
dCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxp
bmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkKLSAgICAgICAgICAg
ICAgICAgICAgKytjb3VudDsKKyAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgRE9NVHJh
dmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6Y291bnRFbGVtZW50c0FmdGVyKGNvbnRl
eHQsIGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci0+bWF0Y2hOdGgoY291
bnQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KQEAg
LTk3OSwxMiArOTQxLDggQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3Io
Y29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFAKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2lu
Z0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICBpbnQgY291bnQgPSAxOwotICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHR5cGUgPSBlbGVtZW50LT50YWdRTmFtZSgpOwotICAgICAgICAgICAgICAgIGZvciAoY29u
c3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOyBzaWJs
aW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICArK2NvdW50OwotICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGludCBjb3VudCA9IDEgKyBET01UcmF2ZXJzYWxTdHJhdGVneTxDaGVja2luZ0NvbnRleHQ+Ojpj
b3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoY29udGV4dCwgZWxlbWVudCwgZWxlbWVudC0+dGFnUU5h
bWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3VudCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtOTk1LDcg
Kzk1Myw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNvbnN0IFNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBQCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55OgogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCk7Cisg
ICAgICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCk7CiAgICAg
ICAgICAgICAgICAgc3ViQ29udGV4dC5pc1N1YlNlbGVjdG9yID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBmb3IgKHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzZWxlY3Rvci0+c2VsZWN0b3JMaXN0KCkt
PmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBDU1NT
ZWxlY3Rvckxpc3Q6Om5leHQoc3ViQ29udGV4dC5zZWxlY3RvcikpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoZWNrU2VsZWN0b3Ioc3ViQ29udGV4dCwgZHluYW1pY1BzZXVkbywgaGFzVW5r
bm93blBzZXVkb0VsZW1lbnRzKSA9PSBTZWxlY3Rvck1hdGNoZXMpCkBAIC0xMzkyLDQgKzEzNTAs
MTkyIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVTZWxlY3RvclNjb3Blcyhjb25z
dCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3Rl
bXBsYXRlPD4KK2lubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2FsU3RyYXRl
Z3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dD46OmlzRmlyc3RDaGls
ZChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgRWxlbWVu
dCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gIWVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxp
bmcoKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpET01U
cmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
Pjo6aXNMYXN0Q2hpbGQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCYsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgcmV0dXJuICFlbGVtZW50LT5uZXh0RWxl
bWVudFNpYmxpbmcoKTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0Pjo6aXNGaXJzdE9mVHlwZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0JiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
dHlwZSkKK3sKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5wcmV2
aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91
c0VsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlw
ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNh
bFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ+Ojppc0xh
c3RPZlR5cGUoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCYs
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCit7CisgICAgZm9y
IChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7
IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkgeworICAg
ICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBp
bnQgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6
OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Pjo6Y291bnRFbGVtZW50c0JlZm9yZShjb25zdCBTZWxl
Y3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgRWxlbWVudCogZWxlbWVudCkK
K3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9
IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNp
YmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAgICAgICBSZW5kZXJTdHlsZSog
cyA9IHNpYmxpbmctPnJlbmRlclN0eWxlKCk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gcyA/
IHMtPmNoaWxkSW5kZXgoKSA6IDA7CisgICAgICAgIGlmIChpbmRleCkgeworICAgICAgICAgICAg
Y291bnQgKz0gaW5kZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
b3VudCsrOworICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKwordGVtcGxhdGU8PgoraW5s
aW5lIGludCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ+Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3Jl
KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQoreworICAgIGludCBjb3VudCA9
IDA7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNF
bGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNFbGVt
ZW50U2libGluZygpKSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQor
ICAgICAgICAgICAgKytjb3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK3Rl
bXBsYXRlPD4KK2lubGluZSBpbnQgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVn
eTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Pjo6Y291bnRFbGVtZW50
c0FmdGVyKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBF
bGVtZW50KiBlbGVtZW50KQoreworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChjb25zdCBF
bGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7
IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkKKyAgICAgICAgKytjb3Vu
dDsKKworICAgIHJldHVybiBjb3VudDsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIGludCBTZWxl
Y3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JDaGVja2luZ0NvbnRleHQ+Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoY29uc3QgU2VsZWN0
b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3Ig
KGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsg
c2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7CisgICAg
ICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgKytjb3VudDsK
KyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpT
ZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbD46OmlzRmlyc3RDaGlsZChjb25zdCBT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sJiBjb250
ZXh0LCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4g
PiYgc2libGluZ3MgPSBjb250ZXh0LnNpYmxpbmdzOworICAgIGZvciAoaW50IGkgPSBjb250ZXh0
Lm50aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJs
aW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojppc0xhc3RDaGlsZChjb25zdCBTZWxlY3Rv
ckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sJiBjb250ZXh0LCBF
bGVtZW50KiBlbGVtZW50KQoreworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2li
bGluZ3MgPSBjb250ZXh0LnNpYmxpbmdzOworICAgIGZvciAoc2l6ZV90IGkgPSBjb250ZXh0Lm50
aCArIDE7IGkgPCBzaWJsaW5ncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoc2libGluZ3Nb
aV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8PgoraW5saW5l
IGJvb2wgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNr
ZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sPjo6aXNGaXJzdE9mVHlwZShj
b25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29s
JiBjb250ZXh0LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQor
eworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBjb250ZXh0LnNp
YmxpbmdzOworICAgIGZvciAoaW50IGkgPSBjb250ZXh0Lm50aCAtIDE7IGkgPj0gMDsgLS1pKSB7
CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgp
ICYmIHNpYmxpbmdzW2ldLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tl
cjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojppc0xhc3RPZlR5cGUoY29u
c3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbCYg
Y29udGV4dCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkKK3sK
KyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzID0gY29udGV4dC5zaWJs
aW5nczsKKyAgICBmb3IgKHNpemVfdCBpID0gY29udGV4dC5udGggKyAxOyBpIDwgc2libGluZ3Mu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ldLT5p
c0VsZW1lbnROb2RlKCkgJiYgc2libGluZ3NbaV0tPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBs
YXRlPD4KK2lubGluZSBpbnQgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sPjo6Y291
bnRFbGVtZW50c0JlZm9yZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0V2l0aE5vZGVQb29sJiBjb250ZXh0LCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBjb250ZXh0LnNpYmxpbmdzOwor
ICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChpbnQgaSA9IGNvbnRleHQubnRoIC0gMTsgaSA+
PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ldLT5pc0Vs
ZW1lbnROb2RlKCkpCisgICAgICAgICAgICArK2NvdW50OworICAgIH0KKworICAgIHJldHVybiBj
b3VudDsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIGludCBTZWxlY3RvckNoZWNrZXI6OkRPTVRy
YXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRX
aXRoTm9kZVBvb2w+Ojpjb3VudEVsZW1lbnRzQWZ0ZXIoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpT
ZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbCYgY29udGV4dCwgRWxlbWVudCogZWxl
bWVudCkKK3sKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzID0gY29u
dGV4dC5zaWJsaW5nczsKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSBj
b250ZXh0Lm50aCArIDE7IGkgPCBzaWJsaW5ncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
c2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAg
IHJldHVybiArK2NvdW50OworICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKwordGVtcGxh
dGU8PgoraW5saW5lIGludCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNl
bGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojpjb3Vu
dEVsZW1lbnRzT2ZUeXBlQmVmb3JlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVj
a2luZ0NvbnRleHRXaXRoTm9kZVBvb2wmIGNvbnRleHQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIHR5cGUpCit7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+
JiBzaWJsaW5ncyA9IGNvbnRleHQuc2libGluZ3M7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBm
b3IgKGludCBpID0gY29udGV4dC5udGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAo
c2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSAmJiBzaWJsaW5nc1tp
XS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAg
cmV0dXJuIGNvdW50OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgaW50IFNlbGVjdG9yQ2hlY2tl
cjo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5n
Q29udGV4dFdpdGhOb2RlUG9vbD46OmNvdW50RWxlbWVudHNPZlR5cGVBZnRlcihjb25zdCBTZWxl
Y3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sJiBjb250ZXh0
LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQoreworICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBjb250ZXh0LnNpYmxpbmdzOwor
ICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IGNvbnRleHQubnRoICsgMTsg
aSA8IHNpYmxpbmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBz
aWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgpICYmIHNpYmxpbmdzW2ldLT5oYXNUYWdOYW1lKHR5
cGUpKQorICAgICAgICAgICAgcmV0dXJuICsrY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNv
dW50OworfQorCit0ZW1wbGF0ZQorU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcjxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0Pihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIFBzZXVkb0lkJiwgYm9v
bCYpIGNvbnN0OwordGVtcGxhdGUKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVj
dG9yPFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+
KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBv
b2wmLCBQc2V1ZG9JZCYsIGJvb2wmKSBjb25zdDsKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5oCmluZGV4IGYxNWNlMGQwOGVlNDMyOThiNDEyMDQxMmNmNzZkOTVhYTViZjNjMDEu
LjQ2NzA3ZmU4Y2U1ZTVmMmUyNDIxZDE4OGJkYzIyNWI4YTI0MzlkZTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDU1NTZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUg
IkxpbmtIYXNoLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJT
dHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlNwYWNlU3BsaXRTdHJpbmcuaCIKICNpbmNsdWRl
ICJTdHlsZWRFbGVtZW50LmgiCkBAIC01NCwzMSArNTUsNjUgQEAgcHVibGljOgogICAgIGVudW0g
VmlzaXRlZE1hdGNoVHlwZSB7IFZpc2l0ZWRNYXRjaERpc2FibGVkLCBWaXNpdGVkTWF0Y2hFbmFi
bGVkIH07CiAgICAgZW51bSBNb2RlIHsgUmVzb2x2aW5nU3R5bGUgPSAwLCBDb2xsZWN0aW5nUnVs
ZXMsIFF1ZXJ5aW5nUnVsZXMgfTsKIAotICAgIHN0cnVjdCBTZWxlY3RvckNoZWNraW5nQ29udGV4
dCB7CisgICAgc3RydWN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0QmFzZSB7CiAgICAgICAgIC8v
IEluaXRpYWwgc2VsZWN0b3IgY29uc3RydWN0b3IKLSAgICAgICAgU2VsZWN0b3JDaGVja2luZ0Nv
bnRleHQoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBWaXNpdGVkTWF0
Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUpCisgICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
QmFzZShDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIFZpc2l0ZWRNYXRj
aFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkKICAgICAgICAgICAgIDogc2VsZWN0b3Ioc2VsZWN0b3Ip
CiAgICAgICAgICAgICAsIGVsZW1lbnQoZWxlbWVudCkKICAgICAgICAgICAgICwgc2NvcGUoMCkK
ICAgICAgICAgICAgICwgdmlzaXRlZE1hdGNoVHlwZSh2aXNpdGVkTWF0Y2hUeXBlKQorICAgICAg
ICAgICAgLCBwc2V1ZG9TdHlsZShOT1BTRVVETykKICAgICAgICAgICAgICwgZWxlbWVudFN0eWxl
KDApCiAgICAgICAgICAgICAsIGVsZW1lbnRQYXJlbnRTdHlsZSgwKQogICAgICAgICAgICAgLCBp
c1N1YlNlbGVjdG9yKGZhbHNlKQotICAgICAgICAgICAgLCBwc2V1ZG9TdHlsZShOT1BTRVVETykK
ICAgICAgICAgeyB9CiAKICAgICAgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yOwogICAgICAgICBF
bGVtZW50KiBlbGVtZW50OwogICAgICAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZTsKICAg
ICAgICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlOworICAgICAgICBQc2V1ZG9J
ZCBwc2V1ZG9TdHlsZTsKICAgICAgICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZTsKICAgICAg
ICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZTsKICAgICAgICAgYm9vbCBpc1N1YlNl
bGVjdG9yOwotICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9TdHlsZTsKKyAgICB9OworCisgICAgc3Ry
dWN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IDogcHVibGljIFNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0QmFzZSB7CisgICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KENTU1NlbGVjdG9yKiBz
ZWxlY3RvciwgRWxlbWVudCogZWxlbWVudCwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hU
eXBlKQorICAgICAgICAgICAgOiBTZWxlY3RvckNoZWNraW5nQ29udGV4dEJhc2Uoc2VsZWN0b3Is
IGVsZW1lbnQsIHZpc2l0ZWRNYXRjaFR5cGUpCisgICAgICAgIHsgfQorICAgIH07CisKKyAgICBz
dHJ1Y3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2wgOiBwdWJsaWMgU2VsZWN0
b3JDaGVja2luZ0NvbnRleHRCYXNlIHsKKyAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHRX
aXRoTm9kZVBvb2woQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBWZWN0b3I8UmVmUHRyPE5v
ZGU+ID4mIHBvb2wsIGludCBudGgsIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkK
KyAgICAgICAgICAgIDogU2VsZWN0b3JDaGVja2luZ0NvbnRleHRCYXNlKHNlbGVjdG9yLCB0b0Vs
ZW1lbnQocG9vbFtudGhdLmdldCgpKSwgdmlzaXRlZE1hdGNoVHlwZSkKKyAgICAgICAgICAgICwg
c2libGluZ3MocG9vbCkKKyAgICAgICAgICAgICwgbnRoKG50aCkKKyAgICAgICAgeyB9CisKKyAg
ICAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IHNpYmxpbmdzOworICAgICAgICBpbnQgbnRoOwor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb250ZXh0PgorICAgIHN0cnVjdCBET01U
cmF2ZXJzYWxTdHJhdGVneSB7CisgICAgICAgIHN0YXRpYyBib29sIGlzRmlyc3RDaGlsZChjb25z
dCBDb250ZXh0JiwgRWxlbWVudCopOworICAgICAgICBzdGF0aWMgYm9vbCBpc0xhc3RDaGlsZChj
b25zdCBDb250ZXh0JiwgRWxlbWVudCopOworICAgICAgICBzdGF0aWMgYm9vbCBpc0ZpcnN0T2ZU
eXBlKGNvbnN0IENvbnRleHQmLCBFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAg
ICAgICBzdGF0aWMgYm9vbCBpc0xhc3RPZlR5cGUoY29uc3QgQ29udGV4dCYsIEVsZW1lbnQqLCBj
b25zdCBRdWFsaWZpZWROYW1lJik7CisKKyAgICAgICAgc3RhdGljIGludCBjb3VudEVsZW1lbnRz
QmVmb3JlKGNvbnN0IENvbnRleHQmLCBFbGVtZW50Kik7CisgICAgICAgIHN0YXRpYyBpbnQgY291
bnRFbGVtZW50c0FmdGVyKGNvbnN0IENvbnRleHQmLCBFbGVtZW50Kik7CisgICAgICAgIHN0YXRp
YyBpbnQgY291bnRFbGVtZW50c09mVHlwZUJlZm9yZShjb25zdCBDb250ZXh0JiwgRWxlbWVudCos
IGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICAgICAgc3RhdGljIGludCBjb3VudEVsZW1lbnRz
T2ZUeXBlQWZ0ZXIoY29uc3QgQ29udGV4dCYsIEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1l
Jik7CiAgICAgfTsKIAogICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1l
bnQqLCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yID0gZmFsc2UpIGNvbnN0OwotICAgIFNl
bGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYs
IFBzZXVkb0lkJiwgYm9vbCYgaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSBjb25zdDsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja2luZ0NvbnRleHQ+CisgICAgU2VsZWN0b3JNYXRjaCBjaGVj
a1NlbGVjdG9yKGNvbnN0IENoZWNraW5nQ29udGV4dCYsIFBzZXVkb0lkJiwgYm9vbCYgaGFzVW5r
bm93blBzZXVkb0VsZW1lbnRzKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja2lu
Z0NvbnRleHQ+CisgICAgYm9vbCBjaGVja09uZVNlbGVjdG9yKGNvbnN0IENoZWNraW5nQ29udGV4
dCYsIFBzZXVkb0lkJiwgYm9vbCYgaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSBjb25zdDsKKwog
ICAgIHN0YXRpYyBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9y
Kik7CiAgICAgYm9vbCBmYXN0Q2hlY2tTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIGNvbnN0
IEVsZW1lbnQqKSBjb25zdDsKIApAQCAtMTE3LDcgKzE1Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgYm9vbCBlbGVtZW50TWF0Y2hlc1NlbGVjdG9yU2NvcGVzKGNvbnN0IFN0eWxlZEVsZW1lbnQq
LCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIGNvbnN0IEhhc2hT
ZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFzc1Njb3Blcyk7CiAKIHByaXZhdGU6Ci0gICAgYm9v
bCBjaGVja09uZVNlbGVjdG9yKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgUHNldWRv
SWQmLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0OworCiAgICAgYm9vbCBj
aGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVjdG9yKiwgUHNldWRvSWQmIGR5bmFtaWNQ
c2V1ZG8pIGNvbnN0OwogICAgIHN0YXRpYyBib29sIGlzRnJhbWVGb2N1c2VkKGNvbnN0IEVsZW1l
bnQqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERp
c3RyaWJ1dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmli
dXRvci5jcHAKaW5kZXggMDc2YTcyM2M4YTkxYWZlOTMxODg3NjU4OTRjZTc3MzZkYzM2NmEwMC4u
Njc0OGI1OTkxZGI2N2ZiYjM1ZGVjNzlmMzUzNDg2YTRkYmQ3ZGVhYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCkBAIC0xMTcsMTAg
KzExNywxMCBAQCB2b2lkIENvbnRlbnREaXN0cmlidXRvcjo6ZGlzdHJpYnV0ZVNlbGVjdGlvbnNU
byhJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQsCiAgICAgICAgIGlmIChkaXN0cmlidXRl
ZFtpXSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIE5vZGUqIGNoaWxkID0gcG9v
bFtpXS5nZXQoKTsKLSAgICAgICAgaWYgKCFxdWVyeS5tYXRjaGVzKGNoaWxkKSkKKyAgICAgICAg
aWYgKCFxdWVyeS5tYXRjaGVzKHBvb2wsIGkpKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAg
ICAgICAgTm9kZSogY2hpbGQgPSBwb29sW2ldLmdldCgpOwogICAgICAgICBkaXN0cmlidXRpb24u
YXBwZW5kKGNoaWxkKTsKICAgICAgICAgbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5hZGQoY2hpbGQs
IGluc2VydGlvblBvaW50KTsKICAgICAgICAgZGlzdHJpYnV0ZWRbaV0gPSB0cnVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwCmlu
ZGV4IGYxMmM1OTkyNWY3YzkzMjRmNmZlZmNiZWIyMjM1ODk1N2RmMjExZjMuLjI1Yjg0MjcwOTk1
NjRmYmFhYjg4MmU5OGMwM2M5ZGNiNmU1NDA0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHAKQEAgLTI5LDE3ICsyOSw1MyBA
QAogCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0Lmgi
CisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFByb2dyZXNzRWxl
bWVudC5oIgogI2luY2x1ZGUgIkluc2VydGlvblBvaW50LmgiCiAjaW5jbHVkZSAiU2hhZG93Um9v
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CisKK0NvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXIoRG9jdW1l
bnQqIGRvY3VtZW50LCBib29sIHN0cmljdFBhcnNpbmcpCisgICAgOiBtX3NlbGVjdG9yQ2hlY2tl
cihkb2N1bWVudCwgc3RyaWN0UGFyc2luZykKK3sKKyAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRN
b2RlKFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKTsKK30KKworYm9vbCBDb250ZW50
U2VsZWN0b3JDaGVja2VyOjpjaGVja0NvbnRlbnRTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsZWN0
b3IsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGludCBudGgpIGNvbnN0
Cit7CisgICAgUHNldWRvSWQgZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOworICAgIGJvb2wgaGFz
VW5rbm93blBzZXVkb0VsZW1lbnRzID0gZmFsc2U7CisgICAgU2VsZWN0b3JDaGVja2VyOjpTZWxl
Y3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbCBjb250ZXh0KHNlbGVjdG9yLCBzaWJsaW5n
cywgbnRoLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaERpc2FibGVkKTsKKyAgICAKKyAg
ICByZXR1cm4gbV9zZWxlY3RvckNoZWNrZXIuY2hlY2tPbmVTZWxlY3Rvcihjb250ZXh0LCBkeW5h
bWljUHNldWRvLCBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpOworfQorCit2b2lkIENvbnRlbnRT
ZWxlY3RvckRhdGFMaXN0Ojppbml0aWFsaXplKGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0
b3JzKQoreworICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JzLmZpcnN0
KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3Rvcikp
CisgICAgICAgIG1fc2VsZWN0b3JzLmFwcGVuZChzZWxlY3Rvcik7Cit9CisKK2Jvb2wgQ29udGVu
dFNlbGVjdG9yRGF0YUxpc3Q6Om1hdGNoZXMoY29uc3QgQ29udGVudFNlbGVjdG9yQ2hlY2tlciYg
c2VsZWN0b3JDaGVja2VyLCBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzLCBp
bnQgbnRoKSBjb25zdAoreworICAgIHVuc2lnbmVkIHNlbGVjdG9yQ291bnQgPSBtX3NlbGVjdG9y
cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlbGVjdG9yQ291bnQ7ICsr
aSkgeworICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2VyLmNoZWNrQ29udGVudFNlbGVjdG9yKG1f
c2VsZWN0b3JzW2ldLCBzaWJsaW5ncywgbnRoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogQ29udGVudFNlbGVjdG9yUXVlcnk6OkNv
bnRlbnRTZWxlY3RvclF1ZXJ5KGNvbnN0IEluc2VydGlvblBvaW50KiBpbnNlcnRpb25Qb2ludCkK
ICAgICA6IG1faW5zZXJ0aW9uUG9pbnQoaW5zZXJ0aW9uUG9pbnQpCiAgICAgLCBtX3NlbGVjdG9y
Q2hlY2tlcihpbnNlcnRpb25Qb2ludC0+ZG9jdW1lbnQoKSwgIWluc2VydGlvblBvaW50LT5kb2N1
bWVudCgpLT5pblF1aXJrc01vZGUoKSkKIHsKLSAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2Rl
KFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKTsKLQogICAgIGlmIChpbnNlcnRpb25Q
b2ludC0+c2VsZWN0KCkuaXNOdWxsKCkgfHwgaW5zZXJ0aW9uUG9pbnQtPnNlbGVjdCgpLmlzRW1w
dHkoKSkgewogICAgICAgICBtX2lzVmFsaWRTZWxlY3RvciA9IHRydWU7CiAgICAgICAgIHJldHVy
bjsKQEAgLTU4LDE0ICs5NCwxNCBAQCBib29sIENvbnRlbnRTZWxlY3RvclF1ZXJ5Ojppc1ZhbGlk
U2VsZWN0b3IoKSBjb25zdAogICAgIHJldHVybiBtX2lzVmFsaWRTZWxlY3RvcjsKIH0KIAotYm9v
bCBDb250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyhOb2RlKiBub2RlKSBjb25zdAorYm9vbCBD
b250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyhjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4m
IHNpYmxpbmdzLCBpbnQgbnRoKSBjb25zdAogeworICAgIE5vZGUqIG5vZGUgPSBzaWJsaW5nc1tu
dGhdLmdldCgpOworCiAgICAgQVNTRVJUKG5vZGUpOwogICAgIGlmICghbm9kZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJUKG5vZGUtPnBhcmVudE5vZGUoKSA9PSBtX2luc2Vy
dGlvblBvaW50LT5zaGFkb3dSb290KCktPmhvc3QoKSk7Ci0KICAgICBpZiAobV9pbnNlcnRpb25Q
b2ludC0+c2VsZWN0KCkuaXNOdWxsKCkgfHwgbV9pbnNlcnRpb25Qb2ludC0+c2VsZWN0KCkuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNzUsNyArMTExLDcgQEAgYm9vbCBD
b250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyhOb2RlKiBub2RlKSBjb25zdAogICAgIGlmICgh
bm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gbV9zZWxlY3RvcnMubWF0Y2hlcyhtX3NlbGVjdG9yQ2hlY2tlciwgdG9FbGVtZW50KG5vZGUp
KTsKKyAgICByZXR1cm4gbV9zZWxlY3RvcnMubWF0Y2hlcyhtX3NlbGVjdG9yQ2hlY2tlciwgc2li
bGluZ3MsIG50aCk7CiB9CiAKIHN0YXRpYyBib29sIHZhbGlkYXRlU3ViU2VsZWN0b3IoQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
Q29udGVudFNlbGVjdG9yUXVlcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRl
bnRTZWxlY3RvclF1ZXJ5LmgKaW5kZXggOTRmYTNlZmNjZjNmOWQ3MmU5NzQ3NzVlMmQyZDMxNDBk
MTNjYjM0ZS4uMmM3MTBhNTg1MmU5MmQ3Njg4MmM3YzIwNzUwYmZkMjZkYTJhYTAzYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oCkBA
IC00MywyNSArNDMsNDEgQEAgY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgSW5z
ZXJ0aW9uUG9pbnQ7CiAKK2NsYXNzIENvbnRlbnRTZWxlY3RvckNoZWNrZXIgeworcHVibGljOgor
ICAgIENvbnRlbnRTZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQqLCBib29sIHN0cmljdFBhcnNpbmcp
OworCisgICAgYm9vbCBjaGVja0NvbnRlbnRTZWxlY3RvcihDU1NTZWxlY3RvciosIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGludCBudGhOb2RlKSBjb25zdDsKK3ByaXZh
dGU6CisgICAgU2VsZWN0b3JDaGVja2VyIG1fc2VsZWN0b3JDaGVja2VyOworfTsKKworY2xhc3Mg
Q29udGVudFNlbGVjdG9yRGF0YUxpc3QgeworcHVibGljOgorICAgIHZvaWQgaW5pdGlhbGl6ZShj
b25zdCBDU1NTZWxlY3Rvckxpc3QmKTsKKyAgICBib29sIG1hdGNoZXMoY29uc3QgQ29udGVudFNl
bGVjdG9yQ2hlY2tlciYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGlu
dCBudGhOb2RlKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8Q1NTU2VsZWN0b3IqPiBt
X3NlbGVjdG9yczsKK307CisKIGNsYXNzIENvbnRlbnRTZWxlY3RvclF1ZXJ5IHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDb250ZW50U2VsZWN0b3JRdWVyeSk7CiBwdWJsaWM6CiAgICAgZXhw
bGljaXQgQ29udGVudFNlbGVjdG9yUXVlcnkoY29uc3QgSW5zZXJ0aW9uUG9pbnQqKTsKIAogICAg
IGJvb2wgaXNWYWxpZFNlbGVjdG9yKCkgY29uc3Q7Ci0gICAgYm9vbCBtYXRjaGVzKE5vZGUqKSBj
b25zdDsKKyAgICBib29sIG1hdGNoZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJs
aW5ncywgaW50IG50aE5vZGUpIGNvbnN0OwogcHJpdmF0ZToKICAgICBib29sIHZhbGlkYXRlU2Vs
ZWN0b3JMaXN0KCk7CiAKICAgICBjb25zdCBJbnNlcnRpb25Qb2ludCogbV9pbnNlcnRpb25Qb2lu
dDsKLSAgICBTZWxlY3RvckRhdGFMaXN0IG1fc2VsZWN0b3JzOworICAgIENvbnRlbnRTZWxlY3Rv
ckRhdGFMaXN0IG1fc2VsZWN0b3JzOwogICAgIENTU1NlbGVjdG9yTGlzdCBtX3NlbGVjdG9yTGlz
dDsKLSAgICBTZWxlY3RvckNoZWNrZXIgbV9zZWxlY3RvckNoZWNrZXI7CisgICAgQ29udGVudFNl
bGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKICAgICBib29sIG1faXNWYWxpZFNlbGVj
dG9yOwogfTsKIAogfQogCi0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3Rz
L0NTUy9wc2V1ZG9jbGFzcy1zZWxlY3RvcnMuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvQ1NTL3Bz
ZXVkb2NsYXNzLXNlbGVjdG9ycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlYmZiZmNjY2QyMzU1MjVmZjQx
ZGIzNDI3YzY0MDg0MjgzYWY4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3Rz
L0NTUy9wc2V1ZG9jbGFzcy1zZWxlY3RvcnMuaHRtbApAQCAtMCwwICsxLDQ1IEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGJvZHk+CisKKzxkaXYgaWQ9InRlc3QtdGFyZ2V0Ij4KKyAgICA8
ZGl2PgorICAgICAgICA8ZGl2PjwvZGl2PgorICAgICAgICA8ZGl2PgorICAgICAgICAgICAgPHNw
YW4+PC9zcGFuPgorICAgICAgICAgICAgPHNwYW4+PC9zcGFuPgorICAgICAgICAgICAgPHNwYW4+
PC9zcGFuPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdj48L2Rpdj4KKyAgICA8L2Rpdj4K
KyAgICA8ZGl2PgorICAgICAgICA8ZGl2PgorICAgICAgICAgICAgPHNwYW4+PC9zcGFuPgorICAg
ICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8c3Bhbj48L3NwYW4+CisgICAgPHNwYW4+PC9z
cGFuPgorICAgIDxzcGFuPjwvc3Bhbj4KKyAgICA8c3Bhbj48L3NwYW4+Cis8L2Rpdj4KKworPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9ydW5uZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK1Bl
cmZUZXN0UnVubmVyLnJ1blBlclNlY29uZCh7CisgICAgZGVzY3JpcHRpb246ICJUaGlzIGJlbmNo
bWFyayB0ZXN0cyBDU1MgU2VsZWN0b3IgcGVyZm9ybWFuY2Ugd2l0aCBxdWVyeVNlbGVjdG9yKCku
IiwKKyAgICBydW46IGZ1bmN0aW9uKCkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDsgaSsrKSB7CisgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzcGFuOmZpcnN0
LWNoaWxkIik7CisgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzcGFuOmxhc3Qt
Y2hpbGQiKTsKKyAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNwYW46Zmlyc3Qt
b2YtdHlwZSIpOworICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic3BhbjpsYXN0
LW9mLXR5cGUiKTsKKyAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNwYW46bnRo
LWNoaWxkKDRuKzMpIik7CisgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzcGFu
Om50aC1sYXN0LWNoaWxkKDRuKzMpIik7CisgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVj
dG9yKCJzcGFuOm50aC1vZi10eXBlKDRuKzMpIik7CisgICAgICAgICAgICBkb2N1bWVudC5xdWVy
eVNlbGVjdG9yKCJzcGFuOm50aC1sYXN0LW9mLXR5cGUoNG4rMykiKTsKKyAgICAgICAgfQorICAg
IH0KK30pOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165561</attachid>
            <date>2012-09-25 02:17:44 -0700</date>
            <delta_ts>2012-10-04 05:22:16 -0700</delta_ts>
            <desc>WIP including other patches</desc>
            <filename>bug-96990-20120925181704.patch</filename>
            <type>text/plain</type>
            <size>35772</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk2MGI5MzBmYjc3YTA2
NWJlNzNjYjNlODFlZWM1N2M3NjYwZTk3My4uNmM2MWU1NDg0NTdhMDhlMjA3NjAzYTZkYjM1MDkz
NzMxNTkyNzQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTA5LTIwICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIENvbnRl
bnRTZWxlY3RvclF1ZXJ5IHdvcmsgd2hlbiBhIG5vZGUgUE9PTCBpcyB1c2VkIGluc3RlYWQgb2Yg
bm9kZSdzIHJlYWwgc2libGluZ3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05Njk5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdoZW4gd2UgaW1wbGVtZW50IGNvbnRlbnQgcmVwcm9qZWN0aW9uIGluIFNo
YWRvdyBET00sIHdlIGhhdmUgdG8gdXNlIGEgbm9kZSBwb29sIGFzIHNpYmxpbmdzCisgICAgICAg
IGluc3RlYWQgb2Ygbm9kZSdzIHJlYWwgc2libGluZ3MuIFNlbGVjdG9yQ2hlY2tlciBzaG91bGQg
YmUgYWJsZSB0byBoYW5kbGUgaXQgYXMgd2VsbC4KKworICAgICAgICBXZSBpbnRyb2R1Y2UgU2Vs
ZWN0b3JDaGVja2luZ1N0cmF0ZWd5IGFzIGEgdGVtcGxhdGUgYXJndW1lbnQgb2YgY2hlY2tPbmVT
ZWxlY3RvciB0byBoYW5kbGUgdGhpcy4KKyAgICAgICAgVGhlIERlZmF1bHRTZWxlY3RvckNoZWNr
aW5nU3RyYXRlZ3kgaXMgdGhlIHNhbWUgYXMgZXhpc3RpbmcgYWxnb3JpdGhtLiBDb250ZW50U2Vs
ZWN0b3JDaGVja2luZ1N0cmF0ZWd5CisgICAgICAgIGlzIGEgbmV3IGFsZ29yaXRobSB0byByZW5k
ZXIgbm9kZSBwb29sIGFzIHNpYmxpbmdzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXhpc3Rp
bmcgdGVzdHMgc2hvdWxkIGNvdmVyLgorCisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmVTZWxlY3RvcldpdGhTdHJhdGVneSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZh
dWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojppc0ZpcnN0T2ZUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmlzTGFzdE9mVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEZWZhdWx0U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5Ojpjb3VudEVs
ZW1lbnRzQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5n
U3RyYXRlZ3k6OmNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
RGVmYXVsdFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6Y291bnRFbGVtZW50c0FmdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50RWxl
bWVudHNPZlR5cGVBZnRlcik6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAg
ICAgICAoU2VsZWN0b3JDaGVja2VyKToKKyAgICAgICAgKERlZmF1bHRTZWxlY3RvckNoZWNraW5n
U3RyYXRlZ3kpOiBJbXBsZW1lbnRzIHRoZSBzYW1lIGFsZ29yaXRobSB3aGljaCB3YXMgd3JpdHRl
biBpbiBpbmxpbmUgYmVmb3JlLgorICAgICAgICBFeHRyYWN0cyBzZXZlcmFsIG1ldGhvZHMgdG8g
Y2hlY2sgYW4gZWxlbWVudCBpcyB0aGUgZmlyc3QgY2hpbGQsIGV0Yy4KKyAgICAgICAgKFdlYkNv
cmU6OkRlZmF1bHRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OkRlZmF1bHRTZWxlY3RvckNoZWNr
aW5nU3RyYXRlZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdFNlbGVjdG9yQ2hlY2tpbmdT
dHJhdGVneTo6aXNGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1bHRTZWxlY3Rv
ckNoZWNraW5nU3RyYXRlZ3k6OmlzTGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAg
ICAgKiBodG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2VsZWN0aW9uc1RvKToKKyAgICAgICAg
KiBodG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxl
Y3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tDb250ZW50U2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9y
RGF0YUxpc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9y
RGF0YUxpc3Q6Om1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hl
Y2tpbmdTdHJhdGVneTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneSk6IFVzZXMgYSBu
b2RlIHBvb2wgYXMKKyAgICAgICAgZWxlbWVudCdzIHNpYmxpbmdzLgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6aXNGaXJzdENoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmlzTGFzdENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6Omlz
Rmlyc3RPZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdT
dHJhdGVneTo6aXNMYXN0T2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3Rv
ckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNCZWZvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tpbmdTdHJhdGVneTo6Y291bnRFbGVtZW50c0FmdGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmNvdW50
RWxlbWVudHNPZlR5cGVCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9y
Q2hlY2tpbmdTdHJhdGVneTo6Y291bnRFbGVtZW50c09mVHlwZUFmdGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRTZWxlY3RvclF1ZXJ5OjpDb250ZW50U2VsZWN0b3JRdWVyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyk6CisgICAgICAgICog
aHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaDoKKyAgICAgICAgKENvbnRlbnRTZWxl
Y3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb250ZW50U2VsZWN0
b3JEYXRhTGlzdCk6CisgICAgICAgIChDb250ZW50U2VsZWN0b3JDaGVja2luZ1N0cmF0ZWd5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNraW5nU3RyYXRlZ3k6OmVsZW1l
bnQpOgorICAgICAgICAoQ29udGVudFNlbGVjdG9yUXVlcnkpOgorCiAyMDEyLTA5LTI0ICBQYXRy
aWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBTdHJp
bmc6Om9wZXJhdG9yKz0oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRl
eCBhYWU0N2UyY2Y5MzY5ODU0ZjVjYTE3ZDBlYjc3MDZiMDViMjMwNjM2Li5iYmIxNWRmNTk2OTEx
Mzg5ZjZjNmY1OGYyNjI2MDE5OTgwZGY5ODdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKKyNpbmNsdWRlICJDb250ZW50U2VsZWN0b3JR
dWVyeS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNo
ZWV0Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgpAQCAtNTUsNiAr
NTYsOCBAQAogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAKKyNp
bmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKwogI2lmIFVTRShQTEFURk9STV9TVFJBVEVHSUVT
KQogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5r
U3RyYXRlZ3kuaCIKQEAgLTQzOSw3ICs0NDIsOCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6aXNG
YXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogLy8gKiBT
ZWxlY3RvckZhaWxzTG9jYWxseSAgICAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVt
ZW50IGUKIC8vICogU2VsZWN0b3JGYWlsc0FsbFNpYmxpbmdzIC0gdGhlIHNlbGVjdG9yIGZhaWxz
IGZvciBlIGFuZCBhbnkgc2libGluZyBvZiBlCiAvLyAqIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
ICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxpbmcgb3IgYW5jZXN0b3Ig
b2YgZQotU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUHNldWRv
SWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wmIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cykgY29uc3QK
K3RlbXBsYXRlPHR5cGVuYW1lIENoZWNraW5nQ29udGV4dD4KK1NlbGVjdG9yQ2hlY2tlcjo6U2Vs
ZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoY29uc3QgQ2hlY2tpbmdD
b250ZXh0JiBjb250ZXh0LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCYgaGFzVW5rbm93
blBzZXVkb0VsZW1lbnRzKSBjb25zdAogewogICAgIC8vIGZpcnN0IHNlbGVjdG9yIGhhcyB0byBt
YXRjaAogICAgIGlmICghY2hlY2tPbmVTZWxlY3Rvcihjb250ZXh0LCBkeW5hbWljUHNldWRvLCBo
YXNVbmtub3duUHNldWRvRWxlbWVudHMpKQpAQCAtNDUzLDcgKzQ1Nyw3IEBAIFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoY29uc3Qg
U2VsZWN0b3JDaGVjCiAgICAgaWYgKCFoaXN0b3J5U2VsZWN0b3IpCiAgICAgICAgIHJldHVybiBT
ZWxlY3Rvck1hdGNoZXM7CiAKLSAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBuZXh0Q29udGV4
dChjb250ZXh0KTsKKyAgICBDaGVja2luZ0NvbnRleHQgbmV4dENvbnRleHQoY29udGV4dCk7CiAg
ICAgbmV4dENvbnRleHQuc2VsZWN0b3IgPSBoaXN0b3J5U2VsZWN0b3I7CiAKICAgICBpZiAocmVs
YXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7CkBAIC03MDEsNyArNzA1LDggQEAg
c3RhdGljIGJvb2wgYW55QXR0cmlidXRlTWF0Y2hlcyhFbGVtZW50KiBlbGVtZW50LCBDU1NTZWxl
Y3Rvcjo6TWF0Y2ggbWF0Y2gsIGNvbnMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0JiBjb250ZXh0LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCYgaGFzVW5rbm93blBz
ZXVkb0VsZW1lbnRzKSBjb25zdAordGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tpbmdDb250ZXh0Pgor
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoY29uc3QgQ2hlY2tpbmdDb250
ZXh0JiBjb250ZXh0LCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCYgaGFzVW5rbm93blBz
ZXVkb0VsZW1lbnRzKSBjb25zdAogewogICAgIEVsZW1lbnQqIGNvbnN0ICYgZWxlbWVudCA9IGNv
bnRleHQuZWxlbWVudDsKICAgICBDU1NTZWxlY3RvciogY29uc3QgJiBzZWxlY3RvciA9IGNvbnRl
eHQuc2VsZWN0b3I7CkBAIC03MzgsNyArNzQzLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFAK
ICAgICAgICAgICAgIGlmICghc2VsZWN0b3JMaXN0KQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc3ViQ29udGV4dChj
b250ZXh0KTsKKyAgICAgICAgICAgIENoZWNraW5nQ29udGV4dCBzdWJDb250ZXh0KGNvbnRleHQp
OwogICAgICAgICAgICAgc3ViQ29udGV4dC5pc1N1YlNlbGVjdG9yID0gdHJ1ZTsKICAgICAgICAg
ICAgIGZvciAoc3ViQ29udGV4dC5zZWxlY3RvciA9IHNlbGVjdG9yTGlzdC0+Zmlyc3QoKTsgc3Vi
Q29udGV4dC5zZWxlY3Rvcjsgc3ViQ29udGV4dC5zZWxlY3RvciA9IHN1YkNvbnRleHQuc2VsZWN0
b3ItPnRhZ0hpc3RvcnkoKSkgewogICAgICAgICAgICAgICAgIC8vIDpub3QgY2Fubm90IG5lc3Qu
IEkgZG9uJ3QgcmVhbGx5IGtub3cgd2h5IHRoaXMgaXMgYQpAQCAtNzkyLDkgKzc5Nyw3IEBAIGJv
b2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNvbnN0IFNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0JiBjb250ZXh0LCBQCiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Zp
cnN0Q2hpbGQ6CiAgICAgICAgICAgICAvLyBmaXJzdC1jaGlsZCBtYXRjaGVzIHRoZSBmaXJzdCBj
aGlsZCB0aGF0IGlzIGFuIGVsZW1lbnQKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnRF
bGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgIGlmICghZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKQotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0
ID0gRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6aXNGaXJzdENoaWxkKGNv
bnRleHQsIGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5n
U3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBj
b250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVu
ZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
ID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IGVs
ZW1lbnQtPnBhcmVudE5vZGUoKS0+cmVuZGVyU3R5bGUoKTsKQEAgLTgwOSwxNCArODEyLDcgQEAg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVj
a2luZ0NvbnRleHQmIGNvbnRleHQsIFAKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
Rmlyc3RPZlR5cGU6CiAgICAgICAgICAgICAvLyBmaXJzdC1vZi10eXBlIG1hdGNoZXMgdGhlIGZp
cnN0IGVsZW1lbnQgb2YgaXRzIHR5cGUKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnRF
bGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSA9IGVsZW1lbnQtPnRhZ1FOYW1lKCk7
Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+
cHJldmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5n
LT5oYXNUYWdOYW1lKHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gRE9N
VHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6aXNGaXJzdE9mVHlwZShjb250ZXh0
LCBlbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKICAgICAgICAgICAgICAgICBpZiAobV9t
b2RlID09IFJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxl
KiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFy
ZW50U3R5bGUgOiBlbGVtZW50LT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYXJlbnRTdHlsZSkKQEAgLTgyOCw3ICs4MjQsNyBAQCBib29sIFNl
bGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCYgY29udGV4dCwgUAogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYXN0Q2hp
bGQ6CiAgICAgICAgICAgICAvLyBsYXN0LWNoaWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhh
dCBpcyBhbiBlbGVtZW50CiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9
IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0
ID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpICYmICFlbGVtZW50
LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHBh
cmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiBET01UcmF2ZXJzYWxT
dHJhdGVneTxDaGVja2luZ0NvbnRleHQ+Ojppc0xhc3RDaGlsZChjb250ZXh0LCBlbGVtZW50KTsK
ICAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IFJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5
bGUgPyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVu
dFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5k
ZXJTdHlsZSgpOwpAQCAtODUwLDE5ICs4NDYsMTMgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmIGNvbnRleHQsIFAK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5p
c0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZWxlbWVu
dC0+dGFnUU5hbWUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxp
bmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNp
YmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChz
aWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250
ZXh0Pjo6aXNMYXN0T2ZUeXBlKGNvbnRleHQsIGVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb09ubHlDaGlsZDoKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRF
bGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9v
bCBmaXJzdENoaWxkID0gIWVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKLSAgICAg
ICAgICAgICAgICBib29sIG9ubHlDaGlsZCA9IGZpcnN0Q2hpbGQgJiYgcGFyZW50RWxlbWVudC0+
aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpICYmICFlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxp
bmcoKTsKLQorICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RDaGlsZCA9IERPTVRyYXZlcnNhbFN0
cmF0ZWd5PENoZWNraW5nQ29udGV4dD46OmlzRmlyc3RDaGlsZChjb250ZXh0LCBlbGVtZW50KTsK
KyAgICAgICAgICAgICAgICBib29sIG9ubHlDaGlsZCA9IGZpcnN0Q2hpbGQgJiYgcGFyZW50RWxl
bWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpICYmIERPTVRyYXZlcnNhbFN0cmF0ZWd5
PENoZWNraW5nQ29udGV4dD46OmlzTGFzdENoaWxkKGNvbnRleHQsIGVsZW1lbnQpOwogICAgICAg
ICAgICAgICAgIGlmIChtX21vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNv
bnRleHQuZWxlbWVudFN0eWxlIDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUg
PyBjb250ZXh0LmVsZW1lbnRQYXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxl
KCk7CkBAIC04OTAsMzMgKzg4MCwxNCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVT
ZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNo
ZWRQYXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUgPSBlbGVtZW50LT50YWdR
TmFtZSgpOwotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVs
ZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxp
bmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
c2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBF
bGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7
IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIERPTVRyYXZlcnNhbFN0cmF0ZWd5
PENoZWNraW5nQ29udGV4dD46OmlzRmlyc3RPZlR5cGUoY29udGV4dCwgZWxlbWVudCwgZWxlbWVu
dC0+dGFnUU5hbWUoKSkgJiYgRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6
aXNMYXN0T2ZUeXBlKGNvbnRleHQsIGVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb050aENoaWxkOgogICAgICAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRF
bGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50
IGNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcg
PSBlbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBz
aWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
UmVuZGVyU3R5bGUqIHMgPSBzaWJsaW5nLT5yZW5kZXJTdHlsZSgpOwotICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbmRleCA9IHMgPyBzLT5jaGlsZEluZGV4KCkgOiAwOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9
IGluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICB9Ci0K
KyAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hl
Y2tpbmdDb250ZXh0Pjo6Y291bnRFbGVtZW50c0JlZm9yZShjb250ZXh0LCBlbGVtZW50KTsKICAg
ICAgICAgICAgICAgICBpZiAobV9tb2RlID09IFJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUg
PyBjb250ZXh0LmVsZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAg
ICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0
eWxlID8gY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJT
dHlsZSgpOwpAQCAtOTM0LDEyICs5MDUsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAogICAg
ICAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFy
ZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKLSAgICAgICAg
ICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZWxlbWVudC0+dGFnUU5hbWUoKTsK
LSAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5w
cmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2
aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNpYmxpbmct
Pmhhc1RhZ05hbWUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICArK2NvdW50OwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgRE9NVHJhdmVy
c2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6Y291bnRFbGVtZW50c09mVHlwZUJlZm9yZShj
b250ZXh0LCBlbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKICAgICAgICAgICAgICAgICBp
ZiAobV9tb2RlID09IFJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVt
ZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCkBAIC05NjEsOSArOTI3LDcgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRl
eHQmIGNvbnRleHQsIFAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFw
YXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxOwotICAg
ICAgICAgICAgICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRF
bGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRT
aWJsaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgICAgICAgICAg
aW50IGNvdW50ID0gMSArIERPTVRyYXZlcnNhbFN0cmF0ZWd5PENoZWNraW5nQ29udGV4dD46OmNv
dW50RWxlbWVudHNBZnRlcihjb250ZXh0LCBlbGVtZW50KTsKICAgICAgICAgICAgICAgICBpZiAo
c2VsZWN0b3ItPm1hdGNoTnRoKGNvdW50KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICB9CkBAIC05NzksMTIgKzk0Myw4IEBAIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja09uZVNlbGVjdG9yKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250
ZXh0LCBQCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxl
bWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMTsKLSAgICAgICAgICAg
ICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlID0gZWxlbWVudC0+dGFnUU5hbWUoKTsKLSAg
ICAgICAgICAgICAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0
RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50
U2libGluZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1l
KHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgKytjb3VudDsKLSAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgRE9NVHJhdmVyc2FsU3RyYXRl
Z3k8Q2hlY2tpbmdDb250ZXh0Pjo6Y291bnRFbGVtZW50c09mVHlwZUFmdGVyKGNvbnRleHQsIGVs
ZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOwogICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rv
ci0+bWF0Y2hOdGgoY291bnQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIH0KQEAgLTk5NSw3ICs5NTUsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCwgUAog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FueToK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dCBz
dWJDb250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgICAgIENoZWNraW5nQ29udGV4dCBzdWJD
b250ZXh0KGNvbnRleHQpOwogICAgICAgICAgICAgICAgIHN1YkNvbnRleHQuaXNTdWJTZWxlY3Rv
ciA9IHRydWU7CiAgICAgICAgICAgICAgICAgZm9yIChzdWJDb250ZXh0LnNlbGVjdG9yID0gc2Vs
ZWN0b3ItPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzdWJDb250ZXh0LnNlbGVjdG9yOyBzdWJD
b250ZXh0LnNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHN1YkNvbnRleHQuc2VsZWN0
b3IpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHN1YkNvbnRleHQs
IGR5bmFtaWNQc2V1ZG8sIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cykgPT0gU2VsZWN0b3JNYXRj
aGVzKQpAQCAtMTM5Miw0ICsxMzUyLDIyNCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJt
aW5lU2VsZWN0b3JTY29wZXMoY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3RvckxpcwogICAg
IHJldHVybiB0cnVlOwogfQogCit0ZW1wbGF0ZTw+CitpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2lu
Z0NvbnRleHQ+Ojppc0ZpcnN0Q2hpbGQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNo
ZWNraW5nQ29udGV4dCYsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgcmV0dXJuICFlbGVtZW50
LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpT
ZWxlY3RvckNoZWNraW5nQ29udGV4dD46OmlzTGFzdENoaWxkKGNvbnN0IFNlbGVjdG9yQ2hlY2tl
cjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIHJl
dHVybiAhZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7Cit9CisKK3RlbXBsYXRlPD4KK2lu
bGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JD
aGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dD46OmlzRmlyc3RPZlR5cGUoY29uc3QgU2Vs
ZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCit7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBz
aWJsaW5nID0gZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJs
aW5nID0gc2libGluZy0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CisgICAgICAgIGlmIChz
aWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIGJvb2wgU2VsZWN0
b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0Pjo6aXNMYXN0T2ZUeXBlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQmLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiB0eXBlKQoreworICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQt
Pm5leHRFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVs
ZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Cit0ZW1wbGF0ZTw+CitpbmxpbmUgaW50IFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2FsU3Ry
YXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dD46OmNvdW50RWxl
bWVudHNCZWZvcmUoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4
dCYsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKGNv
bnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7
IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsK
KyAgICAgICAgUmVuZGVyU3R5bGUqIHMgPSBzaWJsaW5nLT5yZW5kZXJTdHlsZSgpOworICAgICAg
ICB1bnNpZ25lZCBpbmRleCA9IHMgPyBzLT5jaGlsZEluZGV4KCkgOiAwOworICAgICAgICBpZiAo
aW5kZXgpIHsKKyAgICAgICAgICAgIGNvdW50ICs9IGluZGV4OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY291bnQrKzsKKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7
Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBpbnQgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJz
YWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Pjo6Y291
bnRFbGVtZW50c09mVHlwZUJlZm9yZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0JiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlw
ZSkKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGlu
ZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9
IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoc2libGlu
Zy0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAg
cmV0dXJuIGNvdW50OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgaW50IFNlbGVjdG9yQ2hlY2tl
cjo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5n
Q29udGV4dD46OmNvdW50RWxlbWVudHNBZnRlcihjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0JiwgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpbnQgY291bnQg
PSAwOworICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVt
ZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJs
aW5nKCkpCisgICAgICAgICsrY291bnQ7CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK3RlbXBs
YXRlPD4KK2lubGluZSBpbnQgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Pjo6Y291bnRFbGVtZW50c09m
VHlwZUFmdGVyKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQm
LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQoreworICAgIGlu
dCBjb3VudCA9IDA7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+
bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxl
bWVudFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkK
KyAgICAgICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCit0
ZW1wbGF0ZTw+CitpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0
ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+
Ojppc0ZpcnN0Q2hpbGQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29u
dGV4dFdpdGhOb2RlUG9vbCYgY29udGV4dCwgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBVTlVT
RURfUEFSQU0oZWxlbWVudCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNp
YmxpbmdzID0gY29udGV4dC5zaWJsaW5nczsKKyAgICBBU1NFUlQoZWxlbWVudCA9PSB0b0VsZW1l
bnQoc2libGluZ3NbY29udGV4dC5udGhdLmdldCgpKSk7CisgICAgCisgICAgZm9yIChpbnQgaSA9
IGNvbnRleHQubnRoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmdzW2ld
ICYmIHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBi
b29sIFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2Vy
OjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbD46OmlzTGFzdENoaWxkKGNvbnN0
IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2wmIGNv
bnRleHQsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOwor
CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncyA9IGNvbnRleHQuc2li
bGluZ3M7CisgICAgQVNTRVJUKGVsZW1lbnQgPT0gdG9FbGVtZW50KHNpYmxpbmdzW2NvbnRleHQu
bnRoXS5nZXQoKSkpOworCisgICAgZm9yIChzaXplX3QgaSA9IGNvbnRleHQubnRoICsgMTsgaSA8
IHNpYmxpbmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJs
aW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojppc0ZpcnN0T2ZUeXBlKGNvbnN0IFNlbGVj
dG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2wmIGNvbnRleHQs
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVsZW1lbnQpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBz
aWJsaW5ncyA9IGNvbnRleHQuc2libGluZ3M7CisgICAgQVNTRVJUKGVsZW1lbnQgPT0gdG9FbGVt
ZW50KHNpYmxpbmdzW2NvbnRleHQubnRoXS5nZXQoKSkpOworCisgICAgZm9yIChpbnQgaSA9IGNv
bnRleHQubnRoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmdzW2ldICYm
IHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkgJiYgc2libGluZ3NbaV0tPmhhc1RhZ05hbWUo
dHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJh
dmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdp
dGhOb2RlUG9vbD46OmlzTGFzdE9mVHlwZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sJiBjb250ZXh0LCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQoreworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsK
KworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBjb250ZXh0LnNp
YmxpbmdzOworICAgIEFTU0VSVChlbGVtZW50ID09IHRvRWxlbWVudChzaWJsaW5nc1tjb250ZXh0
Lm50aF0uZ2V0KCkpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSBjb250ZXh0Lm50aCArIDE7IGkg
PCBzaWJsaW5ncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoc2libGluZ3NbaV0gJiYgc2li
bGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSAmJiBzaWJsaW5nc1tpXS0+aGFzVGFnTmFtZSh0eXBl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordGVtcGxhdGU8PgoraW5saW5lIGludCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNh
bFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9k
ZVBvb2w+Ojpjb3VudEVsZW1lbnRzQmVmb3JlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2wmIGNvbnRleHQsIEVsZW1lbnQqIGVsZW1lbnQp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxOb2RlPiA+JiBzaWJsaW5ncyA9IGNvbnRleHQuc2libGluZ3M7CisgICAgQVNTRVJUKGVsZW1l
bnQgPT0gdG9FbGVtZW50KHNpYmxpbmdzW2NvbnRleHQubnRoXS5nZXQoKSkpOworCisgICAgaW50
IGNvdW50ID0gMDsKKyAgICBmb3IgKGludCBpID0gY29udGV4dC5udGggLSAxOyBpID49IDA7IC0t
aSkgeworICAgICAgICBpZiAoc2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5v
ZGUoKSkKKyAgICAgICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50Owor
fQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgaW50IFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2Fs
U3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2Rl
UG9vbD46OmNvdW50RWxlbWVudHNBZnRlcihjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sJiBjb250ZXh0LCBFbGVtZW50KiBlbGVtZW50KQor
eworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
Tm9kZT4gPiYgc2libGluZ3MgPSBjb250ZXh0LnNpYmxpbmdzOworICAgIEFTU0VSVChlbGVtZW50
ID09IHRvRWxlbWVudChzaWJsaW5nc1tjb250ZXh0Lm50aF0uZ2V0KCkpKTsKKworICAgIGludCBj
b3VudCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IGNvbnRleHQubnRoICsgMTsgaSA8IHNpYmxp
bmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJsaW5nc1tp
XS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuICsrY291bnQ7CisgICAgfQor
CisgICAgcmV0dXJuIGNvdW50OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgaW50IFNlbGVjdG9y
Q2hlY2tlcjo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNo
ZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbD46OmNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUoY29u
c3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbCYg
Y29udGV4dCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5v
ZGU+ID4mIHNpYmxpbmdzID0gY29udGV4dC5zaWJsaW5nczsKKyAgICBBU1NFUlQoZWxlbWVudCA9
PSB0b0VsZW1lbnQoc2libGluZ3NbY29udGV4dC5udGhdLmdldCgpKSk7CisKKyAgICBpbnQgY291
bnQgPSAwOworICAgIGZvciAoaW50IGkgPSBjb250ZXh0Lm50aCAtIDE7IGkgPj0gMDsgLS1pKSB7
CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgp
ICYmIHNpYmxpbmdzW2ldLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgKytjb3VudDsK
KyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBpbnQg
U2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6OlNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sPjo6Y291bnRFbGVtZW50c09mVHlwZUFm
dGVyKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9k
ZVBvb2wmIGNvbnRleHQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5
cGUpCit7CisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOworCisgICAgY29uc3QgVmVjdG9yPFJl
ZlB0cjxOb2RlPiA+JiBzaWJsaW5ncyA9IGNvbnRleHQuc2libGluZ3M7CisgICAgQVNTRVJUKGVs
ZW1lbnQgPT0gdG9FbGVtZW50KHNpYmxpbmdzW2NvbnRleHQubnRoXS5nZXQoKSkpOworCisgICAg
aW50IGNvdW50ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gY29udGV4dC5udGggKyAxOyBpIDwg
c2libGluZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHNpYmxpbmdzW2ldICYmIHNpYmxp
bmdzW2ldLT5pc0VsZW1lbnROb2RlKCkgJiYgc2libGluZ3NbaV0tPmhhc1RhZ05hbWUodHlwZSkp
CisgICAgICAgICAgICByZXR1cm4gKytjb3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7
Cit9CisKK3RlbXBsYXRlCitTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2ggU2VsZWN0b3JD
aGVja2VyOjpjaGVja1NlbGVjdG9yPFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0Nv
bnRleHQ+KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgUHNldWRvSWQmLCBib29sJikg
Y29uc3Q7Cit0ZW1wbGF0ZQorYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3I8
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbD4oY29u
c3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbCYs
IFBzZXVkb0lkJiwgYm9vbCYpIGNvbnN0OworCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmgKaW5kZXggZjE1Y2UwZDA4ZWU0MzI5OGI0MTIwNDEyY2Y3NmQ5NWFhNWJmM2MwMS4uNDY3
MDdmZThjZTVlNWYyZTI0MjFkMTg4YmRjMjI1YjhhMjQzOWRlOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXIuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNTU1NlbGVjdG9y
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTGlu
a0hhc2guaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxl
Q29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU3BhY2VTcGxpdFN0cmluZy5oIgogI2luY2x1ZGUgIlN0
eWxlZEVsZW1lbnQuaCIKQEAgLTU0LDMxICs1NSw2NSBAQCBwdWJsaWM6CiAgICAgZW51bSBWaXNp
dGVkTWF0Y2hUeXBlIHsgVmlzaXRlZE1hdGNoRGlzYWJsZWQsIFZpc2l0ZWRNYXRjaEVuYWJsZWQg
fTsKICAgICBlbnVtIE1vZGUgeyBSZXNvbHZpbmdTdHlsZSA9IDAsIENvbGxlY3RpbmdSdWxlcywg
UXVlcnlpbmdSdWxlcyB9OwogCi0gICAgc3RydWN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHsK
KyAgICBzdHJ1Y3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHRCYXNlIHsKICAgICAgICAgLy8gSW5p
dGlhbCBzZWxlY3RvciBjb25zdHJ1Y3RvcgotICAgICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4
dChDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIFZpc2l0ZWRNYXRjaFR5
cGUgdmlzaXRlZE1hdGNoVHlwZSkKKyAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHRCYXNl
KENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVudCwgVmlzaXRlZE1hdGNoVHlw
ZSB2aXNpdGVkTWF0Y2hUeXBlKQogICAgICAgICAgICAgOiBzZWxlY3RvcihzZWxlY3RvcikKICAg
ICAgICAgICAgICwgZWxlbWVudChlbGVtZW50KQogICAgICAgICAgICAgLCBzY29wZSgwKQogICAg
ICAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHZpc2l0ZWRNYXRjaFR5cGUpCisgICAgICAgICAg
ICAsIHBzZXVkb1N0eWxlKE5PUFNFVURPKQogICAgICAgICAgICAgLCBlbGVtZW50U3R5bGUoMCkK
ICAgICAgICAgICAgICwgZWxlbWVudFBhcmVudFN0eWxlKDApCiAgICAgICAgICAgICAsIGlzU3Vi
U2VsZWN0b3IoZmFsc2UpCi0gICAgICAgICAgICAsIHBzZXVkb1N0eWxlKE5PUFNFVURPKQogICAg
ICAgICB7IH0KIAogICAgICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3I7CiAgICAgICAgIEVsZW1l
bnQqIGVsZW1lbnQ7CiAgICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlOwogICAgICAg
ICBWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGU7CisgICAgICAgIFBzZXVkb0lkIHBz
ZXVkb1N0eWxlOwogICAgICAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlOwogICAgICAgICBS
ZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlOwogICAgICAgICBib29sIGlzU3ViU2VsZWN0
b3I7Ci0gICAgICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxlOworICAgIH07CisKKyAgICBzdHJ1Y3Qg
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2luZ0NvbnRleHRC
YXNlIHsKKyAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQoQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yLCBFbGVtZW50KiBlbGVtZW50LCBWaXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUp
CisgICAgICAgICAgICA6IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0QmFzZShzZWxlY3RvciwgZWxl
bWVudCwgdmlzaXRlZE1hdGNoVHlwZSkKKyAgICAgICAgeyB9CisgICAgfTsKKworICAgIHN0cnVj
dCBTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbCA6IHB1YmxpYyBTZWxlY3RvckNo
ZWNraW5nQ29udGV4dEJhc2UgeworICAgICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhO
b2RlUG9vbChDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4g
PiYgcG9vbCwgaW50IG50aCwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlKQorICAg
ICAgICAgICAgOiBTZWxlY3RvckNoZWNraW5nQ29udGV4dEJhc2Uoc2VsZWN0b3IsIHRvRWxlbWVu
dChwb29sW250aF0uZ2V0KCkpLCB2aXNpdGVkTWF0Y2hUeXBlKQorICAgICAgICAgICAgLCBzaWJs
aW5ncyhwb29sKQorICAgICAgICAgICAgLCBudGgobnRoKQorICAgICAgICB7IH0KKworICAgICAg
ICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gc2libGluZ3M7CisgICAgICAgIGludCBudGg7CisgICAg
fTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+CisgICAgc3RydWN0IERPTVRyYXZl
cnNhbFN0cmF0ZWd5IHsKKyAgICAgICAgc3RhdGljIGJvb2wgaXNGaXJzdENoaWxkKGNvbnN0IENv
bnRleHQmLCBFbGVtZW50Kik7CisgICAgICAgIHN0YXRpYyBib29sIGlzTGFzdENoaWxkKGNvbnN0
IENvbnRleHQmLCBFbGVtZW50Kik7CisgICAgICAgIHN0YXRpYyBib29sIGlzRmlyc3RPZlR5cGUo
Y29uc3QgQ29udGV4dCYsIEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7CisgICAgICAg
IHN0YXRpYyBib29sIGlzTGFzdE9mVHlwZShjb25zdCBDb250ZXh0JiwgRWxlbWVudCosIGNvbnN0
IFF1YWxpZmllZE5hbWUmKTsKKworICAgICAgICBzdGF0aWMgaW50IGNvdW50RWxlbWVudHNCZWZv
cmUoY29uc3QgQ29udGV4dCYsIEVsZW1lbnQqKTsKKyAgICAgICAgc3RhdGljIGludCBjb3VudEVs
ZW1lbnRzQWZ0ZXIoY29uc3QgQ29udGV4dCYsIEVsZW1lbnQqKTsKKyAgICAgICAgc3RhdGljIGlu
dCBjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKGNvbnN0IENvbnRleHQmLCBFbGVtZW50KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYpOworICAgICAgICBzdGF0aWMgaW50IGNvdW50RWxlbWVudHNPZlR5
cGVBZnRlcihjb25zdCBDb250ZXh0JiwgRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsK
ICAgICB9OwogCiAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCos
IGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgPSBmYWxzZSkgY29uc3Q7Ci0gICAgU2VsZWN0
b3JNYXRjaCBjaGVja1NlbGVjdG9yKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgUHNl
dWRvSWQmLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0OworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENoZWNraW5nQ29udGV4dD4KKyAgICBTZWxlY3Rvck1hdGNoIGNoZWNrU2Vs
ZWN0b3IoY29uc3QgQ2hlY2tpbmdDb250ZXh0JiwgUHNldWRvSWQmLCBib29sJiBoYXNVbmtub3du
UHNldWRvRWxlbWVudHMpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNraW5nQ29u
dGV4dD4KKyAgICBib29sIGNoZWNrT25lU2VsZWN0b3IoY29uc3QgQ2hlY2tpbmdDb250ZXh0Jiwg
UHNldWRvSWQmLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0OworCiAgICAg
c3RhdGljIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsK
ICAgICBib29sIGZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgY29uc3QgRWxl
bWVudCopIGNvbnN0OwogCkBAIC0xMTcsNyArMTUyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBi
b29sIGVsZW1lbnRNYXRjaGVzU2VsZWN0b3JTY29wZXMoY29uc3QgU3R5bGVkRWxlbWVudCosIGNv
bnN0IEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgY29uc3QgSGFzaFNldDxB
dG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGNo
ZWNrT25lU2VsZWN0b3IoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYs
IGJvb2wmIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cykgY29uc3Q7CisKICAgICBib29sIGNoZWNr
U2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVk
bykgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgaXNGcmFtZUZvY3VzZWQoY29uc3QgRWxlbWVudCop
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJp
YnV0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9y
LmNwcAppbmRleCAwNzZhNzIzYzhhOTFhZmU5MzE4ODc2NTg5NGNlNzczNmRjMzY2YTAwLi42NzQ4
YjU5OTFkYjY3ZmJiMzVkZWM3OWYzNTM0ODZhNGRiZDdkZWFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKQEAgLTExNywxMCArMTE3
LDEwIEBAIHZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2VsZWN0aW9uc1RvKElu
c2VydGlvblBvaW50KiBpbnNlcnRpb25Qb2ludCwKICAgICAgICAgaWYgKGRpc3RyaWJ1dGVkW2ld
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgTm9kZSogY2hpbGQgPSBwb29sW2ld
LmdldCgpOwotICAgICAgICBpZiAoIXF1ZXJ5Lm1hdGNoZXMoY2hpbGQpKQorICAgICAgICBpZiAo
IXF1ZXJ5Lm1hdGNoZXMocG9vbCwgaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAg
ICBOb2RlKiBjaGlsZCA9IHBvb2xbaV0uZ2V0KCk7CiAgICAgICAgIGRpc3RyaWJ1dGlvbi5hcHBl
bmQoY2hpbGQpOwogICAgICAgICBtX25vZGVUb0luc2VydGlvblBvaW50LmFkZChjaGlsZCwgaW5z
ZXJ0aW9uUG9pbnQpOwogICAgICAgICBkaXN0cmlidXRlZFtpXSA9IHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHAKaW5kZXgg
ZjEyYzU5OTI1ZjdjOTMyNGY2ZmVmY2JlYjIyMzU4OTU3ZGYyMTFmMy4uMjViODQyNzA5OTU2NGZi
YWFiODgyZTk4YzAzYzlkY2I2ZTU0MDQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcApAQCAtMjksMTcgKzI5LDUzIEBACiAK
ICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKKyNp
bmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5j
bHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MUHJvZ3Jlc3NFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSW5zZXJ0aW9uUG9pbnQuaCIKICNpbmNsdWRlICJTaGFkb3dSb290Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwor
Q29udGVudFNlbGVjdG9yQ2hlY2tlcjo6Q29udGVudFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgc3RyaWN0UGFyc2luZykKKyAgICA6IG1fc2VsZWN0b3JDaGVja2VyKGRv
Y3VtZW50LCBzdHJpY3RQYXJzaW5nKQoreworICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUo
U2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpOworfQorCitib29sIENvbnRlbnRTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrQ29udGVudFNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3Rvciwg
Y29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50IG50aCkgY29uc3QKK3sK
KyAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87CisgICAgYm9vbCBoYXNVbmtu
b3duUHNldWRvRWxlbWVudHMgPSBmYWxzZTsKKyAgICBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sIGNvbnRleHQoc2VsZWN0b3IsIHNpYmxpbmdzLCBu
dGgsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpOworICAgIAorICAgIHJl
dHVybiBtX3NlbGVjdG9yQ2hlY2tlci5jaGVja09uZVNlbGVjdG9yKGNvbnRleHQsIGR5bmFtaWNQ
c2V1ZG8sIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cyk7Cit9CisKK3ZvaWQgQ29udGVudFNlbGVj
dG9yRGF0YUxpc3Q6OmluaXRpYWxpemUoY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3RvcnMp
Cit7CisgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWxlY3RvcnMuZmlyc3QoKTsg
c2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkKKyAg
ICAgICAgbV9zZWxlY3RvcnMuYXBwZW5kKHNlbGVjdG9yKTsKK30KKworYm9vbCBDb250ZW50U2Vs
ZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyhjb25zdCBDb250ZW50U2VsZWN0b3JDaGVja2VyJiBzZWxl
Y3RvckNoZWNrZXIsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGludCBu
dGgpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgc2VsZWN0b3JDb3VudCA9IG1fc2VsZWN0b3JzLnNp
emUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VsZWN0b3JDb3VudDsgKytpKSB7
CisgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIuY2hlY2tDb250ZW50U2VsZWN0b3IobV9zZWxl
Y3RvcnNbaV0sIHNpYmxpbmdzLCBudGgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiBDb250ZW50U2VsZWN0b3JRdWVyeTo6Q29udGVu
dFNlbGVjdG9yUXVlcnkoY29uc3QgSW5zZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50KQogICAg
IDogbV9pbnNlcnRpb25Qb2ludChpbnNlcnRpb25Qb2ludCkKICAgICAsIG1fc2VsZWN0b3JDaGVj
a2VyKGluc2VydGlvblBvaW50LT5kb2N1bWVudCgpLCAhaW5zZXJ0aW9uUG9pbnQtPmRvY3VtZW50
KCktPmluUXVpcmtzTW9kZSgpKQogewotICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2Vs
ZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpOwotCiAgICAgaWYgKGluc2VydGlvblBvaW50
LT5zZWxlY3QoKS5pc051bGwoKSB8fCBpbnNlcnRpb25Qb2ludC0+c2VsZWN0KCkuaXNFbXB0eSgp
KSB7CiAgICAgICAgIG1faXNWYWxpZFNlbGVjdG9yID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwpA
QCAtNTgsMTQgKzk0LDE0IEBAIGJvb2wgQ29udGVudFNlbGVjdG9yUXVlcnk6OmlzVmFsaWRTZWxl
Y3RvcigpIGNvbnN0CiAgICAgcmV0dXJuIG1faXNWYWxpZFNlbGVjdG9yOwogfQogCi1ib29sIENv
bnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVzKE5vZGUqIG5vZGUpIGNvbnN0Citib29sIENvbnRl
bnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2li
bGluZ3MsIGludCBudGgpIGNvbnN0CiB7CisgICAgTm9kZSogbm9kZSA9IHNpYmxpbmdzW250aF0u
Z2V0KCk7CisKICAgICBBU1NFUlQobm9kZSk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpID09IG1faW5zZXJ0aW9u
UG9pbnQtPnNoYWRvd1Jvb3QoKS0+aG9zdCgpKTsKLQogICAgIGlmIChtX2luc2VydGlvblBvaW50
LT5zZWxlY3QoKS5pc051bGwoKSB8fCBtX2luc2VydGlvblBvaW50LT5zZWxlY3QoKS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC03NSw3ICsxMTEsNyBAQCBib29sIENvbnRl
bnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVzKE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgaWYgKCFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBt
X3NlbGVjdG9ycy5tYXRjaGVzKG1fc2VsZWN0b3JDaGVja2VyLCB0b0VsZW1lbnQobm9kZSkpOwor
ICAgIHJldHVybiBtX3NlbGVjdG9ycy5tYXRjaGVzKG1fc2VsZWN0b3JDaGVja2VyLCBzaWJsaW5n
cywgbnRoKTsKIH0KIAogc3RhdGljIGJvb2wgdmFsaWRhdGVTdWJTZWxlY3RvcihDU1NTZWxlY3Rv
ciogc2VsZWN0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250
ZW50U2VsZWN0b3JRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNl
bGVjdG9yUXVlcnkuaAppbmRleCA5NGZhM2VmY2NmM2Y5ZDcyZTk3NDc3NWUyZDJkMzE0MGQxM2Ni
MzRlLi4yYzcxMGE1ODUyZTkyZDc2ODgyYzdjMjA3NTBiZmQyNmRhMmFhMDNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmgKQEAgLTQz
LDI1ICs0Myw0MSBAQCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIE5vZGU7CiBjbGFzcyBJbnNlcnRp
b25Qb2ludDsKIAorY2xhc3MgQ29udGVudFNlbGVjdG9yQ2hlY2tlciB7CitwdWJsaWM6CisgICAg
Q29udGVudFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCosIGJvb2wgc3RyaWN0UGFyc2luZyk7CisK
KyAgICBib29sIGNoZWNrQ29udGVudFNlbGVjdG9yKENTU1NlbGVjdG9yKiwgY29uc3QgVmVjdG9y
PFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50IG50aE5vZGUpIGNvbnN0OworcHJpdmF0ZToK
KyAgICBTZWxlY3RvckNoZWNrZXIgbV9zZWxlY3RvckNoZWNrZXI7Cit9OworCitjbGFzcyBDb250
ZW50U2VsZWN0b3JEYXRhTGlzdCB7CitwdWJsaWM6CisgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0
IENTU1NlbGVjdG9yTGlzdCYpOworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBDb250ZW50U2VsZWN0
b3JDaGVja2VyJiwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50IG50
aE5vZGUpIGNvbnN0OworCitwcml2YXRlOgorICAgIFZlY3RvcjxDU1NTZWxlY3Rvcio+IG1fc2Vs
ZWN0b3JzOworfTsKKwogY2xhc3MgQ29udGVudFNlbGVjdG9yUXVlcnkgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENvbnRlbnRTZWxlY3RvclF1ZXJ5KTsKIHB1YmxpYzoKICAgICBleHBsaWNp
dCBDb250ZW50U2VsZWN0b3JRdWVyeShjb25zdCBJbnNlcnRpb25Qb2ludCopOwogCiAgICAgYm9v
bCBpc1ZhbGlkU2VsZWN0b3IoKSBjb25zdDsKLSAgICBib29sIG1hdGNoZXMoTm9kZSopIGNvbnN0
OworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdz
LCBpbnQgbnRoTm9kZSkgY29uc3Q7CiBwcml2YXRlOgogICAgIGJvb2wgdmFsaWRhdGVTZWxlY3Rv
ckxpc3QoKTsKIAogICAgIGNvbnN0IEluc2VydGlvblBvaW50KiBtX2luc2VydGlvblBvaW50Owot
ICAgIFNlbGVjdG9yRGF0YUxpc3QgbV9zZWxlY3RvcnM7CisgICAgQ29udGVudFNlbGVjdG9yRGF0
YUxpc3QgbV9zZWxlY3RvcnM7CiAgICAgQ1NTU2VsZWN0b3JMaXN0IG1fc2VsZWN0b3JMaXN0Owot
ICAgIFNlbGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKKyAgICBDb250ZW50U2VsZWN0
b3JDaGVja2VyIG1fc2VsZWN0b3JDaGVja2VyOwogICAgIGJvb2wgbV9pc1ZhbGlkU2VsZWN0b3I7
CiB9OwogCiB9CiAKLQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQ1NT
L3BzZXVkb2NsYXNzLXNlbGVjdG9ycy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9DU1MvcHNldWRv
Y2xhc3Mtc2VsZWN0b3JzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmViZmJmY2NjZDIzNTUyNWZmNDFkYjM0
MjdjNjQwODQyODNhZjhjNAotLS0gL2Rldi9udWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQ1NT
L3BzZXVkb2NsYXNzLXNlbGVjdG9ycy5odG1sCkBAIC0wLDAgKzEsNDUgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8Ym9keT4KKworPGRpdiBpZD0idGVzdC10YXJnZXQiPgorICAgIDxkaXY+
CisgICAgICAgIDxkaXY+PC9kaXY+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgICA8c3Bhbj48
L3NwYW4+CisgICAgICAgICAgICA8c3Bhbj48L3NwYW4+CisgICAgICAgICAgICA8c3Bhbj48L3Nw
YW4+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2PjwvZGl2PgorICAgIDwvZGl2PgorICAg
IDxkaXY+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgICA8c3Bhbj48L3NwYW4+CisgICAgICAg
IDwvZGl2PgorICAgIDwvZGl2PgorICAgIDxzcGFuPjwvc3Bhbj4KKyAgICA8c3Bhbj48L3NwYW4+
CisgICAgPHNwYW4+PC9zcGFuPgorICAgIDxzcGFuPjwvc3Bhbj4KKzwvZGl2PgorCis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorUGVyZlRl
c3RSdW5uZXIucnVuUGVyU2Vjb25kKHsKKyAgICBkZXNjcmlwdGlvbjogIlRoaXMgYmVuY2htYXJr
IHRlc3RzIENTUyBTZWxlY3RvciBwZXJmb3JtYW5jZSB3aXRoIHF1ZXJ5U2VsZWN0b3IoKS4iLAor
ICAgIHJ1bjogZnVuY3Rpb24oKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyBp
KyspIHsKKyAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNwYW46Zmlyc3QtY2hp
bGQiKTsKKyAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNwYW46bGFzdC1jaGls
ZCIpOworICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic3BhbjpmaXJzdC1vZi10
eXBlIik7CisgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzcGFuOmxhc3Qtb2Yt
dHlwZSIpOworICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic3BhbjpudGgtY2hp
bGQoNG4rMykiKTsKKyAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNwYW46bnRo
LWxhc3QtY2hpbGQoNG4rMykiKTsKKyAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Io
InNwYW46bnRoLW9mLXR5cGUoNG4rMykiKTsKKyAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2Vs
ZWN0b3IoInNwYW46bnRoLWxhc3Qtb2YtdHlwZSg0biszKSIpOworICAgICAgICB9CisgICAgfQor
fSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167079</attachid>
            <date>2012-10-04 05:22:20 -0700</date>
            <delta_ts>2012-10-04 22:58:00 -0700</delta_ts>
            <desc>Rebase on dependent patch https://bugs.webkit.org/attachment.cgi?id=167073</desc>
            <filename>bug-96990-20121004212130.patch</filename>
            <type>text/plain</type>
            <size>17266</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMzU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTVkNzFiODYwZWFkMjUy
MTUzMjk3N2Q4ZDVmOGViNmYzMDA1OWVhMC4uN2YxNTgyNTE5OTU1N2M2NmM0NzFmMzU1YTEyZTM2
OWFkYzAzZjY2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDUzIEBACiAyMDEyLTEwLTA0ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KIAorICAgICAgICBNYWtlIENvbnRlbnRTZWxl
Y3RvclF1ZXJ5IHdvcmsgd2hlbiBhIG5vZGUgUE9PTCBpcyB1c2VkIGluc3RlYWQgb2Ygbm9kZSdz
IHJlYWwgc2libGluZ3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05Njk5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdoZW4gd2UgaW1wbGVtZW50IGNvbnRlbnQgcmVwcm9qZWN0aW9uIGluIFNoYWRvdyBE
T00sIHdlIGhhdmUgdG8gdXNlIGEgbm9kZSBwb29sIGFzIHNpYmxpbmdzCisgICAgICAgIGluc3Rl
YWQgb2Ygbm9kZSdzIHJlYWwgc2libGluZ3MuIFNlbGVjdG9yQ2hlY2tlciBzaG91bGQgYmUgYWJs
ZSB0byBoYW5kbGUgaXQgYXMgd2VsbC4KKworICAgICAgICBXZSBpbnRyb2R1Y2UgU2VsZWN0b3JD
aGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2wgYXMgYSB0ZW1wbGF0ZSBhcmd1bWVudCBvZiBET01U
cmF2ZXJzYWxTdHJhdGVneSB0byBoYW5kbGUgdGhpcy4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IGV4aXN0aW5nIHRlc3RzIHNob3VsZCBjb3Zlci4KKworICAgICAgICAqIGNzcy9TZWxlY3RvckNo
ZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0
b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojppc0ZpcnN0Q2hpbGQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbD46OmlzTGFzdENoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5v
ZGVQb29sPjo6aXNGaXJzdE9mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpET01UcmF2ZXJzYWxT
dHJhdGVneTxTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbD46OmlzTGFzdE9mVHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNr
aW5nQ29udGV4dFdpdGhOb2RlUG9vbD46OmNvdW50RWxlbWVudHNCZWZvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRo
Tm9kZVBvb2w+Ojpjb3VudEVsZW1lbnRzQWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVHJh
dmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojpjb3Vu
dEVsZW1lbnRzT2ZUeXBlQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRyYXZlcnNhbFN0
cmF0ZWd5PFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sPjo6Y291bnRFbGVtZW50
c09mVHlwZUFmdGVyKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0QmFzZTo6
U2VsZWN0b3JDaGVja2luZ0NvbnRleHRCYXNlKToKKyAgICAgICAgKFNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0OjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCk6CisgICAgICAgIChTZWxl
Y3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbDo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRo
Tm9kZVBvb2wpOgorICAgICAgICAoU2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2wp
OgorICAgICAgICAqIGh0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RGlzdHJpYnV0b3I6OmRpc3RyaWJ1dGVTZWxlY3Rpb25zVG8pOgor
ICAgICAgICAqIGh0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXIp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VsZWN0b3JD
aGVja2VyOjpjaGVja0NvbnRlbnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
U2VsZWN0b3JEYXRhTGlzdDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
U2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2Vs
ZWN0b3JRdWVyeTo6Q29udGVudFNlbGVjdG9yUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudFNlbGVjdG9yUXVlcnk6Om1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6dmFsaWRhdGVT
dWJTZWxlY3Rvcik6CisgICAgICAgICogaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnku
aDoKKyAgICAgICAgKENvbnRlbnRTZWxlY3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChDb250ZW50U2VsZWN0b3JEYXRhTGlzdCk6CisgICAgICAgIChDb250ZW50U2Vs
ZWN0b3JRdWVyeSk6CisKKzIwMTItMTAtMDQgIEhheWF0byBJdG8gIDxoYXlhdG9AY2hyb21pdW0u
b3JnPgorCiAgICAgICAgIFtSZWZhY3RvcmluZ10gSW50cm9kdWNlIGEgdHJhdmVyc2FsIHN0cmF0
ZWd5IGluIFNlbGVjdG9yQ2hlY2tlcgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTcyOTgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNw
cAppbmRleCBiZjU4MDNkMjA3OGVmNzE5NzQwNmFlZTA2ZWM4Mzc4MGIyMjA2ZTg1Li5jNzg5OTNj
OWZjOWI4YWMwNWY4Yjk4OTdiYzMxN2Q5MGQ5MDI3ZDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ1NTU2VsZWN0
b3IuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKKyNpbmNsdWRlICJDb250ZW50U2Vs
ZWN0b3JRdWVyeS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRT
dHlsZVNoZWV0Q29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgpAQCAt
NTUsNiArNTYsOCBAQAogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgi
CiAKKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKwogI2lmIFVTRShQTEFURk9STV9TVFJB
VEVHSUVTKQogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1ZGUgIlZpc2l0
ZWRMaW5rU3RyYXRlZ3kuaCIKQEAgLTE0NDIsNyArMTQ0NSwxNDEgQEAgaW5saW5lIGludCBTZWxl
Y3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JDaGVja2kKICAgICByZXR1cm4gY291bnQ7CiB9CiAKK3RlbXBsYXRlPD4KK2lubGluZSBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpT
ZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbD46OmlzRmlyc3RDaGlsZChjb25zdCBT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sJiBjb250
ZXh0LCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKwor
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBjb250ZXh0LnNpYmxp
bmdzOworICAgIEFTU0VSVChlbGVtZW50ID09IHRvRWxlbWVudChzaWJsaW5nc1tjb250ZXh0Lm50
aF0uZ2V0KCkpKTsKKworICAgIGZvciAoaW50IGkgPSBjb250ZXh0Lm50aCAtIDE7IGkgPj0gMDsg
LS1pKSB7CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJsaW5nc1tpXS0+aXNFbGVtZW50
Tm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OkRPTVRy
YXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRX
aXRoTm9kZVBvb2w+Ojppc0xhc3RDaGlsZChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sJiBjb250ZXh0LCBFbGVtZW50KiBlbGVtZW50KQor
eworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
Tm9kZT4gPiYgc2libGluZ3MgPSBjb250ZXh0LnNpYmxpbmdzOworICAgIEFTU0VSVChlbGVtZW50
ID09IHRvRWxlbWVudChzaWJsaW5nc1tjb250ZXh0Lm50aF0uZ2V0KCkpKTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSBjb250ZXh0Lm50aCArIDE7IGkgPCBzaWJsaW5ncy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAoc2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwordGVtcGxhdGU8PgoraW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxT
dHJhdGVneTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQ
b29sPjo6aXNGaXJzdE9mVHlwZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0V2l0aE5vZGVQb29sJiBjb250ZXh0LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBR
dWFsaWZpZWROYW1lJiB0eXBlKQoreworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKworICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBjb250ZXh0LnNpYmxpbmdz
OworICAgIEFTU0VSVChlbGVtZW50ID09IHRvRWxlbWVudChzaWJsaW5nc1tjb250ZXh0Lm50aF0u
Z2V0KCkpKTsKKworICAgIGZvciAoaW50IGkgPSBjb250ZXh0Lm50aCAtIDE7IGkgPj0gMDsgLS1p
KSB7CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9k
ZSgpICYmIHNpYmxpbmdzW2ldLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTw+Citpbmxp
bmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojppc0xhc3RPZlR5cGUo
Y29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9v
bCYgY29udGV4dCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PE5vZGU+ID4mIHNpYmxpbmdzID0gY29udGV4dC5zaWJsaW5nczsKKyAgICBBU1NFUlQoZWxlbWVu
dCA9PSB0b0VsZW1lbnQoc2libGluZ3NbY29udGV4dC5udGhdLmdldCgpKSk7CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gY29udGV4dC5udGggKyAxOyBpIDwgc2libGluZ3Muc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkg
JiYgc2libGluZ3NbaV0tPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBp
bnQgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6
OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sPjo6Y291bnRFbGVtZW50c0JlZm9y
ZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQ
b29sJiBjb250ZXh0LCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIFVOVVNFRF9QQVJBTShlbGVt
ZW50KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBjb250
ZXh0LnNpYmxpbmdzOworICAgIEFTU0VSVChlbGVtZW50ID09IHRvRWxlbWVudChzaWJsaW5nc1tj
b250ZXh0Lm50aF0uZ2V0KCkpKTsKKworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChpbnQg
aSA9IGNvbnRleHQubnRoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmdz
W2ldICYmIHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICArK2NvdW50
OworICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIGlu
dCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6
U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojpjb3VudEVsZW1lbnRzQWZ0ZXIo
Y29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9v
bCYgY29udGV4dCwgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBVTlVTRURfUEFSQU0oZWxlbWVu
dCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzID0gY29udGV4
dC5zaWJsaW5nczsKKyAgICBBU1NFUlQoZWxlbWVudCA9PSB0b0VsZW1lbnQoc2libGluZ3NbY29u
dGV4dC5udGhdLmdldCgpKSk7CisKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoc2l6ZV90
IGkgPSBjb250ZXh0Lm50aCArIDE7IGkgPCBzaWJsaW5ncy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoc2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAg
ICAgICAgIHJldHVybiArK2NvdW50OworICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKwor
dGVtcGxhdGU8PgoraW5saW5lIGludCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0
ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+
Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2wmIGNvbnRleHQsIEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCit7CisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQp
OworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncyA9IGNvbnRleHQu
c2libGluZ3M7CisgICAgQVNTRVJUKGVsZW1lbnQgPT0gdG9FbGVtZW50KHNpYmxpbmdzW2NvbnRl
eHQubnRoXS5nZXQoKSkpOworCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKGludCBpID0g
Y29udGV4dC5udGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAoc2libGluZ3NbaV0g
JiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSAmJiBzaWJsaW5nc1tpXS0+aGFzVGFnTmFt
ZSh0eXBlKSkKKyAgICAgICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50
OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgaW50IFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVy
c2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhO
b2RlUG9vbD46OmNvdW50RWxlbWVudHNPZlR5cGVBZnRlcihjb25zdCBTZWxlY3RvckNoZWNrZXI6
OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sJiBjb250ZXh0LCBFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQoreworICAgIFVOVVNFRF9QQVJBTShl
bGVtZW50KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBj
b250ZXh0LnNpYmxpbmdzOworICAgIEFTU0VSVChlbGVtZW50ID09IHRvRWxlbWVudChzaWJsaW5n
c1tjb250ZXh0Lm50aF0uZ2V0KCkpKTsKKworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChz
aXplX3QgaSA9IGNvbnRleHQubnRoICsgMTsgaSA8IHNpYmxpbmdzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgpICYm
IHNpYmxpbmdzW2ldLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuICsrY291
bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCiB0ZW1wbGF0ZQogU2VsZWN0b3JD
aGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcjxTZWxl
Y3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Pihjb25zdCBTZWxlY3RvckNoZWNr
aW5nQ29udGV4dCYsIFBzZXVkb0lkJiwgYm9vbCYpIGNvbnN0OwordGVtcGxhdGUKK2Jvb2wgU2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yPFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JD
aGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+KGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2wmKSBjb25zdDsKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IDFmMzQ5MGM2NDc2NGIwZDIwMjFjNzNkZWM4ZjE5MWZi
YjE2MjNhMWIuLjg4MTU4YjdlYWY1MWM5ZjJhNzdmZTVkYjBhNzlhZDRkODM5YTk2NmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgog
I2luY2x1ZGUgIkxpbmtIYXNoLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlNwYWNlU3BsaXRTdHJpbmcuaCIK
ICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCkBAIC01NCwxNyArNTUsMTcgQEAgcHVibGljOgog
ICAgIGVudW0gVmlzaXRlZE1hdGNoVHlwZSB7IFZpc2l0ZWRNYXRjaERpc2FibGVkLCBWaXNpdGVk
TWF0Y2hFbmFibGVkIH07CiAgICAgZW51bSBNb2RlIHsgUmVzb2x2aW5nU3R5bGUgPSAwLCBDb2xs
ZWN0aW5nUnVsZXMsIFF1ZXJ5aW5nUnVsZXMgfTsKIAotICAgIHN0cnVjdCBTZWxlY3RvckNoZWNr
aW5nQ29udGV4dCB7CisgICAgc3RydWN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0QmFzZSB7CiAg
ICAgICAgIC8vIEluaXRpYWwgc2VsZWN0b3IgY29uc3RydWN0b3IKLSAgICAgICAgU2VsZWN0b3JD
aGVja2luZ0NvbnRleHQoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBW
aXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUpCisgICAgICAgIFNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0QmFzZShDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIFZp
c2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkKICAgICAgICAgICAgIDogc2VsZWN0b3Io
c2VsZWN0b3IpCiAgICAgICAgICAgICAsIGVsZW1lbnQoZWxlbWVudCkKICAgICAgICAgICAgICwg
c2NvcGUoMCkKICAgICAgICAgICAgICwgdmlzaXRlZE1hdGNoVHlwZSh2aXNpdGVkTWF0Y2hUeXBl
KQorICAgICAgICAgICAgLCBwc2V1ZG9TdHlsZShOT1BTRVVETykKICAgICAgICAgICAgICwgZWxl
bWVudFN0eWxlKDApCiAgICAgICAgICAgICAsIGVsZW1lbnRQYXJlbnRTdHlsZSgwKQogICAgICAg
ICAgICAgLCBpc1N1YlNlbGVjdG9yKGZhbHNlKQotICAgICAgICAgICAgLCBwc2V1ZG9TdHlsZShO
T1BTRVVETykKICAgICAgICAgICAgICwgaGFzU2Nyb2xsYmFyUHNldWRvKGZhbHNlKQogICAgICAg
ICAgICAgLCBoYXNTZWxlY3Rpb25Qc2V1ZG8oZmFsc2UpCiAgICAgICAgIHsgfQpAQCAtNzMsMTQg
Kzc0LDMxIEBAIHB1YmxpYzoKICAgICAgICAgRWxlbWVudCogZWxlbWVudDsKICAgICAgICAgY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGU7CiAgICAgICAgIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRl
ZE1hdGNoVHlwZTsKKyAgICAgICAgUHNldWRvSWQgcHNldWRvU3R5bGU7CiAgICAgICAgIFJlbmRl
clN0eWxlKiBlbGVtZW50U3R5bGU7CiAgICAgICAgIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50
U3R5bGU7CiAgICAgICAgIGJvb2wgaXNTdWJTZWxlY3RvcjsKLSAgICAgICAgUHNldWRvSWQgcHNl
dWRvU3R5bGU7CiAgICAgICAgIGJvb2wgaGFzU2Nyb2xsYmFyUHNldWRvOwogICAgICAgICBib29s
IGhhc1NlbGVjdGlvblBzZXVkbzsKICAgICB9OwogCisgICAgc3RydWN0IFNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0IDogcHVibGljIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0QmFzZSB7CisgICAgICAg
IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCog
ZWxlbWVudCwgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlKQorICAgICAgICAgICAg
OiBTZWxlY3RvckNoZWNraW5nQ29udGV4dEJhc2Uoc2VsZWN0b3IsIGVsZW1lbnQsIHZpc2l0ZWRN
YXRjaFR5cGUpCisgICAgICAgIHsgfQorICAgIH07CisKKyAgICBzdHJ1Y3QgU2VsZWN0b3JDaGVj
a2luZ0NvbnRleHRXaXRoTm9kZVBvb2wgOiBwdWJsaWMgU2VsZWN0b3JDaGVja2luZ0NvbnRleHRC
YXNlIHsKKyAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2woQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHBvb2wsIGludCBu
dGgsIFZpc2l0ZWRNYXRjaFR5cGUgdmlzaXRlZE1hdGNoVHlwZSkKKyAgICAgICAgICAgIDogU2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHRCYXNlKHNlbGVjdG9yLCB0b0VsZW1lbnQocG9vbFtudGhdLmdl
dCgpKSwgdmlzaXRlZE1hdGNoVHlwZSkKKyAgICAgICAgICAgICwgc2libGluZ3MocG9vbCkKKyAg
ICAgICAgICAgICwgbnRoKG50aCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgVmVjdG9yPFJlZlB0
cjxOb2RlPiA+IHNpYmxpbmdzOworICAgICAgICBpbnQgbnRoOworICAgIH07CisKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb250ZXh0PgogICAgIHN0cnVjdCBET01UcmF2ZXJzYWxTdHJhdGVneSB7
CiAgICAgICAgIHN0YXRpYyBib29sIGlzRmlyc3RDaGlsZChjb25zdCBDb250ZXh0JiwgRWxlbWVu
dCopOwpAQCAtOTcsNiArMTE1LDcgQEAgcHVibGljOgogICAgIGJvb2wgY2hlY2tTZWxlY3RvcihD
U1NTZWxlY3RvciosIEVsZW1lbnQqLCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yID0gZmFs
c2UpIGNvbnN0OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNraW5nQ29udGV4dD4KICAgICBT
ZWxlY3Rvck1hdGNoIGNoZWNrU2VsZWN0b3IoY29uc3QgQ2hlY2tpbmdDb250ZXh0JiwgUHNldWRv
SWQmLCBib29sJiBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpIGNvbnN0OworCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hlY2tpbmdDb250ZXh0PgogICAgIGJvb2wgY2hlY2tPbmVTZWxlY3Rvcihj
b25zdCBDaGVja2luZ0NvbnRleHQmKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKaW5kZXggMDc2YTcyM2M4YTkxYWZlOTMx
ODg3NjU4OTRjZTc3MzZkYzM2NmEwMC4uNjc0OGI1OTkxZGI2N2ZiYjM1ZGVjNzlmMzUzNDg2YTRk
YmQ3ZGVhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERp
c3RyaWJ1dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlz
dHJpYnV0b3IuY3BwCkBAIC0xMTcsMTAgKzExNywxMCBAQCB2b2lkIENvbnRlbnREaXN0cmlidXRv
cjo6ZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyhJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQs
CiAgICAgICAgIGlmIChkaXN0cmlidXRlZFtpXSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIE5vZGUqIGNoaWxkID0gcG9vbFtpXS5nZXQoKTsKLSAgICAgICAgaWYgKCFxdWVyeS5t
YXRjaGVzKGNoaWxkKSkKKyAgICAgICAgaWYgKCFxdWVyeS5tYXRjaGVzKHBvb2wsIGkpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgTm9kZSogY2hpbGQgPSBwb29sW2ldLmdldCgp
OwogICAgICAgICBkaXN0cmlidXRpb24uYXBwZW5kKGNoaWxkKTsKICAgICAgICAgbV9ub2RlVG9J
bnNlcnRpb25Qb2ludC5hZGQoY2hpbGQsIGluc2VydGlvblBvaW50KTsKICAgICAgICAgZGlzdHJp
YnV0ZWRbaV0gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
Q29udGVudFNlbGVjdG9yUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29u
dGVudFNlbGVjdG9yUXVlcnkuY3BwCmluZGV4IGYxMmM1OTkyNWY3YzkzMjRmNmZlZmNiZWIyMjM1
ODk1N2RmMjExZjMuLjVhODg3YTQxOTE1ZjM2MDcwZWJlMzdmMDYwMzI1MWU4YjNiZGEwMDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVy
eS5jcHAKQEAgLTM0LDEyICszNCwzOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0NvbnRl
bnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBib29sIHN0cmljdFBhcnNpbmcpCisgICAgOiBtX3NlbGVjdG9yQ2hlY2tlcihkb2N1bWVu
dCwgc3RyaWN0UGFyc2luZykKK3sKKyAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2RlKFNlbGVj
dG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKTsKK30KKworYm9vbCBDb250ZW50U2VsZWN0b3JD
aGVja2VyOjpjaGVja0NvbnRlbnRTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0
IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGludCBudGgpIGNvbnN0Cit7CisgICAg
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbCBjb250
ZXh0KHNlbGVjdG9yLCBzaWJsaW5ncywgbnRoLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRj
aERpc2FibGVkKTsKKyAgICByZXR1cm4gbV9zZWxlY3RvckNoZWNrZXIuY2hlY2tPbmVTZWxlY3Rv
cihjb250ZXh0KTsKK30KKwordm9pZCBDb250ZW50U2VsZWN0b3JEYXRhTGlzdDo6aW5pdGlhbGl6
ZShjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9ycykKK3sKKyAgICBmb3IgKENTU1NlbGVj
dG9yKiBzZWxlY3RvciA9IHNlbGVjdG9ycy5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBD
U1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKQorICAgICAgICBtX3NlbGVjdG9ycy5hcHBl
bmQoc2VsZWN0b3IpOworfQorCitib29sIENvbnRlbnRTZWxlY3RvckRhdGFMaXN0OjptYXRjaGVz
KGNvbnN0IENvbnRlbnRTZWxlY3RvckNoZWNrZXImIHNlbGVjdG9yQ2hlY2tlciwgY29uc3QgVmVj
dG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50IG50aCkgY29uc3QKK3sKKyAgICB1bnNp
Z25lZCBzZWxlY3RvckNvdW50ID0gbV9zZWxlY3RvcnMuc2l6ZSgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzZWxlY3RvckNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKHNlbGVjdG9y
Q2hlY2tlci5jaGVja0NvbnRlbnRTZWxlY3RvcihtX3NlbGVjdG9yc1tpXSwgc2libGluZ3MsIG50
aCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiBDb250ZW50U2VsZWN0b3JRdWVyeTo6Q29udGVudFNlbGVjdG9yUXVlcnkoY29uc3QgSW5z
ZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50KQogICAgIDogbV9pbnNlcnRpb25Qb2ludChpbnNl
cnRpb25Qb2ludCkKICAgICAsIG1fc2VsZWN0b3JDaGVja2VyKGluc2VydGlvblBvaW50LT5kb2N1
bWVudCgpLCAhaW5zZXJ0aW9uUG9pbnQtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKQogewot
ICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5n
UnVsZXMpOwotCiAgICAgaWYgKGluc2VydGlvblBvaW50LT5zZWxlY3QoKS5pc051bGwoKSB8fCBp
bnNlcnRpb25Qb2ludC0+c2VsZWN0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1faXNWYWxpZFNl
bGVjdG9yID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTgsMTMgKzg0LDEwIEBAIGJvb2wg
Q29udGVudFNlbGVjdG9yUXVlcnk6OmlzVmFsaWRTZWxlY3RvcigpIGNvbnN0CiAgICAgcmV0dXJu
IG1faXNWYWxpZFNlbGVjdG9yOwogfQogCi1ib29sIENvbnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRj
aGVzKE5vZGUqIG5vZGUpIGNvbnN0Citib29sIENvbnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVz
KGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGludCBudGgpIGNvbnN0CiB7
CisgICAgTm9kZSogbm9kZSA9IHNpYmxpbmdzW250aF0uZ2V0KCk7CiAgICAgQVNTRVJUKG5vZGUp
OwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKG5v
ZGUtPnBhcmVudE5vZGUoKSA9PSBtX2luc2VydGlvblBvaW50LT5zaGFkb3dSb290KCktPmhvc3Qo
KSk7CiAKICAgICBpZiAobV9pbnNlcnRpb25Qb2ludC0+c2VsZWN0KCkuaXNOdWxsKCkgfHwgbV9p
bnNlcnRpb25Qb2ludC0+c2VsZWN0KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTc1LDcgKzk4LDcgQEAgYm9vbCBDb250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyhOb2Rl
KiBub2RlKSBjb25zdAogICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9zZWxlY3RvcnMubWF0Y2hlcyhtX3NlbGVjdG9y
Q2hlY2tlciwgdG9FbGVtZW50KG5vZGUpKTsKKyAgICByZXR1cm4gbV9zZWxlY3RvcnMubWF0Y2hl
cyhtX3NlbGVjdG9yQ2hlY2tlciwgc2libGluZ3MsIG50aCk7CiB9CiAKIHN0YXRpYyBib29sIHZh
bGlkYXRlU3ViU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmgKaW5kZXggOTRmYTNlZmNj
ZjNmOWQ3MmU5NzQ3NzVlMmQyZDMxNDBkMTNjYjM0ZS4uMmM3MTBhNTg1MmU5MmQ3Njg4MmM3YzIw
NzUwYmZkMjZkYTJhYTAzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
Q29udGVudFNlbGVjdG9yUXVlcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9D
b250ZW50U2VsZWN0b3JRdWVyeS5oCkBAIC00MywyNSArNDMsNDEgQEAgY2xhc3MgRG9jdW1lbnQ7
CiBjbGFzcyBOb2RlOwogY2xhc3MgSW5zZXJ0aW9uUG9pbnQ7CiAKK2NsYXNzIENvbnRlbnRTZWxl
Y3RvckNoZWNrZXIgeworcHVibGljOgorICAgIENvbnRlbnRTZWxlY3RvckNoZWNrZXIoRG9jdW1l
bnQqLCBib29sIHN0cmljdFBhcnNpbmcpOworCisgICAgYm9vbCBjaGVja0NvbnRlbnRTZWxlY3Rv
cihDU1NTZWxlY3RvciosIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGlu
dCBudGhOb2RlKSBjb25zdDsKK3ByaXZhdGU6CisgICAgU2VsZWN0b3JDaGVja2VyIG1fc2VsZWN0
b3JDaGVja2VyOworfTsKKworY2xhc3MgQ29udGVudFNlbGVjdG9yRGF0YUxpc3QgeworcHVibGlj
OgorICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBDU1NTZWxlY3Rvckxpc3QmKTsKKyAgICBib29s
IG1hdGNoZXMoY29uc3QgQ29udGVudFNlbGVjdG9yQ2hlY2tlciYsIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Tm9kZT4gPiYgc2libGluZ3MsIGludCBudGhOb2RlKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBWZWN0b3I8Q1NTU2VsZWN0b3IqPiBtX3NlbGVjdG9yczsKK307CisKIGNsYXNzIENvbnRlbnRT
ZWxlY3RvclF1ZXJ5IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb250ZW50U2VsZWN0b3JR
dWVyeSk7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29udGVudFNlbGVjdG9yUXVlcnkoY29uc3Qg
SW5zZXJ0aW9uUG9pbnQqKTsKIAogICAgIGJvb2wgaXNWYWxpZFNlbGVjdG9yKCkgY29uc3Q7Ci0g
ICAgYm9vbCBtYXRjaGVzKE5vZGUqKSBjb25zdDsKKyAgICBib29sIG1hdGNoZXMoY29uc3QgVmVj
dG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50IG50aE5vZGUpIGNvbnN0OwogcHJpdmF0
ZToKICAgICBib29sIHZhbGlkYXRlU2VsZWN0b3JMaXN0KCk7CiAKICAgICBjb25zdCBJbnNlcnRp
b25Qb2ludCogbV9pbnNlcnRpb25Qb2ludDsKLSAgICBTZWxlY3RvckRhdGFMaXN0IG1fc2VsZWN0
b3JzOworICAgIENvbnRlbnRTZWxlY3RvckRhdGFMaXN0IG1fc2VsZWN0b3JzOwogICAgIENTU1Nl
bGVjdG9yTGlzdCBtX3NlbGVjdG9yTGlzdDsKLSAgICBTZWxlY3RvckNoZWNrZXIgbV9zZWxlY3Rv
ckNoZWNrZXI7CisgICAgQ29udGVudFNlbGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsK
ICAgICBib29sIG1faXNWYWxpZFNlbGVjdG9yOwogfTsKIAogfQogCi0KLQogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167256</attachid>
            <date>2012-10-04 22:58:05 -0700</date>
            <delta_ts>2012-10-09 06:14:53 -0700</delta_ts>
            <desc>Rebase</desc>
            <filename>bug-96990-20121005145714.patch</filename>
            <type>text/plain</type>
            <size>17253</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmI1NTI4ZGNjNjUwZGE2
MWY2YTQwNjRlMDJhOTBlOWY5NTc3NDQ3Yi4uYzJmYTI0MWFkODdiNDY1Yjk4NDU4NTEzZWRjMTk1
ZDJlYjU1MzE4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTEwLTA0ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIENvbnRlbnRTZWxl
Y3RvclF1ZXJ5IHdvcmsgd2hlbiBhIG5vZGUgUE9PTCBpcyB1c2VkIGluc3RlYWQgb2Ygbm9kZSdz
IHJlYWwgc2libGluZ3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD05Njk5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdoZW4gd2UgaW1wbGVtZW50IGNvbnRlbnQgcmVwcm9qZWN0aW9uIGluIFNoYWRvdyBE
T00sIHdlIGhhdmUgdG8gdXNlIGEgbm9kZSBwb29sIGFzIHNpYmxpbmdzCisgICAgICAgIGluc3Rl
YWQgb2Ygbm9kZSdzIHJlYWwgc2libGluZ3MuIFNlbGVjdG9yQ2hlY2tlciBzaG91bGQgYmUgYWJs
ZSB0byBoYW5kbGUgaXQgYXMgd2VsbC4KKworICAgICAgICBXZSBpbnRyb2R1Y2UgU2VsZWN0b3JD
aGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2wgYXMgYSB0ZW1wbGF0ZSBhcmd1bWVudCBvZiBET01U
cmF2ZXJzYWxTdHJhdGVneSB0byBoYW5kbGUgdGhpcy4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IGV4aXN0aW5nIHRlc3RzIHNob3VsZCBjb3Zlci4KKworICAgICAgICAqIGNzcy9TZWxlY3RvckNo
ZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0
b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojppc0ZpcnN0Q2hpbGQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbD46OmlzTGFzdENoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5v
ZGVQb29sPjo6aXNGaXJzdE9mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpET01UcmF2ZXJzYWxT
dHJhdGVneTxTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbD46OmlzTGFzdE9mVHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNr
aW5nQ29udGV4dFdpdGhOb2RlUG9vbD46OmNvdW50RWxlbWVudHNCZWZvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRo
Tm9kZVBvb2w+Ojpjb3VudEVsZW1lbnRzQWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVHJh
dmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojpjb3Vu
dEVsZW1lbnRzT2ZUeXBlQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVRyYXZlcnNhbFN0
cmF0ZWd5PFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sPjo6Y291bnRFbGVtZW50
c09mVHlwZUFmdGVyKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmg6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0QmFzZTo6
U2VsZWN0b3JDaGVja2luZ0NvbnRleHRCYXNlKToKKyAgICAgICAgKFNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0OjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCk6CisgICAgICAgIChTZWxl
Y3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbDo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRo
Tm9kZVBvb2wpOgorICAgICAgICAoU2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2wp
OgorICAgICAgICAqIGh0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RGlzdHJpYnV0b3I6OmRpc3RyaWJ1dGVTZWxlY3Rpb25zVG8pOgor
ICAgICAgICAqIGh0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXIp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VsZWN0b3JD
aGVja2VyOjpjaGVja0NvbnRlbnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
U2VsZWN0b3JEYXRhTGlzdDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
U2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2Vs
ZWN0b3JRdWVyeTo6Q29udGVudFNlbGVjdG9yUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudFNlbGVjdG9yUXVlcnk6Om1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6dmFsaWRhdGVT
dWJTZWxlY3Rvcik6CisgICAgICAgICogaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnku
aDoKKyAgICAgICAgKENvbnRlbnRTZWxlY3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChDb250ZW50U2VsZWN0b3JEYXRhTGlzdCk6CisgICAgICAgIChDb250ZW50U2Vs
ZWN0b3JRdWVyeSk6CisKIDIwMTItMTAtMDQgIFByYXZpbiBEICA8cHJhdmluZC4yazRAZ21haWwu
Y29tPgogCiAgICAgICAgIFJlbW92aW5nIHRoZSB1bnVzZWQgbWVtYmVyIHZhcmlhYmxlIG1fd2Fz
TWFsZm9ybWVkIGZyb20gSFRNTEZvcm1FbGVtZW50IGNsYXNzIGFuZCBpdHMgcmVsYXRlZCBjb2Rl
IGZyZ21lbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmluZGV4IGJmNTgw
M2QyMDc4ZWY3MTk3NDA2YWVlMDZlYzgzNzgwYjIyMDZlODUuLmM3ODk5M2M5ZmM5YjhhYzA1Zjhi
OTg5N2JjMzE3ZDkwZDkwMjdkNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
Y3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2luY2x1
ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgorI2luY2x1ZGUgIkNvbnRlbnRTZWxlY3RvclF1ZXJ5Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudFN0eWxlU2hlZXRDb2xs
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCkBAIC01NSw2ICs1Niw4IEBA
CiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKIAorI2luY2x1ZGUg
PHd0Zi9VbnVzZWRQYXJhbS5oPgorCiAjaWYgVVNFKFBMQVRGT1JNX1NUUkFURUdJRVMpCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5jbHVkZSAiVmlzaXRlZExpbmtTdHJhdGVn
eS5oIgpAQCAtMTQ0Miw3ICsxNDQ1LDE0MSBAQCBpbmxpbmUgaW50IFNlbGVjdG9yQ2hlY2tlcjo6
RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraQogICAg
IHJldHVybiBjb3VudDsKIH0KIAordGVtcGxhdGU8PgoraW5saW5lIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0V2l0aE5vZGVQb29sPjo6aXNGaXJzdENoaWxkKGNvbnN0IFNlbGVjdG9yQ2hlY2tl
cjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2wmIGNvbnRleHQsIEVsZW1lbnQq
IGVsZW1lbnQpCit7CisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOworCisgICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncyA9IGNvbnRleHQuc2libGluZ3M7CisgICAgQVNT
RVJUKGVsZW1lbnQgPT0gdG9FbGVtZW50KHNpYmxpbmdzW2NvbnRleHQubnRoXS5nZXQoKSkpOwor
CisgICAgZm9yIChpbnQgaSA9IGNvbnRleHQubnRoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAg
ICAgaWYgKHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Rl
bXBsYXRlPD4KK2lubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2FsU3RyYXRl
Z3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbD46
OmlzTGFzdENoaWxkKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRl
eHRXaXRoTm9kZVBvb2wmIGNvbnRleHQsIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVsZW1lbnQpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJs
aW5ncyA9IGNvbnRleHQuc2libGluZ3M7CisgICAgQVNTRVJUKGVsZW1lbnQgPT0gdG9FbGVtZW50
KHNpYmxpbmdzW2NvbnRleHQubnRoXS5nZXQoKSkpOworCisgICAgZm9yIChzaXplX3QgaSA9IGNv
bnRleHQubnRoICsgMTsgaSA8IHNpYmxpbmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChz
aWJsaW5nc1tpXSAmJiBzaWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTw+
CitpbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVj
dG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojppc0ZpcnN0
T2ZUeXBlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRo
Tm9kZVBvb2wmIGNvbnRleHQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IHR5cGUpCit7CisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOworCisgICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncyA9IGNvbnRleHQuc2libGluZ3M7CisgICAgQVNTRVJU
KGVsZW1lbnQgPT0gdG9FbGVtZW50KHNpYmxpbmdzW2NvbnRleHQubnRoXS5nZXQoKSkpOworCisg
ICAgZm9yIChpbnQgaSA9IGNvbnRleHQubnRoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAg
aWYgKHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkgJiYgc2libGlu
Z3NbaV0tPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPD4KK2lubGluZSBib29sIFNlbGVj
dG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbD46OmlzTGFzdE9mVHlwZShjb25zdCBTZWxlY3Rv
ckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sJiBjb250ZXh0LCBF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQoreworICAgIFVOVVNF
RF9QQVJBTShlbGVtZW50KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2li
bGluZ3MgPSBjb250ZXh0LnNpYmxpbmdzOworICAgIEFTU0VSVChlbGVtZW50ID09IHRvRWxlbWVu
dChzaWJsaW5nc1tjb250ZXh0Lm50aF0uZ2V0KCkpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSBj
b250ZXh0Lm50aCArIDE7IGkgPCBzaWJsaW5ncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
c2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSAmJiBzaWJsaW5nc1tp
XS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8PgoraW5saW5lIGludCBTZWxlY3RvckNo
ZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVj
a2luZ0NvbnRleHRXaXRoTm9kZVBvb2w+Ojpjb3VudEVsZW1lbnRzQmVmb3JlKGNvbnN0IFNlbGVj
dG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHRXaXRoTm9kZVBvb2wmIGNvbnRleHQs
IEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOworCisgICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncyA9IGNvbnRleHQuc2libGluZ3M7
CisgICAgQVNTRVJUKGVsZW1lbnQgPT0gdG9FbGVtZW50KHNpYmxpbmdzW2NvbnRleHQubnRoXS5n
ZXQoKSkpOworCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKGludCBpID0gY29udGV4dC5u
dGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAoc2libGluZ3NbaV0gJiYgc2libGlu
Z3NbaV0tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICsrY291bnQ7CisgICAgfQorCisg
ICAgcmV0dXJuIGNvdW50OworfQorCit0ZW1wbGF0ZTw+CitpbmxpbmUgaW50IFNlbGVjdG9yQ2hl
Y2tlcjo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNr
aW5nQ29udGV4dFdpdGhOb2RlUG9vbD46OmNvdW50RWxlbWVudHNBZnRlcihjb25zdCBTZWxlY3Rv
ckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sJiBjb250ZXh0LCBF
bGVtZW50KiBlbGVtZW50KQoreworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKworICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBjb250ZXh0LnNpYmxpbmdzOwor
ICAgIEFTU0VSVChlbGVtZW50ID09IHRvRWxlbWVudChzaWJsaW5nc1tjb250ZXh0Lm50aF0uZ2V0
KCkpKTsKKworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IGNvbnRleHQu
bnRoICsgMTsgaSA8IHNpYmxpbmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChzaWJsaW5n
c1tpXSAmJiBzaWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgcmV0dXJu
ICsrY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCit0ZW1wbGF0ZTw+Citp
bmxpbmUgaW50IFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k8U2VsZWN0b3JD
aGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbD46OmNvdW50RWxlbWVu
dHNPZlR5cGVCZWZvcmUoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29u
dGV4dFdpdGhOb2RlUG9vbCYgY29udGV4dCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgdHlwZSkKK3sKKyAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CisKKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzID0gY29udGV4dC5zaWJsaW5nczsKKyAg
ICBBU1NFUlQoZWxlbWVudCA9PSB0b0VsZW1lbnQoc2libGluZ3NbY29udGV4dC5udGhdLmdldCgp
KSk7CisKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoaW50IGkgPSBjb250ZXh0Lm50aCAt
IDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJsaW5nc1tp
XS0+aXNFbGVtZW50Tm9kZSgpICYmIHNpYmxpbmdzW2ldLT5oYXNUYWdOYW1lKHR5cGUpKQorICAg
ICAgICAgICAgKytjb3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK3RlbXBs
YXRlPD4KK2lubGluZSBpbnQgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sPjo6Y291
bnRFbGVtZW50c09mVHlwZUFmdGVyKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVj
a2luZ0NvbnRleHRXaXRoTm9kZVBvb2wmIGNvbnRleHQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIHR5cGUpCit7CisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOworCisg
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncyA9IGNvbnRleHQuc2libGlu
Z3M7CisgICAgQVNTRVJUKGVsZW1lbnQgPT0gdG9FbGVtZW50KHNpYmxpbmdzW2NvbnRleHQubnRo
XS5nZXQoKSkpOworCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gY29u
dGV4dC5udGggKyAxOyBpIDwgc2libGluZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHNp
YmxpbmdzW2ldICYmIHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkgJiYgc2libGluZ3NbaV0t
Pmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gKytjb3VudDsKKyAgICB9CisK
KyAgICByZXR1cm4gY291bnQ7Cit9CisKIHRlbXBsYXRlCiBTZWxlY3RvckNoZWNrZXI6OlNlbGVj
dG9yTWF0Y2ggU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yPFNlbGVjdG9yQ2hlY2tlcjo6
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ+KGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Jiwg
UHNldWRvSWQmLCBib29sJikgY29uc3Q7Cit0ZW1wbGF0ZQorYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lU2VsZWN0b3I8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4
dFdpdGhOb2RlUG9vbD4oY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29u
dGV4dFdpdGhOb2RlUG9vbCYpIGNvbnN0OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmgKaW5kZXggMWYzNDkwYzY0NzY0YjBkMjAyMWM3M2RlYzhmMTkxZmJiMTYyM2ExYi4uODgx
NThiN2VhZjUxYzlmMmE3N2ZlNWRiMGE3OWFkNGQ4MzlhOTY2ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXIuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNTU1NlbGVjdG9y
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTGlu
a0hhc2guaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxl
Q29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiU3BhY2VTcGxpdFN0cmluZy5oIgogI2luY2x1ZGUgIlN0
eWxlZEVsZW1lbnQuaCIKQEAgLTU0LDE3ICs1NSwxNyBAQCBwdWJsaWM6CiAgICAgZW51bSBWaXNp
dGVkTWF0Y2hUeXBlIHsgVmlzaXRlZE1hdGNoRGlzYWJsZWQsIFZpc2l0ZWRNYXRjaEVuYWJsZWQg
fTsKICAgICBlbnVtIE1vZGUgeyBSZXNvbHZpbmdTdHlsZSA9IDAsIENvbGxlY3RpbmdSdWxlcywg
UXVlcnlpbmdSdWxlcyB9OwogCi0gICAgc3RydWN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0IHsK
KyAgICBzdHJ1Y3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHRCYXNlIHsKICAgICAgICAgLy8gSW5p
dGlhbCBzZWxlY3RvciBjb25zdHJ1Y3RvcgotICAgICAgICBTZWxlY3RvckNoZWNraW5nQ29udGV4
dChDU1NTZWxlY3Rvciogc2VsZWN0b3IsIEVsZW1lbnQqIGVsZW1lbnQsIFZpc2l0ZWRNYXRjaFR5
cGUgdmlzaXRlZE1hdGNoVHlwZSkKKyAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHRCYXNl
KENTU1NlbGVjdG9yKiBzZWxlY3RvciwgRWxlbWVudCogZWxlbWVudCwgVmlzaXRlZE1hdGNoVHlw
ZSB2aXNpdGVkTWF0Y2hUeXBlKQogICAgICAgICAgICAgOiBzZWxlY3RvcihzZWxlY3RvcikKICAg
ICAgICAgICAgICwgZWxlbWVudChlbGVtZW50KQogICAgICAgICAgICAgLCBzY29wZSgwKQogICAg
ICAgICAgICAgLCB2aXNpdGVkTWF0Y2hUeXBlKHZpc2l0ZWRNYXRjaFR5cGUpCisgICAgICAgICAg
ICAsIHBzZXVkb1N0eWxlKE5PUFNFVURPKQogICAgICAgICAgICAgLCBlbGVtZW50U3R5bGUoMCkK
ICAgICAgICAgICAgICwgZWxlbWVudFBhcmVudFN0eWxlKDApCiAgICAgICAgICAgICAsIGlzU3Vi
U2VsZWN0b3IoZmFsc2UpCi0gICAgICAgICAgICAsIHBzZXVkb1N0eWxlKE5PUFNFVURPKQogICAg
ICAgICAgICAgLCBoYXNTY3JvbGxiYXJQc2V1ZG8oZmFsc2UpCiAgICAgICAgICAgICAsIGhhc1Nl
bGVjdGlvblBzZXVkbyhmYWxzZSkKICAgICAgICAgeyB9CkBAIC03MywxNCArNzQsMzEgQEAgcHVi
bGljOgogICAgICAgICBFbGVtZW50KiBlbGVtZW50OwogICAgICAgICBjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZTsKICAgICAgICAgVmlzaXRlZE1hdGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlOwor
ICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9TdHlsZTsKICAgICAgICAgUmVuZGVyU3R5bGUqIGVsZW1l
bnRTdHlsZTsKICAgICAgICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZTsKICAgICAg
ICAgYm9vbCBpc1N1YlNlbGVjdG9yOwotICAgICAgICBQc2V1ZG9JZCBwc2V1ZG9TdHlsZTsKICAg
ICAgICAgYm9vbCBoYXNTY3JvbGxiYXJQc2V1ZG87CiAgICAgICAgIGJvb2wgaGFzU2VsZWN0aW9u
UHNldWRvOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgOiBw
dWJsaWMgU2VsZWN0b3JDaGVja2luZ0NvbnRleHRCYXNlIHsKKyAgICAgICAgU2VsZWN0b3JDaGVj
a2luZ0NvbnRleHQoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBFbGVtZW50KiBlbGVtZW50LCBWaXNp
dGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGUpCisgICAgICAgICAgICA6IFNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0QmFzZShzZWxlY3RvciwgZWxlbWVudCwgdmlzaXRlZE1hdGNoVHlwZSkKKyAg
ICAgICAgeyB9CisgICAgfTsKKworICAgIHN0cnVjdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dFdp
dGhOb2RlUG9vbCA6IHB1YmxpYyBTZWxlY3RvckNoZWNraW5nQ29udGV4dEJhc2UgeworICAgICAg
ICBTZWxlY3RvckNoZWNraW5nQ29udGV4dFdpdGhOb2RlUG9vbChDU1NTZWxlY3Rvciogc2VsZWN0
b3IsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgcG9vbCwgaW50IG50aCwgVmlzaXRlZE1h
dGNoVHlwZSB2aXNpdGVkTWF0Y2hUeXBlKQorICAgICAgICAgICAgOiBTZWxlY3RvckNoZWNraW5n
Q29udGV4dEJhc2Uoc2VsZWN0b3IsIHRvRWxlbWVudChwb29sW250aF0uZ2V0KCkpLCB2aXNpdGVk
TWF0Y2hUeXBlKQorICAgICAgICAgICAgLCBzaWJsaW5ncyhwb29sKQorICAgICAgICAgICAgLCBu
dGgobnRoKQorICAgICAgICB7IH0KKworICAgICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gc2li
bGluZ3M7CisgICAgICAgIGludCBudGg7CisgICAgfTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENvbnRleHQ+CiAgICAgc3RydWN0IERPTVRyYXZlcnNhbFN0cmF0ZWd5IHsKICAgICAgICAgc3Rh
dGljIGJvb2wgaXNGaXJzdENoaWxkKGNvbnN0IENvbnRleHQmLCBFbGVtZW50Kik7CkBAIC05Nyw2
ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwg
RWxlbWVudCosIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IgPSBmYWxzZSkgY29uc3Q7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tpbmdDb250ZXh0PgogICAgIFNlbGVjdG9yTWF0Y2gg
Y2hlY2tTZWxlY3Rvcihjb25zdCBDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYsIGJvb2wmIGhh
c1Vua25vd25Qc2V1ZG9FbGVtZW50cykgY29uc3Q7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGVja2luZ0NvbnRleHQ+CiAgICAgYm9vbCBjaGVja09uZVNlbGVjdG9yKGNvbnN0IENoZWNraW5n
Q29udGV4dCYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9Db250ZW50RGlzdHJpYnV0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29u
dGVudERpc3RyaWJ1dG9yLmNwcAppbmRleCAwNzZhNzIzYzhhOTFhZmU5MzE4ODc2NTg5NGNlNzcz
NmRjMzY2YTAwLi42NzQ4YjU5OTFkYjY3ZmJiMzVkZWM3OWYzNTM0ODZhNGRiZDdkZWFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAK
QEAgLTExNywxMCArMTE3LDEwIEBAIHZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRl
U2VsZWN0aW9uc1RvKEluc2VydGlvblBvaW50KiBpbnNlcnRpb25Qb2ludCwKICAgICAgICAgaWYg
KGRpc3RyaWJ1dGVkW2ldKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgTm9kZSog
Y2hpbGQgPSBwb29sW2ldLmdldCgpOwotICAgICAgICBpZiAoIXF1ZXJ5Lm1hdGNoZXMoY2hpbGQp
KQorICAgICAgICBpZiAoIXF1ZXJ5Lm1hdGNoZXMocG9vbCwgaSkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAorICAgICAgICBOb2RlKiBjaGlsZCA9IHBvb2xbaV0uZ2V0KCk7CiAgICAgICAgIGRp
c3RyaWJ1dGlvbi5hcHBlbmQoY2hpbGQpOwogICAgICAgICBtX25vZGVUb0luc2VydGlvblBvaW50
LmFkZChjaGlsZCwgaW5zZXJ0aW9uUG9pbnQpOwogICAgICAgICBkaXN0cmlidXRlZFtpXSA9IHRy
dWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0
b3JRdWVyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JR
dWVyeS5jcHAKaW5kZXggZjEyYzU5OTI1ZjdjOTMyNGY2ZmVmY2JlYjIyMzU4OTU3ZGYyMTFmMy4u
NWE4ODdhNDE5MTVmMzYwNzBlYmUzN2YwNjAzMjUxZThiM2JkYTAwNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcApAQCAtMzQs
MTIgKzM0LDM4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorQ29udGVudFNlbGVjdG9yQ2hl
Y2tlcjo6Q29udGVudFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgc3Ry
aWN0UGFyc2luZykKKyAgICA6IG1fc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50LCBzdHJpY3RQYXJz
aW5nKQoreworICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpD
b2xsZWN0aW5nUnVsZXMpOworfQorCitib29sIENvbnRlbnRTZWxlY3RvckNoZWNrZXI6OmNoZWNr
Q29udGVudFNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgVmVjdG9yPFJlZlB0
cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50IG50aCkgY29uc3QKK3sKKyAgICBTZWxlY3RvckNoZWNr
ZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0V2l0aE5vZGVQb29sIGNvbnRleHQoc2VsZWN0b3Is
IHNpYmxpbmdzLCBudGgsIFNlbGVjdG9yQ2hlY2tlcjo6VmlzaXRlZE1hdGNoRGlzYWJsZWQpOwor
ICAgIHJldHVybiBtX3NlbGVjdG9yQ2hlY2tlci5jaGVja09uZVNlbGVjdG9yKGNvbnRleHQpOwor
fQorCit2b2lkIENvbnRlbnRTZWxlY3RvckRhdGFMaXN0Ojppbml0aWFsaXplKGNvbnN0IENTU1Nl
bGVjdG9yTGlzdCYgc2VsZWN0b3JzKQoreworICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
ID0gc2VsZWN0b3JzLmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlz
dDo6bmV4dChzZWxlY3RvcikpCisgICAgICAgIG1fc2VsZWN0b3JzLmFwcGVuZChzZWxlY3Rvcik7
Cit9CisKK2Jvb2wgQ29udGVudFNlbGVjdG9yRGF0YUxpc3Q6Om1hdGNoZXMoY29uc3QgQ29udGVu
dFNlbGVjdG9yQ2hlY2tlciYgc2VsZWN0b3JDaGVja2VyLCBjb25zdCBWZWN0b3I8UmVmUHRyPE5v
ZGU+ID4mIHNpYmxpbmdzLCBpbnQgbnRoKSBjb25zdAoreworICAgIHVuc2lnbmVkIHNlbGVjdG9y
Q291bnQgPSBtX3NlbGVjdG9ycy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNlbGVjdG9yQ291bnQ7ICsraSkgeworICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2VyLmNoZWNr
Q29udGVudFNlbGVjdG9yKG1fc2VsZWN0b3JzW2ldLCBzaWJsaW5ncywgbnRoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIENvbnRlbnRT
ZWxlY3RvclF1ZXJ5OjpDb250ZW50U2VsZWN0b3JRdWVyeShjb25zdCBJbnNlcnRpb25Qb2ludCog
aW5zZXJ0aW9uUG9pbnQpCiAgICAgOiBtX2luc2VydGlvblBvaW50KGluc2VydGlvblBvaW50KQog
ICAgICwgbV9zZWxlY3RvckNoZWNrZXIoaW5zZXJ0aW9uUG9pbnQtPmRvY3VtZW50KCksICFpbnNl
cnRpb25Qb2ludC0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpCiB7Ci0gICAgbV9zZWxlY3Rv
ckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7Ci0KICAg
ICBpZiAoaW5zZXJ0aW9uUG9pbnQtPnNlbGVjdCgpLmlzTnVsbCgpIHx8IGluc2VydGlvblBvaW50
LT5zZWxlY3QoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9pc1ZhbGlkU2VsZWN0b3IgPSB0cnVl
OwogICAgICAgICByZXR1cm47CkBAIC01OCwxMyArODQsMTAgQEAgYm9vbCBDb250ZW50U2VsZWN0
b3JRdWVyeTo6aXNWYWxpZFNlbGVjdG9yKCkgY29uc3QKICAgICByZXR1cm4gbV9pc1ZhbGlkU2Vs
ZWN0b3I7CiB9CiAKLWJvb2wgQ29udGVudFNlbGVjdG9yUXVlcnk6Om1hdGNoZXMoTm9kZSogbm9k
ZSkgY29uc3QKK2Jvb2wgQ29udGVudFNlbGVjdG9yUXVlcnk6Om1hdGNoZXMoY29uc3QgVmVjdG9y
PFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50IG50aCkgY29uc3QKIHsKKyAgICBOb2RlKiBu
b2RlID0gc2libGluZ3NbbnRoXS5nZXQoKTsKICAgICBBU1NFUlQobm9kZSk7Ci0gICAgaWYgKCFu
b2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9k
ZSgpID09IG1faW5zZXJ0aW9uUG9pbnQtPnNoYWRvd1Jvb3QoKS0+aG9zdCgpKTsKIAogICAgIGlm
IChtX2luc2VydGlvblBvaW50LT5zZWxlY3QoKS5pc051bGwoKSB8fCBtX2luc2VydGlvblBvaW50
LT5zZWxlY3QoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzUsNyArOTgs
NyBAQCBib29sIENvbnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVzKE5vZGUqIG5vZGUpIGNvbnN0
CiAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJldHVybiBtX3NlbGVjdG9ycy5tYXRjaGVzKG1fc2VsZWN0b3JDaGVja2VyLCB0b0Vs
ZW1lbnQobm9kZSkpOworICAgIHJldHVybiBtX3NlbGVjdG9ycy5tYXRjaGVzKG1fc2VsZWN0b3JD
aGVja2VyLCBzaWJsaW5ncywgbnRoKTsKIH0KIAogc3RhdGljIGJvb2wgdmFsaWRhdGVTdWJTZWxl
Y3RvcihDU1NTZWxlY3Rvciogc2VsZWN0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaAppbmRleCA5NGZhM2VmY2NmM2Y5ZDcyZTk3NDc3
NWUyZDJkMzE0MGQxM2NiMzRlLi4yYzcxMGE1ODUyZTkyZDc2ODgyYzdjMjA3NTBiZmQyNmRhMmFh
MDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0
b3JRdWVyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3Rv
clF1ZXJ5LmgKQEAgLTQzLDI1ICs0Myw0MSBAQCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIE5vZGU7
CiBjbGFzcyBJbnNlcnRpb25Qb2ludDsKIAorY2xhc3MgQ29udGVudFNlbGVjdG9yQ2hlY2tlciB7
CitwdWJsaWM6CisgICAgQ29udGVudFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCosIGJvb2wgc3Ry
aWN0UGFyc2luZyk7CisKKyAgICBib29sIGNoZWNrQ29udGVudFNlbGVjdG9yKENTU1NlbGVjdG9y
KiwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50IG50aE5vZGUpIGNv
bnN0OworcHJpdmF0ZToKKyAgICBTZWxlY3RvckNoZWNrZXIgbV9zZWxlY3RvckNoZWNrZXI7Cit9
OworCitjbGFzcyBDb250ZW50U2VsZWN0b3JEYXRhTGlzdCB7CitwdWJsaWM6CisgICAgdm9pZCBp
bml0aWFsaXplKGNvbnN0IENTU1NlbGVjdG9yTGlzdCYpOworICAgIGJvb2wgbWF0Y2hlcyhjb25z
dCBDb250ZW50U2VsZWN0b3JDaGVja2VyJiwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBz
aWJsaW5ncywgaW50IG50aE5vZGUpIGNvbnN0OworCitwcml2YXRlOgorICAgIFZlY3RvcjxDU1NT
ZWxlY3Rvcio+IG1fc2VsZWN0b3JzOworfTsKKwogY2xhc3MgQ29udGVudFNlbGVjdG9yUXVlcnkg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnRlbnRTZWxlY3RvclF1ZXJ5KTsKIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBDb250ZW50U2VsZWN0b3JRdWVyeShjb25zdCBJbnNlcnRpb25Qb2lu
dCopOwogCiAgICAgYm9vbCBpc1ZhbGlkU2VsZWN0b3IoKSBjb25zdDsKLSAgICBib29sIG1hdGNo
ZXMoTm9kZSopIGNvbnN0OworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBWZWN0b3I8UmVmUHRyPE5v
ZGU+ID4mIHNpYmxpbmdzLCBpbnQgbnRoTm9kZSkgY29uc3Q7CiBwcml2YXRlOgogICAgIGJvb2wg
dmFsaWRhdGVTZWxlY3Rvckxpc3QoKTsKIAogICAgIGNvbnN0IEluc2VydGlvblBvaW50KiBtX2lu
c2VydGlvblBvaW50OwotICAgIFNlbGVjdG9yRGF0YUxpc3QgbV9zZWxlY3RvcnM7CisgICAgQ29u
dGVudFNlbGVjdG9yRGF0YUxpc3QgbV9zZWxlY3RvcnM7CiAgICAgQ1NTU2VsZWN0b3JMaXN0IG1f
c2VsZWN0b3JMaXN0OwotICAgIFNlbGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKKyAg
ICBDb250ZW50U2VsZWN0b3JDaGVja2VyIG1fc2VsZWN0b3JDaGVja2VyOwogICAgIGJvb2wgbV9p
c1ZhbGlkU2VsZWN0b3I7CiB9OwogCiB9CiAKLQotCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167745</attachid>
            <date>2012-10-09 06:14:58 -0700</date>
            <delta_ts>2012-10-10 04:06:56 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-96990-20121009221358.patch</filename>
            <type>text/plain</type>
            <size>33470</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmVjODg2OTkyMTc2YWMx
NzUzYTQ1ODM2OGE4OGM2M2JhZDFkNjhiOC4uYjg1NzM4MzU0Y2NjZWFkZDg2YWFkMmQ2NDZhYzYy
MjYzNWYxYzkwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTEwLTA5ICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIENvbnRl
bnRTZWxlY3RvclF1ZXJ5IHdvcmsgd2hlbiBzaWJsaW5ncyBhcmUgcGFzc2VkIGV4cGxpY2l0eS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2OTkwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0lQLgorCisg
ICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yV2l0aCk6CisgICAgICAg
ICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVj
a2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dDo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQpOgor
ICAgICAgICAoU2VsZWN0b3JDaGVja2luZ0NvbnRleHQpOgorICAgICAgICAoU2VsZWN0b3JDaGVj
a2VyKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyU3RyYXRlZ3kuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERPTVRyYXZlcnNhbFN0cmF0ZWd5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5Ojppc0ZpcnN0Q2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmlzTGFzdENoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5Ojppc0ZpcnN0T2ZUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5Ojppc0xhc3RPZlR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNCZWZvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNPZlR5cGVC
ZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxl
bWVudHNBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpET01UcmF2ZXJzYWxTdHJhdGVneTo6Y291
bnRFbGVtZW50c09mVHlwZUFmdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0RPTVRyYXZl
cnNhbFN0cmF0ZWd5OjpTaGFkb3dET01UcmF2ZXJzYWxTdHJhdGVneSk6CisgICAgICAgIChTaGFk
b3dET01UcmF2ZXJzYWxTdHJhdGVneSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dET01UcmF2
ZXJzYWxTdHJhdGVneTo6aXNGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0RP
TVRyYXZlcnNhbFN0cmF0ZWd5Ojppc0xhc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFk
b3dET01UcmF2ZXJzYWxTdHJhdGVneTo6aXNGaXJzdE9mVHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFkb3dET01UcmF2ZXJzYWxTdHJhdGVneTo6aXNMYXN0T2ZUeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYWRvd0RPTVRyYXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzQmVmb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0RPTVRyYXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1l
bnRzQWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93RE9NVHJhdmVyc2FsU3RyYXRlZ3k6
OmNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93RE9N
VHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNPZlR5cGVBZnRlcik6CisgICAgICAgICog
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAqIGh0bWwvc2hhZG93L0NvbnRlbnREaXN0
cmlidXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RGlzdHJpYnV0b3I6OmRpc3Ry
aWJ1dGVTZWxlY3Rpb25zVG8pOgorICAgICAgICAqIGh0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3Rv
clF1ZXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNv
bnRlbnRTZWxlY3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50U2VsZWN0b3JDaGVja2VyOjpjaGVja0NvbnRlbnRTZWxlY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50U2VsZWN0b3JEYXRhTGlzdDo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50U2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VsZWN0b3JRdWVyeTo6Q29udGVudFNlbGVjdG9yUXVlcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yUXVlcnk6Om1hdGNoZXMpOgorICAgICAg
ICAqIGh0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5Lmg6CisgICAgICAgIChDb250ZW50
U2VsZWN0b3JDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29udGVudFNl
bGVjdG9yRGF0YUxpc3QpOgorICAgICAgICAoQ29udGVudFNlbGVjdG9yUXVlcnkpOgorCiAyMDEy
LTEwLTA4ICBKYWVodW4gTGltICA8bGphZWh1bi5saW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAg
W0NBSVJPXSBBZGp1c3QgdGhlIHNvdXJjZSByZWN0IHNpemUgd2hlbiBJTUFHRV9ERUNPREVSX0RP
V05fU0FNUExJTkcgaXMgZW5hYmxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNw
cAppbmRleCBiZjU4MDNkMjA3OGVmNzE5NzQwNmFlZTA2ZWM4Mzc4MGIyMjA2ZTg1Li5lOTRhYzZm
Y2I5MzFkZWU3MmY1ZDM0YzM1YzVlYjFiNDQ1YmY1ZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2Vs
ZWN0b3JDaGVja2VyLmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxl
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZS5oIgorI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlclN0cmF0ZWd5LmgiCiAjaW5jbHVkZSAiU3R5
bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgi
CkBAIC0yNjgsNyArMjY5LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3Io
Q1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBpc0YKIAogICAgIFBzZXVk
b0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICBib29sIGhhc1Vua25vd25Q
c2V1ZG9FbGVtZW50cyA9IGZhbHNlOwotICAgIHJldHVybiBjaGVja1NlbGVjdG9yKFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0KHNlbCwgZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0
Y2hEaXNhYmxlZCksIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50
cykgPT0gU2VsZWN0b3JNYXRjaGVzOworICAgIHJldHVybiBjaGVja1NlbGVjdG9yKFNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0KHNlbCwgZWxlbWVudCwgVmlzaXRlZE1hdGNoRGlzYWJsZWQpLCBpZ25v
cmVEeW5hbWljUHNldWRvLCBoYXNVbmtub3duUHNldWRvRWxlbWVudHMpID09IFNlbGVjdG9yTWF0
Y2hlczsKIH0KIAogbmFtZXNwYWNlIHsKQEAgLTcyNyw4ICs3MjgsMTMgQEAgc3RhdGljIGJvb2wg
YW55QXR0cmlidXRlTWF0Y2hlcyhFbGVtZW50KiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6TWF0Y2gg
bWF0Y2gsIGNvbnMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENo
ZWNraW5nQ29udGV4dD4KLWJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNv
bnN0IENoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKK2lubGluZSBib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYg
Y29udGV4dCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2hlY2tPbmVTZWxlY3RvcldpdGgoY29udGV4
dCwgRE9NVHJhdmVyc2FsU3RyYXRlZ3koKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFN0cmF0
ZWd5PgorYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3JXaXRoKGNvbnN0IFNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJhdGVneSYgc3RyYXRlZ3kp
IGNvbnN0CiB7CiAgICAgRWxlbWVudCogY29uc3QgJiBlbGVtZW50ID0gY29udGV4dC5lbGVtZW50
OwogICAgIENTU1NlbGVjdG9yKiBjb25zdCAmIHNlbGVjdG9yID0gY29udGV4dC5zZWxlY3RvcjsK
QEAgLTc2NSw3ICs3NzEsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rv
cihjb25zdCBDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICBpZiAo
IXNlbGVjdG9yTGlzdCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
ICAgIENoZWNraW5nQ29udGV4dCBzdWJDb250ZXh0KGNvbnRleHQpOworICAgICAgICAgICAgU2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQgc3ViQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgICAgIHN1
YkNvbnRleHQuaXNTdWJTZWxlY3RvciA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKHN1YkNvbnRl
eHQuc2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QtPmZpcnN0KCk7IHN1YkNvbnRleHQuc2VsZWN0b3I7
IHN1YkNvbnRleHQuc2VsZWN0b3IgPSBzdWJDb250ZXh0LnNlbGVjdG9yLT50YWdIaXN0b3J5KCkp
IHsKICAgICAgICAgICAgICAgICAvLyA6bm90IGNhbm5vdCBuZXN0LiBJIGRvbid0IHJlYWxseSBr
bm93IHdoeSB0aGlzIGlzIGEKQEAgLTgxOSw3ICs4MjUsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZpcnN0Q2hpbGQ6CiAgICAgICAgICAg
ICAvLyBmaXJzdC1jaGlsZCBtYXRjaGVzIHRoZSBmaXJzdCBjaGlsZCB0aGF0IGlzIGFuIGVsZW1l
bnQKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAg
ICAgICAgICBib29sIHJlc3VsdCA9IERPTVRyYXZlcnNhbFN0cmF0ZWd5PENoZWNraW5nQ29udGV4
dD46OmlzRmlyc3RDaGlsZChjb250ZXh0LCBlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBib29s
IHJlc3VsdCA9IHN0cmF0ZWd5LmlzRmlyc3RDaGlsZChlbGVtZW50KTsKICAgICAgICAgICAgICAg
ICBpZiAobV9tb2RlID09IFJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIFJl
bmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVs
ZW1lbnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAg
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4
dC5lbGVtZW50UGFyZW50U3R5bGUgOiBlbGVtZW50LT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxl
KCk7CkBAIC04MzQsNyArODQwLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2Vs
ZWN0b3IoY29uc3QgQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdE9mVHlwZToKICAgICAgICAgICAgIC8vIGZpcnN0LW9m
LXR5cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZQogICAgICAgICAgICAg
aWYgKGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgcmVz
dWx0ID0gRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6aXNGaXJzdE9mVHlw
ZShjb250ZXh0LCBlbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKKyAgICAgICAgICAgICAg
ICBib29sIHJlc3VsdCA9IHN0cmF0ZWd5LmlzRmlyc3RPZlR5cGUoZWxlbWVudCwgZWxlbWVudC0+
dGFnUU5hbWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHls
ZSkgewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250
ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDogZWxlbWVudC0+
cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGFy
ZW50U3R5bGUpCkBAIC04NDYsNyArODUyLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNr
T25lU2VsZWN0b3IoY29uc3QgQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYXN0Q2hpbGQ6CiAgICAgICAgICAgICAvLyBsYXN0
LWNoaWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50CiAgICAgICAg
ICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQo
KSkgewotICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcGFyZW50RWxlbWVudC0+aXNGaW5p
c2hlZFBhcnNpbmdDaGlsZHJlbigpICYmIERPTVRyYXZlcnNhbFN0cmF0ZWd5PENoZWNraW5nQ29u
dGV4dD46OmlzTGFzdENoaWxkKGNvbnRleHQsIGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGJv
b2wgcmVzdWx0ID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpICYm
IHN0cmF0ZWd5LmlzTGFzdENoaWxkKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChtX21v
ZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IGNoaWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxl
IDogZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQ
YXJlbnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CkBAIC04NjgsMTMgKzg3
NCwxMyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBDaGVj
a2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IERPTVRyYXZlcnNhbFN0cmF0ZWd5PENoZWNraW5nQ29udGV4dD46OmlzTGFzdE9mVHlwZShjb250
ZXh0LCBlbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RyYXRlZ3kuaXNMYXN0T2ZUeXBlKGVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb09ubHlDaGlsZDoKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVt
ZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBm
aXJzdENoaWxkID0gRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6aXNGaXJz
dENoaWxkKGNvbnRleHQsIGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGJvb2wgb25seUNoaWxk
ID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVu
KCkgJiYgRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6aXNMYXN0Q2hpbGQo
Y29udGV4dCwgZWxlbWVudCk7CisgICAgICAgICAgICAgICAgYm9vbCBmaXJzdENoaWxkID0gc3Ry
YXRlZ3kuaXNGaXJzdENoaWxkKGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGJvb2wgb25seUNo
aWxkID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxk
cmVuKCkgJiYgc3RyYXRlZ3kuaXNMYXN0Q2hpbGQoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAg
aWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVt
ZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQu
ZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKQEAgLTkw
MiwxNCArOTA4LDE0IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNv
bnN0IENoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxk
cmVuKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6aXNGaXJzdE9m
VHlwZShjb250ZXh0LCBlbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKSAmJiBET01UcmF2ZXJz
YWxTdHJhdGVneTxDaGVja2luZ0NvbnRleHQ+Ojppc0xhc3RPZlR5cGUoY29udGV4dCwgZWxlbWVu
dCwgZWxlbWVudC0+dGFnUU5hbWUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmF0ZWd5
LmlzRmlyc3RPZlR5cGUoZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSkgJiYgc3RyYXRlZ3ku
aXNMYXN0T2ZUeXBlKGVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050
aENoaWxkOgogICAgICAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0g
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50ID0g
MSArIERPTVRyYXZlcnNhbFN0cmF0ZWd5PENoZWNraW5nQ29udGV4dD46OmNvdW50RWxlbWVudHNC
ZWZvcmUoY29udGV4dCwgZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSAr
IHN0cmF0ZWd5LmNvdW50RWxlbWVudHNCZWZvcmUoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAg
aWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJTdHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVt
ZW50U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQu
ZWxlbWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKQEAgLTky
Nyw3ICs5MzMsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25z
dCBDaGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICBpZiAoIXNlbGVj
dG9yLT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYg
KEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tp
bmdDb250ZXh0Pjo6Y291bnRFbGVtZW50c09mVHlwZUJlZm9yZShjb250ZXh0LCBlbGVtZW50LCBl
bGVtZW50LT50YWdRTmFtZSgpKTsKKyAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgc3Ry
YXRlZ3kuY291bnRFbGVtZW50c09mVHlwZUJlZm9yZShlbGVtZW50LCBlbGVtZW50LT50YWdRTmFt
ZSgpKTsKICAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IFJlc29sdmluZ1N0eWxlKSB7CiAg
ICAgICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxl
bWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5y
ZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCkBAIC05
NDksNyArOTU1LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoY29u
c3QgQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRy
ZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IGludCBjb3VudCA9IDEgKyBET01UcmF2ZXJzYWxTdHJhdGVneTxDaGVja2luZ0NvbnRleHQ+Ojpj
b3VudEVsZW1lbnRzQWZ0ZXIoY29udGV4dCwgZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaW50
IGNvdW50ID0gMSArIHN0cmF0ZWd5LmNvdW50RWxlbWVudHNBZnRlcihlbGVtZW50KTsKICAgICAg
ICAgICAgICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoTnRoKGNvdW50KSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC05NjYsNyArOTcyLDcgQEAgYm9v
bCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoY29uc3QgQ2hlY2tpbmdDb250ZXh0
JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNG
aW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgRE9NVHJhdmVyc2FsU3RyYXRl
Z3k8Q2hlY2tpbmdDb250ZXh0Pjo6Y291bnRFbGVtZW50c09mVHlwZUFmdGVyKGNvbnRleHQsIGVs
ZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOworICAgICAgICAgICAgICAgIGludCBjb3VudCA9
IDEgKyBzdHJhdGVneS5jb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoZWxlbWVudCwgZWxlbWVudC0+
dGFnUU5hbWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3Vu
dCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAt
OTc3LDcgKzk4Myw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNv
bnN0IENoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Bbnk6CiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgQ2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCk7CisgICAgICAg
ICAgICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc3ViQ29udGV4dChjb250ZXh0KTsKICAg
ICAgICAgICAgICAgICBzdWJDb250ZXh0LmlzU3ViU2VsZWN0b3IgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIGJvb2wgaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwpAQCAtMTM1OSw5
MCArMTM2NSw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVTZWxlY3RvclNjb3Bl
cyhjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXRlbXBsYXRlPD4KLWlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2Fs
U3RyYXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dD46OmlzRmly
c3RDaGlsZChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Jiwg
RWxlbWVudCogZWxlbWVudCkKLXsKLSAgICByZXR1cm4gIWVsZW1lbnQtPnByZXZpb3VzRWxlbWVu
dFNpYmxpbmcoKTsKLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2Vy
OjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdD
b250ZXh0Pjo6aXNMYXN0Q2hpbGQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNr
aW5nQ29udGV4dCYsIEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgcmV0dXJuICFlbGVtZW50LT5u
ZXh0RWxlbWVudFNpYmxpbmcoKTsKLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIGJvb2wgU2VsZWN0
b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9y
Q2hlY2tpbmdDb250ZXh0Pjo6aXNGaXJzdE9mVHlwZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgdHlwZSkKLXsKLSAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50
LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5w
cmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05h
bWUodHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OkRPTVRy
YXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ+
Ojppc0xhc3RPZlR5cGUoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29u
dGV4dCYsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCi17Ci0g
ICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJs
aW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkg
ewotICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPD4KLWlu
bGluZSBpbnQgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNo
ZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Pjo6Y291bnRFbGVtZW50c0JlZm9yZShjb25z
dCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgRWxlbWVudCogZWxl
bWVudCkKLXsKLSAgICBpbnQgY291bnQgPSAwOwotICAgIGZvciAoY29uc3QgRWxlbWVudCogc2li
bGluZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGlu
ZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgewotICAgICAgICBSZW5kZXJT
dHlsZSogcyA9IHNpYmxpbmctPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gcyA/IHMtPmNoaWxkSW5kZXgoKSA6IDA7Ci0gICAgICAgIGlmIChpbmRleCkgewotICAgICAg
ICAgICAgY291bnQgKz0gaW5kZXg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjb3VudCsrOwotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdGVtcGxhdGU8
PgotaW5saW5lIGludCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVj
dG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ+Ojpjb3VudEVsZW1lbnRzT2ZUeXBl
QmVmb3JlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQotewotICAgIGludCBj
b3VudCA9IDA7Ci0gICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlv
dXNFbGVtZW50U2libGluZygpKSB7Ci0gICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5
cGUpKQotICAgICAgICAgICAgKytjb3VudDsKLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19
Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBpbnQgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxT
dHJhdGVneTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Pjo6Y291bnRF
bGVtZW50c0FmdGVyKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRl
eHQmLCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGludCBjb3VudCA9IDA7Ci0gICAgZm9yIChj
b25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNp
Ymxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkKLSAgICAgICAg
Kytjb3VudDsKLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIGlu
dCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ+Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoY29uc3Qg
U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCi17Ci0gICAgaW50IGNvdW50ID0gMDsKLSAg
ICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxp
bmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7
Ci0gICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQotICAgICAgICAgICAgKytj
b3VudDsKLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KIHRlbXBsYXRlCi1TZWxlY3Rv
ckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2ggU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yPFNl
bGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ+KGNvbnN0IFNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0JiwgUHNldWRvSWQmLCBib29sJikgY29uc3Q7Citib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmVTZWxlY3RvcldpdGgoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rv
ckNoZWNraW5nQ29udGV4dCYsIGNvbnN0IFNoYWRvd0RPTVRyYXZlcnNhbFN0cmF0ZWd5JikgY29u
c3Q7CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCAxZjM0OTBjNjQ3
NjRiMGQyMDIxYzczZGVjOGYxOTFmYmIxNjIzYTFiLi4zYzdiYWY3NTBiNjZhZWYwZWJmNmQ1MmMx
NDcyMTkxYmU4OGU4NjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCkBAIC0z
Miw3ICszMiw5IEBACiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgorI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKKyNpbmNsdWRl
ICJTZWxlY3RvckNoZWNrZXJTdHJhdGVneS5oIgogI2luY2x1ZGUgIlNwYWNlU3BsaXRTdHJpbmcu
aCIKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSA8d3RmL0Jsb29tRmlsdGVy
Lmg+CkBAIC02MSwxMCArNjMsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgLCBlbGVtZW50KGVs
ZW1lbnQpCiAgICAgICAgICAgICAsIHNjb3BlKDApCiAgICAgICAgICAgICAsIHZpc2l0ZWRNYXRj
aFR5cGUodmlzaXRlZE1hdGNoVHlwZSkKKyAgICAgICAgICAgICwgcHNldWRvU3R5bGUoTk9QU0VV
RE8pCiAgICAgICAgICAgICAsIGVsZW1lbnRTdHlsZSgwKQogICAgICAgICAgICAgLCBlbGVtZW50
UGFyZW50U3R5bGUoMCkKICAgICAgICAgICAgICwgaXNTdWJTZWxlY3RvcihmYWxzZSkKLSAgICAg
ICAgICAgICwgcHNldWRvU3R5bGUoTk9QU0VVRE8pCiAgICAgICAgICAgICAsIGhhc1Njcm9sbGJh
clBzZXVkbyhmYWxzZSkKICAgICAgICAgICAgICwgaGFzU2VsZWN0aW9uUHNldWRvKGZhbHNlKQog
ICAgICAgICB7IH0KQEAgLTczLDMyICs3NSwyMSBAQCBwdWJsaWM6CiAgICAgICAgIEVsZW1lbnQq
IGVsZW1lbnQ7CiAgICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlOwogICAgICAgICBW
aXNpdGVkTWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGU7CisgICAgICAgIFBzZXVkb0lkIHBzZXVk
b1N0eWxlOwogICAgICAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlOwogICAgICAgICBSZW5k
ZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlOwogICAgICAgICBib29sIGlzU3ViU2VsZWN0b3I7
Ci0gICAgICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxlOwogICAgICAgICBib29sIGhhc1Njcm9sbGJh
clBzZXVkbzsKICAgICAgICAgYm9vbCBoYXNTZWxlY3Rpb25Qc2V1ZG87CiAgICAgfTsKIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENvbnRleHQ+Ci0gICAgc3RydWN0IERPTVRyYXZlcnNhbFN0cmF0
ZWd5IHsKLSAgICAgICAgc3RhdGljIGJvb2wgaXNGaXJzdENoaWxkKGNvbnN0IENvbnRleHQmLCBF
bGVtZW50Kik7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzTGFzdENoaWxkKGNvbnN0IENvbnRleHQm
LCBFbGVtZW50Kik7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzRmlyc3RPZlR5cGUoY29uc3QgQ29u
dGV4dCYsIEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0gICAgICAgIHN0YXRpYyBi
b29sIGlzTGFzdE9mVHlwZShjb25zdCBDb250ZXh0JiwgRWxlbWVudCosIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKLQotICAgICAgICBzdGF0aWMgaW50IGNvdW50RWxlbWVudHNCZWZvcmUoY29uc3Qg
Q29udGV4dCYsIEVsZW1lbnQqKTsKLSAgICAgICAgc3RhdGljIGludCBjb3VudEVsZW1lbnRzQWZ0
ZXIoY29uc3QgQ29udGV4dCYsIEVsZW1lbnQqKTsKLSAgICAgICAgc3RhdGljIGludCBjb3VudEVs
ZW1lbnRzT2ZUeXBlQmVmb3JlKGNvbnN0IENvbnRleHQmLCBFbGVtZW50KiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwotICAgICAgICBzdGF0aWMgaW50IGNvdW50RWxlbWVudHNPZlR5cGVBZnRlcihj
b25zdCBDb250ZXh0JiwgRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKLSAgICB9Owot
CiAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIGJvb2wgaXNG
YXN0Q2hlY2thYmxlU2VsZWN0b3IgPSBmYWxzZSkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hlY2tpbmdDb250ZXh0PgogICAgIFNlbGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3Rvcihjb25z
dCBDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYsIGJvb2wmIGhhc1Vua25vd25Qc2V1ZG9FbGVt
ZW50cykgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tpbmdDb250ZXh0PgotICAg
IGJvb2wgY2hlY2tPbmVTZWxlY3Rvcihjb25zdCBDaGVja2luZ0NvbnRleHQmKSBjb25zdDsKKwor
ICAgIGJvb2wgY2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYp
IGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmF0ZWd5PgorICAgIGJvb2wgY2hlY2tP
bmVTZWxlY3RvcldpdGgoY29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBjb25zdCBTdHJh
dGVneSYpIGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqKTsKICAgICBib29sIGZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENT
U1NlbGVjdG9yKiwgY29uc3QgRWxlbWVudCopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclN0cmF0ZWd5LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyU3RyYXRlZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NDc2NmFlZWM5MWYwYWJlMjNk
YjRlOTlhOTE2MWRhNzkxYmRkY2VhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlclN0cmF0ZWd5LmgKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAg
ICAoQykgMjAwNC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkK
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNr
c2hhbmtzLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEs
IENvZGUgQXVyb3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBTZWxlY3RvckNoZWNrZXJTdHJhdGVneV9oCisjZGVmaW5lIFNlbGVjdG9yQ2hlY2tl
clN0cmF0ZWd5X2gKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKworI2luY2x1ZGUgPHd0Zi9VbnVz
ZWRQYXJhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBET01UcmF2ZXJzYWxT
dHJhdGVneSB7CisgICAgYm9vbCBpc0ZpcnN0Q2hpbGQoRWxlbWVudCopIGNvbnN0OworICAgIGJv
b2wgaXNMYXN0Q2hpbGQoRWxlbWVudCopIGNvbnN0OworICAgIGJvb2wgaXNGaXJzdE9mVHlwZShF
bGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworICAgIGJvb2wgaXNMYXN0T2ZU
eXBlKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisKKyAgICBpbnQgY291
bnRFbGVtZW50c0JlZm9yZShFbGVtZW50KikgY29uc3Q7CisgICAgaW50IGNvdW50RWxlbWVudHNB
ZnRlcihFbGVtZW50KikgY29uc3Q7CisgICAgaW50IGNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUo
RWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKyAgICBpbnQgY291bnRFbGVt
ZW50c09mVHlwZUFmdGVyKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7Cit9
OworCitpbmxpbmUgYm9vbCBET01UcmF2ZXJzYWxTdHJhdGVneTo6aXNGaXJzdENoaWxkKEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuICFlbGVtZW50LT5wcmV2aW91c0VsZW1l
bnRTaWJsaW5nKCk7Cit9CisKK2lubGluZSBib29sIERPTVRyYXZlcnNhbFN0cmF0ZWd5Ojppc0xh
c3RDaGlsZChFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIHJldHVybiAhZWxlbWVudC0+
bmV4dEVsZW1lbnRTaWJsaW5nKCk7Cit9CisKK2lubGluZSBib29sIERPTVRyYXZlcnNhbFN0cmF0
ZWd5Ojppc0ZpcnN0T2ZUeXBlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IHR5cGUpIGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVu
dC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+
cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdO
YW1lKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworaW5saW5lIGJvb2wgRE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmlzTGFzdE9mVHlw
ZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAorewor
ICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVtZW50U2li
bGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkp
IHsKKyAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgaW50IERP
TVRyYXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzQmVmb3JlKEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0Cit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNp
YmxpbmcgPSBlbGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxp
bmcgPSBzaWJsaW5nLT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgUmVuZGVy
U3R5bGUqIHMgPSBzaWJsaW5nLT5yZW5kZXJTdHlsZSgpOworICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IHMgPyBzLT5jaGlsZEluZGV4KCkgOiAwOworICAgICAgICBpZiAoaW5kZXgpIHsKKyAgICAg
ICAgICAgIGNvdW50ICs9IGluZGV4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY291bnQrKzsKKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK2lubGluZSBp
bnQgRE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUoRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkgY29uc3QKK3sKKyAgICBpbnQg
Y291bnQgPSAwOworICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnBy
ZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZp
b3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0
eXBlKSkKKyAgICAgICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50Owor
fQorCitpbmxpbmUgaW50IERPTVRyYXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzQWZ0ZXIo
RWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAo
Y29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOyBz
aWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpCisgICAgICAg
ICsrY291bnQ7CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK2lubGluZSBpbnQgRE9NVHJhdmVy
c2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNPZlR5cGVBZnRlcihFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAoreworICAgIGludCBjb3VudCA9IDA7Cisg
ICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJs
aW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkg
eworICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgICsr
Y291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitzdHJ1Y3QgU2hhZG93RE9N
VHJhdmVyc2FsU3RyYXRlZ3kgeworICAgIFNoYWRvd0RPTVRyYXZlcnNhbFN0cmF0ZWd5KGNvbnN0
IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGludCBudGgpCisgICAgICAgIDogbV9z
aWJsaW5ncyhzaWJsaW5ncykKKyAgICAgICAgLCBtX250aChudGgpCisgICAgeworICAgIH0KKwor
ICAgIGJvb2wgaXNGaXJzdENoaWxkKEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGlzTGFzdENo
aWxkKEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGlzRmlyc3RPZlR5cGUoRWxlbWVudCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKyAgICBib29sIGlzTGFzdE9mVHlwZShFbGVtZW50
KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworCisgICAgaW50IGNvdW50RWxlbWVudHNC
ZWZvcmUoRWxlbWVudCopIGNvbnN0OworICAgIGludCBjb3VudEVsZW1lbnRzQWZ0ZXIoRWxlbWVu
dCopIGNvbnN0OworICAgIGludCBjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKEVsZW1lbnQqLCBj
b25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisgICAgaW50IGNvdW50RWxlbWVudHNPZlR5cGVB
ZnRlcihFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBtX3NpYmxpbmdzOworICAgIGludCBtX250aDsKK307
CisKK2lubGluZSBib29sIFNoYWRvd0RPTVRyYXZlcnNhbFN0cmF0ZWd5Ojppc0ZpcnN0Q2hpbGQo
RWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7Cisg
ICAgCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncyA9IG1fc2libGlu
Z3M7CisgICAgQVNTRVJUKGVsZW1lbnQgPT0gdG9FbGVtZW50KHNpYmxpbmdzW21fbnRoXS5nZXQo
KSkpOworCisgICAgZm9yIChpbnQgaSA9IG1fbnRoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAg
ICAgaWYgKHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lu
bGluZSBib29sIFNoYWRvd0RPTVRyYXZlcnNhbFN0cmF0ZWd5Ojppc0xhc3RDaGlsZChFbGVtZW50
KiBlbGVtZW50KSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKworICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBtX3NpYmxpbmdzOworICAgIEFT
U0VSVChlbGVtZW50ID09IHRvRWxlbWVudChzaWJsaW5nc1ttX250aF0uZ2V0KCkpKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSBtX250aCArIDE7IGkgPCBzaWJsaW5ncy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAoc2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworaW5saW5lIGJvb2wgU2hhZG93RE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmlzRmlyc3RPZlR5cGUo
RWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkgY29uc3QKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+
ID4mIHNpYmxpbmdzID0gbV9zaWJsaW5nczsKKyAgICBBU1NFUlQoZWxlbWVudCA9PSB0b0VsZW1l
bnQoc2libGluZ3NbbV9udGhdLmdldCgpKSk7CisKKyAgICBmb3IgKGludCBpID0gbV9udGggLSAx
OyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAoc2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0t
PmlzRWxlbWVudE5vZGUoKSAmJiBzaWJsaW5nc1tpXS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5s
aW5lIGJvb2wgU2hhZG93RE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmlzTGFzdE9mVHlwZShFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAoreworICAgIFVOVVNF
RF9QQVJBTShlbGVtZW50KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2li
bGluZ3MgPSBtX3NpYmxpbmdzOworICAgIEFTU0VSVChlbGVtZW50ID09IHRvRWxlbWVudChzaWJs
aW5nc1ttX250aF0uZ2V0KCkpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSBtX250aCArIDE7IGkg
PCBzaWJsaW5ncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoc2libGluZ3NbaV0gJiYgc2li
bGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSAmJiBzaWJsaW5nc1tpXS0+aGFzVGFnTmFtZSh0eXBl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW5saW5lIGludCBTaGFkb3dET01UcmF2ZXJzYWxTdHJhdGVneTo6Y291bnRFbGVtZW50
c0JlZm9yZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShlbGVt
ZW50KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBtX3Np
YmxpbmdzOworICAgIEFTU0VSVChlbGVtZW50ID09IHRvRWxlbWVudChzaWJsaW5nc1ttX250aF0u
Z2V0KCkpKTsKKworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChpbnQgaSA9IG1fbnRoIC0g
MTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ld
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICArK2NvdW50OworICAgIH0KKworICAgIHJl
dHVybiBjb3VudDsKK30KKworaW5saW5lIGludCBTaGFkb3dET01UcmF2ZXJzYWxTdHJhdGVneTo6
Y291bnRFbGVtZW50c0FmdGVyKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgVU5VU0VE
X1BBUkFNKGVsZW1lbnQpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJs
aW5ncyA9IG1fc2libGluZ3M7CisgICAgQVNTRVJUKGVsZW1lbnQgPT0gdG9FbGVtZW50KHNpYmxp
bmdzW21fbnRoXS5nZXQoKSkpOworCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKHNpemVf
dCBpID0gbV9udGggKyAxOyBpIDwgc2libGluZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAg
ICByZXR1cm4gKytjb3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK2lubGlu
ZSBpbnQgU2hhZG93RE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNPZlR5cGVCZWZv
cmUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkgY29uc3QKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5v
ZGU+ID4mIHNpYmxpbmdzID0gbV9zaWJsaW5nczsKKyAgICBBU1NFUlQoZWxlbWVudCA9PSB0b0Vs
ZW1lbnQoc2libGluZ3NbbV9udGhdLmdldCgpKSk7CisKKyAgICBpbnQgY291bnQgPSAwOworICAg
IGZvciAoaW50IGkgPSBtX250aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChzaWJs
aW5nc1tpXSAmJiBzaWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgpICYmIHNpYmxpbmdzW2ldLT5o
YXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgKytjb3VudDsKKyAgICB9CisKKyAgICByZXR1
cm4gY291bnQ7Cit9CisKK2lubGluZSBpbnQgU2hhZG93RE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmNv
dW50RWxlbWVudHNPZlR5cGVBZnRlcihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiB0eXBlKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKworICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBtX3NpYmxpbmdzOworICAgIEFT
U0VSVChlbGVtZW50ID09IHRvRWxlbWVudChzaWJsaW5nc1ttX250aF0uZ2V0KCkpKTsKKworICAg
IGludCBjb3VudCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IG1fbnRoICsgMTsgaSA8IHNpYmxp
bmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJsaW5nc1tp
XS0+aXNFbGVtZW50Tm9kZSgpICYmIHNpYmxpbmdzW2ldLT5oYXNUYWdOYW1lKHR5cGUpKQorICAg
ICAgICAgICAgcmV0dXJuICsrY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDM2Yzhi
NmI1ZjdhNjMzNDY4ZjlhM2Y1ZjE4MzA2NGIyMjE4NGNhYzQuLjc3YWIwMjQ4MWIwMTgwYzg1NTc5
ZTQzNWViZDc1ODY0ODU5ZTMwMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAK
QEAgLTEwMyw2ICsxMDMsNyBAQAogI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKKyNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXJTdHJhdGVneS5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhZG93RGF0YS5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3Qu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmli
dXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3Iu
Y3BwCmluZGV4IDA3NmE3MjNjOGE5MWFmZTkzMTg4NzY1ODk0Y2U3NzM2ZGMzNjZhMDAuLjY3NDhi
NTk5MWRiNjdmYmIzNWRlYzc5ZjM1MzQ4NmE0ZGJkN2RlYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcApAQCAtMTE3LDEwICsxMTcs
MTAgQEAgdm9pZCBDb250ZW50RGlzdHJpYnV0b3I6OmRpc3RyaWJ1dGVTZWxlY3Rpb25zVG8oSW5z
ZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50LAogICAgICAgICBpZiAoZGlzdHJpYnV0ZWRbaV0p
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBOb2RlKiBjaGlsZCA9IHBvb2xbaV0u
Z2V0KCk7Ci0gICAgICAgIGlmICghcXVlcnkubWF0Y2hlcyhjaGlsZCkpCisgICAgICAgIGlmICgh
cXVlcnkubWF0Y2hlcyhwb29sLCBpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCisgICAgICAg
IE5vZGUqIGNoaWxkID0gcG9vbFtpXS5nZXQoKTsKICAgICAgICAgZGlzdHJpYnV0aW9uLmFwcGVu
ZChjaGlsZCk7CiAgICAgICAgIG1fbm9kZVRvSW5zZXJ0aW9uUG9pbnQuYWRkKGNoaWxkLCBpbnNl
cnRpb25Qb2ludCk7CiAgICAgICAgIGRpc3RyaWJ1dGVkW2ldID0gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmNwcAppbmRleCBm
MTJjNTk5MjVmN2M5MzI0ZjZmZWZjYmViMjIzNTg5NTdkZjIxMWYzLi42YjZkYjFkYmQ0Y2Q3YzVm
NGUxZGJjZWQ3OTg0NDAzYmI0YTdmYmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwCkBAIC0zMCwxNiArMzAsNDUgQEAKICNp
bmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKICNpbmNs
dWRlICJJbnNlcnRpb25Qb2ludC5oIgorI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgogI2lu
Y2x1ZGUgIlNoYWRvd1Jvb3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitDb250ZW50U2Vs
ZWN0b3JDaGVja2VyOjpDb250ZW50U2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiBkb2N1bWVudCwg
Ym9vbCBzdHJpY3RQYXJzaW5nKQorICAgIDogbV9zZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQsIHN0
cmljdFBhcnNpbmcpCit7CisgICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNo
ZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7Cit9CisKK2Jvb2wgQ29udGVudFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tDb250ZW50U2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBWZWN0
b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzLCBpbnQgbnRoKSBjb25zdAoreworICAgIFNlbGVj
dG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChzZWxlY3RvciwgdG9F
bGVtZW50KHNpYmxpbmdzW250aF0uZ2V0KCkpLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRj
aEVuYWJsZWQpOworICAgIFNoYWRvd0RPTVRyYXZlcnNhbFN0cmF0ZWd5IHN0cmF0ZWd5KHNpYmxp
bmdzLCBudGgpOworCisgICAgcmV0dXJuIG1fc2VsZWN0b3JDaGVja2VyLmNoZWNrT25lU2VsZWN0
b3JXaXRoKGNvbnRleHQsIHN0cmF0ZWd5KTsKK30KKwordm9pZCBDb250ZW50U2VsZWN0b3JEYXRh
TGlzdDo6aW5pdGlhbGl6ZShjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9ycykKK3sKKyAg
ICBmb3IgKENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHNlbGVjdG9ycy5maXJzdCgpOyBzZWxlY3Rv
cjsgc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKQorICAgICAgICBt
X3NlbGVjdG9ycy5hcHBlbmQoc2VsZWN0b3IpOworfQorCitib29sIENvbnRlbnRTZWxlY3RvckRh
dGFMaXN0OjptYXRjaGVzKGNvbnN0IENvbnRlbnRTZWxlY3RvckNoZWNrZXImIHNlbGVjdG9yQ2hl
Y2tlciwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50IG50aCkgY29u
c3QKK3sKKyAgICB1bnNpZ25lZCBzZWxlY3RvckNvdW50ID0gbV9zZWxlY3RvcnMuc2l6ZSgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWxlY3RvckNvdW50OyArK2kpIHsKKyAgICAg
ICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5jaGVja0NvbnRlbnRTZWxlY3RvcihtX3NlbGVjdG9yc1tp
XSwgc2libGluZ3MsIG50aCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCiBDb250ZW50U2VsZWN0b3JRdWVyeTo6Q29udGVudFNlbGVjdG9y
UXVlcnkoY29uc3QgSW5zZXJ0aW9uUG9pbnQqIGluc2VydGlvblBvaW50KQogICAgIDogbV9pbnNl
cnRpb25Qb2ludChpbnNlcnRpb25Qb2ludCkKICAgICAsIG1fc2VsZWN0b3JDaGVja2VyKGluc2Vy
dGlvblBvaW50LT5kb2N1bWVudCgpLCAhaW5zZXJ0aW9uUG9pbnQtPmRvY3VtZW50KCktPmluUXVp
cmtzTW9kZSgpKQogewotICAgIG1fc2VsZWN0b3JDaGVja2VyLnNldE1vZGUoU2VsZWN0b3JDaGVj
a2VyOjpDb2xsZWN0aW5nUnVsZXMpOwotCiAgICAgaWYgKGluc2VydGlvblBvaW50LT5zZWxlY3Qo
KS5pc051bGwoKSB8fCBpbnNlcnRpb25Qb2ludC0+c2VsZWN0KCkuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIG1faXNWYWxpZFNlbGVjdG9yID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuOwpAQCAtNTgsMTMg
Kzg3LDEwIEBAIGJvb2wgQ29udGVudFNlbGVjdG9yUXVlcnk6OmlzVmFsaWRTZWxlY3RvcigpIGNv
bnN0CiAgICAgcmV0dXJuIG1faXNWYWxpZFNlbGVjdG9yOwogfQogCi1ib29sIENvbnRlbnRTZWxl
Y3RvclF1ZXJ5OjptYXRjaGVzKE5vZGUqIG5vZGUpIGNvbnN0Citib29sIENvbnRlbnRTZWxlY3Rv
clF1ZXJ5OjptYXRjaGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGlu
dCBudGgpIGNvbnN0CiB7CisgICAgTm9kZSogbm9kZSA9IHNpYmxpbmdzW250aF0uZ2V0KCk7CiAg
ICAgQVNTRVJUKG5vZGUpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgQVNTRVJUKG5vZGUtPnBhcmVudE5vZGUoKSA9PSBtX2luc2VydGlvblBvaW50LT5zaGFk
b3dSb290KCktPmhvc3QoKSk7CiAKICAgICBpZiAobV9pbnNlcnRpb25Qb2ludC0+c2VsZWN0KCku
aXNOdWxsKCkgfHwgbV9pbnNlcnRpb25Qb2ludC0+c2VsZWN0KCkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTc1LDcgKzEwMSw3IEBAIGJvb2wgQ29udGVudFNlbGVjdG9yUXVl
cnk6Om1hdGNoZXMoTm9kZSogbm9kZSkgY29uc3QKICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fc2VsZWN0b3JzLm1h
dGNoZXMobV9zZWxlY3RvckNoZWNrZXIsIHRvRWxlbWVudChub2RlKSk7CisgICAgcmV0dXJuIG1f
c2VsZWN0b3JzLm1hdGNoZXMobV9zZWxlY3RvckNoZWNrZXIsIHNpYmxpbmdzLCBudGgpOwogfQog
CiBzdGF0aWMgYm9vbCB2YWxpZGF0ZVN1YlNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWxlY3RvcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1
ZXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5o
CmluZGV4IDk0ZmEzZWZjY2YzZjlkNzJlOTc0Nzc1ZTJkMmQzMTQwZDEzY2IzNGUuLjJjNzEwYTU4
NTJlOTJkNzY4ODJjN2MyMDc1MGJmZDI2ZGEyYWEwM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3RvclF1ZXJ5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaApAQCAtNDMsMjUgKzQzLDQxIEBA
IGNsYXNzIERvY3VtZW50OwogY2xhc3MgTm9kZTsKIGNsYXNzIEluc2VydGlvblBvaW50OwogCitj
bGFzcyBDb250ZW50U2VsZWN0b3JDaGVja2VyIHsKK3B1YmxpYzoKKyAgICBDb250ZW50U2VsZWN0
b3JDaGVja2VyKERvY3VtZW50KiwgYm9vbCBzdHJpY3RQYXJzaW5nKTsKKworICAgIGJvb2wgY2hl
Y2tDb250ZW50U2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+
ID4mIHNpYmxpbmdzLCBpbnQgbnRoTm9kZSkgY29uc3Q7Citwcml2YXRlOgorICAgIFNlbGVjdG9y
Q2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKK307CisKK2NsYXNzIENvbnRlbnRTZWxlY3RvckRh
dGFMaXN0IHsKK3B1YmxpYzoKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgQ1NTU2VsZWN0b3JM
aXN0Jik7CisgICAgYm9vbCBtYXRjaGVzKGNvbnN0IENvbnRlbnRTZWxlY3RvckNoZWNrZXImLCBj
b25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzLCBpbnQgbnRoTm9kZSkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPENTU1NlbGVjdG9yKj4gbV9zZWxlY3RvcnM7Cit9Owor
CiBjbGFzcyBDb250ZW50U2VsZWN0b3JRdWVyeSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q29udGVudFNlbGVjdG9yUXVlcnkpOwogcHVibGljOgogICAgIGV4cGxpY2l0IENvbnRlbnRTZWxl
Y3RvclF1ZXJ5KGNvbnN0IEluc2VydGlvblBvaW50Kik7CiAKICAgICBib29sIGlzVmFsaWRTZWxl
Y3RvcigpIGNvbnN0OwotICAgIGJvb2wgbWF0Y2hlcyhOb2RlKikgY29uc3Q7CisgICAgYm9vbCBt
YXRjaGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGludCBudGhOb2Rl
KSBjb25zdDsKIHByaXZhdGU6CiAgICAgYm9vbCB2YWxpZGF0ZVNlbGVjdG9yTGlzdCgpOwogCiAg
ICAgY29uc3QgSW5zZXJ0aW9uUG9pbnQqIG1faW5zZXJ0aW9uUG9pbnQ7Ci0gICAgU2VsZWN0b3JE
YXRhTGlzdCBtX3NlbGVjdG9yczsKKyAgICBDb250ZW50U2VsZWN0b3JEYXRhTGlzdCBtX3NlbGVj
dG9yczsKICAgICBDU1NTZWxlY3Rvckxpc3QgbV9zZWxlY3Rvckxpc3Q7Ci0gICAgU2VsZWN0b3JD
aGVja2VyIG1fc2VsZWN0b3JDaGVja2VyOworICAgIENvbnRlbnRTZWxlY3RvckNoZWNrZXIgbV9z
ZWxlY3RvckNoZWNrZXI7CiAgICAgYm9vbCBtX2lzVmFsaWRTZWxlY3RvcjsKIH07CiAKIH0KIAot
Ci0KICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167976</attachid>
            <date>2012-10-10 04:07:02 -0700</date>
            <delta_ts>2012-10-11 02:41:17 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-96990-20121010200601.patch</filename>
            <type>text/plain</type>
            <size>47633</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwODM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTYxZGY3YTM1ZTEzNjYy
ZWNmZjUxMDFmMmU4YmZjMjZhNzc4OGI2NS4uYzA4NWRlYjI5MGEzMzM1MmFkYjZkZjUyMGIwN2My
ZmZlZjY1MTQyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEyLTEwLTA5ICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIENvbnRl
bnRTZWxlY3RvclF1ZXJ5IHdvcmsgd2hlbiBzaWJsaW5ncyBhcmUgcGFzc2VkIGV4cGxpY2l0eS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2OTkwCisK
KyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5lZWQg
dGhlIGJ1ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ugc3VjaCBh
cyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNjcmlwdGlv
bnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
aGVja2VyOjpjaGVja1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcldpdGhTdHJhdGVneSk6CisgICAg
ICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JD
aGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dDo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQp
OgorICAgICAgICAoU2VsZWN0b3JDaGVja2luZ0NvbnRleHQpOgorICAgICAgICAoU2VsZWN0b3JD
aGVja2VyKToKKyAgICAgICAgKiBjc3MvU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERPTVRyYXZlcnNhbFN0cmF0ZWd5KToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5OjpsYWJlbDEpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmxhYmVsMik6CisgICAgICAgIChXZWJD
b3JlOjpET01UcmF2ZXJzYWxTdHJhdGVneTo6aXNGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5Ojppc0xhc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpET01UcmF2ZXJzYWxTdHJhdGVneTo6aXNGaXJzdE9mVHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpET01UcmF2ZXJzYWxTdHJhdGVneTo6aXNMYXN0T2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTVRyYXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzQmVmb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzQWZ0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVu
dHNPZlR5cGVBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dET01UcmF2ZXJzYWxTdHJh
dGVneTo6U2hhZG93RE9NVHJhdmVyc2FsU3RyYXRlZ3kpOgorICAgICAgICAoU2hhZG93RE9NVHJh
dmVyc2FsU3RyYXRlZ3kpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93RE9NVHJhdmVyc2FsU3Ry
YXRlZ3k6OmxhYmVsMSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dET01UcmF2ZXJzYWxTdHJh
dGVneTo6bGFiZWwyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0RPTVRyYXZlcnNhbFN0cmF0
ZWd5Ojppc0ZpcnN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93RE9NVHJhdmVyc2Fs
U3RyYXRlZ3k6OmlzTGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0RPTVRyYXZl
cnNhbFN0cmF0ZWd5Ojppc0ZpcnN0T2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0RP
TVRyYXZlcnNhbFN0cmF0ZWd5Ojppc0xhc3RPZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
ZG93RE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNCZWZvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhZG93RE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNBZnRlcik6
CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dET01UcmF2ZXJzYWxTdHJhdGVneTo6Y291bnRFbGVt
ZW50c09mVHlwZUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dET01UcmF2ZXJzYWxT
dHJhdGVneTo6Y291bnRFbGVtZW50c09mVHlwZUFmdGVyKToKKyAgICAgICAgKiBjc3MvU3R5bGVS
ZXNvbHZlci5jcHA6CisgICAgICAgICogaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREaXN0cmlidXRvcjo6ZGlzdHJpYnV0ZVNlbGVj
dGlvbnNUbyk6CisgICAgICAgICogaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlbGVjdG9yQ2hlY2tlcjo6Q29udGVudFNlbGVj
dG9yQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWxlY3RvckNoZWNrZXI6OmNoZWNrQ29udGVudFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRTZWxlY3RvckRhdGFMaXN0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRTZWxlY3RvckRhdGFMaXN0OjptYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRTZWxlY3RvclF1ZXJ5OjpDb250ZW50U2VsZWN0b3JRdWVyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyk6CisgICAgICAgICogaHRtbC9z
aGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaDoKKyAgICAgICAgKENvbnRlbnRTZWxlY3RvckNo
ZWNrZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb250ZW50U2VsZWN0b3JEYXRh
TGlzdCk6CisgICAgICAgIChDb250ZW50U2VsZWN0b3JRdWVyeSk6CisKIDIwMTItMTAtMTAgIFNo
aW55YSBLYXdhbmFrYSAgPHNoaW55YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5lZWRzIGlu
dGVybmFsIEFQSSB0byByZXR1cm4gZGlzdHJpYnV0ZWQgbm9kZXMgZm9yIEluc2VydGlvblBvaW50
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA0Y2FlMGNiMTE3NGRkYjg2Nzg5ZThh
MzZjYzI3ODQ0ZTc0OTk3NWE2Li5lNmQxOTA4NjE3NmNjNWVhMGU3MDFjMTM4YWExMWIyMGMyOTdj
ZTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI2MjAsNiArMjYyMCw3IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU2hhZG93VmFsdWUuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9jc3MvU2hhZG93VmFsdWUuaCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1NpYmxpbmdUcmF2
ZXJzYWxTdHJhdGVnaWVzLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZU1lZGlhLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAzOGMwOTMzOGQ1NDM5ZDNjNTc5
M2EyMzU4YjMxNTE5NWI3MzRjZWEyLi40NWM4MjFiMGJlMjgwNDQzZTdiNDIxYjQyMWQxNjg1MTE4
OTU0ZDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTE0ODUsNiArMTQ4NSw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIGNzcy9SR0JDb2xvci5oIFwKICAgICBjc3MvU2VsZWN0b3JDaGVja2VyLmggXAogICAgIGNz
cy9TaGFkb3dWYWx1ZS5oIFwKKyAgICBjc3MvU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaCBc
CiAgICAgY3NzL1N0eWxlTWVkaWEuaCBcCiAgICAgY3NzL1N0eWxlQnVpbGRlci5oIFwKICAgICBj
c3MvU3R5bGVQcm9wZXJ0eVNldC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA4MWVmM2E4YzZhMmZi
NDUxYWE1ZDAxNzA4YmMyM2U1YTkzMDMwMzEwLi4zYWMyZGQ4ZGVmZTY3NjMzY2I5NjJjZDVmYzI5
NTgzYTYyMjc3ZThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yNjIyLDYgKzI2MjIsNyBAQAogICAg
ICAgICAgICAgJ2Nzcy9TZWxlY3RvckNoZWNrZXIuaCcsCiAgICAgICAgICAgICAnY3NzL1NoYWRv
d1ZhbHVlLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1NoYWRvd1ZhbHVlLmgnLAorICAgICAgICAg
ICAgJ2Nzcy9TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ2llcy5oJywKICAgICAgICAgICAgICdjc3Mv
U3R5bGVCdWlsZGVyLmNwcCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlQnVpbGRlci5oJywKICAg
ICAgICAgICAgICdjc3MvU3R5bGVNZWRpYS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA1M2YzNWE3ZTE2M2UxMTdkNmJlMWY3ZTMxMTEx
NDdkMGMyNzkwNjVmLi5lYjMyYThiMzU5YjVlMjEzYjk5YTIyMTU4ZGI1YWU3Y2Y2MjM3NGIzIDEw
MDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzc3
MDMsNiArMzc3MDMsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cY3NzXFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVzLmgiCisJCQkJPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTdHlsZUJ1aWxkZXIu
Y3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjNzQwYWQ1MzQyM2I2ZDI3
ZWZiNzFjYTVmMjllMzU3NDhiZWRmOGY0Li5kOWI5NmQwM2I1N2JiNTQzMDY4MTkwNjQ1NWJjZmNh
Y2VmZTI2MmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xNjM5LDYgKzE2MzksNyBAQAogCQk1M0M4Mjk4RTEzRDhEOTI3MDBE
RTJERUIgLyogUmVuZGVyRmxleGlibGVCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzQzgyOThDMTNEOEQ5MjcwMERFMkRFQiAvKiBSZW5kZXJGbGV4
aWJsZUJveC5oICovOyB9OwogCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVk
TmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
NTBBMEJDNzA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1
MEEwQkNBMDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYg
LyogUXVhbGlmaWVkTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTU3MjhCRDlFMTYyNTM2OTYwMEM0MEI1NiAvKiBTaWJsaW5nVHJhdmVyc2Fs
U3RyYXRlZ2llcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTcyOEJEOUQxNjI1MzY5NjAwQzQwQjU2IC8qIFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVz
LmggKi87IH07CiAJCTU3M0QxMzQ3MTRDRTM5RkYwMDU3QUJDQSAvKiBJbnNwZWN0b3JUeXBlQnVp
bGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
NzNEMTM0NTE0Q0UzOUZGMDA1N0FCQ0EgLyogSW5zcGVjdG9yVHlwZUJ1aWxkZXIuY3BwICovOyB9
OwogCQk1NzU5ODk4NzE1QUFDMEIxMDAzNTNDMzEgLyogSW1hZ2VJbm5lckVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MjE0NUNDMTVBNTFE
QTcwMEFEMTE5QyAvKiBJbWFnZUlubmVyRWxlbWVudC5oICovOyB9OwogCQk1NzU5ODk4OTE1QUFD
MEU5MDAzNTNDMzEgLyogSW1hZ2VJbm5lckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyMTQ1Q0IxNUE1MURBNzAwQUQxMTlDIC8qIElt
YWdlSW5uZXJFbGVtZW50LmNwcCAqLzsgfTsKQEAgLTg4MzIsNiArODgzMyw3IEBACiAJCTU1MEEw
QkM4MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTU3MjE0
NUNCMTVBNTFEQTcwMEFEMTE5QyAvKiBJbWFnZUlubmVyRWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUlubmVyRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MjE0NUNDMTVBNTFEQTcwMEFEMTE5QyAvKiBJbWFnZUlu
bmVyRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUlubmVy
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NzI4QkQ5RDE2MjUzNjk2
MDBDNDBCNTYgLyogU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTczRDEzNDUxNENFMzlGRjAwNTdBQkNBIC8qIEluc3BlY3Rv
clR5cGVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
c3BlY3RvclR5cGVCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcz
RDEzNDYxNENFMzlGRjAwNTdBQkNBIC8qIEluc3BlY3RvclR5cGVCdWlsZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvclR5cGVCdWlsZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3NTk4OThFMTVBRUFCOTQwMDM1M0MzMSAvKiBJbWFnZUxv
YWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUxvYWRl
ckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjEyNDYsNiArMjEyNDgs
NyBAQAogCQkJCUU0NEI0QkIyMTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCAq
LywKIAkJCQlBODBFNkNDQTBBMTk4OUNBMDA3RkI4QzUgLyogU2hhZG93VmFsdWUuY3BwICovLAog
CQkJCUE4MEU2Q0JFMEExOTg5Q0EwMDdGQjhDNSAvKiBTaGFkb3dWYWx1ZS5oICovLAorCQkJCTU3
MjhCRDlEMTYyNTM2OTYwMEM0MEI1NiAvKiBTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ2llcy5oICov
LAogCQkJCUUxMDBFRTczMTU0NkVBQzEwMEJBMTFEMSAvKiBTdHlsZUJ1aWxkZXIuY3BwICovLAog
CQkJCUUxMDBFRTc0MTU0NkVBQzEwMEJBMTFEMSAvKiBTdHlsZUJ1aWxkZXIuaCAqLywKIAkJCQkw
RkY1MDI2RTEwMkJBOTY2MDA2NkYzOUEgLyogU3R5bGVNZWRpYS5jcHAgKi8sCkBAIC0yNTU2Miw2
ICsyNTU2NSw3IEBACiAJCQkJOTMxQ0JEMTExNjFBNDRFOTAwRTRDODc0IC8qIFNjcm9sbGluZ1N0
YXRlVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkVBRjM0MTAxNjEzODY5QTAwODU5NjI1IC8q
IEV4Y2x1c2lvblBvbHlnb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOTU1QTg4MTYwRDE5OTIw
MDg1ODAyNSAvKiBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTcyOEJEOUUxNjI1MzY5NjAwQzQwQjU2IC8qIFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVy
aWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
ZW5lcmljL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuY3BwCmluZGV4IDVhOTllZDY3MDA3MWQ5ZmY3
YzJlNzgzYmYwYTEwZjU2YTQ5ZTc0N2UuLmRhZTRjZjM3NGI3YmFlNTMxZWIzYjc3ODFmOTM5NWMz
ZjE3NGYzNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ2Vu
ZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmNwcApAQCAtMTkxLDYgKzE5MSw3IEBAIGJvb2wg
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNFbmNyeXB0ZWRNZWRpYUVuYWJsZWQgPSBmYWxzZTsK
IGJvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNTaGFkb3dET01FbmFibGVkID0gZmFsc2U7
CiAKIGJvb2wgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6aXNBdXRob3JTaGFkb3dET01Gb3JBbnlF
bGVtZW50RW5hYmxlZCA9IGZhbHNlOworYm9vbCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppc0Nv
bnRlbnRSZXByb2plY3Rpb25FbmFibGVkID0gZmFsc2U7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShT
VFlMRV9TQ09QRUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nZW5lcmlj
L1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVy
aWMvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4IDMzYTdlNmZlNWI3ZDdiYTI0MWZmNzM2
YjI4MGE2YzhmYTllZmQzN2UuLmRiN2VmODAzNTkwMjA3NjQ4Zjk0ZTA4MGMxZDVjYmJlYzRkZDdk
NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2dlbmVyaWMvUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oCkBAIC0yMTMsNiArMjEzLDkgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIGJvb2wgYXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQoKSB7IHJldHVy
biBpc0F1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkOyB9CiAgICAgc3RhdGljIHZv
aWQgc2V0QXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQoYm9vbCBpc0VuYWJsZWQp
IHsgaXNBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZCA9IGlzRW5hYmxlZDsgfQor
CisgICAgc3RhdGljIGJvb2wgY29udGVudFJlcHJvamVjdGlvbkVuYWJsZWQoKSB7IHJldHVybiBp
c0NvbnRlbnRSZXByb2plY3Rpb25FbmFibGVkOyB9CisgICAgc3RhdGljIHZvaWQgc2V0Q29udGVu
dFJlcHJvamVjdGlvbkVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgaXNDb250ZW50UmVwcm9qZWN0
aW9uRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoU1RZTEVfU0NP
UEVEKQpAQCAtMzI2LDYgKzMyOSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgaXNTaGFk
b3dET01FbmFibGVkOwogCiAgICAgc3RhdGljIGJvb2wgaXNBdXRob3JTaGFkb3dET01Gb3JBbnlF
bGVtZW50RW5hYmxlZDsKKyAgICBzdGF0aWMgYm9vbCBpc0NvbnRlbnRSZXByb2plY3Rpb25FbmFi
bGVkOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCBiZjU4MDNkMjA3OGVmNzE5NzQwNmFlZTA2ZWM4Mzc4
MGIyMjA2ZTg1Li5iMjc4YWY0YTVmNmVmMGMzN2ExZWI4NzA2OTIxNWU3MTYwNTgxMzE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNs
dWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVn
aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNp
bmNsdWRlICJYTGlua05hbWVzLmgiCkBAIC0yNjgsNyArMjY5LDcgQEAgYm9vbCBTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZWxlbWVudCwg
Ym9vbCBpc0YKIAogICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsK
ICAgICBib29sIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cyA9IGZhbHNlOwotICAgIHJldHVybiBj
aGVja1NlbGVjdG9yKFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHNlbCwgZWxlbWVudCwgU2VsZWN0
b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hEaXNhYmxlZCksIGlnbm9yZUR5bmFtaWNQc2V1ZG8sIGhh
c1Vua25vd25Qc2V1ZG9FbGVtZW50cykgPT0gU2VsZWN0b3JNYXRjaGVzOworICAgIHJldHVybiBj
aGVja1NlbGVjdG9yKFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0KHNlbCwgZWxlbWVudCwgVmlzaXRl
ZE1hdGNoRGlzYWJsZWQpLCBpZ25vcmVEeW5hbWljUHNldWRvLCBoYXNVbmtub3duUHNldWRvRWxl
bWVudHMpID09IFNlbGVjdG9yTWF0Y2hlczsKIH0KIAogbmFtZXNwYWNlIHsKQEAgLTcyNyw4ICs3
MjgsMTMgQEAgc3RhdGljIGJvb2wgYW55QXR0cmlidXRlTWF0Y2hlcyhFbGVtZW50KiBlbGVtZW50
LCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0Y2gsIGNvbnMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIENoZWNraW5nQ29udGV4dD4KLWJvb2wgU2VsZWN0b3JDaGVja2Vy
OjpjaGVja09uZVNlbGVjdG9yKGNvbnN0IENoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QK
K2lubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxl
Y3RvckNoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2hlY2tP
bmVTZWxlY3RvcldpdGhTdHJhdGVneShjb250ZXh0LCBET01UcmF2ZXJzYWxTdHJhdGVneSgpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgU3RyYXRlZ3k+Citib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tPbmVTZWxlY3RvcldpdGhTdHJhdGVneShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4
dCYgY29udGV4dCwgY29uc3QgU3RyYXRlZ3kmIHN0cmF0ZWd5KSBjb25zdAogewogICAgIEVsZW1l
bnQqIGNvbnN0ICYgZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudDsKICAgICBDU1NTZWxlY3Rvciog
Y29uc3QgJiBzZWxlY3RvciA9IGNvbnRleHQuc2VsZWN0b3I7CkBAIC03NjUsNyArNzcxLDcgQEAg
Ym9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoY29uc3QgQ2hlY2tpbmdDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgaWYgKCFzZWxlY3Rvckxpc3QpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBDaGVja2luZ0NvbnRleHQg
c3ViQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgICAgIFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0
IHN1YkNvbnRleHQoY29udGV4dCk7CiAgICAgICAgICAgICBzdWJDb250ZXh0LmlzU3ViU2VsZWN0
b3IgPSB0cnVlOwogICAgICAgICAgICAgZm9yIChzdWJDb250ZXh0LnNlbGVjdG9yID0gc2VsZWN0
b3JMaXN0LT5maXJzdCgpOyBzdWJDb250ZXh0LnNlbGVjdG9yOyBzdWJDb250ZXh0LnNlbGVjdG9y
ID0gc3ViQ29udGV4dC5zZWxlY3Rvci0+dGFnSGlzdG9yeSgpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gOm5vdCBjYW5ub3QgbmVzdC4gSSBkb24ndCByZWFsbHkga25vdyB3aHkgdGhpcyBpcyBhCkBA
IC04MTksNyArODI1LDkgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3Io
Y29uc3QgQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICBjYXNlIENTU1Nl
bGVjdG9yOjpQc2V1ZG9GaXJzdENoaWxkOgogICAgICAgICAgICAgLy8gZmlyc3QtY2hpbGQgbWF0
Y2hlcyB0aGUgZmlyc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50CiAgICAgICAgICAgICBpZiAo
ZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCByZXN1bHQg
PSBET01UcmF2ZXJzYWxTdHJhdGVneTxDaGVja2luZ0NvbnRleHQ+Ojppc0ZpcnN0Q2hpbGQoY29u
dGV4dCwgZWxlbWVudCk7CisgICAgICAgICAgICAgICAgU3RyYXRlZ3k6OmxhYmVsMSgpOworICAg
ICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gc3RyYXRlZ3kuaXNGaXJzdENoaWxkKGVsZW1lbnQp
OworICAgICAgICAgICAgICAgIFN0cmF0ZWd5OjpsYWJlbDIoKTsKICAgICAgICAgICAgICAgICBp
ZiAobV9tb2RlID09IFJlc29sdmluZ1N0eWxlKSB7CiAgICAgICAgICAgICAgICAgICAgIFJlbmRl
clN0eWxlKiBjaGlsZFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1l
bnRTdHlsZSA6IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAgICAgICAgICAgICAgICAgICAgIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5l
bGVtZW50UGFyZW50U3R5bGUgOiBlbGVtZW50LT5wYXJlbnROb2RlKCktPnJlbmRlclN0eWxlKCk7
CkBAIC04MzQsNyArODQyLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0
b3IoY29uc3QgQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9GaXJzdE9mVHlwZToKICAgICAgICAgICAgIC8vIGZpcnN0LW9mLXR5
cGUgbWF0Y2hlcyB0aGUgZmlyc3QgZWxlbWVudCBvZiBpdHMgdHlwZQogICAgICAgICAgICAgaWYg
KGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0
ID0gRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6aXNGaXJzdE9mVHlwZShj
b250ZXh0LCBlbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKKyAgICAgICAgICAgICAgICBi
b29sIHJlc3VsdCA9IHN0cmF0ZWd5LmlzRmlyc3RPZlR5cGUoZWxlbWVudCwgZWxlbWVudC0+dGFn
UU5hbWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkg
ewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0
LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFBhcmVudFN0eWxlIDogZWxlbWVudC0+cGFy
ZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50
U3R5bGUpCkBAIC04NDYsNyArODU0LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25l
U2VsZWN0b3IoY29uc3QgQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYXN0Q2hpbGQ6CiAgICAgICAgICAgICAvLyBsYXN0LWNo
aWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQgdGhhdCBpcyBhbiBlbGVtZW50CiAgICAgICAgICAg
ICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkg
ewotICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hl
ZFBhcnNpbmdDaGlsZHJlbigpICYmIERPTVRyYXZlcnNhbFN0cmF0ZWd5PENoZWNraW5nQ29udGV4
dD46OmlzTGFzdENoaWxkKGNvbnRleHQsIGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGJvb2wg
cmVzdWx0ID0gcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpICYmIHN0
cmF0ZWd5LmlzTGFzdENoaWxkKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlmIChtX21vZGUg
PT0gUmVzb2x2aW5nU3R5bGUpIHsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNo
aWxkU3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxlbWVudFN0eWxlIDog
ZWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlID0gY29udGV4dC5lbGVtZW50U3R5bGUgPyBjb250ZXh0LmVsZW1lbnRQYXJl
bnRTdHlsZSA6IHBhcmVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CkBAIC04NjgsMTMgKzg3Niwx
MyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBDaGVja2lu
Z0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIERP
TVRyYXZlcnNhbFN0cmF0ZWd5PENoZWNraW5nQ29udGV4dD46OmlzTGFzdE9mVHlwZShjb250ZXh0
LCBlbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3RyYXRlZ3kuaXNMYXN0T2ZUeXBlKGVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb09ubHlDaGlsZDoKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50
ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBmaXJz
dENoaWxkID0gRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6aXNGaXJzdENo
aWxkKGNvbnRleHQsIGVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGJvb2wgb25seUNoaWxkID0g
Zmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkg
JiYgRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6aXNMYXN0Q2hpbGQoY29u
dGV4dCwgZWxlbWVudCk7CisgICAgICAgICAgICAgICAgYm9vbCBmaXJzdENoaWxkID0gc3RyYXRl
Z3kuaXNGaXJzdENoaWxkKGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGJvb2wgb25seUNoaWxk
ID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVu
KCkgJiYgc3RyYXRlZ3kuaXNMYXN0Q2hpbGQoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYg
KG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJT
dHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50
U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxl
bWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKQEAgLTkwMiwx
NCArOTEwLDE0IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNvbnN0
IENoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVu
KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdDb250ZXh0Pjo6aXNGaXJzdE9mVHlw
ZShjb250ZXh0LCBlbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgpKSAmJiBET01UcmF2ZXJzYWxT
dHJhdGVneTxDaGVja2luZ0NvbnRleHQ+Ojppc0xhc3RPZlR5cGUoY29udGV4dCwgZWxlbWVudCwg
ZWxlbWVudC0+dGFnUU5hbWUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmF0ZWd5Lmlz
Rmlyc3RPZlR5cGUoZWxlbWVudCwgZWxlbWVudC0+dGFnUU5hbWUoKSkgJiYgc3RyYXRlZ3kuaXNM
YXN0T2ZUeXBlKGVsZW1lbnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aENo
aWxkOgogICAgICAgICAgICAgaWYgKCFzZWxlY3Rvci0+cGFyc2VOdGgoKSkKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxl
bWVudC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSAr
IERPTVRyYXZlcnNhbFN0cmF0ZWd5PENoZWNraW5nQ29udGV4dD46OmNvdW50RWxlbWVudHNCZWZv
cmUoY29udGV4dCwgZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMSArIHN0
cmF0ZWd5LmNvdW50RWxlbWVudHNCZWZvcmUoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYg
KG1fbW9kZSA9PSBSZXNvbHZpbmdTdHlsZSkgewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJT
dHlsZSogY2hpbGRTdHlsZSA9IGNvbnRleHQuZWxlbWVudFN0eWxlID8gY29udGV4dC5lbGVtZW50
U3R5bGUgOiBlbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUgPSBjb250ZXh0LmVsZW1lbnRTdHlsZSA/IGNvbnRleHQuZWxl
bWVudFBhcmVudFN0eWxlIDogcGFyZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKQEAgLTkyNyw3
ICs5MzUsNyBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBD
aGVja2luZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgICAgICAgICBpZiAoIXNlbGVjdG9y
LT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICBpbnQgY291bnQgPSAxICsgRE9NVHJhdmVyc2FsU3RyYXRlZ3k8Q2hlY2tpbmdD
b250ZXh0Pjo6Y291bnRFbGVtZW50c09mVHlwZUJlZm9yZShjb250ZXh0LCBlbGVtZW50LCBlbGVt
ZW50LT50YWdRTmFtZSgpKTsKKyAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgc3RyYXRl
Z3kuY291bnRFbGVtZW50c09mVHlwZUJlZm9yZShlbGVtZW50LCBlbGVtZW50LT50YWdRTmFtZSgp
KTsKICAgICAgICAgICAgICAgICBpZiAobV9tb2RlID09IFJlc29sdmluZ1N0eWxlKSB7CiAgICAg
ICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGNvbnRleHQuZWxlbWVu
dFN0eWxlID8gY29udGV4dC5lbGVtZW50UGFyZW50U3R5bGUgOiBwYXJlbnRFbGVtZW50LT5yZW5k
ZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUpCkBAIC05NDks
NyArOTU3LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoY29uc3Qg
Q2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4o
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlu
dCBjb3VudCA9IDEgKyBET01UcmF2ZXJzYWxTdHJhdGVneTxDaGVja2luZ0NvbnRleHQ+Ojpjb3Vu
dEVsZW1lbnRzQWZ0ZXIoY29udGV4dCwgZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaW50IGNv
dW50ID0gMSArIHN0cmF0ZWd5LmNvdW50RWxlbWVudHNBZnRlcihlbGVtZW50KTsKICAgICAgICAg
ICAgICAgICBpZiAoc2VsZWN0b3ItPm1hdGNoTnRoKGNvdW50KSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC05NjYsNyArOTc0LDcgQEAgYm9vbCBT
ZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoY29uc3QgQ2hlY2tpbmdDb250ZXh0JiBj
b250ZXh0KSBjb25zdAogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5p
c2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAxICsgRE9NVHJhdmVyc2FsU3RyYXRlZ3k8
Q2hlY2tpbmdDb250ZXh0Pjo6Y291bnRFbGVtZW50c09mVHlwZUFmdGVyKGNvbnRleHQsIGVsZW1l
bnQsIGVsZW1lbnQtPnRhZ1FOYW1lKCkpOworICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDEg
KyBzdHJhdGVneS5jb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoZWxlbWVudCwgZWxlbWVudC0+dGFn
UU5hbWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaE50aChjb3VudCkp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtOTc3
LDcgKzk4NSw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKGNvbnN0
IENoZWNraW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Bbnk6CiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgQ2hlY2tpbmdDb250ZXh0IHN1YkNvbnRleHQoY29udGV4dCk7CisgICAgICAgICAg
ICAgICAgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc3ViQ29udGV4dChjb250ZXh0KTsKICAgICAg
ICAgICAgICAgICBzdWJDb250ZXh0LmlzU3ViU2VsZWN0b3IgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIGJvb2wgaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgUHNldWRvSWQgaWdub3JlRHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwpAQCAtMTM1OSw5MCAr
MTM2Nyw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVTZWxlY3RvclNjb3Blcyhj
b25zdCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXRlbXBsYXRlPD4KLWlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6RE9NVHJhdmVyc2FsU3Ry
YXRlZ3k8U2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dD46OmlzRmlyc3RD
aGlsZChjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgRWxl
bWVudCogZWxlbWVudCkKLXsKLSAgICByZXR1cm4gIWVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNp
YmxpbmcoKTsKLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpE
T01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0Pjo6aXNMYXN0Q2hpbGQoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5n
Q29udGV4dCYsIEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgcmV0dXJuICFlbGVtZW50LT5uZXh0
RWxlbWVudFNpYmxpbmcoKTsKLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIGJvb2wgU2VsZWN0b3JD
aGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hl
Y2tpbmdDb250ZXh0Pjo6aXNGaXJzdE9mVHlwZShjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0JiwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdHlwZSkKLXsKLSAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5w
cmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2
aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUo
dHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZl
cnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ+Ojpp
c0xhc3RPZlR5cGUoY29uc3QgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4
dCYsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCi17Ci0gICAg
Zm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5n
KCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkgewot
ICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPD4KLWlubGlu
ZSBpbnQgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJhdGVneTxTZWxlY3RvckNoZWNr
ZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Pjo6Y291bnRFbGVtZW50c0JlZm9yZShjb25zdCBT
ZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgRWxlbWVudCogZWxlbWVu
dCkKLXsKLSAgICBpbnQgY291bnQgPSAwOwotICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGlu
ZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9
IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgewotICAgICAgICBSZW5kZXJTdHls
ZSogcyA9IHNpYmxpbmctPnJlbmRlclN0eWxlKCk7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0g
cyA/IHMtPmNoaWxkSW5kZXgoKSA6IDA7Ci0gICAgICAgIGlmIChpbmRleCkgewotICAgICAgICAg
ICAgY291bnQgKz0gaW5kZXg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjb3VudCsrOwotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdGVtcGxhdGU8Pgot
aW5saW5lIGludCBTZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9y
Q2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ+Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQmVm
b3JlKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKQotewotICAgIGludCBjb3Vu
dCA9IDA7Ci0gICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+cHJldmlv
dXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNF
bGVtZW50U2libGluZygpKSB7Ci0gICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUp
KQotICAgICAgICAgICAgKytjb3VudDsKLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0K
LXRlbXBsYXRlPD4KLWlubGluZSBpbnQgU2VsZWN0b3JDaGVja2VyOjpET01UcmF2ZXJzYWxTdHJh
dGVneTxTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0Pjo6Y291bnRFbGVt
ZW50c0FmdGVyKGNvbnN0IFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQm
LCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGludCBjb3VudCA9IDA7Ci0gICAgZm9yIChjb25z
dCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNpYmxp
bmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkKLSAgICAgICAgKytj
b3VudDsKLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdGVtcGxhdGU8PgotaW5saW5lIGludCBT
ZWxlY3RvckNoZWNrZXI6OkRPTVRyYXZlcnNhbFN0cmF0ZWd5PFNlbGVjdG9yQ2hlY2tlcjo6U2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQ+Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoY29uc3QgU2Vs
ZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCi17Ci0gICAgaW50IGNvdW50ID0gMDsKLSAgICBm
b3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmco
KTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7Ci0g
ICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQotICAgICAgICAgICAgKytjb3Vu
dDsKLSAgICB9Ci0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KIHRlbXBsYXRlCi1TZWxlY3RvckNo
ZWNrZXI6OlNlbGVjdG9yTWF0Y2ggU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yPFNlbGVj
dG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQ+KGNvbnN0IFNlbGVjdG9yQ2hlY2tp
bmdDb250ZXh0JiwgUHNldWRvSWQmLCBib29sJikgY29uc3Q7Citib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmVTZWxlY3RvcldpdGhTdHJhdGVneShjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNl
bGVjdG9yQ2hlY2tpbmdDb250ZXh0JiwgY29uc3QgU2hhZG93RE9NVHJhdmVyc2FsU3RyYXRlZ3km
KSBjb25zdDsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hl
Y2tlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCmluZGV4IDFmMzQ5
MGM2NDc2NGIwZDIwMjFjNzNkZWM4ZjE5MWZiYjE2MjNhMWIuLjIzMTA2OTJhODRiZWU1MGQyMWQz
ZDY2OTlmOTY4ZTRhNDVkMzEyYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxl
Y3RvckNoZWNrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgK
QEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIklu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCisjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2lu
Y2x1ZGUgIlNwYWNlU3BsaXRTdHJpbmcuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCkBA
IC02MSwxMCArNjIsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgLCBlbGVtZW50KGVsZW1lbnQp
CiAgICAgICAgICAgICAsIHNjb3BlKDApCiAgICAgICAgICAgICAsIHZpc2l0ZWRNYXRjaFR5cGUo
dmlzaXRlZE1hdGNoVHlwZSkKKyAgICAgICAgICAgICwgcHNldWRvU3R5bGUoTk9QU0VVRE8pCiAg
ICAgICAgICAgICAsIGVsZW1lbnRTdHlsZSgwKQogICAgICAgICAgICAgLCBlbGVtZW50UGFyZW50
U3R5bGUoMCkKICAgICAgICAgICAgICwgaXNTdWJTZWxlY3RvcihmYWxzZSkKLSAgICAgICAgICAg
ICwgcHNldWRvU3R5bGUoTk9QU0VVRE8pCiAgICAgICAgICAgICAsIGhhc1Njcm9sbGJhclBzZXVk
byhmYWxzZSkKICAgICAgICAgICAgICwgaGFzU2VsZWN0aW9uUHNldWRvKGZhbHNlKQogICAgICAg
ICB7IH0KQEAgLTczLDMyICs3NCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIEVsZW1lbnQqIGVsZW1l
bnQ7CiAgICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlOwogICAgICAgICBWaXNpdGVk
TWF0Y2hUeXBlIHZpc2l0ZWRNYXRjaFR5cGU7CisgICAgICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxl
OwogICAgICAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlOwogICAgICAgICBSZW5kZXJTdHls
ZSogZWxlbWVudFBhcmVudFN0eWxlOwogICAgICAgICBib29sIGlzU3ViU2VsZWN0b3I7Ci0gICAg
ICAgIFBzZXVkb0lkIHBzZXVkb1N0eWxlOwogICAgICAgICBib29sIGhhc1Njcm9sbGJhclBzZXVk
bzsKICAgICAgICAgYm9vbCBoYXNTZWxlY3Rpb25Qc2V1ZG87CiAgICAgfTsKIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENvbnRleHQ+Ci0gICAgc3RydWN0IERPTVRyYXZlcnNhbFN0cmF0ZWd5IHsK
LSAgICAgICAgc3RhdGljIGJvb2wgaXNGaXJzdENoaWxkKGNvbnN0IENvbnRleHQmLCBFbGVtZW50
Kik7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzTGFzdENoaWxkKGNvbnN0IENvbnRleHQmLCBFbGVt
ZW50Kik7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzRmlyc3RPZlR5cGUoY29uc3QgQ29udGV4dCYs
IEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJik7Ci0gICAgICAgIHN0YXRpYyBib29sIGlz
TGFzdE9mVHlwZShjb25zdCBDb250ZXh0JiwgRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUm
KTsKLQotICAgICAgICBzdGF0aWMgaW50IGNvdW50RWxlbWVudHNCZWZvcmUoY29uc3QgQ29udGV4
dCYsIEVsZW1lbnQqKTsKLSAgICAgICAgc3RhdGljIGludCBjb3VudEVsZW1lbnRzQWZ0ZXIoY29u
c3QgQ29udGV4dCYsIEVsZW1lbnQqKTsKLSAgICAgICAgc3RhdGljIGludCBjb3VudEVsZW1lbnRz
T2ZUeXBlQmVmb3JlKGNvbnN0IENvbnRleHQmLCBFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpOwotICAgICAgICBzdGF0aWMgaW50IGNvdW50RWxlbWVudHNPZlR5cGVBZnRlcihjb25zdCBD
b250ZXh0JiwgRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKLSAgICB9OwotCiAgICAg
Ym9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIGJvb2wgaXNGYXN0Q2hl
Y2thYmxlU2VsZWN0b3IgPSBmYWxzZSkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hl
Y2tpbmdDb250ZXh0PgogICAgIFNlbGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3Rvcihjb25zdCBDaGVj
a2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYsIGJvb2wmIGhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cykg
Y29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tpbmdDb250ZXh0PgotICAgIGJvb2wg
Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBDaGVja2luZ0NvbnRleHQmKSBjb25zdDsKKworICAgIGJv
b2wgY2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYpIGNvbnN0
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmF0ZWd5PgorICAgIGJvb2wgY2hlY2tPbmVTZWxl
Y3RvcldpdGhTdHJhdGVneShjb25zdCBTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIGNvbnN0IFN0
cmF0ZWd5JikgY29uc3Q7CiAKICAgICBzdGF0aWMgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxlY3Rv
cihjb25zdCBDU1NTZWxlY3RvciopOwogICAgIGJvb2wgZmFzdENoZWNrU2VsZWN0b3IoY29uc3Qg
Q1NTU2VsZWN0b3IqLCBjb25zdCBFbGVtZW50KikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ2llcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjYzkwNjM5MWJi
NTJkYzJjMGQzN2IzZDc1MzJkNWIxMmVlYTIwOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaApAQCAtMCwwICsxLDI3OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQor
ICogICAgICAgICAgIChDKSAyMDA0LTIwMDUgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2Fy
ZXdvbGYuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE5pY2hvbGFzIFNoYW5rcyAo
d2Via2l0QG5pY2tzaGFua3MuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqIENvcHlyaWdo
dCAoYykgMjAxMSwgQ29kZSBBdXJvcmEgRm9ydW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVzX2gKKyNkZWZpbmUg
U2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXNfaAorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorCisj
aW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Ry
dWN0IERPTVRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgICBib29sIGlzRmlyc3RDaGlsZChFbGVtZW50
KikgY29uc3Q7CisgICAgYm9vbCBpc0xhc3RDaGlsZChFbGVtZW50KikgY29uc3Q7CisgICAgYm9v
bCBpc0ZpcnN0T2ZUeXBlKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7Cisg
ICAgYm9vbCBpc0xhc3RPZlR5cGUoRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25z
dDsKKworICAgIGludCBjb3VudEVsZW1lbnRzQmVmb3JlKEVsZW1lbnQqKSBjb25zdDsKKyAgICBp
bnQgY291bnRFbGVtZW50c0FmdGVyKEVsZW1lbnQqKSBjb25zdDsKKyAgICBpbnQgY291bnRFbGVt
ZW50c09mVHlwZUJlZm9yZShFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0Owor
ICAgIGludCBjb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoRWxlbWVudCosIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBjb25zdDsKKworICAgIHN0YXRpYyB2b2lkIGxhYmVsMSgpIHsgYXNtKCJrb3Rvcmk6
Iik7IH0KKyAgICBzdGF0aWMgdm9pZCBsYWJlbDIoKSB7IGFzbSgib3RvbmFzaGk6Iik7IH0KK307
CisKK2lubGluZSBib29sIERPTVRyYXZlcnNhbFN0cmF0ZWd5Ojppc0ZpcnN0Q2hpbGQoRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWVsZW1lbnQtPnByZXZpb3VzRWxlbWVu
dFNpYmxpbmcoKTsKK30KKworaW5saW5lIGJvb2wgRE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmlzTGFz
dENoaWxkKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuICFlbGVtZW50LT5u
ZXh0RWxlbWVudFNpYmxpbmcoKTsKK30KKworaW5saW5lIGJvb2wgRE9NVHJhdmVyc2FsU3RyYXRl
Z3k6OmlzRmlyc3RPZlR5cGUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
dHlwZSkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50
LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5w
cmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05h
bWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitpbmxpbmUgYm9vbCBET01UcmF2ZXJzYWxTdHJhdGVneTo6aXNMYXN0T2ZUeXBl
KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpIGNvbnN0Cit7Cisg
ICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJs
aW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkg
eworICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBpbnQgRE9N
VHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNCZWZvcmUoRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoY29uc3QgRWxlbWVudCogc2li
bGluZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGlu
ZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAgICAgICBSZW5kZXJT
dHlsZSogcyA9IHNpYmxpbmctPnJlbmRlclN0eWxlKCk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gcyA/IHMtPmNoaWxkSW5kZXgoKSA6IDA7CisgICAgICAgIGlmIChpbmRleCkgeworICAgICAg
ICAgICAgY291bnQgKz0gaW5kZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjb3VudCsrOworICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworaW5saW5lIGlu
dCBET01UcmF2ZXJzYWxTdHJhdGVneTo6Y291bnRFbGVtZW50c09mVHlwZUJlZm9yZShFbGVtZW50
KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAoreworICAgIGludCBj
b3VudCA9IDA7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlv
dXNFbGVtZW50U2libGluZygpKSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5
cGUpKQorICAgICAgICAgICAgKytjb3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9
CisKK2lubGluZSBpbnQgRE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNBZnRlcihF
bGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChj
b25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+bmV4dEVsZW1lbnRTaWJsaW5nKCk7IHNp
Ymxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0RWxlbWVudFNpYmxpbmcoKSkKKyAgICAgICAg
Kytjb3VudDsKKworICAgIHJldHVybiBjb3VudDsKK30KKworaW5saW5lIGludCBET01UcmF2ZXJz
YWxTdHJhdGVneTo6Y291bnRFbGVtZW50c09mVHlwZUFmdGVyKEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpIGNvbnN0Cit7CisgICAgaW50IGNvdW50ID0gMDsKKyAg
ICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxp
bmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7
CisgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgKytj
b3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK3N0cnVjdCBTaGFkb3dET01U
cmF2ZXJzYWxTdHJhdGVneSB7CisgICAgU2hhZG93RE9NVHJhdmVyc2FsU3RyYXRlZ3koY29uc3Qg
VmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50IG50aCkKKyAgICAgICAgOiBtX3Np
YmxpbmdzKHNpYmxpbmdzKQorICAgICAgICAsIG1fbnRoKG50aCkKKyAgICB7CisgICAgfQorCisg
ICAgYm9vbCBpc0ZpcnN0Q2hpbGQoRWxlbWVudCopIGNvbnN0OworICAgIGJvb2wgaXNMYXN0Q2hp
bGQoRWxlbWVudCopIGNvbnN0OworICAgIGJvb2wgaXNGaXJzdE9mVHlwZShFbGVtZW50KiwgY29u
c3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OworICAgIGJvb2wgaXNMYXN0T2ZUeXBlKEVsZW1lbnQq
LCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisKKyAgICBpbnQgY291bnRFbGVtZW50c0Jl
Zm9yZShFbGVtZW50KikgY29uc3Q7CisgICAgaW50IGNvdW50RWxlbWVudHNBZnRlcihFbGVtZW50
KikgY29uc3Q7CisgICAgaW50IGNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUoRWxlbWVudCosIGNv
bnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKyAgICBpbnQgY291bnRFbGVtZW50c09mVHlwZUFm
dGVyKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7CisKKyAgICBzdGF0aWMg
dm9pZCBsYWJlbDEoKSB7IGFzbSgibWlraToiKTsgfQorICAgIHN0YXRpYyB2b2lkIGxhYmVsMigp
IHsgYXNtKCJob3NoaWk6Iik7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8UmVmUHRyPE5vZGU+
ID4gbV9zaWJsaW5nczsKKyAgICBpbnQgbV9udGg7Cit9OworCitpbmxpbmUgYm9vbCBTaGFkb3dE
T01UcmF2ZXJzYWxTdHJhdGVneTo6aXNGaXJzdENoaWxkKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0
Cit7CisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOworICAgIAorICAgIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBtX3NpYmxpbmdzOworICAgIEFTU0VSVChlbGVtZW50
ID09IHRvRWxlbWVudChzaWJsaW5nc1ttX250aF0uZ2V0KCkpKTsKKworICAgIGZvciAoaW50IGkg
PSBtX250aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBz
aWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBTaGFkb3dET01UcmF2
ZXJzYWxTdHJhdGVneTo6aXNMYXN0Q2hpbGQoRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+
ID4mIHNpYmxpbmdzID0gbV9zaWJsaW5nczsKKyAgICBBU1NFUlQoZWxlbWVudCA9PSB0b0VsZW1l
bnQoc2libGluZ3NbbV9udGhdLmdldCgpKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gbV9udGgg
KyAxOyBpIDwgc2libGluZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHNpYmxpbmdzW2ld
ICYmIHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIFNoYWRvd0RP
TVRyYXZlcnNhbFN0cmF0ZWd5Ojppc0ZpcnN0T2ZUeXBlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIHR5cGUpIGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQp
OworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncyA9IG1fc2libGlu
Z3M7CisgICAgQVNTRVJUKGVsZW1lbnQgPT0gdG9FbGVtZW50KHNpYmxpbmdzW21fbnRoXS5nZXQo
KSkpOworCisgICAgZm9yIChpbnQgaSA9IG1fbnRoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAg
ICAgaWYgKHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkgJiYgc2li
bGluZ3NbaV0tPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIFNoYWRvd0RPTVRyYXZl
cnNhbFN0cmF0ZWd5Ojppc0xhc3RPZlR5cGUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgdHlwZSkgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CisKKyAg
ICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzID0gbV9zaWJsaW5nczsKKyAg
ICBBU1NFUlQoZWxlbWVudCA9PSB0b0VsZW1lbnQoc2libGluZ3NbbV9udGhdLmdldCgpKSk7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gbV9udGggKyAxOyBpIDwgc2libGluZ3Muc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2Rl
KCkgJiYgc2libGluZ3NbaV0tPmhhc1RhZ05hbWUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBpbnQgU2hhZG93
RE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNCZWZvcmUoRWxlbWVudCogZWxlbWVu
dCkgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CisKKyAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzID0gbV9zaWJsaW5nczsKKyAgICBBU1NFUlQoZWxl
bWVudCA9PSB0b0VsZW1lbnQoc2libGluZ3NbbV9udGhdLmdldCgpKSk7CisKKyAgICBpbnQgY291
bnQgPSAwOworICAgIGZvciAoaW50IGkgPSBtX250aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAg
ICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgpKQorICAg
ICAgICAgICAgKytjb3VudDsKKyAgICB9CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK2lubGlu
ZSBpbnQgU2hhZG93RE9NVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNBZnRlcihFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKworICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBtX3NpYmxpbmdzOworICAg
IEFTU0VSVChlbGVtZW50ID09IHRvRWxlbWVudChzaWJsaW5nc1ttX250aF0uZ2V0KCkpKTsKKwor
ICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IG1fbnRoICsgMTsgaSA8IHNp
YmxpbmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJsaW5n
c1tpXS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuICsrY291bnQ7CisgICAg
fQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitpbmxpbmUgaW50IFNoYWRvd0RPTVRyYXZlcnNh
bFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpIGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKGVsZW1l
bnQpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncyA9IG1fc2li
bGluZ3M7CisgICAgQVNTRVJUKGVsZW1lbnQgPT0gdG9FbGVtZW50KHNpYmxpbmdzW21fbnRoXS5n
ZXQoKSkpOworCisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKGludCBpID0gbV9udGggLSAx
OyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAoc2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0t
PmlzRWxlbWVudE5vZGUoKSAmJiBzaWJsaW5nc1tpXS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAg
ICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitpbmxpbmUg
aW50IFNoYWRvd0RPTVRyYXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIo
RWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkgY29uc3QKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWxlbWVudCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+
ID4mIHNpYmxpbmdzID0gbV9zaWJsaW5nczsKKyAgICBBU1NFUlQoZWxlbWVudCA9PSB0b0VsZW1l
bnQoc2libGluZ3NbbV9udGhdLmdldCgpKSk7CisKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZv
ciAoc2l6ZV90IGkgPSBtX250aCArIDE7IGkgPCBzaWJsaW5ncy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAoc2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSAmJiBz
aWJsaW5nc1tpXS0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiArK2NvdW50
OworICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAyZDljY2Q1OWRhNWMyZDU0YjZhMjRhZmM3MjFh
ZTJjMDg5YmQ3ZTZjLi5lYmZlNWQyY2I1YzY2YWQ3OGExNTE3ZTI0MzY5OWVlOWViZDhiMTA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0xMDcsNiArMTA3LDcgQEAKICNp
bmNsdWRlICJTaGFkb3dEYXRhLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUg
IlNoYWRvd1ZhbHVlLmgiCisjaW5jbHVkZSAiU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaCIK
ICNpbmNsdWRlICJTa2V3VHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWls
ZGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKaW5kZXggMDc2YTcyM2M4YTkx
YWZlOTMxODg3NjU4OTRjZTc3MzZkYzM2NmEwMC4uNjc0OGI1OTkxZGI2N2ZiYjM1ZGVjNzlmMzUz
NDg2YTRkYmQ3ZGVhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29u
dGVudERpc3RyaWJ1dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250
ZW50RGlzdHJpYnV0b3IuY3BwCkBAIC0xMTcsMTAgKzExNywxMCBAQCB2b2lkIENvbnRlbnREaXN0
cmlidXRvcjo6ZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyhJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9u
UG9pbnQsCiAgICAgICAgIGlmIChkaXN0cmlidXRlZFtpXSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIE5vZGUqIGNoaWxkID0gcG9vbFtpXS5nZXQoKTsKLSAgICAgICAgaWYgKCFx
dWVyeS5tYXRjaGVzKGNoaWxkKSkKKyAgICAgICAgaWYgKCFxdWVyeS5tYXRjaGVzKHBvb2wsIGkp
KQogICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgTm9kZSogY2hpbGQgPSBwb29sW2ld
LmdldCgpOwogICAgICAgICBkaXN0cmlidXRpb24uYXBwZW5kKGNoaWxkKTsKICAgICAgICAgbV9u
b2RlVG9JbnNlcnRpb25Qb2ludC5hZGQoY2hpbGQsIGluc2VydGlvblBvaW50KTsKICAgICAgICAg
ZGlzdHJpYnV0ZWRbaV0gPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvQ29udGVudFNlbGVjdG9yUXVlcnkuY3BwCmluZGV4IGYxMmM1OTkyNWY3YzkzMjRmNmZlZmNi
ZWIyMjM1ODk1N2RmMjExZjMuLjBlMzc5YzVhZTRmZWFkNTg1ZGIzMDQzODA1ZmI1Yjg5NjI2MTIx
YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3Rv
clF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0
b3JRdWVyeS5jcHAKQEAgLTMwLDE2ICszMCw1NyBAQAogI2luY2x1ZGUgIkNTU1BhcnNlci5oIgog
I2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUgIkluc2VydGlvblBvaW50Lmgi
CisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNlbGVjdG9y
Q2hlY2tlci5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTaWJsaW5nVHJh
dmVyc2FsU3RyYXRlZ2llcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0NvbnRlbnRTZWxl
Y3RvckNoZWNrZXI6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBi
b29sIHN0cmljdFBhcnNpbmcpCisgICAgOiBtX3NlbGVjdG9yQ2hlY2tlcihkb2N1bWVudCwgc3Ry
aWN0UGFyc2luZykKK3sKKyAgICBtX3NlbGVjdG9yQ2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hl
Y2tlcjo6Q29sbGVjdGluZ1J1bGVzKTsKK30KKworYm9vbCBDb250ZW50U2VsZWN0b3JDaGVja2Vy
OjpjaGVja0NvbnRlbnRTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGludCBudGgpIGNvbnN0Cit7CisjaWYgRU5BQkxF
KFNIQURPV19ET00pCisgICAgYm9vbCBkb2VzQ29udGVudFJlcHJvamVjdGlvbiA9IFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OmNvbnRlbnRSZXByb2plY3Rpb25FbmFibGVkKCk7CisjZWxzZQorICAg
IGJvb2wgZG9lc0NvbnRlbnRSZXByb2plY3Rpb24gPSBmYWxzZTsKKyNlbmRpZgorCisgICAgaWYg
KGRvZXNDb250ZW50UmVwcm9qZWN0aW9uKSB7CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2Vs
ZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChzZWxlY3RvciwgdG9FbGVtZW50KHNpYmxpbmdz
W250aF0uZ2V0KCkpLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOworICAg
ICAgICBTaGFkb3dET01UcmF2ZXJzYWxTdHJhdGVneSBzdHJhdGVneShzaWJsaW5ncywgbnRoKTsK
KyAgICAgICAgcmV0dXJuIG1fc2VsZWN0b3JDaGVja2VyLmNoZWNrT25lU2VsZWN0b3JXaXRoU3Ry
YXRlZ3koY29udGV4dCwgc3RyYXRlZ3kpOworICAgIH0KKworICAgIFNlbGVjdG9yQ2hlY2tlcjo6
U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgY29udGV4dChzZWxlY3RvciwgdG9FbGVtZW50KHNpYmxp
bmdzW250aF0uZ2V0KCkpLCBTZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOwor
ICAgIHJldHVybiBtX3NlbGVjdG9yQ2hlY2tlci5jaGVja09uZVNlbGVjdG9yV2l0aFN0cmF0ZWd5
KGNvbnRleHQsIERPTVRyYXZlcnNhbFN0cmF0ZWd5KCkpOworfQorCit2b2lkIENvbnRlbnRTZWxl
Y3RvckRhdGFMaXN0Ojppbml0aWFsaXplKGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3Jz
KQoreworICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JzLmZpcnN0KCk7
IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpCisg
ICAgICAgIG1fc2VsZWN0b3JzLmFwcGVuZChzZWxlY3Rvcik7Cit9CisKK2Jvb2wgQ29udGVudFNl
bGVjdG9yRGF0YUxpc3Q6Om1hdGNoZXMoY29uc3QgQ29udGVudFNlbGVjdG9yQ2hlY2tlciYgc2Vs
ZWN0b3JDaGVja2VyLCBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzLCBpbnQg
bnRoKSBjb25zdAoreworICAgIHVuc2lnbmVkIHNlbGVjdG9yQ291bnQgPSBtX3NlbGVjdG9ycy5z
aXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlbGVjdG9yQ291bnQ7ICsraSkg
eworICAgICAgICBpZiAoc2VsZWN0b3JDaGVja2VyLmNoZWNrQ29udGVudFNlbGVjdG9yKG1fc2Vs
ZWN0b3JzW2ldLCBzaWJsaW5ncywgbnRoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIENvbnRlbnRTZWxlY3RvclF1ZXJ5OjpDb250ZW50
U2VsZWN0b3JRdWVyeShjb25zdCBJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQpCiAgICAg
OiBtX2luc2VydGlvblBvaW50KGluc2VydGlvblBvaW50KQogICAgICwgbV9zZWxlY3RvckNoZWNr
ZXIoaW5zZXJ0aW9uUG9pbnQtPmRvY3VtZW50KCksICFpbnNlcnRpb25Qb2ludC0+ZG9jdW1lbnQo
KS0+aW5RdWlya3NNb2RlKCkpCiB7Ci0gICAgbV9zZWxlY3RvckNoZWNrZXIuc2V0TW9kZShTZWxl
Y3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7Ci0KICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQt
PnNlbGVjdCgpLmlzTnVsbCgpIHx8IGluc2VydGlvblBvaW50LT5zZWxlY3QoKS5pc0VtcHR5KCkp
IHsKICAgICAgICAgbV9pc1ZhbGlkU2VsZWN0b3IgPSB0cnVlOwogICAgICAgICByZXR1cm47CkBA
IC01OCwxMyArOTksMTAgQEAgYm9vbCBDb250ZW50U2VsZWN0b3JRdWVyeTo6aXNWYWxpZFNlbGVj
dG9yKCkgY29uc3QKICAgICByZXR1cm4gbV9pc1ZhbGlkU2VsZWN0b3I7CiB9CiAKLWJvb2wgQ29u
dGVudFNlbGVjdG9yUXVlcnk6Om1hdGNoZXMoTm9kZSogbm9kZSkgY29uc3QKK2Jvb2wgQ29udGVu
dFNlbGVjdG9yUXVlcnk6Om1hdGNoZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJs
aW5ncywgaW50IG50aCkgY29uc3QKIHsKKyAgICBOb2RlKiBub2RlID0gc2libGluZ3NbbnRoXS5n
ZXQoKTsKICAgICBBU1NFUlQobm9kZSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBBU1NFUlQobm9kZS0+cGFyZW50Tm9kZSgpID09IG1faW5zZXJ0aW9uUG9p
bnQtPnNoYWRvd1Jvb3QoKS0+aG9zdCgpKTsKIAogICAgIGlmIChtX2luc2VydGlvblBvaW50LT5z
ZWxlY3QoKS5pc051bGwoKSB8fCBtX2luc2VydGlvblBvaW50LT5zZWxlY3QoKS5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzUsNyArMTEzLDcgQEAgYm9vbCBDb250ZW50U2Vs
ZWN0b3JRdWVyeTo6bWF0Y2hlcyhOb2RlKiBub2RlKSBjb25zdAogICAgIGlmICghbm9kZS0+aXNF
bGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9zZWxl
Y3RvcnMubWF0Y2hlcyhtX3NlbGVjdG9yQ2hlY2tlciwgdG9FbGVtZW50KG5vZGUpKTsKKyAgICBy
ZXR1cm4gbV9zZWxlY3RvcnMubWF0Y2hlcyhtX3NlbGVjdG9yQ2hlY2tlciwgc2libGluZ3MsIG50
aCk7CiB9CiAKIHN0YXRpYyBib29sIHZhbGlkYXRlU3ViU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNl
bGVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNl
bGVjdG9yUXVlcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3Rv
clF1ZXJ5LmgKaW5kZXggOTRmYTNlZmNjZjNmOWQ3MmU5NzQ3NzVlMmQyZDMxNDBkMTNjYjM0ZS4u
MmM3MTBhNTg1MmU5MmQ3Njg4MmM3YzIwNzUwYmZkMjZkYTJhYTAzYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oCkBAIC00MywyNSAr
NDMsNDEgQEAgY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBOb2RlOwogY2xhc3MgSW5zZXJ0aW9uUG9p
bnQ7CiAKK2NsYXNzIENvbnRlbnRTZWxlY3RvckNoZWNrZXIgeworcHVibGljOgorICAgIENvbnRl
bnRTZWxlY3RvckNoZWNrZXIoRG9jdW1lbnQqLCBib29sIHN0cmljdFBhcnNpbmcpOworCisgICAg
Ym9vbCBjaGVja0NvbnRlbnRTZWxlY3RvcihDU1NTZWxlY3RvciosIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Tm9kZT4gPiYgc2libGluZ3MsIGludCBudGhOb2RlKSBjb25zdDsKK3ByaXZhdGU6CisgICAg
U2VsZWN0b3JDaGVja2VyIG1fc2VsZWN0b3JDaGVja2VyOworfTsKKworY2xhc3MgQ29udGVudFNl
bGVjdG9yRGF0YUxpc3QgeworcHVibGljOgorICAgIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBDU1NT
ZWxlY3Rvckxpc3QmKTsKKyAgICBib29sIG1hdGNoZXMoY29uc3QgQ29udGVudFNlbGVjdG9yQ2hl
Y2tlciYsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MsIGludCBudGhOb2Rl
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8Q1NTU2VsZWN0b3IqPiBtX3NlbGVjdG9y
czsKK307CisKIGNsYXNzIENvbnRlbnRTZWxlY3RvclF1ZXJ5IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDb250ZW50U2VsZWN0b3JRdWVyeSk7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29u
dGVudFNlbGVjdG9yUXVlcnkoY29uc3QgSW5zZXJ0aW9uUG9pbnQqKTsKIAogICAgIGJvb2wgaXNW
YWxpZFNlbGVjdG9yKCkgY29uc3Q7Ci0gICAgYm9vbCBtYXRjaGVzKE5vZGUqKSBjb25zdDsKKyAg
ICBib29sIG1hdGNoZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50
IG50aE5vZGUpIGNvbnN0OwogcHJpdmF0ZToKICAgICBib29sIHZhbGlkYXRlU2VsZWN0b3JMaXN0
KCk7CiAKICAgICBjb25zdCBJbnNlcnRpb25Qb2ludCogbV9pbnNlcnRpb25Qb2ludDsKLSAgICBT
ZWxlY3RvckRhdGFMaXN0IG1fc2VsZWN0b3JzOworICAgIENvbnRlbnRTZWxlY3RvckRhdGFMaXN0
IG1fc2VsZWN0b3JzOwogICAgIENTU1NlbGVjdG9yTGlzdCBtX3NlbGVjdG9yTGlzdDsKLSAgICBT
ZWxlY3RvckNoZWNrZXIgbV9zZWxlY3RvckNoZWNrZXI7CisgICAgQ29udGVudFNlbGVjdG9yQ2hl
Y2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKICAgICBib29sIG1faXNWYWxpZFNlbGVjdG9yOwogfTsK
IAogfQogCi0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFsU2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRp
bmdzLmNwcAppbmRleCBiYjllZWQ2YjEzNTZlMTE4YTE1NjJmZjRkMmRjMjQwYzM1ZjA1YjY3Li4w
NDgwNzkyOGYwMTEyNWYxOWE3ZTk4NjNlNTc0YWIxMmRhZGJmODc1IDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAKQEAgLTc4LDYgKzc4LDcgQEAgSW50ZXJu
YWxTZXR0aW5nczo6QmFja3VwOjpCYWNrdXAoUGFnZSogcGFnZSwgU2V0dGluZ3MqIHNldHRpbmdz
KQogI2lmIEVOQUJMRShTSEFET1dfRE9NKQogICAgICwgbV9vcmlnaW5hbFNoYWRvd0RPTUVuYWJs
ZWQoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhZG93RE9NRW5hYmxlZCgpKQogICAgICwgbV9v
cmlnaW5hbEF1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OmF1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkKCkpCisgICAgLCBt
X29yaWdpbmFsQ29udGVudFJlcHJvamVjdGlvbkVuYWJsZWQoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6Y29udGVudFJlcHJvamVjdGlvbkVuYWJsZWQoKSkKICNlbmRpZgogICAgICwgbV9vcmlnaW5h
bEVkaXRpbmdCZWhhdmlvcihzZXR0aW5ncy0+ZWRpdGluZ0JlaGF2aW9yVHlwZSgpKQogICAgICwg
bV9vcmlnaW5hbFVuaWZpZWRTcGVsbENoZWNrZXJFbmFibGVkKHNldHRpbmdzLT51bmlmaWVkVGV4
dENoZWNrZXJFbmFibGVkKCkpCkBAIC0xMTMsNiArMTE0LDcgQEAgdm9pZCBJbnRlcm5hbFNldHRp
bmdzOjpCYWNrdXA6OnJlc3RvcmVUbyhQYWdlKiBwYWdlLCBTZXR0aW5ncyogc2V0dGluZ3MpCiAj
aWYgRU5BQkxFKFNIQURPV19ET00pCiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0U2hh
ZG93RE9NRW5hYmxlZChtX29yaWdpbmFsU2hhZG93RE9NRW5hYmxlZCk7CiAgICAgUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2V0QXV0aG9yU2hhZG93RE9NRm9yQW55RWxlbWVudEVuYWJsZWQobV9v
cmlnaW5hbEF1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkKTsKKyAgICBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzZXRDb250ZW50UmVwcm9qZWN0aW9uRW5hYmxlZChtX29yaWdpbmFs
Q29udGVudFJlcHJvamVjdGlvbkVuYWJsZWQpOwogI2VuZGlmCiAgICAgc2V0dGluZ3MtPnNldEVk
aXRpbmdCZWhhdmlvclR5cGUobV9vcmlnaW5hbEVkaXRpbmdCZWhhdmlvcik7CiAgICAgc2V0dGlu
Z3MtPnNldFVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQobV9vcmlnaW5hbFVuaWZpZWRTcGVsbENo
ZWNrZXJFbmFibGVkKTsKQEAgLTMwMiw2ICszMDQsMTUgQEAgdm9pZCBJbnRlcm5hbFNldHRpbmdz
OjpzZXRBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZChib29sIGlzRW5hYmxlZCkK
ICNlbmRpZgogfQogCit2b2lkIEludGVybmFsU2V0dGluZ3M6OnNldENvbnRlbnRSZXByb2plY3Rp
b25FbmFibGVkKGJvb2wgaXNFbmFibGVkKQoreworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAg
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNldENvbnRlbnRSZXByb2plY3Rpb25FbmFibGVkKGlz
RW5hYmxlZCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpc0VuYWJsZWQpOworI2VuZGlmCit9
CisKIHZvaWQgSW50ZXJuYWxTZXR0aW5nczo6c2V0VG91Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQo
Ym9vbCBlbmFibGVkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdz
LmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaAppbmRleCBiZTg4
MTBkZTY2ODJiYzg3ZDQ0NzZiZjkzZDlhMGQ4MDI5YWUwOTA4Li43NmQwM2U4MWVhYjViMDliZWRj
ZDJlMDVlYjNmZTAyNDllZmM2YTgwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFsU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
U2V0dGluZ3MuaApAQCAtNjAsNiArNjAsNyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKFNIQURPV19E
T00pCiAgICAgICAgIGJvb2wgbV9vcmlnaW5hbFNoYWRvd0RPTUVuYWJsZWQ7CiAgICAgICAgIGJv
b2wgbV9vcmlnaW5hbEF1dGhvclNoYWRvd0RPTUZvckFueUVsZW1lbnRFbmFibGVkOworICAgICAg
ICBib29sIG1fb3JpZ2luYWxDb250ZW50UmVwcm9qZWN0aW9uRW5hYmxlZDsKICNlbmRpZgogICAg
ICAgICBFZGl0aW5nQmVoYXZpb3JUeXBlIG1fb3JpZ2luYWxFZGl0aW5nQmVoYXZpb3I7CiAgICAg
ICAgIGJvb2wgbV9vcmlnaW5hbFVuaWZpZWRTcGVsbENoZWNrZXJFbmFibGVkOwpAQCAtMTEzLDYg
KzExNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERldmljZVN1cHBvcnRzTW91c2UoYm9vbCBl
bmFibGVkLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXRTaGFkb3dET01FbmFibGVkKGJv
b2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgc2V0QXV0aG9yU2hhZG93RE9N
Rm9yQW55RWxlbWVudEVuYWJsZWQoYm9vbCk7CisgICAgdm9pZCBzZXRDb250ZW50UmVwcm9qZWN0
aW9uRW5hYmxlZChib29sKTsKICAgICB2b2lkIHNldFN0YW5kYXJkRm9udEZhbWlseShjb25zdCBT
dHJpbmcmIGZhbWlseSwgY29uc3QgU3RyaW5nJiBzY3JpcHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICB2b2lkIHNldFNlcmlmRm9udEZhbWlseShjb25zdCBTdHJpbmcmIGZhbWlseSwgY29uc3QgU3Ry
aW5nJiBzY3JpcHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldFNhbnNTZXJpZkZvbnRG
YW1pbHkoY29uc3QgU3RyaW5nJiBmYW1pbHksIGNvbnN0IFN0cmluZyYgc2NyaXB0LCBFeGNlcHRp
b25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0
dGluZ3MuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbApp
bmRleCBkOGE4YWFmOGJiYTgxNTgyMDRjOTU2OTRiMTRiODM0MzFjYzYyODUzLi4xNDU3OWE2Mzgz
YTM1OGFjNTU0Nzg2MjFjYjUxM2E4ZDFiM2Q4ZGM0IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwKQEAgLTQ2LDYgKzQ2LDcgQEAgbW9kdWxlIHdpbmRvdyB7
CiAgICAgICAgIHZvaWQgc2V0RGV2aWNlU3VwcG9ydHNNb3VzZShpbiBib29sZWFuIGVuYWJsZWQp
IHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICB2b2lkIHNldFNoYWRvd0RPTUVuYWJsZWQo
aW4gYm9vbGVhbiBlbmFibGVkKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgdm9pZCBz
ZXRBdXRob3JTaGFkb3dET01Gb3JBbnlFbGVtZW50RW5hYmxlZChpbiBib29sZWFuIGlzRW5hYmxl
ZCk7CisgICAgICAgIHZvaWQgc2V0Q29udGVudFJlcHJvamVjdGlvbkVuYWJsZWQoaW4gYm9vbGVh
biBpc0VuYWJsZWQpOwogICAgICAgICB2b2lkIHNldFN0YW5kYXJkRm9udEZhbWlseShpbiBET01T
dHJpbmcgZmFtaWx5LCBpbiBET01TdHJpbmcgc2NyaXB0KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
ICAgICAgICAgdm9pZCBzZXRTZXJpZkZvbnRGYW1pbHkoaW4gRE9NU3RyaW5nIGZhbWlseSwgaW4g
RE9NU3RyaW5nIHNjcmlwdCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgc2V0
U2Fuc1NlcmlmRm9udEZhbWlseShpbiBET01TdHJpbmcgZmFtaWx5LCBpbiBET01TdHJpbmcgc2Ny
aXB0KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NoYWRvdy9jb250ZW50LXJlcHJvamVjdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vc2hhZG93L2NvbnRlbnQtcmVwcm9qZWN0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGEzMDIzMmIw
YTQ3ZGY2Yzc1NmM4ZDNkYzlmMzAzZWVhZDkwNTg4YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9jb250ZW50LXJlcHJvamVjdGlvbi5odG1sCkBAIC0wLDAg
KzEsNDIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5
PgorCis8ZGl2IGlkPSJob3N0Ij4KKyAgICA8ZGl2PkE8L2Rpdj4KKyAgICA8ZGl2PkI8L2Rpdj4K
KyAgICA8ZGl2PkM8L2Rpdj4KKzwvZGl2PgorCis8c2NyaXB0PgoraWYgKHdpbmRvdy5pbnRlcm5h
bHMpIHsKKyAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0Q29udGVudFJlcHJvamVjdGlvbkVuYWJs
ZWQodHJ1ZSk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBzaGFk
b3dSb290ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CitzaGFkb3dSb290LmlubmVySFRN
TCA9ICc8ZGl2IGlkPSJpbm5lckhvc3QiPjxjb250ZW50IHNlbGVjdD0iZGl2Ij48L2NvbnRlbnQ+
PGRpdj5EPC9kaXY+PC9kaXY+JzsKKwordmFyIGlubmVySG9zdCA9IHNoYWRvd1Jvb3QuZ2V0RWxl
bWVudEJ5SWQoJ2lubmVySG9zdCcpOwordmFyIGlubmVyU2hhZG93Um9vdCA9IG5ldyBXZWJLaXRT
aGFkb3dSb290KGlubmVySG9zdCk7Citpbm5lclNoYWRvd1Jvb3QuaW5uZXJIVE1MID0gJzxjb250
ZW50IGlkPSJjb250ZW50IiBzZWxlY3Q9ImRpdiI+PC9jb250ZW50Pic7CisKK3ZhciBjb250ZW50
ID0gaW5uZXJTaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCdjb250ZW50Jyk7CisKK3NldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CisgICAgdmFyIG5vZGVMaXN0ID0gaW50ZXJuYWxzLmRpc3RyaWJ1dGVk
Tm9kZXMoY29udGVudCk7CisgICAgY29uc29sZS5sb2coY29udGVudCk7CisgICAgY29uc29sZS5s
b2cobm9kZUxpc3QpOworICAgIGNvbnNvbGUubG9nKG5vZGVMaXN0Lmxlbmd0aCk7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7ICsraSkKKyAgICAgICAgY29uc29sZS5s
b2cobm9kZUxpc3QuaXRlbShpKSk7CisKKyAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30s
IDApOworCis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168178</attachid>
            <date>2012-10-11 02:41:22 -0700</date>
            <delta_ts>2012-10-11 09:10:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96990-20121011184020.patch</filename>
            <type>text/plain</type>
            <size>29052</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMDMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjRmODhiMmRiOTEwZGZh
Nzg1NzY3ZGJiMGE0MmU3MjVhZWIzMDYwYS4uYmU0MTgxZThjMWUyNDQ3OGQ5NGY1YWI2MjkyM2Qz
ODZkZjE4ZDg1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTEwLTExICBTaGlu
eWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KKworICAgICAgICBNYWtlIENvbnRl
bnRTZWxlY3RvclF1ZXJ5IHdvcmsgd2hlbiBzaWJsaW5ncyBhcmUgcGFzc2VkIGV4cGxpY2l0bHku
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Njk5MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gd2Ug
aW1wbGVtZW50IGNvbnRlbnQgcmVwcm9qZWN0aW9uIGluIFNoYWRvd0RPTSwgd2UgaGF2ZSB0byBw
YXNzIGEgbm9kZSBwb29sIHRvIFNlbGVjdG9yQ2hlY2tlci4KKyAgICAgICAgV2UgaW50cm9kdWUg
U2hhZG93RE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5LCB3aGljaCB0cmF2ZXJzZXMgYSBub2Rl
IHBvb2wgaW5zdGVhZCBvZiByZWFsIG5vZGUgc2libGluZ3MuCisKKyAgICAgICAgU2luY2UgQ29u
dGVudFNlbGVjdG9yIGlzIGEgdmVyeSBob3QgcGxhY2UsIHdlIGRvbid0IHdhbnQgdG8gcmVncmVz
cyBwZXJmb3JtYW5jZS4gSW4gdGhlIHByZXZpb3VzIHBhdGNoLAorICAgICAgICB3ZSd2ZSBtYWtl
IENvbnRlbnRTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvciB0ZW1wbGF0ZSB0byB0YWtlIFNpYmxp
bmdUcmF2ZXJzYWxTdHJhdGVneSBhcyBhbiBhcmd1bWVudC4KKworICAgICAgICBXZSBhbHNvIG1v
dmUgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5IHRvIFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVn
aWVzLmguCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdl
dC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuaDoKKyAgICAgICAgKiBjc3MvU2li
bGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSk6IE1vdmVkIGZyb20gU2VsZWN0b3JD
aGVja2VyLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5Ojpp
c0ZpcnN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2libGluZ1RyYXZlcnNhbFN0cmF0
ZWd5Ojppc0xhc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpET01TaWJsaW5nVHJhdmVyc2Fs
U3RyYXRlZ3k6OmlzRmlyc3RPZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2libGluZ1Ry
YXZlcnNhbFN0cmF0ZWd5Ojppc0xhc3RPZlR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2li
bGluZ1RyYXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzQmVmb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneTo6Y291bnRFbGVtZW50c09mVHlwZUJl
Zm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OmNv
dW50RWxlbWVudHNBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpET01TaWJsaW5nVHJhdmVyc2Fs
U3RyYXRlZ3k6OmNvdW50RWxlbWVudHNPZlR5cGVBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpT
aGFkb3dET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OlNoYWRvd0RPTVNpYmxpbmdUcmF2ZXJz
YWxTdHJhdGVneSk6CisgICAgICAgIChTaGFkb3dET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kp
OiBTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kgd2hpY2ggdXNlcyBhIG5vZGUgcG9vbCBpbnN0ZWFk
IG9mIGEgcmVhbCBlbGVtZW50CisgICAgICAgIHNpYmxpbmdzLiBUaGlzIHN0cmF0ZWd5IHRha2Vz
IGEgdmVjdG9yIG9mIG5vZGUgd2hpY2ggd2UgdHJhdmVyc2UuCisgICAgICAgIChXZWJDb3JlOjpT
aGFkb3dET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OmlzRmlyc3RDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpTaGFkb3dET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OmlzTGFzdENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0RPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneTo6
aXNGaXJzdE9mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dET01TaWJsaW5nVHJhdmVy
c2FsU3RyYXRlZ3k6OmlzTGFzdE9mVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dET01T
aWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNCZWZvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhZG93RE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRz
QWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93RE9NU2libGluZ1RyYXZlcnNhbFN0cmF0
ZWd5Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0RPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneTo6Y291bnRFbGVtZW50c09mVHlwZUFmdGVyKToK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgICogaHRtbC9zaGFkb3cv
Q29udGVudERpc3RyaWJ1dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnREaXN0cmli
dXRvcjo6ZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyk6CisgICAgICAgICogaHRtbC9zaGFkb3cvQ29u
dGVudFNlbGVjdG9yUXVlcnkuY3BwOiBVc2VzIFNoYWRvd0RPTVNpYmxpbmdUcmF2ZXJzYWxTdHJh
dGVneSBpbnN0ZWFkIG9mIERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneS4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXI6OkNvbnRlbnRTZWxlY3RvckNoZWNrZXIpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VsZWN0b3JDaGVj
a2VyOjpjaGVja0NvbnRlbnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2Vs
ZWN0b3JEYXRhTGlzdDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2Vs
ZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VsZWN0
b3JRdWVyeTo6Q29udGVudFNlbGVjdG9yUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dFNlbGVjdG9yUXVlcnk6Om1hdGNoZXMpOgorICAgICAgICAqIGh0bWwvc2hhZG93L0NvbnRlbnRT
ZWxlY3RvclF1ZXJ5Lmg6CisgICAgICAgIChDb250ZW50U2VsZWN0b3JDaGVja2VyKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29udGVudFNlbGVjdG9yRGF0YUxpc3QpOgorICAgICAg
ICAoQ29udGVudFNlbGVjdG9yUXVlcnkpOgorCiAyMDEyLTEwLTExICBLZW50IFRhbXVyYSAgPHRr
ZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbnRyb2R1Y2UgTG9jYWxpemVyOjppc1JUTCwg
YW5kIHVzZSBpdCBpbiBEYXRlVGltZUNob29zZXJJbXBsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQppbmRleCAwOTkxODA0ZGMzNjA0NGQwYTE2NjhhMzk4MTA1NzI2MDdkOTI4ZThlLi43OGRj
YTg5ODcxN2IxMWZjOTM2OTZlYjY1MTc2MmNhYzA2MDlhMWMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTI2MjAsNiArMjYyMCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9j
c3MvU2hhZG93VmFsdWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU2hhZG93VmFsdWUuaCBc
CisJU291cmNlL1dlYkNvcmUvY3NzL1NpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVzLmggXAogCVNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVCdWlsZGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQppbmRleCAyODRjYmUwODU1ZDMyZGY1NmVhN2E3OTA3ZGNmMmI5YWU3MjQzYWZkLi5h
YjdkMDJjNjg3YmZiZmJlMTFkMWI0Njk2YWQzYjJmNWIxYjA1ZTZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAg
LTE0ODcsNiArMTQ4Nyw3IEBAIEhFQURFUlMgKz0gXAogICAgIGNzcy9SR0JDb2xvci5oIFwKICAg
ICBjc3MvU2VsZWN0b3JDaGVja2VyLmggXAogICAgIGNzcy9TaGFkb3dWYWx1ZS5oIFwKKyAgICBj
c3MvU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaCBcCiAgICAgY3NzL1N0eWxlTWVkaWEuaCBc
CiAgICAgY3NzL1N0eWxlQnVpbGRlci5oIFwKICAgICBjc3MvU3R5bGVQcm9wZXJ0eVNldC5oIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCBhMGU4NWJjMmJjMjAyM2ZhZjNjYmIwNGRkZGViZTIxMDllYjRm
Yzk0Li42YTMzMTUzMzZlNzhjODgxZGRmZTQyZGI2YTNjY2M4NDQ4ZGVjYTZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC0yNjI0LDYgKzI2MjQsNyBAQAogICAgICAgICAgICAgJ2Nzcy9TZWxlY3RvckNo
ZWNrZXIuaCcsCiAgICAgICAgICAgICAnY3NzL1NoYWRvd1ZhbHVlLmNwcCcsCiAgICAgICAgICAg
ICAnY3NzL1NoYWRvd1ZhbHVlLmgnLAorICAgICAgICAgICAgJ2Nzcy9TaWJsaW5nVHJhdmVyc2Fs
U3RyYXRlZ2llcy5oJywKICAgICAgICAgICAgICdjc3MvU3R5bGVCdWlsZGVyLmNwcCcsCiAgICAg
ICAgICAgICAnY3NzL1N0eWxlQnVpbGRlci5oJywKICAgICAgICAgICAgICdjc3MvU3R5bGVNZWRp
YS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpp
bmRleCA3MWEyMmFiZDY0Mzk1NWU5YTY1MzQzNDA3N2I1OWM1OGMwNjFjZDMzLi4zMzY5Zjc2ZDU2
ZGZjZmM5NmQzMDk5ZmMzZWQzYTVmNTFlMTk4YmE2IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzc3MTEsNiArMzc3MTEsMTAgQEAKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFNpYmxpbmdU
cmF2ZXJzYWxTdHJhdGVnaWVzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTdHlsZUJ1aWxkZXIuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCA2M2Q3YzczZWJhOGFmNmRhYjZmYjcxYjRlMTkxMTZmZGQxMThiMDNi
Li4yZTI4MjMyMzBlNzU5NmE4MTY5NWY4Y2Y1Zjk4NDQ5OTdjY2IwZjNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjQyLDYg
KzE2NDIsNyBAQAogCQk1M0M4Mjk4RTEzRDhEOTI3MDBERTJERUIgLyogUmVuZGVyRmxleGlibGVC
b3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQzgy
OThDMTNEOEQ5MjcwMERFMkRFQiAvKiBSZW5kZXJGbGV4aWJsZUJveC5oICovOyB9OwogCQk1NTBB
MEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4NUY2MDM5MDA3MzUzRDYg
LyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1RjYwMzkwMDczNTNENiAv
KiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU3MjhCRDlFMTYy
NTM2OTYwMEM0MEI1NiAvKiBTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ2llcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyOEJEOUQxNjI1MzY5NjAwQzQw
QjU2IC8qIFNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVzLmggKi87IH07CiAJCTU3M0QxMzQ3MTRD
RTM5RkYwMDU3QUJDQSAvKiBJbnNwZWN0b3JUeXBlQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzNEMTM0NTE0Q0UzOUZGMDA1N0FCQ0Eg
LyogSW5zcGVjdG9yVHlwZUJ1aWxkZXIuY3BwICovOyB9OwogCQk1NzU5ODk4NzE1QUFDMEIxMDAz
NTNDMzEgLyogSW1hZ2VJbm5lckVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3MjE0NUNDMTVBNTFEQTcwMEFEMTE5QyAvKiBJbWFnZUlubmVy
RWxlbWVudC5oICovOyB9OwogCQk1NzU5ODk4OTE1QUFDMEU5MDAzNTNDMzEgLyogSW1hZ2VJbm5l
ckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTcyMTQ1Q0IxNUE1MURBNzAwQUQxMTlDIC8qIEltYWdlSW5uZXJFbGVtZW50LmNwcCAqLzsg
fTsKQEAgLTg4NDAsNiArODg0MSw3IEBACiAJCTU1MEEwQkM4MDg1RjYwMzkwMDczNTNENiAvKiBR
dWFsaWZpZWROYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTU3MjE0NUNCMTVBNTFEQTcwMEFEMTE5QyAvKiBJ
bWFnZUlubmVyRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZUlubmVyRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3
MjE0NUNDMTVBNTFEQTcwMEFEMTE5QyAvKiBJbWFnZUlubmVyRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUlubmVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1NzI4QkQ5RDE2MjUzNjk2MDBDNDBCNTYgLyogU2libGluZ1RyYXZl
cnNhbFN0cmF0ZWdpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2libGlu
Z1RyYXZlcnNhbFN0cmF0ZWdpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcz
RDEzNDUxNENFMzlGRjAwNTdBQkNBIC8qIEluc3BlY3RvclR5cGVCdWlsZGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvclR5cGVCdWlsZGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTczRDEzNDYxNENFMzlGRjAwNTdBQkNBIC8q
IEluc3BlY3RvclR5cGVCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluc3BlY3RvclR5cGVCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3
NTk4OThFMTVBRUFCOTQwMDM1M0MzMSAvKiBJbWFnZUxvYWRlckNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUxvYWRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjEyNTksNiArMjEyNjEsNyBAQAogCQkJCUU0NEI0QkIyMTQxNjUw
RDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCAqLywKIAkJCQlBODBFNkNDQTBBMTk4OUNB
MDA3RkI4QzUgLyogU2hhZG93VmFsdWUuY3BwICovLAogCQkJCUE4MEU2Q0JFMEExOTg5Q0EwMDdG
QjhDNSAvKiBTaGFkb3dWYWx1ZS5oICovLAorCQkJCTU3MjhCRDlEMTYyNTM2OTYwMEM0MEI1NiAv
KiBTaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ2llcy5oICovLAogCQkJCUUxMDBFRTczMTU0NkVBQzEw
MEJBMTFEMSAvKiBTdHlsZUJ1aWxkZXIuY3BwICovLAogCQkJCUUxMDBFRTc0MTU0NkVBQzEwMEJB
MTFEMSAvKiBTdHlsZUJ1aWxkZXIuaCAqLywKIAkJCQkwRkY1MDI2RTEwMkJBOTY2MDA2NkYzOUEg
LyogU3R5bGVNZWRpYS5jcHAgKi8sCkBAIC0yNTU3OSw2ICsyNTU4Miw3IEBACiAJCQkJNkVBRjM0
MTAxNjEzODY5QTAwODU5NjI1IC8qIEV4Y2x1c2lvblBvbHlnb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTMxOTU1QTg4MTYwRDE5OTIwMDg1ODAyNSAvKiBSZW5kZXJTbmFwc2hvdHRlZFBsdWdJbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0QkM4NDMxNjFDRjA1QzAwNEQ1MkY0IC8qIFJlc291cmNl
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NzI4QkQ5RTE2MjUzNjk2MDBDNDBCNTYgLyog
U2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCBhY2Q0YjBhMzExNTdkNGQ1N2QzMzU3ZmUzOTRi
YjczZWYwMjE2NWE5Li44YjQ4NmI3ZDA3NjM1NzE3ZmRhMzllY2JlMjY4ZGUxYzM2ZmUyZDQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApAQCAtNTEsNiArNTEsNyBAQAog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNp
bmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlNpYmxpbmdUcmF2ZXJzYWxTdHJh
dGVnaWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIlRleHQuaCIK
ICNpbmNsdWRlICJYTGlua05hbWVzLmgiCkBAIC0xMzU4LDc5ICsxMzU5LDcgQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmRldGVybWluZVNlbGVjdG9yU2NvcGVzKGNvbnN0IENTU1NlbGVjdG9yTGlz
dCYgc2VsZWN0b3JMaXMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIGJvb2wgU2VsZWN0
b3JDaGVja2VyOjpET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OmlzRmlyc3RDaGlsZChFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIHJldHVybiAhZWxlbWVudC0+cHJldmlvdXNFbGVt
ZW50U2libGluZygpOwotfQotCi1pbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OkRPTVNpYmxp
bmdUcmF2ZXJzYWxTdHJhdGVneTo6aXNMYXN0Q2hpbGQoRWxlbWVudCogZWxlbWVudCkgY29uc3QK
LXsKLSAgICByZXR1cm4gIWVsZW1lbnQtPm5leHRFbGVtZW50U2libGluZygpOwotfQotCi1pbmxp
bmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6OkRPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneTo6aXNG
aXJzdE9mVHlwZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBj
b25zdAotewotICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZp
b3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3Vz
RWxlbWVudFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoc2libGluZy0+aGFzVGFnTmFtZSh0eXBl
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWlubGluZSBib29sIFNlbGVjdG9yQ2hlY2tlcjo6RE9NU2libGluZ1RyYXZlcnNhbFN0cmF0
ZWd5Ojppc0xhc3RPZlR5cGUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
dHlwZSkgY29uc3QKLXsKLSAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50
LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRF
bGVtZW50U2libGluZygpKSB7Ci0gICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotaW5saW5lIGludCBTZWxlY3RvckNoZWNrZXI6OkRPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVn
eTo6Y291bnRFbGVtZW50c0JlZm9yZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIGlu
dCBjb3VudCA9IDA7Ci0gICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+
cHJldmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzID0gc2libGlu
Zy0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzID8gcy0+Y2hpbGRJ
bmRleCgpIDogMDsKLSAgICAgICAgaWYgKGluZGV4KSB7Ci0gICAgICAgICAgICBjb3VudCArPSBp
bmRleDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNvdW50Kys7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwotfQotCi1pbmxpbmUgaW50IFNlbGVjdG9yQ2hlY2tl
cjo6RE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQmVmb3Jl
KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpIGNvbnN0Ci17Ci0g
ICAgaW50IGNvdW50ID0gMDsKLSAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVt
ZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5n
LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKHNpYmxpbmctPmhhc1Rh
Z05hbWUodHlwZSkpCi0gICAgICAgICAgICArK2NvdW50OwotICAgIH0KLQotICAgIHJldHVybiBj
b3VudDsKLX0KLQotaW5saW5lIGludCBTZWxlY3RvckNoZWNrZXI6OkRPTVNpYmxpbmdUcmF2ZXJz
YWxTdHJhdGVneTo6Y291bnRFbGVtZW50c0FmdGVyKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17
Ci0gICAgaW50IGNvdW50ID0gMDsKLSAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBl
bGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmct
Pm5leHRFbGVtZW50U2libGluZygpKQotICAgICAgICArK2NvdW50OwotCi0gICAgcmV0dXJuIGNv
dW50OwotfQotCi1pbmxpbmUgaW50IFNlbGVjdG9yQ2hlY2tlcjo6RE9NU2libGluZ1RyYXZlcnNh
bFN0cmF0ZWd5Ojpjb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoRWxlbWVudCogZWxlbWVudCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkgY29uc3QKLXsKLSAgICBpbnQgY291bnQgPSAwOwotICAg
IGZvciAoY29uc3QgRWxlbWVudCogc2libGluZyA9IGVsZW1lbnQtPm5leHRFbGVtZW50U2libGlu
ZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsK
LSAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCi0gICAgICAgICAgICArK2Nv
dW50OwotICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KK3RlbXBsYXRlCitib29sIFNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rvcihjb25zdCBTZWxlY3RvckNoZWNrZXI6OlNlbGVj
dG9yQ2hlY2tpbmdDb250ZXh0JiwgY29uc3QgU2hhZG93RE9NU2libGluZ1RyYXZlcnNhbFN0cmF0
ZWd5JikgY29uc3Q7CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAppbmRleCBj
ZDJjYjRjMzZiMTZmOTQ0ZTdlMmI4ODM0MTdiZmYxYmE4MjE1MTQ4Li4yMDcyZGI1YTIyYjIwMTE0
NjcwZjMxNjhhYTZiNmM5NDUzZTQ5NTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tl
ci5oCkBAIC04MSwxOSArODEsNiBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaGFzU2VsZWN0aW9u
UHNldWRvOwogICAgIH07CiAKLSAgICBjbGFzcyBET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgYm9vbCBpc0ZpcnN0Q2hpbGQoRWxlbWVudCopIGNvbnN0
OwotICAgICAgICBib29sIGlzTGFzdENoaWxkKEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgYm9v
bCBpc0ZpcnN0T2ZUeXBlKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7Ci0g
ICAgICAgIGJvb2wgaXNMYXN0T2ZUeXBlKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJikg
Y29uc3Q7Ci0KLSAgICAgICAgaW50IGNvdW50RWxlbWVudHNCZWZvcmUoRWxlbWVudCopIGNvbnN0
OwotICAgICAgICBpbnQgY291bnRFbGVtZW50c0FmdGVyKEVsZW1lbnQqKSBjb25zdDsKLSAgICAg
ICAgaW50IGNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUoRWxlbWVudCosIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBjb25zdDsKLSAgICAgICAgaW50IGNvdW50RWxlbWVudHNPZlR5cGVBZnRlcihFbGVt
ZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwotICAgIH07Ci0KICAgICBib29sIGNo
ZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgYm9vbCBpc0Zhc3RDaGVja2FibGVT
ZWxlY3RvciA9IGZhbHNlKSBjb25zdDsKICAgICBTZWxlY3Rvck1hdGNoIGNoZWNrU2VsZWN0b3Io
Y29uc3QgU2VsZWN0b3JDaGVja2luZ0NvbnRleHQmLCBQc2V1ZG9JZCYsIGJvb2wmIGhhc1Vua25v
d25Qc2V1ZG9FbGVtZW50cykgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2libGluZ1Ry
YXZlcnNhbFN0cmF0ZWd5PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NpYmxpbmdU
cmF2ZXJzYWxTdHJhdGVnaWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2libGluZ1RyYXZlcnNh
bFN0cmF0ZWdpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTgzZTZjMTMwYzk3YmRmNTQwODRiMzdjNDQwMTFm
YjY3NDI0NWJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NpYmxpbmdU
cmF2ZXJzYWxTdHJhdGVnaWVzLmgKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAw
NC0yMDA1IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBOaWNob2xhcyBTaGFua3MgKHdlYmtpdEBuaWNrc2hhbmtzLmNv
bSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIENvZGUgQXVy
b3JhIEZvcnVtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBT
aWJsaW5nVHJhdmVyc2FsU3RyYXRlZ2llc19oCisjZGVmaW5lIFNpYmxpbmdUcmF2ZXJzYWxTdHJh
dGVnaWVzX2gKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5o
IgorCisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RydWN0IERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneSB7CisgICAgYm9vbCBpc0ZpcnN0
Q2hpbGQoRWxlbWVudCopIGNvbnN0OworICAgIGJvb2wgaXNMYXN0Q2hpbGQoRWxlbWVudCopIGNv
bnN0OworICAgIGJvb2wgaXNGaXJzdE9mVHlwZShFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIGNvbnN0OworICAgIGJvb2wgaXNMYXN0T2ZUeXBlKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZp
ZWROYW1lJikgY29uc3Q7CisKKyAgICBpbnQgY291bnRFbGVtZW50c0JlZm9yZShFbGVtZW50Kikg
Y29uc3Q7CisgICAgaW50IGNvdW50RWxlbWVudHNBZnRlcihFbGVtZW50KikgY29uc3Q7CisgICAg
aW50IGNvdW50RWxlbWVudHNPZlR5cGVCZWZvcmUoRWxlbWVudCosIGNvbnN0IFF1YWxpZmllZE5h
bWUmKSBjb25zdDsKKyAgICBpbnQgY291bnRFbGVtZW50c09mVHlwZUFmdGVyKEVsZW1lbnQqLCBj
b25zdCBRdWFsaWZpZWROYW1lJikgY29uc3Q7Cit9OworCitpbmxpbmUgYm9vbCBET01TaWJsaW5n
VHJhdmVyc2FsU3RyYXRlZ3k6OmlzRmlyc3RDaGlsZChFbGVtZW50KiBlbGVtZW50KSBjb25zdAor
eworICAgIHJldHVybiAhZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpOworfQorCitp
bmxpbmUgYm9vbCBET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OmlzTGFzdENoaWxkKEVsZW1l
bnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuICFlbGVtZW50LT5uZXh0RWxlbWVudFNp
YmxpbmcoKTsKK30KKworaW5saW5lIGJvb2wgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5Ojpp
c0ZpcnN0T2ZUeXBlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUp
IGNvbnN0Cit7CisgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gZWxlbWVudC0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlv
dXNFbGVtZW50U2libGluZygpKSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5
cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworaW5saW5lIGJvb2wgRE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5Ojppc0xhc3RPZlR5
cGUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkgY29uc3QKK3sK
KyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNp
YmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVtZW50U2libGluZygp
KSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGludCBE
T01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNCZWZvcmUoRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoY29uc3QgRWxl
bWVudCogc2libGluZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGlu
Zzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAgICAg
ICBSZW5kZXJTdHlsZSogcyA9IHNpYmxpbmctPnJlbmRlclN0eWxlKCk7CisgICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gcyA/IHMtPmNoaWxkSW5kZXgoKSA6IDA7CisgICAgICAgIGlmIChpbmRleCkg
eworICAgICAgICAgICAgY291bnQgKz0gaW5kZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjb3VudCsrOworICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKwor
aW5saW5lIGludCBET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNPZlR5
cGVCZWZvcmUoRWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHlwZSkgY29u
c3QKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoY29uc3QgRWxlbWVudCogc2libGlu
ZyA9IGVsZW1lbnQtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9
IHNpYmxpbmctPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoc2libGlu
Zy0+aGFzVGFnTmFtZSh0eXBlKSkKKyAgICAgICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAg
cmV0dXJuIGNvdW50OworfQorCitpbmxpbmUgaW50IERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVn
eTo6Y291bnRFbGVtZW50c0FmdGVyKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgaW50
IGNvdW50ID0gMDsKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxpbmcgPSBlbGVtZW50LT5u
ZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPm5leHRFbGVt
ZW50U2libGluZygpKQorICAgICAgICArK2NvdW50OworCisgICAgcmV0dXJuIGNvdW50OworfQor
CitpbmxpbmUgaW50IERPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneTo6Y291bnRFbGVtZW50c09m
VHlwZUFmdGVyKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpIGNv
bnN0Cit7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKGNvbnN0IEVsZW1lbnQqIHNpYmxp
bmcgPSBlbGVtZW50LT5uZXh0RWxlbWVudFNpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNp
YmxpbmctPm5leHRFbGVtZW50U2libGluZygpKSB7CisgICAgICAgIGlmIChzaWJsaW5nLT5oYXNU
YWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgKytjb3VudDsKKyAgICB9CisKKyAgICByZXR1cm4g
Y291bnQ7Cit9CisKK3N0cnVjdCBTaGFkb3dET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3kgewor
ICAgIFNoYWRvd0RPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneShjb25zdCBWZWN0b3I8UmVmUHRy
PE5vZGU+ID4mIHNpYmxpbmdzLCBpbnQgbnRoKQorICAgICAgICA6IG1fc2libGluZ3Moc2libGlu
Z3MpCisgICAgICAgICwgbV9udGgobnRoKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzRmly
c3RDaGlsZChFbGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBpc0xhc3RDaGlsZChFbGVtZW50Kikg
Y29uc3Q7CisgICAgYm9vbCBpc0ZpcnN0T2ZUeXBlKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWRO
YW1lJikgY29uc3Q7CisgICAgYm9vbCBpc0xhc3RPZlR5cGUoRWxlbWVudCosIGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBjb25zdDsKKworICAgIGludCBjb3VudEVsZW1lbnRzQmVmb3JlKEVsZW1lbnQq
KSBjb25zdDsKKyAgICBpbnQgY291bnRFbGVtZW50c0FmdGVyKEVsZW1lbnQqKSBjb25zdDsKKyAg
ICBpbnQgY291bnRFbGVtZW50c09mVHlwZUJlZm9yZShFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVk
TmFtZSYpIGNvbnN0OworICAgIGludCBjb3VudEVsZW1lbnRzT2ZUeXBlQWZ0ZXIoRWxlbWVudCos
IGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBWZWN0b3I8UmVm
UHRyPE5vZGU+ID4gbV9zaWJsaW5nczsKKyAgICBpbnQgbV9udGg7Cit9OworCitpbmxpbmUgYm9v
bCBTaGFkb3dET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OmlzRmlyc3RDaGlsZChFbGVtZW50
KiBlbGVtZW50KSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKyAgICAKKyAg
ICBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzID0gbV9zaWJsaW5nczsKKyAg
ICBBU1NFUlQoZWxlbWVudCA9PSB0b0VsZW1lbnQoc2libGluZ3NbbV9udGhdLmdldCgpKSk7CisK
KyAgICBmb3IgKGludCBpID0gbV9udGggLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAo
c2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJv
b2wgU2hhZG93RE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5Ojppc0xhc3RDaGlsZChFbGVtZW50
KiBlbGVtZW50KSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKworICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBtX3NpYmxpbmdzOworICAgIEFT
U0VSVChlbGVtZW50ID09IHRvRWxlbWVudChzaWJsaW5nc1ttX250aF0uZ2V0KCkpKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSBtX250aCArIDE7IGkgPCBzaWJsaW5ncy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAoc2libGluZ3NbaV0gJiYgc2libGluZ3NbaV0tPmlzRWxlbWVudE5vZGUoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworaW5saW5lIGJvb2wgU2hhZG93RE9NU2libGluZ1RyYXZlcnNhbFN0cmF0ZWd5Ojppc0ZpcnN0
T2ZUeXBlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpIGNvbnN0
Cit7CisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxOb2RlPiA+JiBzaWJsaW5ncyA9IG1fc2libGluZ3M7CisgICAgQVNTRVJUKGVsZW1lbnQgPT0g
dG9FbGVtZW50KHNpYmxpbmdzW21fbnRoXS5nZXQoKSkpOworCisgICAgZm9yIChpbnQgaSA9IG1f
bnRoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmdzW2ldICYmIHNpYmxp
bmdzW2ldLT5pc0VsZW1lbnROb2RlKCkgJiYgc2libGluZ3NbaV0tPmhhc1RhZ05hbWUodHlwZSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2lubGluZSBib29sIFNoYWRvd0RPTVNpYmxpbmdUcmF2ZXJzYWxTdHJhdGVneTo6aXNMYXN0
T2ZUeXBlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpIGNvbnN0
Cit7CisgICAgVU5VU0VEX1BBUkFNKGVsZW1lbnQpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxOb2RlPiA+JiBzaWJsaW5ncyA9IG1fc2libGluZ3M7CisgICAgQVNTRVJUKGVsZW1lbnQgPT0g
dG9FbGVtZW50KHNpYmxpbmdzW21fbnRoXS5nZXQoKSkpOworCisgICAgZm9yIChzaXplX3QgaSA9
IG1fbnRoICsgMTsgaSA8IHNpYmxpbmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChzaWJs
aW5nc1tpXSAmJiBzaWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9kZSgpICYmIHNpYmxpbmdzW2ldLT5o
YXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiB0cnVlOworfQorCitpbmxpbmUgaW50IFNoYWRvd0RPTVNpYmxpbmdUcmF2ZXJzYWxT
dHJhdGVneTo6Y291bnRFbGVtZW50c0JlZm9yZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAorewor
ICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9k
ZT4gPiYgc2libGluZ3MgPSBtX3NpYmxpbmdzOworICAgIEFTU0VSVChlbGVtZW50ID09IHRvRWxl
bWVudChzaWJsaW5nc1ttX250aF0uZ2V0KCkpKTsKKworICAgIGludCBjb3VudCA9IDA7CisgICAg
Zm9yIChpbnQgaSA9IG1fbnRoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKHNpYmxp
bmdzW2ldICYmIHNpYmxpbmdzW2ldLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICArK2Nv
dW50OworICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworaW5saW5lIGludCBTaGFkb3dE
T01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNBZnRlcihFbGVtZW50KiBl
bGVtZW50KSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKworICAgIGNvbnN0
IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBtX3NpYmxpbmdzOworICAgIEFTU0VS
VChlbGVtZW50ID09IHRvRWxlbWVudChzaWJsaW5nc1ttX250aF0uZ2V0KCkpKTsKKworICAgIGlu
dCBjb3VudCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IG1fbnRoICsgMTsgaSA8IHNpYmxpbmdz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJsaW5nc1tpXS0+
aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgcmV0dXJuICsrY291bnQ7CisgICAgfQorCisg
ICAgcmV0dXJuIGNvdW50OworfQorCitpbmxpbmUgaW50IFNoYWRvd0RPTVNpYmxpbmdUcmF2ZXJz
YWxTdHJhdGVneTo6Y291bnRFbGVtZW50c09mVHlwZUJlZm9yZShFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShlbGVt
ZW50KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiYgc2libGluZ3MgPSBtX3Np
YmxpbmdzOworICAgIEFTU0VSVChlbGVtZW50ID09IHRvRWxlbWVudChzaWJsaW5nc1ttX250aF0u
Z2V0KCkpKTsKKworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChpbnQgaSA9IG1fbnRoIC0g
MTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgaWYgKHNpYmxpbmdzW2ldICYmIHNpYmxpbmdzW2ld
LT5pc0VsZW1lbnROb2RlKCkgJiYgc2libGluZ3NbaV0tPmhhc1RhZ05hbWUodHlwZSkpCisgICAg
ICAgICAgICArK2NvdW50OworICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKworaW5saW5l
IGludCBTaGFkb3dET01TaWJsaW5nVHJhdmVyc2FsU3RyYXRlZ3k6OmNvdW50RWxlbWVudHNPZlR5
cGVBZnRlcihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0eXBlKSBjb25z
dAoreworICAgIFVOVVNFRF9QQVJBTShlbGVtZW50KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Tm9kZT4gPiYgc2libGluZ3MgPSBtX3NpYmxpbmdzOworICAgIEFTU0VSVChlbGVtZW50ID09
IHRvRWxlbWVudChzaWJsaW5nc1ttX250aF0uZ2V0KCkpKTsKKworICAgIGludCBjb3VudCA9IDA7
CisgICAgZm9yIChzaXplX3QgaSA9IG1fbnRoICsgMTsgaSA8IHNpYmxpbmdzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmIChzaWJsaW5nc1tpXSAmJiBzaWJsaW5nc1tpXS0+aXNFbGVtZW50Tm9k
ZSgpICYmIHNpYmxpbmdzW2ldLT5oYXNUYWdOYW1lKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJu
ICsrY291bnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDY2OTY4MWMxZThlNzk1YzIzZmFl
MzkwMGI0NGQ2MjkyZWMxOTBmMDAuLjM4NTk2MjQ1MzViYjk5MDZmZDIxYjRjMDY0Y2EyZDNhZjA4
ZWEyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTEwNyw2ICsxMDcs
NyBAQAogI2luY2x1ZGUgIlNoYWRvd0RhdGEuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAj
aW5jbHVkZSAiU2hhZG93VmFsdWUuaCIKKyNpbmNsdWRlICJTaWJsaW5nVHJhdmVyc2FsU3RyYXRl
Z2llcy5oIgogI2luY2x1ZGUgIlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJT
dHlsZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcAppbmRleCAwNzZh
NzIzYzhhOTFhZmU5MzE4ODc2NTg5NGNlNzczNmRjMzY2YTAwLi42NzQ4YjU5OTFkYjY3ZmJiMzVk
ZWM3OWYzNTM0ODZhNGRiZDdkZWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAKQEAgLTExNywxMCArMTE3LDEwIEBAIHZvaWQgQ29u
dGVudERpc3RyaWJ1dG9yOjpkaXN0cmlidXRlU2VsZWN0aW9uc1RvKEluc2VydGlvblBvaW50KiBp
bnNlcnRpb25Qb2ludCwKICAgICAgICAgaWYgKGRpc3RyaWJ1dGVkW2ldKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgTm9kZSogY2hpbGQgPSBwb29sW2ldLmdldCgpOwotICAgICAg
ICBpZiAoIXF1ZXJ5Lm1hdGNoZXMoY2hpbGQpKQorICAgICAgICBpZiAoIXF1ZXJ5Lm1hdGNoZXMo
cG9vbCwgaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBOb2RlKiBjaGlsZCA9
IHBvb2xbaV0uZ2V0KCk7CiAgICAgICAgIGRpc3RyaWJ1dGlvbi5hcHBlbmQoY2hpbGQpOwogICAg
ICAgICBtX25vZGVUb0luc2VydGlvblBvaW50LmFkZChjaGlsZCwgaW5zZXJ0aW9uUG9pbnQpOwog
ICAgICAgICBkaXN0cmlidXRlZFtpXSA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5jcHAKaW5kZXggZjEyYzU5OTI1ZjdjOTMy
NGY2ZmVmY2JlYjIyMzU4OTU3ZGYyMTFmMy4uMGE2ZWMzMmVlZTVmZDAwYjhlOTViNDMzZWRkZjk0
OTczNmIxNGVlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVu
dFNlbGVjdG9yUXVlcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRl
bnRTZWxlY3RvclF1ZXJ5LmNwcApAQCAtMzAsMTYgKzMwLDQ1IEBACiAjaW5jbHVkZSAiQ1NTUGFy
c2VyLmgiCiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3JMaXN0LmgiCiAjaW5jbHVkZSAiSW5zZXJ0aW9u
UG9pbnQuaCIKKyNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRlICJTaGFkb3dS
b290LmgiCisjaW5jbHVkZSAiU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitDb250ZW50U2VsZWN0b3JDaGVja2VyOjpDb250ZW50U2VsZWN0b3JD
aGVja2VyKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBzdHJpY3RQYXJzaW5nKQorICAgIDogbV9z
ZWxlY3RvckNoZWNrZXIoZG9jdW1lbnQsIHN0cmljdFBhcnNpbmcpCit7CisgICAgbV9zZWxlY3Rv
ckNoZWNrZXIuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7Cit9CisK
K2Jvb2wgQ29udGVudFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tDb250ZW50U2VsZWN0b3IoQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBWZWN0b3I8UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzLCBp
bnQgbnRoKSBjb25zdAoreworICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0Nv
bnRleHQgY29udGV4dChzZWxlY3RvciwgdG9FbGVtZW50KHNpYmxpbmdzW250aF0uZ2V0KCkpLCBT
ZWxlY3RvckNoZWNrZXI6OlZpc2l0ZWRNYXRjaEVuYWJsZWQpOworICAgIFNoYWRvd0RPTVNpYmxp
bmdUcmF2ZXJzYWxTdHJhdGVneSBzdHJhdGVneShzaWJsaW5ncywgbnRoKTsKKyAgICByZXR1cm4g
bV9zZWxlY3RvckNoZWNrZXIuY2hlY2tPbmVTZWxlY3Rvcihjb250ZXh0LCBzdHJhdGVneSk7Cit9
CisKK3ZvaWQgQ29udGVudFNlbGVjdG9yRGF0YUxpc3Q6OmluaXRpYWxpemUoY29uc3QgQ1NTU2Vs
ZWN0b3JMaXN0JiBzZWxlY3RvcnMpCit7CisgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3Ig
PSBzZWxlY3RvcnMuZmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0
OjpuZXh0KHNlbGVjdG9yKSkKKyAgICAgICAgbV9zZWxlY3RvcnMuYXBwZW5kKHNlbGVjdG9yKTsK
K30KKworYm9vbCBDb250ZW50U2VsZWN0b3JEYXRhTGlzdDo6bWF0Y2hlcyhjb25zdCBDb250ZW50
U2VsZWN0b3JDaGVja2VyJiBzZWxlY3RvckNoZWNrZXIsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Tm9k
ZT4gPiYgc2libGluZ3MsIGludCBudGgpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgc2VsZWN0b3JD
b3VudCA9IG1fc2VsZWN0b3JzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2VsZWN0b3JDb3VudDsgKytpKSB7CisgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIuY2hlY2tD
b250ZW50U2VsZWN0b3IobV9zZWxlY3RvcnNbaV0sIHNpYmxpbmdzLCBudGgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogQ29udGVudFNl
bGVjdG9yUXVlcnk6OkNvbnRlbnRTZWxlY3RvclF1ZXJ5KGNvbnN0IEluc2VydGlvblBvaW50KiBp
bnNlcnRpb25Qb2ludCkKICAgICA6IG1faW5zZXJ0aW9uUG9pbnQoaW5zZXJ0aW9uUG9pbnQpCiAg
ICAgLCBtX3NlbGVjdG9yQ2hlY2tlcihpbnNlcnRpb25Qb2ludC0+ZG9jdW1lbnQoKSwgIWluc2Vy
dGlvblBvaW50LT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkKIHsKLSAgICBtX3NlbGVjdG9y
Q2hlY2tlci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKTsKLQogICAg
IGlmIChpbnNlcnRpb25Qb2ludC0+c2VsZWN0KCkuaXNOdWxsKCkgfHwgaW5zZXJ0aW9uUG9pbnQt
PnNlbGVjdCgpLmlzRW1wdHkoKSkgewogICAgICAgICBtX2lzVmFsaWRTZWxlY3RvciA9IHRydWU7
CiAgICAgICAgIHJldHVybjsKQEAgLTU4LDEzICs4NywxMCBAQCBib29sIENvbnRlbnRTZWxlY3Rv
clF1ZXJ5Ojppc1ZhbGlkU2VsZWN0b3IoKSBjb25zdAogICAgIHJldHVybiBtX2lzVmFsaWRTZWxl
Y3RvcjsKIH0KIAotYm9vbCBDb250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyhOb2RlKiBub2Rl
KSBjb25zdAorYm9vbCBDb250ZW50U2VsZWN0b3JRdWVyeTo6bWF0Y2hlcyhjb25zdCBWZWN0b3I8
UmVmUHRyPE5vZGU+ID4mIHNpYmxpbmdzLCBpbnQgbnRoKSBjb25zdAogeworICAgIE5vZGUqIG5v
ZGUgPSBzaWJsaW5nc1tudGhdLmdldCgpOwogICAgIEFTU0VSVChub2RlKTsKLSAgICBpZiAoIW5v
ZGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChub2RlLT5wYXJlbnROb2Rl
KCkgPT0gbV9pbnNlcnRpb25Qb2ludC0+c2hhZG93Um9vdCgpLT5ob3N0KCkpOwogCiAgICAgaWYg
KG1faW5zZXJ0aW9uUG9pbnQtPnNlbGVjdCgpLmlzTnVsbCgpIHx8IG1faW5zZXJ0aW9uUG9pbnQt
PnNlbGVjdCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03NSw3ICsxMDEs
NyBAQCBib29sIENvbnRlbnRTZWxlY3RvclF1ZXJ5OjptYXRjaGVzKE5vZGUqIG5vZGUpIGNvbnN0
CiAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJldHVybiBtX3NlbGVjdG9ycy5tYXRjaGVzKG1fc2VsZWN0b3JDaGVja2VyLCB0b0Vs
ZW1lbnQobm9kZSkpOworICAgIHJldHVybiBtX3NlbGVjdG9ycy5tYXRjaGVzKG1fc2VsZWN0b3JD
aGVja2VyLCBzaWJsaW5ncywgbnRoKTsKIH0KIAogc3RhdGljIGJvb2wgdmFsaWRhdGVTdWJTZWxl
Y3RvcihDU1NTZWxlY3Rvciogc2VsZWN0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9Db250ZW50U2VsZWN0b3JRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvQ29udGVudFNlbGVjdG9yUXVlcnkuaAppbmRleCA5NGZhM2VmY2NmM2Y5ZDcyZTk3NDc3
NWUyZDJkMzE0MGQxM2NiMzRlLi4yYzcxMGE1ODUyZTkyZDc2ODgyYzdjMjA3NTBiZmQyNmRhMmFh
MDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50U2VsZWN0
b3JRdWVyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnRTZWxlY3Rv
clF1ZXJ5LmgKQEAgLTQzLDI1ICs0Myw0MSBAQCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIE5vZGU7
CiBjbGFzcyBJbnNlcnRpb25Qb2ludDsKIAorY2xhc3MgQ29udGVudFNlbGVjdG9yQ2hlY2tlciB7
CitwdWJsaWM6CisgICAgQ29udGVudFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCosIGJvb2wgc3Ry
aWN0UGFyc2luZyk7CisKKyAgICBib29sIGNoZWNrQ29udGVudFNlbGVjdG9yKENTU1NlbGVjdG9y
KiwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBzaWJsaW5ncywgaW50IG50aE5vZGUpIGNv
bnN0OworcHJpdmF0ZToKKyAgICBTZWxlY3RvckNoZWNrZXIgbV9zZWxlY3RvckNoZWNrZXI7Cit9
OworCitjbGFzcyBDb250ZW50U2VsZWN0b3JEYXRhTGlzdCB7CitwdWJsaWM6CisgICAgdm9pZCBp
bml0aWFsaXplKGNvbnN0IENTU1NlbGVjdG9yTGlzdCYpOworICAgIGJvb2wgbWF0Y2hlcyhjb25z
dCBDb250ZW50U2VsZWN0b3JDaGVja2VyJiwgY29uc3QgVmVjdG9yPFJlZlB0cjxOb2RlPiA+JiBz
aWJsaW5ncywgaW50IG50aE5vZGUpIGNvbnN0OworCitwcml2YXRlOgorICAgIFZlY3RvcjxDU1NT
ZWxlY3Rvcio+IG1fc2VsZWN0b3JzOworfTsKKwogY2xhc3MgQ29udGVudFNlbGVjdG9yUXVlcnkg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnRlbnRTZWxlY3RvclF1ZXJ5KTsKIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBDb250ZW50U2VsZWN0b3JRdWVyeShjb25zdCBJbnNlcnRpb25Qb2lu
dCopOwogCiAgICAgYm9vbCBpc1ZhbGlkU2VsZWN0b3IoKSBjb25zdDsKLSAgICBib29sIG1hdGNo
ZXMoTm9kZSopIGNvbnN0OworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBWZWN0b3I8UmVmUHRyPE5v
ZGU+ID4mIHNpYmxpbmdzLCBpbnQgbnRoTm9kZSkgY29uc3Q7CiBwcml2YXRlOgogICAgIGJvb2wg
dmFsaWRhdGVTZWxlY3Rvckxpc3QoKTsKIAogICAgIGNvbnN0IEluc2VydGlvblBvaW50KiBtX2lu
c2VydGlvblBvaW50OwotICAgIFNlbGVjdG9yRGF0YUxpc3QgbV9zZWxlY3RvcnM7CisgICAgQ29u
dGVudFNlbGVjdG9yRGF0YUxpc3QgbV9zZWxlY3RvcnM7CiAgICAgQ1NTU2VsZWN0b3JMaXN0IG1f
c2VsZWN0b3JMaXN0OwotICAgIFNlbGVjdG9yQ2hlY2tlciBtX3NlbGVjdG9yQ2hlY2tlcjsKKyAg
ICBDb250ZW50U2VsZWN0b3JDaGVja2VyIG1fc2VsZWN0b3JDaGVja2VyOwogICAgIGJvb2wgbV9p
c1ZhbGlkU2VsZWN0b3I7CiB9OwogCiB9CiAKLQotCiAjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>