<?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>88606</bug_id>
          
          <creation_ts>2012-06-07 19:09:30 -0700</creation_ts>
          <short_desc>[Shadow DOM] Needs @host rule for ShadowDOM styling</short_desc>
          <delta_ts>2012-11-19 01:35:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</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>87805</dependson>
    
    <dependson>97184</dependson>
    
    <dependson>100203</dependson>
    
    <dependson>100246</dependson>
    
    <dependson>100287</dependson>
    
    <dependson>100455</dependson>
          <blocked>97282</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Takashi Sakamoto">tasak</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>d-r</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>shinyak</cc>
    
    <cc>syoichi</cc>
    
    <cc>tasak</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>644215</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-06-07 19:09:30 -0700</bug_when>
    <thetext>http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#selecting-nodes-distributed-to-insertion-points
&gt; The :host pseudoclass represents the shadow host of a shadow DOM subtree.
&gt; If the contextual reference element set is empty or includes elements outside of a shadow DOM subtree, :host matches northing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681850</commentid>
    <comment_count>1</comment_count>
      <attachid>155250</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-07-30 04:16:35 -0700</bug_when>
    <thetext>Created attachment 155250
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681875</commentid>
    <comment_count>2</comment_count>
      <attachid>155250</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-30 04:47:09 -0700</bug_when>
    <thetext>Comment on attachment 155250
WIP

Attachment 155250 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13389318</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681918</commentid>
    <comment_count>3</comment_count>
      <attachid>155250</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-30 05:42:32 -0700</bug_when>
    <thetext>Comment on attachment 155250
WIP

Attachment 155250 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13381765</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682720</commentid>
    <comment_count>4</comment_count>
      <attachid>155438</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-07-30 22:19:38 -0700</bug_when>
    <thetext>Created attachment 155438
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682822</commentid>
    <comment_count>5</comment_count>
      <attachid>155438</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-31 01:33:57 -0700</bug_when>
    <thetext>Comment on attachment 155438
WIP

Attachment 155438 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13400343</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682853</commentid>
    <comment_count>6</comment_count>
      <attachid>155438</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-31 02:34:07 -0700</bug_when>
    <thetext>Comment on attachment 155438
WIP

Attachment 155438 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13396580</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682858</commentid>
    <comment_count>7</comment_count>
      <attachid>155438</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-31 02:37:06 -0700</bug_when>
    <thetext>Comment on attachment 155438
WIP

Attachment 155438 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13393566</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682873</commentid>
    <comment_count>8</comment_count>
      <attachid>155477</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-07-31 02:45:21 -0700</bug_when>
    <thetext>Created attachment 155477
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683294</commentid>
    <comment_count>9</comment_count>
      <attachid>155477</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-07-31 11:29:09 -0700</bug_when>
    <thetext>Comment on attachment 155477
WIP

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

There are several patches in here, to be landed separately. It&apos;s fine to work on this as one patch for now, however.

ProTip: don&apos;t fill out the ChangeLog until you&apos;re ready to start landing. Otherwise, you&apos;ll end up rewriting it many times :)

&gt; Source/WebCore/html/HTMLStyleElement.cpp:155
&gt; +    if (hasHostRule())
&gt; +        if (ShadowRoot* sr = shadowRoot())
&gt; +            if (Element* host = sr-&gt;host()) {
&gt; +                host-&gt;registerScopedHTMLStyleChild();
&gt; +                isHostRuleRegistered = true;
&gt; +            }

Wild to see this here. Why can&apos;t we do this when we&apos;re adding rules in StyleResolver, like all other machinery in CSS does?

&gt; Source/WebCore/html/HTMLStyleElement.cpp:185
&gt; +        if (m_scopedStyleRegistrationState == RegisteredInShadowRootWithHostRule || m_scopedStyleRegistrationState == RegisteredAsScopedWithHostRule)
&gt; +            if (ShadowRoot* sr = shadowRoot())
&gt; +                if (Element* host = sr-&gt;host())
&gt; +                    host-&gt;unregisterScopedHTMLStyleChild();

You won&apos;t need any of these when you move @host accounting in styleresolver.

&gt; Source/WebCore/html/HTMLStyleElement.cpp:200
&gt; +bool HTMLStyleElement::hasHostRule() const
&gt; +{
&gt; +    if (CSSStyleSheet* styleSheet = const_cast&lt;HTMLStyleElement*&gt;(this)-&gt;sheet())
&gt; +        return styleSheet-&gt;contents()-&gt;hasHostRule();
&gt; +    return false;
&gt; +}

Or these.

&gt; Source/WebCore/html/shadow/HTMLShadowElement.h:56
&gt; +    bool m_registeredWithShadowRoot;

It seems we&apos;re building an extra set of machinery for something that already exists. We already _know_ which shadow trees are rendered or not by the time we&apos;ve created the composed tree, which happens before style resolution. Please ask morrita@/hayato@ for guidance here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683980</commentid>
    <comment_count>10</comment_count>
      <attachid>155752</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-08-01 01:41:50 -0700</bug_when>
    <thetext>Created attachment 155752
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683986</commentid>
    <comment_count>11</comment_count>
      <attachid>155754</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-08-01 01:52:58 -0700</bug_when>
    <thetext>Created attachment 155754
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684042</commentid>
    <comment_count>12</comment_count>
      <attachid>155769</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-08-01 03:11:30 -0700</bug_when>
    <thetext>Created attachment 155769
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>684048</commentid>
    <comment_count>13</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-08-01 03:21:36 -0700</bug_when>
    <thetext>Thank you for reviewing my WIP patch.

(In reply to comment #9)
&gt; (From update of attachment 155477 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=155477&amp;action=review
&gt; 
&gt; There are several patches in here, to be landed separately. It&apos;s fine to work on this as one patch for now, however.
&gt; 
&gt; ProTip: don&apos;t fill out the ChangeLog until you&apos;re ready to start landing. Otherwise, you&apos;ll end up rewriting it many times :)

I see. I recreated ChangeLog and removed all details about my patch.

&gt; &gt; Source/WebCore/html/HTMLStyleElement.cpp:155
&gt; &gt; +    if (hasHostRule())
&gt; &gt; +        if (ShadowRoot* sr = shadowRoot())
&gt; &gt; +            if (Element* host = sr-&gt;host()) {
&gt; &gt; +                host-&gt;registerScopedHTMLStyleChild();
&gt; &gt; +                isHostRuleRegistered = true;
&gt; &gt; +            }
&gt; 
&gt; Wild to see this here. Why can&apos;t we do this when we&apos;re adding rules in StyleResolver, like all other machinery in CSS does?
&gt; 
&gt; &gt; Source/WebCore/html/HTMLStyleElement.cpp:185
&gt; &gt; +        if (m_scopedStyleRegistrationState == RegisteredInShadowRootWithHostRule || m_scopedStyleRegistrationState == RegisteredAsScopedWithHostRule)
&gt; &gt; +            if (ShadowRoot* sr = shadowRoot())
&gt; &gt; +                if (Element* host = sr-&gt;host())
&gt; &gt; +                    host-&gt;unregisterScopedHTMLStyleChild();
&gt; 
&gt; You won&apos;t need any of these when you move @host accounting in styleresolver.
&gt; 
&gt; &gt; Source/WebCore/html/HTMLStyleElement.cpp:200
&gt; &gt; +bool HTMLStyleElement::hasHostRule() const
&gt; &gt; +{
&gt; &gt; +    if (CSSStyleSheet* styleSheet = const_cast&lt;HTMLStyleElement*&gt;(this)-&gt;sheet())
&gt; &gt; +        return styleSheet-&gt;contents()-&gt;hasHostRule();
&gt; &gt; +    return false;
&gt; &gt; +}
&gt; 
&gt; Or these.

I see. As I decided to create the own matchHostRules or collectMatchingRules, I don&apos;t need to use m_scopedAuthorStyles now.
I removed these codes and modified StyleResolver, i.e. adding m_atHostRules to class StyleResolver, not class RuleSet.

&gt; 
&gt; &gt; Source/WebCore/html/shadow/HTMLShadowElement.h:56
&gt; &gt; +    bool m_registeredWithShadowRoot;
&gt; 
&gt; It seems we&apos;re building an extra set of machinery for something that already exists. We already _know_ which shadow trees are rendered or not by the time we&apos;ve created the composed tree, which happens before style resolution. Please ask morrita@/hayato@ for guidance here.

I asked hayato-san and he said that it is possible to find insertion points when distributed nodes are given. However, when shadow roots are given, there are no direct way to find whether there are any &lt;shadow&gt; in the shadow DOM subtrees.
He said, m_nodeToInsertionPoint&apos;s values() are insertion points. So, by using the following way:
(1) obtaining treescope of each m_nodeToInsertionPoint value and
(2) comparing the treescope with the given shadow root.
we can find active insertion points.

Is it better to try hayato-san&apos;s way and to file a new bug: &quot;improve performance of finding &lt;shadow&gt;&quot;?

Best regards,
Takashi Sakamoto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688998</commentid>
    <comment_count>14</comment_count>
      <attachid>156902</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-08-07 03:19:15 -0700</bug_when>
    <thetext>Created attachment 156902
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700506</commentid>
    <comment_count>15</comment_count>
      <attachid>159626</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-08-20 23:44:41 -0700</bug_when>
    <thetext>Created attachment 159626
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702396</commentid>
    <comment_count>16</comment_count>
      <attachid>159626</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-08-22 15:06:44 -0700</bug_when>
    <thetext>Comment on attachment 159626
Patch

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

&gt; Source/WebCore/css/StyleResolver.cpp:1046
&gt; +    for (ShadowRoot* shadowRoot = shadow-&gt;youngestShadowRoot(); shadowRoot; shadowRoot = shadowRoot-&gt;olderShadowRoot()) {
&gt; +        if (atHostRuleSetForScope(shadowRoot))
&gt; +            return true;
&gt; +        if (!shadowRoot-&gt;hasShadowInsertionPoint())
&gt; +            break;
&gt; +    }

Can we cache this value on ElementShadow?

&gt; Source/WebCore/css/StyleResolver.cpp:1069
&gt; +    Vector&lt;RuleSet*, 16&gt; matchedRules; 
&gt; +    for (ShadowRoot* shadowRoot = shadow-&gt;youngestShadowRoot(); shadowRoot; shadowRoot = shadowRoot-&gt;olderShadowRoot()) { 
&gt; +        if (RuleSet* ruleSet = atHostRuleSetForScope(shadowRoot))
&gt; +            matchedRules.append(ruleSet);
&gt; +        if (!shadowRoot-&gt;hasShadowInsertionPoint())
&gt; +            break;
&gt; +    }
&gt; +    if (matchedRules.isEmpty())
&gt; +        return;

Ah, this could be on ElementShadow, just as I suggested above. Basically, maintain a list of activeShadowRoots (the interesting bit is that you only need to store one value, the last visible shadow root from the stack). This should allow you to make the patch neatly splittable into the section where we first expose the ElementShadow::activeShadowRoots along with window.internals tests for it, and then a trivial patch of adding the support @host rules. WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706217</commentid>
    <comment_count>17</comment_count>
      <attachid>159626</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-08-28 03:29:41 -0700</bug_when>
    <thetext>Comment on attachment 159626
Patch

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

Thank you for reviewing.
I have not updated the patch yet, however I would like to confirm whether we should implement activeShadowRoots or not.

&gt;&gt; Source/WebCore/css/StyleResolver.cpp:1046
&gt;&gt; +    }
&gt; 
&gt; Can we cache this value on ElementShadow?

I see. We hav e to cache the value. I will implement.

&gt;&gt; Source/WebCore/css/StyleResolver.cpp:1069
&gt;&gt; +        return;
&gt; 
&gt; Ah, this could be on ElementShadow, just as I suggested above. Basically, maintain a list of activeShadowRoots (the interesting bit is that you only need to store one value, the last visible shadow root from the stack). This should allow you to make the patch neatly splittable into the section where we first expose the ElementShadow::activeShadowRoots along with window.internals tests for it, and then a trivial patch of adding the support @host rules. WDYT?

I think, we can add (or remove from)&lt;style&gt; which has some @host @-rules to any shadow dom subtree after adding the shadow dom subtree. So we have to update activeShadowRoots when childrenChanged in class ShadowRoot is invoked.
And I think, by using the activeShadowRoots, we can only remove &quot;if (!shadowRoot-&gt;hasShadowInsertionPoint())&quot;. ( I guess, it will take almost the same time to traverse activeShadowRoots as just to traverse shadow roots from the youngest one.)
So I&apos;m not sure whether we should implement activeShadowRoots. Do we need the list?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>707167</commentid>
    <comment_count>18</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-08-29 00:16:47 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 159626 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=159626&amp;action=review
&gt; 
&gt; Thank you for reviewing.
&gt; I have not updated the patch yet, however I would like to confirm whether we should implement activeShadowRoots or not.
&gt; 
&gt; &gt;&gt; Source/WebCore/css/StyleResolver.cpp:1046
&gt; &gt;&gt; +    }
&gt; &gt; 
&gt; &gt; Can we cache this value on ElementShadow?
&gt; 
&gt; I see. We hav e to cache the value. I will implement.
&gt; 
&gt; &gt;&gt; Source/WebCore/css/StyleResolver.cpp:1069
&gt; &gt;&gt; +        return;
&gt; &gt; 
&gt; &gt; Ah, this could be on ElementShadow, just as I suggested above. Basically, maintain a list of activeShadowRoots (the interesting bit is that you only need to store one value, the last visible shadow root from the stack). This should allow you to make the patch neatly splittable into the section where we first expose the ElementShadow::activeShadowRoots along with window.internals tests for it, and then a trivial patch of adding the support @host rules. WDYT?
&gt; 
&gt; I think, we can add (or remove from)&lt;style&gt; which has some @host @-rules to any shadow dom subtree after adding the shadow dom subtree. So we have to update activeShadowRoots when childrenChanged in class ShadowRoot is invoked.
&gt; And I think, by using the activeShadowRoots, we can only remove &quot;if (!shadowRoot-&gt;hasShadowInsertionPoint())&quot;. ( I guess, it will take almost the same time to traverse activeShadowRoots as just to traverse shadow roots from the youngest one.)
&gt; So I&apos;m not sure whether we should implement activeShadowRoots. Do we need the list?

I&apos;m sorry. Not &lt;style&gt;, I mean &lt;shadow&gt;. Since it is possible to add/remove &lt;shadow&gt;, probably we have to maintain an entire list of active shadow roots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710435</commentid>
    <comment_count>19</comment_count>
      <attachid>161866</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-09-02 23:08:45 -0700</bug_when>
    <thetext>Created attachment 161866
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722554</commentid>
    <comment_count>20</comment_count>
      <attachid>164506</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-09-18 00:34:22 -0700</bug_when>
    <thetext>Created attachment 164506
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>723637</commentid>
    <comment_count>21</comment_count>
      <attachid>164506</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-09-19 10:21:35 -0700</bug_when>
    <thetext>Comment on attachment 164506
Patch

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

Thank you for working on this!

&gt; Source/WebCore/css/StyleResolver.cpp:1112
&gt; +        transferMatchedRules(result);

This is wrong. We should somehow change the specificity of the @host at-rules, so that it all works as sort-and-match. Hmmm.. This might be a spec bug.

&gt; Source/WebCore/css/StyleResolver.h:556
&gt; +    RuleSet* atHostRuleSetForScope(const ShadowRoot*);
&gt; +    bool matchesHostRules();

please group functions with functions and data with data.

&gt; Source/WebCore/dom/ShadowRoot.h:94
&gt; +    void registerShadowElement() { ++m_numberOfShadowElementChildren; }
&gt; +    void unregisterShadowElement() { --m_numberOfShadowElementChildren; }
&gt; +    bool hasShadowInsertionPoint() const { return m_numberOfShadowElementChildren &gt; 0; }

This seems like a separate, smaller patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725149</commentid>
    <comment_count>22</comment_count>
      <attachid>165044</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-09-20 21:54:30 -0700</bug_when>
    <thetext>Created attachment 165044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725151</commentid>
    <comment_count>23</comment_count>
      <attachid>164506</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-09-20 21:59:47 -0700</bug_when>
    <thetext>Comment on attachment 164506
Patch

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

Thank you for reviewing. I filed a new bug 97184, which blocks this bug 88606. After finishing bug 97184, I will request review again.

Best regards,
Takashi Sakamoto

&gt;&gt; Source/WebCore/css/StyleResolver.cpp:1112
&gt;&gt; +        transferMatchedRules(result);
&gt; 
&gt; This is wrong. We should somehow change the specificity of the @host at-rules, so that it all works as sort-and-match. Hmmm.. This might be a spec bug.

I see. I modified &quot;RuleSet::addStyleRule&quot; and &quot;RuleSet::addRule&quot; to modify RuleData&apos;s specificity when the given style rule comes from @host @-rules.

&gt;&gt; Source/WebCore/css/StyleResolver.h:556
&gt;&gt; +    bool matchesHostRules();
&gt; 
&gt; please group functions with functions and data with data.

Done.

&gt;&gt; Source/WebCore/dom/ShadowRoot.h:94
&gt;&gt; +    bool hasShadowInsertionPoint() const { return m_numberOfShadowElementChildren &gt; 0; }
&gt; 
&gt; This seems like a separate, smaller patch.

I filed a new bug for this, i.e. https://bugs.webkit.org/show_bug.cgi?id=97184.
My patch still has these changes... to pass cq-bot check. I will remove these changes after a patch for bug 97184 is landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733411</commentid>
    <comment_count>24</comment_count>
      <attachid>166821</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-03 00:45:47 -0700</bug_when>
    <thetext>Created attachment 166821
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733542</commentid>
    <comment_count>25</comment_count>
      <attachid>166821</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-03 03:51:38 -0700</bug_when>
    <thetext>Comment on attachment 166821
Patch

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

&gt; Source/WebCore/css/StyleResolver.cpp:271
&gt; +    void addStyleRule(StyleRule*, bool hasDocumentSecurityOrigin, bool canUseFastCheckSelector, bool isInRegionRule = false, bool isHostRule = false);

Let&apos;s turn the multiple boolean into a enum as a bit mask. something like &quot;true, false, true&quot; on the call side is readability disaster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737584</commentid>
    <comment_count>26</comment_count>
      <attachid>167716</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-09 02:25:33 -0700</bug_when>
    <thetext>Created attachment 167716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737585</commentid>
    <comment_count>27</comment_count>
      <attachid>166821</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-09 02:27:24 -0700</bug_when>
    <thetext>Comment on attachment 166821
Patch

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

&gt;&gt; Source/WebCore/css/StyleResolver.cpp:271
&gt;&gt; +    void addStyleRule(StyleRule*, bool hasDocumentSecurityOrigin, bool canUseFastCheckSelector, bool isInRegionRule = false, bool isHostRule = false);
&gt; 
&gt; Let&apos;s turn the multiple boolean into a enum as a bit mask. something like &quot;true, false, true&quot; on the call side is readability disaster.

I see.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738701</commentid>
    <comment_count>28</comment_count>
      <attachid>167949</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-10 01:01:36 -0700</bug_when>
    <thetext>Created attachment 167949
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738707</commentid>
    <comment_count>29</comment_count>
      <attachid>167949</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-10 01:06:33 -0700</bug_when>
    <thetext>Comment on attachment 167949
Patch

Attachment 167949 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14258024</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738708</commentid>
    <comment_count>30</comment_count>
      <attachid>167949</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-10 01:08:12 -0700</bug_when>
    <thetext>Comment on attachment 167949
Patch

Attachment 167949 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14253116</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738710</commentid>
    <comment_count>31</comment_count>
      <attachid>167949</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-10 01:08:47 -0700</bug_when>
    <thetext>Comment on attachment 167949
Patch

Attachment 167949 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14257035</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738722</commentid>
    <comment_count>32</comment_count>
      <attachid>167949</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-10 01:18:10 -0700</bug_when>
    <thetext>Comment on attachment 167949
Patch

Attachment 167949 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14257036</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738747</commentid>
    <comment_count>33</comment_count>
      <attachid>167949</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-10 01:57:53 -0700</bug_when>
    <thetext>Comment on attachment 167949
Patch

Attachment 167949 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14253130</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739674</commentid>
    <comment_count>34</comment_count>
      <attachid>168155</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-11 00:50:25 -0700</bug_when>
    <thetext>Created attachment 168155
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740688</commentid>
    <comment_count>35</comment_count>
      <attachid>168155</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-12 00:38:24 -0700</bug_when>
    <thetext>Comment on attachment 168155
Patch

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

&gt; Source/WebCore/css/RuleSet.h:50
&gt; +    RuleData(StyleRule*, unsigned selectorIndex, unsigned position, unsigned addRuleState);

Coud you use AddRuleState instead of unsigned?

&gt; Source/WebCore/css/StyleResolver.cpp:438
&gt; +void StyleResolver::addHostRule(StyleRuleHost* hostRule, bool hasDocumentSecurityOrigin, const ContainerNode* scope)

Can we move this implementation more to StyleScopeResolver?
Ideally all @host related code should be owned by StyleScopeResolver.
I know it&apos;s unfeasible for now. But I think we could be better here.

&gt; Source/WebCore/css/StyleResolver.cpp:440
&gt; +#if ENABLE(STYLE_SCOPED)

This isn&apos;t related STYLE_SCOPED. This should be part of SHAODW_ROOT.

&gt; Source/WebCore/css/StyleResolver.cpp:781
&gt; +#if ENABLE(STYLE_SCOPED)

Ditto.

&gt; Source/WebCore/css/StyleResolver.cpp:790
&gt; +#if ENABLE(STYLE_SCOPED)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740885</commentid>
    <comment_count>36</comment_count>
      <attachid>168412</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-12 06:37:19 -0700</bug_when>
    <thetext>Created attachment 168412
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740887</commentid>
    <comment_count>37</comment_count>
      <attachid>168155</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-12 06:41:04 -0700</bug_when>
    <thetext>Comment on attachment 168155
Patch

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

Thank you for reviewing.

&gt;&gt; Source/WebCore/css/RuleSet.h:50
&gt;&gt; +    RuleData(StyleRule*, unsigned selectorIndex, unsigned position, unsigned addRuleState);
&gt; 
&gt; Coud you use AddRuleState instead of unsigned?

I see. Done.

&gt;&gt; Source/WebCore/css/StyleResolver.cpp:438
&gt;&gt; +void StyleResolver::addHostRule(StyleRuleHost* hostRule, bool hasDocumentSecurityOrigin, const ContainerNode* scope)
&gt; 
&gt; Can we move this implementation more to StyleScopeResolver?
&gt; Ideally all @host related code should be owned by StyleScopeResolver.
&gt; I know it&apos;s unfeasible for now. But I think we could be better here.

I see. I moved.... 
So I created a new method to ensure m_scopeResolver, i.e. ensureScopeResolver to create (if needed) and obtain m_scopeResolver. Is this ok...?

&gt;&gt; Source/WebCore/css/StyleResolver.cpp:440
&gt;&gt; +#if ENABLE(STYLE_SCOPED)
&gt; 
&gt; This isn&apos;t related STYLE_SCOPED. This should be part of SHAODW_ROOT.

I see. I modified to use ENABLE(SHADOW_DOM).

&gt;&gt; Source/WebCore/css/StyleResolver.cpp:781
&gt;&gt; +#if ENABLE(STYLE_SCOPED)
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/css/StyleResolver.cpp:790
&gt;&gt; +#if ENABLE(STYLE_SCOPED)
&gt; 
&gt; Ditto.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743976</commentid>
    <comment_count>38</comment_count>
      <attachid>169112</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-17 00:56:25 -0700</bug_when>
    <thetext>Created attachment 169112
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744903</commentid>
    <comment_count>39</comment_count>
      <attachid>169112</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-17 19:16:43 -0700</bug_when>
    <thetext>Comment on attachment 169112
Patch

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

&gt; Source/WebCore/css/RuleSet.cpp:360
&gt; +            resolver-&gt;ensureScopeResolver()-&gt;addHostRule(static_cast&lt;StyleRuleHost*&gt;(rule), hasDocumentSecurityOrigin, scope);

If possible I&apos;d keep StyleScopeResovler as a n implementation detail of StyleResolver.

&gt; Source/WebCore/css/StyleResolver.cpp:795
&gt; +    matchHostRules(result, includeEmptyRules);

Could you move this call int to matchScopedAuthorRules()? Then we can assume that we have m_scopedResolver

&gt; Source/WebCore/css/StyleResolver.h:34
&gt; +#include &quot;StyleScopeResolver.h&quot;

Can we eliminate this?

&gt; Source/WebCore/css/StyleResolver.h:76
&gt; +class ShadowRoot;

It looks we don&apos;t need this?

&gt; Source/WebCore/css/StyleRule.cpp:393
&gt; +StyleRuleHost::StyleRuleHost(Vector&lt;RefPtr&lt;StyleRuleBase&gt; &gt;&amp; adoptRules)

it&apos;s fine to inline these in the header.

&gt; Source/WebCore/css/StyleRule.cpp:398
&gt; +StyleRuleHost::StyleRuleHost(const StyleRuleHost&amp; o)

ditto.

&gt; Source/WebCore/css/StyleScopeResolver.cpp:195
&gt; +bool StyleScopeResolver::styleSharingCandidateMatchesHostRules(const Element* element)

How about to have a flag just for indicating existence of @host rules regardless that matches or not?
This hidden side effect is adding complexity which we might not need. 
We can assume that many host rule will match to the host in many cases. That&apos;s why the author put @host rule after all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745010</commentid>
    <comment_count>40</comment_count>
      <attachid>169352</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-17 23:36:33 -0700</bug_when>
    <thetext>Created attachment 169352
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745011</commentid>
    <comment_count>41</comment_count>
      <attachid>169112</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-17 23:38:27 -0700</bug_when>
    <thetext>Comment on attachment 169112
Patch

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

Thank you for reviewing.
I updated the patch except styleSharingCandidateMatchesHostRules. I would like to confirm the comment about styleSharingCandidateMatchesHostRules.

Best regards,
Takashi Sakamoto

&gt;&gt; Source/WebCore/css/RuleSet.cpp:360
&gt;&gt; +            resolver-&gt;ensureScopeResolver()-&gt;addHostRule(static_cast&lt;StyleRuleHost*&gt;(rule), hasDocumentSecurityOrigin, scope);
&gt; 
&gt; If possible I&apos;d keep StyleScopeResovler as a n implementation detail of StyleResolver.

I added a wrapper method to StyleScopeResolver::addHostRule to StyleResolver.
The wrapper method looks like just ... &quot;{ ensureScopeResolver()-&gt;addHostRule(...);&quot;. Now ensureScopeResolver is a private method.

&gt;&gt; Source/WebCore/css/StyleResolver.cpp:795
&gt;&gt; +    matchHostRules(result, includeEmptyRules);
&gt; 
&gt; Could you move this call int to matchScopedAuthorRules()? Then we can assume that we have m_scopedResolver

Sure. Done.

&gt;&gt; Source/WebCore/css/StyleResolver.h:34
&gt;&gt; +#include &quot;StyleScopeResolver.h&quot;
&gt; 
&gt; Can we eliminate this?

I need StyleScopeResolver.h because addHostRule() and ensureScopeResolver() defined in StyleResolver.h need information about StyleScopeResolver. i.e.
adoptPtr(new StyleScopeResolver()) and ensureScopeResolver()-&gt;addHostRule(...).
Is it better to move these implementation into StyleResolver.cpp?

&gt;&gt; Source/WebCore/css/StyleRule.cpp:393
&gt;&gt; +StyleRuleHost::StyleRuleHost(Vector&lt;RefPtr&lt;StyleRuleBase&gt; &gt;&amp; adoptRules)
&gt; 
&gt; it&apos;s fine to inline these in the header.

Done.

&gt;&gt; Source/WebCore/css/StyleRule.cpp:398
&gt;&gt; +StyleRuleHost::StyleRuleHost(const StyleRuleHost&amp; o)
&gt; 
&gt; ditto.

Done.

&gt;&gt; Source/WebCore/css/StyleScopeResolver.cpp:195
&gt;&gt; +bool StyleScopeResolver::styleSharingCandidateMatchesHostRules(const Element* element)
&gt; 
&gt; How about to have a flag just for indicating existence of @host rules regardless that matches or not?
&gt; This hidden side effect is adding complexity which we might not need. 
&gt; We can assume that many host rule will match to the host in many cases. That&apos;s why the author put @host rule after all.

I would like to confirm this.
Currently, I added a flag to ElementShadow and the flag caches whether any @host @-rule is applied to shadow host or not.
So would you mean adding a flag to class Element or class RenderStyle and caching existence of @host @-rules instead of ElementShadow&apos;s flag?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745012</commentid>
    <comment_count>42</comment_count>
      <attachid>169352</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-17 23:42:27 -0700</bug_when>
    <thetext>Comment on attachment 169352
Patch

Attachment 169352 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14400708</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745013</commentid>
    <comment_count>43</comment_count>
      <attachid>169352</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-17 23:43:31 -0700</bug_when>
    <thetext>Comment on attachment 169352
Patch

Attachment 169352 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14392927</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745014</commentid>
    <comment_count>44</comment_count>
      <attachid>169352</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-17 23:43:33 -0700</bug_when>
    <thetext>Comment on attachment 169352
Patch

Attachment 169352 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14400710</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745018</commentid>
    <comment_count>45</comment_count>
      <attachid>169112</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-17 23:53:01 -0700</bug_when>
    <thetext>Comment on attachment 169112
Patch

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

&gt;&gt;&gt; Source/WebCore/css/StyleScopeResolver.cpp:195
&gt;&gt;&gt; +bool StyleScopeResolver::styleSharingCandidateMatchesHostRules(const Element* element)
&gt;&gt; 
&gt;&gt; How about to have a flag just for indicating existence of @host rules regardless that matches or not?
&gt;&gt; This hidden side effect is adding complexity which we might not need. 
&gt;&gt; We can assume that many host rule will match to the host in many cases. That&apos;s why the author put @host rule after all.
&gt; 
&gt; I would like to confirm this.
&gt; Currently, I added a flag to ElementShadow and the flag caches whether any @host @-rule is applied to shadow host or not.
&gt; So would you mean adding a flag to class Element or class RenderStyle and caching existence of @host @-rules instead of ElementShadow&apos;s flag?

Having the flag on ElementShadow is fine. I though we could have a flag that just implies whether the styles in shadow have @host rule or not
since we can set the flag in StyleScopeResolver::addHostRule(). If it&apos;s not so straightforward, we could keep current approach.
I prefer a tri-state enum rather than two bool values with uninitialized one - uninitialized values better not be used if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745936</commentid>
    <comment_count>46</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-18 20:41:13 -0700</bug_when>
    <thetext>I see. Thank you, Morita-san.

I agree with you. I will update addHostRule.

And I will also fix cq-.

Best regards,
Takashi Sakamoto


(In reply to comment #45)
&gt; (From update of attachment 169112 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169112&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/css/StyleScopeResolver.cpp:195
&gt; &gt;&gt;&gt; +bool StyleScopeResolver::styleSharingCandidateMatchesHostRules(const Element* element)
&gt; &gt;&gt; 
&gt; &gt;&gt; How about to have a flag just for indicating existence of @host rules regardless that matches or not?
&gt; &gt;&gt; This hidden side effect is adding complexity which we might not need. 
&gt; &gt;&gt; We can assume that many host rule will match to the host in many cases. That&apos;s why the author put @host rule after all.
&gt; &gt; 
&gt; &gt; I would like to confirm this.
&gt; &gt; Currently, I added a flag to ElementShadow and the flag caches whether any @host @-rule is applied to shadow host or not.
&gt; &gt; So would you mean adding a flag to class Element or class RenderStyle and caching existence of @host @-rules instead of ElementShadow&apos;s flag?
&gt; 
&gt; Having the flag on ElementShadow is fine. I though we could have a flag that just implies whether the styles in shadow have @host rule or not
&gt; since we can set the flag in StyleScopeResolver::addHostRule(). If it&apos;s not so straightforward, we could keep current approach.
&gt; I prefer a tri-state enum rather than two bool values with uninitialized one - uninitialized values better not be used if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746199</commentid>
    <comment_count>47</comment_count>
      <attachid>169594</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-19 03:48:01 -0700</bug_when>
    <thetext>Created attachment 169594
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746208</commentid>
    <comment_count>48</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-19 04:08:13 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; (From update of attachment 169112 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169112&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/css/StyleScopeResolver.cpp:195
&gt; &gt;&gt;&gt; +bool StyleScopeResolver::styleSharingCandidateMatchesHostRules(const Element* element)
&gt; &gt;&gt; 
&gt; &gt;&gt; How about to have a flag just for indicating existence of @host rules regardless that matches or not?
&gt; &gt;&gt; This hidden side effect is adding complexity which we might not need. 
&gt; &gt;&gt; We can assume that many host rule will match to the host in many cases. That&apos;s why the author put @host rule after all.
&gt; &gt; 
&gt; &gt; I would like to confirm this.
&gt; &gt; Currently, I added a flag to ElementShadow and the flag caches whether any @host @-rule is applied to shadow host or not.
&gt; &gt; So would you mean adding a flag to class Element or class RenderStyle and caching existence of @host @-rules instead of ElementShadow&apos;s flag?
&gt; 
&gt; Having the flag on ElementShadow is fine. I though we could have a flag that just implies whether the styles in shadow have @host rule or not
&gt; since we can set the flag in StyleScopeResolver::addHostRule(). If it&apos;s not so straightforward, we could keep current approach.
&gt; I prefer a tri-state enum rather than two bool values with uninitialized one - uninitialized values better not be used if possible.

I filed a new bug, https://bugs.webkit.org/show_bug.cgi?id=99827 to add some flag which has information about whether any @host @-rules is applied or not.

Best regards,
Takashi Sakamoto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747178</commentid>
    <comment_count>49</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-21 18:06:48 -0700</bug_when>
    <thetext>&gt; &gt;&gt; Source/WebCore/css/StyleResolver.h:34
&gt; &gt;&gt; +#include &quot;StyleScopeResolver.h&quot;
&gt; &gt; 
&gt; &gt; Can we eliminate this?
&gt; 
&gt; I need StyleScopeResolver.h because addHostRule() and ensureScopeResolver() defined in StyleResolver.h need information about StyleScopeResolver. i.e.
&gt; adoptPtr(new StyleScopeResolver()) and ensureScopeResolver()-&gt;addHostRule(...).
&gt; Is it better to move these implementation into StyleResolver.cpp?

I think so. addHostRule() is guarded by isHost() thus won&apos;t be hot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747179</commentid>
    <comment_count>50</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-21 18:06:49 -0700</bug_when>
    <thetext>&gt; &gt;&gt; Source/WebCore/css/StyleResolver.h:34
&gt; &gt;&gt; +#include &quot;StyleScopeResolver.h&quot;
&gt; &gt; 
&gt; &gt; Can we eliminate this?
&gt; 
&gt; I need StyleScopeResolver.h because addHostRule() and ensureScopeResolver() defined in StyleResolver.h need information about StyleScopeResolver. i.e.
&gt; adoptPtr(new StyleScopeResolver()) and ensureScopeResolver()-&gt;addHostRule(...).
&gt; Is it better to move these implementation into StyleResolver.cpp?

I think so. addHostRule() is guarded by isHost() thus won&apos;t be hot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747181</commentid>
    <comment_count>51</comment_count>
      <attachid>169594</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-21 18:12:23 -0700</bug_when>
    <thetext>Comment on attachment 169594
Patch

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

Almost looks good. Added some nits comment.

&gt; Source/WebCore/css/CSSGrammar.y.in:907
&gt; +before_host_rule:

We need to #ifdef these.

&gt; Source/WebCore/css/CSSParser.cpp:9188
&gt; +    case &apos;h&apos;:

Ditto.

&gt; Source/WebCore/css/RuleSet.h:34
&gt; +enum AddRuleState {

Nit: This isn&apos;t actually a state. Maybe flags?

&gt; Source/WebCore/css/StyleResolver.h:178
&gt; +    {

Could you assert RuntimeEnabledFeatures::shadowDOMEnabled() || styleScoepedEnabled() here to emphasize this is only enabled with these features being on?

&gt; Source/WebCore/css/StyleScopeResolver.cpp:203
&gt; +    // FIXME(99827): add a new flag to ElementShadow and cache whether any

Could you type the url instead of bug number?

&gt; Source/WebCore/css/StyleScopeResolver.cpp:225
&gt; +    // FIXME(99827): add a new flag to ElementShadow and cache whether any

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747189</commentid>
    <comment_count>52</comment_count>
      <attachid>169594</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-21 18:46:42 -0700</bug_when>
    <thetext>Comment on attachment 169594
Patch

oops.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748502</commentid>
    <comment_count>53</comment_count>
      <attachid>170124</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-23 04:49:18 -0700</bug_when>
    <thetext>Created attachment 170124
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748503</commentid>
    <comment_count>54</comment_count>
      <attachid>169594</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-23 04:50:44 -0700</bug_when>
    <thetext>Comment on attachment 169594
Patch

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

&gt;&gt; Source/WebCore/css/CSSGrammar.y.in:907
&gt;&gt; +before_host_rule:
&gt; 
&gt; We need to #ifdef these.

I see. Done.

&gt;&gt; Source/WebCore/css/CSSParser.cpp:9188
&gt;&gt; +    case &apos;h&apos;:
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/css/RuleSet.h:34
&gt;&gt; +enum AddRuleState {
&gt; 
&gt; Nit: This isn&apos;t actually a state. Maybe flags?

I see. Now AddRuleFlag.

&gt;&gt; Source/WebCore/css/StyleResolver.h:178
&gt;&gt; +    {
&gt; 
&gt; Could you assert RuntimeEnabledFeatures::shadowDOMEnabled() || styleScoepedEnabled() here to emphasize this is only enabled with these features being on?

Sure. And I also added #ifdef here.

&gt;&gt; Source/WebCore/css/StyleScopeResolver.cpp:203
&gt;&gt; +    // FIXME(99827): add a new flag to ElementShadow and cache whether any
&gt; 
&gt; Could you type the url instead of bug number?

I added the url.

&gt;&gt; Source/WebCore/css/StyleScopeResolver.cpp:225
&gt;&gt; +    // FIXME(99827): add a new flag to ElementShadow and cache whether any
&gt; 
&gt; Ditto.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749175</commentid>
    <comment_count>55</comment_count>
      <attachid>170124</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-23 17:59:14 -0700</bug_when>
    <thetext>Comment on attachment 170124
Patch

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

OK, let&apos;s land and see!

&gt; Source/WebCore/css/RuleSet.h:34
&gt; +enum AddRuleFlag {

s/Flag/Flags/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749231</commentid>
    <comment_count>56</comment_count>
      <attachid>170292</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-23 19:09:35 -0700</bug_when>
    <thetext>Created attachment 170292
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749232</commentid>
    <comment_count>57</comment_count>
      <attachid>170124</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-23 19:10:34 -0700</bug_when>
    <thetext>Comment on attachment 170124
Patch

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

&gt;&gt; Source/WebCore/css/RuleSet.h:34
&gt;&gt; +enum AddRuleFlag {
&gt; 
&gt; s/Flag/Flags/

Sure. Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749322</commentid>
    <comment_count>58</comment_count>
      <attachid>170292</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 21:37:36 -0700</bug_when>
    <thetext>Comment on attachment 170292
Patch

Clearing flags on attachment: 170292

Committed r132303: &lt;http://trac.webkit.org/changeset/132303&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749323</commentid>
    <comment_count>59</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 21:37:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749634</commentid>
    <comment_count>60</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-10-24 07:08:29 -0700</bug_when>
    <thetext>This is causing failures on EFL, pls. cmp bug 100246.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750036</commentid>
    <comment_count>61</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-24 14:17:49 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 100287</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750401</commentid>
    <comment_count>62</comment_count>
      <attachid>170555</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-24 23:10:35 -0700</bug_when>
    <thetext>Created attachment 170555
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750405</commentid>
    <comment_count>63</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-24 23:16:44 -0700</bug_when>
    <thetext>I fixed two shadow dom test failures reported by https://bugs.webkit.org/show_bug.cgi?id=100246 :

- fast/dom/shadow/shadowdom-dynamic-styling.html &amp;
   fast/dom/shadow/style-scoped-not-enabled.html

The reason why these tests failed is that I used #if ENABLE(STYLE_SCOPED) in StyleResolver::appendAuthorStyleSheets. The code should be #if ENABLE(STYLE_SCOPED) || ENABLE(SHADOW_DOM). 
Because if only SHADOW_DOM is enabled, my old patch will register styles in shadow dom subtrees with document. This is a problem.

I&apos;m now trying to find why my patch causes https://bugs.webkit.org/show_bug.cgi?id=100287 and crashes @host @-rules test.

Best regards,
Takashi Sakamoto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751608</commentid>
    <comment_count>64</comment_count>
      <attachid>170831</attachid>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-25 23:50:58 -0700</bug_when>
    <thetext>Created attachment 170831
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751612</commentid>
    <comment_count>65</comment_count>
    <who name="Takashi Sakamoto">tasak</who>
    <bug_when>2012-10-25 23:52:54 -0700</bug_when>
    <thetext>(In reply to comment #63)

&gt; I&apos;m now trying to find why my patch causes https://bugs.webkit.org/show_bug.cgi?id=100287 and crashes @host @-rules test.

I obtained the comment that my patch doesn&apos;t cause the crashing in many popular sites.

So after finishing the bug https://bugs.webkit.org/show_bug.cgi?id=100455, I would like to request cq?.

Best regards,
Takashi Sakamoto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751827</commentid>
    <comment_count>66</comment_count>
      <attachid>170831</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-10-26 04:01:30 -0700</bug_when>
    <thetext>Comment on attachment 170831
Patch for landing

Let&apos;s try again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751856</commentid>
    <comment_count>67</comment_count>
      <attachid>170831</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-26 04:33:39 -0700</bug_when>
    <thetext>Comment on attachment 170831
Patch for landing

Clearing flags on attachment: 170831

Committed r132618: &lt;http://trac.webkit.org/changeset/132618&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751857</commentid>
    <comment_count>68</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-26 04:33:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766829</commentid>
    <comment_count>69</comment_count>
      <attachid>170831</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-11-14 06:32:16 -0800</bug_when>
    <thetext>Comment on attachment 170831
Patch for landing

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

&gt; Source/WebCore/css/CSSPropertySourceData.h:98
&gt; +        REGION_RULE,
&gt; +        HOST_RULE

HOST_RULE should be behind #if ENABLE(SHADOW_DOM) here too (and as a result everywhere it is used).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767645</commentid>
    <comment_count>70</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-11-14 19:52:06 -0800</bug_when>
    <thetext>
&gt; HOST_RULE should be behind #if ENABLE(SHADOW_DOM) here too (and as a result everywhere it is used).

Thanks for the catch! Filed Bug 102321.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155250</attachid>
            <date>2012-07-30 04:16:35 -0700</date>
            <delta_ts>2012-07-30 22:19:32 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-88606-20120730201619.patch</filename>
            <type>text/plain</type>
            <size>48963</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzOTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDg0MzQ1MTQ4MjZjYzk4
N2ZmZDIzNTY3NjY0OTgwMDA2NGMzMjc3My4uM2Y1ZGU2ZWIxYzc5MzQxN2ZjOTMwMzlhZDVjZTZk
YWJhMDExMzg4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NCBAQAorMjAxMi0wNy0zMCAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01d
IE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIEltcGxlbWVu
dGVkIEBob3N0LUBydWxlcyBhY2NvcmRpbmcgdG8gdGhlIHNoYWRvdyBkb20gc3BlYzoKKyAgICAg
ICAgaHR0cDovL2R2Y3MudzMub3JnL2hnL3dlYmNvbXBvbmVudHMvcmF3LWZpbGUvdGlwL3NwZWMv
c2hhZG93L2luZGV4Lmh0bWwjaG9zdC1hdC1ydWxlCisgICAgICAgIFRoZSBkZXNpZ24gZG9jIGlz
OgorICAgICAgICBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFQMnlvcmNoRjhs
Y2kyc2Njci1tVlNSZjJkdHZqS2VpdXlRV3pDQjJiRUE4L2VkaXQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvcHNl
dWRvLWhvc3QuaHRtbAorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAgQWRk
ZWQgYSBuZXcgdG9rZW4gSE9TVF9TWU0gYW5kIGFkZGVkIGEgbmV3IHJ1bGUgZm9yIEBob3N0IEAt
cnVsZXMuCisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKToKKyAgICAgICAgTW9kaWZpZWQgZGV0ZWN0QXRUb2tl
biB0byBwYXJzZSAiQGhvc3QiIGFuZCBnZW5lcmF0ZSBIT1NUX1NZTSB0b2tlbi4KKyAgICAgICAg
QWRkZWQgYSBuZXcgbWV0aG9kIHRvIGNyZWF0ZSBhIHJ1bGUgZm9yIEBob3N0IEAtcnVsZSwgaS5l
LiBhbgorICAgICAgICBpbnN0YW5jZSBvZiBjbGFzcyBTdHlsZVJ1bGVIb3N0LgorICAgICAgICAq
IGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgQWRkZWQgYSBkZWNsYXJhdGlvbiBvZiBjcmVhdGVI
b3N0UnVsZS4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSdWxlU2V0OjphZGRIb3N0UnVsZSk6CisgICAgICAgIEFkZGVkIGEgbWV0aG9kIHRvIHN0
b3JlIEBob3N0IEAtcnVsZXMgaW4gUnVsZVNldC4gVGhlIG1ldGhvZCB1c2VzCisgICAgICAgIEhv
c3RSdWxlTWFwLCBtX2hvc3RSdWxlcy4gVGhlIG1hcCdzIGtleXMgYXJlIHNoYWRvdyByb290cyBh
bmQgdGhlIHZhbHVlcworICAgICAgICBhcmUgQGhvc3QgQC1ydWxlcyBkZWNsYXJlZCBpbiB0aGUg
c2hhZG93IHJvb3RzLiBFYWNoIEBob3N0IEAtcnVsZXMgYXJlCisgICAgICAgIHN0b3JlZCBpbiBz
aW1sYXIgd2F5IHRvIG90aGVyIHJ1bGVzLCBpLmUuIGJ5IHVzaW5nIFJ1bGVEYXRhLgorICAgICAg
ICBXZSBuZWVkIFJ1bGVEYXRhIHRvIHVzZSBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QsIGFw
cGx5UHJvcGVydGllcywKKyAgICAgICAgYW5kIHNvIG9uLgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6cnVsZVNldEZvclNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6Y2FuU2hhcmVTdHlsZVdpdGhXaXRoRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSk6CisgICAgICAgIEFzIGhhc1Njb3BlZEhUTUxT
dHlsZUNoaWxkIHdhcyByZW5hbWVkIHRvIGhhc1Njb3BlZFN0eWxlLCBtb2RpZmllZCB0bworICAg
ICAgICB1c2UgdGhlIHJlbmFtZWQgbWV0aG9kIG5hbWUuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjp0cmFuc2Zlck1hdGNoZWRSdWxlcyk6CisgICAgICAgIE1vdmVkIHRoZSBjb2Rl
IGZyb20gc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzLiBUbyBhcHBseSBAaG9zdCBALXJ1bGVz
CisgICAgICAgIGFmdGVyIHN0eWxlIHJ1bGVzIGRlY2xhcmVkIGluIGRvY3VtZW50LCBjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckhvc3QgaXMKKyAgICAgICAgaW52b2tlZCBhZnRlciBtYXRjaFNjb3Bl
ZEF1dGhvclJ1bGVzIGFuZCBzb3J0TWF0Y2hlZFJ1bGVzIGFyZSBpbnZva2VkLgorICAgICAgICBp
LmUuCisgICAgICAgIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMgLT4gc29ydE1hdGNoZWRSdWxlcyAt
PiBjb2xsZWN0IEBob3N0IEAtcnVsZXMgLT4KKyAgICAgICAgdHJhbnNmZXJNYXRjaGVkUnVsZXMu
CisgICAgICAgIEFzIEBob3N0IEAtcnVsZXMncyBzZWxlY3RvciBpcyBqdXN0ICJAaG9zdCIgYW5k
IGR1bW15IHNlbGVjdG9ycyBhcmUKKyAgICAgICAgdXNlZCB0byBzdG9yZSBhcyBSdWxlRGF0YSwg
cnVsZXMgaW4gZG9jdW1lbnQsIGUuZy4gaWQgcnVsZXMgYW5kIHNvIG9uLAorICAgICAgICB3aWxs
IG92ZXJyaWRlIEBob3N0IEAtcnVsZXMuIFRoaXMgaXMgZG9uZSBieSBzb3J0TWF0Y2hlZFJ1bGVz
LCBjb21wYXJpbmcKKyAgICAgICAgc2VsZWN0b3IncyBzcGVjaWZpY2l0ZXMgYW5kIHN0eWxlIHJ1
bGVzJyBzb3VyY2UgcG9zaXRpb25zLgorICAgICAgICBBbiBhbHRlcm5hdGl2ZSB3YXkgaXMgdG8g
YXNzaWduIGR1bW15IHNwZWNpZmljaXR5IHdpdGggQGhvc3QgQC1ydWxlcy4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyk6CisgICAg
ICAgIE1vdmVkIHRoZSAidHJhbnNmZXIiIGNvZGUgdG8gdHJhbnNmZXJNYXRjaGVkUnVsZXMuIE5v
dyB0aGlzIG1ldGhvZAorICAgICAgICBpbnZva2VzIHRoZSBuZXcgbWV0aG9kIHRyYW5zZmVyTWF0
Y2hlZFJ1bGVzIGFmdGVyIGludm9raW5nCisgICAgICAgIHNvcnRNYXRjaGVkUnVsZXMuCisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIFRo
aXMgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIG1fZWxlbWVudCBoYXMgQGhvc3QgQC1ydWxlcyBvciBu
b3QgYW5kCisgICAgICAgIGlmIGV4aXN0cywgaW52b2tlcyBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
ckhvc3QuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckhvc3QpOgorICAgICAgICBUaGlzIG1ldGhvZCBjaGVja3Mgd2hldGhlciBzaGFkb3cg
cm9vdHMgYXR0YWNoZWQgdG8gdGhlIGdpdmVuIGVsZW1lbnQKKyAgICAgICAgaGF2ZSA8c2hhZG93
PiBvciBub3QgYW5kIGZpbmRzIHRoZSB5b3VuZ2VzdCBzaGFkb3cgcm9vdCB3aGljaCBkb2Vzbid0
CisgICAgICAgIGhhdmUgYW55IDxzaGFkb3c+IGVsZW1lbnRzLiBAaG9zdCBALXJ1bGVzIGZyb20g
dGhlIHNoYWRvdyByb290IHRvCisgICAgICAgIHRoZSB5b3VuZ2VzdCBzaGFkb3cgcm9vdCBhcmUg
YXBwbGllZCwgaS5lLiBwcm92aWRlZCBmb3IKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JMaXN0LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxl
cyk6CisgICAgICAgIFJlbW92ZWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzLiBJbnN0ZWFk
LCBtb2RpZmllZCB0byB1c2UKKyAgICAgICAgc29ydE1hdGNoZWRSdWxlcyBhbmQgdHJhbnNmZXJN
YXRjaGVkUnVsZXMgc2VwYXJhdGVseS4gVGhlIGFib3ZlCisgICAgICAgIG1hdGNoSG9zdFJ1bGVz
IGlzIGludm9rZWQgYmV0d2VlbiB0aGUgc29ydE1hdGNoZWRSdWxlcyBhbmQKKyAgICAgICAgdHJh
bnNmZXJNYXRjaGVkUnVsZXMuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGRI
b3N0UnVsZSk6CisgICAgICAgIFRoaXMgbWV0aG9kIGZpbmRzIHRoZSBydWxlc2V0IG1hdGNoZWQg
d2l0aCB0aGUgZ2l2ZW4gQGhvc3QgQC1ydWxlcywgaS5lLgorICAgICAgICB0aGUgc2hhZG93IGhv
c3Qgb2YgdGhlIHNoYWRvdyBET00gc3VidHJlZSB3aGljaCBjb250YWlucyB0aGUgc3R5bGUKKyAg
ICAgICAgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBAaG9zdCBALXJ1bGVzLiBUaGVuIHRoZSBtZXRo
b2Qgc3RvcmVzIEBob3N0CisgICAgICAgIEAtcnVsZXMgaW4gdGhlIHJ1bGVzZXQgYnkgdXNpbmcg
UnVsZVNldDo6YWRkSG9zdFJ1bGUuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjph
ZGRSdWxlc0Zyb21TaGVldCk6CisgICAgICAgIE5ld2x5IGFkZGVkIHRoZSBjb2RlIGZvciBzdG9y
aW5nIEBob3N0IEAtcnVsZXMgaW4gUnVsZVNldC4gQXMgQGhvc3QKKyAgICAgICAgQC1ydWxlcydz
IHNjb3BlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgc3R5bGUgZWxlbWVudCB3aGljaCBoYXMgdGhl
CisgICAgICAgIEBob3N0IEAtcnVsZXMsIHRoZSBjb2RlIGludm9rZXMgU3R5bGVSZXNvbHZlcjo6
YWRkSG9zdFJ1bGUgdG8gYWRkCisgICAgICAgIHRoZSBAaG9zdCBALXJ1bGVzIHRvIG1hdGNoZWQg
cnVsZXNldC4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVS
ZXNvbHZlcik6CisgICAgICAgIEFkZGVkIGRlY2xhcmF0aW9ucyBvZiB0cmFuc2Zlck1hdGNoZWRS
dWxlcywgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JIb3N0LAorICAgICAgICBtYXRjaEhvc3RSdWxl
cywgYW5kIGFkZEhvc3RSdWxlLgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJ1bGVCYXNlOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmNy
ZWF0ZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0OjpTdHls
ZVJ1bGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUhvc3Q6On5TdHlsZVJ1bGVI
b3N0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUhvc3Q6OnNldFByb3BlcnRpZXMpOgor
ICAgICAgICBJbXBsZW1lbnRlZCBjbGFzcyBTdHlsZVJ1bGVIb3N0LiBTdHlsZVJ1bGVIb3N0IGlu
aGVyaXRzIGZyb20KKyAgICAgICAgU3R5bGVSdWxlQmFzZS4gQXMgU3R5bGVSdWxlIHNwZWNpZmll
cyBtX3R5cGUgYXMgU3R5bGUgYW5kIG1fdHlwZSBpcworICAgICAgICBhIHByaXZhdGUgbWVtYmVy
IHZhcmlhYmxlIG9mIGNsYXNzIFN0eWxlQmFzZSwgU3R5bGVSdWxlSG9zdCBjYW5ub3QKKyAgICAg
ICAgaW5oZXJpdCBmcm9tIFN0eWxlUnVsZS4gU3R5bGVSdWxlSG9zdCBoYXMgUmVmUHRyPFN0eWxl
UnVsZT4gYW5kCisgICAgICAgIHRoZSBTdHlsZVJ1bGUgaXMgdXNlZCB0byBhcHBseSBAaG9zdCBA
LXJ1bGVzIHRvIHNoYWRvdyBob3N0cy4KKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjppc0hvc3RSdWxlKToKKyAgICAgICAgSW1wbGVt
ZW50ZWQgaW4gc2ltaWxhciB3YXkgdG8gb3RoZXIgc3R5bGUgcnVsZXMuIElmIGEgcnVsZSBpcyBh
biBAaG9zdAorICAgICAgICBALXJ1bGUsIHJldHVybnMgdHJ1ZS4gT3RoZXJ3aXNlLCBmYWxzZS4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJ1bGVIb3N0OjpjaGlsZCk6CisgICAgICAgIFJldHVybnMgU3R5bGVSdWxlLgor
ICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omhhc1Njb3Bl
ZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om51bWJlck9mU2NvcGVkU3R5bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlZ2lzdGVyU2NvcGVkU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6dW5yZWdpc3RlclNjb3BlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6Omhhc1Njb3BlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om51bWJlck9m
U2NvcGVkU3R5bGVzKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICBSZW5hbWVkLCBi
ZWNhdXNlIHRoZSBudW1iZXIgaXMgbm90IHRoZSBudW1iZXIgb2YgY2hpbGQgc3R5bGUgZWxlbWVu
dHMsCisgICAgICAgIGJ1dCBzY29wZWQgc3R5bGVzIHdob3NlIHNjb3Bpbmcgbm9kZSBpcyB0aGUg
bm9kZS4KKyAgICAgICAgUmVuYW1lZCB0aGUgZGVjbGFyYXRpb25zIHJlbGF0ZWQgdG8gc2NvcGVk
IHN0eWxlcy4KKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFkb3dSb290OjpTaGFkb3dSb290KToKKyAgICAgICAgSW5pdGlhbGl6ZWQgbV9udW1iZXJP
ZlNoYWRvd0VsZW1lbnRDaGlsZHJlbi4KKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6cmVnaXN0ZXJTaGFkb3dFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnVucmVnaXN0ZXJTaGFkb3dFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6Omhhc1NoYWRvd0luc2VydGlvblBvaW50KToKKyAgICAg
ICAgQXMgQGhvc3QgQC1ydWxlcyByZXF1aXJlcyB0byBxdWlja2x5IGZpbmQgd2hldGhlciB0aGVy
ZSBleGlzdCBhbnkKKyAgICAgICAgPHNoYWRvdz4gaW4gc2hhZG93IERPTSBzdWJ0cmVlLCBpbXBs
ZW1lbnRlZCB0aGVzZSBtZXRob2RzLgorICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpyZWdpc3RlcldpdGhTY29w
aW5nTm9kZSk6CisgICAgICAgIEFkZGVkIHR3byBuZXcgc3RhdGU6IFJlZ2lzdGVyZWRBc1Njb3Bl
ZFdpdGhIb3N0UnVsZSBhbmQKKyAgICAgICAgUmVnaXN0ZXJlZEluU2hhZG93Um9vdFdpdGhIb3N0
UnVsZS4gVGhlIHN0YXRlIG1lYW5zLAorICAgICAgICB0aGUgc3R5bGUgd2FzIHJlZ2lzdGVyZWQg
d2l0aCB0aGUgc2NvcGluZyBub2RlIG9yIHRoZSBzaGFkb3cgcm9vdCwKKyAgICAgICAgYW5kIEBo
b3N0IEAtcnVsZXMgd2VyZSByZWdpc3RlcmVkIHdpdGggdGhlIHNoYWRvdyBob3N0IG9mIHRoZSBz
aGFkb3cKKyAgICAgICAgcm9vdC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6
OnNjb3BlZEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxl
bWVudDo6dW5yZWdpc3RlcldpdGhTY29waW5nTm9kZSk6CisgICAgICAgIElmIHRoZSBzdGF0ZSBp
cyBSZWdpc3RlcmVkSW5TaGFkb3dSb290V2l0aEhvc3RSdWxlIG9yCisgICAgICAgIFJlZ2lzdGVy
ZWRBc1Njb3BlZFdpdGhIb3N0UnVsZSwgdW5yZWdpc3RlciB3aXRoIHRoZSBzaGFkb3cgcm9vdCBh
bmQKKyAgICAgICAgdGhlIHNoYWRvdyBob3N0IG9mIHRoZSBzaGFkb3cgcm9vdC4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgVXBkYXRl
ZCB0aGUgY29uZGl0aW9uOiB1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFN0eWxlRWxlbWVudDo6aGFzSG9zdFJ1bGUpOgorICAgICAgICBSZXR1cm5zIHRy
dWUgaWYgdGhlIHN0eWxlIGNvbnRlbnQgaGFzIGFueSBAaG9zdCBALXJ1bGUuCisgICAgICAgIE90
aGVyd2lzZSwgZmFzZS4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2hhZG93bGVtZW50OjppbnNlcnRlZEludG8pOgor
ICAgICAgICBBZGRlZCB0byByZWdpc3RlciA8c2hhZG93PiB3aXRoIHRoZSBzaGFkb3cgcm9vdC4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTaGFkb3dsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAg
ICAgQWRkZWQgdG8gdW5yZWdpc3RlciA8c2hhZG93PiB3aXRoIHRoZSBzaGFkb3cgcm9vdC4KKyAg
ICAgICAgKiBodG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5oOgorICAgICAgICBBZGRlZCB0
aGUgZGVjbGFyYXRpb25zIG9mIHRoZSBhYm92ZSBtZXRob2RzLgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bnVtYmVyT2ZTY29w
ZWRIVE1MU3R5bGVDaGlsZHJlbik6CisgICAgICAgIEFzIG51bWJlck9mU2NvcGVkSFRNTFN0eWxl
Q2hpbGRyZW4gaXMgcmVuYW1lZCwgdXBkYXRlZC4gVGhpcyBtZXRob2QKKyAgICAgICAgc2hvdWxk
IGJlIHJlbmFtZWQgdG9vLiBIb3dldmVyIGl0IHJlcXVpcmVzIHRvIGNoYW5nZSBzZXZlcmFsIGxh
eW91dAorICAgICAgICB0ZXN0cy4gVG8gYXZvaWQgbWFraW5nIHRoaXMgY2hhbmdlIGxhcmdlciwg
d2lsbCB1cGRhdGUgaW4gYW5vdGhlcgorICAgICAgICBwYXRjaC4KKwogMjAxMi0wNy0yOSAgS3dh
bmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIFJlbW92ZSB1bnVz
ZWQgbWV0aG9kIEhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzazo6dGFrZShIVE1MQ29uc3RydWN0aW9u
U2l0ZVRhc2smKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueSBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKaW5kZXggYzdjMTBiNTQxY2Q0NmFkNGZl
YmM2ZWZlMjg5ZTgxYjJjZmIwODYxZS4uNWVhYzI4NzI5YzEzZDg3Yjg2ZjI0YTQzMjYxZjJhMjZh
ZWVmMDcyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CkBAIC0xMzMsNiArMTMzLDcgQEAgc3Rh
dGljIGludCBjc3N5eWxleChZWVNUWVBFKiB5eWx2YWwsIHZvaWQqIHBhcnNlcikKICV0b2tlbiBQ
QUdFX1NZTQogJXRva2VuIE1FRElBX1NZTQogJXRva2VuIEZPTlRfRkFDRV9TWU0KKyV0b2tlbiBI
T1NUX1NZTQogJXRva2VuIENIQVJTRVRfU1lNCiAldG9rZW4gTkFNRVNQQUNFX1NZTQogJXRva2Vu
IFZBUkZVTkNUSU9OCkBAIC0yMjAsNiArMjIxLDcgQEAgc3RhdGljIGludCBjc3N5eWxleChZWVNU
WVBFKiB5eWx2YWwsIHZvaWQqIHBhcnNlcikKICV0eXBlIDxydWxlPiBwYWdlCiAldHlwZSA8cnVs
ZT4gbWFyZ2luX2JveAogJXR5cGUgPHJ1bGU+IGZvbnRfZmFjZQorJXR5cGUgPHJ1bGU+IGhvc3QK
ICV0eXBlIDxydWxlPiBrZXlmcmFtZXMKICV0eXBlIDxydWxlPiBpbnZhbGlkX3J1bGUKICV0eXBl
IDxydWxlPiBzYXZlX2Jsb2NrCkBAIC00MjUsNiArNDI3LDcgQEAgdmFsaWRfcnVsZToKICAgfCBu
YW1lc3BhY2UKICAgfCBpbXBvcnQKICAgfCByZWdpb24KKyAgfCBob3N0CiAgIDsKIAogcnVsZToK
QEAgLTg1OSw2ICs4NjIsMTYgQEAgZm9udF9mYWNlOgogICAgIH0KIDsKIAoraG9zdDoKKyAgICBI
T1NUX1NZTSBtYXliZV9zcGFjZSAneycgbWF5YmVfc3BhY2UgZGVjbGFyYXRpb25fbGlzdCBjbG9z
aW5nX2JyYWNlIHsKKyAgICAgICAgaWYgKCQ1KSB7CisgICAgICAgICAgICAkJCA9IHN0YXRpY19j
YXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUhvc3RSdWxlKCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAkJCA9IDA7CisgICAgICAgIH0KKyAgICB9Cis7CisgCiByZWdpb25f
c2VsZWN0b3I6CiAgICAgc2VsZWN0b3JfbGlzdCB7CiAgICAgICAgIGlmICgkMSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcAppbmRleCBjM2ZmMmFiNTdhM2NjZDFjZWUxMGU4YzJlOGZjYWVmYTJm
ZDhjZTgxLi4xNDY3YWExZWU1NWM4ZTk2MzFmNjZhMDE1NjRlYTU2MGNjOTU1ODM5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtODc0NSw2ICs4NzQ1LDExIEBAIGlubGluZSB2b2lkIENT
U1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihpbnQgbGVuZ3RoLCBib29sIGhhc0VzY2FwZSkKICAgICAg
ICAgICAgIG1fdG9rZW4gPSBGT05UX0ZBQ0VfU1lNOwogICAgICAgICByZXR1cm47CiAKKyAgICBj
YXNlICdoJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA1ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZp
ZXIobmFtZSArIDIsICJvc3QiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBIT1NUX1NZTTsKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgY2FzZSAnaSc6CiAgICAgICAgIGlmIChsZW5ndGggPT0gNyAm
JiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAibXBvcnQiKSkgewogICAgICAgICAg
ICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOwpAQCAtOTU3NSw2ICs5NTgwLDE3IEBA
IFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCitTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxl
KCkKK3sKKyAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRp
b25zID0gZmFsc2U7CisgICAgUmVmUHRyPFN0eWxlUnVsZUhvc3Q+IHJ1bGUgPSBTdHlsZVJ1bGVI
b3N0OjpjcmVhdGUoKTsKKyAgICBydWxlLT5zZXRQcm9wZXJ0aWVzKGNyZWF0ZVN0eWxlUHJvcGVy
dHlTZXQoKSk7CisgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CisgICAgU3R5bGVSdWxlSG9zdCogcmVz
dWx0ID0gcnVsZS5nZXQoKTsKKyAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2Uo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBDU1NQYXJzZXI6OmFkZE5hbWVzcGFj
ZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCiB7
CiAgICAgaWYgKCFtX3N0eWxlU2hlZXQgfHwgIW1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggNmFjYmJhMjUyOTMwNTVhMTYzMzkyZjE4ZDY3N2Ux
YThhNTZhODRiMy4uNWQyMzBkZTlkMzJjMjY5ZWMwOWI1NWI2ODQxMjQyZDRlNDNlNTk3ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMjY1LDYgKzI2NSw3IEBAIHB1YmxpYzoKICAgICBTdHls
ZVJ1bGVCYXNlKiBjcmVhdGVQYWdlUnVsZShQYXNzT3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBw
YWdlU2VsZWN0b3IpOwogICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZVJlZ2lvblJ1bGUoVmVjdG9y
PE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogcmVnaW9uU2VsZWN0b3IsIFJ1bGVMaXN0KiBy
dWxlcyk7CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlTWFyZ2luQXRSdWxlKENTU1NlbGVjdG9y
OjpNYXJnaW5Cb3hUeXBlKTsKKyAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVIb3N0UnVsZSgpOwog
ICAgIHZvaWQgc3RhcnREZWNsYXJhdGlvbnNGb3JNYXJnaW5Cb3goKTsKICAgICB2b2lkIGVuZERl
Y2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAKaW5kZXggOTJiOTI1Y2EyYTFkMTE1Mjg0ZmVlNDUwOWNjZThmOTJlOTQ4ZDIyMS4uN2ExZjY5
ZTUwM2IyM2E0MjBhMDIzNTA2MzVmM2MxZWZlZTAxMWI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcApAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgIkNvdW50ZXIuaCIKICNp
bmNsdWRlICJDb3VudGVyQ29udGVudC5oIgogI2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKKyNpbmNs
dWRlICJFbGVtZW50U2hhZG93LmgiCiAjaW5jbHVkZSAiRm9udEZlYXR1cmVWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkZvbnRWYWx1ZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC0yNTMsMTEgKzI1NCwx
MyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOyB9CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRv
bWljU3RyaW5nSW1wbCosIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8Tm9kZSosIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4gPiBI
b3N0UnVsZU1hcDsKIAogICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRl
bnRzKiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIFN0eWxlUmVzb2x2ZXIqID0gMCwgY29u
c3QgQ29udGFpbmVyTm9kZSogPSAwKTsKIAogICAgIHZvaWQgYWRkU3R5bGVSdWxlKFN0eWxlUnVs
ZSosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tT
ZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKICAgICB2b2lkIGFkZFJ1bGUo
U3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4s
IGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUgPSBmYWxz
ZSk7CisgICAgdm9pZCBhZGRIb3N0UnVsZShOb2RlKiwgU3R5bGVSdWxlKiwgYm9vbCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luKTsKICAgICB2b2lkIGFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2Uq
KTsKICAgICB2b2lkIGFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxl
TWFwJiwgY29uc3QgUnVsZURhdGEmKTsKICAgICB2b2lkIGFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxl
UmVnaW9uKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsKQEAgLTI3NCw2ICsyNzcs
NyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogZm9jdXNQc2V1ZG9DbGFz
c1J1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzOyB9CiAgICAg
Y29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogdW5pdmVyc2FsUnVsZXMoKSBjb25zdCB7IHJldHVybiAm
bV91bml2ZXJzYWxSdWxlczsgfQogICAgIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHBh
Z2VSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVJ1bGVzOyB9CisgICAgY29uc3QgVmVjdG9y
PFJ1bGVEYXRhPiogaG9zdFJ1bGVzKE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1faG9zdFJ1
bGVzLmdldChub2RlKTsgfQogCiAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmpl
Y3RJbmZvKikgY29uc3Q7CiAKQEAgLTI4Nyw2ICsyOTEsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9y
PFJ1bGVEYXRhPiBtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzOwogICAgIFZlY3RvcjxSdWxlRGF0YT4g
bV9mb2N1c1BzZXVkb0NsYXNzUnVsZXM7CiAgICAgVmVjdG9yPFJ1bGVEYXRhPiBtX3VuaXZlcnNh
bFJ1bGVzOworICAgIEhvc3RSdWxlTWFwIG1faG9zdFJ1bGVzOwogICAgIFZlY3RvcjxTdHlsZVJ1
bGVQYWdlKj4gbV9wYWdlUnVsZXM7CiAgICAgdW5zaWduZWQgbV9ydWxlQ291bnQ7CiAgICAgYm9v
bCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7CkBAIC01MjksNyArNTM0LDcgQEAgY29uc3QgQ29u
dGFpbmVyTm9kZSogU3R5bGVSZXNvbHZlcjo6ZGV0ZXJtaW5lU2NvcGUoY29uc3QgQ1NTU3R5bGVT
aGVldCogc2hlZXQpCiAKIGlubGluZSBSdWxlU2V0KiBTdHlsZVJlc29sdmVyOjpydWxlU2V0Rm9y
U2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFzY29w
ZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRT
dHlsZSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQoc2NvcGUpOwogICAgIHJldHVy
biBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAw
OyAKQEAgLTU3Miw2ICs1NzcsMjUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JT
dHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlAKIH0KIAogI2lm
IEVOQUJMRShTVFlMRV9TQ09QRUQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkZEhvc3RSdWxlKFN0
eWxlUnVsZUhvc3QqIGhvc3RSdWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNv
bnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoreworICAgIGlmICghc2NvcGUgfHwgIXNjb3BlLT5p
c0luU2hhZG93VHJlZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFkb3dSb290KiBzaGFk
b3dSb290ID0gc2NvcGUtPnNoYWRvd1Jvb3QoKTsKKyAgICBpZiAoIXNoYWRvd1Jvb3QpCisgICAg
ICAgIHJldHVybjsKKyAgICBjb25zdCBDb250YWluZXJOb2RlKiBzaGFkb3dIb3N0ID0gc2hhZG93
Um9vdC0+aG9zdCgpOworICAgIGlmICghc2hhZG93SG9zdCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgU2NvcGVkUnVsZVNldE1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fc2NvcGVkQXV0aG9y
U3R5bGVzLmFkZChzaGFkb3dIb3N0LCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3
RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gUnVsZVNldDo6Y3Jl
YXRlKCk7CisKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkSG9zdFJ1bGUoc2hh
ZG93Um9vdCwgaG9zdFJ1bGUtPmNoaWxkKCksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOwor
fQorIAogdm9pZCBTdHlsZVJlc29sdmVyOjpzZXR1cFNjb3BlU3RhY2soY29uc3QgQ29udGFpbmVy
Tm9kZSogcGFyZW50KQogewogICAgIC8vIFRoZSBzY29waW5nIGVsZW1lbnQgc3RhY2sgc2hvdWxk
bid0IGJlIHVzZWQgaWYgPHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBhbnl3aGVyZS4KQEAgLTky
MCwxMyArOTQ0LDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
clJlZ2lvbihSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGUKICAgICB9CiB9CiAKLXZvaWQg
U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiBy
ZXN1bHQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVz
dWx0JiByZXN1bHQpCiB7Ci0gICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc29ydE1hdGNoZWRSdWxlcygpOwotCiAgICAgaWYgKG1fY2hlY2tl
ci5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpIHsKICAgICAgICAg
aWYgKCFtX3J1bGVMaXN0KQogICAgICAgICAgICAgbV9ydWxlTGlzdCA9IFN0YXRpY0NTU1J1bGVM
aXN0OjpjcmVhdGUoKTsKQEAgLTk0OCw2ICs5NjcsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpz
b3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKICAgICB9CiB9
CiAKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNo
UmVzdWx0JiByZXN1bHQpCit7CisgICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgc29ydE1hdGNoZWRSdWxlcygpOworICAgIHRyYW5zZmVyTWF0
Y2hlZFJ1bGVzKHJlc3VsdCk7Cit9CisKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRB
dXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQog
ewogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCkBAIC05OTUsNiArMTAyMyw1MSBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwg
Ym9vbCBpbmNsdWRlRW1wdAogI2VuZGlmCiB9CiAKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hI
b3N0UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3sK
KyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIGlmIChtX3Njb3BlZEF1dGhvclN0eWxlcy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIE1hdGNoT3B0aW9ucyBvcHRpb25zKGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAvLyBQb3NzaWJsZSB0byByZW1vdmUgdGhpcz8KKyAgICBp
ZiAoIXNjb3BlU3RhY2tJc0NvbnNpc3RlbnQobV9lbGVtZW50KSkKKyAgICAgICAgc2V0dXBTY29w
ZVN0YWNrKG1fZWxlbWVudCk7CisgICAgaWYgKG1fc2NvcGVTdGFjay5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGNvbnN0IFNjb3BlU3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3Bl
U3RhY2subGFzdCgpOworICAgIGlmIChmcmFtZS5tX3Njb3BlICE9IG1fZWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgb3B0aW9ucy5zY29wZSA9IGZyYW1lLm1fc2NvcGU7CisgICAgY29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JIb3N0KGZyYW1lLm1fcnVsZVNldCwgcmVzdWx0LnJhbmdlcy5m
aXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBVTlVTRURfUEFSQU0oaW5jbHVk
ZUVtcHR5UnVsZXMpOworI2VuZGlmCit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JIb3N0KFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBp
bnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBF
bGVtZW50U2hhZG93KiBzaGFkb3cgPSBtX2VsZW1lbnQtPnNoYWRvdygpOworICAgIGlmICghc2hh
ZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8Y29uc3QgVmVjdG9yPFJ1bGVEYXRh
PiosIDE2PiBtYXRjaGVkUnVsZXM7IAorICAgIGZvciAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9
IHNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7IHNoYWRvd1Jvb3Q7IHNoYWRvd1Jvb3QgPSBz
aGFkb3dSb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeyAKKyAgICAgICAgaWYgKGNvbnN0IFZlY3Rv
cjxSdWxlRGF0YT4qIHJ1bGUgPSBydWxlcy0+aG9zdFJ1bGVzKHNoYWRvd1Jvb3QpKQorICAgICAg
ICAgICAgbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsKKyAgICAgICAgaWYgKCFzaGFkb3dSb290
LT5oYXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGlmIChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsgLS1pKQorICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hlZFJ1bGVzLmF0KGktMSksIGZpcnN0
UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKK30KKwogdm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKQEAgLTEwMDksOCArMTA4
MiwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQm
IHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yUmVnaW9uKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JS
dWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKIAogICAgIG1hdGNo
U2NvcGVkQXV0aG9yUnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgaWYgKCFt
X21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKIAot
ICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgIG1hdGNoSG9zdFJ1
bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIGlmICghbV9tYXRjaGVkUnVsZXMu
aXNFbXB0eSgpKQorICAgICAgICB0cmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwogfQogCiB2
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpCkBAIC0xMjQ5LDcgKzEzMjYsNyBAQCBOb2RlKiBTdHlsZVJl
c29sdmVyOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0
ZWROb2RlQ291bgogICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzU3R5bGVkRWxlbWVudCgp
KQogICAgICAgICByZXR1cm4gMDsKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIGlmIChw
YXJlbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgaWYgKHBhcmVudC0+aGFzU2Nv
cGVkU3R5bGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICBTdHlsZWRFbGVtZW50
KiBwID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBhcmVudCk7CkBAIC0xNDM0LDcgKzE1
MTEsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHls
ZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBF
TkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIGlmIChlbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVD
aGlsZCgpKQorICAgIGlmIChlbGVtZW50LT5oYXNTY29wZWRTdHlsZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAjZW5kaWYKIApAQCAtMTUzNSw3ICsxNjEyLDcgQEAgUmVuZGVyU3R5bGUqIFN0
eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICBpZiAocGFyZW50U3R5bGVQcmV2
ZW50c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybiAwOwogI2lmIEVOQUJM
RShTVFlMRV9TQ09QRUQpCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0
eWxlQ2hpbGQoKSkKKyAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRTdHlsZSgpKQog
ICAgICAgICByZXR1cm4gMDsKICNlbmRpZgogCkBAIC0yNjMyLDYgKzI3MDksMTggQEAgdm9pZCBS
dWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBi
b29sIGhhc0RvY3VtZW50U2UKICAgICBtX3VuaXZlcnNhbFJ1bGVzLmFwcGVuZChydWxlRGF0YSk7
CiB9CiAKK3ZvaWQgUnVsZVNldDo6YWRkSG9zdFJ1bGUoTm9kZSogc2hhZG93Um9vdCwgU3R5bGVS
dWxlKiBydWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCit7CisgICAgc3RhdGlj
IENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IG5ldyBDU1NTZWxlY3RvcjsKKworICAgIEhvc3RSdWxl
TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9ob3N0UnVsZXMuYWRkKHNoYWRvd1Jvb3QsIG51
bGxwdHIpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgCisgICAgICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+c2Vjb25kID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSdWxlRGF0YT4pOworCisg
ICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3IsIDAsIGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4sIHRydWUsIGZhbHNlKTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+
YXBwZW5kKHJ1bGVEYXRhKTsKK30KKwogdm9pZCBSdWxlU2V0OjphZGRQYWdlUnVsZShTdHlsZVJ1
bGVQYWdlKiBydWxlKQogewogICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChydWxlKTsKQEAgLTI3MzAs
NiArMjgxOSwxMCBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRD
b250ZW50cyogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdQogICAgICAgICAgICAgYWRkUmVn
aW9uUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVSZWdpb24qPihydWxlKSwgaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbik7CiAgICAgICAgIH0KICNlbmRpZgorI2lmIEVOQUJMRShTVFlMRV9TQ09Q
RUQpCisgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzSG9zdFJ1bGUoKSkKKyAgICAgICAgICAgIHJl
c29sdmVyLT5hZGRIb3N0UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4ocnVsZSksIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHNjb3BlKTsKKyNlbmRpZgogICAgIH0KICAgICBpZiAo
bV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQogICAgICAgICBzaHJpbmtUb0ZpdCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggZjE4MWViNjBlMTkwMTZmNGQzNTlhNGY5NzhhNWRk
Mjk3NzJhNWJlYy4uODhmMjZhNDg5M2I5ZmMxZGY3OGRkOTgzMTg2NGUwYzczYzI5MWMyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC04MSw2ICs4MSw3IEBAIGNsYXNzIFN0eWxl
UnVsZTsKIGNsYXNzIFN0eWxlUnVsZUtleWZyYW1lczsKIGNsYXNzIFN0eWxlUnVsZVBhZ2U7CiBj
bGFzcyBTdHlsZVJ1bGVSZWdpb247CitjbGFzcyBTdHlsZVJ1bGVIb3N0OwogY2xhc3MgU3R5bGVT
aGFkZXI7CiBjbGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwpAQCAt
MTM0LDYgKzEzNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBvcFBhcmVudEVsZW1lbnQoRWxlbWVu
dCopOwogICAgIHZvaWQgcHVzaFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCopOwog
ICAgIHZvaWQgcG9wUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290Kik7CisgICAgdm9p
ZCBhZGRIb3N0UnVsZShTdHlsZVJ1bGVIb3N0KiwgYm9vbCwgY29uc3QgQ29udGFpbmVyTm9kZSop
OwogCiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQq
LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBTdHlsZVNoYXJpbmdCZWhhdmlvciA9IEFs
bG93U3R5bGVTaGFyaW5nLAogICAgICAgICBSdWxlTWF0Y2hpbmdCZWhhdmlvciA9IE1hdGNoQWxs
UnVsZXMsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IDApOwpAQCAtMzU1LDExICsz
NTcsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQm
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoVXNlclJ1bGVzKE1hdGNo
UmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFNjb3BlZEF1
dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9p
ZCBtYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwog
ICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXMoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5k
ZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgdm9pZCBj
b2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRl
eCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICB2b2lkIGNv
bGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBm
aXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsK
KyAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9ySG9zdChSdWxlU2V0KiwgaW50JiBmaXJz
dFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAg
ICBib29sIGZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwogICAgIHZv
aWQgc29ydE1hdGNoZWRSdWxlcygpOworICAgIHZvaWQgdHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0
Y2hSZXN1bHQmKTsKICAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJl
c3VsdCYpOwogCiAgICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiwgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUgPSAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKaW5kZXgg
MzQyN2YwNTU5MjE3ZTYyZjM5Mjc4YTg4MDVhYjNkOGQ4YTRlOTUyOC4uODgwZGNiNjRmNDk1Yzdh
NGRjZTg4MjQ2YzEwMzMzMDE1YmJmYzdkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKQEAg
LTc3LDYgKzc3LDkgQEAgdm9pZCBTdHlsZVJ1bGVCYXNlOjpkZXN0cm95KCkKICAgICBjYXNlIEtl
eWZyYW1lczoKICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+
KHRoaXMpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBIb3N0OgorICAgICAgICBkZWxldGUg
c3RhdGljX2Nhc3Q8U3R5bGVSdWxlSG9zdCo+KHRoaXMpOworICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBVbmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAt
MTEwLDYgKzExMyw4IEBAIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gU3R5bGVSdWxlQmFzZTo6
Y29weSgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKj4odGhpcykt
PmNvcHkoKTsKKyAgICBjYXNlIEhvc3Q6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBTdHlsZVJ1bGVIb3N0Kj4odGhpcyktPmNvcHkoKTsKICAgICBjYXNlIFVua25vd246CiAgICAg
Y2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xNTEsNiArMTU2LDcgQEAgUGFz
c1JlZlB0cjxDU1NSdWxlPiBTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTU3R5
bGVTaGVldCogcGFyZW50U2hlZXQKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgcnVsZSA9
IFdlYktpdENTU0tleWZyYW1lc1J1bGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlm
cmFtZXMqPihzZWxmKSwgcGFyZW50U2hlZXQpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEhv
c3Q6CiAgICAgY2FzZSBVbmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZy
YW1lOgpAQCAtMjI2LDYgKzIzMiwyNyBAQCB2b2lkIFN0eWxlUnVsZVBhZ2U6OnNldFByb3BlcnRp
ZXMoUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwcm9wZXJ0aWVzKQogICAgIG1fcHJvcGVy
dGllcyA9IHByb3BlcnRpZXM7CiB9CiAKK1N0eWxlUnVsZUhvc3Q6OlN0eWxlUnVsZUhvc3QoKQor
ICAgIDogU3R5bGVSdWxlQmFzZShIb3N0KQorICAgICwgbV9jaGlsZChTdHlsZVJ1bGU6OmNyZWF0
ZSgwKSkKK3sKK30KKworU3R5bGVSdWxlSG9zdDo6U3R5bGVSdWxlSG9zdChjb25zdCBTdHlsZVJ1
bGVIb3N0JiBvKQorICAgIDogU3R5bGVSdWxlQmFzZShvKQorICAgICwgbV9jaGlsZChvLm1fY2hp
bGQtPmNvcHkoKSkKK3sKK30KKworU3R5bGVSdWxlSG9zdDo6flN0eWxlUnVsZUhvc3QoKQorewor
fQorCit2b2lkIFN0eWxlUnVsZUhvc3Q6OnNldFByb3BlcnRpZXMoUGFzc1JlZlB0cjxTdHlsZVBy
b3BlcnR5U2V0PiBwcm9wZXJ0aWVzKQoreyAKKyAgICBtX2NoaWxkLT5zZXRQcm9wZXJ0aWVzKHBy
b3BlcnRpZXMpOworfQorCiBTdHlsZVJ1bGVGb250RmFjZTo6U3R5bGVSdWxlRm9udEZhY2UoKQog
ICAgIDogU3R5bGVSdWxlQmFzZShGb250RmFjZSwgMCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaApp
bmRleCA3ZmMyMGEzMDNmODUzYWM3NmM5MmVmYjAxNTNmYmZiMzQ3ZjU3MmEwLi5lMjMyZmQ4N2E5
Yjg1NDNkOWE0OWMwNTBkZjZkZTkxYjQ0NDkxMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCkBA
IC00NSw2ICs0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgUGFnZSwKICAgICAgICAgS2V5ZnJhbWVz
LAogICAgICAgICBLZXlmcmFtZSwgLy8gTm90IHVzZWQuIFRoZXNlIGFyZSBpbnRlcm5hbGx5IG5v
bi1ydWxlIFN0eWxlS2V5ZnJhbWUgb2JqZWN0cy4KKyAgICAgICAgSG9zdCwKICAgICAgICAgUmVn
aW9uID0gMTYKICAgICB9OwogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PFR5cGU+KG1fdHlwZSk7IH0KQEAgLTU3LDYgKzU4LDcgQEAgcHVibGljOgogICAgIGJvb2wg
aXNTdHlsZVJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gU3R5bGU7IH0KICAgICBib29s
IGlzUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBSZWdpb247IH0KICAgICBi
b29sIGlzSW1wb3J0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBJbXBvcnQ7IH0KKyAg
ICBib29sIGlzSG9zdFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSG9zdDsgfQogCiAg
ICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBjb3B5KCkgY29uc3Q7CiAKQEAgLTE1Nyw2ICsx
NTksMjIgQEAgcHJpdmF0ZToKICAgICBDU1NTZWxlY3Rvckxpc3QgbV9zZWxlY3Rvckxpc3Q7CiB9
OwogCitjbGFzcyBTdHlsZVJ1bGVIb3N0IDogcHVibGljIFN0eWxlUnVsZUJhc2UgeworIHB1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVIb3N0PiBjcmVhdGUoKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgU3R5bGVSdWxlSG9zdCk7IH0KKworICAgIH5TdHlsZVJ1bGVIb3N0KCk7
CisKKyAgICBTdHlsZVJ1bGUqIGNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsg
fQorICAgIHZvaWQgc2V0UHJvcGVydGllcyhQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+KTsK
KworIHByaXZhdGU6CisgICAgU3R5bGVSdWxlSG9zdCgpOworICAgIFN0eWxlUnVsZUhvc3QoY29u
c3QgU3R5bGVSdWxlSG9zdCYpOworCisgICAgUmVmUHRyPFN0eWxlUnVsZT4gbV9jaGlsZDsKK307
CisgCiBjbGFzcyBTdHlsZVJ1bGVCbG9jayA6IHB1YmxpYyBTdHlsZVJ1bGVCYXNlIHsKIHB1Ymxp
YzoKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMo
KSBjb25zdCB7IHJldHVybiBtX2NoaWxkUnVsZXM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2hlZXRDb250ZW50cy5jcHAKaW5kZXggOTcwYzgyOGNhMTQwMWRjYjE2Mzg0NDllOTYwMjQzODI3
ZWVjMTc5My4uNjI2ZTQ3Yzg0MjBlN2EwNTI1YjBiZWY1YjhiZDEzNDdhOTc3YzA5ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKQEAgLTY1LDYgKzY1LDcgQEAg
U3R5bGVTaGVldENvbnRlbnRzOjpTdHlsZVNoZWV0Q29udGVudHMoU3R5bGVSdWxlSW1wb3J0KiBv
d25lclJ1bGUsIGNvbnN0IFN0cmluZyYKICAgICAsIG1faXNNdXRhYmxlKGZhbHNlKQogICAgICwg
bV9pc0luTWVtb3J5Q2FjaGUoZmFsc2UpCiAgICAgLCBtX3BhcnNlckNvbnRleHQoY29udGV4dCkK
KyAgICAsIG1fbnVtYmVyT2ZIb3N0UnVsZXMoMCkKIHsKIH0KIApAQCAtODUsNiArODYsNyBAQCBT
dHlsZVNoZWV0Q29udGVudHM6OlN0eWxlU2hlZXRDb250ZW50cyhjb25zdCBTdHlsZVNoZWV0Q29u
dGVudHMmIG8pCiAgICAgLCBtX2lzTXV0YWJsZShmYWxzZSkKICAgICAsIG1faXNJbk1lbW9yeUNh
Y2hlKGZhbHNlKQogICAgICwgbV9wYXJzZXJDb250ZXh0KG8ubV9wYXJzZXJDb250ZXh0KQorICAg
ICwgbV9udW1iZXJPZkhvc3RSdWxlcyhvLm1fbnVtYmVyT2ZIb3N0UnVsZXMpCiB7CiAgICAgQVNT
RVJUKG8uaXNDYWNoZWFibGUoKSk7CiAKQEAgLTEzNCw2ICsxMzYsOCBAQCB2b2lkIFN0eWxlU2hl
ZXRDb250ZW50czo6cGFyc2VyQXBwZW5kUnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1
bGUpCiAgICAgICAgIG1faW1wb3J0UnVsZXMubGFzdCgpLT5yZXF1ZXN0U3R5bGVTaGVldCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmIChydWxlLT5pc0hvc3RSdWxlKCkpCisgICAg
ICAgICsrbV9udW1iZXJPZkhvc3RSdWxlczsKICAgICBtX2NoaWxkUnVsZXMuYXBwZW5kKHJ1bGUp
OwogfQogCkBAIC0xNzcsNiArMTgxLDcgQEAgdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OmNsZWFy
UnVsZXMoKQogICAgIG1faW1wb3J0UnVsZXMuY2xlYXIoKTsKICAgICBtX2NoaWxkUnVsZXMuY2xl
YXIoKTsKICAgICBjbGVhckNoYXJzZXRSdWxlKCk7CisgICAgbV9udW1iZXJPZkhvc3RSdWxlcyA9
IDA7CiB9CiAKIHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZXJTZXRFbmNvZGluZ0Zyb21D
aGFyc2V0UnVsZShjb25zdCBTdHJpbmcmIGVuY29kaW5nKQpAQCAtMjE4LDYgKzIyMyw4IEBAIGJv
b2wgU3R5bGVTaGVldENvbnRlbnRzOjp3cmFwcGVySW5zZXJ0UnVsZShQYXNzUmVmUHRyPFN0eWxl
UnVsZUJhc2U+IHJ1bGUsIHVuc2lnCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjaGlsZFZl
Y3RvckluZGV4IC09IG1faW1wb3J0UnVsZXMuc2l6ZSgpOwogIAorICAgIGlmIChydWxlLT5pc0hv
c3RSdWxlKCkpCisgICAgICAgICsrbV9udW1iZXJPZkhvc3RSdWxlczsKICAgICBtX2NoaWxkUnVs
ZXMuaW5zZXJ0KGNoaWxkVmVjdG9ySW5kZXgsIHJ1bGUpOwogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMjQyLDYgKzI0OSw5IEBAIHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjp3cmFwcGVyRGVsZXRl
UnVsZSh1bnNpZ25lZCBpbmRleCkKICAgICB9CiAgICAgY2hpbGRWZWN0b3JJbmRleCAtPSBtX2lt
cG9ydFJ1bGVzLnNpemUoKTsKIAorICAgIGlmIChtX2NoaWxkUnVsZXMuYXQoY2hpbGRWZWN0b3JJ
bmRleCktPmlzSG9zdFJ1bGUoKSkKKyAgICAgICAgLS1tX251bWJlck9mSG9zdFJ1bGVzOworCiAg
ICAgbV9jaGlsZFJ1bGVzLnJlbW92ZShjaGlsZFZlY3RvckluZGV4KTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oCmluZGV4IDdkZjM0YjcwMzIyNzI1OTc2ZTVjN2Yx
NWQwODM4MDI2NGNiN2VmMGUuLmEzMWNiYzFkNzVmZTg4NTVkZjEwMDU4NWViZmNjZWMzMTg3NzE3
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmgKQEAgLTk5LDYgKzk5
LDcgQEAgcHVibGljOgogICAgIC8vIFJ1bGVzIG90aGVyIHRoYW4gQGNoYXJzZXQgYW5kIEBpbXBv
cnQuCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVz
KCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZFJ1bGVzOyB9CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxTdHlsZVJ1bGVJbXBvcnQ+ID4mIGltcG9ydFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbXBv
cnRSdWxlczsgfQorICAgIGJvb2wgaGFzSG9zdFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX251bWJl
ck9mSG9zdFJ1bGVzID4gMDsgfQogCiAgICAgdm9pZCBub3RpZnlMb2FkZWRTaGVldChjb25zdCBD
YWNoZWRDU1NTdHlsZVNoZWV0Kik7CiAgICAgCkBAIC0xNjMsNiArMTY0LDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1faXNJbk1lbW9yeUNhY2hlIDogMTsKICAgICAKICAgICBDU1NQYXJzZXJDb250
ZXh0IG1fcGFyc2VyQ29udGV4dDsKKyAgICBpbnQgbV9udW1iZXJPZkhvc3RSdWxlczsKIAogICAg
IFZlY3RvcjxDU1NTdHlsZVNoZWV0Kj4gbV9jbGllbnRzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRl
eCBmMzBjM2ZjYmZjZjg2MGFlMDM0MTdiNWRjZDAxMTdiOTZjNWZmOWVkLi40NWE5MTI2Nzk2OGY5
MTk5OTQ3ZjhiYTI3MDUzMWE4Mzc5Njc4YjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yNTE3LDM0
ICsyNTE3LDM0IEBAIHZvaWQgTm9kZTo6bm90aWZ5TXV0YXRpb25PYnNlcnZlcnNOb2RlV2lsbERl
dGFjaCgpCiAjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKIAogI2lmIEVOQUJM
RShTVFlMRV9TQ09QRUQpCi1ib29sIE5vZGU6Omhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkgY29u
c3QKK2Jvb2wgTm9kZTo6aGFzU2NvcGVkU3R5bGUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNS
YXJlRGF0YSgpICYmIHJhcmVEYXRhKCktPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCk7CisgICAg
cmV0dXJuIGhhc1JhcmVEYXRhKCkgJiYgcmFyZURhdGEoKS0+aGFzU2NvcGVkU3R5bGUoKTsKIH0K
IAotc2l6ZV90IE5vZGU6Om51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4oKSBjb25zdAor
c2l6ZV90IE5vZGU6Om51bWJlck9mU2NvcGVkU3R5bGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
aGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhKCktPm51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRy
ZW4oKSA6IDA7CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT5udW1iZXJP
ZlNjb3BlZFN0eWxlcygpIDogMDsKIH0KIAotdm9pZCBOb2RlOjpyZWdpc3RlclNjb3BlZEhUTUxT
dHlsZUNoaWxkKCkKK3ZvaWQgTm9kZTo6cmVnaXN0ZXJTY29wZWRTdHlsZSgpCiB7Ci0gICAgZW5z
dXJlUmFyZURhdGEoKS0+cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworICAgIGVuc3Vy
ZVJhcmVEYXRhKCktPnJlZ2lzdGVyU2NvcGVkU3R5bGUoKTsKIH0KIAotdm9pZCBOb2RlOjp1bnJl
Z2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQordm9pZCBOb2RlOjp1bnJlZ2lzdGVyU2NvcGVk
U3R5bGUoKQogewogICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKICAgICBpZiAoaGFzUmFyZURh
dGEoKSkKLSAgICAgICAgcmFyZURhdGEoKS0+dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxk
KCk7CisgICAgICAgIHJhcmVEYXRhKCktPnVucmVnaXN0ZXJTY29wZWRTdHlsZSgpOwogfQogI2Vs
c2UKLWJvb2wgTm9kZTo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSBjb25zdAorYm9vbCBOb2Rl
OjpoYXNTY29wZWRTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXNpemVfdCBO
b2RlOjpudW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKCkgY29uc3QKK3NpemVfdCBOb2Rl
OjpudW1iZXJPZlNjb3BlZFN0eWxlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAppbmRleCA4NmE3ZDM5ZWQ1OGJkYmM5ZDQyZjI0MWU0NzZjOWE2YjMxNmJkNmQwLi5kNjgx
M2IzMDkxNDYyNmQxMDJiNjc3YTIyYmUzZmIzYzg1NDk0YzVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTY0
NywxMSArNjQ3LDExIEBAIHB1YmxpYzoKICNlbmRpZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJW
RVJTKQogCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICB2b2lkIHJlZ2lzdGVyU2NvcGVk
SFRNTFN0eWxlQ2hpbGQoKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGls
ZCgpOworICAgIHZvaWQgcmVnaXN0ZXJTY29wZWRTdHlsZSgpOworICAgIHZvaWQgdW5yZWdpc3Rl
clNjb3BlZFN0eWxlKCk7CiAjZW5kaWYKLSAgICBib29sIGhhc1Njb3BlZEhUTUxTdHlsZUNoaWxk
KCkgY29uc3Q7Ci0gICAgc2l6ZV90IG51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4oKSBj
b25zdDsKKyAgICBib29sIGhhc1Njb3BlZFN0eWxlKCkgY29uc3Q7CisgICAgc2l6ZV90IG51bWJl
ck9mU2NvcGVkU3R5bGVzKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5
VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZVJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRh
LmgKaW5kZXggMGJkYzNlOGFjMjA1N2UxYzE4NGY4ZGNhNTkxOTg1ZWU1ZTlmYjA3NS4uOTU0ZjMx
ODVmNjA4NzQ4Y2I0ZDVmMzc1NmQ3NDFkNmU0ZDNiZmI0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFy
ZURhdGEuaApAQCAtMTkxLDcgKzE5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2lzRm9jdXNl
ZChmYWxzZSkKICAgICAgICAgLCBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVy
QXR0YWNoKGZhbHNlKQogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgICAgICwgbV9udW1i
ZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKDApCisgICAgICAgICwgbV9udW1iZXJPZlNjb3Bl
ZFN0eWxlcygwKQogI2VuZGlmCiAgICAgewogICAgIH0KQEAgLTMxNiwyNiArMzE2LDI2IEBAIHB1
YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICB2b2lkIHJlZ2lz
dGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQorICAgIHZvaWQgcmVnaXN0ZXJTY29wZWRTdHlsZSgp
CiAgICAgewotICAgICAgICArK21fbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbjsKKyAg
ICAgICAgKyttX251bWJlck9mU2NvcGVkU3R5bGVzOwogICAgIH0KIAotICAgIHZvaWQgdW5yZWdp
c3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCkKKyAgICB2b2lkIHVucmVnaXN0ZXJTY29wZWRTdHls
ZSgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxk
cmVuID4gMCk7Ci0gICAgICAgIGlmIChtX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4g
PiAwKQotICAgICAgICAgICAgLS1tX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47Cisg
ICAgICAgIEFTU0VSVChtX251bWJlck9mU2NvcGVkU3R5bGVzID4gMCk7CisgICAgICAgIGlmICht
X251bWJlck9mU2NvcGVkU3R5bGVzID4gMCkKKyAgICAgICAgICAgIC0tbV9udW1iZXJPZlNjb3Bl
ZFN0eWxlczsKICAgICB9CiAKLSAgICBib29sIGhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkgY29u
c3QKKyAgICBib29sIGhhc1Njb3BlZFN0eWxlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47CisgICAgICAgIHJldHVybiBtX251
bWJlck9mU2NvcGVkU3R5bGVzOwogICAgIH0KIAotICAgIHNpemVfdCBudW1iZXJPZlNjb3BlZEhU
TUxTdHlsZUNoaWxkcmVuKCkgY29uc3QKKyAgICBzaXplX3QgbnVtYmVyT2ZTY29wZWRTdHlsZXMo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVD
aGlsZHJlbjsKKyAgICAgICAgcmV0dXJuIG1fbnVtYmVyT2ZTY29wZWRTdHlsZXM7CiAgICAgfQog
I2VuZGlmCiAKQEAgLTM3MCw3ICszNzAsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBFTkFC
TEUoU1RZTEVfU0NPUEVEKQotICAgIHNpemVfdCBtX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hp
bGRyZW47CisgICAgc2l6ZV90IG1fbnVtYmVyT2ZTY29wZWRTdHlsZXM7CiAjZW5kaWYKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAppbmRleCA5ZTgyYWIyYjRmMmVmNWFkNGFmMmEwMDM0
NGU0OTM0MThkOTVhMTM5Li4yMDhkMmEzY2Y5ODlkZGJhN2ZkNmI1MGJjYzk5ZDM3MWRhOGU3N2Ez
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCkBAIC01Miw2ICs1Miw3IEBAIFNoYWRvd1Jv
b3Q6OlNoYWRvd1Jvb3QoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgICwgbV9hcHBseUF1dGhvclN0
eWxlcyhmYWxzZSkKICAgICAsIG1fcmVzZXRTdHlsZUluaGVyaXRhbmNlKGZhbHNlKQogICAgICwg
bV9pbnNlcnRpb25Qb2ludEFzc2lnbmVkVG8oMCkKKyAgICAsIG1fbnVtYmVyT2ZTaGFkb3dFbGVt
ZW50Q2hpbGRyZW4oMCkKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmgKaW5kZXggZDliNDI1YzYwODNiMTdhZjg4MjZlNjE2NDI3ODFmNTUyNTA3NTI1
MC4uMmU1MTZmYjFiYjRjZWY3YjYzZGYyNmI2NDM3ZDRmZTU3YzAzYjZkMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2hhZG93Um9vdC5oCkBAIC04OSw2ICs4OSwxMCBAQCBwdWJsaWM6CiAgICAgSW5zZXJ0aW9uUG9p
bnQqIGFzc2lnbmVkVG8oKSBjb25zdDsKICAgICB2b2lkIHNldEFzc2lnbmVkVG8oSW5zZXJ0aW9u
UG9pbnQqKTsKIAorICAgIHZvaWQgcmVnaXN0ZXJTaGFkb3dFbGVtZW50KCkgeyArK21fbnVtYmVy
T2ZTaGFkb3dFbGVtZW50Q2hpbGRyZW47IH0KKyAgICB2b2lkIHVucmVnaXN0ZXJTaGFkb3dFbGVt
ZW50KCkgeyAtLW1fbnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hpbGRyZW47IH0KKyAgICBib29sIGhh
c1NoYWRvd0luc2VydGlvblBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZlNoYWRvd0Vs
ZW1lbnRDaGlsZHJlbiA+IDA7IH0KKwogI2lmbmRlZiBOREVCVUcKICAgICBTaGFkb3dSb290VHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAjZW5kaWYKQEAgLTEwNiw2ICsxMTAs
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hcHBseUF1dGhvclN0eWxlcyA6IDE7CiAgICAgYm9v
bCBtX3Jlc2V0U3R5bGVJbmhlcml0YW5jZSA6IDE7CiAgICAgSW5zZXJ0aW9uUG9pbnQqIG1faW5z
ZXJ0aW9uUG9pbnRBc3NpZ25lZFRvOworICAgIHNpemVfdCBtX251bWJlck9mU2hhZG93RWxlbWVu
dENoaWxkcmVuOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIFNoYWRvd1Jvb3RUeXBlIG1fdHlwZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCmluZGV4IDI2OTkwYTVkZjI4
NGE5N2M2YTI0MWY1YzcwYTI4ZWI4ZDg3N2U5MTguLmViY2Q1ZjRhOTM3ZTYyNDYxNGVlOTQ2OWQ0
YTlhZmUwMTQ0MDBiNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxl
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNw
cApAQCAtOTYsMjIgKzk2LDIyIEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6c2NvcGVkQXR0cmli
dXRlQ2hhbmdlZChib29sIHNjb3BlZCkKICAgICBpZiAoc2NvcGVkKSB7CiAgICAgICAgIC8vIEFz
IGFueSA8c3R5bGU+IGluIGEgc2hhZG93IHRyZWUgaXMgdHJlYXRlZCBhcyAic2NvcGVkIiwKICAg
ICAgICAgLy8gbmVlZCB0byByZW1vdmUgdGhlIDxzdHlsZT4gZnJvbSBpdHMgc2hhZG93IHJvb3Qu
Ci0gICAgICAgIGlmIChtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgPT0gUmVnaXN0ZXJl
ZEluU2hhZG93Um9vdCkKKyAgICAgICAgaWYgKG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0
ZSA9PSBSZWdpc3RlcmVkSW5TaGFkb3dSb290IHx8IG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25T
dGF0ZSA9PSBSZWdpc3RlcmVkSW5TaGFkb3dSb290V2l0aEhvc3RSdWxlKQogICAgICAgICAgICAg
dW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShzaGFkb3dSb290KCkpOwogCi0gICAgICAgIGlmICht
X3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgIT0gUmVnaXN0ZXJlZEFzU2NvcGVkKQorICAg
ICAgICBpZiAobV9zY29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRlICE9IFJlZ2lzdGVyZWRBc1Nj
b3BlZCAmJiBtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgIT0gUmVnaXN0ZXJlZEFzU2Nv
cGVkV2l0aEhvc3RSdWxlKQogICAgICAgICAgICAgcmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUodHJ1
ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBJZiB0aGUgPHN0eWxlPiB3YXMg
c2NvcGVkLCBuZWVkIHRvIHJlbW92ZSB0aGUgPHN0eWxlPiBmcm9tIHRoZSBzY29waW5nCiAgICAg
Ly8gZWxlbWVudCwgaS5lLiB0aGUgcGFyZW50IG5vZGUuCi0gICAgaWYgKG1fc2NvcGVkU3R5bGVS
ZWdpc3RyYXRpb25TdGF0ZSA9PSBSZWdpc3RlcmVkQXNTY29wZWQpCisgICAgaWYgKG1fc2NvcGVk
U3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9PSBSZWdpc3RlcmVkQXNTY29wZWQgfHwgbV9zY29wZWRT
dHlsZVJlZ2lzdHJhdGlvblN0YXRlID09IFJlZ2lzdGVyZWRBc1Njb3BlZFdpdGhIb3N0UnVsZSkK
ICAgICAgICAgdW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShwYXJlbnROb2RlKCkpOwogCiAgICAg
Ly8gQXMgYW55IDxzdHlsZT4gaW4gYSBzaGFkb3cgdHJlZSBpcyB0cmVhdGVkIGFzICJzY29wZWQi
LAogICAgIC8vIG5lZWQgdG8gYWRkIHRoZSA8c3R5bGU+IHRvIGl0cyBzaGFkb3cgcm9vdC4KLSAg
ICBpZiAoaXNJblNoYWRvd1RyZWUoKSAmJiBtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUg
IT0gUmVnaXN0ZXJlZEluU2hhZG93Um9vdCkKKyAgICBpZiAoaXNJblNoYWRvd1RyZWUoKSAmJiBt
X3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgIT0gUmVnaXN0ZXJlZEluU2hhZG93Um9vdCAm
JiBtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgIT0gUmVnaXN0ZXJlZEluU2hhZG93Um9v
dFdpdGhIb3N0UnVsZSkKICAgICAgICAgcmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoZmFsc2UpOwog
fQogI2VuZGlmCkBAIC0xNDQsMTIgKzE0NCwyNCBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnJl
Z2lzdGVyV2l0aFNjb3BpbmdOb2RlKGJvb2wgc2NvcGVkKQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgc2NvcGUtPnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKKyAgICBzY29w
ZS0+cmVnaXN0ZXJTY29wZWRTdHlsZSgpOworCisgICAgYm9vbCBpc0hvc3RSdWxlUmVnaXN0ZXJl
ZCA9IGZhbHNlOworICAgIGlmIChoYXNIb3N0UnVsZSgpKQorICAgICAgICBpZiAoU2hhZG93Um9v
dCogc3IgPSBzaGFkb3dSb290KCkpCisgICAgICAgICAgICBpZiAoRWxlbWVudCogaG9zdCA9IHNy
LT5ob3N0KCkpIHsKKyAgICAgICAgICAgICAgICBob3N0LT5yZWdpc3RlclNjb3BlZFN0eWxlKCk7
CisgICAgICAgICAgICAgICAgaXNIb3N0UnVsZVJlZ2lzdGVyZWQgPSB0cnVlOworICAgICAgICAg
ICAgfQorCiAgICAgc2NvcGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICBpZiAoaW5Eb2N1
bWVudCgpICYmICFkb2N1bWVudCgpLT5wYXJzaW5nKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIo
KSkKICAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNT
dHlsZSk7CiAKLSAgICBtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgPSBzY29wZWQgPyBS
ZWdpc3RlcmVkQXNTY29wZWQgOiBSZWdpc3RlcmVkSW5TaGFkb3dSb290OworICAgIGlmIChzY29w
ZWQpCisgICAgICAgIG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9IGlzSG9zdFJ1bGVS
ZWdpc3RlcmVkPyBSZWdpc3RlcmVkQXNTY29wZWRXaXRoSG9zdFJ1bGUgOiBSZWdpc3RlcmVkQXNT
Y29wZWQ7CisgICAgZWxzZQorICAgICAgICBtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUg
PSBpc0hvc3RSdWxlUmVnaXN0ZXJlZD8gUmVnaXN0ZXJlZEluU2hhZG93Um9vdFdpdGhIb3N0UnVs
ZSA6IFJlZ2lzdGVyZWRJblNoYWRvd1Jvb3Q7CiB9CiAKIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6
dW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShDb250YWluZXJOb2RlKiBzY29wZSkKQEAgLTE2NCw4
ICsxNzYsMTQgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0aFNjb3BpbmdO
b2RlKENvbnRhaW5lck5vZGUqIHNjb3BlKQogCiAgICAgQVNTRVJUKHNjb3BlKTsKICAgICBpZiAo
c2NvcGUpIHsKLSAgICAgICAgQVNTRVJUKHNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgp
KTsKLSAgICAgICAgc2NvcGUtPnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworICAg
ICAgICBBU1NFUlQoc2NvcGUtPmhhc1Njb3BlZFN0eWxlKCkpOworICAgICAgICBzY29wZS0+dW5y
ZWdpc3RlclNjb3BlZFN0eWxlKCk7CisKKyAgICAgICAgaWYgKG1fc2NvcGVkU3R5bGVSZWdpc3Ry
YXRpb25TdGF0ZSA9PSBSZWdpc3RlcmVkSW5TaGFkb3dSb290V2l0aEhvc3RSdWxlIHx8IG1fc2Nv
cGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9PSBSZWdpc3RlcmVkQXNTY29wZWRXaXRoSG9zdFJ1
bGUpCisgICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogc3IgPSBzaGFkb3dSb290KCkpCisgICAg
ICAgICAgICAgICAgaWYgKEVsZW1lbnQqIGhvc3QgPSBzci0+aG9zdCgpKQorICAgICAgICAgICAg
ICAgICAgICBob3N0LT51bnJlZ2lzdGVyU2NvcGVkU3R5bGUoKTsKKwogICAgICAgICBzY29wZS0+
c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIH0KICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFk
b2N1bWVudCgpLT5wYXJzaW5nKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKQEAgLTE3Myw2
ICsxOTEsMTMgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0aFNjb3BpbmdO
b2RlKENvbnRhaW5lck5vZGUqIHNjb3BlKQogCiAgICAgbV9zY29wZWRTdHlsZVJlZ2lzdHJhdGlv
blN0YXRlID0gTm90UmVnaXN0ZXJlZDsKIH0KKworYm9vbCBIVE1MU3R5bGVFbGVtZW50OjpoYXNI
b3N0UnVsZSgpIGNvbnN0Cit7CisgICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBj
b25zdF9jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPih0aGlzKS0+c2hlZXQoKSkKKyAgICAgICAgcmV0
dXJuIHN0eWxlU2hlZXQtPmNvbnRlbnRzKCktPmhhc0hvc3RSdWxlKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQogI2VuZGlmCiAKIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRN
TFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50
KQpAQCAtMjAwLDcgKzIyNSw3IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb20o
Q29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbnQpCiAgICAgLy8gd2UnZCBuZWVkIHRvIGZpbmQg
YSB3YXkgdG8gZGlzY2VybiB3aGV0aGVyIHRoYXQgaXMgdGhlIGNhc2UsIG9yIHdoZXRoZXIgPHN0
eWxlIHNjb3BlZD4gaXRzZWxmIGlzIGFib3V0IHRvIGJlIHJlbW92ZWQuCiAgICAgaWYgKG1fc2Nv
cGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSAhPSBOb3RSZWdpc3RlcmVkKSB7CiAgICAgICAgIENv
bnRhaW5lck5vZGUqIHNjb3BlOwotICAgICAgICBpZiAobV9zY29wZWRTdHlsZVJlZ2lzdHJhdGlv
blN0YXRlID09IFJlZ2lzdGVyZWRJblNoYWRvd1Jvb3QpIHsKKyAgICAgICAgaWYgKG1fc2NvcGVk
U3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9PSBSZWdpc3RlcmVkSW5TaGFkb3dSb290IHx8IG1fc2Nv
cGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9PSBSZWdpc3RlcmVkSW5TaGFkb3dSb290V2l0aEhv
c3RSdWxlKSB7CiAgICAgICAgICAgICBzY29wZSA9IHNoYWRvd1Jvb3QoKTsKICAgICAgICAgICAg
IGlmICghc2NvcGUpCiAgICAgICAgICAgICAgICAgc2NvcGUgPSBpbnNlcnRpb25Qb2ludC0+c2hh
ZG93Um9vdCgpOwpAQCAtMjU1LDYgKzI4MCw3IEBAIEVsZW1lbnQqIEhUTUxTdHlsZUVsZW1lbnQ6
OnNjb3BpbmdFbGVtZW50KCkgY29uc3QKIAogICAgIHJldHVybiB0b0VsZW1lbnQocGFyZW50T3JI
b3N0KTsKIH0KKwogI2VuZGlmIC8vIEVOQUJMRShTVFlMRV9TQ09QRUQpCiAKIHZvaWQgSFRNTFN0
eWxlRWxlbWVudDo6ZGlzcGF0Y2hQZW5kaW5nTG9hZEV2ZW50cygpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFN0eWxlRWxlbWVudC5oCmluZGV4IDYzYTgyYzRlZWZmZGU1NzE3YmQ3Zjg3YzU4M2MzOWY0
ZDVjNTZkZDIuLjAxYzNkMzBhYjBhODhjYTNkNDk1ZDUzYWM4MjY0YTQ4OTcyNTA2MWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCkBAIC04MCw2ICs4MCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzY29wZWRBdHRyaWJ1dGVDaGFuZ2VkKGJvb2wpOwogICAgIHZvaWQgcmVn
aXN0ZXJXaXRoU2NvcGluZ05vZGUoYm9vbCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyV2l0aFNjb3Bp
bmdOb2RlKENvbnRhaW5lck5vZGUqKTsKKyAgICBib29sIGhhc0hvc3RSdWxlKCkgY29uc3Q7CiAj
ZW5kaWYKIAogICAgIGJvb2wgbV9maXJlZExvYWQ7CkBAIC04OSw3ICs5MCw5IEBAIHByaXZhdGU6
CiAgICAgZW51bSBTY29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRlIHsKICAgICAgICAgTm90UmVn
aXN0ZXJlZCwKICAgICAgICAgUmVnaXN0ZXJlZEFzU2NvcGVkLAotICAgICAgICBSZWdpc3RlcmVk
SW5TaGFkb3dSb290CisgICAgICAgIFJlZ2lzdGVyZWRBc1Njb3BlZFdpdGhIb3N0UnVsZSwKKyAg
ICAgICAgUmVnaXN0ZXJlZEluU2hhZG93Um9vdCwKKyAgICAgICAgUmVnaXN0ZXJlZEluU2hhZG93
Um9vdFdpdGhIb3N0UnVsZQogICAgIH07CiAgICAgU2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0
ZSBtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmNwcAppbmRleCA5Mzg0Mzk2MTJj
YTIxZDI2OWU1Nzc4YTk2YjE1OTgwZWY3NTQyYjlhLi44ZTQ4MjNmNjQxNzEwNDZhZDhhZDliNjAy
OTg2YmFkNDg2NjVjNGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9I
VE1MU2hhZG93RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRN
TFNoYWRvd0VsZW1lbnQuY3BwCkBAIC02OCw0ICs2OCwyOCBAQCBib29sIEhUTUxTaGFkb3dFbGVt
ZW50Ojpkb2VzU2VsZWN0RnJvbUhvc3RDaGlsZHJlbigpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCitOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxTaGFkb3dFbGVt
ZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbnQpCit7CisgICAg
SW5zZXJ0aW9uUG9pbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7CisKKyAgICBpZiAo
aW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9vdCog
cm9vdCA9IHNoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgIHJvb3QtPnJlZ2lzdGVyU2hhZG93RWxl
bWVudCgpOworICAgIH0KKworICAgIHJldHVybiBJbnNlcnRpb25Eb25lOworfQorCit2b2lkIEhU
TUxTaGFkb3dFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlKiBpbnNlcnRpb25Qb2lu
dCkKK3sKKyAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSkgeworICAgICAgICBT
aGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgpOworICAgICAgICBpZiAoIXJvb3QpCisgICAg
ICAgICAgICByb290ID0gaW5zZXJ0aW9uUG9pbnQtPnNoYWRvd1Jvb3QoKTsKKyAgICAgICAgaWYg
KHJvb3QpCisgICAgICAgICAgICByb290LT51bnJlZ2lzdGVyU2hhZG93RWxlbWVudCgpOworICAg
IH0KKyAgICBJbnNlcnRpb25Qb2ludDo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
SFRNTFNoYWRvd0VsZW1lbnQuaAppbmRleCBhNGVjZGIzYWQ0NWZiOGVjNGU5YWE1MDAwYTAxZTNh
ZWQxY2QyMGRjLi42ZjczMjliNTc0N2UwMjI2YmZjOGM4ZDU1MDhkYjBhNDZjNDU5NTBhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmgKQEAgLTQ2
LDYgKzQ2LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGlzU2VsZWN0VmFsaWQoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBkb2VzU2VsZWN0RnJvbUhvc3RDaGlsZHJl
bigpIGNvbnN0OwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJbnNlcnRpb25Ob3RpZmljYXRp
b25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlKikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqKSBPVkVSUklERTsKKwogcHJpdmF0
ZToKICAgICBIVE1MU2hhZG93RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggMGM1MDY1MWI2Mzcx
ZDBiMzVkZjA0YTBiYjA3ZGMxZmM4ZjRjMDk1My4uNmIzZmViMjNjODFlZGU0MDgwYTFiOGRjMDBm
Nzc4NTI4Y2VhYzZjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMzI5
LDcgKzMyOSw3IEBAIHNpemVfdCBJbnRlcm5hbHM6Om51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hp
bGRyZW4oY29uc3QgTm9kZSogc2NvcGUsIEV4Y2VwdGlvbkNvCiB7CiAgICAgaWYgKHNjb3BlICYm
IChzY29wZS0+aXNFbGVtZW50Tm9kZSgpIHx8IHNjb3BlLT5pc1NoYWRvd1Jvb3QoKSkpCiAjaWYg
RU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICAgICAgcmV0dXJuIHNjb3BlLT5udW1iZXJPZlNjb3Bl
ZEhUTUxTdHlsZUNoaWxkcmVuKCk7CisgICAgICAgIHJldHVybiBzY29wZS0+bnVtYmVyT2ZTY29w
ZWRTdHlsZXMoKTsKICNlbHNlCiAgICAgICAgIHJldHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggM2Qz
NDBmMzVmMDUwYWM2NDAwMTkxMDMzMTU1YmJmNGNmMTE5NGUyNi4uMTVkNGQyYmYyYTJjNTM4MTU4
MDQ3OTQzODM0YmU5MjhiNGY1YjRiOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA3LTMw
ICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93
IERPTV0gTmVlZHMgQGhvc3QgcnVsZSBmb3IgU2hhZG93RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjA2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvcHNl
dWRvLWhvc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cv
cHNldWRvLWhvc3QuaHRtbDogQWRkZWQuCisKIDIwMTItMDctMjkgIERhbiBCZXJuc3RlaW4gIDxt
aXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBIaXQgdGVzdGluZyBpbiB0aGUgZ2FwIGJldHdlZW4g
cGFnZXMgcmV0dXJucyBpbmNvcnJlY3QgcmVzdWx0cyBpbiBmbGlwcGVkIGJsb2NrcyB3cml0aW5n
IG1vZGVzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLWhv
c3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1ob3N0
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZWM5MGYzNGJhMTY5Nzg1YjM2MjFmM2U3MmY3ZDUz
M2Q4NGFmMDgxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L3BzZXVkby1ob3N0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitob3N0OiByZ2IoMjU1
LCAwLCAwKQoraG9zdDogcmdiKDI1NSwgMCwgMCkKK2hvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0
OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigxMjgsIDEy
OCwgMTI4KQoraG9zdDogcmdiKDI1NSwgMjU1LCAwKQoraG9zdDogcmdiKDI1NSwgMCwgMCkKK25l
c3RlZEhvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdDogcmdi
KDI1NSwgMjU1LCAwKQorSGVsbG8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3No
YWRvdy9wc2V1ZG8taG9zdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVk
by1ob3N0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjNmM2I3NmM5NjE5ZWJjMjEwMTA5ZDM4NTQyM2MyMmQw
YWJmMzRjMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9w
c2V1ZG8taG9zdC5odG1sCkBAIC0wLDAgKzEsMTU3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c3R5bGU+CisjaG9zdCB7CisgIGNvbG9yOiBncmF5OworfQorPC9zdHlsZT4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9wb2x5ZmlsbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorZnVuY3Rpb24gZHVtcENvbXB1dGVkU3R5bGUobm9kZSkKK3sKKyAgICBkZWJ1Zyhub2RlLmlk
ICsgIjogIiArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVs
bCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7Cit9CisKK2Z1bmN0aW9uIHByZXByb2Nlc3NG
b3JUZXN0KCkKK3sKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBh
cmVudCIpOworICAgIHBhcmVudC5pbm5lckhUTUwgPSAnPGRpdiBpZD0iaG9zdCI+PHNwYW4+SGVs
bG88L3NwYW4+PC9kaXY+JzsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZUNvbnRlbnRDYXNlKCkK
K3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jv
b3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjog
cmVkOyB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHls
ZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZVNoYWRvd0Nhc2UoKQoreworICAgIHBy
ZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsK
KyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08L3N0
eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30K
KworZnVuY3Rpb24gdGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVkKCkKK3sKKyAgICBwcmVwcm9jZXNz
Rm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3Qi
KTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hh
ZG93LmlubmVySFRNTCA9ICI8ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBjb2xvcjogcmVkOyB9
PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PjxkaXY+PHN0eWxlIHNjb3BlZD5AaG9zdCB7IGNvbG9y
OiBibHVlOyB9PC9zdHlsZT48L2Rpdj48L2Rpdj4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhv
c3QpOworfQorCitmdW5jdGlvbiB0ZXN0VHdvU2hhZG93Um9vdHNDYXNlKCkKK3sKKyAgICBwcmVw
cm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Imhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9z
dCk7CisgICAgdmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7
CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogcmVk
OyB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5l
ckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IGJsdWU7IH08L3N0eWxlPjxzaGFkb3c+PC9z
aGFkb3c+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVz
dFR3b1NoYWRvd1Jvb3RzQ3JlYXRpbmdEaWZmZXJlbnRPcmRlckNhc2UoKQoreworICAgIHByZXBy
b2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
aG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsK
KyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IGJs
dWU7IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJI
VE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxjb250ZW50PjwvY29u
dGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0
TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvd0NvbnRlbnQoKQoreworICAgIHByZXBy
b2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
aG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
KTsKKyAgICB2YXIgb2xkZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAg
ICB2YXIgeW91bmdlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZh
ciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworCisgICAgeW91
bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICB5b3VuZ2Vy
U2hhZG93LmlubmVySFRNTCA9ICI8Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBvbGRlclNoYWRv
dy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IGdyZWVuOyB9PC9zdHlsZT48c2hh
ZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhv
c3QgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1w
Q29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxlU2hhZG93Um9v
dHNXaXRoSW5lcnRTaGFkb3coKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFy
IGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RT
aGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgb2xkZXJTaGFkb3cg
PSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlclNoYWRvdyA9IG5l
dyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBX
ZWJLaXRTaGFkb3dSb290KGhvc3QpOworCisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0g
IjxzdHlsZT5AaG9zdCB7IGNvbG9yOiB5ZWxsb3c7IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+
IjsKKyAgICB5b3VuZ2VyU2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjog
Ymx1ZTsgfTwvc3R5bGU+PGRpdj5pbmVydDwvZGl2PiI7CisgICAgb2xkZXJTaGFkb3cuaW5uZXJI
VE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiBncmVlbjsgfTwvc3R5bGU+PHNoYWRvdz48L3No
YWRvdz4iOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29s
b3I6IHJlZDsgfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVk
U3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3ROZXN0ZWRDYXNlKCkKK3sKKyAgICBwcmVw
cm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Imhvc3QiKTsKKyAgICB2YXIgb3V0ZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
KTsKKyAgICBvdXRlclNoYWRvdy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0IHsgY29sb3I6IHJl
ZDsgfTwvc3R5bGU+PGRpdiBpZD0ibmVzdGVkSG9zdCI+SW5uZXJTaGFkb3c8L2Rpdj4nOworICAg
IHZhciBuZXN0ZWQgPSBvdXRlclNoYWRvdy5nZXRFbGVtZW50QnlJZCgibmVzdGVkSG9zdCIpOwor
ICAgIHZhciBpbm5lclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KG5lc3RlZCk7CisgICAg
aW5uZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9zdCB7IGNvbG9yOiBibHVlOyB9PC9z
dHlsZT5TaG93IDxzaGFkb3c+PC9zaGFkb3c+IGluIG91dGVyLic7CisgICAgZHVtcENvbXB1dGVk
U3R5bGUoaG9zdCk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUobmVzdGVkKTsKK30KKworZnVuY3Rp
b24gdGVzdEhvc3RWc1Njb3BlZFN0eWxlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOwor
ICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICBob3N0
LmlubmVySFRNTCA9ICI8c3R5bGUgc2NvcGVkPiNob3N0IHsgY29sb3I6IHllbGxvdzsgfTwvc3R5
bGU+PHNwYW4+SGVsbG88L3NwYW4+IjsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xv
cjogcmVkOyB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRT
dHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdEhvc3RWc0lubGluZVN0eWxlKCkKK3sKKyAg
ICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImhvc3QiKTsKKyAgICBob3N0LnN0eWxlLmNvbG9yID0gInllbGxvdyI7CisgICAgaG9z
dC5pbm5lckhUTUwgPSAiPHNwYW4+SGVsbG88L3NwYW4+IjsKKyAgICB2YXIgc2hhZG93ID0gbmV3
IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+
QGhvc3QgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBk
dW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gcnVuVGVzdHMoKQoreworICAg
IHRlc3RTaW1wbGVDb250ZW50Q2FzZSgpOworICAgIHRlc3RTaW1wbGVTaGFkb3dDYXNlKCk7Cisg
ICAgdGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVkKCk7CisgICAgdGVzdFR3b1NoYWRvd1Jvb3RzQ2Fz
ZSgpOworICAgIHRlc3RUd29TaGFkb3dSb290c0NyZWF0aW5nRGlmZmVyZW50T3JkZXJDYXNlKCk7
CisgICAgdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50KCk7Cisg
ICAgdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3coKTsKKyAgICB0ZXN0TmVz
dGVkQ2FzZSgpOworICAgIHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpOworICAgIHRlc3RIb3N0VnNJ
bmxpbmVTdHlsZSgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRl
c3RzKCkiPgorICA8ZGl2IGlkPSJwYXJlbnQiPgorICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155438</attachid>
            <date>2012-07-30 22:19:38 -0700</date>
            <delta_ts>2012-07-31 02:45:15 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-88606-20120731141921.patch</filename>
            <type>text/plain</type>
            <size>50130</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MTcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDAxMzU1YjRkMjQxMTI4
ZDc2YWVhMzE4NjU3MGNiZDRlNzIwYzllYS4uZjk3YTVhZDdjNjgxMzM1NTM4NGRkM2Y3ODM3NjU3
YTJiMGExMTQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NyBAQAorMjAxMi0wNy0zMCAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01d
IE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIEltcGxlbWVu
dGVkIEBob3N0LUBydWxlcyBhY2NvcmRpbmcgdG8gdGhlIHNoYWRvdyBkb20gc3BlYzoKKyAgICAg
ICAgaHR0cDovL2R2Y3MudzMub3JnL2hnL3dlYmNvbXBvbmVudHMvcmF3LWZpbGUvdGlwL3NwZWMv
c2hhZG93L2luZGV4Lmh0bWwjaG9zdC1hdC1ydWxlCisgICAgICAgIFRoZSBkZXNpZ24gZG9jIGlz
OgorICAgICAgICBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFQMnlvcmNoRjhs
Y2kyc2Njci1tVlNSZjJkdHZqS2VpdXlRV3pDQjJiRUE4L2VkaXQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvcHNl
dWRvLWhvc3QuaHRtbAorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAgQWRk
ZWQgYSBuZXcgdG9rZW4gSE9TVF9TWU0gYW5kIGFkZGVkIGEgbmV3IHJ1bGUgZm9yIEBob3N0IEAt
cnVsZXMuCisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKToKKyAgICAgICAgTW9kaWZpZWQgZGV0ZWN0QXRUb2tl
biB0byBwYXJzZSAiQGhvc3QiIGFuZCBnZW5lcmF0ZSBIT1NUX1NZTSB0b2tlbi4KKyAgICAgICAg
QWRkZWQgYSBuZXcgbWV0aG9kIHRvIGNyZWF0ZSBhIHJ1bGUgZm9yIEBob3N0IEAtcnVsZSwgaS5l
LiBhbgorICAgICAgICBpbnN0YW5jZSBvZiBjbGFzcyBTdHlsZVJ1bGVIb3N0LgorICAgICAgICAq
IGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgQWRkZWQgYSBkZWNsYXJhdGlvbiBvZiBjcmVhdGVI
b3N0UnVsZS4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSdWxlU2V0OjphZGRIb3N0UnVsZSk6CisgICAgICAgIEFkZGVkIGEgbWV0aG9kIHRvIHN0
b3JlIEBob3N0IEAtcnVsZXMgaW4gUnVsZVNldC4gVGhlIG1ldGhvZCB1c2VzCisgICAgICAgIEhv
c3RSdWxlTWFwLCBtX2hvc3RSdWxlcy4gVGhlIG1hcCdzIGtleXMgYXJlIHNoYWRvdyByb290cyBh
bmQgdGhlIHZhbHVlcworICAgICAgICBhcmUgQGhvc3QgQC1ydWxlcyBkZWNsYXJlZCBpbiB0aGUg
c2hhZG93IHJvb3RzLiBFYWNoIEBob3N0IEAtcnVsZXMgYXJlCisgICAgICAgIHN0b3JlZCBpbiBz
aW1sYXIgd2F5IHRvIG90aGVyIHJ1bGVzLCBpLmUuIGJ5IHVzaW5nIFJ1bGVEYXRhLgorICAgICAg
ICBXZSBuZWVkIFJ1bGVEYXRhIHRvIHVzZSBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QsIGFw
cGx5UHJvcGVydGllcywKKyAgICAgICAgYW5kIHNvIG9uLgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6cnVsZVNldEZvclNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmxvY2F0ZUNvdXNpbkxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6Y2FuU2hhcmVTdHlsZVdpdGhXaXRoRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSk6CisgICAgICAgIEFzIGhhc1Njb3BlZEhUTUxT
dHlsZUNoaWxkIHdhcyByZW5hbWVkIHRvIGhhc1Njb3BlZFN0eWxlLCBtb2RpZmllZCB0bworICAg
ICAgICB1c2UgdGhlIHJlbmFtZWQgbWV0aG9kIG5hbWUuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjp0cmFuc2Zlck1hdGNoZWRSdWxlcyk6CisgICAgICAgIE1vdmVkIHRoZSBjb2Rl
IGZyb20gc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzLiBUbyBhcHBseSBAaG9zdCBALXJ1bGVz
CisgICAgICAgIGFmdGVyIHN0eWxlIHJ1bGVzIGRlY2xhcmVkIGluIGRvY3VtZW50LCBjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckhvc3QgaXMKKyAgICAgICAgaW52b2tlZCBhZnRlciBtYXRjaFNjb3Bl
ZEF1dGhvclJ1bGVzIGFuZCBzb3J0TWF0Y2hlZFJ1bGVzIGFyZSBpbnZva2VkLgorICAgICAgICBp
LmUuCisgICAgICAgIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMgLT4gc29ydE1hdGNoZWRSdWxlcyAt
PiBjb2xsZWN0IEBob3N0IEAtcnVsZXMgLT4KKyAgICAgICAgdHJhbnNmZXJNYXRjaGVkUnVsZXMu
CisgICAgICAgIEFzIEBob3N0IEAtcnVsZXMncyBzZWxlY3RvciBpcyBqdXN0ICJAaG9zdCIgYW5k
IGR1bW15IHNlbGVjdG9ycyBhcmUKKyAgICAgICAgdXNlZCB0byBzdG9yZSBhcyBSdWxlRGF0YSwg
cnVsZXMgaW4gZG9jdW1lbnQsIGUuZy4gaWQgcnVsZXMgYW5kIHNvIG9uLAorICAgICAgICB3aWxs
IG92ZXJyaWRlIEBob3N0IEAtcnVsZXMuIFRoaXMgaXMgZG9uZSBieSBzb3J0TWF0Y2hlZFJ1bGVz
LCBjb21wYXJpbmcKKyAgICAgICAgc2VsZWN0b3IncyBzcGVjaWZpY2l0ZXMgYW5kIHN0eWxlIHJ1
bGVzJyBzb3VyY2UgcG9zaXRpb25zLgorICAgICAgICBBbiBhbHRlcm5hdGl2ZSB3YXkgaXMgdG8g
YXNzaWduIGR1bW15IHNwZWNpZmljaXR5IHdpdGggQGhvc3QgQC1ydWxlcy4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyk6CisgICAg
ICAgIE1vdmVkIHRoZSAidHJhbnNmZXIiIGNvZGUgdG8gdHJhbnNmZXJNYXRjaGVkUnVsZXMuIE5v
dyB0aGlzIG1ldGhvZAorICAgICAgICBpbnZva2VzIHRoZSBuZXcgbWV0aG9kIHRyYW5zZmVyTWF0
Y2hlZFJ1bGVzIGFmdGVyIGludm9raW5nCisgICAgICAgIHNvcnRNYXRjaGVkUnVsZXMuCisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIFRo
aXMgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIG1fZWxlbWVudCBoYXMgQGhvc3QgQC1ydWxlcyBvciBu
b3QgYW5kCisgICAgICAgIGlmIGV4aXN0cywgaW52b2tlcyBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
ckhvc3QuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckhvc3QpOgorICAgICAgICBUaGlzIG1ldGhvZCBjaGVja3Mgd2hldGhlciBzaGFkb3cg
cm9vdHMgYXR0YWNoZWQgdG8gdGhlIGdpdmVuIGVsZW1lbnQKKyAgICAgICAgaGF2ZSA8c2hhZG93
PiBvciBub3QgYW5kIGZpbmRzIHRoZSB5b3VuZ2VzdCBzaGFkb3cgcm9vdCB3aGljaCBkb2Vzbid0
CisgICAgICAgIGhhdmUgYW55IDxzaGFkb3c+IGVsZW1lbnRzLiBAaG9zdCBALXJ1bGVzIGZyb20g
dGhlIHNoYWRvdyByb290IHRvCisgICAgICAgIHRoZSB5b3VuZ2VzdCBzaGFkb3cgcm9vdCBhcmUg
YXBwbGllZCwgaS5lLiBwcm92aWRlZCBmb3IKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JMaXN0LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxl
cyk6CisgICAgICAgIFJlbW92ZWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzLiBJbnN0ZWFk
LCBtb2RpZmllZCB0byB1c2UKKyAgICAgICAgc29ydE1hdGNoZWRSdWxlcyBhbmQgdHJhbnNmZXJN
YXRjaGVkUnVsZXMgc2VwYXJhdGVseS4gVGhlIGFib3ZlCisgICAgICAgIG1hdGNoSG9zdFJ1bGVz
IGlzIGludm9rZWQgYmV0d2VlbiB0aGUgc29ydE1hdGNoZWRSdWxlcyBhbmQKKyAgICAgICAgdHJh
bnNmZXJNYXRjaGVkUnVsZXMuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGRI
b3N0UnVsZSk6CisgICAgICAgIFRoaXMgbWV0aG9kIGZpbmRzIHRoZSBydWxlc2V0IG1hdGNoZWQg
d2l0aCB0aGUgZ2l2ZW4gQGhvc3QgQC1ydWxlcywgaS5lLgorICAgICAgICB0aGUgc2hhZG93IGhv
c3Qgb2YgdGhlIHNoYWRvdyBET00gc3VidHJlZSB3aGljaCBjb250YWlucyB0aGUgc3R5bGUKKyAg
ICAgICAgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBAaG9zdCBALXJ1bGVzLiBUaGVuIHRoZSBtZXRo
b2Qgc3RvcmVzIEBob3N0CisgICAgICAgIEAtcnVsZXMgaW4gdGhlIHJ1bGVzZXQgYnkgdXNpbmcg
UnVsZVNldDo6YWRkSG9zdFJ1bGUuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjph
ZGRSdWxlc0Zyb21TaGVldCk6CisgICAgICAgIE5ld2x5IGFkZGVkIHRoZSBjb2RlIGZvciBzdG9y
aW5nIEBob3N0IEAtcnVsZXMgaW4gUnVsZVNldC4gQXMgQGhvc3QKKyAgICAgICAgQC1ydWxlcydz
IHNjb3BlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgc3R5bGUgZWxlbWVudCB3aGljaCBoYXMgdGhl
CisgICAgICAgIEBob3N0IEAtcnVsZXMsIHRoZSBjb2RlIGludm9rZXMgU3R5bGVSZXNvbHZlcjo6
YWRkSG9zdFJ1bGUgdG8gYWRkCisgICAgICAgIHRoZSBAaG9zdCBALXJ1bGVzIHRvIG1hdGNoZWQg
cnVsZXNldC4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVS
ZXNvbHZlcik6CisgICAgICAgIEFkZGVkIGRlY2xhcmF0aW9ucyBvZiB0cmFuc2Zlck1hdGNoZWRS
dWxlcywgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JIb3N0LAorICAgICAgICBtYXRjaEhvc3RSdWxl
cywgYW5kIGFkZEhvc3RSdWxlLgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJ1bGVCYXNlOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmNy
ZWF0ZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0OjpTdHls
ZVJ1bGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUhvc3Q6On5TdHlsZVJ1bGVI
b3N0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUhvc3Q6OnNldFByb3BlcnRpZXMpOgor
ICAgICAgICBJbXBsZW1lbnRlZCBjbGFzcyBTdHlsZVJ1bGVIb3N0LiBTdHlsZVJ1bGVIb3N0IGlu
aGVyaXRzIGZyb20KKyAgICAgICAgU3R5bGVSdWxlQmFzZS4gQXMgU3R5bGVSdWxlIHNwZWNpZmll
cyBtX3R5cGUgYXMgU3R5bGUgYW5kIG1fdHlwZSBpcworICAgICAgICBhIHByaXZhdGUgbWVtYmVy
IHZhcmlhYmxlIG9mIGNsYXNzIFN0eWxlQmFzZSwgU3R5bGVSdWxlSG9zdCBjYW5ub3QKKyAgICAg
ICAgaW5oZXJpdCBmcm9tIFN0eWxlUnVsZS4gU3R5bGVSdWxlSG9zdCBoYXMgUmVmUHRyPFN0eWxl
UnVsZT4gYW5kCisgICAgICAgIHRoZSBTdHlsZVJ1bGUgaXMgdXNlZCB0byBhcHBseSBAaG9zdCBA
LXJ1bGVzIHRvIHNoYWRvdyBob3N0cy4KKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjppc0hvc3RSdWxlKToKKyAgICAgICAgSW1wbGVt
ZW50ZWQgaW4gc2ltaWxhciB3YXkgdG8gb3RoZXIgc3R5bGUgcnVsZXMuIElmIGEgcnVsZSBpcyBh
biBAaG9zdAorICAgICAgICBALXJ1bGUsIHJldHVybnMgdHJ1ZS4gT3RoZXJ3aXNlLCBmYWxzZS4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJ1bGVIb3N0OjpjaGlsZCk6CisgICAgICAgIFJldHVybnMgU3R5bGVSdWxlLgor
ICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Omhhc1Njb3Bl
ZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om51bWJlck9mU2NvcGVkU3R5bGVzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlZ2lzdGVyU2NvcGVkU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6dW5yZWdpc3RlclNjb3BlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6Omhhc1Njb3BlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om51bWJlck9m
U2NvcGVkU3R5bGVzKToKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICBSZW5hbWVkLCBi
ZWNhdXNlIHRoZSBudW1iZXIgaXMgbm90IHRoZSBudW1iZXIgb2YgY2hpbGQgc3R5bGUgZWxlbWVu
dHMsCisgICAgICAgIGJ1dCBzY29wZWQgc3R5bGVzIHdob3NlIHNjb3Bpbmcgbm9kZSBpcyB0aGUg
bm9kZS4KKyAgICAgICAgUmVuYW1lZCB0aGUgZGVjbGFyYXRpb25zIHJlbGF0ZWQgdG8gc2NvcGVk
IHN0eWxlcy4KKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFkb3dSb290OjpTaGFkb3dSb290KToKKyAgICAgICAgSW5pdGlhbGl6ZWQgbV9udW1iZXJP
ZlNoYWRvd0VsZW1lbnRDaGlsZHJlbi4KKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6cmVnaXN0ZXJTaGFkb3dFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnVucmVnaXN0ZXJTaGFkb3dFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6Omhhc1NoYWRvd0luc2VydGlvblBvaW50KToKKyAgICAg
ICAgQXMgQGhvc3QgQC1ydWxlcyByZXF1aXJlcyB0byBxdWlja2x5IGZpbmQgd2hldGhlciB0aGVy
ZSBleGlzdCBhbnkKKyAgICAgICAgPHNoYWRvdz4gaW4gc2hhZG93IERPTSBzdWJ0cmVlLCBpbXBs
ZW1lbnRlZCB0aGVzZSBtZXRob2RzLgorICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpyZWdpc3RlcldpdGhTY29w
aW5nTm9kZSk6CisgICAgICAgIEFkZGVkIHR3byBuZXcgc3RhdGU6IFJlZ2lzdGVyZWRBc1Njb3Bl
ZFdpdGhIb3N0UnVsZSBhbmQKKyAgICAgICAgUmVnaXN0ZXJlZEluU2hhZG93Um9vdFdpdGhIb3N0
UnVsZS4gVGhlIHN0YXRlIG1lYW5zLAorICAgICAgICB0aGUgc3R5bGUgd2FzIHJlZ2lzdGVyZWQg
d2l0aCB0aGUgc2NvcGluZyBub2RlIG9yIHRoZSBzaGFkb3cgcm9vdCwKKyAgICAgICAgYW5kIEBo
b3N0IEAtcnVsZXMgd2VyZSByZWdpc3RlcmVkIHdpdGggdGhlIHNoYWRvdyBob3N0IG9mIHRoZSBz
aGFkb3cKKyAgICAgICAgcm9vdC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6
OnNjb3BlZEF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxl
bWVudDo6dW5yZWdpc3RlcldpdGhTY29waW5nTm9kZSk6CisgICAgICAgIElmIHRoZSBzdGF0ZSBp
cyBSZWdpc3RlcmVkSW5TaGFkb3dSb290V2l0aEhvc3RSdWxlIG9yCisgICAgICAgIFJlZ2lzdGVy
ZWRBc1Njb3BlZFdpdGhIb3N0UnVsZSwgdW5yZWdpc3RlciB3aXRoIHRoZSBzaGFkb3cgcm9vdCBh
bmQKKyAgICAgICAgdGhlIHNoYWRvdyBob3N0IG9mIHRoZSBzaGFkb3cgcm9vdC4KKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgVXBkYXRl
ZCB0aGUgY29uZGl0aW9uOiB1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFN0eWxlRWxlbWVudDo6aGFzSG9zdFJ1bGUpOgorICAgICAgICBSZXR1cm5zIHRy
dWUgaWYgdGhlIHN0eWxlIGNvbnRlbnQgaGFzIGFueSBAaG9zdCBALXJ1bGUuCisgICAgICAgIE90
aGVyd2lzZSwgZmFzZS4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2hhZG93bGVtZW50OjppbnNlcnRlZEludG8pOgor
ICAgICAgICBSZWdpc3RlcnMgPHNoYWRvdz4gd2l0aCB0aGUgc2hhZG93IHJvb3QgaWYgPHNoYWRv
dz4gaXMgYWN0aXZlIGFuZAorICAgICAgICBpdHMgaW5zZXJ0aW9uIHBvaW50IGlzIGluIGRvY3Vt
ZW50LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNoYWRvd2xlbWVudDo6cmVtb3ZlZEZyb20pOgor
ICAgICAgICBVbnJlZ2lzdGVyIDxzaGFkb3c+IGlmIDxzaGFkb3c+IHdhcyByZWdpc3RlcmVkIHdp
dGggdGhlIHNoYWRvdyByb290LgorICAgICAgICAqIGh0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVt
ZW50Lmg6CisgICAgICAgIEFkZGVkIHRoZSBkZWNsYXJhdGlvbnMgb2YgdGhlIGFib3ZlIG1ldGhv
ZHMuCisgICAgICAgIEFkZGVkIG1fcmVnaXN0ZXJlZFdpdGhTaGFkb3dSb290IHRvIGhvbGQgaW5m
b3JtYXRpb24gYWJvdXQgd2hldGhlcgorICAgICAgICA8c2hhZG93PiB3YXMgcmVnaXN0ZXJlZCB3
aXRoIHRoZSBzaGFkb3cgcm9vdCBvciBub3QuCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpudW1iZXJPZlNjb3BlZEhUTUxTdHls
ZUNoaWxkcmVuKToKKyAgICAgICAgQXMgbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbiBp
cyByZW5hbWVkLCB1cGRhdGVkLiBUaGlzIG1ldGhvZAorICAgICAgICBzaG91bGQgYmUgcmVuYW1l
ZCB0b28uIEhvd2V2ZXIgaXQgcmVxdWlyZXMgdG8gY2hhbmdlIHNldmVyYWwgbGF5b3V0CisgICAg
ICAgIHRlc3RzLiBUbyBhdm9pZCBtYWtpbmcgdGhpcyBjaGFuZ2UgbGFyZ2VyLCB3aWxsIHVwZGF0
ZSBpbiBhbm90aGVyCisgICAgICAgIHBhdGNoLgorCiAyMDEyLTA3LTMwICBZb3NoaWZ1bWkgSW5v
dWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0NTU10gQ2hhbmdlIEVsZW1lbnQ6
OmlzUmVhZE9ubHlGb3JtQ29udHJvbCB0byBzaG91bGRNYXRjaFJlYWRXcml0ZVNlbGVjdG9yIG9y
IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpyZWFkT25seQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueSBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFy
LnkKaW5kZXggMWM2MDRlNzZiNGRhNGNjNjVmMzk1YmM0YTczYjExMjU2MWJkNWM4NC4uZTZhMTA5
Y2Y5NWYzYWE0OWVlNjAzZmUzNGM0M2NmNzQ0YzFjODU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0dyYW1tYXIueQorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1h
ci55CkBAIC0xMzIsNiArMTMyLDcgQEAgc3RhdGljIGludCBjc3N5eWxleChZWVNUWVBFKiB5eWx2
YWwsIHZvaWQqIHBhcnNlcikKICV0b2tlbiBQQUdFX1NZTQogJXRva2VuIE1FRElBX1NZTQogJXRv
a2VuIEZPTlRfRkFDRV9TWU0KKyV0b2tlbiBIT1NUX1NZTQogJXRva2VuIENIQVJTRVRfU1lNCiAl
dG9rZW4gTkFNRVNQQUNFX1NZTQogJXRva2VuIFZBUkZVTkNUSU9OCkBAIC0yMTksNiArMjIwLDcg
QEAgc3RhdGljIGludCBjc3N5eWxleChZWVNUWVBFKiB5eWx2YWwsIHZvaWQqIHBhcnNlcikKICV0
eXBlIDxydWxlPiBwYWdlCiAldHlwZSA8cnVsZT4gbWFyZ2luX2JveAogJXR5cGUgPHJ1bGU+IGZv
bnRfZmFjZQorJXR5cGUgPHJ1bGU+IGhvc3QKICV0eXBlIDxydWxlPiBrZXlmcmFtZXMKICV0eXBl
IDxydWxlPiBpbnZhbGlkX3J1bGUKICV0eXBlIDxydWxlPiBzYXZlX2Jsb2NrCkBAIC00MjQsNiAr
NDI2LDcgQEAgdmFsaWRfcnVsZToKICAgfCBuYW1lc3BhY2UKICAgfCBpbXBvcnQKICAgfCByZWdp
b24KKyAgfCBob3N0CiAgIDsKIAogcnVsZToKQEAgLTg1OCw2ICs4NjEsMTYgQEAgZm9udF9mYWNl
OgogICAgIH0KIDsKIAoraG9zdDoKKyAgICBIT1NUX1NZTSBtYXliZV9zcGFjZSAneycgbWF5YmVf
c3BhY2UgZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5nX2JyYWNlIHsKKyAgICAgICAgaWYgKCQ1KSB7
CisgICAgICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0
ZUhvc3RSdWxlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9IDA7CisgICAg
ICAgIH0KKyAgICB9Cis7CisgCiByZWdpb25fc2VsZWN0b3I6CiAgICAgc2VsZWN0b3JfbGlzdCB7
CiAgICAgICAgIGlmICgkMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCA1ODQ1MDZl
M2FhNWE1NTNlMzA4ODhlNmFkM2Y2Y2QyOTJkNTQwNTM5Li44NGI2OTc2ZDQyYTE2MTczM2I4YzU0
NDI0ZjdmMGZlMDkyZjI1NmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtODc0NSw2
ICs4NzQ1LDExIEBAIGlubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihpbnQgbGVu
Z3RoLCBib29sIGhhc0VzY2FwZSkKICAgICAgICAgICAgIG1fdG9rZW4gPSBGT05UX0ZBQ0VfU1lN
OwogICAgICAgICByZXR1cm47CiAKKyAgICBjYXNlICdoJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9
PSA1ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvc3QiKSkKKyAgICAgICAg
ICAgIG1fdG9rZW4gPSBIT1NUX1NZTTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSAnaSc6
CiAgICAgICAgIGlmIChsZW5ndGggPT0gNyAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUg
KyAyLCAibXBvcnQiKSkgewogICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlN
b2RlOwpAQCAtOTU3NSw2ICs5NTgwLDE3IEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3Jl
YXRlRm9udEZhY2VSdWxlKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitTdHlsZVJ1bGVCYXNl
KiBDU1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKCkKK3sKKyAgICBtX2FsbG93SW1wb3J0UnVsZXMg
PSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CisgICAgUmVmUHRyPFN0eWxl
UnVsZUhvc3Q+IHJ1bGUgPSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoKTsKKyAgICBydWxlLT5zZXRQ
cm9wZXJ0aWVzKGNyZWF0ZVN0eWxlUHJvcGVydHlTZXQoKSk7CisgICAgY2xlYXJQcm9wZXJ0aWVz
KCk7CisgICAgU3R5bGVSdWxlSG9zdCogcmVzdWx0ID0gcnVsZS5nZXQoKTsKKyAgICBtX3BhcnNl
ZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
dm9pZCBDU1NQYXJzZXI6OmFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwg
Y29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCiB7CiAgICAgaWYgKCFtX3N0eWxlU2hlZXQgfHwgIW1f
YWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggNmFj
YmJhMjUyOTMwNTVhMTYzMzkyZjE4ZDY3N2UxYThhNTZhODRiMy4uNWQyMzBkZTlkMzJjMjY5ZWMw
OWI1NWI2ODQxMjQyZDRlNDNlNTk3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMjY1LDYg
KzI2NSw3IEBAIHB1YmxpYzoKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVQYWdlUnVsZShQYXNz
T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2VsZWN0b3IpOwogICAgIFN0eWxlUnVsZUJh
c2UqIGNyZWF0ZVJlZ2lvblJ1bGUoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiog
cmVnaW9uU2VsZWN0b3IsIFJ1bGVMaXN0KiBydWxlcyk7CiAgICAgU3R5bGVSdWxlQmFzZSogY3Jl
YXRlTWFyZ2luQXRSdWxlKENTU1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlKTsKKyAgICBTdHlsZVJ1
bGVCYXNlKiBjcmVhdGVIb3N0UnVsZSgpOwogICAgIHZvaWQgc3RhcnREZWNsYXJhdGlvbnNGb3JN
YXJnaW5Cb3goKTsKICAgICB2b2lkIGVuZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMmJkNzg2MzNlYTczM2E1MzdmNjRl
YTc0ZDcyMDA2ODhkYzk0MDhlYi4uNTg3MjdmMmE2NGYzNTAzMmQ5ZmM5YTkzYWE2OTkwZDk1ODky
MTkzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNjAsNiArNjAsNyBA
QAogI2luY2x1ZGUgIkNvdW50ZXIuaCIKICNpbmNsdWRlICJDb3VudGVyQ29udGVudC5oIgogI2lu
Y2x1ZGUgIkN1cnNvckxpc3QuaCIKKyNpbmNsdWRlICJFbGVtZW50U2hhZG93LmgiCiAjaW5jbHVk
ZSAiRm9udEZlYXR1cmVWYWx1ZS5oIgogI2luY2x1ZGUgIkZvbnRWYWx1ZS5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCkBAIC0yNTMsMTEgKzI1NCwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NP
d25QdHI8UnVsZVNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOyB9
CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE93blB0cjxWZWN0b3I8
UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8Tm9kZSosIE93
blB0cjxWZWN0b3I8UnVsZURhdGE+ID4gPiBIb3N0UnVsZU1hcDsKIAogICAgIHZvaWQgYWRkUnVs
ZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRv
ciYsIFN0eWxlUmVzb2x2ZXIqID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAwKTsKIAogICAg
IHZvaWQgYWRkU3R5bGVSdWxlKFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9
IGZhbHNlKTsKICAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCBib29s
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3Is
IGJvb2wgaXNJblJlZ2lvblJ1bGUgPSBmYWxzZSk7CisgICAgdm9pZCBhZGRIb3N0UnVsZShOb2Rl
KiwgU3R5bGVSdWxlKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsKICAgICB2b2lk
IGFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UqKTsKICAgICB2b2lkIGFkZFRvUnVsZVNldChBdG9t
aWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiwgY29uc3QgUnVsZURhdGEmKTsKICAgICB2
b2lkIGFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiwgYm9vbCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luKTsKQEAgLTI3NCw2ICsyNzcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9y
PFJ1bGVEYXRhPiogZm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fZm9j
dXNQc2V1ZG9DbGFzc1J1bGVzOyB9CiAgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogdW5pdmVy
c2FsUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV91bml2ZXJzYWxSdWxlczsgfQogICAgIGNvbnN0
IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHBhZ2VSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcGFn
ZVJ1bGVzOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogaG9zdFJ1bGVzKE5vZGUqIG5v
ZGUpIGNvbnN0IHsgcmV0dXJuIG1faG9zdFJ1bGVzLmdldChub2RlKTsgfQogCiAgICAgdm9pZCBy
ZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKQEAgLTI4Nyw2ICsy
OTEsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFJ1bGVEYXRhPiBtX2xpbmtQc2V1ZG9DbGFzc1J1
bGVzOwogICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9mb2N1c1BzZXVkb0NsYXNzUnVsZXM7CiAgICAg
VmVjdG9yPFJ1bGVEYXRhPiBtX3VuaXZlcnNhbFJ1bGVzOworICAgIEhvc3RSdWxlTWFwIG1faG9z
dFJ1bGVzOwogICAgIFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4gbV9wYWdlUnVsZXM7CiAgICAgdW5z
aWduZWQgbV9ydWxlQ291bnQ7CiAgICAgYm9vbCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7CkBA
IC01MjksNyArNTM0LDcgQEAgY29uc3QgQ29udGFpbmVyTm9kZSogU3R5bGVSZXNvbHZlcjo6ZGV0
ZXJtaW5lU2NvcGUoY29uc3QgQ1NTU3R5bGVTaGVldCogc2hlZXQpCiAKIGlubGluZSBSdWxlU2V0
KiBTdHlsZVJlc29sdmVyOjpydWxlU2V0Rm9yU2NvcGUoY29uc3QgQ29udGFpbmVyTm9kZSogc2Nv
cGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFzY29wZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkK
KyAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRTdHlsZSgpKQogICAgICAgICByZXR1cm4gMDsKICAg
ICBTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5
bGVzLmZpbmQoc2NvcGUpOwogICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5l
bmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyAKQEAgLTU3Miw2ICs1NzcsMjUgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywg
Y29uc3QgVmVjdG9yPFJlZlAKIH0KIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFkZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3QqIGhvc3RSdWxlLCBib29sIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQorewor
ICAgIGlmICghc2NvcGUgfHwgIXNjb3BlLT5pc0luU2hhZG93VHJlZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2NvcGUtPnNoYWRvd1Jvb3QoKTsK
KyAgICBpZiAoIXNoYWRvd1Jvb3QpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBDb250YWlu
ZXJOb2RlKiBzaGFkb3dIb3N0ID0gc2hhZG93Um9vdC0+aG9zdCgpOworICAgIGlmICghc2hhZG93
SG9zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2NvcGVkUnVsZVNldE1hcDo6QWRkUmVzdWx0
IGFkZFJlc3VsdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmFkZChzaGFkb3dIb3N0LCBudWxscHRy
KTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gUnVsZVNldDo6Y3JlYXRlKCk7CisKKyAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnNlY29uZC0+YWRkSG9zdFJ1bGUoc2hhZG93Um9vdCwgaG9zdFJ1bGUtPmNoaWxkKCksIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOworfQorIAogdm9pZCBTdHlsZVJlc29sdmVyOjpzZXR1
cFNjb3BlU3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50KQogewogICAgIC8vIFRoZSBz
Y29waW5nIGVsZW1lbnQgc3RhY2sgc2hvdWxkbid0IGJlIHVzZWQgaWYgPHN0eWxlIHNjb3BlZD4g
aXNuJ3QgdXNlZCBhbnl3aGVyZS4KQEAgLTkxOCwxMyArOTQyLDggQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiBydWxlcywgaW50JiBm
aXJzdFJ1bGUKICAgICB9CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVy
TWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7Ci0gICAgaWYgKG1fbWF0
Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc29ydE1hdGNoZWRS
dWxlcygpOwotCiAgICAgaWYgKG1fY2hlY2tlci5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpD
b2xsZWN0aW5nUnVsZXMpIHsKICAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQogICAgICAgICAgICAg
bV9ydWxlTGlzdCA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKQEAgLTk0Niw2ICs5NjUs
MTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCkKICAgICB9CiB9CiAKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFu
ZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCit7CisgICAgaWYgKG1f
bWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc29ydE1hdGNo
ZWRSdWxlcygpOworICAgIHRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7Cit9CisKIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCkBA
IC05OTMsNiArMTAyMSw1MCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9y
UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdAogI2VuZGlmCiB9CiAK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3sKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAg
IGlmIChtX3Njb3BlZEF1dGhvclN0eWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIE1hdGNoT3B0aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBpZiAoIXNj
b3BlU3RhY2tJc0NvbnNpc3RlbnQobV9lbGVtZW50KSkKKyAgICAgICAgc2V0dXBTY29wZVN0YWNr
KG1fZWxlbWVudCk7CisgICAgaWYgKG1fc2NvcGVTdGFjay5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNvbnN0IFNjb3BlU3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlU3RhY2su
bGFzdCgpOworICAgIGlmIChmcmFtZS5tX3Njb3BlICE9IG1fZWxlbWVudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgb3B0aW9ucy5zY29wZSA9IGZyYW1lLm1fc2NvcGU7CisgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JIb3N0KGZyYW1lLm1fcnVsZVNldCwgcmVzdWx0LnJhbmdlcy5maXJzdEF1
dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBVTlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5
UnVsZXMpOworI2VuZGlmCit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JIb3N0KFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxh
c3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBFbGVtZW50
U2hhZG93KiBzaGFkb3cgPSBtX2VsZW1lbnQtPnNoYWRvdygpOworICAgIGlmICghc2hhZG93KQor
ICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8Y29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIDE2
PiBtYXRjaGVkUnVsZXM7IAorICAgIGZvciAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNoYWRv
dy0+eW91bmdlc3RTaGFkb3dSb290KCk7IHNoYWRvd1Jvb3Q7IHNoYWRvd1Jvb3QgPSBzaGFkb3dS
b290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeyAKKyAgICAgICAgaWYgKGNvbnN0IFZlY3RvcjxSdWxl
RGF0YT4qIHJ1bGUgPSBydWxlcy0+aG9zdFJ1bGVzKHNoYWRvd1Jvb3QpKQorICAgICAgICAgICAg
bWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsKKyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNT
aGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlm
IChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsgLS1pKQorICAgICAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hlZFJ1bGVzLmF0KGktMSksIGZpcnN0UnVsZUlu
ZGV4LCBsYXN0UnVsZUluZGV4LCBvcHRpb25zKTsKK30KKwogdm9pZCBTdHlsZVJlc29sdmVyOjpt
YXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXMpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKQEAgLTEwMDcsOCArMTA3OSwxMiBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3Vs
dCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcwogICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVn
aW9uKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBy
ZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKIAogICAgIG1hdGNoU2NvcGVk
QXV0aG9yUnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgaWYgKCFtX21hdGNo
ZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKIAotICAgIHNv
cnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgIG1hdGNoSG9zdFJ1bGVzKHJl
c3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIGlmICghbV9tYXRjaGVkUnVsZXMuaXNFbXB0
eSgpKQorICAgICAgICB0cmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwogfQogCiB2b2lkIFN0
eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpCkBAIC0xMjQ3LDcgKzEzMjMsNyBAQCBOb2RlKiBTdHlsZVJlc29sdmVy
Ojpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2Rl
Q291bgogICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzU3R5bGVkRWxlbWVudCgpKQogICAg
ICAgICByZXR1cm4gMDsKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgIGlmIChwYXJlbnQt
Pmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgaWYgKHBhcmVudC0+aGFzU2NvcGVkU3R5
bGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICBTdHlsZWRFbGVtZW50KiBwID0g
c3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHBhcmVudCk7CkBAIC0xNDMyLDcgKzE1MDgsNyBA
QCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUo
U1RZTEVfU0NPUEVEKQotICAgIGlmIChlbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgp
KQorICAgIGlmIChlbGVtZW50LT5oYXNTY29wZWRTdHlsZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAjZW5kaWYKIApAQCAtMTUzMyw3ICsxNjA5LDcgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVz
b2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICBpZiAocGFyZW50U3R5bGVQcmV2ZW50c1No
YXJpbmcobV9wYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybiAwOwogI2lmIEVOQUJMRShTVFlM
RV9TQ09QRUQpCi0gICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hp
bGQoKSkKKyAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRTdHlsZSgpKQogICAgICAg
ICByZXR1cm4gMDsKICNlbmRpZgogCkBAIC0yNjMyLDYgKzI3MDgsMTggQEAgdm9pZCBSdWxlU2V0
OjphZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBib29sIGhh
c0RvY3VtZW50U2UKICAgICBtX3VuaXZlcnNhbFJ1bGVzLmFwcGVuZChydWxlRGF0YSk7CiB9CiAK
K3ZvaWQgUnVsZVNldDo6YWRkSG9zdFJ1bGUoTm9kZSogc2hhZG93Um9vdCwgU3R5bGVSdWxlKiBy
dWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCit7CisgICAgc3RhdGljIENTU1Nl
bGVjdG9yKiBzZWxlY3RvciA9IG5ldyBDU1NTZWxlY3RvcjsKKworICAgIEhvc3RSdWxlTWFwOjpB
ZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9ob3N0UnVsZXMuYWRkKHNoYWRvd1Jvb3QsIG51bGxwdHIp
OworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgCisgICAgICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gYWRvcHRQdHIobmV3IFZlY3RvcjxSdWxlRGF0YT4pOworCisgICAgUnVs
ZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3IsIDAsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4sIHRydWUsIGZhbHNlKTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YXBwZW5k
KHJ1bGVEYXRhKTsKK30KKwogdm9pZCBSdWxlU2V0OjphZGRQYWdlUnVsZShTdHlsZVJ1bGVQYWdl
KiBydWxlKQogewogICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChydWxlKTsKQEAgLTI3MzAsNiArMjgx
OCwxMCBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50
cyogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdQogICAgICAgICAgICAgYWRkUmVnaW9uUnVs
ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVSZWdpb24qPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbik7CiAgICAgICAgIH0KICNlbmRpZgorI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisg
ICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzSG9zdFJ1bGUoKSkKKyAgICAgICAgICAgIHJlc29sdmVy
LT5hZGRIb3N0UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4ocnVsZSksIGhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4sIHNjb3BlKTsKKyNlbmRpZgogICAgIH0KICAgICBpZiAobV9hdXRv
U2hyaW5rVG9GaXRFbmFibGVkKQogICAgICAgICBzaHJpbmtUb0ZpdCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmgKaW5kZXggZjE4MWViNjBlMTkwMTZmNGQzNTlhNGY5NzhhNWRkMjk3NzJh
NWJlYy4uODhmMjZhNDg5M2I5ZmMxZGY3OGRkOTgzMTg2NGUwYzczYzI5MWMyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC04MSw2ICs4MSw3IEBAIGNsYXNzIFN0eWxlUnVsZTsK
IGNsYXNzIFN0eWxlUnVsZUtleWZyYW1lczsKIGNsYXNzIFN0eWxlUnVsZVBhZ2U7CiBjbGFzcyBT
dHlsZVJ1bGVSZWdpb247CitjbGFzcyBTdHlsZVJ1bGVIb3N0OwogY2xhc3MgU3R5bGVTaGFkZXI7
CiBjbGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwpAQCAtMTM0LDYg
KzEzNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBvcFBhcmVudEVsZW1lbnQoRWxlbWVudCopOwog
ICAgIHZvaWQgcHVzaFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCopOwogICAgIHZv
aWQgcG9wUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290Kik7CisgICAgdm9pZCBhZGRI
b3N0UnVsZShTdHlsZVJ1bGVIb3N0KiwgYm9vbCwgY29uc3QgQ29udGFpbmVyTm9kZSopOwogCiAg
ICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqLCBSZW5k
ZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBTdHlsZVNoYXJpbmdCZWhhdmlvciA9IEFsbG93U3R5
bGVTaGFyaW5nLAogICAgICAgICBSdWxlTWF0Y2hpbmdCZWhhdmlvciA9IE1hdGNoQWxsUnVsZXMs
IFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IDApOwpAQCAtMzU1LDExICszNTcsMTQg
QEAgcHJpdmF0ZToKICAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0
JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1
bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRj
aEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZv
aWQgY29sbGVjdE1hdGNoaW5nUnVsZXMoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xsZWN0
TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50
JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICB2b2lkIGNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1
bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKKyAgICB2
b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9ySG9zdChSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJ
bmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICBib29s
IGZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwogICAgIHZvaWQgc29y
dE1hdGNoZWRSdWxlcygpOworICAgIHZvaWQgdHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1
bHQmKTsKICAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYp
OwogCiAgICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGUgPSAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKaW5kZXggMzQyN2Yw
NTU5MjE3ZTYyZjM5Mjc4YTg4MDVhYjNkOGQ4YTRlOTUyOC4uODgwZGNiNjRmNDk1YzdhNGRjZTg4
MjQ2YzEwMzMzMDE1YmJmYzdkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKQEAgLTc3LDYg
Kzc3LDkgQEAgdm9pZCBTdHlsZVJ1bGVCYXNlOjpkZXN0cm95KCkKICAgICBjYXNlIEtleWZyYW1l
czoKICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMp
OwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBIb3N0OgorICAgICAgICBkZWxldGUgc3RhdGlj
X2Nhc3Q8U3R5bGVSdWxlSG9zdCo+KHRoaXMpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBV
bmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMTEwLDYg
KzExMyw4IEBAIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gU3R5bGVSdWxlQmFzZTo6Y29weSgp
IGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKj4odGhpcyktPmNvcHko
KTsKKyAgICBjYXNlIEhvc3Q6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHls
ZVJ1bGVIb3N0Kj4odGhpcyktPmNvcHkoKTsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBD
aGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xNTEsNiArMTU2LDcgQEAgUGFzc1JlZlB0
cjxDU1NSdWxlPiBTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTU3R5bGVTaGVl
dCogcGFyZW50U2hlZXQKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgcnVsZSA9IFdlYktp
dENTU0tleWZyYW1lc1J1bGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMq
PihzZWxmKSwgcGFyZW50U2hlZXQpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEhvc3Q6CiAg
ICAgY2FzZSBVbmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpA
QCAtMjI2LDYgKzIzMiwyNyBAQCB2b2lkIFN0eWxlUnVsZVBhZ2U6OnNldFByb3BlcnRpZXMoUGFz
c1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwcm9wZXJ0aWVzKQogICAgIG1fcHJvcGVydGllcyA9
IHByb3BlcnRpZXM7CiB9CiAKK1N0eWxlUnVsZUhvc3Q6OlN0eWxlUnVsZUhvc3QoKQorICAgIDog
U3R5bGVSdWxlQmFzZShIb3N0KQorICAgICwgbV9jaGlsZChTdHlsZVJ1bGU6OmNyZWF0ZSgwKSkK
K3sKK30KKworU3R5bGVSdWxlSG9zdDo6U3R5bGVSdWxlSG9zdChjb25zdCBTdHlsZVJ1bGVIb3N0
JiBvKQorICAgIDogU3R5bGVSdWxlQmFzZShvKQorICAgICwgbV9jaGlsZChvLm1fY2hpbGQtPmNv
cHkoKSkKK3sKK30KKworU3R5bGVSdWxlSG9zdDo6flN0eWxlUnVsZUhvc3QoKQoreworfQorCit2
b2lkIFN0eWxlUnVsZUhvc3Q6OnNldFByb3BlcnRpZXMoUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5
U2V0PiBwcm9wZXJ0aWVzKQoreyAKKyAgICBtX2NoaWxkLT5zZXRQcm9wZXJ0aWVzKHByb3BlcnRp
ZXMpOworfQorCiBTdHlsZVJ1bGVGb250RmFjZTo6U3R5bGVSdWxlRm9udEZhY2UoKQogICAgIDog
U3R5bGVSdWxlQmFzZShGb250RmFjZSwgMCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJ1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAppbmRleCA3
ZmMyMGEzMDNmODUzYWM3NmM5MmVmYjAxNTNmYmZiMzQ3ZjU3MmEwLi5lMjMyZmQ4N2E5Yjg1NDNk
OWE0OWMwNTBkZjZkZTkxYjQ0NDkxMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCkBAIC00NSw2
ICs0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgUGFnZSwKICAgICAgICAgS2V5ZnJhbWVzLAogICAg
ICAgICBLZXlmcmFtZSwgLy8gTm90IHVzZWQuIFRoZXNlIGFyZSBpbnRlcm5hbGx5IG5vbi1ydWxl
IFN0eWxlS2V5ZnJhbWUgb2JqZWN0cy4KKyAgICAgICAgSG9zdCwKICAgICAgICAgUmVnaW9uID0g
MTYKICAgICB9OwogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5
cGU+KG1fdHlwZSk7IH0KQEAgLTU3LDYgKzU4LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTdHls
ZVJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gU3R5bGU7IH0KICAgICBib29sIGlzUmVn
aW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBSZWdpb247IH0KICAgICBib29sIGlz
SW1wb3J0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBJbXBvcnQ7IH0KKyAgICBib29s
IGlzSG9zdFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSG9zdDsgfQogCiAgICAgUGFz
c1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBjb3B5KCkgY29uc3Q7CiAKQEAgLTE1Nyw2ICsxNTksMjIg
QEAgcHJpdmF0ZToKICAgICBDU1NTZWxlY3Rvckxpc3QgbV9zZWxlY3Rvckxpc3Q7CiB9OwogCitj
bGFzcyBTdHlsZVJ1bGVIb3N0IDogcHVibGljIFN0eWxlUnVsZUJhc2UgeworIHB1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVIb3N0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9w
dFJlZihuZXcgU3R5bGVSdWxlSG9zdCk7IH0KKworICAgIH5TdHlsZVJ1bGVIb3N0KCk7CisKKyAg
ICBTdHlsZVJ1bGUqIGNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQorICAg
IHZvaWQgc2V0UHJvcGVydGllcyhQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+KTsKKworIHBy
aXZhdGU6CisgICAgU3R5bGVSdWxlSG9zdCgpOworICAgIFN0eWxlUnVsZUhvc3QoY29uc3QgU3R5
bGVSdWxlSG9zdCYpOworCisgICAgUmVmUHRyPFN0eWxlUnVsZT4gbV9jaGlsZDsKK307CisgCiBj
bGFzcyBTdHlsZVJ1bGVCbG9jayA6IHB1YmxpYyBTdHlsZVJ1bGVCYXNlIHsKIHB1YmxpYzoKICAg
ICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMoKSBjb25z
dCB7IHJldHVybiBtX2NoaWxkUnVsZXM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVNoZWV0Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRD
b250ZW50cy5jcHAKaW5kZXggOTcwYzgyOGNhMTQwMWRjYjE2Mzg0NDllOTYwMjQzODI3ZWVjMTc5
My4uNjI2ZTQ3Yzg0MjBlN2EwNTI1YjBiZWY1YjhiZDEzNDdhOTc3YzA5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKQEAgLTY1LDYgKzY1LDcgQEAgU3R5bGVT
aGVldENvbnRlbnRzOjpTdHlsZVNoZWV0Q29udGVudHMoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1
bGUsIGNvbnN0IFN0cmluZyYKICAgICAsIG1faXNNdXRhYmxlKGZhbHNlKQogICAgICwgbV9pc0lu
TWVtb3J5Q2FjaGUoZmFsc2UpCiAgICAgLCBtX3BhcnNlckNvbnRleHQoY29udGV4dCkKKyAgICAs
IG1fbnVtYmVyT2ZIb3N0UnVsZXMoMCkKIHsKIH0KIApAQCAtODUsNiArODYsNyBAQCBTdHlsZVNo
ZWV0Q29udGVudHM6OlN0eWxlU2hlZXRDb250ZW50cyhjb25zdCBTdHlsZVNoZWV0Q29udGVudHMm
IG8pCiAgICAgLCBtX2lzTXV0YWJsZShmYWxzZSkKICAgICAsIG1faXNJbk1lbW9yeUNhY2hlKGZh
bHNlKQogICAgICwgbV9wYXJzZXJDb250ZXh0KG8ubV9wYXJzZXJDb250ZXh0KQorICAgICwgbV9u
dW1iZXJPZkhvc3RSdWxlcyhvLm1fbnVtYmVyT2ZIb3N0UnVsZXMpCiB7CiAgICAgQVNTRVJUKG8u
aXNDYWNoZWFibGUoKSk7CiAKQEAgLTEzNCw2ICsxMzYsOCBAQCB2b2lkIFN0eWxlU2hlZXRDb250
ZW50czo6cGFyc2VyQXBwZW5kUnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUpCiAg
ICAgICAgIG1faW1wb3J0UnVsZXMubGFzdCgpLT5yZXF1ZXN0U3R5bGVTaGVldCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQorICAgIGlmIChydWxlLT5pc0hvc3RSdWxlKCkpCisgICAgICAgICsr
bV9udW1iZXJPZkhvc3RSdWxlczsKICAgICBtX2NoaWxkUnVsZXMuYXBwZW5kKHJ1bGUpOwogfQog
CkBAIC0xNzcsNiArMTgxLDcgQEAgdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OmNsZWFyUnVsZXMo
KQogICAgIG1faW1wb3J0UnVsZXMuY2xlYXIoKTsKICAgICBtX2NoaWxkUnVsZXMuY2xlYXIoKTsK
ICAgICBjbGVhckNoYXJzZXRSdWxlKCk7CisgICAgbV9udW1iZXJPZkhvc3RSdWxlcyA9IDA7CiB9
CiAKIHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZXJTZXRFbmNvZGluZ0Zyb21DaGFyc2V0
UnVsZShjb25zdCBTdHJpbmcmIGVuY29kaW5nKQpAQCAtMjE4LDYgKzIyMyw4IEBAIGJvb2wgU3R5
bGVTaGVldENvbnRlbnRzOjp3cmFwcGVySW5zZXJ0UnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJh
c2U+IHJ1bGUsIHVuc2lnCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjaGlsZFZlY3Rvcklu
ZGV4IC09IG1faW1wb3J0UnVsZXMuc2l6ZSgpOwogIAorICAgIGlmIChydWxlLT5pc0hvc3RSdWxl
KCkpCisgICAgICAgICsrbV9udW1iZXJPZkhvc3RSdWxlczsKICAgICBtX2NoaWxkUnVsZXMuaW5z
ZXJ0KGNoaWxkVmVjdG9ySW5kZXgsIHJ1bGUpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjQy
LDYgKzI0OSw5IEBAIHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjp3cmFwcGVyRGVsZXRlUnVsZSh1
bnNpZ25lZCBpbmRleCkKICAgICB9CiAgICAgY2hpbGRWZWN0b3JJbmRleCAtPSBtX2ltcG9ydFJ1
bGVzLnNpemUoKTsKIAorICAgIGlmIChtX2NoaWxkUnVsZXMuYXQoY2hpbGRWZWN0b3JJbmRleCkt
PmlzSG9zdFJ1bGUoKSkKKyAgICAgICAgLS1tX251bWJlck9mSG9zdFJ1bGVzOworCiAgICAgbV9j
aGlsZFJ1bGVzLnJlbW92ZShjaGlsZFZlY3RvckluZGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlU2hlZXRDb250ZW50cy5oCmluZGV4IDdkZjM0YjcwMzIyNzI1OTc2ZTVjN2YxNWQwODM4
MDI2NGNiN2VmMGUuLmEzMWNiYzFkNzVmZTg4NTVkZjEwMDU4NWViZmNjZWMzMTg3NzE3ZGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmgKQEAgLTk5LDYgKzk5LDcgQEAg
cHVibGljOgogICAgIC8vIFJ1bGVzIG90aGVyIHRoYW4gQGNoYXJzZXQgYW5kIEBpbXBvcnQuCiAg
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzKCkgY29u
c3QgeyByZXR1cm4gbV9jaGlsZFJ1bGVzOyB9CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVJ1bGVJbXBvcnQ+ID4mIGltcG9ydFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRSdWxl
czsgfQorICAgIGJvb2wgaGFzSG9zdFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9mSG9z
dFJ1bGVzID4gMDsgfQogCiAgICAgdm9pZCBub3RpZnlMb2FkZWRTaGVldChjb25zdCBDYWNoZWRD
U1NTdHlsZVNoZWV0Kik7CiAgICAgCkBAIC0xNjMsNiArMTY0LDcgQEAgcHJpdmF0ZToKICAgICBi
b29sIG1faXNJbk1lbW9yeUNhY2hlIDogMTsKICAgICAKICAgICBDU1NQYXJzZXJDb250ZXh0IG1f
cGFyc2VyQ29udGV4dDsKKyAgICBpbnQgbV9udW1iZXJPZkhvc3RSdWxlczsKIAogICAgIFZlY3Rv
cjxDU1NTdHlsZVNoZWV0Kj4gbV9jbGllbnRzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCA4NDI2
OTY3NzkwYjE4MDcyNDIzMjczZTk5OTdkNTMwMTExZmI1MTA3Li5jZDgzY2I0NmRlMzYwMDVmNjQz
MjZjZDk1OTM1ZThkNWMzOGY4ZTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yNTIxLDM0ICsyNTIx
LDM0IEBAIHZvaWQgTm9kZTo6bm90aWZ5TXV0YXRpb25PYnNlcnZlcnNOb2RlV2lsbERldGFjaCgp
CiAjZW5kaWYgLy8gRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKIAogI2lmIEVOQUJMRShTVFlM
RV9TQ09QRUQpCi1ib29sIE5vZGU6Omhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkgY29uc3QKK2Jv
b2wgTm9kZTo6aGFzU2NvcGVkU3R5bGUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNSYXJlRGF0
YSgpICYmIHJhcmVEYXRhKCktPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCk7CisgICAgcmV0dXJu
IGhhc1JhcmVEYXRhKCkgJiYgcmFyZURhdGEoKS0+aGFzU2NvcGVkU3R5bGUoKTsKIH0KIAotc2l6
ZV90IE5vZGU6Om51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4oKSBjb25zdAorc2l6ZV90
IE5vZGU6Om51bWJlck9mU2NvcGVkU3R5bGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzUmFy
ZURhdGEoKSA/IHJhcmVEYXRhKCktPm51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4oKSA6
IDA7CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT5udW1iZXJPZlNjb3Bl
ZFN0eWxlcygpIDogMDsKIH0KIAotdm9pZCBOb2RlOjpyZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNo
aWxkKCkKK3ZvaWQgTm9kZTo6cmVnaXN0ZXJTY29wZWRTdHlsZSgpCiB7Ci0gICAgZW5zdXJlUmFy
ZURhdGEoKS0+cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworICAgIGVuc3VyZVJhcmVE
YXRhKCktPnJlZ2lzdGVyU2NvcGVkU3R5bGUoKTsKIH0KIAotdm9pZCBOb2RlOjp1bnJlZ2lzdGVy
U2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQordm9pZCBOb2RlOjp1bnJlZ2lzdGVyU2NvcGVkU3R5bGUo
KQogewogICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKICAgICBpZiAoaGFzUmFyZURhdGEoKSkK
LSAgICAgICAgcmFyZURhdGEoKS0+dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7Cisg
ICAgICAgIHJhcmVEYXRhKCktPnVucmVnaXN0ZXJTY29wZWRTdHlsZSgpOwogfQogI2Vsc2UKLWJv
b2wgTm9kZTo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSBjb25zdAorYm9vbCBOb2RlOjpoYXNT
Y29wZWRTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXNpemVfdCBOb2RlOjpu
dW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKCkgY29uc3QKK3NpemVfdCBOb2RlOjpudW1i
ZXJPZlNjb3BlZFN0eWxlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApp
bmRleCBhMWZiMTg0YzMyZGY4YzQyYmI0NzlhZTgyZThhMGU1NTY1NTkxNTMwLi4wOGIwZGNmMjgx
ZTgwYmY0MGQxZjY5YTM3OTEyNjc5ODI4YmU3YWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTY1NywxMSAr
NjU3LDExIEBAIHB1YmxpYzoKICNlbmRpZiAvLyBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQog
CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICB2b2lkIHJlZ2lzdGVyU2NvcGVkSFRNTFN0
eWxlQ2hpbGQoKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOwor
ICAgIHZvaWQgcmVnaXN0ZXJTY29wZWRTdHlsZSgpOworICAgIHZvaWQgdW5yZWdpc3RlclNjb3Bl
ZFN0eWxlKCk7CiAjZW5kaWYKLSAgICBib29sIGhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkgY29u
c3Q7Ci0gICAgc2l6ZV90IG51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4oKSBjb25zdDsK
KyAgICBib29sIGhhc1Njb3BlZFN0eWxlKCkgY29uc3Q7CisgICAgc2l6ZV90IG51bWJlck9mU2Nv
cGVkU3R5bGVzKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2Uo
TWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZVJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKaW5k
ZXggMGJkYzNlOGFjMjA1N2UxYzE4NGY4ZGNhNTkxOTg1ZWU1ZTlmYjA3NS4uOTU0ZjMxODVmNjA4
NzQ4Y2I0ZDVmMzc1NmQ3NDFkNmU0ZDNiZmI0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL05vZGVSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEu
aApAQCAtMTkxLDcgKzE5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2lzRm9jdXNlZChmYWxz
ZSkKICAgICAgICAgLCBtX25lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNo
KGZhbHNlKQogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCi0gICAgICAgICwgbV9udW1iZXJPZlNj
b3BlZEhUTUxTdHlsZUNoaWxkcmVuKDApCisgICAgICAgICwgbV9udW1iZXJPZlNjb3BlZFN0eWxl
cygwKQogI2VuZGlmCiAgICAgewogICAgIH0KQEAgLTMxNiwyNiArMzE2LDI2IEBAIHB1YmxpYzoK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKLSAgICB2b2lkIHJlZ2lzdGVyU2Nv
cGVkSFRNTFN0eWxlQ2hpbGQoKQorICAgIHZvaWQgcmVnaXN0ZXJTY29wZWRTdHlsZSgpCiAgICAg
ewotICAgICAgICArK21fbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbjsKKyAgICAgICAg
KyttX251bWJlck9mU2NvcGVkU3R5bGVzOwogICAgIH0KIAotICAgIHZvaWQgdW5yZWdpc3RlclNj
b3BlZEhUTUxTdHlsZUNoaWxkKCkKKyAgICB2b2lkIHVucmVnaXN0ZXJTY29wZWRTdHlsZSgpCiAg
ICAgewotICAgICAgICBBU1NFUlQobV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuID4g
MCk7Ci0gICAgICAgIGlmIChtX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4gPiAwKQot
ICAgICAgICAgICAgLS1tX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47CisgICAgICAg
IEFTU0VSVChtX251bWJlck9mU2NvcGVkU3R5bGVzID4gMCk7CisgICAgICAgIGlmIChtX251bWJl
ck9mU2NvcGVkU3R5bGVzID4gMCkKKyAgICAgICAgICAgIC0tbV9udW1iZXJPZlNjb3BlZFN0eWxl
czsKICAgICB9CiAKLSAgICBib29sIGhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkgY29uc3QKKyAg
ICBib29sIGhhc1Njb3BlZFN0eWxlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX251
bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47CisgICAgICAgIHJldHVybiBtX251bWJlck9m
U2NvcGVkU3R5bGVzOwogICAgIH0KIAotICAgIHNpemVfdCBudW1iZXJPZlNjb3BlZEhUTUxTdHls
ZUNoaWxkcmVuKCkgY29uc3QKKyAgICBzaXplX3QgbnVtYmVyT2ZTY29wZWRTdHlsZXMoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJl
bjsKKyAgICAgICAgcmV0dXJuIG1fbnVtYmVyT2ZTY29wZWRTdHlsZXM7CiAgICAgfQogI2VuZGlm
CiAKQEAgLTM3MCw3ICszNzAsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoU1RZ
TEVfU0NPUEVEKQotICAgIHNpemVfdCBtX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47
CisgICAgc2l6ZV90IG1fbnVtYmVyT2ZTY29wZWRTdHlsZXM7CiAjZW5kaWYKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TaGFkb3dSb290LmNwcAppbmRleCBiOWM0ODFjMTg5ODY0ODFlMTliNjI2ZjY5NGMyMDZk
ZjEyMjE0NzRkLi40YjM3MWRlY2IwNmFiNzg4ZmY5OTJiN2QxZGNiNWQwMmU5YzliZDUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCkBAIC01NSw2ICs1NSw3IEBAIFNoYWRvd1Jvb3Q6OlNo
YWRvd1Jvb3QoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgICwgbV9hcHBseUF1dGhvclN0eWxlcyhm
YWxzZSkKICAgICAsIG1fcmVzZXRTdHlsZUluaGVyaXRhbmNlKGZhbHNlKQogICAgICwgbV9pbnNl
cnRpb25Qb2ludEFzc2lnbmVkVG8oMCkKKyAgICAsIG1fbnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hp
bGRyZW4oMCkKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dS
b290LmgKaW5kZXggZDliNDI1YzYwODNiMTdhZjg4MjZlNjE2NDI3ODFmNTUyNTA3NTI1MC4uMmU1
MTZmYjFiYjRjZWY3YjYzZGYyNmI2NDM3ZDRmZTU3YzAzYjZkMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93
Um9vdC5oCkBAIC04OSw2ICs4OSwxMCBAQCBwdWJsaWM6CiAgICAgSW5zZXJ0aW9uUG9pbnQqIGFz
c2lnbmVkVG8oKSBjb25zdDsKICAgICB2b2lkIHNldEFzc2lnbmVkVG8oSW5zZXJ0aW9uUG9pbnQq
KTsKIAorICAgIHZvaWQgcmVnaXN0ZXJTaGFkb3dFbGVtZW50KCkgeyArK21fbnVtYmVyT2ZTaGFk
b3dFbGVtZW50Q2hpbGRyZW47IH0KKyAgICB2b2lkIHVucmVnaXN0ZXJTaGFkb3dFbGVtZW50KCkg
eyAtLW1fbnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hpbGRyZW47IH0KKyAgICBib29sIGhhc1NoYWRv
d0luc2VydGlvblBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZlNoYWRvd0VsZW1lbnRD
aGlsZHJlbiA+IDA7IH0KKwogI2lmbmRlZiBOREVCVUcKICAgICBTaGFkb3dSb290VHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAjZW5kaWYKQEAgLTEwNiw2ICsxMTAsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9hcHBseUF1dGhvclN0eWxlcyA6IDE7CiAgICAgYm9vbCBtX3Jl
c2V0U3R5bGVJbmhlcml0YW5jZSA6IDE7CiAgICAgSW5zZXJ0aW9uUG9pbnQqIG1faW5zZXJ0aW9u
UG9pbnRBc3NpZ25lZFRvOworICAgIHNpemVfdCBtX251bWJlck9mU2hhZG93RWxlbWVudENoaWxk
cmVuOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIFNoYWRvd1Jvb3RUeXBlIG1fdHlwZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCmluZGV4IDI2OTkwYTVkZjI4NGE5N2M2
YTI0MWY1YzcwYTI4ZWI4ZDg3N2U5MTguLmViY2Q1ZjRhOTM3ZTYyNDYxNGVlOTQ2OWQ0YTlhZmUw
MTQ0MDBiNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcApAQCAt
OTYsMjIgKzk2LDIyIEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6c2NvcGVkQXR0cmlidXRlQ2hh
bmdlZChib29sIHNjb3BlZCkKICAgICBpZiAoc2NvcGVkKSB7CiAgICAgICAgIC8vIEFzIGFueSA8
c3R5bGU+IGluIGEgc2hhZG93IHRyZWUgaXMgdHJlYXRlZCBhcyAic2NvcGVkIiwKICAgICAgICAg
Ly8gbmVlZCB0byByZW1vdmUgdGhlIDxzdHlsZT4gZnJvbSBpdHMgc2hhZG93IHJvb3QuCi0gICAg
ICAgIGlmIChtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgPT0gUmVnaXN0ZXJlZEluU2hh
ZG93Um9vdCkKKyAgICAgICAgaWYgKG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9PSBS
ZWdpc3RlcmVkSW5TaGFkb3dSb290IHx8IG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9
PSBSZWdpc3RlcmVkSW5TaGFkb3dSb290V2l0aEhvc3RSdWxlKQogICAgICAgICAgICAgdW5yZWdp
c3RlcldpdGhTY29waW5nTm9kZShzaGFkb3dSb290KCkpOwogCi0gICAgICAgIGlmIChtX3Njb3Bl
ZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgIT0gUmVnaXN0ZXJlZEFzU2NvcGVkKQorICAgICAgICBp
ZiAobV9zY29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRlICE9IFJlZ2lzdGVyZWRBc1Njb3BlZCAm
JiBtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgIT0gUmVnaXN0ZXJlZEFzU2NvcGVkV2l0
aEhvc3RSdWxlKQogICAgICAgICAgICAgcmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUodHJ1ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBJZiB0aGUgPHN0eWxlPiB3YXMgc2NvcGVk
LCBuZWVkIHRvIHJlbW92ZSB0aGUgPHN0eWxlPiBmcm9tIHRoZSBzY29waW5nCiAgICAgLy8gZWxl
bWVudCwgaS5lLiB0aGUgcGFyZW50IG5vZGUuCi0gICAgaWYgKG1fc2NvcGVkU3R5bGVSZWdpc3Ry
YXRpb25TdGF0ZSA9PSBSZWdpc3RlcmVkQXNTY29wZWQpCisgICAgaWYgKG1fc2NvcGVkU3R5bGVS
ZWdpc3RyYXRpb25TdGF0ZSA9PSBSZWdpc3RlcmVkQXNTY29wZWQgfHwgbV9zY29wZWRTdHlsZVJl
Z2lzdHJhdGlvblN0YXRlID09IFJlZ2lzdGVyZWRBc1Njb3BlZFdpdGhIb3N0UnVsZSkKICAgICAg
ICAgdW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShwYXJlbnROb2RlKCkpOwogCiAgICAgLy8gQXMg
YW55IDxzdHlsZT4gaW4gYSBzaGFkb3cgdHJlZSBpcyB0cmVhdGVkIGFzICJzY29wZWQiLAogICAg
IC8vIG5lZWQgdG8gYWRkIHRoZSA8c3R5bGU+IHRvIGl0cyBzaGFkb3cgcm9vdC4KLSAgICBpZiAo
aXNJblNoYWRvd1RyZWUoKSAmJiBtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgIT0gUmVn
aXN0ZXJlZEluU2hhZG93Um9vdCkKKyAgICBpZiAoaXNJblNoYWRvd1RyZWUoKSAmJiBtX3Njb3Bl
ZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgIT0gUmVnaXN0ZXJlZEluU2hhZG93Um9vdCAmJiBtX3Nj
b3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgIT0gUmVnaXN0ZXJlZEluU2hhZG93Um9vdFdpdGhI
b3N0UnVsZSkKICAgICAgICAgcmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoZmFsc2UpOwogfQogI2Vu
ZGlmCkBAIC0xNDQsMTIgKzE0NCwyNCBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnJlZ2lzdGVy
V2l0aFNjb3BpbmdOb2RlKGJvb2wgc2NvcGVkKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgc2NvcGUtPnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKKyAgICBzY29wZS0+cmVn
aXN0ZXJTY29wZWRTdHlsZSgpOworCisgICAgYm9vbCBpc0hvc3RSdWxlUmVnaXN0ZXJlZCA9IGZh
bHNlOworICAgIGlmIChoYXNIb3N0UnVsZSgpKQorICAgICAgICBpZiAoU2hhZG93Um9vdCogc3Ig
PSBzaGFkb3dSb290KCkpCisgICAgICAgICAgICBpZiAoRWxlbWVudCogaG9zdCA9IHNyLT5ob3N0
KCkpIHsKKyAgICAgICAgICAgICAgICBob3N0LT5yZWdpc3RlclNjb3BlZFN0eWxlKCk7CisgICAg
ICAgICAgICAgICAgaXNIb3N0UnVsZVJlZ2lzdGVyZWQgPSB0cnVlOworICAgICAgICAgICAgfQor
CiAgICAgc2NvcGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICBpZiAoaW5Eb2N1bWVudCgp
ICYmICFkb2N1bWVudCgpLT5wYXJzaW5nKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAg
ICAgICAgZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7
CiAKLSAgICBtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgPSBzY29wZWQgPyBSZWdpc3Rl
cmVkQXNTY29wZWQgOiBSZWdpc3RlcmVkSW5TaGFkb3dSb290OworICAgIGlmIChzY29wZWQpCisg
ICAgICAgIG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9IGlzSG9zdFJ1bGVSZWdpc3Rl
cmVkPyBSZWdpc3RlcmVkQXNTY29wZWRXaXRoSG9zdFJ1bGUgOiBSZWdpc3RlcmVkQXNTY29wZWQ7
CisgICAgZWxzZQorICAgICAgICBtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgPSBpc0hv
c3RSdWxlUmVnaXN0ZXJlZD8gUmVnaXN0ZXJlZEluU2hhZG93Um9vdFdpdGhIb3N0UnVsZSA6IFJl
Z2lzdGVyZWRJblNoYWRvd1Jvb3Q7CiB9CiAKIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6dW5yZWdp
c3RlcldpdGhTY29waW5nTm9kZShDb250YWluZXJOb2RlKiBzY29wZSkKQEAgLTE2NCw4ICsxNzYs
MTQgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKENv
bnRhaW5lck5vZGUqIHNjb3BlKQogCiAgICAgQVNTRVJUKHNjb3BlKTsKICAgICBpZiAoc2NvcGUp
IHsKLSAgICAgICAgQVNTRVJUKHNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKTsKLSAg
ICAgICAgc2NvcGUtPnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworICAgICAgICBB
U1NFUlQoc2NvcGUtPmhhc1Njb3BlZFN0eWxlKCkpOworICAgICAgICBzY29wZS0+dW5yZWdpc3Rl
clNjb3BlZFN0eWxlKCk7CisKKyAgICAgICAgaWYgKG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25T
dGF0ZSA9PSBSZWdpc3RlcmVkSW5TaGFkb3dSb290V2l0aEhvc3RSdWxlIHx8IG1fc2NvcGVkU3R5
bGVSZWdpc3RyYXRpb25TdGF0ZSA9PSBSZWdpc3RlcmVkQXNTY29wZWRXaXRoSG9zdFJ1bGUpCisg
ICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogc3IgPSBzaGFkb3dSb290KCkpCisgICAgICAgICAg
ICAgICAgaWYgKEVsZW1lbnQqIGhvc3QgPSBzci0+aG9zdCgpKQorICAgICAgICAgICAgICAgICAg
ICBob3N0LT51bnJlZ2lzdGVyU2NvcGVkU3R5bGUoKTsKKwogICAgICAgICBzY29wZS0+c2V0TmVl
ZHNTdHlsZVJlY2FsYygpOwogICAgIH0KICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFkb2N1bWVu
dCgpLT5wYXJzaW5nKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKQEAgLTE3Myw2ICsxOTEs
MTMgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKENv
bnRhaW5lck5vZGUqIHNjb3BlKQogCiAgICAgbV9zY29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRl
ID0gTm90UmVnaXN0ZXJlZDsKIH0KKworYm9vbCBIVE1MU3R5bGVFbGVtZW50OjpoYXNIb3N0UnVs
ZSgpIGNvbnN0Cit7CisgICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjb25zdF9j
YXN0PEhUTUxTdHlsZUVsZW1lbnQqPih0aGlzKS0+c2hlZXQoKSkKKyAgICAgICAgcmV0dXJuIHN0
eWxlU2hlZXQtPmNvbnRlbnRzKCktPmhhc0hvc3RSdWxlKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQogI2VuZGlmCiAKIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTFN0eWxl
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQpAQCAt
MjAwLDcgKzIyNSw3IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFp
bmVyTm9kZSogaW5zZXJ0aW9uUG9pbnQpCiAgICAgLy8gd2UnZCBuZWVkIHRvIGZpbmQgYSB3YXkg
dG8gZGlzY2VybiB3aGV0aGVyIHRoYXQgaXMgdGhlIGNhc2UsIG9yIHdoZXRoZXIgPHN0eWxlIHNj
b3BlZD4gaXRzZWxmIGlzIGFib3V0IHRvIGJlIHJlbW92ZWQuCiAgICAgaWYgKG1fc2NvcGVkU3R5
bGVSZWdpc3RyYXRpb25TdGF0ZSAhPSBOb3RSZWdpc3RlcmVkKSB7CiAgICAgICAgIENvbnRhaW5l
ck5vZGUqIHNjb3BlOwotICAgICAgICBpZiAobV9zY29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRl
ID09IFJlZ2lzdGVyZWRJblNoYWRvd1Jvb3QpIHsKKyAgICAgICAgaWYgKG1fc2NvcGVkU3R5bGVS
ZWdpc3RyYXRpb25TdGF0ZSA9PSBSZWdpc3RlcmVkSW5TaGFkb3dSb290IHx8IG1fc2NvcGVkU3R5
bGVSZWdpc3RyYXRpb25TdGF0ZSA9PSBSZWdpc3RlcmVkSW5TaGFkb3dSb290V2l0aEhvc3RSdWxl
KSB7CiAgICAgICAgICAgICBzY29wZSA9IHNoYWRvd1Jvb3QoKTsKICAgICAgICAgICAgIGlmICgh
c2NvcGUpCiAgICAgICAgICAgICAgICAgc2NvcGUgPSBpbnNlcnRpb25Qb2ludC0+c2hhZG93Um9v
dCgpOwpAQCAtMjU1LDYgKzI4MCw3IEBAIEVsZW1lbnQqIEhUTUxTdHlsZUVsZW1lbnQ6OnNjb3Bp
bmdFbGVtZW50KCkgY29uc3QKIAogICAgIHJldHVybiB0b0VsZW1lbnQocGFyZW50T3JIb3N0KTsK
IH0KKwogI2VuZGlmIC8vIEVOQUJMRShTVFlMRV9TQ09QRUQpCiAKIHZvaWQgSFRNTFN0eWxlRWxl
bWVudDo6ZGlzcGF0Y2hQZW5kaW5nTG9hZEV2ZW50cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0
eWxlRWxlbWVudC5oCmluZGV4IDYzYTgyYzRlZWZmZGU1NzE3YmQ3Zjg3YzU4M2MzOWY0ZDVjNTZk
ZDIuLjAxYzNkMzBhYjBhODhjYTNkNDk1ZDUzYWM4MjY0YTQ4OTcyNTA2MWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCkBAIC04MCw2ICs4MCw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBzY29wZWRBdHRyaWJ1dGVDaGFuZ2VkKGJvb2wpOwogICAgIHZvaWQgcmVnaXN0ZXJX
aXRoU2NvcGluZ05vZGUoYm9vbCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2Rl
KENvbnRhaW5lck5vZGUqKTsKKyAgICBib29sIGhhc0hvc3RSdWxlKCkgY29uc3Q7CiAjZW5kaWYK
IAogICAgIGJvb2wgbV9maXJlZExvYWQ7CkBAIC04OSw3ICs5MCw5IEBAIHByaXZhdGU6CiAgICAg
ZW51bSBTY29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRlIHsKICAgICAgICAgTm90UmVnaXN0ZXJl
ZCwKICAgICAgICAgUmVnaXN0ZXJlZEFzU2NvcGVkLAotICAgICAgICBSZWdpc3RlcmVkSW5TaGFk
b3dSb290CisgICAgICAgIFJlZ2lzdGVyZWRBc1Njb3BlZFdpdGhIb3N0UnVsZSwKKyAgICAgICAg
UmVnaXN0ZXJlZEluU2hhZG93Um9vdCwKKyAgICAgICAgUmVnaXN0ZXJlZEluU2hhZG93Um9vdFdp
dGhIb3N0UnVsZQogICAgIH07CiAgICAgU2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSBtX3Nj
b3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmNwcAppbmRleCA5Mzg0Mzk2MTJjYTIxZDI2
OWU1Nzc4YTk2YjE1OTgwZWY3NTQyYjlhLi41YzVkYmU5NGZmZTQ0NmU2ZmUwYjYzZjZkMGU3ZWI2
M2U2NDkzZTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MU2hh
ZG93RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRv
d0VsZW1lbnQuY3BwCkBAIC00MSw2ICs0MSw3IEBAIGNsYXNzIERvY3VtZW50OwogCiBpbmxpbmUg
SFRNTFNoYWRvd0VsZW1lbnQ6OkhUTUxTaGFkb3dFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IEluc2VydGlvblBvaW50KHRhZ05h
bWUsIGRvY3VtZW50KQorICAgICwgbV9yZWdpc3RlcmVkV2l0aFNoYWRvd1Jvb3QoZmFsc2UpCiB7
CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzaGFkb3dUYWcpKTsKIH0KQEAgLTY4
LDQgKzY5LDMxIEBAIGJvb2wgSFRNTFNoYWRvd0VsZW1lbnQ6OmRvZXNTZWxlY3RGcm9tSG9zdENo
aWxkcmVuKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK05vZGU6Okluc2VydGlvbk5v
dGlmaWNhdGlvblJlcXVlc3QgSFRNTFNoYWRvd0VsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWlu
ZXJOb2RlKiBpbnNlcnRpb25Qb2ludCkKK3sKKyAgICBJbnNlcnRpb25Qb2ludDo6aW5zZXJ0ZWRJ
bnRvKGluc2VydGlvblBvaW50KTsKKworICAgIGlmIChpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVu
dCgpICYmIGlzQWN0aXZlKCkpIHsKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFk
b3dSb290KCkpIHsKKyAgICAgICAgICAgIHJvb3QtPnJlZ2lzdGVyU2hhZG93RWxlbWVudCgpOwor
ICAgICAgICAgICAgbV9yZWdpc3RlcmVkV2l0aFNoYWRvd1Jvb3QgPSB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7Cit9CisKK3ZvaWQgSFRNTFNoYWRv
d0VsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQorewor
ICAgIGlmIChpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVudCgpICYmIG1fcmVnaXN0ZXJlZFdpdGhT
aGFkb3dSb290KSB7CisgICAgICAgIFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCk7Cisg
ICAgICAgIGlmICghcm9vdCkKKyAgICAgICAgICAgIHJvb3QgPSBpbnNlcnRpb25Qb2ludC0+c2hh
ZG93Um9vdCgpOworICAgICAgICBpZiAocm9vdCkKKyAgICAgICAgICAgIHJvb3QtPnVucmVnaXN0
ZXJTaGFkb3dFbGVtZW50KCk7CisgICAgICAgIG1fcmVnaXN0ZXJlZFdpdGhTaGFkb3dSb290ID0g
ZmFsc2U7CisgICAgfQorICAgIEluc2VydGlvblBvaW50OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Q
b2ludCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5oCmluZGV4IGE0ZWNkYjNhZDQ1ZmI4ZWM0ZTlh
YTUwMDBhMDFlM2FlZDFjZDIwZGMuLjExOWZhOWY5NWRlZjYyNzQxNjJjYjE4ODk0OWZkNDcxYWFk
YmZiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1l
bnQuaApAQCAtNDYsOCArNDYsMTQgQEAgcHVibGljOgogICAgIGJvb2wgaXNTZWxlY3RWYWxpZCgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KICAgICBib29sIGRvZXNTZWxlY3RGcm9t
SG9zdENoaWxkcmVuKCkgY29uc3Q7CiAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIEluc2VydGlv
bk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSopIE9WRVJSSURF
OworCiBwcml2YXRlOgogICAgIEhUTUxTaGFkb3dFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOworCisgICAgYm9vbCBtX3JlZ2lzdGVyZWRXaXRoU2hhZG93Um9vdDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAppbmRleCA0MjAzODc4YWY5YWM3NTc0NTA5ZTllNzVjMDgxM2RiZTMxMTQwOTkwLi5hMGJhYmNj
NzZmNTQ0OGVlZWNjMGI5ZGYzZDBhZWYwN2M3OTA1ODQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCkBAIC0zMzAsNyArMzMwLDcgQEAgc2l6ZV90IEludGVybmFsczo6bnVtYmVy
T2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbihjb25zdCBOb2RlKiBzY29wZSwgRXhjZXB0aW9uQ28K
IHsKICAgICBpZiAoc2NvcGUgJiYgKHNjb3BlLT5pc0VsZW1lbnROb2RlKCkgfHwgc2NvcGUtPmlz
U2hhZG93Um9vdCgpKSkKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQotICAgICAgICByZXR1cm4g
c2NvcGUtPm51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4oKTsKKyAgICAgICAgcmV0dXJu
IHNjb3BlLT5udW1iZXJPZlNjb3BlZFN0eWxlcygpOwogI2Vsc2UKICAgICAgICAgcmV0dXJuIDA7
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCA3ZTRkMzgwMWJlMDZkYzE0MjUyNWQyZmFmMmM4ZmYyOTAyZGNjZmVi
Li5iNDE0YzEwMjI5MTgyY2NkOGQ5ZGIxMzVhOWRjYTY0OWM5MGFjYzM2IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMTItMDctMzAgIFRha2FzaGkgU2FrYW1vdG8gIDx0YXNha0Bnb29nbGUuY29t
PgorCisgICAgICAgIFtTaGFkb3cgRE9NXSBOZWVkcyBAaG9zdCBydWxlIGZvciBTaGFkb3dET00g
c3R5bGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODg2MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGZhc3QvZG9tL3NoYWRvdy9wc2V1ZG8taG9zdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZG9tL3NoYWRvdy9wc2V1ZG8taG9zdC5odG1sOiBBZGRlZC4KKwogMjAxMi0wNy0z
MCAgUGV0ZXIgS2FzdGluZyAgPHBrYXN0aW5nQGdvb2dsZS5jb20+CiAKICAgICAgICAgW0Nocm9t
aXVtXSBCYXNlbGluZSBhbmQgZXhwZWN0YXRpb24gZm9sbG93dXBzIGFmdGVyIHIxMjQxNDIuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLWhvc3QtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1ob3N0LWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zNzVjNmE3OWY0ZmRiZjViNTFmYzlkNjg3MDhiMWNkZTQyYzgxZGQ0
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1o
b3N0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBACitob3N0OiByZ2IoMjU1LCAwLCAwKQor
aG9zdDogcmdiKDI1NSwgMCwgMCkKK2hvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMTI4
LCAxMjgsIDEyOCkKK2hvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMCwgMCwgMjU1KQor
aG9zdDogcmdiKDEyOCwgMTI4LCAxMjgpCitob3N0OiByZ2IoMjU1LCAyNTUsIDApCitob3N0OiBy
Z2IoMjU1LCAwLCAwKQorbmVzdGVkSG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigyNTUs
IDAsIDApCitob3N0OiByZ2IoMjU1LCAyNTUsIDApCitIZWxsbwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1ob3N0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zaGFkb3cvcHNldWRvLWhvc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YTIyOTkxZGRiOWExZTZh
YTMzNGJhODUzZTMwZDAwNDFhNGQxMmUxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2hhZG93L3BzZXVkby1ob3N0Lmh0bWwKQEAgLTAsMCArMSwxNjkgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyNob3N0IHsKKyAgY29sb3I6IGdy
YXk7Cit9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3BvbHlmaWxsLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBkdW1wQ29tcHV0ZWRTdHlsZShub2RlKQorewor
ICAgIGRlYnVnKG5vZGUuaWQgKyAiOiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0
ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKK30KKworZnVu
Y3Rpb24gcHJlcHJvY2Vzc0ZvclRlc3QoKQoreworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicGFyZW50Iik7CisgICAgcGFyZW50LmlubmVySFRNTCA9ICc8ZGl2IGlk
PSJob3N0Ij48c3Bhbj5IZWxsbzwvc3Bhbj48L2Rpdj4nOworfQorCitmdW5jdGlvbiB0ZXN0U2lt
cGxlQ29udGVudENhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhv
c3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cgPSBu
ZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHls
ZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAg
IGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlU2hhZG93
Q2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRT
aGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsg
Y29sb3I6IHJlZDsgfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIGR1bXBDb21wdXRl
ZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0UHNldWRvSG9zdFdpdGhTY29wZWQoKQor
eworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9v
dChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxkaXY+PHN0eWxlIHNjb3BlZD5AaG9z
dCB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+PGRpdj48c3R5bGUgc2Nv
cGVkPkBob3N0IHsgY29sb3I6IGJsdWU7IH08L3N0eWxlPjwvZGl2PjwvZGl2PiI7CisgICAgZHVt
cENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RQc2V1ZG9Ib3N0V2l0aEZh
bGxiYWNrU2hhZG93KCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93
ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXN0U2hhZG93ID0g
bmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9
ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+
IjsKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PHNoYWRvdz48L3No
YWRvdz48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVu
Y3Rpb24gdGVzdFR3b1NoYWRvd1Jvb3RzQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3Qo
KTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAg
dmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5
b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG9sZGVzdFNo
YWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGNv
bnRlbnQ+PC9jb250ZW50PiI7CisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHls
ZT5AaG9zdCB7IGNvbG9yOiBibHVlOyB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAg
ZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RUd29TaGFkb3dSb290
c0NyZWF0aW5nRGlmZmVyZW50T3JkZXJDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgp
OworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2
YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlv
dW5nZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgeW91bmdlc3RT
aGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiBibHVlOyB9PC9zdHlsZT48
c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+
QGhvc3QgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBk
dW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxlU2hhZG93
Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50KCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgp
OworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2
YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIG9s
ZGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXJT
aGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFk
b3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKworICAgIHlvdW5nZXN0U2hhZG93Lmlu
bmVySFRNTCA9ICI8c2hhZG93Pjwvc2hhZG93PiI7CisgICAgeW91bmdlclNoYWRvdy5pbm5lckhU
TUwgPSAiPGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgb2xkZXJTaGFkb3cuaW5uZXJIVE1MID0g
IjxzdHlsZT5AaG9zdCB7IGNvbG9yOiBncmVlbjsgfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4i
OworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IHJl
ZDsgfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUo
aG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3RzV2l0aEluZXJ0U2hh
ZG93KCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdl
YktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdlYktpdFNo
YWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93
Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9v
dChob3N0KTsKKworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3Qg
eyBjb2xvcjogeWVsbG93OyB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgeW91bmdl
clNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IGJsdWU7IH08L3N0eWxl
PjxkaXY+aW5lcnQ8L2Rpdj4iOworICAgIG9sZGVyU2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+
QGhvc3QgeyBjb2xvcjogZ3JlZW47IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBv
bGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08L3N0
eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOwor
fQorCitmdW5jdGlvbiB0ZXN0TmVzdGVkQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3Qo
KTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAg
dmFyIG91dGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgb3V0ZXJT
aGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxk
aXYgaWQ9Im5lc3RlZEhvc3QiPklubmVyU2hhZG93PC9kaXY+JzsKKyAgICB2YXIgbmVzdGVkID0g
b3V0ZXJTaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIm5lc3RlZEhvc3QiKTsKKyAgICB2YXIgaW5uZXJT
aGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChuZXN0ZWQpOworICAgIGlubmVyU2hhZG93Lmlu
bmVySFRNTCA9ICc8c3R5bGU+QGhvc3QgeyBjb2xvcjogYmx1ZTsgfTwvc3R5bGU+U2hvdyA8c2hh
ZG93Pjwvc2hhZG93PiBpbiBvdXRlci4nOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOwor
ICAgIGR1bXBDb21wdXRlZFN0eWxlKG5lc3RlZCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0VnNT
Y29wZWRTdHlsZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgaG9zdC5pbm5lckhUTUwgPSAi
PHN0eWxlIHNjb3BlZD4jaG9zdCB7IGNvbG9yOiB5ZWxsb3c7IH08L3N0eWxlPjxzcGFuPkhlbGxv
PC9zcGFuPiI7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOwor
ICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IHJlZDsgfTwvc3R5
bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9
CisKK2Z1bmN0aW9uIHRlc3RIb3N0VnNJbmxpbmVTdHlsZSgpCit7CisgICAgcHJlcHJvY2Vzc0Zv
clRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7
CisgICAgaG9zdC5zdHlsZS5jb2xvciA9ICJ5ZWxsb3ciOworICAgIGhvc3QuaW5uZXJIVE1MID0g
IjxzcGFuPkhlbGxvPC9zcGFuPiI7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dS
b290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6
IHJlZDsgfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5
bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3RzKCkKK3sKKyAgICB0ZXN0U2ltcGxlQ29u
dGVudENhc2UoKTsKKyAgICB0ZXN0U2ltcGxlU2hhZG93Q2FzZSgpOworICAgIHRlc3RQc2V1ZG9I
b3N0V2l0aFNjb3BlZCgpOworICAgIHRlc3RQc2V1ZG9Ib3N0V2l0aEZhbGxiYWNrU2hhZG93KCk7
CisgICAgdGVzdFR3b1NoYWRvd1Jvb3RzQ2FzZSgpOworICAgIHRlc3RUd29TaGFkb3dSb290c0Ny
ZWF0aW5nRGlmZmVyZW50T3JkZXJDYXNlKCk7CisgICAgdGVzdE11bHRpcGxlU2hhZG93Um9vdHNX
aXRoSW5lcnRTaGFkb3dDb250ZW50KCk7CisgICAgdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRo
SW5lcnRTaGFkb3coKTsKKyAgICB0ZXN0TmVzdGVkQ2FzZSgpOworICAgIHRlc3RIb3N0VnNTY29w
ZWRTdHlsZSgpOworICAgIHRlc3RIb3N0VnNJbmxpbmVTdHlsZSgpOworfQorPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCkiPgorICA8ZGl2IGlkPSJwYXJlbnQiPgor
ICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155477</attachid>
            <date>2012-07-31 02:45:21 -0700</date>
            <delta_ts>2012-08-01 01:41:43 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-88606-20120731184504.patch</filename>
            <type>text/plain</type>
            <size>44066</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MTcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDAxMzU1YjRkMjQxMTI4
ZDc2YWVhMzE4NjU3MGNiZDRlNzIwYzllYS4uMThjYTAyYTVjZGY4YzVkNzIzODg5ZjBiYTJjOGM1
ZTM0ZWIwYjM2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NiBAQAorMjAxMi0wNy0zMCAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01d
IE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIEltcGxlbWVu
dGVkIEBob3N0LUBydWxlcyBhY2NvcmRpbmcgdG8gdGhlIHNoYWRvdyBkb20gc3BlYzoKKyAgICAg
ICAgaHR0cDovL2R2Y3MudzMub3JnL2hnL3dlYmNvbXBvbmVudHMvcmF3LWZpbGUvdGlwL3NwZWMv
c2hhZG93L2luZGV4Lmh0bWwjaG9zdC1hdC1ydWxlCisgICAgICAgIFRoZSBkZXNpZ24gZG9jIGlz
OgorICAgICAgICBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFQMnlvcmNoRjhs
Y2kyc2Njci1tVlNSZjJkdHZqS2VpdXlRV3pDQjJiRUE4L2VkaXQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvcHNl
dWRvLWhvc3QuaHRtbAorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAgQWRk
ZWQgYSBuZXcgdG9rZW4gSE9TVF9TWU0gYW5kIGFkZGVkIGEgbmV3IHJ1bGUgZm9yIEBob3N0IEAt
cnVsZXMuCisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKToKKyAgICAgICAgTW9kaWZpZWQgZGV0ZWN0QXRUb2tl
biB0byBwYXJzZSAiQGhvc3QiIGFuZCBnZW5lcmF0ZSBIT1NUX1NZTSB0b2tlbi4KKyAgICAgICAg
QWRkZWQgYSBuZXcgbWV0aG9kIHRvIGNyZWF0ZSBhIHJ1bGUgZm9yIEBob3N0IEAtcnVsZSwgaS5l
LiBhbgorICAgICAgICBpbnN0YW5jZSBvZiBjbGFzcyBTdHlsZVJ1bGVIb3N0LgorICAgICAgICAq
IGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgQWRkZWQgYSBkZWNsYXJhdGlvbiBvZiBjcmVhdGVI
b3N0UnVsZS4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSdWxlU2V0OjphZGRIb3N0UnVsZSk6CisgICAgICAgIEFkZGVkIGEgbWV0aG9kIHRvIHN0
b3JlIEBob3N0IEAtcnVsZXMgaW4gUnVsZVNldC4gVGhlIG1ldGhvZCB1c2VzCisgICAgICAgIEhv
c3RSdWxlTWFwLCBtX2hvc3RSdWxlcy4gVGhlIG1hcCdzIGtleXMgYXJlIHNoYWRvdyByb290cyBh
bmQgdGhlIHZhbHVlcworICAgICAgICBhcmUgQGhvc3QgQC1ydWxlcyBkZWNsYXJlZCBpbiB0aGUg
c2hhZG93IHJvb3RzLiBFYWNoIEBob3N0IEAtcnVsZXMgYXJlCisgICAgICAgIHN0b3JlZCBpbiBz
aW1sYXIgd2F5IHRvIG90aGVyIHJ1bGVzLCBpLmUuIGJ5IHVzaW5nIFJ1bGVEYXRhLgorICAgICAg
ICBXZSBuZWVkIFJ1bGVEYXRhIHRvIHVzZSBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QsIGFw
cGx5UHJvcGVydGllcywKKyAgICAgICAgYW5kIHNvIG9uLgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6dHJhbnNmZXJNYXRjaGVkUnVsZXMpOgorICAgICAgICBNb3ZlZCB0aGUgY29k
ZSBmcm9tIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcy4gVG8gYXBwbHkgQGhvc3QgQC1ydWxl
cworICAgICAgICBhZnRlciBzdHlsZSBydWxlcyBkZWNsYXJlZCBpbiBkb2N1bWVudCwgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JIb3N0IGlzCisgICAgICAgIGludm9rZWQgYWZ0ZXIgbWF0Y2hTY29w
ZWRBdXRob3JSdWxlcyBhbmQgc29ydE1hdGNoZWRSdWxlcyBhcmUgaW52b2tlZC4KKyAgICAgICAg
aS5lLgorICAgICAgICBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzIC0+IHNvcnRNYXRjaGVkUnVsZXMg
LT4gY29sbGVjdCBAaG9zdCBALXJ1bGVzIC0+CisgICAgICAgIHRyYW5zZmVyTWF0Y2hlZFJ1bGVz
LgorICAgICAgICBBcyBAaG9zdCBALXJ1bGVzJ3Mgc2VsZWN0b3IgaXMganVzdCAiQGhvc3QiIGFu
ZCBkdW1teSBzZWxlY3RvcnMgYXJlCisgICAgICAgIHVzZWQgdG8gc3RvcmUgYXMgUnVsZURhdGEs
IHJ1bGVzIGluIGRvY3VtZW50LCBlLmcuIGlkIHJ1bGVzIGFuZCBzbyBvbiwKKyAgICAgICAgd2ls
bCBvdmVycmlkZSBAaG9zdCBALXJ1bGVzLiBUaGlzIGlzIGRvbmUgYnkgc29ydE1hdGNoZWRSdWxl
cywgY29tcGFyaW5nCisgICAgICAgIHNlbGVjdG9yJ3Mgc3BlY2lmaWNpdGVzIGFuZCBzdHlsZSBy
dWxlcycgc291cmNlIHBvc2l0aW9ucy4KKyAgICAgICAgQW4gYWx0ZXJuYXRpdmUgd2F5IGlzIHRv
IGFzc2lnbiBkdW1teSBzcGVjaWZpY2l0eSB3aXRoIEBob3N0IEAtcnVsZXMuCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMpOgorICAg
ICAgICBNb3ZlZCB0aGUgInRyYW5zZmVyIiBjb2RlIHRvIHRyYW5zZmVyTWF0Y2hlZFJ1bGVzLiBO
b3cgdGhpcyBtZXRob2QKKyAgICAgICAgaW52b2tlcyB0aGUgbmV3IG1ldGhvZCB0cmFuc2Zlck1h
dGNoZWRSdWxlcyBhZnRlciBpbnZva2luZworICAgICAgICBzb3J0TWF0Y2hlZFJ1bGVzLgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMpOgorICAgICAgICBU
aGlzIG1ldGhvZCBjaGVja3Mgd2hldGhlciBtX2VsZW1lbnQgaGFzIEBob3N0IEAtcnVsZXMgb3Ig
bm90IGFuZAorICAgICAgICBpZiBleGlzdHMsIGludm9rZXMgY29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JIb3N0LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JIb3N0KToKKyAgICAgICAgVGhpcyBtZXRob2QgY2hlY2tzIHdoZXRoZXIgc2hhZG93
IHJvb3RzIGF0dGFjaGVkIHRvIHRoZSBnaXZlbiBlbGVtZW50CisgICAgICAgIGhhdmUgPHNoYWRv
dz4gb3Igbm90IGFuZCBmaW5kcyB0aGUgeW91bmdlc3Qgc2hhZG93IHJvb3Qgd2hpY2ggZG9lc24n
dAorICAgICAgICBoYXZlIGFueSA8c2hhZG93PiBlbGVtZW50cy4gQGhvc3QgQC1ydWxlcyBmcm9t
IHRoZSBzaGFkb3cgcm9vdCB0bworICAgICAgICB0aGUgeW91bmdlc3Qgc2hhZG93IHJvb3QgYXJl
IGFwcGxpZWQsIGkuZS4gcHJvdmlkZWQgZm9yCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVs
ZXMpOgorICAgICAgICBSZW1vdmVkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcy4gSW5zdGVh
ZCwgbW9kaWZpZWQgdG8gdXNlCisgICAgICAgIHNvcnRNYXRjaGVkUnVsZXMgYW5kIHRyYW5zZmVy
TWF0Y2hlZFJ1bGVzIHNlcGFyYXRlbHkuIFRoZSBhYm92ZQorICAgICAgICBtYXRjaEhvc3RSdWxl
cyBpcyBpbnZva2VkIGJldHdlZW4gdGhlIHNvcnRNYXRjaGVkUnVsZXMgYW5kCisgICAgICAgIHRy
YW5zZmVyTWF0Y2hlZFJ1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRk
SG9zdFJ1bGUpOgorICAgICAgICBUaGlzIG1ldGhvZCBmaW5kcyB0aGUgcnVsZXNldCBtYXRjaGVk
IHdpdGggdGhlIGdpdmVuIEBob3N0IEAtcnVsZXMsIGkuZS4KKyAgICAgICAgdGhlIHNoYWRvdyBo
b3N0IG9mIHRoZSBzaGFkb3cgRE9NIHN1YnRyZWUgd2hpY2ggY29udGFpbnMgdGhlIHN0eWxlCisg
ICAgICAgIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gQGhvc3QgQC1ydWxlcy4gVGhlbiB0aGUgbWV0
aG9kIHN0b3JlcyBAaG9zdAorICAgICAgICBALXJ1bGVzIGluIHRoZSBydWxlc2V0IGJ5IHVzaW5n
IFJ1bGVTZXQ6OmFkZEhvc3RSdWxlLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YWRkUnVsZXNGcm9tU2hlZXQpOgorICAgICAgICBOZXdseSBhZGRlZCB0aGUgY29kZSBmb3Igc3Rv
cmluZyBAaG9zdCBALXJ1bGVzIGluIFJ1bGVTZXQuIEFzIEBob3N0CisgICAgICAgIEAtcnVsZXMn
cyBzY29wZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHN0eWxlIGVsZW1lbnQgd2hpY2ggaGFzIHRo
ZQorICAgICAgICBAaG9zdCBALXJ1bGVzLCB0aGUgY29kZSBpbnZva2VzIFN0eWxlUmVzb2x2ZXI6
OmFkZEhvc3RSdWxlIHRvIGFkZAorICAgICAgICB0aGUgQGhvc3QgQC1ydWxlcyB0byBtYXRjaGVk
IHJ1bGVzZXQuCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFN0eWxl
UmVzb2x2ZXIpOgorICAgICAgICBBZGRlZCBkZWNsYXJhdGlvbnMgb2YgdHJhbnNmZXJNYXRjaGVk
UnVsZXMsIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9ySG9zdCwKKyAgICAgICAgbWF0Y2hIb3N0UnVs
ZXMsIGFuZCBhZGRIb3N0UnVsZS4KKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSdWxlQmFzZTo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpj
cmVhdGVDU1NPTVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6U3R5
bGVSdWxlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0Ojp+U3R5bGVSdWxl
SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0OjpzZXRQcm9wZXJ0aWVzKToK
KyAgICAgICAgSW1wbGVtZW50ZWQgY2xhc3MgU3R5bGVSdWxlSG9zdC4gU3R5bGVSdWxlSG9zdCBp
bmhlcml0cyBmcm9tCisgICAgICAgIFN0eWxlUnVsZUJhc2UuIEFzIFN0eWxlUnVsZSBzcGVjaWZp
ZXMgbV90eXBlIGFzIFN0eWxlIGFuZCBtX3R5cGUgaXMKKyAgICAgICAgYSBwcml2YXRlIG1lbWJl
ciB2YXJpYWJsZSBvZiBjbGFzcyBTdHlsZUJhc2UsIFN0eWxlUnVsZUhvc3QgY2Fubm90CisgICAg
ICAgIGluaGVyaXQgZnJvbSBTdHlsZVJ1bGUuIFN0eWxlUnVsZUhvc3QgaGFzIFJlZlB0cjxTdHls
ZVJ1bGU+IGFuZAorICAgICAgICB0aGUgU3R5bGVSdWxlIGlzIHVzZWQgdG8gYXBwbHkgQGhvc3Qg
QC1ydWxlcyB0byBzaGFkb3cgaG9zdHMuCisgICAgICAgICogY3NzL1N0eWxlUnVsZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6aXNIb3N0UnVsZSk6CisgICAgICAgIEltcGxl
bWVudGVkIGluIHNpbWlsYXIgd2F5IHRvIG90aGVyIHN0eWxlIHJ1bGVzLiBJZiBhIHJ1bGUgaXMg
YW4gQGhvc3QKKyAgICAgICAgQC1ydWxlLCByZXR1cm5zIHRydWUuIE90aGVyd2lzZSwgZmFsc2Uu
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSdWxlSG9zdDo6Y2hpbGQpOgorICAgICAgICBSZXR1cm5zIFN0eWxlUnVsZS4K
KyAgICAgICAgKiBjc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2hlZXRDb250ZW50czo6U3R5bGVTaGVldENvbnRlbnRzKToKKyAgICAgICAgSW5pdGlh
bGl6ZWQgbV9udW1iZXJPZkhvc3RSdWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRD
b250ZW50czo6cGFyc2VyQXBwZW5kUnVsZSk6CisgICAgICAgIElmIHRoZSBnaXZlbiBzdHlsZSBy
dWxlIGlzIGEgaG9zdCBydWxlLCBpbmNyZW1lbnRzIG51bWJlciBvZiBob3N0CisgICAgICAgIHJ1
bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpjbGVhclJ1bGVzKToK
KyAgICAgICAgU2V0IG51bWJlciBvZiBob3N0IHJ1bGVzIHRvIGJlIDAsIGJlY2F1c2UgYWxsIHJ1
bGVzIGFyZSBjbGVhcmVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjp3
cmFwcGVySW5zZXJ0UnVsZSk6CisgICAgICAgIElmIGFuIGluc2VydGVkIHJ1bGUgaXMgYSBob3N0
IHJ1bGUsIGluY3JlbWVudHMgbnVtYmVyIG9mIGhvc3QgcnVsZXMuCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVNoZWV0Q29udGVudHM6OndyYXBwZXJEZWxldGVSdWxlKToKKyAgICAgICAgSWYgYSBy
dWxlIHRvIGJlIGRlbGV0ZWQgaXMgYSBob3N0IHJ1bGUsIGRlY3JlbWVudHMgbnVtYmVyIG9mIGhv
c3QgcnVsZXMuCisgICAgICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oOgorICAgICAgICBB
ZGRlZCBhIG5ldyBtZW1iZXIgdmFyaWFibGUsIG1fbnVtYmVyT2ZIb3N0UnVsZXMgd2hpY2ggaGFz
IG51bWJlciBvZgorICAgICAgICBob3N0IHJ1bGVzIGluIHRoZSBzdHlsZSBjb250ZW50LgorICAg
ICAgICBBZGRlZCBhIG5ldyBtZXRob2QsIGhhc0hvc3RSdWxlLiBUaGUgbWV0aG9kIGlzIGludm9r
ZWQgaW4KKyAgICAgICAgSFRNTFN0eWxlRWxlbWVudCB0byBrbm93IHdoZXRoZXIgdGhlIHN0eWxl
IGVsZW1lbnQgaGFzIGFueSBob3N0IHJ1bGUgb3IKKyAgICAgICAgbm90LgorICAgICAgICAqIGRv
bS9TaGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OlNoYWRvd1Jv
b3QpOgorICAgICAgICBJbml0aWFsaXplZCBtX251bWJlck9mU2hhZG93RWxlbWVudENoaWxkcmVu
LgorICAgICAgICAqIGRvbS9TaGFkb3dSb290Lmg6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dS
b290OjpyZWdpc3RlclNoYWRvd0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9v
dDo6dW5yZWdpc3RlclNoYWRvd0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9v
dDo6aGFzU2hhZG93SW5zZXJ0aW9uUG9pbnQpOgorICAgICAgICBBcyBAaG9zdCBALXJ1bGVzIHJl
cXVpcmVzIHRvIHF1aWNrbHkgZmluZCB3aGV0aGVyIHRoZXJlIGV4aXN0IGFueQorICAgICAgICBh
Y3RpdmUgPHNoYWRvdz4gaW4gc2hhZG93IERPTSBzdWJ0cmVlLCBpbXBsZW1lbnRlZCB0aGVzZSBt
ZXRob2RzLgorICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpyZWdpc3RlcldpdGhTY29waW5nTm9kZSk6CisgICAg
ICAgIEFkZGVkIHR3byBuZXcgc3RhdGU6IFJlZ2lzdGVyZWRBc1Njb3BlZFdpdGhIb3N0UnVsZSBh
bmQKKyAgICAgICAgUmVnaXN0ZXJlZEluU2hhZG93Um9vdFdpdGhIb3N0UnVsZS4gVGhlIHN0YXRl
IG1lYW5zLAorICAgICAgICB0aGUgc3R5bGUgd2FzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgc2NvcGlu
ZyBub2RlIG9yIHRoZSBzaGFkb3cgcm9vdCwKKyAgICAgICAgYW5kIEBob3N0IEAtcnVsZXMgd2Vy
ZSByZWdpc3RlcmVkIHdpdGggdGhlIHNoYWRvdyBob3N0IG9mIHRoZSBzaGFkb3cKKyAgICAgICAg
cm9vdC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnNjb3BlZEF0dHJpYnV0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6dW5yZWdpc3Rl
cldpdGhTY29waW5nTm9kZSk6CisgICAgICAgIElmIHJlZ2lzdHJhdGlvbiBzdGF0ZSBpcyBSZWdp
c3RlcmVkSW5TaGFkb3dSb290V2l0aEhvc3RSdWxlIG9yCisgICAgICAgIFJlZ2lzdGVyZWRBc1Nj
b3BlZFdpdGhIb3N0UnVsZSwgdW5yZWdpc3RlciB3aXRoIHRoZSBzaGFkb3cgcm9vdCBhbmQKKyAg
ICAgICAgdGhlIHNoYWRvdyBob3N0IG9mIHRoZSBzaGFkb3cgcm9vdC4KKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgSWYgcmVnaXN0cmF0
aW9uIHN0YXRlIGlzIFJlZ2lzdGVyZWRJblNoYWRvd1Jvb3RXaXRoSG9zdFJ1bGUgb3IKKyAgICAg
ICAgUmVnaXN0ZXJlZEFzU2NvcGVkV2l0aEhvc3RSdWxlLCB1bnJlZ2lzdGVyIHdpdGggdGhlIHNo
YWRvdyBob3N0LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6aGFzSG9zdFJ1
bGUpOgorICAgICAgICBSZXR1cm5zIHRydWUgaWYgdGhlIHN0eWxlIGNvbnRlbnQgaGFzIGFueSBA
aG9zdCBALXJ1bGUuCisgICAgICAgIE90aGVyd2lzZSwgZmFzZS4KKyAgICAgICAgKiBodG1sL0hU
TUxTdHlsZUVsZW1lbnQuaDoKKyAgICAgICAgQWRkZWQgdHdvIG5ldyBlbnVtcyB0byBTY29wZWRT
dHlsZVJlZ2lzdHJhdGlvblN0YXRlLgorICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QncyBkZWNs
YXJhdGlvbjogaGFzSG9zdFJ1bGUuCisgICAgICAgICogaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNoYWRvd2xlbWVudDo6aW5zZXJ0ZWRJ
bnRvKToKKyAgICAgICAgUmVnaXN0ZXJzIDxzaGFkb3c+IHdpdGggdGhlIHNoYWRvdyByb290IGlm
IDxzaGFkb3c+IGlzIGFjdGl2ZSBhbmQKKyAgICAgICAgaXRzIGluc2VydGlvbiBwb2ludCBpcyBp
biBkb2N1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTaGFkb3dsZW1lbnQ6OnJlbW92ZWRG
cm9tKToKKyAgICAgICAgVW5yZWdpc3RlciA8c2hhZG93PiBpZiA8c2hhZG93PiB3YXMgcmVnaXN0
ZXJlZCB3aXRoIHRoZSBzaGFkb3cgcm9vdC4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9IVE1MU2hh
ZG93RWxlbWVudC5oOgorICAgICAgICBBZGRlZCB0aGUgZGVjbGFyYXRpb25zIG9mIHRoZSBhYm92
ZSBtZXRob2RzLgorICAgICAgICBBZGRlZCBtX3JlZ2lzdGVyZWRXaXRoU2hhZG93Um9vdCB0byBo
b2xkIGluZm9ybWF0aW9uIGFib3V0IHdoZXRoZXIKKyAgICAgICAgPHNoYWRvdz4gd2FzIHJlZ2lz
dGVyZWQgd2l0aCB0aGUgc2hhZG93IHJvb3Qgb3Igbm90LgorCiAyMDEyLTA3LTMwICBZb3NoaWZ1
bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0NTU10gQ2hhbmdlIEVs
ZW1lbnQ6OmlzUmVhZE9ubHlGb3JtQ29udHJvbCB0byBzaG91bGRNYXRjaFJlYWRXcml0ZVNlbGVj
dG9yIG9yIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpyZWFkT25seQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueSBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NH
cmFtbWFyLnkKaW5kZXggMWM2MDRlNzZiNGRhNGNjNjVmMzk1YmM0YTczYjExMjU2MWJkNWM4NC4u
ZTZhMTA5Y2Y5NWYzYWE0OWVlNjAzZmUzNGM0M2NmNzQ0YzFjODU4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
R3JhbW1hci55CkBAIC0xMzIsNiArMTMyLDcgQEAgc3RhdGljIGludCBjc3N5eWxleChZWVNUWVBF
KiB5eWx2YWwsIHZvaWQqIHBhcnNlcikKICV0b2tlbiBQQUdFX1NZTQogJXRva2VuIE1FRElBX1NZ
TQogJXRva2VuIEZPTlRfRkFDRV9TWU0KKyV0b2tlbiBIT1NUX1NZTQogJXRva2VuIENIQVJTRVRf
U1lNCiAldG9rZW4gTkFNRVNQQUNFX1NZTQogJXRva2VuIFZBUkZVTkNUSU9OCkBAIC0yMTksNiAr
MjIwLDcgQEAgc3RhdGljIGludCBjc3N5eWxleChZWVNUWVBFKiB5eWx2YWwsIHZvaWQqIHBhcnNl
cikKICV0eXBlIDxydWxlPiBwYWdlCiAldHlwZSA8cnVsZT4gbWFyZ2luX2JveAogJXR5cGUgPHJ1
bGU+IGZvbnRfZmFjZQorJXR5cGUgPHJ1bGU+IGhvc3QKICV0eXBlIDxydWxlPiBrZXlmcmFtZXMK
ICV0eXBlIDxydWxlPiBpbnZhbGlkX3J1bGUKICV0eXBlIDxydWxlPiBzYXZlX2Jsb2NrCkBAIC00
MjQsNiArNDI2LDcgQEAgdmFsaWRfcnVsZToKICAgfCBuYW1lc3BhY2UKICAgfCBpbXBvcnQKICAg
fCByZWdpb24KKyAgfCBob3N0CiAgIDsKIAogcnVsZToKQEAgLTg1OCw2ICs4NjEsMTYgQEAgZm9u
dF9mYWNlOgogICAgIH0KIDsKIAoraG9zdDoKKyAgICBIT1NUX1NZTSBtYXliZV9zcGFjZSAneycg
bWF5YmVfc3BhY2UgZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5nX2JyYWNlIHsKKyAgICAgICAgaWYg
KCQ1KSB7CisgICAgICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcikt
PmNyZWF0ZUhvc3RSdWxlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9IDA7
CisgICAgICAgIH0KKyAgICB9Cis7CisgCiByZWdpb25fc2VsZWN0b3I6CiAgICAgc2VsZWN0b3Jf
bGlzdCB7CiAgICAgICAgIGlmICgkMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCA1
ODQ1MDZlM2FhNWE1NTNlMzA4ODhlNmFkM2Y2Y2QyOTJkNTQwNTM5Li44NGI2OTc2ZDQyYTE2MTcz
M2I4YzU0NDI0ZjdmMGZlMDkyZjI1NmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAt
ODc0NSw2ICs4NzQ1LDExIEBAIGlubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihp
bnQgbGVuZ3RoLCBib29sIGhhc0VzY2FwZSkKICAgICAgICAgICAgIG1fdG9rZW4gPSBGT05UX0ZB
Q0VfU1lNOwogICAgICAgICByZXR1cm47CiAKKyAgICBjYXNlICdoJzoKKyAgICAgICAgaWYgKGxl
bmd0aCA9PSA1ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvc3QiKSkKKyAg
ICAgICAgICAgIG1fdG9rZW4gPSBIT1NUX1NZTTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2Fz
ZSAnaSc6CiAgICAgICAgIGlmIChsZW5ndGggPT0gNyAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVy
KG5hbWUgKyAyLCAibXBvcnQiKSkgewogICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlh
UXVlcnlNb2RlOwpAQCAtOTU3NSw2ICs5NTgwLDE3IEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNl
cjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitTdHlsZVJ1
bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKCkKK3sKKyAgICBtX2FsbG93SW1wb3J0
UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CisgICAgUmVmUHRy
PFN0eWxlUnVsZUhvc3Q+IHJ1bGUgPSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoKTsKKyAgICBydWxl
LT5zZXRQcm9wZXJ0aWVzKGNyZWF0ZVN0eWxlUHJvcGVydHlTZXQoKSk7CisgICAgY2xlYXJQcm9w
ZXJ0aWVzKCk7CisgICAgU3R5bGVSdWxlSG9zdCogcmVzdWx0ID0gcnVsZS5nZXQoKTsKKyAgICBt
X3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwogdm9pZCBDU1NQYXJzZXI6OmFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCiB7CiAgICAgaWYgKCFtX3N0eWxlU2hlZXQg
fHwgIW1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5k
ZXggNmFjYmJhMjUyOTMwNTVhMTYzMzkyZjE4ZDY3N2UxYThhNTZhODRiMy4uNWQyMzBkZTlkMzJj
MjY5ZWMwOWI1NWI2ODQxMjQyZDRlNDNlNTk3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAt
MjY1LDYgKzI2NSw3IEBAIHB1YmxpYzoKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVQYWdlUnVs
ZShQYXNzT3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2VsZWN0b3IpOwogICAgIFN0eWxl
UnVsZUJhc2UqIGNyZWF0ZVJlZ2lvblJ1bGUoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rv
cj4gPiogcmVnaW9uU2VsZWN0b3IsIFJ1bGVMaXN0KiBydWxlcyk7CiAgICAgU3R5bGVSdWxlQmFz
ZSogY3JlYXRlTWFyZ2luQXRSdWxlKENTU1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlKTsKKyAgICBT
dHlsZVJ1bGVCYXNlKiBjcmVhdGVIb3N0UnVsZSgpOwogICAgIHZvaWQgc3RhcnREZWNsYXJhdGlv
bnNGb3JNYXJnaW5Cb3goKTsKICAgICB2b2lkIGVuZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggMmJkNzg2MzNlYTczM2E1
MzdmNjRlYTc0ZDcyMDA2ODhkYzk0MDhlYi4uNmM0ZWFjN2IzZGExYmE1ODJkZGQ4ZWVhYWFjODQ1
Yjg4NTI5NTI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNjAsNiAr
NjAsNyBAQAogI2luY2x1ZGUgIkNvdW50ZXIuaCIKICNpbmNsdWRlICJDb3VudGVyQ29udGVudC5o
IgogI2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKKyNpbmNsdWRlICJFbGVtZW50U2hhZG93LmgiCiAj
aW5jbHVkZSAiRm9udEZlYXR1cmVWYWx1ZS5oIgogI2luY2x1ZGUgIkZvbnRWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCkBAIC0yNTMsMTEgKzI1NCwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NPd25QdHI8UnVsZVNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFJ1bGVT
ZXQpOyB9CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE93blB0cjxW
ZWN0b3I8UnVsZURhdGE+ID4gPiBBdG9tUnVsZU1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8Tm9k
ZSosIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4gPiBIb3N0UnVsZU1hcDsKIAogICAgIHZvaWQg
YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgTWVkaWFRdWVyeUV2
YWx1YXRvciYsIFN0eWxlUmVzb2x2ZXIqID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAwKTsK
IAogICAgIHZvaWQgYWRkU3R5bGVSdWxlKFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9u
UnVsZSA9IGZhbHNlKTsKICAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3Iq
LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2Vs
ZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUgPSBmYWxzZSk7CisgICAgdm9pZCBhZGRIb3N0UnVs
ZShOb2RlKiwgU3R5bGVSdWxlKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsKICAg
ICB2b2lkIGFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UqKTsKICAgICB2b2lkIGFkZFRvUnVsZVNl
dChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiwgY29uc3QgUnVsZURhdGEmKTsK
ICAgICB2b2lkIGFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiwgYm9vbCBoYXNEb2N1bWVu
dFNlY3VyaXR5T3JpZ2luKTsKQEAgLTI3NCw2ICsyNzcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VmVjdG9yPFJ1bGVEYXRhPiogZm9jdXNQc2V1ZG9DbGFzc1J1bGVzKCkgY29uc3QgeyByZXR1cm4g
Jm1fZm9jdXNQc2V1ZG9DbGFzc1J1bGVzOyB9CiAgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiog
dW5pdmVyc2FsUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV91bml2ZXJzYWxSdWxlczsgfQogICAg
IGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mIHBhZ2VSdWxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fcGFnZVJ1bGVzOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogaG9zdFJ1bGVzKE5v
ZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIG1faG9zdFJ1bGVzLmdldChub2RlKTsgfQogCiAgICAg
dm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKQEAgLTI4
Nyw2ICsyOTEsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFJ1bGVEYXRhPiBtX2xpbmtQc2V1ZG9D
bGFzc1J1bGVzOwogICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9mb2N1c1BzZXVkb0NsYXNzUnVsZXM7
CiAgICAgVmVjdG9yPFJ1bGVEYXRhPiBtX3VuaXZlcnNhbFJ1bGVzOworICAgIEhvc3RSdWxlTWFw
IG1faG9zdFJ1bGVzOwogICAgIFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4gbV9wYWdlUnVsZXM7CiAg
ICAgdW5zaWduZWQgbV9ydWxlQ291bnQ7CiAgICAgYm9vbCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJs
ZWQ7CkBAIC01NzIsNiArNTc3LDI1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9y
U3R5bGVzaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQCiB9CiAKICNp
ZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQordm9pZCBTdHlsZVJlc29sdmVyOjphZGRIb3N0UnVsZShT
dHlsZVJ1bGVIb3N0KiBob3N0UnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKK3sKKyAgICBpZiAoIXNjb3BlIHx8ICFzY29wZS0+
aXNJblNoYWRvd1RyZWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2hhZG93Um9vdCogc2hh
ZG93Um9vdCA9IHNjb3BlLT5zaGFkb3dSb290KCk7CisgICAgaWYgKCFzaGFkb3dSb290KQorICAg
ICAgICByZXR1cm47CisgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2hhZG93SG9zdCA9IHNoYWRv
d1Jvb3QtPmhvc3QoKTsKKyAgICBpZiAoIXNoYWRvd0hvc3QpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFNjb3BlZFJ1bGVTZXRNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3Njb3BlZEF1dGhv
clN0eWxlcy5hZGQoc2hhZG93SG9zdCwgbnVsbHB0cik7CisgICAgaWYgKGFkZFJlc3VsdC5pc05l
d0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFJ1bGVTZXQ6OmNy
ZWF0ZSgpOworCisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZEhvc3RSdWxlKHNo
YWRvd1Jvb3QsIGhvc3RSdWxlLT5jaGlsZCgpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsK
K30KKyAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0dXBTY29wZVN0YWNrKGNvbnN0IENvbnRhaW5l
ck5vZGUqIHBhcmVudCkKIHsKICAgICAvLyBUaGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIHNob3Vs
ZG4ndCBiZSB1c2VkIGlmIDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQgYW55d2hlcmUuCkBAIC05
MTgsMTMgKzk0Miw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JSZWdpb24oUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlCiAgICAgfQogfQogCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVyOjp0cmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJl
c3VsdCYgcmVzdWx0KQogewotICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKLQogICAgIGlmIChtX2NoZWNr
ZXIubW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CiAgICAgICAg
IGlmICghbV9ydWxlTGlzdCkKICAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxl
TGlzdDo6Y3JlYXRlKCk7CkBAIC05NDYsNiArOTY1LDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiAgICAgfQog
fQogCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0KQoreworICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAgICB0cmFuc2Zlck1h
dGNoZWRSdWxlcyhyZXN1bHQpOworfQorCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVk
QXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykK
IHsKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQpAQCAtOTkzLDYgKzEwMjEsNTAgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQs
IGJvb2wgaW5jbHVkZUVtcHQKICNlbmRpZgogfQogCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNo
SG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7
CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICBpZiAobV9zY29wZWRBdXRob3JTdHlsZXMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhp
bmNsdWRlRW1wdHlSdWxlcyk7CisgICAgaWYgKCFzY29wZVN0YWNrSXNDb25zaXN0ZW50KG1fZWxl
bWVudCkpCisgICAgICAgIHNldHVwU2NvcGVTdGFjayhtX2VsZW1lbnQpOworICAgIGlmIChtX3Nj
b3BlU3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBTY29wZVN0
YWNrRnJhbWUmIGZyYW1lID0gbV9zY29wZVN0YWNrLmxhc3QoKTsKKyAgICBpZiAoZnJhbWUubV9z
Y29wZSAhPSBtX2VsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG9wdGlvbnMuc2NvcGUg
PSBmcmFtZS5tX3Njb3BlOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9ySG9zdChmcmFtZS5t
X3J1bGVTZXQsIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxh
c3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7
CisgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyNlbmRpZgorfQorCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9ySG9zdChSdWxlU2V0KiBydWxl
cywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgRWxlbWVudFNoYWRvdyogc2hhZG93ID0gbV9lbGVtZW50
LT5zaGFkb3coKTsKKyAgICBpZiAoIXNoYWRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVj
dG9yPGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCAxNj4gbWF0Y2hlZFJ1bGVzOyAKKyAgICBmb3Ig
KFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBz
aGFkb3dSb290OyBzaGFkb3dSb290ID0gc2hhZG93Um9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsg
CisgICAgICAgIGlmIChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlID0gcnVsZXMtPmhvc3RS
dWxlcyhzaGFkb3dSb290KSkKKyAgICAgICAgICAgIG1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7
CisgICAgICAgIGlmICghc2hhZG93Um9vdC0+aGFzU2hhZG93SW5zZXJ0aW9uUG9pbnQoKSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0Y2hlZFJ1bGVzLnNp
emUoKTsgaSA+IDA7IC0taSkKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1h
dGNoZWRSdWxlcy5hdChpLTEpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgb3B0aW9u
cyk7Cit9CisKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3Vs
dCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogICAgIG1fbWF0Y2hlZFJ1bGVz
LmNsZWFyKCk7CkBAIC0xMDA3LDggKzEwNzksMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMK
ICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihtX2F1dGhvclN0eWxlLmdldCgpLCBy
ZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVs
ZSwgb3B0aW9ucyk7CiAKICAgICBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKHJlc3VsdCwgaW5jbHVk
ZUVtcHR5UnVsZXMpOworICAgIGlmICghbV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAg
ICBzb3J0TWF0Y2hlZFJ1bGVzKCk7CiAKLSAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMo
cmVzdWx0KTsKKyAgICBtYXRjaEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsK
KyAgICBpZiAoIW1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgdHJhbnNmZXJNYXRj
aGVkUnVsZXMocmVzdWx0KTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQpAQCAtMjYzMiw2
ICsyNzA4LDE4IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIENTU1Nl
bGVjdG9yKiBzZWxlY3RvciwgYm9vbCBoYXNEb2N1bWVudFNlCiAgICAgbV91bml2ZXJzYWxSdWxl
cy5hcHBlbmQocnVsZURhdGEpOwogfQogCit2b2lkIFJ1bGVTZXQ6OmFkZEhvc3RSdWxlKE5vZGUq
IHNoYWRvd1Jvb3QsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luKQoreworICAgIHN0YXRpYyBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBuZXcgQ1NTU2VsZWN0
b3I7CisKKyAgICBIb3N0UnVsZU1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1faG9zdFJ1bGVz
LmFkZChzaGFkb3dSb290LCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkp
IAorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IGFkb3B0UHRyKG5ldyBWZWN0
b3I8UnVsZURhdGE+KTsKKworICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbGVjdG9yLCAw
LCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCB0cnVlLCBmYWxzZSk7CisgICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT5zZWNvbmQtPmFwcGVuZChydWxlRGF0YSk7Cit9CisKIHZvaWQgUnVsZVNldDo6
YWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSogcnVsZSkKIHsKICAgICBtX3BhZ2VSdWxlcy5hcHBl
bmQocnVsZSk7CkBAIC0yNzMwLDYgKzI4MTgsMTAgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zy
b21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHUK
ICAgICAgICAgICAgIGFkZFJlZ2lvblJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUmVnaW9uKj4o
cnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOwogICAgICAgICB9CiAjZW5kaWYKKyNp
ZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgICAgICBlbHNlIGlmIChydWxlLT5pc0hvc3RSdWxl
KCkpCisgICAgICAgICAgICByZXNvbHZlci0+YWRkSG9zdFJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVS
dWxlSG9zdCo+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBzY29wZSk7CisjZW5k
aWYKICAgICB9CiAgICAgaWYgKG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCkKICAgICAgICAgc2hy
aW5rVG9GaXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4IGYxODFlYjYwZTE5
MDE2ZjRkMzU5YTRmOTc4YTVkZDI5NzcyYTViZWMuLjg4ZjI2YTQ4OTNiOWZjMWRmNzhkZDk4MzE4
NjRlMGM3M2MyOTFjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtODEsNiAr
ODEsNyBAQCBjbGFzcyBTdHlsZVJ1bGU7CiBjbGFzcyBTdHlsZVJ1bGVLZXlmcmFtZXM7CiBjbGFz
cyBTdHlsZVJ1bGVQYWdlOwogY2xhc3MgU3R5bGVSdWxlUmVnaW9uOworY2xhc3MgU3R5bGVSdWxl
SG9zdDsKIGNsYXNzIFN0eWxlU2hhZGVyOwogY2xhc3MgU3R5bGVTaGVldDsKIGNsYXNzIFN0eWxl
U2hlZXRDb250ZW50czsKQEAgLTEzNCw2ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwb3BQ
YXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIHB1c2hQYXJlbnRTaGFkb3dSb290KGNv
bnN0IFNoYWRvd1Jvb3QqKTsKICAgICB2b2lkIHBvcFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hh
ZG93Um9vdCopOworICAgIHZvaWQgYWRkSG9zdFJ1bGUoU3R5bGVSdWxlSG9zdCosIGJvb2wsIGNv
bnN0IENvbnRhaW5lck5vZGUqKTsKIAogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxl
Rm9yRWxlbWVudChFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgU3R5bGVT
aGFyaW5nQmVoYXZpb3IgPSBBbGxvd1N0eWxlU2hhcmluZywKICAgICAgICAgUnVsZU1hdGNoaW5n
QmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcg
PSAwKTsKQEAgLTM1NSwxMSArMzU3LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXRjaEF1dGhv
clJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBt
YXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAg
IHZvaWQgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQq
LCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0
aW9ucyYpOwogICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCos
IGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRp
b25zJik7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9y
PFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29u
c3QgTWF0Y2hPcHRpb25zJik7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckhvc3Qo
UnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3Qg
TWF0Y2hPcHRpb25zJik7CiAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURh
dGEmKSBjb25zdDsKICAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAgICB2b2lkIHRyYW5z
ZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0Jik7CiAgICAgdm9pZCBzb3J0QW5kVHJhbnNmZXJN
YXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKIAogICAgIGJvb2wgY2hlY2tTZWxlY3Rvcihjb25z
dCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gMCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJ1bGUuY3BwCmluZGV4IDM0MjdmMDU1OTIxN2U2MmYzOTI3OGE4ODA1YWIzZDhkOGE0ZTk1
MjguLjg4MGRjYjY0ZjQ5NWM3YTRkY2U4ODI0NmMxMDMzMzAxNWJiZmM3ZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJ1bGUuY3BwCkBAIC03Nyw2ICs3Nyw5IEBAIHZvaWQgU3R5bGVSdWxlQmFzZTo6ZGVz
dHJveSgpCiAgICAgY2FzZSBLZXlmcmFtZXM6CiAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxT
dHlsZVJ1bGVLZXlmcmFtZXMqPih0aGlzKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSG9z
dDoKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFN0eWxlUnVsZUhvc3QqPih0aGlzKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgVW5rbm93bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAg
Y2FzZSBLZXlmcmFtZToKQEAgLTExMCw2ICsxMTMsOCBAQCBQYXNzUmVmUHRyPFN0eWxlUnVsZUJh
c2U+IFN0eWxlUnVsZUJhc2U6OmNvcHkoKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKICAgICBj
YXNlIEtleWZyYW1lczoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVs
ZUtleWZyYW1lcyo+KHRoaXMpLT5jb3B5KCk7CisgICAgY2FzZSBIb3N0OgorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlSG9zdCo+KHRoaXMpLT5jb3B5KCk7CiAgICAg
Y2FzZSBVbmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAt
MTUxLDYgKzE1Niw3IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZT4gU3R5bGVSdWxlQmFzZTo6Y3JlYXRl
Q1NTT01XcmFwcGVyKENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0CiAgICAgY2FzZSBLZXlmcmFt
ZXM6CiAgICAgICAgIHJ1bGUgPSBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpjcmVhdGUoc3RhdGlj
X2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4oc2VsZiksIHBhcmVudFNoZWV0KTsKICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBIb3N0OgogICAgIGNhc2UgVW5rbm93bjoKICAgICBjYXNlIENoYXJz
ZXQ6CiAgICAgY2FzZSBLZXlmcmFtZToKQEAgLTIyNiw2ICsyMzIsMjcgQEAgdm9pZCBTdHlsZVJ1
bGVQYWdlOjpzZXRQcm9wZXJ0aWVzKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gcHJvcGVy
dGllcykKICAgICBtX3Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOwogfQogCitTdHlsZVJ1bGVIb3N0
OjpTdHlsZVJ1bGVIb3N0KCkKKyAgICA6IFN0eWxlUnVsZUJhc2UoSG9zdCkKKyAgICAsIG1fY2hp
bGQoU3R5bGVSdWxlOjpjcmVhdGUoMCkpCit7Cit9CisKK1N0eWxlUnVsZUhvc3Q6OlN0eWxlUnVs
ZUhvc3QoY29uc3QgU3R5bGVSdWxlSG9zdCYgbykKKyAgICA6IFN0eWxlUnVsZUJhc2UobykKKyAg
ICAsIG1fY2hpbGQoby5tX2NoaWxkLT5jb3B5KCkpCit7Cit9CisKK1N0eWxlUnVsZUhvc3Q6On5T
dHlsZVJ1bGVIb3N0KCkKK3sKK30KKwordm9pZCBTdHlsZVJ1bGVIb3N0OjpzZXRQcm9wZXJ0aWVz
KFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gcHJvcGVydGllcykKK3sgCisgICAgbV9jaGls
ZC0+c2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTsKK30KKwogU3R5bGVSdWxlRm9udEZhY2U6OlN0
eWxlUnVsZUZvbnRGYWNlKCkKICAgICA6IFN0eWxlUnVsZUJhc2UoRm9udEZhY2UsIDApCiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSdWxlLmgKaW5kZXggN2ZjMjBhMzAzZjg1M2FjNzZjOTJlZmIwMTUzZmJmYjM0
N2Y1NzJhMC4uZTIzMmZkODdhOWI4NTQzZDlhNDljMDUwZGY2ZGU5MWI0NDQ5MTBjZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJ1bGUuaApAQCAtNDUsNiArNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgIFBhZ2Us
CiAgICAgICAgIEtleWZyYW1lcywKICAgICAgICAgS2V5ZnJhbWUsIC8vIE5vdCB1c2VkLiBUaGVz
ZSBhcmUgaW50ZXJuYWxseSBub24tcnVsZSBTdHlsZUtleWZyYW1lIG9iamVjdHMuCisgICAgICAg
IEhvc3QsCiAgICAgICAgIFJlZ2lvbiA9IDE2CiAgICAgfTsKICAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9CkBAIC01Nyw2ICs1OCw3IEBA
IHB1YmxpYzoKICAgICBib29sIGlzU3R5bGVSdWxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09
IFN0eWxlOyB9CiAgICAgYm9vbCBpc1JlZ2lvblJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkg
PT0gUmVnaW9uOyB9CiAgICAgYm9vbCBpc0ltcG9ydFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBl
KCkgPT0gSW1wb3J0OyB9CisgICAgYm9vbCBpc0hvc3RSdWxlKCkgY29uc3QgeyByZXR1cm4gdHlw
ZSgpID09IEhvc3Q7IH0KIAogICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gY29weSgpIGNv
bnN0OwogCkBAIC0xNTcsNiArMTU5LDIyIEBAIHByaXZhdGU6CiAgICAgQ1NTU2VsZWN0b3JMaXN0
IG1fc2VsZWN0b3JMaXN0OwogfTsKIAorY2xhc3MgU3R5bGVSdWxlSG9zdCA6IHB1YmxpYyBTdHls
ZVJ1bGVCYXNlIHsKKyBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVSdWxlSG9z
dD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZUhvc3QpOyB9CisKKyAg
ICB+U3R5bGVSdWxlSG9zdCgpOworCisgICAgU3R5bGVSdWxlKiBjaGlsZCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2hpbGQuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFByb3BlcnRpZXMoUGFzc1JlZlB0cjxT
dHlsZVByb3BlcnR5U2V0Pik7CisKKyBwcml2YXRlOgorICAgIFN0eWxlUnVsZUhvc3QoKTsKKyAg
ICBTdHlsZVJ1bGVIb3N0KGNvbnN0IFN0eWxlUnVsZUhvc3QmKTsKKworICAgIFJlZlB0cjxTdHls
ZVJ1bGU+IG1fY2hpbGQ7Cit9OworIAogY2xhc3MgU3R5bGVSdWxlQmxvY2sgOiBwdWJsaWMgU3R5
bGVSdWxlQmFzZSB7CiBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVC
YXNlPiA+JiBjaGlsZFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZFJ1bGVzOyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCmluZGV4IDk3MGM4MjhjYTE0MDFk
Y2IxNjM4NDQ5ZTk2MDI0MzgyN2VlYzE3OTMuLjYyNmU0N2M4NDIwZTdhMDUyNWIwYmVmNWI4YmQx
MzQ3YTk3N2MwOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29u
dGVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3Bw
CkBAIC02NSw2ICs2NSw3IEBAIFN0eWxlU2hlZXRDb250ZW50czo6U3R5bGVTaGVldENvbnRlbnRz
KFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlLCBjb25zdCBTdHJpbmcmCiAgICAgLCBtX2lzTXV0
YWJsZShmYWxzZSkKICAgICAsIG1faXNJbk1lbW9yeUNhY2hlKGZhbHNlKQogICAgICwgbV9wYXJz
ZXJDb250ZXh0KGNvbnRleHQpCisgICAgLCBtX251bWJlck9mSG9zdFJ1bGVzKDApCiB7CiB9CiAK
QEAgLTg1LDYgKzg2LDcgQEAgU3R5bGVTaGVldENvbnRlbnRzOjpTdHlsZVNoZWV0Q29udGVudHMo
Y29uc3QgU3R5bGVTaGVldENvbnRlbnRzJiBvKQogICAgICwgbV9pc011dGFibGUoZmFsc2UpCiAg
ICAgLCBtX2lzSW5NZW1vcnlDYWNoZShmYWxzZSkKICAgICAsIG1fcGFyc2VyQ29udGV4dChvLm1f
cGFyc2VyQ29udGV4dCkKKyAgICAsIG1fbnVtYmVyT2ZIb3N0UnVsZXMoby5tX251bWJlck9mSG9z
dFJ1bGVzKQogewogICAgIEFTU0VSVChvLmlzQ2FjaGVhYmxlKCkpOwogCkBAIC0xMzQsNiArMTM2
LDggQEAgdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnBhcnNlckFwcGVuZFJ1bGUoUGFzc1JlZlB0
cjxTdHlsZVJ1bGVCYXNlPiBydWxlKQogICAgICAgICBtX2ltcG9ydFJ1bGVzLmxhc3QoKS0+cmVx
dWVzdFN0eWxlU2hlZXQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAocnVsZS0+
aXNIb3N0UnVsZSgpKQorICAgICAgICArK21fbnVtYmVyT2ZIb3N0UnVsZXM7CiAgICAgbV9jaGls
ZFJ1bGVzLmFwcGVuZChydWxlKTsKIH0KIApAQCAtMTc3LDYgKzE4MSw3IEBAIHZvaWQgU3R5bGVT
aGVldENvbnRlbnRzOjpjbGVhclJ1bGVzKCkKICAgICBtX2ltcG9ydFJ1bGVzLmNsZWFyKCk7CiAg
ICAgbV9jaGlsZFJ1bGVzLmNsZWFyKCk7CiAgICAgY2xlYXJDaGFyc2V0UnVsZSgpOworICAgIG1f
bnVtYmVyT2ZIb3N0UnVsZXMgPSAwOwogfQogCiB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cGFy
c2VyU2V0RW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUoY29uc3QgU3RyaW5nJiBlbmNvZGluZykKQEAg
LTIxOCw2ICsyMjMsOCBAQCBib29sIFN0eWxlU2hlZXRDb250ZW50czo6d3JhcHBlckluc2VydFJ1
bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBydWxlLCB1bnNpZwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgY2hpbGRWZWN0b3JJbmRleCAtPSBtX2ltcG9ydFJ1bGVzLnNpemUoKTsKICAK
KyAgICBpZiAocnVsZS0+aXNIb3N0UnVsZSgpKQorICAgICAgICArK21fbnVtYmVyT2ZIb3N0UnVs
ZXM7CiAgICAgbV9jaGlsZFJ1bGVzLmluc2VydChjaGlsZFZlY3RvckluZGV4LCBydWxlKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTI0Miw2ICsyNDksOSBAQCB2b2lkIFN0eWxlU2hlZXRDb250
ZW50czo6d3JhcHBlckRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgpCiAgICAgfQogICAgIGNoaWxk
VmVjdG9ySW5kZXggLT0gbV9pbXBvcnRSdWxlcy5zaXplKCk7CiAKKyAgICBpZiAobV9jaGlsZFJ1
bGVzLmF0KGNoaWxkVmVjdG9ySW5kZXgpLT5pc0hvc3RSdWxlKCkpCisgICAgICAgIC0tbV9udW1i
ZXJPZkhvc3RSdWxlczsKKwogICAgIG1fY2hpbGRSdWxlcy5yZW1vdmUoY2hpbGRWZWN0b3JJbmRl
eCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVu
dHMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuaAppbmRleCA3ZGYz
NGI3MDMyMjcyNTk3NmU1YzdmMTVkMDgzODAyNjRjYjdlZjBlLi5hMzFjYmMxZDc1ZmU4ODU1ZGYx
MDA1ODVlYmZjY2VjMzE4NzcxN2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVTaGVldENvbnRlbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250
ZW50cy5oCkBAIC05OSw2ICs5OSw3IEBAIHB1YmxpYzoKICAgICAvLyBSdWxlcyBvdGhlciB0aGFu
IEBjaGFyc2V0IGFuZCBAaW1wb3J0LgogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
QmFzZT4gPiYgY2hpbGRSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRSdWxlczsgfQogICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlSW1wb3J0PiA+JiBpbXBvcnRSdWxlcygpIGNv
bnN0IHsgcmV0dXJuIG1faW1wb3J0UnVsZXM7IH0KKyAgICBib29sIGhhc0hvc3RSdWxlKCkgY29u
c3QgeyByZXR1cm4gbV9udW1iZXJPZkhvc3RSdWxlcyA+IDA7IH0KIAogICAgIHZvaWQgbm90aWZ5
TG9hZGVkU2hlZXQoY29uc3QgQ2FjaGVkQ1NTU3R5bGVTaGVldCopOwogICAgIApAQCAtMTYzLDYg
KzE2NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzSW5NZW1vcnlDYWNoZSA6IDE7CiAgICAg
CiAgICAgQ1NTUGFyc2VyQ29udGV4dCBtX3BhcnNlckNvbnRleHQ7CisgICAgaW50IG1fbnVtYmVy
T2ZIb3N0UnVsZXM7CiAKICAgICBWZWN0b3I8Q1NTU3R5bGVTaGVldCo+IG1fY2xpZW50czsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKaW5kZXggYjljNDgxYzE4OTg2NDgxZTE5YjYyNmY2
OTRjMjA2ZGYxMjIxNDc0ZC4uNGIzNzFkZWNiMDZhYjc4OGZmOTkyYjdkMWRjYjVkMDJlOWM5YmQ1
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcApAQCAtNTUsNiArNTUsNyBAQCBTaGFkb3dS
b290OjpTaGFkb3dSb290KERvY3VtZW50KiBkb2N1bWVudCkKICAgICAsIG1fYXBwbHlBdXRob3JT
dHlsZXMoZmFsc2UpCiAgICAgLCBtX3Jlc2V0U3R5bGVJbmhlcml0YW5jZShmYWxzZSkKICAgICAs
IG1faW5zZXJ0aW9uUG9pbnRBc3NpZ25lZFRvKDApCisgICAgLCBtX251bWJlck9mU2hhZG93RWxl
bWVudENoaWxkcmVuKDApCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50KTsKICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2hhZG93Um9vdC5oCmluZGV4IGQ5YjQyNWM2MDgzYjE3YWY4ODI2ZTYxNjQyNzgxZjU1MjUwNzUy
NTAuLjJlNTE2ZmIxYmI0Y2VmN2I2M2RmMjZiNjQzN2Q0ZmU1N2MwM2I2ZDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L1NoYWRvd1Jvb3QuaApAQCAtODksNiArODksMTAgQEAgcHVibGljOgogICAgIEluc2VydGlvblBv
aW50KiBhc3NpZ25lZFRvKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBc3NpZ25lZFRvKEluc2VydGlv
blBvaW50Kik7CiAKKyAgICB2b2lkIHJlZ2lzdGVyU2hhZG93RWxlbWVudCgpIHsgKyttX251bWJl
ck9mU2hhZG93RWxlbWVudENoaWxkcmVuOyB9CisgICAgdm9pZCB1bnJlZ2lzdGVyU2hhZG93RWxl
bWVudCgpIHsgLS1tX251bWJlck9mU2hhZG93RWxlbWVudENoaWxkcmVuOyB9CisgICAgYm9vbCBo
YXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZTaGFkb3dF
bGVtZW50Q2hpbGRyZW4gPiAwOyB9CisKICNpZm5kZWYgTkRFQlVHCiAgICAgU2hhZG93Um9vdFR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogI2VuZGlmCkBAIC0xMDYsNiArMTEw
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlBdXRob3JTdHlsZXMgOiAxOwogICAgIGJv
b2wgbV9yZXNldFN0eWxlSW5oZXJpdGFuY2UgOiAxOwogICAgIEluc2VydGlvblBvaW50KiBtX2lu
c2VydGlvblBvaW50QXNzaWduZWRUbzsKKyAgICBzaXplX3QgbV9udW1iZXJPZlNoYWRvd0VsZW1l
bnRDaGlsZHJlbjsKIAogI2lmbmRlZiBOREVCVUcKICAgICBTaGFkb3dSb290VHlwZSBtX3R5cGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAppbmRleCAyNjk5MGE1ZGYy
ODRhOTdjNmEyNDFmNWM3MGEyOGViOGQ4NzdlOTE4Li5mZmU1MDM3MTc0OTEzZTQ0Mjg5Y2ZkMmZk
NGJiMjM2N2NjZjZjY2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHls
ZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5j
cHAKQEAgLTk2LDIyICs5NiwyMiBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNjb3BlZEF0dHJp
YnV0ZUNoYW5nZWQoYm9vbCBzY29wZWQpCiAgICAgaWYgKHNjb3BlZCkgewogICAgICAgICAvLyBB
cyBhbnkgPHN0eWxlPiBpbiBhIHNoYWRvdyB0cmVlIGlzIHRyZWF0ZWQgYXMgInNjb3BlZCIsCiAg
ICAgICAgIC8vIG5lZWQgdG8gcmVtb3ZlIHRoZSA8c3R5bGU+IGZyb20gaXRzIHNoYWRvdyByb290
LgotICAgICAgICBpZiAobV9zY29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRlID09IFJlZ2lzdGVy
ZWRJblNoYWRvd1Jvb3QpCisgICAgICAgIGlmIChtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3Rh
dGUgPT0gUmVnaXN0ZXJlZEluU2hhZG93Um9vdCB8fCBtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9u
U3RhdGUgPT0gUmVnaXN0ZXJlZEluU2hhZG93Um9vdFdpdGhIb3N0UnVsZSkKICAgICAgICAgICAg
IHVucmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoc2hhZG93Um9vdCgpKTsKIAotICAgICAgICBpZiAo
bV9zY29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRlICE9IFJlZ2lzdGVyZWRBc1Njb3BlZCkKKyAg
ICAgICAgaWYgKG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSAhPSBSZWdpc3RlcmVkQXNT
Y29wZWQgJiYgbV9zY29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRlICE9IFJlZ2lzdGVyZWRBc1Nj
b3BlZFdpdGhIb3N0UnVsZSkKICAgICAgICAgICAgIHJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKHRy
dWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIDxzdHlsZT4gd2Fz
IHNjb3BlZCwgbmVlZCB0byByZW1vdmUgdGhlIDxzdHlsZT4gZnJvbSB0aGUgc2NvcGluZwogICAg
IC8vIGVsZW1lbnQsIGkuZS4gdGhlIHBhcmVudCBub2RlLgotICAgIGlmIChtX3Njb3BlZFN0eWxl
UmVnaXN0cmF0aW9uU3RhdGUgPT0gUmVnaXN0ZXJlZEFzU2NvcGVkKQorICAgIGlmIChtX3Njb3Bl
ZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgPT0gUmVnaXN0ZXJlZEFzU2NvcGVkIHx8IG1fc2NvcGVk
U3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9PSBSZWdpc3RlcmVkQXNTY29wZWRXaXRoSG9zdFJ1bGUp
CiAgICAgICAgIHVucmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUocGFyZW50Tm9kZSgpKTsKIAogICAg
IC8vIEFzIGFueSA8c3R5bGU+IGluIGEgc2hhZG93IHRyZWUgaXMgdHJlYXRlZCBhcyAic2NvcGVk
IiwKICAgICAvLyBuZWVkIHRvIGFkZCB0aGUgPHN0eWxlPiB0byBpdHMgc2hhZG93IHJvb3QuCi0g
ICAgaWYgKGlzSW5TaGFkb3dUcmVlKCkgJiYgbV9zY29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRl
ICE9IFJlZ2lzdGVyZWRJblNoYWRvd1Jvb3QpCisgICAgaWYgKGlzSW5TaGFkb3dUcmVlKCkgJiYg
bV9zY29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRlICE9IFJlZ2lzdGVyZWRJblNoYWRvd1Jvb3Qg
JiYgbV9zY29wZWRTdHlsZVJlZ2lzdHJhdGlvblN0YXRlICE9IFJlZ2lzdGVyZWRJblNoYWRvd1Jv
b3RXaXRoSG9zdFJ1bGUpCiAgICAgICAgIHJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKGZhbHNlKTsK
IH0KICNlbmRpZgpAQCAtMTQ1LDExICsxNDUsMjMgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50Ojpy
ZWdpc3RlcldpdGhTY29waW5nTm9kZShib29sIHNjb3BlZCkKICAgICB9CiAKICAgICBzY29wZS0+
cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworCisgICAgYm9vbCBpc0hvc3RSdWxlUmVn
aXN0ZXJlZCA9IGZhbHNlOworICAgIGlmIChoYXNIb3N0UnVsZSgpKQorICAgICAgICBpZiAoU2hh
ZG93Um9vdCogc3IgPSBzaGFkb3dSb290KCkpCisgICAgICAgICAgICBpZiAoRWxlbWVudCogaG9z
dCA9IHNyLT5ob3N0KCkpIHsKKyAgICAgICAgICAgICAgICBob3N0LT5yZWdpc3RlclNjb3BlZEhU
TUxTdHlsZUNoaWxkKCk7CisgICAgICAgICAgICAgICAgaXNIb3N0UnVsZVJlZ2lzdGVyZWQgPSB0
cnVlOworICAgICAgICAgICAgfQorCiAgICAgc2NvcGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsK
ICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5wYXJzaW5nKCkgJiYgZG9jdW1l
bnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlckNoYW5n
ZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiAKLSAgICBtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3Rh
dGUgPSBzY29wZWQgPyBSZWdpc3RlcmVkQXNTY29wZWQgOiBSZWdpc3RlcmVkSW5TaGFkb3dSb290
OworICAgIGlmIChzY29wZWQpCisgICAgICAgIG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0
ZSA9IGlzSG9zdFJ1bGVSZWdpc3RlcmVkPyBSZWdpc3RlcmVkQXNTY29wZWRXaXRoSG9zdFJ1bGUg
OiBSZWdpc3RlcmVkQXNTY29wZWQ7CisgICAgZWxzZQorICAgICAgICBtX3Njb3BlZFN0eWxlUmVn
aXN0cmF0aW9uU3RhdGUgPSBpc0hvc3RSdWxlUmVnaXN0ZXJlZD8gUmVnaXN0ZXJlZEluU2hhZG93
Um9vdFdpdGhIb3N0UnVsZSA6IFJlZ2lzdGVyZWRJblNoYWRvd1Jvb3Q7CiB9CiAKIHZvaWQgSFRN
TFN0eWxlRWxlbWVudDo6dW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShDb250YWluZXJOb2RlKiBz
Y29wZSkKQEAgLTE2NCw4ICsxNzYsMTQgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp1bnJlZ2lz
dGVyV2l0aFNjb3BpbmdOb2RlKENvbnRhaW5lck5vZGUqIHNjb3BlKQogCiAgICAgQVNTRVJUKHNj
b3BlKTsKICAgICBpZiAoc2NvcGUpIHsKLSAgICAgICAgQVNTRVJUKHNjb3BlLT5oYXNTY29wZWRI
VE1MU3R5bGVDaGlsZCgpKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlLT5oYXNTY29wZWRTdHlsZSgp
KTsKICAgICAgICAgc2NvcGUtPnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworCisg
ICAgICAgIGlmIChtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgPT0gUmVnaXN0ZXJlZElu
U2hhZG93Um9vdFdpdGhIb3N0UnVsZSB8fCBtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUg
PT0gUmVnaXN0ZXJlZEFzU2NvcGVkV2l0aEhvc3RSdWxlKQorICAgICAgICAgICAgaWYgKFNoYWRv
d1Jvb3QqIHNyID0gc2hhZG93Um9vdCgpKQorICAgICAgICAgICAgICAgIGlmIChFbGVtZW50KiBo
b3N0ID0gc3ItPmhvc3QoKSkKKyAgICAgICAgICAgICAgICAgICAgaG9zdC0+dW5yZWdpc3RlclNj
b3BlZEhUTUxTdHlsZUNoaWxkKCk7CisKICAgICAgICAgc2NvcGUtPnNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKICAgICB9CiAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQoKS0+cGFyc2lu
ZygpICYmIGRvY3VtZW50KCktPnJlbmRlcmVyKCkpCkBAIC0xNzMsNiArMTkxLDEzIEBAIHZvaWQg
SFRNTFN0eWxlRWxlbWVudDo6dW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShDb250YWluZXJOb2Rl
KiBzY29wZSkKIAogICAgIG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9IE5vdFJlZ2lz
dGVyZWQ7CiB9CisKK2Jvb2wgSFRNTFN0eWxlRWxlbWVudDo6aGFzSG9zdFJ1bGUoKSBjb25zdAor
eworICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gY29uc3RfY2FzdDxIVE1MU3R5
bGVFbGVtZW50Kj4odGhpcyktPnNoZWV0KCkpCisgICAgICAgIHJldHVybiBzdHlsZVNoZWV0LT5j
b250ZW50cygpLT5oYXNIb3N0UnVsZSgpOworICAgIHJldHVybiBmYWxzZTsKK30KICNlbmRpZgog
CiBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxTdHlsZUVsZW1lbnQ6Omlu
c2VydGVkSW50byhDb250YWluZXJOb2RlKiBpbnNlcnRpb25Qb2ludCkKQEAgLTIwMCw3ICsyMjUs
NyBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIGlu
c2VydGlvblBvaW50KQogICAgIC8vIHdlJ2QgbmVlZCB0byBmaW5kIGEgd2F5IHRvIGRpc2Nlcm4g
d2hldGhlciB0aGF0IGlzIHRoZSBjYXNlLCBvciB3aGV0aGVyIDxzdHlsZSBzY29wZWQ+IGl0c2Vs
ZiBpcyBhYm91dCB0byBiZSByZW1vdmVkLgogICAgIGlmIChtX3Njb3BlZFN0eWxlUmVnaXN0cmF0
aW9uU3RhdGUgIT0gTm90UmVnaXN0ZXJlZCkgewogICAgICAgICBDb250YWluZXJOb2RlKiBzY29w
ZTsKLSAgICAgICAgaWYgKG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZSA9PSBSZWdpc3Rl
cmVkSW5TaGFkb3dSb290KSB7CisgICAgICAgIGlmIChtX3Njb3BlZFN0eWxlUmVnaXN0cmF0aW9u
U3RhdGUgPT0gUmVnaXN0ZXJlZEluU2hhZG93Um9vdCB8fCBtX3Njb3BlZFN0eWxlUmVnaXN0cmF0
aW9uU3RhdGUgPT0gUmVnaXN0ZXJlZEluU2hhZG93Um9vdFdpdGhIb3N0UnVsZSkgewogICAgICAg
ICAgICAgc2NvcGUgPSBzaGFkb3dSb290KCk7CiAgICAgICAgICAgICBpZiAoIXNjb3BlKQogICAg
ICAgICAgICAgICAgIHNjb3BlID0gaW5zZXJ0aW9uUG9pbnQtPnNoYWRvd1Jvb3QoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmgKaW5kZXggNjNhODJjNGVlZmZkZTU3MTdiZDdm
ODdjNTgzYzM5ZjRkNWM1NmRkMi4uMDFjM2QzMGFiMGE4OGNhM2Q0OTVkNTNhYzgyNjRhNDg5NzI1
MDYxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmgKQEAgLTgwLDYgKzgw
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjb3BlZEF0dHJpYnV0ZUNoYW5nZWQoYm9vbCk7CiAg
ICAgdm9pZCByZWdpc3RlcldpdGhTY29waW5nTm9kZShib29sKTsKICAgICB2b2lkIHVucmVnaXN0
ZXJXaXRoU2NvcGluZ05vZGUoQ29udGFpbmVyTm9kZSopOworICAgIGJvb2wgaGFzSG9zdFJ1bGUo
KSBjb25zdDsKICNlbmRpZgogCiAgICAgYm9vbCBtX2ZpcmVkTG9hZDsKQEAgLTg5LDcgKzkwLDkg
QEAgcHJpdmF0ZToKICAgICBlbnVtIFNjb3BlZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgewogICAg
ICAgICBOb3RSZWdpc3RlcmVkLAogICAgICAgICBSZWdpc3RlcmVkQXNTY29wZWQsCi0gICAgICAg
IFJlZ2lzdGVyZWRJblNoYWRvd1Jvb3QKKyAgICAgICAgUmVnaXN0ZXJlZEFzU2NvcGVkV2l0aEhv
c3RSdWxlLAorICAgICAgICBSZWdpc3RlcmVkSW5TaGFkb3dSb290LAorICAgICAgICBSZWdpc3Rl
cmVkSW5TaGFkb3dSb290V2l0aEhvc3RSdWxlCiAgICAgfTsKICAgICBTY29wZWRTdHlsZVJlZ2lz
dHJhdGlvblN0YXRlIG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0ZTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4
IDkzODQzOTYxMmNhMjFkMjY5ZTU3NzhhOTZiMTU5ODBlZjc1NDJiOWEuLjVjNWRiZTk0ZmZlNDQ2
ZTZmZTBiNjNmNmQwZTdlYjYzZTY0OTNlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgRG9j
dW1lbnQ7CiAKIGlubGluZSBIVE1MU2hhZG93RWxlbWVudDo6SFRNTFNoYWRvd0VsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogSW5z
ZXJ0aW9uUG9pbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBtX3JlZ2lzdGVyZWRXaXRoU2hh
ZG93Um9vdChmYWxzZSkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShIVE1MTmFtZXM6OnNoYWRv
d1RhZykpOwogfQpAQCAtNjgsNCArNjksMzEgQEAgYm9vbCBIVE1MU2hhZG93RWxlbWVudDo6ZG9l
c1NlbGVjdEZyb21Ib3N0Q2hpbGRyZW4oKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
Tm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MU2hhZG93RWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQoreworICAgIEluc2VydGlv
blBvaW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOworCisgICAgaWYgKGluc2VydGlv
blBvaW50LT5pbkRvY3VtZW50KCkgJiYgaXNBY3RpdmUoKSkgeworICAgICAgICBpZiAoU2hhZG93
Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgcm9vdC0+cmVnaXN0ZXJT
aGFkb3dFbGVtZW50KCk7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRXaXRoU2hhZG93Um9vdCA9
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKK30K
Kwordm9pZCBIVE1MU2hhZG93RWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSogaW5z
ZXJ0aW9uUG9pbnQpCit7CisgICAgaWYgKGluc2VydGlvblBvaW50LT5pbkRvY3VtZW50KCkgJiYg
bV9yZWdpc3RlcmVkV2l0aFNoYWRvd1Jvb3QpIHsKKyAgICAgICAgU2hhZG93Um9vdCogcm9vdCA9
IHNoYWRvd1Jvb3QoKTsKKyAgICAgICAgaWYgKCFyb290KQorICAgICAgICAgICAgcm9vdCA9IGlu
c2VydGlvblBvaW50LT5zaGFkb3dSb290KCk7CisgICAgICAgIGlmIChyb290KQorICAgICAgICAg
ICAgcm9vdC0+dW5yZWdpc3RlclNoYWRvd0VsZW1lbnQoKTsKKyAgICAgICAgbV9yZWdpc3RlcmVk
V2l0aFNoYWRvd1Jvb3QgPSBmYWxzZTsKKyAgICB9CisgICAgSW5zZXJ0aW9uUG9pbnQ6OnJlbW92
ZWRGcm9tKGluc2VydGlvblBvaW50KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmgKaW5kZXggYTRl
Y2RiM2FkNDVmYjhlYzRlOWFhNTAwMGEwMWUzYWVkMWNkMjBkYy4uMTE5ZmE5Zjk1ZGVmNjI3NDE2
MmNiMTg4OTQ5ZmQ0NzFhYWRiZmI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9IVE1MU2hhZG93RWxlbWVudC5oCkBAIC00Niw4ICs0NiwxNCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc1NlbGVjdFZhbGlkKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGJv
b2wgZG9lc1NlbGVjdEZyb21Ib3N0Q2hpbGRyZW4oKSBjb25zdDsKIAorcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFp
bmVyTm9kZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbShDb250YWlu
ZXJOb2RlKikgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgSFRNTFNoYWRvd0VsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICBib29sIG1fcmVnaXN0ZXJlZFdp
dGhTaGFkb3dSb290OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdlNGQz
ODAxYmUwNmRjMTQyNTI1ZDJmYWYyYzhmZjI5MDJkY2NmZWIuLmI0MTRjMTAyMjkxODJjY2Q4ZDlk
YjEzNWE5ZGNhNjQ5YzkwYWNjMzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wNy0zMCAg
VGFrYXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBE
T01dIE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3BzZXVk
by1ob3N0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3Bz
ZXVkby1ob3N0Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTA3LTMwICBQZXRlciBLYXN0aW5nICA8cGth
c3RpbmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbQ2hyb21pdW1dIEJhc2VsaW5lIGFuZCBleHBl
Y3RhdGlvbiBmb2xsb3d1cHMgYWZ0ZXIgcjEyNDE0Mi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8taG9zdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zaGFkb3cvcHNldWRvLWhvc3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3NWM2
YTc5ZjRmZGJmNWI1MWZjOWQ2ODcwOGIxY2RlNDJjODFkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLWhvc3QtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMTMgQEAKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0OiByZ2IoMjU1LCAwLCAwKQor
aG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigxMjgsIDEyOCwgMTI4KQoraG9zdDogcmdi
KDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMTI4LCAxMjgsIDEy
OCkKK2hvc3Q6IHJnYigyNTUsIDI1NSwgMCkKK2hvc3Q6IHJnYigyNTUsIDAsIDApCituZXN0ZWRI
b3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDI1NSwgMCwgMCkKK2hvc3Q6IHJnYigyNTUs
IDI1NSwgMCkKK0hlbGxvCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cv
cHNldWRvLWhvc3QuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8taG9z
dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjdhMjI5OTFkZGI5YTFlNmFhMzM0YmE4NTNlMzBkMDA0MWE0ZDEy
ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRv
LWhvc3QuaHRtbApAQCAtMCwwICsxLDE2OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPHN0eWxlPgorI2hvc3QgeworICBjb2xvcjogZ3JheTsKK30KKzwvc3R5bGU+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvcG9seWZpbGwuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1
bmN0aW9uIGR1bXBDb21wdXRlZFN0eWxlKG5vZGUpCit7CisgICAgZGVidWcobm9kZS5pZCArICI6
ICIgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdl
dFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOworfQorCitmdW5jdGlvbiBwcmVwcm9jZXNzRm9yVGVz
dCgpCit7CisgICAgdmFyIHBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXJlbnQi
KTsKKyAgICBwYXJlbnQuaW5uZXJIVE1MID0gJzxkaXYgaWQ9Imhvc3QiPjxzcGFuPkhlbGxvPC9z
cGFuPjwvZGl2Pic7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVDb250ZW50Q2FzZSgpCit7Cisg
ICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJob3N0Iik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhv
c3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IHJlZDsg
fTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9z
dCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVTaGFkb3dDYXNlKCkKK3sKKyAgICBwcmVwcm9j
ZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhv
c3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAg
c2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48
c2hhZG93Pjwvc2hhZG93PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3RQc2V1ZG9Ib3N0V2l0aFNjb3BlZCgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRl
c3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7Cisg
ICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5p
bm5lckhUTUwgPSAiPGRpdj48c3R5bGUgc2NvcGVkPkBob3N0IHsgY29sb3I6IHJlZDsgfTwvc3R5
bGU+PHNoYWRvdz48L3NoYWRvdz48ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBjb2xvcjogYmx1
ZTsgfTwvc3R5bGU+PC9kaXY+PC9kaXY+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsK
K30KKworZnVuY3Rpb24gdGVzdFBzZXVkb0hvc3RXaXRoRmFsbGJhY2tTaGFkb3coKQoreworICAg
IHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9v
dChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdCho
b3N0KTsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9y
OiByZWQ7IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIHlvdW5nZXN0U2hhZG93
LmlubmVySFRNTCA9ICI8Y29udGVudD48c2hhZG93Pjwvc2hhZG93PjwvY29udGVudD4iOworICAg
IGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0VHdvU2hhZG93Um9v
dHNDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3
IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdl
YktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5
bGU+QGhvc3QgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAg
ICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IGJsdWU7
IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0
KTsKK30KKworZnVuY3Rpb24gdGVzdFR3b1NoYWRvd1Jvb3RzQ3JlYXRpbmdEaWZmZXJlbnRPcmRl
ckNhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcg
V2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2Vi
S2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0
eWxlPkBob3N0IHsgY29sb3I6IGJsdWU7IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAg
ICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08
L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3Qp
OworfQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvd0Nv
bnRlbnQoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcg
V2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgb2xkZXJTaGFkb3cgPSBuZXcgV2ViS2l0
U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFk
b3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dS
b290KGhvc3QpOworCisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzaGFkb3c+PC9z
aGFkb3c+IjsKKyAgICB5b3VuZ2VyU2hhZG93LmlubmVySFRNTCA9ICI8Y29udGVudD48L2NvbnRl
bnQ+IjsKKyAgICBvbGRlclNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6
IGdyZWVuOyB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93Lmlu
bmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48Y29udGVudD48
L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24g
dGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3coKQoreworICAgIHByZXByb2Nl
c3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9z
dCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsK
KyAgICB2YXIgb2xkZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2
YXIgeW91bmdlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5
b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworCisgICAgeW91bmdl
c3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiB5ZWxsb3c7IH08L3N0
eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICB5b3VuZ2VyU2hhZG93LmlubmVySFRNTCA9ICI8
c3R5bGU+QGhvc3QgeyBjb2xvcjogYmx1ZTsgfTwvc3R5bGU+PGRpdj5pbmVydDwvZGl2PiI7Cisg
ICAgb2xkZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiBncmVlbjsg
fTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwg
PSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50
PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3ROZXN0
ZWRDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb3V0ZXJTaGFkb3cgPSBuZXcg
V2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBvdXRlclNoYWRvdy5pbm5lckhUTUwgPSAnPHN0
eWxlPkBob3N0IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGRpdiBpZD0ibmVzdGVkSG9zdCI+SW5u
ZXJTaGFkb3c8L2Rpdj4nOworICAgIHZhciBuZXN0ZWQgPSBvdXRlclNoYWRvdy5nZXRFbGVtZW50
QnlJZCgibmVzdGVkSG9zdCIpOworICAgIHZhciBpbm5lclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFk
b3dSb290KG5lc3RlZCk7CisgICAgaW5uZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9z
dCB7IGNvbG9yOiBibHVlOyB9PC9zdHlsZT5TaG93IDxzaGFkb3c+PC9zaGFkb3c+IGluIG91dGVy
Lic7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUo
bmVzdGVkKTsKK30KKworZnVuY3Rpb24gdGVzdEhvc3RWc1Njb3BlZFN0eWxlKCkKK3sKKyAgICBw
cmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImhvc3QiKTsKKyAgICBob3N0LmlubmVySFRNTCA9ICI8c3R5bGUgc2NvcGVkPiNob3N0IHsg
Y29sb3I6IHllbGxvdzsgfTwvc3R5bGU+PHNwYW4+SGVsbG88L3NwYW4+IjsKKyAgICB2YXIgc2hh
ZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9
ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+
IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdEhvc3RW
c0lubGluZVN0eWxlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICBob3N0LnN0eWxlLmNvbG9y
ID0gInllbGxvdyI7CisgICAgaG9zdC5pbm5lckhUTUwgPSAiPHNwYW4+SGVsbG88L3NwYW4+IjsK
KyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93
LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48Y29udGVu
dD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rp
b24gcnVuVGVzdHMoKQoreworICAgIHRlc3RTaW1wbGVDb250ZW50Q2FzZSgpOworICAgIHRlc3RT
aW1wbGVTaGFkb3dDYXNlKCk7CisgICAgdGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVkKCk7CisgICAg
dGVzdFBzZXVkb0hvc3RXaXRoRmFsbGJhY2tTaGFkb3coKTsKKyAgICB0ZXN0VHdvU2hhZG93Um9v
dHNDYXNlKCk7CisgICAgdGVzdFR3b1NoYWRvd1Jvb3RzQ3JlYXRpbmdEaWZmZXJlbnRPcmRlckNh
c2UoKTsKKyAgICB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvd0NvbnRlbnQo
KTsKKyAgICB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvdygpOworICAgIHRl
c3ROZXN0ZWRDYXNlKCk7CisgICAgdGVzdEhvc3RWc1Njb3BlZFN0eWxlKCk7CisgICAgdGVzdEhv
c3RWc0lubGluZVN0eWxlKCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0i
cnVuVGVzdHMoKSI+CisgIDxkaXYgaWQ9InBhcmVudCI+CisgIDwvZGl2PgorPC9ib2R5PgorPC9o
dG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155752</attachid>
            <date>2012-08-01 01:41:50 -0700</date>
            <delta_ts>2012-08-01 01:52:50 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-88606-20120801174132.patch</filename>
            <type>text/plain</type>
            <size>30184</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhbW1hci55IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQppbmRleCA5
OTY4ZTc2NjAwN2VlZjE3YWExNjk2ZmIwMmU0ZmY3NGQzNDJmMTAyLi5lNzIyMjQ5NDYwNjQ5NzYx
YmJjODI4MmUyNGQ0NzE1ZmY0MTQxZDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTR3JhbW1hci55CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKQEAgLTEz
Miw2ICsxMzIsNyBAQCBzdGF0aWMgaW50IGNzc3l5bGV4KFlZU1RZUEUqIHl5bHZhbCwgQ1NTUGFy
c2VyKiBwYXJzZXIpCiAldG9rZW4gUEFHRV9TWU0KICV0b2tlbiBNRURJQV9TWU0KICV0b2tlbiBG
T05UX0ZBQ0VfU1lNCisldG9rZW4gSE9TVF9TWU0KICV0b2tlbiBDSEFSU0VUX1NZTQogJXRva2Vu
IE5BTUVTUEFDRV9TWU0KICV0b2tlbiBWQVJGVU5DVElPTgpAQCAtMjE5LDYgKzIyMCw3IEBAIHN0
YXRpYyBpbnQgY3NzeXlsZXgoWVlTVFlQRSogeXlsdmFsLCBDU1NQYXJzZXIqIHBhcnNlcikKICV0
eXBlIDxydWxlPiBwYWdlCiAldHlwZSA8cnVsZT4gbWFyZ2luX2JveAogJXR5cGUgPHJ1bGU+IGZv
bnRfZmFjZQorJXR5cGUgPHJ1bGU+IGhvc3QKICV0eXBlIDxydWxlPiBrZXlmcmFtZXMKICV0eXBl
IDxydWxlPiBpbnZhbGlkX3J1bGUKICV0eXBlIDxydWxlPiBzYXZlX2Jsb2NrCkBAIC00MTksNiAr
NDIxLDcgQEAgdmFsaWRfcnVsZToKICAgfCBuYW1lc3BhY2UKICAgfCBpbXBvcnQKICAgfCByZWdp
b24KKyAgfCBob3N0CiAgIDsKIAogcnVsZToKQEAgLTg0MSw2ICs4NDQsMTYgQEAgZm9udF9mYWNl
OgogICAgIH0KIDsKIAoraG9zdDoKKyAgICBIT1NUX1NZTSBtYXliZV9zcGFjZSAneycgbWF5YmVf
c3BhY2UgZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5nX2JyYWNlIHsKKyAgICAgICAgaWYgKCQ1KSB7
CisgICAgICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0
ZUhvc3RSdWxlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9IDA7CisgICAg
ICAgIH0KKyAgICB9Cis7CisgCiByZWdpb25fc2VsZWN0b3I6CiAgICAgc2VsZWN0b3JfbGlzdCB7
CiAgICAgICAgIGlmICgkMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCAxMTkxYjg2
MjBjMDA2Mzg0ZDI4YjdlMTc0MGVjOGM1YWM2NTU4ODJkLi5mZTYwMDVmYjMzZTM5MDc4YzYwYTg0
YjVhNmM2M2MyNGVhODljNDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtODc1MCw2
ICs4NzUwLDExIEBAIGlubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihpbnQgbGVu
Z3RoLCBib29sIGhhc0VzY2FwZSkKICAgICAgICAgICAgIG1fdG9rZW4gPSBGT05UX0ZBQ0VfU1lN
OwogICAgICAgICByZXR1cm47CiAKKyAgICBjYXNlICdoJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9
PSA1ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvc3QiKSkKKyAgICAgICAg
ICAgIG1fdG9rZW4gPSBIT1NUX1NZTTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSAnaSc6
CiAgICAgICAgIGlmIChsZW5ndGggPT0gNyAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUg
KyAyLCAibXBvcnQiKSkgewogICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlN
b2RlOwpAQCAtOTU4MCw2ICs5NTg1LDE3IEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3Jl
YXRlRm9udEZhY2VSdWxlKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitTdHlsZVJ1bGVCYXNl
KiBDU1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKCkKK3sKKyAgICBtX2FsbG93SW1wb3J0UnVsZXMg
PSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CisgICAgUmVmUHRyPFN0eWxl
UnVsZUhvc3Q+IHJ1bGUgPSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoKTsKKyAgICBydWxlLT5zZXRQ
cm9wZXJ0aWVzKGNyZWF0ZVN0eWxlUHJvcGVydHlTZXQoKSk7CisgICAgY2xlYXJQcm9wZXJ0aWVz
KCk7CisgICAgU3R5bGVSdWxlSG9zdCogcmVzdWx0ID0gcnVsZS5nZXQoKTsKKyAgICBtX3BhcnNl
ZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
dm9pZCBDU1NQYXJzZXI6OmFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwg
Y29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCiB7CiAgICAgaWYgKCFtX3N0eWxlU2hlZXQgfHwgIW1f
YWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggNmFj
YmJhMjUyOTMwNTVhMTYzMzkyZjE4ZDY3N2UxYThhNTZhODRiMy4uNWQyMzBkZTlkMzJjMjY5ZWMw
OWI1NWI2ODQxMjQyZDRlNDNlNTk3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMjY1LDYg
KzI2NSw3IEBAIHB1YmxpYzoKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVQYWdlUnVsZShQYXNz
T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2VsZWN0b3IpOwogICAgIFN0eWxlUnVsZUJh
c2UqIGNyZWF0ZVJlZ2lvblJ1bGUoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiog
cmVnaW9uU2VsZWN0b3IsIFJ1bGVMaXN0KiBydWxlcyk7CiAgICAgU3R5bGVSdWxlQmFzZSogY3Jl
YXRlTWFyZ2luQXRSdWxlKENTU1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlKTsKKyAgICBTdHlsZVJ1
bGVCYXNlKiBjcmVhdGVIb3N0UnVsZSgpOwogICAgIHZvaWQgc3RhcnREZWNsYXJhdGlvbnNGb3JN
YXJnaW5Cb3goKTsKICAgICB2b2lkIGVuZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggODk1YmM4ZTE0NTIyNjM0ZmVkMjMw
NzFlOWE3NDRkZDE4YTZkMzZjNy4uMDUzYTcwNjEzNDEzNzE2MWY5NTA0MzQyNzVlMjQyODFmOTcz
Y2QyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNjAsNiArNjAsNyBA
QAogI2luY2x1ZGUgIkNvdW50ZXIuaCIKICNpbmNsdWRlICJDb3VudGVyQ29udGVudC5oIgogI2lu
Y2x1ZGUgIkN1cnNvckxpc3QuaCIKKyNpbmNsdWRlICJFbGVtZW50U2hhZG93LmgiCiAjaW5jbHVk
ZSAiRm9udEZlYXR1cmVWYWx1ZS5oIgogI2luY2x1ZGUgIkZvbnRWYWx1ZS5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCkBAIC0yMzYsNyArMjM3LDcgQEAgcHJpdmF0ZToKICAgICAvLyBVc2UgcGxhaW4g
YXJyYXkgaW5zdGVhZCBvZiBhIFZlY3RvciB0byBtaW5pbWl6ZSBtZW1vcnkgb3ZlcmhlYWQuCiAg
ICAgdW5zaWduZWQgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzW21heGltdW1J
ZGVudGlmaWVyQ291bnRdOwogfTsKLSAgICAKKwogc3RydWN0IFNhbWVTaXplQXNSdWxlRGF0YSB7
CiAgICAgdm9pZCogYTsKICAgICB2b2lkKiBiOwpAQCAtNTMyLDcgKzUzMyw3IEBAIGlubGluZSBS
dWxlU2V0KiBTdHlsZVJlc29sdmVyOjpydWxlU2V0Rm9yU2NvcGUoY29uc3QgQ29udGFpbmVyTm9k
ZSogc2NvcGUpIGNvbnN0CiAgICAgaWYgKCFzY29wZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKLSAgICByZXR1cm4gaXQg
IT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsgCisg
ICAgcmV0dXJuIGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpID8gaXQtPnNlY29uZC5n
ZXQoKSA6IDA7CiB9CiAjZW5kaWYKIApAQCAtNTY2LDEyICs1NjcsMzQgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3Qg
VmVjdG9yPFJlZlAKICAgICB9CiAgICAgbV9hdXRob3JTdHlsZS0+c2hyaW5rVG9GaXQoKTsKICAg
ICBjb2xsZWN0RmVhdHVyZXMoKTsKLSAgICAKKwogICAgIGlmIChkb2N1bWVudCgpLT5yZW5kZXJl
cigpICYmIGRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCkpCiAgICAgICAgIGRvY3VtZW50
KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwog
fQogCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkSG9z
dFJ1bGUoU3R5bGVSdWxlSG9zdCogaG9zdFJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAgc3RhdGljIENTU1NlbGVj
dG9yKiBzZWxlY3RvciA9IG5ldyBDU1NTZWxlY3RvcjsKKworICAgIGlmICghc2NvcGUgfHwgIXNj
b3BlLT5pc0luU2hhZG93VHJlZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFkb3dSb290
KiBzaGFkb3dSb290ID0gc2NvcGUtPnNoYWRvd1Jvb3QoKTsKKyAgICBpZiAoIXNoYWRvd1Jvb3Qp
CisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBDb250YWluZXJOb2RlKiBzaGFkb3dIb3N0ID0g
c2hhZG93Um9vdC0+aG9zdCgpOworICAgIGlmICghc2hhZG93SG9zdCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQXRIb3N0UnVsZURhdGFNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2F0SG9z
dFJ1bGVzLmFkZChzaGFkb3dSb290LCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3
RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gYWRvcHRQdHIobmV3
IFZlY3RvcjxSdWxlRGF0YT4pOworCisgICAgUnVsZURhdGEgcnVsZURhdGEoaG9zdFJ1bGUtPmNo
aWxkKCksIHNlbGVjdG9yLCAwLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCB0cnVlLCBmYWxz
ZSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFwcGVuZChydWxlRGF0YSk7Cit9
CisKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0dXBTY29wZVN0YWNrKGNvbnN0IENvbnRhaW5lck5v
ZGUqIHBhcmVudCkKIHsKICAgICAvLyBUaGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIHNob3VsZG4n
dCBiZSB1c2VkIGlmIDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQgYW55d2hlcmUuCkBAIC05MTgs
MTMgKzk0MSw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JS
ZWdpb24oUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlCiAgICAgfQogfQogCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVz
dWx0KQordm9pZCBTdHlsZVJlc29sdmVyOjp0cmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3Vs
dCYgcmVzdWx0KQogewotICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKLQogICAgIGlmIChtX2NoZWNrZXIu
bW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CiAgICAgICAgIGlm
ICghbV9ydWxlTGlzdCkKICAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxlTGlz
dDo6Y3JlYXRlKCk7CkBAIC05NDYsNiArOTY0LDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6c29y
dEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiAgICAgfQogfQog
Cit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJl
c3VsdCYgcmVzdWx0KQoreworICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAgICB0cmFuc2Zlck1hdGNo
ZWRSdWxlcyhyZXN1bHQpOworfQorCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0
aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsK
ICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQpAQCAtOTkzLDYgKzEwMjAsNjEgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJv
b2wgaW5jbHVkZUVtcHQKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKK2lu
bGluZSBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBTdHlsZVJlc29sdmVyOjphdEhvc3RSdWxlRm9y
U2NvcGUoY29uc3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKK3sKKyAgICBBdEhvc3RSdWxlRGF0
YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0SG9zdFJ1bGVzLmZpbmQoc2hhZG93Um9vdCk7
CisgICAgcmV0dXJuIGl0ICE9IG1fYXRIb3N0UnVsZXMuZW5kKCkgPyBpdC0+c2Vjb25kLmdldCgp
IDogMDsgCit9CisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6bWF0Y2hlc0hvc3RSdWxlcygpCit7Cisg
ICAgaWYgKG1fYXRIb3N0UnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBtX2VsZW1lbnQtPnNoYWRvdygpOworICAgIGlm
ICghc2hhZG93KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChTaGFkb3dSb290KiBz
aGFkb3dSb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hhZG93Um9vdDsgc2hh
ZG93Um9vdCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7CisgICAgICAgIGlmIChh
dEhvc3RSdWxlRm9yU2NvcGUoc2hhZG93Um9vdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCit2
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICBp
ZiAobV9hdEhvc3RSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEVsZW1l
bnRTaGFkb3cqIHNoYWRvdyA9IG1fZWxlbWVudC0+c2hhZG93KCk7CisgICAgaWYgKCFzaGFkb3cp
CisgICAgICAgIHJldHVybjsKKworICAgIFZlY3Rvcjxjb25zdCBWZWN0b3I8UnVsZURhdGE+Kiwg
MTY+IG1hdGNoZWRSdWxlczsgCisgICAgZm9yIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2hh
ZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hhZG93Um9vdDsgc2hhZG93Um9vdCA9IHNoYWRv
d1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7IAorICAgICAgICBpZiAoY29uc3QgVmVjdG9yPFJ1
bGVEYXRhPiogcnVsZSA9IGF0SG9zdFJ1bGVGb3JTY29wZShzaGFkb3dSb290KSkKKyAgICAgICAg
ICAgIG1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7CisgICAgICAgIGlmICghc2hhZG93Um9vdC0+
aGFzU2hhZG93SW5zZXJ0aW9uUG9pbnQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTWF0
Y2hPcHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIG9wdGlvbnMuc2NvcGUg
PSBtX2VsZW1lbnQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0Y2hlZFJ1bGVzLnNpemUoKTsg
aSA+IDA7IC0taSkKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoZWRS
dWxlcy5hdChpLTEpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdl
cy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXN1
bHQpOworICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlRW1wdHlSdWxlcyk7CisjZW5kaWYKK30KKwog
dm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQs
IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsK
QEAgLTEwMDcsOCArMTA4OSwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcwogICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5n
ZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25z
KTsKIAogICAgIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxl
cyk7CisgICAgaWYgKCFtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHNvcnRNYXRj
aGVkUnVsZXMoKTsKIAotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwor
ICAgIG1hdGNoSG9zdFJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIGlmICgh
bV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICB0cmFuc2Zlck1hdGNoZWRSdWxlcyhy
ZXN1bHQpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVz
dWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCkBAIC0xNTY4LDYgKzE2NTQsMTEg
QEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAv
LyBDYW4ndCBzaGFyZSBpZiBhdHRyaWJ1dGUgcnVsZXMgYXBwbHkuCiAgICAgaWYgKG1hdGNoZXNS
dWxlU2V0KG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0LmdldCgpKSkKICAgICAgICAgcmV0dXJu
IDA7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAvLyBDYW4ndCBzaGFyZSBpZiBAaG9z
dCBALXJ1bGVzIGFwcGx5LgorICAgIGlmIChtYXRjaGVzSG9zdFJ1bGVzKCkpCisgICAgICAgIHJl
dHVybiAwOworI2VuZGlmCiAgICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5p
cXVlIHN0eWxlIGZvciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcg
cnVsZSBtYXRjaCBhYm92ZS4KICAgICBpZiAocGFyZW50U3R5bGVQcmV2ZW50c1NoYXJpbmcobV9w
YXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjczOSw2ICsyODMwLDEwIEBAIHZv
aWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwg
Y29uc3QgTWVkaWFRdWVyeUV2YWx1CiAgICAgICAgICAgICBhZGRSZWdpb25SdWxlKHN0YXRpY19j
YXN0PFN0eWxlUnVsZVJlZ2lvbio+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsK
ICAgICAgICAgfQogI2VuZGlmCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAgICAgZWxz
ZSBpZiAocnVsZS0+aXNIb3N0UnVsZSgpKQorICAgICAgICAgICAgcmVzb2x2ZXItPmFkZEhvc3RS
dWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUhvc3QqPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiwgc2NvcGUpOworI2VuZGlmCiAgICAgfQogICAgIGlmIChtX2F1dG9TaHJpbmtUb0Zp
dEVuYWJsZWQpCiAgICAgICAgIHNocmlua1RvRml0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuaAppbmRleCBlMmFlYjJjMDAxZTc3MjVkZTNmOWNkYTk1ZmM4YTIxMDVmMTlmYmYzLi4yOWU0
OTBjNWNhNDQzZjcyMjY3Y2FhOWQxZjQyZTU3NTcxYTlmZWJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmgKQEAgLTcxLDYgKzcxLDcgQEAgY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xhc3Mg
UnVsZURhdGE7CiBjbGFzcyBSdWxlU2V0OwogY2xhc3MgU2V0dGluZ3M7CitjbGFzcyBTaGFkb3dS
b290OwogY2xhc3MgU3RhdGljQ1NTUnVsZUxpc3Q7CiBjbGFzcyBTdHlsZUJ1aWxkZXI7CiBjbGFz
cyBTdHlsZUltYWdlOwpAQCAtODEsNiArODIsNyBAQCBjbGFzcyBTdHlsZVJ1bGU7CiBjbGFzcyBT
dHlsZVJ1bGVLZXlmcmFtZXM7CiBjbGFzcyBTdHlsZVJ1bGVQYWdlOwogY2xhc3MgU3R5bGVSdWxl
UmVnaW9uOworY2xhc3MgU3R5bGVSdWxlSG9zdDsKIGNsYXNzIFN0eWxlU2hhZGVyOwogY2xhc3Mg
U3R5bGVTaGVldDsKIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKQEAgLTEzNCw2ICsxMzYsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBwb3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lk
IHB1c2hQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKICAgICB2b2lkIHBvcFBh
cmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCopOworICAgIHZvaWQgYWRkSG9zdFJ1bGUo
U3R5bGVSdWxlSG9zdCosIGJvb2wsIGNvbnN0IENvbnRhaW5lck5vZGUqKTsKIAogICAgIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlID0gMCwgU3R5bGVTaGFyaW5nQmVoYXZpb3IgPSBBbGxvd1N0eWxlU2hhcmlu
ZywKICAgICAgICAgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBSZW5kZXJS
ZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKQEAgLTM1NSwxMSArMzU4LDE0IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRj
aFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hIb3N0UnVs
ZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RS
dWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwogICAgIHZvaWQgY29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JSZWdpb24oUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1
bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CisgICAgdm9pZCBjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0Zvckhvc3QoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgYm9vbCBmYXN0UmVq
ZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKICAgICB2b2lkIHNvcnRNYXRjaGVk
UnVsZXMoKTsKKyAgICB2b2lkIHRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0Jik7CiAg
ICAgdm9pZCBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKIAogICAg
IGJvb2wgY2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlID0gMCk7CkBAIC01MzcsNiArNTQzLDExIEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBp
cyB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIG1fc2NvcGluZ0VsZW1lbnRTdGFjayBpcyBjb25zaXN0
ZW50LCBzZXBhcmF0ZWx5IGZyb20gU2VsZWN0b3JDaGVja2VyOjptX3BhcmVudFN0YWNrLgogICAg
IGNvbnN0IENvbnRhaW5lck5vZGUqIG1fc2NvcGVTdGFja1BhcmVudDsKICAgICBpbnQgbV9zY29w
ZVN0YWNrUGFyZW50Qm91bmRzSW5kZXg7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgU2hh
ZG93Um9vdCosIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4gPiBBdEhvc3RSdWxlRGF0YU1hcDsK
KyAgICBBdEhvc3RSdWxlRGF0YU1hcCBtX2F0SG9zdFJ1bGVzOworICAgIGNvbnN0IFZlY3RvcjxS
dWxlRGF0YT4qIGF0SG9zdFJ1bGVGb3JTY29wZShjb25zdCBTaGFkb3dSb290Kik7CisgICAgYm9v
bCBtYXRjaGVzSG9zdFJ1bGVzKCk7CiAjZW5kaWYKIAogICAgIENTU1RvU3R5bGVNYXAgbV9zdHls
ZU1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKaW5kZXggMzQyN2YwNTU5MjE3ZTYyZjM5Mjc4
YTg4MDVhYjNkOGQ4YTRlOTUyOC4uODgwZGNiNjRmNDk1YzdhNGRjZTg4MjQ2YzEwMzMzMDE1YmJm
YzdkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKQEAgLTc3LDYgKzc3LDkgQEAgdm9pZCBT
dHlsZVJ1bGVCYXNlOjpkZXN0cm95KCkKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgZGVs
ZXRlIHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMpOwogICAgICAgICByZXR1
cm47CisgICAgY2FzZSBIb3N0OgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5bGVSdWxl
SG9zdCo+KHRoaXMpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBVbmtub3duOgogICAgIGNh
c2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMTEwLDYgKzExMyw4IEBAIFBhc3NS
ZWZQdHI8U3R5bGVSdWxlQmFzZT4gU3R5bGVSdWxlQmFzZTo6Y29weSgpIGNvbnN0CiAgICAgICAg
IHJldHVybiAwOwogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKj4odGhpcyktPmNvcHkoKTsKKyAgICBjYXNlIEhv
c3Q6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVIb3N0Kj4odGhp
cyktPmNvcHkoKTsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNh
c2UgS2V5ZnJhbWU6CkBAIC0xNTEsNiArMTU2LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlPiBTdHls
ZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQK
ICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgcnVsZSA9IFdlYktpdENTU0tleWZyYW1lc1J1
bGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihzZWxmKSwgcGFyZW50
U2hlZXQpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEhvc3Q6CiAgICAgY2FzZSBVbmtub3du
OgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMjI2LDYgKzIzMiwy
NyBAQCB2b2lkIFN0eWxlUnVsZVBhZ2U6OnNldFByb3BlcnRpZXMoUGFzc1JlZlB0cjxTdHlsZVBy
b3BlcnR5U2V0PiBwcm9wZXJ0aWVzKQogICAgIG1fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7CiB9
CiAKK1N0eWxlUnVsZUhvc3Q6OlN0eWxlUnVsZUhvc3QoKQorICAgIDogU3R5bGVSdWxlQmFzZShI
b3N0KQorICAgICwgbV9jaGlsZChTdHlsZVJ1bGU6OmNyZWF0ZSgwKSkKK3sKK30KKworU3R5bGVS
dWxlSG9zdDo6U3R5bGVSdWxlSG9zdChjb25zdCBTdHlsZVJ1bGVIb3N0JiBvKQorICAgIDogU3R5
bGVSdWxlQmFzZShvKQorICAgICwgbV9jaGlsZChvLm1fY2hpbGQtPmNvcHkoKSkKK3sKK30KKwor
U3R5bGVSdWxlSG9zdDo6flN0eWxlUnVsZUhvc3QoKQoreworfQorCit2b2lkIFN0eWxlUnVsZUhv
c3Q6OnNldFByb3BlcnRpZXMoUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwcm9wZXJ0aWVz
KQoreyAKKyAgICBtX2NoaWxkLT5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpOworfQorCiBTdHls
ZVJ1bGVGb250RmFjZTo6U3R5bGVSdWxlRm9udEZhY2UoKQogICAgIDogU3R5bGVSdWxlQmFzZShG
b250RmFjZSwgMCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAppbmRleCA3ZmMyMGEzMDNmODUzYWM3
NmM5MmVmYjAxNTNmYmZiMzQ3ZjU3MmEwLi5lMjMyZmQ4N2E5Yjg1NDNkOWE0OWMwNTBkZjZkZTkx
YjQ0NDkxMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCkBAIC00NSw2ICs0NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgUGFnZSwKICAgICAgICAgS2V5ZnJhbWVzLAogICAgICAgICBLZXlmcmFtZSwg
Ly8gTm90IHVzZWQuIFRoZXNlIGFyZSBpbnRlcm5hbGx5IG5vbi1ydWxlIFN0eWxlS2V5ZnJhbWUg
b2JqZWN0cy4KKyAgICAgICAgSG9zdCwKICAgICAgICAgUmVnaW9uID0gMTYKICAgICB9OwogICAg
IFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0K
QEAgLTU3LDYgKzU4LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTdHlsZVJ1bGUoKSBjb25zdCB7
IHJldHVybiB0eXBlKCkgPT0gU3R5bGU7IH0KICAgICBib29sIGlzUmVnaW9uUnVsZSgpIGNvbnN0
IHsgcmV0dXJuIHR5cGUoKSA9PSBSZWdpb247IH0KICAgICBib29sIGlzSW1wb3J0UnVsZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBJbXBvcnQ7IH0KKyAgICBib29sIGlzSG9zdFJ1bGUoKSBj
b25zdCB7IHJldHVybiB0eXBlKCkgPT0gSG9zdDsgfQogCiAgICAgUGFzc1JlZlB0cjxTdHlsZVJ1
bGVCYXNlPiBjb3B5KCkgY29uc3Q7CiAKQEAgLTE1Nyw2ICsxNTksMjIgQEAgcHJpdmF0ZToKICAg
ICBDU1NTZWxlY3Rvckxpc3QgbV9zZWxlY3Rvckxpc3Q7CiB9OwogCitjbGFzcyBTdHlsZVJ1bGVI
b3N0IDogcHVibGljIFN0eWxlUnVsZUJhc2UgeworIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHlsZVJ1bGVIb3N0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVS
dWxlSG9zdCk7IH0KKworICAgIH5TdHlsZVJ1bGVIb3N0KCk7CisKKyAgICBTdHlsZVJ1bGUqIGNo
aWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQorICAgIHZvaWQgc2V0UHJvcGVy
dGllcyhQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+KTsKKworIHByaXZhdGU6CisgICAgU3R5
bGVSdWxlSG9zdCgpOworICAgIFN0eWxlUnVsZUhvc3QoY29uc3QgU3R5bGVSdWxlSG9zdCYpOwor
CisgICAgUmVmUHRyPFN0eWxlUnVsZT4gbV9jaGlsZDsKK307CisgCiBjbGFzcyBTdHlsZVJ1bGVC
bG9jayA6IHB1YmxpYyBTdHlsZVJ1bGVCYXNlIHsKIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2No
aWxkUnVsZXM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29u
dGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKaW5k
ZXggOTcwYzgyOGNhMTQwMWRjYjE2Mzg0NDllOTYwMjQzODI3ZWVjMTc5My4uNjI2ZTQ3Yzg0MjBl
N2EwNTI1YjBiZWY1YjhiZDEzNDdhOTc3YzA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2hlZXRDb250ZW50cy5jcHAKQEAgLTY1LDYgKzY1LDcgQEAgU3R5bGVTaGVldENvbnRlbnRzOjpT
dHlsZVNoZWV0Q29udGVudHMoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0cmlu
ZyYKICAgICAsIG1faXNNdXRhYmxlKGZhbHNlKQogICAgICwgbV9pc0luTWVtb3J5Q2FjaGUoZmFs
c2UpCiAgICAgLCBtX3BhcnNlckNvbnRleHQoY29udGV4dCkKKyAgICAsIG1fbnVtYmVyT2ZIb3N0
UnVsZXMoMCkKIHsKIH0KIApAQCAtODUsNiArODYsNyBAQCBTdHlsZVNoZWV0Q29udGVudHM6OlN0
eWxlU2hlZXRDb250ZW50cyhjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIG8pCiAgICAgLCBtX2lz
TXV0YWJsZShmYWxzZSkKICAgICAsIG1faXNJbk1lbW9yeUNhY2hlKGZhbHNlKQogICAgICwgbV9w
YXJzZXJDb250ZXh0KG8ubV9wYXJzZXJDb250ZXh0KQorICAgICwgbV9udW1iZXJPZkhvc3RSdWxl
cyhvLm1fbnVtYmVyT2ZIb3N0UnVsZXMpCiB7CiAgICAgQVNTRVJUKG8uaXNDYWNoZWFibGUoKSk7
CiAKQEAgLTEzNCw2ICsxMzYsOCBAQCB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VyQXBw
ZW5kUnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUpCiAgICAgICAgIG1faW1wb3J0
UnVsZXMubGFzdCgpLT5yZXF1ZXN0U3R5bGVTaGVldCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQorICAgIGlmIChydWxlLT5pc0hvc3RSdWxlKCkpCisgICAgICAgICsrbV9udW1iZXJPZkhvc3RS
dWxlczsKICAgICBtX2NoaWxkUnVsZXMuYXBwZW5kKHJ1bGUpOwogfQogCkBAIC0xNzcsNiArMTgx
LDcgQEAgdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OmNsZWFyUnVsZXMoKQogICAgIG1faW1wb3J0
UnVsZXMuY2xlYXIoKTsKICAgICBtX2NoaWxkUnVsZXMuY2xlYXIoKTsKICAgICBjbGVhckNoYXJz
ZXRSdWxlKCk7CisgICAgbV9udW1iZXJPZkhvc3RSdWxlcyA9IDA7CiB9CiAKIHZvaWQgU3R5bGVT
aGVldENvbnRlbnRzOjpwYXJzZXJTZXRFbmNvZGluZ0Zyb21DaGFyc2V0UnVsZShjb25zdCBTdHJp
bmcmIGVuY29kaW5nKQpAQCAtMjE4LDYgKzIyMyw4IEBAIGJvb2wgU3R5bGVTaGVldENvbnRlbnRz
Ojp3cmFwcGVySW5zZXJ0UnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUsIHVuc2ln
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjaGlsZFZlY3RvckluZGV4IC09IG1faW1wb3J0
UnVsZXMuc2l6ZSgpOwogIAorICAgIGlmIChydWxlLT5pc0hvc3RSdWxlKCkpCisgICAgICAgICsr
bV9udW1iZXJPZkhvc3RSdWxlczsKICAgICBtX2NoaWxkUnVsZXMuaW5zZXJ0KGNoaWxkVmVjdG9y
SW5kZXgsIHJ1bGUpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjQyLDYgKzI0OSw5IEBAIHZv
aWQgU3R5bGVTaGVldENvbnRlbnRzOjp3cmFwcGVyRGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCkK
ICAgICB9CiAgICAgY2hpbGRWZWN0b3JJbmRleCAtPSBtX2ltcG9ydFJ1bGVzLnNpemUoKTsKIAor
ICAgIGlmIChtX2NoaWxkUnVsZXMuYXQoY2hpbGRWZWN0b3JJbmRleCktPmlzSG9zdFJ1bGUoKSkK
KyAgICAgICAgLS1tX251bWJlck9mSG9zdFJ1bGVzOworCiAgICAgbV9jaGlsZFJ1bGVzLnJlbW92
ZShjaGlsZFZlY3RvckluZGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlU2hlZXRDb250ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250
ZW50cy5oCmluZGV4IDdkZjM0YjcwMzIyNzI1OTc2ZTVjN2YxNWQwODM4MDI2NGNiN2VmMGUuLmEz
MWNiYzFkNzVmZTg4NTVkZjEwMDU4NWViZmNjZWMzMTg3NzE3ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldENvbnRlbnRzLmgKQEAgLTk5LDYgKzk5LDcgQEAgcHVibGljOgogICAgIC8v
IFJ1bGVzIG90aGVyIHRoYW4gQGNoYXJzZXQgYW5kIEBpbXBvcnQuCiAgICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9j
aGlsZFJ1bGVzOyB9CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+ID4m
IGltcG9ydFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRSdWxlczsgfQorICAgIGJvb2wg
aGFzSG9zdFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9mSG9zdFJ1bGVzID4gMDsgfQog
CiAgICAgdm9pZCBub3RpZnlMb2FkZWRTaGVldChjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0Kik7
CiAgICAgCkBAIC0xNjMsNiArMTY0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNJbk1lbW9y
eUNhY2hlIDogMTsKICAgICAKICAgICBDU1NQYXJzZXJDb250ZXh0IG1fcGFyc2VyQ29udGV4dDsK
KyAgICBpbnQgbV9udW1iZXJPZkhvc3RSdWxlczsKIAogICAgIFZlY3RvcjxDU1NTdHlsZVNoZWV0
Kj4gbV9jbGllbnRzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dS
b290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAppbmRleCBiOWM0ODFj
MTg5ODY0ODFlMTliNjI2ZjY5NGMyMDZkZjEyMjE0NzRkLi40YjM3MWRlY2IwNmFiNzg4ZmY5OTJi
N2QxZGNiNWQwMmU5YzliZDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93
Um9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCkBAIC01NSw2
ICs1NSw3IEBAIFNoYWRvd1Jvb3Q6OlNoYWRvd1Jvb3QoRG9jdW1lbnQqIGRvY3VtZW50KQogICAg
ICwgbV9hcHBseUF1dGhvclN0eWxlcyhmYWxzZSkKICAgICAsIG1fcmVzZXRTdHlsZUluaGVyaXRh
bmNlKGZhbHNlKQogICAgICwgbV9pbnNlcnRpb25Qb2ludEFzc2lnbmVkVG8oMCkKKyAgICAsIG1f
bnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hpbGRyZW4oMCkKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQp
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKaW5kZXggZDliNDI1YzYwODNiMTdhZjg4MjZl
NjE2NDI3ODFmNTUyNTA3NTI1MC4uMmU1MTZmYjFiYjRjZWY3YjYzZGYyNmI2NDM3ZDRmZTU3YzAz
YjZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCkBAIC04OSw2ICs4OSwxMCBAQCBwdWJsaWM6
CiAgICAgSW5zZXJ0aW9uUG9pbnQqIGFzc2lnbmVkVG8oKSBjb25zdDsKICAgICB2b2lkIHNldEFz
c2lnbmVkVG8oSW5zZXJ0aW9uUG9pbnQqKTsKIAorICAgIHZvaWQgcmVnaXN0ZXJTaGFkb3dFbGVt
ZW50KCkgeyArK21fbnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hpbGRyZW47IH0KKyAgICB2b2lkIHVu
cmVnaXN0ZXJTaGFkb3dFbGVtZW50KCkgeyAtLW1fbnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hpbGRy
ZW47IH0KKyAgICBib29sIGhhc1NoYWRvd0luc2VydGlvblBvaW50KCkgY29uc3QgeyByZXR1cm4g
bV9udW1iZXJPZlNoYWRvd0VsZW1lbnRDaGlsZHJlbiA+IDA7IH0KKwogI2lmbmRlZiBOREVCVUcK
ICAgICBTaGFkb3dSb290VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAjZW5k
aWYKQEAgLTEwNiw2ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hcHBseUF1dGhvclN0
eWxlcyA6IDE7CiAgICAgYm9vbCBtX3Jlc2V0U3R5bGVJbmhlcml0YW5jZSA6IDE7CiAgICAgSW5z
ZXJ0aW9uUG9pbnQqIG1faW5zZXJ0aW9uUG9pbnRBc3NpZ25lZFRvOworICAgIHNpemVfdCBtX251
bWJlck9mU2hhZG93RWxlbWVudENoaWxkcmVuOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIFNoYWRv
d1Jvb3RUeXBlIG1fdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0
eWxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3Bw
CmluZGV4IDI2OTkwYTVkZjI4NGE5N2M2YTI0MWY1YzcwYTI4ZWI4ZDg3N2U5MTguLjc5N2YxMzA2
MmQ2OGRkY2M4NGZhMDUxZWNhNDhlZDdiMDgwZDJiNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmNwcApAQCAtMTQ1LDExICsxNDUsMTIgQEAgdm9pZCBIVE1MU3R5bGVF
bGVtZW50OjpyZWdpc3RlcldpdGhTY29waW5nTm9kZShib29sIHNjb3BlZCkKICAgICB9CiAKICAg
ICBzY29wZS0+cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworCiAgICAgc2NvcGUtPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFkb2N1bWVudCgp
LT5wYXJzaW5nKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgZG9jdW1lbnQo
KS0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiAKLSAgICBtX3Njb3Bl
ZFN0eWxlUmVnaXN0cmF0aW9uU3RhdGUgPSBzY29wZWQgPyBSZWdpc3RlcmVkQXNTY29wZWQgOiBS
ZWdpc3RlcmVkSW5TaGFkb3dSb290OworICAgIG1fc2NvcGVkU3R5bGVSZWdpc3RyYXRpb25TdGF0
ZSA9IHNjb3BlZD8gUmVnaXN0ZXJlZEFzU2NvcGVkIDogUmVnaXN0ZXJlZEluU2hhZG93Um9vdDsK
IH0KIAogdm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKENv
bnRhaW5lck5vZGUqIHNjb3BlKQpAQCAtMTY2LDYgKzE2Nyw3IEBAIHZvaWQgSFRNTFN0eWxlRWxl
bWVudDo6dW5yZWdpc3RlcldpdGhTY29waW5nTm9kZShDb250YWluZXJOb2RlKiBzY29wZSkKICAg
ICBpZiAoc2NvcGUpIHsKICAgICAgICAgQVNTRVJUKHNjb3BlLT5oYXNTY29wZWRIVE1MU3R5bGVD
aGlsZCgpKTsKICAgICAgICAgc2NvcGUtPnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgp
OworCiAgICAgICAgIHNjb3BlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgfQogICAgIGlm
IChpbkRvY3VtZW50KCkgJiYgIWRvY3VtZW50KCktPnBhcnNpbmcoKSAmJiBkb2N1bWVudCgpLT5y
ZW5kZXJlcigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNo
YWRvd0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0Vs
ZW1lbnQuY3BwCmluZGV4IDkzODQzOTYxMmNhMjFkMjY5ZTU3NzhhOTZiMTU5ODBlZjc1NDJiOWEu
LjVjNWRiZTk0ZmZlNDQ2ZTZmZTBiNjNmNmQwZTdlYjYzZTY0OTNlMTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5jcHAKQEAgLTQxLDYgKzQx
LDcgQEAgY2xhc3MgRG9jdW1lbnQ7CiAKIGlubGluZSBIVE1MU2hhZG93RWxlbWVudDo6SFRNTFNo
YWRvd0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3Vt
ZW50KQogICAgIDogSW5zZXJ0aW9uUG9pbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBtX3Jl
Z2lzdGVyZWRXaXRoU2hhZG93Um9vdChmYWxzZSkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShI
VE1MTmFtZXM6OnNoYWRvd1RhZykpOwogfQpAQCAtNjgsNCArNjksMzEgQEAgYm9vbCBIVE1MU2hh
ZG93RWxlbWVudDo6ZG9lc1NlbGVjdEZyb21Ib3N0Q2hpbGRyZW4oKSBjb25zdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAorTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MU2hh
ZG93RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQor
eworICAgIEluc2VydGlvblBvaW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOworCisg
ICAgaWYgKGluc2VydGlvblBvaW50LT5pbkRvY3VtZW50KCkgJiYgaXNBY3RpdmUoKSkgeworICAg
ICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAg
cm9vdC0+cmVnaXN0ZXJTaGFkb3dFbGVtZW50KCk7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRX
aXRoU2hhZG93Um9vdCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gSW5z
ZXJ0aW9uRG9uZTsKK30KKwordm9pZCBIVE1MU2hhZG93RWxlbWVudDo6cmVtb3ZlZEZyb20oQ29u
dGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbnQpCit7CisgICAgaWYgKGluc2VydGlvblBvaW50LT5p
bkRvY3VtZW50KCkgJiYgbV9yZWdpc3RlcmVkV2l0aFNoYWRvd1Jvb3QpIHsKKyAgICAgICAgU2hh
ZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKTsKKyAgICAgICAgaWYgKCFyb290KQorICAgICAg
ICAgICAgcm9vdCA9IGluc2VydGlvblBvaW50LT5zaGFkb3dSb290KCk7CisgICAgICAgIGlmIChy
b290KQorICAgICAgICAgICAgcm9vdC0+dW5yZWdpc3RlclNoYWRvd0VsZW1lbnQoKTsKKyAgICAg
ICAgbV9yZWdpc3RlcmVkV2l0aFNoYWRvd1Jvb3QgPSBmYWxzZTsKKyAgICB9CisgICAgSW5zZXJ0
aW9uUG9pbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNo
YWRvd0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVt
ZW50LmgKaW5kZXggYTRlY2RiM2FkNDVmYjhlYzRlOWFhNTAwMGEwMWUzYWVkMWNkMjBkYy4uMTE5
ZmE5Zjk1ZGVmNjI3NDE2MmNiMTg4OTQ5ZmQ0NzFhYWRiZmI4NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5oCkBAIC00Niw4ICs0NiwxNCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc1NlbGVjdFZhbGlkKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIGJvb2wgZG9lc1NlbGVjdEZyb21Ib3N0Q2hpbGRyZW4oKSBjb25zdDsKIAor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNl
cnRlZEludG8oQ29udGFpbmVyTm9kZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVkRnJvbShDb250YWluZXJOb2RlKikgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgSFRNTFNo
YWRvd0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICBib29s
IG1fcmVnaXN0ZXJlZFdpdGhTaGFkb3dSb290OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1ob3N0LWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8taG9zdC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzc1YzZhNzlmNGZkYmY1YjUxZmM5ZDY4NzA4YjFjZGU0MmM4
MWRkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9wc2V1
ZG8taG9zdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAoraG9zdDogcmdiKDI1NSwgMCwg
MCkKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdi
KDEyOCwgMTI4LCAxMjgpCitob3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDAsIDAsIDI1
NSkKK2hvc3Q6IHJnYigxMjgsIDEyOCwgMTI4KQoraG9zdDogcmdiKDI1NSwgMjU1LCAwKQoraG9z
dDogcmdiKDI1NSwgMCwgMCkKK25lc3RlZEhvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2Io
MjU1LCAwLCAwKQoraG9zdDogcmdiKDI1NSwgMjU1LCAwKQorSGVsbG8KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8taG9zdC5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2hhZG93L3BzZXVkby1ob3N0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2EyMjk5MWRkYjlh
MWU2YWEzMzRiYTg1M2UzMGQwMDQxYTRkMTJlMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8taG9zdC5odG1sCkBAIC0wLDAgKzEsMTY5IEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjaG9zdCB7CisgIGNvbG9y
OiBncmF5OworfQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9wb2x5ZmlsbC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gZHVtcENvbXB1dGVkU3R5bGUobm9kZSkK
K3sKKyAgICBkZWJ1Zyhub2RlLmlkICsgIjogIiArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENv
bXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7Cit9CisK
K2Z1bmN0aW9uIHByZXByb2Nlc3NGb3JUZXN0KCkKK3sKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInBhcmVudCIpOworICAgIHBhcmVudC5pbm5lckhUTUwgPSAnPGRp
diBpZD0iaG9zdCI+PHNwYW4+SGVsbG88L3NwYW4+PC9kaXY+JzsKK30KKworZnVuY3Rpb24gdGVz
dFNpbXBsZUNvbnRlbnRDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZh
ciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93
ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8
c3R5bGU+QGhvc3QgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsK
KyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZVNo
YWRvd0Nhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2Vi
S2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9z
dCB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBkdW1wQ29t
cHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVk
KCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8ZGl2PjxzdHlsZSBzY29wZWQ+
QGhvc3QgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PjxkaXY+PHN0eWxl
IHNjb3BlZD5AaG9zdCB7IGNvbG9yOiBibHVlOyB9PC9zdHlsZT48L2Rpdj48L2Rpdj4iOworICAg
IGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0UHNldWRvSG9zdFdp
dGhGYWxsYmFja1NoYWRvdygpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIg
aG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNo
YWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRv
dyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhU
TUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250
ZW50PiI7CisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxjb250ZW50PjxzaGFkb3c+
PC9zaGFkb3c+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisK
K2Z1bmN0aW9uIHRlc3RUd29TaGFkb3dSb290c0Nhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JU
ZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOwor
ICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2
YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBvbGRl
c3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08L3N0eWxl
Pjxjb250ZW50PjwvY29udGVudD4iOworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8
c3R5bGU+QGhvc3QgeyBjb2xvcjogYmx1ZTsgfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOwor
ICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0VHdvU2hhZG93
Um9vdHNDcmVhdGluZ0RpZmZlcmVudE9yZGVyQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRl
c3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7Cisg
ICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZh
ciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHlvdW5n
ZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogYmx1ZTsgfTwvc3R5
bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0
eWxlPkBob3N0IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7Cisg
ICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZVNo
YWRvd1Jvb3RzV2l0aEluZXJ0U2hhZG93Q29udGVudCgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRl
c3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7Cisg
ICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZh
ciBvbGRlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3Vu
Z2VyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXN0
U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisKKyAgICB5b3VuZ2VzdFNoYWRv
dy5pbm5lckhUTUwgPSAiPHNoYWRvdz48L3NoYWRvdz4iOworICAgIHlvdW5nZXJTaGFkb3cuaW5u
ZXJIVE1MID0gIjxjb250ZW50PjwvY29udGVudD4iOworICAgIG9sZGVyU2hhZG93LmlubmVySFRN
TCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogZ3JlZW47IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFk
b3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9y
OiByZWQ7IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0
eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVy
dFNoYWRvdygpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5l
dyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciBvbGRlclNoYWRvdyA9IG5ldyBXZWJL
aXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VyU2hhZG93ID0gbmV3IFdlYktpdFNo
YWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QoaG9zdCk7CisKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBo
b3N0IHsgY29sb3I6IHllbGxvdzsgfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIHlv
dW5nZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiBibHVlOyB9PC9z
dHlsZT48ZGl2PmluZXJ0PC9kaXY+IjsKKyAgICBvbGRlclNoYWRvdy5pbm5lckhUTUwgPSAiPHN0
eWxlPkBob3N0IHsgY29sb3I6IGdyZWVuOyB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7Cisg
ICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogcmVkOyB9
PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0
KTsKK30KKworZnVuY3Rpb24gdGVzdE5lc3RlZENhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JU
ZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOwor
ICAgIHZhciBvdXRlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG91
dGVyU2hhZG93LmlubmVySFRNTCA9ICc8c3R5bGU+QGhvc3QgeyBjb2xvcjogcmVkOyB9PC9zdHls
ZT48ZGl2IGlkPSJuZXN0ZWRIb3N0Ij5Jbm5lclNoYWRvdzwvZGl2Pic7CisgICAgdmFyIG5lc3Rl
ZCA9IG91dGVyU2hhZG93LmdldEVsZW1lbnRCeUlkKCJuZXN0ZWRIb3N0Iik7CisgICAgdmFyIGlu
bmVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QobmVzdGVkKTsKKyAgICBpbm5lclNoYWRv
dy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0IHsgY29sb3I6IGJsdWU7IH08L3N0eWxlPlNob3cg
PHNoYWRvdz48L3NoYWRvdz4gaW4gb3V0ZXIuJzsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0
KTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShuZXN0ZWQpOworfQorCitmdW5jdGlvbiB0ZXN0SG9z
dFZzU2NvcGVkU3R5bGUoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhv
c3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIGhvc3QuaW5uZXJIVE1M
ID0gIjxzdHlsZSBzY29wZWQ+I2hvc3QgeyBjb2xvcjogeWVsbG93OyB9PC9zdHlsZT48c3Bhbj5I
ZWxsbzwvc3Bhbj4iOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08
L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3Qp
OworfQorCitmdW5jdGlvbiB0ZXN0SG9zdFZzSW5saW5lU3R5bGUoKQoreworICAgIHByZXByb2Nl
c3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9z
dCIpOworICAgIGhvc3Quc3R5bGUuY29sb3IgPSAieWVsbG93IjsKKyAgICBob3N0LmlubmVySFRN
TCA9ICI8c3Bhbj5IZWxsbzwvc3Bhbj4iOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hh
ZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNv
bG9yOiByZWQ7IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRl
ZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiBydW5UZXN0cygpCit7CisgICAgdGVzdFNpbXBs
ZUNvbnRlbnRDYXNlKCk7CisgICAgdGVzdFNpbXBsZVNoYWRvd0Nhc2UoKTsKKyAgICB0ZXN0UHNl
dWRvSG9zdFdpdGhTY29wZWQoKTsKKyAgICB0ZXN0UHNldWRvSG9zdFdpdGhGYWxsYmFja1NoYWRv
dygpOworICAgIHRlc3RUd29TaGFkb3dSb290c0Nhc2UoKTsKKyAgICB0ZXN0VHdvU2hhZG93Um9v
dHNDcmVhdGluZ0RpZmZlcmVudE9yZGVyQ2FzZSgpOworICAgIHRlc3RNdWx0aXBsZVNoYWRvd1Jv
b3RzV2l0aEluZXJ0U2hhZG93Q29udGVudCgpOworICAgIHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3Rz
V2l0aEluZXJ0U2hhZG93KCk7CisgICAgdGVzdE5lc3RlZENhc2UoKTsKKyAgICB0ZXN0SG9zdFZz
U2NvcGVkU3R5bGUoKTsKKyAgICB0ZXN0SG9zdFZzSW5saW5lU3R5bGUoKTsKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKyAgPGRpdiBpZD0icGFyZW50
Ij4KKyAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155754</attachid>
            <date>2012-08-01 01:52:58 -0700</date>
            <delta_ts>2012-08-01 03:11:22 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-88606-20120801175240.patch</filename>
            <type>text/plain</type>
            <size>33406</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2YyZTg1N2Q4ZTQ0MDYz
YTY5MWRmNzE5OTNmNjc3ZDIzODFjNzg3NC4uNmM2YTg5MzNlNmQxNTdkYWJlM2Q1ZjIwYmY1NDQx
NWJmMDFhNzhmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEyLTA4LTAxICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0g
TmVlZHMgQGhvc3QgcnVsZSBmb3IgU2hhZG93RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjA2CisKKyAgICAgICAgSW1wbGVtZW50
ZWQgQGhvc3QtQHJ1bGVzIGFjY29yZGluZyB0byB0aGUgc2hhZG93IGRvbSBzcGVjOgorICAgICAg
ICBodHRwOi8vZHZjcy53My5vcmcvaGcvd2ViY29tcG9uZW50cy9yYXctZmlsZS90aXAvc3BlYy9z
aGFkb3cvaW5kZXguaHRtbCNob3N0LWF0LXJ1bGUKKyAgICAgICAgVGhlIGRlc2lnbiBkb2MgaXM6
CisgICAgICAgIGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVAyeW9yY2hGOGxj
aTJzY2NyLW1WU1JmMmR0dmpLZWl1eVFXekNCMmJFQTgvZWRpdAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9wc2V1
ZG8taG9zdC5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhbW1hci55OgorICAgICAgICAqIGNz
cy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRlY3RBdFRv
a2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUpOgorICAg
ICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGRIb3N0UnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp0cmFuc2Zlck1hdGNoZWRSdWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXRIb3N0UnVsZUZvclNjb3BlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoZXNIb3N0UnVsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyk6CisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNz
cy9TdHlsZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJv
eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjb3B5KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUnVsZUhvc3Q6On5TdHlsZVJ1bGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVs
ZUhvc3Q6OnNldFByb3BlcnRpZXMpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmlzSG9zdFJ1bGUpOgorICAgICAgICAoU3R5bGVS
dWxlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0OjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y2hpbGQpOgorICAgICAgICAqIGNzcy9TdHls
ZVNoZWV0Q29udGVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRz
OjpTdHlsZVNoZWV0Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRl
bnRzOjpwYXJzZXJBcHBlbmRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250
ZW50czo6Y2xlYXJSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6
OndyYXBwZXJJbnNlcnRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50
czo6d3JhcHBlckRlbGV0ZVJ1bGUpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Q29udGVudHMu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6aGFzSG9zdFJ1bGUpOgor
ICAgICAgICAoU3R5bGVTaGVldENvbnRlbnRzKToKKyAgICAgICAgKiBkb20vU2hhZG93Um9vdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpTaGFkb3dSb290KToKKyAgICAgICAg
KiBkb20vU2hhZG93Um9vdC5oOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6cmVnaXN0
ZXJTaGFkb3dFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnVucmVnaXN0
ZXJTaGFkb3dFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6Omhhc1NoYWRv
d0luc2VydGlvblBvaW50KToKKyAgICAgICAgKFNoYWRvd1Jvb3QpOgorICAgICAgICAqIGh0bWwv
c2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTaGFk
b3dFbGVtZW50OjpIVE1MU2hhZG93RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2hh
ZG93RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTaGFkb3dF
bGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0Vs
ZW1lbnQuaDoKKwogMjAxMi0wOC0wMSAgS3dhbmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAu
bmV0PgogCiAgICAgICAgIE1ha2UgSFRNTENvbnN0cnVjdGlvblNpdGU6OmNyZWF0ZUhUTUxFbGVt
ZW50KEF0b21pY0hUTUxUb2tlbiopIHByaXZhdGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTR3JhbW1hci55IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQppbmRl
eCA5OTY4ZTc2NjAwN2VlZjE3YWExNjk2ZmIwMmU0ZmY3NGQzNDJmMTAyLi5lNzIyMjQ5NDYwNjQ5
NzYxYmJjODI4MmUyNGQ0NzE1ZmY0MTQxZDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhbW1hci55CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKQEAg
LTEzMiw2ICsxMzIsNyBAQCBzdGF0aWMgaW50IGNzc3l5bGV4KFlZU1RZUEUqIHl5bHZhbCwgQ1NT
UGFyc2VyKiBwYXJzZXIpCiAldG9rZW4gUEFHRV9TWU0KICV0b2tlbiBNRURJQV9TWU0KICV0b2tl
biBGT05UX0ZBQ0VfU1lNCisldG9rZW4gSE9TVF9TWU0KICV0b2tlbiBDSEFSU0VUX1NZTQogJXRv
a2VuIE5BTUVTUEFDRV9TWU0KICV0b2tlbiBWQVJGVU5DVElPTgpAQCAtMjE5LDYgKzIyMCw3IEBA
IHN0YXRpYyBpbnQgY3NzeXlsZXgoWVlTVFlQRSogeXlsdmFsLCBDU1NQYXJzZXIqIHBhcnNlcikK
ICV0eXBlIDxydWxlPiBwYWdlCiAldHlwZSA8cnVsZT4gbWFyZ2luX2JveAogJXR5cGUgPHJ1bGU+
IGZvbnRfZmFjZQorJXR5cGUgPHJ1bGU+IGhvc3QKICV0eXBlIDxydWxlPiBrZXlmcmFtZXMKICV0
eXBlIDxydWxlPiBpbnZhbGlkX3J1bGUKICV0eXBlIDxydWxlPiBzYXZlX2Jsb2NrCkBAIC00MTks
NiArNDIxLDcgQEAgdmFsaWRfcnVsZToKICAgfCBuYW1lc3BhY2UKICAgfCBpbXBvcnQKICAgfCBy
ZWdpb24KKyAgfCBob3N0CiAgIDsKIAogcnVsZToKQEAgLTg0MSw2ICs4NDQsMTYgQEAgZm9udF9m
YWNlOgogICAgIH0KIDsKIAoraG9zdDoKKyAgICBIT1NUX1NZTSBtYXliZV9zcGFjZSAneycgbWF5
YmVfc3BhY2UgZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5nX2JyYWNlIHsKKyAgICAgICAgaWYgKCQ1
KSB7CisgICAgICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNy
ZWF0ZUhvc3RSdWxlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJCA9IDA7Cisg
ICAgICAgIH0KKyAgICB9Cis7CisgCiByZWdpb25fc2VsZWN0b3I6CiAgICAgc2VsZWN0b3JfbGlz
dCB7CiAgICAgICAgIGlmICgkMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCAxMTkx
Yjg2MjBjMDA2Mzg0ZDI4YjdlMTc0MGVjOGM1YWM2NTU4ODJkLi5mZTYwMDVmYjMzZTM5MDc4YzYw
YTg0YjVhNmM2M2MyNGVhODljNDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtODc1
MCw2ICs4NzUwLDExIEBAIGlubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihpbnQg
bGVuZ3RoLCBib29sIGhhc0VzY2FwZSkKICAgICAgICAgICAgIG1fdG9rZW4gPSBGT05UX0ZBQ0Vf
U1lNOwogICAgICAgICByZXR1cm47CiAKKyAgICBjYXNlICdoJzoKKyAgICAgICAgaWYgKGxlbmd0
aCA9PSA1ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvc3QiKSkKKyAgICAg
ICAgICAgIG1fdG9rZW4gPSBIT1NUX1NZTTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSAn
aSc6CiAgICAgICAgIGlmIChsZW5ndGggPT0gNyAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5h
bWUgKyAyLCAibXBvcnQiKSkgewogICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVl
cnlNb2RlOwpAQCAtOTU4MCw2ICs5NTg1LDE3IEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6
Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitTdHlsZVJ1bGVC
YXNlKiBDU1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKCkKK3sKKyAgICBtX2FsbG93SW1wb3J0UnVs
ZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CisgICAgUmVmUHRyPFN0
eWxlUnVsZUhvc3Q+IHJ1bGUgPSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoKTsKKyAgICBydWxlLT5z
ZXRQcm9wZXJ0aWVzKGNyZWF0ZVN0eWxlUHJvcGVydHlTZXQoKSk7CisgICAgY2xlYXJQcm9wZXJ0
aWVzKCk7CisgICAgU3R5bGVSdWxlSG9zdCogcmVzdWx0ID0gcnVsZS5nZXQoKTsKKyAgICBtX3Bh
cnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwogdm9pZCBDU1NQYXJzZXI6OmFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZp
eCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCiB7CiAgICAgaWYgKCFtX3N0eWxlU2hlZXQgfHwg
IW1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXgg
NmFjYmJhMjUyOTMwNTVhMTYzMzkyZjE4ZDY3N2UxYThhNTZhODRiMy4uNWQyMzBkZTlkMzJjMjY5
ZWMwOWI1NWI2ODQxMjQyZDRlNDNlNTk3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMjY1
LDYgKzI2NSw3IEBAIHB1YmxpYzoKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVQYWdlUnVsZShQ
YXNzT3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2VsZWN0b3IpOwogICAgIFN0eWxlUnVs
ZUJhc2UqIGNyZWF0ZVJlZ2lvblJ1bGUoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4g
PiogcmVnaW9uU2VsZWN0b3IsIFJ1bGVMaXN0KiBydWxlcyk7CiAgICAgU3R5bGVSdWxlQmFzZSog
Y3JlYXRlTWFyZ2luQXRSdWxlKENTU1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlKTsKKyAgICBTdHls
ZVJ1bGVCYXNlKiBjcmVhdGVIb3N0UnVsZSgpOwogICAgIHZvaWQgc3RhcnREZWNsYXJhdGlvbnNG
b3JNYXJnaW5Cb3goKTsKICAgICB2b2lkIGVuZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggODk1YmM4ZTE0NTIyNjM0ZmVk
MjMwNzFlOWE3NDRkZDE4YTZkMzZjNy4uMDUzYTcwNjEzNDEzNzE2MWY5NTA0MzQyNzVlMjQyODFm
OTczY2QyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNjAsNiArNjAs
NyBAQAogI2luY2x1ZGUgIkNvdW50ZXIuaCIKICNpbmNsdWRlICJDb3VudGVyQ29udGVudC5oIgog
I2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKKyNpbmNsdWRlICJFbGVtZW50U2hhZG93LmgiCiAjaW5j
bHVkZSAiRm9udEZlYXR1cmVWYWx1ZS5oIgogI2luY2x1ZGUgIkZvbnRWYWx1ZS5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCkBAIC0yMzYsNyArMjM3LDcgQEAgcHJpdmF0ZToKICAgICAvLyBVc2UgcGxh
aW4gYXJyYXkgaW5zdGVhZCBvZiBhIFZlY3RvciB0byBtaW5pbWl6ZSBtZW1vcnkgb3ZlcmhlYWQu
CiAgICAgdW5zaWduZWQgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzW21heGlt
dW1JZGVudGlmaWVyQ291bnRdOwogfTsKLSAgICAKKwogc3RydWN0IFNhbWVTaXplQXNSdWxlRGF0
YSB7CiAgICAgdm9pZCogYTsKICAgICB2b2lkKiBiOwpAQCAtNTMyLDcgKzUzMyw3IEBAIGlubGlu
ZSBSdWxlU2V0KiBTdHlsZVJlc29sdmVyOjpydWxlU2V0Rm9yU2NvcGUoY29uc3QgQ29udGFpbmVy
Tm9kZSogc2NvcGUpIGNvbnN0CiAgICAgaWYgKCFzY29wZS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hp
bGQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5maW5kKHNjb3BlKTsKLSAgICByZXR1cm4g
aXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsg
CisgICAgcmV0dXJuIGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpID8gaXQtPnNlY29u
ZC5nZXQoKSA6IDA7CiB9CiAjZW5kaWYKIApAQCAtNTY2LDEyICs1NjcsMzQgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29u
c3QgVmVjdG9yPFJlZlAKICAgICB9CiAgICAgbV9hdXRob3JTdHlsZS0+c2hyaW5rVG9GaXQoKTsK
ICAgICBjb2xsZWN0RmVhdHVyZXMoKTsKLSAgICAKKwogICAgIGlmIChkb2N1bWVudCgpLT5yZW5k
ZXJlcigpICYmIGRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCkpCiAgICAgICAgIGRvY3Vt
ZW50KCktPnJlbmRlcmVyKCktPnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkp
OwogfQogCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRk
SG9zdFJ1bGUoU3R5bGVSdWxlSG9zdCogaG9zdFJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAgc3RhdGljIENTU1Nl
bGVjdG9yKiBzZWxlY3RvciA9IG5ldyBDU1NTZWxlY3RvcjsKKworICAgIGlmICghc2NvcGUgfHwg
IXNjb3BlLT5pc0luU2hhZG93VHJlZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFkb3dS
b290KiBzaGFkb3dSb290ID0gc2NvcGUtPnNoYWRvd1Jvb3QoKTsKKyAgICBpZiAoIXNoYWRvd1Jv
b3QpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBDb250YWluZXJOb2RlKiBzaGFkb3dIb3N0
ID0gc2hhZG93Um9vdC0+aG9zdCgpOworICAgIGlmICghc2hhZG93SG9zdCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQXRIb3N0UnVsZURhdGFNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2F0
SG9zdFJ1bGVzLmFkZChzaGFkb3dSb290LCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0Lmlz
TmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gYWRvcHRQdHIo
bmV3IFZlY3RvcjxSdWxlRGF0YT4pOworCisgICAgUnVsZURhdGEgcnVsZURhdGEoaG9zdFJ1bGUt
PmNoaWxkKCksIHNlbGVjdG9yLCAwLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCB0cnVlLCBm
YWxzZSk7CisgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFwcGVuZChydWxlRGF0YSk7
Cit9CisKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0dXBTY29wZVN0YWNrKGNvbnN0IENvbnRhaW5l
ck5vZGUqIHBhcmVudCkKIHsKICAgICAvLyBUaGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIHNob3Vs
ZG4ndCBiZSB1c2VkIGlmIDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQgYW55d2hlcmUuCkBAIC05
MTgsMTMgKzk0MSw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JSZWdpb24oUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlCiAgICAgfQogfQogCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVyOjp0cmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJl
c3VsdCYgcmVzdWx0KQogewotICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKLQogICAgIGlmIChtX2NoZWNr
ZXIubW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CiAgICAgICAg
IGlmICghbV9ydWxlTGlzdCkKICAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxl
TGlzdDo6Y3JlYXRlKCk7CkBAIC05NDYsNiArOTY0LDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiAgICAgfQog
fQogCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0KQoreworICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAgICB0cmFuc2Zlck1h
dGNoZWRSdWxlcyhyZXN1bHQpOworfQorCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVk
QXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykK
IHsKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQpAQCAtOTkzLDYgKzEwMjAsNjEgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQs
IGJvb2wgaW5jbHVkZUVtcHQKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkK
K2lubGluZSBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBTdHlsZVJlc29sdmVyOjphdEhvc3RSdWxl
Rm9yU2NvcGUoY29uc3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKK3sKKyAgICBBdEhvc3RSdWxl
RGF0YU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0SG9zdFJ1bGVzLmZpbmQoc2hhZG93Um9v
dCk7CisgICAgcmV0dXJuIGl0ICE9IG1fYXRIb3N0UnVsZXMuZW5kKCkgPyBpdC0+c2Vjb25kLmdl
dCgpIDogMDsgCit9CisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6bWF0Y2hlc0hvc3RSdWxlcygpCit7
CisgICAgaWYgKG1fYXRIb3N0UnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBtX2VsZW1lbnQtPnNoYWRvdygpOworICAg
IGlmICghc2hhZG93KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChTaGFkb3dSb290
KiBzaGFkb3dSb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hhZG93Um9vdDsg
c2hhZG93Um9vdCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7CisgICAgICAgIGlm
IChhdEhvc3RSdWxlRm9yU2NvcGUoc2hhZG93Um9vdCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgor
Cit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQs
IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAg
ICBpZiAobV9hdEhvc3RSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEVs
ZW1lbnRTaGFkb3cqIHNoYWRvdyA9IG1fZWxlbWVudC0+c2hhZG93KCk7CisgICAgaWYgKCFzaGFk
b3cpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3Rvcjxjb25zdCBWZWN0b3I8UnVsZURhdGE+
KiwgMTY+IG1hdGNoZWRSdWxlczsgCisgICAgZm9yIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0g
c2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hhZG93Um9vdDsgc2hhZG93Um9vdCA9IHNo
YWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7IAorICAgICAgICBpZiAoY29uc3QgVmVjdG9y
PFJ1bGVEYXRhPiogcnVsZSA9IGF0SG9zdFJ1bGVGb3JTY29wZShzaGFkb3dSb290KSkKKyAgICAg
ICAgICAgIG1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7CisgICAgICAgIGlmICghc2hhZG93Um9v
dC0+aGFzU2hhZG93SW5zZXJ0aW9uUG9pbnQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
TWF0Y2hPcHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIG9wdGlvbnMuc2Nv
cGUgPSBtX2VsZW1lbnQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0Y2hlZFJ1bGVzLnNpemUo
KTsgaSA+IDA7IC0taSkKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNo
ZWRSdWxlcy5hdChpLTEpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJh
bmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShy
ZXN1bHQpOworICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlRW1wdHlSdWxlcyk7CisjZW5kaWYKK30K
Kwogdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1
bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIo
KTsKQEAgLTEwMDcsOCArMTA4OSwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9y
UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcwogICAgIGNv
bGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5y
YW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRp
b25zKTsKIAogICAgIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlS
dWxlcyk7CisgICAgaWYgKCFtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHNvcnRN
YXRjaGVkUnVsZXMoKTsKIAotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQp
OworICAgIG1hdGNoSG9zdFJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIGlm
ICghbV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICB0cmFuc2Zlck1hdGNoZWRSdWxl
cyhyZXN1bHQpOwogfQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNo
UmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCkBAIC0xNTY4LDYgKzE2NTQs
MTEgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAg
ICAvLyBDYW4ndCBzaGFyZSBpZiBhdHRyaWJ1dGUgcnVsZXMgYXBwbHkuCiAgICAgaWYgKG1hdGNo
ZXNSdWxlU2V0KG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0LmdldCgpKSkKICAgICAgICAgcmV0
dXJuIDA7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAvLyBDYW4ndCBzaGFyZSBpZiBA
aG9zdCBALXJ1bGVzIGFwcGx5LgorICAgIGlmIChtYXRjaGVzSG9zdFJ1bGVzKCkpCisgICAgICAg
IHJldHVybiAwOworI2VuZGlmCiAgICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMg
dW5pcXVlIHN0eWxlIGZvciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxp
bmcgcnVsZSBtYXRjaCBhYm92ZS4KICAgICBpZiAocGFyZW50U3R5bGVQcmV2ZW50c1NoYXJpbmco
bV9wYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjczOSw2ICsyODMwLDEwIEBA
IHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVl
dCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1CiAgICAgICAgICAgICBhZGRSZWdpb25SdWxlKHN0YXRp
Y19jYXN0PFN0eWxlUnVsZVJlZ2lvbio+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
KTsKICAgICAgICAgfQogI2VuZGlmCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAgICAg
ZWxzZSBpZiAocnVsZS0+aXNIb3N0UnVsZSgpKQorICAgICAgICAgICAgcmVzb2x2ZXItPmFkZEhv
c3RSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUhvc3QqPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbiwgc2NvcGUpOworI2VuZGlmCiAgICAgfQogICAgIGlmIChtX2F1dG9TaHJpbmtU
b0ZpdEVuYWJsZWQpCiAgICAgICAgIHNocmlua1RvRml0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuaAppbmRleCBlMmFlYjJjMDAxZTc3MjVkZTNmOWNkYTk1ZmM4YTIxMDVmMTlmYmYzLi4y
OWU0OTBjNWNhNDQzZjcyMjY3Y2FhOWQxZjQyZTU3NTcxYTlmZWJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmgKQEAgLTcxLDYgKzcxLDcgQEAgY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xh
c3MgUnVsZURhdGE7CiBjbGFzcyBSdWxlU2V0OwogY2xhc3MgU2V0dGluZ3M7CitjbGFzcyBTaGFk
b3dSb290OwogY2xhc3MgU3RhdGljQ1NTUnVsZUxpc3Q7CiBjbGFzcyBTdHlsZUJ1aWxkZXI7CiBj
bGFzcyBTdHlsZUltYWdlOwpAQCAtODEsNiArODIsNyBAQCBjbGFzcyBTdHlsZVJ1bGU7CiBjbGFz
cyBTdHlsZVJ1bGVLZXlmcmFtZXM7CiBjbGFzcyBTdHlsZVJ1bGVQYWdlOwogY2xhc3MgU3R5bGVS
dWxlUmVnaW9uOworY2xhc3MgU3R5bGVSdWxlSG9zdDsKIGNsYXNzIFN0eWxlU2hhZGVyOwogY2xh
c3MgU3R5bGVTaGVldDsKIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKQEAgLTEzNCw2ICsxMzYs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwb3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2
b2lkIHB1c2hQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKICAgICB2b2lkIHBv
cFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCopOworICAgIHZvaWQgYWRkSG9zdFJ1
bGUoU3R5bGVSdWxlSG9zdCosIGJvb2wsIGNvbnN0IENvbnRhaW5lck5vZGUqKTsKIAogICAgIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gMCwgU3R5bGVTaGFyaW5nQmVoYXZpb3IgPSBBbGxvd1N0eWxlU2hh
cmluZywKICAgICAgICAgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBSZW5k
ZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKQEAgLTM1NSwxMSArMzU4LDE0IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhN
YXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hIb3N0
UnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIGNv
bGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxh
c3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwogICAgIHZvaWQgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFz
dFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5k
ZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CisgICAgdm9pZCBj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckhvc3QoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgYm9vbCBmYXN0
UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKICAgICB2b2lkIHNvcnRNYXRj
aGVkUnVsZXMoKTsKKyAgICB2b2lkIHRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0Jik7
CiAgICAgdm9pZCBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKIAog
ICAgIGJvb2wgY2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5v
ZGUqIHNjb3BlID0gMCk7CkBAIC01MzcsNiArNTQzLDExIEBAIHByaXZhdGU6CiAgICAgLy8gVGhp
cyBpcyB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIG1fc2NvcGluZ0VsZW1lbnRTdGFjayBpcyBjb25z
aXN0ZW50LCBzZXBhcmF0ZWx5IGZyb20gU2VsZWN0b3JDaGVja2VyOjptX3BhcmVudFN0YWNrLgog
ICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1fc2NvcGVTdGFja1BhcmVudDsKICAgICBpbnQgbV9z
Y29wZVN0YWNrUGFyZW50Qm91bmRzSW5kZXg7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3Qg
U2hhZG93Um9vdCosIE93blB0cjxWZWN0b3I8UnVsZURhdGE+ID4gPiBBdEhvc3RSdWxlRGF0YU1h
cDsKKyAgICBBdEhvc3RSdWxlRGF0YU1hcCBtX2F0SG9zdFJ1bGVzOworICAgIGNvbnN0IFZlY3Rv
cjxSdWxlRGF0YT4qIGF0SG9zdFJ1bGVGb3JTY29wZShjb25zdCBTaGFkb3dSb290Kik7CisgICAg
Ym9vbCBtYXRjaGVzSG9zdFJ1bGVzKCk7CiAjZW5kaWYKIAogICAgIENTU1RvU3R5bGVNYXAgbV9z
dHlsZU1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKaW5kZXggMzQyN2YwNTU5MjE3ZTYyZjM5
Mjc4YTg4MDVhYjNkOGQ4YTRlOTUyOC4uODgwZGNiNjRmNDk1YzdhNGRjZTg4MjQ2YzEwMzMzMDE1
YmJmYzdkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKQEAgLTc3LDYgKzc3LDkgQEAgdm9p
ZCBTdHlsZVJ1bGVCYXNlOjpkZXN0cm95KCkKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAg
ZGVsZXRlIHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMpOwogICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBIb3N0OgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5bGVS
dWxlSG9zdCo+KHRoaXMpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBVbmtub3duOgogICAg
IGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMTEwLDYgKzExMyw4IEBAIFBh
c3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gU3R5bGVSdWxlQmFzZTo6Y29weSgpIGNvbnN0CiAgICAg
ICAgIHJldHVybiAwOwogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKj4odGhpcyktPmNvcHkoKTsKKyAgICBjYXNl
IEhvc3Q6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVIb3N0Kj4o
dGhpcyktPmNvcHkoKTsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAg
IGNhc2UgS2V5ZnJhbWU6CkBAIC0xNTEsNiArMTU2LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlPiBT
dHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTU3R5bGVTaGVldCogcGFyZW50U2hl
ZXQKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgcnVsZSA9IFdlYktpdENTU0tleWZyYW1l
c1J1bGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihzZWxmKSwgcGFy
ZW50U2hlZXQpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEhvc3Q6CiAgICAgY2FzZSBVbmtu
b3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMjI2LDYgKzIz
MiwyNyBAQCB2b2lkIFN0eWxlUnVsZVBhZ2U6OnNldFByb3BlcnRpZXMoUGFzc1JlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PiBwcm9wZXJ0aWVzKQogICAgIG1fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7
CiB9CiAKK1N0eWxlUnVsZUhvc3Q6OlN0eWxlUnVsZUhvc3QoKQorICAgIDogU3R5bGVSdWxlQmFz
ZShIb3N0KQorICAgICwgbV9jaGlsZChTdHlsZVJ1bGU6OmNyZWF0ZSgwKSkKK3sKK30KKworU3R5
bGVSdWxlSG9zdDo6U3R5bGVSdWxlSG9zdChjb25zdCBTdHlsZVJ1bGVIb3N0JiBvKQorICAgIDog
U3R5bGVSdWxlQmFzZShvKQorICAgICwgbV9jaGlsZChvLm1fY2hpbGQtPmNvcHkoKSkKK3sKK30K
KworU3R5bGVSdWxlSG9zdDo6flN0eWxlUnVsZUhvc3QoKQoreworfQorCit2b2lkIFN0eWxlUnVs
ZUhvc3Q6OnNldFByb3BlcnRpZXMoUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwcm9wZXJ0
aWVzKQoreyAKKyAgICBtX2NoaWxkLT5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMpOworfQorCiBT
dHlsZVJ1bGVGb250RmFjZTo6U3R5bGVSdWxlRm9udEZhY2UoKQogICAgIDogU3R5bGVSdWxlQmFz
ZShGb250RmFjZSwgMCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1
bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAppbmRleCA3ZmMyMGEzMDNmODUz
YWM3NmM5MmVmYjAxNTNmYmZiMzQ3ZjU3MmEwLi5lMjMyZmQ4N2E5Yjg1NDNkOWE0OWMwNTBkZjZk
ZTkxYjQ0NDkxMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCkBAIC00NSw2ICs0NSw3IEBAIHB1
YmxpYzoKICAgICAgICAgUGFnZSwKICAgICAgICAgS2V5ZnJhbWVzLAogICAgICAgICBLZXlmcmFt
ZSwgLy8gTm90IHVzZWQuIFRoZXNlIGFyZSBpbnRlcm5hbGx5IG5vbi1ydWxlIFN0eWxlS2V5ZnJh
bWUgb2JqZWN0cy4KKyAgICAgICAgSG9zdCwKICAgICAgICAgUmVnaW9uID0gMTYKICAgICB9Owog
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7
IH0KQEAgLTU3LDYgKzU4LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTdHlsZVJ1bGUoKSBjb25z
dCB7IHJldHVybiB0eXBlKCkgPT0gU3R5bGU7IH0KICAgICBib29sIGlzUmVnaW9uUnVsZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBSZWdpb247IH0KICAgICBib29sIGlzSW1wb3J0UnVsZSgp
IGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBJbXBvcnQ7IH0KKyAgICBib29sIGlzSG9zdFJ1bGUo
KSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSG9zdDsgfQogCiAgICAgUGFzc1JlZlB0cjxTdHls
ZVJ1bGVCYXNlPiBjb3B5KCkgY29uc3Q7CiAKQEAgLTE1Nyw2ICsxNTksMjIgQEAgcHJpdmF0ZToK
ICAgICBDU1NTZWxlY3Rvckxpc3QgbV9zZWxlY3Rvckxpc3Q7CiB9OwogCitjbGFzcyBTdHlsZVJ1
bGVIb3N0IDogcHVibGljIFN0eWxlUnVsZUJhc2UgeworIHB1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHlsZVJ1bGVIb3N0PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5
bGVSdWxlSG9zdCk7IH0KKworICAgIH5TdHlsZVJ1bGVIb3N0KCk7CisKKyAgICBTdHlsZVJ1bGUq
IGNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQorICAgIHZvaWQgc2V0UHJv
cGVydGllcyhQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+KTsKKworIHByaXZhdGU6CisgICAg
U3R5bGVSdWxlSG9zdCgpOworICAgIFN0eWxlUnVsZUhvc3QoY29uc3QgU3R5bGVSdWxlSG9zdCYp
OworCisgICAgUmVmUHRyPFN0eWxlUnVsZT4gbV9jaGlsZDsKK307CisgCiBjbGFzcyBTdHlsZVJ1
bGVCbG9jayA6IHB1YmxpYyBTdHlsZVJ1bGVCYXNlIHsKIHB1YmxpYzoKICAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMoKSBjb25zdCB7IHJldHVybiBt
X2NoaWxkUnVsZXM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0
Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAK
aW5kZXggOTcwYzgyOGNhMTQwMWRjYjE2Mzg0NDllOTYwMjQzODI3ZWVjMTc5My4uNjI2ZTQ3Yzg0
MjBlN2EwNTI1YjBiZWY1YjhiZDEzNDdhOTc3YzA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlU2hlZXRDb250ZW50cy5jcHAKQEAgLTY1LDYgKzY1LDcgQEAgU3R5bGVTaGVldENvbnRlbnRz
OjpTdHlsZVNoZWV0Q29udGVudHMoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0
cmluZyYKICAgICAsIG1faXNNdXRhYmxlKGZhbHNlKQogICAgICwgbV9pc0luTWVtb3J5Q2FjaGUo
ZmFsc2UpCiAgICAgLCBtX3BhcnNlckNvbnRleHQoY29udGV4dCkKKyAgICAsIG1fbnVtYmVyT2ZI
b3N0UnVsZXMoMCkKIHsKIH0KIApAQCAtODUsNiArODYsNyBAQCBTdHlsZVNoZWV0Q29udGVudHM6
OlN0eWxlU2hlZXRDb250ZW50cyhjb25zdCBTdHlsZVNoZWV0Q29udGVudHMmIG8pCiAgICAgLCBt
X2lzTXV0YWJsZShmYWxzZSkKICAgICAsIG1faXNJbk1lbW9yeUNhY2hlKGZhbHNlKQogICAgICwg
bV9wYXJzZXJDb250ZXh0KG8ubV9wYXJzZXJDb250ZXh0KQorICAgICwgbV9udW1iZXJPZkhvc3RS
dWxlcyhvLm1fbnVtYmVyT2ZIb3N0UnVsZXMpCiB7CiAgICAgQVNTRVJUKG8uaXNDYWNoZWFibGUo
KSk7CiAKQEAgLTEzNCw2ICsxMzYsOCBAQCB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cGFyc2Vy
QXBwZW5kUnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUpCiAgICAgICAgIG1faW1w
b3J0UnVsZXMubGFzdCgpLT5yZXF1ZXN0U3R5bGVTaGVldCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorICAgIGlmIChydWxlLT5pc0hvc3RSdWxlKCkpCisgICAgICAgICsrbV9udW1iZXJPZkhv
c3RSdWxlczsKICAgICBtX2NoaWxkUnVsZXMuYXBwZW5kKHJ1bGUpOwogfQogCkBAIC0xNzcsNiAr
MTgxLDcgQEAgdm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OmNsZWFyUnVsZXMoKQogICAgIG1faW1w
b3J0UnVsZXMuY2xlYXIoKTsKICAgICBtX2NoaWxkUnVsZXMuY2xlYXIoKTsKICAgICBjbGVhckNo
YXJzZXRSdWxlKCk7CisgICAgbV9udW1iZXJPZkhvc3RSdWxlcyA9IDA7CiB9CiAKIHZvaWQgU3R5
bGVTaGVldENvbnRlbnRzOjpwYXJzZXJTZXRFbmNvZGluZ0Zyb21DaGFyc2V0UnVsZShjb25zdCBT
dHJpbmcmIGVuY29kaW5nKQpAQCAtMjE4LDYgKzIyMyw4IEBAIGJvb2wgU3R5bGVTaGVldENvbnRl
bnRzOjp3cmFwcGVySW5zZXJ0UnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUsIHVu
c2lnCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjaGlsZFZlY3RvckluZGV4IC09IG1faW1w
b3J0UnVsZXMuc2l6ZSgpOwogIAorICAgIGlmIChydWxlLT5pc0hvc3RSdWxlKCkpCisgICAgICAg
ICsrbV9udW1iZXJPZkhvc3RSdWxlczsKICAgICBtX2NoaWxkUnVsZXMuaW5zZXJ0KGNoaWxkVmVj
dG9ySW5kZXgsIHJ1bGUpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjQyLDYgKzI0OSw5IEBA
IHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjp3cmFwcGVyRGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRl
eCkKICAgICB9CiAgICAgY2hpbGRWZWN0b3JJbmRleCAtPSBtX2ltcG9ydFJ1bGVzLnNpemUoKTsK
IAorICAgIGlmIChtX2NoaWxkUnVsZXMuYXQoY2hpbGRWZWN0b3JJbmRleCktPmlzSG9zdFJ1bGUo
KSkKKyAgICAgICAgLS1tX251bWJlck9mSG9zdFJ1bGVzOworCiAgICAgbV9jaGlsZFJ1bGVzLnJl
bW92ZShjaGlsZFZlY3RvckluZGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlU2hlZXRDb250ZW50cy5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRD
b250ZW50cy5oCmluZGV4IDdkZjM0YjcwMzIyNzI1OTc2ZTVjN2YxNWQwODM4MDI2NGNiN2VmMGUu
LmEzMWNiYzFkNzVmZTg4NTVkZjEwMDU4NWViZmNjZWMzMTg3NzE3ZGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmgKQEAgLTk5LDYgKzk5LDcgQEAgcHVibGljOgogICAg
IC8vIFJ1bGVzIG90aGVyIHRoYW4gQGNoYXJzZXQgYW5kIEBpbXBvcnQuCiAgICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzKCkgY29uc3QgeyByZXR1cm4g
bV9jaGlsZFJ1bGVzOyB9CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+
ID4mIGltcG9ydFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRSdWxlczsgfQorICAgIGJv
b2wgaGFzSG9zdFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9mSG9zdFJ1bGVzID4gMDsg
fQogCiAgICAgdm9pZCBub3RpZnlMb2FkZWRTaGVldChjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0
Kik7CiAgICAgCkBAIC0xNjMsNiArMTY0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNJbk1l
bW9yeUNhY2hlIDogMTsKICAgICAKICAgICBDU1NQYXJzZXJDb250ZXh0IG1fcGFyc2VyQ29udGV4
dDsKKyAgICBpbnQgbV9udW1iZXJPZkhvc3RSdWxlczsKIAogICAgIFZlY3RvcjxDU1NTdHlsZVNo
ZWV0Kj4gbV9jbGllbnRzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFk
b3dSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAppbmRleCBiOWM0
ODFjMTg5ODY0ODFlMTliNjI2ZjY5NGMyMDZkZjEyMjE0NzRkLi40YjM3MWRlY2IwNmFiNzg4ZmY5
OTJiN2QxZGNiNWQwMmU5YzliZDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hh
ZG93Um9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCkBAIC01
NSw2ICs1NSw3IEBAIFNoYWRvd1Jvb3Q6OlNoYWRvd1Jvb3QoRG9jdW1lbnQqIGRvY3VtZW50KQog
ICAgICwgbV9hcHBseUF1dGhvclN0eWxlcyhmYWxzZSkKICAgICAsIG1fcmVzZXRTdHlsZUluaGVy
aXRhbmNlKGZhbHNlKQogICAgICwgbV9pbnNlcnRpb25Qb2ludEFzc2lnbmVkVG8oMCkKKyAgICAs
IG1fbnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hpbGRyZW4oMCkKIHsKICAgICBBU1NFUlQoZG9jdW1l
bnQpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKaW5kZXggZDliNDI1YzYwODNiMTdhZjg4
MjZlNjE2NDI3ODFmNTUyNTA3NTI1MC4uMmU1MTZmYjFiYjRjZWY3YjYzZGYyNmI2NDM3ZDRmZTU3
YzAzYjZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCkBAIC04OSw2ICs4OSwxMCBAQCBwdWJs
aWM6CiAgICAgSW5zZXJ0aW9uUG9pbnQqIGFzc2lnbmVkVG8oKSBjb25zdDsKICAgICB2b2lkIHNl
dEFzc2lnbmVkVG8oSW5zZXJ0aW9uUG9pbnQqKTsKIAorICAgIHZvaWQgcmVnaXN0ZXJTaGFkb3dF
bGVtZW50KCkgeyArK21fbnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hpbGRyZW47IH0KKyAgICB2b2lk
IHVucmVnaXN0ZXJTaGFkb3dFbGVtZW50KCkgeyAtLW1fbnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hp
bGRyZW47IH0KKyAgICBib29sIGhhc1NoYWRvd0luc2VydGlvblBvaW50KCkgY29uc3QgeyByZXR1
cm4gbV9udW1iZXJPZlNoYWRvd0VsZW1lbnRDaGlsZHJlbiA+IDA7IH0KKwogI2lmbmRlZiBOREVC
VUcKICAgICBTaGFkb3dSb290VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAj
ZW5kaWYKQEAgLTEwNiw2ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hcHBseUF1dGhv
clN0eWxlcyA6IDE7CiAgICAgYm9vbCBtX3Jlc2V0U3R5bGVJbmhlcml0YW5jZSA6IDE7CiAgICAg
SW5zZXJ0aW9uUG9pbnQqIG1faW5zZXJ0aW9uUG9pbnRBc3NpZ25lZFRvOworICAgIHNpemVfdCBt
X251bWJlck9mU2hhZG93RWxlbWVudENoaWxkcmVuOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIFNo
YWRvd1Jvb3RUeXBlIG1fdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFN0eWxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQu
Y3BwCmluZGV4IDI2OTkwYTVkZjI4NGE5N2M2YTI0MWY1YzcwYTI4ZWI4ZDg3N2U5MTguLjAwYTQz
YzJlNGI5N2QwYmI0OTM3ZDI5YTcyMDE4MjlhZTNjMzRlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU3R5bGVFbGVtZW50LmNwcApAQCAtMTQ1LDYgKzE0NSw3IEBAIHZvaWQgSFRNTFN0eWxl
RWxlbWVudDo6cmVnaXN0ZXJXaXRoU2NvcGluZ05vZGUoYm9vbCBzY29wZWQpCiAgICAgfQogCiAg
ICAgc2NvcGUtPnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKKwogICAgIHNjb3BlLT5z
ZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQo
KS0+cGFyc2luZygpICYmIGRvY3VtZW50KCktPnJlbmRlcmVyKCkpCiAgICAgICAgIGRvY3VtZW50
KCktPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuY3BwCmluZGV4IDkzODQzOTYx
MmNhMjFkMjY5ZTU3NzhhOTZiMTU5ODBlZjc1NDJiOWEuLjVjNWRiZTk0ZmZlNDQ2ZTZmZTBiNjNm
NmQwZTdlYjYzZTY0OTNlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L0hUTUxTaGFkb3dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9I
VE1MU2hhZG93RWxlbWVudC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgRG9jdW1lbnQ7CiAK
IGlubGluZSBIVE1MU2hhZG93RWxlbWVudDo6SFRNTFNoYWRvd0VsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogSW5zZXJ0aW9uUG9p
bnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBtX3JlZ2lzdGVyZWRXaXRoU2hhZG93Um9vdChm
YWxzZSkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShIVE1MTmFtZXM6OnNoYWRvd1RhZykpOwog
fQpAQCAtNjgsNCArNjksMzEgQEAgYm9vbCBIVE1MU2hhZG93RWxlbWVudDo6ZG9lc1NlbGVjdEZy
b21Ib3N0Q2hpbGRyZW4oKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorTm9kZTo6SW5z
ZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MU2hhZG93RWxlbWVudDo6aW5zZXJ0ZWRJbnRv
KENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQoreworICAgIEluc2VydGlvblBvaW50Ojpp
bnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOworCisgICAgaWYgKGluc2VydGlvblBvaW50LT5p
bkRvY3VtZW50KCkgJiYgaXNBY3RpdmUoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9v
dCA9IHNoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgcm9vdC0+cmVnaXN0ZXJTaGFkb3dFbGVt
ZW50KCk7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRXaXRoU2hhZG93Um9vdCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKK30KKwordm9pZCBI
VE1MU2hhZG93RWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9p
bnQpCit7CisgICAgaWYgKGluc2VydGlvblBvaW50LT5pbkRvY3VtZW50KCkgJiYgbV9yZWdpc3Rl
cmVkV2l0aFNoYWRvd1Jvb3QpIHsKKyAgICAgICAgU2hhZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jv
b3QoKTsKKyAgICAgICAgaWYgKCFyb290KQorICAgICAgICAgICAgcm9vdCA9IGluc2VydGlvblBv
aW50LT5zaGFkb3dSb290KCk7CisgICAgICAgIGlmIChyb290KQorICAgICAgICAgICAgcm9vdC0+
dW5yZWdpc3RlclNoYWRvd0VsZW1lbnQoKTsKKyAgICAgICAgbV9yZWdpc3RlcmVkV2l0aFNoYWRv
d1Jvb3QgPSBmYWxzZTsKKyAgICB9CisgICAgSW5zZXJ0aW9uUG9pbnQ6OnJlbW92ZWRGcm9tKGlu
c2VydGlvblBvaW50KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmgKaW5kZXggYTRlY2RiM2FkNDVm
YjhlYzRlOWFhNTAwMGEwMWUzYWVkMWNkMjBkYy4uMTE5ZmE5Zjk1ZGVmNjI3NDE2MmNiMTg4OTQ5
ZmQ0NzFhYWRiZmI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRN
TFNoYWRvd0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MU2hh
ZG93RWxlbWVudC5oCkBAIC00Niw4ICs0NiwxNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1NlbGVj
dFZhbGlkKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGJvb2wgZG9lc1Nl
bGVjdEZyb21Ib3N0Q2hpbGRyZW4oKSBjb25zdDsKIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSop
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlKikg
T1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgSFRNTFNoYWRvd0VsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICBib29sIG1fcmVnaXN0ZXJlZFdpdGhTaGFkb3dS
b290OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGVlMmE3MGU1ZmI3MDkz
NTBmNDVjYTAwNmNmZjk5NzY5Y2ZkZDc3OWQuLjkyNTU3MmZjMzM4NDU0MDM1NWY5NmNmYjA5NWRk
MTE2ZmU1OWQ1ODggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wOC0wMSAgVGFrYXNoaSBT
YWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01dIE5lZWRz
IEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3BzZXVkby1ob3N0LWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L3BzZXVkby1ob3N0
Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTA4LTAxICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0Bn
bWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBHVEsgZ2FyZGVuaW5nLCBhZGRpbmcgYW4g
aW1hZ2UgZmFpbHVyZSBleHBlY3RhdGlvbiBmb3IgYQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2hhZG93L3BzZXVkby1ob3N0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL3NoYWRvdy9wc2V1ZG8taG9zdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzc1YzZh
NzlmNGZkYmY1YjUxZmM5ZDY4NzA4YjFjZGU0MmM4MWRkNAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8taG9zdC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMyBAQAoraG9zdDogcmdiKDI1NSwgMCwgMCkKK2hvc3Q6IHJnYigyNTUsIDAsIDApCito
b3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAxMjgpCitob3N0OiByZ2Io
MCwgMCwgMjU1KQoraG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigxMjgsIDEyOCwgMTI4
KQoraG9zdDogcmdiKDI1NSwgMjU1LCAwKQoraG9zdDogcmdiKDI1NSwgMCwgMCkKK25lc3RlZEhv
c3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdDogcmdiKDI1NSwg
MjU1LCAwKQorSGVsbG8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9w
c2V1ZG8taG9zdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1ob3N0
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uN2EyMjk5MWRkYjlhMWU2YWEzMzRiYTg1M2UzMGQwMDQxYTRkMTJl
MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8t
aG9zdC5odG1sCkBAIC0wLDAgKzEsMTY5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+Cis8c3R5bGU+CisjaG9zdCB7CisgIGNvbG9yOiBncmF5OworfQorPC9zdHlsZT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9wb2x5ZmlsbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZnVu
Y3Rpb24gZHVtcENvbXB1dGVkU3R5bGUobm9kZSkKK3sKKyAgICBkZWJ1Zyhub2RlLmlkICsgIjog
IiArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0
UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7Cit9CisKK2Z1bmN0aW9uIHByZXByb2Nlc3NGb3JUZXN0
KCkKK3sKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcmVudCIp
OworICAgIHBhcmVudC5pbm5lckhUTUwgPSAnPGRpdiBpZD0iaG9zdCI+PHNwYW4+SGVsbG88L3Nw
YW4+PC9kaXY+JzsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZUNvbnRlbnRDYXNlKCkKK3sKKyAg
ICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9z
dCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogcmVkOyB9
PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0
KTsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZVNoYWRvd0Nhc2UoKQoreworICAgIHByZXByb2Nl
c3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9z
dCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBz
aGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxz
aGFkb3c+PC9zaGFkb3c+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVu
Y3Rpb24gdGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVkKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVz
dCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAg
ICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93Lmlu
bmVySFRNTCA9ICI8ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBjb2xvcjogcmVkOyB9PC9zdHls
ZT48c2hhZG93Pjwvc2hhZG93PjxkaXY+PHN0eWxlIHNjb3BlZD5AaG9zdCB7IGNvbG9yOiBibHVl
OyB9PC9zdHlsZT48L2Rpdj48L2Rpdj4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOwor
fQorCitmdW5jdGlvbiB0ZXN0UHNldWRvSG9zdFdpdGhGYWxsYmFja1NoYWRvdygpCit7CisgICAg
cHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290
KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhv
c3QpOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6
IHJlZDsgfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgeW91bmdlc3RTaGFkb3cu
aW5uZXJIVE1MID0gIjxjb250ZW50PjxzaGFkb3c+PC9zaGFkb3c+PC9jb250ZW50PiI7CisgICAg
ZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RUd29TaGFkb3dSb290
c0Nhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcg
V2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2Vi
S2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHls
ZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAg
IHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogYmx1ZTsg
fTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3Qp
OworfQorCitmdW5jdGlvbiB0ZXN0VHdvU2hhZG93Um9vdHNDcmVhdGluZ0RpZmZlcmVudE9yZGVy
Q2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBX
ZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJL
aXRTaGFkb3dSb290KGhvc3QpOworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5
bGU+QGhvc3QgeyBjb2xvcjogYmx1ZTsgfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAg
IG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IHJlZDsgfTwv
c3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3RzV2l0aEluZXJ0U2hhZG93Q29u
dGVudCgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBX
ZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciBvbGRlclNoYWRvdyA9IG5ldyBXZWJLaXRT
aGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jv
b3QoaG9zdCk7CisKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHNoYWRvdz48L3No
YWRvdz4iOworICAgIHlvdW5nZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxjb250ZW50PjwvY29udGVu
dD4iOworICAgIG9sZGVyU2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjog
Z3JlZW47IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5u
ZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxjb250ZW50Pjwv
Y29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0
ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvdygpCit7CisgICAgcHJlcHJvY2Vz
c0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0
Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOwor
ICAgIHZhciBvbGRlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZh
ciB5b3VuZ2VyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlv
dW5nZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisKKyAgICB5b3VuZ2Vz
dFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IHllbGxvdzsgfTwvc3R5
bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIHlvdW5nZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxz
dHlsZT5AaG9zdCB7IGNvbG9yOiBibHVlOyB9PC9zdHlsZT48ZGl2PmluZXJ0PC9kaXY+IjsKKyAg
ICBvbGRlclNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IGdyZWVuOyB9
PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9
ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+
IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdE5lc3Rl
ZENhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvdXRlclNoYWRvdyA9IG5ldyBX
ZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG91dGVyU2hhZG93LmlubmVySFRNTCA9ICc8c3R5
bGU+QGhvc3QgeyBjb2xvcjogcmVkOyB9PC9zdHlsZT48ZGl2IGlkPSJuZXN0ZWRIb3N0Ij5Jbm5l
clNoYWRvdzwvZGl2Pic7CisgICAgdmFyIG5lc3RlZCA9IG91dGVyU2hhZG93LmdldEVsZW1lbnRC
eUlkKCJuZXN0ZWRIb3N0Iik7CisgICAgdmFyIGlubmVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QobmVzdGVkKTsKKyAgICBpbm5lclNoYWRvdy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0
IHsgY29sb3I6IGJsdWU7IH08L3N0eWxlPlNob3cgPHNoYWRvdz48L3NoYWRvdz4gaW4gb3V0ZXIu
JzsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShu
ZXN0ZWQpOworfQorCitmdW5jdGlvbiB0ZXN0SG9zdFZzU2NvcGVkU3R5bGUoKQoreworICAgIHBy
ZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiaG9zdCIpOworICAgIGhvc3QuaW5uZXJIVE1MID0gIjxzdHlsZSBzY29wZWQ+I2hvc3QgeyBj
b2xvcjogeWVsbG93OyB9PC9zdHlsZT48c3Bhbj5IZWxsbzwvc3Bhbj4iOworICAgIHZhciBzaGFk
b3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0g
IjxzdHlsZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4i
OworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0SG9zdFZz
SW5saW5lU3R5bGUoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3Qg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIGhvc3Quc3R5bGUuY29sb3Ig
PSAieWVsbG93IjsKKyAgICBob3N0LmlubmVySFRNTCA9ICI8c3Bhbj5IZWxsbzwvc3Bhbj4iOwor
ICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cu
aW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxjb250ZW50
PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlv
biBydW5UZXN0cygpCit7CisgICAgdGVzdFNpbXBsZUNvbnRlbnRDYXNlKCk7CisgICAgdGVzdFNp
bXBsZVNoYWRvd0Nhc2UoKTsKKyAgICB0ZXN0UHNldWRvSG9zdFdpdGhTY29wZWQoKTsKKyAgICB0
ZXN0UHNldWRvSG9zdFdpdGhGYWxsYmFja1NoYWRvdygpOworICAgIHRlc3RUd29TaGFkb3dSb290
c0Nhc2UoKTsKKyAgICB0ZXN0VHdvU2hhZG93Um9vdHNDcmVhdGluZ0RpZmZlcmVudE9yZGVyQ2Fz
ZSgpOworICAgIHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3RzV2l0aEluZXJ0U2hhZG93Q29udGVudCgp
OworICAgIHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3RzV2l0aEluZXJ0U2hhZG93KCk7CisgICAgdGVz
dE5lc3RlZENhc2UoKTsKKyAgICB0ZXN0SG9zdFZzU2NvcGVkU3R5bGUoKTsKKyAgICB0ZXN0SG9z
dFZzSW5saW5lU3R5bGUoKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJy
dW5UZXN0cygpIj4KKyAgPGRpdiBpZD0icGFyZW50Ij4KKyAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155769</attachid>
            <date>2012-08-01 03:11:30 -0700</date>
            <delta_ts>2012-08-07 03:19:07 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-88606-20120801191112.patch</filename>
            <type>text/plain</type>
            <size>30216</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2YyZTg1N2Q4ZTQ0MDYz
YTY5MWRmNzE5OTNmNjc3ZDIzODFjNzg3NC4uMWIwMGUxOTljYWZiNzVkNGNhZmY4NDYzODIyZTAw
ZTgyOTVjMjVhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTA4LTAxICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0g
TmVlZHMgQGhvc3QgcnVsZSBmb3IgU2hhZG93RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjA2CisKKyAgICAgICAgSW1wbGVtZW50
ZWQgQGhvc3QtQHJ1bGVzIGFjY29yZGluZyB0byB0aGUgc2hhZG93IGRvbSBzcGVjOgorICAgICAg
ICBodHRwOi8vZHZjcy53My5vcmcvaGcvd2ViY29tcG9uZW50cy9yYXctZmlsZS90aXAvc3BlYy9z
aGFkb3cvaW5kZXguaHRtbCNob3N0LWF0LXJ1bGUKKyAgICAgICAgVGhlIGRlc2lnbiBkb2MgaXM6
CisgICAgICAgIGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVAyeW9yY2hGOGxj
aTJzY2NyLW1WU1JmMmR0dmpLZWl1eVFXekNCMmJFQTgvZWRpdAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9wc2V1
ZG8taG9zdC5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhbW1hci55OgorICAgICAgICAqIGNz
cy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRlY3RBdFRv
a2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUpOgorICAg
ICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGRIb3N0UnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp0cmFuc2Zlck1hdGNoZWRSdWxlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXRIb3N0UnVsZUZvclNjb3BlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoZXNIb3N0UnVsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyk6CisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNz
cy9TdHlsZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJv
eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjb3B5KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUnVsZUhvc3Q6On5TdHlsZVJ1bGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVs
ZUhvc3Q6OnNldFByb3BlcnRpZXMpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmlzSG9zdFJ1bGUpOgorICAgICAgICAoU3R5bGVS
dWxlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0OjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y2hpbGQpOgorICAgICAgICAqIGRvbS9TaGFk
b3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OlNoYWRvd1Jvb3QpOgor
ICAgICAgICAqIGRvbS9TaGFkb3dSb290Lmg6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290
OjpyZWdpc3RlclNoYWRvd0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6
dW5yZWdpc3RlclNoYWRvd0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6
aGFzU2hhZG93SW5zZXJ0aW9uUG9pbnQpOgorICAgICAgICAoU2hhZG93Um9vdCk6CisgICAgICAg
ICogaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFNoYWRvd0VsZW1lbnQ6OkhUTUxTaGFkb3dFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTaGFkb3dFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFNoYWRvd0VsZW1lbnQ6OnJlbW92ZWRGcm9tKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9IVE1M
U2hhZG93RWxlbWVudC5oOgorCiAyMDEyLTA4LTAxICBLd2FuZyBZdWwgU2VvICA8c2t5dWxAY29t
cGFueTEwMC5uZXQ+CiAKICAgICAgICAgTWFrZSBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRl
SFRNTEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKikgcHJpdmF0ZS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1h
ci55CmluZGV4IDk5NjhlNzY2MDA3ZWVmMTdhYTE2OTZmYjAyZTRmZjc0ZDM0MmYxMDIuLmU3MjIy
NDk0NjA2NDk3NjFiYmM4MjgyZTI0ZDQ3MTVmZjQxNDFkMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1t
YXIueQpAQCAtMTMyLDYgKzEzMiw3IEBAIHN0YXRpYyBpbnQgY3NzeXlsZXgoWVlTVFlQRSogeXls
dmFsLCBDU1NQYXJzZXIqIHBhcnNlcikKICV0b2tlbiBQQUdFX1NZTQogJXRva2VuIE1FRElBX1NZ
TQogJXRva2VuIEZPTlRfRkFDRV9TWU0KKyV0b2tlbiBIT1NUX1NZTQogJXRva2VuIENIQVJTRVRf
U1lNCiAldG9rZW4gTkFNRVNQQUNFX1NZTQogJXRva2VuIFZBUkZVTkNUSU9OCkBAIC0yMTksNiAr
MjIwLDcgQEAgc3RhdGljIGludCBjc3N5eWxleChZWVNUWVBFKiB5eWx2YWwsIENTU1BhcnNlciog
cGFyc2VyKQogJXR5cGUgPHJ1bGU+IHBhZ2UKICV0eXBlIDxydWxlPiBtYXJnaW5fYm94CiAldHlw
ZSA8cnVsZT4gZm9udF9mYWNlCisldHlwZSA8cnVsZT4gaG9zdAogJXR5cGUgPHJ1bGU+IGtleWZy
YW1lcwogJXR5cGUgPHJ1bGU+IGludmFsaWRfcnVsZQogJXR5cGUgPHJ1bGU+IHNhdmVfYmxvY2sK
QEAgLTQxOSw2ICs0MjEsNyBAQCB2YWxpZF9ydWxlOgogICB8IG5hbWVzcGFjZQogICB8IGltcG9y
dAogICB8IHJlZ2lvbgorICB8IGhvc3QKICAgOwogCiBydWxlOgpAQCAtODQxLDYgKzg0NCwxNiBA
QCBmb250X2ZhY2U6CiAgICAgfQogOwogCitob3N0OgorICAgIEhPU1RfU1lNIG1heWJlX3NwYWNl
ICd7JyBtYXliZV9zcGFjZSBkZWNsYXJhdGlvbl9saXN0IGNsb3NpbmdfYnJhY2UgeworICAgICAg
ICBpZiAoJDUpIHsKKyAgICAgICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFy
c2VyKS0+Y3JlYXRlSG9zdFJ1bGUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQk
ID0gMDsKKyAgICAgICAgfQorICAgIH0KKzsKKyAKIHJlZ2lvbl9zZWxlY3RvcjoKICAgICBzZWxl
Y3Rvcl9saXN0IHsKICAgICAgICAgaWYgKCQxKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmlu
ZGV4IDExOTFiODYyMGMwMDYzODRkMjhiN2UxNzQwZWM4YzVhYzY1NTg4MmQuLmZlNjAwNWZiMzNl
MzkwNzhjNjBhODRiNWE2YzYzYzI0ZWE4OWM0MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3Bw
CkBAIC04NzUwLDYgKzg3NTAsMTEgQEAgaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpkZXRlY3RBdFRv
a2VuKGludCBsZW5ndGgsIGJvb2wgaGFzRXNjYXBlKQogICAgICAgICAgICAgbV90b2tlbiA9IEZP
TlRfRkFDRV9TWU07CiAgICAgICAgIHJldHVybjsKIAorICAgIGNhc2UgJ2gnOgorICAgICAgICBp
ZiAobGVuZ3RoID09IDUgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIm9zdCIp
KQorICAgICAgICAgICAgbV90b2tlbiA9IEhPU1RfU1lNOworICAgICAgICByZXR1cm47CisKICAg
ICBjYXNlICdpJzoKICAgICAgICAgaWYgKGxlbmd0aCA9PSA3ICYmIGlzRXF1YWxUb0NTU0lkZW50
aWZpZXIobmFtZSArIDIsICJtcG9ydCIpKSB7CiAgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0g
TWVkaWFRdWVyeU1vZGU7CkBAIC05NTgwLDYgKzk1ODUsMTcgQEAgU3R5bGVSdWxlQmFzZSogQ1NT
UGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1N0
eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUoKQoreworICAgIG1fYWxsb3dJ
bXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKKyAgICBS
ZWZQdHI8U3R5bGVSdWxlSG9zdD4gcnVsZSA9IFN0eWxlUnVsZUhvc3Q6OmNyZWF0ZSgpOworICAg
IHJ1bGUtPnNldFByb3BlcnRpZXMoY3JlYXRlU3R5bGVQcm9wZXJ0eVNldCgpKTsKKyAgICBjbGVh
clByb3BlcnRpZXMoKTsKKyAgICBTdHlsZVJ1bGVIb3N0KiByZXN1bHQgPSBydWxlLmdldCgpOwor
ICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiB2b2lkIENTU1BhcnNlcjo6YWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSkKIHsKICAgICBpZiAoIW1fc3R5bGVT
aGVldCB8fCAhbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
aAppbmRleCA2YWNiYmEyNTI5MzA1NWExNjMzOTJmMThkNjc3ZTFhOGE1NmE4NGIzLi41ZDIzMGRl
OWQzMmMyNjllYzA5YjU1YjY4NDEyNDJkNGU0M2U1OTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5o
CkBAIC0yNjUsNiArMjY1LDcgQEAgcHVibGljOgogICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZVBh
Z2VSdWxlKFBhc3NPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxlY3Rvcik7CiAgICAg
U3R5bGVSdWxlQmFzZSogY3JlYXRlUmVnaW9uUnVsZShWZWN0b3I8T3duUHRyPENTU1BhcnNlclNl
bGVjdG9yPiA+KiByZWdpb25TZWxlY3RvciwgUnVsZUxpc3QqIHJ1bGVzKTsKICAgICBTdHlsZVJ1
bGVCYXNlKiBjcmVhdGVNYXJnaW5BdFJ1bGUoQ1NTU2VsZWN0b3I6Ok1hcmdpbkJveFR5cGUpOwor
ICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZUhvc3RSdWxlKCk7CiAgICAgdm9pZCBzdGFydERlY2xh
cmF0aW9uc0Zvck1hcmdpbkJveCgpOwogICAgIHZvaWQgZW5kRGVjbGFyYXRpb25zRm9yTWFyZ2lu
Qm94KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCA4OTViYzhlMTQ1
MjI2MzRmZWQyMzA3MWU5YTc0NGRkMThhNmQzNmM3Li4wNTNhNzA2MTM0MTM3MTYxZjk1MDQzNDI3
NWUyNDI4MWY5NzNjZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC02
MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiQ291bnRlci5oIgogI2luY2x1ZGUgIkNvdW50ZXJDb250
ZW50LmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cu
aCIKICNpbmNsdWRlICJGb250RmVhdHVyZVZhbHVlLmgiCiAjaW5jbHVkZSAiRm9udFZhbHVlLmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTIzNiw3ICsyMzcsNyBAQCBwcml2YXRlOgogICAgIC8v
IFVzZSBwbGFpbiBhcnJheSBpbnN0ZWFkIG9mIGEgVmVjdG9yIHRvIG1pbmltaXplIG1lbW9yeSBv
dmVyaGVhZC4KICAgICB1bnNpZ25lZCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNo
ZXNbbWF4aW11bUlkZW50aWZpZXJDb3VudF07CiB9OwotICAgIAorCiBzdHJ1Y3QgU2FtZVNpemVB
c1J1bGVEYXRhIHsKICAgICB2b2lkKiBhOwogICAgIHZvaWQqIGI7CkBAIC01MzIsNyArNTMzLDcg
QEAgaW5saW5lIFJ1bGVTZXQqIFN0eWxlUmVzb2x2ZXI6OnJ1bGVTZXRGb3JTY29wZShjb25zdCBD
b250YWluZXJOb2RlKiBzY29wZSkgY29uc3QKICAgICBpZiAoIXNjb3BlLT5oYXNTY29wZWRIVE1M
U3R5bGVDaGlsZCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBTY29wZWRSdWxlU2V0TWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmZpbmQoc2NvcGUpOwotICAg
IHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0
KCkgOiAwOyAKKyAgICByZXR1cm4gaXQgIT0gbV9zY29wZWRBdXRob3JTdHlsZXMuZW5kKCkgPyBp
dC0+c2Vjb25kLmdldCgpIDogMDsKIH0KICNlbmRpZgogCkBAIC01NjYsMTIgKzU2NywzNCBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVkIGZpcnN0
TmV3LCBjb25zdCBWZWN0b3I8UmVmUAogICAgIH0KICAgICBtX2F1dGhvclN0eWxlLT5zaHJpbmtU
b0ZpdCgpOwogICAgIGNvbGxlY3RGZWF0dXJlcygpOwotICAgIAorCiAgICAgaWYgKGRvY3VtZW50
KCktPnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKSkKICAgICAg
ICAgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2Vs
ZWN0b3IoKSk7CiB9CiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQordm9pZCBTdHlsZVJlc29s
dmVyOjphZGRIb3N0UnVsZShTdHlsZVJ1bGVIb3N0KiBob3N0UnVsZSwgYm9vbCBoYXNEb2N1bWVu
dFNlY3VyaXR5T3JpZ2luLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKK3sKKyAgICBzdGF0
aWMgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gbmV3IENTU1NlbGVjdG9yOworCisgICAgaWYgKCFz
Y29wZSB8fCAhc2NvcGUtPmlzSW5TaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzY29wZS0+c2hhZG93Um9vdCgpOworICAgIGlmICgh
c2hhZG93Um9vdCkKKyAgICAgICAgcmV0dXJuOworICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNo
YWRvd0hvc3QgPSBzaGFkb3dSb290LT5ob3N0KCk7CisgICAgaWYgKCFzaGFkb3dIb3N0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBBdEhvc3RSdWxlRGF0YU1hcDo6QWRkUmVzdWx0IGFkZFJlc3Vs
dCA9IG1fYXRIb3N0UnVsZXMuYWRkKHNoYWRvd1Jvb3QsIG51bGxwdHIpOworICAgIGlmIChhZGRS
ZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBh
ZG9wdFB0cihuZXcgVmVjdG9yPFJ1bGVEYXRhPik7CisKKyAgICBSdWxlRGF0YSBydWxlRGF0YSho
b3N0UnVsZS0+Y2hpbGQoKSwgc2VsZWN0b3IsIDAsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4s
IHRydWUsIGZhbHNlKTsKKyAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YXBwZW5kKHJ1
bGVEYXRhKTsKK30KKwogdm9pZCBTdHlsZVJlc29sdmVyOjpzZXR1cFNjb3BlU3RhY2soY29uc3Qg
Q29udGFpbmVyTm9kZSogcGFyZW50KQogewogICAgIC8vIFRoZSBzY29waW5nIGVsZW1lbnQgc3Rh
Y2sgc2hvdWxkbid0IGJlIHVzZWQgaWYgPHN0eWxlIHNjb3BlZD4gaXNuJ3QgdXNlZCBhbnl3aGVy
ZS4KQEAgLTkxOCwxMyArOTQxLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hp
bmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGUKICAgICB9CiB9
CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNo
UmVzdWx0JiByZXN1bHQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnRyYW5zZmVyTWF0Y2hlZFJ1bGVz
KE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7Ci0gICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc29ydE1hdGNoZWRSdWxlcygpOwotCiAgICAgaWYg
KG1fY2hlY2tlci5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpIHsK
ICAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQogICAgICAgICAgICAgbV9ydWxlTGlzdCA9IFN0YXRp
Y0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKQEAgLTk0Niw2ICs5NjQsMTUgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkK
ICAgICB9CiB9CiAKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1
bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCit7CisgICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc29ydE1hdGNoZWRSdWxlcygpOworICAgIHRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7Cit9CisKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0
Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0
eVJ1bGVzKQogewogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCkBAIC05OTMsNiArMTAyMCw2MSBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQm
IHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdAogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoU1RZTEVf
U0NPUEVEKQoraW5saW5lIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIFN0eWxlUmVzb2x2ZXI6OmF0
SG9zdFJ1bGVGb3JTY29wZShjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQoreworICAgIEF0
SG9zdFJ1bGVEYXRhTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYXRIb3N0UnVsZXMuZmluZChz
aGFkb3dSb290KTsKKyAgICByZXR1cm4gaXQgIT0gbV9hdEhvc3RSdWxlcy5lbmQoKSA/IGl0LT5z
ZWNvbmQuZ2V0KCkgOiAwOyAKK30KKworYm9vbCBTdHlsZVJlc29sdmVyOjptYXRjaGVzSG9zdFJ1
bGVzKCkKK3sKKyAgICBpZiAobV9hdEhvc3RSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IG1fZWxlbWVudC0+c2hhZG93
KCk7CisgICAgaWYgKCFzaGFkb3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKFNo
YWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFk
b3dSb290OyBzaGFkb3dSb290ID0gc2hhZG93Um9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsKKyAg
ICAgICAgaWYgKGF0SG9zdFJ1bGVGb3JTY29wZShzaGFkb3dSb290KSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAoIXNoYWRvd1Jvb3QtPmhhc1NoYWRvd0luc2VydGlvblBv
aW50KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
I2VuZGlmCisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQm
IHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3sKKyNpZiBFTkFCTEUoU1RZTEVfU0NP
UEVEKQorICAgIGlmIChtX2F0SG9zdFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRWxlbWVudFNoYWRvdyogc2hhZG93ID0gbV9lbGVtZW50LT5zaGFkb3coKTsKKyAgICBp
ZiAoIXNoYWRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPGNvbnN0IFZlY3RvcjxS
dWxlRGF0YT4qLCAxNj4gbWF0Y2hlZFJ1bGVzOyAKKyAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRv
d1Jvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dSb290OyBzaGFkb3dS
b290ID0gc2hhZG93Um9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsgCisgICAgICAgIGlmIChjb25z
dCBWZWN0b3I8UnVsZURhdGE+KiBydWxlID0gYXRIb3N0UnVsZUZvclNjb3BlKHNoYWRvd1Jvb3Qp
KQorICAgICAgICAgICAgbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsKKyAgICAgICAgaWYgKCFz
aGFkb3dSb290LT5oYXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGlmIChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgb3B0
aW9ucy5zY29wZSA9IG1fZWxlbWVudDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRjaGVkUnVs
ZXMuc2l6ZSgpOyBpID4gMDsgLS1pKQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QobWF0Y2hlZFJ1bGVzLmF0KGktMSksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBy
ZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHJlc3VsdCk7CisgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyNl
bmRpZgorfQorCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1
bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKICAgICBtX21hdGNoZWRSdWxl
cy5jbGVhcigpOwpAQCAtMTAwNyw4ICsxMDg5LDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0
Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVz
CiAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV9hdXRob3JTdHlsZS5nZXQoKSwg
cmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUsIG9wdGlvbnMpOwogCiAgICAgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhyZXN1bHQsIGluY2x1
ZGVFbXB0eVJ1bGVzKTsKKyAgICBpZiAoIW1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgc29ydE1hdGNoZWRSdWxlcygpOwogCi0gICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVz
KHJlc3VsdCk7CisgICAgbWF0Y2hIb3N0UnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7
CisgICAgaWYgKCFtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHRyYW5zZmVyTWF0
Y2hlZFJ1bGVzKHJlc3VsdCk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKQEAgLTE1Njgs
NiArMTY1NCwxMSBAQCBSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5
bGUoKQogICAgIC8vIENhbid0IHNoYXJlIGlmIGF0dHJpYnV0ZSBydWxlcyBhcHBseS4KICAgICBp
ZiAobWF0Y2hlc1J1bGVTZXQobV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQuZ2V0KCkpKQogICAg
ICAgICByZXR1cm4gMDsKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIC8vIENhbid0IHNo
YXJlIGlmIEBob3N0IEAtcnVsZXMgYXBwbHkuCisgICAgaWYgKG1hdGNoZXNIb3N0UnVsZXMoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisjZW5kaWYKICAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCBy
ZXF1aXJlcyB1bmlxdWUgc3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0
aGUgc2libGluZyBydWxlIG1hdGNoIGFib3ZlLgogICAgIGlmIChwYXJlbnRTdHlsZVByZXZlbnRz
U2hhcmluZyhtX3BhcmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNzM5LDYgKzI4
MzAsMTAgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVu
dHMqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHUKICAgICAgICAgICAgIGFkZFJlZ2lvblJ1
bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUmVnaW9uKj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4pOwogICAgICAgICB9CiAjZW5kaWYKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQor
ICAgICAgICBlbHNlIGlmIChydWxlLT5pc0hvc3RSdWxlKCkpCisgICAgICAgICAgICByZXNvbHZl
ci0+YWRkSG9zdFJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlSG9zdCo+KHJ1bGUpLCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luLCBzY29wZSk7CisjZW5kaWYKICAgICB9CiAgICAgaWYgKG1fYXV0
b1Nocmlua1RvRml0RW5hYmxlZCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCmluZGV4IGUyYWViMmMwMDFlNzcyNWRlM2Y5Y2RhOTVmYzhhMjEwNWYx
OWZiZjMuLjI5ZTQ5MGM1Y2E0NDNmNzIyNjdjYWE5ZDFmNDJlNTc1NzFhOWZlYmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtNzEsNiArNzEsNyBAQCBjbGFzcyBSZW5kZXJSZWdp
b247CiBjbGFzcyBSdWxlRGF0YTsKIGNsYXNzIFJ1bGVTZXQ7CiBjbGFzcyBTZXR0aW5nczsKK2Ns
YXNzIFNoYWRvd1Jvb3Q7CiBjbGFzcyBTdGF0aWNDU1NSdWxlTGlzdDsKIGNsYXNzIFN0eWxlQnVp
bGRlcjsKIGNsYXNzIFN0eWxlSW1hZ2U7CkBAIC04MSw2ICs4Miw3IEBAIGNsYXNzIFN0eWxlUnVs
ZTsKIGNsYXNzIFN0eWxlUnVsZUtleWZyYW1lczsKIGNsYXNzIFN0eWxlUnVsZVBhZ2U7CiBjbGFz
cyBTdHlsZVJ1bGVSZWdpb247CitjbGFzcyBTdHlsZVJ1bGVIb3N0OwogY2xhc3MgU3R5bGVTaGFk
ZXI7CiBjbGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwpAQCAtMTM0
LDYgKzEzNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBvcFBhcmVudEVsZW1lbnQoRWxlbWVudCop
OwogICAgIHZvaWQgcHVzaFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCopOwogICAg
IHZvaWQgcG9wUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290Kik7CisgICAgdm9pZCBh
ZGRIb3N0UnVsZShTdHlsZVJ1bGVIb3N0KiwgYm9vbCwgY29uc3QgQ29udGFpbmVyTm9kZSopOwog
CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqLCBS
ZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBTdHlsZVNoYXJpbmdCZWhhdmlvciA9IEFsbG93
U3R5bGVTaGFyaW5nLAogICAgICAgICBSdWxlTWF0Y2hpbmdCZWhhdmlvciA9IE1hdGNoQWxsUnVs
ZXMsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IDApOwpAQCAtMzU1LDExICszNTgs
MTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoVXNlclJ1bGVzKE1hdGNoUmVz
dWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhv
clJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBt
YXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAg
IHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXMoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICB2b2lkIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJz
dFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKKyAg
ICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9ySG9zdChSdWxlU2V0KiwgaW50JiBmaXJzdFJ1
bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICBi
b29sIGZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwogICAgIHZvaWQg
c29ydE1hdGNoZWRSdWxlcygpOworICAgIHZvaWQgdHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hS
ZXN1bHQmKTsKICAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3Vs
dCYpOwogCiAgICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiwgY29uc3QgQ29u
dGFpbmVyTm9kZSogc2NvcGUgPSAwKTsKQEAgLTUzNyw2ICs1NDMsMTEgQEAgcHJpdmF0ZToKICAg
ICAvLyBUaGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgbV9zY29waW5nRWxlbWVudFN0YWNr
IGlzIGNvbnNpc3RlbnQsIHNlcGFyYXRlbHkgZnJvbSBTZWxlY3RvckNoZWNrZXI6Om1fcGFyZW50
U3RhY2suCiAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zY29wZVN0YWNrUGFyZW50OwogICAg
IGludCBtX3Njb3BlU3RhY2tQYXJlbnRCb3VuZHNJbmRleDsKKworICAgIHR5cGVkZWYgSGFzaE1h
cDxjb25zdCBTaGFkb3dSb290KiwgT3duUHRyPFZlY3RvcjxSdWxlRGF0YT4gPiA+IEF0SG9zdFJ1
bGVEYXRhTWFwOworICAgIEF0SG9zdFJ1bGVEYXRhTWFwIG1fYXRIb3N0UnVsZXM7CisgICAgY29u
c3QgVmVjdG9yPFJ1bGVEYXRhPiogYXRIb3N0UnVsZUZvclNjb3BlKGNvbnN0IFNoYWRvd1Jvb3Qq
KTsKKyAgICBib29sIG1hdGNoZXNIb3N0UnVsZXMoKTsKICNlbmRpZgogCiAgICAgQ1NTVG9TdHls
ZU1hcCBtX3N0eWxlTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVs
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAppbmRleCAzNDI3ZjA1NTky
MTdlNjJmMzkyNzhhODgwNWFiM2Q4ZDhhNGU5NTI4Li44ODBkY2I2NGY0OTVjN2E0ZGNlODgyNDZj
MTAzMzMwMTViYmZjN2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcApAQCAtNzcsNiArNzcs
OSBAQCB2b2lkIFN0eWxlUnVsZUJhc2U6OmRlc3Ryb3koKQogICAgIGNhc2UgS2V5ZnJhbWVzOgog
ICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4odGhpcyk7CiAg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEhvc3Q6CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2Fz
dDxTdHlsZVJ1bGVIb3N0Kj4odGhpcyk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFVua25v
d246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xMTAsNiArMTEz
LDggQEAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBTdHlsZVJ1bGVCYXNlOjpjb3B5KCkgY29u
c3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBLZXlmcmFtZXM6CiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqPih0aGlzKS0+Y29weSgpOwor
ICAgIGNhc2UgSG9zdDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVs
ZUhvc3QqPih0aGlzKS0+Y29weSgpOwogICAgIGNhc2UgVW5rbm93bjoKICAgICBjYXNlIENoYXJz
ZXQ6CiAgICAgY2FzZSBLZXlmcmFtZToKQEAgLTE1MSw2ICsxNTYsNyBAQCBQYXNzUmVmUHRyPENT
U1J1bGU+IFN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcihDU1NTdHlsZVNoZWV0KiBw
YXJlbnRTaGVldAogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICBydWxlID0gV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZTo6Y3JlYXRlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHNl
bGYpLCBwYXJlbnRTaGVldCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgSG9zdDoKICAgICBj
YXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0y
MjYsNiArMjMyLDI3IEBAIHZvaWQgU3R5bGVSdWxlUGFnZTo6c2V0UHJvcGVydGllcyhQYXNzUmVm
UHRyPFN0eWxlUHJvcGVydHlTZXQ+IHByb3BlcnRpZXMpCiAgICAgbV9wcm9wZXJ0aWVzID0gcHJv
cGVydGllczsKIH0KIAorU3R5bGVSdWxlSG9zdDo6U3R5bGVSdWxlSG9zdCgpCisgICAgOiBTdHls
ZVJ1bGVCYXNlKEhvc3QpCisgICAgLCBtX2NoaWxkKFN0eWxlUnVsZTo6Y3JlYXRlKDApKQorewor
fQorCitTdHlsZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KGNvbnN0IFN0eWxlUnVsZUhvc3QmIG8p
CisgICAgOiBTdHlsZVJ1bGVCYXNlKG8pCisgICAgLCBtX2NoaWxkKG8ubV9jaGlsZC0+Y29weSgp
KQoreworfQorCitTdHlsZVJ1bGVIb3N0Ojp+U3R5bGVSdWxlSG9zdCgpCit7Cit9CisKK3ZvaWQg
U3R5bGVSdWxlSG9zdDo6c2V0UHJvcGVydGllcyhQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
IHByb3BlcnRpZXMpCit7IAorICAgIG1fY2hpbGQtPnNldFByb3BlcnRpZXMocHJvcGVydGllcyk7
Cit9CisKIFN0eWxlUnVsZUZvbnRGYWNlOjpTdHlsZVJ1bGVGb250RmFjZSgpCiAgICAgOiBTdHls
ZVJ1bGVCYXNlKEZvbnRGYWNlLCAwKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCmluZGV4IDdmYzIw
YTMwM2Y4NTNhYzc2YzkyZWZiMDE1M2ZiZmIzNDdmNTcyYTAuLmUyMzJmZDg3YTliODU0M2Q5YTQ5
YzA1MGRmNmRlOTFiNDQ0OTEwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJ1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKQEAgLTQ1LDYgKzQ1
LDcgQEAgcHVibGljOgogICAgICAgICBQYWdlLAogICAgICAgICBLZXlmcmFtZXMsCiAgICAgICAg
IEtleWZyYW1lLCAvLyBOb3QgdXNlZC4gVGhlc2UgYXJlIGludGVybmFsbHkgbm9uLXJ1bGUgU3R5
bGVLZXlmcmFtZSBvYmplY3RzLgorICAgICAgICBIb3N0LAogICAgICAgICBSZWdpb24gPSAxNgog
ICAgIH07CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4o
bV90eXBlKTsgfQpAQCAtNTcsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1N0eWxlUnVs
ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBTdHlsZTsgfQogICAgIGJvb2wgaXNSZWdpb25S
dWxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFJlZ2lvbjsgfQogICAgIGJvb2wgaXNJbXBv
cnRSdWxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEltcG9ydDsgfQorICAgIGJvb2wgaXNI
b3N0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBIb3N0OyB9CiAKICAgICBQYXNzUmVm
UHRyPFN0eWxlUnVsZUJhc2U+IGNvcHkoKSBjb25zdDsKIApAQCAtMTU3LDYgKzE1OSwyMiBAQCBw
cml2YXRlOgogICAgIENTU1NlbGVjdG9yTGlzdCBtX3NlbGVjdG9yTGlzdDsKIH07CiAKK2NsYXNz
IFN0eWxlUnVsZUhvc3QgOiBwdWJsaWMgU3R5bGVSdWxlQmFzZSB7CisgcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0eWxlUnVsZUhvc3Q+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTdHlsZVJ1bGVIb3N0KTsgfQorCisgICAgflN0eWxlUnVsZUhvc3QoKTsKKworICAgIFN0
eWxlUnVsZSogY2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9CisgICAgdm9p
ZCBzZXRQcm9wZXJ0aWVzKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4pOworCisgcHJpdmF0
ZToKKyAgICBTdHlsZVJ1bGVIb3N0KCk7CisgICAgU3R5bGVSdWxlSG9zdChjb25zdCBTdHlsZVJ1
bGVIb3N0Jik7CisKKyAgICBSZWZQdHI8U3R5bGVSdWxlPiBtX2NoaWxkOworfTsKKyAKIGNsYXNz
IFN0eWxlUnVsZUJsb2NrIDogcHVibGljIFN0eWxlUnVsZUJhc2UgewogcHVibGljOgogICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcygpIGNvbnN0IHsg
cmV0dXJuIG1fY2hpbGRSdWxlczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1No
YWRvd1Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCmluZGV4IGI5
YzQ4MWMxODk4NjQ4MWUxOWI2MjZmNjk0YzIwNmRmMTIyMTQ3NGQuLjRiMzcxZGVjYjA2YWI3ODhm
Zjk5MmI3ZDFkY2I1ZDAyZTljOWJkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKQEAg
LTU1LDYgKzU1LDcgQEAgU2hhZG93Um9vdDo6U2hhZG93Um9vdChEb2N1bWVudCogZG9jdW1lbnQp
CiAgICAgLCBtX2FwcGx5QXV0aG9yU3R5bGVzKGZhbHNlKQogICAgICwgbV9yZXNldFN0eWxlSW5o
ZXJpdGFuY2UoZmFsc2UpCiAgICAgLCBtX2luc2VydGlvblBvaW50QXNzaWduZWRUbygwKQorICAg
ICwgbV9udW1iZXJPZlNoYWRvd0VsZW1lbnRDaGlsZHJlbigwKQogewogICAgIEFTU0VSVChkb2N1
bWVudCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAppbmRleCBkOWI0MjVjNjA4M2IxN2Fm
ODgyNmU2MTY0Mjc4MWY1NTI1MDc1MjUwLi4yZTUxNmZiMWJiNGNlZjdiNjNkZjI2YjY0MzdkNGZl
NTdjMDNiNmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKQEAgLTg5LDYgKzg5LDEwIEBAIHB1
YmxpYzoKICAgICBJbnNlcnRpb25Qb2ludCogYXNzaWduZWRUbygpIGNvbnN0OwogICAgIHZvaWQg
c2V0QXNzaWduZWRUbyhJbnNlcnRpb25Qb2ludCopOwogCisgICAgdm9pZCByZWdpc3RlclNoYWRv
d0VsZW1lbnQoKSB7ICsrbV9udW1iZXJPZlNoYWRvd0VsZW1lbnRDaGlsZHJlbjsgfQorICAgIHZv
aWQgdW5yZWdpc3RlclNoYWRvd0VsZW1lbnQoKSB7IC0tbV9udW1iZXJPZlNoYWRvd0VsZW1lbnRD
aGlsZHJlbjsgfQorICAgIGJvb2wgaGFzU2hhZG93SW5zZXJ0aW9uUG9pbnQoKSBjb25zdCB7IHJl
dHVybiBtX251bWJlck9mU2hhZG93RWxlbWVudENoaWxkcmVuID4gMDsgfQorCiAjaWZuZGVmIE5E
RUJVRwogICAgIFNoYWRvd1Jvb3RUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
ICNlbmRpZgpAQCAtMTA2LDYgKzExMCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FwcGx5QXV0
aG9yU3R5bGVzIDogMTsKICAgICBib29sIG1fcmVzZXRTdHlsZUluaGVyaXRhbmNlIDogMTsKICAg
ICBJbnNlcnRpb25Qb2ludCogbV9pbnNlcnRpb25Qb2ludEFzc2lnbmVkVG87CisgICAgc2l6ZV90
IG1fbnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hpbGRyZW47CiAKICNpZm5kZWYgTkRFQlVHCiAgICAg
U2hhZG93Um9vdFR5cGUgbV90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVu
dC5jcHAKaW5kZXggMjY5OTBhNWRmMjg0YTk3YzZhMjQxZjVjNzBhMjhlYjhkODc3ZTkxOC4uMDBh
NDNjMmU0Yjk3ZDBiYjQ5MzdkMjlhNzIwMTgyOWFlM2MzNGVhNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCkBAIC0xNDUsNiArMTQ1LDcgQEAgdm9pZCBIVE1MU3R5
bGVFbGVtZW50OjpyZWdpc3RlcldpdGhTY29waW5nTm9kZShib29sIHNjb3BlZCkKICAgICB9CiAK
ICAgICBzY29wZS0+cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworCiAgICAgc2NvcGUt
PnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFkb2N1bWVu
dCgpLT5wYXJzaW5nKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgZG9jdW1l
bnQoKS0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5jcHAKaW5kZXggOTM4NDM5
NjEyY2EyMWQyNjllNTc3OGE5NmIxNTk4MGVmNzU0MmI5YS4uNWM1ZGJlOTRmZmU0NDZlNmZlMGI2
M2Y2ZDBlN2ViNjNlNjQ5M2UxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvSFRNTFNoYWRvd0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L0hUTUxTaGFkb3dFbGVtZW50LmNwcApAQCAtNDEsNiArNDEsNyBAQCBjbGFzcyBEb2N1bWVudDsK
IAogaW5saW5lIEhUTUxTaGFkb3dFbGVtZW50OjpIVE1MU2hhZG93RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBJbnNlcnRpb25Q
b2ludCh0YWdOYW1lLCBkb2N1bWVudCkKKyAgICAsIG1fcmVnaXN0ZXJlZFdpdGhTaGFkb3dSb290
KGZhbHNlKQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKEhUTUxOYW1lczo6c2hhZG93VGFnKSk7
CiB9CkBAIC02OCw0ICs2OSwzMSBAQCBib29sIEhUTUxTaGFkb3dFbGVtZW50Ojpkb2VzU2VsZWN0
RnJvbUhvc3RDaGlsZHJlbigpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitOb2RlOjpJ
bnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxTaGFkb3dFbGVtZW50OjppbnNlcnRlZElu
dG8oQ29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbnQpCit7CisgICAgSW5zZXJ0aW9uUG9pbnQ6
Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7CisKKyAgICBpZiAoaW5zZXJ0aW9uUG9pbnQt
PmluRG9jdW1lbnQoKSAmJiBpc0FjdGl2ZSgpKSB7CisgICAgICAgIGlmIChTaGFkb3dSb290KiBy
b290ID0gc2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICByb290LT5yZWdpc3RlclNoYWRvd0Vs
ZW1lbnQoKTsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFdpdGhTaGFkb3dSb290ID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBJbnNlcnRpb25Eb25lOworfQorCit2b2lk
IEhUTUxTaGFkb3dFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlKiBpbnNlcnRpb25Q
b2ludCkKK3sKKyAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSAmJiBtX3JlZ2lz
dGVyZWRXaXRoU2hhZG93Um9vdCkgeworICAgICAgICBTaGFkb3dSb290KiByb290ID0gc2hhZG93
Um9vdCgpOworICAgICAgICBpZiAoIXJvb3QpCisgICAgICAgICAgICByb290ID0gaW5zZXJ0aW9u
UG9pbnQtPnNoYWRvd1Jvb3QoKTsKKyAgICAgICAgaWYgKHJvb3QpCisgICAgICAgICAgICByb290
LT51bnJlZ2lzdGVyU2hhZG93RWxlbWVudCgpOworICAgICAgICBtX3JlZ2lzdGVyZWRXaXRoU2hh
ZG93Um9vdCA9IGZhbHNlOworICAgIH0KKyAgICBJbnNlcnRpb25Qb2ludDo6cmVtb3ZlZEZyb20o
aW5zZXJ0aW9uUG9pbnQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuaAppbmRleCBhNGVjZGIzYWQ0
NWZiOGVjNGU5YWE1MDAwYTAxZTNhZWQxY2QyMGRjLi4xMTlmYTlmOTVkZWY2Mjc0MTYyY2IxODg5
NDlmZDQ3MWFhZGJmYjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9I
VE1MU2hhZG93RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxT
aGFkb3dFbGVtZW50LmgKQEAgLTQ2LDggKzQ2LDE0IEBAIHB1YmxpYzoKICAgICBib29sIGlzU2Vs
ZWN0VmFsaWQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBkb2Vz
U2VsZWN0RnJvbUhvc3RDaGlsZHJlbigpIGNvbnN0OwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2Rl
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUq
KSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICBIVE1MU2hhZG93RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKworICAgIGJvb2wgbV9yZWdpc3RlcmVkV2l0aFNoYWRv
d1Jvb3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZWUyYTcwZTVmYjcw
OTM1MGY0NWNhMDA2Y2ZmOTk3NjljZmRkNzc5ZC4uOTI1NTcyZmMzMzg0NTQwMzU1Zjk2Y2ZiMDk1
ZGQxMTZmZTU5ZDU4OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA4LTAxICBUYWthc2hp
IFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0gTmVl
ZHMgQGhvc3QgcnVsZSBmb3IgU2hhZG93RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvcHNldWRvLWhvc3Qt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvcHNldWRvLWhv
c3QuaHRtbDogQWRkZWQuCisKIDIwMTItMDgtMDEgIFphbiBEb2JlcnNlayAgPHphbmRvYmVyc2Vr
QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEdUSyBnYXJkZW5pbmcsIGFkZGluZyBh
biBpbWFnZSBmYWlsdXJlIGV4cGVjdGF0aW9uIGZvciBhCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLWhvc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2hhZG93L3BzZXVkby1ob3N0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNzVj
NmE3OWY0ZmRiZjViNTFmYzlkNjg3MDhiMWNkZTQyYzgxZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1ob3N0LWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDEzIEBACitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdDogcmdiKDI1NSwgMCwgMCkK
K2hvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMTI4LCAxMjgsIDEyOCkKK2hvc3Q6IHJn
YigwLCAwLCAyNTUpCitob3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAx
MjgpCitob3N0OiByZ2IoMjU1LCAyNTUsIDApCitob3N0OiByZ2IoMjU1LCAwLCAwKQorbmVzdGVk
SG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0OiByZ2IoMjU1
LCAyNTUsIDApCitIZWxsbwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L3BzZXVkby1ob3N0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLWhv
c3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43YTIyOTkxZGRiOWExZTZhYTMzNGJhODUzZTMwZDAwNDFhNGQx
MmUxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVk
by1ob3N0Lmh0bWwKQEAgLTAsMCArMSwxNjkgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxzdHlsZT4KKyNob3N0IHsKKyAgY29sb3I6IGdyYXk7Cit9Cis8L3N0eWxlPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3BvbHlmaWxsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citm
dW5jdGlvbiBkdW1wQ29tcHV0ZWRTdHlsZShub2RlKQoreworICAgIGRlYnVnKG5vZGUuaWQgKyAi
OiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5n
ZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKK30KKworZnVuY3Rpb24gcHJlcHJvY2Vzc0ZvclRl
c3QoKQoreworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyZW50
Iik7CisgICAgcGFyZW50LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJob3N0Ij48c3Bhbj5IZWxsbzwv
c3Bhbj48L2Rpdj4nOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlQ29udGVudENhc2UoKQorewor
ICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdCho
b3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiByZWQ7
IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhv
c3QpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlU2hhZG93Q2FzZSgpCit7CisgICAgcHJlcHJv
Y2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJo
b3N0Iik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAg
IHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+
PHNoYWRvdz48L3NoYWRvdz4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitm
dW5jdGlvbiB0ZXN0UHNldWRvSG9zdFdpdGhTY29wZWQoKQoreworICAgIHByZXByb2Nlc3NGb3JU
ZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOwor
ICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cu
aW5uZXJIVE1MID0gIjxkaXY+PHN0eWxlIHNjb3BlZD5AaG9zdCB7IGNvbG9yOiByZWQ7IH08L3N0
eWxlPjxzaGFkb3c+PC9zaGFkb3c+PGRpdj48c3R5bGUgc2NvcGVkPkBob3N0IHsgY29sb3I6IGJs
dWU7IH08L3N0eWxlPjwvZGl2PjwvZGl2PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RQc2V1ZG9Ib3N0V2l0aEZhbGxiYWNrU2hhZG93KCkKK3sKKyAg
ICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jv
b3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3Qo
aG9zdCk7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xv
cjogcmVkOyB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICB5b3VuZ2VzdFNoYWRv
dy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PHNoYWRvdz48L3NoYWRvdz48L2NvbnRlbnQ+IjsKKyAg
ICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFR3b1NoYWRvd1Jv
b3RzQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5l
dyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBX
ZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0
eWxlPkBob3N0IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7Cisg
ICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiBibHVl
OyB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9z
dCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RUd29TaGFkb3dSb290c0NyZWF0aW5nRGlmZmVyZW50T3Jk
ZXJDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3
IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdl
YktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxz
dHlsZT5AaG9zdCB7IGNvbG9yOiBibHVlOyB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7Cisg
ICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogcmVkOyB9
PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0
KTsKK30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dD
b250ZW50KCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3
IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdlYktp
dFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hh
ZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93
Um9vdChob3N0KTsKKworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c2hhZG93Pjwv
c2hhZG93PiI7CisgICAgeW91bmdlclNoYWRvdy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PC9jb250
ZW50PiI7CisgICAgb2xkZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9y
OiBncmVlbjsgfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIG9sZGVzdFNoYWRvdy5p
bm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGNvbnRlbnQ+
PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9u
IHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3RzV2l0aEluZXJ0U2hhZG93KCkKK3sKKyAgICBwcmVwcm9j
ZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhv
c3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7
CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAg
dmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIg
eW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKworICAgIHlvdW5n
ZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogeWVsbG93OyB9PC9z
dHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgeW91bmdlclNoYWRvdy5pbm5lckhUTUwgPSAi
PHN0eWxlPkBob3N0IHsgY29sb3I6IGJsdWU7IH08L3N0eWxlPjxkaXY+aW5lcnQ8L2Rpdj4iOwor
ICAgIG9sZGVyU2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBjb2xvcjogZ3JlZW47
IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1M
ID0gIjxzdHlsZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVu
dD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0TmVz
dGVkQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG91dGVyU2hhZG93ID0gbmV3
IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgb3V0ZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxz
dHlsZT5AaG9zdCB7IGNvbG9yOiByZWQ7IH08L3N0eWxlPjxkaXYgaWQ9Im5lc3RlZEhvc3QiPklu
bmVyU2hhZG93PC9kaXY+JzsKKyAgICB2YXIgbmVzdGVkID0gb3V0ZXJTaGFkb3cuZ2V0RWxlbWVu
dEJ5SWQoIm5lc3RlZEhvc3QiKTsKKyAgICB2YXIgaW5uZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hh
ZG93Um9vdChuZXN0ZWQpOworICAgIGlubmVyU2hhZG93LmlubmVySFRNTCA9ICc8c3R5bGU+QGhv
c3QgeyBjb2xvcjogYmx1ZTsgfTwvc3R5bGU+U2hvdyA8c2hhZG93Pjwvc2hhZG93PiBpbiBvdXRl
ci4nOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworICAgIGR1bXBDb21wdXRlZFN0eWxl
KG5lc3RlZCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpCit7CisgICAg
cHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJob3N0Iik7CisgICAgaG9zdC5pbm5lckhUTUwgPSAiPHN0eWxlIHNjb3BlZD4jaG9zdCB7
IGNvbG9yOiB5ZWxsb3c7IH08L3N0eWxlPjxzcGFuPkhlbGxvPC9zcGFuPiI7CisgICAgdmFyIHNo
YWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwg
PSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50
PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0
VnNJbmxpbmVTdHlsZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9z
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgaG9zdC5zdHlsZS5jb2xv
ciA9ICJ5ZWxsb3ciOworICAgIGhvc3QuaW5uZXJIVE1MID0gIjxzcGFuPkhlbGxvPC9zcGFuPiI7
CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHNoYWRv
dy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgY29sb3I6IHJlZDsgfTwvc3R5bGU+PGNvbnRl
bnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0
aW9uIHJ1blRlc3RzKCkKK3sKKyAgICB0ZXN0U2ltcGxlQ29udGVudENhc2UoKTsKKyAgICB0ZXN0
U2ltcGxlU2hhZG93Q2FzZSgpOworICAgIHRlc3RQc2V1ZG9Ib3N0V2l0aFNjb3BlZCgpOworICAg
IHRlc3RQc2V1ZG9Ib3N0V2l0aEZhbGxiYWNrU2hhZG93KCk7CisgICAgdGVzdFR3b1NoYWRvd1Jv
b3RzQ2FzZSgpOworICAgIHRlc3RUd29TaGFkb3dSb290c0NyZWF0aW5nRGlmZmVyZW50T3JkZXJD
YXNlKCk7CisgICAgdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50
KCk7CisgICAgdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3coKTsKKyAgICB0
ZXN0TmVzdGVkQ2FzZSgpOworICAgIHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpOworICAgIHRlc3RI
b3N0VnNJbmxpbmVTdHlsZSgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9
InJ1blRlc3RzKCkiPgorICA8ZGl2IGlkPSJwYXJlbnQiPgorICA8L2Rpdj4KKzwvYm9keT4KKzwv
aHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156902</attachid>
            <date>2012-08-07 03:19:15 -0700</date>
            <delta_ts>2012-08-20 23:44:33 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-88606-20120807191850.patch</filename>
            <type>text/plain</type>
            <size>33627</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0ODQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTUwYjQ5YTViMTcwM2Yx
M2ZlMzkwY2ZkOWFkNjY5ZjE0MWI1YWRkMC4uYjcwNWI0Y2M0YzM0MDRkN2I4MmE5NGU3YzJhODNi
MmNjMGY2NGFhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEyLTA4LTA3ICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0g
TmVlZHMgQGhvc3QgcnVsZSBmb3IgU2hhZG93RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjA2CisKKyAgICAgICAgSW1wbGVtZW50
ZWQgQGhvc3QtQHJ1bGVzIGFjY29yZGluZyB0byB0aGUgc2hhZG93IGRvbSBzcGVjOgorICAgICAg
ICBodHRwOi8vZHZjcy53My5vcmcvaGcvd2ViY29tcG9uZW50cy9yYXctZmlsZS90aXAvc3BlYy9z
aGFkb3cvaW5kZXguaHRtbCNob3N0LWF0LXJ1bGUKKyAgICAgICAgVGhlIGRlc2lnbiBkb2MgaXM6
CisgICAgICAgIGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVAyeW9yY2hGOGxj
aTJzY2NyLW1WU1JmMmR0dmpLZWl1eVFXekNCMmJFQTgvZWRpdAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9wc2V1
ZG8taG9zdC5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhbW1hci55OgorICAgICAgICAqIGNz
cy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRlY3RBdFRv
a2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVI
b3N0UnVsZSk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICAqIGNzcy9DU1NQ
cm9wZXJ0eVNvdXJjZURhdGEuaDoKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnJ1bGVT
ZXRGb3JTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRo
b3JTdHlsZXNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGRIb3N0
UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjp0cmFuc2Zlck1hdGNoZWRS
dWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJN
YXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXRIb3N0UnVs
ZVNldEZvclNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoZXNI
b3N0UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVs
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
ckxpc3QpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChTdHlsZVJl
c29sdmVyKToKKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUnVsZUJhc2U6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUnVsZUJhc2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6
Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBw
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6U3R5bGVSdWxlSG9zdCk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjppc0hvc3RSdWxlKToKKyAgICAgICAgKFN0eWxlUnVsZUhv
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUnVsZUhvc3Q6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGls
ZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMpOgorICAgICAgICAqIGRvbS9T
aGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OlNoYWRvd1Jvb3Qp
OgorICAgICAgICAqIGRvbS9TaGFkb3dSb290Lmg6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dS
b290OjpyZWdpc3RlclNoYWRvd0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9v
dDo6dW5yZWdpc3RlclNoYWRvd0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9v
dDo6aGFzU2hhZG93SW5zZXJ0aW9uUG9pbnQpOgorICAgICAgICAoU2hhZG93Um9vdCk6CisgICAg
ICAgICogaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxT
dHlsZUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aFNjb3BpbmdOb2RlKToKKyAgICAgICAgKiBodG1sL3No
YWRvdy9IVE1MU2hhZG93RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2hhZG93
RWxlbWVudDo6SFRNTFNoYWRvd0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNoYWRv
d0VsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTaGFkb3dFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogaHRtbC9z
aGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuaDoKKwogMjAxMi0wOC0wNiAgQW5uYSBDYXZlbmRlciAg
PGFubmFjY0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVXBkYXRlIEhUTUxNZWRpYUVsZW1lbnQg
dG8gdGhlIG5ldyBPTyBNZWRpYVNvdXJjZSBBUEkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTR3JhbW1hci55IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQppbmRl
eCA5OTY4ZTc2NjAwN2VlZjE3YWExNjk2ZmIwMmU0ZmY3NGQzNDJmMTAyLi4wMWZkNTgwYTY4MzMw
YTllMDc1YTc3NjRiMTlmNDFmMTU2ZDc3NzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhbW1hci55CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKQEAg
LTEzMiw2ICsxMzIsNyBAQCBzdGF0aWMgaW50IGNzc3l5bGV4KFlZU1RZUEUqIHl5bHZhbCwgQ1NT
UGFyc2VyKiBwYXJzZXIpCiAldG9rZW4gUEFHRV9TWU0KICV0b2tlbiBNRURJQV9TWU0KICV0b2tl
biBGT05UX0ZBQ0VfU1lNCisldG9rZW4gSE9TVF9TWU0KICV0b2tlbiBDSEFSU0VUX1NZTQogJXRv
a2VuIE5BTUVTUEFDRV9TWU0KICV0b2tlbiBWQVJGVU5DVElPTgpAQCAtMjE5LDYgKzIyMCw3IEBA
IHN0YXRpYyBpbnQgY3NzeXlsZXgoWVlTVFlQRSogeXlsdmFsLCBDU1NQYXJzZXIqIHBhcnNlcikK
ICV0eXBlIDxydWxlPiBwYWdlCiAldHlwZSA8cnVsZT4gbWFyZ2luX2JveAogJXR5cGUgPHJ1bGU+
IGZvbnRfZmFjZQorJXR5cGUgPHJ1bGU+IGhvc3QKICV0eXBlIDxydWxlPiBrZXlmcmFtZXMKICV0
eXBlIDxydWxlPiBpbnZhbGlkX3J1bGUKICV0eXBlIDxydWxlPiBzYXZlX2Jsb2NrCkBAIC00MTks
NiArNDIxLDcgQEAgdmFsaWRfcnVsZToKICAgfCBuYW1lc3BhY2UKICAgfCBpbXBvcnQKICAgfCBy
ZWdpb24KKyAgfCBob3N0CiAgIDsKIAogcnVsZToKQEAgLTg0MSw2ICs4NDQsMjMgQEAgZm9udF9m
YWNlOgogICAgIH0KIDsKIAorYmVmb3JlX2hvc3RfcnVsZToKKyAgICAvKiBlbXB0eSAqLyB7Cisg
ICAgICAgIHBhcnNlci0+bWFya1J1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6SE9T
VF9SVUxFKTsKKyAgICB9CisgICAgOworCitob3N0OgorICAgIGJlZm9yZV9ob3N0X3J1bGUgSE9T
VF9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlIAorICAgICd7JyBhdF9ydWxlX2Jv
ZHlfc3RhcnQgbWF5YmVfc3BhY2UgYmxvY2tfcnVsZV9saXN0IHNhdmVfYmxvY2sgeworICAgICAg
ICAkJCA9IHBhcnNlci0+Y3JlYXRlSG9zdFJ1bGUoJDcpOworICAgIH0KKyAgICB8IGJlZm9yZV9o
b3N0X3J1bGUgSE9TVF9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlICc7JyB7Cisg
ICAgICAgICQkID0gMDsKKyAgICAgICAgcGFyc2VyLT5wb3BSdWxlRGF0YSgpOworICAgIH0KKyAg
ICA7CisgCiByZWdpb25fc2VsZWN0b3I6CiAgICAgc2VsZWN0b3JfbGlzdCB7CiAgICAgICAgIGlm
ICgkMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCAyNTQwZjA0MDdlNTk0MDlkMjAw
NGVhYWZkMDRlN2JiZTAxNDc2OThiLi4yZDI4NWMxNTNlYTQ4M2I4MDUyNzhhYTk5YWVjNmYxYmI3
NmQyMTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtODg2MCw2ICs4ODYwLDExIEBA
IGlubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihpbnQgbGVuZ3RoLCBib29sIGhh
c0VzY2FwZSkKICAgICAgICAgICAgIG1fdG9rZW4gPSBGT05UX0ZBQ0VfU1lNOwogICAgICAgICBy
ZXR1cm47CiAKKyAgICBjYXNlICdoJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA1ICYmIGlzRXF1
YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvc3QiKSkKKyAgICAgICAgICAgIG1fdG9rZW4g
PSBIT1NUX1NZTTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSAnaSc6CiAgICAgICAgIGlm
IChsZW5ndGggPT0gNyAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAibXBvcnQi
KSkgewogICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOwpAQCAtOTY5
MCw2ICs5Njk1LDIyIEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VS
dWxlKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6
OmNyZWF0ZUhvc3RSdWxlKFJ1bGVMaXN0KiBydWxlcykKK3sKKyAgICBtX2FsbG93SW1wb3J0UnVs
ZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CisgICAgUmVmUHRyPFN0
eWxlUnVsZUhvc3Q+IHJ1bGU7CisgICAgaWYgKHJ1bGVzKQorICAgICAgICBydWxlID0gU3R5bGVS
dWxlSG9zdDo6Y3JlYXRlKCpydWxlcyk7CisgICAgZWxzZSB7CisgICAgICAgIFJ1bGVMaXN0IGVt
cHR5UnVsZXM7CisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoZW1wdHlSdWxl
cyk7CisgICAgfQorICAgIFN0eWxlUnVsZUhvc3QqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CisgICAg
bV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOworICAgIHByb2Nlc3NBbmRBZGRO
ZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2
b2lkIENTU1BhcnNlcjo6YWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBj
b25zdCBBdG9taWNTdHJpbmcmIHVyaSkKIHsKICAgICBpZiAoIW1fc3R5bGVTaGVldCB8fCAhbV9h
bGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBkZjQy
NzFkOTg5YjNhNmZlMDZiMDdjMDM2OTgyMzRhOGViODU3MmVkLi42MmNmYjFmOGUzN2I5NjRkNjZk
NzIzMmVlN2Q5ZjdhNmVjZWZhMmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC0yNzMsNiAr
MjczLDcgQEAgcHVibGljOgogICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZVBhZ2VSdWxlKFBhc3NP
d25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxlY3Rvcik7CiAgICAgU3R5bGVSdWxlQmFz
ZSogY3JlYXRlUmVnaW9uUnVsZShWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiBy
ZWdpb25TZWxlY3RvciwgUnVsZUxpc3QqIHJ1bGVzKTsKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVh
dGVNYXJnaW5BdFJ1bGUoQ1NTU2VsZWN0b3I6Ok1hcmdpbkJveFR5cGUpOworICAgIFN0eWxlUnVs
ZUJhc2UqIGNyZWF0ZUhvc3RSdWxlKFJ1bGVMaXN0KiBydWxlcyk7CiAgICAgdm9pZCBzdGFydERl
Y2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwogICAgIHZvaWQgZW5kRGVjbGFyYXRpb25zRm9yTWFy
Z2luQm94KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNv
dXJjZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaApp
bmRleCAyNGRhZWY0YTlhMzA2NDc5YWIxZTAxMzYyYzNlZWY3ZmZjODk1MjI0Li5hYzQ1MDBiZTEz
MzA3MmYxMjAyM2JjYTI0ZTI3ZDUwZDdmODY4Nzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1Byb3BlcnR5U291cmNlRGF0YS5oCkBAIC05NCw3ICs5NCw4IEBAIHN0cnVjdCBDU1NSdWxlU291
cmNlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU1J1bGVTb3VyY2VEYXRhPiB7CiAgICAgICAg
IEZPTlRfRkFDRV9SVUxFLAogICAgICAgICBQQUdFX1JVTEUsCiAgICAgICAgIEtFWUZSQU1FU19S
VUxFLAotICAgICAgICBSRUdJT05fUlVMRQorICAgICAgICBSRUdJT05fUlVMRSwKKyAgICAgICAg
SE9TVF9SVUxFCiAgICAgfTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VE
YXRhPiBjcmVhdGUoVHlwZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmlu
ZGV4IDk1MjRjZDI2NDgyNmVmYmExYThiYmE2NWU1M2NmMjU0YzhlMDQ0NjguLjZjODQ0NTBlNDRk
NzI2Y2ZkMGE4MGNlZmFhZmNjNWIyMGMyYmFmYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlICJDb3VudGVyLmgiCiAjaW5jbHVk
ZSAiQ291bnRlckNvbnRlbnQuaCIKICNpbmNsdWRlICJDdXJzb3JMaXN0LmgiCisjaW5jbHVkZSAi
RWxlbWVudFNoYWRvdy5oIgogI2luY2x1ZGUgIkZvbnRGZWF0dXJlVmFsdWUuaCIKICNpbmNsdWRl
ICJGb250VmFsdWUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtMjM3LDcgKzIzOCw3IEBAIHBy
aXZhdGU6CiAgICAgLy8gVXNlIHBsYWluIGFycmF5IGluc3RlYWQgb2YgYSBWZWN0b3IgdG8gbWlu
aW1pemUgbWVtb3J5IG92ZXJoZWFkLgogICAgIHVuc2lnbmVkIG1fZGVzY2VuZGFudFNlbGVjdG9y
SWRlbnRpZmllckhhc2hlc1ttYXhpbXVtSWRlbnRpZmllckNvdW50XTsKIH07Ci0gICAgCisKIHN0
cnVjdCBTYW1lU2l6ZUFzUnVsZURhdGEgewogICAgIHZvaWQqIGE7CiAgICAgdm9pZCogYjsKQEAg
LTUzMyw3ICs1MzQsNyBAQCBpbmxpbmUgUnVsZVNldCogU3R5bGVSZXNvbHZlcjo6cnVsZVNldEZv
clNjb3BlKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKSBjb25zdAogICAgIGlmICghc2NvcGUt
Pmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFNjb3Bl
ZFJ1bGVTZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMuZmlu
ZChzY29wZSk7Ci0gICAgcmV0dXJuIGl0ICE9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLmVuZCgpID8g
aXQtPnNlY29uZC5nZXQoKSA6IDA7IAorICAgIHJldHVybiBpdCAhPSBtX3Njb3BlZEF1dGhvclN0
eWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOwogfQogI2VuZGlmCiAKQEAgLTU2Nywx
MiArNTY4LDM2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHMo
dW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQCiAgICAgfQogICAgIG1fYXV0aG9y
U3R5bGUtPnNocmlua1RvRml0KCk7CiAgICAgY29sbGVjdEZlYXR1cmVzKCk7Ci0gICAgCisKICAg
ICBpZiAoZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSAmJiBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5z
dHlsZSgpKQogICAgICAgICBkb2N1bWVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCku
dXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKIH0KIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCit2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFkZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3QqIGhvc3RSdWxlLCBi
b29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3Bl
KQoreworICAgIGlmICghc2NvcGUgfHwgIXNjb3BlLT5pc0luU2hhZG93VHJlZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2NvcGUtPnNoYWRvd1Jv
b3QoKTsKKyAgICBpZiAoIXNoYWRvd1Jvb3QpCisgICAgICAgIHJldHVybjsKKyAgICBjb25zdCBD
b250YWluZXJOb2RlKiBzaGFkb3dIb3N0ID0gc2hhZG93Um9vdC0+aG9zdCgpOworICAgIGlmICgh
c2hhZG93SG9zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2NvcGVkUnVsZVNldE1hcDo6QWRk
UmVzdWx0IGFkZFJlc3VsdCA9IG1fYXRIb3N0UnVsZXMuYWRkKHNoYWRvd1Jvb3QsIG51bGxwdHIp
OworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IGhvc3RSdWxlLT5jaGlsZFJ1bGVzKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgU3R5bGVSdWxlQmFzZSogaG9zdFN0eWxpbmdSdWxlID0gY2hpbGRSdWxlc1tpXS5n
ZXQoKTsKKyAgICAgICAgaWYgKGhvc3RTdHlsaW5nUnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAg
ICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5hZGRTdHlsZVJ1bGUoc3RhdGljX2Nh
c3Q8U3R5bGVSdWxlKj4oaG9zdFN0eWxpbmdSdWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
biwgdHJ1ZSwgZmFsc2UpOworICAgIH0KK30KKwogdm9pZCBTdHlsZVJlc29sdmVyOjpzZXR1cFNj
b3BlU3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50KQogewogICAgIC8vIFRoZSBzY29w
aW5nIGVsZW1lbnQgc3RhY2sgc2hvdWxkbid0IGJlIHVzZWQgaWYgPHN0eWxlIHNjb3BlZD4gaXNu
J3QgdXNlZCBhbnl3aGVyZS4KQEAgLTkxOSwxMyArOTQ0LDggQEAgdm9pZCBTdHlsZVJlc29sdmVy
Ojpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiBydWxlcywgaW50JiBmaXJz
dFJ1bGUKICAgICB9CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0
Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnRyYW5z
ZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiB7Ci0gICAgaWYgKG1fbWF0Y2hl
ZFJ1bGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc29ydE1hdGNoZWRSdWxl
cygpOwotCiAgICAgaWYgKG1fY2hlY2tlci5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xs
ZWN0aW5nUnVsZXMpIHsKICAgICAgICAgaWYgKCFtX3J1bGVMaXN0KQogICAgICAgICAgICAgbV9y
dWxlTGlzdCA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKQEAgLTk0Nyw2ICs5NjcsMTUg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hS
ZXN1bHQmIHJlc3VsdCkKICAgICB9CiB9CiAKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCit7CisgICAgaWYgKG1fbWF0
Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc29ydE1hdGNoZWRS
dWxlcygpOworICAgIHRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7Cit9CisKIHZvaWQgU3R5
bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCkBAIC05
OTQsNiArMTAyMyw2MSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdAogI2VuZGlmCiB9CiAKKyNp
ZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQoraW5saW5lIFJ1bGVTZXQqIFN0eWxlUmVzb2x2ZXI6OmF0
SG9zdFJ1bGVTZXRGb3JTY29wZShjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQoreworICAg
IFNjb3BlZFJ1bGVTZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdEhvc3RSdWxlcy5maW5k
KHNoYWRvd1Jvb3QpOworICAgIHJldHVybiBpdCAhPSBtX2F0SG9zdFJ1bGVzLmVuZCgpID8gaXQt
PnNlY29uZC5nZXQoKSA6IDA7IAorfQorCitib29sIFN0eWxlUmVzb2x2ZXI6Om1hdGNoZXNIb3N0
UnVsZXMoKQoreworICAgIGlmIChtX2F0SG9zdFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgRWxlbWVudFNoYWRvdyogc2hhZG93ID0gbV9lbGVtZW50LT5zaGFk
b3coKTsKKyAgICBpZiAoIXNoYWRvdykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAo
U2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7IHNo
YWRvd1Jvb3Q7IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgewor
ICAgICAgICBpZiAoYXRIb3N0UnVsZVNldEZvclNjb3BlKHNoYWRvd1Jvb3QpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghc2hhZG93Um9vdC0+aGFzU2hhZG93SW5zZXJ0
aW9uUG9pbnQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisjZW5kaWYKKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJl
c3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQoreworI2lmIEVOQUJMRShTVFlM
RV9TQ09QRUQpCisgICAgaWYgKG1fYXRIb3N0UnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBtX2VsZW1lbnQtPnNoYWRvdygpOwor
ICAgIGlmICghc2hhZG93KQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8UnVsZVNldCos
IDE2PiBtYXRjaGVkUnVsZXM7IAorICAgIGZvciAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNo
YWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7IHNoYWRvd1Jvb3Q7IHNoYWRvd1Jvb3QgPSBzaGFk
b3dSb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeyAKKyAgICAgICAgaWYgKFJ1bGVTZXQqIHJ1bGVT
ZXQgPSBhdEhvc3RSdWxlU2V0Rm9yU2NvcGUoc2hhZG93Um9vdCkpCisgICAgICAgICAgICBtYXRj
aGVkUnVsZXMuYXBwZW5kKHJ1bGVTZXQpOworICAgICAgICBpZiAoIXNoYWRvd1Jvb3QtPmhhc1No
YWRvd0luc2VydGlvblBvaW50KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYg
KG1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIE1hdGNoT3B0
aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBvcHRpb25zLnNjb3BlID0gbV9l
bGVtZW50OworICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkgPiAw
OyAtLWkpCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoZWRSdWxlcy5hdChpLTEp
LCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9y
UnVsZSwgb3B0aW9ucyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIFVO
VVNFRF9QQVJBTShpbmNsdWRlRW1wdHlSdWxlcyk7CisjZW5kaWYKK30KKwogdm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVk
ZUVtcHR5UnVsZXMpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKQEAgLTEwMDgsOCAr
MTA5MiwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1
bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcwogICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yUmVnaW9uKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRo
b3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKIAogICAgIG1h
dGNoU2NvcGVkQXV0aG9yUnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgaWYg
KCFtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsK
IAotICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOworICAgIG1hdGNoSG9z
dFJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIGlmICghbV9tYXRjaGVkUnVs
ZXMuaXNFbXB0eSgpKQorICAgICAgICB0cmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwogfQog
CiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQs
IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCkBAIC0xNTcxLDYgKzE2NTksMTEgQEAgUmVuZGVyU3R5
bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAvLyBDYW4ndCBzaGFy
ZSBpZiBhdHRyaWJ1dGUgcnVsZXMgYXBwbHkuCiAgICAgaWYgKG1hdGNoZXNSdWxlU2V0KG1fdW5j
b21tb25BdHRyaWJ1dGVSdWxlU2V0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CisjaWYgRU5B
QkxFKFNUWUxFX1NDT1BFRCkKKyAgICAvLyBDYW4ndCBzaGFyZSBpZiBAaG9zdCBALXJ1bGVzIGFw
cGx5LgorICAgIGlmIChtYXRjaGVzSG9zdFJ1bGVzKCkpCisgICAgICAgIHJldHVybiAwOworI2Vu
ZGlmCiAgICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZv
ciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBh
Ym92ZS4KICAgICBpZiAocGFyZW50U3R5bGVQcmV2ZW50c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjc0Miw2ICsyODM1LDEwIEBAIHZvaWQgUnVsZVNldDo6
YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFR
dWVyeUV2YWx1CiAgICAgICAgICAgICBhZGRSZWdpb25SdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVs
ZVJlZ2lvbio+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsKICAgICAgICAgfQog
I2VuZGlmCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICAgICAgZWxzZSBpZiAocnVsZS0+
aXNIb3N0UnVsZSgpKQorICAgICAgICAgICAgcmVzb2x2ZXItPmFkZEhvc3RSdWxlKHN0YXRpY19j
YXN0PFN0eWxlUnVsZUhvc3QqPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgc2Nv
cGUpOworI2VuZGlmCiAgICAgfQogICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCiAg
ICAgICAgIHNocmlua1RvRml0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCA0
NzJlZmM5ZWE2ZmNjN2EzNDlhNGNmMDliZjU3N2VhMTIxZmQ4MjliLi4zMDE4MTM3ZThlZDU5NGIx
MTMyNmE0MDA4MjM0NjVhYzNhZjBkZTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgK
QEAgLTcxLDYgKzcxLDcgQEAgY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xhc3MgUnVsZURhdGE7CiBj
bGFzcyBSdWxlU2V0OwogY2xhc3MgU2V0dGluZ3M7CitjbGFzcyBTaGFkb3dSb290OwogY2xhc3Mg
U3RhdGljQ1NTUnVsZUxpc3Q7CiBjbGFzcyBTdHlsZUJ1aWxkZXI7CiBjbGFzcyBTdHlsZUltYWdl
OwpAQCAtODEsNiArODIsNyBAQCBjbGFzcyBTdHlsZVJ1bGU7CiBjbGFzcyBTdHlsZVJ1bGVLZXlm
cmFtZXM7CiBjbGFzcyBTdHlsZVJ1bGVQYWdlOwogY2xhc3MgU3R5bGVSdWxlUmVnaW9uOworY2xh
c3MgU3R5bGVSdWxlSG9zdDsKIGNsYXNzIFN0eWxlU2hhZGVyOwogY2xhc3MgU3R5bGVTaGVldDsK
IGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKQEAgLTEzNSw2ICsxMzcsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwb3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIHB1c2hQYXJlbnRT
aGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKICAgICB2b2lkIHBvcFBhcmVudFNoYWRvd1Jv
b3QoY29uc3QgU2hhZG93Um9vdCopOworICAgIHZvaWQgYWRkSG9zdFJ1bGUoU3R5bGVSdWxlSG9z
dCosIGJvb2wsIGNvbnN0IENvbnRhaW5lck5vZGUqKTsKIAogICAgIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
ID0gMCwgU3R5bGVTaGFyaW5nQmVoYXZpb3IgPSBBbGxvd1N0eWxlU2hhcmluZywKICAgICAgICAg
UnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBSZW5kZXJSZWdpb24qIHJlZ2lv
bkZvclN0eWxpbmcgPSAwKTsKQEAgLTM1NywxMSArMzYwLDE0IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBtYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7
CiAgICAgdm9pZCBtYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1
bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1
bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNv
bnN0IE1hdGNoT3B0aW9ucyYpOwogICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdp
b24oUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29u
c3QgTWF0Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qo
Y29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1
bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdS
dWxlc0Zvckhvc3QoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJ
bmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3Io
Y29uc3QgUnVsZURhdGEmKSBjb25zdDsKICAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAg
ICB2b2lkIHRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0Jik7CiAgICAgdm9pZCBzb3J0
QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKIAogICAgIGJvb2wgY2hlY2tT
ZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gMCk7
CkBAIC01NDAsNiArNTQ2LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGRl
Y2lkZSB3aGV0aGVyIG1fc2NvcGluZ0VsZW1lbnRTdGFjayBpcyBjb25zaXN0ZW50LCBzZXBhcmF0
ZWx5IGZyb20gU2VsZWN0b3JDaGVja2VyOjptX3BhcmVudFN0YWNrLgogICAgIGNvbnN0IENvbnRh
aW5lck5vZGUqIG1fc2NvcGVTdGFja1BhcmVudDsKICAgICBpbnQgbV9zY29wZVN0YWNrUGFyZW50
Qm91bmRzSW5kZXg7CisKKyAgICBTY29wZWRSdWxlU2V0TWFwIG1fYXRIb3N0UnVsZXM7CisgICAg
UnVsZVNldCogYXRIb3N0UnVsZVNldEZvclNjb3BlKGNvbnN0IFNoYWRvd1Jvb3QqKTsKKyAgICBi
b29sIG1hdGNoZXNIb3N0UnVsZXMoKTsKICNlbmRpZgogCiAgICAgQ1NTVG9TdHlsZU1hcCBtX3N0
eWxlTWFwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAppbmRleCA4NTU0YWY2OWMxNzU0NjdjM2Q0
YzhkYjIxMTdkYTNkZTU0Njg2Yzg1Li45MDEyODRhYWJkNWFkMDZhZmE0MjViZjY0OTQ1MDYyNjA1
NmU0MDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcApAQCAtNzgsNiArNzgsOSBAQCB2b2lk
IFN0eWxlUnVsZUJhc2U6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pIGNvbnN0CiAgICAgY2FzZSBLZXlmcmFtZXM6CiAgICAgICAgIHN0YXRpY19j
YXN0PGNvbnN0IFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVt
b3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEhv
c3Q6CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZUJsb2NrKj4odGhpcyktPnJl
cG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZvKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgVW5rbm93bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlm
cmFtZToKQEAgLTExMyw2ICsxMTYsOSBAQCB2b2lkIFN0eWxlUnVsZUJhc2U6OmRlc3Ryb3koKQog
ICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5bGVSdWxl
S2V5ZnJhbWVzKj4odGhpcyk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEhvc3Q6CisgICAg
ICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4odGhpcyk7CisgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5
ZnJhbWU6CkBAIC0xNDYsNiArMTUyLDggQEAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBTdHls
ZVJ1bGVCYXNlOjpjb3B5KCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBLZXlm
cmFtZXM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFt
ZXMqPih0aGlzKS0+Y29weSgpOworICAgIGNhc2UgSG9zdDoKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IFN0eWxlUnVsZUhvc3QqPih0aGlzKS0+Y29weSgpOwogICAgIGNhc2UgVW5r
bm93bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlmcmFtZToKQEAgLTE4Nyw2ICsx
OTUsNyBAQCBQYXNzUmVmUHRyPENTU1J1bGU+IFN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3Jh
cHBlcihDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldAogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAg
ICAgICBydWxlID0gV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6Y3JlYXRlKHN0YXRpY19jYXN0PFN0
eWxlUnVsZUtleWZyYW1lcyo+KHNlbGYpLCBwYXJlbnRTaGVldCk7CiAgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSG9zdDoKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAg
IGNhc2UgS2V5ZnJhbWU6CkBAIC0zNzcsNCArMzg2LDE0IEBAIHZvaWQgU3R5bGVSdWxlUmVnaW9u
OjpyZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0CiAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIobV9zZWxlY3Rvckxpc3QpOwogfQog
CitTdHlsZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFz
ZT4gPiYgYWRvcHRSdWxlcykKKyAgICA6IFN0eWxlUnVsZUJsb2NrKEhvc3QsIGFkb3B0UnVsZXMp
Cit7Cit9CisKK1N0eWxlUnVsZUhvc3Q6OlN0eWxlUnVsZUhvc3QoY29uc3QgU3R5bGVSdWxlSG9z
dCYgbykKKyAgICA6IFN0eWxlUnVsZUJsb2NrKG8pCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAppbmRleCA3N2JkMmRjNjNlNTc5YTE2ZmE2ODQzZDdl
MDVlOWNkNzk4YjYxOTdjLi42MDM3NGJiYTFlYWY1Mjg1NWViYmEyYzAwYmRhMTAyMTg2NGM3Mjg3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICAg
ICAgUGFnZSwKICAgICAgICAgS2V5ZnJhbWVzLAogICAgICAgICBLZXlmcmFtZSwgLy8gTm90IHVz
ZWQuIFRoZXNlIGFyZSBpbnRlcm5hbGx5IG5vbi1ydWxlIFN0eWxlS2V5ZnJhbWUgb2JqZWN0cy4K
KyAgICAgICAgSG9zdCwKICAgICAgICAgUmVnaW9uID0gMTYKICAgICB9OwogICAgIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KQEAgLTU4LDYg
KzU5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTdHlsZVJ1bGUoKSBjb25zdCB7IHJldHVybiB0
eXBlKCkgPT0gU3R5bGU7IH0KICAgICBib29sIGlzUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJu
IHR5cGUoKSA9PSBSZWdpb247IH0KICAgICBib29sIGlzSW1wb3J0UnVsZSgpIGNvbnN0IHsgcmV0
dXJuIHR5cGUoKSA9PSBJbXBvcnQ7IH0KKyAgICBib29sIGlzSG9zdFJ1bGUoKSBjb25zdCB7IHJl
dHVybiB0eXBlKCkgPT0gSG9zdDsgfQogCiAgICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBj
b3B5KCkgY29uc3Q7CiAKQEAgLTIyMiw2ICsyMjQsMjAgQEAgcHJpdmF0ZToKICAgICBDU1NTZWxl
Y3Rvckxpc3QgbV9zZWxlY3Rvckxpc3Q7CiB9OwogCitjbGFzcyBTdHlsZVJ1bGVIb3N0IDogcHVi
bGljIFN0eWxlUnVsZUJsb2NrIHsKKyBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5
bGVSdWxlSG9zdD4gY3JlYXRlKFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRS
dWxlcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVSdWxlSG9zdChh
ZG9wdFJ1bGVzKSk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVIb3N0PiBjb3B5
KCkgY29uc3QgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZUhvc3QoKnRoaXMpKTsgfQor
CisgcHJpdmF0ZToKKyAgICBTdHlsZVJ1bGVIb3N0KFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFz
ZT4gPiYgYWRvcHRSdWxlcyk7CisgICAgU3R5bGVSdWxlSG9zdChjb25zdCBTdHlsZVJ1bGVIb3N0
Jik7Cit9OworIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gU3R5bGVSdWxl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKaW5kZXggYzg1ZDkw
MzliOTRhMDJmYmI4OWI1NWE0M2NmMzM0ZTRjZmNmNGY4NC4uZjdiNDJjNTZmOGEwNTc1NTBhZjEy
YjBkNGM3YzdhYjMyYmY3NTkzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250
ZW50cy5jcHAKQEAgLTQzMSw2ICs0MzEsMTAgQEAgc3RhdGljIGJvb2wgY2hpbGRSdWxlc0hhdmVG
YWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGUKICAg
ICAgICAgICAgIGlmIChjaGlsZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMo
c3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlUmVnaW9uKj4ocnVsZSktPmNoaWxkUnVsZXMoKSkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpIb3N0OgorICAgICAgICAgICAgaWYgKGNoaWxkUnVsZXNI
YXZlRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcyhzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1
bGVIb3N0Kj4ocnVsZSktPmNoaWxkUnVsZXMoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpJbXBv
cnQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgY2FzZSBTdHls
ZVJ1bGVCYXNlOjpQYWdlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jv
b3QuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCmluZGV4IGI5YzQ4MWMx
ODk4NjQ4MWUxOWI2MjZmNjk0YzIwNmRmMTIyMTQ3NGQuLjRiMzcxZGVjYjA2YWI3ODhmZjk5MmI3
ZDFkY2I1ZDAyZTljOWJkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dS
b290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKQEAgLTU1LDYg
KzU1LDcgQEAgU2hhZG93Um9vdDo6U2hhZG93Um9vdChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAg
LCBtX2FwcGx5QXV0aG9yU3R5bGVzKGZhbHNlKQogICAgICwgbV9yZXNldFN0eWxlSW5oZXJpdGFu
Y2UoZmFsc2UpCiAgICAgLCBtX2luc2VydGlvblBvaW50QXNzaWduZWRUbygwKQorICAgICwgbV9u
dW1iZXJPZlNoYWRvd0VsZW1lbnRDaGlsZHJlbigwKQogewogICAgIEFTU0VSVChkb2N1bWVudCk7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAppbmRleCBkOWI0MjVjNjA4M2IxN2FmODgyNmU2
MTY0Mjc4MWY1NTI1MDc1MjUwLi4yZTUxNmZiMWJiNGNlZjdiNjNkZjI2YjY0MzdkNGZlNTdjMDNi
NmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKQEAgLTg5LDYgKzg5LDEwIEBAIHB1YmxpYzoK
ICAgICBJbnNlcnRpb25Qb2ludCogYXNzaWduZWRUbygpIGNvbnN0OwogICAgIHZvaWQgc2V0QXNz
aWduZWRUbyhJbnNlcnRpb25Qb2ludCopOwogCisgICAgdm9pZCByZWdpc3RlclNoYWRvd0VsZW1l
bnQoKSB7ICsrbV9udW1iZXJPZlNoYWRvd0VsZW1lbnRDaGlsZHJlbjsgfQorICAgIHZvaWQgdW5y
ZWdpc3RlclNoYWRvd0VsZW1lbnQoKSB7IC0tbV9udW1iZXJPZlNoYWRvd0VsZW1lbnRDaGlsZHJl
bjsgfQorICAgIGJvb2wgaGFzU2hhZG93SW5zZXJ0aW9uUG9pbnQoKSBjb25zdCB7IHJldHVybiBt
X251bWJlck9mU2hhZG93RWxlbWVudENoaWxkcmVuID4gMDsgfQorCiAjaWZuZGVmIE5ERUJVRwog
ICAgIFNoYWRvd1Jvb3RUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICNlbmRp
ZgpAQCAtMTA2LDYgKzExMCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FwcGx5QXV0aG9yU3R5
bGVzIDogMTsKICAgICBib29sIG1fcmVzZXRTdHlsZUluaGVyaXRhbmNlIDogMTsKICAgICBJbnNl
cnRpb25Qb2ludCogbV9pbnNlcnRpb25Qb2ludEFzc2lnbmVkVG87CisgICAgc2l6ZV90IG1fbnVt
YmVyT2ZTaGFkb3dFbGVtZW50Q2hpbGRyZW47CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgU2hhZG93
Um9vdFR5cGUgbV90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5
bGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAK
aW5kZXggMjY5OTBhNWRmMjg0YTk3YzZhMjQxZjVjNzBhMjhlYjhkODc3ZTkxOC4uMDBhNDNjMmU0
Yjk3ZDBiYjQ5MzdkMjlhNzIwMTgyOWFlM2MzNGVhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTdHlsZUVsZW1lbnQuY3BwCkBAIC0xNDUsNiArMTQ1LDcgQEAgdm9pZCBIVE1MU3R5bGVFbGVt
ZW50OjpyZWdpc3RlcldpdGhTY29waW5nTm9kZShib29sIHNjb3BlZCkKICAgICB9CiAKICAgICBz
Y29wZS0+cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworCiAgICAgc2NvcGUtPnNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5w
YXJzaW5nKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+
c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5jcHAKaW5kZXggOTM4NDM5NjEyY2Ey
MWQyNjllNTc3OGE5NmIxNTk4MGVmNzU0MmI5YS4uNWM1ZGJlOTRmZmU0NDZlNmZlMGI2M2Y2ZDBl
N2ViNjNlNjQ5M2UxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRN
TFNoYWRvd0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxT
aGFkb3dFbGVtZW50LmNwcApAQCAtNDEsNiArNDEsNyBAQCBjbGFzcyBEb2N1bWVudDsKIAogaW5s
aW5lIEhUTUxTaGFkb3dFbGVtZW50OjpIVE1MU2hhZG93RWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBJbnNlcnRpb25Qb2ludCh0
YWdOYW1lLCBkb2N1bWVudCkKKyAgICAsIG1fcmVnaXN0ZXJlZFdpdGhTaGFkb3dSb290KGZhbHNl
KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKEhUTUxOYW1lczo6c2hhZG93VGFnKSk7CiB9CkBA
IC02OCw0ICs2OSwzMSBAQCBib29sIEhUTUxTaGFkb3dFbGVtZW50Ojpkb2VzU2VsZWN0RnJvbUhv
c3RDaGlsZHJlbigpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitOb2RlOjpJbnNlcnRp
b25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxTaGFkb3dFbGVtZW50OjppbnNlcnRlZEludG8oQ29u
dGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbnQpCit7CisgICAgSW5zZXJ0aW9uUG9pbnQ6Omluc2Vy
dGVkSW50byhpbnNlcnRpb25Qb2ludCk7CisKKyAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmluRG9j
dW1lbnQoKSAmJiBpc0FjdGl2ZSgpKSB7CisgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0g
c2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICByb290LT5yZWdpc3RlclNoYWRvd0VsZW1lbnQo
KTsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFdpdGhTaGFkb3dSb290ID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBJbnNlcnRpb25Eb25lOworfQorCit2b2lkIEhUTUxT
aGFkb3dFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlKiBpbnNlcnRpb25Qb2ludCkK
K3sKKyAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSAmJiBtX3JlZ2lzdGVyZWRX
aXRoU2hhZG93Um9vdCkgeworICAgICAgICBTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgp
OworICAgICAgICBpZiAoIXJvb3QpCisgICAgICAgICAgICByb290ID0gaW5zZXJ0aW9uUG9pbnQt
PnNoYWRvd1Jvb3QoKTsKKyAgICAgICAgaWYgKHJvb3QpCisgICAgICAgICAgICByb290LT51bnJl
Z2lzdGVyU2hhZG93RWxlbWVudCgpOworICAgICAgICBtX3JlZ2lzdGVyZWRXaXRoU2hhZG93Um9v
dCA9IGZhbHNlOworICAgIH0KKyAgICBJbnNlcnRpb25Qb2ludDo6cmVtb3ZlZEZyb20oaW5zZXJ0
aW9uUG9pbnQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuaAppbmRleCBhNGVjZGIzYWQ0NWZiOGVj
NGU5YWE1MDAwYTAxZTNhZWQxY2QyMGRjLi4xMTlmYTlmOTVkZWY2Mjc0MTYyY2IxODg5NDlmZDQ3
MWFhZGJmYjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MU2hh
ZG93RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dF
bGVtZW50LmgKQEAgLTQ2LDggKzQ2LDE0IEBAIHB1YmxpYzoKICAgICBib29sIGlzU2VsZWN0VmFs
aWQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBkb2VzU2VsZWN0
RnJvbUhvc3RDaGlsZHJlbigpIGNvbnN0OwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJbnNl
cnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlKikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqKSBPVkVS
UklERTsKKwogcHJpdmF0ZToKICAgICBIVE1MU2hhZG93RWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqKTsKKworICAgIGJvb2wgbV9yZWdpc3RlcmVkV2l0aFNoYWRvd1Jvb3Q7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMGUyY2M2ZDNhZjNmY2MzOGU2
OWVlYzI2ODFhOGQ4ODc3YjI3NGMzZC4uNjY0NzdhNzczZTRjZThlYmFiNzFmMmUyZjFmNTQ4OTM2
NDdlOGY0NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA4LTA3ICBUYWthc2hpIFNha2Ft
b3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0gTmVlZHMgQGhv
c3QgcnVsZSBmb3IgU2hhZG93RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvcHNldWRvLWhvc3QtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvcHNldWRvLWhvc3QuaHRt
bDogQWRkZWQuCisKIDIwMTItMDgtMDYgIFRha2FzaGkgVG95b3NoaW1hICA8dG95b3NoaW1AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJlYmFzZWxpbmUgZm9yIHIxMjQ4MzYu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLWhvc3QtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1ob3N0LWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hMWYzYjFjMjU1MTY5NTY3ODcyNWJkNjY1MTgxMzEzNDM4NjQ5
YTE0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L3BzZXVk
by1ob3N0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE1IEBACitob3N0OiByZ2IoMjU1LCAwLCAw
KQoraG9zdDogcmdiKDI1NSwgMCwgMCkKK2hvc3RBOiByZ2IoMjU1LCAwLCAwKQoraG9zdEI6IHJn
YigwLCAwLCAyNTUpCitob3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAx
MjgpCitob3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJn
YigxMjgsIDEyOCwgMTI4KQoraG9zdDogcmdiKDI1NSwgMjU1LCAwKQoraG9zdDogcmdiKDI1NSwg
MCwgMCkKK25lc3RlZEhvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMjU1LCAwLCAwKQor
aG9zdDogcmdiKDI1NSwgMjU1LCAwKQorSGVsbG8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZG9tL3NoYWRvdy9wc2V1ZG8taG9zdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hh
ZG93L3BzZXVkby1ob3N0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Q0YjUxMWVlMDJmYTlkNzUxZTU3ZTE2
OWIwMGE2ZDg3N2Q1M2E2ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy9wc2V1ZG8taG9zdC5odG1sCkBAIC0wLDAgKzEsMTkwIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjaG9zdCB7CisgIGNvbG9yOiBncmF5OworfQor
PC9zdHlsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9wb2x5ZmlsbC5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0PgorZnVuY3Rpb24gZHVtcENvbXB1dGVkU3R5bGUobm9kZSkKK3sKKyAgICBkZWJ1
Zyhub2RlLmlkICsgIjogIiArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUo
bm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7Cit9CisKK2Z1bmN0aW9uIHBy
ZXByb2Nlc3NGb3JUZXN0KCkKK3sKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInBhcmVudCIpOworICAgIHBhcmVudC5pbm5lckhUTUwgPSAnPGRpdiBpZD0iaG9zdCI+
PHNwYW4+SGVsbG88L3NwYW4+PC9kaXY+JzsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZUNvbnRl
bnRDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktp
dFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3Qg
eyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAg
IGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlU2hhZG93
Q2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRT
aGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsg
ZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgZHVt
cENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0V2l0aFNlbGVjdG9y
KCkKK3sKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcmVudCIp
OworICAgIHBhcmVudC5pbm5lckhUTUwgPSAiPHN0eWxlIHNjb3BlZD4gLmhvc3QgeyBjb2xvcjog
Z3JheSB9Ozwvc3R5bGU+IgorICAgICAgICArICI8ZGl2IGlkPSdob3N0QScgY2xhc3M9J2hvc3Qn
PjxzcGFuPkhlbGxvPC9zcGFuPjwvZGl2PiIKKyAgICAgICAgKyAiPHNwYW4gaWQ9J2hvc3RCJyBj
bGFzcz0naG9zdCc+PHNwYW4+V29ybGQ8L3NwYW4+PC9zcGFuPiI7CisKKyAgICB2YXIgaG9zdEEg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdEEiKTsKKyAgICB2YXIgc2hhZG93QSA9IG5l
dyBXZWJLaXRTaGFkb3dSb290KGhvc3RBKTsKKyAgICB2YXIgc3R5bGUgPSAiPHN0eWxlPkBob3N0
IHsgZGl2IHsgY29sb3I6IHJlZDsgfSBzcGFuIHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+IjsK
KyAgICBzaGFkb3dBLmlubmVySFRNTCA9IHN0eWxlICsgIjxzaGFkb3c+PC9zaGFkb3c+IjsKKwor
ICAgIHZhciBob3N0QiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0QiIpOworICAgIHZh
ciBzaGFkb3dCID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdEIpOworICAgIHNoYWRvd0IuaW5u
ZXJIVE1MID0gc3R5bGUgKyAiPHNoYWRvdz48L3NoYWRvdz4iOworCisgICAgZHVtcENvbXB1dGVk
U3R5bGUoaG9zdEEpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3RCKTsKK30KKworZnVuY3Rp
b24gdGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVkKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgp
OworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2
YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVy
SFRNTCA9ICI8ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08
L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+PGRpdj48c3R5bGUgc2NvcGVkPkBob3N0IHsgZGl2IHsg
Y29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+PC9kaXY+PC9kaXY+IjsKKyAgICBkdW1wQ29tcHV0ZWRT
dHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFBzZXVkb0hvc3RXaXRoRmFsbGJhY2tTaGFk
b3coKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2Vi
S2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0
U2hhZG93Um9vdChob3N0KTsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5A
aG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7
CisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxjb250ZW50PjxzaGFkb3c+PC9zaGFk
b3c+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0
aW9uIHRlc3RUd29TaGFkb3dSb290c0Nhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7
CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZh
ciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91
bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBvbGRlc3RTaGFk
b3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5
bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0g
IjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9z
aGFkb3c+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVz
dFR3b1NoYWRvd1Jvb3RzQ3JlYXRpbmdEaWZmZXJlbnRPcmRlckNhc2UoKQoreworICAgIHByZXBy
b2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
aG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsK
KyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29s
b3I6IGJsdWU7IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIG9sZGVzdFNoYWRv
dy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHls
ZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30K
KworZnVuY3Rpb24gdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50
KCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktp
dFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9v
dChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdCho
b3N0KTsKKworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c2hhZG93Pjwvc2hhZG93
PiI7CisgICAgeW91bmdlclNoYWRvdy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PC9jb250ZW50PiI7
CisgICAgb2xkZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9y
OiBncmVlbjsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93
LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxl
Pjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQor
CitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvdygpCit7Cisg
ICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dS
b290KGhvc3QpOworICAgIHZhciBvbGRlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhv
c3QpOworICAgIHZhciB5b3VuZ2VyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7
CisgICAgdmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisK
KyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29s
b3I6IHllbGxvdzsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgeW91bmdlclNo
YWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwv
c3R5bGU+PGRpdj5pbmVydDwvZGl2PiI7CisgICAgb2xkZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxz
dHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBncmVlbjsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hh
ZG93PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYg
eyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBD
b21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0TmVzdGVkQ2FzZSgpCit7Cisg
ICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG91dGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jv
b3QoaG9zdCk7CisgICAgb3V0ZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9zdCB7IGRp
diB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGRpdiBpZD0ibmVzdGVkSG9zdCI+SW5uZXJTaGFk
b3c8L2Rpdj4nOworICAgIHZhciBuZXN0ZWQgPSBvdXRlclNoYWRvdy5nZXRFbGVtZW50QnlJZCgi
bmVzdGVkSG9zdCIpOworICAgIHZhciBpbm5lclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290
KG5lc3RlZCk7CisgICAgaW5uZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9zdCB7IGRp
diB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPlNob3cgPHNoYWRvdz48L3NoYWRvdz4gaW4gb3V0
ZXIuJzsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKKyAgICBkdW1wQ29tcHV0ZWRTdHls
ZShuZXN0ZWQpOworfQorCitmdW5jdGlvbiB0ZXN0SG9zdFZzU2NvcGVkU3R5bGUoKQoreworICAg
IHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaG9zdCIpOworICAgIGhvc3QuaW5uZXJIVE1MID0gIjxzdHlsZSBzY29wZWQ+I2hvc3Qg
eyBjb2xvcjogeWVsbG93OyB9PC9zdHlsZT48c3Bhbj5IZWxsbzwvc3Bhbj4iOworICAgIHZhciBz
aGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1M
ID0gIjxzdHlsZT5AaG9zdCB7ICNob3N0IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVu
dD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rp
b24gdGVzdEhvc3RWc0lubGluZVN0eWxlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOwor
ICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICBob3N0
LnN0eWxlLmNvbG9yID0gInllbGxvdyI7CisgICAgaG9zdC5pbm5lckhUTUwgPSAiPHNwYW4+SGVs
bG88L3NwYW4+IjsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7
CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVk
OyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxl
KGhvc3QpOworfQorCitmdW5jdGlvbiBydW5UZXN0cygpCit7CisgICAgdGVzdFNpbXBsZUNvbnRl
bnRDYXNlKCk7CisgICAgdGVzdFNpbXBsZVNoYWRvd0Nhc2UoKTsKKyAgICB0ZXN0SG9zdFdpdGhT
ZWxlY3RvcigpOworICAgIHRlc3RQc2V1ZG9Ib3N0V2l0aFNjb3BlZCgpOworICAgIHRlc3RQc2V1
ZG9Ib3N0V2l0aEZhbGxiYWNrU2hhZG93KCk7CisgICAgdGVzdFR3b1NoYWRvd1Jvb3RzQ2FzZSgp
OworICAgIHRlc3RUd29TaGFkb3dSb290c0NyZWF0aW5nRGlmZmVyZW50T3JkZXJDYXNlKCk7Cisg
ICAgdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50KCk7CisgICAg
dGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3coKTsKKyAgICB0ZXN0TmVzdGVk
Q2FzZSgpOworICAgIHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpOworICAgIHRlc3RIb3N0VnNJbmxp
bmVTdHlsZSgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3Rz
KCkiPgorICA8ZGl2IGlkPSJwYXJlbnQiPgorICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159626</attachid>
            <date>2012-08-20 23:44:41 -0700</date>
            <delta_ts>2012-09-02 23:08:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88606-20120821154400.patch</filename>
            <type>text/plain</type>
            <size>33946</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzk3MGJkMmE3ZThhN2E0
MjljNWQxNDlhNzYyNWQ2ZWI4NGNhMmU4YS4uYTdlMTI1NGU3N2EwZWZhOGE2YjhhYjVkNDdjZTRl
NzE3MWFhYTRiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDEyLTA4LTIwICBUYWth
c2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0g
TmVlZHMgQGhvc3QgcnVsZSBmb3IgU2hhZG93RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjA2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50ZWQgQGhvc3QtQHJ1bGVzIGFj
Y29yZGluZyB0byB0aGUgc2hhZG93IGRvbSBzcGVjOgorICAgICAgICBodHRwOi8vZHZjcy53My5v
cmcvaGcvd2ViY29tcG9uZW50cy9yYXctZmlsZS90aXAvc3BlYy9zaGFkb3cvaW5kZXguaHRtbCNo
b3N0LWF0LXJ1bGUKKyAgICAgICAgVGhlIGRlc2lnbiBkb2MgaXM6CisgICAgICAgIGh0dHBzOi8v
ZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVAyeW9yY2hGOGxjaTJzY2NyLW1WU1JmMmR0dmpL
ZWl1eVFXekNCMmJFQTgvZWRpdAorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9wc2V1
ZG8taG9zdC5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhbW1hci55OgorICAgICAgICBBZGRl
ZCBydWxlcyBmb3IgcGFyc2luZyBAaG9zdCBALXJ1bGVzLgorICAgICAgICAqIGNzcy9DU1NQYXJz
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRlY3RBdFRva2VuKToKKyAg
ICAgICAgQWRkZWQgYSBuZXcgdG9rZW4gIkBob3N0Ii4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6Y3JlYXRlSG9zdFJ1bGUpOgorICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgdG8gY3Jl
YXRlIGFuIEBob3N0IEAtcnVsZSwgd2hpY2ggaXMgaW52b2tlZCBmcm9tCisgICAgICAgIENTU0dy
YW1tYXIueS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDoK
KyAgICAgICAgQWRkZWQgYSBkZWNsYXJhdGlvbiBvZiB0aGUgYWJvdmUgbmV3IG1ldGhvZDogY3Jl
YXRlSG9zdFJ1bGUuCisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oOgorICAg
ICAgICBBZGRlZCBIT1NUX1JVTEUgdG8gZW51bSBUeXBlLgorICAgICAgICAqIGNzcy9TdHlsZVJl
c29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6YWRkSG9zdFJ1bGUpOgorICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgdG8gcmVn
aXN0ZXIgQGhvc3QgQC1ydWxlcyB3aXRoIHNoYWRvdyByb290cy4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgTW92ZWQgdGhl
IGNvZGUgZm9yICJ0cmFuc2ZlcmluZyBtYXRjaGVkIHJ1bGVzIiBmcm9tCisgICAgICAgIHNvcnRB
bmRUcmFuc2Zlck1hdGNoZWRSdWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyk6CisgICAgICAgIE1vZGlmaWVkIHRvIHVzZSB0
cmFuc2Zlck1hdGNoZWRSdWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmF0
SG9zdFJ1bGVTZXRGb3JTY29wZSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1ldGhvZCBmb3IgZmlu
ZGluZyBydWxlc2V0cyBmcm9tIHRoZSBnaXZlbiBzaGFkb3cgcm9vdC4KKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoZXNIb3N0UnVsZXMpOgorICAgICAgICBBIG5ldyBtZXRo
b2QgdG8gY2hlY2sgd2hldGhlciBhbnkgQGhvc3QgQC1ydWxlcyB3aWxsIGJlIGFwcGxpZWQgdG8K
KyAgICAgICAgdGhlIGdpdmVuIGVsZW1lbnQgb3Igbm90LiBUaGlzIGlzIHByZXBhcmVkIGZvciBz
aGFyZWQgc3R5bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0
UnVsZXMpOgorICAgICAgICBBIG5ldyBtZXRob2QgdG8gZmluZCBtYXRjaGVkIGhvc3QgcnVsZXMg
d2hlbiBhbiBlbGVtZW50IGlzIGdpdmVuLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bWF0Y2hBdXRob3JSdWxlcyk6CisgICAgICAgIFJlbW92ZWQgc29ydEFuZFRyYW5zZmVyTWF0
Y2hlZFJ1bGVzLiBJbnN0ZWFkLCBhZGRlZCBzb3J0TWF0Y2hlZFJ1bGVzLgorICAgICAgICBBZnRl
ciBzb3J0aW5nLCBpbnZva2UgbWF0Y2hIb3N0UnVsZXMgYW5kIHRyYW5zZmVyIG1hdGNoZWQgcnVs
ZXMuCisgICAgICAgIFNpbmNlIEBob3N0IEAtcnVsZXMgc2hvdWxkIG92ZXJyaWRlIGV4aXN0aW5n
IGF1dGhvciBydWxlcywgZmlyc3RseQorICAgICAgICBhdXRob3IgcnVsZXMgd2lsbCBiZSBhcHBs
aWVkLiBTZWNvbmRseSBAaG9zdCBALXJ1bGVzIHdpbGwgYmUgYXBwbGllZC4KKyAgICAgICAgSG93
ZXZlciBpZiBzb3J0aW5nIEBob3N0IEAtcnVsZXMgYW5kIGF1dGhvciBydWxlcyBpbiB0aGUgc2Ft
ZSB0aW1lLAorICAgICAgICB0aGUgYXBwbHlpbmcgb3JkZXIgd2lsbCBicmVhay4KKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6Cisg
ICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgor
ICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxl
QmFzZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFz
ZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjb3B5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICBJbXBsZW1lbnRlZCBjbGFzcyBTdHlsZVJ1bGVIb3N0LiBUaGUgY2xh
c3MgaXMgYWxtb3N0IHRoZSBzYW1lIGFzCisgICAgICAgIFN0eWxlUnVsZUJsb2NrIGV4Y2VwdCB0
eXBlLgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UnVsZUJhc2U6OmlzSG9zdFJ1bGUpOgorICAgICAgICAoU3R5bGVSdWxlSG9zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSdWxlSG9zdDo6Y29weSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU3R5
bGVTaGVldENvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNoaWxkUnVsZXNIYXZlRmFp
bGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcyk6CisgICAgICAgICogZG9tL1NoYWRvd1Jvb3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6U2hhZG93Um9vdCk6CisgICAgICAgIEFk
ZGVkIGEgbmV3IG1lbWJlciB2YXJpYWJsZSwgd2hpY2ggaXMgYSBudW1iZXIgb2Ygc2hhZG93IGVs
ZW1lbnRzLgorICAgICAgICAqIGRvbS9TaGFkb3dSb290Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
aGFkb3dSb290OjpyZWdpc3RlclNoYWRvd0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
ZG93Um9vdDo6dW5yZWdpc3RlclNoYWRvd0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
ZG93Um9vdDo6aGFzU2hhZG93SW5zZXJ0aW9uUG9pbnQpOgorICAgICAgICAoU2hhZG93Um9vdCk6
CisgICAgICAgIFRvIHF1aWNrbHkgZGV0ZWN0IHdoZXRoZXIgdGhlcmUgYXJlIGFueSA8c2hhZG93
PnMgaW4gYSBzaGFkb3cgRE9NCisgICAgICAgIHN1YnRyZWUsIGFkZCByZWdpc3Rlci91bnJlZ2lz
dGVyU2hhZG93RWxlbWVudCB0byBjb3VudCBudW1iZXIgb2YKKyAgICAgICAgPHNoYWRvdz4uIFdp
dGhvdXQgdGhlIG1ldGhvZHMsIGl0IGlzIHJlcXVpcmVkIHRvIHRyYXZlcnNlIGFuIGVudGlyZQor
ICAgICAgICBzaGFkb3cgRE9NIHN1YnRyZWUgdG8ga25vdyB3aGV0aGVyIHRoZXJlIGV4aXN0IGFu
eSA8c2hhZG93PnMgb3Igbm90LgorICAgICAgICBJdCB3b3VsZCBiZSB2ZXJ5IHRpbWUtY29uc3Vt
aW5nLgorICAgICAgICAqIGh0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxTaGFkb3dFbGVtZW50OjpIVE1MU2hhZG93RWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2hhZG93RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNoYWRvd0VsZW1lbnQ6OnJlbW92ZWRG
cm9tKToKKyAgICAgICAgQWRkZWQgaW5zZXJ0ZWRJbnRvIGFuZCByZW1vdmVkRnJvbSB0byByZWdp
c3Rlci91bnJlZ2lzdGVyIHRoZSA8c2hhZG93PgorICAgICAgICB3aXRoIGl0cyBzaGFkb3cgcm9v
dC4gQXMgaXQgZG9lcyBub3QgZGVwZW5kIG9uIDxjb250ZW50PiB3aGV0aGVyCisgICAgICAgIEBo
b3N0IEAtcnVsZXMgd2lsbCBiZSBhcHBsaWVkIG9yIG5vdCwgbW9kaWZpZWQgb25seSBIVE1MU2hh
ZG93RWxlbWVudCwKKyAgICAgICAgbm90IEhUTUxDb250ZW50RWxlbWVudCBvciBJbnNlcnRpb25Q
b2ludC4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5oOgorCiAyMDEy
LTA4LTIwICBSb2IgQnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgUmVkdWNlIEdyYWRp
ZW50QXR0cmlidXRlcyBvYmplY3Qgc2l6ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYW1tYXIueSBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKaW5kZXggMjlm
YWI0ZmZlZGQ2NGFlOWQ5MTYwYzdmNDM4ZWM2YjUwMWQzMzBkMS4uZDVmN2Y5YTYyODFkNjE3OTE0
NjcxYTk5OTZjM2NiOWUyYWFkMDQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYW1tYXIueQorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CkBAIC0xMzIs
NiArMTMyLDcgQEAgc3RhdGljIGludCBjc3N5eWxleChZWVNUWVBFKiB5eWx2YWwsIENTU1BhcnNl
ciogcGFyc2VyKQogJXRva2VuIFBBR0VfU1lNCiAldG9rZW4gTUVESUFfU1lNCiAldG9rZW4gRk9O
VF9GQUNFX1NZTQorJXRva2VuIEhPU1RfU1lNCiAldG9rZW4gQ0hBUlNFVF9TWU0KICV0b2tlbiBO
QU1FU1BBQ0VfU1lNCiAldG9rZW4gVkFSRlVOQ1RJT04KQEAgLTIxOSw2ICsyMjAsNyBAQCBzdGF0
aWMgaW50IGNzc3l5bGV4KFlZU1RZUEUqIHl5bHZhbCwgQ1NTUGFyc2VyKiBwYXJzZXIpCiAldHlw
ZSA8cnVsZT4gcGFnZQogJXR5cGUgPHJ1bGU+IG1hcmdpbl9ib3gKICV0eXBlIDxydWxlPiBmb250
X2ZhY2UKKyV0eXBlIDxydWxlPiBob3N0CiAldHlwZSA8cnVsZT4ga2V5ZnJhbWVzCiAldHlwZSA8
cnVsZT4gaW52YWxpZF9ydWxlCiAldHlwZSA8cnVsZT4gc2F2ZV9ibG9jawpAQCAtNDE5LDYgKzQy
MSw3IEBAIHZhbGlkX3J1bGU6CiAgIHwgbmFtZXNwYWNlCiAgIHwgaW1wb3J0CiAgIHwgcmVnaW9u
CisgIHwgaG9zdAogICA7CiAKIHJ1bGU6CkBAIC04NDEsNiArODQ0LDIzIEBAIGZvbnRfZmFjZToK
ICAgICB9CiA7CiAKK2JlZm9yZV9ob3N0X3J1bGU6CisgICAgLyogZW1wdHkgKi8geworICAgICAg
ICBwYXJzZXItPm1hcmtSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6OkhPU1RfUlVM
RSk7CisgICAgfQorICAgIDsKKworaG9zdDoKKyAgICBiZWZvcmVfaG9zdF9ydWxlIEhPU1RfU1lN
IGF0X3J1bGVfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSAKKyAgICAneycgYXRfcnVsZV9ib2R5X3N0
YXJ0IG1heWJlX3NwYWNlIGJsb2NrX3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKKyAgICAgICAgJCQg
PSBwYXJzZXItPmNyZWF0ZUhvc3RSdWxlKCQ3KTsKKyAgICB9CisgICAgfCBiZWZvcmVfaG9zdF9y
dWxlIEhPU1RfU1lNIGF0X3J1bGVfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSAnOycgeworICAgICAg
ICAkJCA9IDA7CisgICAgICAgIHBhcnNlci0+cG9wUnVsZURhdGEoKTsKKyAgICB9CisgICAgOwor
IAogcmVnaW9uX3NlbGVjdG9yOgogICAgIHNlbGVjdG9yX2xpc3QgewogICAgICAgICBpZiAoJDEp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggNGEyZTM4YmI5Y2JjYWM0YThhMzQ1ZTFm
Y2FmNmUwZTQ3YTk5N2Y0ZS4uZmM3MTE2ZDdlZjYwMDdlZDA3MmNkNWZiZTVhZGIzNjE0OThiMjgz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTg5NDksNiArODk0OSwxMSBAQCBpbmxp
bmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdEF0VG9rZW4oaW50IGxlbmd0aCwgYm9vbCBoYXNFc2Nh
cGUpCiAgICAgICAgICAgICBtX3Rva2VuID0gRk9OVF9GQUNFX1NZTTsKICAgICAgICAgcmV0dXJu
OwogCisgICAgY2FzZSAnaCc6CisgICAgICAgIGlmIChsZW5ndGggPT0gNSAmJiBpc0VxdWFsVG9D
U1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3N0IikpCisgICAgICAgICAgICBtX3Rva2VuID0gSE9T
VF9TWU07CisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgJ2knOgogICAgICAgICBpZiAobGVu
Z3RoID09IDcgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIm1wb3J0IikpIHsK
ICAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKQEAgLTk3NzksNiAr
OTc4NCwyMiBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZUZvbnRGYWNlUnVsZSgp
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVh
dGVIb3N0UnVsZShSdWxlTGlzdCogcnVsZXMpCit7CisgICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0g
bV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOworICAgIFJlZlB0cjxTdHlsZVJ1
bGVIb3N0PiBydWxlOworICAgIGlmIChydWxlcykKKyAgICAgICAgcnVsZSA9IFN0eWxlUnVsZUhv
c3Q6OmNyZWF0ZSgqcnVsZXMpOworICAgIGVsc2UgeworICAgICAgICBSdWxlTGlzdCBlbXB0eVJ1
bGVzOworICAgICAgICBydWxlID0gU3R5bGVSdWxlSG9zdDo6Y3JlYXRlKGVtcHR5UnVsZXMpOwor
ICAgIH0KKyAgICBTdHlsZVJ1bGVIb3N0KiByZXN1bHQgPSBydWxlLmdldCgpOworICAgIG1fcGFy
c2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKKyAgICBwcm9jZXNzQW5kQWRkTmV3UnVs
ZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBD
U1NQYXJzZXI6OmFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3Qg
QXRvbWljU3RyaW5nJiB1cmkpCiB7CiAgICAgaWYgKCFtX3N0eWxlU2hlZXQgfHwgIW1fYWxsb3dO
YW1lc3BhY2VEZWNsYXJhdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggYWVjMWY2NjM1
NGE1MDVmODExY2Q1MzVmZDQ2YjVlNTc1ZjlkNGYyOC4uNjEwMGE4ZDA1NWNjMGQ4OWViM2JmNzFl
MDQxMTg0YzI4NzNmNTE3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMjc2LDYgKzI3Niw3
IEBAIHB1YmxpYzoKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVQYWdlUnVsZShQYXNzT3duUHRy
PENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2VsZWN0b3IpOwogICAgIFN0eWxlUnVsZUJhc2UqIGNy
ZWF0ZVJlZ2lvblJ1bGUoQ1NTU2VsZWN0b3JWZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBSdWxlTGlz
dCogcnVsZXMpOwogICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZU1hcmdpbkF0UnVsZShDU1NTZWxl
Y3Rvcjo6TWFyZ2luQm94VHlwZSk7CisgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlSG9zdFJ1bGUo
UnVsZUxpc3QqIHJ1bGVzKTsKICAgICB2b2lkIHN0YXJ0RGVjbGFyYXRpb25zRm9yTWFyZ2luQm94
KCk7CiAgICAgdm9pZCBlbmREZWNsYXJhdGlvbnNGb3JNYXJnaW5Cb3goKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCmluZGV4IDI0ZGFlZjRhOWEzMDY0Nzlh
YjFlMDEzNjJjM2VlZjdmZmM4OTUyMjQuLmFjNDUwMGJlMTMzMDcyZjEyMDIzYmNhMjRlMjdkNTBk
N2Y4Njg3ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJj
ZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgK
QEAgLTk0LDcgKzk0LDggQEAgc3RydWN0IENTU1J1bGVTb3VyY2VEYXRhIDogcHVibGljIFJlZkNv
dW50ZWQ8Q1NTUnVsZVNvdXJjZURhdGE+IHsKICAgICAgICAgRk9OVF9GQUNFX1JVTEUsCiAgICAg
ICAgIFBBR0VfUlVMRSwKICAgICAgICAgS0VZRlJBTUVTX1JVTEUsCi0gICAgICAgIFJFR0lPTl9S
VUxFCisgICAgICAgIFJFR0lPTl9SVUxFLAorICAgICAgICBIT1NUX1JVTEUKICAgICB9OwogCiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGNyZWF0ZShUeXBlIHR5cGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggZWE1OTUwZTU0Yzg5MDQwYTQ2
ZjEwYzI5ZDAwODJkOWZiMmFmM2Q5Yy4uN2YyMmM1OGFlNjEzM2ZjZWQ5OThiMmY5YzRjNDZhNTc0
ZWEwYjFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNjAsNiArNjAs
NyBAQAogI2luY2x1ZGUgIkNvdW50ZXIuaCIKICNpbmNsdWRlICJDb3VudGVyQ29udGVudC5oIgog
I2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKKyNpbmNsdWRlICJFbGVtZW50U2hhZG93LmgiCiAjaW5j
bHVkZSAiRm9udEZlYXR1cmVWYWx1ZS5oIgogI2luY2x1ZGUgIkZvbnRWYWx1ZS5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCkBAIC01NzMsNiArNTc0LDMwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
ZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQ
CiB9CiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQordm9pZCBTdHlsZVJlc29sdmVyOjphZGRI
b3N0UnVsZShTdHlsZVJ1bGVIb3N0KiBob3N0UnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKK3sKKyAgICBpZiAoIXNjb3BlIHx8
ICFzY29wZS0+aXNJblNoYWRvd1RyZWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2hhZG93
Um9vdCogc2hhZG93Um9vdCA9IHNjb3BlLT5zaGFkb3dSb290KCk7CisgICAgaWYgKCFzaGFkb3dS
b290KQorICAgICAgICByZXR1cm47CisgICAgY29uc3QgQ29udGFpbmVyTm9kZSogc2hhZG93SG9z
dCA9IHNoYWRvd1Jvb3QtPmhvc3QoKTsKKyAgICBpZiAoIXNoYWRvd0hvc3QpCisgICAgICAgIHJl
dHVybjsKKworICAgIFNjb3BlZFJ1bGVTZXRNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2F0
SG9zdFJ1bGVzLmFkZChzaGFkb3dSb290LCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0Lmlz
TmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gUnVsZVNldDo6
Y3JlYXRlKCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNo
aWxkUnVsZXMgPSBob3N0UnVsZS0+Y2hpbGRSdWxlcygpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjaGlsZFJ1bGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0eWxlUnVsZUJhc2Uq
IGhvc3RTdHlsaW5nUnVsZSA9IGNoaWxkUnVsZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChob3N0
U3R5bGluZ1J1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0
b3ItPnNlY29uZC0+YWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KGhvc3RTdHls
aW5nUnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHRydWUsIGZhbHNlKTsKKyAgICB9
Cit9CisKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0dXBTY29wZVN0YWNrKGNvbnN0IENvbnRhaW5l
ck5vZGUqIHBhcmVudCkKIHsKICAgICAvLyBUaGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIHNob3Vs
ZG4ndCBiZSB1c2VkIGlmIDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQgYW55d2hlcmUuCkBAIC05
MTksMTMgKzk0NCw4IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JSZWdpb24oUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlCiAgICAgfQogfQogCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVyOjp0cmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJl
c3VsdCYgcmVzdWx0KQogewotICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKLQogICAgIGlmIChtX2NoZWNr
ZXIubW9kZSgpID09IFNlbGVjdG9yQ2hlY2tlcjo6Q29sbGVjdGluZ1J1bGVzKSB7CiAgICAgICAg
IGlmICghbV9ydWxlTGlzdCkKICAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBTdGF0aWNDU1NSdWxl
TGlzdDo6Y3JlYXRlKCk7CkBAIC05NDcsNiArOTY3LDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQpCiAgICAgfQog
fQogCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0KQoreworICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAgICB0cmFuc2Zlck1h
dGNoZWRSdWxlcyhyZXN1bHQpOworfQorCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVk
QXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykK
IHsKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQpAQCAtOTk0LDYgKzEwMjMsNjEgQEAgdm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQs
IGJvb2wgaW5jbHVkZUVtcHQKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkK
K2lubGluZSBSdWxlU2V0KiBTdHlsZVJlc29sdmVyOjphdEhvc3RSdWxlU2V0Rm9yU2NvcGUoY29u
c3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKK3sKKyAgICBTY29wZWRSdWxlU2V0TWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fYXRIb3N0UnVsZXMuZmluZChzaGFkb3dSb290KTsKKyAgICByZXR1
cm4gaXQgIT0gbV9hdEhvc3RSdWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkgOiAwOyAKK30K
KworYm9vbCBTdHlsZVJlc29sdmVyOjptYXRjaGVzSG9zdFJ1bGVzKCkKK3sKKyAgICBpZiAobV9h
dEhvc3RSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVsZW1l
bnRTaGFkb3cqIHNoYWRvdyA9IG1fZWxlbWVudC0+c2hhZG93KCk7CisgICAgaWYgKCFzaGFkb3cp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3Qg
PSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dSb290OyBzaGFkb3dSb290ID0g
c2hhZG93Um9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsKKyAgICAgICAgaWYgKGF0SG9zdFJ1bGVT
ZXRGb3JTY29wZShzaGFkb3dSb290KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoIXNoYWRvd1Jvb3QtPmhhc1NoYWRvd0luc2VydGlvblBvaW50KCkpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK3ZvaWQgU3R5
bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcykKK3sKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIGlmIChtX2F0
SG9zdFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRWxlbWVudFNoYWRv
dyogc2hhZG93ID0gbV9lbGVtZW50LT5zaGFkb3coKTsKKyAgICBpZiAoIXNoYWRvdykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgVmVjdG9yPFJ1bGVTZXQqLCAxNj4gbWF0Y2hlZFJ1bGVzOyAKKyAg
ICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9v
dCgpOyBzaGFkb3dSb290OyBzaGFkb3dSb290ID0gc2hhZG93Um9vdC0+b2xkZXJTaGFkb3dSb290
KCkpIHsgCisgICAgICAgIGlmIChSdWxlU2V0KiBydWxlU2V0ID0gYXRIb3N0UnVsZVNldEZvclNj
b3BlKHNoYWRvd1Jvb3QpKQorICAgICAgICAgICAgbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlU2V0
KTsKKyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChtYXRjaGVkUnVsZXMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1w
dHlSdWxlcyk7CisgICAgb3B0aW9ucy5zY29wZSA9IG1fZWxlbWVudDsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsgLS1pKQorICAgICAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlcyhtYXRjaGVkUnVsZXMuYXQoaS0xKSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1
dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBVTlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5
UnVsZXMpOworI2VuZGlmCit9CisKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogICAgIG1f
bWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CkBAIC0xMDA4LDggKzEwOTIsMTIgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVk
ZUVtcHR5UnVsZXMKICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihtX2F1dGhvclN0
eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5s
YXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CiAKICAgICBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKHJl
c3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIGlmICghbV9tYXRjaGVkUnVsZXMuaXNFbXB0
eSgpKQorICAgICAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7CiAKLSAgICBzb3J0QW5kVHJhbnNmZXJN
YXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICBtYXRjaEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVF
bXB0eVJ1bGVzKTsKKyAgICBpZiAoIW1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAg
dHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpt
YXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVz
KQpAQCAtMTU3MSw2ICsxNjU5LDExIEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2Nh
dGVTaGFyZWRTdHlsZSgpCiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFw
cGx5LgogICAgIGlmIChtYXRjaGVzUnVsZVNldChtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5n
ZXQoKSkpCiAgICAgICAgIHJldHVybiAwOworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAg
Ly8gQ2FuJ3Qgc2hhcmUgaWYgQGhvc3QgQC1ydWxlcyBhcHBseS4KKyAgICBpZiAobWF0Y2hlc0hv
c3RSdWxlcygpKQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgogICAgIC8vIFRyYWNraW5nIGNo
aWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBn
ZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCiAgICAgaWYgKHBhcmVudFN0
eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTI3NTUsNiArMjg0OCwxMCBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxl
U2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdQogICAgICAgICAgICAg
YWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVSZWdpb24qPihydWxlKSwgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbik7CiAgICAgICAgIH0KICNlbmRpZgorI2lmIEVOQUJMRShTVFlM
RV9TQ09QRUQpCisgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzSG9zdFJ1bGUoKSkKKyAgICAgICAg
ICAgIHJlc29sdmVyLT5hZGRIb3N0UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4ocnVs
ZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHNjb3BlKTsKKyNlbmRpZgogICAgIH0KICAg
ICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQogICAgICAgICBzaHJpbmtUb0ZpdCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggNGU5ZmU5MTQ4ZGUyNTY3YWJiZWNiZDE4
M2IxMjNiY2U2Yzg4NTkyMC4uMTk0Y2NkMjU5NDY3NWYyODBkY2E5Yjk4ZGE3NjAyMDBhOGY0ZDQ2
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC03MSw2ICs3MSw3IEBAIGNsYXNz
IFJlbmRlclJlZ2lvbjsKIGNsYXNzIFJ1bGVEYXRhOwogY2xhc3MgUnVsZVNldDsKIGNsYXNzIFNl
dHRpbmdzOworY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNzIFN0YXRpY0NTU1J1bGVMaXN0OwogY2xh
c3MgU3R5bGVCdWlsZGVyOwogY2xhc3MgU3R5bGVJbWFnZTsKQEAgLTgxLDYgKzgyLDcgQEAgY2xh
c3MgU3R5bGVSdWxlOwogY2xhc3MgU3R5bGVSdWxlS2V5ZnJhbWVzOwogY2xhc3MgU3R5bGVSdWxl
UGFnZTsKIGNsYXNzIFN0eWxlUnVsZVJlZ2lvbjsKK2NsYXNzIFN0eWxlUnVsZUhvc3Q7CiBjbGFz
cyBTdHlsZVNoYWRlcjsKIGNsYXNzIFN0eWxlU2hlZXQ7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVu
dHM7CkBAIC0xMzUsNiArMTM3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcG9wUGFyZW50RWxlbWVu
dChFbGVtZW50Kik7CiAgICAgdm9pZCBwdXNoUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dS
b290Kik7CiAgICAgdm9pZCBwb3BQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsK
KyAgICB2b2lkIGFkZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3QqLCBib29sLCBjb25zdCBDb250YWlu
ZXJOb2RlKik7CiAKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQo
RWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFN0eWxlU2hhcmluZ0JlaGF2
aW9yID0gQWxsb3dTdHlsZVNoYXJpbmcsCiAgICAgICAgIFJ1bGVNYXRjaGluZ0JlaGF2aW9yID0g
TWF0Y2hBbGxSdWxlcywgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gMCk7CkBAIC0z
NTcsMTEgKzM2MCwxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRj
aFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hVc2VyUnVs
ZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNo
U2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsK
KyAgICB2b2lkIG1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlS
dWxlcyk7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJz
dFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAg
ICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqLCBpbnQmIGZpcnN0
UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwogICAg
IHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4q
LCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0
aW9ucyYpOworICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JIb3N0KFJ1bGVTZXQqLCBp
bnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9u
cyYpOwogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7
CiAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7CisgICAgdm9pZCB0cmFuc2Zlck1hdGNoZWRS
dWxlcyhNYXRjaFJlc3VsdCYpOwogICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVz
KE1hdGNoUmVzdWx0Jik7CiAKICAgICBib29sIGNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEm
LCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IDApOwpAQCAtNTQwLDYgKzU0NiwxMCBAQCBw
cml2YXRlOgogICAgIC8vIFRoaXMgaXMgdXNlZCB0byBkZWNpZGUgd2hldGhlciBtX3Njb3BpbmdF
bGVtZW50U3RhY2sgaXMgY29uc2lzdGVudCwgc2VwYXJhdGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tl
cjo6bV9wYXJlbnRTdGFjay4KICAgICBjb25zdCBDb250YWluZXJOb2RlKiBtX3Njb3BlU3RhY2tQ
YXJlbnQ7CiAgICAgaW50IG1fc2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4OworCisgICAgU2Nv
cGVkUnVsZVNldE1hcCBtX2F0SG9zdFJ1bGVzOworICAgIFJ1bGVTZXQqIGF0SG9zdFJ1bGVTZXRG
b3JTY29wZShjb25zdCBTaGFkb3dSb290Kik7CisgICAgYm9vbCBtYXRjaGVzSG9zdFJ1bGVzKCk7
CiAjZW5kaWYKIAogICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UnVsZS5jcHAKaW5kZXggMDNlZmMzYTM0ZTUxN2VlYjhiODQ1M2RmOGZiMjYyZmMwNDA4YTQ3NC4u
MzZjMGRiMzRlMmVhZTQwYTExYWI4YTUxNzRmNmE1ODMzOTYxMjU5YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUnVsZS5jcHAKQEAgLTc4LDYgKzc4LDkgQEAgdm9pZCBTdHlsZVJ1bGVCYXNlOjpyZXBvcnRN
ZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAg
IGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlm
cmFtZXMqPih0aGlzKS0+cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdElu
Zm8pOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBIb3N0OgorICAgICAgICBzdGF0aWNfY2Fz
dDxjb25zdCBTdHlsZVJ1bGVCbG9jayo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNh
Z2UobWVtb3J5T2JqZWN0SW5mbyk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFVua25vd246
CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xMTMsNiArMTE2LDkg
QEAgdm9pZCBTdHlsZVJ1bGVCYXNlOjpkZXN0cm95KCkKICAgICBjYXNlIEtleWZyYW1lczoKICAg
ICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMpOwogICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBIb3N0OgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8
U3R5bGVSdWxlSG9zdCo+KHRoaXMpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBVbmtub3du
OgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMTQ2LDYgKzE1Miw4
IEBAIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gU3R5bGVSdWxlQmFzZTo6Y29weSgpIGNvbnN0
CiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKj4odGhpcyktPmNvcHkoKTsKKyAg
ICBjYXNlIEhvc3Q6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVI
b3N0Kj4odGhpcyktPmNvcHkoKTsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0
OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xODcsNiArMTk1LDcgQEAgUGFzc1JlZlB0cjxDU1NS
dWxlPiBTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTU3R5bGVTaGVldCogcGFy
ZW50U2hlZXQKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgcnVsZSA9IFdlYktpdENTU0tl
eWZyYW1lc1J1bGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihzZWxm
KSwgcGFyZW50U2hlZXQpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEhvc3Q6CiAgICAgY2Fz
ZSBVbmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMzc3
LDQgKzM4NiwxNCBAQCB2b2lkIFN0eWxlUnVsZVJlZ2lvbjo6cmVwb3J0RGVzY2VuZGFudE1lbW9y
eVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdAogICAgIGluZm8uYWRkSW5zdHJ1
bWVudGVkTWVtYmVyKG1fc2VsZWN0b3JMaXN0KTsKIH0KIAorU3R5bGVSdWxlSG9zdDo6U3R5bGVS
dWxlSG9zdChWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpCisgICAg
OiBTdHlsZVJ1bGVCbG9jayhIb3N0LCBhZG9wdFJ1bGVzKQoreworfQorCitTdHlsZVJ1bGVIb3N0
OjpTdHlsZVJ1bGVIb3N0KGNvbnN0IFN0eWxlUnVsZUhvc3QmIG8pCisgICAgOiBTdHlsZVJ1bGVC
bG9jayhvKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxl
LmgKaW5kZXggN2I2MDI1MDQyYTE5OGVjNmVkNjZkNDhiMWEyN2EzZDk5MmQwMDk0Yi4uNjgwYjg0
MTRmY2U1MjhjZGYzYmY4YTc4MmZkM2RlNDVlNGE5MzkyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUu
aApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAgICAgICAgIFBhZ2UsCiAgICAgICAgIEtleWZy
YW1lcywKICAgICAgICAgS2V5ZnJhbWUsIC8vIE5vdCB1c2VkLiBUaGVzZSBhcmUgaW50ZXJuYWxs
eSBub24tcnVsZSBTdHlsZUtleWZyYW1lIG9iamVjdHMuCisgICAgICAgIEhvc3QsCiAgICAgICAg
IFJlZ2lvbiA9IDE2CiAgICAgfTsKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9CkBAIC01OCw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzU3R5bGVSdWxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFN0eWxlOyB9CiAgICAg
Ym9vbCBpc1JlZ2lvblJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gUmVnaW9uOyB9CiAg
ICAgYm9vbCBpc0ltcG9ydFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSW1wb3J0OyB9
CisgICAgYm9vbCBpc0hvc3RSdWxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEhvc3Q7IH0K
IAogICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gY29weSgpIGNvbnN0OwogCkBAIC0yMjIs
NiArMjI0LDIwIEBAIHByaXZhdGU6CiAgICAgQ1NTU2VsZWN0b3JMaXN0IG1fc2VsZWN0b3JMaXN0
OwogfTsKIAorY2xhc3MgU3R5bGVSdWxlSG9zdCA6IHB1YmxpYyBTdHlsZVJ1bGVCbG9jayB7Cisg
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUnVsZUhvc3Q+IGNyZWF0ZShWZWN0
b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZUhvc3QoYWRvcHRSdWxlcykpOworICAgIH0KKwor
ICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlSG9zdD4gY29weSgpIGNvbnN0IHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHlsZVJ1bGVIb3N0KCp0aGlzKSk7IH0KKworIHByaXZhdGU6CisgICAgU3R5bGVS
dWxlSG9zdChWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpOworICAg
IFN0eWxlUnVsZUhvc3QoY29uc3QgU3R5bGVSdWxlSG9zdCYpOworfTsKKyAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFN0eWxlUnVsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVNoZWV0Q29udGVudHMuY3BwCmluZGV4IDk2YjRlNTRmYWI5OGMxNjg4ZGVlODM2OWI3OGIz
Nzc5M2E1YzlmYzguLjg0MzE0YTU3Yzc3NmQ0ZTcwZDlhNDI4NWU5OTgxYjRhYmY5MTA0MDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCkBAIC00MzIsNiArNDMy
LDEwIEBAIHN0YXRpYyBib29sIGNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291
cmNlcyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlCiAgICAgICAgICAgICBpZiAoY2hpbGRSdWxl
c0hhdmVGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKHN0YXRpY19jYXN0PGNvbnN0IFN0eWxl
UnVsZVJlZ2lvbio+KHJ1bGUpLT5jaGlsZFJ1bGVzKCkpKQogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3R5bGVSdWxlQmFzZTo6
SG9zdDoKKyAgICAgICAgICAgIGlmIChjaGlsZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJy
ZXNvdXJjZXMoc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlSG9zdCo+KHJ1bGUpLT5jaGlsZFJ1
bGVzKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgU3R5bGVSdWxlQmFzZTo6SW1wb3J0OgogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGNhc2UgU3R5bGVSdWxlQmFzZTo6UGFnZToKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TaGFkb3dSb290LmNwcAppbmRleCAxYWFkYzUxMjY3MzU5OWZmODA5ZGRmNjIzODllZTZm
MDU2OTY4ZmQ5Li4wZDkyYjBjYmViZTAzZTExNmU2MGQzMzc2OTU0MWRjZWFhMTI2MWE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCkBAIC01NSw2ICs1NSw3IEBAIFNoYWRvd1Jvb3Q6OlNo
YWRvd1Jvb3QoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgICwgbV9hcHBseUF1dGhvclN0eWxlcyhm
YWxzZSkKICAgICAsIG1fcmVzZXRTdHlsZUluaGVyaXRhbmNlKGZhbHNlKQogICAgICwgbV9pbnNl
cnRpb25Qb2ludEFzc2lnbmVkVG8oMCkKKyAgICAsIG1fbnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hp
bGRyZW4oMCkKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dS
b290LmgKaW5kZXggMWM5ZjAyY2MwMWE5ZWQyZTI3MTJlNTAyMmNmMTlmN2JhNTdlYjFjZS4uMzk1
ZTIxYWNiYTdjN2FmMmM0OThkMjEyMDQ0ZjczYWM2ZTViMjIwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93
Um9vdC5oCkBAIC04OSw2ICs4OSwxMCBAQCBwdWJsaWM6CiAgICAgSW5zZXJ0aW9uUG9pbnQqIGFz
c2lnbmVkVG8oKSBjb25zdDsKICAgICB2b2lkIHNldEFzc2lnbmVkVG8oSW5zZXJ0aW9uUG9pbnQq
KTsKIAorICAgIHZvaWQgcmVnaXN0ZXJTaGFkb3dFbGVtZW50KCkgeyArK21fbnVtYmVyT2ZTaGFk
b3dFbGVtZW50Q2hpbGRyZW47IH0KKyAgICB2b2lkIHVucmVnaXN0ZXJTaGFkb3dFbGVtZW50KCkg
eyAtLW1fbnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hpbGRyZW47IH0KKyAgICBib29sIGhhc1NoYWRv
d0luc2VydGlvblBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9udW1iZXJPZlNoYWRvd0VsZW1lbnRD
aGlsZHJlbiA+IDA7IH0KKwogI2lmbmRlZiBOREVCVUcKICAgICBTaGFkb3dSb290VHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAjZW5kaWYKQEAgLTEwNiw2ICsxMTAsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9hcHBseUF1dGhvclN0eWxlcyA6IDE7CiAgICAgYm9vbCBtX3Jl
c2V0U3R5bGVJbmhlcml0YW5jZSA6IDE7CiAgICAgSW5zZXJ0aW9uUG9pbnQqIG1faW5zZXJ0aW9u
UG9pbnRBc3NpZ25lZFRvOworICAgIHNpemVfdCBtX251bWJlck9mU2hhZG93RWxlbWVudENoaWxk
cmVuOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIFNoYWRvd1Jvb3RUeXBlIG1fdHlwZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmNwcAppbmRleCA5
Mzg0Mzk2MTJjYTIxZDI2OWU1Nzc4YTk2YjE1OTgwZWY3NTQyYjlhLi41YzVkYmU5NGZmZTQ0NmU2
ZmUwYjYzZjZkMGU3ZWI2M2U2NDkzZTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuY3BwCkBAIC00MSw2ICs0MSw3IEBAIGNsYXNzIERvY3Vt
ZW50OwogCiBpbmxpbmUgSFRNTFNoYWRvd0VsZW1lbnQ6OkhUTUxTaGFkb3dFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IEluc2Vy
dGlvblBvaW50KHRhZ05hbWUsIGRvY3VtZW50KQorICAgICwgbV9yZWdpc3RlcmVkV2l0aFNoYWRv
d1Jvb3QoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzaGFkb3dU
YWcpKTsKIH0KQEAgLTY4LDQgKzY5LDMxIEBAIGJvb2wgSFRNTFNoYWRvd0VsZW1lbnQ6OmRvZXNT
ZWxlY3RGcm9tSG9zdENoaWxkcmVuKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK05v
ZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTFNoYWRvd0VsZW1lbnQ6Omluc2Vy
dGVkSW50byhDb250YWluZXJOb2RlKiBpbnNlcnRpb25Qb2ludCkKK3sKKyAgICBJbnNlcnRpb25Q
b2ludDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50KTsKKworICAgIGlmIChpbnNlcnRpb25Q
b2ludC0+aW5Eb2N1bWVudCgpICYmIGlzQWN0aXZlKCkpIHsKKyAgICAgICAgaWYgKFNoYWRvd1Jv
b3QqIHJvb3QgPSBzaGFkb3dSb290KCkpIHsKKyAgICAgICAgICAgIHJvb3QtPnJlZ2lzdGVyU2hh
ZG93RWxlbWVudCgpOworICAgICAgICAgICAgbV9yZWdpc3RlcmVkV2l0aFNoYWRvd1Jvb3QgPSB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7Cit9CisK
K3ZvaWQgSFRNTFNoYWRvd0VsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqIGluc2Vy
dGlvblBvaW50KQoreworICAgIGlmIChpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVudCgpICYmIG1f
cmVnaXN0ZXJlZFdpdGhTaGFkb3dSb290KSB7CisgICAgICAgIFNoYWRvd1Jvb3QqIHJvb3QgPSBz
aGFkb3dSb290KCk7CisgICAgICAgIGlmICghcm9vdCkKKyAgICAgICAgICAgIHJvb3QgPSBpbnNl
cnRpb25Qb2ludC0+c2hhZG93Um9vdCgpOworICAgICAgICBpZiAocm9vdCkKKyAgICAgICAgICAg
IHJvb3QtPnVucmVnaXN0ZXJTaGFkb3dFbGVtZW50KCk7CisgICAgICAgIG1fcmVnaXN0ZXJlZFdp
dGhTaGFkb3dSb290ID0gZmFsc2U7CisgICAgfQorICAgIEluc2VydGlvblBvaW50OjpyZW1vdmVk
RnJvbShpbnNlcnRpb25Qb2ludCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5oCmluZGV4IGE0ZWNk
YjNhZDQ1ZmI4ZWM0ZTlhYTUwMDBhMDFlM2FlZDFjZDIwZGMuLjExOWZhOWY5NWRlZjYyNzQxNjJj
YjE4ODk0OWZkNDcxYWFkYmZiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0hUTUxTaGFkb3dFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
SFRNTFNoYWRvd0VsZW1lbnQuaApAQCAtNDYsOCArNDYsMTQgQEAgcHVibGljOgogICAgIGJvb2wg
aXNTZWxlY3RWYWxpZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KICAgICBib29s
IGRvZXNTZWxlY3RGcm9tSG9zdENoaWxkcmVuKCkgY29uc3Q7CiAKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5l
ck5vZGUqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVy
Tm9kZSopIE9WRVJSSURFOworCiBwcml2YXRlOgogICAgIEhUTUxTaGFkb3dFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworCisgICAgYm9vbCBtX3JlZ2lzdGVyZWRXaXRo
U2hhZG93Um9vdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5ZmNhMDM2
OWZiOTdiZWNhYzUwMmFiMzkwY2QzODNlOGEyMWU1YzhhLi45NTU2Y2NmMTY1NzA1NmMyYzI0ZjE4
ZDI4YmU3ODliMDk3MGUwNjhiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMDgtMjAgIFRh
a2FzaGkgU2FrYW1vdG8gIDx0YXNha0Bnb29nbGUuY29tPgorCisgICAgICAgIFtTaGFkb3cgRE9N
XSBOZWVkcyBAaG9zdCBydWxlIGZvciBTaGFkb3dET00gc3R5bGluZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg2MDYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9wc2V1ZG8t
aG9zdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9wc2V1
ZG8taG9zdC5odG1sOiBBZGRlZC4KKwogMjAxMi0wOC0yMCAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlz
aGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBDbGlja2luZyBpbnB1dCB0eXBlPXJhbmdlIHdpdGgg
cGFkZGluZyBvciBib3JkZXIgc2V0cyB3cm9uZyB2YWx1ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9kb20vc2hhZG93L3BzZXVkby1ob3N0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8taG9zdC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTFm
M2IxYzI1NTE2OTU2Nzg3MjViZDY2NTE4MTMxMzQzODY0OWExNAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8taG9zdC1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwxNSBAQAoraG9zdDogcmdiKDI1NSwgMCwgMCkKK2hvc3Q6IHJnYigyNTUsIDAsIDAp
Citob3N0QTogcmdiKDI1NSwgMCwgMCkKK2hvc3RCOiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdi
KDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigxMjgsIDEyOCwgMTI4KQoraG9zdDogcmdiKDAsIDAsIDI1
NSkKK2hvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMTI4LCAxMjgsIDEyOCkKK2hvc3Q6
IHJnYigyNTUsIDI1NSwgMCkKK2hvc3Q6IHJnYigyNTUsIDAsIDApCituZXN0ZWRIb3N0OiByZ2Io
MCwgMCwgMjU1KQoraG9zdDogcmdiKDI1NSwgMCwgMCkKK2hvc3Q6IHJnYigyNTUsIDI1NSwgMCkK
K0hlbGxvCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLWhv
c3QuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9wc2V1ZG8taG9zdC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdkNGI1MTFlZTAyZmE5ZDc1MWU1N2UxNjliMDBhNmQ4NzdkNTNhNmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvcHNldWRvLWhvc3QuaHRt
bApAQCAtMCwwICsxLDE5MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0
eWxlPgorI2hvc3QgeworICBjb2xvcjogZ3JheTsKK30KKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvcG9seWZpbGwuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGR1
bXBDb21wdXRlZFN0eWxlKG5vZGUpCit7CisgICAgZGVidWcobm9kZS5pZCArICI6ICIgKyBkb2N1
bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5
VmFsdWUoJ2NvbG9yJykpOworfQorCitmdW5jdGlvbiBwcmVwcm9jZXNzRm9yVGVzdCgpCit7Cisg
ICAgdmFyIHBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXJlbnQiKTsKKyAgICBw
YXJlbnQuaW5uZXJIVE1MID0gJzxkaXYgaWQ9Imhvc3QiPjxzcGFuPkhlbGxvPC9zcGFuPjwvZGl2
Pic7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVDb250ZW50Q2FzZSgpCit7CisgICAgcHJlcHJv
Y2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJo
b3N0Iik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAg
IHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9
PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0
KTsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZVNoYWRvd0Nhc2UoKQoreworICAgIHByZXByb2Nl
c3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9z
dCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBz
aGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwv
c3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOwor
fQorCitmdW5jdGlvbiB0ZXN0SG9zdFdpdGhTZWxlY3RvcigpCit7CisgICAgdmFyIHBhcmVudCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXJlbnQiKTsKKyAgICBwYXJlbnQuaW5uZXJIVE1M
ID0gIjxzdHlsZSBzY29wZWQ+IC5ob3N0IHsgY29sb3I6IGdyYXkgfTs8L3N0eWxlPiIKKyAgICAg
ICAgKyAiPGRpdiBpZD0naG9zdEEnIGNsYXNzPSdob3N0Jz48c3Bhbj5IZWxsbzwvc3Bhbj48L2Rp
dj4iCisgICAgICAgICsgIjxzcGFuIGlkPSdob3N0QicgY2xhc3M9J2hvc3QnPjxzcGFuPldvcmxk
PC9zcGFuPjwvc3Bhbj4iOworCisgICAgdmFyIGhvc3RBID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImhvc3RBIik7CisgICAgdmFyIHNoYWRvd0EgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
QSk7CisgICAgdmFyIHN0eWxlID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0g
c3BhbiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPiI7CisgICAgc2hhZG93QS5pbm5lckhUTUwg
PSBzdHlsZSArICI8c2hhZG93Pjwvc2hhZG93PiI7CisKKyAgICB2YXIgaG9zdEIgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiaG9zdEIiKTsKKyAgICB2YXIgc2hhZG93QiA9IG5ldyBXZWJLaXRT
aGFkb3dSb290KGhvc3RCKTsKKyAgICBzaGFkb3dCLmlubmVySFRNTCA9IHN0eWxlICsgIjxzaGFk
b3c+PC9zaGFkb3c+IjsKKworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3RBKTsKKyAgICBkdW1w
Q29tcHV0ZWRTdHlsZShob3N0Qik7Cit9CisKK2Z1bmN0aW9uIHRlc3RQc2V1ZG9Ib3N0V2l0aFNj
b3BlZCgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRT
aGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPGRpdj48c3R5bGUgc2Nv
cGVkPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93
PjxkaXY+PHN0eWxlIHNjb3BlZD5AaG9zdCB7IGRpdiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxl
PjwvZGl2PjwvZGl2PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0
aW9uIHRlc3RQc2V1ZG9Ib3N0V2l0aEZhbGxiYWNrU2hhZG93KCkKK3sKKyAgICBwcmVwcm9jZXNz
Rm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3Qi
KTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7Cisg
ICAgdmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAg
b2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVk
OyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIHlvdW5nZXN0U2hhZG93Lmlu
bmVySFRNTCA9ICI8Y29udGVudD48c2hhZG93Pjwvc2hhZG93PjwvY29udGVudD4iOworICAgIGR1
bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0VHdvU2hhZG93Um9vdHND
YXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdl
YktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdlYktp
dFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+
QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4i
OworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBj
b2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgZHVtcENvbXB1
dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RUd29TaGFkb3dSb290c0NyZWF0aW5n
RGlmZmVyZW50T3JkZXJDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZh
ciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0
U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXN0U2hh
ZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgeW91bmdlc3RTaGFkb3cuaW5u
ZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPjxz
aGFkb3c+PC9zaGFkb3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5A
aG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7
CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBs
ZVNoYWRvd1Jvb3RzV2l0aEluZXJ0U2hhZG93Q29udGVudCgpCit7CisgICAgcHJlcHJvY2Vzc0Zv
clRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7
CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAg
IHZhciBvbGRlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5
b3VuZ2VyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5n
ZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisKKyAgICB5b3VuZ2VzdFNo
YWRvdy5pbm5lckhUTUwgPSAiPHNoYWRvdz48L3NoYWRvdz4iOworICAgIHlvdW5nZXJTaGFkb3cu
aW5uZXJIVE1MID0gIjxjb250ZW50PjwvY29udGVudD4iOworICAgIG9sZGVyU2hhZG93LmlubmVy
SFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogZ3JlZW47IH0gfTwvc3R5bGU+PHNo
YWRvdz48L3NoYWRvdz4iOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBo
b3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsK
KyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxl
U2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3coKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7
CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZh
ciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgb2xk
ZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlclNo
YWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRv
dyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworCisgICAgeW91bmdlc3RTaGFkb3cuaW5u
ZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiB5ZWxsb3c7IH0gfTwvc3R5bGU+
PHNoYWRvdz48L3NoYWRvdz4iOworICAgIHlvdW5nZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHls
ZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPjxkaXY+aW5lcnQ8L2Rpdj4i
OworICAgIG9sZGVyU2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xv
cjogZ3JlZW47IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIG9sZGVzdFNoYWRv
dy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHls
ZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30K
KworZnVuY3Rpb24gdGVzdE5lc3RlZENhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7
CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZh
ciBvdXRlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG91dGVyU2hh
ZG93LmlubmVySFRNTCA9ICc8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0
eWxlPjxkaXYgaWQ9Im5lc3RlZEhvc3QiPklubmVyU2hhZG93PC9kaXY+JzsKKyAgICB2YXIgbmVz
dGVkID0gb3V0ZXJTaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIm5lc3RlZEhvc3QiKTsKKyAgICB2YXIg
aW5uZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChuZXN0ZWQpOworICAgIGlubmVyU2hh
ZG93LmlubmVySFRNTCA9ICc8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsgfSB9PC9z
dHlsZT5TaG93IDxzaGFkb3c+PC9zaGFkb3c+IGluIG91dGVyLic7CisgICAgZHVtcENvbXB1dGVk
U3R5bGUoaG9zdCk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUobmVzdGVkKTsKK30KKworZnVuY3Rp
b24gdGVzdEhvc3RWc1Njb3BlZFN0eWxlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOwor
ICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICBob3N0
LmlubmVySFRNTCA9ICI8c3R5bGUgc2NvcGVkPiNob3N0IHsgY29sb3I6IHllbGxvdzsgfTwvc3R5
bGU+PHNwYW4+SGVsbG88L3NwYW4+IjsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyAjaG9z
dCB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVt
cENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0VnNJbmxpbmVTdHls
ZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgaG9zdC5zdHlsZS5jb2xvciA9ICJ5ZWxsb3ci
OworICAgIGhvc3QuaW5uZXJIVE1MID0gIjxzcGFuPkhlbGxvPC9zcGFuPiI7CisgICAgdmFyIHNo
YWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwg
PSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48
L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24g
cnVuVGVzdHMoKQoreworICAgIHRlc3RTaW1wbGVDb250ZW50Q2FzZSgpOworICAgIHRlc3RTaW1w
bGVTaGFkb3dDYXNlKCk7CisgICAgdGVzdEhvc3RXaXRoU2VsZWN0b3IoKTsKKyAgICB0ZXN0UHNl
dWRvSG9zdFdpdGhTY29wZWQoKTsKKyAgICB0ZXN0UHNldWRvSG9zdFdpdGhGYWxsYmFja1NoYWRv
dygpOworICAgIHRlc3RUd29TaGFkb3dSb290c0Nhc2UoKTsKKyAgICB0ZXN0VHdvU2hhZG93Um9v
dHNDcmVhdGluZ0RpZmZlcmVudE9yZGVyQ2FzZSgpOworICAgIHRlc3RNdWx0aXBsZVNoYWRvd1Jv
b3RzV2l0aEluZXJ0U2hhZG93Q29udGVudCgpOworICAgIHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3Rz
V2l0aEluZXJ0U2hhZG93KCk7CisgICAgdGVzdE5lc3RlZENhc2UoKTsKKyAgICB0ZXN0SG9zdFZz
U2NvcGVkU3R5bGUoKTsKKyAgICB0ZXN0SG9zdFZzSW5saW5lU3R5bGUoKTsKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKyAgPGRpdiBpZD0icGFyZW50
Ij4KKyAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161866</attachid>
            <date>2012-09-02 23:08:45 -0700</date>
            <delta_ts>2012-09-18 00:34:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88606-20120903150829.patch</filename>
            <type>text/plain</type>
            <size>37355</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmMWE0OTViMWMzNjdjYWIyMzI4N2VjYjEwNWUzNjMxNDRkYmMwOGEyLi44
NGEwZDc3MDAxYThiOWE1MjBjODc2ZjE5MGQ5NDA4ZTU5NjI5NDZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTEzIEBACisyMDEyLTA5LTAyICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xl
LmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0gTmVlZHMgQGhvc3QgcnVsZSBmb3IgU2hhZG93
RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg4NjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW1wbGVtZW50ZWQgQGhvc3QtQHJ1bGVzIGFjY29yZGluZyB0byB0aGUgc2hhZG93IGRvbSBz
cGVjOgorICAgICAgICBodHRwOi8vZHZjcy53My5vcmcvaGcvd2ViY29tcG9uZW50cy9yYXctZmls
ZS90aXAvc3BlYy9zaGFkb3cvaW5kZXguaHRtbCNob3N0LWF0LXJ1bGUKKyAgICAgICAgVGhlIGRl
c2lnbiBkb2MgaXM6CisgICAgICAgIGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2Qv
MVAyeW9yY2hGOGxjaTJzY2NyLW1WU1JmMmR0dmpLZWl1eVFXekNCMmJFQTgvZWRpdAorCisgICAg
ICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy5odG1sCisKKyAgICAgICAg
KiBjc3MvQ1NTR3JhbW1hci55OgorICAgICAgICBBZGRlZCBydWxlcyBmb3IgcGFyc2luZyBAaG9z
dCBALXJ1bGVzLgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpkZXRlY3RBdFRva2VuKToKKyAgICAgICAgQWRkZWQgYSBuZXcgdG9rZW4g
IkBob3N0Ii4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUpOgor
ICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgdG8gY3JlYXRlIGFuIEBob3N0IEAtcnVsZSwgd2hp
Y2ggaXMgaW52b2tlZCBmcm9tCisgICAgICAgIENTU0dyYW1tYXIueS4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgQWRkZWQgYSBkZWNsYXJh
dGlvbiBvZiB0aGUgYWJvdmUgbmV3IG1ldGhvZDogY3JlYXRlSG9zdFJ1bGUuCisgICAgICAgICog
Y3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oOgorICAgICAgICBBZGRlZCBIT1NUX1JVTEUgdG8g
ZW51bSBUeXBlLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkZEhvc3RSdWxlKToKKyAgICAgICAgQWRkZWQgYSBuZXcg
bWV0aG9kIHRvIHJlZ2lzdGVyIEBob3N0IEAtcnVsZXMgd2l0aCBzaGFkb3cgcm9vdHMuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnRyYW5zZmVy
TWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgTW92ZWQgdGhlIGNvZGUgZm9yICJ0cmFuc2ZlcmluZyBt
YXRjaGVkIHJ1bGVzIiBmcm9tCisgICAgICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcy4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRS
dWxlcyk6CisgICAgICAgIE1vZGlmaWVkIHRvIHVzZSB0cmFuc2Zlck1hdGNoZWRSdWxlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmF0SG9zdFJ1bGVTZXRGb3JTY29wZSk6Cisg
ICAgICAgIEFkZGVkIGEgbmV3IG1ldGhvZCBmb3IgZmluZGluZyBydWxlc2V0cyBmcm9tIHRoZSBn
aXZlbiBzaGFkb3cgcm9vdC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNo
ZXNIb3N0UnVsZXMpOgorICAgICAgICBBIG5ldyBtZXRob2QgdG8gY2hlY2sgd2hldGhlciBhbnkg
QGhvc3QgQC1ydWxlcyB3aWxsIGJlIGFwcGxpZWQgdG8KKyAgICAgICAgdGhlIGdpdmVuIGVsZW1l
bnQgb3Igbm90LiBUaGlzIGlzIHByZXBhcmVkIGZvciBzaGFyZWQgc3R5bGVzLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMpOgorICAgICAgICBBIG5ldyBt
ZXRob2QgdG8gZmluZCBtYXRjaGVkIGhvc3QgcnVsZXMgd2hlbiBhbiBlbGVtZW50IGlzIGdpdmVu
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyk6Cisg
ICAgICAgIFJlbW92ZWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzLiBJbnN0ZWFkLCBhZGRl
ZCBzb3J0TWF0Y2hlZFJ1bGVzLgorICAgICAgICBBZnRlciBzb3J0aW5nLCBpbnZva2UgbWF0Y2hI
b3N0UnVsZXMgYW5kIHRyYW5zZmVyIG1hdGNoZWQgcnVsZXMuCisgICAgICAgIFNpbmNlIEBob3N0
IEAtcnVsZXMgc2hvdWxkIG92ZXJyaWRlIGV4aXN0aW5nIGF1dGhvciBydWxlcywgZmlyc3RseQor
ICAgICAgICBhdXRob3IgcnVsZXMgd2lsbCBiZSBhcHBsaWVkLiBTZWNvbmRseSBAaG9zdCBALXJ1
bGVzIHdpbGwgYmUgYXBwbGllZC4KKyAgICAgICAgSG93ZXZlciBpZiBzb3J0aW5nIEBob3N0IEAt
cnVsZXMgYW5kIGF1dGhvciBydWxlcyBpbiB0aGUgc2FtZSB0aW1lLAorICAgICAgICB0aGUgYXBw
bHlpbmcgb3JkZXIgd2lsbCBicmVhay4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2
ZXIuaDoKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6cmVwb3J0TWVtb3J5VXNhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVs
ZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVI
b3N0OjpTdHlsZVJ1bGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICBJbXBsZW1l
bnRlZCBjbGFzcyBTdHlsZVJ1bGVIb3N0LiBUaGUgY2xhc3MgaXMgYWxtb3N0IHRoZSBzYW1lIGFz
CisgICAgICAgIFN0eWxlUnVsZUJsb2NrIGV4Y2VwdCB0eXBlLgorICAgICAgICAqIGNzcy9TdHls
ZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmlzSG9zdFJ1bGUpOgor
ICAgICAgICAoU3R5bGVSdWxlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y29weSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNl
cyk6CisgICAgICAgICogZG9tL0VsZW1lbnRTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudFNoYWRvdzo6RWxlbWVudFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
U2hhZG93OjphZGRTaGFkb3dSb290KToKKyAgICAgICAgU2luY2UgYSBuZXcgc2hhZG93IHJvb3Qg
aXMgYWRkZWQsIGRpc2FibGUgQGhvc3QgQC1ydWxlcyBjYWNoZS4KKyAgICAgICAgKiBkb20vRWxl
bWVudFNoYWRvdy5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6aGFzTWF0Y2hl
ZEhvc3RSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6Omhhc01hdGNoZWRI
b3N0UnVsZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpjbGVh
ckhhc01hdGNoZWRIb3N0UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93Ojpz
ZXRIYXNNYXRjaGVkSG9zdFJ1bGUpOgorICAgICAgICBBZGRlZCBmb3VyIG1ldGhvZHMgZm9yIEBo
b3N0IEAtcnVsZXMgY2FjaGUuIFRoZSBjYWNoZSBoYXMgaW5mb3JtYXRpb24KKyAgICAgICAgYWJv
dXQgd2hldGhlciBhbnkgQGhvc3QgQC1ydWxlcyBtYXRjaCB0aGUgRWxlbWVudFNoYWRvdydzIGhv
c3QuCisgICAgICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgaGFzTWF0Y2hlZEhvc3RSdWxlIGlzIGF2
YWlsYWJsZSBvbmx5IGlmCisgICAgICAgIGhhc01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZSByZXR1
cm5zIHRydWUuCisgICAgICAgIChFbGVtZW50U2hhZG93KToKKyAgICAgICAgKiBkb20vU2hhZG93
Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpTaGFkb3dSb290KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIFdo
ZW4gY2hpbGRyZW5DaGFuZ2VkIGlzIGludm9rZWQsIGRpc2FibGUgY2FjaGUgYWJvdXQgd2hldGhl
ciBhbnkgQGhvc3QKKyAgICAgICAgQC1ydWxlcyBtYXRjaCB0aGUgc2hhZG93IHJvb3QncyBob3N0
LCBiZWNhdXNlIGFsbCBzaGFkb3cgZWxlbWVudHMgaW4KKyAgICAgICAgdGhlIHNoYWRvdyBkb20g
c3VidHJlZSBtaWdodCBiZSByZW1vdmVkIG9yIGEgbmV3IHNoYWRvdyBlbGVtZW50IG1pZ2h0Cisg
ICAgICAgIGJlIGluc2VydGVkIGludG8gdGhlIHN1YnRyZWUuCisgICAgICAgICogZG9tL1NoYWRv
d1Jvb3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnJlZ2lzdGVyU2hhZG93RWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290Ojp1bnJlZ2lzdGVyU2hhZG93RWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpoYXNTaGFkb3dJbnNlcnRpb25Q
b2ludCk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1lbWJlciB2YXJpYWJsZSwgd2hpY2ggaXMgYSBu
dW1iZXIgb2Ygc2hhZG93IGVsZW1lbnRzLgorICAgICAgICBJZiBhIHNoYWRvdyBlbGVtZW50IGlz
IGFkZGVkIHRvIHNvbWUgc2hhZG93IGRvbSB0cmVlLCB0aGUgc2hhZG93IHJvb3QKKyAgICAgICAg
b2YgdGhlIHRyZWUncyByZWdpc3RlciB3aWxsIGJlIGludm9rZWQuIElmIHJlbW92ZWQsIHVucmVn
aXN0ZXIgd2lsbCBiZQorICAgICAgICBpbnZva2VkLiBoYXNTaGFkb3dJbnNlcnRpb25Qb2ludCBx
dWlja2x5IHJldHVybnMgd2hldGhlciB0aGVyZSBleGlzdHMKKyAgICAgICAgYW55IHNoYWRvdyBl
bGVtZW50IGluIHRoZSBzaGFkb3cgZG9tIHN1YnRyZWUuCisgICAgICAgIChTaGFkb3dSb290KToK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2hhZG93RWxlbWVudDo6SFRNTFNoYWRvd0VsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNoYWRvd0VsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIEludm9r
ZSByZWdpc3RlclNoYWRvd0VsZW1lbnQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTaGFkb3dFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIEludm9rZSB1
bnJlZ2lzdGVyU2hhZG93RWxlbWVudC4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9IVE1MU2hhZG93
RWxlbWVudC5oOgorCiAyMDEyLTA5LTAyICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIEltcHJvdmUgdGhlIHdheSB3ZSB1c2UgY29udmVydGVkU3BhY2VT
dHJpbmcoKSBpbiBjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0KCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTR3JhbW1hci55CmluZGV4IDUxNjc1MzdmNzFiN2U0OWU1ODRkNzk4MmRjNDVjMDU1ZDg5Mzg1
MDkuLjdjZWFkMzA1NzNlMzM5YzI2YTMwZTNjODU0YWQxOTA3MWYxMzJiMjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYW1tYXIueQpAQCAtMTI3LDYgKzEyNyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNzc3l5
ZXJyb3Iodm9pZCosIGNvbnN0IGNoYXIqKQogJXRva2VuIFBBR0VfU1lNCiAldG9rZW4gTUVESUFf
U1lNCiAldG9rZW4gRk9OVF9GQUNFX1NZTQorJXRva2VuIEhPU1RfU1lNCiAldG9rZW4gQ0hBUlNF
VF9TWU0KICV0b2tlbiBOQU1FU1BBQ0VfU1lNCiAldG9rZW4gVkFSRlVOQ1RJT04KQEAgLTIxNCw2
ICsyMTUsNyBAQCBzdGF0aWMgaW5saW5lIGludCBjc3N5eWVycm9yKHZvaWQqLCBjb25zdCBjaGFy
KikKICV0eXBlIDxydWxlPiBwYWdlCiAldHlwZSA8cnVsZT4gbWFyZ2luX2JveAogJXR5cGUgPHJ1
bGU+IGZvbnRfZmFjZQorJXR5cGUgPHJ1bGU+IGhvc3QKICV0eXBlIDxydWxlPiBrZXlmcmFtZXMK
ICV0eXBlIDxydWxlPiBpbnZhbGlkX3J1bGUKICV0eXBlIDxydWxlPiBzYXZlX2Jsb2NrCkBAIC00
MTQsNiArNDE2LDcgQEAgdmFsaWRfcnVsZToKICAgfCBuYW1lc3BhY2UKICAgfCBpbXBvcnQKICAg
fCByZWdpb24KKyAgfCBob3N0CiAgIDsKIAogcnVsZToKQEAgLTgzNiw2ICs4MzksMjMgQEAgZm9u
dF9mYWNlOgogICAgIH0KIDsKIAorYmVmb3JlX2hvc3RfcnVsZToKKyAgICAvKiBlbXB0eSAqLyB7
CisgICAgICAgIHBhcnNlci0+bWFya1J1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6
SE9TVF9SVUxFKTsKKyAgICB9CisgICAgOworCitob3N0OgorICAgIGJlZm9yZV9ob3N0X3J1bGUg
SE9TVF9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlIAorICAgICd7JyBhdF9ydWxl
X2JvZHlfc3RhcnQgbWF5YmVfc3BhY2UgYmxvY2tfcnVsZV9saXN0IHNhdmVfYmxvY2sgeworICAg
ICAgICAkJCA9IHBhcnNlci0+Y3JlYXRlSG9zdFJ1bGUoJDcpOworICAgIH0KKyAgICB8IGJlZm9y
ZV9ob3N0X3J1bGUgSE9TVF9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlICc7JyB7
CisgICAgICAgICQkID0gMDsKKyAgICAgICAgcGFyc2VyLT5wb3BSdWxlRGF0YSgpOworICAgIH0K
KyAgICA7CisgCiByZWdpb25fc2VsZWN0b3I6CiAgICAgc2VsZWN0b3JfbGlzdCB7CiAgICAgICAg
IGlmICgkMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCAwZTA5MDQ4YzY1YzZmYjE1
ZmVkYWY5MzY4ODk5YWE2OTYyNmMxNWQyLi4yOTc4ZWM1ODU4Zjc2YzVkYWU5NzAxMGFiNjg4NjVl
OGEzMGI1NWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtOTIwMiw2ICs5MjAyLDEx
IEBAIGlubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihpbnQgbGVuZ3RoLCBib29s
IGhhc0VzY2FwZSkKICAgICAgICAgICAgIG1fdG9rZW4gPSBGT05UX0ZBQ0VfU1lNOwogICAgICAg
ICByZXR1cm47CiAKKyAgICBjYXNlICdoJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA1ICYmIGlz
RXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvc3QiKSkKKyAgICAgICAgICAgIG1fdG9r
ZW4gPSBIT1NUX1NZTTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSAnaSc6CiAgICAgICAg
IGlmIChsZW5ndGggPT0gNyAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAibXBv
cnQiKSkgewogICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOwpAQCAt
OTk5MCw2ICs5OTk1LDIyIEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlRm9udEZh
Y2VSdWxlKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitTdHlsZVJ1bGVCYXNlKiBDU1NQYXJz
ZXI6OmNyZWF0ZUhvc3RSdWxlKFJ1bGVMaXN0KiBydWxlcykKK3sKKyAgICBtX2FsbG93SW1wb3J0
UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CisgICAgUmVmUHRy
PFN0eWxlUnVsZUhvc3Q+IHJ1bGU7CisgICAgaWYgKHJ1bGVzKQorICAgICAgICBydWxlID0gU3R5
bGVSdWxlSG9zdDo6Y3JlYXRlKCpydWxlcyk7CisgICAgZWxzZSB7CisgICAgICAgIFJ1bGVMaXN0
IGVtcHR5UnVsZXM7CisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoZW1wdHlS
dWxlcyk7CisgICAgfQorICAgIFN0eWxlUnVsZUhvc3QqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7Cisg
ICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOworICAgIHByb2Nlc3NBbmRB
ZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CiB2b2lkIENTU1BhcnNlcjo6YWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSkKIHsKICAgICBpZiAoIW1fc3R5bGVTaGVldCB8fCAh
bV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCA1
ZWMzMjY1M2M4NDk5YTVmMjhhMDI2YjRmMjczYWM1ZTBlYWI1YzVlLi44NzQxMDgwMGZhZmNjZjYx
NWMwYTVmNDgzODgwODk5YmFkNDEwOTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC0yODAs
NiArMjgwLDcgQEAgcHVibGljOgogICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZVBhZ2VSdWxlKFBh
c3NPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxlY3Rvcik7CiAgICAgU3R5bGVSdWxl
QmFzZSogY3JlYXRlUmVnaW9uUnVsZShDU1NTZWxlY3RvclZlY3RvciogcmVnaW9uU2VsZWN0b3Is
IFJ1bGVMaXN0KiBydWxlcyk7CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlTWFyZ2luQXRSdWxl
KENTU1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlKTsKKyAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVI
b3N0UnVsZShSdWxlTGlzdCogcnVsZXMpOwogICAgIHZvaWQgc3RhcnREZWNsYXJhdGlvbnNGb3JN
YXJnaW5Cb3goKTsKICAgICB2b2lkIGVuZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKaW5kZXggMjRkYWVmNGE5
YTMwNjQ3OWFiMWUwMTM2MmMzZWVmN2ZmYzg5NTIyNC4uYWM0NTAwYmUxMzMwNzJmMTIwMjNiY2Ey
NGUyN2Q1MGQ3Zjg2ODc4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3Bl
cnR5U291cmNlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJj
ZURhdGEuaApAQCAtOTQsNyArOTQsOCBAQCBzdHJ1Y3QgQ1NTUnVsZVNvdXJjZURhdGEgOiBwdWJs
aWMgUmVmQ291bnRlZDxDU1NSdWxlU291cmNlRGF0YT4gewogICAgICAgICBGT05UX0ZBQ0VfUlVM
RSwKICAgICAgICAgUEFHRV9SVUxFLAogICAgICAgICBLRVlGUkFNRVNfUlVMRSwKLSAgICAgICAg
UkVHSU9OX1JVTEUKKyAgICAgICAgUkVHSU9OX1JVTEUsCisgICAgICAgIEhPU1RfUlVMRQogICAg
IH07CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gY3JlYXRlKFR5
cGUgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAzOTVlNGQ5MDAy
OGVmNjBlMzcyZGU3MWFjYjc4ZTJkODFjYWRmM2Y2Li41NmE3NjkxMTFhMDY3NjJhODY3NzY5MDE3
ZDE3MWJlM2IzNzdkNTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC02
MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiQ291bnRlci5oIgogI2luY2x1ZGUgIkNvdW50ZXJDb250
ZW50LmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cu
aCIKICNpbmNsdWRlICJGb250RmVhdHVyZVZhbHVlLmgiCiAjaW5jbHVkZSAiRm9udFZhbHVlLmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTU3Niw2ICs1NzcsMjggQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVj
dG9yPFJlZlAKIH0KIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCit2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFkZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3QqIGhvc3RSdWxlLCBib29sIGhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4sIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoreworICAgIGlmICgh
c2NvcGUgfHwgIXNjb3BlLT5pc0luU2hhZG93VHJlZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2NvcGUtPnNoYWRvd1Jvb3QoKTsKKyAgICBpZiAo
IXNoYWRvd1Jvb3QgfHwgIXNoYWRvd1Jvb3QtPmhvc3QoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHNoYWRvd1Jvb3QtPm93bmVyKCktPmNsZWFySGFzTWF0Y2hlZEhvc3RSdWxlKCk7CisKKyAgICBT
Y29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9hdEhvc3RSdWxlcy5hZGQo
c2hhZG93Um9vdCwgbnVsbHB0cik7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAg
ICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworCisg
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzID0gaG9z
dFJ1bGUtPmNoaWxkUnVsZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRS
dWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBTdHlsZVJ1bGVCYXNlKiBob3N0U3R5bGluZ1J1
bGUgPSBjaGlsZFJ1bGVzW2ldLmdldCgpOworICAgICAgICBpZiAoaG9zdFN0eWxpbmdSdWxlLT5p
c1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFk
ZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihob3N0U3R5bGluZ1J1bGUpLCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCB0cnVlLCBmYWxzZSk7CisgICAgfQorfQorCiB2b2lkIFN0
eWxlUmVzb2x2ZXI6OnNldHVwU2NvcGVTdGFjayhjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQp
CiB7CiAgICAgLy8gVGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBzaG91bGRuJ3QgYmUgdXNlZCBp
ZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgpAQCAtOTIxLDEzICs5NDQsOCBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVT
ZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZQogICAgIH0KIH0KIAotdm9pZCBTdHlsZVJlc29sdmVy
Ojpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6dHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkK
IHsKLSAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0KICAgICBpZiAobV9jaGVja2VyLm1vZGUoKSA9PSBT
ZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdSdWxlcykgewogICAgICAgICBpZiAoIW1fcnVsZUxp
c3QpCiAgICAgICAgICAgICBtX3J1bGVMaXN0ID0gU3RhdGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgp
OwpAQCAtOTQ5LDYgKzk2NywxNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zl
ck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogICAgIH0KIH0KIAordm9pZCBTdHls
ZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3Vs
dCkKK3sKKyAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7CisgICAgdHJhbnNmZXJNYXRjaGVkUnVsZXMocmVz
dWx0KTsKK30KKwogdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1h
dGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAjaWYgRU5BQkxF
KFNUWUxFX1NDT1BFRCkKQEAgLTk5Niw2ICsxMDIzLDcwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVF
bXB0CiAjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCitpbmxpbmUgUnVsZVNl
dCogU3R5bGVSZXNvbHZlcjo6YXRIb3N0UnVsZVNldEZvclNjb3BlKGNvbnN0IFNoYWRvd1Jvb3Qq
IHNoYWRvd1Jvb3QpCit7CisgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2F0SG9zdFJ1bGVzLmZpbmQoc2hhZG93Um9vdCk7CisgICAgcmV0dXJuIGl0ICE9IG1fYXRI
b3N0UnVsZXMuZW5kKCkgPyBpdC0+c2Vjb25kLmdldCgpIDogMDsgCit9CisKK2Jvb2wgU3R5bGVS
ZXNvbHZlcjo6bWF0Y2hlc0hvc3RSdWxlcygpCit7CisgICAgaWYgKG1fYXRIb3N0UnVsZXMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFbGVtZW50U2hhZG93KiBzaGFk
b3cgPSBtX2VsZW1lbnQtPnNoYWRvdygpOworICAgIGlmICghc2hhZG93KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKHNoYWRvdy0+aGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlKCkp
CisgICAgICAgIHJldHVybiBzaGFkb3ctPmhhc01hdGNoZWRIb3N0UnVsZSgpOworCisgICAgZm9y
IChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsg
c2hhZG93Um9vdDsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7
CisgICAgICAgIGlmIChhdEhvc3RSdWxlU2V0Rm9yU2NvcGUoc2hhZG93Um9vdCkpIHsKKyAgICAg
ICAgICAgIHNoYWRvdy0+c2V0SGFzTWF0Y2hlZEhvc3RSdWxlKHRydWUpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFk
b3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHNoYWRv
dy0+c2V0SGFzTWF0Y2hlZEhvc3RSdWxlKGZhbHNlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9Cisj
ZW5kaWYKKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQoreworI2lmIEVOQUJMRShTVFlMRV9TQ09Q
RUQpCisgICAgaWYgKG1fYXRIb3N0UnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBtX2VsZW1lbnQtPnNoYWRvdygpOworICAgIGlm
ICghc2hhZG93KQorICAgICAgICByZXR1cm47CisgICAgLy8gSWYgQWxyZWFkeSBrbm93IHdoZXRo
ZXIgdGhlcmUgZXhpc3QgYW55IG1hdGNoZWQgaG9zdCBydWxlcyBvciBub3QsIHNlZS4KKyAgICBp
ZiAoc2hhZG93LT5oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUoKSAmJiAhc2hhZG93LT5oYXNN
YXRjaGVkSG9zdFJ1bGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFJ1bGVTZXQq
LCAxNj4gbWF0Y2hlZFJ1bGVzOyAKKyAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBz
aGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dSb290OyBzaGFkb3dSb290ID0gc2hh
ZG93Um9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsgCisgICAgICAgIGlmIChSdWxlU2V0KiBydWxl
U2V0ID0gYXRIb3N0UnVsZVNldEZvclNjb3BlKHNoYWRvd1Jvb3QpKQorICAgICAgICAgICAgbWF0
Y2hlZFJ1bGVzLmFwcGVuZChydWxlU2V0KTsKKyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNT
aGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlm
IChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNYXRjaE9w
dGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgb3B0aW9ucy5zY29wZSA9IG1f
ZWxlbWVudDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4g
MDsgLS1pKQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaGVkUnVsZXMuYXQoaS0x
KSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhv
clJ1bGUsIG9wdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBV
TlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOworI2VuZGlmCit9CisKIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKQogewogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CkBAIC0xMDEwLDgg
KzExMDEsMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVz
dWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMKICAgICBjb2xsZWN0TWF0Y2hpbmdS
dWxlc0ZvclJlZ2lvbihtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0
aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CiAKICAgICBt
YXRjaFNjb3BlZEF1dGhvclJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIGlm
ICghbV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7
CiAKLSAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKKyAgICBtYXRjaEhv
c3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBpZiAoIW1fbWF0Y2hlZFJ1
bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgdHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKIH0K
IAogdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQpAQCAtMTU3NSw2ICsxNjcwLDExIEBAIFJlbmRlclN0
eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgLy8gQ2FuJ3Qgc2hh
cmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5LgogICAgIGlmIChtYXRjaGVzUnVsZVNldChtX3Vu
Y29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOworI2lmIEVO
QUJMRShTVFlMRV9TQ09QRUQpCisgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgQGhvc3QgQC1ydWxlcyBh
cHBseS4KKyAgICBpZiAobWF0Y2hlc0hvc3RSdWxlcygpKQorICAgICAgICByZXR1cm4gMDsKKyNl
bmRpZgogICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBm
b3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2gg
YWJvdmUuCiAgICAgaWYgKHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUp
KQogICAgICAgICByZXR1cm4gMDsKQEAgLTI3NzcsNiArMjg3NywxMCBAQCB2b2lkIFJ1bGVTZXQ6
OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IE1lZGlh
UXVlcnlFdmFsdQogICAgICAgICAgICAgYWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1
bGVSZWdpb24qPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7CiAgICAgICAgIH0K
ICNlbmRpZgorI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgICAgIGVsc2UgaWYgKHJ1bGUt
PmlzSG9zdFJ1bGUoKSkKKyAgICAgICAgICAgIHJlc29sdmVyLT5hZGRIb3N0UnVsZShzdGF0aWNf
Y2FzdDxTdHlsZVJ1bGVIb3N0Kj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHNj
b3BlKTsKKyNlbmRpZgogICAgIH0KICAgICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQog
ICAgICAgICBzaHJpbmtUb0ZpdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXgg
ZmU2OTczOTBjNzYwYzZlYjNiN2E5MGI1NWFkMTNiMmVjOGNlZGJiMC4uMzY2YjE0N2U5ZDI1MzRh
YTZhMmE3YzY4ZmVmNDE1Y2Q0N2E1NDY1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5o
CkBAIC03Miw2ICs3Miw3IEBAIGNsYXNzIFJlbmRlclJlZ2lvbjsKIGNsYXNzIFJ1bGVEYXRhOwog
Y2xhc3MgUnVsZVNldDsKIGNsYXNzIFNldHRpbmdzOworY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNz
IFN0YXRpY0NTU1J1bGVMaXN0OwogY2xhc3MgU3R5bGVCdWlsZGVyOwogY2xhc3MgU3R5bGVJbWFn
ZTsKQEAgLTgyLDYgKzgzLDcgQEAgY2xhc3MgU3R5bGVSdWxlOwogY2xhc3MgU3R5bGVSdWxlS2V5
ZnJhbWVzOwogY2xhc3MgU3R5bGVSdWxlUGFnZTsKIGNsYXNzIFN0eWxlUnVsZVJlZ2lvbjsKK2Ns
YXNzIFN0eWxlUnVsZUhvc3Q7CiBjbGFzcyBTdHlsZVNoYWRlcjsKIGNsYXNzIFN0eWxlU2hlZXQ7
CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CkBAIC0xMzYsNiArMTM4LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgcG9wUGFyZW50RWxlbWVudChFbGVtZW50Kik7CiAgICAgdm9pZCBwdXNoUGFyZW50
U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290Kik7CiAgICAgdm9pZCBwb3BQYXJlbnRTaGFkb3dS
b290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKKyAgICB2b2lkIGFkZEhvc3RSdWxlKFN0eWxlUnVsZUhv
c3QqLCBib29sLCBjb25zdCBDb250YWluZXJOb2RlKik7CiAKICAgICBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSA9IDAsIFN0eWxlU2hhcmluZ0JlaGF2aW9yID0gQWxsb3dTdHlsZVNoYXJpbmcsCiAgICAgICAg
IFJ1bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0Y2hBbGxSdWxlcywgUmVuZGVyUmVnaW9uKiByZWdp
b25Gb3JTdHlsaW5nID0gMCk7CkBAIC0zNjAsMTEgKzM2MywxNCBAQCBwcml2YXRlOgogICAgIHZv
aWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
OwogICAgIHZvaWQgbWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVz
dWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdS
dWxlcyhSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBj
b25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVn
aW9uKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNv
bnN0IE1hdGNoT3B0aW9ucyYpOwogICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RS
dWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOworICAgIHZvaWQgY29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JIb3N0KFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxl
SW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9y
KGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7CiAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7Cisg
ICAgdm9pZCB0cmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYpOwogICAgIHZvaWQgc29y
dEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0Jik7CiAKICAgICBib29sIGNoZWNr
U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IDAp
OwpAQCAtNTQ0LDYgKzU1MCwxMCBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgdXNlZCB0byBk
ZWNpZGUgd2hldGhlciBtX3Njb3BpbmdFbGVtZW50U3RhY2sgaXMgY29uc2lzdGVudCwgc2VwYXJh
dGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tlcjo6bV9wYXJlbnRTdGFjay4KICAgICBjb25zdCBDb250
YWluZXJOb2RlKiBtX3Njb3BlU3RhY2tQYXJlbnQ7CiAgICAgaW50IG1fc2NvcGVTdGFja1BhcmVu
dEJvdW5kc0luZGV4OworCisgICAgU2NvcGVkUnVsZVNldE1hcCBtX2F0SG9zdFJ1bGVzOworICAg
IFJ1bGVTZXQqIGF0SG9zdFJ1bGVTZXRGb3JTY29wZShjb25zdCBTaGFkb3dSb290Kik7CisgICAg
Ym9vbCBtYXRjaGVzSG9zdFJ1bGVzKCk7CiAjZW5kaWYKIAogICAgIENTU1RvU3R5bGVNYXAgbV9z
dHlsZU1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKaW5kZXggMDNlZmMzYTM0ZTUxN2VlYjhi
ODQ1M2RmOGZiMjYyZmMwNDA4YTQ3NC4uMzZjMGRiMzRlMmVhZTQwYTExYWI4YTUxNzRmNmE1ODMz
OTYxMjU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKQEAgLTc4LDYgKzc4LDkgQEAgdm9p
ZCBTdHlsZVJ1bGVCYXNlOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1v
cnlPYmplY3RJbmZvKSBjb25zdAogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICBzdGF0aWNf
Y2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqPih0aGlzKS0+cmVwb3J0RGVzY2VuZGFudE1l
bW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBI
b3N0OgorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVCbG9jayo+KHRoaXMpLT5y
ZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7CisgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5
ZnJhbWU6CkBAIC0xMTMsNiArMTE2LDkgQEAgdm9pZCBTdHlsZVJ1bGVCYXNlOjpkZXN0cm95KCkK
ICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFN0eWxlUnVs
ZUtleWZyYW1lcyo+KHRoaXMpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBIb3N0OgorICAg
ICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5bGVSdWxlSG9zdCo+KHRoaXMpOworICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBVbmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtl
eWZyYW1lOgpAQCAtMTQ2LDYgKzE1Miw4IEBAIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gU3R5
bGVSdWxlQmFzZTo6Y29weSgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgS2V5
ZnJhbWVzOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlS2V5ZnJh
bWVzKj4odGhpcyktPmNvcHkoKTsKKyAgICBjYXNlIEhvc3Q6CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVIb3N0Kj4odGhpcyktPmNvcHkoKTsKICAgICBjYXNlIFVu
a25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xODcsNiAr
MTk1LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlPiBTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdy
YXBwZXIoQ1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQKICAgICBjYXNlIEtleWZyYW1lczoKICAg
ICAgICAgcnVsZSA9IFdlYktpdENTU0tleWZyYW1lc1J1bGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxT
dHlsZVJ1bGVLZXlmcmFtZXMqPihzZWxmKSwgcGFyZW50U2hlZXQpOwogICAgICAgICBicmVhazsK
KyAgICBjYXNlIEhvc3Q6CiAgICAgY2FzZSBVbmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAg
ICBjYXNlIEtleWZyYW1lOgpAQCAtMzc3LDQgKzM4NiwxNCBAQCB2b2lkIFN0eWxlUnVsZVJlZ2lv
bjo6cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9i
amVjdAogICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKG1fc2VsZWN0b3JMaXN0KTsKIH0K
IAorU3R5bGVSdWxlSG9zdDo6U3R5bGVSdWxlSG9zdChWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJh
c2U+ID4mIGFkb3B0UnVsZXMpCisgICAgOiBTdHlsZVJ1bGVCbG9jayhIb3N0LCBhZG9wdFJ1bGVz
KQoreworfQorCitTdHlsZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KGNvbnN0IFN0eWxlUnVsZUhv
c3QmIG8pCisgICAgOiBTdHlsZVJ1bGVCbG9jayhvKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKaW5kZXggN2I2MDI1MDQyYTE5OGVjNmVkNjZkNDhi
MWEyN2EzZDk5MmQwMDk0Yi4uNjgwYjg0MTRmY2U1MjhjZGYzYmY4YTc4MmZkM2RlNDVlNGE5Mzky
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFBhZ2UsCiAgICAgICAgIEtleWZyYW1lcywKICAgICAgICAgS2V5ZnJhbWUsIC8vIE5vdCB1
c2VkLiBUaGVzZSBhcmUgaW50ZXJuYWxseSBub24tcnVsZSBTdHlsZUtleWZyYW1lIG9iamVjdHMu
CisgICAgICAgIEhvc3QsCiAgICAgICAgIFJlZ2lvbiA9IDE2CiAgICAgfTsKICAgICBUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9CkBAIC01OCw2
ICs1OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3R5bGVSdWxlKCkgY29uc3QgeyByZXR1cm4g
dHlwZSgpID09IFN0eWxlOyB9CiAgICAgYm9vbCBpc1JlZ2lvblJ1bGUoKSBjb25zdCB7IHJldHVy
biB0eXBlKCkgPT0gUmVnaW9uOyB9CiAgICAgYm9vbCBpc0ltcG9ydFJ1bGUoKSBjb25zdCB7IHJl
dHVybiB0eXBlKCkgPT0gSW1wb3J0OyB9CisgICAgYm9vbCBpc0hvc3RSdWxlKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZSgpID09IEhvc3Q7IH0KIAogICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4g
Y29weSgpIGNvbnN0OwogCkBAIC0yMjIsNiArMjI0LDIwIEBAIHByaXZhdGU6CiAgICAgQ1NTU2Vs
ZWN0b3JMaXN0IG1fc2VsZWN0b3JMaXN0OwogfTsKIAorY2xhc3MgU3R5bGVSdWxlSG9zdCA6IHB1
YmxpYyBTdHlsZVJ1bGVCbG9jayB7CisgcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
eWxlUnVsZUhvc3Q+IGNyZWF0ZShWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0
UnVsZXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZUhvc3Qo
YWRvcHRSdWxlcykpOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlSG9zdD4gY29w
eSgpIGNvbnN0IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVJ1bGVIb3N0KCp0aGlzKSk7IH0K
KworIHByaXZhdGU6CisgICAgU3R5bGVSdWxlSG9zdChWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJh
c2U+ID4mIGFkb3B0UnVsZXMpOworICAgIFN0eWxlUnVsZUhvc3QoY29uc3QgU3R5bGVSdWxlSG9z
dCYpOworfTsKKyAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFN0eWxlUnVs
ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCmluZGV4IDg2ZTRk
MmMyYzA3ZDBjNWVmYjZmMTU1YWQ5ZWIzMmZjY2UzMTA4NDkuLmI1OWQ5MjZkMWUzN2Y3MmNiMTA2
YmNkMjk5ZGQ4YTc2NGZiOTZmODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVNoZWV0Q29udGVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29u
dGVudHMuY3BwCkBAIC00NDQsNiArNDQ0LDEwIEBAIHN0YXRpYyBib29sIGNoaWxkUnVsZXNIYXZl
RmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlCiAg
ICAgICAgICAgICBpZiAoY2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2Vz
KHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZVJlZ2lvbio+KHJ1bGUpLT5jaGlsZFJ1bGVzKCkp
KQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU3R5bGVSdWxlQmFzZTo6SG9zdDoKKyAgICAgICAgICAgIGlmIChjaGlsZFJ1bGVz
SGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVS
dWxlSG9zdCo+KHJ1bGUpLT5jaGlsZFJ1bGVzKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3R5bGVSdWxlQmFzZTo6SW1w
b3J0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGNhc2UgU3R5
bGVSdWxlQmFzZTo6UGFnZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
U2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAppbmRleCBh
ZWI1YjViNDc1YjIxOWJjNTdkYzg1ZWYyZTdiODMyYWVlODg5M2ZjLi45ZWE5OGIxYjdlM2IyYWMx
YWRhOWMzZDg4NTk2Y2ZmZTJmOGE5MmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cu
Y3BwCkBAIC0zOSw2ICszOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEVsZW1lbnRTaGFk
b3c6OkVsZW1lbnRTaGFkb3coKQorICAgICAgICA6IG1faGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxh
YmxlKGZhbHNlKQogewogfQogCkBAIC04OSw2ICs5MCwxMCBAQCB2b2lkIEVsZW1lbnRTaGFkb3c6
OmFkZFNoYWRvd1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgUGFzc1JlZlB0cjxTaGFkb3dSb290
PiBzaAogICAgIGlmIChzaGFkb3dIb3N0LT5hdHRhY2hlZCgpKQogICAgICAgICBzaGFkb3dIb3N0
LT5sYXp5UmVhdHRhY2goKTsKIAorICAgIC8vIEFzIGEgbmV3IHNoYWRvdyBkb20gc3VidHJlZSBt
aWdodCBoYXZlIEBob3N0IEAtcnVsZXMsIG5lZWQgdG8gZGlzYWJsZQorICAgIC8vIGhhc01hdGNo
ZWRIb3N0UnVsZXMgY2FjaGUuCisgICAgY2xlYXJIYXNNYXRjaGVkSG9zdFJ1bGUoKTsKKwogICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHVzaFNoYWRvd1Jvb3Qoc2hhZG93SG9zdCwg
c2hhZG93Um9vdC5nZXQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50U2hhZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCmluZGV4
IDlkODM5YTRmMThiY2ZlNTk0ZGZjMmYwMmEwYjcyM2VlNzcyNDcyMDAuLjQwNTgxYjZiMWM5NTkx
ODg3OTIzNzdiNWQ0OTYxNGViZWFlMTA2YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50U2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cu
aApAQCAtNzAsMTEgKzcwLDE4IEBAIHB1YmxpYzoKICAgICBDb250ZW50RGlzdHJpYnV0b3ImIGRp
c3RyaWJ1dG9yKCk7CiAgICAgY29uc3QgQ29udGVudERpc3RyaWJ1dG9yJiBkaXN0cmlidXRvcigp
IGNvbnN0OwogCisgICAgYm9vbCBoYXNNYXRjaGVkSG9zdFJ1bGUoKSBjb25zdCB7IHJldHVybiBt
X2hhc01hdGNoZWRIb3N0UnVsZTsgfQorICAgIGJvb2wgaGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxh
YmxlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGU7IH0KKyAg
ICB2b2lkIGNsZWFySGFzTWF0Y2hlZEhvc3RSdWxlKCkgeyBtX2hhc01hdGNoZWRIb3N0UnVsZUF2
YWlsYWJsZSA9IGZhbHNlOyB9CisgICAgdm9pZCBzZXRIYXNNYXRjaGVkSG9zdFJ1bGUoYm9vbCBo
YXNSdWxlKSB7IG1faGFzTWF0Y2hlZEhvc3RSdWxlID0gaGFzUnVsZTsgbV9oYXNNYXRjaGVkSG9z
dFJ1bGVBdmFpbGFibGUgPSB0cnVlOyB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBpbnZhbGlkYXRl
RGlzdHJpYnV0aW9uKEVsZW1lbnQqIGhvc3QpOwogCiAgICAgRG91Ymx5TGlua2VkTGlzdDxTaGFk
b3dSb290PiBtX3NoYWRvd1Jvb3RzOwogICAgIENvbnRlbnREaXN0cmlidXRvciBtX2Rpc3RyaWJ1
dG9yOworICAgIGJvb2wgbV9oYXNNYXRjaGVkSG9zdFJ1bGU7CisgICAgYm9vbCBtX2hhc01hdGNo
ZWRIb3N0UnVsZUF2YWlsYWJsZTsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFbGVtZW50U2hh
ZG93KTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAppbmRleCA1ZGFmNzY0MWU0YThh
MGY1Y2E0MzgzMTdhN2YyNjY2MzNlNmUyMjY1Li5iMzc5ZTJhNWFkNWE3MWM4MDliOWNmYTFmYWE1
MDNjNzY3OGE2ZTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCkBAIC01NSw2ICs1NSw3
IEBAIFNoYWRvd1Jvb3Q6OlNoYWRvd1Jvb3QoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgICwgbV9h
cHBseUF1dGhvclN0eWxlcyhmYWxzZSkKICAgICAsIG1fcmVzZXRTdHlsZUluaGVyaXRhbmNlKGZh
bHNlKQogICAgICwgbV9pbnNlcnRpb25Qb2ludEFzc2lnbmVkVG8oMCkKKyAgICAsIG1fbnVtYmVy
T2ZTaGFkb3dFbGVtZW50Q2hpbGRyZW4oMCkKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAg
IApAQCAtMjI4LDYgKzIyOSw3IEBAIHZvaWQgU2hhZG93Um9vdDo6Y2hpbGRyZW5DaGFuZ2VkKGJv
b2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqCiB7CiAgICAgQ29u
dGFpbmVyTm9kZTo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNlciwgYmVmb3JlQ2hhbmdl
LCBhZnRlckNoYW5nZSwgY2hpbGRDb3VudERlbHRhKTsKICAgICBvd25lcigpLT5pbnZhbGlkYXRl
RGlzdHJpYnV0aW9uKCk7CisgICAgb3duZXIoKS0+Y2xlYXJIYXNNYXRjaGVkSG9zdFJ1bGUoKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKaW5kZXggZDliNDI1YzYwODNiMTdhZjg4MjZl
NjE2NDI3ODFmNTUyNTA3NTI1MC4uMmU1MTZmYjFiYjRjZWY3YjYzZGYyNmI2NDM3ZDRmZTU3YzAz
YjZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCkBAIC04OSw2ICs4OSwxMCBAQCBwdWJsaWM6
CiAgICAgSW5zZXJ0aW9uUG9pbnQqIGFzc2lnbmVkVG8oKSBjb25zdDsKICAgICB2b2lkIHNldEFz
c2lnbmVkVG8oSW5zZXJ0aW9uUG9pbnQqKTsKIAorICAgIHZvaWQgcmVnaXN0ZXJTaGFkb3dFbGVt
ZW50KCkgeyArK21fbnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hpbGRyZW47IH0KKyAgICB2b2lkIHVu
cmVnaXN0ZXJTaGFkb3dFbGVtZW50KCkgeyAtLW1fbnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hpbGRy
ZW47IH0KKyAgICBib29sIGhhc1NoYWRvd0luc2VydGlvblBvaW50KCkgY29uc3QgeyByZXR1cm4g
bV9udW1iZXJPZlNoYWRvd0VsZW1lbnRDaGlsZHJlbiA+IDA7IH0KKwogI2lmbmRlZiBOREVCVUcK
ICAgICBTaGFkb3dSb290VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAjZW5k
aWYKQEAgLTEwNiw2ICsxMTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hcHBseUF1dGhvclN0
eWxlcyA6IDE7CiAgICAgYm9vbCBtX3Jlc2V0U3R5bGVJbmhlcml0YW5jZSA6IDE7CiAgICAgSW5z
ZXJ0aW9uUG9pbnQqIG1faW5zZXJ0aW9uUG9pbnRBc3NpZ25lZFRvOworICAgIHNpemVfdCBtX251
bWJlck9mU2hhZG93RWxlbWVudENoaWxkcmVuOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIFNoYWRv
d1Jvb3RUeXBlIG1fdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L0hUTUxTaGFkb3dFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxT
aGFkb3dFbGVtZW50LmNwcAppbmRleCA5Mzg0Mzk2MTJjYTIxZDI2OWU1Nzc4YTk2YjE1OTgwZWY3
NTQyYjlhLi41YzVkYmU5NGZmZTQ0NmU2ZmUwYjYzZjZkMGU3ZWI2M2U2NDkzZTE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuY3BwCkBAIC00
MSw2ICs0MSw3IEBAIGNsYXNzIERvY3VtZW50OwogCiBpbmxpbmUgSFRNTFNoYWRvd0VsZW1lbnQ6
OkhUTUxTaGFkb3dFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2N1bWVudCkKICAgICA6IEluc2VydGlvblBvaW50KHRhZ05hbWUsIGRvY3VtZW50KQorICAg
ICwgbV9yZWdpc3RlcmVkV2l0aFNoYWRvd1Jvb3QoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpzaGFkb3dUYWcpKTsKIH0KQEAgLTY4LDQgKzY5LDMxIEBAIGJvb2wg
SFRNTFNoYWRvd0VsZW1lbnQ6OmRvZXNTZWxlY3RGcm9tSG9zdENoaWxkcmVuKCkgY29uc3QKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK05vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3Qg
SFRNTFNoYWRvd0VsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlKiBpbnNlcnRpb25Q
b2ludCkKK3sKKyAgICBJbnNlcnRpb25Qb2ludDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50
KTsKKworICAgIGlmIChpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVudCgpICYmIGlzQWN0aXZlKCkp
IHsKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCkpIHsKKyAgICAg
ICAgICAgIHJvb3QtPnJlZ2lzdGVyU2hhZG93RWxlbWVudCgpOworICAgICAgICAgICAgbV9yZWdp
c3RlcmVkV2l0aFNoYWRvd1Jvb3QgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIEluc2VydGlvbkRvbmU7Cit9CisKK3ZvaWQgSFRNTFNoYWRvd0VsZW1lbnQ6OnJlbW92ZWRG
cm9tKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQoreworICAgIGlmIChpbnNlcnRpb25Q
b2ludC0+aW5Eb2N1bWVudCgpICYmIG1fcmVnaXN0ZXJlZFdpdGhTaGFkb3dSb290KSB7CisgICAg
ICAgIFNoYWRvd1Jvb3QqIHJvb3QgPSBzaGFkb3dSb290KCk7CisgICAgICAgIGlmICghcm9vdCkK
KyAgICAgICAgICAgIHJvb3QgPSBpbnNlcnRpb25Qb2ludC0+c2hhZG93Um9vdCgpOworICAgICAg
ICBpZiAocm9vdCkKKyAgICAgICAgICAgIHJvb3QtPnVucmVnaXN0ZXJTaGFkb3dFbGVtZW50KCk7
CisgICAgICAgIG1fcmVnaXN0ZXJlZFdpdGhTaGFkb3dSb290ID0gZmFsc2U7CisgICAgfQorICAg
IEluc2VydGlvblBvaW50OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L0hUTUxTaGFkb3dFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MU2hh
ZG93RWxlbWVudC5oCmluZGV4IGE0ZWNkYjNhZDQ1ZmI4ZWM0ZTlhYTUwMDBhMDFlM2FlZDFjZDIw
ZGMuLjExOWZhOWY5NWRlZjYyNzQxNjJjYjE4ODk0OWZkNDcxYWFkYmZiODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuaApAQCAtNDYsOCArNDYs
MTQgQEAgcHVibGljOgogICAgIGJvb2wgaXNTZWxlY3RWYWxpZCgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIHRydWU7IH0KICAgICBib29sIGRvZXNTZWxlY3RGcm9tSG9zdENoaWxkcmVuKCkgY29u
c3Q7CiAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVl
c3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSopIE9WRVJSSURFOworCiBwcml2YXRlOgogICAg
IEhUTUxTaGFkb3dFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworCisg
ICAgYm9vbCBtX3JlZ2lzdGVyZWRXaXRoU2hhZG93Um9vdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCAyMGFiNzdlNDRkM2IxN2NkOTAzZDFkZTJkNzY0OWVhMWYyNTA3NGYw
Li4zNmJjN2M2MmYxMjdmMDNmYWJiZjdlODk0ZDVlMmU1OWQ2OWM5NzM1IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMTItMDktMDIgIFRha2FzaGkgU2FrYW1vdG8gIDx0YXNha0Bnb29nbGUuY29t
PgorCisgICAgICAgIFtTaGFkb3cgRE9NXSBOZWVkcyBAaG9zdCBydWxlIGZvciBTaGFkb3dET00g
c3R5bGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODg2MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGZhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy5odG1sOiBBZGRlZC4KKwogMjAx
Mi0wOS0wMiAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtUZXN0c10gZmFzdC9mb3Jtcy90aW1lLW11bHRpcGxlLWZpZWxkcy90aW1lLW11bHRpcGxlLWZp
ZWxkcy1hcHBlYXJhbmNlLSouaHRtbCBzaG91bGQgZHVtcCB0ZXh0IGluc3RlYWQgb2YgcmVuZGVy
IHRyZWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRy
dWxlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0
cnVsZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExZjNiMWMyNTUxNjk1Njc4NzI1YmQ2NjUx
ODEzMTM0Mzg2NDlhMTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9z
aGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK2hvc3Q6
IHJnYigyNTUsIDAsIDApCitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdEE6IHJnYigyNTUsIDAs
IDApCitob3N0QjogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiBy
Z2IoMTI4LCAxMjgsIDEyOCkKK2hvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMCwgMCwg
MjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAxMjgpCitob3N0OiByZ2IoMjU1LCAyNTUsIDApCito
b3N0OiByZ2IoMjU1LCAwLCAwKQorbmVzdGVkSG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJn
YigyNTUsIDAsIDApCitob3N0OiByZ2IoMjU1LCAyNTUsIDApCitIZWxsbwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDRi
NTExZWUwMmZhOWQ3NTFlNTdlMTY5YjAwYTZkODc3ZDUzYTZkCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLmh0bWwKQEAgLTAsMCAr
MSwxOTAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyNob3N0
IHsKKyAgY29sb3I6IGdyYXk7Cit9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3BvbHlmaWxsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBkdW1wQ29tcHV0ZWRT
dHlsZShub2RlKQoreworICAgIGRlYnVnKG5vZGUuaWQgKyAiOiAiICsgZG9jdW1lbnQuZGVmYXVs
dFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xv
cicpKTsKK30KKworZnVuY3Rpb24gcHJlcHJvY2Vzc0ZvclRlc3QoKQoreworICAgIHZhciBwYXJl
bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyZW50Iik7CisgICAgcGFyZW50LmlubmVy
SFRNTCA9ICc8ZGl2IGlkPSJob3N0Ij48c3Bhbj5IZWxsbzwvc3Bhbj48L2Rpdj4nOworfQorCitm
dW5jdGlvbiB0ZXN0U2ltcGxlQ29udGVudENhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0
KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAg
IHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5u
ZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNv
bnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3RTaW1wbGVTaGFkb3dDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgp
OworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2
YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVy
SFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxzaGFk
b3c+PC9zaGFkb3c+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rp
b24gdGVzdEhvc3RXaXRoU2VsZWN0b3IoKQoreworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgicGFyZW50Iik7CisgICAgcGFyZW50LmlubmVySFRNTCA9ICI8c3R5bGUg
c2NvcGVkPiAuaG9zdCB7IGNvbG9yOiBncmF5IH07PC9zdHlsZT4iCisgICAgICAgICsgIjxkaXYg
aWQ9J2hvc3RBJyBjbGFzcz0naG9zdCc+PHNwYW4+SGVsbG88L3NwYW4+PC9kaXY+IgorICAgICAg
ICArICI8c3BhbiBpZD0naG9zdEInIGNsYXNzPSdob3N0Jz48c3Bhbj5Xb3JsZDwvc3Bhbj48L3Nw
YW4+IjsKKworICAgIHZhciBob3N0QSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0QSIp
OworICAgIHZhciBzaGFkb3dBID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdEEpOworICAgIHZh
ciBzdHlsZSA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IHNwYW4geyBjb2xv
cjogYmx1ZTsgfSB9PC9zdHlsZT4iOworICAgIHNoYWRvd0EuaW5uZXJIVE1MID0gc3R5bGUgKyAi
PHNoYWRvdz48L3NoYWRvdz4iOworCisgICAgdmFyIGhvc3RCID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImhvc3RCIik7CisgICAgdmFyIHNoYWRvd0IgPSBuZXcgV2ViS2l0U2hhZG93Um9vdCho
b3N0Qik7CisgICAgc2hhZG93Qi5pbm5lckhUTUwgPSBzdHlsZSArICI8c2hhZG93Pjwvc2hhZG93
PiI7CisKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0QSk7CisgICAgZHVtcENvbXB1dGVkU3R5
bGUoaG9zdEIpOworfQorCitmdW5jdGlvbiB0ZXN0UHNldWRvSG9zdFdpdGhTY29wZWQoKQorewor
ICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdCho
b3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxkaXY+PHN0eWxlIHNjb3BlZD5AaG9zdCB7
IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz48ZGl2PjxzdHls
ZSBzY29wZWQ+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48L2Rpdj48L2Rp
dj4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0UHNl
dWRvSG9zdFdpdGhGYWxsYmFja1NoYWRvdygpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsK
KyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFy
IG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3Vu
Z2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG9sZGVzdFNoYWRv
dy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHls
ZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAi
PGNvbnRlbnQ+PHNoYWRvdz48L3NoYWRvdz48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRT
dHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFR3b1NoYWRvd1Jvb3RzQ2FzZSgpCit7Cisg
ICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dS
b290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290
KGhvc3QpOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2
IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICB5b3Vu
Z2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7
IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhv
c3QpOworfQorCitmdW5jdGlvbiB0ZXN0VHdvU2hhZG93Um9vdHNDcmVhdGluZ0RpZmZlcmVudE9y
ZGVyQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5l
dyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBX
ZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8
c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hh
ZG93PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYg
eyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBD
b21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVTaGFkb3dSb290
c1dpdGhJbmVydFNoYWRvd0NvbnRlbnQoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7Cisg
ICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBv
bGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgb2xkZXJT
aGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlclNoYWRv
dyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9
IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworCisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJI
VE1MID0gIjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICB5b3VuZ2VyU2hhZG93LmlubmVySFRNTCA9
ICI8Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBvbGRlclNoYWRvdy5pbm5lckhUTUwgPSAiPHN0
eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGdyZWVuOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFk
b3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7
IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENv
bXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3Rz
V2l0aEluZXJ0U2hhZG93KCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBo
b3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hh
ZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIG9sZGVyU2hhZG93ID0g
bmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcg
V2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2Vi
S2l0U2hhZG93Um9vdChob3N0KTsKKworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8
c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogeWVsbG93OyB9IH08L3N0eWxlPjxzaGFkb3c+PC9z
aGFkb3c+IjsKKyAgICB5b3VuZ2VyU2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBk
aXYgeyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48ZGl2PmluZXJ0PC9kaXY+IjsKKyAgICBvbGRl
clNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGdyZWVuOyB9
IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1M
ID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+
PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9u
IHRlc3ROZXN0ZWRDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBo
b3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb3V0ZXJTaGFk
b3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBvdXRlclNoYWRvdy5pbm5lckhU
TUwgPSAnPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48ZGl2IGlk
PSJuZXN0ZWRIb3N0Ij5Jbm5lclNoYWRvdzwvZGl2Pic7CisgICAgdmFyIG5lc3RlZCA9IG91dGVy
U2hhZG93LmdldEVsZW1lbnRCeUlkKCJuZXN0ZWRIb3N0Iik7CisgICAgdmFyIGlubmVyU2hhZG93
ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QobmVzdGVkKTsKKyAgICBpbm5lclNoYWRvdy5pbm5lckhU
TUwgPSAnPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+U2hvdyA8
c2hhZG93Pjwvc2hhZG93PiBpbiBvdXRlci4nOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3Qp
OworICAgIGR1bXBDb21wdXRlZFN0eWxlKG5lc3RlZCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0
VnNTY29wZWRTdHlsZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9z
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgaG9zdC5pbm5lckhUTUwg
PSAiPHN0eWxlIHNjb3BlZD4jaG9zdCB7IGNvbG9yOiB5ZWxsb3c7IH08L3N0eWxlPjxzcGFuPkhl
bGxvPC9zcGFuPiI7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3Qp
OworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgI2hvc3QgeyBjb2xvcjog
cmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0
eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0SG9zdFZzSW5saW5lU3R5bGUoKQoreworICAg
IHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaG9zdCIpOworICAgIGhvc3Quc3R5bGUuY29sb3IgPSAieWVsbG93IjsKKyAgICBob3N0
LmlubmVySFRNTCA9ICI8c3Bhbj5IZWxsbzwvc3Bhbj4iOworICAgIHZhciBzaGFkb3cgPSBuZXcg
V2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5A
aG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7
CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3RzKCkK
K3sKKyAgICB0ZXN0U2ltcGxlQ29udGVudENhc2UoKTsKKyAgICB0ZXN0U2ltcGxlU2hhZG93Q2Fz
ZSgpOworICAgIHRlc3RIb3N0V2l0aFNlbGVjdG9yKCk7CisgICAgdGVzdFBzZXVkb0hvc3RXaXRo
U2NvcGVkKCk7CisgICAgdGVzdFBzZXVkb0hvc3RXaXRoRmFsbGJhY2tTaGFkb3coKTsKKyAgICB0
ZXN0VHdvU2hhZG93Um9vdHNDYXNlKCk7CisgICAgdGVzdFR3b1NoYWRvd1Jvb3RzQ3JlYXRpbmdE
aWZmZXJlbnRPcmRlckNhc2UoKTsKKyAgICB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVy
dFNoYWRvd0NvbnRlbnQoKTsKKyAgICB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNo
YWRvdygpOworICAgIHRlc3ROZXN0ZWRDYXNlKCk7CisgICAgdGVzdEhvc3RWc1Njb3BlZFN0eWxl
KCk7CisgICAgdGVzdEhvc3RWc0lubGluZVN0eWxlKCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKSI+CisgIDxkaXYgaWQ9InBhcmVudCI+CisgIDwvZGl2
PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164506</attachid>
            <date>2012-09-18 00:34:22 -0700</date>
            <delta_ts>2012-09-20 21:59:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88606-20120918163349.patch</filename>
            <type>text/plain</type>
            <size>37278</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhNjI2ZmNmZGQ2MmJhYTc5MWU3OGViOWY3ZjgyNDdlN2M2Njc3ZTUzLi40
ZTYwNmM0MWQ1ZGM5OTFmNTI4MjIzNDJkNjZlYTU1MjRjYzU4NzY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTEzIEBACisyMDEyLTA5LTAyICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xl
LmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0gTmVlZHMgQGhvc3QgcnVsZSBmb3IgU2hhZG93
RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg4NjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW1wbGVtZW50ZWQgQGhvc3QtQHJ1bGVzIGFjY29yZGluZyB0byB0aGUgc2hhZG93IGRvbSBz
cGVjOgorICAgICAgICBodHRwOi8vZHZjcy53My5vcmcvaGcvd2ViY29tcG9uZW50cy9yYXctZmls
ZS90aXAvc3BlYy9zaGFkb3cvaW5kZXguaHRtbCNob3N0LWF0LXJ1bGUKKyAgICAgICAgVGhlIGRl
c2lnbiBkb2MgaXM6CisgICAgICAgIGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2Qv
MVAyeW9yY2hGOGxjaTJzY2NyLW1WU1JmMmR0dmpLZWl1eVFXekNCMmJFQTgvZWRpdAorCisgICAg
ICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy5odG1sCisKKyAgICAgICAg
KiBjc3MvQ1NTR3JhbW1hci55OgorICAgICAgICBBZGRlZCBydWxlcyBmb3IgcGFyc2luZyBAaG9z
dCBALXJ1bGVzLgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpkZXRlY3RBdFRva2VuKToKKyAgICAgICAgQWRkZWQgYSBuZXcgdG9rZW4g
IkBob3N0Ii4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUpOgor
ICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgdG8gY3JlYXRlIGFuIEBob3N0IEAtcnVsZSwgd2hp
Y2ggaXMgaW52b2tlZCBmcm9tCisgICAgICAgIENTU0dyYW1tYXIueS4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgQWRkZWQgYSBkZWNsYXJh
dGlvbiBvZiB0aGUgYWJvdmUgbmV3IG1ldGhvZDogY3JlYXRlSG9zdFJ1bGUuCisgICAgICAgICog
Y3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oOgorICAgICAgICBBZGRlZCBIT1NUX1JVTEUgdG8g
ZW51bSBUeXBlLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkZEhvc3RSdWxlKToKKyAgICAgICAgQWRkZWQgYSBuZXcg
bWV0aG9kIHRvIHJlZ2lzdGVyIEBob3N0IEAtcnVsZXMgd2l0aCBzaGFkb3cgcm9vdHMuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnRyYW5zZmVy
TWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgTW92ZWQgdGhlIGNvZGUgZm9yICJ0cmFuc2ZlcmluZyBt
YXRjaGVkIHJ1bGVzIiBmcm9tCisgICAgICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcy4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRS
dWxlcyk6CisgICAgICAgIE1vZGlmaWVkIHRvIHVzZSB0cmFuc2Zlck1hdGNoZWRSdWxlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmF0SG9zdFJ1bGVTZXRGb3JTY29wZSk6Cisg
ICAgICAgIEFkZGVkIGEgbmV3IG1ldGhvZCBmb3IgZmluZGluZyBydWxlc2V0cyBmcm9tIHRoZSBn
aXZlbiBzaGFkb3cgcm9vdC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNo
ZXNIb3N0UnVsZXMpOgorICAgICAgICBBIG5ldyBtZXRob2QgdG8gY2hlY2sgd2hldGhlciBhbnkg
QGhvc3QgQC1ydWxlcyB3aWxsIGJlIGFwcGxpZWQgdG8KKyAgICAgICAgdGhlIGdpdmVuIGVsZW1l
bnQgb3Igbm90LiBUaGlzIGlzIHByZXBhcmVkIGZvciBzaGFyZWQgc3R5bGVzLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMpOgorICAgICAgICBBIG5ldyBt
ZXRob2QgdG8gZmluZCBtYXRjaGVkIGhvc3QgcnVsZXMgd2hlbiBhbiBlbGVtZW50IGlzIGdpdmVu
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyk6Cisg
ICAgICAgIFJlbW92ZWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzLiBJbnN0ZWFkLCBhZGRl
ZCBzb3J0TWF0Y2hlZFJ1bGVzLgorICAgICAgICBBZnRlciBzb3J0aW5nLCBpbnZva2UgbWF0Y2hI
b3N0UnVsZXMgYW5kIHRyYW5zZmVyIG1hdGNoZWQgcnVsZXMuCisgICAgICAgIFNpbmNlIEBob3N0
IEAtcnVsZXMgc2hvdWxkIG92ZXJyaWRlIGV4aXN0aW5nIGF1dGhvciBydWxlcywgZmlyc3RseQor
ICAgICAgICBhdXRob3IgcnVsZXMgd2lsbCBiZSBhcHBsaWVkLiBTZWNvbmRseSBAaG9zdCBALXJ1
bGVzIHdpbGwgYmUgYXBwbGllZC4KKyAgICAgICAgSG93ZXZlciBpZiBzb3J0aW5nIEBob3N0IEAt
cnVsZXMgYW5kIGF1dGhvciBydWxlcyBpbiB0aGUgc2FtZSB0aW1lLAorICAgICAgICB0aGUgYXBw
bHlpbmcgb3JkZXIgd2lsbCBicmVhay4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2
ZXIuaDoKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6cmVwb3J0TWVtb3J5VXNhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVs
ZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVI
b3N0OjpTdHlsZVJ1bGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICBJbXBsZW1l
bnRlZCBjbGFzcyBTdHlsZVJ1bGVIb3N0LiBUaGUgY2xhc3MgaXMgYWxtb3N0IHRoZSBzYW1lIGFz
CisgICAgICAgIFN0eWxlUnVsZUJsb2NrIGV4Y2VwdCB0eXBlLgorICAgICAgICAqIGNzcy9TdHls
ZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmlzSG9zdFJ1bGUpOgor
ICAgICAgICAoU3R5bGVSdWxlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y29weSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNl
cyk6CisgICAgICAgICogZG9tL0VsZW1lbnRTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudFNoYWRvdzo6RWxlbWVudFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
U2hhZG93OjphZGRTaGFkb3dSb290KToKKyAgICAgICAgU2luY2UgYSBuZXcgc2hhZG93IHJvb3Qg
aXMgYWRkZWQsIGRpc2FibGUgQGhvc3QgQC1ydWxlcyBjYWNoZS4KKyAgICAgICAgKiBkb20vRWxl
bWVudFNoYWRvdy5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6aGFzTWF0Y2hl
ZEhvc3RSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6Omhhc01hdGNoZWRI
b3N0UnVsZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpjbGVh
ckhhc01hdGNoZWRIb3N0UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93Ojpz
ZXRIYXNNYXRjaGVkSG9zdFJ1bGUpOgorICAgICAgICBBZGRlZCBmb3VyIG1ldGhvZHMgZm9yIEBo
b3N0IEAtcnVsZXMgY2FjaGUuIFRoZSBjYWNoZSBoYXMgaW5mb3JtYXRpb24KKyAgICAgICAgYWJv
dXQgd2hldGhlciBhbnkgQGhvc3QgQC1ydWxlcyBtYXRjaCB0aGUgRWxlbWVudFNoYWRvdydzIGhv
c3QuCisgICAgICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgaGFzTWF0Y2hlZEhvc3RSdWxlIGlzIGF2
YWlsYWJsZSBvbmx5IGlmCisgICAgICAgIGhhc01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZSByZXR1
cm5zIHRydWUuCisgICAgICAgIChFbGVtZW50U2hhZG93KToKKyAgICAgICAgKiBkb20vU2hhZG93
Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpTaGFkb3dSb290KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIFdo
ZW4gY2hpbGRyZW5DaGFuZ2VkIGlzIGludm9rZWQsIGRpc2FibGUgY2FjaGUgYWJvdXQgd2hldGhl
ciBhbnkgQGhvc3QKKyAgICAgICAgQC1ydWxlcyBtYXRjaCB0aGUgc2hhZG93IHJvb3QncyBob3N0
LCBiZWNhdXNlIGFsbCBzaGFkb3cgZWxlbWVudHMgaW4KKyAgICAgICAgdGhlIHNoYWRvdyBkb20g
c3VidHJlZSBtaWdodCBiZSByZW1vdmVkIG9yIGEgbmV3IHNoYWRvdyBlbGVtZW50IG1pZ2h0Cisg
ICAgICAgIGJlIGluc2VydGVkIGludG8gdGhlIHN1YnRyZWUuCisgICAgICAgICogZG9tL1NoYWRv
d1Jvb3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnJlZ2lzdGVyU2hhZG93RWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290Ojp1bnJlZ2lzdGVyU2hhZG93RWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpoYXNTaGFkb3dJbnNlcnRpb25Q
b2ludCk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1lbWJlciB2YXJpYWJsZSwgd2hpY2ggaXMgYSBu
dW1iZXIgb2Ygc2hhZG93IGVsZW1lbnRzLgorICAgICAgICBJZiBhIHNoYWRvdyBlbGVtZW50IGlz
IGFkZGVkIHRvIHNvbWUgc2hhZG93IGRvbSB0cmVlLCB0aGUgc2hhZG93IHJvb3QKKyAgICAgICAg
b2YgdGhlIHRyZWUncyByZWdpc3RlciB3aWxsIGJlIGludm9rZWQuIElmIHJlbW92ZWQsIHVucmVn
aXN0ZXIgd2lsbCBiZQorICAgICAgICBpbnZva2VkLiBoYXNTaGFkb3dJbnNlcnRpb25Qb2ludCBx
dWlja2x5IHJldHVybnMgd2hldGhlciB0aGVyZSBleGlzdHMKKyAgICAgICAgYW55IHNoYWRvdyBl
bGVtZW50IGluIHRoZSBzaGFkb3cgZG9tIHN1YnRyZWUuCisgICAgICAgIChTaGFkb3dSb290KToK
KyAgICAgICAgKiBodG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MU2hhZG93RWxlbWVudDo6SFRNTFNoYWRvd0VsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNoYWRvd0VsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIEludm9r
ZSByZWdpc3RlclNoYWRvd0VsZW1lbnQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTaGFkb3dFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgIEludm9rZSB1
bnJlZ2lzdGVyU2hhZG93RWxlbWVudC4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9IVE1MU2hhZG93
RWxlbWVudC5oOgorCiAyMDEyLTA5LTE3ICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5n
LmNvbT4KIAogICAgICAgICBbRUZMXSBTZXZlcmFsIGtleSBjb2RlcyBhcmUgbm90IG1hcHBlZCB3
aXRoIGV2YXMga2V5IG5hbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3Jh
bW1hci55IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQppbmRleCA1MTY3NTM3Zjcx
YjdlNDllNTg0ZDc5ODJkYzQ1YzA1NWQ4OTM4NTA5Li43Y2VhZDMwNTczZTMzOWMyNmEzMGUzYzg1
NGFkMTkwNzFmMTMyYjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1h
ci55CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKQEAgLTEyNyw2ICsxMjcs
NyBAQCBzdGF0aWMgaW5saW5lIGludCBjc3N5eWVycm9yKHZvaWQqLCBjb25zdCBjaGFyKikKICV0
b2tlbiBQQUdFX1NZTQogJXRva2VuIE1FRElBX1NZTQogJXRva2VuIEZPTlRfRkFDRV9TWU0KKyV0
b2tlbiBIT1NUX1NZTQogJXRva2VuIENIQVJTRVRfU1lNCiAldG9rZW4gTkFNRVNQQUNFX1NZTQog
JXRva2VuIFZBUkZVTkNUSU9OCkBAIC0yMTQsNiArMjE1LDcgQEAgc3RhdGljIGlubGluZSBpbnQg
Y3NzeXllcnJvcih2b2lkKiwgY29uc3QgY2hhciopCiAldHlwZSA8cnVsZT4gcGFnZQogJXR5cGUg
PHJ1bGU+IG1hcmdpbl9ib3gKICV0eXBlIDxydWxlPiBmb250X2ZhY2UKKyV0eXBlIDxydWxlPiBo
b3N0CiAldHlwZSA8cnVsZT4ga2V5ZnJhbWVzCiAldHlwZSA8cnVsZT4gaW52YWxpZF9ydWxlCiAl
dHlwZSA8cnVsZT4gc2F2ZV9ibG9jawpAQCAtNDE0LDYgKzQxNiw3IEBAIHZhbGlkX3J1bGU6CiAg
IHwgbmFtZXNwYWNlCiAgIHwgaW1wb3J0CiAgIHwgcmVnaW9uCisgIHwgaG9zdAogICA7CiAKIHJ1
bGU6CkBAIC04MzYsNiArODM5LDIzIEBAIGZvbnRfZmFjZToKICAgICB9CiA7CiAKK2JlZm9yZV9o
b3N0X3J1bGU6CisgICAgLyogZW1wdHkgKi8geworICAgICAgICBwYXJzZXItPm1hcmtSdWxlSGVh
ZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6OkhPU1RfUlVMRSk7CisgICAgfQorICAgIDsKKwor
aG9zdDoKKyAgICBiZWZvcmVfaG9zdF9ydWxlIEhPU1RfU1lNIGF0X3J1bGVfaGVhZGVyX2VuZF9t
YXliZV9zcGFjZSAKKyAgICAneycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlIGJsb2Nr
X3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKKyAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUhvc3RS
dWxlKCQ3KTsKKyAgICB9CisgICAgfCBiZWZvcmVfaG9zdF9ydWxlIEhPU1RfU1lNIGF0X3J1bGVf
aGVhZGVyX2VuZF9tYXliZV9zcGFjZSAnOycgeworICAgICAgICAkJCA9IDA7CisgICAgICAgIHBh
cnNlci0+cG9wUnVsZURhdGEoKTsKKyAgICB9CisgICAgOworIAogcmVnaW9uX3NlbGVjdG9yOgog
ICAgIHNlbGVjdG9yX2xpc3QgewogICAgICAgICBpZiAoJDEpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAKaW5kZXggZWZkOWJhZTNhMDY4ZGRlNWVkMTllZjgzY2E3NTRjNzYyNmU4MTgzMC4uODU3
Mjk2MTc5NzhiYWYxZWVhZDE0OWNjODU3OTJlNmZhZjAwZTBmZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5jcHAKQEAgLTkyNjEsNiArOTI2MSwxMSBAQCBpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRl
dGVjdEF0VG9rZW4oaW50IGxlbmd0aCwgYm9vbCBoYXNFc2NhcGUpCiAgICAgICAgICAgICBtX3Rv
a2VuID0gRk9OVF9GQUNFX1NZTTsKICAgICAgICAgcmV0dXJuOwogCisgICAgY2FzZSAnaCc6Cisg
ICAgICAgIGlmIChsZW5ndGggPT0gNSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAy
LCAib3N0IikpCisgICAgICAgICAgICBtX3Rva2VuID0gSE9TVF9TWU07CisgICAgICAgIHJldHVy
bjsKKwogICAgIGNhc2UgJ2knOgogICAgICAgICBpZiAobGVuZ3RoID09IDcgJiYgaXNFcXVhbFRv
Q1NTSWRlbnRpZmllcihuYW1lICsgMiwgIm1wb3J0IikpIHsKICAgICAgICAgICAgIG1fcGFyc2lu
Z01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKQEAgLTEwMDQ5LDYgKzEwMDU0LDIyIEBAIFN0eWxlUnVs
ZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCitTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKFJ1bGVMaXN0
KiBydWxlcykKK3sKKyAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVj
bGFyYXRpb25zID0gZmFsc2U7CisgICAgUmVmUHRyPFN0eWxlUnVsZUhvc3Q+IHJ1bGU7CisgICAg
aWYgKHJ1bGVzKQorICAgICAgICBydWxlID0gU3R5bGVSdWxlSG9zdDo6Y3JlYXRlKCpydWxlcyk7
CisgICAgZWxzZSB7CisgICAgICAgIFJ1bGVMaXN0IGVtcHR5UnVsZXM7CisgICAgICAgIHJ1bGUg
PSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoZW1wdHlSdWxlcyk7CisgICAgfQorICAgIFN0eWxlUnVs
ZUhvc3QqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CisgICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVs
ZS5yZWxlYXNlKCkpOworICAgIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVk
ZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIENTU1BhcnNlcjo6YWRkTmFtZXNw
YWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSkK
IHsKICAgICBpZiAoIW1fc3R5bGVTaGVldCB8fCAhbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9u
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBlMzMwOTBmODMyNmZhNjRiM2MyZDNhZWI4M2Vi
NDZiMzRkMzA2YmQ5Li40MGFmMzM1YmRjNzA1ZjI4YmMzM2Y3YjE4YThhYmYyNTg2Y2Q1YmM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC0yODIsNiArMjgyLDcgQEAgcHVibGljOgogICAgIFN0
eWxlUnVsZUJhc2UqIGNyZWF0ZVBhZ2VSdWxlKFBhc3NPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+
IHBhZ2VTZWxlY3Rvcik7CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlUmVnaW9uUnVsZShDU1NT
ZWxlY3RvclZlY3RvciogcmVnaW9uU2VsZWN0b3IsIFJ1bGVMaXN0KiBydWxlcyk7CiAgICAgU3R5
bGVSdWxlQmFzZSogY3JlYXRlTWFyZ2luQXRSdWxlKENTU1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBl
KTsKKyAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVIb3N0UnVsZShSdWxlTGlzdCogcnVsZXMpOwog
ICAgIHZvaWQgc3RhcnREZWNsYXJhdGlvbnNGb3JNYXJnaW5Cb3goKTsKICAgICB2b2lkIGVuZERl
Y2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVy
dHlTb3VyY2VEYXRhLmgKaW5kZXggNDY5YmRiNjMwYzFhNWM1ZGJhOTkzZmQxYWQ1OWVkMDc0NDlh
NTViZS4uMDc5ZWMzMzYyNDk1YzA3OTc5YjQ3NWFmZGU3NzYwMjM4NGM5OTk2ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaApAQCAtOTQsNyArOTQsOCBAQCBz
dHJ1Y3QgQ1NTUnVsZVNvdXJjZURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NSdWxlU291cmNl
RGF0YT4gewogICAgICAgICBGT05UX0ZBQ0VfUlVMRSwKICAgICAgICAgUEFHRV9SVUxFLAogICAg
ICAgICBLRVlGUkFNRVNfUlVMRSwKLSAgICAgICAgUkVHSU9OX1JVTEUKKyAgICAgICAgUkVHSU9O
X1JVTEUsCisgICAgICAgIEhPU1RfUlVMRQogICAgIH07CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NSdWxlU291cmNlRGF0YT4gY3JlYXRlKFR5cGUgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcAppbmRleCA1MTdiZGI2YjJlMGY2YTA3MmI2YzkwMTlkY2FiMTg4ZDFkY2Rl
ZTk1Li5kZTcxZjQ5Yzc1NGU0Y2RkOTM4NjM3Zjk3NmFkZjQ5MzZjMzE4NTMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiQ291
bnRlci5oIgogI2luY2x1ZGUgIkNvdW50ZXJDb250ZW50LmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlz
dC5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFkb3cuaCIKICNpbmNsdWRlICJGb250RmVhdHVyZVZh
bHVlLmgiCiAjaW5jbHVkZSAiRm9udFZhbHVlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTU3
OSw2ICs1ODAsMjggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZXNoZWV0
cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlAKIH0KIAogI2lmIEVOQUJMRShT
VFlMRV9TQ09QRUQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkZEhvc3RSdWxlKFN0eWxlUnVsZUhv
c3QqIGhvc3RSdWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlKQoreworICAgIGlmICghc2NvcGUgfHwgIXNjb3BlLT5pc0luU2hhZG93
VHJlZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFkb3dSb290KiBzaGFkb3dSb290ID0g
c2NvcGUtPnNoYWRvd1Jvb3QoKTsKKyAgICBpZiAoIXNoYWRvd1Jvb3QgfHwgIXNoYWRvd1Jvb3Qt
Pmhvc3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHNoYWRvd1Jvb3QtPm93bmVyKCktPmNsZWFy
SGFzTWF0Y2hlZEhvc3RSdWxlKCk7CisKKyAgICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQg
YWRkUmVzdWx0ID0gbV9hdEhvc3RSdWxlcy5hZGQoc2hhZG93Um9vdCwgbnVsbHB0cik7CisgICAg
aWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNl
Y29uZCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzID0gaG9zdFJ1bGUtPmNoaWxkUnVsZXMoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBTdHlsZVJ1bGVCYXNlKiBob3N0U3R5bGluZ1J1bGUgPSBjaGlsZFJ1bGVzW2ldLmdldCgpOwor
ICAgICAgICBpZiAoaG9zdFN0eWxpbmdSdWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHls
ZVJ1bGUqPihob3N0U3R5bGluZ1J1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCB0cnVl
LCBmYWxzZSk7CisgICAgfQorfQorCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldHVwU2NvcGVTdGFj
ayhjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQpCiB7CiAgICAgLy8gVGhlIHNjb3BpbmcgZWxl
bWVudCBzdGFjayBzaG91bGRuJ3QgYmUgdXNlZCBpZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2Vk
IGFueXdoZXJlLgpAQCAtOTI0LDEzICs5NDcsOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZQog
ICAgIH0KIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6dHJhbnNmZXJNYXRj
aGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKLSAgICBpZiAobV9tYXRjaGVkUnVsZXMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0K
ICAgICBpZiAobV9jaGVja2VyLm1vZGUoKSA9PSBTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdS
dWxlcykgewogICAgICAgICBpZiAoIW1fcnVsZUxpc3QpCiAgICAgICAgICAgICBtX3J1bGVMaXN0
ID0gU3RhdGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOwpAQCAtOTUyLDYgKzk3MCwxNSBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0KQogICAgIH0KIH0KIAordm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJN
YXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBpZiAobV9tYXRjaGVkUnVs
ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7
CisgICAgdHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKK30KKwogdm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpCiB7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKQEAgLTk5OSw2ICsx
MDI2LDcwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0CiAjZW5kaWYKIH0KIAorI2lmIEVOQUJM
RShTVFlMRV9TQ09QRUQpCitpbmxpbmUgUnVsZVNldCogU3R5bGVSZXNvbHZlcjo6YXRIb3N0UnVs
ZVNldEZvclNjb3BlKGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCit7CisgICAgU2NvcGVk
UnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0SG9zdFJ1bGVzLmZpbmQoc2hhZG93
Um9vdCk7CisgICAgcmV0dXJuIGl0ICE9IG1fYXRIb3N0UnVsZXMuZW5kKCkgPyBpdC0+c2Vjb25k
LmdldCgpIDogMDsgCit9CisKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6bWF0Y2hlc0hvc3RSdWxlcygp
Cit7CisgICAgaWYgKG1fYXRIb3N0UnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBtX2VsZW1lbnQtPnNoYWRvdygpOwor
ICAgIGlmICghc2hhZG93KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNoYWRvdy0+
aGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBzaGFkb3ctPmhh
c01hdGNoZWRIb3N0UnVsZSgpOworCisgICAgZm9yIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0g
c2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hhZG93Um9vdDsgc2hhZG93Um9vdCA9IHNo
YWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7CisgICAgICAgIGlmIChhdEhvc3RSdWxlU2V0
Rm9yU2NvcGUoc2hhZG93Um9vdCkpIHsKKyAgICAgICAgICAgIHNoYWRvdy0+c2V0SGFzTWF0Y2hl
ZEhvc3RSdWxlKHRydWUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIHNoYWRvdy0+c2V0SGFzTWF0Y2hlZEhvc3RSdWxlKGZh
bHNlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwordm9pZCBTdHlsZVJlc29sdmVy
OjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1
bGVzKQoreworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgaWYgKG1fYXRIb3N0UnVsZXMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBFbGVtZW50U2hhZG93KiBzaGFkb3cg
PSBtX2VsZW1lbnQtPnNoYWRvdygpOworICAgIGlmICghc2hhZG93KQorICAgICAgICByZXR1cm47
CisgICAgLy8gSWYgQWxyZWFkeSBrbm93IHdoZXRoZXIgdGhlcmUgZXhpc3QgYW55IG1hdGNoZWQg
aG9zdCBydWxlcyBvciBub3QsIHNlZS4KKyAgICBpZiAoc2hhZG93LT5oYXNNYXRjaGVkSG9zdFJ1
bGVBdmFpbGFibGUoKSAmJiAhc2hhZG93LT5oYXNNYXRjaGVkSG9zdFJ1bGUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgVmVjdG9yPFJ1bGVTZXQqLCAxNj4gbWF0Y2hlZFJ1bGVzOyAKKyAgICBm
b3IgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgp
OyBzaGFkb3dSb290OyBzaGFkb3dSb290ID0gc2hhZG93Um9vdC0+b2xkZXJTaGFkb3dSb290KCkp
IHsgCisgICAgICAgIGlmIChSdWxlU2V0KiBydWxlU2V0ID0gYXRIb3N0UnVsZVNldEZvclNjb3Bl
KHNoYWRvd1Jvb3QpKQorICAgICAgICAgICAgbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlU2V0KTsK
KyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlS
dWxlcyk7CisgICAgb3B0aW9ucy5zY29wZSA9IG1fZWxlbWVudDsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsgLS1pKQorICAgICAgICBjb2xsZWN0TWF0
Y2hpbmdSdWxlcyhtYXRjaGVkUnVsZXMuYXQoaS0xKSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhv
clJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBVTlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5UnVs
ZXMpOworI2VuZGlmCit9CisKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhN
YXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogICAgIG1fbWF0
Y2hlZFJ1bGVzLmNsZWFyKCk7CkBAIC0xMDEzLDggKzExMDQsMTIgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMKICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihtX2F1dGhvclN0eWxl
LmdldCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0
QXV0aG9yUnVsZSwgb3B0aW9ucyk7CiAKICAgICBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKHJlc3Vs
dCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIGlmICghbV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgp
KQorICAgICAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7CiAKLSAgICBzb3J0QW5kVHJhbnNmZXJNYXRj
aGVkUnVsZXMocmVzdWx0KTsKKyAgICBtYXRjaEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKKyAgICBpZiAoIW1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgdHJh
bnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjptYXRj
aFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQpA
QCAtMTU4MCw2ICsxNjc1LDExIEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVT
aGFyZWRTdHlsZSgpCiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5
LgogICAgIGlmIChtYXRjaGVzUnVsZVNldChtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQo
KSkpCiAgICAgICAgIHJldHVybiAwOworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgLy8g
Q2FuJ3Qgc2hhcmUgaWYgQGhvc3QgQC1ydWxlcyBhcHBseS4KKyAgICBpZiAobWF0Y2hlc0hvc3RS
dWxlcygpKQorICAgICAgICByZXR1cm4gMDsKKyNlbmRpZgogICAgIC8vIFRyYWNraW5nIGNoaWxk
IGluZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQg
c2V0IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCiAgICAgaWYgKHBhcmVudFN0eWxl
UHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTI3
ODMsNiArMjg4MywxMCBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hl
ZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdQogICAgICAgICAgICAgYWRk
UmVnaW9uUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVSZWdpb24qPihydWxlKSwgaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbik7CiAgICAgICAgIH0KICNlbmRpZgorI2lmIEVOQUJMRShTVFlMRV9T
Q09QRUQpCisgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzSG9zdFJ1bGUoKSkKKyAgICAgICAgICAg
IHJlc29sdmVyLT5hZGRIb3N0UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4ocnVsZSks
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHNjb3BlKTsKKyNlbmRpZgogICAgIH0KICAgICBp
ZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQogICAgICAgICBzaHJpbmtUb0ZpdCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggNWZiODU4Y2ZiYmYwMGMxMDc0Y2Y4MjNmYmIy
ZmQyMDZiYTMyYjM3Ni4uYjIwNDcxMmE2OWI5NjI1MzkwMzY3MjZiNTc1MTNhZmNiMzNhMjIyMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC03MSw2ICs3MSw3IEBAIGNsYXNzIFJl
bmRlclJlZ2lvbjsKIGNsYXNzIFJ1bGVEYXRhOwogY2xhc3MgUnVsZVNldDsKIGNsYXNzIFNldHRp
bmdzOworY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNzIFN0YXRpY0NTU1J1bGVMaXN0OwogY2xhc3Mg
U3R5bGVCdWlsZGVyOwogY2xhc3MgU3R5bGVJbWFnZTsKQEAgLTgxLDYgKzgyLDcgQEAgY2xhc3Mg
U3R5bGVSdWxlOwogY2xhc3MgU3R5bGVSdWxlS2V5ZnJhbWVzOwogY2xhc3MgU3R5bGVSdWxlUGFn
ZTsKIGNsYXNzIFN0eWxlUnVsZVJlZ2lvbjsKK2NsYXNzIFN0eWxlUnVsZUhvc3Q7CiBjbGFzcyBT
dHlsZVNoYWRlcjsKIGNsYXNzIFN0eWxlU2hlZXQ7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7
CkBAIC0xMzUsNiArMTM3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcG9wUGFyZW50RWxlbWVudChF
bGVtZW50Kik7CiAgICAgdm9pZCBwdXNoUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290
Kik7CiAgICAgdm9pZCBwb3BQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKKyAg
ICB2b2lkIGFkZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3QqLCBib29sLCBjb25zdCBDb250YWluZXJO
b2RlKik7CiAKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxl
bWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFN0eWxlU2hhcmluZ0JlaGF2aW9y
ID0gQWxsb3dTdHlsZVNoYXJpbmcsCiAgICAgICAgIFJ1bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0
Y2hBbGxSdWxlcywgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gMCk7CkBAIC0zNTgs
MTEgKzM2MSwxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJl
c3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hVc2VyUnVsZXMo
TWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoU2Nv
cGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAg
ICB2b2lkIG1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cyk7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJzdFJ1
bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICB2
b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVs
ZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwogICAgIHZv
aWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBp
bnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9u
cyYpOworICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JIb3N0KFJ1bGVTZXQqLCBpbnQm
IGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYp
OwogICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7CiAg
ICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7CisgICAgdm9pZCB0cmFuc2Zlck1hdGNoZWRSdWxl
cyhNYXRjaFJlc3VsdCYpOwogICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1h
dGNoUmVzdWx0Jik7CiAKICAgICBib29sIGNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURhdGEmLCBj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZSA9IDApOwpAQCAtNTQ0LDYgKzU1MCwxMCBAQCBwcml2
YXRlOgogICAgIC8vIFRoaXMgaXMgdXNlZCB0byBkZWNpZGUgd2hldGhlciBtX3Njb3BpbmdFbGVt
ZW50U3RhY2sgaXMgY29uc2lzdGVudCwgc2VwYXJhdGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tlcjo6
bV9wYXJlbnRTdGFjay4KICAgICBjb25zdCBDb250YWluZXJOb2RlKiBtX3Njb3BlU3RhY2tQYXJl
bnQ7CiAgICAgaW50IG1fc2NvcGVTdGFja1BhcmVudEJvdW5kc0luZGV4OworCisgICAgU2NvcGVk
UnVsZVNldE1hcCBtX2F0SG9zdFJ1bGVzOworICAgIFJ1bGVTZXQqIGF0SG9zdFJ1bGVTZXRGb3JT
Y29wZShjb25zdCBTaGFkb3dSb290Kik7CisgICAgYm9vbCBtYXRjaGVzSG9zdFJ1bGVzKCk7CiAj
ZW5kaWYKIAogICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVs
ZS5jcHAKaW5kZXggNTllZDllNThmMGE3ZjdjOTBjZmYzMmIzZmI1YjQ4OGNmYmM4YTFiNC4uY2Y2
MGFkYTI4YTZhNTFjYTBkYzU0NGRiZGQ0MzM3NWZjZWU0ZThkNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UnVsZS5jcHAKQEAgLTc4LDYgKzc4LDkgQEAgdm9pZCBTdHlsZVJ1bGVCYXNlOjpyZXBvcnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIGNh
c2UgS2V5ZnJhbWVzOgogICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFt
ZXMqPih0aGlzKS0+cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8p
OwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBIb3N0OgorICAgICAgICBzdGF0aWNfY2FzdDxj
b25zdCBTdHlsZVJ1bGVCbG9jayo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2Uo
bWVtb3J5T2JqZWN0SW5mbyk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFVua25vd246CiAg
ICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xMTMsNiArMTE2LDkgQEAg
dm9pZCBTdHlsZVJ1bGVCYXNlOjpkZXN0cm95KCkKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAg
ICAgZGVsZXRlIHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBIb3N0OgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5
bGVSdWxlSG9zdCo+KHRoaXMpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBVbmtub3duOgog
ICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMTQ2LDYgKzE1Miw4IEBA
IFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gU3R5bGVSdWxlQmFzZTo6Y29weSgpIGNvbnN0CiAg
ICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKj4odGhpcyktPmNvcHkoKTsKKyAgICBj
YXNlIEhvc3Q6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVIb3N0
Kj4odGhpcyktPmNvcHkoKTsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0Ogog
ICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xODcsNiArMTk1LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxl
PiBTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTU3R5bGVTaGVldCogcGFyZW50
U2hlZXQKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgcnVsZSA9IFdlYktpdENTU0tleWZy
YW1lc1J1bGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihzZWxmKSwg
cGFyZW50U2hlZXQpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEhvc3Q6CiAgICAgY2FzZSBV
bmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMzc3LDQg
KzM4NiwxNCBAQCB2b2lkIFN0eWxlUnVsZVJlZ2lvbjo6cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVz
YWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdAogICAgIGluZm8uYWRkTWVtYmVyKG1f
c2VsZWN0b3JMaXN0KTsKIH0KIAorU3R5bGVSdWxlSG9zdDo6U3R5bGVSdWxlSG9zdChWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpCisgICAgOiBTdHlsZVJ1bGVCbG9j
ayhIb3N0LCBhZG9wdFJ1bGVzKQoreworfQorCitTdHlsZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0
KGNvbnN0IFN0eWxlUnVsZUhvc3QmIG8pCisgICAgOiBTdHlsZVJ1bGVCbG9jayhvKQoreworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKaW5kZXggZTE1ZjMy
ZTQwMmFhZjIwOGQzY2MwZmNjZDM1ODQ3N2IyMzAzNTYzNC4uZDNmNzhmZDIwMDM5NDdhMzg4MjJk
MGMyZWE0Y2Y1Nzc5NjlmYmIxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaApAQCAtNDYsNiArNDYs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFBhZ2UsCiAgICAgICAgIEtleWZyYW1lcywKICAgICAgICAg
S2V5ZnJhbWUsIC8vIE5vdCB1c2VkLiBUaGVzZSBhcmUgaW50ZXJuYWxseSBub24tcnVsZSBTdHls
ZUtleWZyYW1lIG9iamVjdHMuCisgICAgICAgIEhvc3QsCiAgICAgICAgIFJlZ2lvbiA9IDE2CiAg
ICAgfTsKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPiht
X3R5cGUpOyB9CkBAIC01OCw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3R5bGVSdWxl
KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFN0eWxlOyB9CiAgICAgYm9vbCBpc1JlZ2lvblJ1
bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gUmVnaW9uOyB9CiAgICAgYm9vbCBpc0ltcG9y
dFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSW1wb3J0OyB9CisgICAgYm9vbCBpc0hv
c3RSdWxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEhvc3Q7IH0KIAogICAgIFBhc3NSZWZQ
dHI8U3R5bGVSdWxlQmFzZT4gY29weSgpIGNvbnN0OwogCkBAIC0yMjMsNiArMjI1LDIwIEBAIHBy
aXZhdGU6CiAgICAgQ1NTU2VsZWN0b3JMaXN0IG1fc2VsZWN0b3JMaXN0OwogfTsKIAorY2xhc3Mg
U3R5bGVSdWxlSG9zdCA6IHB1YmxpYyBTdHlsZVJ1bGVCbG9jayB7CisgcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0eWxlUnVsZUhvc3Q+IGNyZWF0ZShWZWN0b3I8UmVmUHRyPFN0eWxl
UnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFN0eWxlUnVsZUhvc3QoYWRvcHRSdWxlcykpOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8
U3R5bGVSdWxlSG9zdD4gY29weSgpIGNvbnN0IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVJ1
bGVIb3N0KCp0aGlzKSk7IH0KKworIHByaXZhdGU6CisgICAgU3R5bGVSdWxlSG9zdChWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpOworICAgIFN0eWxlUnVsZUhvc3Qo
Y29uc3QgU3R5bGVSdWxlSG9zdCYpOworfTsKKyAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIFN0eWxlUnVsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVTaGVldENvbnRlbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVu
dHMuY3BwCmluZGV4IDA0ODI3M2JlYzE3ODNkYjI1Mjc3YjIyZTJlZjQzZGM2ODk2MTdhZGQuLjQ1
OTNmNjdlZjg5N2M2ODY4MjY0MTM3YWJkMmE5NThkODZmZmQ1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCkBAIC00MzMsNiArNDMzLDEwIEBAIHN0YXRpYyBi
b29sIGNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcyhjb25zdCBWZWN0
b3I8UmVmUHRyPFN0eWxlCiAgICAgICAgICAgICBpZiAoY2hpbGRSdWxlc0hhdmVGYWlsZWRPckNh
bmNlbGVkU3VicmVzb3VyY2VzKHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZVJlZ2lvbio+KHJ1
bGUpLT5jaGlsZFJ1bGVzKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3R5bGVSdWxlQmFzZTo6SG9zdDoKKyAgICAgICAg
ICAgIGlmIChjaGlsZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoc3RhdGlj
X2Nhc3Q8Y29uc3QgU3R5bGVSdWxlSG9zdCo+KHJ1bGUpLT5jaGlsZFJ1bGVzKCkpKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
U3R5bGVSdWxlQmFzZTo6SW1wb3J0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIGNhc2UgU3R5bGVSdWxlQmFzZTo6UGFnZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
U2hhZG93LmNwcAppbmRleCBhZWI1YjViNDc1YjIxOWJjNTdkYzg1ZWYyZTdiODMyYWVlODg5M2Zj
Li45ZWE5OGIxYjdlM2IyYWMxYWRhOWMzZDg4NTk2Y2ZmZTJmOGE5MmQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnRTaGFkb3cuY3BwCkBAIC0zOSw2ICszOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIEVsZW1lbnRTaGFkb3c6OkVsZW1lbnRTaGFkb3coKQorICAgICAgICA6IG1faGFzTWF0
Y2hlZEhvc3RSdWxlQXZhaWxhYmxlKGZhbHNlKQogewogfQogCkBAIC04OSw2ICs5MCwxMCBAQCB2
b2lkIEVsZW1lbnRTaGFkb3c6OmFkZFNoYWRvd1Jvb3QoRWxlbWVudCogc2hhZG93SG9zdCwgUGFz
c1JlZlB0cjxTaGFkb3dSb290PiBzaAogICAgIGlmIChzaGFkb3dIb3N0LT5hdHRhY2hlZCgpKQog
ICAgICAgICBzaGFkb3dIb3N0LT5sYXp5UmVhdHRhY2goKTsKIAorICAgIC8vIEFzIGEgbmV3IHNo
YWRvdyBkb20gc3VidHJlZSBtaWdodCBoYXZlIEBob3N0IEAtcnVsZXMsIG5lZWQgdG8gZGlzYWJs
ZQorICAgIC8vIGhhc01hdGNoZWRIb3N0UnVsZXMgY2FjaGUuCisgICAgY2xlYXJIYXNNYXRjaGVk
SG9zdFJ1bGUoKTsKKwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHVzaFNoYWRv
d1Jvb3Qoc2hhZG93SG9zdCwgc2hhZG93Um9vdC5nZXQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudFNoYWRvdy5oCmluZGV4IGRkYjQzODA2YmRlMTUzOWZjN2FkYzJiOWQ4NjkyY2U3MjNjODMz
ZjYuLjUxNTY5YjZhNmFiNTY2YmY0YTliYTQ1MTNiNjQwZDM4NWQ0NWY4NjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnRTaGFkb3cuaApAQCAtNzEsMTEgKzcxLDE4IEBAIHB1YmxpYzoKICAgICBDb250
ZW50RGlzdHJpYnV0b3ImIGRpc3RyaWJ1dG9yKCk7CiAgICAgY29uc3QgQ29udGVudERpc3RyaWJ1
dG9yJiBkaXN0cmlidXRvcigpIGNvbnN0OwogCisgICAgYm9vbCBoYXNNYXRjaGVkSG9zdFJ1bGUo
KSBjb25zdCB7IHJldHVybiBtX2hhc01hdGNoZWRIb3N0UnVsZTsgfQorICAgIGJvb2wgaGFzTWF0
Y2hlZEhvc3RSdWxlQXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNNYXRjaGVkSG9zdFJ1
bGVBdmFpbGFibGU7IH0KKyAgICB2b2lkIGNsZWFySGFzTWF0Y2hlZEhvc3RSdWxlKCkgeyBtX2hh
c01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZSA9IGZhbHNlOyB9CisgICAgdm9pZCBzZXRIYXNNYXRj
aGVkSG9zdFJ1bGUoYm9vbCBoYXNSdWxlKSB7IG1faGFzTWF0Y2hlZEhvc3RSdWxlID0gaGFzUnVs
ZTsgbV9oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUgPSB0cnVlOyB9CisKIHByaXZhdGU6CiAg
ICAgdm9pZCBpbnZhbGlkYXRlRGlzdHJpYnV0aW9uKEVsZW1lbnQqIGhvc3QpOwogCiAgICAgRG91
Ymx5TGlua2VkTGlzdDxTaGFkb3dSb290PiBtX3NoYWRvd1Jvb3RzOwogICAgIENvbnRlbnREaXN0
cmlidXRvciBtX2Rpc3RyaWJ1dG9yOworICAgIGJvb2wgbV9oYXNNYXRjaGVkSG9zdFJ1bGU7Cisg
ICAgYm9vbCBtX2hhc01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZTsKIH07CiAKIGlubGluZSBTaGFk
b3dSb290KiBFbGVtZW50U2hhZG93Ojp5b3VuZ2VzdFNoYWRvd1Jvb3QoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NoYWRvd1Jvb3QuY3BwCmluZGV4IDllOWFiYzQzODM5ODI1ZmRlNzlhOTg4YzQxNTkyMDE0
ZDNjYTZmNWIuLjM5NjA0YjkxNjQwNzA0ZDFmOWU4ZmM5NTcxNzI4MmJmODc4YzEzNDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2hhZG93Um9vdC5jcHAKQEAgLTU1LDYgKzU1LDcgQEAgU2hhZG93Um9vdDo6U2hh
ZG93Um9vdChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgLCBtX2FwcGx5QXV0aG9yU3R5bGVzKGZh
bHNlKQogICAgICwgbV9yZXNldFN0eWxlSW5oZXJpdGFuY2UoZmFsc2UpCiAgICAgLCBtX2luc2Vy
dGlvblBvaW50QXNzaWduZWRUbygwKQorICAgICwgbV9udW1iZXJPZlNoYWRvd0VsZW1lbnRDaGls
ZHJlbigwKQogewogICAgIEFTU0VSVChkb2N1bWVudCk7CiAgICAgCkBAIC0yMjMsNiArMjI0LDcg
QEAgdm9pZCBTaGFkb3dSb290OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIs
IE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSoKIHsKICAgICBDb250YWluZXJOb2RlOjpjaGlsZHJl
bkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGls
ZENvdW50RGVsdGEpOwogICAgIG93bmVyKCktPmludmFsaWRhdGVEaXN0cmlidXRpb24oKTsKKyAg
ICBvd25lcigpLT5jbGVhckhhc01hdGNoZWRIb3N0UnVsZSgpOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1No
YWRvd1Jvb3QuaAppbmRleCA2ZjcwMDlkMDkxYzY5NzlkYmJkZGViNTYzNjI4MzNmZTRjYmQ2NTkz
Li5kNTdkZTgyMzg2MjYzNjc4YWZjN2Q5Y2U5ZWUyNGIzZDA3MzA5ZjQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmgKQEAgLTg5LDYgKzg5LDEwIEBAIHB1YmxpYzoKICAgICBJbnNlcnRpb25Qb2lu
dCogYXNzaWduZWRUbygpIGNvbnN0OwogICAgIHZvaWQgc2V0QXNzaWduZWRUbyhJbnNlcnRpb25Q
b2ludCopOwogCisgICAgdm9pZCByZWdpc3RlclNoYWRvd0VsZW1lbnQoKSB7ICsrbV9udW1iZXJP
ZlNoYWRvd0VsZW1lbnRDaGlsZHJlbjsgfQorICAgIHZvaWQgdW5yZWdpc3RlclNoYWRvd0VsZW1l
bnQoKSB7IC0tbV9udW1iZXJPZlNoYWRvd0VsZW1lbnRDaGlsZHJlbjsgfQorICAgIGJvb2wgaGFz
U2hhZG93SW5zZXJ0aW9uUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX251bWJlck9mU2hhZG93RWxl
bWVudENoaWxkcmVuID4gMDsgfQorCiAjaWZuZGVmIE5ERUJVRwogICAgIFNoYWRvd1Jvb3RUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICNlbmRpZgpAQCAtMTA4LDYgKzExMiw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FwcGx5QXV0aG9yU3R5bGVzIDogMTsKICAgICBib29s
IG1fcmVzZXRTdHlsZUluaGVyaXRhbmNlIDogMTsKICAgICBJbnNlcnRpb25Qb2ludCogbV9pbnNl
cnRpb25Qb2ludEFzc2lnbmVkVG87CisgICAgc2l6ZV90IG1fbnVtYmVyT2ZTaGFkb3dFbGVtZW50
Q2hpbGRyZW47CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgU2hhZG93Um9vdFR5cGUgbV90eXBlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuY3BwCmlu
ZGV4IDkzODQzOTYxMmNhMjFkMjY5ZTU3NzhhOTZiMTU5ODBlZjc1NDJiOWEuLjVjNWRiZTk0ZmZl
NDQ2ZTZmZTBiNjNmNmQwZTdlYjYzZTY0OTNlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3Mg
RG9jdW1lbnQ7CiAKIGlubGluZSBIVE1MU2hhZG93RWxlbWVudDo6SFRNTFNoYWRvd0VsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDog
SW5zZXJ0aW9uUG9pbnQodGFnTmFtZSwgZG9jdW1lbnQpCisgICAgLCBtX3JlZ2lzdGVyZWRXaXRo
U2hhZG93Um9vdChmYWxzZSkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShIVE1MTmFtZXM6OnNo
YWRvd1RhZykpOwogfQpAQCAtNjgsNCArNjksMzEgQEAgYm9vbCBIVE1MU2hhZG93RWxlbWVudDo6
ZG9lc1NlbGVjdEZyb21Ib3N0Q2hpbGRyZW4oKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAorTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MU2hhZG93RWxlbWVudDo6
aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUqIGluc2VydGlvblBvaW50KQoreworICAgIEluc2Vy
dGlvblBvaW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOworCisgICAgaWYgKGluc2Vy
dGlvblBvaW50LT5pbkRvY3VtZW50KCkgJiYgaXNBY3RpdmUoKSkgeworICAgICAgICBpZiAoU2hh
ZG93Um9vdCogcm9vdCA9IHNoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgcm9vdC0+cmVnaXN0
ZXJTaGFkb3dFbGVtZW50KCk7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRXaXRoU2hhZG93Um9v
dCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsK
K30KKwordm9pZCBIVE1MU2hhZG93RWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSog
aW5zZXJ0aW9uUG9pbnQpCit7CisgICAgaWYgKGluc2VydGlvblBvaW50LT5pbkRvY3VtZW50KCkg
JiYgbV9yZWdpc3RlcmVkV2l0aFNoYWRvd1Jvb3QpIHsKKyAgICAgICAgU2hhZG93Um9vdCogcm9v
dCA9IHNoYWRvd1Jvb3QoKTsKKyAgICAgICAgaWYgKCFyb290KQorICAgICAgICAgICAgcm9vdCA9
IGluc2VydGlvblBvaW50LT5zaGFkb3dSb290KCk7CisgICAgICAgIGlmIChyb290KQorICAgICAg
ICAgICAgcm9vdC0+dW5yZWdpc3RlclNoYWRvd0VsZW1lbnQoKTsKKyAgICAgICAgbV9yZWdpc3Rl
cmVkV2l0aFNoYWRvd1Jvb3QgPSBmYWxzZTsKKyAgICB9CisgICAgSW5zZXJ0aW9uUG9pbnQ6OnJl
bW92ZWRGcm9tKGluc2VydGlvblBvaW50KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmgKaW5kZXgg
YTRlY2RiM2FkNDVmYjhlYzRlOWFhNTAwMGEwMWUzYWVkMWNkMjBkYy4uMTE5ZmE5Zjk1ZGVmNjI3
NDE2MmNiMTg4OTQ5ZmQ0NzFhYWRiZmI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9IVE1MU2hhZG93RWxlbWVudC5oCkBAIC00Niw4ICs0NiwxNCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc1NlbGVjdFZhbGlkKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IGJvb2wgZG9lc1NlbGVjdEZyb21Ib3N0Q2hpbGRyZW4oKSBjb25zdDsKIAorcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29u
dGFpbmVyTm9kZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbShDb250
YWluZXJOb2RlKikgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgSFRNTFNoYWRvd0VsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICBib29sIG1fcmVnaXN0ZXJl
ZFdpdGhTaGFkb3dSb290OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGJh
Y2IwMjk0OTYwOWY5Mzc5OTVjOTUwZWU1NTZjMWZhZjU2NDY5ODIuLjI5YjlhOGQxZmI5NzQ1MmJm
NTFlMWYzNWNjNDQyODMxMmM1MDRmZmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wOS0w
MiAgVGFrYXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRv
dyBET01dIE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L2F0
aG9zdC1hdHJ1bGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hh
ZG93L2F0aG9zdC1hdHJ1bGVzLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA5LTE3ICBTaGlueWEgS2F3
YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFVucmV2
aWV3ZWQgZ2FyZGVuaW5nLCB0ZXN0IGV4cGVjdGF0aW9ucyB1cGRhdGUuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hMWYzYjFjMjU1MTY5NTY3ODcyNWJkNjY1MTgxMzEzNDM4NjQ5YTE0Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVz
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE1IEBACitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9z
dDogcmdiKDI1NSwgMCwgMCkKK2hvc3RBOiByZ2IoMjU1LCAwLCAwKQoraG9zdEI6IHJnYigwLCAw
LCAyNTUpCitob3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAxMjgpCito
b3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigxMjgs
IDEyOCwgMTI4KQoraG9zdDogcmdiKDI1NSwgMjU1LCAwKQoraG9zdDogcmdiKDI1NSwgMCwgMCkK
K25lc3RlZEhvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdDog
cmdiKDI1NSwgMjU1LCAwKQorSGVsbG8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy9hdGhvc3QtYXRydWxlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L2F0aG9zdC1hdHJ1bGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Q0YjUxMWVlMDJmYTlkNzUxZTU3ZTE2
OWIwMGE2ZDg3N2Q1M2E2ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NoYWRvdy9hdGhvc3QtYXRydWxlcy5odG1sCkBAIC0wLDAgKzEsMTkwIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjaG9zdCB7CisgIGNvbG9yOiBncmF5Owor
fQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9wb2x5ZmlsbC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gZHVtcENvbXB1dGVkU3R5bGUobm9kZSkKK3sKKyAgICBk
ZWJ1Zyhub2RlLmlkICsgIjogIiArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5
bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7Cit9CisKK2Z1bmN0aW9u
IHByZXByb2Nlc3NGb3JUZXN0KCkKK3sKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInBhcmVudCIpOworICAgIHBhcmVudC5pbm5lckhUTUwgPSAnPGRpdiBpZD0iaG9z
dCI+PHNwYW4+SGVsbG88L3NwYW4+PC9kaXY+JzsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZUNv
bnRlbnRDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdl
YktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhv
c3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOwor
ICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlU2hh
ZG93Q2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJL
aXRTaGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0
IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAg
ZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0V2l0aFNlbGVj
dG9yKCkKK3sKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcmVu
dCIpOworICAgIHBhcmVudC5pbm5lckhUTUwgPSAiPHN0eWxlIHNjb3BlZD4gLmhvc3QgeyBjb2xv
cjogZ3JheSB9Ozwvc3R5bGU+IgorICAgICAgICArICI8ZGl2IGlkPSdob3N0QScgY2xhc3M9J2hv
c3QnPjxzcGFuPkhlbGxvPC9zcGFuPjwvZGl2PiIKKyAgICAgICAgKyAiPHNwYW4gaWQ9J2hvc3RC
JyBjbGFzcz0naG9zdCc+PHNwYW4+V29ybGQ8L3NwYW4+PC9zcGFuPiI7CisKKyAgICB2YXIgaG9z
dEEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdEEiKTsKKyAgICB2YXIgc2hhZG93QSA9
IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3RBKTsKKyAgICB2YXIgc3R5bGUgPSAiPHN0eWxlPkBo
b3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSBzcGFuIHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+
IjsKKyAgICBzaGFkb3dBLmlubmVySFRNTCA9IHN0eWxlICsgIjxzaGFkb3c+PC9zaGFkb3c+IjsK
KworICAgIHZhciBob3N0QiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0QiIpOworICAg
IHZhciBzaGFkb3dCID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdEIpOworICAgIHNoYWRvd0Iu
aW5uZXJIVE1MID0gc3R5bGUgKyAiPHNoYWRvdz48L3NoYWRvdz4iOworCisgICAgZHVtcENvbXB1
dGVkU3R5bGUoaG9zdEEpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3RCKTsKK30KKworZnVu
Y3Rpb24gdGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVkKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVz
dCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAg
ICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93Lmlu
bmVySFRNTCA9ICI8ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9
IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+PGRpdj48c3R5bGUgc2NvcGVkPkBob3N0IHsgZGl2
IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+PC9kaXY+PC9kaXY+IjsKKyAgICBkdW1wQ29tcHV0
ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFBzZXVkb0hvc3RXaXRoRmFsbGJhY2tT
aGFkb3coKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcg
V2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2Vi
S2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHls
ZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50
PiI7CisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxjb250ZW50PjxzaGFkb3c+PC9z
aGFkb3c+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3RUd29TaGFkb3dSb290c0Nhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0
KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAg
IHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIg
eW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBvbGRlc3RT
aGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwv
c3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1M
ID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPjxzaGFkb3c+
PC9zaGFkb3c+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24g
dGVzdFR3b1NoYWRvd1Jvb3RzQ3JlYXRpbmdEaWZmZXJlbnRPcmRlckNhc2UoKQoreworICAgIHBy
ZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdCho
b3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
KTsKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsg
Y29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIG9sZGVzdFNo
YWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9z
dHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsK
K30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250
ZW50KCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdl
YktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdlYktpdFNo
YWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93
Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9v
dChob3N0KTsKKworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c2hhZG93Pjwvc2hh
ZG93PiI7CisgICAgeW91bmdlclNoYWRvdy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PC9jb250ZW50
PiI7CisgICAgb2xkZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNv
bG9yOiBncmVlbjsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hh
ZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0
eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOwor
fQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvdygpCit7
CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFk
b3dSb290KGhvc3QpOworICAgIHZhciBvbGRlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290
KGhvc3QpOworICAgIHZhciB5b3VuZ2VyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9z
dCk7CisgICAgdmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7
CisKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsg
Y29sb3I6IHllbGxvdzsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgeW91bmdl
clNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0g
fTwvc3R5bGU+PGRpdj5pbmVydDwvZGl2PiI7CisgICAgb2xkZXJTaGFkb3cuaW5uZXJIVE1MID0g
IjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBncmVlbjsgfSB9PC9zdHlsZT48c2hhZG93Pjwv
c2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBk
aXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1
bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0TmVzdGVkQ2FzZSgpCit7
CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG91dGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QoaG9zdCk7CisgICAgb3V0ZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9zdCB7
IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGRpdiBpZD0ibmVzdGVkSG9zdCI+SW5uZXJT
aGFkb3c8L2Rpdj4nOworICAgIHZhciBuZXN0ZWQgPSBvdXRlclNoYWRvdy5nZXRFbGVtZW50QnlJ
ZCgibmVzdGVkSG9zdCIpOworICAgIHZhciBpbm5lclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dS
b290KG5lc3RlZCk7CisgICAgaW5uZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9zdCB7
IGRpdiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPlNob3cgPHNoYWRvdz48L3NoYWRvdz4gaW4g
b3V0ZXIuJzsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKKyAgICBkdW1wQ29tcHV0ZWRT
dHlsZShuZXN0ZWQpOworfQorCitmdW5jdGlvbiB0ZXN0SG9zdFZzU2NvcGVkU3R5bGUoKQorewor
ICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiaG9zdCIpOworICAgIGhvc3QuaW5uZXJIVE1MID0gIjxzdHlsZSBzY29wZWQ+I2hv
c3QgeyBjb2xvcjogeWVsbG93OyB9PC9zdHlsZT48c3Bhbj5IZWxsbzwvc3Bhbj4iOworICAgIHZh
ciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJI
VE1MID0gIjxzdHlsZT5AaG9zdCB7ICNob3N0IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29u
dGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVu
Y3Rpb24gdGVzdEhvc3RWc0lubGluZVN0eWxlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgp
OworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICBo
b3N0LnN0eWxlLmNvbG9yID0gInllbGxvdyI7CisgICAgaG9zdC5pbm5lckhUTUwgPSAiPHNwYW4+
SGVsbG88L3NwYW4+IjsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9z
dCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjog
cmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0
eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiBydW5UZXN0cygpCit7CisgICAgdGVzdFNpbXBsZUNv
bnRlbnRDYXNlKCk7CisgICAgdGVzdFNpbXBsZVNoYWRvd0Nhc2UoKTsKKyAgICB0ZXN0SG9zdFdp
dGhTZWxlY3RvcigpOworICAgIHRlc3RQc2V1ZG9Ib3N0V2l0aFNjb3BlZCgpOworICAgIHRlc3RQ
c2V1ZG9Ib3N0V2l0aEZhbGxiYWNrU2hhZG93KCk7CisgICAgdGVzdFR3b1NoYWRvd1Jvb3RzQ2Fz
ZSgpOworICAgIHRlc3RUd29TaGFkb3dSb290c0NyZWF0aW5nRGlmZmVyZW50T3JkZXJDYXNlKCk7
CisgICAgdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50KCk7Cisg
ICAgdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3coKTsKKyAgICB0ZXN0TmVz
dGVkQ2FzZSgpOworICAgIHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpOworICAgIHRlc3RIb3N0VnNJ
bmxpbmVTdHlsZSgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRl
c3RzKCkiPgorICA8ZGl2IGlkPSJwYXJlbnQiPgorICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165044</attachid>
            <date>2012-09-20 21:54:30 -0700</date>
            <delta_ts>2012-10-03 00:45:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88606-20120921135354.patch</filename>
            <type>text/plain</type>
            <size>39717</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiZGIwZGRkMTM5MDQ0OWUwYzYwNDA3OWZjZGYxNzYwNTgyOTAwNDk2Li4y
Y2E1MTY0Yjg4OWQzYjM1Y2M3NjE4ZjBhMWY5MGIzNzcwNzA1ODUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTE1IEBACisyMDEyLTA5LTIwICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xl
LmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0gTmVlZHMgQGhvc3QgcnVsZSBmb3IgU2hhZG93
RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg4NjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW1wbGVtZW50ZWQgQGhvc3QtQHJ1bGVzIGFjY29yZGluZyB0byB0aGUgc2hhZG93IGRvbSBz
cGVjOgorICAgICAgICBodHRwOi8vZHZjcy53My5vcmcvaGcvd2ViY29tcG9uZW50cy9yYXctZmls
ZS90aXAvc3BlYy9zaGFkb3cvaW5kZXguaHRtbCNob3N0LWF0LXJ1bGUKKyAgICAgICAgVGhlIGRl
c2lnbiBkb2MgaXM6CisgICAgICAgIGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2Qv
MVAyeW9yY2hGOGxjaTJzY2NyLW1WU1JmMmR0dmpLZWl1eVFXekNCMmJFQTgvZWRpdAorCisgICAg
ICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy5odG1sCisKKyAgICAgICAg
KiBjc3MvQ1NTR3JhbW1hci55OgorICAgICAgICBBZGRlZCBydWxlcyBmb3IgcGFyc2luZyBAaG9z
dCBALXJ1bGVzLgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpkZXRlY3RBdFRva2VuKToKKyAgICAgICAgQWRkZWQgYSBuZXcgdG9rZW4g
IkBob3N0Ii4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUpOgor
ICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgdG8gY3JlYXRlIGFuIEBob3N0IEAtcnVsZSwgd2hp
Y2ggaXMgaW52b2tlZCBmcm9tCisgICAgICAgIENTU0dyYW1tYXIueS4KKyAgICAgICAgKiBjc3Mv
Q1NTUGFyc2VyLmg6CisgICAgICAgIEFkZGVkIGEgZGVjbGFyYXRpb24gb2YgdGhlIGFib3ZlIG5l
dyBtZXRob2Q6IGNyZWF0ZUhvc3RSdWxlLgorICAgICAgICAqIGNzcy9DU1NQcm9wZXJ0eVNvdXJj
ZURhdGEuaDoKKyAgICAgICAgQWRkZWQgSE9TVF9SVUxFIHRvIGVudW0gVHlwZS4KKyAgICAgICAg
KiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6aW5j
cmVhc2VTcGVjaWZpY2l0eSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1ldGhvZCB0byBpbmNyZWFz
ZSBzZWxlY3RvcidzIHNwZWNpZmljaXR5LiBUaGlzIG1ldGhvZCBpcworICAgICAgICB1c2VkIHRv
IG1ha2UgQGhvc3QgQC1ydWxlcycgc3BlY2lmaWNpdHkgbGFyZ2VyIHRoYW4gbm9ybWFsIGF1dGhv
cgorICAgICAgICBydWxlcycgc3BlY2lmaWNpdHkuCisgICAgICAgIChSdWxlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRTdHlsZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIEFkZGVkIG9uZSBtb3JlIGFyZ3VtZW50IHRvIGFk
ZFN0eWxlUnVsZSBhbmQgYWRkUnVsZS4gVGhlIGFyZ3VtZW50IGlzCisgICAgICAgIHVzZWQgdG8g
a25vdyB3aGV0aGVyIHRoZSBnaXZlbiBzdHlsZSBydWxlIGNvbWVzIGZyb20gQGhvc3QgQC1ydWxl
cyBvcgorICAgICAgICBub3QuIElmIHRoZSBydWxlIGNvbWVzIGZyb20gQHNob3QgQC1ydWxlcywg
dXNlIGluY3JlYXNlU3BlY2lmaWNpdHkgYW5kCisgICAgICAgIG1ha2UgdGhlIHJ1bGUgYXBwbHkg
YWZ0ZXIgcnVsZXMgKG5vdCBAaG9zdCBALXJ1bGVzKSBhcmUgYXBwbGllZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KToKKyAgICAgICAgSWYgQGhvc3QgQC1y
dWxlcyBhcmUgZm91bmQgaW4gdGhlIGdpdmVuIHN0eWxlc2hlZXQgY29udGVudCwgaW52b2tlCisg
ICAgICAgIFN0eWxlUmVzb2x2ZXIncyBhZGRIb3N0UnVsZSB0byByZWdpc3RlciB0aGUgQGhvc3Qg
QC1ydWxlcyB3aXRoIHRoZQorICAgICAgICBzaGFkb3cgcm9vdCwgd2hpY2ggaGFzIHRoZSBzdHls
ZXNoZWV0LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRkSG9zdFJ1bGUpOgor
ICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgdG8gcmVnaXN0ZXIgQGhvc3QgQC1ydWxlcyB3aXRo
IHNoYWRvdyByb290cy4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6YXRIb3N0UnVsZVNldEZvclNjb3BlKToKKyAgICAgICAgQWRkZWQgYSBuZXcg
bWV0aG9kIGZvciBmaW5kaW5nIHJ1bGVzZXRzIGZyb20gdGhlIGdpdmVuIHNoYWRvdyByb290Lgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hlc0hvc3RSdWxlcyk6CisgICAg
ICAgIEEgbmV3IG1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGFueSBAaG9zdCBALXJ1bGVzIHdpbGwg
YmUgYXBwbGllZCB0bworICAgICAgICB0aGUgZ2l2ZW4gZWxlbWVudCBvciBub3QuIFRoaXMgaXMg
cHJlcGFyZWQgZm9yIHNoYXJlZCBzdHlsZXMuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBmaW5kIG1hdGNo
ZWQgaG9zdCBydWxlcyB3aGVuIGFuIGVsZW1lbnQgaXMgZ2l2ZW4uCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgTW9kaWZpZWQgdG8g
aW52b2tlIG1hdGNoSG9zdFJ1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
bG9jYXRlU2hhcmVkU3R5bGUpOgorICAgICAgICBEaXNhYmxlIHNpYmxpbmcgc3R5bGUgY2FjaGUg
aWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgYSBzaGFkb3cgaG9zdCBhbmQKKyAgICAgICAgYW55IEBo
b3N0IEAtcnVsZXMgYXJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQuCisgICAgICAgICogY3NzL1N0
eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9T
dHlsZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6cmVwb3J0TWVt
b3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJveSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICBJbXBsZW1lbnRlZCBjbGFzcyBTdHlsZVJ1bGVIb3N0LiBUaGUgY2xhc3MgaXMgYWxtb3N0IHRo
ZSBzYW1lIGFzCisgICAgICAgIFN0eWxlUnVsZUJsb2NrIGV4Y2VwdCB0eXBlLgorICAgICAgICAq
IGNzcy9TdHlsZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmlzSG9z
dFJ1bGUpOgorICAgICAgICAoU3R5bGVSdWxlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJ1bGVIb3N0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y29w
eSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldENvbnRlbnRz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5jZWxlZFN1
YnJlc291cmNlcyk6CisgICAgICAgICogZG9tL0VsZW1lbnRTaGFkb3cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6RWxlbWVudFNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50U2hhZG93OjphZGRTaGFkb3dSb290KToKKyAgICAgICAgU2luY2UgYSBuZXcgc2hh
ZG93IHJvb3QgaXMgYWRkZWQsIGRpc2FibGUgQGhvc3QgQC1ydWxlcyBjYWNoZS4KKyAgICAgICAg
KiBkb20vRWxlbWVudFNoYWRvdy5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6
aGFzTWF0Y2hlZEhvc3RSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6Omhh
c01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hh
ZG93OjpjbGVhckhhc01hdGNoZWRIb3N0UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
U2hhZG93OjpzZXRIYXNNYXRjaGVkSG9zdFJ1bGUpOgorICAgICAgICBBZGRlZCBmb3VyIG1ldGhv
ZHMgZm9yIEBob3N0IEAtcnVsZXMgY2FjaGUuIFRoZSBjYWNoZSBoYXMgaW5mb3JtYXRpb24KKyAg
ICAgICAgYWJvdXQgd2hldGhlciBhbnkgQGhvc3QgQC1ydWxlcyBtYXRjaCB0aGUgRWxlbWVudFNo
YWRvdydzIGhvc3QuCisgICAgICAgIFRoZSByZXR1cm4gdmFsdWUgb2YgaGFzTWF0Y2hlZEhvc3RS
dWxlIGlzIGF2YWlsYWJsZSBvbmx5IGlmCisgICAgICAgIGhhc01hdGNoZWRIb3N0UnVsZUF2YWls
YWJsZSByZXR1cm5zIHRydWUuCisgICAgICAgIChFbGVtZW50U2hhZG93KToKKyAgICAgICAgKiBk
b20vU2hhZG93Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpTaGFkb3dS
b290KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OmNoaWxkcmVuQ2hhbmdlZCk6Cisg
ICAgICAgIFdoZW4gY2hpbGRyZW5DaGFuZ2VkIGlzIGludm9rZWQsIGRpc2FibGUgY2FjaGUgYWJv
dXQgd2hldGhlciBhbnkgQGhvc3QKKyAgICAgICAgQC1ydWxlcyBtYXRjaCB0aGUgc2hhZG93IHJv
b3QncyBob3N0LCBiZWNhdXNlIGFsbCBzaGFkb3cgZWxlbWVudHMgaW4KKyAgICAgICAgdGhlIHNo
YWRvdyBkb20gc3VidHJlZSBtaWdodCBiZSByZW1vdmVkIG9yIGEgbmV3IHNoYWRvdyBlbGVtZW50
IG1pZ2h0CisgICAgICAgIGJlIGluc2VydGVkIGludG8gdGhlIHN1YnRyZWUuCisgICAgICAgICog
ZG9tL1NoYWRvd1Jvb3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OnJlZ2lzdGVy
U2hhZG93RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290Ojp1bnJlZ2lzdGVy
U2hhZG93RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjpoYXNTaGFkb3dJ
bnNlcnRpb25Qb2ludCk6CisgICAgICAgIChTaGFkb3dSb290KToKKyAgICAgICAgKiBodG1sL3No
YWRvdy9IVE1MU2hhZG93RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2hhZG93
RWxlbWVudDo6SFRNTFNoYWRvd0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNoYWRv
d0VsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTaGFkb3dFbGVtZW50OjpyZW1vdmVkRnJvbSk6CisgICAgICAgICogaHRtbC9z
aGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuaDoKKyAgICAgICAgVGhlc2UgY2hhbmdlcyB3aWxsIGJl
IHJlbW92ZWQsIGJlY2F1c2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBkb25lIGluIGJ1ZworICAgICAg
ICA5NzgxNC4gSnVzdCByZXF1aXJlZCB0byBtYWtlIGNxLWJvdCBydW4gY29ycmVjdGx5IGJlZm9y
ZSBsYW5kaW5nIGEKKyAgICAgICAgcGF0Y2ggZm9yIGJ1ZyA5NzgxNC4KKwogMjAxMi0wOS0yMCAg
QWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIE1lYXN1cmUgaG93IG9m
dGVuIHdlYiBwYWdlcyB1c2UgV29ya2VyIGFuZCBTaGFyZWRXb3JrZXIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3Jh
bW1hci55CmluZGV4IDUxNjc1MzdmNzFiN2U0OWU1ODRkNzk4MmRjNDVjMDU1ZDg5Mzg1MDkuLjdj
ZWFkMzA1NzNlMzM5YzI2YTMwZTNjODU0YWQxOTA3MWYxMzJiMjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YW1tYXIueQpAQCAtMTI3LDYgKzEyNyw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNzc3l5ZXJyb3Io
dm9pZCosIGNvbnN0IGNoYXIqKQogJXRva2VuIFBBR0VfU1lNCiAldG9rZW4gTUVESUFfU1lNCiAl
dG9rZW4gRk9OVF9GQUNFX1NZTQorJXRva2VuIEhPU1RfU1lNCiAldG9rZW4gQ0hBUlNFVF9TWU0K
ICV0b2tlbiBOQU1FU1BBQ0VfU1lNCiAldG9rZW4gVkFSRlVOQ1RJT04KQEAgLTIxNCw2ICsyMTUs
NyBAQCBzdGF0aWMgaW5saW5lIGludCBjc3N5eWVycm9yKHZvaWQqLCBjb25zdCBjaGFyKikKICV0
eXBlIDxydWxlPiBwYWdlCiAldHlwZSA8cnVsZT4gbWFyZ2luX2JveAogJXR5cGUgPHJ1bGU+IGZv
bnRfZmFjZQorJXR5cGUgPHJ1bGU+IGhvc3QKICV0eXBlIDxydWxlPiBrZXlmcmFtZXMKICV0eXBl
IDxydWxlPiBpbnZhbGlkX3J1bGUKICV0eXBlIDxydWxlPiBzYXZlX2Jsb2NrCkBAIC00MTQsNiAr
NDE2LDcgQEAgdmFsaWRfcnVsZToKICAgfCBuYW1lc3BhY2UKICAgfCBpbXBvcnQKICAgfCByZWdp
b24KKyAgfCBob3N0CiAgIDsKIAogcnVsZToKQEAgLTgzNiw2ICs4MzksMjMgQEAgZm9udF9mYWNl
OgogICAgIH0KIDsKIAorYmVmb3JlX2hvc3RfcnVsZToKKyAgICAvKiBlbXB0eSAqLyB7CisgICAg
ICAgIHBhcnNlci0+bWFya1J1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6SE9TVF9S
VUxFKTsKKyAgICB9CisgICAgOworCitob3N0OgorICAgIGJlZm9yZV9ob3N0X3J1bGUgSE9TVF9T
WU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlIAorICAgICd7JyBhdF9ydWxlX2JvZHlf
c3RhcnQgbWF5YmVfc3BhY2UgYmxvY2tfcnVsZV9saXN0IHNhdmVfYmxvY2sgeworICAgICAgICAk
JCA9IHBhcnNlci0+Y3JlYXRlSG9zdFJ1bGUoJDcpOworICAgIH0KKyAgICB8IGJlZm9yZV9ob3N0
X3J1bGUgSE9TVF9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlICc7JyB7CisgICAg
ICAgICQkID0gMDsKKyAgICAgICAgcGFyc2VyLT5wb3BSdWxlRGF0YSgpOworICAgIH0KKyAgICA7
CisgCiByZWdpb25fc2VsZWN0b3I6CiAgICAgc2VsZWN0b3JfbGlzdCB7CiAgICAgICAgIGlmICgk
MSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCBlZmQ5YmFlM2EwNjhkZGU1ZWQxOWVm
ODNjYTc1NGM3NjI2ZTgxODMwLi44NTcyOTYxNzk3OGJhZjFlZWFkMTQ5Y2M4NTc5MmU2ZmFmMDBl
MGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtOTI2MSw2ICs5MjYxLDExIEBAIGlu
bGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihpbnQgbGVuZ3RoLCBib29sIGhhc0Vz
Y2FwZSkKICAgICAgICAgICAgIG1fdG9rZW4gPSBGT05UX0ZBQ0VfU1lNOwogICAgICAgICByZXR1
cm47CiAKKyAgICBjYXNlICdoJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA1ICYmIGlzRXF1YWxU
b0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvc3QiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBI
T1NUX1NZTTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSAnaSc6CiAgICAgICAgIGlmIChs
ZW5ndGggPT0gNyAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAibXBvcnQiKSkg
ewogICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOwpAQCAtMTAwNDks
NiArMTAwNTQsMjIgQEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1
bGUoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1N0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6
Y3JlYXRlSG9zdFJ1bGUoUnVsZUxpc3QqIHJ1bGVzKQoreworICAgIG1fYWxsb3dJbXBvcnRSdWxl
cyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKKyAgICBSZWZQdHI8U3R5
bGVSdWxlSG9zdD4gcnVsZTsKKyAgICBpZiAocnVsZXMpCisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1
bGVIb3N0OjpjcmVhdGUoKnJ1bGVzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUnVsZUxpc3QgZW1w
dHlSdWxlczsKKyAgICAgICAgcnVsZSA9IFN0eWxlUnVsZUhvc3Q6OmNyZWF0ZShlbXB0eVJ1bGVz
KTsKKyAgICB9CisgICAgU3R5bGVSdWxlSG9zdCogcmVzdWx0ID0gcnVsZS5nZXQoKTsKKyAgICBt
X3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CisgICAgcHJvY2Vzc0FuZEFkZE5l
d1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZv
aWQgQ1NTUGFyc2VyOjphZGROYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNv
bnN0IEF0b21pY1N0cmluZyYgdXJpKQogewogICAgIGlmICghbV9zdHlsZVNoZWV0IHx8ICFtX2Fs
bG93TmFtZXNwYWNlRGVjbGFyYXRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IGUzMzA5
MGY4MzI2ZmE2NGIzYzJkM2FlYjgzZWI0NmIzNGQzMDZiZDkuLjQwYWYzMzViZGM3MDVmMjhiYzMz
ZjdiMThhOGFiZjI1ODZjZDViYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTI4Miw2ICsy
ODIsNyBAQCBwdWJsaWM6CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlUGFnZVJ1bGUoUGFzc093
blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gcGFnZVNlbGVjdG9yKTsKICAgICBTdHlsZVJ1bGVCYXNl
KiBjcmVhdGVSZWdpb25SdWxlKENTU1NlbGVjdG9yVmVjdG9yKiByZWdpb25TZWxlY3RvciwgUnVs
ZUxpc3QqIHJ1bGVzKTsKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVNYXJnaW5BdFJ1bGUoQ1NT
U2VsZWN0b3I6Ok1hcmdpbkJveFR5cGUpOworICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZUhvc3RS
dWxlKFJ1bGVMaXN0KiBydWxlcyk7CiAgICAgdm9pZCBzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdp
bkJveCgpOwogICAgIHZvaWQgZW5kRGVjbGFyYXRpb25zRm9yTWFyZ2luQm94KCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAppbmRleCA0NjliZGI2MzBjMWE1
YzVkYmE5OTNmZDFhZDU5ZWQwNzQ0OWE1NWJlLi4wNzllYzMzNjI0OTVjMDc5NzliNDc1YWZkZTc3
NjAyMzg0Yzk5OTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlT
b3VyY2VEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0
YS5oCkBAIC05NCw3ICs5NCw4IEBAIHN0cnVjdCBDU1NSdWxlU291cmNlRGF0YSA6IHB1YmxpYyBS
ZWZDb3VudGVkPENTU1J1bGVTb3VyY2VEYXRhPiB7CiAgICAgICAgIEZPTlRfRkFDRV9SVUxFLAog
ICAgICAgICBQQUdFX1JVTEUsCiAgICAgICAgIEtFWUZSQU1FU19SVUxFLAotICAgICAgICBSRUdJ
T05fUlVMRQorICAgICAgICBSRUdJT05fUlVMRSwKKyAgICAgICAgSE9TVF9SVUxFCiAgICAgfTsK
IAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjcmVhdGUoVHlwZSB0
eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGNmMjA2ODdjODI4ZDIw
N2M1ODJkNzk5YTc0NWM2MjkxYTE1OWZlOTkuLjg3YjM4YTVhYmExZTI0NzI3NzgyN2QzM2QyMjc4
MjU4OGQ2NWJhYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTYwLDYg
KzYwLDcgQEAKICNpbmNsdWRlICJDb3VudGVyLmgiCiAjaW5jbHVkZSAiQ291bnRlckNvbnRlbnQu
aCIKICNpbmNsdWRlICJDdXJzb3JMaXN0LmgiCisjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgog
I2luY2x1ZGUgIkZvbnRGZWF0dXJlVmFsdWUuaCIKICNpbmNsdWRlICJGb250VmFsdWUuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgpAQCAtMjE5LDYgKzIyMCw4IEBAIHB1YmxpYzoKICAgICBib29sIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2hhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW47IH0KICAgICBib29sIGlzSW5SZWdpb25SdWxlKCkgY29uc3QgeyByZXR1cm4g
bV9pc0luUmVnaW9uUnVsZTsgfQogCisgICAgdm9pZCBpbmNyZWFzZVNwZWNpZmljaXR5KHVuc2ln
bmVkIHZhbHVlKSB7IG1fc3BlY2lmaWNpdHkgKz0gdmFsdWU7IH0KKwogICAgIC8vIFRyeSB0byBi
YWxhbmNlIGJldHdlZW4gbWVtb3J5IHVzYWdlICh0aGVyZSBjYW4gYmUgbG90cyBvZiBSdWxlRGF0
YSBvYmplY3RzKSBhbmQgZ29vZCBmaWx0ZXJpbmcgcGVyZm9ybWFuY2UuCiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQgPSA0OwogICAgIGNvbnN0IHVuc2ln
bmVkKiBkZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkgY29uc3QgeyByZXR1cm4g
bV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzOyB9CkBAIC0yNjEsOCArMjY0LDgg
QEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVu
dHMqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGVSZXNvbHZlciogPSAwLCBjb25z
dCBDb250YWluZXJOb2RlKiA9IDApOwogCi0gICAgdm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxl
KiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1Nl
bGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOwotICAgIHZvaWQgYWRkUnVsZShT
dHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBib29sIGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1
bGUgPSBmYWxzZSk7CisgICAgdm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiwgYm9vbCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29s
IGlzSW5SZWdpb25SdWxlID0gZmFsc2UsIGJvb2wgaXNIb3N0UnVsZSA9IGZhbHNlKTsKKyAgICB2
b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgYm9vbCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29s
IGlzSW5SZWdpb25SdWxlID0gZmFsc2UsIGJvb2wgaXNIb3N0UnVsZSA9IGZhbHNlKTsKICAgICB2
b2lkIGFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UqKTsKICAgICB2b2lkIGFkZFRvUnVsZVNldChB
dG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiwgY29uc3QgUnVsZURhdGEmKTsKICAg
ICB2b2lkIGFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiwgYm9vbCBoYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luKTsKQEAgLTU3OSw2ICs1ODIsMjggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJl
ZlAKIH0KIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFk
ZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3QqIGhvc3RSdWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4sIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoreworICAgIGlmICghc2NvcGUg
fHwgIXNjb3BlLT5pc0luU2hhZG93VHJlZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTaGFk
b3dSb290KiBzaGFkb3dSb290ID0gc2NvcGUtPnNoYWRvd1Jvb3QoKTsKKyAgICBpZiAoIXNoYWRv
d1Jvb3QgfHwgIXNoYWRvd1Jvb3QtPmhvc3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHNoYWRv
d1Jvb3QtPm93bmVyKCktPmNsZWFySGFzTWF0Y2hlZEhvc3RSdWxlKCk7CisKKyAgICBTY29wZWRS
dWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9hdEhvc3RSdWxlcy5hZGQoc2hhZG93
Um9vdCwgbnVsbHB0cik7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworCisgICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzID0gaG9zdFJ1bGUt
PmNoaWxkUnVsZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRSdWxlcy5z
aXplKCk7ICsraSkgeworICAgICAgICBTdHlsZVJ1bGVCYXNlKiBob3N0U3R5bGluZ1J1bGUgPSBj
aGlsZFJ1bGVzW2ldLmdldCgpOworICAgICAgICBpZiAoaG9zdFN0eWxpbmdSdWxlLT5pc1N0eWxl
UnVsZSgpKQorICAgICAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmFkZFN0eWxl
UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihob3N0U3R5bGluZ1J1bGUpLCBoYXNEb2N1bWVu
dFNlY3VyaXR5T3JpZ2luLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7CisgICAgfQorfQorCiB2b2lkIFN0
eWxlUmVzb2x2ZXI6OnNldHVwU2NvcGVTdGFjayhjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQp
CiB7CiAgICAgLy8gVGhlIHNjb3BpbmcgZWxlbWVudCBzdGFjayBzaG91bGRuJ3QgYmUgdXNlZCBp
ZiA8c3R5bGUgc2NvcGVkPiBpc24ndCB1c2VkIGFueXdoZXJlLgpAQCAtOTk5LDYgKzEwMjQsNzIg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0
JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHQKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKFNUWUxF
X1NDT1BFRCkKK2lubGluZSBSdWxlU2V0KiBTdHlsZVJlc29sdmVyOjphdEhvc3RSdWxlU2V0Rm9y
U2NvcGUoY29uc3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKK3sKKyAgICBTY29wZWRSdWxlU2V0
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYXRIb3N0UnVsZXMuZmluZChzaGFkb3dSb290KTsK
KyAgICByZXR1cm4gaXQgIT0gbV9hdEhvc3RSdWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkg
OiAwOyAKK30KKyNlbmRpZgorCitib29sIFN0eWxlUmVzb2x2ZXI6Om1hdGNoZXNIb3N0UnVsZXMo
KQoreworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgaWYgKG1fYXRIb3N0UnVsZXMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFbGVtZW50U2hhZG93KiBzaGFk
b3cgPSBtX2VsZW1lbnQtPnNoYWRvdygpOworICAgIGlmICghc2hhZG93KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKHNoYWRvdy0+aGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlKCkp
CisgICAgICAgIHJldHVybiBzaGFkb3ctPmhhc01hdGNoZWRIb3N0UnVsZSgpOworCisgICAgZm9y
IChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsg
c2hhZG93Um9vdDsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7
CisgICAgICAgIGlmIChhdEhvc3RSdWxlU2V0Rm9yU2NvcGUoc2hhZG93Um9vdCkpIHsKKyAgICAg
ICAgICAgIHNoYWRvdy0+c2V0SGFzTWF0Y2hlZEhvc3RSdWxlKHRydWUpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFk
b3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHNoYWRv
dy0+c2V0SGFzTWF0Y2hlZEhvc3RSdWxlKGZhbHNlKTsKKyNlbmRpZgorICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQoreworI2lmIEVOQUJMRShTVFlMRV9TQ09Q
RUQpCisgICAgaWYgKG1fYXRIb3N0UnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBtX2VsZW1lbnQtPnNoYWRvdygpOworICAgIGlm
ICghc2hhZG93KQorICAgICAgICByZXR1cm47CisgICAgLy8gSWYgQWxyZWFkeSBrbm93IHdoZXRo
ZXIgdGhlcmUgZXhpc3QgYW55IG1hdGNoZWQgaG9zdCBydWxlcyBvciBub3QsIHNlZS4KKyAgICBp
ZiAoc2hhZG93LT5oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUoKSAmJiAhc2hhZG93LT5oYXNN
YXRjaGVkSG9zdFJ1bGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFJ1bGVTZXQq
LCAxNj4gbWF0Y2hlZFJ1bGVzOyAKKyAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBz
aGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dSb290OyBzaGFkb3dSb290ID0gc2hh
ZG93Um9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsgCisgICAgICAgIGlmIChSdWxlU2V0KiBydWxl
U2V0ID0gYXRIb3N0UnVsZVNldEZvclNjb3BlKHNoYWRvd1Jvb3QpKQorICAgICAgICAgICAgbWF0
Y2hlZFJ1bGVzLmFwcGVuZChydWxlU2V0KTsKKyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNT
aGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlm
IChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNYXRjaE9w
dGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgb3B0aW9ucy5zY29wZSA9IG1f
ZWxlbWVudDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4g
MDsgLS1pKQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaGVkUnVsZXMuYXQoaS0x
KSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhv
clJ1bGUsIG9wdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBV
TlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOworI2VuZGlmCit9CisKIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKQogewogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CkBAIC0xMDEzLDcg
KzExMDQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1
bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcwogICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yUmVnaW9uKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRo
b3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKIAogICAgIG1h
dGNoU2NvcGVkQXV0aG9yUnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0KKyAgICBt
YXRjaEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBzb3J0QW5kVHJh
bnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKIH0KIApAQCAtMTU4MCw2ICsxNjcxLDExIEBAIFJl
bmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgLy8gQ2Fu
J3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5LgogICAgIGlmIChtYXRjaGVzUnVsZVNl
dChtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwor
CisgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgQGhvc3QgQC1ydWxlcyBhcHBseS4KKyAgICBpZiAobWF0
Y2hlc0hvc3RSdWxlcygpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIC8vIFRyYWNraW5nIGNo
aWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBn
ZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCiAgICAgaWYgKHBhcmVudFN0
eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTI2NDQsOSArMjc0MCwxNCBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJp
bmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsIGNvbnN0IFJ1bGVEYQogICAgIHJ1bGVzLT5h
cHBlbmQocnVsZURhdGEpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoU3R5bGVSdWxlKiBy
dWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQordm9p
ZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRl
eCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1Nl
bGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSwgYm9vbCBpc0hvc3RSdWxlKQogewogICAgIFJ1bGVE
YXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIG1fcnVsZUNvdW50KyssIGhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBpblJlZ2lvblJ1bGUp
OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBhdGhvc3RSdWxlQmFzZVNwZWNpZmljaXR5ID0g
MHgxMDAwMDA7CisKKyAgICBpZiAoaXNIb3N0UnVsZSkKKyAgICAgICAgcnVsZURhdGEuaW5jcmVh
c2VTcGVjaWZpY2l0eShhdGhvc3RSdWxlQmFzZVNwZWNpZmljaXR5KTsKKwogICAgIGNvbGxlY3RG
ZWF0dXJlc0Zyb21SdWxlRGF0YShtX2ZlYXR1cmVzLCBydWxlRGF0YSk7CiAKICAgICBDU1NTZWxl
Y3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5zZWxlY3RvcigpOwpAQCAtMjc4NCwxNSArMjg4NSwx
OSBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyog
c2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdQogICAgICAgICAgICAgYWRkUmVnaW9uUnVsZShz
dGF0aWNfY2FzdDxTdHlsZVJ1bGVSZWdpb24qPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbik7CiAgICAgICAgIH0KICNlbmRpZgorI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAg
ICAgIGVsc2UgaWYgKHJ1bGUtPmlzSG9zdFJ1bGUoKSkKKyAgICAgICAgICAgIHJlc29sdmVyLT5h
ZGRIb3N0UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4ocnVsZSksIGhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4sIHNjb3BlKTsKKyNlbmRpZgogICAgIH0KICAgICBpZiAobV9hdXRvU2hy
aW5rVG9GaXRFbmFibGVkKQogICAgICAgICBzaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIFJ1bGVT
ZXQ6OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVs
ZSkKK3ZvaWQgUnVsZVNldDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSogcnVsZSwgYm9vbCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29s
IGlzSW5SZWdpb25SdWxlLCBib29sIGlzSG9zdFJ1bGUpCiB7CiAgICAgZm9yIChzaXplX3Qgc2Vs
ZWN0b3JJbmRleCA9IDA7IHNlbGVjdG9ySW5kZXggIT0gbm90Rm91bmQ7IHNlbGVjdG9ySW5kZXgg
PSBydWxlLT5zZWxlY3Rvckxpc3QoKS5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJ
bmRleCkpCi0gICAgICAgIGFkZFJ1bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGlzSW5SZWdpb25SdWxlKTsK
KyAgICAgICAgYWRkUnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaXNJblJlZ2lvblJ1bGUsIGlzSG9zdFJ1
bGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1bGVT
ZXQ6OkF0b21SdWxlTWFwJiBtYXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCA1
ZmI4NThjZmJiZjAwYzEwNzRjZjgyM2ZiYjJmZDIwNmJhMzJiMzc2Li4xZTIyNWE0MTFjYWFjMjRi
Yjc3ZGYyYTdiMDUzYTY3MDgyZWE3ZDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgK
QEAgLTcxLDYgKzcxLDcgQEAgY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xhc3MgUnVsZURhdGE7CiBj
bGFzcyBSdWxlU2V0OwogY2xhc3MgU2V0dGluZ3M7CitjbGFzcyBTaGFkb3dSb290OwogY2xhc3Mg
U3RhdGljQ1NTUnVsZUxpc3Q7CiBjbGFzcyBTdHlsZUJ1aWxkZXI7CiBjbGFzcyBTdHlsZUltYWdl
OwpAQCAtODEsNiArODIsNyBAQCBjbGFzcyBTdHlsZVJ1bGU7CiBjbGFzcyBTdHlsZVJ1bGVLZXlm
cmFtZXM7CiBjbGFzcyBTdHlsZVJ1bGVQYWdlOwogY2xhc3MgU3R5bGVSdWxlUmVnaW9uOworY2xh
c3MgU3R5bGVSdWxlSG9zdDsKIGNsYXNzIFN0eWxlU2hhZGVyOwogY2xhc3MgU3R5bGVTaGVldDsK
IGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKQEAgLTEzNSw2ICsxMzcsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwb3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIHB1c2hQYXJlbnRT
aGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKICAgICB2b2lkIHBvcFBhcmVudFNoYWRvd1Jv
b3QoY29uc3QgU2hhZG93Um9vdCopOworICAgIHZvaWQgYWRkSG9zdFJ1bGUoU3R5bGVSdWxlSG9z
dCosIGJvb2wsIGNvbnN0IENvbnRhaW5lck5vZGUqKTsKIAogICAgIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
ID0gMCwgU3R5bGVTaGFyaW5nQmVoYXZpb3IgPSBBbGxvd1N0eWxlU2hhcmluZywKICAgICAgICAg
UnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBSZW5kZXJSZWdpb24qIHJlZ2lv
bkZvclN0eWxpbmcgPSAwKTsKQEAgLTE3MSw2ICsxNzQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y29sbGVjdEZlYXR1cmVzKCk7CiAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7
CiAgICAgYm9vbCBtYXRjaGVzUnVsZVNldChSdWxlU2V0Kik7CisgICAgYm9vbCBtYXRjaGVzSG9z
dFJ1bGVzKCk7CiAgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVu
c2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKICAgICBTdHlsZWRFbGVtZW50KiBmaW5k
U2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKICAg
ICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KikgY29uc3Q7CkBA
IC0zNTgsOSArMzYyLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKE1h
dGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFVzZXJS
dWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0
Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
OworICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBpbnQmIGZp
cnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwog
ICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCosIGludCYgZmly
c3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAg
ICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRh
PiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hP
cHRpb25zJik7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckhvc3QoUnVsZVNldCos
IGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRp
b25zJik7CiAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25z
dDsKICAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsKICAgICB2b2lkIHNvcnRBbmRUcmFuc2Zl
ck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYpOwpAQCAtNTI0LDExICs1MzAsMTMgQEAgcHJpdmF0
ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgQ29udGFpbmVyTm9kZSosIE93blB0cjxSdWxl
U2V0PiA+IFNjb3BlZFJ1bGVTZXRNYXA7CiAKICAgICBSdWxlU2V0KiBydWxlU2V0Rm9yU2NvcGUo
Y29uc3QgQ29udGFpbmVyTm9kZSopIGNvbnN0OworICAgIFJ1bGVTZXQqIGF0SG9zdFJ1bGVTZXRG
b3JTY29wZShjb25zdCBTaGFkb3dSb290Kik7CiAKICAgICB2b2lkIHNldHVwU2NvcGVTdGFjayhj
b25zdCBDb250YWluZXJOb2RlKik7CiAgICAgYm9vbCBzY29wZVN0YWNrSXNDb25zaXN0ZW50KGNv
bnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkgY29uc3QgeyByZXR1cm4gcGFyZW50ICYmIHBhcmVu
dCA9PSBtX3Njb3BlU3RhY2tQYXJlbnQ7IH0KIAogICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9zY29w
ZWRBdXRob3JTdHlsZXM7CisgICAgU2NvcGVkUnVsZVNldE1hcCBtX2F0SG9zdFJ1bGVzOwogICAg
IAogICAgIHN0cnVjdCBTY29wZVN0YWNrRnJhbWUgewogICAgICAgICBTY29wZVN0YWNrRnJhbWUo
KSA6IG1fc2NvcGUoMCksIG1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleCgwKSwgbV9ydWxlU2V0KDAp
IHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAppbmRleCA1ZWNlMWI0YTIxNDFlY2JlMGJlYmYy
MmQ5ZThlZDc2YWQ4NTQ3MGYzLi4xODA2ODc4YzMyN2E4NjUzY2FiOGQwZjBkZDY5NTM2YTA0MWY3
N2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcApAQCAtNzgsNiArNzgsOSBAQCB2b2lkIFN0
eWxlUnVsZUJhc2U6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9i
amVjdEluZm8pIGNvbnN0CiAgICAgY2FzZSBLZXlmcmFtZXM6CiAgICAgICAgIHN0YXRpY19jYXN0
PGNvbnN0IFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5
VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEhvc3Q6
CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZUJsb2NrKj4odGhpcyktPnJlcG9y
dERlc2NlbmRhbnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZvKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgVW5rbm93bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlmcmFt
ZToKQEAgLTExNiw2ICsxMTksOSBAQCB2b2lkIFN0eWxlUnVsZUJhc2U6OmRlc3Ryb3koKQogICAg
IGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5
ZnJhbWVzKj4odGhpcyk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEhvc3Q6CisgICAgICAg
IGRlbGV0ZSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4odGhpcyk7CisgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJh
bWU6CkBAIC0xNDksNiArMTU1LDggQEAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBTdHlsZVJ1
bGVCYXNlOjpjb3B5KCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBLZXlmcmFt
ZXM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMq
Pih0aGlzKS0+Y29weSgpOworICAgIGNhc2UgSG9zdDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFN0eWxlUnVsZUhvc3QqPih0aGlzKS0+Y29weSgpOwogICAgIGNhc2UgVW5rbm93
bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlmcmFtZToKQEAgLTE5MCw2ICsxOTgs
NyBAQCBQYXNzUmVmUHRyPENTU1J1bGU+IFN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBl
cihDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldAogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAg
ICBydWxlID0gV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6Y3JlYXRlKHN0YXRpY19jYXN0PFN0eWxl
UnVsZUtleWZyYW1lcyo+KHNlbGYpLCBwYXJlbnRTaGVldCk7CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSG9zdDoKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNh
c2UgS2V5ZnJhbWU6CkBAIC0zODAsNCArMzg5LDE0IEBAIHZvaWQgU3R5bGVSdWxlUmVnaW9uOjpy
ZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0
CiAgICAgaW5mby5hZGRNZW1iZXIobV9zZWxlY3Rvckxpc3QpOwogfQogCitTdHlsZVJ1bGVIb3N0
OjpTdHlsZVJ1bGVIb3N0KFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxl
cykKKyAgICA6IFN0eWxlUnVsZUJsb2NrKEhvc3QsIGFkb3B0UnVsZXMpCit7Cit9CisKK1N0eWxl
UnVsZUhvc3Q6OlN0eWxlUnVsZUhvc3QoY29uc3QgU3R5bGVSdWxlSG9zdCYgbykKKyAgICA6IFN0
eWxlUnVsZUJsb2NrKG8pCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJ1bGUuaAppbmRleCBlMTVmMzJlNDAyYWFmMjA4ZDNjYzBmY2NkMzU4NDc3YjIzMDM1NjM0
Li5kM2Y3OGZkMjAwMzk0N2EzODgyMmQwYzJlYTRjZjU3Nzk2OWZiYjE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUnVsZS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgUGFnZSwKICAgICAg
ICAgS2V5ZnJhbWVzLAogICAgICAgICBLZXlmcmFtZSwgLy8gTm90IHVzZWQuIFRoZXNlIGFyZSBp
bnRlcm5hbGx5IG5vbi1ydWxlIFN0eWxlS2V5ZnJhbWUgb2JqZWN0cy4KKyAgICAgICAgSG9zdCwK
ICAgICAgICAgUmVnaW9uID0gMTYKICAgICB9OwogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KQEAgLTU4LDYgKzU5LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgaXNTdHlsZVJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gU3R5bGU7
IH0KICAgICBib29sIGlzUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBSZWdp
b247IH0KICAgICBib29sIGlzSW1wb3J0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBJ
bXBvcnQ7IH0KKyAgICBib29sIGlzSG9zdFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0g
SG9zdDsgfQogCiAgICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBjb3B5KCkgY29uc3Q7CiAK
QEAgLTIyMyw2ICsyMjUsMjAgQEAgcHJpdmF0ZToKICAgICBDU1NTZWxlY3Rvckxpc3QgbV9zZWxl
Y3Rvckxpc3Q7CiB9OwogCitjbGFzcyBTdHlsZVJ1bGVIb3N0IDogcHVibGljIFN0eWxlUnVsZUJs
b2NrIHsKKyBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVSdWxlSG9zdD4gY3Jl
YXRlKFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVSdWxlSG9zdChhZG9wdFJ1bGVzKSk7Cisg
ICAgfQorCisgICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVIb3N0PiBjb3B5KCkgY29uc3QgeyByZXR1
cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZUhvc3QoKnRoaXMpKTsgfQorCisgcHJpdmF0ZToKKyAg
ICBTdHlsZVJ1bGVIb3N0KFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxl
cyk7CisgICAgU3R5bGVSdWxlSG9zdChjb25zdCBTdHlsZVJ1bGVIb3N0Jik7Cit9OworIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gU3R5bGVSdWxlX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKaW5kZXggMDQ4MjczYmVjMTc4M2RiMjUyNzdi
MjJlMmVmNDNkYzY4OTYxN2FkZC4uNDU5M2Y2N2VmODk3YzY4NjgyNjQxMzdhYmQyYTk1OGQ4NmZm
ZDVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKQEAgLTQz
Myw2ICs0MzMsMTAgQEAgc3RhdGljIGJvb2wgY2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVk
U3VicmVzb3VyY2VzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGUKICAgICAgICAgICAgIGlmIChj
aGlsZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoc3RhdGljX2Nhc3Q8Y29u
c3QgU3R5bGVSdWxlUmVnaW9uKj4ocnVsZSktPmNoaWxkUnVsZXMoKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdHlsZVJ1
bGVCYXNlOjpIb3N0OgorICAgICAgICAgICAgaWYgKGNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5j
ZWxlZFN1YnJlc291cmNlcyhzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVIb3N0Kj4ocnVsZSkt
PmNoaWxkUnVsZXMoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpJbXBvcnQ6CiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpQYWdl
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCmluZGV4IGFlYjViNWI0NzViMjE5YmM1
N2RjODVlZjJlN2I4MzJhZWU4ODkzZmMuLjllYTk4YjFiN2UzYjJhYzFhZGE5YzNkODg1OTZjZmZl
MmY4YTkyZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAKQEAgLTM5LDYgKzM5
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRWxlbWVudFNoYWRvdzo6RWxlbWVudFNoYWRv
dygpCisgICAgICAgIDogbV9oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUoZmFsc2UpCiB7CiB9
CiAKQEAgLTg5LDYgKzkwLDEwIEBAIHZvaWQgRWxlbWVudFNoYWRvdzo6YWRkU2hhZG93Um9vdChF
bGVtZW50KiBzaGFkb3dIb3N0LCBQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+IHNoCiAgICAgaWYgKHNo
YWRvd0hvc3QtPmF0dGFjaGVkKCkpCiAgICAgICAgIHNoYWRvd0hvc3QtPmxhenlSZWF0dGFjaCgp
OwogCisgICAgLy8gQXMgYSBuZXcgc2hhZG93IGRvbSBzdWJ0cmVlIG1pZ2h0IGhhdmUgQGhvc3Qg
QC1ydWxlcywgbmVlZCB0byBkaXNhYmxlCisgICAgLy8gaGFzTWF0Y2hlZEhvc3RSdWxlcyBjYWNo
ZS4KKyAgICBjbGVhckhhc01hdGNoZWRIb3N0UnVsZSgpOworCiAgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRQdXNoU2hhZG93Um9vdChzaGFkb3dIb3N0LCBzaGFkb3dSb290LmdldCgp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgKaW5kZXggZGRiNDM4MDZiZGUxNTM5
ZmM3YWRjMmI5ZDg2OTJjZTcyM2M4MzNmNi4uNTE1NjliNmE2YWI1NjZiZjRhOWJhNDUxM2I2NDBk
Mzg1ZDQ1Zjg2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCkBAIC03MSwxMSArNzEs
MTggQEAgcHVibGljOgogICAgIENvbnRlbnREaXN0cmlidXRvciYgZGlzdHJpYnV0b3IoKTsKICAg
ICBjb25zdCBDb250ZW50RGlzdHJpYnV0b3ImIGRpc3RyaWJ1dG9yKCkgY29uc3Q7CiAKKyAgICBi
b29sIGhhc01hdGNoZWRIb3N0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWF0Y2hlZEhvc3RS
dWxlOyB9CisgICAgYm9vbCBoYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUoKSBjb25zdCB7IHJl
dHVybiBtX2hhc01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZTsgfQorICAgIHZvaWQgY2xlYXJIYXNN
YXRjaGVkSG9zdFJ1bGUoKSB7IG1faGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlID0gZmFsc2U7
IH0KKyAgICB2b2lkIHNldEhhc01hdGNoZWRIb3N0UnVsZShib29sIGhhc1J1bGUpIHsgbV9oYXNN
YXRjaGVkSG9zdFJ1bGUgPSBoYXNSdWxlOyBtX2hhc01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZSA9
IHRydWU7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGludmFsaWRhdGVEaXN0cmlidXRpb24oRWxl
bWVudCogaG9zdCk7CiAKICAgICBEb3VibHlMaW5rZWRMaXN0PFNoYWRvd1Jvb3Q+IG1fc2hhZG93
Um9vdHM7CiAgICAgQ29udGVudERpc3RyaWJ1dG9yIG1fZGlzdHJpYnV0b3I7CisgICAgYm9vbCBt
X2hhc01hdGNoZWRIb3N0UnVsZTsKKyAgICBib29sIG1faGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxh
YmxlOwogfTsKIAogaW5saW5lIFNoYWRvd1Jvb3QqIEVsZW1lbnRTaGFkb3c6OnlvdW5nZXN0U2hh
ZG93Um9vdCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9v
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKaW5kZXggOWU5YWJjNDM4
Mzk4MjVmZGU3OWE5ODhjNDE1OTIwMTRkM2NhNmY1Yi4uMzk2MDRiOTE2NDA3MDRkMWY5ZThmYzk1
NzE3MjgyYmY4NzhjMTM0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jv
b3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcApAQCAtNTUsNiAr
NTUsNyBAQCBTaGFkb3dSb290OjpTaGFkb3dSb290KERvY3VtZW50KiBkb2N1bWVudCkKICAgICAs
IG1fYXBwbHlBdXRob3JTdHlsZXMoZmFsc2UpCiAgICAgLCBtX3Jlc2V0U3R5bGVJbmhlcml0YW5j
ZShmYWxzZSkKICAgICAsIG1faW5zZXJ0aW9uUG9pbnRBc3NpZ25lZFRvKDApCisgICAgLCBtX251
bWJlck9mU2hhZG93RWxlbWVudENoaWxkcmVuKDApCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50KTsK
ICAgICAKQEAgLTIyMyw2ICsyMjQsNyBAQCB2b2lkIFNoYWRvd1Jvb3Q6OmNoaWxkcmVuQ2hhbmdl
ZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKgogewogICAg
IENvbnRhaW5lck5vZGU6OmNoaWxkcmVuQ2hhbmdlZChjaGFuZ2VkQnlQYXJzZXIsIGJlZm9yZUNo
YW5nZSwgYWZ0ZXJDaGFuZ2UsIGNoaWxkQ291bnREZWx0YSk7CiAgICAgb3duZXIoKS0+aW52YWxp
ZGF0ZURpc3RyaWJ1dGlvbigpOworICAgIG93bmVyKCktPmNsZWFySGFzTWF0Y2hlZEhvc3RSdWxl
KCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCmluZGV4IDZmNzAwOWQwOTFjNjk3OWRi
YmRkZWI1NjM2MjgzM2ZlNGNiZDY1OTMuLmQ1N2RlODIzODYyNjM2NzhhZmM3ZDljZTllZTI0YjNk
MDczMDlmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaApAQCAtODksNiArODksMTAgQEAgcHVi
bGljOgogICAgIEluc2VydGlvblBvaW50KiBhc3NpZ25lZFRvKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRBc3NpZ25lZFRvKEluc2VydGlvblBvaW50Kik7CiAKKyAgICB2b2lkIHJlZ2lzdGVyU2hhZG93
RWxlbWVudCgpIHsgKyttX251bWJlck9mU2hhZG93RWxlbWVudENoaWxkcmVuOyB9CisgICAgdm9p
ZCB1bnJlZ2lzdGVyU2hhZG93RWxlbWVudCgpIHsgLS1tX251bWJlck9mU2hhZG93RWxlbWVudENo
aWxkcmVuOyB9CisgICAgYm9vbCBoYXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpIGNvbnN0IHsgcmV0
dXJuIG1fbnVtYmVyT2ZTaGFkb3dFbGVtZW50Q2hpbGRyZW4gPiAwOyB9CisKICNpZm5kZWYgTkRF
QlVHCiAgICAgU2hhZG93Um9vdFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQog
I2VuZGlmCkBAIC0xMDgsNiArMTEyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlBdXRo
b3JTdHlsZXMgOiAxOwogICAgIGJvb2wgbV9yZXNldFN0eWxlSW5oZXJpdGFuY2UgOiAxOwogICAg
IEluc2VydGlvblBvaW50KiBtX2luc2VydGlvblBvaW50QXNzaWduZWRUbzsKKyAgICBzaXplX3Qg
bV9udW1iZXJPZlNoYWRvd0VsZW1lbnRDaGlsZHJlbjsKIAogI2lmbmRlZiBOREVCVUcKICAgICBT
aGFkb3dSb290VHlwZSBtX3R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9IVE1MU2hhZG93RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9I
VE1MU2hhZG93RWxlbWVudC5jcHAKaW5kZXggOTM4NDM5NjEyY2EyMWQyNjllNTc3OGE5NmIxNTk4
MGVmNzU0MmI5YS4uNWM1ZGJlOTRmZmU0NDZlNmZlMGI2M2Y2ZDBlN2ViNjNlNjQ5M2UxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmNwcApA
QCAtNDEsNiArNDEsNyBAQCBjbGFzcyBEb2N1bWVudDsKIAogaW5saW5lIEhUTUxTaGFkb3dFbGVt
ZW50OjpIVE1MU2hhZG93RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jdW1lbnQpCiAgICAgOiBJbnNlcnRpb25Qb2ludCh0YWdOYW1lLCBkb2N1bWVudCkK
KyAgICAsIG1fcmVnaXN0ZXJlZFdpdGhTaGFkb3dSb290KGZhbHNlKQogewogICAgIEFTU0VSVCho
YXNUYWdOYW1lKEhUTUxOYW1lczo6c2hhZG93VGFnKSk7CiB9CkBAIC02OCw0ICs2OSwzMSBAQCBi
b29sIEhUTUxTaGFkb3dFbGVtZW50Ojpkb2VzU2VsZWN0RnJvbUhvc3RDaGlsZHJlbigpIGNvbnN0
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1
ZXN0IEhUTUxTaGFkb3dFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSogaW5zZXJ0
aW9uUG9pbnQpCit7CisgICAgSW5zZXJ0aW9uUG9pbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Q
b2ludCk7CisKKyAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSAmJiBpc0FjdGl2
ZSgpKSB7CisgICAgICAgIGlmIChTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgpKSB7Cisg
ICAgICAgICAgICByb290LT5yZWdpc3RlclNoYWRvd0VsZW1lbnQoKTsKKyAgICAgICAgICAgIG1f
cmVnaXN0ZXJlZFdpdGhTaGFkb3dSb290ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBJbnNlcnRpb25Eb25lOworfQorCit2b2lkIEhUTUxTaGFkb3dFbGVtZW50OjpyZW1v
dmVkRnJvbShDb250YWluZXJOb2RlKiBpbnNlcnRpb25Qb2ludCkKK3sKKyAgICBpZiAoaW5zZXJ0
aW9uUG9pbnQtPmluRG9jdW1lbnQoKSAmJiBtX3JlZ2lzdGVyZWRXaXRoU2hhZG93Um9vdCkgewor
ICAgICAgICBTaGFkb3dSb290KiByb290ID0gc2hhZG93Um9vdCgpOworICAgICAgICBpZiAoIXJv
b3QpCisgICAgICAgICAgICByb290ID0gaW5zZXJ0aW9uUG9pbnQtPnNoYWRvd1Jvb3QoKTsKKyAg
ICAgICAgaWYgKHJvb3QpCisgICAgICAgICAgICByb290LT51bnJlZ2lzdGVyU2hhZG93RWxlbWVu
dCgpOworICAgICAgICBtX3JlZ2lzdGVyZWRXaXRoU2hhZG93Um9vdCA9IGZhbHNlOworICAgIH0K
KyAgICBJbnNlcnRpb25Qb2ludDo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9IVE1MU2hhZG93RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvSFRN
TFNoYWRvd0VsZW1lbnQuaAppbmRleCBhNGVjZGIzYWQ0NWZiOGVjNGU5YWE1MDAwYTAxZTNhZWQx
Y2QyMGRjLi4xMTlmYTlmOTVkZWY2Mjc0MTYyY2IxODg5NDlmZDQ3MWFhZGJmYjg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9IVE1MU2hhZG93RWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0hUTUxTaGFkb3dFbGVtZW50LmgKQEAgLTQ2LDgg
KzQ2LDE0IEBAIHB1YmxpYzoKICAgICBib29sIGlzU2VsZWN0VmFsaWQoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBkb2VzU2VsZWN0RnJvbUhvc3RDaGlsZHJlbigp
IGNvbnN0OwogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJbnNlcnRpb25Ob3RpZmljYXRpb25S
ZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlKikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUqKSBPVkVSUklERTsKKwogcHJpdmF0ZToK
ICAgICBIVE1MU2hhZG93RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
KworICAgIGJvb2wgbV9yZWdpc3RlcmVkV2l0aFNoYWRvd1Jvb3Q7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggZGM1ZmYxZTBiZTUwZGNiYzQ3YzU0MTQ5OWRmMTM3ODE0MjVl
NDliZS4uM2U5NWQ3NGNmOWI3MDMyZGU5NmJlZWI0NTcyYWUwMzYwOGI2NDU1MyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzIEBACisyMDEyLTA5LTIwICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xl
LmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0gTmVlZHMgQGhvc3QgcnVsZSBmb3IgU2hhZG93
RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg4NjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBmYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMuaHRtbDogQWRkZWQuCisK
IDIwMTItMDktMjAgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtXaW5dIFVwZGF0ZSB0ZXN0IGV4cGVjdGF0aW9uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
MWYzYjFjMjU1MTY5NTY3ODcyNWJkNjY1MTgxMzEzNDM4NjQ5YTE0Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDE1IEBACitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdDogcmdiKDI1NSwg
MCwgMCkKK2hvc3RBOiByZ2IoMjU1LCAwLCAwKQoraG9zdEI6IHJnYigwLCAwLCAyNTUpCitob3N0
OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAxMjgpCitob3N0OiByZ2IoMCwg
MCwgMjU1KQoraG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigxMjgsIDEyOCwgMTI4KQor
aG9zdDogcmdiKDI1NSwgMjU1LCAwKQoraG9zdDogcmdiKDI1NSwgMCwgMCkKK25lc3RlZEhvc3Q6
IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdDogcmdiKDI1NSwgMjU1
LCAwKQorSGVsbG8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9hdGhv
c3QtYXRydWxlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1
bGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Q0YjUxMWVlMDJmYTlkNzUxZTU3ZTE2OWIwMGE2ZDg3N2Q1
M2E2ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9hdGhv
c3QtYXRydWxlcy5odG1sCkBAIC0wLDAgKzEsMTkwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8c3R5bGU+CisjaG9zdCB7CisgIGNvbG9yOiBncmF5OworfQorPC9zdHlsZT4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9wb2x5ZmlsbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
PgorZnVuY3Rpb24gZHVtcENvbXB1dGVkU3R5bGUobm9kZSkKK3sKKyAgICBkZWJ1Zyhub2RlLmlk
ICsgIjogIiArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVs
bCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7Cit9CisKK2Z1bmN0aW9uIHByZXByb2Nlc3NG
b3JUZXN0KCkKK3sKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBh
cmVudCIpOworICAgIHBhcmVudC5pbm5lckhUTUwgPSAnPGRpdiBpZD0iaG9zdCI+PHNwYW4+SGVs
bG88L3NwYW4+PC9kaXY+JzsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZUNvbnRlbnRDYXNlKCkK
K3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jv
b3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBj
b2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21w
dXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlU2hhZG93Q2FzZSgpCit7
CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290
KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29s
b3I6IHJlZDsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgZHVtcENvbXB1dGVk
U3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0V2l0aFNlbGVjdG9yKCkKK3sKKyAg
ICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcmVudCIpOworICAgIHBh
cmVudC5pbm5lckhUTUwgPSAiPHN0eWxlIHNjb3BlZD4gLmhvc3QgeyBjb2xvcjogZ3JheSB9Ozwv
c3R5bGU+IgorICAgICAgICArICI8ZGl2IGlkPSdob3N0QScgY2xhc3M9J2hvc3QnPjxzcGFuPkhl
bGxvPC9zcGFuPjwvZGl2PiIKKyAgICAgICAgKyAiPHNwYW4gaWQ9J2hvc3RCJyBjbGFzcz0naG9z
dCc+PHNwYW4+V29ybGQ8L3NwYW4+PC9zcGFuPiI7CisKKyAgICB2YXIgaG9zdEEgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiaG9zdEEiKTsKKyAgICB2YXIgc2hhZG93QSA9IG5ldyBXZWJLaXRT
aGFkb3dSb290KGhvc3RBKTsKKyAgICB2YXIgc3R5bGUgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsg
Y29sb3I6IHJlZDsgfSBzcGFuIHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+IjsKKyAgICBzaGFk
b3dBLmlubmVySFRNTCA9IHN0eWxlICsgIjxzaGFkb3c+PC9zaGFkb3c+IjsKKworICAgIHZhciBo
b3N0QiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0QiIpOworICAgIHZhciBzaGFkb3dC
ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdEIpOworICAgIHNoYWRvd0IuaW5uZXJIVE1MID0g
c3R5bGUgKyAiPHNoYWRvdz48L3NoYWRvdz4iOworCisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9z
dEEpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3RCKTsKK30KKworZnVuY3Rpb24gdGVzdFBz
ZXVkb0hvc3RXaXRoU2NvcGVkKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZh
ciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93
ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8
ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxz
aGFkb3c+PC9zaGFkb3c+PGRpdj48c3R5bGUgc2NvcGVkPkBob3N0IHsgZGl2IHsgY29sb3I6IGJs
dWU7IH0gfTwvc3R5bGU+PC9kaXY+PC9kaXY+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0
KTsKK30KKworZnVuY3Rpb24gdGVzdFBzZXVkb0hvc3RXaXRoRmFsbGJhY2tTaGFkb3coKQorewor
ICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93
Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9v
dChob3N0KTsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRp
diB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgeW91
bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxjb250ZW50PjxzaGFkb3c+PC9zaGFkb3c+PC9jb250
ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RU
d29TaGFkb3dSb290c0Nhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFy
IGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RT
aGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFk
b3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJI
VE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRl
bnQ+PC9jb250ZW50PiI7CisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5A
aG9zdCB7IGRpdiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsK
KyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFR3b1NoYWRv
d1Jvb3RzQ3JlYXRpbmdEaWZmZXJlbnRPcmRlckNhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JU
ZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOwor
ICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2
YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB5b3Vu
Z2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7
IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhU
TUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVu
dD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rp
b24gdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50KCkKK3sKKyAg
ICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jv
b3QoaG9zdCk7CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9z
dCk7CisgICAgdmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsK
KyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKwor
ICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c2hhZG93Pjwvc2hhZG93PiI7CisgICAg
eW91bmdlclNoYWRvdy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgb2xk
ZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBncmVlbjsg
fSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRN
TCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50
PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlv
biB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvdygpCit7CisgICAgcHJlcHJv
Y2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJo
b3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3Qp
OworICAgIHZhciBvbGRlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAg
IHZhciB5b3VuZ2VyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFy
IHlvdW5nZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisKKyAgICB5b3Vu
Z2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHllbGxv
dzsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgeW91bmdlclNoYWRvdy5pbm5l
ckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+PGRp
dj5pbmVydDwvZGl2PiI7CisgICAgb2xkZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9z
dCB7IGRpdiB7IGNvbG9yOiBncmVlbjsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7Cisg
ICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjog
cmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0
eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0TmVzdGVkQ2FzZSgpCit7CisgICAgcHJlcHJv
Y2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJo
b3N0Iik7CisgICAgdmFyIG91dGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7
CisgICAgb3V0ZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9y
OiByZWQ7IH0gfTwvc3R5bGU+PGRpdiBpZD0ibmVzdGVkSG9zdCI+SW5uZXJTaGFkb3c8L2Rpdj4n
OworICAgIHZhciBuZXN0ZWQgPSBvdXRlclNoYWRvdy5nZXRFbGVtZW50QnlJZCgibmVzdGVkSG9z
dCIpOworICAgIHZhciBpbm5lclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KG5lc3RlZCk7
CisgICAgaW5uZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9y
OiBibHVlOyB9IH08L3N0eWxlPlNob3cgPHNoYWRvdz48L3NoYWRvdz4gaW4gb3V0ZXIuJzsKKyAg
ICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShuZXN0ZWQp
OworfQorCitmdW5jdGlvbiB0ZXN0SG9zdFZzU2NvcGVkU3R5bGUoKQoreworICAgIHByZXByb2Nl
c3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9z
dCIpOworICAgIGhvc3QuaW5uZXJIVE1MID0gIjxzdHlsZSBzY29wZWQ+I2hvc3QgeyBjb2xvcjog
eWVsbG93OyB9PC9zdHlsZT48c3Bhbj5IZWxsbzwvc3Bhbj4iOworICAgIHZhciBzaGFkb3cgPSBu
ZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHls
ZT5AaG9zdCB7ICNob3N0IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRl
bnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdEhv
c3RWc0lubGluZVN0eWxlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBo
b3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICBob3N0LnN0eWxlLmNv
bG9yID0gInllbGxvdyI7CisgICAgaG9zdC5pbm5lckhUTUwgPSAiPHNwYW4+SGVsbG88L3NwYW4+
IjsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hh
ZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0
eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOwor
fQorCitmdW5jdGlvbiBydW5UZXN0cygpCit7CisgICAgdGVzdFNpbXBsZUNvbnRlbnRDYXNlKCk7
CisgICAgdGVzdFNpbXBsZVNoYWRvd0Nhc2UoKTsKKyAgICB0ZXN0SG9zdFdpdGhTZWxlY3Rvcigp
OworICAgIHRlc3RQc2V1ZG9Ib3N0V2l0aFNjb3BlZCgpOworICAgIHRlc3RQc2V1ZG9Ib3N0V2l0
aEZhbGxiYWNrU2hhZG93KCk7CisgICAgdGVzdFR3b1NoYWRvd1Jvb3RzQ2FzZSgpOworICAgIHRl
c3RUd29TaGFkb3dSb290c0NyZWF0aW5nRGlmZmVyZW50T3JkZXJDYXNlKCk7CisgICAgdGVzdE11
bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50KCk7CisgICAgdGVzdE11bHRp
cGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3coKTsKKyAgICB0ZXN0TmVzdGVkQ2FzZSgpOwor
ICAgIHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpOworICAgIHRlc3RIb3N0VnNJbmxpbmVTdHlsZSgp
OworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCkiPgorICA8
ZGl2IGlkPSJwYXJlbnQiPgorICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166821</attachid>
            <date>2012-10-03 00:45:47 -0700</date>
            <delta_ts>2012-10-09 02:27:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88606-20121003164454.patch</filename>
            <type>text/plain</type>
            <size>35542</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3NjdiYTM5YzU0NmIwZjBkMmY2MDY4ZmIxZjFiNDIxNzc4MGVkM2U3Li45
ZDAwOWU0YzAyY2E0MjZiNzA1MDZjZGI0NTUwNmE4YzllYTQ0ZTczIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTAxIEBACisyMDEyLTEwLTAzICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xl
LmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0gTmVlZHMgQGhvc3QgcnVsZSBmb3IgU2hhZG93
RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg4NjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW1wbGVtZW50ZWQgQGhvc3QtQHJ1bGVzIGFjY29yZGluZyB0byB0aGUgc2hhZG93IGRvbSBz
cGVjOgorICAgICAgICBodHRwOi8vZHZjcy53My5vcmcvaGcvd2ViY29tcG9uZW50cy9yYXctZmls
ZS90aXAvc3BlYy9zaGFkb3cvaW5kZXguaHRtbCNob3N0LWF0LXJ1bGUKKyAgICAgICAgVGhlIGRl
c2lnbiBkb2MgaXM6CisgICAgICAgIGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2Qv
MVAyeW9yY2hGOGxjaTJzY2NyLW1WU1JmMmR0dmpLZWl1eVFXekNCMmJFQTgvZWRpdAorCisgICAg
ICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy5odG1sCisKKyAgICAgICAg
KiBjc3MvQ1NTR3JhbW1hci55OgorICAgICAgICBBZGRlZCBydWxlcyBmb3IgcGFyc2luZyBAaG9z
dCBALXJ1bGVzLgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpkZXRlY3RBdFRva2VuKToKKyAgICAgICAgQWRkZWQgYSBuZXcgdG9rZW4g
IkBob3N0Ii4KKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUpOgor
ICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgdG8gY3JlYXRlIGFuIEBob3N0IEAtcnVsZSwgd2hp
Y2ggaXMgaW52b2tlZCBmcm9tCisgICAgICAgIENTU0dyYW1tYXIueS4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgQWRkZWQgYSBkZWNsYXJh
dGlvbiBvZiB0aGUgYWJvdmUgbmV3IG1ldGhvZDogY3JlYXRlSG9zdFJ1bGUuCisgICAgICAgICog
Y3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oOgorICAgICAgICBBZGRlZCBIT1NUX1JVTEUgdG8g
ZW51bSBUeXBlLgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJ1bGVEYXRhOjppbmNyZWFzZVNwZWNpZmljaXR5KToKKyAgICAgICAgQWRkZWQgYSBu
ZXcgbWV0aG9kIHRvIGluY3JlYXNlIHNlbGVjdG9yJ3Mgc3BlY2lmaWNpdHkuIFRoaXMgbWV0aG9k
IGlzCisgICAgICAgIHVzZWQgdG8gbWFrZSBAaG9zdCBALXJ1bGVzJyBzcGVjaWZpY2l0eSBsYXJn
ZXIgdGhhbiBub3JtYWwgYXV0aG9yCisgICAgICAgIHJ1bGVzJyBzcGVjaWZpY2l0eS4KKyAgICAg
ICAgKFJ1bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFN0eWxlUnVsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSdWxlKToKKyAgICAgICAgQWRkZWQgb25l
IG1vcmUgYXJndW1lbnQgdG8gYWRkU3R5bGVSdWxlIGFuZCBhZGRSdWxlLiBUaGUgYXJndW1lbnQg
aXMKKyAgICAgICAgdXNlZCB0byBrbm93IHdoZXRoZXIgdGhlIGdpdmVuIHN0eWxlIHJ1bGUgY29t
ZXMgZnJvbSBAaG9zdCBALXJ1bGVzIG9yCisgICAgICAgIG5vdC4gSWYgdGhlIHJ1bGUgY29tZXMg
ZnJvbSBAc2hvdCBALXJ1bGVzLCB1c2UgaW5jcmVhc2VTcGVjaWZpY2l0eSBhbmQKKyAgICAgICAg
bWFrZSB0aGUgcnVsZSBhcHBseSBhZnRlciBydWxlcyAobm90IEBob3N0IEAtcnVsZXMpIGFyZSBh
cHBsaWVkLgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQpOgor
ICAgICAgICBJZiBAaG9zdCBALXJ1bGVzIGFyZSBmb3VuZCBpbiB0aGUgZ2l2ZW4gc3R5bGVzaGVl
dCBjb250ZW50LCBpbnZva2UKKyAgICAgICAgU3R5bGVSZXNvbHZlcidzIGFkZEhvc3RSdWxlIHRv
IHJlZ2lzdGVyIHRoZSBAaG9zdCBALXJ1bGVzIHdpdGggdGhlCisgICAgICAgIHNoYWRvdyByb290
LCB3aGljaCBoYXMgdGhlIHN0eWxlc2hlZXQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjphZGRIb3N0UnVsZSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1ldGhvZCB0byByZWdpc3Rl
ciBAaG9zdCBALXJ1bGVzIHdpdGggc2hhZG93IHJvb3RzLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphdEhvc3RSdWxlU2V0Rm9yU2NvcGUpOgor
ICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgZm9yIGZpbmRpbmcgcnVsZXNldHMgZnJvbSB0aGUg
Z2l2ZW4gc2hhZG93IHJvb3QuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRj
aGVzSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgYW55
IEBob3N0IEAtcnVsZXMgd2lsbCBiZSBhcHBsaWVkIHRvCisgICAgICAgIHRoZSBnaXZlbiBlbGVt
ZW50IG9yIG5vdC4gVGhpcyBpcyBwcmVwYXJlZCBmb3Igc2hhcmVkIHN0eWxlcy4KKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcg
bWV0aG9kIHRvIGZpbmQgbWF0Y2hlZCBob3N0IHJ1bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZl
bi4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMpOgor
ICAgICAgICBNb2RpZmllZCB0byBpbnZva2UgbWF0Y2hIb3N0UnVsZXMuCisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSk6CisgICAgICAgIERpc2FibGUg
c2libGluZyBzdHlsZSBjYWNoZSBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBhIHNoYWRvdyBob3N0
IGFuZAorICAgICAgICBhbnkgQGhvc3QgQC1ydWxlcyBhcmUgYXBwbGllZCB0byB0aGUgZWxlbWVu
dC4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVSZXNvbHZl
cik6CisgICAgICAgICogY3NzL1N0eWxlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJ1bGVCYXNlOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1
bGVCYXNlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmNvcHkp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6Y3JlYXRlQ1NTT01XcmFwcGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUhvc3Q6OlN0eWxlUnVsZUhvc3QpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIEltcGxlbWVudGVkIGNsYXNzIFN0eWxlUnVsZUhvc3QuIFRo
ZSBjbGFzcyBpcyBhbG1vc3QgdGhlIHNhbWUgYXMKKyAgICAgICAgU3R5bGVSdWxlQmxvY2sgZXhj
ZXB0IHR5cGUuCisgICAgICAgICogY3NzL1N0eWxlUnVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSdWxlQmFzZTo6aXNIb3N0UnVsZSk6CisgICAgICAgIChTdHlsZVJ1bGVIb3N0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJ1bGVIb3N0Ojpjb3B5KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNz
cy9TdHlsZVNoZWV0Q29udGVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2hpbGRSdWxlc0hh
dmVGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKToKKyAgICAgICAgKiBkb20vRWxlbWVudFNo
YWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpFbGVtZW50U2hhZG93
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6OmFkZFNoYWRvd1Jvb3QpOgorICAg
ICAgICBTaW5jZSBhIG5ldyBzaGFkb3cgcm9vdCBpcyBhZGRlZCwgZGlzYWJsZSBAaG9zdCBALXJ1
bGVzIGNhY2hlLgorICAgICAgICAqIGRvbS9FbGVtZW50U2hhZG93Lmg6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50U2hhZG93OjpoYXNNYXRjaGVkSG9zdFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudFNoYWRvdzo6aGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6OmNsZWFySGFzTWF0Y2hlZEhvc3RSdWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6OnNldEhhc01hdGNoZWRIb3N0UnVsZSk6CisgICAg
ICAgIEFkZGVkIGZvdXIgbWV0aG9kcyBmb3IgQGhvc3QgQC1ydWxlcyBjYWNoZS4gVGhlIGNhY2hl
IGhhcyBpbmZvcm1hdGlvbgorICAgICAgICBhYm91dCB3aGV0aGVyIGFueSBAaG9zdCBALXJ1bGVz
IG1hdGNoIHRoZSBFbGVtZW50U2hhZG93J3MgaG9zdC4KKyAgICAgICAgVGhlIHJldHVybiB2YWx1
ZSBvZiBoYXNNYXRjaGVkSG9zdFJ1bGUgaXMgYXZhaWxhYmxlIG9ubHkgaWYKKyAgICAgICAgaGFz
TWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlIHJldHVybnMgdHJ1ZS4KKyAgICAgICAgKEVsZW1lbnRT
aGFkb3cpOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNoYWRvd1Jvb3Q6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIFdoZW4gY2hpbGRyZW5DaGFu
Z2VkIGlzIGludm9rZWQsIGRpc2FibGUgY2FjaGUgYWJvdXQgd2hldGhlciBhbnkgQGhvc3QKKyAg
ICAgICAgQC1ydWxlcyBtYXRjaCB0aGUgc2hhZG93IHJvb3QncyBob3N0LCBiZWNhdXNlIGFsbCBz
aGFkb3cgZWxlbWVudHMgaW4KKyAgICAgICAgdGhlIHNoYWRvdyBkb20gc3VidHJlZSBtaWdodCBi
ZSByZW1vdmVkIG9yIGEgbmV3IHNoYWRvdyBlbGVtZW50IG1pZ2h0CisgICAgICAgIGJlIGluc2Vy
dGVkIGludG8gdGhlIHN1YnRyZWUuCisKIDIwMTItMTAtMDIgIEtlbnQgVGFtdXJhICA8dGtlbnRA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtNYWNdW0Nocm9taXVtLU1hY10gSW1wbGVtZW50IExv
Y2FsZU1hYzo6ZGF0ZUZvcm1hdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YW1tYXIueSBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKaW5kZXggMmI0Mjc0YTli
MzJhMzVhMjk2Njg4ZjY1YjNiMzhhZjI0YmEzYjQwZC4uOGZhYTEzNDA3N2U1MTRhN2IzMDc4YjM5
YzkwYjljZGZhNGNkODQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1t
YXIueQorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CkBAIC0xMzIsNiArMTMy
LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY3NzeXllcnJvcih2b2lkKiwgY29uc3QgY2hhciopCiAl
dG9rZW4gUEFHRV9TWU0KICV0b2tlbiBNRURJQV9TWU0KICV0b2tlbiBGT05UX0ZBQ0VfU1lNCisl
dG9rZW4gSE9TVF9TWU0KICV0b2tlbiBDSEFSU0VUX1NZTQogJXRva2VuIE5BTUVTUEFDRV9TWU0K
ICV0b2tlbiBWQVJGVU5DVElPTgpAQCAtMjE5LDYgKzIyMCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50
IGNzc3l5ZXJyb3Iodm9pZCosIGNvbnN0IGNoYXIqKQogJXR5cGUgPHJ1bGU+IHBhZ2UKICV0eXBl
IDxydWxlPiBtYXJnaW5fYm94CiAldHlwZSA8cnVsZT4gZm9udF9mYWNlCisldHlwZSA8cnVsZT4g
aG9zdAogJXR5cGUgPHJ1bGU+IGtleWZyYW1lcwogJXR5cGUgPHJ1bGU+IGludmFsaWRfcnVsZQog
JXR5cGUgPHJ1bGU+IHNhdmVfYmxvY2sKQEAgLTQxOSw2ICs0MjEsNyBAQCB2YWxpZF9ydWxlOgog
ICB8IG5hbWVzcGFjZQogICB8IGltcG9ydAogICB8IHJlZ2lvbgorICB8IGhvc3QKICAgOwogCiBy
dWxlOgpAQCAtODQxLDYgKzg0NCwyMyBAQCBmb250X2ZhY2U6CiAgICAgfQogOwogCitiZWZvcmVf
aG9zdF9ydWxlOgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgcGFyc2VyLT5tYXJrUnVsZUhl
YWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpIT1NUX1JVTEUpOworICAgIH0KKyAgICA7CisK
K2hvc3Q6CisgICAgYmVmb3JlX2hvc3RfcnVsZSBIT1NUX1NZTSBhdF9ydWxlX2hlYWRlcl9lbmRf
bWF5YmVfc3BhY2UgCisgICAgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZSBibG9j
a19ydWxlX2xpc3Qgc2F2ZV9ibG9jayB7CisgICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVIb3N0
UnVsZSgkNyk7CisgICAgfQorICAgIHwgYmVmb3JlX2hvc3RfcnVsZSBIT1NUX1NZTSBhdF9ydWxl
X2hlYWRlcl9lbmRfbWF5YmVfc3BhY2UgJzsnIHsKKyAgICAgICAgJCQgPSAwOworICAgICAgICBw
YXJzZXItPnBvcFJ1bGVEYXRhKCk7CisgICAgfQorICAgIDsKKyAKIHJlZ2lvbl9zZWxlY3RvcjoK
ICAgICBzZWxlY3Rvcl9saXN0IHsKICAgICAgICAgaWYgKCQxKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuY3BwCmluZGV4IGJlODk2OTBmODhmNjliZDNjYTIyYmMzN2JiOTRkNjNiM2E5Yzc3MGUuLjYx
ZTQ1M2VmMGM2NDRjZDAwM2NlNDAyZGQ2YzQzMTQ5MWQ1YmZhZmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCkBAIC05MjYxLDYgKzkyNjEsMTEgQEAgaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpk
ZXRlY3RBdFRva2VuKGludCBsZW5ndGgsIGJvb2wgaGFzRXNjYXBlKQogICAgICAgICAgICAgbV90
b2tlbiA9IEZPTlRfRkFDRV9TWU07CiAgICAgICAgIHJldHVybjsKIAorICAgIGNhc2UgJ2gnOgor
ICAgICAgICBpZiAobGVuZ3RoID09IDUgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsg
MiwgIm9zdCIpKQorICAgICAgICAgICAgbV90b2tlbiA9IEhPU1RfU1lNOworICAgICAgICByZXR1
cm47CisKICAgICBjYXNlICdpJzoKICAgICAgICAgaWYgKGxlbmd0aCA9PSA3ICYmIGlzRXF1YWxU
b0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJtcG9ydCIpKSB7CiAgICAgICAgICAgICBtX3BhcnNp
bmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7CkBAIC0xMDA0OSw2ICsxMDA1NCwyMiBAQCBTdHlsZVJ1
bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZUZvbnRGYWNlUnVsZSgpCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAorU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVIb3N0UnVsZShSdWxlTGlz
dCogcnVsZXMpCit7CisgICAgbV9hbGxvd0ltcG9ydFJ1bGVzID0gbV9hbGxvd05hbWVzcGFjZURl
Y2xhcmF0aW9ucyA9IGZhbHNlOworICAgIFJlZlB0cjxTdHlsZVJ1bGVIb3N0PiBydWxlOworICAg
IGlmIChydWxlcykKKyAgICAgICAgcnVsZSA9IFN0eWxlUnVsZUhvc3Q6OmNyZWF0ZSgqcnVsZXMp
OworICAgIGVsc2UgeworICAgICAgICBSdWxlTGlzdCBlbXB0eVJ1bGVzOworICAgICAgICBydWxl
ID0gU3R5bGVSdWxlSG9zdDo6Y3JlYXRlKGVtcHR5UnVsZXMpOworICAgIH0KKyAgICBTdHlsZVJ1
bGVIb3N0KiByZXN1bHQgPSBydWxlLmdldCgpOworICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1
bGUucmVsZWFzZSgpKTsKKyAgICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVl
ZGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBDU1NQYXJzZXI6OmFkZE5hbWVz
cGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkp
CiB7CiAgICAgaWYgKCFtX3N0eWxlU2hlZXQgfHwgIW1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlv
bnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggZTMzMDkwZjgzMjZmYTY0YjNjMmQzYWViODNl
YjQ2YjM0ZDMwNmJkOS4uNDBhZjMzNWJkYzcwNWYyOGJjMzNmN2IxOGE4YWJmMjU4NmNkNWJjNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMjgyLDYgKzI4Miw3IEBAIHB1YmxpYzoKICAgICBT
dHlsZVJ1bGVCYXNlKiBjcmVhdGVQYWdlUnVsZShQYXNzT3duUHRyPENTU1BhcnNlclNlbGVjdG9y
PiBwYWdlU2VsZWN0b3IpOwogICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZVJlZ2lvblJ1bGUoQ1NT
U2VsZWN0b3JWZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBSdWxlTGlzdCogcnVsZXMpOwogICAgIFN0
eWxlUnVsZUJhc2UqIGNyZWF0ZU1hcmdpbkF0UnVsZShDU1NTZWxlY3Rvcjo6TWFyZ2luQm94VHlw
ZSk7CisgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlSG9zdFJ1bGUoUnVsZUxpc3QqIHJ1bGVzKTsK
ICAgICB2b2lkIHN0YXJ0RGVjbGFyYXRpb25zRm9yTWFyZ2luQm94KCk7CiAgICAgdm9pZCBlbmRE
ZWNsYXJhdGlvbnNGb3JNYXJnaW5Cb3goKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3Bl
cnR5U291cmNlRGF0YS5oCmluZGV4IDQ2OWJkYjYzMGMxYTVjNWRiYTk5M2ZkMWFkNTllZDA3NDQ5
YTU1YmUuLjA3OWVjMzM2MjQ5NWMwNzk3OWI0NzVhZmRlNzc2MDIzODRjOTk5NmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKQEAgLTk0LDcgKzk0LDggQEAg
c3RydWN0IENTU1J1bGVTb3VyY2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTUnVsZVNvdXJj
ZURhdGE+IHsKICAgICAgICAgRk9OVF9GQUNFX1JVTEUsCiAgICAgICAgIFBBR0VfUlVMRSwKICAg
ICAgICAgS0VZRlJBTUVTX1JVTEUsCi0gICAgICAgIFJFR0lPTl9SVUxFCisgICAgICAgIFJFR0lP
Tl9SVUxFLAorICAgICAgICBIT1NUX1JVTEUKICAgICB9OwogCiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IGNyZWF0ZShUeXBlIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKaW5kZXggNTRhNTNiZDMwN2U1NzBlYTQwMTNjZTE3OWNkZTYxMzVkNzNj
YTgyNi4uYzQ1ZGJlZjlhMTRlYWQxMTBhOTg0M2Y2MTZiZjAzYWU4MjcxMTBlMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgIkNv
dW50ZXJDb250ZW50LmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJFbGVtZW50U2hhZG93LmgiCiAj
aW5jbHVkZSAiRm9udEZlYXR1cmVWYWx1ZS5oIgogI2luY2x1ZGUgIkZvbnRWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCkBAIC0yMjMsNiArMjI0LDggQEAgcHVibGljOgogICAgIGJvb2wgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbjsgfQogICAgIGJvb2wgaXNJblJlZ2lvblJ1bGUoKSBjb25zdCB7IHJldHVybiBt
X2lzSW5SZWdpb25SdWxlOyB9CiAKKyAgICB2b2lkIGluY3JlYXNlU3BlY2lmaWNpdHkodW5zaWdu
ZWQgdmFsdWUpIHsgbV9zcGVjaWZpY2l0eSArPSB2YWx1ZTsgfQorCiAgICAgLy8gVHJ5IHRvIGJh
bGFuY2UgYmV0d2VlbiBtZW1vcnkgdXNhZ2UgKHRoZXJlIGNhbiBiZSBsb3RzIG9mIFJ1bGVEYXRh
IG9iamVjdHMpIGFuZCBnb29kIGZpbHRlcmluZyBwZXJmb3JtYW5jZS4KICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJDb3VudCA9IDQ7CiAgICAgY29uc3QgdW5zaWdu
ZWQqIGRlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoKSBjb25zdCB7IHJldHVybiBt
X2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXM7IH0KQEAgLTI2NSw4ICsyNjgsOCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50
cyosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBTdHlsZVJlc29sdmVyKiA9IDAsIGNvbnN0
IENvbnRhaW5lck5vZGUqID0gMCk7CiAKLSAgICB2b2lkIGFkZFN0eWxlUnVsZShTdHlsZVJ1bGUq
LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2Vs
ZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUgPSBmYWxzZSk7Ci0gICAgdm9pZCBhZGRSdWxlKFN0
eWxlUnVsZSosIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVs
ZSA9IGZhbHNlKTsKKyAgICB2b2lkIGFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqLCBib29sIGhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wg
aXNJblJlZ2lvblJ1bGUgPSBmYWxzZSwgYm9vbCBpc0hvc3RSdWxlID0gZmFsc2UpOworICAgIHZv
aWQgYWRkUnVsZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBib29sIGhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wg
aXNJblJlZ2lvblJ1bGUgPSBmYWxzZSwgYm9vbCBpc0hvc3RSdWxlID0gZmFsc2UpOwogICAgIHZv
aWQgYWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSopOwogICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0
b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwogICAg
IHZvaWQgYWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qLCBib29sIGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4pOwpAQCAtNTg2LDYgKzU4OSwyOCBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGVuZEF1dGhvclN0eWxlc2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVm
UAogfQogCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRk
SG9zdFJ1bGUoU3R5bGVSdWxlSG9zdCogaG9zdFJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAgaWYgKCFzY29wZSB8
fCAhc2NvcGUtPmlzSW5TaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNoYWRv
d1Jvb3QqIHNoYWRvd1Jvb3QgPSBzY29wZS0+c2hhZG93Um9vdCgpOworICAgIGlmICghc2hhZG93
Um9vdCB8fCAhc2hhZG93Um9vdC0+aG9zdCgpKQorICAgICAgICByZXR1cm47CisgICAgc2hhZG93
Um9vdC0+b3duZXIoKS0+Y2xlYXJIYXNNYXRjaGVkSG9zdFJ1bGUoKTsKKworICAgIFNjb3BlZFJ1
bGVTZXRNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2F0SG9zdFJ1bGVzLmFkZChzaGFkb3dS
b290LCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFk
ZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gUnVsZVNldDo6Y3JlYXRlKCk7CisKKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMgPSBob3N0UnVsZS0+
Y2hpbGRSdWxlcygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZFJ1bGVzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIFN0eWxlUnVsZUJhc2UqIGhvc3RTdHlsaW5nUnVsZSA9IGNo
aWxkUnVsZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChob3N0U3R5bGluZ1J1bGUtPmlzU3R5bGVS
dWxlKCkpCisgICAgICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+YWRkU3R5bGVS
dWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KGhvc3RTdHlsaW5nUnVsZSksIGhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4sIHRydWUsIGZhbHNlLCB0cnVlKTsKKyAgICB9Cit9CisKIHZvaWQgU3R5
bGVSZXNvbHZlcjo6c2V0dXBTY29wZVN0YWNrKGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkK
IHsKICAgICAvLyBUaGUgc2NvcGluZyBlbGVtZW50IHN0YWNrIHNob3VsZG4ndCBiZSB1c2VkIGlm
IDxzdHlsZSBzY29wZWQ+IGlzbid0IHVzZWQgYW55d2hlcmUuCkBAIC0xMDAzLDYgKzEwMjgsNzIg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0
JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHQKICNlbmRpZgogfQogCisjaWYgRU5BQkxFKFNUWUxF
X1NDT1BFRCkKK2lubGluZSBSdWxlU2V0KiBTdHlsZVJlc29sdmVyOjphdEhvc3RSdWxlU2V0Rm9y
U2NvcGUoY29uc3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKK3sKKyAgICBTY29wZWRSdWxlU2V0
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fYXRIb3N0UnVsZXMuZmluZChzaGFkb3dSb290KTsK
KyAgICByZXR1cm4gaXQgIT0gbV9hdEhvc3RSdWxlcy5lbmQoKSA/IGl0LT5zZWNvbmQuZ2V0KCkg
OiAwOyAKK30KKyNlbmRpZgorCitib29sIFN0eWxlUmVzb2x2ZXI6Om1hdGNoZXNIb3N0UnVsZXMo
KQoreworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgaWYgKG1fYXRIb3N0UnVsZXMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFbGVtZW50U2hhZG93KiBzaGFk
b3cgPSBtX2VsZW1lbnQtPnNoYWRvdygpOworICAgIGlmICghc2hhZG93KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKHNoYWRvdy0+aGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlKCkp
CisgICAgICAgIHJldHVybiBzaGFkb3ctPmhhc01hdGNoZWRIb3N0UnVsZSgpOworCisgICAgZm9y
IChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsg
c2hhZG93Um9vdDsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7
CisgICAgICAgIGlmIChhdEhvc3RSdWxlU2V0Rm9yU2NvcGUoc2hhZG93Um9vdCkpIHsKKyAgICAg
ICAgICAgIHNoYWRvdy0+c2V0SGFzTWF0Y2hlZEhvc3RSdWxlKHRydWUpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFk
b3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHNoYWRv
dy0+c2V0SGFzTWF0Y2hlZEhvc3RSdWxlKGZhbHNlKTsKKyNlbmRpZgorICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQoreworI2lmIEVOQUJMRShTVFlMRV9TQ09Q
RUQpCisgICAgaWYgKG1fYXRIb3N0UnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBtX2VsZW1lbnQtPnNoYWRvdygpOworICAgIGlm
ICghc2hhZG93KQorICAgICAgICByZXR1cm47CisgICAgLy8gSWYgQWxyZWFkeSBrbm93IHdoZXRo
ZXIgdGhlcmUgZXhpc3QgYW55IG1hdGNoZWQgaG9zdCBydWxlcyBvciBub3QsIHNlZS4KKyAgICBp
ZiAoc2hhZG93LT5oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUoKSAmJiAhc2hhZG93LT5oYXNN
YXRjaGVkSG9zdFJ1bGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFJ1bGVTZXQq
LCAxNj4gbWF0Y2hlZFJ1bGVzOyAKKyAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBz
aGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dSb290OyBzaGFkb3dSb290ID0gc2hh
ZG93Um9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsgCisgICAgICAgIGlmIChSdWxlU2V0KiBydWxl
U2V0ID0gYXRIb3N0UnVsZVNldEZvclNjb3BlKHNoYWRvd1Jvb3QpKQorICAgICAgICAgICAgbWF0
Y2hlZFJ1bGVzLmFwcGVuZChydWxlU2V0KTsKKyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNT
aGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlm
IChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNYXRjaE9w
dGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgb3B0aW9ucy5zY29wZSA9IG1f
ZWxlbWVudDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4g
MDsgLS1pKQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaGVkUnVsZXMuYXQoaS0x
KSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhv
clJ1bGUsIG9wdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBV
TlVTRURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOworI2VuZGlmCit9CisKIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKQogewogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CkBAIC0xMDE3LDcg
KzExMDgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1
bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcwogICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yUmVnaW9uKG1fYXV0aG9yU3R5bGUuZ2V0KCksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRo
b3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKIAogICAgIG1h
dGNoU2NvcGVkQXV0aG9yUnVsZXMocmVzdWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0KKyAgICBt
YXRjaEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBzb3J0QW5kVHJh
bnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKIH0KIApAQCAtMTU4NCw2ICsxNjc1LDExIEBAIFJl
bmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgLy8gQ2Fu
J3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5LgogICAgIGlmIChtYXRjaGVzUnVsZVNl
dChtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwor
CisgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgQGhvc3QgQC1ydWxlcyBhcHBseS4KKyAgICBpZiAobWF0
Y2hlc0hvc3RSdWxlcygpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIC8vIFRyYWNraW5nIGNo
aWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBn
ZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCiAgICAgaWYgKHBhcmVudFN0
eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTI2NDUsOSArMjc0MSwxNCBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJp
bmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsIGNvbnN0IFJ1bGVEYQogICAgIHJ1bGVzLT5h
cHBlbmQocnVsZURhdGEpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoU3R5bGVSdWxlKiBy
dWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQordm9p
ZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRl
eCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1Nl
bGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSwgYm9vbCBpc0hvc3RSdWxlKQogewogICAgIFJ1bGVE
YXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIG1fcnVsZUNvdW50KyssIGhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBpblJlZ2lvblJ1bGUp
OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBhdGhvc3RSdWxlQmFzZVNwZWNpZmljaXR5ID0g
MHgxMDAwMDA7CisKKyAgICBpZiAoaXNIb3N0UnVsZSkKKyAgICAgICAgcnVsZURhdGEuaW5jcmVh
c2VTcGVjaWZpY2l0eShhdGhvc3RSdWxlQmFzZVNwZWNpZmljaXR5KTsKKwogICAgIGNvbGxlY3RG
ZWF0dXJlc0Zyb21SdWxlRGF0YShtX2ZlYXR1cmVzLCBydWxlRGF0YSk7CiAKICAgICBDU1NTZWxl
Y3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5zZWxlY3RvcigpOwpAQCAtMjc4NSwxNSArMjg4Niwx
OSBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyog
c2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdQogICAgICAgICAgICAgYWRkUmVnaW9uUnVsZShz
dGF0aWNfY2FzdDxTdHlsZVJ1bGVSZWdpb24qPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbik7CiAgICAgICAgIH0KICNlbmRpZgorI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAg
ICAgIGVsc2UgaWYgKHJ1bGUtPmlzSG9zdFJ1bGUoKSkKKyAgICAgICAgICAgIHJlc29sdmVyLT5h
ZGRIb3N0UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4ocnVsZSksIGhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4sIHNjb3BlKTsKKyNlbmRpZgogICAgIH0KICAgICBpZiAobV9hdXRvU2hy
aW5rVG9GaXRFbmFibGVkKQogICAgICAgICBzaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIFJ1bGVT
ZXQ6OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVs
ZSkKK3ZvaWQgUnVsZVNldDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSogcnVsZSwgYm9vbCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29s
IGlzSW5SZWdpb25SdWxlLCBib29sIGlzSG9zdFJ1bGUpCiB7CiAgICAgZm9yIChzaXplX3Qgc2Vs
ZWN0b3JJbmRleCA9IDA7IHNlbGVjdG9ySW5kZXggIT0gbm90Rm91bmQ7IHNlbGVjdG9ySW5kZXgg
PSBydWxlLT5zZWxlY3Rvckxpc3QoKS5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJ
bmRleCkpCi0gICAgICAgIGFkZFJ1bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGlzSW5SZWdpb25SdWxlKTsK
KyAgICAgICAgYWRkUnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaXNJblJlZ2lvblJ1bGUsIGlzSG9zdFJ1
bGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1bGVT
ZXQ6OkF0b21SdWxlTWFwJiBtYXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCBm
MzJjNzEzYjgxYjA4ZTAwODgyNzU5YTk3MjFjYzI2MDc3YTFiMjBhLi5jYTQzODcyZjE0YTY2MDEw
MjU5MzJjODRiZjhmMWZkZmUxNGJlYzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgK
QEAgLTcxLDYgKzcxLDcgQEAgY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xhc3MgUnVsZURhdGE7CiBj
bGFzcyBSdWxlU2V0OwogY2xhc3MgU2V0dGluZ3M7CitjbGFzcyBTaGFkb3dSb290OwogY2xhc3Mg
U3RhdGljQ1NTUnVsZUxpc3Q7CiBjbGFzcyBTdHlsZUJ1aWxkZXI7CiBjbGFzcyBTdHlsZUltYWdl
OwpAQCAtODEsNiArODIsNyBAQCBjbGFzcyBTdHlsZVJ1bGU7CiBjbGFzcyBTdHlsZVJ1bGVLZXlm
cmFtZXM7CiBjbGFzcyBTdHlsZVJ1bGVQYWdlOwogY2xhc3MgU3R5bGVSdWxlUmVnaW9uOworY2xh
c3MgU3R5bGVSdWxlSG9zdDsKIGNsYXNzIFN0eWxlU2hhZGVyOwogY2xhc3MgU3R5bGVTaGVldDsK
IGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKQEAgLTEzNSw2ICsxMzcsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBwb3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIHB1c2hQYXJlbnRT
aGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKICAgICB2b2lkIHBvcFBhcmVudFNoYWRvd1Jv
b3QoY29uc3QgU2hhZG93Um9vdCopOworICAgIHZvaWQgYWRkSG9zdFJ1bGUoU3R5bGVSdWxlSG9z
dCosIGJvb2wsIGNvbnN0IENvbnRhaW5lck5vZGUqKTsKIAogICAgIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
ID0gMCwgU3R5bGVTaGFyaW5nQmVoYXZpb3IgPSBBbGxvd1N0eWxlU2hhcmluZywKICAgICAgICAg
UnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBSZW5kZXJSZWdpb24qIHJlZ2lv
bkZvclN0eWxpbmcgPSAwKTsKQEAgLTE3Miw2ICsxNzUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y29sbGVjdEZlYXR1cmVzKCk7CiAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7
CiAgICAgYm9vbCBtYXRjaGVzUnVsZVNldChSdWxlU2V0Kik7CisgICAgYm9vbCBtYXRjaGVzSG9z
dFJ1bGVzKCk7CiAgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVu
c2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKICAgICBTdHlsZWRFbGVtZW50KiBmaW5k
U2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKICAg
ICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KikgY29uc3Q7CkBA
IC0zNTcsOSArMzYxLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKE1h
dGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFVzZXJS
dWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0
Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
OworICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBpbnQmIGZp
cnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwog
ICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCosIGludCYgZmly
c3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAg
ICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRh
PiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hP
cHRpb25zJik7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckhvc3QoUnVsZVNldCos
IGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRp
b25zJik7CiAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25z
dDsKICAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsKICAgICB2b2lkIHNvcnRBbmRUcmFuc2Zl
ck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYpOwpAQCAtNTIzLDExICs1MjksMTMgQEAgcHJpdmF0
ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgQ29udGFpbmVyTm9kZSosIE93blB0cjxSdWxl
U2V0PiA+IFNjb3BlZFJ1bGVTZXRNYXA7CiAKICAgICBSdWxlU2V0KiBydWxlU2V0Rm9yU2NvcGUo
Y29uc3QgQ29udGFpbmVyTm9kZSopIGNvbnN0OworICAgIFJ1bGVTZXQqIGF0SG9zdFJ1bGVTZXRG
b3JTY29wZShjb25zdCBTaGFkb3dSb290Kik7CiAKICAgICB2b2lkIHNldHVwU2NvcGVTdGFjayhj
b25zdCBDb250YWluZXJOb2RlKik7CiAgICAgYm9vbCBzY29wZVN0YWNrSXNDb25zaXN0ZW50KGNv
bnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkgY29uc3QgeyByZXR1cm4gcGFyZW50ICYmIHBhcmVu
dCA9PSBtX3Njb3BlU3RhY2tQYXJlbnQ7IH0KIAogICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9zY29w
ZWRBdXRob3JTdHlsZXM7CisgICAgU2NvcGVkUnVsZVNldE1hcCBtX2F0SG9zdFJ1bGVzOwogICAg
IAogICAgIHN0cnVjdCBTY29wZVN0YWNrRnJhbWUgewogICAgICAgICBTY29wZVN0YWNrRnJhbWUo
KSA6IG1fc2NvcGUoMCksIG1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleCgwKSwgbV9ydWxlU2V0KDAp
IHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAppbmRleCA3M2IwYWYyNmNlNDJhYTQ1OTRkOWI3
NjE3OTZiMTlkNmE2YmI2NjVjLi5mZDVjMGMzMDJkM2RhMTMzOWEwOWY2NTQ0NTllMGNkNDEzMzE0
ZTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcApAQCAtNzksNiArNzksOSBAQCB2b2lkIFN0
eWxlUnVsZUJhc2U6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9i
amVjdEluZm8pIGNvbnN0CiAgICAgY2FzZSBLZXlmcmFtZXM6CiAgICAgICAgIHN0YXRpY19jYXN0
PGNvbnN0IFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5
VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEhvc3Q6
CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZUJsb2NrKj4odGhpcyktPnJlcG9y
dERlc2NlbmRhbnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZvKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgVW5rbm93bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlmcmFt
ZToKQEAgLTExNyw2ICsxMjAsOSBAQCB2b2lkIFN0eWxlUnVsZUJhc2U6OmRlc3Ryb3koKQogICAg
IGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5
ZnJhbWVzKj4odGhpcyk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEhvc3Q6CisgICAgICAg
IGRlbGV0ZSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4odGhpcyk7CisgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJh
bWU6CkBAIC0xNTAsNiArMTU2LDggQEAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBTdHlsZVJ1
bGVCYXNlOjpjb3B5KCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBLZXlmcmFt
ZXM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMq
Pih0aGlzKS0+Y29weSgpOworICAgIGNhc2UgSG9zdDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFN0eWxlUnVsZUhvc3QqPih0aGlzKS0+Y29weSgpOwogICAgIGNhc2UgVW5rbm93
bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlmcmFtZToKQEAgLTE5MSw2ICsxOTks
NyBAQCBQYXNzUmVmUHRyPENTU1J1bGU+IFN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBl
cihDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldAogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAg
ICBydWxlID0gV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6Y3JlYXRlKHN0YXRpY19jYXN0PFN0eWxl
UnVsZUtleWZyYW1lcyo+KHNlbGYpLCBwYXJlbnRTaGVldCk7CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSG9zdDoKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNh
c2UgS2V5ZnJhbWU6CkBAIC0zODEsNCArMzkwLDE0IEBAIHZvaWQgU3R5bGVSdWxlUmVnaW9uOjpy
ZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0
CiAgICAgaW5mby5hZGRNZW1iZXIobV9zZWxlY3Rvckxpc3QpOwogfQogCitTdHlsZVJ1bGVIb3N0
OjpTdHlsZVJ1bGVIb3N0KFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxl
cykKKyAgICA6IFN0eWxlUnVsZUJsb2NrKEhvc3QsIGFkb3B0UnVsZXMpCit7Cit9CisKK1N0eWxl
UnVsZUhvc3Q6OlN0eWxlUnVsZUhvc3QoY29uc3QgU3R5bGVSdWxlSG9zdCYgbykKKyAgICA6IFN0
eWxlUnVsZUJsb2NrKG8pCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJ1bGUuaAppbmRleCBlMTVmMzJlNDAyYWFmMjA4ZDNjYzBmY2NkMzU4NDc3YjIzMDM1NjM0
Li43YWQzMTNlY2VhOGJiZmIxZjYzMGEyYzU0ZDk3YjI0NDE3MzAzOTAzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUnVsZS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgUGFnZSwKICAgICAg
ICAgS2V5ZnJhbWVzLAogICAgICAgICBLZXlmcmFtZSwgLy8gTm90IHVzZWQuIFRoZXNlIGFyZSBp
bnRlcm5hbGx5IG5vbi1ydWxlIFN0eWxlS2V5ZnJhbWUgb2JqZWN0cy4KKyAgICAgICAgSG9zdCwK
ICAgICAgICAgUmVnaW9uID0gMTYKICAgICB9OwogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KQEAgLTU4LDYgKzU5LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgaXNTdHlsZVJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gU3R5bGU7
IH0KICAgICBib29sIGlzUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBSZWdp
b247IH0KICAgICBib29sIGlzSW1wb3J0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBJ
bXBvcnQ7IH0KKyAgICBib29sIGlzSG9zdFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0g
SG9zdDsgfQogCiAgICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBjb3B5KCkgY29uc3Q7CiAK
QEAgLTIyMyw2ICsyMjUsMjAgQEAgcHJpdmF0ZToKICAgICBDU1NTZWxlY3Rvckxpc3QgbV9zZWxl
Y3Rvckxpc3Q7CiB9OwogCitjbGFzcyBTdHlsZVJ1bGVIb3N0IDogcHVibGljIFN0eWxlUnVsZUJs
b2NrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVIb3N0PiBjcmVh
dGUoVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBhZG9wdFJ1bGVzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVJ1bGVIb3N0KGFkb3B0UnVsZXMpKTsKKyAg
ICB9CisKKyAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUhvc3Q+IGNvcHkoKSBjb25zdCB7IHJldHVy
biBhZG9wdFJlZihuZXcgU3R5bGVSdWxlSG9zdCgqdGhpcykpOyB9CisKK3ByaXZhdGU6CisgICAg
U3R5bGVSdWxlSG9zdChWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMp
OworICAgIFN0eWxlUnVsZUhvc3QoY29uc3QgU3R5bGVSdWxlSG9zdCYpOworfTsKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gU3R5bGVSdWxlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKaW5kZXggOWIxZjUxNGI5ZDE0MGY3MGJiMzFjMDY5
ZDkwNjdjZWU2YTMwZTFlNi4uZmFhNDQ2NDdlMDMxYTY5MmRkZDBiNzQ5ODczMGY2MTMwZGJjMDdj
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKQEAgLTQzNSw2
ICs0MzUsMTAgQEAgc3RhdGljIGJvb2wgY2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVkU3Vi
cmVzb3VyY2VzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGUKICAgICAgICAgICAgIGlmIChjaGls
ZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoc3RhdGljX2Nhc3Q8Y29uc3Qg
U3R5bGVSdWxlUmVnaW9uKj4ocnVsZSktPmNoaWxkUnVsZXMoKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdHlsZVJ1bGVC
YXNlOjpIb3N0OgorICAgICAgICAgICAgaWYgKGNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5jZWxl
ZFN1YnJlc291cmNlcyhzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVIb3N0Kj4ocnVsZSktPmNo
aWxkUnVsZXMoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpJbXBvcnQ6CiAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpQYWdlOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCmluZGV4IGFlYjViNWI0NzViMjE5YmM1N2Rj
ODVlZjJlN2I4MzJhZWU4ODkzZmMuLjgwOWJjYzg3ODIyZTUxNGNkOGQ2NGMzZGI4ZDMyYWM3NTg3
NjBlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAKQEAgLTM5LDYgKzM5LDcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRWxlbWVudFNoYWRvdzo6RWxlbWVudFNoYWRvdygp
CisgICAgOiBtX2hhc01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZShmYWxzZSkKIHsKIH0KIApAQCAt
ODksNiArOTAsMTAgQEAgdm9pZCBFbGVtZW50U2hhZG93OjphZGRTaGFkb3dSb290KEVsZW1lbnQq
IHNoYWRvd0hvc3QsIFBhc3NSZWZQdHI8U2hhZG93Um9vdD4gc2gKICAgICBpZiAoc2hhZG93SG9z
dC0+YXR0YWNoZWQoKSkKICAgICAgICAgc2hhZG93SG9zdC0+bGF6eVJlYXR0YWNoKCk7CiAKKyAg
ICAvLyBBcyBhIG5ldyBzaGFkb3cgZG9tIHN1YnRyZWUgbWlnaHQgaGF2ZSBAaG9zdCBALXJ1bGVz
LCBuZWVkIHRvIGRpc2FibGUKKyAgICAvLyBoYXNNYXRjaGVkSG9zdFJ1bGVzIGNhY2hlLgorICAg
IGNsZWFySGFzTWF0Y2hlZEhvc3RSdWxlKCk7CisKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFB1c2hTaGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jvb3QuZ2V0KCkpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuaAppbmRleCBkZGI0MzgwNmJkZTE1MzlmYzdhZGMy
YjlkODY5MmNlNzIzYzgzM2Y2Li41MTU2OWI2YTZhYjU2NmJmNGE5YmE0NTEzYjY0MGQzODVkNDVm
ODYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgKQEAgLTcxLDExICs3MSwxOCBAQCBw
dWJsaWM6CiAgICAgQ29udGVudERpc3RyaWJ1dG9yJiBkaXN0cmlidXRvcigpOwogICAgIGNvbnN0
IENvbnRlbnREaXN0cmlidXRvciYgZGlzdHJpYnV0b3IoKSBjb25zdDsKIAorICAgIGJvb2wgaGFz
TWF0Y2hlZEhvc3RSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNNYXRjaGVkSG9zdFJ1bGU7IH0K
KyAgICBib29sIGhhc01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlOyB9CisgICAgdm9pZCBjbGVhckhhc01hdGNoZWRI
b3N0UnVsZSgpIHsgbV9oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUgPSBmYWxzZTsgfQorICAg
IHZvaWQgc2V0SGFzTWF0Y2hlZEhvc3RSdWxlKGJvb2wgaGFzUnVsZSkgeyBtX2hhc01hdGNoZWRI
b3N0UnVsZSA9IGhhc1J1bGU7IG1faGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlID0gdHJ1ZTsg
fQorCiBwcml2YXRlOgogICAgIHZvaWQgaW52YWxpZGF0ZURpc3RyaWJ1dGlvbihFbGVtZW50KiBo
b3N0KTsKIAogICAgIERvdWJseUxpbmtlZExpc3Q8U2hhZG93Um9vdD4gbV9zaGFkb3dSb290czsK
ICAgICBDb250ZW50RGlzdHJpYnV0b3IgbV9kaXN0cmlidXRvcjsKKyAgICBib29sIG1faGFzTWF0
Y2hlZEhvc3RSdWxlOworICAgIGJvb2wgbV9oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGU7CiB9
OwogCiBpbmxpbmUgU2hhZG93Um9vdCogRWxlbWVudFNoYWRvdzo6eW91bmdlc3RTaGFkb3dSb290
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAppbmRleCA1MTgwYTFjMjJkODQ4OTRl
MzcwZjVjMTYyYjZhM2FjOGZmNmZkNDI1Li4zOTYwNGI5MTY0MDcwNGQxZjllOGZjOTU3MTcyODJi
Zjg3OGMxMzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCkBAIC0yMjQsNiArMjI0LDcg
QEAgdm9pZCBTaGFkb3dSb290OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIs
IE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSoKIHsKICAgICBDb250YWluZXJOb2RlOjpjaGlsZHJl
bkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGls
ZENvdW50RGVsdGEpOwogICAgIG93bmVyKCktPmludmFsaWRhdGVEaXN0cmlidXRpb24oKTsKKyAg
ICBvd25lcigpLT5jbGVhckhhc01hdGNoZWRIb3N0UnVsZSgpOwogfQogCiB9CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYmM0
ZDZmMGVjNzY1YzlkZGVlZjEwMjllYWMwM2FkYTVhYzJlODFlMi4uNDg4M2VmYzEwMTNiYjNiYmE5
MzdjYzc4MTg2OTZmYTg5YmU0ZDI1NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSArMSwxMSBAQAorMjAxMi0xMC0wMyAg
VGFrYXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBE
T01dIE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L2F0aG9z
dC1hdHJ1bGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93
L2F0aG9zdC1hdHJ1bGVzLmh0bWw6IEFkZGVkLgorCiA9PSBSb2xsZWQgb3ZlciB0byBDaGFuZ2VM
b2ctMjAxMi0xMC0wMiA9PQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L2F0aG9zdC1hdHJ1bGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRv
dy9hdGhvc3QtYXRydWxlcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTFmM2IxYzI1NTE2OTU2
Nzg3MjViZDY2NTE4MTMxMzQzODY0OWExNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
NSBAQAoraG9zdDogcmdiKDI1NSwgMCwgMCkKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0QTog
cmdiKDI1NSwgMCwgMCkKK2hvc3RCOiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDAsIDAsIDI1
NSkKK2hvc3Q6IHJnYigxMjgsIDEyOCwgMTI4KQoraG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6
IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMTI4LCAxMjgsIDEyOCkKK2hvc3Q6IHJnYigyNTUs
IDI1NSwgMCkKK2hvc3Q6IHJnYigyNTUsIDAsIDApCituZXN0ZWRIb3N0OiByZ2IoMCwgMCwgMjU1
KQoraG9zdDogcmdiKDI1NSwgMCwgMCkKK2hvc3Q6IHJnYigyNTUsIDI1NSwgMCkKK0hlbGxvCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjdkNGI1MTFlZTAyZmE5ZDc1MWU1N2UxNjliMDBhNmQ4NzdkNTNhNmQKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMuaHRt
bApAQCAtMCwwICsxLDE5MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0
eWxlPgorI2hvc3QgeworICBjb2xvcjogZ3JheTsKK30KKzwvc3R5bGU+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvcG9seWZpbGwuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGR1
bXBDb21wdXRlZFN0eWxlKG5vZGUpCit7CisgICAgZGVidWcobm9kZS5pZCArICI6ICIgKyBkb2N1
bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5
VmFsdWUoJ2NvbG9yJykpOworfQorCitmdW5jdGlvbiBwcmVwcm9jZXNzRm9yVGVzdCgpCit7Cisg
ICAgdmFyIHBhcmVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXJlbnQiKTsKKyAgICBw
YXJlbnQuaW5uZXJIVE1MID0gJzxkaXYgaWQ9Imhvc3QiPjxzcGFuPkhlbGxvPC9zcGFuPjwvZGl2
Pic7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVDb250ZW50Q2FzZSgpCit7CisgICAgcHJlcHJv
Y2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJo
b3N0Iik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAg
IHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9
PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0
KTsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZVNoYWRvd0Nhc2UoKQoreworICAgIHByZXByb2Nl
c3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9z
dCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBz
aGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwv
c3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOwor
fQorCitmdW5jdGlvbiB0ZXN0SG9zdFdpdGhTZWxlY3RvcigpCit7CisgICAgdmFyIHBhcmVudCA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXJlbnQiKTsKKyAgICBwYXJlbnQuaW5uZXJIVE1M
ID0gIjxzdHlsZSBzY29wZWQ+IC5ob3N0IHsgY29sb3I6IGdyYXkgfTs8L3N0eWxlPiIKKyAgICAg
ICAgKyAiPGRpdiBpZD0naG9zdEEnIGNsYXNzPSdob3N0Jz48c3Bhbj5IZWxsbzwvc3Bhbj48L2Rp
dj4iCisgICAgICAgICsgIjxzcGFuIGlkPSdob3N0QicgY2xhc3M9J2hvc3QnPjxzcGFuPldvcmxk
PC9zcGFuPjwvc3Bhbj4iOworCisgICAgdmFyIGhvc3RBID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImhvc3RBIik7CisgICAgdmFyIHNoYWRvd0EgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
QSk7CisgICAgdmFyIHN0eWxlID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0g
c3BhbiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPiI7CisgICAgc2hhZG93QS5pbm5lckhUTUwg
PSBzdHlsZSArICI8c2hhZG93Pjwvc2hhZG93PiI7CisKKyAgICB2YXIgaG9zdEIgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiaG9zdEIiKTsKKyAgICB2YXIgc2hhZG93QiA9IG5ldyBXZWJLaXRT
aGFkb3dSb290KGhvc3RCKTsKKyAgICBzaGFkb3dCLmlubmVySFRNTCA9IHN0eWxlICsgIjxzaGFk
b3c+PC9zaGFkb3c+IjsKKworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3RBKTsKKyAgICBkdW1w
Q29tcHV0ZWRTdHlsZShob3N0Qik7Cit9CisKK2Z1bmN0aW9uIHRlc3RQc2V1ZG9Ib3N0V2l0aFNj
b3BlZCgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRT
aGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPGRpdj48c3R5bGUgc2Nv
cGVkPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93
PjxkaXY+PHN0eWxlIHNjb3BlZD5AaG9zdCB7IGRpdiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxl
PjwvZGl2PjwvZGl2PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0
aW9uIHRlc3RQc2V1ZG9Ib3N0V2l0aEZhbGxiYWNrU2hhZG93KCkKK3sKKyAgICBwcmVwcm9jZXNz
Rm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3Qi
KTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7Cisg
ICAgdmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAg
b2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVk
OyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIHlvdW5nZXN0U2hhZG93Lmlu
bmVySFRNTCA9ICI8Y29udGVudD48c2hhZG93Pjwvc2hhZG93PjwvY29udGVudD4iOworICAgIGR1
bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0VHdvU2hhZG93Um9vdHND
YXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdl
YktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdlYktp
dFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+
QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4i
OworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBj
b2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgZHVtcENvbXB1
dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RUd29TaGFkb3dSb290c0NyZWF0aW5n
RGlmZmVyZW50T3JkZXJDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZh
ciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0
U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXN0U2hh
ZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgeW91bmdlc3RTaGFkb3cuaW5u
ZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPjxz
aGFkb3c+PC9zaGFkb3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5A
aG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7
CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBs
ZVNoYWRvd1Jvb3RzV2l0aEluZXJ0U2hhZG93Q29udGVudCgpCit7CisgICAgcHJlcHJvY2Vzc0Zv
clRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7
CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAg
IHZhciBvbGRlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5
b3VuZ2VyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5n
ZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisKKyAgICB5b3VuZ2VzdFNo
YWRvdy5pbm5lckhUTUwgPSAiPHNoYWRvdz48L3NoYWRvdz4iOworICAgIHlvdW5nZXJTaGFkb3cu
aW5uZXJIVE1MID0gIjxjb250ZW50PjwvY29udGVudD4iOworICAgIG9sZGVyU2hhZG93LmlubmVy
SFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogZ3JlZW47IH0gfTwvc3R5bGU+PHNo
YWRvdz48L3NoYWRvdz4iOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBo
b3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsK
KyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxl
U2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3coKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7
CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZh
ciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgb2xk
ZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlclNo
YWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRv
dyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworCisgICAgeW91bmdlc3RTaGFkb3cuaW5u
ZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiB5ZWxsb3c7IH0gfTwvc3R5bGU+
PHNoYWRvdz48L3NoYWRvdz4iOworICAgIHlvdW5nZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHls
ZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPjxkaXY+aW5lcnQ8L2Rpdj4i
OworICAgIG9sZGVyU2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xv
cjogZ3JlZW47IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIG9sZGVzdFNoYWRv
dy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHls
ZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30K
KworZnVuY3Rpb24gdGVzdE5lc3RlZENhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7
CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZh
ciBvdXRlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG91dGVyU2hh
ZG93LmlubmVySFRNTCA9ICc8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0
eWxlPjxkaXYgaWQ9Im5lc3RlZEhvc3QiPklubmVyU2hhZG93PC9kaXY+JzsKKyAgICB2YXIgbmVz
dGVkID0gb3V0ZXJTaGFkb3cuZ2V0RWxlbWVudEJ5SWQoIm5lc3RlZEhvc3QiKTsKKyAgICB2YXIg
aW5uZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChuZXN0ZWQpOworICAgIGlubmVyU2hh
ZG93LmlubmVySFRNTCA9ICc8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsgfSB9PC9z
dHlsZT5TaG93IDxzaGFkb3c+PC9zaGFkb3c+IGluIG91dGVyLic7CisgICAgZHVtcENvbXB1dGVk
U3R5bGUoaG9zdCk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUobmVzdGVkKTsKK30KKworZnVuY3Rp
b24gdGVzdEhvc3RWc1Njb3BlZFN0eWxlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOwor
ICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICBob3N0
LmlubmVySFRNTCA9ICI8c3R5bGUgc2NvcGVkPiNob3N0IHsgY29sb3I6IHllbGxvdzsgfTwvc3R5
bGU+PHNwYW4+SGVsbG88L3NwYW4+IjsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyAjaG9z
dCB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVt
cENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0VnNJbmxpbmVTdHls
ZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgaG9zdC5zdHlsZS5jb2xvciA9ICJ5ZWxsb3ci
OworICAgIGhvc3QuaW5uZXJIVE1MID0gIjxzcGFuPkhlbGxvPC9zcGFuPiI7CisgICAgdmFyIHNo
YWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwg
PSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48
L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24g
cnVuVGVzdHMoKQoreworICAgIHRlc3RTaW1wbGVDb250ZW50Q2FzZSgpOworICAgIHRlc3RTaW1w
bGVTaGFkb3dDYXNlKCk7CisgICAgdGVzdEhvc3RXaXRoU2VsZWN0b3IoKTsKKyAgICB0ZXN0UHNl
dWRvSG9zdFdpdGhTY29wZWQoKTsKKyAgICB0ZXN0UHNldWRvSG9zdFdpdGhGYWxsYmFja1NoYWRv
dygpOworICAgIHRlc3RUd29TaGFkb3dSb290c0Nhc2UoKTsKKyAgICB0ZXN0VHdvU2hhZG93Um9v
dHNDcmVhdGluZ0RpZmZlcmVudE9yZGVyQ2FzZSgpOworICAgIHRlc3RNdWx0aXBsZVNoYWRvd1Jv
b3RzV2l0aEluZXJ0U2hhZG93Q29udGVudCgpOworICAgIHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3Rz
V2l0aEluZXJ0U2hhZG93KCk7CisgICAgdGVzdE5lc3RlZENhc2UoKTsKKyAgICB0ZXN0SG9zdFZz
U2NvcGVkU3R5bGUoKTsKKyAgICB0ZXN0SG9zdFZzSW5saW5lU3R5bGUoKTsKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpIj4KKyAgPGRpdiBpZD0icGFyZW50
Ij4KKyAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167716</attachid>
            <date>2012-10-09 02:25:33 -0700</date>
            <delta_ts>2012-10-10 01:01:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88606-20121009182434.patch</filename>
            <type>text/plain</type>
            <size>40640</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTMwYTU2YzRhZWQ5YjQx
Njk3MjgwYTY2OGU0MTgzM2MzNmNhNzc5OC4uNjAwODM1NTJiNDg0MmFkMDRjZjM5NjJjMWQ1Nzhl
ODBhYmY5MTUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMiBAQAorMjAxMi0xMC0wOSAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01d
IE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIEBob3N0LUBydWxlcyBh
Y2NvcmRpbmcgdG8gdGhlIHNoYWRvdyBkb20gc3BlYzoKKyAgICAgICAgaHR0cDovL2R2Y3MudzMu
b3JnL2hnL3dlYmNvbXBvbmVudHMvcmF3LWZpbGUvdGlwL3NwZWMvc2hhZG93L2luZGV4Lmh0bWwj
aG9zdC1hdC1ydWxlCisgICAgICAgIFRoZSBkZXNpZ24gZG9jIGlzOgorICAgICAgICBodHRwczov
L2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFQMnlvcmNoRjhsY2kyc2Njci1tVlNSZjJkdHZq
S2VpdXlRV3pDQjJiRUE4L2VkaXQKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvYXRo
b3N0LWF0cnVsZXMuaHRtbAorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAg
QWRkZWQgcnVsZXMgZm9yIHBhcnNpbmcgQGhvc3QgQC1ydWxlcy4KKyAgICAgICAgKiBjc3MvQ1NT
UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbik6
CisgICAgICAgIEFkZGVkIGEgbmV3IHRva2VuICJAaG9zdCIuCisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKToKKyAgICAgICAgQWRkZWQgYSBuZXcgbWV0aG9kIHRv
IGNyZWF0ZSBhbiBAaG9zdCBALXJ1bGUsIHdoaWNoIGlzIGludm9rZWQgZnJvbQorICAgICAgICBD
U1NHcmFtbWFyLnkuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2Vy
Lmg6CisgICAgICAgIEFkZGVkIGEgZGVjbGFyYXRpb24gb2YgdGhlIGFib3ZlIG5ldyBtZXRob2Q6
IGNyZWF0ZUhvc3RSdWxlLgorICAgICAgICAqIGNzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaDoK
KyAgICAgICAgQWRkZWQgSE9TVF9SVUxFIHRvIGVudW0gVHlwZS4KKyAgICAgICAgKiBjc3MvUnVs
ZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6UnVsZURhdGEpOgorICAgICAg
ICBNb2RpZmllZCBtdWx0aXBsZSBib29sIGFyZ3VtZW50cyBpbnRvIG9uZSB1bnNpZ25lZCBhcmd1
bWVudC4gTm93IGl0CisgICAgICAgIHVzZXMgY29tYmluYXRpb25zIG9mIHZhbHVlcyBmcm9tIGVu
dW0gQWRkUnVsZVN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVT
ZXQ6OmFkZFN0eWxlUnVsZSk6CisgICAgICAgIFVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBSdWxl
RGF0YSdzIGNoYW5nZS4KKyAgICAgICAgTW9kaWZpZWQgdG8gSW52b2tlIGluY3JlYXNlU3BlY2lm
aWNpdHkgaWYgdGhlIGdpdmVuIHJ1bGUgaXMgQGhvc3QKKyAgICAgICAgQC1ydWxlLgorICAgICAg
ICAqIGNzcy9SdWxlU2V0Lmg6CisgICAgICAgIChSdWxlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpSdWxlRGF0YTo6aW5jcmVhc2VTcGVjaWZpY2l0eSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1l
dGhvZCB0byBpbmNyZWFzZSBzZWxlY3RvcidzIHNwZWNpZmljaXR5LiBUaGlzIG1ldGhvZCBpcwor
ICAgICAgICB1c2VkIHRvIG1ha2UgQGhvc3QgQC1ydWxlcycgc3BlY2lmaWNpdHkgbGFyZ2VyIHRo
YW4gbm9ybWFsIGF1dGhvcgorICAgICAgICBydWxlcycgc3BlY2lmaWNpdHkuCisgICAgICAgIChS
dWxlU2V0KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjptYWtlUnVsZVNldCk6CisgICAgICAgIFVwZGF0ZWQgYWNjb3JkaW5nIHRvIGFkZFJ1bGUn
cyBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGRIb3N0UnVsZSk6
CisgICAgICAgIEFkZGVkIGEgbmV3IG1ldGhvZCB0byByZWdpc3RlciBAaG9zdCBALXJ1bGVzIHdp
dGggc2hhZG93IHJvb3RzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjphdEhvc3RSdWxlU2V0Rm9yU2NvcGUpOgorICAgICAgICBBZGRlZCBhIG5l
dyBtZXRob2QgZm9yIGZpbmRpbmcgcnVsZXNldHMgZnJvbSB0aGUgZ2l2ZW4gc2hhZG93IHJvb3Qu
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaGVzSG9zdFJ1bGVzKToKKyAg
ICAgICAgQSBuZXcgbWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgYW55IEBob3N0IEAtcnVsZXMgd2ls
bCBiZSBhcHBsaWVkIHRvCisgICAgICAgIHRoZSBnaXZlbiBlbGVtZW50IG9yIG5vdC4gVGhpcyBp
cyBwcmVwYXJlZCBmb3Igc2hhcmVkIHN0eWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgbWF0
Y2hlZCBob3N0IHJ1bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMpOgorICAgICAgICBNb2RpZmllZCB0
byBpbnZva2UgbWF0Y2hIb3N0UnVsZXMuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpsb2NhdGVTaGFyZWRTdHlsZSk6CisgICAgICAgIERpc2FibGUgc2libGluZyBzdHlsZSBjYWNo
ZSBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBhIHNoYWRvdyBob3N0IGFuZAorICAgICAgICBhbnkg
QGhvc3QgQC1ydWxlcyBhcmUgYXBwbGllZCB0byB0aGUgZWxlbWVudC4KKyAgICAgICAgKiBjc3Mv
U3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgICogY3Nz
L1N0eWxlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpyZXBvcnRN
ZW1vcnlVc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpkZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmNvcHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSdWxlQmFzZTo6Y3JlYXRlQ1NTT01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUnVsZUhvc3Q6OlN0eWxlUnVsZUhvc3QpOgorICAgICAgICBJbXBsZW1lbnRlZCBjbGFz
cyBTdHlsZVJ1bGVIb3N0LiBUaGUgY2xhc3MgaXMgYWxtb3N0IHRoZSBzYW1lIGFzCisgICAgICAg
IFN0eWxlUnVsZUJsb2NrIGV4Y2VwdCB0eXBlLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogY3NzL1N0eWxlUnVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6aXNI
b3N0UnVsZSk6CisgICAgICAgIChTdHlsZVJ1bGVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUnVsZUhvc3Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0Ojpj
b3B5KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Q29udGVu
dHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVk
U3VicmVzb3VyY2VzKToKKyAgICAgICAgKiBkb20vRWxlbWVudFNoYWRvdy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpFbGVtZW50U2hhZG93KToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnRTaGFkb3c6OmFkZFNoYWRvd1Jvb3QpOgorICAgICAgICBTaW5jZSBhIG5ldyBz
aGFkb3cgcm9vdCBpcyBhZGRlZCwgZGlzYWJsZSBAaG9zdCBALXJ1bGVzIGNhY2hlLgorICAgICAg
ICAqIGRvbS9FbGVtZW50U2hhZG93Lmg6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93
OjpoYXNNYXRjaGVkSG9zdFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6
aGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRT
aGFkb3c6OmNsZWFySGFzTWF0Y2hlZEhvc3RSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRTaGFkb3c6OnNldEhhc01hdGNoZWRIb3N0UnVsZSk6CisgICAgICAgIEFkZGVkIGZvdXIgbWV0
aG9kcyBmb3IgQGhvc3QgQC1ydWxlcyBjYWNoZS4gVGhlIGNhY2hlIGhhcyBpbmZvcm1hdGlvbgor
ICAgICAgICBhYm91dCB3aGV0aGVyIGFueSBAaG9zdCBALXJ1bGVzIG1hdGNoIHRoZSBFbGVtZW50
U2hhZG93J3MgaG9zdC4KKyAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBvZiBoYXNNYXRjaGVkSG9z
dFJ1bGUgaXMgYXZhaWxhYmxlIG9ubHkgaWYKKyAgICAgICAgaGFzTWF0Y2hlZEhvc3RSdWxlQXZh
aWxhYmxlIHJldHVybnMgdHJ1ZS4KKyAgICAgICAgKEVsZW1lbnRTaGFkb3cpOgorICAgICAgICAq
IGRvbS9TaGFkb3dSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OmNoaWxk
cmVuQ2hhbmdlZCk6CisKIDIwMTItMTAtMDggIEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIEluZGV4ZWREQjogcmVtb3ZlIGF1dG9nZW5lcmF0ZWQgb2JqZWN0
U3RvcmUvaW5kZXggaWQgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YW1tYXIueSBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKaW5kZXggMmI0Mjc0YTli
MzJhMzVhMjk2Njg4ZjY1YjNiMzhhZjI0YmEzYjQwZC4uOGZhYTEzNDA3N2U1MTRhN2IzMDc4YjM5
YzkwYjljZGZhNGNkODQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1t
YXIueQorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CkBAIC0xMzIsNiArMTMy
LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY3NzeXllcnJvcih2b2lkKiwgY29uc3QgY2hhciopCiAl
dG9rZW4gUEFHRV9TWU0KICV0b2tlbiBNRURJQV9TWU0KICV0b2tlbiBGT05UX0ZBQ0VfU1lNCisl
dG9rZW4gSE9TVF9TWU0KICV0b2tlbiBDSEFSU0VUX1NZTQogJXRva2VuIE5BTUVTUEFDRV9TWU0K
ICV0b2tlbiBWQVJGVU5DVElPTgpAQCAtMjE5LDYgKzIyMCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50
IGNzc3l5ZXJyb3Iodm9pZCosIGNvbnN0IGNoYXIqKQogJXR5cGUgPHJ1bGU+IHBhZ2UKICV0eXBl
IDxydWxlPiBtYXJnaW5fYm94CiAldHlwZSA8cnVsZT4gZm9udF9mYWNlCisldHlwZSA8cnVsZT4g
aG9zdAogJXR5cGUgPHJ1bGU+IGtleWZyYW1lcwogJXR5cGUgPHJ1bGU+IGludmFsaWRfcnVsZQog
JXR5cGUgPHJ1bGU+IHNhdmVfYmxvY2sKQEAgLTQxOSw2ICs0MjEsNyBAQCB2YWxpZF9ydWxlOgog
ICB8IG5hbWVzcGFjZQogICB8IGltcG9ydAogICB8IHJlZ2lvbgorICB8IGhvc3QKICAgOwogCiBy
dWxlOgpAQCAtODQxLDYgKzg0NCwyMyBAQCBmb250X2ZhY2U6CiAgICAgfQogOwogCitiZWZvcmVf
aG9zdF9ydWxlOgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgcGFyc2VyLT5tYXJrUnVsZUhl
YWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpIT1NUX1JVTEUpOworICAgIH0KKyAgICA7CisK
K2hvc3Q6CisgICAgYmVmb3JlX2hvc3RfcnVsZSBIT1NUX1NZTSBhdF9ydWxlX2hlYWRlcl9lbmRf
bWF5YmVfc3BhY2UgCisgICAgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZSBibG9j
a19ydWxlX2xpc3Qgc2F2ZV9ibG9jayB7CisgICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVIb3N0
UnVsZSgkNyk7CisgICAgfQorICAgIHwgYmVmb3JlX2hvc3RfcnVsZSBIT1NUX1NZTSBhdF9ydWxl
X2hlYWRlcl9lbmRfbWF5YmVfc3BhY2UgJzsnIHsKKyAgICAgICAgJCQgPSAwOworICAgICAgICBw
YXJzZXItPnBvcFJ1bGVEYXRhKCk7CisgICAgfQorICAgIDsKKyAKIHJlZ2lvbl9zZWxlY3RvcjoK
ICAgICBzZWxlY3Rvcl9saXN0IHsKICAgICAgICAgaWYgKCQxKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuY3BwCmluZGV4IGI5ZGZiZWFkNDE3MjA4ODJiNjA1YzA5MWRkZDdkZWYyMmZjMWQzNzQuLjU2
ZWQ0YmY5ZDFhMmZlMjkwZjhhMDNmNTdiNWYxNmUyMDIwY2FjMzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCkBAIC05MTc2LDYgKzkxNzYsMTEgQEAgaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpk
ZXRlY3RBdFRva2VuKGludCBsZW5ndGgsIGJvb2wgaGFzRXNjYXBlKQogICAgICAgICAgICAgbV90
b2tlbiA9IEZPTlRfRkFDRV9TWU07CiAgICAgICAgIHJldHVybjsKIAorICAgIGNhc2UgJ2gnOgor
ICAgICAgICBpZiAobGVuZ3RoID09IDUgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsg
MiwgIm9zdCIpKQorICAgICAgICAgICAgbV90b2tlbiA9IEhPU1RfU1lNOworICAgICAgICByZXR1
cm47CisKICAgICBjYXNlICdpJzoKICAgICAgICAgaWYgKGxlbmd0aCA9PSA3ICYmIGlzRXF1YWxU
b0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJtcG9ydCIpKSB7CiAgICAgICAgICAgICBtX3BhcnNp
bmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7CkBAIC05OTY1LDYgKzk5NzAsMjIgQEAgU3R5bGVSdWxl
QmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUoKQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKK1N0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUoUnVsZUxpc3Qq
IHJ1bGVzKQoreworICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNs
YXJhdGlvbnMgPSBmYWxzZTsKKyAgICBSZWZQdHI8U3R5bGVSdWxlSG9zdD4gcnVsZTsKKyAgICBp
ZiAocnVsZXMpCisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoKnJ1bGVzKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgUnVsZUxpc3QgZW1wdHlSdWxlczsKKyAgICAgICAgcnVsZSA9
IFN0eWxlUnVsZUhvc3Q6OmNyZWF0ZShlbXB0eVJ1bGVzKTsKKyAgICB9CisgICAgU3R5bGVSdWxl
SG9zdCogcmVzdWx0ID0gcnVsZS5nZXQoKTsKKyAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxl
LnJlbGVhc2UoKSk7CisgICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRl
ZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQ1NTUGFyc2VyOjphZGROYW1lc3Bh
Y2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKQog
ewogICAgIGlmICghbV9zdHlsZVNoZWV0IHx8ICFtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25z
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IDcxZDczOTk1ZDAxOWI5YzgwYTQ3MTFkODUwNjhi
MTZiMzI3MjY1ODEuLjRlNWYwNjA0OTNiODA2YmY5OWQ0OTUzMGM4ZmVjYTc1MWVjNDU0MGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTI4Miw2ICsyODIsNyBAQCBwdWJsaWM6CiAgICAgU3R5
bGVSdWxlQmFzZSogY3JlYXRlUGFnZVJ1bGUoUGFzc093blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4g
cGFnZVNlbGVjdG9yKTsKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVSZWdpb25SdWxlKENTU1Nl
bGVjdG9yVmVjdG9yKiByZWdpb25TZWxlY3RvciwgUnVsZUxpc3QqIHJ1bGVzKTsKICAgICBTdHls
ZVJ1bGVCYXNlKiBjcmVhdGVNYXJnaW5BdFJ1bGUoQ1NTU2VsZWN0b3I6Ok1hcmdpbkJveFR5cGUp
OworICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZUhvc3RSdWxlKFJ1bGVMaXN0KiBydWxlcyk7CiAg
ICAgdm9pZCBzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwogICAgIHZvaWQgZW5kRGVj
bGFyYXRpb25zRm9yTWFyZ2luQm94KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0
eVNvdXJjZURhdGEuaAppbmRleCA0NjliZGI2MzBjMWE1YzVkYmE5OTNmZDFhZDU5ZWQwNzQ0OWE1
NWJlLi4wNzllYzMzNjI0OTVjMDc5NzliNDc1YWZkZTc3NjAyMzg0Yzk5OTZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCkBAIC05NCw3ICs5NCw4IEBAIHN0
cnVjdCBDU1NSdWxlU291cmNlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU1J1bGVTb3VyY2VE
YXRhPiB7CiAgICAgICAgIEZPTlRfRkFDRV9SVUxFLAogICAgICAgICBQQUdFX1JVTEUsCiAgICAg
ICAgIEtFWUZSQU1FU19SVUxFLAotICAgICAgICBSRUdJT05fUlVMRQorICAgICAgICBSRUdJT05f
UlVMRSwKKyAgICAgICAgSE9TVF9SVUxFCiAgICAgfTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENTU1J1bGVTb3VyY2VEYXRhPiBjcmVhdGUoVHlwZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3Bw
CmluZGV4IGUyYmU1NzcxZTAyNWYxNGNmOWE4NWRlN2U1MWNkOWM1YTEzMDkwNTkuLmRhYmNhOGYw
NTY1MGFiZTUwNDY3ODJlNDgwMGQ5OWFhMDlkYjc4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9SdWxlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAK
QEAgLTEwNywxOCArMTA3LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc1VuY29tbW9u
QXR0cmlidXRlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1SdWxlRGF0YTo6UnVsZURhdGEoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25l
ZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVs
ZSkKK1J1bGVEYXRhOjpSdWxlRGF0YShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9y
SW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBhZGRSdWxlU3RhdGUpCiAgICAgOiBt
X3J1bGUocnVsZSkKICAgICAsIG1fc2VsZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQogICAgICwg
bV9wb3NpdGlvbihwb3NpdGlvbikKICAgICAsIG1fc3BlY2lmaWNpdHkoc2VsZWN0b3IoKS0+c3Bl
Y2lmaWNpdHkoKSkKLSAgICAsIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNhblVzZUZhc3RD
aGVja1NlbGVjdG9yICYmIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Io
c2VsZWN0b3IoKSkpCisgICAgLCBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigoYWRkUnVsZVN0
YXRlICYgUnVsZUNhblVzZUZhc3RDaGVja1NlbGVjdG9yKSAmJiBTZWxlY3RvckNoZWNrZXI6Omlz
RmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQogICAgICwgbV9oYXNNdWx0aXBhcnRT
ZWxlY3RvcighIXNlbGVjdG9yKCktPnRhZ0hpc3RvcnkoKSkKICAgICAsIG1faGFzUmlnaHRtb3N0
U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goaXNTZWxlY3Rvck1hdGNoaW5nSFRN
TEJhc2VkT25SdWxlSGFzaChzZWxlY3RvcigpKSkKICAgICAsIG1fY29udGFpbnNVbmNvbW1vbkF0
dHJpYnV0ZVNlbGVjdG9yKFdlYkNvcmU6OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rv
cihzZWxlY3RvcigpKSkKICAgICAsIG1fbGlua01hdGNoVHlwZShTZWxlY3RvckNoZWNrZXI6OmRl
dGVybWluZUxpbmtNYXRjaFR5cGUoc2VsZWN0b3IoKSkpCi0gICAgLCBtX2hhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4oaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKLSAgICAsIG1faXNJblJlZ2lv
blJ1bGUoaW5SZWdpb25SdWxlKQorICAgICwgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGFk
ZFJ1bGVTdGF0ZSAmIFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQorICAgICwgbV9pc0lu
UmVnaW9uUnVsZShhZGRSdWxlU3RhdGUgJiBSdWxlSXNJblJlZ2lvblJ1bGUpCiB7CiAgICAgQVNT
RVJUKG1fcG9zaXRpb24gPT0gcG9zaXRpb24pOwogICAgIEFTU0VSVChtX3NlbGVjdG9ySW5kZXgg
PT0gc2VsZWN0b3JJbmRleCk7CkBAIC0yMDcsOSArMjA3LDE0IEBAIHZvaWQgUnVsZVNldDo6YWRk
VG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3Qg
UnVsZURhCiAgICAgcnVsZXMtPmFwcGVuZChydWxlRGF0YSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6
YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIGJvb2wgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9v
bCBpblJlZ2lvblJ1bGUpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoU3R5bGVSdWxlKiBydWxlLCB1
bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBhZGRSdWxlU3RhdGUpCiB7Ci0gICAgUnVs
ZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgbV9ydWxlQ291bnQrKywgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbiwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGluUmVnaW9uUnVs
ZSk7CisgICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgbV9ydWxlQ291
bnQrKywgYWRkUnVsZVN0YXRlKTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgYXRob3N0UnVs
ZVNwZWNpZmljaXR5ID0gMHgxMDAwMDA7CisKKyAgICBpZiAoYWRkUnVsZVN0YXRlICYgUnVsZUlz
SG9zdFJ1bGUpCisgICAgICAgIHJ1bGVEYXRhLmluY3JlYXNlU3BlY2lmaWNpdHkoYXRob3N0UnVs
ZVNwZWNpZmljaXR5KTsKKwogICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21SdWxlRGF0YShtX2ZlYXR1
cmVzLCBydWxlRGF0YSk7CiAKICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5z
ZWxlY3RvcigpOwpAQCAtMjY0LDEwICsyNjksMTIgQEAgdm9pZCBSdWxlU2V0OjphZGRSZWdpb25S
dWxlKFN0eWxlUnVsZVJlZ2lvbiogcmVnaW9uUnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXQK
IAogICAgIC8vIENvbGxlY3QgdGhlIHJlZ2lvbiBydWxlcyBpbnRvIGEgcnVsZSBzZXQKICAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMgPSByZWdpb25S
dWxlLT5jaGlsZFJ1bGVzKCk7CisgICAgdW5zaWduZWQgYWRkUnVsZVN0YXRlID0gaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiA/IFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogMDsKKyAg
ICBhZGRSdWxlU3RhdGUgfD0gUnVsZUNhblVzZUZhc3RDaGVja1NlbGVjdG9yIHwgUnVsZUlzSW5S
ZWdpb25SdWxlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZFJ1bGVzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIFN0eWxlUnVsZUJhc2UqIHJlZ2lvblN0eWxpbmdSdWxlID0gY2hp
bGRSdWxlc1tpXS5nZXQoKTsKICAgICAgICAgaWYgKHJlZ2lvblN0eWxpbmdSdWxlLT5pc1N0eWxl
UnVsZSgpKQotICAgICAgICAgICAgcmVnaW9uUnVsZVNldC0+YWRkU3R5bGVSdWxlKHN0YXRpY19j
YXN0PFN0eWxlUnVsZSo+KHJlZ2lvblN0eWxpbmdSdWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICByZWdpb25SdWxlU2V0LT5hZGRTdHlsZVJ1
bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUpLCBhZGRSdWxlU3Rh
dGUpOwogICAgIH0KICAgICAvLyBVcGRhdGUgdGhlICJnbG9iYWwiIHJ1bGUgY291bnQgc28gdGhh
dCBwcm9wZXIgb3JkZXIgaXMgbWFpbnRhaW5lZAogICAgIG1fcnVsZUNvdW50ID0gcmVnaW9uUnVs
ZVNldC0+bV9ydWxlQ291bnQ7CkBAIC0yODYsNiArMjkzLDcgQEAgdm9pZCBSdWxlU2V0OjphZGRS
dWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5
RXZhbHUKICAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydFJ1bGUtPnN0eWxlU2hl
ZXQoKSwgbWVkaXVtLCByZXNvbHZlciwgc2NvcGUpOwogICAgIH0KICAgICBib29sIGhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4gPSByZXNvbHZlciAmJiByZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChzaGVldC0+YmFzZVVSTCgpKTsKKyAgICB1bnNpZ25l
ZCBhZGRSdWxlU3RhdGUgPSAoaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA/IFJ1bGVIYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luIDogMCkgfCAoIXNjb3BlID8gUnVsZUNhblVzZUZhc3RDaGVja1Nl
bGVjdG9yIDogMCk7CiAKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4m
IHJ1bGVzID0gc2hlZXQtPmNoaWxkUnVsZXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcnVsZXMuc2l6ZSgpOyArK2kpIHsKQEAgLTI5Myw3ICszMDEsNyBAQCB2b2lkIFJ1bGVTZXQ6
OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IE1lZGlh
UXVlcnlFdmFsdQogCiAgICAgICAgIEFTU0VSVCghcnVsZS0+aXNJbXBvcnRSdWxlKCkpOwogICAg
ICAgICBpZiAocnVsZS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAgICAgIGFkZFN0eWxlUnVsZShz
dGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwg
IXNjb3BlKTsKKyAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUq
PihydWxlKSwgYWRkUnVsZVN0YXRlKTsKICAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNQYWdlUnVs
ZSgpKQogICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+
KHJ1bGUpKTsKICAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNNZWRpYVJ1bGUoKSkgewpAQCAtMzA1
LDcgKzMxMyw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENv
bnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1CiAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gMDsgaiA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2opIHsKICAgICAgICAg
ICAgICAgICAgICAgU3R5bGVSdWxlQmFzZSogY2hpbGRSdWxlID0gY2hpbGRSdWxlc1tqXS5nZXQo
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkUnVsZS0+aXNTdHlsZVJ1bGUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUq
PihjaGlsZFJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCAhc2NvcGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KGNo
aWxkUnVsZSksIGFkZFJ1bGVTdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNo
aWxkUnVsZS0+aXNQYWdlUnVsZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYWRkUGFnZVJ1
bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+KGNoaWxkUnVsZSkpOwogICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzRm9udEZhY2VSdWxlKCkgJiYgcmVzb2x2ZXIp
IHsKQEAgLTM0NywxNSArMzU1LDE3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQo
U3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1CiAgICAgICAg
ICAgICBhZGRSZWdpb25SdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVJlZ2lvbio+KHJ1bGUpLCBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsKICAgICAgICAgfQogI2VuZGlmCisgICAgICAgIGVs
c2UgaWYgKHJ1bGUtPmlzSG9zdFJ1bGUoKSkKKyAgICAgICAgICAgIHJlc29sdmVyLT5hZGRIb3N0
UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4sIHNjb3BlKTsKICAgICB9CiAgICAgaWYgKG1fYXV0b1Nocmlua1RvRml0RW5hYmxl
ZCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1
bGUoU3R5bGVSdWxlKiBydWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wg
Y2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUpCit2b2lkIFJ1bGVT
ZXQ6OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIGFkZFJ1bGVTdGF0ZSkK
IHsKICAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBu
b3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHJ1bGUtPnNlbGVjdG9yTGlzdCgpLmluZGV4T2ZOZXh0
U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkKLSAgICAgICAgYWRkUnVsZShydWxlLCBzZWxl
Y3RvckluZGV4LCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxl
Y3RvciwgaXNJblJlZ2lvblJ1bGUpOworICAgICAgICBhZGRSdWxlKHJ1bGUsIHNlbGVjdG9ySW5k
ZXgsIGFkZFJ1bGVTdGF0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0
b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9SdWxlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oCmluZGV4
IDY1NzcyMzhiYTkyMzZhOWQ2ODEwMzkxOTVhMGRkNDNhMmU4MDgyYTAuLmEzZGFmYzliNmQ4MTg1
MzAwYzU2NjA4NTYzOWM3ZDIxZjJiZGY2NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9SdWxlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuaApAQCAtMzEsNiAr
MzEsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitlbnVtIEFkZFJ1bGVTdGF0ZSB7Cisg
ICAgUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSAxLAorICAgIFJ1bGVDYW5Vc2VGYXN0
Q2hlY2tTZWxlY3RvciAgID0gMSA8PCAxLAorICAgIFJ1bGVJc0luUmVnaW9uUnVsZSAgICAgICAg
ICAgID0gMSA8PCAyLAorICAgIFJ1bGVJc0hvc3RSdWxlICAgICAgICAgICAgICAgID0gMSA8PCAz
LAorfTsKKwogY2xhc3MgQ1NTU2VsZWN0b3I7CiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xhc3Mg
TWVkaWFRdWVyeUV2YWx1YXRvcjsKQEAgLTQwLDcgKzQ3LDcgQEAgY2xhc3MgU3R5bGVTaGVldENv
bnRlbnRzOwogCiBjbGFzcyBSdWxlRGF0YSB7CiBwdWJsaWM6Ci0gICAgUnVsZURhdGEoU3R5bGVS
dWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRpb24sIGJvb2wgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9v
bCBpblJlZ2lvblJ1bGUpOworICAgIFJ1bGVEYXRhKFN0eWxlUnVsZSosIHVuc2lnbmVkIHNlbGVj
dG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBhZGRSdWxlU3RhdGUpOwogCiAg
ICAgdW5zaWduZWQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAgICAg
U3R5bGVSdWxlKiBydWxlKCkgY29uc3QgeyByZXR1cm4gbV9ydWxlOyB9CkBAIC01NSw2ICs2Miw3
IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9saW5rTWF0Y2hUeXBlOyB9CiAgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOyB9CiAgICAgYm9vbCBp
c0luUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNJblJlZ2lvblJ1bGU7IH0KKyAgICB2
b2lkIGluY3JlYXNlU3BlY2lmaWNpdHkodW5zaWduZWQgdmFsdWUpIHsgbV9zcGVjaWZpY2l0eSAr
PSB2YWx1ZTsgfQogCiAgICAgLy8gVHJ5IHRvIGJhbGFuY2UgYmV0d2VlbiBtZW1vcnkgdXNhZ2Ug
KHRoZXJlIGNhbiBiZSBsb3RzIG9mIFJ1bGVEYXRhIG9iamVjdHMpIGFuZCBnb29kIGZpbHRlcmlu
ZyBwZXJmb3JtYW5jZS4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUlkZW50aWZp
ZXJDb3VudCA9IDQ7CkBAIC05OCw4ICsxMDYsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFJ1
bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImLCBTdHlsZVJlc29sdmVyKiA9IDAsIGNvbnN0IENvbnRhaW5lck5vZGUqID0gMCk7CiAKLSAg
ICB2b2lkIGFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUg
PSBmYWxzZSk7Ci0gICAgdm9pZCBhZGRSdWxlKFN0eWxlUnVsZSosIHVuc2lnbmVkIHNlbGVjdG9y
SW5kZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hl
Y2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKKyAgICB2b2lkIGFkZFN0
eWxlUnVsZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBhZGRSdWxlU3RhdGUpOworICAgIHZvaWQgYWRk
UnVsZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBhZGRSdWxl
U3RhdGUpOwogICAgIHZvaWQgYWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSopOwogICAgIHZvaWQg
YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBS
dWxlRGF0YSYpOwogICAgIHZvaWQgYWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qLCBib29s
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwCmluZGV4IDM2YzhiNmI1ZjdhNjMzNDY4ZjlhM2Y1ZjE4MzA2NGIyMjE4NGNhYzQuLjc2M2Zm
ZDI5MDMzMWFhMjNiN2M2ZDkzNGYzMDM3MDYyMWFhMWUwZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlICJDb3VudGVyQ29udGVu
dC5oIgogI2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgogI2luY2x1ZGUgIkZv
bnRGZWF0dXJlVmFsdWUuaCIKICNpbmNsdWRlICJGb250VmFsdWUuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgpAQCAtMzgyLDcgKzM4Myw3IEBAIHN0YXRpYyBQYXNzT3duUHRyPFJ1bGVTZXQ+IG1ha2VS
dWxlU2V0KGNvbnN0IFZlY3RvcjxSdWxlRmVhdHVyZT4mIHJ1bGVzKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBPd25QdHI8UnVsZVNldD4gcnVsZVNldCA9IFJ1bGVTZXQ6OmNyZWF0ZSgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBydWxlU2V0
LT5hZGRSdWxlKHJ1bGVzW2ldLnJ1bGUsIHJ1bGVzW2ldLnNlbGVjdG9ySW5kZXgsIHJ1bGVzW2ld
Lmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGZhbHNlKTsKKyAgICAgICAgcnVsZVNldC0+YWRk
UnVsZShydWxlc1tpXS5ydWxlLCBydWxlc1tpXS5zZWxlY3RvckluZGV4LCBydWxlc1tpXS5oYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luID8gUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gOiAw
KTsKICAgICBydWxlU2V0LT5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiBydWxlU2V0LnJlbGVh
c2UoKTsKIH0KQEAgLTQ3OSw2ICs0ODAsMzEgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRB
dXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlAKICAg
ICAgICAgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250
U2VsZWN0b3IoKSk7CiB9CiAKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkSG9zdFJ1bGUoU3R5bGVS
dWxlSG9zdCogaG9zdFJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAgaWYgKCFzY29wZSB8fCAhc2NvcGUtPmlzSW5T
aGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jv
b3QgPSBzY29wZS0+c2hhZG93Um9vdCgpOworICAgIGlmICghc2hhZG93Um9vdCB8fCAhc2hhZG93
Um9vdC0+aG9zdCgpKQorICAgICAgICByZXR1cm47CisgICAgc2hhZG93Um9vdC0+b3duZXIoKS0+
Y2xlYXJIYXNNYXRjaGVkSG9zdFJ1bGUoKTsKKworICAgIFNjb3BlZFJ1bGVTZXRNYXA6OkFkZFJl
c3VsdCBhZGRSZXN1bHQgPSBtX2F0SG9zdFJ1bGVzLmFkZChzaGFkb3dSb290LCBudWxscHRyKTsK
KyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IGhvc3RSdWxlLT5jaGlsZFJ1bGVzKCk7Cisg
ICAgdW5zaWduZWQgYWRkU3RhdGVSdWxlID0gaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA/IFJ1
bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogMDsKKyAgICBhZGRTdGF0ZVJ1bGUgfD0gUnVs
ZUNhblVzZUZhc3RDaGVja1NlbGVjdG9yIHwgUnVsZUlzSG9zdFJ1bGU7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3R5bGVS
dWxlQmFzZSogaG9zdFN0eWxpbmdSdWxlID0gY2hpbGRSdWxlc1tpXS5nZXQoKTsKKyAgICAgICAg
aWYgKGhvc3RTdHlsaW5nUnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPiho
b3N0U3R5bGluZ1J1bGUpLCBhZGRTdGF0ZVJ1bGUpOworICAgIH0KK30KKworCiAjaWYgRU5BQkxF
KFNUWUxFX1NDT1BFRCkKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0dXBTY29wZVN0YWNrKGNvbnN0
IENvbnRhaW5lck5vZGUqIHBhcmVudCkKIHsKQEAgLTg0NCw2ICs4NzAsNjQgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJv
b2wgaW5jbHVkZUVtcHQKICNlbmRpZgogfQogCitpbmxpbmUgUnVsZVNldCogU3R5bGVSZXNvbHZl
cjo6YXRIb3N0UnVsZVNldEZvclNjb3BlKGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCit7
CisgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0SG9zdFJ1bGVz
LmZpbmQoc2hhZG93Um9vdCk7CisgICAgcmV0dXJuIGl0ICE9IG1fYXRIb3N0UnVsZXMuZW5kKCkg
PyBpdC0+dmFsdWUuZ2V0KCkgOiAwOyAKK30KKworCitib29sIFN0eWxlUmVzb2x2ZXI6Om1hdGNo
ZXNIb3N0UnVsZXMoKQoreworICAgIGlmIChtX2F0SG9zdFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgRWxlbWVudFNoYWRvdyogc2hhZG93ID0gbV9lbGVtZW50
LT5zaGFkb3coKTsKKyAgICBpZiAoIXNoYWRvdykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChzaGFkb3ctPmhhc01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1
cm4gc2hhZG93LT5oYXNNYXRjaGVkSG9zdFJ1bGUoKTsKKworICAgIGZvciAoU2hhZG93Um9vdCog
c2hhZG93Um9vdCA9IHNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7IHNoYWRvd1Jvb3Q7IHNo
YWRvd1Jvb3QgPSBzaGFkb3dSb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeworICAgICAgICBpZiAo
YXRIb3N0UnVsZVNldEZvclNjb3BlKHNoYWRvd1Jvb3QpKSB7CisgICAgICAgICAgICBzaGFkb3ct
PnNldEhhc01hdGNoZWRIb3N0UnVsZSh0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmICghc2hhZG93Um9vdC0+aGFzU2hhZG93SW5zZXJ0aW9uUG9p
bnQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBzaGFkb3ctPnNldEhhc01hdGNo
ZWRIb3N0UnVsZShmYWxzZSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFN0eWxlUmVz
b2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpCit7CisgICAgaWYgKG1fYXRIb3N0UnVsZXMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBtX2VsZW1lbnQtPnNoYWRvdygp
OworICAgIGlmICghc2hhZG93KQorICAgICAgICByZXR1cm47CisgICAgLy8gSWYgQWxyZWFkeSBr
bm93IHdoZXRoZXIgdGhlcmUgZXhpc3QgYW55IG1hdGNoZWQgaG9zdCBydWxlcyBvciBub3QsIHNl
ZS4KKyAgICBpZiAoc2hhZG93LT5oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUoKSAmJiAhc2hh
ZG93LT5oYXNNYXRjaGVkSG9zdFJ1bGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9y
PFJ1bGVTZXQqLCAxNj4gbWF0Y2hlZFJ1bGVzOyAKKyAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRv
d1Jvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dSb290OyBzaGFkb3dS
b290ID0gc2hhZG93Um9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsgCisgICAgICAgIGlmIChSdWxl
U2V0KiBydWxlU2V0ID0gYXRIb3N0UnVsZVNldEZvclNjb3BlKHNoYWRvd1Jvb3QpKQorICAgICAg
ICAgICAgbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlU2V0KTsKKyAgICAgICAgaWYgKCFzaGFkb3dS
b290LT5oYXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGlmIChtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBNYXRjaE9wdGlvbnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgb3B0aW9ucy5z
Y29wZSA9IG1fZWxlbWVudDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6
ZSgpOyBpID4gMDsgLS1pKQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaGVkUnVs
ZXMuYXQoaS0xKSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMu
bGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOworfQorCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNo
QXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykK
IHsKICAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwpAQCAtODU4LDYgKzk0Miw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzCiAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV9h
dXRob3JTdHlsZS5nZXQoKSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5y
YW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOwogCiAgICAgbWF0Y2hTY29wZWRBdXRob3JS
dWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaEhvc3RSdWxlcyhyZXN1
bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKIAogICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxl
cyhyZXN1bHQpOwogfQpAQCAtMTQyNSw2ICsxNTEwLDkgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVz
b2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAvLyBDYW4ndCBzaGFyZSBpZiBhdHRyaWJ1
dGUgcnVsZXMgYXBwbHkuCiAgICAgaWYgKG1hdGNoZXNSdWxlU2V0KG1fdW5jb21tb25BdHRyaWJ1
dGVSdWxlU2V0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gQ2FuJ3Qgc2hhcmUg
aWYgQGhvc3QgQC1ydWxlcyBhcHBseS4KKyAgICBpZiAobWF0Y2hlc0hvc3RSdWxlcygpKQorICAg
ICAgICByZXR1cm4gMDsKICAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCByZXF1aXJlcyB1bmlx
dWUgc3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0aGUgc2libGluZyBy
dWxlIG1hdGNoIGFib3ZlLgogICAgIGlmIChwYXJlbnRTdHlsZVByZXZlbnRzU2hhcmluZyhtX3Bh
cmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
aAppbmRleCBhZmI3YTQ4NTYyYWQ3OGZkMjljMDI0YTM2N2I0ZTI4NmZmZWIzMTY2Li5kZThmNDg4
MWNlMjE1NTkwMDVkMTBkNjU4MmFlOWY3ZDVjNGMwMjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmgKQEAgLTcyLDYgKzcyLDcgQEAgY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xhc3MgUnVs
ZURhdGE7CiBjbGFzcyBSdWxlU2V0OwogY2xhc3MgU2V0dGluZ3M7CitjbGFzcyBTaGFkb3dSb290
OwogY2xhc3MgU3RhdGljQ1NTUnVsZUxpc3Q7CiBjbGFzcyBTdHlsZUJ1aWxkZXI7CiBjbGFzcyBT
dHlsZUltYWdlOwpAQCAtNzksNiArODAsNyBAQCBjbGFzcyBTdHlsZUtleWZyYW1lOwogY2xhc3Mg
U3R5bGVQZW5kaW5nSW1hZ2U7CiBjbGFzcyBTdHlsZVByb3BlcnR5U2V0OwogY2xhc3MgU3R5bGVS
dWxlOworY2xhc3MgU3R5bGVSdWxlSG9zdDsKIGNsYXNzIFN0eWxlUnVsZUtleWZyYW1lczsKIGNs
YXNzIFN0eWxlUnVsZVBhZ2U7CiBjbGFzcyBTdHlsZVJ1bGVSZWdpb247CkBAIC0xMzYsNiArMTM4
LDcgQEAgcHVibGljOgogICAgIHZvaWQgcG9wUGFyZW50RWxlbWVudChFbGVtZW50Kik7CiAgICAg
dm9pZCBwdXNoUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290Kik7CiAgICAgdm9pZCBw
b3BQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKKyAgICB2b2lkIGFkZEhvc3RS
dWxlKFN0eWxlUnVsZUhvc3QqLCBib29sLCBjb25zdCBDb250YWluZXJOb2RlKik7CiAKICAgICBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCosIFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFN0eWxlU2hhcmluZ0JlaGF2aW9yID0gQWxsb3dTdHlsZVNo
YXJpbmcsCiAgICAgICAgIFJ1bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0Y2hBbGxSdWxlcywgUmVu
ZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gMCk7CkBAIC0xNzMsNiArMTc2LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGNvbGxlY3RGZWF0dXJlcygpOwogICAgIFJlbmRlclN0eWxlKiBsb2Nh
dGVTaGFyZWRTdHlsZSgpOwogICAgIGJvb2wgbWF0Y2hlc1J1bGVTZXQoUnVsZVNldCopOworICAg
IGJvb2wgbWF0Y2hlc0hvc3RSdWxlcygpOwogICAgIE5vZGUqIGxvY2F0ZUNvdXNpbkxpc3QoRWxl
bWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDb3VudCkgY29uc3Q7CiAgICAgU3R5
bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSosIHVuc2lnbmVkJiBj
b3VudCkgY29uc3Q7CiAgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxl
bWVudCopIGNvbnN0OwpAQCAtMzMzLDYgKzMzNyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXRj
aEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAg
dm9pZCBtYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
OwogICAgIHZvaWQgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmLCBi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1
bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1h
dGNoT3B0aW9ucyYpOwogICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oUnVs
ZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0
Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3Qg
VmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRl
eCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CkBAIC00OTMsMTEgKzQ5OCwxMyBAQCBwcml2YXRlOgog
ICAgIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVmUHRyPFdlYktpdENTU1NWR0RvY3VtZW50
VmFsdWU+ID4gbV9wZW5kaW5nU1ZHRG9jdW1lbnRzOwogI2VuZGlmCiAKKyAgICB0eXBlZGVmIEhh
c2hNYXA8Y29uc3QgQ29udGFpbmVyTm9kZSosIE93blB0cjxSdWxlU2V0PiA+IFNjb3BlZFJ1bGVT
ZXRNYXA7CisKKyAgICBSdWxlU2V0KiBhdEhvc3RSdWxlU2V0Rm9yU2NvcGUoY29uc3QgU2hhZG93
Um9vdCopOworCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICBjb25zdCBDb250YWluZXJO
b2RlKiBkZXRlcm1pbmVTY29wZShjb25zdCBDU1NTdHlsZVNoZWV0Kik7CiAKLSAgICB0eXBlZGVm
IEhhc2hNYXA8Y29uc3QgQ29udGFpbmVyTm9kZSosIE93blB0cjxSdWxlU2V0PiA+IFNjb3BlZFJ1
bGVTZXRNYXA7Ci0KICAgICBSdWxlU2V0KiBydWxlU2V0Rm9yU2NvcGUoY29uc3QgQ29udGFpbmVy
Tm9kZSopIGNvbnN0OwogCiAgICAgdm9pZCBzZXR1cFNjb3BlU3RhY2soY29uc3QgQ29udGFpbmVy
Tm9kZSopOwpAQCAtNTIwLDYgKzUyNyw3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgQ29udGFpbmVy
Tm9kZSogbV9zY29wZVN0YWNrUGFyZW50OwogICAgIGludCBtX3Njb3BlU3RhY2tQYXJlbnRCb3Vu
ZHNJbmRleDsKICNlbmRpZgorICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9hdEhvc3RSdWxlczsKIAog
ICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcApp
bmRleCA3M2IwYWYyNmNlNDJhYTQ1OTRkOWI3NjE3OTZiMTlkNmE2YmI2NjVjLi5mZDVjMGMzMDJk
M2RhMTMzOWEwOWY2NTQ0NTllMGNkNDEzMzE0ZTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNw
cApAQCAtNzksNiArNzksOSBAQCB2b2lkIFN0eWxlUnVsZUJhc2U6OnJlcG9ydE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAgICAgY2FzZSBLZXlm
cmFtZXM6CiAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZUtleWZyYW1lcyo+KHRo
aXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7CiAgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEhvc3Q6CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFN0
eWxlUnVsZUJsb2NrKj4odGhpcyktPnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShtZW1vcnlP
YmplY3RJbmZvKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVW5rbm93bjoKICAgICBjYXNl
IENoYXJzZXQ6CiAgICAgY2FzZSBLZXlmcmFtZToKQEAgLTExNyw2ICsxMjAsOSBAQCB2b2lkIFN0
eWxlUnVsZUJhc2U6OmRlc3Ryb3koKQogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICBkZWxl
dGUgc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4odGhpcyk7CiAgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEhvc3Q6CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVI
b3N0Kj4odGhpcyk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFVua25vd246CiAgICAgY2Fz
ZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xNTAsNiArMTU2LDggQEAgUGFzc1Jl
ZlB0cjxTdHlsZVJ1bGVCYXNlPiBTdHlsZVJ1bGVCYXNlOjpjb3B5KCkgY29uc3QKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgY2FzZSBLZXlmcmFtZXM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqPih0aGlzKS0+Y29weSgpOworICAgIGNhc2UgSG9z
dDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZUhvc3QqPih0aGlz
KS0+Y29weSgpOwogICAgIGNhc2UgVW5rbm93bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2Fz
ZSBLZXlmcmFtZToKQEAgLTE5MSw2ICsxOTksNyBAQCBQYXNzUmVmUHRyPENTU1J1bGU+IFN0eWxl
UnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcihDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldAog
ICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICBydWxlID0gV2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZTo6Y3JlYXRlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHNlbGYpLCBwYXJlbnRT
aGVldCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgSG9zdDoKICAgICBjYXNlIFVua25vd246
CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0zODEsNCArMzkwLDE0
IEBAIHZvaWQgU3R5bGVSdWxlUmVnaW9uOjpyZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVt
b3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0CiAgICAgaW5mby5hZGRNZW1iZXIobV9zZWxlY3Rv
ckxpc3QpOwogfQogCitTdHlsZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KFZlY3RvcjxSZWZQdHI8
U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcykKKyAgICA6IFN0eWxlUnVsZUJsb2NrKEhvc3Qs
IGFkb3B0UnVsZXMpCit7Cit9CisKK1N0eWxlUnVsZUhvc3Q6OlN0eWxlUnVsZUhvc3QoY29uc3Qg
U3R5bGVSdWxlSG9zdCYgbykKKyAgICA6IFN0eWxlUnVsZUJsb2NrKG8pCit7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1
bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAppbmRleCBlMTVmMzJlNDAyYWFm
MjA4ZDNjYzBmY2NkMzU4NDc3YjIzMDM1NjM0Li43YWQzMTNlY2VhOGJiZmIxZjYzMGEyYzU0ZDk3
YjI0NDE3MzAzOTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1
YmxpYzoKICAgICAgICAgUGFnZSwKICAgICAgICAgS2V5ZnJhbWVzLAogICAgICAgICBLZXlmcmFt
ZSwgLy8gTm90IHVzZWQuIFRoZXNlIGFyZSBpbnRlcm5hbGx5IG5vbi1ydWxlIFN0eWxlS2V5ZnJh
bWUgb2JqZWN0cy4KKyAgICAgICAgSG9zdCwKICAgICAgICAgUmVnaW9uID0gMTYKICAgICB9Owog
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7
IH0KQEAgLTU4LDYgKzU5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTdHlsZVJ1bGUoKSBjb25z
dCB7IHJldHVybiB0eXBlKCkgPT0gU3R5bGU7IH0KICAgICBib29sIGlzUmVnaW9uUnVsZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBSZWdpb247IH0KICAgICBib29sIGlzSW1wb3J0UnVsZSgp
IGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBJbXBvcnQ7IH0KKyAgICBib29sIGlzSG9zdFJ1bGUo
KSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSG9zdDsgfQogCiAgICAgUGFzc1JlZlB0cjxTdHls
ZVJ1bGVCYXNlPiBjb3B5KCkgY29uc3Q7CiAKQEAgLTIyMyw2ICsyMjUsMjAgQEAgcHJpdmF0ZToK
ICAgICBDU1NTZWxlY3Rvckxpc3QgbV9zZWxlY3Rvckxpc3Q7CiB9OwogCitjbGFzcyBTdHlsZVJ1
bGVIb3N0IDogcHVibGljIFN0eWxlUnVsZUJsb2NrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHlsZVJ1bGVIb3N0PiBjcmVhdGUoVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNl
PiA+JiBhZG9wdFJ1bGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHls
ZVJ1bGVIb3N0KGFkb3B0UnVsZXMpKTsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRyPFN0eWxlUnVs
ZUhvc3Q+IGNvcHkoKSBjb25zdCB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVSdWxlSG9zdCgq
dGhpcykpOyB9CisKK3ByaXZhdGU6CisgICAgU3R5bGVSdWxlSG9zdChWZWN0b3I8UmVmUHRyPFN0
eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpOworICAgIFN0eWxlUnVsZUhvc3QoY29uc3QgU3R5
bGVSdWxlSG9zdCYpOworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
U3R5bGVSdWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29u
dGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKaW5k
ZXggZTdjZTgxZWFhYjQ4NzE4NjI0ZjRlYjU1MjM4ZTVjMWFmMzU2ODViOC4uMzllOWE3YjJjZDZj
MjE5M2JiMDQ5ODBmYTg4YTgyNzIxZTRhMjNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2hlZXRDb250ZW50cy5jcHAKQEAgLTQzNSw2ICs0MzUsMTAgQEAgc3RhdGljIGJvb2wgY2hpbGRS
dWxlc0hhdmVGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKGNvbnN0IFZlY3RvcjxSZWZQdHI8
U3R5bGUKICAgICAgICAgICAgIGlmIChjaGlsZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJy
ZXNvdXJjZXMoc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlUmVnaW9uKj4ocnVsZSktPmNoaWxk
UnVsZXMoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpIb3N0OgorICAgICAgICAgICAgaWYgKGNo
aWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcyhzdGF0aWNfY2FzdDxjb25z
dCBTdHlsZVJ1bGVIb3N0Kj4ocnVsZSktPmNoaWxkUnVsZXMoKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdHlsZVJ1bGVC
YXNlOjpJbXBvcnQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
Y2FzZSBTdHlsZVJ1bGVCYXNlOjpQYWdlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3Bw
CmluZGV4IGFlYjViNWI0NzViMjE5YmM1N2RjODVlZjJlN2I4MzJhZWU4ODkzZmMuLjgwOWJjYzg3
ODIyZTUxNGNkOGQ2NGMzZGI4ZDMyYWM3NTg3NjBlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dFNoYWRvdy5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRWxl
bWVudFNoYWRvdzo6RWxlbWVudFNoYWRvdygpCisgICAgOiBtX2hhc01hdGNoZWRIb3N0UnVsZUF2
YWlsYWJsZShmYWxzZSkKIHsKIH0KIApAQCAtODksNiArOTAsMTAgQEAgdm9pZCBFbGVtZW50U2hh
ZG93OjphZGRTaGFkb3dSb290KEVsZW1lbnQqIHNoYWRvd0hvc3QsIFBhc3NSZWZQdHI8U2hhZG93
Um9vdD4gc2gKICAgICBpZiAoc2hhZG93SG9zdC0+YXR0YWNoZWQoKSkKICAgICAgICAgc2hhZG93
SG9zdC0+bGF6eVJlYXR0YWNoKCk7CiAKKyAgICAvLyBBcyBhIG5ldyBzaGFkb3cgZG9tIHN1YnRy
ZWUgbWlnaHQgaGF2ZSBAaG9zdCBALXJ1bGVzLCBuZWVkIHRvIGRpc2FibGUKKyAgICAvLyBoYXNN
YXRjaGVkSG9zdFJ1bGVzIGNhY2hlLgorICAgIGNsZWFySGFzTWF0Y2hlZEhvc3RSdWxlKCk7CisK
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hTaGFkb3dSb290KHNoYWRvd0hv
c3QsIHNoYWRvd1Jvb3QuZ2V0KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuaApp
bmRleCBkZGI0MzgwNmJkZTE1MzlmYzdhZGMyYjlkODY5MmNlNzIzYzgzM2Y2Li41MTU2OWI2YTZh
YjU2NmJmNGE5YmE0NTEzYjY0MGQzODVkNDVmODYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hh
ZG93LmgKQEAgLTcxLDExICs3MSwxOCBAQCBwdWJsaWM6CiAgICAgQ29udGVudERpc3RyaWJ1dG9y
JiBkaXN0cmlidXRvcigpOwogICAgIGNvbnN0IENvbnRlbnREaXN0cmlidXRvciYgZGlzdHJpYnV0
b3IoKSBjb25zdDsKIAorICAgIGJvb2wgaGFzTWF0Y2hlZEhvc3RSdWxlKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNNYXRjaGVkSG9zdFJ1bGU7IH0KKyAgICBib29sIGhhc01hdGNoZWRIb3N0UnVsZUF2
YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlOyB9
CisgICAgdm9pZCBjbGVhckhhc01hdGNoZWRIb3N0UnVsZSgpIHsgbV9oYXNNYXRjaGVkSG9zdFJ1
bGVBdmFpbGFibGUgPSBmYWxzZTsgfQorICAgIHZvaWQgc2V0SGFzTWF0Y2hlZEhvc3RSdWxlKGJv
b2wgaGFzUnVsZSkgeyBtX2hhc01hdGNoZWRIb3N0UnVsZSA9IGhhc1J1bGU7IG1faGFzTWF0Y2hl
ZEhvc3RSdWxlQXZhaWxhYmxlID0gdHJ1ZTsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgaW52YWxp
ZGF0ZURpc3RyaWJ1dGlvbihFbGVtZW50KiBob3N0KTsKIAogICAgIERvdWJseUxpbmtlZExpc3Q8
U2hhZG93Um9vdD4gbV9zaGFkb3dSb290czsKICAgICBDb250ZW50RGlzdHJpYnV0b3IgbV9kaXN0
cmlidXRvcjsKKyAgICBib29sIG1faGFzTWF0Y2hlZEhvc3RSdWxlOworICAgIGJvb2wgbV9oYXNN
YXRjaGVkSG9zdFJ1bGVBdmFpbGFibGU7CiB9OwogCiBpbmxpbmUgU2hhZG93Um9vdCogRWxlbWVu
dFNoYWRvdzo6eW91bmdlc3RTaGFkb3dSb290KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290
LmNwcAppbmRleCA1MTgwYTFjMjJkODQ4OTRlMzcwZjVjMTYyYjZhM2FjOGZmNmZkNDI1Li4zOTYw
NGI5MTY0MDcwNGQxZjllOGZjOTU3MTcyODJiZjg3OGMxMzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRv
d1Jvb3QuY3BwCkBAIC0yMjQsNiArMjI0LDcgQEAgdm9pZCBTaGFkb3dSb290OjpjaGlsZHJlbkNo
YW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSoKIHsK
ICAgICBDb250YWluZXJOb2RlOjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBiZWZv
cmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOwogICAgIG93bmVyKCktPmlu
dmFsaWRhdGVEaXN0cmlidXRpb24oKTsKKyAgICBvd25lcigpLT5jbGVhckhhc01hdGNoZWRIb3N0
UnVsZSgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZDdmZGM2Yjg3MTE3OWI4ODRmZjNkZTk0ODQ2M2JhYmZl
ZGQxNmRiOC4uODhmNzc4NWI5ODdiNDE3YjRhZTU1NDgxNmU5MzFkNzllMWI5OTdhZiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEzIEBACisyMDEyLTEwLTA5ICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29v
Z2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0gTmVlZHMgQGhvc3QgcnVsZSBmb3IgU2hh
ZG93RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg4NjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMuaHRtbDogQWRkZWQu
CisKIDIwMTItMTAtMDggIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBOb3QgcmV2aWV3ZWQuIFJlYmFzZWxpbmVzIGZvciBDaHJvbWl1bS4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmExZjNiMWMyNTUxNjk1Njc4NzI1YmQ2NjUxODEzMTM0Mzg2NDlhMTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0
OiByZ2IoMjU1LCAwLCAwKQoraG9zdEE6IHJnYigyNTUsIDAsIDApCitob3N0QjogcmdiKDAsIDAs
IDI1NSkKK2hvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMTI4LCAxMjgsIDEyOCkKK2hv
c3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDEyOCwg
MTI4LCAxMjgpCitob3N0OiByZ2IoMjU1LCAyNTUsIDApCitob3N0OiByZ2IoMjU1LCAwLCAwKQor
bmVzdGVkSG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0OiBy
Z2IoMjU1LCAyNTUsIDApCitIZWxsbwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L2F0aG9zdC1hdHJ1bGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cv
YXRob3N0LWF0cnVsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDRiNTExZWUwMmZhOWQ3NTFlNTdlMTY5
YjAwYTZkODc3ZDUzYTZkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L2F0aG9zdC1hdHJ1bGVzLmh0bWwKQEAgLTAsMCArMSwxOTAgQEAKKzwhRE9DVFlQRSBo
dG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyNob3N0IHsKKyAgY29sb3I6IGdyYXk7Cit9
Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3BvbHlmaWxsLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBkdW1wQ29tcHV0ZWRTdHlsZShub2RlKQoreworICAgIGRl
YnVnKG5vZGUuaWQgKyAiOiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHls
ZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKK30KKworZnVuY3Rpb24g
cHJlcHJvY2Vzc0ZvclRlc3QoKQoreworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicGFyZW50Iik7CisgICAgcGFyZW50LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJob3N0
Ij48c3Bhbj5IZWxsbzwvc3Bhbj48L2Rpdj4nOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlQ29u
dGVudENhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2Vi
S2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9z
dCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7Cisg
ICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVTaGFk
b3dDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktp
dFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3Qg
eyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBk
dW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdEhvc3RXaXRoU2VsZWN0
b3IoKQoreworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyZW50
Iik7CisgICAgcGFyZW50LmlubmVySFRNTCA9ICI8c3R5bGUgc2NvcGVkPiAuaG9zdCB7IGNvbG9y
OiBncmF5IH07PC9zdHlsZT4iCisgICAgICAgICsgIjxkaXYgaWQ9J2hvc3RBJyBjbGFzcz0naG9z
dCc+PHNwYW4+SGVsbG88L3NwYW4+PC9kaXY+IgorICAgICAgICArICI8c3BhbiBpZD0naG9zdEIn
IGNsYXNzPSdob3N0Jz48c3Bhbj5Xb3JsZDwvc3Bhbj48L3NwYW4+IjsKKworICAgIHZhciBob3N0
QSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0QSIpOworICAgIHZhciBzaGFkb3dBID0g
bmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdEEpOworICAgIHZhciBzdHlsZSA9ICI8c3R5bGU+QGhv
c3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IHNwYW4geyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT4i
OworICAgIHNoYWRvd0EuaW5uZXJIVE1MID0gc3R5bGUgKyAiPHNoYWRvdz48L3NoYWRvdz4iOwor
CisgICAgdmFyIGhvc3RCID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3RCIik7CisgICAg
dmFyIHNoYWRvd0IgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0Qik7CisgICAgc2hhZG93Qi5p
bm5lckhUTUwgPSBzdHlsZSArICI8c2hhZG93Pjwvc2hhZG93PiI7CisKKyAgICBkdW1wQ29tcHV0
ZWRTdHlsZShob3N0QSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdEIpOworfQorCitmdW5j
dGlvbiB0ZXN0UHNldWRvSG9zdFdpdGhTY29wZWQoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0
KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAg
IHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5u
ZXJIVE1MID0gIjxkaXY+PHN0eWxlIHNjb3BlZD5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0g
fTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz48ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBkaXYg
eyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48L2Rpdj48L2Rpdj4iOworICAgIGR1bXBDb21wdXRl
ZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0UHNldWRvSG9zdFdpdGhGYWxsYmFja1No
YWRvdygpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBX
ZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJL
aXRTaGFkb3dSb290KGhvc3QpOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxl
PkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+
IjsKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PHNoYWRvdz48L3No
YWRvdz48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVu
Y3Rpb24gdGVzdFR3b1NoYWRvd1Jvb3RzQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3Qo
KTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAg
dmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5
b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG9sZGVzdFNo
YWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9z
dHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwg
PSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+PHNoYWRvdz48
L3NoYWRvdz4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0
ZXN0VHdvU2hhZG93Um9vdHNDcmVhdGluZ0RpZmZlcmVudE9yZGVyQ2FzZSgpCit7CisgICAgcHJl
cHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhv
c3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3Qp
OworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBj
b2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hh
ZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0
eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOwor
fQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvd0NvbnRl
bnQoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2Vi
S2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgb2xkZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hh
ZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dS
b290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290
KGhvc3QpOworCisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzaGFkb3c+PC9zaGFk
b3c+IjsKKyAgICB5b3VuZ2VyU2hhZG93LmlubmVySFRNTCA9ICI8Y29udGVudD48L2NvbnRlbnQ+
IjsKKyAgICBvbGRlclNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29s
b3I6IGdyZWVuOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBvbGRlc3RTaGFk
b3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5
bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9
CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3RzV2l0aEluZXJ0U2hhZG93KCkKK3sK
KyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QoaG9zdCk7CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3Qo
aG9zdCk7CisgICAgdmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsK
KworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBj
b2xvcjogeWVsbG93OyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICB5b3VuZ2Vy
U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsgfSB9
PC9zdHlsZT48ZGl2PmluZXJ0PC9kaXY+IjsKKyAgICBvbGRlclNoYWRvdy5pbm5lckhUTUwgPSAi
PHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGdyZWVuOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9z
aGFkb3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRp
diB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVt
cENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3ROZXN0ZWRDYXNlKCkKK3sK
KyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb3V0ZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93
Um9vdChob3N0KTsKKyAgICBvdXRlclNoYWRvdy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0IHsg
ZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48ZGl2IGlkPSJuZXN0ZWRIb3N0Ij5Jbm5lclNo
YWRvdzwvZGl2Pic7CisgICAgdmFyIG5lc3RlZCA9IG91dGVyU2hhZG93LmdldEVsZW1lbnRCeUlk
KCJuZXN0ZWRIb3N0Iik7CisgICAgdmFyIGlubmVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jv
b3QobmVzdGVkKTsKKyAgICBpbm5lclNoYWRvdy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0IHsg
ZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+U2hvdyA8c2hhZG93Pjwvc2hhZG93PiBpbiBv
dXRlci4nOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworICAgIGR1bXBDb21wdXRlZFN0
eWxlKG5lc3RlZCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpCit7Cisg
ICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJob3N0Iik7CisgICAgaG9zdC5pbm5lckhUTUwgPSAiPHN0eWxlIHNjb3BlZD4jaG9z
dCB7IGNvbG9yOiB5ZWxsb3c7IH08L3N0eWxlPjxzcGFuPkhlbGxvPC9zcGFuPiI7CisgICAgdmFy
IHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhU
TUwgPSAiPHN0eWxlPkBob3N0IHsgI2hvc3QgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250
ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5j
dGlvbiB0ZXN0SG9zdFZzSW5saW5lU3R5bGUoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7
CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIGhv
c3Quc3R5bGUuY29sb3IgPSAieWVsbG93IjsKKyAgICBob3N0LmlubmVySFRNTCA9ICI8c3Bhbj5I
ZWxsbzwvc3Bhbj4iOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBy
ZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5
bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3RzKCkKK3sKKyAgICB0ZXN0U2ltcGxlQ29u
dGVudENhc2UoKTsKKyAgICB0ZXN0U2ltcGxlU2hhZG93Q2FzZSgpOworICAgIHRlc3RIb3N0V2l0
aFNlbGVjdG9yKCk7CisgICAgdGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVkKCk7CisgICAgdGVzdFBz
ZXVkb0hvc3RXaXRoRmFsbGJhY2tTaGFkb3coKTsKKyAgICB0ZXN0VHdvU2hhZG93Um9vdHNDYXNl
KCk7CisgICAgdGVzdFR3b1NoYWRvd1Jvb3RzQ3JlYXRpbmdEaWZmZXJlbnRPcmRlckNhc2UoKTsK
KyAgICB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvd0NvbnRlbnQoKTsKKyAg
ICB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvdygpOworICAgIHRlc3ROZXN0
ZWRDYXNlKCk7CisgICAgdGVzdEhvc3RWc1Njb3BlZFN0eWxlKCk7CisgICAgdGVzdEhvc3RWc0lu
bGluZVN0eWxlKCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVz
dHMoKSI+CisgIDxkaXYgaWQ9InBhcmVudCI+CisgIDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167949</attachid>
            <date>2012-10-10 01:01:36 -0700</date>
            <delta_ts>2012-10-11 00:50:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88606-20121010170036.patch</filename>
            <type>text/plain</type>
            <size>44181</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzcyYThhMTA0Yzg0YmM1
NDVmMjhlNWY4ZWU1NTE3N2JlNTllMjlhOC4uOWFjNTgzZTI1MWNlMTkwNWYzN2Y0YTcxNWIyYjlk
NTNlMjljYmZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOSBAQAorMjAxMi0xMC0xMCAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01d
IE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIEBob3N0LUBydWxlcyBh
Y2NvcmRpbmcgdG8gdGhlIHNoYWRvdyBkb20gc3BlYzoKKyAgICAgICAgaHR0cDovL2R2Y3MudzMu
b3JnL2hnL3dlYmNvbXBvbmVudHMvcmF3LWZpbGUvdGlwL3NwZWMvc2hhZG93L2luZGV4Lmh0bWwj
aG9zdC1hdC1ydWxlCisgICAgICAgIFRoZSBkZXNpZ24gZG9jIGlzOgorICAgICAgICBodHRwczov
L2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFQMnlvcmNoRjhsY2kyc2Njci1tVlNSZjJkdHZq
S2VpdXlRV3pDQjJiRUE4L2VkaXQKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvYXRo
b3N0LWF0cnVsZXMuaHRtbAorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAg
QWRkZWQgcnVsZXMgZm9yIHBhcnNpbmcgQGhvc3QgQC1ydWxlcy4KKyAgICAgICAgKiBjc3MvQ1NT
UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbik6
CisgICAgICAgIEFkZGVkIGEgbmV3IHRva2VuICJAaG9zdCIuCisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKToKKyAgICAgICAgQWRkZWQgYSBuZXcgbWV0aG9kIHRv
IGNyZWF0ZSBhbiBAaG9zdCBALXJ1bGUsIHdoaWNoIGlzIGludm9rZWQgZnJvbQorICAgICAgICBD
U1NHcmFtbWFyLnkuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2Vy
Lmg6CisgICAgICAgIEFkZGVkIGEgZGVjbGFyYXRpb24gb2YgdGhlIGFib3ZlIG5ldyBtZXRob2Q6
IGNyZWF0ZUhvc3RSdWxlLgorICAgICAgICAqIGNzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaDoK
KyAgICAgICAgQWRkZWQgSE9TVF9SVUxFIHRvIGVudW0gVHlwZS4KKyAgICAgICAgKiBjc3MvUnVs
ZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6UnVsZURhdGEpOgorICAgICAg
ICBNb2RpZmllZCBtdWx0aXBsZSBib29sIGFyZ3VtZW50cyBpbnRvIG9uZSB1bnNpZ25lZCBhcmd1
bWVudC4gTm93IGl0CisgICAgICAgIHVzZXMgY29tYmluYXRpb25zIG9mIHZhbHVlcyBmcm9tIGVu
dW0gQWRkUnVsZVN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVT
ZXQ6OmFkZFN0eWxlUnVsZSk6CisgICAgICAgIFVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBSdWxl
RGF0YSdzIGNoYW5nZS4KKyAgICAgICAgTW9kaWZpZWQgdG8gSW52b2tlIGluY3JlYXNlU3BlY2lm
aWNpdHkgaWYgdGhlIGdpdmVuIHJ1bGUgaXMgQGhvc3QKKyAgICAgICAgQC1ydWxlLgorICAgICAg
ICAqIGNzcy9SdWxlU2V0Lmg6CisgICAgICAgIChSdWxlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpSdWxlRGF0YTo6aW5jcmVhc2VTcGVjaWZpY2l0eSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1l
dGhvZCB0byBpbmNyZWFzZSBzZWxlY3RvcidzIHNwZWNpZmljaXR5LiBUaGlzIG1ldGhvZCBpcwor
ICAgICAgICB1c2VkIHRvIG1ha2UgQGhvc3QgQC1ydWxlcycgc3BlY2lmaWNpdHkgbGFyZ2VyIHRo
YW4gbm9ybWFsIGF1dGhvcgorICAgICAgICBydWxlcycgc3BlY2lmaWNpdHkuCisgICAgICAgIChS
dWxlU2V0KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjptYWtlUnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGRI
b3N0UnVsZSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1ldGhvZCB0byByZWdpc3RlciBAaG9zdCBA
LXJ1bGVzIHdpdGggc2hhZG93IHJvb3RzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaGVzSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcg
bWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgYW55IEBob3N0IEAtcnVsZXMgd2lsbCBiZSBhcHBsaWVk
IHRvCisgICAgICAgIHRoZSBnaXZlbiBlbGVtZW50IG9yIG5vdC4gVGhpcyBpcyBwcmVwYXJlZCBm
b3Igc2hhcmVkIHN0eWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNo
SG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgbWF0Y2hlZCBob3N0IHJ1
bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhpcyBtZXRob2QgaW52b2tl
cyBTdHlsZVNjb3BlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzIHRvIGZpbmQKKyAgICAgICAgbWF0
Y2hlZCBob3N0IHJ1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hB
dXRob3JSdWxlcyk6CisgICAgICAgIE1vZGlmaWVkIHRvIGludm9rZSBtYXRjaEhvc3RSdWxlcy4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKToKKyAg
ICAgICAgRGlzYWJsZSBzaWJsaW5nIHN0eWxlIGNhY2hlIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlz
IGEgc2hhZG93IGhvc3QgYW5kCisgICAgICAgIGFueSBAaG9zdCBALXJ1bGVzIGFyZSBhcHBsaWVk
IHRvIHRoZSBlbGVtZW50LgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAg
IChTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUnVsZUJhc2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
dWxlQmFzZTo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjcmVhdGVD
U1NPTVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6U3R5bGVSdWxl
SG9zdCk6CisgICAgICAgIEltcGxlbWVudGVkIGNsYXNzIFN0eWxlUnVsZUhvc3QuIFRoZSBjbGFz
cyBpcyBhbG1vc3QgdGhlIHNhbWUgYXMKKyAgICAgICAgU3R5bGVSdWxlQmxvY2sgZXhjZXB0IHR5
cGUuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjppc0hvc3RSdWxlKToKKyAgICAgICAgKFN0eWxl
UnVsZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUhvc3Q6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZUF0SG9zdFJ1bGVTZXRGb3IpOgorICAgICAgICBB
IG5ldyBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJ1bGVTZXQgZm9yIHRoZSBnaXZlbiBzaGFkb3cg
cm9vdC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJl
c29sdmVyOjphdEhvc3RSdWxlU2V0Rm9yKToKKyAgICAgICAgQSBuZXcgcHJpdmF0ZSBpbmxpbmUg
bWV0aG9kIHRvIG9idGFpbiBAaG9zdCBALXJ1bGVzIGRlY2xhcmVkIGluCisgICAgICAgIHRoZSBn
aXZlbiBzaGFkb3cgcm9vdC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6
bWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBmaW5kIHdoZXRoZXIg
YW55IEBob3N0IEAtcnVsZXMgYXJlIGFwcGxpZWQgdG8KKyAgICAgICAgdGhlIGdpdmVuIGhvc3Qg
ZWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6bWF0Y2hIb3N0
UnVsZXMpOgorICAgICAgICBBIG5ldyBtZXRob2QgdG8gZmluZCBtYXRjaGVkIHJ1bGVzIGZvciB0
aGUgZ2l2ZW4gaG9zdCBlbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29s
dmVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlU2NvcGVSZXNvbHZl
ci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTdHlsZVNjb3BlUmVzb2x2ZXIpOgor
ICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKToKKyAgICAgICAgKiBk
b20vRWxlbWVudFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpF
bGVtZW50U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6OmFkZFNoYWRv
d1Jvb3QpOgorICAgICAgICBTaW5jZSBhIG5ldyBzaGFkb3cgcm9vdCBpcyBhZGRlZCwgZGlzYWJs
ZSBAaG9zdCBALXJ1bGVzIGNhY2hlLgorICAgICAgICAqIGRvbS9FbGVtZW50U2hhZG93Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpoYXNNYXRjaGVkSG9zdFJ1bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6aGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6OmNsZWFySGFzTWF0Y2hlZEhvc3RS
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6OnNldEhhc01hdGNoZWRIb3N0
UnVsZSk6CisgICAgICAgIEFkZGVkIGZvdXIgbWV0aG9kcyBmb3IgQGhvc3QgQC1ydWxlcyBjYWNo
ZS4gVGhlIGNhY2hlIGhhcyBpbmZvcm1hdGlvbgorICAgICAgICBhYm91dCB3aGV0aGVyIGFueSBA
aG9zdCBALXJ1bGVzIG1hdGNoIHRoZSBFbGVtZW50U2hhZG93J3MgaG9zdC4KKyAgICAgICAgVGhl
IHJldHVybiB2YWx1ZSBvZiBoYXNNYXRjaGVkSG9zdFJ1bGUgaXMgYXZhaWxhYmxlIG9ubHkgaWYK
KyAgICAgICAgaGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlIHJldHVybnMgdHJ1ZS4KKyAgICAg
ICAgKEVsZW1lbnRTaGFkb3cpOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIERpc2Fi
bGUgQGhvc3QgQC1ydWxlcyBjYWNoZSwgYmVjYXVzZSBzdHlsZSBlbGVtZW50cyBtaWdodCBiZSBh
ZGRlZAorICAgICAgICBpbnRvIHRoZSBzaGFkb3cgZG9tIHN1YnRyZWUuCisKIDIwMTItMTAtMDkg
IEpvZSBNYXNvbiAgPGptYXNvbkByaW0uY29tPgogCiAgICAgICAgIENoZWNrIGZvciBudWxsIG1f
ZnJhbWUgaW4gTmV0d29ya0pvYgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YW1tYXIueSBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKaW5kZXggMmI0Mjc0YTli
MzJhMzVhMjk2Njg4ZjY1YjNiMzhhZjI0YmEzYjQwZC4uOGZhYTEzNDA3N2U1MTRhN2IzMDc4YjM5
YzkwYjljZGZhNGNkODQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1t
YXIueQorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CkBAIC0xMzIsNiArMTMy
LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY3NzeXllcnJvcih2b2lkKiwgY29uc3QgY2hhciopCiAl
dG9rZW4gUEFHRV9TWU0KICV0b2tlbiBNRURJQV9TWU0KICV0b2tlbiBGT05UX0ZBQ0VfU1lNCisl
dG9rZW4gSE9TVF9TWU0KICV0b2tlbiBDSEFSU0VUX1NZTQogJXRva2VuIE5BTUVTUEFDRV9TWU0K
ICV0b2tlbiBWQVJGVU5DVElPTgpAQCAtMjE5LDYgKzIyMCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50
IGNzc3l5ZXJyb3Iodm9pZCosIGNvbnN0IGNoYXIqKQogJXR5cGUgPHJ1bGU+IHBhZ2UKICV0eXBl
IDxydWxlPiBtYXJnaW5fYm94CiAldHlwZSA8cnVsZT4gZm9udF9mYWNlCisldHlwZSA8cnVsZT4g
aG9zdAogJXR5cGUgPHJ1bGU+IGtleWZyYW1lcwogJXR5cGUgPHJ1bGU+IGludmFsaWRfcnVsZQog
JXR5cGUgPHJ1bGU+IHNhdmVfYmxvY2sKQEAgLTQxOSw2ICs0MjEsNyBAQCB2YWxpZF9ydWxlOgog
ICB8IG5hbWVzcGFjZQogICB8IGltcG9ydAogICB8IHJlZ2lvbgorICB8IGhvc3QKICAgOwogCiBy
dWxlOgpAQCAtODQxLDYgKzg0NCwyMyBAQCBmb250X2ZhY2U6CiAgICAgfQogOwogCitiZWZvcmVf
aG9zdF9ydWxlOgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgcGFyc2VyLT5tYXJrUnVsZUhl
YWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpIT1NUX1JVTEUpOworICAgIH0KKyAgICA7CisK
K2hvc3Q6CisgICAgYmVmb3JlX2hvc3RfcnVsZSBIT1NUX1NZTSBhdF9ydWxlX2hlYWRlcl9lbmRf
bWF5YmVfc3BhY2UgCisgICAgJ3snIGF0X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZSBibG9j
a19ydWxlX2xpc3Qgc2F2ZV9ibG9jayB7CisgICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVIb3N0
UnVsZSgkNyk7CisgICAgfQorICAgIHwgYmVmb3JlX2hvc3RfcnVsZSBIT1NUX1NZTSBhdF9ydWxl
X2hlYWRlcl9lbmRfbWF5YmVfc3BhY2UgJzsnIHsKKyAgICAgICAgJCQgPSAwOworICAgICAgICBw
YXJzZXItPnBvcFJ1bGVEYXRhKCk7CisgICAgfQorICAgIDsKKyAKIHJlZ2lvbl9zZWxlY3RvcjoK
ICAgICBzZWxlY3Rvcl9saXN0IHsKICAgICAgICAgaWYgKCQxKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuY3BwCmluZGV4IDQ4MDVkMTRlZTlmMGY3ZWY5NzBhMTNhY2FlMTg4ZDEzYmNkNTE2OTIuLjJi
Y2RiNzQ1ZDk5YTkwODk5MjI2MjQzZWI5Y2RjZTU4OWMwOGE0MzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCkBAIC05MTUzLDYgKzkxNTMsMTEgQEAgaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpk
ZXRlY3RBdFRva2VuKGludCBsZW5ndGgsIGJvb2wgaGFzRXNjYXBlKQogICAgICAgICAgICAgbV90
b2tlbiA9IEZPTlRfRkFDRV9TWU07CiAgICAgICAgIHJldHVybjsKIAorICAgIGNhc2UgJ2gnOgor
ICAgICAgICBpZiAobGVuZ3RoID09IDUgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsg
MiwgIm9zdCIpKQorICAgICAgICAgICAgbV90b2tlbiA9IEhPU1RfU1lNOworICAgICAgICByZXR1
cm47CisKICAgICBjYXNlICdpJzoKICAgICAgICAgaWYgKGxlbmd0aCA9PSA3ICYmIGlzRXF1YWxU
b0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJtcG9ydCIpKSB7CiAgICAgICAgICAgICBtX3BhcnNp
bmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7CkBAIC05OTQyLDYgKzk5NDcsMjIgQEAgU3R5bGVSdWxl
QmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUoKQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKK1N0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUoUnVsZUxpc3Qq
IHJ1bGVzKQoreworICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNs
YXJhdGlvbnMgPSBmYWxzZTsKKyAgICBSZWZQdHI8U3R5bGVSdWxlSG9zdD4gcnVsZTsKKyAgICBp
ZiAocnVsZXMpCisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoKnJ1bGVzKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgUnVsZUxpc3QgZW1wdHlSdWxlczsKKyAgICAgICAgcnVsZSA9
IFN0eWxlUnVsZUhvc3Q6OmNyZWF0ZShlbXB0eVJ1bGVzKTsKKyAgICB9CisgICAgU3R5bGVSdWxl
SG9zdCogcmVzdWx0ID0gcnVsZS5nZXQoKTsKKyAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxl
LnJlbGVhc2UoKSk7CisgICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRl
ZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQ1NTUGFyc2VyOjphZGROYW1lc3Bh
Y2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKQog
ewogICAgIGlmICghbV9zdHlsZVNoZWV0IHx8ICFtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25z
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IDcxZDczOTk1ZDAxOWI5YzgwYTQ3MTFkODUwNjhi
MTZiMzI3MjY1ODEuLjRlNWYwNjA0OTNiODA2YmY5OWQ0OTUzMGM4ZmVjYTc1MWVjNDU0MGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTI4Miw2ICsyODIsNyBAQCBwdWJsaWM6CiAgICAgU3R5
bGVSdWxlQmFzZSogY3JlYXRlUGFnZVJ1bGUoUGFzc093blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4g
cGFnZVNlbGVjdG9yKTsKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVSZWdpb25SdWxlKENTU1Nl
bGVjdG9yVmVjdG9yKiByZWdpb25TZWxlY3RvciwgUnVsZUxpc3QqIHJ1bGVzKTsKICAgICBTdHls
ZVJ1bGVCYXNlKiBjcmVhdGVNYXJnaW5BdFJ1bGUoQ1NTU2VsZWN0b3I6Ok1hcmdpbkJveFR5cGUp
OworICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZUhvc3RSdWxlKFJ1bGVMaXN0KiBydWxlcyk7CiAg
ICAgdm9pZCBzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwogICAgIHZvaWQgZW5kRGVj
bGFyYXRpb25zRm9yTWFyZ2luQm94KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0
eVNvdXJjZURhdGEuaAppbmRleCA0NjliZGI2MzBjMWE1YzVkYmE5OTNmZDFhZDU5ZWQwNzQ0OWE1
NWJlLi4wNzllYzMzNjI0OTVjMDc5NzliNDc1YWZkZTc3NjAyMzg0Yzk5OTZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCkBAIC05NCw3ICs5NCw4IEBAIHN0
cnVjdCBDU1NSdWxlU291cmNlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU1J1bGVTb3VyY2VE
YXRhPiB7CiAgICAgICAgIEZPTlRfRkFDRV9SVUxFLAogICAgICAgICBQQUdFX1JVTEUsCiAgICAg
ICAgIEtFWUZSQU1FU19SVUxFLAotICAgICAgICBSRUdJT05fUlVMRQorICAgICAgICBSRUdJT05f
UlVMRSwKKyAgICAgICAgSE9TVF9SVUxFCiAgICAgfTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENTU1J1bGVTb3VyY2VEYXRhPiBjcmVhdGUoVHlwZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3Bw
CmluZGV4IGUyYmU1NzcxZTAyNWYxNGNmOWE4NWRlN2U1MWNkOWM1YTEzMDkwNTkuLmRhYmNhOGYw
NTY1MGFiZTUwNDY3ODJlNDgwMGQ5OWFhMDlkYjc4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9SdWxlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAK
QEAgLTEwNywxOCArMTA3LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc1VuY29tbW9u
QXR0cmlidXRlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1SdWxlRGF0YTo6UnVsZURhdGEoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25l
ZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVs
ZSkKK1J1bGVEYXRhOjpSdWxlRGF0YShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9y
SW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBhZGRSdWxlU3RhdGUpCiAgICAgOiBt
X3J1bGUocnVsZSkKICAgICAsIG1fc2VsZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQogICAgICwg
bV9wb3NpdGlvbihwb3NpdGlvbikKICAgICAsIG1fc3BlY2lmaWNpdHkoc2VsZWN0b3IoKS0+c3Bl
Y2lmaWNpdHkoKSkKLSAgICAsIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNhblVzZUZhc3RD
aGVja1NlbGVjdG9yICYmIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Io
c2VsZWN0b3IoKSkpCisgICAgLCBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigoYWRkUnVsZVN0
YXRlICYgUnVsZUNhblVzZUZhc3RDaGVja1NlbGVjdG9yKSAmJiBTZWxlY3RvckNoZWNrZXI6Omlz
RmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQogICAgICwgbV9oYXNNdWx0aXBhcnRT
ZWxlY3RvcighIXNlbGVjdG9yKCktPnRhZ0hpc3RvcnkoKSkKICAgICAsIG1faGFzUmlnaHRtb3N0
U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goaXNTZWxlY3Rvck1hdGNoaW5nSFRN
TEJhc2VkT25SdWxlSGFzaChzZWxlY3RvcigpKSkKICAgICAsIG1fY29udGFpbnNVbmNvbW1vbkF0
dHJpYnV0ZVNlbGVjdG9yKFdlYkNvcmU6OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rv
cihzZWxlY3RvcigpKSkKICAgICAsIG1fbGlua01hdGNoVHlwZShTZWxlY3RvckNoZWNrZXI6OmRl
dGVybWluZUxpbmtNYXRjaFR5cGUoc2VsZWN0b3IoKSkpCi0gICAgLCBtX2hhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4oaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKLSAgICAsIG1faXNJblJlZ2lv
blJ1bGUoaW5SZWdpb25SdWxlKQorICAgICwgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGFk
ZFJ1bGVTdGF0ZSAmIFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQorICAgICwgbV9pc0lu
UmVnaW9uUnVsZShhZGRSdWxlU3RhdGUgJiBSdWxlSXNJblJlZ2lvblJ1bGUpCiB7CiAgICAgQVNT
RVJUKG1fcG9zaXRpb24gPT0gcG9zaXRpb24pOwogICAgIEFTU0VSVChtX3NlbGVjdG9ySW5kZXgg
PT0gc2VsZWN0b3JJbmRleCk7CkBAIC0yMDcsOSArMjA3LDE0IEBAIHZvaWQgUnVsZVNldDo6YWRk
VG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3Qg
UnVsZURhCiAgICAgcnVsZXMtPmFwcGVuZChydWxlRGF0YSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6
YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIGJvb2wgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9v
bCBpblJlZ2lvblJ1bGUpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoU3R5bGVSdWxlKiBydWxlLCB1
bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBhZGRSdWxlU3RhdGUpCiB7Ci0gICAgUnVs
ZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgbV9ydWxlQ291bnQrKywgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbiwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGluUmVnaW9uUnVs
ZSk7CisgICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgbV9ydWxlQ291
bnQrKywgYWRkUnVsZVN0YXRlKTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgYXRob3N0UnVs
ZVNwZWNpZmljaXR5ID0gMHgxMDAwMDA7CisKKyAgICBpZiAoYWRkUnVsZVN0YXRlICYgUnVsZUlz
SG9zdFJ1bGUpCisgICAgICAgIHJ1bGVEYXRhLmluY3JlYXNlU3BlY2lmaWNpdHkoYXRob3N0UnVs
ZVNwZWNpZmljaXR5KTsKKwogICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21SdWxlRGF0YShtX2ZlYXR1
cmVzLCBydWxlRGF0YSk7CiAKICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5z
ZWxlY3RvcigpOwpAQCAtMjY0LDEwICsyNjksMTIgQEAgdm9pZCBSdWxlU2V0OjphZGRSZWdpb25S
dWxlKFN0eWxlUnVsZVJlZ2lvbiogcmVnaW9uUnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXQK
IAogICAgIC8vIENvbGxlY3QgdGhlIHJlZ2lvbiBydWxlcyBpbnRvIGEgcnVsZSBzZXQKICAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMgPSByZWdpb25S
dWxlLT5jaGlsZFJ1bGVzKCk7CisgICAgdW5zaWduZWQgYWRkUnVsZVN0YXRlID0gaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiA/IFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogMDsKKyAg
ICBhZGRSdWxlU3RhdGUgfD0gUnVsZUNhblVzZUZhc3RDaGVja1NlbGVjdG9yIHwgUnVsZUlzSW5S
ZWdpb25SdWxlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZFJ1bGVzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIFN0eWxlUnVsZUJhc2UqIHJlZ2lvblN0eWxpbmdSdWxlID0gY2hp
bGRSdWxlc1tpXS5nZXQoKTsKICAgICAgICAgaWYgKHJlZ2lvblN0eWxpbmdSdWxlLT5pc1N0eWxl
UnVsZSgpKQotICAgICAgICAgICAgcmVnaW9uUnVsZVNldC0+YWRkU3R5bGVSdWxlKHN0YXRpY19j
YXN0PFN0eWxlUnVsZSo+KHJlZ2lvblN0eWxpbmdSdWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICByZWdpb25SdWxlU2V0LT5hZGRTdHlsZVJ1
bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUpLCBhZGRSdWxlU3Rh
dGUpOwogICAgIH0KICAgICAvLyBVcGRhdGUgdGhlICJnbG9iYWwiIHJ1bGUgY291bnQgc28gdGhh
dCBwcm9wZXIgb3JkZXIgaXMgbWFpbnRhaW5lZAogICAgIG1fcnVsZUNvdW50ID0gcmVnaW9uUnVs
ZVNldC0+bV9ydWxlQ291bnQ7CkBAIC0yODYsNiArMjkzLDcgQEAgdm9pZCBSdWxlU2V0OjphZGRS
dWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5
RXZhbHUKICAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydFJ1bGUtPnN0eWxlU2hl
ZXQoKSwgbWVkaXVtLCByZXNvbHZlciwgc2NvcGUpOwogICAgIH0KICAgICBib29sIGhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4gPSByZXNvbHZlciAmJiByZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChzaGVldC0+YmFzZVVSTCgpKTsKKyAgICB1bnNpZ25l
ZCBhZGRSdWxlU3RhdGUgPSAoaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA/IFJ1bGVIYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luIDogMCkgfCAoIXNjb3BlID8gUnVsZUNhblVzZUZhc3RDaGVja1Nl
bGVjdG9yIDogMCk7CiAKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4m
IHJ1bGVzID0gc2hlZXQtPmNoaWxkUnVsZXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcnVsZXMuc2l6ZSgpOyArK2kpIHsKQEAgLTI5Myw3ICszMDEsNyBAQCB2b2lkIFJ1bGVTZXQ6
OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IE1lZGlh
UXVlcnlFdmFsdQogCiAgICAgICAgIEFTU0VSVCghcnVsZS0+aXNJbXBvcnRSdWxlKCkpOwogICAg
ICAgICBpZiAocnVsZS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAgICAgIGFkZFN0eWxlUnVsZShz
dGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwg
IXNjb3BlKTsKKyAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUq
PihydWxlKSwgYWRkUnVsZVN0YXRlKTsKICAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNQYWdlUnVs
ZSgpKQogICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+
KHJ1bGUpKTsKICAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNNZWRpYVJ1bGUoKSkgewpAQCAtMzA1
LDcgKzMxMyw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENv
bnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1CiAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gMDsgaiA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2opIHsKICAgICAgICAg
ICAgICAgICAgICAgU3R5bGVSdWxlQmFzZSogY2hpbGRSdWxlID0gY2hpbGRSdWxlc1tqXS5nZXQo
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkUnVsZS0+aXNTdHlsZVJ1bGUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUq
PihjaGlsZFJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCAhc2NvcGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KGNo
aWxkUnVsZSksIGFkZFJ1bGVTdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNo
aWxkUnVsZS0+aXNQYWdlUnVsZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYWRkUGFnZVJ1
bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+KGNoaWxkUnVsZSkpOwogICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzRm9udEZhY2VSdWxlKCkgJiYgcmVzb2x2ZXIp
IHsKQEAgLTM0NywxNSArMzU1LDE3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQo
U3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1CiAgICAgICAg
ICAgICBhZGRSZWdpb25SdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVJlZ2lvbio+KHJ1bGUpLCBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsKICAgICAgICAgfQogI2VuZGlmCisgICAgICAgIGVs
c2UgaWYgKHJ1bGUtPmlzSG9zdFJ1bGUoKSkKKyAgICAgICAgICAgIHJlc29sdmVyLT5hZGRIb3N0
UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4sIHNjb3BlKTsKICAgICB9CiAgICAgaWYgKG1fYXV0b1Nocmlua1RvRml0RW5hYmxl
ZCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1
bGUoU3R5bGVSdWxlKiBydWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wg
Y2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUpCit2b2lkIFJ1bGVT
ZXQ6OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIGFkZFJ1bGVTdGF0ZSkK
IHsKICAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBu
b3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHJ1bGUtPnNlbGVjdG9yTGlzdCgpLmluZGV4T2ZOZXh0
U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkKLSAgICAgICAgYWRkUnVsZShydWxlLCBzZWxl
Y3RvckluZGV4LCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxl
Y3RvciwgaXNJblJlZ2lvblJ1bGUpOworICAgICAgICBhZGRSdWxlKHJ1bGUsIHNlbGVjdG9ySW5k
ZXgsIGFkZFJ1bGVTdGF0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0
b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9SdWxlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oCmluZGV4
IDY1NzcyMzhiYTkyMzZhOWQ2ODEwMzkxOTVhMGRkNDNhMmU4MDgyYTAuLmEzZGFmYzliNmQ4MTg1
MzAwYzU2NjA4NTYzOWM3ZDIxZjJiZGY2NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9SdWxlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuaApAQCAtMzEsNiAr
MzEsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitlbnVtIEFkZFJ1bGVTdGF0ZSB7Cisg
ICAgUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSAxLAorICAgIFJ1bGVDYW5Vc2VGYXN0
Q2hlY2tTZWxlY3RvciAgID0gMSA8PCAxLAorICAgIFJ1bGVJc0luUmVnaW9uUnVsZSAgICAgICAg
ICAgID0gMSA8PCAyLAorICAgIFJ1bGVJc0hvc3RSdWxlICAgICAgICAgICAgICAgID0gMSA8PCAz
LAorfTsKKwogY2xhc3MgQ1NTU2VsZWN0b3I7CiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xhc3Mg
TWVkaWFRdWVyeUV2YWx1YXRvcjsKQEAgLTQwLDcgKzQ3LDcgQEAgY2xhc3MgU3R5bGVTaGVldENv
bnRlbnRzOwogCiBjbGFzcyBSdWxlRGF0YSB7CiBwdWJsaWM6Ci0gICAgUnVsZURhdGEoU3R5bGVS
dWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRpb24sIGJvb2wgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9v
bCBpblJlZ2lvblJ1bGUpOworICAgIFJ1bGVEYXRhKFN0eWxlUnVsZSosIHVuc2lnbmVkIHNlbGVj
dG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBhZGRSdWxlU3RhdGUpOwogCiAg
ICAgdW5zaWduZWQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAgICAg
U3R5bGVSdWxlKiBydWxlKCkgY29uc3QgeyByZXR1cm4gbV9ydWxlOyB9CkBAIC01NSw2ICs2Miw3
IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9saW5rTWF0Y2hUeXBlOyB9CiAgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOyB9CiAgICAgYm9vbCBp
c0luUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNJblJlZ2lvblJ1bGU7IH0KKyAgICB2
b2lkIGluY3JlYXNlU3BlY2lmaWNpdHkodW5zaWduZWQgdmFsdWUpIHsgbV9zcGVjaWZpY2l0eSAr
PSB2YWx1ZTsgfQogCiAgICAgLy8gVHJ5IHRvIGJhbGFuY2UgYmV0d2VlbiBtZW1vcnkgdXNhZ2Ug
KHRoZXJlIGNhbiBiZSBsb3RzIG9mIFJ1bGVEYXRhIG9iamVjdHMpIGFuZCBnb29kIGZpbHRlcmlu
ZyBwZXJmb3JtYW5jZS4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUlkZW50aWZp
ZXJDb3VudCA9IDQ7CkBAIC05OCw4ICsxMDYsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFJ1
bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImLCBTdHlsZVJlc29sdmVyKiA9IDAsIGNvbnN0IENvbnRhaW5lck5vZGUqID0gMCk7CiAKLSAg
ICB2b2lkIGFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUg
PSBmYWxzZSk7Ci0gICAgdm9pZCBhZGRSdWxlKFN0eWxlUnVsZSosIHVuc2lnbmVkIHNlbGVjdG9y
SW5kZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hl
Y2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKKyAgICB2b2lkIGFkZFN0
eWxlUnVsZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBhZGRSdWxlU3RhdGUpOworICAgIHZvaWQgYWRk
UnVsZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBhZGRSdWxl
U3RhdGUpOwogICAgIHZvaWQgYWRkUGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSopOwogICAgIHZvaWQg
YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBS
dWxlRGF0YSYpOwogICAgIHZvaWQgYWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qLCBib29s
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwCmluZGV4IDJkOWNjZDU5ZGE1YzJkNTRiNmEyNGFmYzcyMWFlMmMwODliZDdlNmMuLmI3NzQ2
Y2JlMWRhZjAzN2FmOTY0NTlmYWY5ZWQwNTc1Mjg5ODA1ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlICJDb3VudGVyQ29udGVu
dC5oIgogI2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudFN0eWxlU2hl
ZXRDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgogI2luY2x1ZGUgIkZv
bnRGZWF0dXJlVmFsdWUuaCIKICNpbmNsdWRlICJGb250VmFsdWUuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgpAQCAtMzc0LDcgKzM3NSw3IEBAIHN0YXRpYyBQYXNzT3duUHRyPFJ1bGVTZXQ+IG1ha2VS
dWxlU2V0KGNvbnN0IFZlY3RvcjxSdWxlRmVhdHVyZT4mIHJ1bGVzKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBPd25QdHI8UnVsZVNldD4gcnVsZVNldCA9IFJ1bGVTZXQ6OmNyZWF0ZSgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBydWxlU2V0
LT5hZGRSdWxlKHJ1bGVzW2ldLnJ1bGUsIHJ1bGVzW2ldLnNlbGVjdG9ySW5kZXgsIHJ1bGVzW2ld
Lmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGZhbHNlKTsKKyAgICAgICAgcnVsZVNldC0+YWRk
UnVsZShydWxlc1tpXS5ydWxlLCBydWxlc1tpXS5zZWxlY3RvckluZGV4LCBydWxlc1tpXS5oYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luID8gUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gOiAw
KTsKICAgICBydWxlU2V0LT5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiBydWxlU2V0LnJlbGVh
c2UoKTsKIH0KQEAgLTQzNCw2ICs0MzUsMzYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRB
dXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlAKICAg
ICAgICAgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250
U2VsZWN0b3IoKSk7CiB9CiAKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkSG9zdFJ1bGUoU3R5bGVS
dWxlSG9zdCogaG9zdFJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY29uc3Qg
Q29udGFpbmVyTm9kZSogc2NvcGUpCit7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyAgICBp
ZiAoIXNjb3BlIHx8ICFzY29wZS0+aXNJblNoYWRvd1RyZWUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNjb3BlLT5zaGFkb3dSb290KCk7CisgICAg
aWYgKCFzaGFkb3dSb290IHx8ICFzaGFkb3dSb290LT5ob3N0KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBzaGFkb3dSb290LT5vd25lcigpLT5jbGVhckhhc01hdGNoZWRIb3N0UnVsZSgpOworCisg
ICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAgIG1fc2NvcGVSZXNvbHZlciA9IGFkb3B0
UHRyKG5ldyBTdHlsZVNjb3BlUmVzb2x2ZXIoKSk7CisgICAgUnVsZVNldCogcnVsZSA9IG1fc2Nv
cGVSZXNvbHZlci0+ZW5zdXJlQXRIb3N0UnVsZVNldEZvcihzaGFkb3dSb290KTsKKworICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IGhvc3RSdWxl
LT5jaGlsZFJ1bGVzKCk7CisgICAgdW5zaWduZWQgYWRkU3RhdGVSdWxlID0gaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiA/IFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogMDsKKyAgICBh
ZGRTdGF0ZVJ1bGUgfD0gUnVsZUNhblVzZUZhc3RDaGVja1NlbGVjdG9yIHwgUnVsZUlzSG9zdFJ1
bGU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgU3R5bGVSdWxlQmFzZSogaG9zdFN0eWxpbmdSdWxlID0gY2hpbGRSdWxlc1tp
XS5nZXQoKTsKKyAgICAgICAgaWYgKGhvc3RTdHlsaW5nUnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAg
ICAgICAgICAgIHJ1bGUtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihob3N0
U3R5bGluZ1J1bGUpLCBhZGRTdGF0ZVJ1bGUpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGhvc3RSdWxlKTsKKyAgICBVTlVTRURfUEFSQU0oaGFzRG9jdW1lbnRTZWN1cml0eSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHNjb3BlKTsKKyNlbmRpZgorfQorCiB2b2lkIFN0eWxlUmVzb2x2ZXI6
OnB1c2hQYXJlbnRFbGVtZW50KEVsZW1lbnQqIHBhcmVudCkKIHsKICAgICBjb25zdCBDb250YWlu
ZXJOb2RlKiBwYXJlbnRzUGFyZW50ID0gcGFyZW50LT5wYXJlbnRPckhvc3RFbGVtZW50KCk7CkBA
IC03NDUsNiArNzc2LDM2IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JS
dWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0CiAjZW5kaWYKIH0KIAor
aW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6bWF0Y2hlc0hvc3RSdWxlcygpCit7CisjaWYgRU5B
QkxFKFNUWUxFX1NDT1BFRCkKKyAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2NvcGVS
ZXNvbHZlci0+bWF0Y2hlc0hvc3RSdWxlcyhtX2VsZW1lbnQpOworI2Vsc2UKKyAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhN
YXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQoreworI2lmIEVOQUJM
RShTVFlMRV9TQ09QRUQpCisgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIFZlY3RvcjxSdWxlU2V0Kj4gbWF0Y2hlZFJ1bGVzOworICAgIG1fc2NvcGVSZXNv
bHZlci0+bWF0Y2hIb3N0UnVsZXMobV9lbGVtZW50LCBtYXRjaGVkUnVsZXMpOworICAgIGlmICht
YXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNYXRjaE9wdGlv
bnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgb3B0aW9ucy5zY29wZSA9IG1fZWxl
bWVudDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsg
LS1pKQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaGVkUnVsZXMuYXQoaS0xKSwg
cmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUsIG9wdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBVTlVT
RURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOworI2VuZGlmCit9CisKIHZvaWQgU3R5bGVSZXNv
bHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKQogewogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CkBAIC03NTksNiArODIw
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiBy
ZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMKICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
clJlZ2lvbihtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVs
ZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CiAKICAgICBtYXRjaFNj
b3BlZEF1dGhvclJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIG1hdGNoSG9z
dFJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOwogCiAgICAgc29ydEFuZFRyYW5zZmVy
TWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CiB9CkBAIC0xMzIwLDYgKzEzODIsOSBAQCBSZW5kZXJTdHls
ZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogICAgIC8vIENhbid0IHNoYXJl
IGlmIGF0dHJpYnV0ZSBydWxlcyBhcHBseS4KICAgICBpZiAobWF0Y2hlc1J1bGVTZXQobV91bmNv
bW1vbkF0dHJpYnV0ZVJ1bGVTZXQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBD
YW4ndCBzaGFyZSBpZiBAaG9zdCBALXJ1bGVzIGFwcGx5LgorICAgIGlmIChtYXRjaGVzSG9zdFJ1
bGVzKCkpCisgICAgICAgIHJldHVybiAwOwogICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4IHJl
cXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5IHRo
ZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCiAgICAgaWYgKHBhcmVudFN0eWxlUHJldmVudHNT
aGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5oCmluZGV4IDZiMTM2MjNjNjUzY2RiYzFiNTljN2FlMjc3ZDM4NGU4MjFiYjIz
MjQuLmUzMjljMjVmOTJkNGY3MGIzODNkMmZhNDU3MWYwNDQ0MDM4NGUxNDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtNzIsNiArNzIsNyBAQCBjbGFzcyBSZW5kZXJSZWdpb247
CiBjbGFzcyBSdWxlRGF0YTsKIGNsYXNzIFJ1bGVTZXQ7CiBjbGFzcyBTZXR0aW5nczsKK2NsYXNz
IFNoYWRvd1Jvb3Q7CiBjbGFzcyBTdGF0aWNDU1NSdWxlTGlzdDsKIGNsYXNzIFN0eWxlQnVpbGRl
cjsKIGNsYXNzIFN0eWxlU2NvcGVSZXNvbHZlcjsKQEAgLTgwLDYgKzgxLDcgQEAgY2xhc3MgU3R5
bGVLZXlmcmFtZTsKIGNsYXNzIFN0eWxlUGVuZGluZ0ltYWdlOwogY2xhc3MgU3R5bGVQcm9wZXJ0
eVNldDsKIGNsYXNzIFN0eWxlUnVsZTsKK2NsYXNzIFN0eWxlUnVsZUhvc3Q7CiBjbGFzcyBTdHls
ZVJ1bGVLZXlmcmFtZXM7CiBjbGFzcyBTdHlsZVJ1bGVQYWdlOwogY2xhc3MgU3R5bGVSdWxlUmVn
aW9uOwpAQCAtMTM3LDYgKzEzOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBvcFBhcmVudEVsZW1l
bnQoRWxlbWVudCopOwogICAgIHZvaWQgcHVzaFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93
Um9vdCopOwogICAgIHZvaWQgcG9wUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290Kik7
CisgICAgdm9pZCBhZGRIb3N0UnVsZShTdHlsZVJ1bGVIb3N0KiwgYm9vbCwgY29uc3QgQ29udGFp
bmVyTm9kZSopOwogCiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50
KEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBTdHlsZVNoYXJpbmdCZWhh
dmlvciA9IEFsbG93U3R5bGVTaGFyaW5nLAogICAgICAgICBSdWxlTWF0Y2hpbmdCZWhhdmlvciA9
IE1hdGNoQWxsUnVsZXMsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IDApOwpAQCAt
MTc0LDYgKzE3Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXMoKTsKICAg
ICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsKICAgICBib29sIG1hdGNoZXNSdWxl
U2V0KFJ1bGVTZXQqKTsKKyAgICBib29sIG1hdGNoZXNIb3N0UnVsZXMoKTsKICAgICBOb2RlKiBs
b2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291
bnQpIGNvbnN0OwogICAgIFN0eWxlZEVsZW1lbnQqIGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5n
KE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OwogICAgIGJvb2wgY2FuU2hhcmVTdHlsZVdp
dGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKQEAgLTMyNiw2ICszMzAsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVk
ZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0
Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoSG9zdFJ1
bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBjb2xs
ZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0
UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RS
dWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwogICAgIHZvaWQgY29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQmIGZpcnN0UnVsZUluZGV4
LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSdWxlLmNwcAppbmRleCA3M2IwYWYyNmNlNDJhYTQ1OTRkOWI3NjE3OTZiMTlkNmE2YmI2NjVj
Li5mZDVjMGMzMDJkM2RhMTMzOWEwOWY2NTQ0NTllMGNkNDEzMzE0ZTlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSdWxlLmNwcApAQCAtNzksNiArNzksOSBAQCB2b2lkIFN0eWxlUnVsZUJhc2U6OnJlcG9y
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAg
ICAgY2FzZSBLZXlmcmFtZXM6CiAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZUtl
eWZyYW1lcyo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0
SW5mbyk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEhvc3Q6CisgICAgICAgIHN0YXRpY19j
YXN0PGNvbnN0IFN0eWxlUnVsZUJsb2NrKj4odGhpcyktPnJlcG9ydERlc2NlbmRhbnRNZW1vcnlV
c2FnZShtZW1vcnlPYmplY3RJbmZvKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgVW5rbm93
bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlmcmFtZToKQEAgLTExNyw2ICsxMjAs
OSBAQCB2b2lkIFN0eWxlUnVsZUJhc2U6OmRlc3Ryb3koKQogICAgIGNhc2UgS2V5ZnJhbWVzOgog
ICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4odGhpcyk7CiAg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEhvc3Q6CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2Fz
dDxTdHlsZVJ1bGVIb3N0Kj4odGhpcyk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFVua25v
d246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xNTAsNiArMTU2
LDggQEAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBTdHlsZVJ1bGVCYXNlOjpjb3B5KCkgY29u
c3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBLZXlmcmFtZXM6CiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqPih0aGlzKS0+Y29weSgpOwor
ICAgIGNhc2UgSG9zdDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVs
ZUhvc3QqPih0aGlzKS0+Y29weSgpOwogICAgIGNhc2UgVW5rbm93bjoKICAgICBjYXNlIENoYXJz
ZXQ6CiAgICAgY2FzZSBLZXlmcmFtZToKQEAgLTE5MSw2ICsxOTksNyBAQCBQYXNzUmVmUHRyPENT
U1J1bGU+IFN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcihDU1NTdHlsZVNoZWV0KiBw
YXJlbnRTaGVldAogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICBydWxlID0gV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZTo6Y3JlYXRlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHNl
bGYpLCBwYXJlbnRTaGVldCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgSG9zdDoKICAgICBj
YXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0z
ODEsNCArMzkwLDE0IEBAIHZvaWQgU3R5bGVSdWxlUmVnaW9uOjpyZXBvcnREZXNjZW5kYW50TWVt
b3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0CiAgICAgaW5mby5hZGRNZW1i
ZXIobV9zZWxlY3Rvckxpc3QpOwogfQogCitTdHlsZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KFZl
Y3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcykKKyAgICA6IFN0eWxlUnVs
ZUJsb2NrKEhvc3QsIGFkb3B0UnVsZXMpCit7Cit9CisKK1N0eWxlUnVsZUhvc3Q6OlN0eWxlUnVs
ZUhvc3QoY29uc3QgU3R5bGVSdWxlSG9zdCYgbykKKyAgICA6IFN0eWxlUnVsZUJsb2NrKG8pCit7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJ1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAppbmRleCBl
MTVmMzJlNDAyYWFmMjA4ZDNjYzBmY2NkMzU4NDc3YjIzMDM1NjM0Li43YWQzMTNlY2VhOGJiZmIx
ZjYzMGEyYzU0ZDk3YjI0NDE3MzAzOTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCkBAIC00Niw2
ICs0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgUGFnZSwKICAgICAgICAgS2V5ZnJhbWVzLAogICAg
ICAgICBLZXlmcmFtZSwgLy8gTm90IHVzZWQuIFRoZXNlIGFyZSBpbnRlcm5hbGx5IG5vbi1ydWxl
IFN0eWxlS2V5ZnJhbWUgb2JqZWN0cy4KKyAgICAgICAgSG9zdCwKICAgICAgICAgUmVnaW9uID0g
MTYKICAgICB9OwogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5
cGU+KG1fdHlwZSk7IH0KQEAgLTU4LDYgKzU5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTdHls
ZVJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gU3R5bGU7IH0KICAgICBib29sIGlzUmVn
aW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBSZWdpb247IH0KICAgICBib29sIGlz
SW1wb3J0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBJbXBvcnQ7IH0KKyAgICBib29s
IGlzSG9zdFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSG9zdDsgfQogCiAgICAgUGFz
c1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBjb3B5KCkgY29uc3Q7CiAKQEAgLTIyMyw2ICsyMjUsMjAg
QEAgcHJpdmF0ZToKICAgICBDU1NTZWxlY3Rvckxpc3QgbV9zZWxlY3Rvckxpc3Q7CiB9OwogCitj
bGFzcyBTdHlsZVJ1bGVIb3N0IDogcHVibGljIFN0eWxlUnVsZUJsb2NrIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVIb3N0PiBjcmVhdGUoVmVjdG9yPFJlZlB0cjxT
dHlsZVJ1bGVCYXNlPiA+JiBhZG9wdFJ1bGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHlsZVJ1bGVIb3N0KGFkb3B0UnVsZXMpKTsKKyAgICB9CisKKyAgICBQYXNzUmVm
UHRyPFN0eWxlUnVsZUhvc3Q+IGNvcHkoKSBjb25zdCB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5
bGVSdWxlSG9zdCgqdGhpcykpOyB9CisKK3ByaXZhdGU6CisgICAgU3R5bGVSdWxlSG9zdChWZWN0
b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpOworICAgIFN0eWxlUnVsZUhv
c3QoY29uc3QgU3R5bGVSdWxlSG9zdCYpOworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gU3R5bGVSdWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVNjb3BlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNv
bHZlci5jcHAKaW5kZXggNjIyNjljYjMyODczNTc5ZGZhOWY5ZTkyMjhkZDkxODQzZWYxZDMxYS4u
NjM1NWI1OGFlYzllMjYyMmRkZWVmNjUyZjM0NTEzNmU4MTdmNWUwNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1
ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDb250ZXh0RmVhdHVyZXMuaCIKKyNpbmNs
dWRlICJFbGVtZW50U2hhZG93LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIlJ1bGVGZWF0dXJlLmgiCkBAIC0xNTcsMTEg
KzE1OCw3MCBAQCB2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8oUnVs
ZUZlYXR1cmVTZXQmIGZlYXR1cmVzKQogICAgICAgICBmZWF0dXJlcy5hZGQoaXQtPnZhbHVlLT5m
ZWF0dXJlcygpKTsKIH0KIAorUnVsZVNldCogU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVBdEhv
c3RSdWxlU2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCit7CisgICAgU2NvcGVk
UnVsZVNldE1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fYXRIb3N0UnVsZXMuYWRkKHNoYWRv
d1Jvb3QsIG51bGxwdHIpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAg
YWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgIHJldHVy
biBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorCitpbmxpbmUgUnVsZVNldCog
U3R5bGVTY29wZVJlc29sdmVyOjphdEhvc3RSdWxlU2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqIHNo
YWRvd1Jvb3QpIGNvbnN0Cit7CisgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2F0SG9zdFJ1bGVzLmZpbmQoc2hhZG93Um9vdCk7CisgICAgcmV0dXJuIGl0ICE9IG1f
YXRIb3N0UnVsZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOworfQorCitib29sIFN0eWxl
U2NvcGVSZXNvbHZlcjo6bWF0Y2hlc0hvc3RSdWxlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50KQor
eworICAgIGlmIChtX2F0SG9zdFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgRWxlbWVudFNoYWRvdyogc2hhZG93ID0gZWxlbWVudC0+c2hhZG93KCk7CisgICAg
aWYgKCFzaGFkb3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2hhZG93LT5oYXNN
YXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIHNoYWRvdy0+aGFzTWF0
Y2hlZEhvc3RSdWxlKCk7CisKKyAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFk
b3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dSb290OyBzaGFkb3dSb290ID0gc2hhZG93
Um9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsKKyAgICAgICAgaWYgKGF0SG9zdFJ1bGVTZXRGb3Io
c2hhZG93Um9vdCkpIHsKKyAgICAgICAgICAgIHNoYWRvdy0+c2V0SGFzTWF0Y2hlZEhvc3RSdWxl
KHRydWUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFzaGFkb3dSb290LT5oYXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIHNoYWRvdy0+c2V0SGFzTWF0Y2hlZEhvc3RSdWxlKGZhbHNlKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjptYXRjaEhvc3RS
dWxlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBWZWN0b3I8UnVsZVNldCo+JiBtYXRjaGVkUnVs
ZXMpCit7CisgICAgaWYgKG1fYXRIb3N0UnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBlbGVtZW50LT5zaGFkb3coKTsKKyAgICBp
ZiAoIXNoYWRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgQWxyZWFkeSBrbm93IHdo
ZXRoZXIgdGhlcmUgZXhpc3QgYW55IG1hdGNoZWQgaG9zdCBydWxlcyBvciBub3QsIHNlZS4KKyAg
ICBpZiAoc2hhZG93LT5oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUoKSAmJiAhc2hhZG93LT5o
YXNNYXRjaGVkSG9zdFJ1bGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChTaGFkb3dS
b290KiBzaGFkb3dSb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hhZG93Um9v
dDsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7IAorICAgICAg
ICBpZiAoUnVsZVNldCogcnVsZVNldCA9IGF0SG9zdFJ1bGVTZXRGb3Ioc2hhZG93Um9vdCkpCisg
ICAgICAgICAgICBtYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGVTZXQpOworICAgICAgICBpZiAoIXNo
YWRvd1Jvb3QtPmhhc1NoYWRvd0luc2VydGlvblBvaW50KCkpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKIHZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNs
YXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6
Q1NTKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2F1dGhvclN0eWxlcyk7CiAgICAgaW5mby5hZGRN
ZW1iZXIobV9zdGFjayk7CisgICAgaW5mby5hZGRNZW1iZXIobV9hdEhvc3RSdWxlcyk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaAppbmRleCA4N2UyMDQ3NGY5
NDI5Yjg2ZjBiODQ1ZTJmMjU4MTE5MmMxNWYzZDE3Li44ZTIxN2RmOTQ0MWFmMGQ4NmJiZDcyZDNj
Y2U0MzdkNmM1ZWI4NzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29w
ZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5o
CkBAIC0zNyw4ICszNywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbnRhaW5l
ck5vZGU7CiBjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRWxlbWVudDsKIGNsYXNzIFJ1bGVT
ZXQ7CiBjbGFzcyBSdWxlRmVhdHVyZVNldDsKK2NsYXNzIFNoYWRvd1Jvb3Q7CiAKICNpZiBFTkFC
TEUoU1RZTEVfU0NPUEVEKQogCkBAIC03MiwxMiArNzQsMTcgQEAgcHVibGljOgogICAgIGJvb2wg
bWF0Y2hlc1N0eWxlQm91bmRzKGNvbnN0IFN0YWNrRnJhbWUmIGZyYW1lKSBjb25zdCB7IHJldHVy
biBmcmFtZS5tX2F1dGhvclN0eWxlQm91bmRzSW5kZXggPT0gbV9zdGFja1BhcmVudEJvdW5kc0lu
ZGV4OyB9CiAgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXNUbyhSdWxlRmVhdHVyZVNldCYpOwogCisg
ICAgUnVsZVNldCogZW5zdXJlQXRIb3N0UnVsZVNldEZvcihjb25zdCBTaGFkb3dSb290Kik7Cisg
ICAgYm9vbCBtYXRjaGVzSG9zdFJ1bGVzKGNvbnN0IEVsZW1lbnQqKTsKKyAgICB2b2lkIG1hdGNo
SG9zdFJ1bGVzKGNvbnN0IEVsZW1lbnQqLCBWZWN0b3I8UnVsZVNldCo+JiBtYXRjaGVkUnVsZXMp
OworCiAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7
CiAKIHByaXZhdGU6CiAgICAgUnVsZVNldCogcnVsZVNldEZvcihjb25zdCBDb250YWluZXJOb2Rl
KiBzY29wZSkgY29uc3Q7CiAgICAgdm9pZCBzZXR1cFN0YWNrKGNvbnN0IENvbnRhaW5lck5vZGUq
KTsKICAgICBib29sIHN0YWNrSXNDb25zaXN0ZW50KGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVu
dCkgY29uc3QgeyByZXR1cm4gcGFyZW50ICYmIHBhcmVudCA9PSBtX3N0YWNrUGFyZW50OyB9Cisg
ICAgUnVsZVNldCogYXRIb3N0UnVsZVNldEZvcihjb25zdCBTaGFkb3dSb290KikgY29uc3Q7CiAK
ICAgICBTY29wZWRSdWxlU2V0TWFwIG1fYXV0aG9yU3R5bGVzOwogCkBAIC04OCw2ICs5NSw4IEBA
IHByaXZhdGU6CiAgICAgLy8gVGhpcyBpcyB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIG1fc2NvcGlu
Z0VsZW1lbnRTdGFjayBpcyBjb25zaXN0ZW50LCBzZXBhcmF0ZWx5IGZyb20gU2VsZWN0b3JDaGVj
a2VyOjptX3BhcmVudFN0YWNrLgogICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIG1fc3RhY2tQYXJl
bnQ7CiAgICAgaW50IG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleDsKKworICAgIFNjb3BlZFJ1bGVT
ZXRNYXAgbV9hdEhvc3RSdWxlczsKIH07CiAKIGlubGluZSBib29sIFN0eWxlU2NvcGVSZXNvbHZl
cjo6ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShDb250YWluZXJOb2RlKiBwYXJlbnQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCmluZGV4IGU3Y2U4MWVhYWI0ODcxODYy
NGY0ZWI1NTIzOGU1YzFhZjM1Njg1YjguLjM5ZTlhN2IyY2Q2YzIxOTNiYjA0OTgwZmE4OGE4Mjcy
MWU0YTIzZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVu
dHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCkBA
IC00MzUsNiArNDM1LDEwIEBAIHN0YXRpYyBib29sIGNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5j
ZWxlZFN1YnJlc291cmNlcyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlCiAgICAgICAgICAgICBp
ZiAoY2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKHN0YXRpY19jYXN0
PGNvbnN0IFN0eWxlUnVsZVJlZ2lvbio+KHJ1bGUpLT5jaGlsZFJ1bGVzKCkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3R5
bGVSdWxlQmFzZTo6SG9zdDoKKyAgICAgICAgICAgIGlmIChjaGlsZFJ1bGVzSGF2ZUZhaWxlZE9y
Q2FuY2VsZWRTdWJyZXNvdXJjZXMoc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlSG9zdCo+KHJ1
bGUpLT5jaGlsZFJ1bGVzKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3R5bGVSdWxlQmFzZTo6SW1wb3J0OgogICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGNhc2UgU3R5bGVSdWxlQmFzZTo6
UGFnZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAppbmRleCBhZWI1YjViNDc1YjIx
OWJjNTdkYzg1ZWYyZTdiODMyYWVlODg5M2ZjLi44MDliY2M4NzgyMmU1MTRjZDhkNjRjM2RiOGQz
MmFjNzU4NzYwZTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRv
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCkBAIC0zOSw2
ICszOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEVsZW1lbnRTaGFkb3c6OkVsZW1lbnRT
aGFkb3coKQorICAgIDogbV9oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUoZmFsc2UpCiB7CiB9
CiAKQEAgLTg5LDYgKzkwLDEwIEBAIHZvaWQgRWxlbWVudFNoYWRvdzo6YWRkU2hhZG93Um9vdChF
bGVtZW50KiBzaGFkb3dIb3N0LCBQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+IHNoCiAgICAgaWYgKHNo
YWRvd0hvc3QtPmF0dGFjaGVkKCkpCiAgICAgICAgIHNoYWRvd0hvc3QtPmxhenlSZWF0dGFjaCgp
OwogCisgICAgLy8gQXMgYSBuZXcgc2hhZG93IGRvbSBzdWJ0cmVlIG1pZ2h0IGhhdmUgQGhvc3Qg
QC1ydWxlcywgbmVlZCB0byBkaXNhYmxlCisgICAgLy8gaGFzTWF0Y2hlZEhvc3RSdWxlcyBjYWNo
ZS4KKyAgICBjbGVhckhhc01hdGNoZWRIb3N0UnVsZSgpOworCiAgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRQdXNoU2hhZG93Um9vdChzaGFkb3dIb3N0LCBzaGFkb3dSb290LmdldCgp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgKaW5kZXggZGRiNDM4MDZiZGUxNTM5
ZmM3YWRjMmI5ZDg2OTJjZTcyM2M4MzNmNi4uNTE1NjliNmE2YWI1NjZiZjRhOWJhNDUxM2I2NDBk
Mzg1ZDQ1Zjg2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCkBAIC03MSwxMSArNzEs
MTggQEAgcHVibGljOgogICAgIENvbnRlbnREaXN0cmlidXRvciYgZGlzdHJpYnV0b3IoKTsKICAg
ICBjb25zdCBDb250ZW50RGlzdHJpYnV0b3ImIGRpc3RyaWJ1dG9yKCkgY29uc3Q7CiAKKyAgICBi
b29sIGhhc01hdGNoZWRIb3N0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWF0Y2hlZEhvc3RS
dWxlOyB9CisgICAgYm9vbCBoYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUoKSBjb25zdCB7IHJl
dHVybiBtX2hhc01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZTsgfQorICAgIHZvaWQgY2xlYXJIYXNN
YXRjaGVkSG9zdFJ1bGUoKSB7IG1faGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlID0gZmFsc2U7
IH0KKyAgICB2b2lkIHNldEhhc01hdGNoZWRIb3N0UnVsZShib29sIGhhc1J1bGUpIHsgbV9oYXNN
YXRjaGVkSG9zdFJ1bGUgPSBoYXNSdWxlOyBtX2hhc01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZSA9
IHRydWU7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGludmFsaWRhdGVEaXN0cmlidXRpb24oRWxl
bWVudCogaG9zdCk7CiAKICAgICBEb3VibHlMaW5rZWRMaXN0PFNoYWRvd1Jvb3Q+IG1fc2hhZG93
Um9vdHM7CiAgICAgQ29udGVudERpc3RyaWJ1dG9yIG1fZGlzdHJpYnV0b3I7CisgICAgYm9vbCBt
X2hhc01hdGNoZWRIb3N0UnVsZTsKKyAgICBib29sIG1faGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxh
YmxlOwogfTsKIAogaW5saW5lIFNoYWRvd1Jvb3QqIEVsZW1lbnRTaGFkb3c6OnlvdW5nZXN0U2hh
ZG93Um9vdCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9v
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKaW5kZXggNTE4MGExYzIy
ZDg0ODk0ZTM3MGY1YzE2MmI2YTNhYzhmZjZmZDQyNS4uMzk2MDRiOTE2NDA3MDRkMWY5ZThmYzk1
NzE3MjgyYmY4NzhjMTM0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jv
b3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcApAQCAtMjI0LDYg
KzIyNCw3IEBAIHZvaWQgU2hhZG93Um9vdDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5
UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqCiB7CiAgICAgQ29udGFpbmVyTm9kZTo6
Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNlciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5n
ZSwgY2hpbGRDb3VudERlbHRhKTsKICAgICBvd25lcigpLT5pbnZhbGlkYXRlRGlzdHJpYnV0aW9u
KCk7CisgICAgb3duZXIoKS0+Y2xlYXJIYXNNYXRjaGVkSG9zdFJ1bGUoKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IGRhMTRjNGEzZjBkOTA1NjI5ZDkzNjU1YjY5OTZkOTdhZWNiMGNlY2EuLjZhYjIyOWUyM2Vm
ZjUzM2I3ZjE1NjEyNzMxNjkwZDA4ZTQ4MzkyMmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
Mi0xMC0xMCAgVGFrYXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAg
W1NoYWRvdyBET01dIE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9kb20vc2hh
ZG93L2F0aG9zdC1hdHJ1bGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9k
b20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLmh0bWw6IEFkZGVkLgorCiAyMDEyLTEwLTA5ICBKZWZm
cmV5IFBmYXUgIDxqcGZhdUBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gVW5yZXZpZXdlZCwg
c2tpcHBpbmcgaHR0cC90ZXN0cy9zZWN1cml0eS9zdmctaW1hZ2UtbGVhay5odG1sCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hMWYzYjFjMjU1MTY5NTY3ODcyNWJkNjY1MTgxMzEzNDM4NjQ5YTE0
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1h
dHJ1bGVzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE1IEBACitob3N0OiByZ2IoMjU1LCAwLCAw
KQoraG9zdDogcmdiKDI1NSwgMCwgMCkKK2hvc3RBOiByZ2IoMjU1LCAwLCAwKQoraG9zdEI6IHJn
YigwLCAwLCAyNTUpCitob3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAx
MjgpCitob3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJn
YigxMjgsIDEyOCwgMTI4KQoraG9zdDogcmdiKDI1NSwgMjU1LCAwKQoraG9zdDogcmdiKDI1NSwg
MCwgMCkKK25lc3RlZEhvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMjU1LCAwLCAwKQor
aG9zdDogcmdiKDI1NSwgMjU1LCAwKQorSGVsbG8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L2F0aG9zdC1hdHJ1bGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Q0YjUxMWVlMDJmYTlkNzUx
ZTU3ZTE2OWIwMGE2ZDg3N2Q1M2E2ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy5odG1sCkBAIC0wLDAgKzEsMTkwIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjaG9zdCB7CisgIGNvbG9yOiBn
cmF5OworfQorPC9zdHlsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9wb2x5ZmlsbC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gZHVtcENvbXB1dGVkU3R5bGUobm9kZSkKK3sK
KyAgICBkZWJ1Zyhub2RlLmlkICsgIjogIiArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1
dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7Cit9CisKK2Z1
bmN0aW9uIHByZXByb2Nlc3NGb3JUZXN0KCkKK3sKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInBhcmVudCIpOworICAgIHBhcmVudC5pbm5lckhUTUwgPSAnPGRpdiBp
ZD0iaG9zdCI+PHNwYW4+SGVsbG88L3NwYW4+PC9kaXY+JzsKK30KKworZnVuY3Rpb24gdGVzdFNp
bXBsZUNvbnRlbnRDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBo
b3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0g
bmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5
bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVu
dD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0U2lt
cGxlU2hhZG93Q2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9z
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIHNoYWRvdyA9IG5l
dyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxl
PkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7
CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0V2l0
aFNlbGVjdG9yKCkKK3sKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InBhcmVudCIpOworICAgIHBhcmVudC5pbm5lckhUTUwgPSAiPHN0eWxlIHNjb3BlZD4gLmhvc3Qg
eyBjb2xvcjogZ3JheSB9Ozwvc3R5bGU+IgorICAgICAgICArICI8ZGl2IGlkPSdob3N0QScgY2xh
c3M9J2hvc3QnPjxzcGFuPkhlbGxvPC9zcGFuPjwvZGl2PiIKKyAgICAgICAgKyAiPHNwYW4gaWQ9
J2hvc3RCJyBjbGFzcz0naG9zdCc+PHNwYW4+V29ybGQ8L3NwYW4+PC9zcGFuPiI7CisKKyAgICB2
YXIgaG9zdEEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdEEiKTsKKyAgICB2YXIgc2hh
ZG93QSA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3RBKTsKKyAgICB2YXIgc3R5bGUgPSAiPHN0
eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSBzcGFuIHsgY29sb3I6IGJsdWU7IH0gfTwv
c3R5bGU+IjsKKyAgICBzaGFkb3dBLmlubmVySFRNTCA9IHN0eWxlICsgIjxzaGFkb3c+PC9zaGFk
b3c+IjsKKworICAgIHZhciBob3N0QiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0QiIp
OworICAgIHZhciBzaGFkb3dCID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdEIpOworICAgIHNo
YWRvd0IuaW5uZXJIVE1MID0gc3R5bGUgKyAiPHNoYWRvdz48L3NoYWRvdz4iOworCisgICAgZHVt
cENvbXB1dGVkU3R5bGUoaG9zdEEpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3RCKTsKK30K
KworZnVuY3Rpb24gdGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVkKCkKK3sKKyAgICBwcmVwcm9jZXNz
Rm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3Qi
KTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hh
ZG93LmlubmVySFRNTCA9ICI8ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBkaXYgeyBjb2xvcjog
cmVkOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+PGRpdj48c3R5bGUgc2NvcGVkPkBob3N0
IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+PC9kaXY+PC9kaXY+IjsKKyAgICBkdW1w
Q29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFBzZXVkb0hvc3RXaXRoRmFs
bGJhY2tTaGFkb3coKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3Qg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cg
PSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBu
ZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0g
IjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9j
b250ZW50PiI7CisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxjb250ZW50PjxzaGFk
b3c+PC9zaGFkb3c+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9
CisKK2Z1bmN0aW9uIHRlc3RUd29TaGFkb3dSb290c0Nhc2UoKQoreworICAgIHByZXByb2Nlc3NG
b3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIp
OworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAg
ICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBv
bGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7
IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgeW91bmdlc3RTaGFkb3cuaW5u
ZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPjxz
aGFkb3c+PC9zaGFkb3c+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVu
Y3Rpb24gdGVzdFR3b1NoYWRvd1Jvb3RzQ3JlYXRpbmdEaWZmZXJlbnRPcmRlckNhc2UoKQorewor
ICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93
Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9v
dChob3N0KTsKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsg
ZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIG9s
ZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsg
fSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZSho
b3N0KTsKK30KKworZnVuY3Rpb24gdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFk
b3dDb250ZW50KCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0g
bmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdl
YktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0
U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hh
ZG93Um9vdChob3N0KTsKKworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c2hhZG93
Pjwvc2hhZG93PiI7CisgICAgeW91bmdlclNoYWRvdy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PC9j
b250ZW50PiI7CisgICAgb2xkZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRp
diB7IGNvbG9yOiBncmVlbjsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xk
ZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9
IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhv
c3QpOworfQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRv
dygpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJL
aXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciBvbGRlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFk
b3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jv
b3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3Qo
aG9zdCk7CisKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsg
ZGl2IHsgY29sb3I6IHllbGxvdzsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAg
eW91bmdlclNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJs
dWU7IH0gfTwvc3R5bGU+PGRpdj5pbmVydDwvZGl2PiI7CisgICAgb2xkZXJTaGFkb3cuaW5uZXJI
VE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBncmVlbjsgfSB9PC9zdHlsZT48c2hh
ZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhv
c3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOwor
ICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0TmVzdGVkQ2Fz
ZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG91dGVyU2hhZG93ID0gbmV3IFdlYktp
dFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgb3V0ZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5A
aG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGRpdiBpZD0ibmVzdGVkSG9zdCI+
SW5uZXJTaGFkb3c8L2Rpdj4nOworICAgIHZhciBuZXN0ZWQgPSBvdXRlclNoYWRvdy5nZXRFbGVt
ZW50QnlJZCgibmVzdGVkSG9zdCIpOworICAgIHZhciBpbm5lclNoYWRvdyA9IG5ldyBXZWJLaXRT
aGFkb3dSb290KG5lc3RlZCk7CisgICAgaW5uZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5A
aG9zdCB7IGRpdiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPlNob3cgPHNoYWRvdz48L3NoYWRv
dz4gaW4gb3V0ZXIuJzsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKKyAgICBkdW1wQ29t
cHV0ZWRTdHlsZShuZXN0ZWQpOworfQorCitmdW5jdGlvbiB0ZXN0SG9zdFZzU2NvcGVkU3R5bGUo
KQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIGhvc3QuaW5uZXJIVE1MID0gIjxzdHlsZSBzY29w
ZWQ+I2hvc3QgeyBjb2xvcjogeWVsbG93OyB9PC9zdHlsZT48c3Bhbj5IZWxsbzwvc3Bhbj4iOwor
ICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cu
aW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7ICNob3N0IHsgY29sb3I6IHJlZDsgfSB9PC9zdHls
ZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30K
KworZnVuY3Rpb24gdGVzdEhvc3RWc0lubGluZVN0eWxlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9y
VGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsK
KyAgICBob3N0LnN0eWxlLmNvbG9yID0gInllbGxvdyI7CisgICAgaG9zdC5pbm5lckhUTUwgPSAi
PHNwYW4+SGVsbG88L3NwYW4+IjsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jv
b3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBj
b2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21w
dXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiBydW5UZXN0cygpCit7CisgICAgdGVzdFNp
bXBsZUNvbnRlbnRDYXNlKCk7CisgICAgdGVzdFNpbXBsZVNoYWRvd0Nhc2UoKTsKKyAgICB0ZXN0
SG9zdFdpdGhTZWxlY3RvcigpOworICAgIHRlc3RQc2V1ZG9Ib3N0V2l0aFNjb3BlZCgpOworICAg
IHRlc3RQc2V1ZG9Ib3N0V2l0aEZhbGxiYWNrU2hhZG93KCk7CisgICAgdGVzdFR3b1NoYWRvd1Jv
b3RzQ2FzZSgpOworICAgIHRlc3RUd29TaGFkb3dSb290c0NyZWF0aW5nRGlmZmVyZW50T3JkZXJD
YXNlKCk7CisgICAgdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50
KCk7CisgICAgdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3coKTsKKyAgICB0
ZXN0TmVzdGVkQ2FzZSgpOworICAgIHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpOworICAgIHRlc3RI
b3N0VnNJbmxpbmVTdHlsZSgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9
InJ1blRlc3RzKCkiPgorICA8ZGl2IGlkPSJwYXJlbnQiPgorICA8L2Rpdj4KKzwvYm9keT4KKzwv
aHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168155</attachid>
            <date>2012-10-11 00:50:25 -0700</date>
            <delta_ts>2012-10-12 06:41:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88606-20121011164922.patch</filename>
            <type>text/plain</type>
            <size>44225</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODhmNjVmNWIxZTExMDZl
OWYxNzNmYTdjZWZiMjk2M2RlZTg0OTgwZS4uNmFlODUyNzYxZGEzNmNhMWNjODJjMGVkNmU2MGUy
Y2YwMjM2ZGIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOSBAQAorMjAxMi0xMC0xMCAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01d
IE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIEBob3N0LUBydWxlcyBh
Y2NvcmRpbmcgdG8gdGhlIHNoYWRvdyBkb20gc3BlYzoKKyAgICAgICAgaHR0cDovL2R2Y3MudzMu
b3JnL2hnL3dlYmNvbXBvbmVudHMvcmF3LWZpbGUvdGlwL3NwZWMvc2hhZG93L2luZGV4Lmh0bWwj
aG9zdC1hdC1ydWxlCisgICAgICAgIFRoZSBkZXNpZ24gZG9jIGlzOgorICAgICAgICBodHRwczov
L2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFQMnlvcmNoRjhsY2kyc2Njci1tVlNSZjJkdHZq
S2VpdXlRV3pDQjJiRUE4L2VkaXQKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvYXRo
b3N0LWF0cnVsZXMuaHRtbAorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAg
QWRkZWQgcnVsZXMgZm9yIHBhcnNpbmcgQGhvc3QgQC1ydWxlcy4KKyAgICAgICAgKiBjc3MvQ1NT
UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbik6
CisgICAgICAgIEFkZGVkIGEgbmV3IHRva2VuICJAaG9zdCIuCisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKToKKyAgICAgICAgQWRkZWQgYSBuZXcgbWV0aG9kIHRv
IGNyZWF0ZSBhbiBAaG9zdCBALXJ1bGUsIHdoaWNoIGlzIGludm9rZWQgZnJvbQorICAgICAgICBD
U1NHcmFtbWFyLnkuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2Vy
Lmg6CisgICAgICAgIEFkZGVkIGEgZGVjbGFyYXRpb24gb2YgdGhlIGFib3ZlIG5ldyBtZXRob2Q6
IGNyZWF0ZUhvc3RSdWxlLgorICAgICAgICAqIGNzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaDoK
KyAgICAgICAgQWRkZWQgSE9TVF9SVUxFIHRvIGVudW0gVHlwZS4KKyAgICAgICAgKiBjc3MvUnVs
ZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSdWxlRGF0YTo6UnVsZURhdGEpOgorICAgICAg
ICBNb2RpZmllZCBtdWx0aXBsZSBib29sIGFyZ3VtZW50cyBpbnRvIG9uZSB1bnNpZ25lZCBhcmd1
bWVudC4gTm93IGl0CisgICAgICAgIHVzZXMgY29tYmluYXRpb25zIG9mIHZhbHVlcyBmcm9tIGVu
dW0gQWRkUnVsZVN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVT
ZXQ6OmFkZFN0eWxlUnVsZSk6CisgICAgICAgIFVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBSdWxl
RGF0YSdzIGNoYW5nZS4KKyAgICAgICAgTW9kaWZpZWQgdG8gSW52b2tlIGluY3JlYXNlU3BlY2lm
aWNpdHkgaWYgdGhlIGdpdmVuIHJ1bGUgaXMgQGhvc3QKKyAgICAgICAgQC1ydWxlLgorICAgICAg
ICAqIGNzcy9SdWxlU2V0Lmg6CisgICAgICAgIChSdWxlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpSdWxlRGF0YTo6aW5jcmVhc2VTcGVjaWZpY2l0eSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1l
dGhvZCB0byBpbmNyZWFzZSBzZWxlY3RvcidzIHNwZWNpZmljaXR5LiBUaGlzIG1ldGhvZCBpcwor
ICAgICAgICB1c2VkIHRvIG1ha2UgQGhvc3QgQC1ydWxlcycgc3BlY2lmaWNpdHkgbGFyZ2VyIHRo
YW4gbm9ybWFsIGF1dGhvcgorICAgICAgICBydWxlcycgc3BlY2lmaWNpdHkuCisgICAgICAgIChS
dWxlU2V0KToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjptYWtlUnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGRI
b3N0UnVsZSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1ldGhvZCB0byByZWdpc3RlciBAaG9zdCBA
LXJ1bGVzIHdpdGggc2hhZG93IHJvb3RzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaGVzSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcg
bWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgYW55IEBob3N0IEAtcnVsZXMgd2lsbCBiZSBhcHBsaWVk
IHRvCisgICAgICAgIHRoZSBnaXZlbiBlbGVtZW50IG9yIG5vdC4gVGhpcyBpcyBwcmVwYXJlZCBm
b3Igc2hhcmVkIHN0eWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNo
SG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgbWF0Y2hlZCBob3N0IHJ1
bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhpcyBtZXRob2QgaW52b2tl
cyBTdHlsZVNjb3BlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzIHRvIGZpbmQKKyAgICAgICAgbWF0
Y2hlZCBob3N0IHJ1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hB
dXRob3JSdWxlcyk6CisgICAgICAgIE1vZGlmaWVkIHRvIGludm9rZSBtYXRjaEhvc3RSdWxlcy4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKToKKyAg
ICAgICAgRGlzYWJsZSBzaWJsaW5nIHN0eWxlIGNhY2hlIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlz
IGEgc2hhZG93IGhvc3QgYW5kCisgICAgICAgIGFueSBAaG9zdCBALXJ1bGVzIGFyZSBhcHBsaWVk
IHRvIHRoZSBlbGVtZW50LgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAg
IChTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUnVsZUJhc2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
dWxlQmFzZTo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjcmVhdGVD
U1NPTVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6U3R5bGVSdWxl
SG9zdCk6CisgICAgICAgIEltcGxlbWVudGVkIGNsYXNzIFN0eWxlUnVsZUhvc3QuIFRoZSBjbGFz
cyBpcyBhbG1vc3QgdGhlIHNhbWUgYXMKKyAgICAgICAgU3R5bGVSdWxlQmxvY2sgZXhjZXB0IHR5
cGUuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjppc0hvc3RSdWxlKToKKyAgICAgICAgKFN0eWxl
UnVsZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUhvc3Q6OmNvcHkpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZUF0SG9zdFJ1bGVTZXRGb3IpOgorICAgICAgICBB
IG5ldyBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJ1bGVTZXQgZm9yIHRoZSBnaXZlbiBzaGFkb3cg
cm9vdC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJl
c29sdmVyOjphdEhvc3RSdWxlU2V0Rm9yKToKKyAgICAgICAgQSBuZXcgcHJpdmF0ZSBpbmxpbmUg
bWV0aG9kIHRvIG9idGFpbiBAaG9zdCBALXJ1bGVzIGRlY2xhcmVkIGluCisgICAgICAgIHRoZSBn
aXZlbiBzaGFkb3cgcm9vdC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6
bWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBmaW5kIHdoZXRoZXIg
YW55IEBob3N0IEAtcnVsZXMgYXJlIGFwcGxpZWQgdG8KKyAgICAgICAgdGhlIGdpdmVuIGhvc3Qg
ZWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6bWF0Y2hIb3N0
UnVsZXMpOgorICAgICAgICBBIG5ldyBtZXRob2QgdG8gZmluZCBtYXRjaGVkIHJ1bGVzIGZvciB0
aGUgZ2l2ZW4gaG9zdCBlbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29s
dmVyOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlU2NvcGVSZXNvbHZl
ci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTdHlsZVNjb3BlUmVzb2x2ZXIpOgor
ICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKToKKyAgICAgICAgKiBk
b20vRWxlbWVudFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpF
bGVtZW50U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6OmFkZFNoYWRv
d1Jvb3QpOgorICAgICAgICBTaW5jZSBhIG5ldyBzaGFkb3cgcm9vdCBpcyBhZGRlZCwgZGlzYWJs
ZSBAaG9zdCBALXJ1bGVzIGNhY2hlLgorICAgICAgICAqIGRvbS9FbGVtZW50U2hhZG93Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hhZG93OjpoYXNNYXRjaGVkSG9zdFJ1bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6aGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6OmNsZWFySGFzTWF0Y2hlZEhvc3RS
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6OnNldEhhc01hdGNoZWRIb3N0
UnVsZSk6CisgICAgICAgIEFkZGVkIGZvdXIgbWV0aG9kcyBmb3IgQGhvc3QgQC1ydWxlcyBjYWNo
ZS4gVGhlIGNhY2hlIGhhcyBpbmZvcm1hdGlvbgorICAgICAgICBhYm91dCB3aGV0aGVyIGFueSBA
aG9zdCBALXJ1bGVzIG1hdGNoIHRoZSBFbGVtZW50U2hhZG93J3MgaG9zdC4KKyAgICAgICAgVGhl
IHJldHVybiB2YWx1ZSBvZiBoYXNNYXRjaGVkSG9zdFJ1bGUgaXMgYXZhaWxhYmxlIG9ubHkgaWYK
KyAgICAgICAgaGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlIHJldHVybnMgdHJ1ZS4KKyAgICAg
ICAgKEVsZW1lbnRTaGFkb3cpOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYWRvd1Jvb3Q6OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIERpc2Fi
bGUgQGhvc3QgQC1ydWxlcyBjYWNoZSwgYmVjYXVzZSBzdHlsZSBlbGVtZW50cyBtaWdodCBiZSBh
ZGRlZAorICAgICAgICBpbnRvIHRoZSBzaGFkb3cgZG9tIHN1YnRyZWUuCisKIDIwMTItMTAtMTAg
IElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IE5NSSBpbnN0cnVtZW50IEhUTUxDYW52YXMgZWxlbWVudC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
R3JhbW1hci55CmluZGV4IDRlMzUzM2UzYzlmM2I3OTBkNjc5Zjk1ZmYwYTFjNzk1MWMxOGM5NTku
LjkwZTI5YTM4YzEyY2Q5NzJjNzAzN2JhNzBhYmU3YjA4YWFiNjcwMDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYW1tYXIueQpAQCAtMTMyLDYgKzEzMiw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNzc3l5ZXJy
b3Iodm9pZCosIGNvbnN0IGNoYXIqKQogJXRva2VuIFBBR0VfU1lNCiAldG9rZW4gTUVESUFfU1lN
CiAldG9rZW4gRk9OVF9GQUNFX1NZTQorJXRva2VuIEhPU1RfU1lNCiAldG9rZW4gQ0hBUlNFVF9T
WU0KICV0b2tlbiBOQU1FU1BBQ0VfU1lNCiAldG9rZW4gVkFSRlVOQ1RJT04KQEAgLTIxOSw2ICsy
MjAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBjc3N5eWVycm9yKHZvaWQqLCBjb25zdCBjaGFyKikK
ICV0eXBlIDxydWxlPiBwYWdlCiAldHlwZSA8cnVsZT4gbWFyZ2luX2JveAogJXR5cGUgPHJ1bGU+
IGZvbnRfZmFjZQorJXR5cGUgPHJ1bGU+IGhvc3QKICV0eXBlIDxydWxlPiBrZXlmcmFtZXMKICV0
eXBlIDxydWxlPiBpbnZhbGlkX3J1bGUKICV0eXBlIDxydWxlPiBzYXZlX2Jsb2NrCkBAIC00MTks
NiArNDIxLDcgQEAgdmFsaWRfcnVsZToKICAgfCBuYW1lc3BhY2UKICAgfCBpbXBvcnQKICAgfCBy
ZWdpb24KKyAgfCBob3N0CiAgIDsKIAogcnVsZToKQEAgLTg0Nyw2ICs4NTAsMjMgQEAgZm9udF9m
YWNlOgogICAgIH0KIDsKIAorYmVmb3JlX2hvc3RfcnVsZToKKyAgICAvKiBlbXB0eSAqLyB7Cisg
ICAgICAgIHBhcnNlci0+bWFya1J1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0YTo6SE9T
VF9SVUxFKTsKKyAgICB9CisgICAgOworCitob3N0OgorICAgIGJlZm9yZV9ob3N0X3J1bGUgSE9T
VF9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlIAorICAgICd7JyBhdF9ydWxlX2Jv
ZHlfc3RhcnQgbWF5YmVfc3BhY2UgYmxvY2tfcnVsZV9saXN0IHNhdmVfYmxvY2sgeworICAgICAg
ICAkJCA9IHBhcnNlci0+Y3JlYXRlSG9zdFJ1bGUoJDcpOworICAgIH0KKyAgICB8IGJlZm9yZV9o
b3N0X3J1bGUgSE9TVF9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlICc7JyB7Cisg
ICAgICAgICQkID0gMDsKKyAgICAgICAgcGFyc2VyLT5wb3BSdWxlRGF0YSgpOworICAgIH0KKyAg
ICA7CisgCiByZWdpb25fc2VsZWN0b3I6CiAgICAgc2VsZWN0b3JfbGlzdCB7CiAgICAgICAgIGlm
ICgkMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCA0MjI4MmExOTY0OTExMzJjODI0
ZDIzY2M1YmMxM2ZjNjM0NWZlZWJhLi5lZjc4NzgzZTUwZmI4MmRjYTE2MmMzNWExYTk3MmU0YjI0
YmUyMzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtOTE1NSw2ICs5MTU1LDExIEBA
IGlubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihpbnQgbGVuZ3RoLCBib29sIGhh
c0VzY2FwZSkKICAgICAgICAgICAgIG1fdG9rZW4gPSBGT05UX0ZBQ0VfU1lNOwogICAgICAgICBy
ZXR1cm47CiAKKyAgICBjYXNlICdoJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA1ICYmIGlzRXF1
YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvc3QiKSkKKyAgICAgICAgICAgIG1fdG9rZW4g
PSBIT1NUX1NZTTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSAnaSc6CiAgICAgICAgIGlm
IChsZW5ndGggPT0gNyAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAibXBvcnQi
KSkgewogICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOwpAQCAtOTk0
Nyw2ICs5OTUyLDIyIEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VS
dWxlKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6
OmNyZWF0ZUhvc3RSdWxlKFJ1bGVMaXN0KiBydWxlcykKK3sKKyAgICBtX2FsbG93SW1wb3J0UnVs
ZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CisgICAgUmVmUHRyPFN0
eWxlUnVsZUhvc3Q+IHJ1bGU7CisgICAgaWYgKHJ1bGVzKQorICAgICAgICBydWxlID0gU3R5bGVS
dWxlSG9zdDo6Y3JlYXRlKCpydWxlcyk7CisgICAgZWxzZSB7CisgICAgICAgIFJ1bGVMaXN0IGVt
cHR5UnVsZXM7CisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoZW1wdHlSdWxl
cyk7CisgICAgfQorICAgIFN0eWxlUnVsZUhvc3QqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CisgICAg
bV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOworICAgIHByb2Nlc3NBbmRBZGRO
ZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2
b2lkIENTU1BhcnNlcjo6YWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBj
b25zdCBBdG9taWNTdHJpbmcmIHVyaSkKIHsKICAgICBpZiAoIW1fc3R5bGVTaGVldCB8fCAhbV9h
bGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBiMTEw
M2IxY2ZiMDUwOWZlNDgxNWQ3Yzk1NWY5OGMzMjlhNzg5M2VkLi5hMWZiMGM2YWQwZTIwZDgzN2Uz
MDFmZTJhNGY5NTkzMzU4MGM3YzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC0yODIsNiAr
MjgyLDcgQEAgcHVibGljOgogICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZVBhZ2VSdWxlKFBhc3NP
d25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxlY3Rvcik7CiAgICAgU3R5bGVSdWxlQmFz
ZSogY3JlYXRlUmVnaW9uUnVsZShDU1NTZWxlY3RvclZlY3RvciogcmVnaW9uU2VsZWN0b3IsIFJ1
bGVMaXN0KiBydWxlcyk7CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlTWFyZ2luQXRSdWxlKENT
U1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlKTsKKyAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVIb3N0
UnVsZShSdWxlTGlzdCogcnVsZXMpOwogICAgIHZvaWQgc3RhcnREZWNsYXJhdGlvbnNGb3JNYXJn
aW5Cb3goKTsKICAgICB2b2lkIGVuZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKaW5kZXggNDY5YmRiNjMwYzFh
NWM1ZGJhOTkzZmQxYWQ1OWVkMDc0NDlhNTViZS4uMDc5ZWMzMzYyNDk1YzA3OTc5YjQ3NWFmZGU3
NzYwMjM4NGM5OTk2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5
U291cmNlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURh
dGEuaApAQCAtOTQsNyArOTQsOCBAQCBzdHJ1Y3QgQ1NTUnVsZVNvdXJjZURhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxDU1NSdWxlU291cmNlRGF0YT4gewogICAgICAgICBGT05UX0ZBQ0VfUlVMRSwK
ICAgICAgICAgUEFHRV9SVUxFLAogICAgICAgICBLRVlGUkFNRVNfUlVMRSwKLSAgICAgICAgUkVH
SU9OX1JVTEUKKyAgICAgICAgUkVHSU9OX1JVTEUsCisgICAgICAgIEhPU1RfUlVMRQogICAgIH07
CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gY3JlYXRlKFR5cGUg
dHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAppbmRleCBlMmJlNTc3MWUwMjVmMTRjZjlhODVkZTdl
NTFjZDljNWExMzA5MDU5Li5kYWJjYThmMDU2NTBhYmU1MDQ2NzgyZTQ4MDBkOTlhYTA5ZGI3ODRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwCkBAIC0xMDcsMTggKzEwNywxOCBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUnVsZURhdGE6OlJ1bGVEYXRh
KFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRp
b24sIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tT
ZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpCitSdWxlRGF0YTo6UnVsZURhdGEoU3R5bGVSdWxl
KiBydWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWdu
ZWQgYWRkUnVsZVN0YXRlKQogICAgIDogbV9ydWxlKHJ1bGUpCiAgICAgLCBtX3NlbGVjdG9ySW5k
ZXgoc2VsZWN0b3JJbmRleCkKICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCiAgICAgLCBtX3Nw
ZWNpZmljaXR5KHNlbGVjdG9yKCktPnNwZWNpZmljaXR5KCkpCi0gICAgLCBtX2hhc0Zhc3RDaGVj
a2FibGVTZWxlY3RvcihjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciAmJiBTZWxlY3RvckNoZWNrZXI6
OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQorICAgICwgbV9oYXNGYXN0Q2hl
Y2thYmxlU2VsZWN0b3IoKGFkZFJ1bGVTdGF0ZSAmIFJ1bGVDYW5Vc2VGYXN0Q2hlY2tTZWxlY3Rv
cikgJiYgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3Rvcigp
KSkKICAgICAsIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3IoISFzZWxlY3RvcigpLT50YWdIaXN0b3J5
KCkpCiAgICAgLCBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVI
YXNoKGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goc2VsZWN0b3IoKSkpCiAg
ICAgLCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihXZWJDb3JlOjpjb250YWlu
c1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IoKSkpCiAgICAgLCBtX2xpbmtNYXRj
aFR5cGUoU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKHNlbGVjdG9yKCkp
KQotICAgICwgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4pCi0gICAgLCBtX2lzSW5SZWdpb25SdWxlKGluUmVnaW9uUnVsZSkKKyAgICAsIG1faGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbihhZGRSdWxlU3RhdGUgJiBSdWxlSGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbikKKyAgICAsIG1faXNJblJlZ2lvblJ1bGUoYWRkUnVsZVN0YXRlICYgUnVsZUlz
SW5SZWdpb25SdWxlKQogewogICAgIEFTU0VSVChtX3Bvc2l0aW9uID09IHBvc2l0aW9uKTsKICAg
ICBBU1NFUlQobV9zZWxlY3RvckluZGV4ID09IHNlbGVjdG9ySW5kZXgpOwpAQCAtMjA3LDkgKzIw
NywxNCBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXks
IEF0b21SdWxlTWFwJiBtYXAsIGNvbnN0IFJ1bGVEYQogICAgIHJ1bGVzLT5hcHBlbmQocnVsZURh
dGEpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25l
ZCBzZWxlY3RvckluZGV4LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2Fu
VXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQordm9pZCBSdWxlU2V0Ojph
ZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQg
YWRkUnVsZVN0YXRlKQogewotICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbGVjdG9ySW5k
ZXgsIG1fcnVsZUNvdW50KyssIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNhblVzZUZhc3RD
aGVja1NlbGVjdG9yLCBpblJlZ2lvblJ1bGUpOworICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUs
IHNlbGVjdG9ySW5kZXgsIG1fcnVsZUNvdW50KyssIGFkZFJ1bGVTdGF0ZSk7CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGF0aG9zdFJ1bGVTcGVjaWZpY2l0eSA9IDB4MTAwMDAwOworCisgICAg
aWYgKGFkZFJ1bGVTdGF0ZSAmIFJ1bGVJc0hvc3RSdWxlKQorICAgICAgICBydWxlRGF0YS5pbmNy
ZWFzZVNwZWNpZmljaXR5KGF0aG9zdFJ1bGVTcGVjaWZpY2l0eSk7CisKICAgICBjb2xsZWN0RmVh
dHVyZXNGcm9tUnVsZURhdGEobV9mZWF0dXJlcywgcnVsZURhdGEpOwogCiAgICAgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yID0gcnVsZURhdGEuc2VsZWN0b3IoKTsKQEAgLTI2NCwxMCArMjY5LDEyIEBA
IHZvaWQgUnVsZVNldDo6YWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qIHJlZ2lvblJ1bGUs
IGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0CiAKICAgICAvLyBDb2xsZWN0IHRoZSByZWdpb24gcnVs
ZXMgaW50byBhIHJ1bGUgc2V0CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNl
PiA+JiBjaGlsZFJ1bGVzID0gcmVnaW9uUnVsZS0+Y2hpbGRSdWxlcygpOworICAgIHVuc2lnbmVk
IGFkZFJ1bGVTdGF0ZSA9IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiA6IDA7CisgICAgYWRkUnVsZVN0YXRlIHw9IFJ1bGVDYW5Vc2VGYXN0
Q2hlY2tTZWxlY3RvciB8IFJ1bGVJc0luUmVnaW9uUnVsZTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraSkgewogICAgICAgICBTdHlsZVJ1bGVCYXNl
KiByZWdpb25TdHlsaW5nUnVsZSA9IGNoaWxkUnVsZXNbaV0uZ2V0KCk7CiAgICAgICAgIGlmIChy
ZWdpb25TdHlsaW5nUnVsZS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAgICAgIHJlZ2lvblJ1bGVT
ZXQtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihyZWdpb25TdHlsaW5nUnVs
ZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHRydWUsIHRydWUpOworICAgICAgICAgICAg
cmVnaW9uUnVsZVNldC0+YWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJlZ2lv
blN0eWxpbmdSdWxlKSwgYWRkUnVsZVN0YXRlKTsKICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSAi
Z2xvYmFsIiBydWxlIGNvdW50IHNvIHRoYXQgcHJvcGVyIG9yZGVyIGlzIG1haW50YWluZWQKICAg
ICBtX3J1bGVDb3VudCA9IHJlZ2lvblJ1bGVTZXQtPm1fcnVsZUNvdW50OwpAQCAtMjg2LDYgKzI5
Myw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRz
KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1CiAgICAgICAgICAgICBhZGRSdWxlc0Zyb21T
aGVldChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCksIG1lZGl1bSwgcmVzb2x2ZXIsIHNjb3BlKTsK
ICAgICB9CiAgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID0gcmVzb2x2ZXIgJiYg
cmVzb2x2ZXItPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3Qoc2hlZXQt
PmJhc2VVUkwoKSk7CisgICAgdW5zaWduZWQgYWRkUnVsZVN0YXRlID0gKGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA6IDApIHwgKCFzY29w
ZSA/IFJ1bGVDYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciA6IDApOwogCiAgICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBydWxlcyA9IHNoZWV0LT5jaGlsZFJ1bGVzKCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzLnNpemUoKTsgKytpKSB7CkBAIC0yOTMs
NyArMzAxLDcgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29u
dGVudHMqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHUKIAogICAgICAgICBBU1NFUlQoIXJ1
bGUtPmlzSW1wb3J0UnVsZSgpKTsKICAgICAgICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpCi0g
ICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSksIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFzY29wZSk7CisgICAgICAgICAgICBhZGRTdHlsZVJ1
bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSksIGFkZFJ1bGVTdGF0ZSk7CiAgICAgICAg
IGVsc2UgaWYgKHJ1bGUtPmlzUGFnZVJ1bGUoKSkKICAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0
YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihydWxlKSk7CiAgICAgICAgIGVsc2UgaWYgKHJ1bGUt
PmlzTWVkaWFSdWxlKCkpIHsKQEAgLTMwNSw3ICszMTMsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1
bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdQogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBjaGlsZFJ1bGVz
LnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0eWxlUnVsZUJhc2UqIGNoaWxk
UnVsZSA9IGNoaWxkUnVsZXNbal0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGls
ZFJ1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1
bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4oY2hpbGRSdWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiwgIXNjb3BlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShz
dGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihjaGlsZFJ1bGUpLCBhZGRSdWxlU3RhdGUpOwogICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzUGFnZVJ1bGUoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihj
aGlsZFJ1bGUpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRSdWxlLT5pc0Zv
bnRGYWNlUnVsZSgpICYmIHJlc29sdmVyKSB7CkBAIC0zNDcsMTUgKzM1NSwxNyBAQCB2b2lkIFJ1
bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0
IE1lZGlhUXVlcnlFdmFsdQogICAgICAgICAgICAgYWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxT
dHlsZVJ1bGVSZWdpb24qPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7CiAgICAg
ICAgIH0KICNlbmRpZgorICAgICAgICBlbHNlIGlmIChydWxlLT5pc0hvc3RSdWxlKCkpCisgICAg
ICAgICAgICByZXNvbHZlci0+YWRkSG9zdFJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlSG9zdCo+
KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBzY29wZSk7CiAgICAgfQogICAgIGlm
IChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCiAgICAgICAgIHNocmlua1RvRml0KCk7CiB9CiAK
LXZvaWQgUnVsZVNldDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSogcnVsZSwgYm9vbCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlz
SW5SZWdpb25SdWxlKQordm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiBydWxl
LCB1bnNpZ25lZCBhZGRSdWxlU3RhdGUpCiB7CiAgICAgZm9yIChzaXplX3Qgc2VsZWN0b3JJbmRl
eCA9IDA7IHNlbGVjdG9ySW5kZXggIT0gbm90Rm91bmQ7IHNlbGVjdG9ySW5kZXggPSBydWxlLT5z
ZWxlY3Rvckxpc3QoKS5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpCi0g
ICAgICAgIGFkZFJ1bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGlzSW5SZWdpb25SdWxlKTsKKyAgICAgICAg
YWRkUnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBhZGRSdWxlU3RhdGUpOwogfQogCiBzdGF0aWMg
aW5saW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBt
YXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL1J1bGVTZXQuaAppbmRleCA2NTc3MjM4YmE5MjM2YTlkNjgxMDM5MTk1YTBkZDQz
YTJlODA4MmEwLi5hM2RhZmM5YjZkODE4NTMwMGM1NjYwODU2MzljN2QyMWYyYmRmNjc4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9SdWxlU2V0LmgKQEAgLTMxLDYgKzMxLDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorZW51bSBBZGRSdWxlU3RhdGUgeworICAgIFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
ID0gMSwKKyAgICBSdWxlQ2FuVXNlRmFzdENoZWNrU2VsZWN0b3IgICA9IDEgPDwgMSwKKyAgICBS
dWxlSXNJblJlZ2lvblJ1bGUgICAgICAgICAgICA9IDEgPDwgMiwKKyAgICBSdWxlSXNIb3N0UnVs
ZSAgICAgICAgICAgICAgICA9IDEgPDwgMywKK307CisKIGNsYXNzIENTU1NlbGVjdG9yOwogY2xh
c3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3I7CkBAIC00MCw3ICs0
Nyw3IEBAIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKIAogY2xhc3MgUnVsZURhdGEgewogcHVi
bGljOgotICAgIFJ1bGVEYXRhKFN0eWxlUnVsZSosIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVu
c2lnbmVkIHBvc2l0aW9uLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2Fu
VXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKTsKKyAgICBSdWxlRGF0YShT
dHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgdW5z
aWduZWQgYWRkUnVsZVN0YXRlKTsKIAogICAgIHVuc2lnbmVkIHBvc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9wb3NpdGlvbjsgfQogICAgIFN0eWxlUnVsZSogcnVsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcnVsZTsgfQpAQCAtNTUsNiArNjIsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbGlua01h
dGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua01hdGNoVHlwZTsgfQogICAgIGJvb2wgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbjsgfQogICAgIGJvb2wgaXNJblJlZ2lvblJ1bGUoKSBjb25zdCB7IHJldHVybiBt
X2lzSW5SZWdpb25SdWxlOyB9CisgICAgdm9pZCBpbmNyZWFzZVNwZWNpZmljaXR5KHVuc2lnbmVk
IHZhbHVlKSB7IG1fc3BlY2lmaWNpdHkgKz0gdmFsdWU7IH0KIAogICAgIC8vIFRyeSB0byBiYWxh
bmNlIGJldHdlZW4gbWVtb3J5IHVzYWdlICh0aGVyZSBjYW4gYmUgbG90cyBvZiBSdWxlRGF0YSBv
YmplY3RzKSBhbmQgZ29vZCBmaWx0ZXJpbmcgcGVyZm9ybWFuY2UuCiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQgPSA0OwpAQCAtOTgsOCArMTA2LDggQEAg
cHVibGljOgogCiAgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMq
LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGVSZXNvbHZlciogPSAwLCBjb25zdCBD
b250YWluZXJOb2RlKiA9IDApOwogCi0gICAgdm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiwg
Ym9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVj
dG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOwotICAgIHZvaWQgYWRkUnVsZShTdHls
ZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUg
PSBmYWxzZSk7CisgICAgdm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiwgdW5zaWduZWQgYWRk
UnVsZVN0YXRlKTsKKyAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0
b3JJbmRleCwgdW5zaWduZWQgYWRkUnVsZVN0YXRlKTsKICAgICB2b2lkIGFkZFBhZ2VSdWxlKFN0
eWxlUnVsZVBhZ2UqKTsKICAgICB2b2lkIGFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBr
ZXksIEF0b21SdWxlTWFwJiwgY29uc3QgUnVsZURhdGEmKTsKICAgICB2b2lkIGFkZFJlZ2lvblJ1
bGUoU3R5bGVSdWxlUmVnaW9uKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCA2Njk2ODFjMWU4ZTc5NWMyM2ZhZTM5
MDBiNDRkNjI5MmVjMTkwZjAwLi4yNGM4NzcyZmY4MThkM2M4NGZiZmY4MTRmMjZhYmE5NDYyMjgx
ZDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC02MSw2ICs2MSw3IEBA
CiAjaW5jbHVkZSAiQ291bnRlckNvbnRlbnQuaCIKICNpbmNsdWRlICJDdXJzb3JMaXN0LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkVsZW1l
bnRTaGFkb3cuaCIKICNpbmNsdWRlICJGb250RmVhdHVyZVZhbHVlLmgiCiAjaW5jbHVkZSAiRm9u
dFZhbHVlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKQEAgLTM3NCw3ICszNzUsNyBAQCBzdGF0aWMg
UGFzc093blB0cjxSdWxlU2V0PiBtYWtlUnVsZVNldChjb25zdCBWZWN0b3I8UnVsZUZlYXR1cmU+
JiBydWxlcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgT3duUHRyPFJ1bGVTZXQ+IHJ1
bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkKLSAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxlc1tpXS5ydWxlLCBydWxlc1tp
XS5zZWxlY3RvckluZGV4LCBydWxlc1tpXS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBmYWxz
ZSk7CisgICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVsZXNbaV0ucnVsZSwgcnVsZXNbaV0uc2Vs
ZWN0b3JJbmRleCwgcnVsZXNbaV0uaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA/IFJ1bGVIYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luIDogMCk7CiAgICAgcnVsZVNldC0+c2hyaW5rVG9GaXQoKTsK
ICAgICByZXR1cm4gcnVsZVNldC5yZWxlYXNlKCk7CiB9CkBAIC00MzQsNiArNDM1LDM2IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmlyc3RO
ZXcsIGNvbnN0IFZlY3RvcjxSZWZQCiAgICAgICAgIGRvY3VtZW50KCktPnJlbmRlcmVyKCktPnN0
eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogfQogCit2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFkZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3QqIGhvc3RSdWxlLCBib29sIGhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4sIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoreworI2lmIEVO
QUJMRShTVFlMRV9TQ09QRUQpCisgICAgaWYgKCFzY29wZSB8fCAhc2NvcGUtPmlzSW5TaGFkb3dU
cmVlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBz
Y29wZS0+c2hhZG93Um9vdCgpOworICAgIGlmICghc2hhZG93Um9vdCB8fCAhc2hhZG93Um9vdC0+
aG9zdCgpKQorICAgICAgICByZXR1cm47CisgICAgc2hhZG93Um9vdC0+b3duZXIoKS0+Y2xlYXJI
YXNNYXRjaGVkSG9zdFJ1bGUoKTsKKworICAgIGlmICghbV9zY29wZVJlc29sdmVyKQorICAgICAg
ICBtX3Njb3BlUmVzb2x2ZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTY29wZVJlc29sdmVyKCkpOwor
ICAgIFJ1bGVTZXQqIHJ1bGUgPSBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZUF0SG9zdFJ1bGVTZXRG
b3Ioc2hhZG93Um9vdCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+
ID4mIGNoaWxkUnVsZXMgPSBob3N0UnVsZS0+Y2hpbGRSdWxlcygpOworICAgIHVuc2lnbmVkIGFk
ZFN0YXRlUnVsZSA9IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiA6IDA7CisgICAgYWRkU3RhdGVSdWxlIHw9IFJ1bGVDYW5Vc2VGYXN0Q2hl
Y2tTZWxlY3RvciB8IFJ1bGVJc0hvc3RSdWxlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjaGlsZFJ1bGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0eWxlUnVsZUJhc2UqIGhvc3RT
dHlsaW5nUnVsZSA9IGNoaWxkUnVsZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmIChob3N0U3R5bGlu
Z1J1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICBydWxlLT5hZGRTdHlsZVJ1bGUoc3Rh
dGljX2Nhc3Q8U3R5bGVSdWxlKj4oaG9zdFN0eWxpbmdSdWxlKSwgYWRkU3RhdGVSdWxlKTsKKyAg
ICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShob3N0UnVsZSk7CisgICAgVU5VU0VEX1BBUkFN
KGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOworICAgIFVOVVNFRF9QQVJBTShzY29wZSk7Cisj
ZW5kaWYKK30KKwogdm9pZCBTdHlsZVJlc29sdmVyOjpwdXNoUGFyZW50RWxlbWVudChFbGVtZW50
KiBwYXJlbnQpCiB7CiAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50c1BhcmVudCA9IHBh
cmVudC0+cGFyZW50T3JIb3N0RWxlbWVudCgpOwpAQCAtNzQ1LDYgKzc3NiwzNiBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwg
Ym9vbCBpbmNsdWRlRW1wdAogI2VuZGlmCiB9CiAKK2lubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6
Om1hdGNoZXNIb3N0UnVsZXMoKQoreworI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpCisgICAgcmV0
dXJuIG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPm1hdGNoZXNIb3N0UnVsZXMo
bV9lbGVtZW50KTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQg
U3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBp
bmNsdWRlRW1wdHlSdWxlcykKK3sKKyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQorICAgIGlmICgh
bV9zY29wZVJlc29sdmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8UnVsZVNldCo+
IG1hdGNoZWRSdWxlczsKKyAgICBtX3Njb3BlUmVzb2x2ZXItPm1hdGNoSG9zdFJ1bGVzKG1fZWxl
bWVudCwgbWF0Y2hlZFJ1bGVzKTsKKyAgICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTWF0Y2hPcHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVs
ZXMpOworICAgIG9wdGlvbnMuc2NvcGUgPSBtX2VsZW1lbnQ7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSA+IDA7IC0taSkKKyAgICAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXMobWF0Y2hlZFJ1bGVzLmF0KGktMSksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JS
dWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVFbXB0eVJ1bGVz
KTsKKyNlbmRpZgorfQorCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKICAgICBtX21hdGNo
ZWRSdWxlcy5jbGVhcigpOwpAQCAtNzU5LDYgKzgyMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1
bGVzCiAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obV9hdXRob3JTdHlsZS5nZXQo
KSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhv
clJ1bGUsIG9wdGlvbnMpOwogCiAgICAgbWF0Y2hTY29wZWRBdXRob3JSdWxlcyhyZXN1bHQsIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKIAogICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwogfQpA
QCAtMTMxMiw2ICsxMzc0LDkgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNo
YXJlZFN0eWxlKCkKICAgICAvLyBDYW4ndCBzaGFyZSBpZiBhdHRyaWJ1dGUgcnVsZXMgYXBwbHku
CiAgICAgaWYgKG1hdGNoZXNSdWxlU2V0KG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0LmdldCgp
KSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgQGhvc3QgQC1ydWxl
cyBhcHBseS4KKyAgICBpZiAobWF0Y2hlc0hvc3RSdWxlcygpKQorICAgICAgICByZXR1cm4gMDsK
ICAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCByZXF1aXJlcyB1bmlxdWUgc3R5bGUgZm9yIGVh
Y2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0aGUgc2libGluZyBydWxlIG1hdGNoIGFib3Zl
LgogICAgIGlmIChwYXJlbnRTdHlsZVByZXZlbnRzU2hhcmluZyhtX3BhcmVudFN0eWxlKSkKICAg
ICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCA2YjEzNjIz
YzY1M2NkYmMxYjU5YzdhZTI3N2QzODRlODIxYmIyMzI0Li5lMzI5YzI1ZjkyZDRmNzBiMzgzZDJm
YTQ1NzFmMDQ0NDAzODRlMTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTcy
LDYgKzcyLDcgQEAgY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xhc3MgUnVsZURhdGE7CiBjbGFzcyBS
dWxlU2V0OwogY2xhc3MgU2V0dGluZ3M7CitjbGFzcyBTaGFkb3dSb290OwogY2xhc3MgU3RhdGlj
Q1NTUnVsZUxpc3Q7CiBjbGFzcyBTdHlsZUJ1aWxkZXI7CiBjbGFzcyBTdHlsZVNjb3BlUmVzb2x2
ZXI7CkBAIC04MCw2ICs4MSw3IEBAIGNsYXNzIFN0eWxlS2V5ZnJhbWU7CiBjbGFzcyBTdHlsZVBl
bmRpbmdJbWFnZTsKIGNsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CiBjbGFzcyBTdHlsZVJ1bGU7Citj
bGFzcyBTdHlsZVJ1bGVIb3N0OwogY2xhc3MgU3R5bGVSdWxlS2V5ZnJhbWVzOwogY2xhc3MgU3R5
bGVSdWxlUGFnZTsKIGNsYXNzIFN0eWxlUnVsZVJlZ2lvbjsKQEAgLTEzNyw2ICsxMzksNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBwb3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIHB1
c2hQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKICAgICB2b2lkIHBvcFBhcmVu
dFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCopOworICAgIHZvaWQgYWRkSG9zdFJ1bGUoU3R5
bGVSdWxlSG9zdCosIGJvb2wsIGNvbnN0IENvbnRhaW5lck5vZGUqKTsKIAogICAgIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlID0gMCwgU3R5bGVTaGFyaW5nQmVoYXZpb3IgPSBBbGxvd1N0eWxlU2hhcmluZywK
ICAgICAgICAgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBSZW5kZXJSZWdp
b24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKQEAgLTE3NCw2ICsxNzcsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKCk7CiAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJl
ZFN0eWxlKCk7CiAgICAgYm9vbCBtYXRjaGVzUnVsZVNldChSdWxlU2V0Kik7CisgICAgYm9vbCBt
YXRjaGVzSG9zdFJ1bGVzKCk7CiAgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBw
YXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKICAgICBTdHlsZWRFbGVt
ZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBj
b25zdDsKICAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50Kikg
Y29uc3Q7CkBAIC0zMjYsNiArMzMwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1hdGNoQXV0aG9y
UnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1h
dGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAg
dm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcyk7CisgICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXMoUnVsZVNldCos
IGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRp
b25zJik7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0Kiwg
aW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlv
bnMmKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8
UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25z
dCBNYXRjaE9wdGlvbnMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKaW5kZXggNzNiMGFmMjZj
ZTQyYWE0NTk0ZDliNzYxNzk2YjE5ZDZhNmJiNjY1Yy4uZmQ1YzBjMzAyZDNkYTEzMzlhMDlmNjU0
NDU5ZTBjZDQxMzMxNGU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVs
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKQEAgLTc5LDYgKzc5
LDkgQEAgdm9pZCBTdHlsZVJ1bGVCYXNlOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJ
bmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAg
ICBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqPih0aGlzKS0+cmVwb3J0RGVz
Y2VuZGFudE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwogICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBIb3N0OgorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVCbG9jayo+
KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7Cisg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAg
IGNhc2UgS2V5ZnJhbWU6CkBAIC0xMTcsNiArMTIwLDkgQEAgdm9pZCBTdHlsZVJ1bGVCYXNlOjpk
ZXN0cm95KCkKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0
PFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBI
b3N0OgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5bGVSdWxlSG9zdCo+KHRoaXMpOwor
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBVbmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAg
ICBjYXNlIEtleWZyYW1lOgpAQCAtMTUwLDYgKzE1Niw4IEBAIFBhc3NSZWZQdHI8U3R5bGVSdWxl
QmFzZT4gU3R5bGVSdWxlQmFzZTo6Y29weSgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogICAg
IGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVS
dWxlS2V5ZnJhbWVzKj4odGhpcyktPmNvcHkoKTsKKyAgICBjYXNlIEhvc3Q6CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVIb3N0Kj4odGhpcyktPmNvcHkoKTsKICAg
ICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBA
IC0xOTEsNiArMTk5LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlPiBTdHlsZVJ1bGVCYXNlOjpjcmVh
dGVDU1NPTVdyYXBwZXIoQ1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQKICAgICBjYXNlIEtleWZy
YW1lczoKICAgICAgICAgcnVsZSA9IFdlYktpdENTU0tleWZyYW1lc1J1bGU6OmNyZWF0ZShzdGF0
aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihzZWxmKSwgcGFyZW50U2hlZXQpOwogICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEhvc3Q6CiAgICAgY2FzZSBVbmtub3duOgogICAgIGNhc2UgQ2hh
cnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMzgxLDQgKzM5MCwxNCBAQCB2b2lkIFN0eWxl
UnVsZVJlZ2lvbjo6cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8q
IG1lbW9yeU9iamVjdAogICAgIGluZm8uYWRkTWVtYmVyKG1fc2VsZWN0b3JMaXN0KTsKIH0KIAor
U3R5bGVSdWxlSG9zdDo6U3R5bGVSdWxlSG9zdChWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+
ID4mIGFkb3B0UnVsZXMpCisgICAgOiBTdHlsZVJ1bGVCbG9jayhIb3N0LCBhZG9wdFJ1bGVzKQor
eworfQorCitTdHlsZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KGNvbnN0IFN0eWxlUnVsZUhvc3Qm
IG8pCisgICAgOiBTdHlsZVJ1bGVCbG9jayhvKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKaW5kZXggZTE1ZjMyZTQwMmFhZjIwOGQzY2MwZmNjZDM1
ODQ3N2IyMzAzNTYzNC4uN2FkMzEzZWNlYThiYmZiMWY2MzBhMmM1NGQ5N2IyNDQxNzMwMzkwMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAgICAgICAg
IFBhZ2UsCiAgICAgICAgIEtleWZyYW1lcywKICAgICAgICAgS2V5ZnJhbWUsIC8vIE5vdCB1c2Vk
LiBUaGVzZSBhcmUgaW50ZXJuYWxseSBub24tcnVsZSBTdHlsZUtleWZyYW1lIG9iamVjdHMuCisg
ICAgICAgIEhvc3QsCiAgICAgICAgIFJlZ2lvbiA9IDE2CiAgICAgfTsKICAgICBUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9CkBAIC01OCw2ICs1
OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3R5bGVSdWxlKCkgY29uc3QgeyByZXR1cm4gdHlw
ZSgpID09IFN0eWxlOyB9CiAgICAgYm9vbCBpc1JlZ2lvblJ1bGUoKSBjb25zdCB7IHJldHVybiB0
eXBlKCkgPT0gUmVnaW9uOyB9CiAgICAgYm9vbCBpc0ltcG9ydFJ1bGUoKSBjb25zdCB7IHJldHVy
biB0eXBlKCkgPT0gSW1wb3J0OyB9CisgICAgYm9vbCBpc0hvc3RSdWxlKCkgY29uc3QgeyByZXR1
cm4gdHlwZSgpID09IEhvc3Q7IH0KIAogICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gY29w
eSgpIGNvbnN0OwogCkBAIC0yMjMsNiArMjI1LDIwIEBAIHByaXZhdGU6CiAgICAgQ1NTU2VsZWN0
b3JMaXN0IG1fc2VsZWN0b3JMaXN0OwogfTsKIAorY2xhc3MgU3R5bGVSdWxlSG9zdCA6IHB1Ymxp
YyBTdHlsZVJ1bGVCbG9jayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVS
dWxlSG9zdD4gY3JlYXRlKFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxl
cykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVSdWxlSG9zdChhZG9w
dFJ1bGVzKSk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVIb3N0PiBjb3B5KCkg
Y29uc3QgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZUhvc3QoKnRoaXMpKTsgfQorCitw
cml2YXRlOgorICAgIFN0eWxlUnVsZUhvc3QoVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+
JiBhZG9wdFJ1bGVzKTsKKyAgICBTdHlsZVJ1bGVIb3N0KGNvbnN0IFN0eWxlUnVsZUhvc3QmKTsK
K307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFN0eWxlUnVsZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCmluZGV4IDg3NDAyYmFhNTk4
MTAyNGVlNWQ2NDQ2NWFkMTc4ZGNjYjc5ZGVhOGEuLmM2Mzc0Y2Y4NjYwY2I3ZGE2NzhiYTRhZmMw
N2I0NDk4YmRhNDIwYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3Bl
UmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIu
Y3BwCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5j
bHVkZSAiQ29udGV4dEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJSdWxlRmVhdHVyZS5oIgpAQCAtMTU0LDExICsxNTUsNzAgQEAgdm9pZCBTdHlsZVNjb3Bl
UmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlc1RvKFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcykKICAg
ICAgICAgZmVhdHVyZXMuYWRkKGl0LT52YWx1ZS0+ZmVhdHVyZXMoKSk7CiB9CiAKK1J1bGVTZXQq
IFN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlQXRIb3N0UnVsZVNldEZvcihjb25zdCBTaGFkb3dS
b290KiBzaGFkb3dSb290KQoreworICAgIFNjb3BlZFJ1bGVTZXRNYXA6OkFkZFJlc3VsdCBhZGRS
ZXN1bHQgPSBtX2F0SG9zdFJ1bGVzLmFkZChzaGFkb3dSb290LCBudWxscHRyKTsKKyAgICBpZiAo
YWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBSdWxlU2V0OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5nZXQoKTsKK30KKworaW5saW5lIFJ1bGVTZXQqIFN0eWxlU2NvcGVSZXNvbHZlcjo6YXRIb3N0
UnVsZVNldEZvcihjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KSBjb25zdAoreworICAgIFNj
b3BlZFJ1bGVTZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdEhvc3RSdWxlcy5maW5kKHNo
YWRvd1Jvb3QpOworICAgIHJldHVybiBpdCAhPSBtX2F0SG9zdFJ1bGVzLmVuZCgpID8gaXQtPnZh
bHVlLmdldCgpIDogMDsKK30KKworYm9vbCBTdHlsZVNjb3BlUmVzb2x2ZXI6Om1hdGNoZXNIb3N0
UnVsZXMoY29uc3QgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAobV9hdEhvc3RSdWxlcy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVsZW1lbnRTaGFkb3cqIHNo
YWRvdyA9IGVsZW1lbnQtPnNoYWRvdygpOworICAgIGlmICghc2hhZG93KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKHNoYWRvdy0+aGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlKCkp
CisgICAgICAgIHJldHVybiBzaGFkb3ctPmhhc01hdGNoZWRIb3N0UnVsZSgpOworCisgICAgZm9y
IChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsg
c2hhZG93Um9vdDsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7
CisgICAgICAgIGlmIChhdEhvc3RSdWxlU2V0Rm9yKHNoYWRvd1Jvb3QpKSB7CisgICAgICAgICAg
ICBzaGFkb3ctPnNldEhhc01hdGNoZWRIb3N0UnVsZSh0cnVlKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghc2hhZG93Um9vdC0+aGFzU2hhZG93SW5z
ZXJ0aW9uUG9pbnQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBzaGFkb3ctPnNl
dEhhc01hdGNoZWRIb3N0UnVsZShmYWxzZSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFN0eWxlU2NvcGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoY29uc3QgRWxlbWVudCogZWxlbWVu
dCwgVmVjdG9yPFJ1bGVTZXQqPiYgbWF0Y2hlZFJ1bGVzKQoreworICAgIGlmIChtX2F0SG9zdFJ1
bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRWxlbWVudFNoYWRvdyogc2hh
ZG93ID0gZWxlbWVudC0+c2hhZG93KCk7CisgICAgaWYgKCFzaGFkb3cpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIElmIEFscmVhZHkga25vdyB3aGV0aGVyIHRoZXJlIGV4aXN0IGFueSBtYXRj
aGVkIGhvc3QgcnVsZXMgb3Igbm90LCBzZWUuCisgICAgaWYgKHNoYWRvdy0+aGFzTWF0Y2hlZEhv
c3RSdWxlQXZhaWxhYmxlKCkgJiYgIXNoYWRvdy0+aGFzTWF0Y2hlZEhvc3RSdWxlKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZvciAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNoYWRvdy0+
eW91bmdlc3RTaGFkb3dSb290KCk7IHNoYWRvd1Jvb3Q7IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290
LT5vbGRlclNoYWRvd1Jvb3QoKSkgeyAKKyAgICAgICAgaWYgKFJ1bGVTZXQqIHJ1bGVTZXQgPSBh
dEhvc3RSdWxlU2V0Rm9yKHNoYWRvd1Jvb3QpKQorICAgICAgICAgICAgbWF0Y2hlZFJ1bGVzLmFw
cGVuZChydWxlU2V0KTsKKyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFkb3dJbnNlcnRp
b25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB2b2lkIFN0eWxlU2Nv
cGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykgY29uc3QKIHsKICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJ
bmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7CiAgICAgaW5mby5hZGRNZW1iZXIo
bV9hdXRob3JTdHlsZXMpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fc3RhY2spOworICAgIGluZm8u
YWRkTWVtYmVyKG1fYXRIb3N0UnVsZXMpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
Y29wZVJlc29sdmVyLmgKaW5kZXggNWEzMmRmZTc5ZjgzNWJiN2NmOTViOGM3ZGQ5YjNiYjcwNDFm
YjdmYi4uYjYzYzdiY2IzNGFiZWEzMWM4OWI3NjA2OTBlODhjYTNiZWM4Zjc0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaApAQCAtMzcsOCArMzcsMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xhc3MgQ1NTU3R5bGVTaGVl
dDsKK2NsYXNzIEVsZW1lbnQ7CiBjbGFzcyBSdWxlU2V0OwogY2xhc3MgUnVsZUZlYXR1cmVTZXQ7
CitjbGFzcyBTaGFkb3dSb290OwogCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxF
KFNIQURPV19ET00pCiAKQEAgLTcyLDEyICs3NCwxNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYXRj
aGVzU3R5bGVCb3VuZHMoY29uc3QgU3RhY2tGcmFtZSYgZnJhbWUpIGNvbnN0IHsgcmV0dXJuIGZy
YW1lLm1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleCA9PSBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXg7
IH0KICAgICB2b2lkIGNvbGxlY3RGZWF0dXJlc1RvKFJ1bGVGZWF0dXJlU2V0Jik7CiAKKyAgICBS
dWxlU2V0KiBlbnN1cmVBdEhvc3RSdWxlU2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqKTsKKyAgICBi
b29sIG1hdGNoZXNIb3N0UnVsZXMoY29uc3QgRWxlbWVudCopOworICAgIHZvaWQgbWF0Y2hIb3N0
UnVsZXMoY29uc3QgRWxlbWVudCosIFZlY3RvcjxSdWxlU2V0Kj4mIG1hdGNoZWRSdWxlcyk7CisK
ICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBSdWxlU2V0KiBydWxlU2V0Rm9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHNj
b3BlKSBjb25zdDsKICAgICB2b2lkIHNldHVwU3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSopOwog
ICAgIGJvb2wgc3RhY2tJc0NvbnNpc3RlbnQoY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50KSBj
b25zdCB7IHJldHVybiBwYXJlbnQgJiYgcGFyZW50ID09IG1fc3RhY2tQYXJlbnQ7IH0KKyAgICBS
dWxlU2V0KiBhdEhvc3RSdWxlU2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqKSBjb25zdDsKIAogICAg
IFNjb3BlZFJ1bGVTZXRNYXAgbV9hdXRob3JTdHlsZXM7CiAKQEAgLTg4LDYgKzk1LDggQEAgcHJp
dmF0ZToKICAgICAvLyBUaGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgbV9zY29waW5nRWxl
bWVudFN0YWNrIGlzIGNvbnNpc3RlbnQsIHNlcGFyYXRlbHkgZnJvbSBTZWxlY3RvckNoZWNrZXI6
Om1fcGFyZW50U3RhY2suCiAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zdGFja1BhcmVudDsK
ICAgICBpbnQgbV9zdGFja1BhcmVudEJvdW5kc0luZGV4OworCisgICAgU2NvcGVkUnVsZVNldE1h
cCBtX2F0SG9zdFJ1bGVzOwogfTsKIAogaW5saW5lIGJvb2wgU3R5bGVTY29wZVJlc29sdmVyOjpl
bnN1cmVTdGFja0NvbnNpc3RlbmN5KENvbnRhaW5lck5vZGUqIHBhcmVudCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKaW5kZXggZTdjZTgxZWFhYjQ4NzE4NjI0ZjRl
YjU1MjM4ZTVjMWFmMzU2ODViOC4uMzllOWE3YjJjZDZjMjE5M2JiMDQ5ODBmYTg4YTgyNzIxZTRh
MjNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKQEAgLTQz
NSw2ICs0MzUsMTAgQEAgc3RhdGljIGJvb2wgY2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVk
U3VicmVzb3VyY2VzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGUKICAgICAgICAgICAgIGlmIChj
aGlsZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoc3RhdGljX2Nhc3Q8Y29u
c3QgU3R5bGVSdWxlUmVnaW9uKj4ocnVsZSktPmNoaWxkUnVsZXMoKSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdHlsZVJ1
bGVCYXNlOjpIb3N0OgorICAgICAgICAgICAgaWYgKGNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5j
ZWxlZFN1YnJlc291cmNlcyhzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVIb3N0Kj4ocnVsZSkt
PmNoaWxkUnVsZXMoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpJbXBvcnQ6CiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpQYWdl
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCmluZGV4IGFlYjViNWI0NzViMjE5YmM1
N2RjODVlZjJlN2I4MzJhZWU4ODkzZmMuLjgwOWJjYzg3ODIyZTUxNGNkOGQ2NGMzZGI4ZDMyYWM3
NTg3NjBlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAKQEAgLTM5LDYgKzM5
LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRWxlbWVudFNoYWRvdzo6RWxlbWVudFNoYWRv
dygpCisgICAgOiBtX2hhc01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZShmYWxzZSkKIHsKIH0KIApA
QCAtODksNiArOTAsMTAgQEAgdm9pZCBFbGVtZW50U2hhZG93OjphZGRTaGFkb3dSb290KEVsZW1l
bnQqIHNoYWRvd0hvc3QsIFBhc3NSZWZQdHI8U2hhZG93Um9vdD4gc2gKICAgICBpZiAoc2hhZG93
SG9zdC0+YXR0YWNoZWQoKSkKICAgICAgICAgc2hhZG93SG9zdC0+bGF6eVJlYXR0YWNoKCk7CiAK
KyAgICAvLyBBcyBhIG5ldyBzaGFkb3cgZG9tIHN1YnRyZWUgbWlnaHQgaGF2ZSBAaG9zdCBALXJ1
bGVzLCBuZWVkIHRvIGRpc2FibGUKKyAgICAvLyBoYXNNYXRjaGVkSG9zdFJ1bGVzIGNhY2hlLgor
ICAgIGNsZWFySGFzTWF0Y2hlZEhvc3RSdWxlKCk7CisKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZFB1c2hTaGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jvb3QuZ2V0KCkpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuaAppbmRleCBkZGI0MzgwNmJkZTE1MzlmYzdh
ZGMyYjlkODY5MmNlNzIzYzgzM2Y2Li41MTU2OWI2YTZhYjU2NmJmNGE5YmE0NTEzYjY0MGQzODVk
NDVmODYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgKQEAgLTcxLDExICs3MSwxOCBA
QCBwdWJsaWM6CiAgICAgQ29udGVudERpc3RyaWJ1dG9yJiBkaXN0cmlidXRvcigpOwogICAgIGNv
bnN0IENvbnRlbnREaXN0cmlidXRvciYgZGlzdHJpYnV0b3IoKSBjb25zdDsKIAorICAgIGJvb2wg
aGFzTWF0Y2hlZEhvc3RSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNNYXRjaGVkSG9zdFJ1bGU7
IH0KKyAgICBib29sIGhhc01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlOyB9CisgICAgdm9pZCBjbGVhckhhc01hdGNo
ZWRIb3N0UnVsZSgpIHsgbV9oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUgPSBmYWxzZTsgfQor
ICAgIHZvaWQgc2V0SGFzTWF0Y2hlZEhvc3RSdWxlKGJvb2wgaGFzUnVsZSkgeyBtX2hhc01hdGNo
ZWRIb3N0UnVsZSA9IGhhc1J1bGU7IG1faGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlID0gdHJ1
ZTsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgaW52YWxpZGF0ZURpc3RyaWJ1dGlvbihFbGVtZW50
KiBob3N0KTsKIAogICAgIERvdWJseUxpbmtlZExpc3Q8U2hhZG93Um9vdD4gbV9zaGFkb3dSb290
czsKICAgICBDb250ZW50RGlzdHJpYnV0b3IgbV9kaXN0cmlidXRvcjsKKyAgICBib29sIG1faGFz
TWF0Y2hlZEhvc3RSdWxlOworICAgIGJvb2wgbV9oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGU7
CiB9OwogCiBpbmxpbmUgU2hhZG93Um9vdCogRWxlbWVudFNoYWRvdzo6eW91bmdlc3RTaGFkb3dS
b290KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAppbmRleCA1MTgwYTFjMjJkODQ4
OTRlMzcwZjVjMTYyYjZhM2FjOGZmNmZkNDI1Li4zOTYwNGI5MTY0MDcwNGQxZjllOGZjOTU3MTcy
ODJiZjg3OGMxMzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCkBAIC0yMjQsNiArMjI0
LDcgQEAgdm9pZCBTaGFkb3dSb290OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJz
ZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSoKIHsKICAgICBDb250YWluZXJOb2RlOjpjaGls
ZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBj
aGlsZENvdW50RGVsdGEpOwogICAgIG93bmVyKCktPmludmFsaWRhdGVEaXN0cmlidXRpb24oKTsK
KyAgICBvd25lcigpLT5jbGVhckhhc01hdGNoZWRIb3N0UnVsZSgpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
YWJjMWIxMTBmM2ZlMjQ1YmI2YThjMDgzNjA1MWYzNWM5NWZjYTQ4Yi4uNDVmZWVkMTk1OWE0ZDg2
YTJhMmY1NjUxYWFhNjhhNmFhNDEzNjkzYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEw
LTEwICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hh
ZG93IERPTV0gTmVlZHMgQGhvc3QgcnVsZSBmb3IgU2hhZG93RE9NIHN0eWxpbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjA2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cv
YXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9z
aGFkb3cvYXRob3N0LWF0cnVsZXMuaHRtbDogQWRkZWQuCisKIDIwMTItMTAtMTAgIElseWEgVGlr
aG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IE5NSSBpbnN0cnVtZW50IEhUTUxDYW52YXMgZWxlbWVudC4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmExZjNiMWMyNTUxNjk1Njc4NzI1YmQ2NjUxODEzMTM0Mzg2NDlhMTQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0OiByZ2Io
MjU1LCAwLCAwKQoraG9zdEE6IHJnYigyNTUsIDAsIDApCitob3N0QjogcmdiKDAsIDAsIDI1NSkK
K2hvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMTI4LCAxMjgsIDEyOCkKK2hvc3Q6IHJn
YigwLCAwLCAyNTUpCitob3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAx
MjgpCitob3N0OiByZ2IoMjU1LCAyNTUsIDApCitob3N0OiByZ2IoMjU1LCAwLCAwKQorbmVzdGVk
SG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0OiByZ2IoMjU1
LCAyNTUsIDApCitIZWxsbwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L2F0aG9zdC1hdHJ1bGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0
LWF0cnVsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDRiNTExZWUwMmZhOWQ3NTFlNTdlMTY5YjAwYTZk
ODc3ZDUzYTZkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93
L2F0aG9zdC1hdHJ1bGVzLmh0bWwKQEAgLTAsMCArMSwxOTAgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyNob3N0IHsKKyAgY29sb3I6IGdyYXk7Cit9Cis8L3N0
eWxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3BvbHlmaWxsLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+CitmdW5jdGlvbiBkdW1wQ29tcHV0ZWRTdHlsZShub2RlKQoreworICAgIGRlYnVnKG5v
ZGUuaWQgKyAiOiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2Rl
LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKK30KKworZnVuY3Rpb24gcHJlcHJv
Y2Vzc0ZvclRlc3QoKQoreworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgicGFyZW50Iik7CisgICAgcGFyZW50LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJob3N0Ij48c3Bh
bj5IZWxsbzwvc3Bhbj48L2Rpdj4nOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlQ29udGVudENh
c2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hh
ZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRp
diB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVt
cENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVTaGFkb3dDYXNl
KCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYg
eyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBkdW1wQ29t
cHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdEhvc3RXaXRoU2VsZWN0b3IoKQor
eworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyZW50Iik7Cisg
ICAgcGFyZW50LmlubmVySFRNTCA9ICI8c3R5bGUgc2NvcGVkPiAuaG9zdCB7IGNvbG9yOiBncmF5
IH07PC9zdHlsZT4iCisgICAgICAgICsgIjxkaXYgaWQ9J2hvc3RBJyBjbGFzcz0naG9zdCc+PHNw
YW4+SGVsbG88L3NwYW4+PC9kaXY+IgorICAgICAgICArICI8c3BhbiBpZD0naG9zdEInIGNsYXNz
PSdob3N0Jz48c3Bhbj5Xb3JsZDwvc3Bhbj48L3NwYW4+IjsKKworICAgIHZhciBob3N0QSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0QSIpOworICAgIHZhciBzaGFkb3dBID0gbmV3IFdl
YktpdFNoYWRvd1Jvb3QoaG9zdEEpOworICAgIHZhciBzdHlsZSA9ICI8c3R5bGU+QGhvc3QgeyBk
aXYgeyBjb2xvcjogcmVkOyB9IHNwYW4geyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT4iOworICAg
IHNoYWRvd0EuaW5uZXJIVE1MID0gc3R5bGUgKyAiPHNoYWRvdz48L3NoYWRvdz4iOworCisgICAg
dmFyIGhvc3RCID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3RCIik7CisgICAgdmFyIHNo
YWRvd0IgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0Qik7CisgICAgc2hhZG93Qi5pbm5lckhU
TUwgPSBzdHlsZSArICI8c2hhZG93Pjwvc2hhZG93PiI7CisKKyAgICBkdW1wQ29tcHV0ZWRTdHls
ZShob3N0QSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdEIpOworfQorCitmdW5jdGlvbiB0
ZXN0UHNldWRvSG9zdFdpdGhTY29wZWQoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7Cisg
ICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBz
aGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1M
ID0gIjxkaXY+PHN0eWxlIHNjb3BlZD5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5
bGU+PHNoYWRvdz48L3NoYWRvdz48ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBkaXYgeyBjb2xv
cjogYmx1ZTsgfSB9PC9zdHlsZT48L2Rpdj48L2Rpdj4iOworICAgIGR1bXBDb21wdXRlZFN0eWxl
KGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0UHNldWRvSG9zdFdpdGhGYWxsYmFja1NoYWRvdygp
Cit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRT
aGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFk
b3dSb290KGhvc3QpOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0
IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAg
ICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PHNoYWRvdz48L3NoYWRvdz48
L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24g
dGVzdFR3b1NoYWRvd1Jvb3RzQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAg
ICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9s
ZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2Vz
dFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG9sZGVzdFNoYWRvdy5p
bm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48
Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0
eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRv
dz4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0VHdv
U2hhZG93Um9vdHNDcmVhdGluZ0RpZmZlcmVudE9yZGVyQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vz
c0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0
Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOwor
ICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAg
IHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjog
Ymx1ZTsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93Lmlu
bmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxj
b250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitm
dW5jdGlvbiB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvd0NvbnRlbnQoKQor
eworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hh
ZG93Um9vdChob3N0KTsKKyAgICB2YXIgb2xkZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9v
dChob3N0KTsKKyAgICB2YXIgeW91bmdlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhv
c3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3Qp
OworCisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzaGFkb3c+PC9zaGFkb3c+IjsK
KyAgICB5b3VuZ2VyU2hhZG93LmlubmVySFRNTCA9ICI8Y29udGVudD48L2NvbnRlbnQ+IjsKKyAg
ICBvbGRlclNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGdy
ZWVuOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5u
ZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNv
bnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1
bmN0aW9uIHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3RzV2l0aEluZXJ0U2hhZG93KCkKK3sKKyAgICBw
cmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3Qo
aG9zdCk7CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7
CisgICAgdmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAg
ICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKworICAg
IHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjog
eWVsbG93OyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICB5b3VuZ2VyU2hhZG93
LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsgfSB9PC9zdHls
ZT48ZGl2PmluZXJ0PC9kaXY+IjsKKyAgICBvbGRlclNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxl
PkBob3N0IHsgZGl2IHsgY29sb3I6IGdyZWVuOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+
IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNv
bG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1
dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3ROZXN0ZWRDYXNlKCkKK3sKKyAgICBw
cmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImhvc3QiKTsKKyAgICB2YXIgb3V0ZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdCho
b3N0KTsKKyAgICBvdXRlclNoYWRvdy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0IHsgZGl2IHsg
Y29sb3I6IHJlZDsgfSB9PC9zdHlsZT48ZGl2IGlkPSJuZXN0ZWRIb3N0Ij5Jbm5lclNoYWRvdzwv
ZGl2Pic7CisgICAgdmFyIG5lc3RlZCA9IG91dGVyU2hhZG93LmdldEVsZW1lbnRCeUlkKCJuZXN0
ZWRIb3N0Iik7CisgICAgdmFyIGlubmVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QobmVz
dGVkKTsKKyAgICBpbm5lclNoYWRvdy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0IHsgZGl2IHsg
Y29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+U2hvdyA8c2hhZG93Pjwvc2hhZG93PiBpbiBvdXRlci4n
OworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKG5l
c3RlZCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpCit7CisgICAgcHJl
cHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJob3N0Iik7CisgICAgaG9zdC5pbm5lckhUTUwgPSAiPHN0eWxlIHNjb3BlZD4jaG9zdCB7IGNv
bG9yOiB5ZWxsb3c7IH08L3N0eWxlPjxzcGFuPkhlbGxvPC9zcGFuPiI7CisgICAgdmFyIHNoYWRv
dyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAi
PHN0eWxlPkBob3N0IHsgI2hvc3QgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50Pjwv
Y29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0
ZXN0SG9zdFZzSW5saW5lU3R5bGUoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAg
dmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIGhvc3Quc3R5
bGUuY29sb3IgPSAieWVsbG93IjsKKyAgICBob3N0LmlubmVySFRNTCA9ICI8c3Bhbj5IZWxsbzwv
c3Bhbj4iOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAg
ICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0g
fTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9z
dCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3RzKCkKK3sKKyAgICB0ZXN0U2ltcGxlQ29udGVudENh
c2UoKTsKKyAgICB0ZXN0U2ltcGxlU2hhZG93Q2FzZSgpOworICAgIHRlc3RIb3N0V2l0aFNlbGVj
dG9yKCk7CisgICAgdGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVkKCk7CisgICAgdGVzdFBzZXVkb0hv
c3RXaXRoRmFsbGJhY2tTaGFkb3coKTsKKyAgICB0ZXN0VHdvU2hhZG93Um9vdHNDYXNlKCk7Cisg
ICAgdGVzdFR3b1NoYWRvd1Jvb3RzQ3JlYXRpbmdEaWZmZXJlbnRPcmRlckNhc2UoKTsKKyAgICB0
ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvd0NvbnRlbnQoKTsKKyAgICB0ZXN0
TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvdygpOworICAgIHRlc3ROZXN0ZWRDYXNl
KCk7CisgICAgdGVzdEhvc3RWc1Njb3BlZFN0eWxlKCk7CisgICAgdGVzdEhvc3RWc0lubGluZVN0
eWxlKCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKSI+
CisgIDxkaXYgaWQ9InBhcmVudCI+CisgIDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168412</attachid>
            <date>2012-10-12 06:37:19 -0700</date>
            <delta_ts>2012-10-17 00:56:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88606-20121012223615.patch</filename>
            <type>text/plain</type>
            <size>45386</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjEwMTc1NWY3NTgzMzUx
NTIwZjZlNjA1ZWIxOGM4NGY1MDQ2YWUzYi4uMDY2YzQwNDUzNThlY2MxY2QwNzI2OWY3OTczYjRj
YTJiYzVlM2U3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNSBAQAorMjAxMi0xMC0xMiAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01d
IE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIEBob3N0LUBydWxlcyBh
Y2NvcmRpbmcgdG8gdGhlIHNoYWRvdyBkb20gc3BlYzoKKyAgICAgICAgaHR0cDovL2R2Y3MudzMu
b3JnL2hnL3dlYmNvbXBvbmVudHMvcmF3LWZpbGUvdGlwL3NwZWMvc2hhZG93L2luZGV4Lmh0bWwj
aG9zdC1hdC1ydWxlCisgICAgICAgIFRoZSBkZXNpZ24gZG9jIGlzOgorICAgICAgICBodHRwczov
L2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFQMnlvcmNoRjhsY2kyc2Njci1tVlNSZjJkdHZq
S2VpdXlRV3pDQjJiRUE4L2VkaXQKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvYXRo
b3N0LWF0cnVsZXMuaHRtbAorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAg
QWRkZWQgcnVsZXMgZm9yIHBhcnNpbmcgQGhvc3QgQC1ydWxlcy4KKyAgICAgICAgKiBjc3MvQ1NT
UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbik6
CisgICAgICAgIEFkZGVkIGEgbmV3IHRva2VuICJAaG9zdCIuCisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKToKKyAgICAgICAgQWRkZWQgYSBuZXcgbWV0aG9kIHRv
IGNyZWF0ZSBhbiBAaG9zdCBALXJ1bGUsIHdoaWNoIGlzIGludm9rZWQgZnJvbQorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICBBZGRlZCBhIGRl
Y2xhcmF0aW9uIG9mIHRoZSBhYm92ZSBuZXcgbWV0aG9kOiBjcmVhdGVIb3N0UnVsZS4KKyAgICAg
ICAgKiBjc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmg6CisgICAgICAgIEFkZGVkIEhPU1RfUlVM
RSB0byBlbnVtIFR5cGUuCisgICAgICAgICogY3NzL1J1bGVTZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgTW9kaWZpZWQgbXVsdGlwbGUgYm9v
bCBhcmd1bWVudHMgaW50byBvbmUgdW5zaWduZWQgYXJndW1lbnQuIE5vdyBpdAorICAgICAgICB1
c2VzIGNvbWJpbmF0aW9ucyBvZiB2YWx1ZXMgZnJvbSBlbnVtIEFkZFJ1bGVTdGF0ZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNl
dDo6YWRkUmVnaW9uUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSdWxlc0Zy
b21TaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRTdHlsZVJ1bGUpOgorICAg
ICAgICBVcGRhdGVkIGFjY29yZGluZyB0byB0aGUgUnVsZURhdGEncyBjaGFuZ2UuCisgICAgICAg
IE1vZGlmaWVkIHRvIEludm9rZSBpbmNyZWFzZVNwZWNpZmljaXR5IGlmIHRoZSBnaXZlbiBydWxl
IGlzIEBob3N0CisgICAgICAgIEAtcnVsZS4KKyAgICAgICAgKiBjc3MvUnVsZVNldC5oOgorICAg
ICAgICAoUnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmluY3JlYXNlU3Bl
Y2lmaWNpdHkpOgorICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgdG8gaW5jcmVhc2Ugc2VsZWN0
b3IncyBzcGVjaWZpY2l0eS4gVGhpcyBtZXRob2QgaXMKKyAgICAgICAgdXNlZCB0byBtYWtlIEBo
b3N0IEAtcnVsZXMnIHNwZWNpZmljaXR5IGxhcmdlciB0aGFuIG5vcm1hbCBhdXRob3IKKyAgICAg
ICAgcnVsZXMnIHNwZWNpZmljaXR5LgorICAgICAgICAoUnVsZVNldCk6CisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJ1bGVTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHMpOgor
ICAgICAgICBVcGRhdGVkIGFjY29yZGluZyB0byB0aGUgUnVsZURhdGEncyBjaGFuZ2UuCisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVz
SG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgbWF0Y2hlZCBob3N0IHJ1
bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhpcyBtZXRob2QgaW52b2tl
cworICAgICAgICBTdHlsZVNjb3BlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNo
ZXNIb3N0UnVsZXMgdG8gZmluZAorICAgICAgICBtYXRjaGVkIGhvc3QgcnVsZXMuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1
bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgbWF0Y2hlZCBob3N0IHJ1bGVzIHdo
ZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhpcyBtZXRob2QgaW52b2tlcyBTdHls
ZVNjb3BlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzIHRvIGZpbmQKKyAgICAgICAgbWF0Y2hlZCBo
b3N0IHJ1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JS
dWxlcyk6CisgICAgICAgIE1vZGlmaWVkIHRvIGludm9rZSBtYXRjaEhvc3RSdWxlcy4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKToKKyAgICAgICAg
RGlzYWJsZSBzaWJsaW5nIHN0eWxlIGNhY2hlIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlzIGEgc2hh
ZG93IGhvc3QgYW5kCisgICAgICAgIGFueSBAaG9zdCBALXJ1bGVzIGFyZSBhcHBsaWVkIHRvIHRo
ZSBlbGVtZW50LgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjplbnN1cmVTY29wZVJlc29sdmVyKToKKyAgICAgICAgSWYgbm8g
c2NvcGVSZXNvbHZlciBpcyBjcmVhdGVkLCBjcmVhdGUgYW5kIHJldHVybiB0aGUgaW5zdGFuY2Uu
CisgICAgICAgIElmIGNyZWF0ZWQsIGp1c3QgcmV0dXJuIHRoZSBpbnN0YW5jZS4KKyAgICAgICAg
KFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1
bGVCYXNlOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNT
U09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0OjpTdHlsZVJ1bGVI
b3N0KToKKyAgICAgICAgSW1wbGVtZW50ZWQgY2xhc3MgU3R5bGVSdWxlSG9zdC4gVGhlIGNsYXNz
IGlzIGFsbW9zdCB0aGUgc2FtZSBhcworICAgICAgICBTdHlsZVJ1bGVCbG9jayBleGNlcHQgdHlw
ZS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmlzSG9zdFJ1bGUpOgorICAgICAgICAoU3R5bGVS
dWxlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0OjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y29weSk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlQXRIb3N0UnVsZVNldEZvcik6CisgICAgICAgIEEg
bmV3IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUnVsZVNldCBmb3IgdGhlIGdpdmVuIHNoYWRvdyBy
b290LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVz
b2x2ZXI6OmF0SG9zdFJ1bGVTZXRGb3IpOgorICAgICAgICBBIG5ldyBwcml2YXRlIGlubGluZSBt
ZXRob2QgdG8gb2J0YWluIEBob3N0IEAtcnVsZXMgZGVjbGFyZWQgaW4KKyAgICAgICAgdGhlIGdp
dmVuIHNoYWRvdyByb290LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjph
ZGRIb3N0UnVsZSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1ldGhvZCB0byByZWdpc3RlciBAaG9z
dCBALXJ1bGVzIHdpdGggc2hhZG93IHJvb3RzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29w
ZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKToKKyAgICAg
ICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgd2hldGhlciBhbnkgQGhvc3QgQC1ydWxlcyBhcmUgYXBw
bGllZCB0bworICAgICAgICB0aGUgZ2l2ZW4gaG9zdCBlbGVtZW50LgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTY29wZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIEEgbmV3IG1l
dGhvZCB0byBmaW5kIG1hdGNoZWQgcnVsZXMgZm9yIHRoZSBnaXZlbiBob3N0IGVsZW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKToK
KyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFN0eWxlU2NvcGVSZXNvbHZlcik6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXRD
b250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGlsZFJ1bGVzSGF2ZUZhaWxlZE9yQ2Fu
Y2VsZWRTdWJyZXNvdXJjZXMpOgorICAgICAgICAqIGRvbS9FbGVtZW50U2hhZG93LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6OkVsZW1lbnRTaGFkb3cpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6YWRkU2hhZG93Um9vdCk6CisgICAgICAgIFNpbmNlIGEg
bmV3IHNoYWRvdyByb290IGlzIGFkZGVkLCBkaXNhYmxlIEBob3N0IEAtcnVsZXMgY2FjaGUuCisg
ICAgICAgICogZG9tL0VsZW1lbnRTaGFkb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRT
aGFkb3c6Omhhc01hdGNoZWRIb3N0UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hh
ZG93OjpoYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudFNoYWRvdzo6Y2xlYXJIYXNNYXRjaGVkSG9zdFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudFNoYWRvdzo6c2V0SGFzTWF0Y2hlZEhvc3RSdWxlKToKKyAgICAgICAgQWRkZWQgZm91
ciBtZXRob2RzIGZvciBAaG9zdCBALXJ1bGVzIGNhY2hlLiBUaGUgY2FjaGUgaGFzIGluZm9ybWF0
aW9uCisgICAgICAgIGFib3V0IHdoZXRoZXIgYW55IEBob3N0IEAtcnVsZXMgbWF0Y2ggdGhlIEVs
ZW1lbnRTaGFkb3cncyBob3N0LgorICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIGhhc01hdGNo
ZWRIb3N0UnVsZSBpcyBhdmFpbGFibGUgb25seSBpZgorICAgICAgICBoYXNNYXRjaGVkSG9zdFJ1
bGVBdmFpbGFibGUgcmV0dXJucyB0cnVlLgorICAgICAgICAoRWxlbWVudFNoYWRvdyk6CisgICAg
ICAgICogZG9tL1NoYWRvd1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6
Y2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgRGlzYWJsZSBAaG9zdCBALXJ1bGVzIGNhY2hlLCBi
ZWNhdXNlIHN0eWxlIGVsZW1lbnRzIG1pZ2h0IGJlIGFkZGVkCisgICAgICAgIGludG8gdGhlIHNo
YWRvdyBkb20gc3VidHJlZS4KKwogMjAxMi0xMC0xMiAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBbVjhdIFBlckNvbnRleHRFbmFibGVkIG1ldGhvZHMgc2hv
dWxkIGJlIGluc3RhbGxlZCB3aGVuIHRoZSBjb25zdHJ1Y3RvciBpcyBjcmVhdGVkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55IGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYW1tYXIueQppbmRleCA0ZTM1MzNlM2M5ZjNiNzkwZDY3OWY5NWZmMGExYzc5NTFjMThj
OTU5Li45MGUyOWEzOGMxMmNkOTcyYzcwMzdiYTcwYWJlN2IwOGFhYjY3MDA5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NHcmFtbWFyLnkKQEAgLTEzMiw2ICsxMzIsNyBAQCBzdGF0aWMgaW5saW5lIGludCBjc3N5
eWVycm9yKHZvaWQqLCBjb25zdCBjaGFyKikKICV0b2tlbiBQQUdFX1NZTQogJXRva2VuIE1FRElB
X1NZTQogJXRva2VuIEZPTlRfRkFDRV9TWU0KKyV0b2tlbiBIT1NUX1NZTQogJXRva2VuIENIQVJT
RVRfU1lNCiAldG9rZW4gTkFNRVNQQUNFX1NZTQogJXRva2VuIFZBUkZVTkNUSU9OCkBAIC0yMTks
NiArMjIwLDcgQEAgc3RhdGljIGlubGluZSBpbnQgY3NzeXllcnJvcih2b2lkKiwgY29uc3QgY2hh
ciopCiAldHlwZSA8cnVsZT4gcGFnZQogJXR5cGUgPHJ1bGU+IG1hcmdpbl9ib3gKICV0eXBlIDxy
dWxlPiBmb250X2ZhY2UKKyV0eXBlIDxydWxlPiBob3N0CiAldHlwZSA8cnVsZT4ga2V5ZnJhbWVz
CiAldHlwZSA8cnVsZT4gaW52YWxpZF9ydWxlCiAldHlwZSA8cnVsZT4gc2F2ZV9ibG9jawpAQCAt
NDE5LDYgKzQyMSw3IEBAIHZhbGlkX3J1bGU6CiAgIHwgbmFtZXNwYWNlCiAgIHwgaW1wb3J0CiAg
IHwgcmVnaW9uCisgIHwgaG9zdAogICA7CiAKIHJ1bGU6CkBAIC04NDcsNiArODUwLDIzIEBAIGZv
bnRfZmFjZToKICAgICB9CiA7CiAKK2JlZm9yZV9ob3N0X3J1bGU6CisgICAgLyogZW1wdHkgKi8g
eworICAgICAgICBwYXJzZXItPm1hcmtSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6
OkhPU1RfUlVMRSk7CisgICAgfQorICAgIDsKKworaG9zdDoKKyAgICBiZWZvcmVfaG9zdF9ydWxl
IEhPU1RfU1lNIGF0X3J1bGVfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSAKKyAgICAneycgYXRfcnVs
ZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlIGJsb2NrX3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKKyAg
ICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUhvc3RSdWxlKCQ3KTsKKyAgICB9CisgICAgfCBiZWZv
cmVfaG9zdF9ydWxlIEhPU1RfU1lNIGF0X3J1bGVfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSAnOycg
eworICAgICAgICAkJCA9IDA7CisgICAgICAgIHBhcnNlci0+cG9wUnVsZURhdGEoKTsKKyAgICB9
CisgICAgOworIAogcmVnaW9uX3NlbGVjdG9yOgogICAgIHNlbGVjdG9yX2xpc3QgewogICAgICAg
ICBpZiAoJDEpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggNDIyODJhMTk2NDkxMTMy
YzgyNGQyM2NjNWJjMTNmYzYzNDVmZWViYS4uZWY3ODc4M2U1MGZiODJkY2ExNjJjMzVhMWE5NzJl
NGIyNGJlMjM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTkxNTUsNiArOTE1NSwx
MSBAQCBpbmxpbmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdEF0VG9rZW4oaW50IGxlbmd0aCwgYm9v
bCBoYXNFc2NhcGUpCiAgICAgICAgICAgICBtX3Rva2VuID0gRk9OVF9GQUNFX1NZTTsKICAgICAg
ICAgcmV0dXJuOwogCisgICAgY2FzZSAnaCc6CisgICAgICAgIGlmIChsZW5ndGggPT0gNSAmJiBp
c0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3N0IikpCisgICAgICAgICAgICBtX3Rv
a2VuID0gSE9TVF9TWU07CisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgJ2knOgogICAgICAg
ICBpZiAobGVuZ3RoID09IDcgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIm1w
b3J0IikpIHsKICAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1ZXJ5TW9kZTsKQEAg
LTk5NDcsNiArOTk1MiwyMiBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZUZvbnRG
YWNlUnVsZSgpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorU3R5bGVSdWxlQmFzZSogQ1NTUGFy
c2VyOjpjcmVhdGVIb3N0UnVsZShSdWxlTGlzdCogcnVsZXMpCit7CisgICAgbV9hbGxvd0ltcG9y
dFJ1bGVzID0gbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOworICAgIFJlZlB0
cjxTdHlsZVJ1bGVIb3N0PiBydWxlOworICAgIGlmIChydWxlcykKKyAgICAgICAgcnVsZSA9IFN0
eWxlUnVsZUhvc3Q6OmNyZWF0ZSgqcnVsZXMpOworICAgIGVsc2UgeworICAgICAgICBSdWxlTGlz
dCBlbXB0eVJ1bGVzOworICAgICAgICBydWxlID0gU3R5bGVSdWxlSG9zdDo6Y3JlYXRlKGVtcHR5
UnVsZXMpOworICAgIH0KKyAgICBTdHlsZVJ1bGVIb3N0KiByZXN1bHQgPSBydWxlLmdldCgpOwor
ICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKKyAgICBwcm9jZXNzQW5k
QWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwogdm9pZCBDU1NQYXJzZXI6OmFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZp
eCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCiB7CiAgICAgaWYgKCFtX3N0eWxlU2hlZXQgfHwg
IW1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXgg
YjExMDNiMWNmYjA1MDlmZTQ4MTVkN2M5NTVmOThjMzI5YTc4OTNlZC4uYTFmYjBjNmFkMGUyMGQ4
MzdlMzAxZmUyYTRmOTU5MzM1ODBjN2MyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMjgy
LDYgKzI4Miw3IEBAIHB1YmxpYzoKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVQYWdlUnVsZShQ
YXNzT3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2VsZWN0b3IpOwogICAgIFN0eWxlUnVs
ZUJhc2UqIGNyZWF0ZVJlZ2lvblJ1bGUoQ1NTU2VsZWN0b3JWZWN0b3IqIHJlZ2lvblNlbGVjdG9y
LCBSdWxlTGlzdCogcnVsZXMpOwogICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZU1hcmdpbkF0UnVs
ZShDU1NTZWxlY3Rvcjo6TWFyZ2luQm94VHlwZSk7CisgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRl
SG9zdFJ1bGUoUnVsZUxpc3QqIHJ1bGVzKTsKICAgICB2b2lkIHN0YXJ0RGVjbGFyYXRpb25zRm9y
TWFyZ2luQm94KCk7CiAgICAgdm9pZCBlbmREZWNsYXJhdGlvbnNGb3JNYXJnaW5Cb3goKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCmluZGV4IDQ2OWJkYjYz
MGMxYTVjNWRiYTk5M2ZkMWFkNTllZDA3NDQ5YTU1YmUuLjA3OWVjMzM2MjQ5NWMwNzk3OWI0NzVh
ZmRlNzc2MDIzODRjOTk5NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9w
ZXJ0eVNvdXJjZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3Vy
Y2VEYXRhLmgKQEAgLTk0LDcgKzk0LDggQEAgc3RydWN0IENTU1J1bGVTb3VyY2VEYXRhIDogcHVi
bGljIFJlZkNvdW50ZWQ8Q1NTUnVsZVNvdXJjZURhdGE+IHsKICAgICAgICAgRk9OVF9GQUNFX1JV
TEUsCiAgICAgICAgIFBBR0VfUlVMRSwKICAgICAgICAgS0VZRlJBTUVTX1JVTEUsCi0gICAgICAg
IFJFR0lPTl9SVUxFCisgICAgICAgIFJFR0lPTl9SVUxFLAorICAgICAgICBIT1NUX1JVTEUKICAg
ICB9OwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGNyZWF0ZShU
eXBlIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKaW5kZXggZTJiZTU3NzFlMDI1ZjE0Y2Y5YTg1
ZGU3ZTUxY2Q5YzVhMTMwOTA1OS4uOTM4YWYwYTE1NzEwMTczMzI1MjNmZWNhYzMxMWZiMzkzNzYx
YzRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcApAQCAtMTA3LDE4ICsxMDcsMTggQEAgc3RhdGlj
IGlubGluZSBib29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rvcihjb25zdCBDU1NT
ZWxlY3Rvciogc2VsZWN0b3IKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJ1bGVEYXRhOjpSdWxl
RGF0YShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBv
c2l0aW9uLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENo
ZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQorUnVsZURhdGE6OlJ1bGVEYXRhKFN0eWxl
UnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRpb24sIEFk
ZFJ1bGVTdGF0ZSBhZGRSdWxlU3RhdGUpCiAgICAgOiBtX3J1bGUocnVsZSkKICAgICAsIG1fc2Vs
ZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQogICAgICwgbV9wb3NpdGlvbihwb3NpdGlvbikKICAg
ICAsIG1fc3BlY2lmaWNpdHkoc2VsZWN0b3IoKS0+c3BlY2lmaWNpdHkoKSkKLSAgICAsIG1faGFz
RmFzdENoZWNrYWJsZVNlbGVjdG9yKGNhblVzZUZhc3RDaGVja1NlbGVjdG9yICYmIFNlbGVjdG9y
Q2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IoKSkpCisgICAgLCBtX2hh
c0Zhc3RDaGVja2FibGVTZWxlY3RvcigoYWRkUnVsZVN0YXRlICYgUnVsZUNhblVzZUZhc3RDaGVj
a1NlbGVjdG9yKSAmJiBTZWxlY3RvckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKHNl
bGVjdG9yKCkpKQogICAgICwgbV9oYXNNdWx0aXBhcnRTZWxlY3RvcighIXNlbGVjdG9yKCktPnRh
Z0hpc3RvcnkoKSkKICAgICAsIG1faGFzUmlnaHRtb3N0U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNl
ZE9uUnVsZUhhc2goaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChzZWxlY3Rv
cigpKSkKICAgICAsIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKFdlYkNvcmU6
OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihzZWxlY3RvcigpKSkKICAgICAsIG1f
bGlua01hdGNoVHlwZShTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtNYXRjaFR5cGUoc2Vs
ZWN0b3IoKSkpCi0gICAgLCBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbikKLSAgICAsIG1faXNJblJlZ2lvblJ1bGUoaW5SZWdpb25SdWxlKQorICAg
ICwgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGFkZFJ1bGVTdGF0ZSAmIFJ1bGVIYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luKQorICAgICwgbV9pc0luUmVnaW9uUnVsZShhZGRSdWxlU3RhdGUg
JiBSdWxlSXNJblJlZ2lvblJ1bGUpCiB7CiAgICAgQVNTRVJUKG1fcG9zaXRpb24gPT0gcG9zaXRp
b24pOwogICAgIEFTU0VSVChtX3NlbGVjdG9ySW5kZXggPT0gc2VsZWN0b3JJbmRleCk7CkBAIC0y
MDcsOSArMjA3LDE0IEBAIHZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0lt
cGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3QgUnVsZURhCiAgICAgcnVsZXMtPmFwcGVu
ZChydWxlRGF0YSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUs
IHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwg
Ym9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpCit2b2lkIFJ1
bGVTZXQ6OmFkZFJ1bGUoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBB
ZGRSdWxlU3RhdGUgYWRkUnVsZVN0YXRlKQogewotICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUs
IHNlbGVjdG9ySW5kZXgsIG1fcnVsZUNvdW50KyssIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4s
IGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBpblJlZ2lvblJ1bGUpOworICAgIFJ1bGVEYXRhIHJ1
bGVEYXRhKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIG1fcnVsZUNvdW50KyssIGFkZFJ1bGVTdGF0ZSk7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGF0aG9zdFJ1bGVTcGVjaWZpY2l0eSA9IDB4MTAw
MDAwOworCisgICAgaWYgKGFkZFJ1bGVTdGF0ZSAmIFJ1bGVJc0hvc3RSdWxlKQorICAgICAgICBy
dWxlRGF0YS5pbmNyZWFzZVNwZWNpZmljaXR5KGF0aG9zdFJ1bGVTcGVjaWZpY2l0eSk7CisKICAg
ICBjb2xsZWN0RmVhdHVyZXNGcm9tUnVsZURhdGEobV9mZWF0dXJlcywgcnVsZURhdGEpOwogCiAg
ICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcnVsZURhdGEuc2VsZWN0b3IoKTsKQEAgLTI2NCwx
MCArMjY5LDEyIEBAIHZvaWQgUnVsZVNldDo6YWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24q
IHJlZ2lvblJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0CiAKICAgICAvLyBDb2xsZWN0IHRo
ZSByZWdpb24gcnVsZXMgaW50byBhIHJ1bGUgc2V0CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxT
dHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzID0gcmVnaW9uUnVsZS0+Y2hpbGRSdWxlcygpOwor
ICAgIEFkZFJ1bGVTdGF0ZSBhZGRSdWxlU3RhdGUgPSBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
ID8gUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gOiBSdWxlSGFzTm9TcGVjaWFsU3RhdGU7
CisgICAgYWRkUnVsZVN0YXRlID0gc3RhdGljX2Nhc3Q8QWRkUnVsZVN0YXRlPihhZGRSdWxlU3Rh
dGUgfCBSdWxlQ2FuVXNlRmFzdENoZWNrU2VsZWN0b3IgfCBSdWxlSXNJblJlZ2lvblJ1bGUpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZFJ1bGVzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIFN0eWxlUnVsZUJhc2UqIHJlZ2lvblN0eWxpbmdSdWxlID0gY2hpbGRSdWxlc1tpXS5n
ZXQoKTsKICAgICAgICAgaWYgKHJlZ2lvblN0eWxpbmdSdWxlLT5pc1N0eWxlUnVsZSgpKQotICAg
ICAgICAgICAgcmVnaW9uUnVsZVNldC0+YWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVs
ZSo+KHJlZ2lvblN0eWxpbmdSdWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgdHJ1ZSwg
dHJ1ZSk7CisgICAgICAgICAgICByZWdpb25SdWxlU2V0LT5hZGRTdHlsZVJ1bGUoc3RhdGljX2Nh
c3Q8U3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUpLCBhZGRSdWxlU3RhdGUpOwogICAgIH0K
ICAgICAvLyBVcGRhdGUgdGhlICJnbG9iYWwiIHJ1bGUgY291bnQgc28gdGhhdCBwcm9wZXIgb3Jk
ZXIgaXMgbWFpbnRhaW5lZAogICAgIG1fcnVsZUNvdW50ID0gcmVnaW9uUnVsZVNldC0+bV9ydWxl
Q291bnQ7CkBAIC0yODYsNiArMjkzLDcgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVl
dChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHUKICAgICAg
ICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydFJ1bGUtPnN0eWxlU2hlZXQoKSwgbWVkaXVt
LCByZXNvbHZlciwgc2NvcGUpOwogICAgIH0KICAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4gPSByZXNvbHZlciAmJiByZXNvbHZlci0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KS0+Y2FuUmVxdWVzdChzaGVldC0+YmFzZVVSTCgpKTsKKyAgICBBZGRSdWxlU3RhdGUgYWRkUnVs
ZVN0YXRlID0gc3RhdGljX2Nhc3Q8QWRkUnVsZVN0YXRlPigoaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiA/IFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogMCkgfCAoIXNjb3BlID8gUnVs
ZUNhblVzZUZhc3RDaGVja1NlbGVjdG9yIDogMCkpOwogCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxTdHlsZVJ1bGVCYXNlPiA+JiBydWxlcyA9IHNoZWV0LT5jaGlsZFJ1bGVzKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzLnNpemUoKTsgKytpKSB7CkBAIC0yOTMsNyArMzAx
LDcgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMq
IHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHUKIAogICAgICAgICBBU1NFUlQoIXJ1bGUtPmlz
SW1wb3J0UnVsZSgpKTsKICAgICAgICAgaWYgKHJ1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAg
ICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSksIGhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4sICFzY29wZSk7CisgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3Rh
dGljX2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSksIGFkZFJ1bGVTdGF0ZSk7CiAgICAgICAgIGVsc2Ug
aWYgKHJ1bGUtPmlzUGFnZVJ1bGUoKSkKICAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19j
YXN0PFN0eWxlUnVsZVBhZ2UqPihydWxlKSk7CiAgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzTWVk
aWFSdWxlKCkpIHsKQEAgLTMwNSw3ICszMTMsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJv
bVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdQog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBjaGlsZFJ1bGVzLnNpemUo
KTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0eWxlUnVsZUJhc2UqIGNoaWxkUnVsZSA9
IGNoaWxkUnVsZXNbal0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFJ1bGUt
PmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3Rh
dGljX2Nhc3Q8U3R5bGVSdWxlKj4oY2hpbGRSdWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
biwgIXNjb3BlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNf
Y2FzdDxTdHlsZVJ1bGUqPihjaGlsZFJ1bGUpLCBhZGRSdWxlU3RhdGUpOwogICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzUGFnZVJ1bGUoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihjaGlsZFJ1
bGUpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRSdWxlLT5pc0ZvbnRGYWNl
UnVsZSgpICYmIHJlc29sdmVyKSB7CkBAIC0zNDcsMTUgKzM1NSwxOSBAQCB2b2lkIFJ1bGVTZXQ6
OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IE1lZGlh
UXVlcnlFdmFsdQogICAgICAgICAgICAgYWRkUmVnaW9uUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1
bGVSZWdpb24qPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbik7CiAgICAgICAgIH0K
ICNlbmRpZgorI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAgICAgICBlbHNlIGlmIChydWxlLT5p
c0hvc3RSdWxlKCkpCisgICAgICAgICAgICByZXNvbHZlci0+ZW5zdXJlU2NvcGVSZXNvbHZlcigp
LT5hZGRIb3N0UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4ocnVsZSksIGhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4sIHNjb3BlKTsKKyNlbmRpZgogICAgIH0KICAgICBpZiAobV9hdXRv
U2hyaW5rVG9GaXRFbmFibGVkKQogICAgICAgICBzaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIFJ1
bGVTZXQ6OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9u
UnVsZSkKK3ZvaWQgUnVsZVNldDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSogcnVsZSwgQWRkUnVs
ZVN0YXRlIGFkZFJ1bGVTdGF0ZSkKIHsKICAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0g
MDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHJ1bGUtPnNlbGVj
dG9yTGlzdCgpLmluZGV4T2ZOZXh0U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkKLSAgICAg
ICAgYWRkUnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
LCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaXNJblJlZ2lvblJ1bGUpOworICAgICAgICBhZGRS
dWxlKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIGFkZFJ1bGVTdGF0ZSk7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgdm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvUnVsZVNldC5oCmluZGV4IDY1NzcyMzhiYTkyMzZhOWQ2ODEwMzkxOTVhMGRkNDNhMmU4
MDgyYTAuLjc5MzQyMDEwNDg1MWI5YWQ5M2YxMjkzZjhmOGZhOTdkNGJhNjBmNmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1J1bGVTZXQuaApAQCAtMzEsNiArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitl
bnVtIEFkZFJ1bGVTdGF0ZSB7CisgICAgUnVsZUhhc05vU3BlY2lhbFN0YXRlICAgICAgICAgPSAw
LAorICAgIFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID0gMSwKKyAgICBSdWxlQ2FuVXNl
RmFzdENoZWNrU2VsZWN0b3IgICA9IDEgPDwgMSwKKyAgICBSdWxlSXNJblJlZ2lvblJ1bGUgICAg
ICAgICAgICA9IDEgPDwgMiwKKyAgICBSdWxlSXNIb3N0UnVsZSAgICAgICAgICAgICAgICA9IDEg
PDwgMywKK307CisKIGNsYXNzIENTU1NlbGVjdG9yOwogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNs
YXNzIE1lZGlhUXVlcnlFdmFsdWF0b3I7CkBAIC00MCw3ICs0OCw3IEBAIGNsYXNzIFN0eWxlU2hl
ZXRDb250ZW50czsKIAogY2xhc3MgUnVsZURhdGEgewogcHVibGljOgotICAgIFJ1bGVEYXRhKFN0
eWxlUnVsZSosIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCBib29s
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3Is
IGJvb2wgaW5SZWdpb25SdWxlKTsKKyAgICBSdWxlRGF0YShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBz
ZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgQWRkUnVsZVN0YXRlKTsKIAogICAgIHVu
c2lnbmVkIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogICAgIFN0eWxl
UnVsZSogcnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQpAQCAtNTUsNiArNjMsNyBAQCBw
dWJsaWM6CiAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlu
a01hdGNoVHlwZTsgfQogICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbjsgfQogICAgIGJvb2wgaXNJblJl
Z2lvblJ1bGUoKSBjb25zdCB7IHJldHVybiBtX2lzSW5SZWdpb25SdWxlOyB9CisgICAgdm9pZCBp
bmNyZWFzZVNwZWNpZmljaXR5KHVuc2lnbmVkIHZhbHVlKSB7IG1fc3BlY2lmaWNpdHkgKz0gdmFs
dWU7IH0KIAogICAgIC8vIFRyeSB0byBiYWxhbmNlIGJldHdlZW4gbWVtb3J5IHVzYWdlICh0aGVy
ZSBjYW4gYmUgbG90cyBvZiBSdWxlRGF0YSBvYmplY3RzKSBhbmQgZ29vZCBmaWx0ZXJpbmcgcGVy
Zm9ybWFuY2UuCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291
bnQgPSA0OwpAQCAtOTgsOCArMTA3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRSdWxlc0Zy
b21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwg
U3R5bGVSZXNvbHZlciogPSAwLCBjb25zdCBDb250YWluZXJOb2RlKiA9IDApOwogCi0gICAgdm9p
ZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
LCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFs
c2UpOwotICAgIHZvaWQgYWRkUnVsZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4
LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2Vs
ZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUgPSBmYWxzZSk7CisgICAgdm9pZCBhZGRTdHlsZVJ1
bGUoU3R5bGVSdWxlKiwgQWRkUnVsZVN0YXRlKTsKKyAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxl
KiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgQWRkUnVsZVN0YXRlKTsKICAgICB2b2lkIGFkZFBh
Z2VSdWxlKFN0eWxlUnVsZVBhZ2UqKTsKICAgICB2b2lkIGFkZFRvUnVsZVNldChBdG9taWNTdHJp
bmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiwgY29uc3QgUnVsZURhdGEmKTsKICAgICB2b2lkIGFk
ZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAwMGVkMjUwZTM1MjE4
NGNkNTAwMDJjNjg3ZWU0MzI5ZWUxYTlhODEyLi45NTY1NzY0MGM5NjUwMWI1NmJjMDNmNThiY2Ni
NzkwNjQ0NzEyZWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0zNzYs
NyArMzc2LDcgQEAgc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gbWFrZVJ1bGVTZXQoY29uc3Qg
VmVjdG9yPFJ1bGVGZWF0dXJlPiYgcnVsZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IE93blB0cjxSdWxlU2V0PiBydWxlU2V0ID0gUnVsZVNldDo6Y3JlYXRlKCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVs
ZXNbaV0ucnVsZSwgcnVsZXNbaV0uc2VsZWN0b3JJbmRleCwgcnVsZXNbaV0uaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiwgZmFsc2UpOworICAgICAgICBydWxlU2V0LT5hZGRSdWxlKHJ1bGVzW2ld
LnJ1bGUsIHJ1bGVzW2ldLnNlbGVjdG9ySW5kZXgsIHJ1bGVzW2ldLmhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA6IFJ1bGVIYXNOb1NwZWNp
YWxTdGF0ZSk7CiAgICAgcnVsZVNldC0+c2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gcnVsZVNl
dC5yZWxlYXNlKCk7CiB9CkBAIC00MTksOSArNDE5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBlbmRBdXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJl
ZlAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBTdHlsZVNoZWV0Q29udGVudHMqIHNo
ZWV0ID0gY3NzU2hlZXQtPmNvbnRlbnRzKCk7CiAgICAgICAgIGlmIChjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZSA9IFN0eWxlU2NvcGVSZXNvbHZlcjo6c2NvcGVGb3IoY3NzU2hlZXQpKSB7Ci0g
ICAgICAgICAgICBpZiAoIW1fc2NvcGVSZXNvbHZlcikKLSAgICAgICAgICAgICAgICBtX3Njb3Bl
UmVzb2x2ZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTY29wZVJlc29sdmVyKCkpOwotICAgICAgICAg
ICAgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVSdWxlU2V0Rm9yKHNjb3BlKS0+YWRkUnVsZXNGcm9t
U2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOworICAgICAgICAgICAgZW5zdXJl
U2NvcGVSZXNvbHZlcigpLT5lbnN1cmVSdWxlU2V0Rm9yKHNjb3BlKS0+YWRkUnVsZXNGcm9tU2hl
ZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KIApAQCAtNzQ3LDYgKzc0NSwzNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1w
dAogI2VuZGlmCiB9CiAKK2lubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0Nh
bmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKQoreworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAg
IHJldHVybiBtX3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29sdmVyLT5zdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKG1fZWxlbWVudCk7CisjZWxzZQorICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZgorfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1h
dGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7CisjaWYgRU5BQkxF
KFNIQURPV19ET00pCisgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIFZlY3RvcjxSdWxlU2V0Kj4gbWF0Y2hlZFJ1bGVzOworICAgIG1fc2NvcGVSZXNvbHZl
ci0+bWF0Y2hIb3N0UnVsZXMobV9lbGVtZW50LCBtYXRjaGVkUnVsZXMpOworICAgIGlmIChtYXRj
aGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNYXRjaE9wdGlvbnMg
b3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgb3B0aW9ucy5zY29wZSA9IG1fZWxlbWVu
dDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsgLS1p
KQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaGVkUnVsZXMuYXQoaS0xKSwgcmVz
dWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUs
IG9wdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBVTlVTRURf
UEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOworI2VuZGlmCit9CisKIHZvaWQgU3R5bGVSZXNvbHZl
cjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0
eVJ1bGVzKQogewogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CkBAIC03NjEsNiArNzg5LDcg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1
bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMKICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJl
Z2lvbihtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwg
cmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CiAKICAgICBtYXRjaFNjb3Bl
ZEF1dGhvclJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIG1hdGNoSG9zdFJ1
bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOwogCiAgICAgc29ydEFuZFRyYW5zZmVyTWF0
Y2hlZFJ1bGVzKHJlc3VsdCk7CiB9CkBAIC0xMzM2LDYgKzEzNjUsOSBAQCBSZW5kZXJTdHlsZSog
U3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogICAgIC8vIENhbid0IHNoYXJlIGlm
IGF0dHJpYnV0ZSBydWxlcyBhcHBseS4KICAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0
Y2hlc1J1bGVTZXQobV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVTZXQuZ2V0KCkpKQogICAgICAgICBy
ZXR1cm4gMDsKKyAgICAvLyBDYW4ndCBzaGFyZSBpZiBAaG9zdCBALXJ1bGVzIGFwcGx5LgorICAg
IGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkpCisgICAgICAgIHJl
dHVybiAwOwogICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHls
ZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0
Y2ggYWJvdmUuCiAgICAgaWYgKHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5
bGUpKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4
IDEyMDk4YWE1NTk3YjA4NmFjMjJlNTA4NmE3YTMzZjhlNDY1Nzc1OTcuLjAzOGJhMGNiY2QxMDI5
N2ZlZGVmYzFmYTc4YmEwMWUzODc0NDRmYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
aApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlJ1bGVGZWF0dXJlLmgiCiAjaW5jbHVkZSAi
U2VsZWN0b3JDaGVja2VyLmgiCiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCisjaW5j
bHVkZSAiU3R5bGVTY29wZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTcyLDYg
KzczLDcgQEAgY2xhc3MgUmVuZGVyUmVnaW9uOwogY2xhc3MgUnVsZURhdGE7CiBjbGFzcyBSdWxl
U2V0OwogY2xhc3MgU2V0dGluZ3M7CitjbGFzcyBTaGFkb3dSb290OwogY2xhc3MgU3RhdGljQ1NT
UnVsZUxpc3Q7CiBjbGFzcyBTdHlsZUJ1aWxkZXI7CiBjbGFzcyBTdHlsZVNjb3BlUmVzb2x2ZXI7
CkBAIC0xNjgsMTIgKzE3MCwyMCBAQCBwdWJsaWM6CiAgICAgLy8gRmluZCB0aGUgaWRzIG9yIGNs
YXNzZXMgdGhlIHNlbGVjdG9ycyBvbiBhIHN0eWxlc2hlZXQgYXJlIHNjb3BlZCB0by4gVGhlIHNl
bGVjdG9ycyBvbmx5IGFwcGx5IHRvIGVsZW1lbnRzIGluIHN1YnRyZWVzIHdoZXJlIHRoZSByb290
IGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2NvcGUuCiAgICAgc3RhdGljIGJvb2wgZGV0ZXJtaW5lU3R5
bGVzaGVldFNlbGVjdG9yU2NvcGVzKFN0eWxlU2hlZXRDb250ZW50cyosIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNz
U2NvcGVzKTsKIAorICAgIFN0eWxlU2NvcGVSZXNvbHZlciogZW5zdXJlU2NvcGVSZXNvbHZlcigp
CisgICAgeworICAgICAgICBpZiAoIW1fc2NvcGVSZXNvbHZlcikKKyAgICAgICAgICAgIG1fc2Nv
cGVSZXNvbHZlciA9IGFkb3B0UHRyKG5ldyBTdHlsZVNjb3BlUmVzb2x2ZXIoKSk7CisgICAgICAg
IHJldHVybiBtX3Njb3BlUmVzb2x2ZXIuZ2V0KCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZv
aWQgaW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
ID0gMCwgUHNldWRvSWQgPSBOT1BTRVVETyk7CiAgICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50
Kik7CiAgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXMoKTsKICAgICBSZW5kZXJTdHlsZSogbG9jYXRl
U2hhcmVkU3R5bGUoKTsKICAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxl
U2V0KFJ1bGVTZXQqKTsKKyAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0
UnVsZXMoKTsKICAgICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5z
aWduZWQmIHZpc2l0ZWROb2RlQ291bnQpIGNvbnN0OwogICAgIFN0eWxlZEVsZW1lbnQqIGZpbmRT
aWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OwogICAg
IGJvb2wgY2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKQEAg
LTMyNiw2ICszMzYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRj
aFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hVc2VyUnVs
ZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNo
U2NvcGVkQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsK
KyAgICB2b2lkIG1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlS
dWxlcyk7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJz
dFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAg
ICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqLCBpbnQmIGZpcnN0
UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwogICAg
IHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4q
LCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0
aW9ucyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAppbmRleCA3M2IwYWYyNmNlNDJhYTQ1OTRk
OWI3NjE3OTZiMTlkNmE2YmI2NjVjLi5mZDVjMGMzMDJkM2RhMTMzOWEwOWY2NTQ0NTllMGNkNDEz
MzE0ZTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcApAQCAtNzksNiArNzksOSBAQCB2b2lk
IFN0eWxlUnVsZUJhc2U6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pIGNvbnN0CiAgICAgY2FzZSBLZXlmcmFtZXM6CiAgICAgICAgIHN0YXRpY19j
YXN0PGNvbnN0IFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVt
b3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEhv
c3Q6CisgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZUJsb2NrKj4odGhpcyktPnJl
cG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZvKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgVW5rbm93bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlm
cmFtZToKQEAgLTExNyw2ICsxMjAsOSBAQCB2b2lkIFN0eWxlUnVsZUJhc2U6OmRlc3Ryb3koKQog
ICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5bGVSdWxl
S2V5ZnJhbWVzKj4odGhpcyk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEhvc3Q6CisgICAg
ICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4odGhpcyk7CisgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5
ZnJhbWU6CkBAIC0xNTAsNiArMTU2LDggQEAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBTdHls
ZVJ1bGVCYXNlOjpjb3B5KCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBLZXlm
cmFtZXM6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFt
ZXMqPih0aGlzKS0+Y29weSgpOworICAgIGNhc2UgSG9zdDoKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IFN0eWxlUnVsZUhvc3QqPih0aGlzKS0+Y29weSgpOwogICAgIGNhc2UgVW5r
bm93bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlmcmFtZToKQEAgLTE5MSw2ICsx
OTksNyBAQCBQYXNzUmVmUHRyPENTU1J1bGU+IFN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3Jh
cHBlcihDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldAogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAg
ICAgICBydWxlID0gV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6Y3JlYXRlKHN0YXRpY19jYXN0PFN0
eWxlUnVsZUtleWZyYW1lcyo+KHNlbGYpLCBwYXJlbnRTaGVldCk7CiAgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSG9zdDoKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAg
IGNhc2UgS2V5ZnJhbWU6CkBAIC0zODEsNCArMzkwLDE0IEBAIHZvaWQgU3R5bGVSdWxlUmVnaW9u
OjpyZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0CiAgICAgaW5mby5hZGRNZW1iZXIobV9zZWxlY3Rvckxpc3QpOwogfQogCitTdHlsZVJ1bGVI
b3N0OjpTdHlsZVJ1bGVIb3N0KFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRS
dWxlcykKKyAgICA6IFN0eWxlUnVsZUJsb2NrKEhvc3QsIGFkb3B0UnVsZXMpCit7Cit9CisKK1N0
eWxlUnVsZUhvc3Q6OlN0eWxlUnVsZUhvc3QoY29uc3QgU3R5bGVSdWxlSG9zdCYgbykKKyAgICA6
IFN0eWxlUnVsZUJsb2NrKG8pCit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJ1bGUuaAppbmRleCBlMTVmMzJlNDAyYWFmMjA4ZDNjYzBmY2NkMzU4NDc3YjIzMDM1
NjM0Li43YWQzMTNlY2VhOGJiZmIxZjYzMGEyYzU0ZDk3YjI0NDE3MzAzOTAzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUnVsZS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgUGFnZSwKICAg
ICAgICAgS2V5ZnJhbWVzLAogICAgICAgICBLZXlmcmFtZSwgLy8gTm90IHVzZWQuIFRoZXNlIGFy
ZSBpbnRlcm5hbGx5IG5vbi1ydWxlIFN0eWxlS2V5ZnJhbWUgb2JqZWN0cy4KKyAgICAgICAgSG9z
dCwKICAgICAgICAgUmVnaW9uID0gMTYKICAgICB9OwogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KQEAgLTU4LDYgKzU5LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNTdHlsZVJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gU3R5
bGU7IH0KICAgICBib29sIGlzUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBS
ZWdpb247IH0KICAgICBib29sIGlzSW1wb3J0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9
PSBJbXBvcnQ7IH0KKyAgICBib29sIGlzSG9zdFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkg
PT0gSG9zdDsgfQogCiAgICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBjb3B5KCkgY29uc3Q7
CiAKQEAgLTIyMyw2ICsyMjUsMjAgQEAgcHJpdmF0ZToKICAgICBDU1NTZWxlY3Rvckxpc3QgbV9z
ZWxlY3Rvckxpc3Q7CiB9OwogCitjbGFzcyBTdHlsZVJ1bGVIb3N0IDogcHVibGljIFN0eWxlUnVs
ZUJsb2NrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVIb3N0PiBj
cmVhdGUoVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBhZG9wdFJ1bGVzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVJ1bGVIb3N0KGFkb3B0UnVsZXMpKTsK
KyAgICB9CisKKyAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUhvc3Q+IGNvcHkoKSBjb25zdCB7IHJl
dHVybiBhZG9wdFJlZihuZXcgU3R5bGVSdWxlSG9zdCgqdGhpcykpOyB9CisKK3ByaXZhdGU6Cisg
ICAgU3R5bGVSdWxlSG9zdChWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVs
ZXMpOworICAgIFN0eWxlUnVsZUhvc3QoY29uc3QgU3R5bGVSdWxlSG9zdCYpOworfTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gU3R5bGVSdWxlX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKaW5kZXggODc0MDJiYWE1OTgxMDI0ZWU1ZDY0
NDY1YWQxNzhkY2NiNzlkZWE4YS4uMzQ4OTNiYmFkOGVlYjdmYzMzYThlY2VhMjZkYWY0M2IzNDcz
YjM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKQEAgLTI5
LDggKzI5LDEwIEBACiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9X
X0RPTSkKIAorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hl
ZXQuaCIKICNpbmNsdWRlICJDb250ZXh0RmVhdHVyZXMuaCIKKyNpbmNsdWRlICJFbGVtZW50U2hh
ZG93LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlJ1bGVGZWF0dXJlLmgiCkBAIC0xNTQsMTEgKzE1Niw5MiBAQCB2b2lk
IFN0eWxlU2NvcGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8oUnVsZUZlYXR1cmVTZXQmIGZl
YXR1cmVzKQogICAgICAgICBmZWF0dXJlcy5hZGQoaXQtPnZhbHVlLT5mZWF0dXJlcygpKTsKIH0K
IAoraW5saW5lIFJ1bGVTZXQqIFN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlQXRIb3N0UnVsZVNl
dEZvcihjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQoreworICAgIFNjb3BlZFJ1bGVTZXRN
YXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2F0SG9zdFJ1bGVzLmFkZChzaGFkb3dSb290LCBu
dWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30KKworaW5saW5lIFJ1bGVTZXQqIFN0eWxlU2Nv
cGVSZXNvbHZlcjo6YXRIb3N0UnVsZVNldEZvcihjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290
KSBjb25zdAoreworICAgIFNjb3BlZFJ1bGVTZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9h
dEhvc3RSdWxlcy5maW5kKHNoYWRvd1Jvb3QpOworICAgIHJldHVybiBpdCAhPSBtX2F0SG9zdFJ1
bGVzLmVuZCgpID8gaXQtPnZhbHVlLmdldCgpIDogMDsKK30KKwordm9pZCBTdHlsZVNjb3BlUmVz
b2x2ZXI6OmFkZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3QqIGhvc3RSdWxlLCBib29sIGhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4sIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKQoreworICAgIGlm
ICghc2NvcGUgfHwgIXNjb3BlLT5pc0luU2hhZG93VHJlZSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2NvcGUtPnNoYWRvd1Jvb3QoKTsKKyAgICBp
ZiAoIXNoYWRvd1Jvb3QgfHwgIXNoYWRvd1Jvb3QtPmhvc3QoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIHNoYWRvd1Jvb3QtPm93bmVyKCktPmNsZWFySGFzTWF0Y2hlZEhvc3RSdWxlKCk7CisKKyAg
ICBSdWxlU2V0KiBydWxlID0gZW5zdXJlQXRIb3N0UnVsZVNldEZvcihzaGFkb3dSb290KTsKKwor
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IGhv
c3RSdWxlLT5jaGlsZFJ1bGVzKCk7CisgICAgQWRkUnVsZVN0YXRlIGFkZFJ1bGVTdGF0ZSA9IGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA6
IFJ1bGVIYXNOb1NwZWNpYWxTdGF0ZTsKKyAgICBhZGRSdWxlU3RhdGUgPSBzdGF0aWNfY2FzdDxB
ZGRSdWxlU3RhdGU+KGFkZFJ1bGVTdGF0ZSB8IFJ1bGVDYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciB8
IFJ1bGVJc0hvc3RSdWxlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRSdWxl
cy5zaXplKCk7ICsraSkgeworICAgICAgICBTdHlsZVJ1bGVCYXNlKiBob3N0U3R5bGluZ1J1bGUg
PSBjaGlsZFJ1bGVzW2ldLmdldCgpOworICAgICAgICBpZiAoaG9zdFN0eWxpbmdSdWxlLT5pc1N0
eWxlUnVsZSgpKQorICAgICAgICAgICAgcnVsZS0+YWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0
eWxlUnVsZSo+KGhvc3RTdHlsaW5nUnVsZSksIGFkZFJ1bGVTdGF0ZSk7CisgICAgfQorfQorCiti
b29sIFN0eWxlU2NvcGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RS
dWxlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmIChtX2F0SG9zdFJ1bGVzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRWxlbWVudFNoYWRvdyogc2hh
ZG93ID0gZWxlbWVudC0+c2hhZG93KCk7CisgICAgaWYgKCFzaGFkb3cpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoc2hhZG93LT5oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUoKSkK
KyAgICAgICAgcmV0dXJuIHNoYWRvdy0+aGFzTWF0Y2hlZEhvc3RSdWxlKCk7CisKKyAgICBmb3Ig
KFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBz
aGFkb3dSb290OyBzaGFkb3dSb290ID0gc2hhZG93Um9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsK
KyAgICAgICAgaWYgKGF0SG9zdFJ1bGVTZXRGb3Ioc2hhZG93Um9vdCkpIHsKKyAgICAgICAgICAg
IHNoYWRvdy0+c2V0SGFzTWF0Y2hlZEhvc3RSdWxlKHRydWUpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFkb3dJbnNl
cnRpb25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHNoYWRvdy0+c2V0
SGFzTWF0Y2hlZEhvc3RSdWxlKGZhbHNlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
U3R5bGVTY29wZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50
LCBWZWN0b3I8UnVsZVNldCo+JiBtYXRjaGVkUnVsZXMpCit7CisgICAgaWYgKG1fYXRIb3N0UnVs
ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBFbGVtZW50U2hhZG93KiBzaGFk
b3cgPSBlbGVtZW50LT5zaGFkb3coKTsKKyAgICBpZiAoIXNoYWRvdykKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gSWYgQWxyZWFkeSBrbm93IHdoZXRoZXIgdGhlcmUgZXhpc3QgYW55IG1hdGNo
ZWQgaG9zdCBydWxlcyBvciBub3QsIHNlZS4KKyAgICBpZiAoc2hhZG93LT5oYXNNYXRjaGVkSG9z
dFJ1bGVBdmFpbGFibGUoKSAmJiAhc2hhZG93LT5oYXNNYXRjaGVkSG9zdFJ1bGUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZm9yIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2hhZG93LT55
b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hhZG93Um9vdDsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3Qt
Pm9sZGVyU2hhZG93Um9vdCgpKSB7IAorICAgICAgICBpZiAoUnVsZVNldCogcnVsZVNldCA9IGF0
SG9zdFJ1bGVTZXRGb3Ioc2hhZG93Um9vdCkpCisgICAgICAgICAgICBtYXRjaGVkUnVsZXMuYXBw
ZW5kKHJ1bGVTZXQpOworICAgICAgICBpZiAoIXNoYWRvd1Jvb3QtPmhhc1NoYWRvd0luc2VydGlv
blBvaW50KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIHZvaWQgU3R5bGVTY29w
ZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmpl
Y3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdElu
Zm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKICAgICBpbmZvLmFkZE1lbWJlciht
X2F1dGhvclN0eWxlcyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9zdGFjayk7CisgICAgaW5mby5h
ZGRNZW1iZXIobV9hdEhvc3RSdWxlcyk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNj
b3BlUmVzb2x2ZXIuaAppbmRleCA1YTMyZGZlNzlmODM1YmI3Y2Y5NWI4YzdkZDliM2JiNzA0MWZi
N2ZiLi44NWMxZDAxMDA2YWQ2Y2M2ZjQ4OTAxMTUwNTA5Y2MzNDhiMmQ2YjEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCkBAIC0zNyw4ICszNywxMSBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbnRhaW5lck5vZGU7CiBjbGFzcyBDU1NTdHlsZVNoZWV0
OworY2xhc3MgRWxlbWVudDsKIGNsYXNzIFJ1bGVTZXQ7CiBjbGFzcyBSdWxlRmVhdHVyZVNldDsK
K2NsYXNzIFNoYWRvd1Jvb3Q7CitjbGFzcyBTdHlsZVJ1bGVIb3N0OwogCiAjaWYgRU5BQkxFKFNU
WUxFX1NDT1BFRCkgfHwgRU5BQkxFKFNIQURPV19ET00pCiAKQEAgLTcyLDEyICs3NSwxOCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBtYXRjaGVzU3R5bGVCb3VuZHMoY29uc3QgU3RhY2tGcmFtZSYgZnJh
bWUpIGNvbnN0IHsgcmV0dXJuIGZyYW1lLm1fYXV0aG9yU3R5bGVCb3VuZHNJbmRleCA9PSBtX3N0
YWNrUGFyZW50Qm91bmRzSW5kZXg7IH0KICAgICB2b2lkIGNvbGxlY3RGZWF0dXJlc1RvKFJ1bGVG
ZWF0dXJlU2V0Jik7CiAKKyAgICB2b2lkIGFkZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3QqLCBib29s
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKTsK
KyAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoY29uc3QgRWxl
bWVudCopOworICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoY29uc3QgRWxlbWVudCosIFZlY3RvcjxS
dWxlU2V0Kj4mIG1hdGNoZWRSdWxlcyk7CisKICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1l
bW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBSdWxlU2V0KiBydWxlU2V0
Rm9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKSBjb25zdDsKICAgICB2b2lkIHNldHVwU3Rh
Y2soY29uc3QgQ29udGFpbmVyTm9kZSopOwogICAgIGJvb2wgc3RhY2tJc0NvbnNpc3RlbnQoY29u
c3QgQ29udGFpbmVyTm9kZSogcGFyZW50KSBjb25zdCB7IHJldHVybiBwYXJlbnQgJiYgcGFyZW50
ID09IG1fc3RhY2tQYXJlbnQ7IH0KKyAgICBSdWxlU2V0KiBlbnN1cmVBdEhvc3RSdWxlU2V0Rm9y
KGNvbnN0IFNoYWRvd1Jvb3QqKTsKKyAgICBSdWxlU2V0KiBhdEhvc3RSdWxlU2V0Rm9yKGNvbnN0
IFNoYWRvd1Jvb3QqKSBjb25zdDsKIAogICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9hdXRob3JTdHls
ZXM7CiAKQEAgLTg4LDYgKzk3LDggQEAgcHJpdmF0ZToKICAgICAvLyBUaGlzIGlzIHVzZWQgdG8g
ZGVjaWRlIHdoZXRoZXIgbV9zY29waW5nRWxlbWVudFN0YWNrIGlzIGNvbnNpc3RlbnQsIHNlcGFy
YXRlbHkgZnJvbSBTZWxlY3RvckNoZWNrZXI6Om1fcGFyZW50U3RhY2suCiAgICAgY29uc3QgQ29u
dGFpbmVyTm9kZSogbV9zdGFja1BhcmVudDsKICAgICBpbnQgbV9zdGFja1BhcmVudEJvdW5kc0lu
ZGV4OworCisgICAgU2NvcGVkUnVsZVNldE1hcCBtX2F0SG9zdFJ1bGVzOwogfTsKIAogaW5saW5l
IGJvb2wgU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVTdGFja0NvbnNpc3RlbmN5KENvbnRhaW5l
ck5vZGUqIHBhcmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0
Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAK
aW5kZXggZTdjZTgxZWFhYjQ4NzE4NjI0ZjRlYjU1MjM4ZTVjMWFmMzU2ODViOC4uMzllOWE3YjJj
ZDZjMjE5M2JiMDQ5ODBmYTg4YTgyNzIxZTRhMjNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlU2hlZXRDb250ZW50cy5jcHAKQEAgLTQzNSw2ICs0MzUsMTAgQEAgc3RhdGljIGJvb2wgY2hp
bGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKGNvbnN0IFZlY3RvcjxSZWZQ
dHI8U3R5bGUKICAgICAgICAgICAgIGlmIChjaGlsZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRT
dWJyZXNvdXJjZXMoc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlUmVnaW9uKj4ocnVsZSktPmNo
aWxkUnVsZXMoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpIb3N0OgorICAgICAgICAgICAgaWYg
KGNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcyhzdGF0aWNfY2FzdDxj
b25zdCBTdHlsZVJ1bGVIb3N0Kj4ocnVsZSktPmNoaWxkUnVsZXMoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdHlsZVJ1
bGVCYXNlOjpJbXBvcnQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpQYWdlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnRTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cu
Y3BwCmluZGV4IGFlYjViNWI0NzViMjE5YmM1N2RjODVlZjJlN2I4MzJhZWU4ODkzZmMuLjgwOWJj
Yzg3ODIyZTUxNGNkOGQ2NGMzZGI4ZDMyYWM3NTg3NjBlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudFNoYWRvdy5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
RWxlbWVudFNoYWRvdzo6RWxlbWVudFNoYWRvdygpCisgICAgOiBtX2hhc01hdGNoZWRIb3N0UnVs
ZUF2YWlsYWJsZShmYWxzZSkKIHsKIH0KIApAQCAtODksNiArOTAsMTAgQEAgdm9pZCBFbGVtZW50
U2hhZG93OjphZGRTaGFkb3dSb290KEVsZW1lbnQqIHNoYWRvd0hvc3QsIFBhc3NSZWZQdHI8U2hh
ZG93Um9vdD4gc2gKICAgICBpZiAoc2hhZG93SG9zdC0+YXR0YWNoZWQoKSkKICAgICAgICAgc2hh
ZG93SG9zdC0+bGF6eVJlYXR0YWNoKCk7CiAKKyAgICAvLyBBcyBhIG5ldyBzaGFkb3cgZG9tIHN1
YnRyZWUgbWlnaHQgaGF2ZSBAaG9zdCBALXJ1bGVzLCBuZWVkIHRvIGRpc2FibGUKKyAgICAvLyBo
YXNNYXRjaGVkSG9zdFJ1bGVzIGNhY2hlLgorICAgIGNsZWFySGFzTWF0Y2hlZEhvc3RSdWxlKCk7
CisKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFB1c2hTaGFkb3dSb290KHNoYWRv
d0hvc3QsIHNoYWRvd1Jvb3QuZ2V0KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cu
aAppbmRleCBkZGI0MzgwNmJkZTE1MzlmYzdhZGMyYjlkODY5MmNlNzIzYzgzM2Y2Li41MTU2OWI2
YTZhYjU2NmJmNGE5YmE0NTEzYjY0MGQzODVkNDVmODYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudFNoYWRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
U2hhZG93LmgKQEAgLTcxLDExICs3MSwxOCBAQCBwdWJsaWM6CiAgICAgQ29udGVudERpc3RyaWJ1
dG9yJiBkaXN0cmlidXRvcigpOwogICAgIGNvbnN0IENvbnRlbnREaXN0cmlidXRvciYgZGlzdHJp
YnV0b3IoKSBjb25zdDsKIAorICAgIGJvb2wgaGFzTWF0Y2hlZEhvc3RSdWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNNYXRjaGVkSG9zdFJ1bGU7IH0KKyAgICBib29sIGhhc01hdGNoZWRIb3N0UnVs
ZUF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxl
OyB9CisgICAgdm9pZCBjbGVhckhhc01hdGNoZWRIb3N0UnVsZSgpIHsgbV9oYXNNYXRjaGVkSG9z
dFJ1bGVBdmFpbGFibGUgPSBmYWxzZTsgfQorICAgIHZvaWQgc2V0SGFzTWF0Y2hlZEhvc3RSdWxl
KGJvb2wgaGFzUnVsZSkgeyBtX2hhc01hdGNoZWRIb3N0UnVsZSA9IGhhc1J1bGU7IG1faGFzTWF0
Y2hlZEhvc3RSdWxlQXZhaWxhYmxlID0gdHJ1ZTsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgaW52
YWxpZGF0ZURpc3RyaWJ1dGlvbihFbGVtZW50KiBob3N0KTsKIAogICAgIERvdWJseUxpbmtlZExp
c3Q8U2hhZG93Um9vdD4gbV9zaGFkb3dSb290czsKICAgICBDb250ZW50RGlzdHJpYnV0b3IgbV9k
aXN0cmlidXRvcjsKKyAgICBib29sIG1faGFzTWF0Y2hlZEhvc3RSdWxlOworICAgIGJvb2wgbV9o
YXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGU7CiB9OwogCiBpbmxpbmUgU2hhZG93Um9vdCogRWxl
bWVudFNoYWRvdzo6eW91bmdlc3RTaGFkb3dSb290KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dS
b290LmNwcAppbmRleCA1MTgwYTFjMjJkODQ4OTRlMzcwZjVjMTYyYjZhM2FjOGZmNmZkNDI1Li4z
OTYwNGI5MTY0MDcwNGQxZjllOGZjOTU3MTcyODJiZjg3OGMxMzQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1No
YWRvd1Jvb3QuY3BwCkBAIC0yMjQsNiArMjI0LDcgQEAgdm9pZCBTaGFkb3dSb290OjpjaGlsZHJl
bkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSoK
IHsKICAgICBDb250YWluZXJOb2RlOjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlZEJ5UGFyc2VyLCBi
ZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOwogICAgIG93bmVyKCkt
PmludmFsaWRhdGVEaXN0cmlidXRpb24oKTsKKyAgICBvd25lcigpLT5jbGVhckhhc01hdGNoZWRI
b3N0UnVsZSgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYWE0OTk4ZDk0ZGY4ZGViZTdiYWI0ZDA2NzI4OTJi
OTlmZjA3OWE2My4uZjU5NzdkYTBlMTU5NDhhYTI5NGNmODM5MWNiYWQzYjY4YTY3MGI1ZCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEwLTEyICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtA
Z29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0gTmVlZHMgQGhvc3QgcnVsZSBmb3Ig
U2hhZG93RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTg4NjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMuaHRtbDogQWRk
ZWQuCisKIDIwMTItMTAtMTIgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogRXh0cmFjdCBkb21haW4gc3BlY2lmaWMgZWRpdGlu
ZyBoYW5kbGluZyBsb2dpYyBmcm9tIFVJU291cmNlQ29kZSBkZXNjZW5kYW50cyAoc3RlcCAxKS4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExZjNiMWMyNTUxNjk1Njc4NzI1YmQ2NjUxODEzMTM0
Mzg2NDlhMTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cv
YXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUgQEAKK2hvc3Q6IHJnYigy
NTUsIDAsIDApCitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdEE6IHJnYigyNTUsIDAsIDApCito
b3N0QjogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMTI4
LCAxMjgsIDEyOCkKK2hvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMCwgMCwgMjU1KQor
aG9zdDogcmdiKDEyOCwgMTI4LCAxMjgpCitob3N0OiByZ2IoMjU1LCAyNTUsIDApCitob3N0OiBy
Z2IoMjU1LCAwLCAwKQorbmVzdGVkSG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigyNTUs
IDAsIDApCitob3N0OiByZ2IoMjU1LCAyNTUsIDApCitIZWxsbwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDRiNTExZWUw
MmZhOWQ3NTFlNTdlMTY5YjAwYTZkODc3ZDUzYTZkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLmh0bWwKQEAgLTAsMCArMSwxOTAg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyNob3N0IHsKKyAg
Y29sb3I6IGdyYXk7Cit9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3BvbHlm
aWxsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBkdW1wQ29tcHV0ZWRTdHlsZShu
b2RlKQoreworICAgIGRlYnVnKG5vZGUuaWQgKyAiOiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcu
Z2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsK
K30KKworZnVuY3Rpb24gcHJlcHJvY2Vzc0ZvclRlc3QoKQoreworICAgIHZhciBwYXJlbnQgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyZW50Iik7CisgICAgcGFyZW50LmlubmVySFRNTCA9
ICc8ZGl2IGlkPSJob3N0Ij48c3Bhbj5IZWxsbzwvc3Bhbj48L2Rpdj4nOworfQorCitmdW5jdGlv
biB0ZXN0U2ltcGxlQ29udGVudENhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7Cisg
ICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBz
aGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1M
ID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+
PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9u
IHRlc3RTaW1wbGVTaGFkb3dDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAg
IHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hh
ZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9
ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9z
aGFkb3c+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVz
dEhvc3RXaXRoU2VsZWN0b3IoKQoreworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicGFyZW50Iik7CisgICAgcGFyZW50LmlubmVySFRNTCA9ICI8c3R5bGUgc2NvcGVk
PiAuaG9zdCB7IGNvbG9yOiBncmF5IH07PC9zdHlsZT4iCisgICAgICAgICsgIjxkaXYgaWQ9J2hv
c3RBJyBjbGFzcz0naG9zdCc+PHNwYW4+SGVsbG88L3NwYW4+PC9kaXY+IgorICAgICAgICArICI8
c3BhbiBpZD0naG9zdEInIGNsYXNzPSdob3N0Jz48c3Bhbj5Xb3JsZDwvc3Bhbj48L3NwYW4+IjsK
KworICAgIHZhciBob3N0QSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0QSIpOworICAg
IHZhciBzaGFkb3dBID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdEEpOworICAgIHZhciBzdHls
ZSA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IHNwYW4geyBjb2xvcjogYmx1
ZTsgfSB9PC9zdHlsZT4iOworICAgIHNoYWRvd0EuaW5uZXJIVE1MID0gc3R5bGUgKyAiPHNoYWRv
dz48L3NoYWRvdz4iOworCisgICAgdmFyIGhvc3RCID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Imhvc3RCIik7CisgICAgdmFyIHNoYWRvd0IgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0Qik7
CisgICAgc2hhZG93Qi5pbm5lckhUTUwgPSBzdHlsZSArICI8c2hhZG93Pjwvc2hhZG93PiI7CisK
KyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0QSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9z
dEIpOworfQorCitmdW5jdGlvbiB0ZXN0UHNldWRvSG9zdFdpdGhTY29wZWQoKQoreworICAgIHBy
ZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsK
KyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxkaXY+PHN0eWxlIHNjb3BlZD5AaG9zdCB7IGRpdiB7
IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz48ZGl2PjxzdHlsZSBzY29w
ZWQ+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48L2Rpdj48L2Rpdj4iOwor
ICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0UHNldWRvSG9z
dFdpdGhGYWxsYmFja1NoYWRvdygpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2
YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVz
dFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNo
YWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG9sZGVzdFNoYWRvdy5pbm5l
ckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29u
dGVudD48L2NvbnRlbnQ+IjsKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPGNvbnRl
bnQ+PHNoYWRvdz48L3NoYWRvdz48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZSho
b3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFR3b1NoYWRvd1Jvb3RzQ2FzZSgpCit7CisgICAgcHJl
cHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhv
c3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3Qp
OworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29s
b3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICB5b3VuZ2VzdFNo
YWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwv
c3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOwor
fQorCitmdW5jdGlvbiB0ZXN0VHdvU2hhZG93Um9vdHNDcmVhdGluZ0RpZmZlcmVudE9yZGVyQ2Fz
ZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJL
aXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRT
aGFkb3dSb290KGhvc3QpOworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+
QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7
CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xv
cjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRl
ZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJ
bmVydFNoYWRvd0NvbnRlbnQoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFy
IGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RT
aGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgb2xkZXJTaGFkb3cg
PSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlclNoYWRvdyA9IG5l
dyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBX
ZWJLaXRTaGFkb3dSb290KGhvc3QpOworCisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0g
IjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICB5b3VuZ2VyU2hhZG93LmlubmVySFRNTCA9ICI8Y29u
dGVudD48L2NvbnRlbnQ+IjsKKyAgICBvbGRlclNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBo
b3N0IHsgZGl2IHsgY29sb3I6IGdyZWVuOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsK
KyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9y
OiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVk
U3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3RzV2l0aElu
ZXJ0U2hhZG93KCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0g
bmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdl
YktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0
U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hh
ZG93Um9vdChob3N0KTsKKworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+
QGhvc3QgeyBkaXYgeyBjb2xvcjogeWVsbG93OyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+
IjsKKyAgICB5b3VuZ2VyU2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBj
b2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48ZGl2PmluZXJ0PC9kaXY+IjsKKyAgICBvbGRlclNoYWRv
dy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGdyZWVuOyB9IH08L3N0
eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxz
dHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250
ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RO
ZXN0ZWRDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb3V0ZXJTaGFkb3cgPSBu
ZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBvdXRlclNoYWRvdy5pbm5lckhUTUwgPSAn
PHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48ZGl2IGlkPSJuZXN0
ZWRIb3N0Ij5Jbm5lclNoYWRvdzwvZGl2Pic7CisgICAgdmFyIG5lc3RlZCA9IG91dGVyU2hhZG93
LmdldEVsZW1lbnRCeUlkKCJuZXN0ZWRIb3N0Iik7CisgICAgdmFyIGlubmVyU2hhZG93ID0gbmV3
IFdlYktpdFNoYWRvd1Jvb3QobmVzdGVkKTsKKyAgICBpbm5lclNoYWRvdy5pbm5lckhUTUwgPSAn
PHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+U2hvdyA8c2hhZG93
Pjwvc2hhZG93PiBpbiBvdXRlci4nOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworICAg
IGR1bXBDb21wdXRlZFN0eWxlKG5lc3RlZCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0VnNTY29w
ZWRTdHlsZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgaG9zdC5pbm5lckhUTUwgPSAiPHN0
eWxlIHNjb3BlZD4jaG9zdCB7IGNvbG9yOiB5ZWxsb3c7IH08L3N0eWxlPjxzcGFuPkhlbGxvPC9z
cGFuPiI7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAg
IHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgI2hvc3QgeyBjb2xvcjogcmVkOyB9
IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhv
c3QpOworfQorCitmdW5jdGlvbiB0ZXN0SG9zdFZzSW5saW5lU3R5bGUoKQoreworICAgIHByZXBy
b2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
aG9zdCIpOworICAgIGhvc3Quc3R5bGUuY29sb3IgPSAieWVsbG93IjsKKyAgICBob3N0LmlubmVy
SFRNTCA9ICI8c3Bhbj5IZWxsbzwvc3Bhbj4iOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0
U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7
IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAg
ZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3RzKCkKK3sKKyAg
ICB0ZXN0U2ltcGxlQ29udGVudENhc2UoKTsKKyAgICB0ZXN0U2ltcGxlU2hhZG93Q2FzZSgpOwor
ICAgIHRlc3RIb3N0V2l0aFNlbGVjdG9yKCk7CisgICAgdGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVk
KCk7CisgICAgdGVzdFBzZXVkb0hvc3RXaXRoRmFsbGJhY2tTaGFkb3coKTsKKyAgICB0ZXN0VHdv
U2hhZG93Um9vdHNDYXNlKCk7CisgICAgdGVzdFR3b1NoYWRvd1Jvb3RzQ3JlYXRpbmdEaWZmZXJl
bnRPcmRlckNhc2UoKTsKKyAgICB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRv
d0NvbnRlbnQoKTsKKyAgICB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvdygp
OworICAgIHRlc3ROZXN0ZWRDYXNlKCk7CisgICAgdGVzdEhvc3RWc1Njb3BlZFN0eWxlKCk7Cisg
ICAgdGVzdEhvc3RWc0lubGluZVN0eWxlKCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
IG9ubG9hZD0icnVuVGVzdHMoKSI+CisgIDxkaXYgaWQ9InBhcmVudCI+CisgIDwvZGl2PgorPC9i
b2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169112</attachid>
            <date>2012-10-17 00:56:25 -0700</date>
            <delta_ts>2012-10-17 23:53:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88606-20121017165512.patch</filename>
            <type>text/plain</type>
            <size>45362</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNTM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjE3ZDEwY2Y1MDk5YzM1
NzIwYmUwYzQwMzI5MzhmODU2NDQ0ZmNiYS4uNjczNDYwYjFiNjI0NjAyNTJiNjYyZWI2ZjI4MDYw
MmQyOGUyOTg4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNSBAQAorMjAxMi0xMC0xMiAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01d
IE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIEBob3N0LUBydWxlcyBh
Y2NvcmRpbmcgdG8gdGhlIHNoYWRvdyBkb20gc3BlYzoKKyAgICAgICAgaHR0cDovL2R2Y3MudzMu
b3JnL2hnL3dlYmNvbXBvbmVudHMvcmF3LWZpbGUvdGlwL3NwZWMvc2hhZG93L2luZGV4Lmh0bWwj
aG9zdC1hdC1ydWxlCisgICAgICAgIFRoZSBkZXNpZ24gZG9jIGlzOgorICAgICAgICBodHRwczov
L2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFQMnlvcmNoRjhsY2kyc2Njci1tVlNSZjJkdHZq
S2VpdXlRV3pDQjJiRUE4L2VkaXQKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvYXRo
b3N0LWF0cnVsZXMuaHRtbAorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAg
QWRkZWQgcnVsZXMgZm9yIHBhcnNpbmcgQGhvc3QgQC1ydWxlcy4KKyAgICAgICAgKiBjc3MvQ1NT
UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbik6
CisgICAgICAgIEFkZGVkIGEgbmV3IHRva2VuICJAaG9zdCIuCisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKToKKyAgICAgICAgQWRkZWQgYSBuZXcgbWV0aG9kIHRv
IGNyZWF0ZSBhbiBAaG9zdCBALXJ1bGUsIHdoaWNoIGlzIGludm9rZWQgZnJvbQorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICBBZGRlZCBhIGRl
Y2xhcmF0aW9uIG9mIHRoZSBhYm92ZSBuZXcgbWV0aG9kOiBjcmVhdGVIb3N0UnVsZS4KKyAgICAg
ICAgKiBjc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmg6CisgICAgICAgIEFkZGVkIEhPU1RfUlVM
RSB0byBlbnVtIFR5cGUuCisgICAgICAgICogY3NzL1J1bGVTZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgTW9kaWZpZWQgbXVsdGlwbGUgYm9v
bCBhcmd1bWVudHMgaW50byBvbmUgdW5zaWduZWQgYXJndW1lbnQuIE5vdyBpdAorICAgICAgICB1
c2VzIGNvbWJpbmF0aW9ucyBvZiB2YWx1ZXMgZnJvbSBlbnVtIEFkZFJ1bGVTdGF0ZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNl
dDo6YWRkUmVnaW9uUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSdWxlc0Zy
b21TaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRTdHlsZVJ1bGUpOgorICAg
ICAgICBVcGRhdGVkIGFjY29yZGluZyB0byB0aGUgUnVsZURhdGEncyBjaGFuZ2UuCisgICAgICAg
IE1vZGlmaWVkIHRvIEludm9rZSBpbmNyZWFzZVNwZWNpZmljaXR5IGlmIHRoZSBnaXZlbiBydWxl
IGlzIEBob3N0CisgICAgICAgIEAtcnVsZS4KKyAgICAgICAgKiBjc3MvUnVsZVNldC5oOgorICAg
ICAgICAoUnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmluY3JlYXNlU3Bl
Y2lmaWNpdHkpOgorICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgdG8gaW5jcmVhc2Ugc2VsZWN0
b3IncyBzcGVjaWZpY2l0eS4gVGhpcyBtZXRob2QgaXMKKyAgICAgICAgdXNlZCB0byBtYWtlIEBo
b3N0IEAtcnVsZXMnIHNwZWNpZmljaXR5IGxhcmdlciB0aGFuIG5vcm1hbCBhdXRob3IKKyAgICAg
ICAgcnVsZXMnIHNwZWNpZmljaXR5LgorICAgICAgICAoUnVsZVNldCk6CisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJ1bGVTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHMpOgor
ICAgICAgICBVcGRhdGVkIGFjY29yZGluZyB0byB0aGUgUnVsZURhdGEncyBjaGFuZ2UuCisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVz
SG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgbWF0Y2hlZCBob3N0IHJ1
bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhpcyBtZXRob2QgaW52b2tl
cworICAgICAgICBTdHlsZVNjb3BlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNo
ZXNIb3N0UnVsZXMgdG8gZmluZAorICAgICAgICBtYXRjaGVkIGhvc3QgcnVsZXMuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1
bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgbWF0Y2hlZCBob3N0IHJ1bGVzIHdo
ZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhpcyBtZXRob2QgaW52b2tlcyBTdHls
ZVNjb3BlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzIHRvIGZpbmQKKyAgICAgICAgbWF0Y2hlZCBo
b3N0IHJ1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JS
dWxlcyk6CisgICAgICAgIE1vZGlmaWVkIHRvIGludm9rZSBtYXRjaEhvc3RSdWxlcy4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKToKKyAgICAgICAg
RGlzYWJsZSBzaWJsaW5nIHN0eWxlIGNhY2hlIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlzIGEgc2hh
ZG93IGhvc3QgYW5kCisgICAgICAgIGFueSBAaG9zdCBALXJ1bGVzIGFyZSBhcHBsaWVkIHRvIHRo
ZSBlbGVtZW50LgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjplbnN1cmVTY29wZVJlc29sdmVyKToKKyAgICAgICAgSWYgbm8g
c2NvcGVSZXNvbHZlciBpcyBjcmVhdGVkLCBjcmVhdGUgYW5kIHJldHVybiB0aGUgaW5zdGFuY2Uu
CisgICAgICAgIElmIGNyZWF0ZWQsIGp1c3QgcmV0dXJuIHRoZSBpbnN0YW5jZS4KKyAgICAgICAg
KFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1
bGVCYXNlOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNT
U09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0OjpTdHlsZVJ1bGVI
b3N0KToKKyAgICAgICAgSW1wbGVtZW50ZWQgY2xhc3MgU3R5bGVSdWxlSG9zdC4gVGhlIGNsYXNz
IGlzIGFsbW9zdCB0aGUgc2FtZSBhcworICAgICAgICBTdHlsZVJ1bGVCbG9jayBleGNlcHQgdHlw
ZS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmlzSG9zdFJ1bGUpOgorICAgICAgICAoU3R5bGVS
dWxlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0OjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y29weSk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlQXRIb3N0UnVsZVNldEZvcik6CisgICAgICAgIEEg
bmV3IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUnVsZVNldCBmb3IgdGhlIGdpdmVuIHNoYWRvdyBy
b290LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVz
b2x2ZXI6OmF0SG9zdFJ1bGVTZXRGb3IpOgorICAgICAgICBBIG5ldyBwcml2YXRlIGlubGluZSBt
ZXRob2QgdG8gb2J0YWluIEBob3N0IEAtcnVsZXMgZGVjbGFyZWQgaW4KKyAgICAgICAgdGhlIGdp
dmVuIHNoYWRvdyByb290LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjph
ZGRIb3N0UnVsZSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1ldGhvZCB0byByZWdpc3RlciBAaG9z
dCBALXJ1bGVzIHdpdGggc2hhZG93IHJvb3RzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29w
ZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKToKKyAgICAg
ICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgd2hldGhlciBhbnkgQGhvc3QgQC1ydWxlcyBhcmUgYXBw
bGllZCB0bworICAgICAgICB0aGUgZ2l2ZW4gaG9zdCBlbGVtZW50LgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTY29wZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIEEgbmV3IG1l
dGhvZCB0byBmaW5kIG1hdGNoZWQgcnVsZXMgZm9yIHRoZSBnaXZlbiBob3N0IGVsZW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKToK
KyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFN0eWxlU2NvcGVSZXNvbHZlcik6CisgICAgICAgICogY3NzL1N0eWxlU2hlZXRD
b250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGlsZFJ1bGVzSGF2ZUZhaWxlZE9yQ2Fu
Y2VsZWRTdWJyZXNvdXJjZXMpOgorICAgICAgICAqIGRvbS9FbGVtZW50U2hhZG93LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6OkVsZW1lbnRTaGFkb3cpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6YWRkU2hhZG93Um9vdCk6CisgICAgICAgIFNpbmNlIGEg
bmV3IHNoYWRvdyByb290IGlzIGFkZGVkLCBkaXNhYmxlIEBob3N0IEAtcnVsZXMgY2FjaGUuCisg
ICAgICAgICogZG9tL0VsZW1lbnRTaGFkb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRT
aGFkb3c6Omhhc01hdGNoZWRIb3N0UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50U2hh
ZG93OjpoYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudFNoYWRvdzo6Y2xlYXJIYXNNYXRjaGVkSG9zdFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudFNoYWRvdzo6c2V0SGFzTWF0Y2hlZEhvc3RSdWxlKToKKyAgICAgICAgQWRkZWQgZm91
ciBtZXRob2RzIGZvciBAaG9zdCBALXJ1bGVzIGNhY2hlLiBUaGUgY2FjaGUgaGFzIGluZm9ybWF0
aW9uCisgICAgICAgIGFib3V0IHdoZXRoZXIgYW55IEBob3N0IEAtcnVsZXMgbWF0Y2ggdGhlIEVs
ZW1lbnRTaGFkb3cncyBob3N0LgorICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIGhhc01hdGNo
ZWRIb3N0UnVsZSBpcyBhdmFpbGFibGUgb25seSBpZgorICAgICAgICBoYXNNYXRjaGVkSG9zdFJ1
bGVBdmFpbGFibGUgcmV0dXJucyB0cnVlLgorICAgICAgICAoRWxlbWVudFNoYWRvdyk6CisgICAg
ICAgICogZG9tL1NoYWRvd1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Um9vdDo6
Y2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgRGlzYWJsZSBAaG9zdCBALXJ1bGVzIGNhY2hlLCBi
ZWNhdXNlIHN0eWxlIGVsZW1lbnRzIG1pZ2h0IGJlIGFkZGVkCisgICAgICAgIGludG8gdGhlIHNo
YWRvdyBkb20gc3VidHJlZS4KKwogMjAxMi0xMC0xNiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgogCiAgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50OjpvcHRpb25TZWxlY3Rl
ZEJ5VXNlciBjb25mdXNlcyBsaXN0SW5kZXggYW5kIG9wdGlvbkluZGV4CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYW1tYXIueS5pbgppbmRleCA3MzNhZThlZGE2MmU2NGYwMzdiZmQwMGI1YTg0MTc4ZGYyNzZi
ZWVkLi40ZDFiYTU4YzE0NjRmNzNhNmRkZjk0NWRkZDlhYTYzNjc0NjQ5NzQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFtbWFyLnkuaW4KQEAgLTkyLDYgKzkyLDcgQEAgc3RhdGljIGlubGluZSBpbnQg
Y3NzeXllcnJvcih2b2lkKiwgY29uc3QgY2hhciopCiAldG9rZW4gUEFHRV9TWU0KICV0b2tlbiBN
RURJQV9TWU0KICV0b2tlbiBGT05UX0ZBQ0VfU1lNCisldG9rZW4gSE9TVF9TWU0KICV0b2tlbiBD
SEFSU0VUX1NZTQogJXRva2VuIE5BTUVTUEFDRV9TWU0KICV0b2tlbiBWQVJGVU5DVElPTgpAQCAt
MTc5LDYgKzE4MCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNzc3l5ZXJyb3Iodm9pZCosIGNvbnN0
IGNoYXIqKQogJXR5cGUgPHJ1bGU+IHBhZ2UKICV0eXBlIDxydWxlPiBtYXJnaW5fYm94CiAldHlw
ZSA8cnVsZT4gZm9udF9mYWNlCisldHlwZSA8cnVsZT4gaG9zdAogJXR5cGUgPHJ1bGU+IGtleWZy
YW1lcwogJXR5cGUgPHJ1bGU+IGludmFsaWRfcnVsZQogJXR5cGUgPHJ1bGU+IHNhdmVfYmxvY2sK
QEAgLTM3OSw2ICszODEsNyBAQCB2YWxpZF9ydWxlOgogICB8IG5hbWVzcGFjZQogICB8IGltcG9y
dAogICB8IHJlZ2lvbgorICB8IGhvc3QKICAgOwogCiBydWxlOgpAQCAtODA3LDYgKzgxMCwyMyBA
QCBmb250X2ZhY2U6CiAgICAgfQogOwogCitiZWZvcmVfaG9zdF9ydWxlOgorICAgIC8qIGVtcHR5
ICovIHsKKyAgICAgICAgcGFyc2VyLT5tYXJrUnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VE
YXRhOjpIT1NUX1JVTEUpOworICAgIH0KKyAgICA7CisKK2hvc3Q6CisgICAgYmVmb3JlX2hvc3Rf
cnVsZSBIT1NUX1NZTSBhdF9ydWxlX2hlYWRlcl9lbmRfbWF5YmVfc3BhY2UgCisgICAgJ3snIGF0
X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZSBibG9ja19ydWxlX2xpc3Qgc2F2ZV9ibG9jayB7
CisgICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVIb3N0UnVsZSgkNyk7CisgICAgfQorICAgIHwg
YmVmb3JlX2hvc3RfcnVsZSBIT1NUX1NZTSBhdF9ydWxlX2hlYWRlcl9lbmRfbWF5YmVfc3BhY2Ug
JzsnIHsKKyAgICAgICAgJCQgPSAwOworICAgICAgICBwYXJzZXItPnBvcFJ1bGVEYXRhKCk7Cisg
ICAgfQorICAgIDsKKyAKIHJlZ2lvbl9zZWxlY3RvcjoKICAgICBzZWxlY3Rvcl9saXN0IHsKICAg
ICAgICAgaWYgKCQxKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IGYyMGI2MTAxOGNj
YWYwMzhjMjk1MjZiYzViN2VkMmVhNGUxOWEzZmYuLjk3ODc1ZjMzZjczNzFjYTVjOWZkNjI5YmU0
N2RiZGFjNmI0MGJlOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC05MTg1LDYgKzkx
ODUsMTEgQEAgaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjpkZXRlY3RBdFRva2VuKGludCBsZW5ndGgs
IGJvb2wgaGFzRXNjYXBlKQogICAgICAgICAgICAgbV90b2tlbiA9IEZPTlRfRkFDRV9TWU07CiAg
ICAgICAgIHJldHVybjsKIAorICAgIGNhc2UgJ2gnOgorICAgICAgICBpZiAobGVuZ3RoID09IDUg
JiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIm9zdCIpKQorICAgICAgICAgICAg
bV90b2tlbiA9IEhPU1RfU1lNOworICAgICAgICByZXR1cm47CisKICAgICBjYXNlICdpJzoKICAg
ICAgICAgaWYgKGxlbmd0aCA9PSA3ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIs
ICJtcG9ydCIpKSB7CiAgICAgICAgICAgICBtX3BhcnNpbmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7
CkBAIC05OTc3LDYgKzk5ODIsMjIgQEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVG
b250RmFjZVJ1bGUoKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1N0eWxlUnVsZUJhc2UqIENT
U1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUoUnVsZUxpc3QqIHJ1bGVzKQoreworICAgIG1fYWxsb3dJ
bXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKKyAgICBS
ZWZQdHI8U3R5bGVSdWxlSG9zdD4gcnVsZTsKKyAgICBpZiAocnVsZXMpCisgICAgICAgIHJ1bGUg
PSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoKnJ1bGVzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUnVs
ZUxpc3QgZW1wdHlSdWxlczsKKyAgICAgICAgcnVsZSA9IFN0eWxlUnVsZUhvc3Q6OmNyZWF0ZShl
bXB0eVJ1bGVzKTsKKyAgICB9CisgICAgU3R5bGVSdWxlSG9zdCogcmVzdWx0ID0gcnVsZS5nZXQo
KTsKKyAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CisgICAgcHJvY2Vz
c0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKIHZvaWQgQ1NTUGFyc2VyOjphZGROYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBw
cmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKQogewogICAgIGlmICghbV9zdHlsZVNoZWV0
IHx8ICFtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmlu
ZGV4IDQ2OWMxMmRmZmUxNGUxMGFiYzRiYWY5ZGFjMzZkZDM0NmE5NDcwMWQuLjdjMjQwZjZiNmY1
NTQyMThmYTMyZjUwMGMxZWYzY2IxNmJmNWUzNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAg
LTI4Miw2ICsyODIsNyBAQCBwdWJsaWM6CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlUGFnZVJ1
bGUoUGFzc093blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gcGFnZVNlbGVjdG9yKTsKICAgICBTdHls
ZVJ1bGVCYXNlKiBjcmVhdGVSZWdpb25SdWxlKENTU1NlbGVjdG9yVmVjdG9yKiByZWdpb25TZWxl
Y3RvciwgUnVsZUxpc3QqIHJ1bGVzKTsKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVNYXJnaW5B
dFJ1bGUoQ1NTU2VsZWN0b3I6Ok1hcmdpbkJveFR5cGUpOworICAgIFN0eWxlUnVsZUJhc2UqIGNy
ZWF0ZUhvc3RSdWxlKFJ1bGVMaXN0KiBydWxlcyk7CiAgICAgdm9pZCBzdGFydERlY2xhcmF0aW9u
c0Zvck1hcmdpbkJveCgpOwogICAgIHZvaWQgZW5kRGVjbGFyYXRpb25zRm9yTWFyZ2luQm94KCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAppbmRleCA0Njli
ZGI2MzBjMWE1YzVkYmE5OTNmZDFhZDU5ZWQwNzQ0OWE1NWJlLi4wNzllYzMzNjI0OTVjMDc5Nzli
NDc1YWZkZTc3NjAyMzg0Yzk5OTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJvcGVydHlTb3VyY2VEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5
U291cmNlRGF0YS5oCkBAIC05NCw3ICs5NCw4IEBAIHN0cnVjdCBDU1NSdWxlU291cmNlRGF0YSA6
IHB1YmxpYyBSZWZDb3VudGVkPENTU1J1bGVTb3VyY2VEYXRhPiB7CiAgICAgICAgIEZPTlRfRkFD
RV9SVUxFLAogICAgICAgICBQQUdFX1JVTEUsCiAgICAgICAgIEtFWUZSQU1FU19SVUxFLAotICAg
ICAgICBSRUdJT05fUlVMRQorICAgICAgICBSRUdJT05fUlVMRSwKKyAgICAgICAgSE9TVF9SVUxF
CiAgICAgfTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjcmVh
dGUoVHlwZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwCmluZGV4IGUyYmU1NzcxZTAyNWYxNGNm
OWE4NWRlN2U1MWNkOWM1YTEzMDkwNTkuLjkzOGFmMGExNTcxMDE3MzMyNTIzZmVjYWMzMTFmYjM5
Mzc2MWM0YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKQEAgLTEwNywxOCArMTA3LDE4IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoY29uc3Qg
Q1NTU2VsZWN0b3IqIHNlbGVjdG9yCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SdWxlRGF0YTo6
UnVsZURhdGEoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25l
ZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZh
c3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSkKK1J1bGVEYXRhOjpSdWxlRGF0YShT
dHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9u
LCBBZGRSdWxlU3RhdGUgYWRkUnVsZVN0YXRlKQogICAgIDogbV9ydWxlKHJ1bGUpCiAgICAgLCBt
X3NlbGVjdG9ySW5kZXgoc2VsZWN0b3JJbmRleCkKICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24p
CiAgICAgLCBtX3NwZWNpZmljaXR5KHNlbGVjdG9yKCktPnNwZWNpZmljaXR5KCkpCi0gICAgLCBt
X2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvcihjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciAmJiBTZWxl
Y3RvckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQorICAgICwg
bV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKGFkZFJ1bGVTdGF0ZSAmIFJ1bGVDYW5Vc2VGYXN0
Q2hlY2tTZWxlY3RvcikgJiYgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3Rv
cihzZWxlY3RvcigpKSkKICAgICAsIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3IoISFzZWxlY3Rvcigp
LT50YWdIaXN0b3J5KCkpCiAgICAgLCBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1M
QmFzZWRPblJ1bGVIYXNoKGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goc2Vs
ZWN0b3IoKSkpCiAgICAgLCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihXZWJD
b3JlOjpjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IoKSkpCiAgICAg
LCBtX2xpbmtNYXRjaFR5cGUoU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hUeXBl
KHNlbGVjdG9yKCkpKQotICAgICwgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4pCi0gICAgLCBtX2lzSW5SZWdpb25SdWxlKGluUmVnaW9uUnVsZSkK
KyAgICAsIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbihhZGRSdWxlU3RhdGUgJiBSdWxlSGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbikKKyAgICAsIG1faXNJblJlZ2lvblJ1bGUoYWRkUnVsZVN0
YXRlICYgUnVsZUlzSW5SZWdpb25SdWxlKQogewogICAgIEFTU0VSVChtX3Bvc2l0aW9uID09IHBv
c2l0aW9uKTsKICAgICBBU1NFUlQobV9zZWxlY3RvckluZGV4ID09IHNlbGVjdG9ySW5kZXgpOwpA
QCAtMjA3LDkgKzIwNywxNCBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJp
bmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsIGNvbnN0IFJ1bGVEYQogICAgIHJ1bGVzLT5h
cHBlbmQocnVsZURhdGEpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoU3R5bGVSdWxlKiBy
dWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQordm9p
ZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRl
eCwgQWRkUnVsZVN0YXRlIGFkZFJ1bGVTdGF0ZSkKIHsKLSAgICBSdWxlRGF0YSBydWxlRGF0YShy
dWxlLCBzZWxlY3RvckluZGV4LCBtX3J1bGVDb3VudCsrLCBoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaW5SZWdpb25SdWxlKTsKKyAgICBSdWxlRGF0
YSBydWxlRGF0YShydWxlLCBzZWxlY3RvckluZGV4LCBtX3J1bGVDb3VudCsrLCBhZGRSdWxlU3Rh
dGUpOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBhdGhvc3RSdWxlU3BlY2lmaWNpdHkgPSAw
eDEwMDAwMDsKKworICAgIGlmIChhZGRSdWxlU3RhdGUgJiBSdWxlSXNIb3N0UnVsZSkKKyAgICAg
ICAgcnVsZURhdGEuaW5jcmVhc2VTcGVjaWZpY2l0eShhdGhvc3RSdWxlU3BlY2lmaWNpdHkpOwor
CiAgICAgY29sbGVjdEZlYXR1cmVzRnJvbVJ1bGVEYXRhKG1fZmVhdHVyZXMsIHJ1bGVEYXRhKTsK
IAogICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7CkBAIC0y
NjQsMTAgKzI2OSwxMiBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVn
aW9uKiByZWdpb25SdWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdAogCiAgICAgLy8gQ29sbGVj
dCB0aGUgcmVnaW9uIHJ1bGVzIGludG8gYSBydWxlIHNldAogICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IHJlZ2lvblJ1bGUtPmNoaWxkUnVsZXMo
KTsKKyAgICBBZGRSdWxlU3RhdGUgYWRkUnVsZVN0YXRlID0gaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiA/IFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogUnVsZUhhc05vU3BlY2lhbFN0
YXRlOworICAgIGFkZFJ1bGVTdGF0ZSA9IHN0YXRpY19jYXN0PEFkZFJ1bGVTdGF0ZT4oYWRkUnVs
ZVN0YXRlIHwgUnVsZUNhblVzZUZhc3RDaGVja1NlbGVjdG9yIHwgUnVsZUlzSW5SZWdpb25SdWxl
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraSkg
ewogICAgICAgICBTdHlsZVJ1bGVCYXNlKiByZWdpb25TdHlsaW5nUnVsZSA9IGNoaWxkUnVsZXNb
aV0uZ2V0KCk7CiAgICAgICAgIGlmIChyZWdpb25TdHlsaW5nUnVsZS0+aXNTdHlsZVJ1bGUoKSkK
LSAgICAgICAgICAgIHJlZ2lvblJ1bGVTZXQtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHls
ZVJ1bGUqPihyZWdpb25TdHlsaW5nUnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHRy
dWUsIHRydWUpOworICAgICAgICAgICAgcmVnaW9uUnVsZVNldC0+YWRkU3R5bGVSdWxlKHN0YXRp
Y19jYXN0PFN0eWxlUnVsZSo+KHJlZ2lvblN0eWxpbmdSdWxlKSwgYWRkUnVsZVN0YXRlKTsKICAg
ICB9CiAgICAgLy8gVXBkYXRlIHRoZSAiZ2xvYmFsIiBydWxlIGNvdW50IHNvIHRoYXQgcHJvcGVy
IG9yZGVyIGlzIG1haW50YWluZWQKICAgICBtX3J1bGVDb3VudCA9IHJlZ2lvblJ1bGVTZXQtPm1f
cnVsZUNvdW50OwpAQCAtMjg2LDYgKzI5Myw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9t
U2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1CiAg
ICAgICAgICAgICBhZGRSdWxlc0Zyb21TaGVldChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCksIG1l
ZGl1bSwgcmVzb2x2ZXIsIHNjb3BlKTsKICAgICB9CiAgICAgYm9vbCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luID0gcmVzb2x2ZXIgJiYgcmVzb2x2ZXItPmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCktPmNhblJlcXVlc3Qoc2hlZXQtPmJhc2VVUkwoKSk7CisgICAgQWRkUnVsZVN0YXRlIGFk
ZFJ1bGVTdGF0ZSA9IHN0YXRpY19jYXN0PEFkZFJ1bGVTdGF0ZT4oKGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA6IDApIHwgKCFzY29wZSA/
IFJ1bGVDYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciA6IDApKTsKIAogICAgIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgcnVsZXMgPSBzaGVldC0+Y2hpbGRSdWxlcygpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlcy5zaXplKCk7ICsraSkgewpAQCAtMjkzLDcg
KzMwMSw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRl
bnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1CiAKICAgICAgICAgQVNTRVJUKCFydWxl
LT5pc0ltcG9ydFJ1bGUoKSk7CiAgICAgICAgIGlmIChydWxlLT5pc1N0eWxlUnVsZSgpKQotICAg
ICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUpLCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCAhc2NvcGUpOworICAgICAgICAgICAgYWRkU3R5bGVSdWxl
KHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUpLCBhZGRSdWxlU3RhdGUpOwogICAgICAgICBl
bHNlIGlmIChydWxlLT5pc1BhZ2VSdWxlKCkpCiAgICAgICAgICAgICBhZGRQYWdlUnVsZShzdGF0
aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4ocnVsZSkpOwogICAgICAgICBlbHNlIGlmIChydWxlLT5p
c01lZGlhUnVsZSgpKSB7CkBAIC0zMDUsNyArMzEzLDcgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxl
c0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZh
bHUKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgY2hpbGRSdWxlcy5z
aXplKCk7ICsraikgewogICAgICAgICAgICAgICAgICAgICBTdHlsZVJ1bGVCYXNlKiBjaGlsZFJ1
bGUgPSBjaGlsZFJ1bGVzW2pdLmdldCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRS
dWxlLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSdWxl
KHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KGNoaWxkUnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sICFzY29wZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3Rh
dGljX2Nhc3Q8U3R5bGVSdWxlKj4oY2hpbGRSdWxlKSwgYWRkUnVsZVN0YXRlKTsKICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRSdWxlLT5pc1BhZ2VSdWxlKCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRQYWdlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4oY2hp
bGRSdWxlKSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNGb250
RmFjZVJ1bGUoKSAmJiByZXNvbHZlcikgewpAQCAtMzQ3LDE1ICszNTUsMTkgQEAgdm9pZCBSdWxl
U2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHUKICAgICAgICAgICAgIGFkZFJlZ2lvblJ1bGUoc3RhdGljX2Nhc3Q8U3R5
bGVSdWxlUmVnaW9uKj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pOwogICAgICAg
ICB9CiAjZW5kaWYKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKKyAgICAgICAgZWxzZSBpZiAocnVs
ZS0+aXNIb3N0UnVsZSgpKQorICAgICAgICAgICAgcmVzb2x2ZXItPmVuc3VyZVNjb3BlUmVzb2x2
ZXIoKS0+YWRkSG9zdFJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlSG9zdCo+KHJ1bGUpLCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCBzY29wZSk7CisjZW5kaWYKICAgICB9CiAgICAgaWYgKG1f
YXV0b1Nocmlua1RvRml0RW5hYmxlZCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9p
ZCBSdWxlU2V0OjphZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiBydWxlLCBib29sIGhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJl
Z2lvblJ1bGUpCit2b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIEFk
ZFJ1bGVTdGF0ZSBhZGRSdWxlU3RhdGUpCiB7CiAgICAgZm9yIChzaXplX3Qgc2VsZWN0b3JJbmRl
eCA9IDA7IHNlbGVjdG9ySW5kZXggIT0gbm90Rm91bmQ7IHNlbGVjdG9ySW5kZXggPSBydWxlLT5z
ZWxlY3Rvckxpc3QoKS5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpCi0g
ICAgICAgIGFkZFJ1bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGlzSW5SZWdpb25SdWxlKTsKKyAgICAgICAg
YWRkUnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBhZGRSdWxlU3RhdGUpOwogfQogCiBzdGF0aWMg
aW5saW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBt
YXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL1J1bGVTZXQuaAppbmRleCA2NTc3MjM4YmE5MjM2YTlkNjgxMDM5MTk1YTBkZDQz
YTJlODA4MmEwLi43OTM0MjAxMDQ4NTFiOWFkOTNmMTI5M2Y4ZjhmYTk3ZDRiYTYwZjZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9SdWxlU2V0LmgKQEAgLTMxLDYgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorZW51bSBBZGRSdWxlU3RhdGUgeworICAgIFJ1bGVIYXNOb1NwZWNpYWxTdGF0ZSAgICAgICAg
ID0gMCwKKyAgICBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA9IDEsCisgICAgUnVsZUNh
blVzZUZhc3RDaGVja1NlbGVjdG9yICAgPSAxIDw8IDEsCisgICAgUnVsZUlzSW5SZWdpb25SdWxl
ICAgICAgICAgICAgPSAxIDw8IDIsCisgICAgUnVsZUlzSG9zdFJ1bGUgICAgICAgICAgICAgICAg
PSAxIDw8IDMsCit9OworCiBjbGFzcyBDU1NTZWxlY3RvcjsKIGNsYXNzIENvbnRhaW5lck5vZGU7
CiBjbGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOwpAQCAtNDAsNyArNDgsNyBAQCBjbGFzcyBTdHls
ZVNoZWV0Q29udGVudHM7CiAKIGNsYXNzIFJ1bGVEYXRhIHsKIHB1YmxpYzoKLSAgICBSdWxlRGF0
YShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwg
Ym9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVj
dG9yLCBib29sIGluUmVnaW9uUnVsZSk7CisgICAgUnVsZURhdGEoU3R5bGVSdWxlKiwgdW5zaWdu
ZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRpb24sIEFkZFJ1bGVTdGF0ZSk7CiAKICAg
ICB1bnNpZ25lZCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KICAgICBT
dHlsZVJ1bGUqIHJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3J1bGU7IH0KQEAgLTU1LDYgKzYzLDcg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUoKSBjb25zdCB7IHJldHVybiBt
X2xpbmtNYXRjaFR5cGU7IH0KICAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSBj
b25zdCB7IHJldHVybiBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW47IH0KICAgICBib29sIGlz
SW5SZWdpb25SdWxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUmVnaW9uUnVsZTsgfQorICAgIHZv
aWQgaW5jcmVhc2VTcGVjaWZpY2l0eSh1bnNpZ25lZCB2YWx1ZSkgeyBtX3NwZWNpZmljaXR5ICs9
IHZhbHVlOyB9CiAKICAgICAvLyBUcnkgdG8gYmFsYW5jZSBiZXR3ZWVuIG1lbW9yeSB1c2FnZSAo
dGhlcmUgY2FuIGJlIGxvdHMgb2YgUnVsZURhdGEgb2JqZWN0cykgYW5kIGdvb2QgZmlsdGVyaW5n
IHBlcmZvcm1hbmNlLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVtSWRlbnRpZmll
ckNvdW50ID0gNDsKQEAgLTk4LDggKzEwNyw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkUnVs
ZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRv
ciYsIFN0eWxlUmVzb2x2ZXIqID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAwKTsKIAotICAg
IHZvaWQgYWRkU3R5bGVSdWxlKFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9
IGZhbHNlKTsKLSAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJ
bmRleCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVj
a1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOworICAgIHZvaWQgYWRkU3R5
bGVSdWxlKFN0eWxlUnVsZSosIEFkZFJ1bGVTdGF0ZSk7CisgICAgdm9pZCBhZGRSdWxlKFN0eWxl
UnVsZSosIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIEFkZFJ1bGVTdGF0ZSk7CiAgICAgdm9pZCBh
ZGRQYWdlUnVsZShTdHlsZVJ1bGVQYWdlKik7CiAgICAgdm9pZCBhZGRUb1J1bGVTZXQoQXRvbWlj
U3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYsIGNvbnN0IFJ1bGVEYXRhJik7CiAgICAgdm9p
ZCBhZGRSZWdpb25SdWxlKFN0eWxlUnVsZVJlZ2lvbiosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggZTVhNGRlNmYx
NzIzZmMxYTM1YWRhM2YyODgwMWQ5N2Y4MzAxMzE4NS4uMDVlMWZjNTQ4YmM4NDBjZjUxODc1NDkz
ZWUyNjZkZmU3OTZiOTQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAt
Mzc3LDcgKzM3Nyw3IEBAIHN0YXRpYyBQYXNzT3duUHRyPFJ1bGVTZXQ+IG1ha2VSdWxlU2V0KGNv
bnN0IFZlY3RvcjxSdWxlRmVhdHVyZT4mIHJ1bGVzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICBPd25QdHI8UnVsZVNldD4gcnVsZVNldCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBydWxlU2V0LT5hZGRSdWxl
KHJ1bGVzW2ldLnJ1bGUsIHJ1bGVzW2ldLnNlbGVjdG9ySW5kZXgsIHJ1bGVzW2ldLmhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4sIGZhbHNlKTsKKyAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxl
c1tpXS5ydWxlLCBydWxlc1tpXS5zZWxlY3RvckluZGV4LCBydWxlc1tpXS5oYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luID8gUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gOiBSdWxlSGFzTm9T
cGVjaWFsU3RhdGUpOwogICAgIHJ1bGVTZXQtPnNocmlua1RvRml0KCk7CiAgICAgcmV0dXJuIHJ1
bGVTZXQucmVsZWFzZSgpOwogfQpAQCAtNDIwLDkgKzQyMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3Rv
cjxSZWZQCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgU3R5bGVTaGVldENvbnRlbnRz
KiBzaGVldCA9IGNzc1NoZWV0LT5jb250ZW50cygpOwogICAgICAgICBpZiAoY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGUgPSBTdHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3BlRm9yKGNzc1NoZWV0KSkg
ewotICAgICAgICAgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCi0gICAgICAgICAgICAgICAgbV9z
Y29wZVJlc29sdmVyID0gYWRvcHRQdHIobmV3IFN0eWxlU2NvcGVSZXNvbHZlcigpKTsKLSAgICAg
ICAgICAgIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlUnVsZVNldEZvcihzY29wZSktPmFkZFJ1bGVz
RnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgIGVu
c3VyZVNjb3BlUmVzb2x2ZXIoKS0+ZW5zdXJlUnVsZVNldEZvcihzY29wZSktPmFkZFJ1bGVzRnJv
bVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKQEAgLTc1MCw2ICs3NDgsMzYgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVk
ZUVtcHQKICNlbmRpZgogfQogCitpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJp
bmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkKK3sKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkK
KyAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2NvcGVSZXNvbHZlci0+c3R5bGVTaGFy
aW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhtX2VsZW1lbnQpOworI2Vsc2UKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxl
cyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQoreworI2lmIEVO
QUJMRShTSEFET1dfRE9NKQorICAgIGlmICghbV9zY29wZVJlc29sdmVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBWZWN0b3I8UnVsZVNldCo+IG1hdGNoZWRSdWxlczsKKyAgICBtX3Njb3BlUmVz
b2x2ZXItPm1hdGNoSG9zdFJ1bGVzKG1fZWxlbWVudCwgbWF0Y2hlZFJ1bGVzKTsKKyAgICBpZiAo
bWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTWF0Y2hPcHRp
b25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIG9wdGlvbnMuc2NvcGUgPSBtX2Vs
ZW1lbnQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSA+IDA7
IC0taSkKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hlZFJ1bGVzLmF0KGktMSks
IHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JS
dWxlLCBvcHRpb25zKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgVU5V
U0VEX1BBUkFNKGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyNlbmRpZgorfQorCiB2b2lkIFN0eWxlUmVz
b2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcykKIHsKICAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwpAQCAtNzY0LDYgKzc5
Miw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYg
cmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzCiAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JSZWdpb24obV9hdXRob3JTdHlsZS5nZXQoKSwgcmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1
bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIG9wdGlvbnMpOwogCiAgICAgbWF0Y2hT
Y29wZWRBdXRob3JSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaEhv
c3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKIAogICAgIHNvcnRBbmRUcmFuc2Zl
ck1hdGNoZWRSdWxlcyhyZXN1bHQpOwogfQpAQCAtMTMzOSw2ICsxMzY4LDkgQEAgUmVuZGVyU3R5
bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAvLyBDYW4ndCBzaGFy
ZSBpZiBhdHRyaWJ1dGUgcnVsZXMgYXBwbHkuCiAgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNSdWxlU2V0KG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0LmdldCgpKSkKICAgICAg
ICAgcmV0dXJuIDA7CisgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgQGhvc3QgQC1ydWxlcyBhcHBseS4K
KyAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpKQorICAgICAg
ICByZXR1cm4gMDsKICAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCByZXF1aXJlcyB1bmlxdWUg
c3R5bGUgZm9yIGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0aGUgc2libGluZyBydWxl
IG1hdGNoIGFib3ZlLgogICAgIGlmIChwYXJlbnRTdHlsZVByZXZlbnRzU2hhcmluZyhtX3BhcmVu
dFN0eWxlKSkKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApp
bmRleCA4Yzk1ODc4NzcxNjFiOTY2N2Y2ZGNkZjA4MmVkZjJkOGJhNDUwMTRiLi4yYTNjY2FlMTVh
YWU4ZjRjYzUwMzgwNWE4ZDFiNGQyOTI5OTE1ZjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJSdWxlRmVhdHVyZS5oIgogI2luY2x1
ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgor
I2luY2x1ZGUgIlN0eWxlU2NvcGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC03
Miw2ICs3Myw3IEBAIGNsYXNzIFJlbmRlclJlZ2lvbjsKIGNsYXNzIFJ1bGVEYXRhOwogY2xhc3Mg
UnVsZVNldDsKIGNsYXNzIFNldHRpbmdzOworY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNzIFN0YXRp
Y0NTU1J1bGVMaXN0OwogY2xhc3MgU3R5bGVCdWlsZGVyOwogY2xhc3MgU3R5bGVTY29wZVJlc29s
dmVyOwpAQCAtMTY4LDEyICsxNzAsMjAgQEAgcHVibGljOgogICAgIC8vIEZpbmQgdGhlIGlkcyBv
ciBjbGFzc2VzIHRoZSBzZWxlY3RvcnMgb24gYSBzdHlsZXNoZWV0IGFyZSBzY29wZWQgdG8uIFRo
ZSBzZWxlY3RvcnMgb25seSBhcHBseSB0byBlbGVtZW50cyBpbiBzdWJ0cmVlcyB3aGVyZSB0aGUg
cm9vdCBlbGVtZW50IG1hdGNoZXMgdGhlIHNjb3BlLgogICAgIHN0YXRpYyBib29sIGRldGVybWlu
ZVN0eWxlc2hlZXRTZWxlY3RvclNjb3BlcyhTdHlsZVNoZWV0Q29udGVudHMqLCBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBj
bGFzc1Njb3Blcyk7CiAKKyAgICBTdHlsZVNjb3BlUmVzb2x2ZXIqIGVuc3VyZVNjb3BlUmVzb2x2
ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAgICAgICBt
X3Njb3BlUmVzb2x2ZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTY29wZVJlc29sdmVyKCkpOworICAg
ICAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyLmdldCgpOworICAgIH0KKwogcHJpdmF0ZToKICAg
ICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwogICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxl
bWVudCopOwogICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKCk7CiAgICAgUmVuZGVyU3R5bGUqIGxv
Y2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVz
UnVsZVNldChSdWxlU2V0Kik7CisgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVz
SG9zdFJ1bGVzKCk7CiAgICAgTm9kZSogbG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQs
IHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25zdDsKICAgICBTdHlsZWRFbGVtZW50KiBm
aW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsK
ICAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KikgY29uc3Q7
CkBAIC0zMjYsNiArMzM2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMo
TWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoVXNl
clJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBt
YXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cyk7CisgICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpOwogICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXMoUnVsZVNldCosIGludCYg
Zmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7
CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihSdWxlU2V0KiwgaW50JiBm
aXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsK
ICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURh
dGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRj
aE9wdGlvbnMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKaW5kZXggNzNiMGFmMjZjZTQyYWE0
NTk0ZDliNzYxNzk2YjE5ZDZhNmJiNjY1Yy4uZmQ1YzBjMzAyZDNkYTEzMzlhMDlmNjU0NDU5ZTBj
ZDQxMzMxNGU5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKQEAgLTc5LDYgKzc5LDkgQEAg
dm9pZCBTdHlsZVJ1bGVCYXNlOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBt
ZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICBzdGF0
aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqPih0aGlzKS0+cmVwb3J0RGVzY2VuZGFu
dE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwogICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBIb3N0OgorICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVCbG9jayo+KHRoaXMp
LT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7CisgICAgICAg
IHJldHVybjsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2Ug
S2V5ZnJhbWU6CkBAIC0xMTcsNiArMTIwLDkgQEAgdm9pZCBTdHlsZVJ1bGVCYXNlOjpkZXN0cm95
KCkKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFN0eWxl
UnVsZUtleWZyYW1lcyo+KHRoaXMpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBIb3N0Ogor
ICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5bGVSdWxlSG9zdCo+KHRoaXMpOworICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBVbmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNl
IEtleWZyYW1lOgpAQCAtMTUwLDYgKzE1Niw4IEBAIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4g
U3R5bGVSdWxlQmFzZTo6Y29weSgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2Ug
S2V5ZnJhbWVzOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlS2V5
ZnJhbWVzKj4odGhpcyktPmNvcHkoKTsKKyAgICBjYXNlIEhvc3Q6CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVIb3N0Kj4odGhpcyktPmNvcHkoKTsKICAgICBjYXNl
IFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xOTEs
NiArMTk5LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlPiBTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NP
TVdyYXBwZXIoQ1NTU3R5bGVTaGVldCogcGFyZW50U2hlZXQKICAgICBjYXNlIEtleWZyYW1lczoK
ICAgICAgICAgcnVsZSA9IFdlYktpdENTU0tleWZyYW1lc1J1bGU6OmNyZWF0ZShzdGF0aWNfY2Fz
dDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihzZWxmKSwgcGFyZW50U2hlZXQpOwogICAgICAgICBicmVh
azsKKyAgICBjYXNlIEhvc3Q6CiAgICAgY2FzZSBVbmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoK
ICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMzgxLDQgKzM5MCwxNCBAQCB2b2lkIFN0eWxlUnVsZVJl
Z2lvbjo6cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdAogICAgIGluZm8uYWRkTWVtYmVyKG1fc2VsZWN0b3JMaXN0KTsKIH0KIAorU3R5bGVS
dWxlSG9zdDo6U3R5bGVSdWxlSG9zdChWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFk
b3B0UnVsZXMpCisgICAgOiBTdHlsZVJ1bGVCbG9jayhIb3N0LCBhZG9wdFJ1bGVzKQoreworfQor
CitTdHlsZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KGNvbnN0IFN0eWxlUnVsZUhvc3QmIG8pCisg
ICAgOiBTdHlsZVJ1bGVCbG9jayhvKQoreworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSdWxlLmgKaW5kZXggZTE1ZjMyZTQwMmFhZjIwOGQzY2MwZmNjZDM1ODQ3N2Iy
MzAzNTYzNC4uN2FkMzEzZWNlYThiYmZiMWY2MzBhMmM1NGQ5N2IyNDQxNzMwMzkwMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJ1bGUuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAgICAgICAgIFBhZ2Us
CiAgICAgICAgIEtleWZyYW1lcywKICAgICAgICAgS2V5ZnJhbWUsIC8vIE5vdCB1c2VkLiBUaGVz
ZSBhcmUgaW50ZXJuYWxseSBub24tcnVsZSBTdHlsZUtleWZyYW1lIG9iamVjdHMuCisgICAgICAg
IEhvc3QsCiAgICAgICAgIFJlZ2lvbiA9IDE2CiAgICAgfTsKICAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9CkBAIC01OCw2ICs1OSw3IEBA
IHB1YmxpYzoKICAgICBib29sIGlzU3R5bGVSdWxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09
IFN0eWxlOyB9CiAgICAgYm9vbCBpc1JlZ2lvblJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkg
PT0gUmVnaW9uOyB9CiAgICAgYm9vbCBpc0ltcG9ydFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBl
KCkgPT0gSW1wb3J0OyB9CisgICAgYm9vbCBpc0hvc3RSdWxlKCkgY29uc3QgeyByZXR1cm4gdHlw
ZSgpID09IEhvc3Q7IH0KIAogICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gY29weSgpIGNv
bnN0OwogCkBAIC0yMjMsNiArMjI1LDIwIEBAIHByaXZhdGU6CiAgICAgQ1NTU2VsZWN0b3JMaXN0
IG1fc2VsZWN0b3JMaXN0OwogfTsKIAorY2xhc3MgU3R5bGVSdWxlSG9zdCA6IHB1YmxpYyBTdHls
ZVJ1bGVCbG9jayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVSdWxlSG9z
dD4gY3JlYXRlKFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcykKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVSdWxlSG9zdChhZG9wdFJ1bGVz
KSk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVIb3N0PiBjb3B5KCkgY29uc3Qg
eyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZUhvc3QoKnRoaXMpKTsgfQorCitwcml2YXRl
OgorICAgIFN0eWxlUnVsZUhvc3QoVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBhZG9w
dFJ1bGVzKTsKKyAgICBTdHlsZVJ1bGVIb3N0KGNvbnN0IFN0eWxlUnVsZUhvc3QmKTsKK307CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFN0eWxlUnVsZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCmluZGV4IDg3NDAyYmFhNTk4MTAyNGVl
NWQ2NDQ2NWFkMTc4ZGNjYjc5ZGVhOGEuLjM0ODkzYmJhZDhlZWI3ZmMzM2E4ZWNlYTI2ZGFmNDNi
MzQ3M2IzNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCkBA
IC0yOSw4ICsyOSwxMCBAQAogCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxFKFNI
QURPV19ET00pCiAKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJDU1NTdHls
ZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ29udGV4dEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiRWxlbWVu
dFNoYWRvdy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxTdHlsZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJSdWxlRmVhdHVyZS5oIgpAQCAtMTU0LDExICsxNTYsOTIgQEAg
dm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlc1RvKFJ1bGVGZWF0dXJlU2V0
JiBmZWF0dXJlcykKICAgICAgICAgZmVhdHVyZXMuYWRkKGl0LT52YWx1ZS0+ZmVhdHVyZXMoKSk7
CiB9CiAKK2lubGluZSBSdWxlU2V0KiBTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZUF0SG9zdFJ1
bGVTZXRGb3IoY29uc3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKK3sKKyAgICBTY29wZWRSdWxl
U2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9hdEhvc3RSdWxlcy5hZGQoc2hhZG93Um9v
dCwgbnVsbHB0cik7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUnVsZVNldDo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Cit9CisKK2lubGluZSBSdWxlU2V0KiBTdHls
ZVNjb3BlUmVzb2x2ZXI6OmF0SG9zdFJ1bGVTZXRGb3IoY29uc3QgU2hhZG93Um9vdCogc2hhZG93
Um9vdCkgY29uc3QKK3sKKyAgICBTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fYXRIb3N0UnVsZXMuZmluZChzaGFkb3dSb290KTsKKyAgICByZXR1cm4gaXQgIT0gbV9hdEhv
c3RSdWxlcy5lbmQoKSA/IGl0LT52YWx1ZS5nZXQoKSA6IDA7Cit9CisKK3ZvaWQgU3R5bGVTY29w
ZVJlc29sdmVyOjphZGRIb3N0UnVsZShTdHlsZVJ1bGVIb3N0KiBob3N0UnVsZSwgYm9vbCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkKK3sKKyAg
ICBpZiAoIXNjb3BlIHx8ICFzY29wZS0+aXNJblNoYWRvd1RyZWUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNjb3BlLT5zaGFkb3dSb290KCk7Cisg
ICAgaWYgKCFzaGFkb3dSb290IHx8ICFzaGFkb3dSb290LT5ob3N0KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBzaGFkb3dSb290LT5vd25lcigpLT5jbGVhckhhc01hdGNoZWRIb3N0UnVsZSgpOwor
CisgICAgUnVsZVNldCogcnVsZSA9IGVuc3VyZUF0SG9zdFJ1bGVTZXRGb3Ioc2hhZG93Um9vdCk7
CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMg
PSBob3N0UnVsZS0+Y2hpbGRSdWxlcygpOworICAgIEFkZFJ1bGVTdGF0ZSBhZGRSdWxlU3RhdGUg
PSBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID8gUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4gOiBSdWxlSGFzTm9TcGVjaWFsU3RhdGU7CisgICAgYWRkUnVsZVN0YXRlID0gc3RhdGljX2Nh
c3Q8QWRkUnVsZVN0YXRlPihhZGRSdWxlU3RhdGUgfCBSdWxlQ2FuVXNlRmFzdENoZWNrU2VsZWN0
b3IgfCBSdWxlSXNIb3N0UnVsZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxk
UnVsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3R5bGVSdWxlQmFzZSogaG9zdFN0eWxpbmdS
dWxlID0gY2hpbGRSdWxlc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKGhvc3RTdHlsaW5nUnVsZS0+
aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJ1bGUtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2Fz
dDxTdHlsZVJ1bGUqPihob3N0U3R5bGluZ1J1bGUpLCBhZGRSdWxlU3RhdGUpOworICAgIH0KK30K
KworYm9vbCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNI
b3N0UnVsZXMoY29uc3QgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAobV9hdEhvc3RSdWxl
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVsZW1lbnRTaGFkb3cq
IHNoYWRvdyA9IGVsZW1lbnQtPnNoYWRvdygpOworICAgIGlmICghc2hhZG93KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKHNoYWRvdy0+aGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxl
KCkpCisgICAgICAgIHJldHVybiBzaGFkb3ctPmhhc01hdGNoZWRIb3N0UnVsZSgpOworCisgICAg
Zm9yIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3Qo
KTsgc2hhZG93Um9vdDsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgp
KSB7CisgICAgICAgIGlmIChhdEhvc3RSdWxlU2V0Rm9yKHNoYWRvd1Jvb3QpKSB7CisgICAgICAg
ICAgICBzaGFkb3ctPnNldEhhc01hdGNoZWRIb3N0UnVsZSh0cnVlKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghc2hhZG93Um9vdC0+aGFzU2hhZG93
SW5zZXJ0aW9uUG9pbnQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBzaGFkb3ct
PnNldEhhc01hdGNoZWRIb3N0UnVsZShmYWxzZSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoY29uc3QgRWxlbWVudCogZWxl
bWVudCwgVmVjdG9yPFJ1bGVTZXQqPiYgbWF0Y2hlZFJ1bGVzKQoreworICAgIGlmIChtX2F0SG9z
dFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRWxlbWVudFNoYWRvdyog
c2hhZG93ID0gZWxlbWVudC0+c2hhZG93KCk7CisgICAgaWYgKCFzaGFkb3cpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIElmIEFscmVhZHkga25vdyB3aGV0aGVyIHRoZXJlIGV4aXN0IGFueSBt
YXRjaGVkIGhvc3QgcnVsZXMgb3Igbm90LCBzZWUuCisgICAgaWYgKHNoYWRvdy0+aGFzTWF0Y2hl
ZEhvc3RSdWxlQXZhaWxhYmxlKCkgJiYgIXNoYWRvdy0+aGFzTWF0Y2hlZEhvc3RSdWxlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGZvciAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNoYWRv
dy0+eW91bmdlc3RTaGFkb3dSb290KCk7IHNoYWRvd1Jvb3Q7IHNoYWRvd1Jvb3QgPSBzaGFkb3dS
b290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeyAKKyAgICAgICAgaWYgKFJ1bGVTZXQqIHJ1bGVTZXQg
PSBhdEhvc3RSdWxlU2V0Rm9yKHNoYWRvd1Jvb3QpKQorICAgICAgICAgICAgbWF0Y2hlZFJ1bGVz
LmFwcGVuZChydWxlU2V0KTsKKyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFkb3dJbnNl
cnRpb25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB2b2lkIFN0eWxl
U2NvcGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5
T2JqZWN0SW5mbykgY29uc3QKIHsKICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmpl
Y3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7CiAgICAgaW5mby5hZGRNZW1i
ZXIobV9hdXRob3JTdHlsZXMpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fc3RhY2spOworICAgIGlu
Zm8uYWRkTWVtYmVyKG1fYXRIb3N0UnVsZXMpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVTY29wZVJlc29sdmVyLmgKaW5kZXggNWEzMmRmZTc5ZjgzNWJiN2NmOTViOGM3ZGQ5YjNiYjcw
NDFmYjdmYi4uODVjMWQwMTAwNmFkNmNjNmY0ODkwMTE1MDUwOWNjMzQ4YjJkNmIxMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaApAQCAtMzcsOCArMzcsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xhc3MgQ1NTU3R5bGVT
aGVldDsKK2NsYXNzIEVsZW1lbnQ7CiBjbGFzcyBSdWxlU2V0OwogY2xhc3MgUnVsZUZlYXR1cmVT
ZXQ7CitjbGFzcyBTaGFkb3dSb290OworY2xhc3MgU3R5bGVSdWxlSG9zdDsKIAogI2lmIEVOQUJM
RShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFET1dfRE9NKQogCkBAIC03MiwxMiArNzUsMTgg
QEAgcHVibGljOgogICAgIGJvb2wgbWF0Y2hlc1N0eWxlQm91bmRzKGNvbnN0IFN0YWNrRnJhbWUm
IGZyYW1lKSBjb25zdCB7IHJldHVybiBmcmFtZS5tX2F1dGhvclN0eWxlQm91bmRzSW5kZXggPT0g
bV9zdGFja1BhcmVudEJvdW5kc0luZGV4OyB9CiAgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXNUbyhS
dWxlRmVhdHVyZVNldCYpOwogCisgICAgdm9pZCBhZGRIb3N0UnVsZShTdHlsZVJ1bGVIb3N0Kiwg
Ym9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZSk7CisgICAgYm9vbCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKGNvbnN0
IEVsZW1lbnQqKTsKKyAgICB2b2lkIG1hdGNoSG9zdFJ1bGVzKGNvbnN0IEVsZW1lbnQqLCBWZWN0
b3I8UnVsZVNldCo+JiBtYXRjaGVkUnVsZXMpOworCiAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2Fn
ZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgUnVsZVNldCogcnVs
ZVNldEZvcihjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgY29uc3Q7CiAgICAgdm9pZCBzZXR1
cFN0YWNrKGNvbnN0IENvbnRhaW5lck5vZGUqKTsKICAgICBib29sIHN0YWNrSXNDb25zaXN0ZW50
KGNvbnN0IENvbnRhaW5lck5vZGUqIHBhcmVudCkgY29uc3QgeyByZXR1cm4gcGFyZW50ICYmIHBh
cmVudCA9PSBtX3N0YWNrUGFyZW50OyB9CisgICAgUnVsZVNldCogZW5zdXJlQXRIb3N0UnVsZVNl
dEZvcihjb25zdCBTaGFkb3dSb290Kik7CisgICAgUnVsZVNldCogYXRIb3N0UnVsZVNldEZvcihj
b25zdCBTaGFkb3dSb290KikgY29uc3Q7CiAKICAgICBTY29wZWRSdWxlU2V0TWFwIG1fYXV0aG9y
U3R5bGVzOwogCkBAIC04OCw2ICs5Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBpcyB1c2Vk
IHRvIGRlY2lkZSB3aGV0aGVyIG1fc2NvcGluZ0VsZW1lbnRTdGFjayBpcyBjb25zaXN0ZW50LCBz
ZXBhcmF0ZWx5IGZyb20gU2VsZWN0b3JDaGVja2VyOjptX3BhcmVudFN0YWNrLgogICAgIGNvbnN0
IENvbnRhaW5lck5vZGUqIG1fc3RhY2tQYXJlbnQ7CiAgICAgaW50IG1fc3RhY2tQYXJlbnRCb3Vu
ZHNJbmRleDsKKworICAgIFNjb3BlZFJ1bGVTZXRNYXAgbV9hdEhvc3RSdWxlczsKIH07CiAKIGlu
bGluZSBib29sIFN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlU3RhY2tDb25zaXN0ZW5jeShDb250
YWluZXJOb2RlKiBwYXJlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
aGVldENvbnRlbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMu
Y3BwCmluZGV4IGU3Y2U4MWVhYWI0ODcxODYyNGY0ZWI1NTIzOGU1YzFhZjM1Njg1YjguLjM5ZTlh
N2IyY2Q2YzIxOTNiYjA0OTgwZmE4OGE4MjcyMWU0YTIzZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCkBAIC00MzUsNiArNDM1LDEwIEBAIHN0YXRpYyBib29s
IGNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcyhjb25zdCBWZWN0b3I8
UmVmUHRyPFN0eWxlCiAgICAgICAgICAgICBpZiAoY2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNl
bGVkU3VicmVzb3VyY2VzKHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZVJlZ2lvbio+KHJ1bGUp
LT5jaGlsZFJ1bGVzKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3R5bGVSdWxlQmFzZTo6SG9zdDoKKyAgICAgICAgICAg
IGlmIChjaGlsZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoc3RhdGljX2Nh
c3Q8Y29uc3QgU3R5bGVSdWxlSG9zdCo+KHJ1bGUpLT5jaGlsZFJ1bGVzKCkpKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3R5
bGVSdWxlQmFzZTo6SW1wb3J0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIGNhc2UgU3R5bGVSdWxlQmFzZTo6UGFnZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hh
ZG93LmNwcAppbmRleCBhZWI1YjViNDc1YjIxOWJjNTdkYzg1ZWYyZTdiODMyYWVlODg5M2ZjLi44
MDliY2M4NzgyMmU1MTRjZDhkNjRjM2RiOGQzMmFjNzU4NzYwZTE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRTaGFkb3cuY3BwCkBAIC0zOSw2ICszOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIEVsZW1lbnRTaGFkb3c6OkVsZW1lbnRTaGFkb3coKQorICAgIDogbV9oYXNNYXRjaGVkSG9z
dFJ1bGVBdmFpbGFibGUoZmFsc2UpCiB7CiB9CiAKQEAgLTg5LDYgKzkwLDEwIEBAIHZvaWQgRWxl
bWVudFNoYWRvdzo6YWRkU2hhZG93Um9vdChFbGVtZW50KiBzaGFkb3dIb3N0LCBQYXNzUmVmUHRy
PFNoYWRvd1Jvb3Q+IHNoCiAgICAgaWYgKHNoYWRvd0hvc3QtPmF0dGFjaGVkKCkpCiAgICAgICAg
IHNoYWRvd0hvc3QtPmxhenlSZWF0dGFjaCgpOwogCisgICAgLy8gQXMgYSBuZXcgc2hhZG93IGRv
bSBzdWJ0cmVlIG1pZ2h0IGhhdmUgQGhvc3QgQC1ydWxlcywgbmVlZCB0byBkaXNhYmxlCisgICAg
Ly8gaGFzTWF0Y2hlZEhvc3RSdWxlcyBjYWNoZS4KKyAgICBjbGVhckhhc01hdGNoZWRIb3N0UnVs
ZSgpOworCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRQdXNoU2hhZG93Um9vdChz
aGFkb3dIb3N0LCBzaGFkb3dSb290LmdldCgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hh
ZG93LmgKaW5kZXggZGRiNDM4MDZiZGUxNTM5ZmM3YWRjMmI5ZDg2OTJjZTcyM2M4MzNmNi4uNTE1
NjliNmE2YWI1NjZiZjRhOWJhNDUxM2I2NDBkMzg1ZDQ1Zjg2MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudFNoYWRvdy5oCkBAIC03MSwxMSArNzEsMTggQEAgcHVibGljOgogICAgIENvbnRlbnREaXN0
cmlidXRvciYgZGlzdHJpYnV0b3IoKTsKICAgICBjb25zdCBDb250ZW50RGlzdHJpYnV0b3ImIGRp
c3RyaWJ1dG9yKCkgY29uc3Q7CiAKKyAgICBib29sIGhhc01hdGNoZWRIb3N0UnVsZSgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzTWF0Y2hlZEhvc3RSdWxlOyB9CisgICAgYm9vbCBoYXNNYXRjaGVkSG9z
dFJ1bGVBdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiBtX2hhc01hdGNoZWRIb3N0UnVsZUF2YWls
YWJsZTsgfQorICAgIHZvaWQgY2xlYXJIYXNNYXRjaGVkSG9zdFJ1bGUoKSB7IG1faGFzTWF0Y2hl
ZEhvc3RSdWxlQXZhaWxhYmxlID0gZmFsc2U7IH0KKyAgICB2b2lkIHNldEhhc01hdGNoZWRIb3N0
UnVsZShib29sIGhhc1J1bGUpIHsgbV9oYXNNYXRjaGVkSG9zdFJ1bGUgPSBoYXNSdWxlOyBtX2hh
c01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZSA9IHRydWU7IH0KKwogcHJpdmF0ZToKICAgICB2b2lk
IGludmFsaWRhdGVEaXN0cmlidXRpb24oRWxlbWVudCogaG9zdCk7CiAKICAgICBEb3VibHlMaW5r
ZWRMaXN0PFNoYWRvd1Jvb3Q+IG1fc2hhZG93Um9vdHM7CiAgICAgQ29udGVudERpc3RyaWJ1dG9y
IG1fZGlzdHJpYnV0b3I7CisgICAgYm9vbCBtX2hhc01hdGNoZWRIb3N0UnVsZTsKKyAgICBib29s
IG1faGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlOwogfTsKIAogaW5saW5lIFNoYWRvd1Jvb3Qq
IEVsZW1lbnRTaGFkb3c6OnlvdW5nZXN0U2hhZG93Um9vdCgpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hh
ZG93Um9vdC5jcHAKaW5kZXggNTE4MGExYzIyZDg0ODk0ZTM3MGY1YzE2MmI2YTNhYzhmZjZmZDQy
NS4uMzk2MDRiOTE2NDA3MDRkMWY5ZThmYzk1NzE3MjgyYmY4NzhjMTM0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaGFkb3dSb290LmNwcApAQCAtMjI0LDYgKzIyNCw3IEBAIHZvaWQgU2hhZG93Um9vdDo6Y2hp
bGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5v
ZGUqCiB7CiAgICAgQ29udGFpbmVyTm9kZTo6Y2hpbGRyZW5DaGFuZ2VkKGNoYW5nZWRCeVBhcnNl
ciwgYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3VudERlbHRhKTsKICAgICBvd25l
cigpLT5pbnZhbGlkYXRlRGlzdHJpYnV0aW9uKCk7CisgICAgb3duZXIoKS0+Y2xlYXJIYXNNYXRj
aGVkSG9zdFJ1bGUoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDUwMDc1YWY0ODc3MjFhNzM2ZjM1YjhmNGM0
NjVkNDY2ZjVmZjQ2ZGYuLjY3YTJjMGI2MThjMjZiY2MwN2M3ZDA4ZDhiMDRiMzUyZWZhMWVkMWMg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0xMC0xMiAgVGFrYXNoaSBTYWthbW90byAgPHRh
c2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01dIE5lZWRzIEBob3N0IHJ1bGUg
Zm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLmh0bWw6
IEFkZGVkLgorCiAyMDEyLTEwLTE2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5j
b20+CiAKICAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQ6Om9wdGlvblNlbGVjdGVkQnlVc2VyIGNv
bmZ1c2VzIGxpc3RJbmRleCBhbmQgb3B0aW9uSW5kZXgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmExZjNiMWMyNTUxNjk1Njc4NzI1YmQ2NjUxODEzMTM0Mzg2NDlhMTQKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMTUgQEAKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0OiByZ2IoMjU1
LCAwLCAwKQoraG9zdEE6IHJnYigyNTUsIDAsIDApCitob3N0QjogcmdiKDAsIDAsIDI1NSkKK2hv
c3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMTI4LCAxMjgsIDEyOCkKK2hvc3Q6IHJnYigw
LCAwLCAyNTUpCitob3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAxMjgp
Citob3N0OiByZ2IoMjU1LCAyNTUsIDApCitob3N0OiByZ2IoMjU1LCAwLCAwKQorbmVzdGVkSG9z
dDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0OiByZ2IoMjU1LCAy
NTUsIDApCitIZWxsbwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0
aG9zdC1hdHJ1bGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0
cnVsZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDRiNTExZWUwMmZhOWQ3NTFlNTdlMTY5YjAwYTZkODc3
ZDUzYTZkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0
aG9zdC1hdHJ1bGVzLmh0bWwKQEAgLTAsMCArMSwxOTAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxzdHlsZT4KKyNob3N0IHsKKyAgY29sb3I6IGdyYXk7Cit9Cis8L3N0eWxl
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3BvbHlmaWxsLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+CitmdW5jdGlvbiBkdW1wQ29tcHV0ZWRTdHlsZShub2RlKQoreworICAgIGRlYnVnKG5vZGUu
aWQgKyAiOiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBu
dWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKK30KKworZnVuY3Rpb24gcHJlcHJvY2Vz
c0ZvclRlc3QoKQoreworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
cGFyZW50Iik7CisgICAgcGFyZW50LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJob3N0Ij48c3Bhbj5I
ZWxsbzwvc3Bhbj48L2Rpdj4nOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlQ29udGVudENhc2Uo
KQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93
Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7
IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENv
bXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVTaGFkb3dDYXNlKCkK
K3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jv
b3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBj
b2xvcjogcmVkOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBkdW1wQ29tcHV0
ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdEhvc3RXaXRoU2VsZWN0b3IoKQorewor
ICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyZW50Iik7CisgICAg
cGFyZW50LmlubmVySFRNTCA9ICI8c3R5bGUgc2NvcGVkPiAuaG9zdCB7IGNvbG9yOiBncmF5IH07
PC9zdHlsZT4iCisgICAgICAgICsgIjxkaXYgaWQ9J2hvc3RBJyBjbGFzcz0naG9zdCc+PHNwYW4+
SGVsbG88L3NwYW4+PC9kaXY+IgorICAgICAgICArICI8c3BhbiBpZD0naG9zdEInIGNsYXNzPSdo
b3N0Jz48c3Bhbj5Xb3JsZDwvc3Bhbj48L3NwYW4+IjsKKworICAgIHZhciBob3N0QSA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJob3N0QSIpOworICAgIHZhciBzaGFkb3dBID0gbmV3IFdlYktp
dFNoYWRvd1Jvb3QoaG9zdEEpOworICAgIHZhciBzdHlsZSA9ICI8c3R5bGU+QGhvc3QgeyBkaXYg
eyBjb2xvcjogcmVkOyB9IHNwYW4geyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT4iOworICAgIHNo
YWRvd0EuaW5uZXJIVE1MID0gc3R5bGUgKyAiPHNoYWRvdz48L3NoYWRvdz4iOworCisgICAgdmFy
IGhvc3RCID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3RCIik7CisgICAgdmFyIHNoYWRv
d0IgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0Qik7CisgICAgc2hhZG93Qi5pbm5lckhUTUwg
PSBzdHlsZSArICI8c2hhZG93Pjwvc2hhZG93PiI7CisKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZSho
b3N0QSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdEIpOworfQorCitmdW5jdGlvbiB0ZXN0
UHNldWRvSG9zdFdpdGhTY29wZWQoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAg
dmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBzaGFk
b3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0g
IjxkaXY+PHN0eWxlIHNjb3BlZD5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+
PHNoYWRvdz48L3NoYWRvdz48ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBkaXYgeyBjb2xvcjog
Ymx1ZTsgfSB9PC9zdHlsZT48L2Rpdj48L2Rpdj4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhv
c3QpOworfQorCitmdW5jdGlvbiB0ZXN0UHNldWRvSG9zdFdpdGhGYWxsYmFja1NoYWRvdygpCit7
CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFk
b3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dS
b290KGhvc3QpOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsg
ZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICB5
b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PHNoYWRvdz48L3NoYWRvdz48L2Nv
bnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVz
dFR3b1NoYWRvd1Jvb3RzQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2
YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVz
dFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNo
YWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG9sZGVzdFNoYWRvdy5pbm5l
ckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29u
dGVudD48L2NvbnRlbnQ+IjsKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxl
PkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4i
OworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0VHdvU2hh
ZG93Um9vdHNDcmVhdGluZ0RpZmZlcmVudE9yZGVyQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0Zv
clRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7
CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAg
IHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHlv
dW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1
ZTsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVy
SFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250
ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5j
dGlvbiB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvd0NvbnRlbnQoKQorewor
ICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93
Um9vdChob3N0KTsKKyAgICB2YXIgb2xkZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdCho
b3N0KTsKKyAgICB2YXIgeW91bmdlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3Qp
OworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOwor
CisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAg
ICB5b3VuZ2VyU2hhZG93LmlubmVySFRNTCA9ICI8Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBv
bGRlclNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGdyZWVu
OyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJI
VE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRl
bnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0
aW9uIHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3RzV2l0aEluZXJ0U2hhZG93KCkKK3sKKyAgICBwcmVw
cm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Imhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9z
dCk7CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7Cisg
ICAgdmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2
YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKworICAgIHlv
dW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogeWVs
bG93OyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICB5b3VuZ2VyU2hhZG93Lmlu
bmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48
ZGl2PmluZXJ0PC9kaXY+IjsKKyAgICBvbGRlclNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBo
b3N0IHsgZGl2IHsgY29sb3I6IGdyZWVuOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsK
KyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9y
OiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVk
U3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3ROZXN0ZWRDYXNlKCkKK3sKKyAgICBwcmVw
cm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Imhvc3QiKTsKKyAgICB2YXIgb3V0ZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
KTsKKyAgICBvdXRlclNoYWRvdy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0IHsgZGl2IHsgY29s
b3I6IHJlZDsgfSB9PC9zdHlsZT48ZGl2IGlkPSJuZXN0ZWRIb3N0Ij5Jbm5lclNoYWRvdzwvZGl2
Pic7CisgICAgdmFyIG5lc3RlZCA9IG91dGVyU2hhZG93LmdldEVsZW1lbnRCeUlkKCJuZXN0ZWRI
b3N0Iik7CisgICAgdmFyIGlubmVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QobmVzdGVk
KTsKKyAgICBpbm5lclNoYWRvdy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0IHsgZGl2IHsgY29s
b3I6IGJsdWU7IH0gfTwvc3R5bGU+U2hvdyA8c2hhZG93Pjwvc2hhZG93PiBpbiBvdXRlci4nOwor
ICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKG5lc3Rl
ZCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpCit7CisgICAgcHJlcHJv
Y2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJo
b3N0Iik7CisgICAgaG9zdC5pbm5lckhUTUwgPSAiPHN0eWxlIHNjb3BlZD4jaG9zdCB7IGNvbG9y
OiB5ZWxsb3c7IH08L3N0eWxlPjxzcGFuPkhlbGxvPC9zcGFuPiI7CisgICAgdmFyIHNoYWRvdyA9
IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0
eWxlPkBob3N0IHsgI2hvc3QgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29u
dGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0
SG9zdFZzSW5saW5lU3R5bGUoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFy
IGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIGhvc3Quc3R5bGUu
Y29sb3IgPSAieWVsbG93IjsKKyAgICBob3N0LmlubmVySFRNTCA9ICI8c3Bhbj5IZWxsbzwvc3Bh
bj4iOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBz
aGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwv
c3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7
Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3RzKCkKK3sKKyAgICB0ZXN0U2ltcGxlQ29udGVudENhc2Uo
KTsKKyAgICB0ZXN0U2ltcGxlU2hhZG93Q2FzZSgpOworICAgIHRlc3RIb3N0V2l0aFNlbGVjdG9y
KCk7CisgICAgdGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVkKCk7CisgICAgdGVzdFBzZXVkb0hvc3RX
aXRoRmFsbGJhY2tTaGFkb3coKTsKKyAgICB0ZXN0VHdvU2hhZG93Um9vdHNDYXNlKCk7CisgICAg
dGVzdFR3b1NoYWRvd1Jvb3RzQ3JlYXRpbmdEaWZmZXJlbnRPcmRlckNhc2UoKTsKKyAgICB0ZXN0
TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvd0NvbnRlbnQoKTsKKyAgICB0ZXN0TXVs
dGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvdygpOworICAgIHRlc3ROZXN0ZWRDYXNlKCk7
CisgICAgdGVzdEhvc3RWc1Njb3BlZFN0eWxlKCk7CisgICAgdGVzdEhvc3RWc0lubGluZVN0eWxl
KCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKSI+Cisg
IDxkaXYgaWQ9InBhcmVudCI+CisgIDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169352</attachid>
            <date>2012-10-17 23:36:33 -0700</date>
            <delta_ts>2012-10-19 03:47:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88606-20121018153518.patch</filename>
            <type>text/plain</type>
            <size>46104</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNjk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjA5Njc0NDlmMTg3YTM1
YmViZGUwMWY1YzNkMTMyMjliOGJkNzczMy4uNTVlOWIxZDIwMWJlMjJlYjE0NmIxZjhiMzg5NWM0
MGRmNTYwZjMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyOSBAQAorMjAxMi0xMC0xMiAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01d
IE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIEBob3N0LUBydWxlcyBh
Y2NvcmRpbmcgdG8gdGhlIHNoYWRvdyBkb20gc3BlYzoKKyAgICAgICAgaHR0cDovL2R2Y3MudzMu
b3JnL2hnL3dlYmNvbXBvbmVudHMvcmF3LWZpbGUvdGlwL3NwZWMvc2hhZG93L2luZGV4Lmh0bWwj
aG9zdC1hdC1ydWxlCisgICAgICAgIFRoZSBkZXNpZ24gZG9jIGlzOgorICAgICAgICBodHRwczov
L2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFQMnlvcmNoRjhsY2kyc2Njci1tVlNSZjJkdHZq
S2VpdXlRV3pDQjJiRUE4L2VkaXQKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvYXRo
b3N0LWF0cnVsZXMuaHRtbAorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAg
QWRkZWQgcnVsZXMgZm9yIHBhcnNpbmcgQGhvc3QgQC1ydWxlcy4KKyAgICAgICAgKiBjc3MvQ1NT
UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbik6
CisgICAgICAgIEFkZGVkIGEgbmV3IHRva2VuICJAaG9zdCIuCisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKToKKyAgICAgICAgQWRkZWQgYSBuZXcgbWV0aG9kIHRv
IGNyZWF0ZSBhbiBAaG9zdCBALXJ1bGUsIHdoaWNoIGlzIGludm9rZWQgZnJvbQorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICBBZGRlZCBhIGRl
Y2xhcmF0aW9uIG9mIHRoZSBhYm92ZSBuZXcgbWV0aG9kOiBjcmVhdGVIb3N0UnVsZS4KKyAgICAg
ICAgKiBjc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmg6CisgICAgICAgIEFkZGVkIEhPU1RfUlVM
RSB0byBlbnVtIFR5cGUuCisgICAgICAgICogY3NzL1J1bGVTZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgTW9kaWZpZWQgbXVsdGlwbGUgYm9v
bCBhcmd1bWVudHMgaW50byBvbmUgdW5zaWduZWQgYXJndW1lbnQuIE5vdyBpdAorICAgICAgICB1
c2VzIGNvbWJpbmF0aW9ucyBvZiB2YWx1ZXMgZnJvbSBlbnVtIEFkZFJ1bGVTdGF0ZS4KKyAgICAg
ICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNl
dDo6YWRkUmVnaW9uUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSdWxlc0Zy
b21TaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRTdHlsZVJ1bGUpOgorICAg
ICAgICBVcGRhdGVkIGFjY29yZGluZyB0byB0aGUgUnVsZURhdGEncyBjaGFuZ2UuCisgICAgICAg
IE1vZGlmaWVkIHRvIEludm9rZSBpbmNyZWFzZVNwZWNpZmljaXR5IGlmIHRoZSBnaXZlbiBydWxl
IGlzIEBob3N0CisgICAgICAgIEAtcnVsZS4KKyAgICAgICAgKiBjc3MvUnVsZVNldC5oOgorICAg
ICAgICAoUnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmluY3JlYXNlU3Bl
Y2lmaWNpdHkpOgorICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgdG8gaW5jcmVhc2Ugc2VsZWN0
b3IncyBzcGVjaWZpY2l0eS4gVGhpcyBtZXRob2QgaXMKKyAgICAgICAgdXNlZCB0byBtYWtlIEBo
b3N0IEAtcnVsZXMnIHNwZWNpZmljaXR5IGxhcmdlciB0aGFuIG5vcm1hbCBhdXRob3IKKyAgICAg
ICAgcnVsZXMnIHNwZWNpZmljaXR5LgorICAgICAgICAoUnVsZVNldCk6CisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJ1bGVTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRkSG9zdFJ1bGUpOgorICAgICAgICBBIHdy
YXBwZXIgbWV0aG9kIHRvIGludm9rZSBTdHlsZVNjb3BlUmVzb2x2ZXI6OmFkZEhvc3RSdWxlLiBU
aGUgbWV0aG9kCisgICAgICAgIGlzIHVzZWQgdG8gbWFrZSBvbmx5IFN0eWxlUmVzb2x2ZXIga25v
dyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYWJvdXQKKyAgICAgICAgY2xhc3MgU3R5bGVTY29w
ZVJlc29sdmVyLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9y
U3R5bGVzaGVldHMpOgorICAgICAgICBVcGRhdGVkIGFjY29yZGluZyB0byB0aGUgUnVsZURhdGEn
cyBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQg
bWF0Y2hlZCBob3N0IHJ1bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhp
cyBtZXRob2QgaW52b2tlcworICAgICAgICBTdHlsZVNjb3BlUmVzb2x2ZXI6OnN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMgdG8gZmluZAorICAgICAgICBtYXRjaGVkIGhvc3Qg
cnVsZXMuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Om1hdGNoSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgbWF0Y2hl
ZCBob3N0IHJ1bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhpcyBtZXRo
b2QgaW52b2tlcyBTdHlsZVNjb3BlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzIHRvIGZpbmQKKyAg
ICAgICAgbWF0Y2hlZCBob3N0IHJ1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bWF0Y2hBdXRob3JSdWxlcyk6CisgICAgICAgIE1vZGlmaWVkIHRvIGludm9rZSBtYXRjaEhv
c3RSdWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0
eWxlKToKKyAgICAgICAgRGlzYWJsZSBzaWJsaW5nIHN0eWxlIGNhY2hlIGlmIHRoZSBnaXZlbiBl
bGVtZW50IGlzIGEgc2hhZG93IGhvc3QgYW5kCisgICAgICAgIGFueSBAaG9zdCBALXJ1bGVzIGFy
ZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjplbnN1cmVTY29wZVJlc29sdmVyKToK
KyAgICAgICAgSWYgbm8gc2NvcGVSZXNvbHZlciBpcyBjcmVhdGVkLCBjcmVhdGUgYW5kIHJldHVy
biB0aGUgaW5zdGFuY2UuCisgICAgICAgIElmIGNyZWF0ZWQsIGp1c3QgcmV0dXJuIHRoZSBpbnN0
YW5jZS4KKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6cmVwb3J0TWVtb3J5VXNhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJveSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVs
ZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVI
b3N0OjpTdHlsZVJ1bGVIb3N0KToKKyAgICAgICAgSW1wbGVtZW50ZWQgY2xhc3MgU3R5bGVSdWxl
SG9zdC4gVGhlIGNsYXNzIGlzIGFsbW9zdCB0aGUgc2FtZSBhcworICAgICAgICBTdHlsZVJ1bGVC
bG9jayBleGNlcHQgdHlwZS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9TdHls
ZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmlzSG9zdFJ1bGUpOgor
ICAgICAgICAoU3R5bGVSdWxlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVIb3N0
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y29weSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlQXRIb3N0UnVsZVNldEZv
cik6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUnVsZVNldCBmb3IgdGhl
IGdpdmVuIHNoYWRvdyByb290LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVNjb3BlUmVzb2x2ZXI6OmF0SG9zdFJ1bGVTZXRGb3IpOgorICAgICAgICBBIG5ldyBw
cml2YXRlIGlubGluZSBtZXRob2QgdG8gb2J0YWluIEBob3N0IEAtcnVsZXMgZGVjbGFyZWQgaW4K
KyAgICAgICAgdGhlIGdpdmVuIHNoYWRvdyByb290LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVT
Y29wZVJlc29sdmVyOjphZGRIb3N0UnVsZSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1ldGhvZCB0
byByZWdpc3RlciBAaG9zdCBALXJ1bGVzIHdpdGggc2hhZG93IHJvb3RzLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9z
dFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgd2hldGhlciBhbnkgQGhvc3Qg
QC1ydWxlcyBhcmUgYXBwbGllZCB0bworICAgICAgICB0aGUgZ2l2ZW4gaG9zdCBlbGVtZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6Cisg
ICAgICAgIEEgbmV3IG1ldGhvZCB0byBmaW5kIG1hdGNoZWQgcnVsZXMgZm9yIHRoZSBnaXZlbiBo
b3N0IGVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OnJlcG9y
dE1lbW9yeVVzYWdlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN0eWxlU2NvcGVSZXNvbHZlcik6CisgICAgICAgICog
Y3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGlsZFJ1bGVz
SGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMpOgorICAgICAgICAqIGRvbS9FbGVtZW50
U2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRTaGFkb3c6OkVsZW1lbnRTaGFk
b3cpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6YWRkU2hhZG93Um9vdCk6Cisg
ICAgICAgIFNpbmNlIGEgbmV3IHNoYWRvdyByb290IGlzIGFkZGVkLCBkaXNhYmxlIEBob3N0IEAt
cnVsZXMgY2FjaGUuCisgICAgICAgICogZG9tL0VsZW1lbnRTaGFkb3cuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnRTaGFkb3c6Omhhc01hdGNoZWRIb3N0UnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50U2hhZG93OjpoYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6Y2xlYXJIYXNNYXRjaGVkSG9zdFJ1bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudFNoYWRvdzo6c2V0SGFzTWF0Y2hlZEhvc3RSdWxlKToKKyAg
ICAgICAgQWRkZWQgZm91ciBtZXRob2RzIGZvciBAaG9zdCBALXJ1bGVzIGNhY2hlLiBUaGUgY2Fj
aGUgaGFzIGluZm9ybWF0aW9uCisgICAgICAgIGFib3V0IHdoZXRoZXIgYW55IEBob3N0IEAtcnVs
ZXMgbWF0Y2ggdGhlIEVsZW1lbnRTaGFkb3cncyBob3N0LgorICAgICAgICBUaGUgcmV0dXJuIHZh
bHVlIG9mIGhhc01hdGNoZWRIb3N0UnVsZSBpcyBhdmFpbGFibGUgb25seSBpZgorICAgICAgICBo
YXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUgcmV0dXJucyB0cnVlLgorICAgICAgICAoRWxlbWVu
dFNoYWRvdyk6CisgICAgICAgICogZG9tL1NoYWRvd1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhZG93Um9vdDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgRGlzYWJsZSBAaG9zdCBA
LXJ1bGVzIGNhY2hlLCBiZWNhdXNlIHN0eWxlIGVsZW1lbnRzIG1pZ2h0IGJlIGFkZGVkCisgICAg
ICAgIGludG8gdGhlIHNoYWRvdyBkb20gc3VidHJlZS4KKwogMjAxMi0xMC0xNyAgUGFuIERlbmcg
IDxwYW4uZGVuZ0BpbnRlbC5jb20+CiAKICAgICAgICAgW1VzZXIgVGltaW5nXSBpbXBsZW1lbnQg
bWFpbiBpbnRlcmZhY2UgaW4gb2YgVXNlciBUaW1pbmcsIGFjY29yZGluZyB0byBodHRwOi8vd3d3
LnczLm9yZy9UUi8yMDEyL0NSLXVzZXItdGltaW5nLTIwMTIwNzI2LwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbiBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NH
cmFtbWFyLnkuaW4KaW5kZXggNzMzYWU4ZWRhNjJlNjRmMDM3YmZkMDBiNWE4NDE3OGRmMjc2YmVl
ZC4uNGQxYmE1OGMxNDY0ZjczYTZkZGY5NDVkZGQ5YWE2MzY3NDY0OTc0NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhbW1hci55LmluCkBAIC05Miw2ICs5Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNz
c3l5ZXJyb3Iodm9pZCosIGNvbnN0IGNoYXIqKQogJXRva2VuIFBBR0VfU1lNCiAldG9rZW4gTUVE
SUFfU1lNCiAldG9rZW4gRk9OVF9GQUNFX1NZTQorJXRva2VuIEhPU1RfU1lNCiAldG9rZW4gQ0hB
UlNFVF9TWU0KICV0b2tlbiBOQU1FU1BBQ0VfU1lNCiAldG9rZW4gVkFSRlVOQ1RJT04KQEAgLTE3
OSw2ICsxODAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBjc3N5eWVycm9yKHZvaWQqLCBjb25zdCBj
aGFyKikKICV0eXBlIDxydWxlPiBwYWdlCiAldHlwZSA8cnVsZT4gbWFyZ2luX2JveAogJXR5cGUg
PHJ1bGU+IGZvbnRfZmFjZQorJXR5cGUgPHJ1bGU+IGhvc3QKICV0eXBlIDxydWxlPiBrZXlmcmFt
ZXMKICV0eXBlIDxydWxlPiBpbnZhbGlkX3J1bGUKICV0eXBlIDxydWxlPiBzYXZlX2Jsb2NrCkBA
IC0zNzksNiArMzgxLDcgQEAgdmFsaWRfcnVsZToKICAgfCBuYW1lc3BhY2UKICAgfCBpbXBvcnQK
ICAgfCByZWdpb24KKyAgfCBob3N0CiAgIDsKIAogcnVsZToKQEAgLTgwNyw2ICs4MTAsMjMgQEAg
Zm9udF9mYWNlOgogICAgIH0KIDsKIAorYmVmb3JlX2hvc3RfcnVsZToKKyAgICAvKiBlbXB0eSAq
LyB7CisgICAgICAgIHBhcnNlci0+bWFya1J1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNlRGF0
YTo6SE9TVF9SVUxFKTsKKyAgICB9CisgICAgOworCitob3N0OgorICAgIGJlZm9yZV9ob3N0X3J1
bGUgSE9TVF9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlIAorICAgICd7JyBhdF9y
dWxlX2JvZHlfc3RhcnQgbWF5YmVfc3BhY2UgYmxvY2tfcnVsZV9saXN0IHNhdmVfYmxvY2sgewor
ICAgICAgICAkJCA9IHBhcnNlci0+Y3JlYXRlSG9zdFJ1bGUoJDcpOworICAgIH0KKyAgICB8IGJl
Zm9yZV9ob3N0X3J1bGUgSE9TVF9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlICc7
JyB7CisgICAgICAgICQkID0gMDsKKyAgICAgICAgcGFyc2VyLT5wb3BSdWxlRGF0YSgpOworICAg
IH0KKyAgICA7CisgCiByZWdpb25fc2VsZWN0b3I6CiAgICAgc2VsZWN0b3JfbGlzdCB7CiAgICAg
ICAgIGlmICgkMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCBmMjBiNjEwMThjY2Fm
MDM4YzI5NTI2YmM1YjdlZDJlYTRlMTlhM2ZmLi45Nzg3NWYzM2Y3MzcxY2E1YzlmZDYyOWJlNDdk
YmRhYzZiNDBiZTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtOTE4NSw2ICs5MTg1
LDExIEBAIGlubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihpbnQgbGVuZ3RoLCBi
b29sIGhhc0VzY2FwZSkKICAgICAgICAgICAgIG1fdG9rZW4gPSBGT05UX0ZBQ0VfU1lNOwogICAg
ICAgICByZXR1cm47CiAKKyAgICBjYXNlICdoJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA1ICYm
IGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJvc3QiKSkKKyAgICAgICAgICAgIG1f
dG9rZW4gPSBIT1NUX1NZTTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSAnaSc6CiAgICAg
ICAgIGlmIChsZW5ndGggPT0gNyAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAi
bXBvcnQiKSkgewogICAgICAgICAgICAgbV9wYXJzaW5nTW9kZSA9IE1lZGlhUXVlcnlNb2RlOwpA
QCAtOTk3Nyw2ICs5OTgyLDIyIEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlRm9u
dEZhY2VSdWxlKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitTdHlsZVJ1bGVCYXNlKiBDU1NQ
YXJzZXI6OmNyZWF0ZUhvc3RSdWxlKFJ1bGVMaXN0KiBydWxlcykKK3sKKyAgICBtX2FsbG93SW1w
b3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CisgICAgUmVm
UHRyPFN0eWxlUnVsZUhvc3Q+IHJ1bGU7CisgICAgaWYgKHJ1bGVzKQorICAgICAgICBydWxlID0g
U3R5bGVSdWxlSG9zdDo6Y3JlYXRlKCpydWxlcyk7CisgICAgZWxzZSB7CisgICAgICAgIFJ1bGVM
aXN0IGVtcHR5UnVsZXM7CisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoZW1w
dHlSdWxlcyk7CisgICAgfQorICAgIFN0eWxlUnVsZUhvc3QqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7
CisgICAgbV9wYXJzZWRSdWxlcy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOworICAgIHByb2Nlc3NB
bmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiB2b2lkIENTU1BhcnNlcjo6YWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJl
Zml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSkKIHsKICAgICBpZiAoIW1fc3R5bGVTaGVldCB8
fCAhbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRl
eCA0NjljMTJkZmZlMTRlMTBhYmM0YmFmOWRhYzM2ZGQzNDZhOTQ3MDFkLi43YzI0MGY2YjZmNTU0
MjE4ZmEzMmY1MDBjMWVmM2NiMTZiZjVlMzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC0y
ODIsNiArMjgyLDcgQEAgcHVibGljOgogICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZVBhZ2VSdWxl
KFBhc3NPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxlY3Rvcik7CiAgICAgU3R5bGVS
dWxlQmFzZSogY3JlYXRlUmVnaW9uUnVsZShDU1NTZWxlY3RvclZlY3RvciogcmVnaW9uU2VsZWN0
b3IsIFJ1bGVMaXN0KiBydWxlcyk7CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlTWFyZ2luQXRS
dWxlKENTU1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlKTsKKyAgICBTdHlsZVJ1bGVCYXNlKiBjcmVh
dGVIb3N0UnVsZShSdWxlTGlzdCogcnVsZXMpOwogICAgIHZvaWQgc3RhcnREZWNsYXJhdGlvbnNG
b3JNYXJnaW5Cb3goKTsKICAgICB2b2lkIGVuZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKaW5kZXggNDY5YmRi
NjMwYzFhNWM1ZGJhOTkzZmQxYWQ1OWVkMDc0NDlhNTViZS4uMDc5ZWMzMzYyNDk1YzA3OTc5YjQ3
NWFmZGU3NzYwMjM4NGM5OTk2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1By
b3BlcnR5U291cmNlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNv
dXJjZURhdGEuaApAQCAtOTQsNyArOTQsOCBAQCBzdHJ1Y3QgQ1NTUnVsZVNvdXJjZURhdGEgOiBw
dWJsaWMgUmVmQ291bnRlZDxDU1NSdWxlU291cmNlRGF0YT4gewogICAgICAgICBGT05UX0ZBQ0Vf
UlVMRSwKICAgICAgICAgUEFHRV9SVUxFLAogICAgICAgICBLRVlGUkFNRVNfUlVMRSwKLSAgICAg
ICAgUkVHSU9OX1JVTEUKKyAgICAgICAgUkVHSU9OX1JVTEUsCisgICAgICAgIEhPU1RfUlVMRQog
ICAgIH07CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gY3JlYXRl
KFR5cGUgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAppbmRleCBlMmJlNTc3MWUwMjVmMTRjZjlh
ODVkZTdlNTFjZDljNWExMzA5MDU5Li43NzE2NjkyYmYwZTBlYWU5YzVhN2FmYzRiNmQ4NTE2ZTc2
MmU0Yjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwCkBAIC0xMDcsMTggKzEwNywxOCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IENT
U1NlbGVjdG9yKiBzZWxlY3RvcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUnVsZURhdGE6OlJ1
bGVEYXRhKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQg
cG9zaXRpb24sIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0
Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpCitSdWxlRGF0YTo6UnVsZURhdGEoU3R5
bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwg
QWRkUnVsZVN0YXRlIGFkZFJ1bGVTdGF0ZSkKICAgICA6IG1fcnVsZShydWxlKQogICAgICwgbV9z
ZWxlY3RvckluZGV4KHNlbGVjdG9ySW5kZXgpCiAgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQog
ICAgICwgbV9zcGVjaWZpY2l0eShzZWxlY3RvcigpLT5zcGVjaWZpY2l0eSgpKQotICAgICwgbV9o
YXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IgJiYgU2VsZWN0
b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3RvcigpKSkKKyAgICAsIG1f
aGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKChhZGRSdWxlU3RhdGUgJiBSdWxlQ2FuVXNlRmFzdENo
ZWNrU2VsZWN0b3IpICYmIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Io
c2VsZWN0b3IoKSkpCiAgICAgLCBtX2hhc011bHRpcGFydFNlbGVjdG9yKCEhc2VsZWN0b3IoKS0+
dGFnSGlzdG9yeSgpKQogICAgICwgbV9oYXNSaWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJh
c2VkT25SdWxlSGFzaChpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKHNlbGVj
dG9yKCkpKQogICAgICwgbV9jb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoV2ViQ29y
ZTo6Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQogICAgICwg
bV9saW5rTWF0Y2hUeXBlKFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01hdGNoVHlwZShz
ZWxlY3RvcigpKSkKLSAgICAsIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbihoYXNEb2N1bWVu
dFNlY3VyaXR5T3JpZ2luKQotICAgICwgbV9pc0luUmVnaW9uUnVsZShpblJlZ2lvblJ1bGUpCisg
ICAgLCBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oYWRkUnVsZVN0YXRlICYgUnVsZUhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4pCisgICAgLCBtX2lzSW5SZWdpb25SdWxlKGFkZFJ1bGVTdGF0
ZSAmIFJ1bGVJc0luUmVnaW9uUnVsZSkKIHsKICAgICBBU1NFUlQobV9wb3NpdGlvbiA9PSBwb3Np
dGlvbik7CiAgICAgQVNTRVJUKG1fc2VsZWN0b3JJbmRleCA9PSBzZWxlY3RvckluZGV4KTsKQEAg
LTIwNyw5ICsyMDcsMTQgQEAgdm9pZCBSdWxlU2V0OjphZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5n
SW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLCBjb25zdCBSdWxlRGEKICAgICBydWxlcy0+YXBw
ZW5kKHJ1bGVEYXRhKTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSogcnVs
ZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
LCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSkKK3ZvaWQg
UnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgs
IEFkZFJ1bGVTdGF0ZSBhZGRSdWxlU3RhdGUpCiB7Ci0gICAgUnVsZURhdGEgcnVsZURhdGEocnVs
ZSwgc2VsZWN0b3JJbmRleCwgbV9ydWxlQ291bnQrKywgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
biwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGluUmVnaW9uUnVsZSk7CisgICAgUnVsZURhdGEg
cnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgbV9ydWxlQ291bnQrKywgYWRkUnVsZVN0YXRl
KTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgYXRob3N0UnVsZVNwZWNpZmljaXR5ID0gMHgx
MDAwMDA7CisKKyAgICBpZiAoYWRkUnVsZVN0YXRlICYgUnVsZUlzSG9zdFJ1bGUpCisgICAgICAg
IHJ1bGVEYXRhLmluY3JlYXNlU3BlY2lmaWNpdHkoYXRob3N0UnVsZVNwZWNpZmljaXR5KTsKKwog
ICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21SdWxlRGF0YShtX2ZlYXR1cmVzLCBydWxlRGF0YSk7CiAK
ICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBydWxlRGF0YS5zZWxlY3RvcigpOwpAQCAtMjY0
LDEwICsyNjksMTIgQEAgdm9pZCBSdWxlU2V0OjphZGRSZWdpb25SdWxlKFN0eWxlUnVsZVJlZ2lv
biogcmVnaW9uUnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXQKIAogICAgIC8vIENvbGxlY3Qg
dGhlIHJlZ2lvbiBydWxlcyBpbnRvIGEgcnVsZSBzZXQKICAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVsZXMgPSByZWdpb25SdWxlLT5jaGlsZFJ1bGVzKCk7
CisgICAgQWRkUnVsZVN0YXRlIGFkZFJ1bGVTdGF0ZSA9IGhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4gPyBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA6IFJ1bGVIYXNOb1NwZWNpYWxTdGF0
ZTsKKyAgICBhZGRSdWxlU3RhdGUgPSBzdGF0aWNfY2FzdDxBZGRSdWxlU3RhdGU+KGFkZFJ1bGVT
dGF0ZSB8IFJ1bGVDYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciB8IFJ1bGVJc0luUmVnaW9uUnVsZSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgU3R5bGVSdWxlQmFzZSogcmVnaW9uU3R5bGluZ1J1bGUgPSBjaGlsZFJ1bGVzW2ld
LmdldCgpOwogICAgICAgICBpZiAocmVnaW9uU3R5bGluZ1J1bGUtPmlzU3R5bGVSdWxlKCkpCi0g
ICAgICAgICAgICByZWdpb25SdWxlU2V0LT5hZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVS
dWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCB0cnVl
LCB0cnVlKTsKKyAgICAgICAgICAgIHJlZ2lvblJ1bGVTZXQtPmFkZFN0eWxlUnVsZShzdGF0aWNf
Y2FzdDxTdHlsZVJ1bGUqPihyZWdpb25TdHlsaW5nUnVsZSksIGFkZFJ1bGVTdGF0ZSk7CiAgICAg
fQogICAgIC8vIFVwZGF0ZSB0aGUgImdsb2JhbCIgcnVsZSBjb3VudCBzbyB0aGF0IHByb3BlciBv
cmRlciBpcyBtYWludGFpbmVkCiAgICAgbV9ydWxlQ291bnQgPSByZWdpb25SdWxlU2V0LT5tX3J1
bGVDb3VudDsKQEAgLTI4Niw2ICsyOTMsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNo
ZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdQogICAg
ICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBtZWRp
dW0sIHJlc29sdmVyLCBzY29wZSk7CiAgICAgfQogICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiA9IHJlc29sdmVyICYmIHJlc29sdmVyLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT5jYW5SZXF1ZXN0KHNoZWV0LT5iYXNlVVJMKCkpOworICAgIEFkZFJ1bGVTdGF0ZSBhZGRS
dWxlU3RhdGUgPSBzdGF0aWNfY2FzdDxBZGRSdWxlU3RhdGU+KChoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luID8gUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gOiAwKSB8ICghc2NvcGUgPyBS
dWxlQ2FuVXNlRmFzdENoZWNrU2VsZWN0b3IgOiAwKSk7CiAKICAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPFN0eWxlUnVsZUJhc2U+ID4mIHJ1bGVzID0gc2hlZXQtPmNoaWxkUnVsZXMoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZXMuc2l6ZSgpOyArK2kpIHsKQEAgLTI5Myw3ICsz
MDEsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50
cyogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdQogCiAgICAgICAgIEFTU0VSVCghcnVsZS0+
aXNJbXBvcnRSdWxlKCkpOwogICAgICAgICBpZiAocnVsZS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAg
ICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihydWxlKSwgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbiwgIXNjb3BlKTsKKyAgICAgICAgICAgIGFkZFN0eWxlUnVsZShz
dGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihydWxlKSwgYWRkUnVsZVN0YXRlKTsKICAgICAgICAgZWxz
ZSBpZiAocnVsZS0+aXNQYWdlUnVsZSgpKQogICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3RhdGlj
X2Nhc3Q8U3R5bGVSdWxlUGFnZSo+KHJ1bGUpKTsKICAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNN
ZWRpYVJ1bGUoKSkgewpAQCAtMzA1LDcgKzMxMyw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNG
cm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1
CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IGNoaWxkUnVsZXMuc2l6
ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgU3R5bGVSdWxlQmFzZSogY2hpbGRSdWxl
ID0gY2hpbGRSdWxlc1tqXS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkUnVs
ZS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShz
dGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihjaGlsZFJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luLCAhc2NvcGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRp
Y19jYXN0PFN0eWxlUnVsZSo+KGNoaWxkUnVsZSksIGFkZFJ1bGVTdGF0ZSk7CiAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGNoaWxkUnVsZS0+aXNQYWdlUnVsZSgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+KGNoaWxk
UnVsZSkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzRm9udEZh
Y2VSdWxlKCkgJiYgcmVzb2x2ZXIpIHsKQEAgLTM0NywxNSArMzU1LDE5IEBAIHZvaWQgUnVsZVNl
dDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVk
aWFRdWVyeUV2YWx1CiAgICAgICAgICAgICBhZGRSZWdpb25SdWxlKHN0YXRpY19jYXN0PFN0eWxl
UnVsZVJlZ2lvbio+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsKICAgICAgICAg
fQogI2VuZGlmCisjaWYgRU5BQkxFKFNIQURPV19ET00pCisgICAgICAgIGVsc2UgaWYgKHJ1bGUt
PmlzSG9zdFJ1bGUoKSkKKyAgICAgICAgICAgIHJlc29sdmVyLT5hZGRIb3N0UnVsZShzdGF0aWNf
Y2FzdDxTdHlsZVJ1bGVIb3N0Kj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHNj
b3BlKTsKKyNlbmRpZgogICAgIH0KICAgICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQog
ICAgICAgICBzaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShT
dHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5V
c2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSkKK3ZvaWQgUnVsZVNldDo6
YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSogcnVsZSwgQWRkUnVsZVN0YXRlIGFkZFJ1bGVTdGF0ZSkK
IHsKICAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBu
b3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHJ1bGUtPnNlbGVjdG9yTGlzdCgpLmluZGV4T2ZOZXh0
U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkKLSAgICAgICAgYWRkUnVsZShydWxlLCBzZWxl
Y3RvckluZGV4LCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxl
Y3RvciwgaXNJblJlZ2lvblJ1bGUpOworICAgICAgICBhZGRSdWxlKHJ1bGUsIHNlbGVjdG9ySW5k
ZXgsIGFkZFJ1bGVTdGF0ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0
b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAmIG1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9SdWxlU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oCmluZGV4
IDY1NzcyMzhiYTkyMzZhOWQ2ODEwMzkxOTVhMGRkNDNhMmU4MDgyYTAuLjc5MzQyMDEwNDg1MWI5
YWQ5M2YxMjkzZjhmOGZhOTdkNGJhNjBmNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9SdWxlU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuaApAQCAtMzEsNiAr
MzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitlbnVtIEFkZFJ1bGVTdGF0ZSB7Cisg
ICAgUnVsZUhhc05vU3BlY2lhbFN0YXRlICAgICAgICAgPSAwLAorICAgIFJ1bGVIYXNEb2N1bWVu
dFNlY3VyaXR5T3JpZ2luID0gMSwKKyAgICBSdWxlQ2FuVXNlRmFzdENoZWNrU2VsZWN0b3IgICA9
IDEgPDwgMSwKKyAgICBSdWxlSXNJblJlZ2lvblJ1bGUgICAgICAgICAgICA9IDEgPDwgMiwKKyAg
ICBSdWxlSXNIb3N0UnVsZSAgICAgICAgICAgICAgICA9IDEgPDwgMywKK307CisKIGNsYXNzIENT
U1NlbGVjdG9yOwogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0
b3I7CkBAIC00MCw3ICs0OCw3IEBAIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKIAogY2xhc3Mg
UnVsZURhdGEgewogcHVibGljOgotICAgIFJ1bGVEYXRhKFN0eWxlUnVsZSosIHVuc2lnbmVkIHNl
bGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKTsK
KyAgICBSdWxlRGF0YShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25l
ZCBwb3NpdGlvbiwgQWRkUnVsZVN0YXRlKTsKIAogICAgIHVuc2lnbmVkIHBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogICAgIFN0eWxlUnVsZSogcnVsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcnVsZTsgfQpAQCAtNTUsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQg
bGlua01hdGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua01hdGNoVHlwZTsgfQogICAgIGJv
b2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbjsgfQogICAgIGJvb2wgaXNJblJlZ2lvblJ1bGUoKSBjb25zdCB7IHJl
dHVybiBtX2lzSW5SZWdpb25SdWxlOyB9CisgICAgdm9pZCBpbmNyZWFzZVNwZWNpZmljaXR5KHVu
c2lnbmVkIHZhbHVlKSB7IG1fc3BlY2lmaWNpdHkgKz0gdmFsdWU7IH0KIAogICAgIC8vIFRyeSB0
byBiYWxhbmNlIGJldHdlZW4gbWVtb3J5IHVzYWdlICh0aGVyZSBjYW4gYmUgbG90cyBvZiBSdWxl
RGF0YSBvYmplY3RzKSBhbmQgZ29vZCBmaWx0ZXJpbmcgcGVyZm9ybWFuY2UuCiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1heGltdW1JZGVudGlmaWVyQ291bnQgPSA0OwpAQCAtOTgsOCArMTA3
LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29u
dGVudHMqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGVSZXNvbHZlciogPSAwLCBj
b25zdCBDb250YWluZXJOb2RlKiA9IDApOwogCi0gICAgdm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVS
dWxlKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVj
a1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOwotICAgIHZvaWQgYWRkUnVs
ZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBib29sIGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lv
blJ1bGUgPSBmYWxzZSk7CisgICAgdm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiwgQWRkUnVs
ZVN0YXRlKTsKKyAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJ
bmRleCwgQWRkUnVsZVN0YXRlKTsKICAgICB2b2lkIGFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2Uq
KTsKICAgICB2b2lkIGFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxl
TWFwJiwgY29uc3QgUnVsZURhdGEmKTsKICAgICB2b2lkIGFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxl
UmVnaW9uKiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcAppbmRleCAwNzJhMGY3NzkwZjQyNDYzMzE1ZjQ1MTdjNTAwMmNjOTA2
OGY2YTdkLi5hM2I0ZDI1OGFmOGEwNzQyYzNjYWQwY2ZiYjEzNGMzNDc2OTg5NjA4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0xMTYsNyArMTE2LDYgQEAKICNpbmNsdWRl
ICJTdHlsZVBlbmRpbmdJbWFnZS5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUg
IlN0eWxlUnVsZUltcG9ydC5oIgotI2luY2x1ZGUgIlN0eWxlU2NvcGVSZXNvbHZlci5oIgogI2lu
Y2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0Lmgi
CiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtMzc3LDcgKzM3Niw3IEBAIHN0YXRpYyBQYXNzT3duUHRy
PFJ1bGVTZXQ+IG1ha2VSdWxlU2V0KGNvbnN0IFZlY3RvcjxSdWxlRmVhdHVyZT4mIHJ1bGVzKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBPd25QdHI8UnVsZVNldD4gcnVsZVNldCA9IFJ1
bGVTZXQ6OmNyZWF0ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQot
ICAgICAgICBydWxlU2V0LT5hZGRSdWxlKHJ1bGVzW2ldLnJ1bGUsIHJ1bGVzW2ldLnNlbGVjdG9y
SW5kZXgsIHJ1bGVzW2ldLmhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGZhbHNlKTsKKyAgICAg
ICAgcnVsZVNldC0+YWRkUnVsZShydWxlc1tpXS5ydWxlLCBydWxlc1tpXS5zZWxlY3RvckluZGV4
LCBydWxlc1tpXS5oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID8gUnVsZUhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4gOiBSdWxlSGFzTm9TcGVjaWFsU3RhdGUpOwogICAgIHJ1bGVTZXQtPnNocmlu
a1RvRml0KCk7CiAgICAgcmV0dXJuIHJ1bGVTZXQucmVsZWFzZSgpOwogfQpAQCAtNDIwLDkgKzQx
OSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVzaGVldHModW5zaWdu
ZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCA9IGNzc1NoZWV0LT5jb250ZW50cygpOwog
ICAgICAgICBpZiAoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBTdHlsZVNjb3BlUmVzb2x2
ZXI6OnNjb3BlRm9yKGNzc1NoZWV0KSkgewotICAgICAgICAgICAgaWYgKCFtX3Njb3BlUmVzb2x2
ZXIpCi0gICAgICAgICAgICAgICAgbV9zY29wZVJlc29sdmVyID0gYWRvcHRQdHIobmV3IFN0eWxl
U2NvcGVSZXNvbHZlcigpKTsKLSAgICAgICAgICAgIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlUnVs
ZVNldEZvcihzY29wZSktPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMs
IHNjb3BlKTsKKyAgICAgICAgICAgIGVuc3VyZVNjb3BlUmVzb2x2ZXIoKS0+ZW5zdXJlUnVsZVNl
dEZvcihzY29wZSktPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNj
b3BlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTcxOCw3ICs3MTUs
MTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCkKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JS
dWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogI2lm
IEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFET1dfRE9NKQotICAgIGlmICghbV9z
Y29wZVJlc29sdmVyIHx8ICFtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpKQorICAg
IGlmICghbV9zY29wZVJlc29sdmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXRjaEhvc3RS
dWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKworICAgIGlmICghbV9zY29wZVJlc29s
dmVyLT5oYXNTY29wZWRTdHlsZXMoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWF0Y2gg
c2NvcGVkIGF1dGhvciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFj
ayAocmVidWlsZCBpdCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KQEAgLTc1MCw2ICs3NTIsMzUg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0
JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHQKICNlbmRpZgogfQogCitpbmxpbmUgYm9vbCBTdHls
ZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkKK3sKKyNp
ZiBFTkFCTEUoU0hBRE9XX0RPTSkKKyAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2Nv
cGVSZXNvbHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhtX2VsZW1l
bnQpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKQoreworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAgIEFTU0VSVChtX3Njb3Bl
UmVzb2x2ZXIpOworCisgICAgVmVjdG9yPFJ1bGVTZXQqPiBtYXRjaGVkUnVsZXM7CisgICAgbV9z
Y29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhtX2VsZW1lbnQsIG1hdGNoZWRSdWxlcyk7Cisg
ICAgaWYgKG1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIE1h
dGNoT3B0aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBvcHRpb25zLnNjb3Bl
ID0gbV9lbGVtZW50OworICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNoZWRSdWxlcy5zaXplKCk7
IGkgPiAwOyAtLWkpCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoZWRSdWxlcy5h
dChpLTEpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0
QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOwor
ICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlRW1wdHlSdWxlcyk7CisjZW5kaWYKK30KKwogdm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKQEAgLTEz
MzksNiArMTM3MCw5IEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRT
dHlsZSgpCiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5LgogICAg
IGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3VuY29tbW9uQXR0cmli
dXRlUnVsZVNldC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOworICAgIC8vIENhbid0IHNoYXJl
IGlmIEBob3N0IEAtcnVsZXMgYXBwbHkuCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1h
dGNoZXNIb3N0UnVsZXMoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gVHJhY2tpbmcgY2hp
bGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZvciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdl
dCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBhYm92ZS4KICAgICBpZiAocGFyZW50U3R5
bGVQcmV2ZW50c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybiAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggOGM5NTg3ODc3MTYxYjk2NjdmNmRjZGYwODJl
ZGYyZDhiYTQ1MDE0Yi4uMjhjNzUxMjQ0YzdkOTI0OTczZTkxZWJiYzY3MTA2Y2EzOWJkNjljYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiUnVsZUZlYXR1cmUuaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRl
ICJTdHlsZUluaGVyaXRlZERhdGEuaCIKKyNpbmNsdWRlICJTdHlsZVNjb3BlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtODAsNiArODEsNyBAQCBjbGFzcyBTdHlsZUtleWZyYW1l
OwogY2xhc3MgU3R5bGVQZW5kaW5nSW1hZ2U7CiBjbGFzcyBTdHlsZVByb3BlcnR5U2V0OwogY2xh
c3MgU3R5bGVSdWxlOworY2xhc3MgU3R5bGVSdWxlSG9zdDsKIGNsYXNzIFN0eWxlUnVsZUtleWZy
YW1lczsKIGNsYXNzIFN0eWxlUnVsZVBhZ2U7CiBjbGFzcyBTdHlsZVJ1bGVSZWdpb247CkBAIC0x
MzcsNiArMTM5LDcgQEAgcHVibGljOgogICAgIHZvaWQgcG9wUGFyZW50RWxlbWVudChFbGVtZW50
Kik7CiAgICAgdm9pZCBwdXNoUGFyZW50U2hhZG93Um9vdChjb25zdCBTaGFkb3dSb290Kik7CiAg
ICAgdm9pZCBwb3BQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKKyAgICB2b2lk
IGFkZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3QqIHJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIHsgZW5zdXJlU2NvcGVSZXNvbHZl
cigpLT5hZGRIb3N0UnVsZShydWxlLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBzY29wZSk7
IH0KIAogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50
KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgU3R5bGVTaGFyaW5nQmVoYXZpb3IgPSBB
bGxvd1N0eWxlU2hhcmluZywKICAgICAgICAgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFs
bFJ1bGVzLCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKQEAgLTE2OSwxMSAr
MTcyLDE5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBkZXRlcm1pbmVTdHlsZXNoZWV0U2Vs
ZWN0b3JTY29wZXMoU3R5bGVTaGVldENvbnRlbnRzKiwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBs
Kj4mIGlkU2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpOwog
CiBwcml2YXRlOgorICAgIFN0eWxlU2NvcGVSZXNvbHZlciogZW5zdXJlU2NvcGVSZXNvbHZlcigp
CisgICAgeworICAgICAgICBpZiAoIW1fc2NvcGVSZXNvbHZlcikKKyAgICAgICAgICAgIG1fc2Nv
cGVSZXNvbHZlciA9IGFkb3B0UHRyKG5ldyBTdHlsZVNjb3BlUmVzb2x2ZXIoKSk7CisgICAgICAg
IHJldHVybiBtX3Njb3BlUmVzb2x2ZXIuZ2V0KCk7CisgICAgfQorCiAgICAgdm9pZCBpbml0Rm9y
U3R5bGVSZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1
ZG9JZCA9IE5PUFNFVURPKTsKICAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2
b2lkIGNvbGxlY3RGZWF0dXJlcygpOwogICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFyZWRTdHls
ZSgpOwogICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoUnVsZVNl
dCopOworICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpOwog
ICAgIE5vZGUqIGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlz
aXRlZE5vZGVDb3VudCkgY29uc3Q7CiAgICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JT
dHlsZVNoYXJpbmcoTm9kZSosIHVuc2lnbmVkJiBjb3VudCkgY29uc3Q7CiAgICAgYm9vbCBjYW5T
aGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCopIGNvbnN0OwpAQCAtMzI2LDYgKzMz
Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0Jiwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFVzZXJSdWxlcyhNYXRjaFJl
c3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hTY29wZWRBdXRo
b3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQg
bWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAg
ICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4
LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwogICAgIHZvaWQgY29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmly
c3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCmluZGV4IDczYjBhZjI2Y2U0MmFhNDU5NGQ5Yjc2MTc5NmIx
OWQ2YTZiYjY2NWMuLjY3ZjdiYzcyODI3MDJkNWFlYzhhMzQwZGU2NmE1ZWVhMzJkMGZkMTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCkBAIC03OSw2ICs3OSw5IEBAIHZvaWQgU3R5bGVSdWxl
QmFzZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5m
bykgY29uc3QKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3Qg
U3R5bGVSdWxlS2V5ZnJhbWVzKj4odGhpcyktPnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZSht
ZW1vcnlPYmplY3RJbmZvKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSG9zdDoKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlQmxvY2sqPih0aGlzKS0+cmVwb3J0RGVzY2Vu
ZGFudE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOworICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBVbmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAt
MTE3LDYgKzEyMCw5IEBAIHZvaWQgU3R5bGVSdWxlQmFzZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBL
ZXlmcmFtZXM6CiAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMq
Pih0aGlzKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSG9zdDoKKyAgICAgICAgZGVsZXRl
IHN0YXRpY19jYXN0PFN0eWxlUnVsZUhvc3QqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgVW5rbm93bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlmcmFtZToKQEAg
LTE1MCw2ICsxNTYsOCBAQCBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IFN0eWxlUnVsZUJhc2U6
OmNvcHkoKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKICAgICBjYXNlIEtleWZyYW1lczoKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMp
LT5jb3B5KCk7CisgICAgY2FzZSBIb3N0OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgU3R5bGVSdWxlSG9zdCo+KHRoaXMpLT5jb3B5KCk7CiAgICAgY2FzZSBVbmtub3duOgogICAg
IGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMTkxLDYgKzE5OSw3IEBAIFBh
c3NSZWZQdHI8Q1NTUnVsZT4gU3R5bGVSdWxlQmFzZTo6Y3JlYXRlQ1NTT01XcmFwcGVyKENTU1N0
eWxlU2hlZXQqIHBhcmVudFNoZWV0CiAgICAgY2FzZSBLZXlmcmFtZXM6CiAgICAgICAgIHJ1bGUg
PSBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5
ZnJhbWVzKj4oc2VsZiksIHBhcmVudFNoZWV0KTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBI
b3N0OgogICAgIGNhc2UgVW5rbm93bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlm
cmFtZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAppbmRleCBlMTVmMzJlNDAyYWFmMjA4ZDNjYzBmY2Nk
MzU4NDc3YjIzMDM1NjM0Li5iN2ZmNTIzMjZjYmYyMTg0NzIxYTEzNDFjODI5YTM4NGZjNGEzOWI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICAg
ICAgUGFnZSwKICAgICAgICAgS2V5ZnJhbWVzLAogICAgICAgICBLZXlmcmFtZSwgLy8gTm90IHVz
ZWQuIFRoZXNlIGFyZSBpbnRlcm5hbGx5IG5vbi1ydWxlIFN0eWxlS2V5ZnJhbWUgb2JqZWN0cy4K
KyAgICAgICAgSG9zdCwKICAgICAgICAgUmVnaW9uID0gMTYKICAgICB9OwogICAgIFR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KQEAgLTU4LDYg
KzU5LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTdHlsZVJ1bGUoKSBjb25zdCB7IHJldHVybiB0
eXBlKCkgPT0gU3R5bGU7IH0KICAgICBib29sIGlzUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJu
IHR5cGUoKSA9PSBSZWdpb247IH0KICAgICBib29sIGlzSW1wb3J0UnVsZSgpIGNvbnN0IHsgcmV0
dXJuIHR5cGUoKSA9PSBJbXBvcnQ7IH0KKyAgICBib29sIGlzSG9zdFJ1bGUoKSBjb25zdCB7IHJl
dHVybiB0eXBlKCkgPT0gSG9zdDsgfQogCiAgICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBj
b3B5KCkgY29uc3Q7CiAKQEAgLTIyMyw2ICsyMjUsMjAgQEAgcHJpdmF0ZToKICAgICBDU1NTZWxl
Y3Rvckxpc3QgbV9zZWxlY3Rvckxpc3Q7CiB9OwogCitjbGFzcyBTdHlsZVJ1bGVIb3N0IDogcHVi
bGljIFN0eWxlUnVsZUJsb2NrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHls
ZVJ1bGVIb3N0PiBjcmVhdGUoVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBhZG9wdFJ1
bGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVJ1bGVIb3N0KGFk
b3B0UnVsZXMpKTsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUhvc3Q+IGNvcHko
KSBjb25zdCB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVSdWxlSG9zdCgqdGhpcykpOyB9CisK
K3ByaXZhdGU6CisgICAgU3R5bGVSdWxlSG9zdChWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+
ID4mIGFkb3B0UnVsZXMpIDogU3R5bGVSdWxlQmxvY2soSG9zdCwgYWRvcHRSdWxlcykgeyB9Cisg
ICAgU3R5bGVSdWxlSG9zdChjb25zdCBTdHlsZVJ1bGVIb3N0JiBvKSA6IFN0eWxlUnVsZUJsb2Nr
KG8pIHsgfQorfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gU3R5bGVS
dWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKaW5kZXggODc0
MDJiYWE1OTgxMDI0ZWU1ZDY0NDY1YWQxNzhkY2NiNzlkZWE4YS4uMzQ4OTNiYmFkOGVlYjdmYzMz
YThlY2VhMjZkYWY0M2IzNDczYjM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlU2NvcGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVS
ZXNvbHZlci5jcHAKQEAgLTI5LDggKzI5LDEwIEBACiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVE
KSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKIAorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgogI2lu
Y2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDb250ZXh0RmVhdHVyZXMuaCIKKyNp
bmNsdWRlICJFbGVtZW50U2hhZG93LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIlJ1bGVGZWF0dXJlLmgiCkBAIC0xNTQs
MTEgKzE1Niw5MiBAQCB2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8o
UnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVzKQogICAgICAgICBmZWF0dXJlcy5hZGQoaXQtPnZhbHVl
LT5mZWF0dXJlcygpKTsKIH0KIAoraW5saW5lIFJ1bGVTZXQqIFN0eWxlU2NvcGVSZXNvbHZlcjo6
ZW5zdXJlQXRIb3N0UnVsZVNldEZvcihjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQorewor
ICAgIFNjb3BlZFJ1bGVTZXRNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2F0SG9zdFJ1bGVz
LmFkZChzaGFkb3dSb290LCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkp
CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBSdWxlU2V0OjpjcmVhdGUoKTsK
KyAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30KKworaW5saW5l
IFJ1bGVTZXQqIFN0eWxlU2NvcGVSZXNvbHZlcjo6YXRIb3N0UnVsZVNldEZvcihjb25zdCBTaGFk
b3dSb290KiBzaGFkb3dSb290KSBjb25zdAoreworICAgIFNjb3BlZFJ1bGVTZXRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9hdEhvc3RSdWxlcy5maW5kKHNoYWRvd1Jvb3QpOworICAgIHJldHVy
biBpdCAhPSBtX2F0SG9zdFJ1bGVzLmVuZCgpID8gaXQtPnZhbHVlLmdldCgpIDogMDsKK30KKwor
dm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmFkZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3QqIGhvc3RS
dWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNvbnN0IENvbnRhaW5lck5vZGUq
IHNjb3BlKQoreworICAgIGlmICghc2NvcGUgfHwgIXNjb3BlLT5pc0luU2hhZG93VHJlZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2NvcGUtPnNo
YWRvd1Jvb3QoKTsKKyAgICBpZiAoIXNoYWRvd1Jvb3QgfHwgIXNoYWRvd1Jvb3QtPmhvc3QoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHNoYWRvd1Jvb3QtPm93bmVyKCktPmNsZWFySGFzTWF0Y2hl
ZEhvc3RSdWxlKCk7CisKKyAgICBSdWxlU2V0KiBydWxlID0gZW5zdXJlQXRIb3N0UnVsZVNldEZv
cihzaGFkb3dSb290KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4g
PiYgY2hpbGRSdWxlcyA9IGhvc3RSdWxlLT5jaGlsZFJ1bGVzKCk7CisgICAgQWRkUnVsZVN0YXRl
IGFkZFJ1bGVTdGF0ZSA9IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiA6IFJ1bGVIYXNOb1NwZWNpYWxTdGF0ZTsKKyAgICBhZGRSdWxlU3Rh
dGUgPSBzdGF0aWNfY2FzdDxBZGRSdWxlU3RhdGU+KGFkZFJ1bGVTdGF0ZSB8IFJ1bGVDYW5Vc2VG
YXN0Q2hlY2tTZWxlY3RvciB8IFJ1bGVJc0hvc3RSdWxlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBTdHlsZVJ1bGVCYXNl
KiBob3N0U3R5bGluZ1J1bGUgPSBjaGlsZFJ1bGVzW2ldLmdldCgpOworICAgICAgICBpZiAoaG9z
dFN0eWxpbmdSdWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgcnVsZS0+YWRkU3R5bGVS
dWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KGhvc3RTdHlsaW5nUnVsZSksIGFkZFJ1bGVTdGF0
ZSk7CisgICAgfQorfQorCitib29sIFN0eWxlU2NvcGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2Fu
ZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlm
IChtX2F0SG9zdFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
RWxlbWVudFNoYWRvdyogc2hhZG93ID0gZWxlbWVudC0+c2hhZG93KCk7CisgICAgaWYgKCFzaGFk
b3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2hhZG93LT5oYXNNYXRjaGVkSG9z
dFJ1bGVBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIHNoYWRvdy0+aGFzTWF0Y2hlZEhvc3RS
dWxlKCk7CisKKyAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFkb3ctPnlvdW5n
ZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dSb290OyBzaGFkb3dSb290ID0gc2hhZG93Um9vdC0+b2xk
ZXJTaGFkb3dSb290KCkpIHsKKyAgICAgICAgaWYgKGF0SG9zdFJ1bGVTZXRGb3Ioc2hhZG93Um9v
dCkpIHsKKyAgICAgICAgICAgIHNoYWRvdy0+c2V0SGFzTWF0Y2hlZEhvc3RSdWxlKHRydWUpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzaGFkb3dS
b290LT5oYXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIHNoYWRvdy0+c2V0SGFzTWF0Y2hlZEhvc3RSdWxlKGZhbHNlKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhjb25z
dCBFbGVtZW50KiBlbGVtZW50LCBWZWN0b3I8UnVsZVNldCo+JiBtYXRjaGVkUnVsZXMpCit7Cisg
ICAgaWYgKG1fYXRIb3N0UnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBF
bGVtZW50U2hhZG93KiBzaGFkb3cgPSBlbGVtZW50LT5zaGFkb3coKTsKKyAgICBpZiAoIXNoYWRv
dykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgQWxyZWFkeSBrbm93IHdoZXRoZXIgdGhl
cmUgZXhpc3QgYW55IG1hdGNoZWQgaG9zdCBydWxlcyBvciBub3QsIHNlZS4KKyAgICBpZiAoc2hh
ZG93LT5oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUoKSAmJiAhc2hhZG93LT5oYXNNYXRjaGVk
SG9zdFJ1bGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChTaGFkb3dSb290KiBzaGFk
b3dSb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hhZG93Um9vdDsgc2hhZG93
Um9vdCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7IAorICAgICAgICBpZiAoUnVs
ZVNldCogcnVsZVNldCA9IGF0SG9zdFJ1bGVTZXRGb3Ioc2hhZG93Um9vdCkpCisgICAgICAgICAg
ICBtYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGVTZXQpOworICAgICAgICBpZiAoIXNoYWRvd1Jvb3Qt
Pmhhc1NoYWRvd0luc2VydGlvblBvaW50KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKIHZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmpl
Y3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNsYXNzSW5mbyBp
bmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKICAg
ICBpbmZvLmFkZE1lbWJlcihtX2F1dGhvclN0eWxlcyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9z
dGFjayk7CisgICAgaW5mby5hZGRNZW1iZXIobV9hdEhvc3RSdWxlcyk7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaAppbmRleCA1YTMyZGZlNzlmODM1YmI3Y2Y5
NWI4YzdkZDliM2JiNzA0MWZiN2ZiLi44NWMxZDAxMDA2YWQ2Y2M2ZjQ4OTAxMTUwNTA5Y2MzNDhi
MmQ2YjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCkBAIC0zNyw4
ICszNywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbnRhaW5lck5vZGU7CiBj
bGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRWxlbWVudDsKIGNsYXNzIFJ1bGVTZXQ7CiBjbGFz
cyBSdWxlRmVhdHVyZVNldDsKK2NsYXNzIFNoYWRvd1Jvb3Q7CitjbGFzcyBTdHlsZVJ1bGVIb3N0
OwogCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxFKFNIQURPV19ET00pCiAKQEAg
LTcyLDEyICs3NSwxOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYXRjaGVzU3R5bGVCb3VuZHMoY29u
c3QgU3RhY2tGcmFtZSYgZnJhbWUpIGNvbnN0IHsgcmV0dXJuIGZyYW1lLm1fYXV0aG9yU3R5bGVC
b3VuZHNJbmRleCA9PSBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXg7IH0KICAgICB2b2lkIGNvbGxl
Y3RGZWF0dXJlc1RvKFJ1bGVGZWF0dXJlU2V0Jik7CiAKKyAgICB2b2lkIGFkZEhvc3RSdWxlKFN0
eWxlUnVsZUhvc3QqLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlKTsKKyAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNI
b3N0UnVsZXMoY29uc3QgRWxlbWVudCopOworICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoY29uc3Qg
RWxlbWVudCosIFZlY3RvcjxSdWxlU2V0Kj4mIG1hdGNoZWRSdWxlcyk7CisKICAgICB2b2lkIHJl
cG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICBSdWxlU2V0KiBydWxlU2V0Rm9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKSBjb25zdDsK
ICAgICB2b2lkIHNldHVwU3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSopOwogICAgIGJvb2wgc3Rh
Y2tJc0NvbnNpc3RlbnQoY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50KSBjb25zdCB7IHJldHVy
biBwYXJlbnQgJiYgcGFyZW50ID09IG1fc3RhY2tQYXJlbnQ7IH0KKyAgICBSdWxlU2V0KiBlbnN1
cmVBdEhvc3RSdWxlU2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqKTsKKyAgICBSdWxlU2V0KiBhdEhv
c3RSdWxlU2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqKSBjb25zdDsKIAogICAgIFNjb3BlZFJ1bGVT
ZXRNYXAgbV9hdXRob3JTdHlsZXM7CiAKQEAgLTg4LDYgKzk3LDggQEAgcHJpdmF0ZToKICAgICAv
LyBUaGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgbV9zY29waW5nRWxlbWVudFN0YWNrIGlz
IGNvbnNpc3RlbnQsIHNlcGFyYXRlbHkgZnJvbSBTZWxlY3RvckNoZWNrZXI6Om1fcGFyZW50U3Rh
Y2suCiAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zdGFja1BhcmVudDsKICAgICBpbnQgbV9z
dGFja1BhcmVudEJvdW5kc0luZGV4OworCisgICAgU2NvcGVkUnVsZVNldE1hcCBtX2F0SG9zdFJ1
bGVzOwogfTsKIAogaW5saW5lIGJvb2wgU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVTdGFja0Nv
bnNpc3RlbmN5KENvbnRhaW5lck5vZGUqIHBhcmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2hlZXRDb250ZW50cy5jcHAKaW5kZXggZTdjZTgxZWFhYjQ4NzE4NjI0ZjRlYjU1MjM4ZTVjMWFm
MzU2ODViOC4uMzllOWE3YjJjZDZjMjE5M2JiMDQ5ODBmYTg4YTgyNzIxZTRhMjNkZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKQEAgLTQzNSw2ICs0MzUsMTAg
QEAgc3RhdGljIGJvb2wgY2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2Vz
KGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGUKICAgICAgICAgICAgIGlmIChjaGlsZFJ1bGVzSGF2
ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxl
UmVnaW9uKj4ocnVsZSktPmNoaWxkUnVsZXMoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpIb3N0
OgorICAgICAgICAgICAgaWYgKGNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291
cmNlcyhzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVIb3N0Kj4ocnVsZSktPmNoaWxkUnVsZXMo
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpJbXBvcnQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpQYWdlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnRTaGFkb3cuY3BwCmluZGV4IGFlYjViNWI0NzViMjE5YmM1N2RjODVlZjJlN2I4
MzJhZWU4ODkzZmMuLjgwOWJjYzg3ODIyZTUxNGNkOGQ2NGMzZGI4ZDMyYWM3NTg3NjBlMTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogRWxlbWVudFNoYWRvdzo6RWxlbWVudFNoYWRvdygpCisgICAgOiBt
X2hhc01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZShmYWxzZSkKIHsKIH0KIApAQCAtODksNiArOTAs
MTAgQEAgdm9pZCBFbGVtZW50U2hhZG93OjphZGRTaGFkb3dSb290KEVsZW1lbnQqIHNoYWRvd0hv
c3QsIFBhc3NSZWZQdHI8U2hhZG93Um9vdD4gc2gKICAgICBpZiAoc2hhZG93SG9zdC0+YXR0YWNo
ZWQoKSkKICAgICAgICAgc2hhZG93SG9zdC0+bGF6eVJlYXR0YWNoKCk7CiAKKyAgICAvLyBBcyBh
IG5ldyBzaGFkb3cgZG9tIHN1YnRyZWUgbWlnaHQgaGF2ZSBAaG9zdCBALXJ1bGVzLCBuZWVkIHRv
IGRpc2FibGUKKyAgICAvLyBoYXNNYXRjaGVkSG9zdFJ1bGVzIGNhY2hlLgorICAgIGNsZWFySGFz
TWF0Y2hlZEhvc3RSdWxlKCk7CisKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFB1
c2hTaGFkb3dSb290KHNoYWRvd0hvc3QsIHNoYWRvd1Jvb3QuZ2V0KCkpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnRTaGFkb3cuaAppbmRleCBkZGI0MzgwNmJkZTE1MzlmYzdhZGMyYjlkODY5MmNl
NzIzYzgzM2Y2Li41MTU2OWI2YTZhYjU2NmJmNGE5YmE0NTEzYjY0MGQzODVkNDVmODYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmgKQEAgLTcxLDExICs3MSwxOCBAQCBwdWJsaWM6CiAg
ICAgQ29udGVudERpc3RyaWJ1dG9yJiBkaXN0cmlidXRvcigpOwogICAgIGNvbnN0IENvbnRlbnRE
aXN0cmlidXRvciYgZGlzdHJpYnV0b3IoKSBjb25zdDsKIAorICAgIGJvb2wgaGFzTWF0Y2hlZEhv
c3RSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNNYXRjaGVkSG9zdFJ1bGU7IH0KKyAgICBib29s
IGhhc01hdGNoZWRIb3N0UnVsZUF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWF0Y2hl
ZEhvc3RSdWxlQXZhaWxhYmxlOyB9CisgICAgdm9pZCBjbGVhckhhc01hdGNoZWRIb3N0UnVsZSgp
IHsgbV9oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGUgPSBmYWxzZTsgfQorICAgIHZvaWQgc2V0
SGFzTWF0Y2hlZEhvc3RSdWxlKGJvb2wgaGFzUnVsZSkgeyBtX2hhc01hdGNoZWRIb3N0UnVsZSA9
IGhhc1J1bGU7IG1faGFzTWF0Y2hlZEhvc3RSdWxlQXZhaWxhYmxlID0gdHJ1ZTsgfQorCiBwcml2
YXRlOgogICAgIHZvaWQgaW52YWxpZGF0ZURpc3RyaWJ1dGlvbihFbGVtZW50KiBob3N0KTsKIAog
ICAgIERvdWJseUxpbmtlZExpc3Q8U2hhZG93Um9vdD4gbV9zaGFkb3dSb290czsKICAgICBDb250
ZW50RGlzdHJpYnV0b3IgbV9kaXN0cmlidXRvcjsKKyAgICBib29sIG1faGFzTWF0Y2hlZEhvc3RS
dWxlOworICAgIGJvb2wgbV9oYXNNYXRjaGVkSG9zdFJ1bGVBdmFpbGFibGU7CiB9OwogCiBpbmxp
bmUgU2hhZG93Um9vdCogRWxlbWVudFNoYWRvdzo6eW91bmdlc3RTaGFkb3dSb290KCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAppbmRleCA1MTgwYTFjMjJkODQ4OTRlMzcwZjVjMTYy
YjZhM2FjOGZmNmZkNDI1Li4zOTYwNGI5MTY0MDcwNGQxZjllOGZjOTU3MTcyODJiZjg3OGMxMzQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCkBAIC0yMjQsNiArMjI0LDcgQEAgdm9pZCBT
aGFkb3dSb290OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJl
Zm9yZUNoYW5nZSwgTm9kZSoKIHsKICAgICBDb250YWluZXJOb2RlOjpjaGlsZHJlbkNoYW5nZWQo
Y2hhbmdlZEJ5UGFyc2VyLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVs
dGEpOwogICAgIG93bmVyKCktPmludmFsaWRhdGVEaXN0cmlidXRpb24oKTsKKyAgICBvd25lcigp
LT5jbGVhckhhc01hdGNoZWRIb3N0UnVsZSgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTJiM2JhOWE0NDEw
NjNiNTliNjBlMTgwYjkxMmE3NTViN2I3MjI4OS4uMTBjMGRmODY4ZjgzOGRiZDgxYjIwNTNiNWFi
ZTRkZjEwZDgxY2M4MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEwLTEyICBUYWthc2hp
IFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0gTmVl
ZHMgQGhvc3QgcnVsZSBmb3IgU2hhZG93RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVs
ZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvYXRob3N0
LWF0cnVsZXMuaHRtbDogQWRkZWQuCisKIDIwMTItMTAtMTcgIERpcmsgUHJhbmtlICA8ZHByYW5r
ZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ2xvbmUgYmFzZWxpbmVzIGZyb20gcGxhdGZvcm0v
bWFjIHRvIHBsYXRmb3JtL2Nocm9taXVtIFs3IG9mIDddCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hMWYzYjFjMjU1MTY5NTY3ODcyNWJkNjY1MTgxMzEzNDM4NjQ5YTE0Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDE1IEBACitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdDogcmdiKDI1
NSwgMCwgMCkKK2hvc3RBOiByZ2IoMjU1LCAwLCAwKQoraG9zdEI6IHJnYigwLCAwLCAyNTUpCito
b3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAxMjgpCitob3N0OiByZ2Io
MCwgMCwgMjU1KQoraG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigxMjgsIDEyOCwgMTI4
KQoraG9zdDogcmdiKDI1NSwgMjU1LCAwKQoraG9zdDogcmdiKDI1NSwgMCwgMCkKK25lc3RlZEhv
c3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdDogcmdiKDI1NSwg
MjU1LCAwKQorSGVsbG8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9h
dGhvc3QtYXRydWxlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1h
dHJ1bGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Q0YjUxMWVlMDJmYTlkNzUxZTU3ZTE2OWIwMGE2ZDg3
N2Q1M2E2ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9h
dGhvc3QtYXRydWxlcy5odG1sCkBAIC0wLDAgKzEsMTkwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjaG9zdCB7CisgIGNvbG9yOiBncmF5OworfQorPC9zdHls
ZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9wb2x5ZmlsbC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0PgorZnVuY3Rpb24gZHVtcENvbXB1dGVkU3R5bGUobm9kZSkKK3sKKyAgICBkZWJ1Zyhub2Rl
LmlkICsgIjogIiArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUobm9kZSwg
bnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7Cit9CisKK2Z1bmN0aW9uIHByZXByb2Nl
c3NGb3JUZXN0KCkKK3sKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InBhcmVudCIpOworICAgIHBhcmVudC5pbm5lckhUTUwgPSAnPGRpdiBpZD0iaG9zdCI+PHNwYW4+
SGVsbG88L3NwYW4+PC9kaXY+JzsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZUNvbnRlbnRDYXNl
KCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYg
eyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBD
b21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlU2hhZG93Q2FzZSgp
Cit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dS
b290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsg
Y29sb3I6IHJlZDsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgZHVtcENvbXB1
dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0V2l0aFNlbGVjdG9yKCkKK3sK
KyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcmVudCIpOworICAg
IHBhcmVudC5pbm5lckhUTUwgPSAiPHN0eWxlIHNjb3BlZD4gLmhvc3QgeyBjb2xvcjogZ3JheSB9
Ozwvc3R5bGU+IgorICAgICAgICArICI8ZGl2IGlkPSdob3N0QScgY2xhc3M9J2hvc3QnPjxzcGFu
PkhlbGxvPC9zcGFuPjwvZGl2PiIKKyAgICAgICAgKyAiPHNwYW4gaWQ9J2hvc3RCJyBjbGFzcz0n
aG9zdCc+PHNwYW4+V29ybGQ8L3NwYW4+PC9zcGFuPiI7CisKKyAgICB2YXIgaG9zdEEgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdEEiKTsKKyAgICB2YXIgc2hhZG93QSA9IG5ldyBXZWJL
aXRTaGFkb3dSb290KGhvc3RBKTsKKyAgICB2YXIgc3R5bGUgPSAiPHN0eWxlPkBob3N0IHsgZGl2
IHsgY29sb3I6IHJlZDsgfSBzcGFuIHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+IjsKKyAgICBz
aGFkb3dBLmlubmVySFRNTCA9IHN0eWxlICsgIjxzaGFkb3c+PC9zaGFkb3c+IjsKKworICAgIHZh
ciBob3N0QiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0QiIpOworICAgIHZhciBzaGFk
b3dCID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdEIpOworICAgIHNoYWRvd0IuaW5uZXJIVE1M
ID0gc3R5bGUgKyAiPHNoYWRvdz48L3NoYWRvdz4iOworCisgICAgZHVtcENvbXB1dGVkU3R5bGUo
aG9zdEEpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3RCKTsKK30KKworZnVuY3Rpb24gdGVz
dFBzZXVkb0hvc3RXaXRoU2NvcGVkKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAg
IHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hh
ZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9
ICI8ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxl
PjxzaGFkb3c+PC9zaGFkb3c+PGRpdj48c3R5bGUgc2NvcGVkPkBob3N0IHsgZGl2IHsgY29sb3I6
IGJsdWU7IH0gfTwvc3R5bGU+PC9kaXY+PC9kaXY+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZSho
b3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFBzZXVkb0hvc3RXaXRoRmFsbGJhY2tTaGFkb3coKQor
eworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hh
ZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93
Um9vdChob3N0KTsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7
IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAg
eW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxjb250ZW50PjxzaGFkb3c+PC9zaGFkb3c+PC9j
b250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRl
c3RUd29TaGFkb3dSb290c0Nhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAg
dmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRl
c3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RT
aGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBvbGRlc3RTaGFkb3cuaW5u
ZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNv
bnRlbnQ+PC9jb250ZW50PiI7CisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHls
ZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+
IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFR3b1No
YWRvd1Jvb3RzQ3JlYXRpbmdEaWZmZXJlbnRPcmRlckNhc2UoKQoreworICAgIHByZXByb2Nlc3NG
b3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIp
OworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAg
ICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB5
b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJs
dWU7IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIG9sZGVzdFNoYWRvdy5pbm5l
ckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29u
dGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVu
Y3Rpb24gdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50KCkKK3sK
KyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRv
d1Jvb3QoaG9zdCk7CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3Qo
aG9zdCk7CisgICAgdmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsK
KworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c2hhZG93Pjwvc2hhZG93PiI7Cisg
ICAgeW91bmdlclNoYWRvdy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAg
b2xkZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBncmVl
bjsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVy
SFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250
ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5j
dGlvbiB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvdygpCit7CisgICAgcHJl
cHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhv
c3QpOworICAgIHZhciBvbGRlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOwor
ICAgIHZhciB5b3VuZ2VyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAg
dmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisKKyAgICB5
b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHll
bGxvdzsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgeW91bmdlclNoYWRvdy5p
bm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+
PGRpdj5pbmVydDwvZGl2PiI7CisgICAgb2xkZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5A
aG9zdCB7IGRpdiB7IGNvbG9yOiBncmVlbjsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7
CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xv
cjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRl
ZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0TmVzdGVkQ2FzZSgpCit7CisgICAgcHJl
cHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJob3N0Iik7CisgICAgdmFyIG91dGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9z
dCk7CisgICAgb3V0ZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9zdCB7IGRpdiB7IGNv
bG9yOiByZWQ7IH0gfTwvc3R5bGU+PGRpdiBpZD0ibmVzdGVkSG9zdCI+SW5uZXJTaGFkb3c8L2Rp
dj4nOworICAgIHZhciBuZXN0ZWQgPSBvdXRlclNoYWRvdy5nZXRFbGVtZW50QnlJZCgibmVzdGVk
SG9zdCIpOworICAgIHZhciBpbm5lclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KG5lc3Rl
ZCk7CisgICAgaW5uZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9zdCB7IGRpdiB7IGNv
bG9yOiBibHVlOyB9IH08L3N0eWxlPlNob3cgPHNoYWRvdz48L3NoYWRvdz4gaW4gb3V0ZXIuJzsK
KyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShuZXN0
ZWQpOworfQorCitmdW5jdGlvbiB0ZXN0SG9zdFZzU2NvcGVkU3R5bGUoKQoreworICAgIHByZXBy
b2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
aG9zdCIpOworICAgIGhvc3QuaW5uZXJIVE1MID0gIjxzdHlsZSBzY29wZWQ+I2hvc3QgeyBjb2xv
cjogeWVsbG93OyB9PC9zdHlsZT48c3Bhbj5IZWxsbzwvc3Bhbj4iOworICAgIHZhciBzaGFkb3cg
PSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxz
dHlsZT5AaG9zdCB7ICNob3N0IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48L2Nv
bnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVz
dEhvc3RWc0lubGluZVN0eWxlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZh
ciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICBob3N0LnN0eWxl
LmNvbG9yID0gInllbGxvdyI7CisgICAgaG9zdC5pbm5lckhUTUwgPSAiPHNwYW4+SGVsbG88L3Nw
YW4+IjsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAg
c2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08
L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3Qp
OworfQorCitmdW5jdGlvbiBydW5UZXN0cygpCit7CisgICAgdGVzdFNpbXBsZUNvbnRlbnRDYXNl
KCk7CisgICAgdGVzdFNpbXBsZVNoYWRvd0Nhc2UoKTsKKyAgICB0ZXN0SG9zdFdpdGhTZWxlY3Rv
cigpOworICAgIHRlc3RQc2V1ZG9Ib3N0V2l0aFNjb3BlZCgpOworICAgIHRlc3RQc2V1ZG9Ib3N0
V2l0aEZhbGxiYWNrU2hhZG93KCk7CisgICAgdGVzdFR3b1NoYWRvd1Jvb3RzQ2FzZSgpOworICAg
IHRlc3RUd29TaGFkb3dSb290c0NyZWF0aW5nRGlmZmVyZW50T3JkZXJDYXNlKCk7CisgICAgdGVz
dE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50KCk7CisgICAgdGVzdE11
bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3coKTsKKyAgICB0ZXN0TmVzdGVkQ2FzZSgp
OworICAgIHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpOworICAgIHRlc3RIb3N0VnNJbmxpbmVTdHls
ZSgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCkiPgor
ICA8ZGl2IGlkPSJwYXJlbnQiPgorICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169594</attachid>
            <date>2012-10-19 03:48:01 -0700</date>
            <delta_ts>2012-10-23 04:50:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88606-20121019194645.patch</filename>
            <type>text/plain</type>
            <size>42786</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxODM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRkOTk3NDcyOTMxYzMy
ZmJiYWMwZmJmZjM1MDI4OTU1MmE3MDJkYi4uNTM3OTRlNTE1OWI2ZGY4OWFhNzA5NDE5MTRhMzZj
N2E4N2VmYjY1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMiBAQAorMjAxMi0xMC0xMiAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01d
IE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIEBob3N0LUBydWxlcyBh
Y2NvcmRpbmcgdG8gdGhlIHNoYWRvdyBkb20gc3BlYzoKKyAgICAgICAgaHR0cDovL2R2Y3MudzMu
b3JnL2hnL3dlYmNvbXBvbmVudHMvcmF3LWZpbGUvdGlwL3NwZWMvc2hhZG93L2luZGV4Lmh0bWwj
aG9zdC1hdC1ydWxlCisgICAgICAgIFRoZSBkZXNpZ24gZG9jIGlzOgorICAgICAgICBodHRwczov
L2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFQMnlvcmNoRjhsY2kyc2Njci1tVlNSZjJkdHZq
S2VpdXlRV3pDQjJiRUE4L2VkaXQKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvYXRo
b3N0LWF0cnVsZXMuaHRtbAorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueS5pbjoKKyAgICAg
ICAgQWRkZWQgcnVsZXMgZm9yIHBhcnNpbmcgQGhvc3QgQC1ydWxlcy4KKyAgICAgICAgKiBjc3Mv
Q1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tl
bik6CisgICAgICAgIEFkZGVkIGEgbmV3IHRva2VuICJAaG9zdCIuCisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKToKKyAgICAgICAgQWRkZWQgYSBuZXcgbWV0aG9k
IHRvIGNyZWF0ZSBhbiBAaG9zdCBALXJ1bGUsIHdoaWNoIGlzIGludm9rZWQgZnJvbQorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICBBZGRlZCBh
IGRlY2xhcmF0aW9uIG9mIHRoZSBhYm92ZSBuZXcgbWV0aG9kOiBjcmVhdGVIb3N0UnVsZS4KKyAg
ICAgICAgKiBjc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmg6CisgICAgICAgIEFkZGVkIEhPU1Rf
UlVMRSB0byBlbnVtIFR5cGUuCisgICAgICAgICogY3NzL1J1bGVTZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UnVsZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgTW9kaWZpZWQgbXVsdGlwbGUg
Ym9vbCBhcmd1bWVudHMgaW50byBvbmUgYXJndW1lbnQuIE5vdyBpdAorICAgICAgICB1c2VzIGNv
bWJpbmF0aW9ucyBvZiB2YWx1ZXMgZnJvbSBlbnVtIEFkZFJ1bGVTdGF0ZS4KKyAgICAgICAgKFdl
YkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRk
UmVnaW9uUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRTdHlsZVJ1bGUpOgor
ICAgICAgICBVcGRhdGVkIGFjY29yZGluZyB0byB0aGUgUnVsZURhdGEncyBjaGFuZ2UuCisgICAg
ICAgIE1vZGlmaWVkIHRvIEludm9rZSBpbmNyZWFzZVNwZWNpZmljaXR5IGlmIHRoZSBnaXZlbiBy
dWxlIGlzIEBob3N0CisgICAgICAgIEAtcnVsZS4KKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6
OmFkZFJ1bGVzRnJvbVNoZWV0KToKKyAgICAgICAgSW52b2tlZCBhZGRIb3N0UnVsZSBpZiB0aGUg
Z2l2ZW4gcnVsZSBpcyBAaG9zdCBALXJ1bGUuCisgICAgICAgICogY3NzL1J1bGVTZXQuaDoKKyAg
ICAgICAgKFJ1bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjppbmNyZWFzZVNw
ZWNpZmljaXR5KToKKyAgICAgICAgQWRkZWQgYSBuZXcgbWV0aG9kIHRvIGluY3JlYXNlIHNlbGVj
dG9yJ3Mgc3BlY2lmaWNpdHkuIFRoaXMgbWV0aG9kIGlzCisgICAgICAgIHVzZWQgdG8gbWFrZSBA
aG9zdCBALXJ1bGVzJyBzcGVjaWZpY2l0eSBsYXJnZXIgdGhhbiBub3JtYWwgYXV0aG9yCisgICAg
ICAgIHJ1bGVzJyBzcGVjaWZpY2l0eS4KKyAgICAgICAgKFJ1bGVTZXQpOgorICAgICAgICAqIGNz
cy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSdWxlU2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFkZEhvc3RSdWxlKToKKyAgICAgICAgQSB3
cmFwcGVyIG1ldGhvZCB0byBpbnZva2UgU3R5bGVTY29wZVJlc29sdmVyOjphZGRIb3N0UnVsZS4g
VGhlIG1ldGhvZAorICAgICAgICBpcyB1c2VkIHRvIG1ha2Ugb25seSBTdHlsZVJlc29sdmVyIGtu
b3cgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIGFib3V0CisgICAgICAgIGNsYXNzIFN0eWxlU2Nv
cGVSZXNvbHZlci4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhv
clN0eWxlc2hlZXRzKToKKyAgICAgICAgVXBkYXRlZCBhY2NvcmRpbmcgdG8gdGhlIFJ1bGVEYXRh
J3MgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5n
Q2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBmaW5k
IG1hdGNoZWQgaG9zdCBydWxlcyB3aGVuIGFuIGVsZW1lbnQgaXMgZ2l2ZW4uCisgICAgICAgIFRo
aXMgbWV0aG9kIGludm9rZXMKKyAgICAgICAgU3R5bGVTY29wZVJlc29sdmVyOjpzdHlsZVNoYXJp
bmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzIHRvIGZpbmQKKyAgICAgICAgbWF0Y2hlZCBob3N0
IHJ1bGVzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBmaW5kIG1hdGNo
ZWQgaG9zdCBydWxlcyB3aGVuIGFuIGVsZW1lbnQgaXMgZ2l2ZW4uCisgICAgICAgIFRoaXMgbWV0
aG9kIGludm9rZXMgU3R5bGVTY29wZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyB0byBmaW5kCisg
ICAgICAgIG1hdGNoZWQgaG9zdCBydWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICBNb2RpZmllZCB0byBpbnZva2Ug
bWF0Y2hIb3N0UnVsZXMuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVT
aGFyZWRTdHlsZSk6CisgICAgICAgIERpc2FibGUgc2libGluZyBzdHlsZSBjYWNoZSBpZiB0aGUg
Z2l2ZW4gZWxlbWVudCBpcyBhIHNoYWRvdyBob3N0IGFuZAorICAgICAgICBhbnkgQGhvc3QgQC1y
dWxlcyBhcmUgYXBwbGllZCB0byB0aGUgZWxlbWVudC4KKyAgICAgICAgKiBjc3MvU3R5bGVSZXNv
bHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6ZW5zdXJlU2NvcGVSZXNv
bHZlcik6CisgICAgICAgIElmIG5vIHNjb3BlUmVzb2x2ZXIgaXMgY3JlYXRlZCwgY3JlYXRlIGFu
ZCByZXR1cm4gdGhlIGluc3RhbmNlLgorICAgICAgICBJZiBjcmVhdGVkLCBqdXN0IHJldHVybiB0
aGUgaW5zdGFuY2UuCisgICAgICAgIChTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKiBjc3MvU3R5
bGVSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OnJlcG9ydE1lbW9y
eVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmRlc3Ryb3kpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6Y29weSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSdWxlSG9zdDo6U3R5bGVSdWxlSG9zdCk6CisgICAgICAgIEltcGxlbWVudGVkIGNsYXNzIFN0
eWxlUnVsZUhvc3QuIFRoZSBjbGFzcyBpcyBhbG1vc3QgdGhlIHNhbWUgYXMKKyAgICAgICAgU3R5
bGVSdWxlQmxvY2sgZXhjZXB0IHR5cGUuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBj
c3MvU3R5bGVSdWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjppc0hvc3RS
dWxlKToKKyAgICAgICAgKFN0eWxlUnVsZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
dWxlSG9zdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUhvc3Q6OmNvcHkp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZUF0SG9zdFJ1
bGVTZXRGb3IpOgorICAgICAgICBBIG5ldyBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJ1bGVTZXQg
Zm9yIHRoZSBnaXZlbiBzaGFkb3cgcm9vdC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjphdEhvc3RSdWxlU2V0Rm9yKToKKyAgICAgICAg
QSBuZXcgcHJpdmF0ZSBpbmxpbmUgbWV0aG9kIHRvIG9idGFpbiBAaG9zdCBALXJ1bGVzIGRlY2xh
cmVkIGluCisgICAgICAgIHRoZSBnaXZlbiBzaGFkb3cgcm9vdC4KKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2NvcGVSZXNvbHZlcjo6YWRkSG9zdFJ1bGUpOgorICAgICAgICBBZGRlZCBhIG5ldyBt
ZXRob2QgdG8gcmVnaXN0ZXIgQGhvc3QgQC1ydWxlcyB3aXRoIHNoYWRvdyByb290cy4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0
Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBmaW5kIHdoZXRoZXIgYW55
IEBob3N0IEAtcnVsZXMgYXJlIGFwcGxpZWQgdG8KKyAgICAgICAgdGhlIGdpdmVuIGhvc3QgZWxl
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVs
ZXMpOgorICAgICAgICBBIG5ldyBtZXRob2QgdG8gZmluZCBtYXRjaGVkIHJ1bGVzIGZvciB0aGUg
Z2l2ZW4gaG9zdCBlbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVy
OjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTdHlsZVNjb3BlUmVzb2x2ZXIpOgorICAg
ICAgICAqIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2hp
bGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKToKKwogMjAxMi0xMC0xOCAg
Q2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBDcmFz
aGVzIGluIFdlYlByb2Nlc3MgYXQgY29tLmFwcGxlLldlYkNvcmU6IC1bQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgcmVtb3RlQWNjZXNzaWJpbGl0eVBhcmVudE9iamVjdF0gKyA3OApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbiBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFtbWFyLnkuaW4KaW5kZXggNGI4OTRmYjk1OTdkZWY1MmEyNGI5M2ZkNTRlZjc0
MzI0MGE1Yzc2OC4uMzM1NjQ1NTAwOTQ4MDI2NDRiYThmYzk3ZmQ5OGZhYTE4MjljOWVlOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbgorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCkBAIC05NSw2ICs5NSw3IEBAIHN0YXRpYyBpbmxp
bmUgaW50IGNzc3l5ZXJyb3Iodm9pZCosIGNvbnN0IGNoYXIqKQogJXRva2VuIFNVUFBPUlRTX1NZ
TQogI2VuZGlmCiAldG9rZW4gRk9OVF9GQUNFX1NZTQorJXRva2VuIEhPU1RfU1lNCiAldG9rZW4g
Q0hBUlNFVF9TWU0KICV0b2tlbiBOQU1FU1BBQ0VfU1lNCiAldG9rZW4gVkFSRlVOQ1RJT04KQEAg
LTE4Nyw2ICsxODgsNyBAQCBzdGF0aWMgaW5saW5lIGludCBjc3N5eWVycm9yKHZvaWQqLCBjb25z
dCBjaGFyKikKICV0eXBlIDxydWxlPiBwYWdlCiAldHlwZSA8cnVsZT4gbWFyZ2luX2JveAogJXR5
cGUgPHJ1bGU+IGZvbnRfZmFjZQorJXR5cGUgPHJ1bGU+IGhvc3QKICV0eXBlIDxydWxlPiBrZXlm
cmFtZXMKICV0eXBlIDxydWxlPiBpbnZhbGlkX3J1bGUKICV0eXBlIDxydWxlPiBzYXZlX2Jsb2Nr
CkBAIC00MDIsNiArNDA0LDcgQEAgdmFsaWRfcnVsZToKICNpZiBFTkFCTEVfQ1NTM19DT05ESVRJ
T05BTF9SVUxFUwogICB8IHN1cHBvcnRzCiAjZW5kaWYKKyAgfCBob3N0CiAgIDsKIAogcnVsZToK
QEAgLTkwMSw2ICs5MDQsMjMgQEAgZm9udF9mYWNlOgogICAgIH0KIDsKIAorYmVmb3JlX2hvc3Rf
cnVsZToKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgICAgIHBhcnNlci0+bWFya1J1bGVIZWFkZXJT
dGFydChDU1NSdWxlU291cmNlRGF0YTo6SE9TVF9SVUxFKTsKKyAgICB9CisgICAgOworCitob3N0
OgorICAgIGJlZm9yZV9ob3N0X3J1bGUgSE9TVF9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJl
X3NwYWNlIAorICAgICd7JyBhdF9ydWxlX2JvZHlfc3RhcnQgbWF5YmVfc3BhY2UgYmxvY2tfcnVs
ZV9saXN0IHNhdmVfYmxvY2sgeworICAgICAgICAkJCA9IHBhcnNlci0+Y3JlYXRlSG9zdFJ1bGUo
JDcpOworICAgIH0KKyAgICB8IGJlZm9yZV9ob3N0X3J1bGUgSE9TVF9TWU0gYXRfcnVsZV9oZWFk
ZXJfZW5kX21heWJlX3NwYWNlICc7JyB7CisgICAgICAgICQkID0gMDsKKyAgICAgICAgcGFyc2Vy
LT5wb3BSdWxlRGF0YSgpOworICAgIH0KKyAgICA7CisgCiByZWdpb25fc2VsZWN0b3I6CiAgICAg
c2VsZWN0b3JfbGlzdCB7CiAgICAgICAgIGlmICgkMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNw
cAppbmRleCBiYTIyZmNiY2U2NzY0NGNmMGM4ZWY1N2MxOTVmYjVlZmNjNGM1OWQ5Li43OWQ1NDI4
ZDZkOTJmM2U2ODk5ZTBlMjJlYmY2MjZjMmExMTAyOTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcApAQCAtOTE4NSw2ICs5MTg1LDExIEBAIGlubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0
QXRUb2tlbihpbnQgbGVuZ3RoLCBib29sIGhhc0VzY2FwZSkKICAgICAgICAgICAgIG1fdG9rZW4g
PSBGT05UX0ZBQ0VfU1lNOwogICAgICAgICByZXR1cm47CiAKKyAgICBjYXNlICdoJzoKKyAgICAg
ICAgaWYgKGxlbmd0aCA9PSA1ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJv
c3QiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBIT1NUX1NZTTsKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgY2FzZSAnaSc6CiAgICAgICAgIGlmIChsZW5ndGggPT0gNyAmJiBpc0VxdWFsVG9DU1NJ
ZGVudGlmaWVyKG5hbWUgKyAyLCAibXBvcnQiKSkgewogICAgICAgICAgICAgbV9wYXJzaW5nTW9k
ZSA9IE1lZGlhUXVlcnlNb2RlOwpAQCAtMTAwMTcsNiArMTAwMjIsMjIgQEAgU3R5bGVSdWxlQmFz
ZSogQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUoKQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKK1N0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUoUnVsZUxpc3QqIHJ1
bGVzKQoreworICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJh
dGlvbnMgPSBmYWxzZTsKKyAgICBSZWZQdHI8U3R5bGVSdWxlSG9zdD4gcnVsZTsKKyAgICBpZiAo
cnVsZXMpCisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoKnJ1bGVzKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgUnVsZUxpc3QgZW1wdHlSdWxlczsKKyAgICAgICAgcnVsZSA9IFN0
eWxlUnVsZUhvc3Q6OmNyZWF0ZShlbXB0eVJ1bGVzKTsKKyAgICB9CisgICAgU3R5bGVSdWxlSG9z
dCogcmVzdWx0ID0gcnVsZS5nZXQoKTsKKyAgICBtX3BhcnNlZFJ1bGVzLmFwcGVuZChydWxlLnJl
bGVhc2UoKSk7CisgICAgcHJvY2Vzc0FuZEFkZE5ld1J1bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQ1NTUGFyc2VyOjphZGROYW1lc3BhY2Uo
Y29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKQogewog
ICAgIGlmICghbV9zdHlsZVNoZWV0IHx8ICFtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IDc1NjY4Y2YzMGNmNTA5MjAzNDI1MTMzZDNhNjQ0ODI3
MWI4ZWQ2ODUuLmUwNzBkYWZmMjgyMDc2MmY3NTc0MDAwYjIyODQzMDU2NTNmMjZjZmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTI4Miw2ICsyODIsNyBAQCBwdWJsaWM6CiAgICAgU3R5bGVS
dWxlQmFzZSogY3JlYXRlUGFnZVJ1bGUoUGFzc093blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gcGFn
ZVNlbGVjdG9yKTsKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVSZWdpb25SdWxlKENTU1NlbGVj
dG9yVmVjdG9yKiByZWdpb25TZWxlY3RvciwgUnVsZUxpc3QqIHJ1bGVzKTsKICAgICBTdHlsZVJ1
bGVCYXNlKiBjcmVhdGVNYXJnaW5BdFJ1bGUoQ1NTU2VsZWN0b3I6Ok1hcmdpbkJveFR5cGUpOwor
ICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZUhvc3RSdWxlKFJ1bGVMaXN0KiBydWxlcyk7CiAgICAg
dm9pZCBzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwogICAgIHZvaWQgZW5kRGVjbGFy
YXRpb25zRm9yTWFyZ2luQm94KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcm9wZXJ0eVNvdXJjZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNv
dXJjZURhdGEuaAppbmRleCA0NjliZGI2MzBjMWE1YzVkYmE5OTNmZDFhZDU5ZWQwNzQ0OWE1NWJl
Li4wNzllYzMzNjI0OTVjMDc5NzliNDc1YWZkZTc3NjAyMzg0Yzk5OTZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCkBAIC05NCw3ICs5NCw4IEBAIHN0cnVj
dCBDU1NSdWxlU291cmNlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU1J1bGVTb3VyY2VEYXRh
PiB7CiAgICAgICAgIEZPTlRfRkFDRV9SVUxFLAogICAgICAgICBQQUdFX1JVTEUsCiAgICAgICAg
IEtFWUZSQU1FU19SVUxFLAotICAgICAgICBSRUdJT05fUlVMRQorICAgICAgICBSRUdJT05fUlVM
RSwKKyAgICAgICAgSE9TVF9SVUxFCiAgICAgfTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENT
U1J1bGVTb3VyY2VEYXRhPiBjcmVhdGUoVHlwZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1J1bGVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwCmlu
ZGV4IGUyYmU1NzcxZTAyNWYxNGNmOWE4NWRlN2U1MWNkOWM1YTEzMDkwNTkuLjc3MTY2OTJiZjBl
MGVhZTljNWE3YWZjNGI2ZDg1MTZlNzYyZTRiOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9SdWxlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKQEAg
LTEwNywxOCArMTA3LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb250YWluc1VuY29tbW9uQXR0
cmlidXRlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1SdWxlRGF0YTo6UnVsZURhdGEoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBz
ZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSkK
K1J1bGVEYXRhOjpSdWxlRGF0YShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5k
ZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCBBZGRSdWxlU3RhdGUgYWRkUnVsZVN0YXRlKQogICAgIDog
bV9ydWxlKHJ1bGUpCiAgICAgLCBtX3NlbGVjdG9ySW5kZXgoc2VsZWN0b3JJbmRleCkKICAgICAs
IG1fcG9zaXRpb24ocG9zaXRpb24pCiAgICAgLCBtX3NwZWNpZmljaXR5KHNlbGVjdG9yKCktPnNw
ZWNpZmljaXR5KCkpCi0gICAgLCBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvcihjYW5Vc2VGYXN0
Q2hlY2tTZWxlY3RvciAmJiBTZWxlY3RvckNoZWNrZXI6OmlzRmFzdENoZWNrYWJsZVNlbGVjdG9y
KHNlbGVjdG9yKCkpKQorICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoKGFkZFJ1bGVT
dGF0ZSAmIFJ1bGVDYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvcikgJiYgU2VsZWN0b3JDaGVja2VyOjpp
c0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3RvcigpKSkKICAgICAsIG1faGFzTXVsdGlwYXJ0
U2VsZWN0b3IoISFzZWxlY3RvcigpLT50YWdIaXN0b3J5KCkpCiAgICAgLCBtX2hhc1JpZ2h0bW9z
dFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKGlzU2VsZWN0b3JNYXRjaGluZ0hU
TUxCYXNlZE9uUnVsZUhhc2goc2VsZWN0b3IoKSkpCiAgICAgLCBtX2NvbnRhaW5zVW5jb21tb25B
dHRyaWJ1dGVTZWxlY3RvcihXZWJDb3JlOjpjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0
b3Ioc2VsZWN0b3IoKSkpCiAgICAgLCBtX2xpbmtNYXRjaFR5cGUoU2VsZWN0b3JDaGVja2VyOjpk
ZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKHNlbGVjdG9yKCkpKQotICAgICwgbV9oYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luKGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCi0gICAgLCBtX2lzSW5SZWdp
b25SdWxlKGluUmVnaW9uUnVsZSkKKyAgICAsIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbihh
ZGRSdWxlU3RhdGUgJiBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKKyAgICAsIG1faXNJ
blJlZ2lvblJ1bGUoYWRkUnVsZVN0YXRlICYgUnVsZUlzSW5SZWdpb25SdWxlKQogewogICAgIEFT
U0VSVChtX3Bvc2l0aW9uID09IHBvc2l0aW9uKTsKICAgICBBU1NFUlQobV9zZWxlY3RvckluZGV4
ID09IHNlbGVjdG9ySW5kZXgpOwpAQCAtMjA3LDkgKzIwNywxNCBAQCB2b2lkIFJ1bGVTZXQ6OmFk
ZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsIGNvbnN0
IFJ1bGVEYQogICAgIHJ1bGVzLT5hcHBlbmQocnVsZURhdGEpOwogfQogCi12b2lkIFJ1bGVTZXQ6
OmFkZFJ1bGUoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBib29sIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJv
b2wgaW5SZWdpb25SdWxlKQordm9pZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwg
dW5zaWduZWQgc2VsZWN0b3JJbmRleCwgQWRkUnVsZVN0YXRlIGFkZFJ1bGVTdGF0ZSkKIHsKLSAg
ICBSdWxlRGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3RvckluZGV4LCBtX3J1bGVDb3VudCsrLCBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaW5SZWdp
b25SdWxlKTsKKyAgICBSdWxlRGF0YSBydWxlRGF0YShydWxlLCBzZWxlY3RvckluZGV4LCBtX3J1
bGVDb3VudCsrLCBhZGRSdWxlU3RhdGUpOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBhdGhv
c3RSdWxlU3BlY2lmaWNpdHkgPSAweDEwMDAwMDsKKworICAgIGlmIChhZGRSdWxlU3RhdGUgJiBS
dWxlSXNIb3N0UnVsZSkKKyAgICAgICAgcnVsZURhdGEuaW5jcmVhc2VTcGVjaWZpY2l0eShhdGhv
c3RSdWxlU3BlY2lmaWNpdHkpOworCiAgICAgY29sbGVjdEZlYXR1cmVzRnJvbVJ1bGVEYXRhKG1f
ZmVhdHVyZXMsIHJ1bGVEYXRhKTsKIAogICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVE
YXRhLnNlbGVjdG9yKCk7CkBAIC0yNjQsMTAgKzI2OSwxMiBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJl
Z2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiByZWdpb25SdWxlLCBib29sIGhhc0RvY3VtZW50U2Vj
dXJpdAogCiAgICAgLy8gQ29sbGVjdCB0aGUgcmVnaW9uIHJ1bGVzIGludG8gYSBydWxlIHNldAog
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9IHJl
Z2lvblJ1bGUtPmNoaWxkUnVsZXMoKTsKKyAgICBBZGRSdWxlU3RhdGUgYWRkUnVsZVN0YXRlID0g
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA/IFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
IDogUnVsZUhhc05vU3BlY2lhbFN0YXRlOworICAgIGFkZFJ1bGVTdGF0ZSA9IHN0YXRpY19jYXN0
PEFkZFJ1bGVTdGF0ZT4oYWRkUnVsZVN0YXRlIHwgUnVsZUNhblVzZUZhc3RDaGVja1NlbGVjdG9y
IHwgUnVsZUlzSW5SZWdpb25SdWxlKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hp
bGRSdWxlcy5zaXplKCk7ICsraSkgewogICAgICAgICBTdHlsZVJ1bGVCYXNlKiByZWdpb25TdHls
aW5nUnVsZSA9IGNoaWxkUnVsZXNbaV0uZ2V0KCk7CiAgICAgICAgIGlmIChyZWdpb25TdHlsaW5n
UnVsZS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAgICAgIHJlZ2lvblJ1bGVTZXQtPmFkZFN0eWxl
UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihyZWdpb25TdHlsaW5nUnVsZSksIGhhc0RvY3Vt
ZW50U2VjdXJpdHlPcmlnaW4sIHRydWUsIHRydWUpOworICAgICAgICAgICAgcmVnaW9uUnVsZVNl
dC0+YWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJlZ2lvblN0eWxpbmdSdWxl
KSwgYWRkUnVsZVN0YXRlKTsKICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSAiZ2xvYmFsIiBydWxl
IGNvdW50IHNvIHRoYXQgcHJvcGVyIG9yZGVyIGlzIG1haW50YWluZWQKICAgICBtX3J1bGVDb3Vu
dCA9IHJlZ2lvblJ1bGVTZXQtPm1fcnVsZUNvdW50OwpAQCAtMjg2LDYgKzI5Myw3IEBAIHZvaWQg
UnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29u
c3QgTWVkaWFRdWVyeUV2YWx1CiAgICAgICAgICAgICBhZGRSdWxlc0Zyb21TaGVldChpbXBvcnRS
dWxlLT5zdHlsZVNoZWV0KCksIG1lZGl1bSwgcmVzb2x2ZXIsIHNjb3BlKTsKICAgICB9CiAgICAg
Ym9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID0gcmVzb2x2ZXIgJiYgcmVzb2x2ZXItPmRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3Qoc2hlZXQtPmJhc2VVUkwoKSk7
CisgICAgQWRkUnVsZVN0YXRlIGFkZFJ1bGVTdGF0ZSA9IHN0YXRpY19jYXN0PEFkZFJ1bGVTdGF0
ZT4oKGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiA6IDApIHwgKCFzY29wZSA/IFJ1bGVDYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciA6IDApKTsK
IAogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgcnVsZXMgPSBzaGVl
dC0+Y2hpbGRSdWxlcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydWxlcy5zaXpl
KCk7ICsraSkgewpAQCAtMjkzLDcgKzMwMSw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9t
U2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1CiAK
ICAgICAgICAgQVNTRVJUKCFydWxlLT5pc0ltcG9ydFJ1bGUoKSk7CiAgICAgICAgIGlmIChydWxl
LT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0
eWxlUnVsZSo+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCAhc2NvcGUpOworICAg
ICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUpLCBhZGRS
dWxlU3RhdGUpOwogICAgICAgICBlbHNlIGlmIChydWxlLT5pc1BhZ2VSdWxlKCkpCiAgICAgICAg
ICAgICBhZGRQYWdlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4ocnVsZSkpOwogICAg
ICAgICBlbHNlIGlmIChydWxlLT5pc01lZGlhUnVsZSgpKSB7CkBAIC0zMDUsNyArMzEzLDcgQEAg
dm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0
LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHUKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgY2hpbGRSdWxlcy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgICAgICBT
dHlsZVJ1bGVCYXNlKiBjaGlsZFJ1bGUgPSBjaGlsZFJ1bGVzW2pdLmdldCgpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGRSdWxlLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KGNoaWxkUnVsZSks
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFzY29wZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4oY2hpbGRSdWxlKSwgYWRk
UnVsZVN0YXRlKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRSdWxlLT5pc1Bh
Z2VSdWxlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRQYWdlUnVsZShzdGF0aWNfY2Fz
dDxTdHlsZVJ1bGVQYWdlKj4oY2hpbGRSdWxlKSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGNoaWxkUnVsZS0+aXNGb250RmFjZVJ1bGUoKSAmJiByZXNvbHZlcikgewpAQCAtMzQ3LDE1
ICszNTUsMTkgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29u
dGVudHMqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHUKICAgICAgICAgICAgIGFkZFJlZ2lv
blJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUmVnaW9uKj4ocnVsZSksIGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4pOwogICAgICAgICB9CiAjZW5kaWYKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkK
KyAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNIb3N0UnVsZSgpKQorICAgICAgICAgICAgcmVzb2x2
ZXItPmFkZEhvc3RSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUhvc3QqPihydWxlKSwgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbiwgc2NvcGUpOworI2VuZGlmCiAgICAgfQogICAgIGlmIChtX2F1
dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCiAgICAgICAgIHNocmlua1RvRml0KCk7CiB9CiAKLXZvaWQg
UnVsZVNldDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSogcnVsZSwgYm9vbCBoYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdp
b25SdWxlKQordm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiBydWxlLCBBZGRS
dWxlU3RhdGUgYWRkUnVsZVN0YXRlKQogewogICAgIGZvciAoc2l6ZV90IHNlbGVjdG9ySW5kZXgg
PSAwOyBzZWxlY3RvckluZGV4ICE9IG5vdEZvdW5kOyBzZWxlY3RvckluZGV4ID0gcnVsZS0+c2Vs
ZWN0b3JMaXN0KCkuaW5kZXhPZk5leHRTZWxlY3RvckFmdGVyKHNlbGVjdG9ySW5kZXgpKQotICAg
ICAgICBhZGRSdWxlKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBpc0luUmVnaW9uUnVsZSk7CisgICAgICAgIGFk
ZFJ1bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgYWRkUnVsZVN0YXRlKTsKIH0KIAogc3RhdGljIGlu
bGluZSB2b2lkIHNocmlua01hcFZlY3RvcnNUb0ZpdChSdWxlU2V0OjpBdG9tUnVsZU1hcCYgbWFw
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9SdWxlU2V0LmgKaW5kZXggNjU3NzIzOGJhOTIzNmE5ZDY4MTAzOTE5NWEwZGQ0M2Ey
ZTgwODJhMC4uNzkzNDIwMTA0ODUxYjlhZDkzZjEyOTNmOGY4ZmE5N2Q0YmE2MGY2ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvUnVsZVNldC5oCkBAIC0zMSw2ICszMSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2VudW0gQWRkUnVsZVN0YXRlIHsKKyAgICBSdWxlSGFzTm9TcGVjaWFsU3RhdGUgICAgICAgICA9
IDAsCisgICAgUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSAxLAorICAgIFJ1bGVDYW5V
c2VGYXN0Q2hlY2tTZWxlY3RvciAgID0gMSA8PCAxLAorICAgIFJ1bGVJc0luUmVnaW9uUnVsZSAg
ICAgICAgICAgID0gMSA8PCAyLAorICAgIFJ1bGVJc0hvc3RSdWxlICAgICAgICAgICAgICAgID0g
MSA8PCAzLAorfTsKKwogY2xhc3MgQ1NTU2VsZWN0b3I7CiBjbGFzcyBDb250YWluZXJOb2RlOwog
Y2xhc3MgTWVkaWFRdWVyeUV2YWx1YXRvcjsKQEAgLTQwLDcgKzQ4LDcgQEAgY2xhc3MgU3R5bGVT
aGVldENvbnRlbnRzOwogCiBjbGFzcyBSdWxlRGF0YSB7CiBwdWJsaWM6Ci0gICAgUnVsZURhdGEo
U3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRpb24sIGJv
b2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3Rv
ciwgYm9vbCBpblJlZ2lvblJ1bGUpOworICAgIFJ1bGVEYXRhKFN0eWxlUnVsZSosIHVuc2lnbmVk
IHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCBBZGRSdWxlU3RhdGUpOwogCiAgICAg
dW5zaWduZWQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CiAgICAgU3R5
bGVSdWxlKiBydWxlKCkgY29uc3QgeyByZXR1cm4gbV9ydWxlOyB9CkBAIC01NSw2ICs2Myw3IEBA
IHB1YmxpYzoKICAgICB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9s
aW5rTWF0Y2hUeXBlOyB9CiAgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luOyB9CiAgICAgYm9vbCBpc0lu
UmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNJblJlZ2lvblJ1bGU7IH0KKyAgICB2b2lk
IGluY3JlYXNlU3BlY2lmaWNpdHkodW5zaWduZWQgdmFsdWUpIHsgbV9zcGVjaWZpY2l0eSArPSB2
YWx1ZTsgfQogCiAgICAgLy8gVHJ5IHRvIGJhbGFuY2UgYmV0d2VlbiBtZW1vcnkgdXNhZ2UgKHRo
ZXJlIGNhbiBiZSBsb3RzIG9mIFJ1bGVEYXRhIG9iamVjdHMpIGFuZCBnb29kIGZpbHRlcmluZyBw
ZXJmb3JtYW5jZS4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4aW11bUlkZW50aWZpZXJD
b3VudCA9IDQ7CkBAIC05OCw4ICsxMDcsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFJ1bGVz
RnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3Im
LCBTdHlsZVJlc29sdmVyKiA9IDAsIGNvbnN0IENvbnRhaW5lck5vZGUqID0gMCk7CiAKLSAgICB2
b2lkIGFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUgPSBm
YWxzZSk7Ci0gICAgdm9pZCBhZGRSdWxlKFN0eWxlUnVsZSosIHVuc2lnbmVkIHNlbGVjdG9ySW5k
ZXgsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tT
ZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKKyAgICB2b2lkIGFkZFN0eWxl
UnVsZShTdHlsZVJ1bGUqLCBBZGRSdWxlU3RhdGUpOworICAgIHZvaWQgYWRkUnVsZShTdHlsZVJ1
bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCBBZGRSdWxlU3RhdGUpOwogICAgIHZvaWQgYWRk
UGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSopOwogICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0
cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwogICAgIHZvaWQg
YWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IGM3OTMxNTQ2MDg4
MDVjNzUwNjkzODQyMjg4NjA4NTIxYTg2MDEwM2IuLjdjMTIyZmRiYjJkYzZmNTk3NWQ1NjJkMGQ5
YzA4NTAyYWY4M2I3YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTEx
Niw3ICsxMTYsNiBAQAogI2luY2x1ZGUgIlN0eWxlUGVuZGluZ0ltYWdlLmgiCiAjaW5jbHVkZSAi
U3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlSW1wb3J0LmgiCi0jaW5jbHVkZSAiU3R5
bGVTY29wZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5j
bHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBAIC0zNzcsNyArMzc2
LDcgQEAgc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gbWFrZVJ1bGVTZXQoY29uc3QgVmVjdG9y
PFJ1bGVGZWF0dXJlPiYgcnVsZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIE93blB0
cjxSdWxlU2V0PiBydWxlU2V0ID0gUnVsZVNldDo6Y3JlYXRlKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVsZXNbaV0u
cnVsZSwgcnVsZXNbaV0uc2VsZWN0b3JJbmRleCwgcnVsZXNbaV0uaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiwgZmFsc2UpOworICAgICAgICBydWxlU2V0LT5hZGRSdWxlKHJ1bGVzW2ldLnJ1bGUs
IHJ1bGVzW2ldLnNlbGVjdG9ySW5kZXgsIHJ1bGVzW2ldLmhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4gPyBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA6IFJ1bGVIYXNOb1NwZWNpYWxTdGF0
ZSk7CiAgICAgcnVsZVNldC0+c2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gcnVsZVNldC5yZWxl
YXNlKCk7CiB9CkBAIC00MjAsOSArNDE5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBlbmRB
dXRob3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlAKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0ID0g
Y3NzU2hlZXQtPmNvbnRlbnRzKCk7CiAgICAgICAgIGlmIChjb25zdCBDb250YWluZXJOb2RlKiBz
Y29wZSA9IFN0eWxlU2NvcGVSZXNvbHZlcjo6c2NvcGVGb3IoY3NzU2hlZXQpKSB7Ci0gICAgICAg
ICAgICBpZiAoIW1fc2NvcGVSZXNvbHZlcikKLSAgICAgICAgICAgICAgICBtX3Njb3BlUmVzb2x2
ZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTY29wZVJlc29sdmVyKCkpOwotICAgICAgICAgICAgbV9z
Y29wZVJlc29sdmVyLT5lbnN1cmVSdWxlU2V0Rm9yKHNjb3BlKS0+YWRkUnVsZXNGcm9tU2hlZXQo
c2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOworICAgICAgICAgICAgZW5zdXJlU2NvcGVS
ZXNvbHZlcigpLT5lbnN1cmVSdWxlU2V0Rm9yKHNjb3BlKS0+YWRkUnVsZXNGcm9tU2hlZXQoc2hl
ZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KIApAQCAtNzE4LDcgKzcxNSwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OnNvcnRBbmRU
cmFuc2Zlck1hdGNoZWRSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogdm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpCiB7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxFKFNI
QURPV19ET00pCi0gICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIgfHwgIW1fc2NvcGVSZXNvbHZlci0+
aGFzU2NvcGVkU3R5bGVzKCkpCisgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1hdGNoSG9zdFJ1bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOwor
CisgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBNYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzIGJ5IHRyYXZlcnNpbmcg
dGhlIHNjb3BlZCBlbGVtZW50IHN0YWNrIChyZWJ1aWxkIGl0IGlmIGl0IGdvdCBpbmNvbnNpc3Rl
bnQpLgpAQCAtNzUwLDYgKzc1MiwzNSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVk
QXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdAogI2VuZGlm
CiB9CiAKK2lubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1h
dGNoZXNIb3N0UnVsZXMoKQoreworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAgIHJldHVybiBt
X3Njb3BlUmVzb2x2ZXIgJiYgbV9zY29wZVJlc29sdmVyLT5zdHlsZVNoYXJpbmdDYW5kaWRhdGVN
YXRjaGVzSG9zdFJ1bGVzKG1fZWxlbWVudCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorfQorCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0
JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7CisjaWYgRU5BQkxFKFNIQURPV19E
T00pCisgICAgQVNTRVJUKG1fc2NvcGVSZXNvbHZlcik7CisKKyAgICBWZWN0b3I8UnVsZVNldCo+
IG1hdGNoZWRSdWxlczsKKyAgICBtX3Njb3BlUmVzb2x2ZXItPm1hdGNoSG9zdFJ1bGVzKG1fZWxl
bWVudCwgbWF0Y2hlZFJ1bGVzKTsKKyAgICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTWF0Y2hPcHRpb25zIG9wdGlvbnMoaW5jbHVkZUVtcHR5UnVs
ZXMpOworICAgIG9wdGlvbnMuc2NvcGUgPSBtX2VsZW1lbnQ7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSA+IDA7IC0taSkKKyAgICAgICAgY29sbGVjdE1hdGNo
aW5nUnVsZXMobWF0Y2hlZFJ1bGVzLmF0KGktMSksIHJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JS
dWxlLCByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBvcHRpb25zKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVFbXB0eVJ1bGVz
KTsKKyNlbmRpZgorfQorCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoQXV0aG9yUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKICAgICBtX21hdGNo
ZWRSdWxlcy5jbGVhcigpOwpAQCAtMTMzOSw2ICsxMzcwLDkgQEAgUmVuZGVyU3R5bGUqIFN0eWxl
UmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAvLyBDYW4ndCBzaGFyZSBpZiBhdHRy
aWJ1dGUgcnVsZXMgYXBwbHkuCiAgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNS
dWxlU2V0KG1fdW5jb21tb25BdHRyaWJ1dGVSdWxlU2V0LmdldCgpKSkKICAgICAgICAgcmV0dXJu
IDA7CisgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgQGhvc3QgQC1ydWxlcyBhcHBseS4KKyAgICBpZiAo
c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpKQorICAgICAgICByZXR1cm4g
MDsKICAgICAvLyBUcmFja2luZyBjaGlsZCBpbmRleCByZXF1aXJlcyB1bmlxdWUgc3R5bGUgZm9y
IGVhY2ggbm9kZS4gVGhpcyBtYXkgZ2V0IHNldCBieSB0aGUgc2libGluZyBydWxlIG1hdGNoIGFi
b3ZlLgogICAgIGlmIChwYXJlbnRTdHlsZVByZXZlbnRzU2hhcmluZyhtX3BhcmVudFN0eWxlKSkK
ICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCA4Yzk1
ODc4NzcxNjFiOTY2N2Y2ZGNkZjA4MmVkZjJkOGJhNDUwMTRiLi45MTQ4NWYxMDRiNTk4YWJkYzQw
NjcyZThhNjNhMzY3NTQ2MTZkZmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJSdWxlRmVhdHVyZS5oIgogI2luY2x1ZGUgIlNlbGVj
dG9yQ2hlY2tlci5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgorI2luY2x1ZGUg
IlN0eWxlU2NvcGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC04MCw2ICs4MSw3
IEBAIGNsYXNzIFN0eWxlS2V5ZnJhbWU7CiBjbGFzcyBTdHlsZVBlbmRpbmdJbWFnZTsKIGNsYXNz
IFN0eWxlUHJvcGVydHlTZXQ7CiBjbGFzcyBTdHlsZVJ1bGU7CitjbGFzcyBTdHlsZVJ1bGVIb3N0
OwogY2xhc3MgU3R5bGVSdWxlS2V5ZnJhbWVzOwogY2xhc3MgU3R5bGVSdWxlUGFnZTsKIGNsYXNz
IFN0eWxlUnVsZVJlZ2lvbjsKQEAgLTEzNyw2ICsxMzksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBw
b3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIHB1c2hQYXJlbnRTaGFkb3dSb290
KGNvbnN0IFNoYWRvd1Jvb3QqKTsKICAgICB2b2lkIHBvcFBhcmVudFNoYWRvd1Jvb3QoY29uc3Qg
U2hhZG93Um9vdCopOworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAgIHZvaWQgYWRkSG9zdFJ1
bGUoU3R5bGVSdWxlSG9zdCogcnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBj
b25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgeyBlbnN1cmVTY29wZVJlc29sdmVyKCktPmFkZEhv
c3RSdWxlKHJ1bGUsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHNjb3BlKTsgfQorI2VuZGlm
CiAKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCos
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFN0eWxlU2hhcmluZ0JlaGF2aW9yID0gQWxs
b3dTdHlsZVNoYXJpbmcsCiAgICAgICAgIFJ1bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0Y2hBbGxS
dWxlcywgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gMCk7CkBAIC0xNjksMTEgKzE3
NCwxOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVj
dG9yU2NvcGVzKFN0eWxlU2hlZXRDb250ZW50cyosIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+
JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKTsKIAog
cHJpdmF0ZToKKyAgICBTdHlsZVNjb3BlUmVzb2x2ZXIqIGVuc3VyZVNjb3BlUmVzb2x2ZXIoKQor
ICAgIHsKKyAgICAgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAgICAgICBtX3Njb3Bl
UmVzb2x2ZXIgPSBhZG9wdFB0cihuZXcgU3R5bGVTY29wZVJlc29sdmVyKCkpOworICAgICAgICBy
ZXR1cm4gbV9zY29wZVJlc29sdmVyLmdldCgpOworICAgIH0KKwogICAgIHZvaWQgaW5pdEZvclN0
eWxlUmVzb2x2ZShFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgUHNldWRv
SWQgPSBOT1BTRVVETyk7CiAgICAgdm9pZCBpbml0RWxlbWVudChFbGVtZW50Kik7CiAgICAgdm9p
ZCBjb2xsZWN0RmVhdHVyZXMoKTsKICAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUo
KTsKICAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQq
KTsKKyAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKTsKICAg
ICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0
ZWROb2RlQ291bnQpIGNvbnN0OwogICAgIFN0eWxlZEVsZW1lbnQqIGZpbmRTaWJsaW5nRm9yU3R5
bGVTaGFyaW5nKE5vZGUqLCB1bnNpZ25lZCYgY291bnQpIGNvbnN0OwogICAgIGJvb2wgY2FuU2hh
cmVTdHlsZVdpdGhFbGVtZW50KFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKQEAgLTMyNiw2ICszMzks
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1
bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoU2NvcGVkQXV0aG9y
UnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1h
dGNoSG9zdFJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAg
dm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICB2b2lkIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBp
bnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwogICAgIHZvaWQgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQmIGZpcnN0
UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSdWxlLmNwcAppbmRleCA3M2IwYWYyNmNlNDJhYTQ1OTRkOWI3NjE3OTZiMTlk
NmE2YmI2NjVjLi42N2Y3YmM3MjgyNzAyZDVhZWM4YTM0MGRlNjZhNWVlYTMyZDBmZDE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSdWxlLmNwcApAQCAtNzksNiArNzksOSBAQCB2b2lkIFN0eWxlUnVsZUJh
c2U6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8p
IGNvbnN0CiAgICAgY2FzZSBLZXlmcmFtZXM6CiAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFN0
eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UobWVt
b3J5T2JqZWN0SW5mbyk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEhvc3Q6CisgICAgICAg
IHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZUJsb2NrKj4odGhpcyktPnJlcG9ydERlc2NlbmRh
bnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZvKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgVW5rbm93bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlmcmFtZToKQEAgLTEx
Nyw2ICsxMjAsOSBAQCB2b2lkIFN0eWxlUnVsZUJhc2U6OmRlc3Ryb3koKQogICAgIGNhc2UgS2V5
ZnJhbWVzOgogICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4o
dGhpcyk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEhvc3Q6CisgICAgICAgIGRlbGV0ZSBz
dGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4odGhpcyk7CisgICAgICAgIHJldHVybjsKICAgICBj
YXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0x
NTAsNiArMTU2LDggQEAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBTdHlsZVJ1bGVCYXNlOjpj
b3B5KCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBLZXlmcmFtZXM6CiAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMqPih0aGlzKS0+
Y29weSgpOworICAgIGNhc2UgSG9zdDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFN0eWxlUnVsZUhvc3QqPih0aGlzKS0+Y29weSgpOwogICAgIGNhc2UgVW5rbm93bjoKICAgICBj
YXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlmcmFtZToKQEAgLTE5MSw2ICsxOTksNyBAQCBQYXNz
UmVmUHRyPENTU1J1bGU+IFN0eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcihDU1NTdHls
ZVNoZWV0KiBwYXJlbnRTaGVldAogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICBydWxlID0g
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6Y3JlYXRlKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZy
YW1lcyo+KHNlbGYpLCBwYXJlbnRTaGVldCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgSG9z
dDoKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJh
bWU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKaW5kZXggZTE1ZjMyZTQwMmFhZjIwOGQzY2MwZmNjZDM1
ODQ3N2IyMzAzNTYzNC4uYjdmZjUyMzI2Y2JmMjE4NDcyMWExMzQxYzgyOWEzODRmYzRhMzliOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAgICAgICAg
IFBhZ2UsCiAgICAgICAgIEtleWZyYW1lcywKICAgICAgICAgS2V5ZnJhbWUsIC8vIE5vdCB1c2Vk
LiBUaGVzZSBhcmUgaW50ZXJuYWxseSBub24tcnVsZSBTdHlsZUtleWZyYW1lIG9iamVjdHMuCisg
ICAgICAgIEhvc3QsCiAgICAgICAgIFJlZ2lvbiA9IDE2CiAgICAgfTsKICAgICBUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlPihtX3R5cGUpOyB9CkBAIC01OCw2ICs1
OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzU3R5bGVSdWxlKCkgY29uc3QgeyByZXR1cm4gdHlw
ZSgpID09IFN0eWxlOyB9CiAgICAgYm9vbCBpc1JlZ2lvblJ1bGUoKSBjb25zdCB7IHJldHVybiB0
eXBlKCkgPT0gUmVnaW9uOyB9CiAgICAgYm9vbCBpc0ltcG9ydFJ1bGUoKSBjb25zdCB7IHJldHVy
biB0eXBlKCkgPT0gSW1wb3J0OyB9CisgICAgYm9vbCBpc0hvc3RSdWxlKCkgY29uc3QgeyByZXR1
cm4gdHlwZSgpID09IEhvc3Q7IH0KIAogICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gY29w
eSgpIGNvbnN0OwogCkBAIC0yMjMsNiArMjI1LDIwIEBAIHByaXZhdGU6CiAgICAgQ1NTU2VsZWN0
b3JMaXN0IG1fc2VsZWN0b3JMaXN0OwogfTsKIAorY2xhc3MgU3R5bGVSdWxlSG9zdCA6IHB1Ymxp
YyBTdHlsZVJ1bGVCbG9jayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVS
dWxlSG9zdD4gY3JlYXRlKFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxl
cykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVSdWxlSG9zdChhZG9w
dFJ1bGVzKSk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVIb3N0PiBjb3B5KCkg
Y29uc3QgeyByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZUhvc3QoKnRoaXMpKTsgfQorCitw
cml2YXRlOgorICAgIFN0eWxlUnVsZUhvc3QoVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+
JiBhZG9wdFJ1bGVzKSA6IFN0eWxlUnVsZUJsb2NrKEhvc3QsIGFkb3B0UnVsZXMpIHsgfQorICAg
IFN0eWxlUnVsZUhvc3QoY29uc3QgU3R5bGVSdWxlSG9zdCYgbykgOiBTdHlsZVJ1bGVCbG9jayhv
KSB7IH0KK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFN0eWxlUnVs
ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwCmluZGV4IDg3NDAy
YmFhNTk4MTAyNGVlNWQ2NDQ2NWFkMTc4ZGNjYjc5ZGVhOGEuLjI1OTY0NzZmNWJkNTUzNDM5MWI1
NGNlZmZkODc3MGZkYmUxYTA1OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVNjb3BlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVz
b2x2ZXIuY3BwCkBAIC0yOSw4ICsyOSwxMCBAQAogCiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkg
fHwgRU5BQkxFKFNIQURPV19ET00pCiAKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKICNpbmNs
dWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ29udGV4dEZlYXR1cmVzLmgiCisjaW5j
bHVkZSAiRWxlbWVudFNoYWRvdy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
IkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJSdWxlRmVhdHVyZS5oIgpAQCAtMTU0LDEx
ICsxNTYsODkgQEAgdm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmNvbGxlY3RGZWF0dXJlc1RvKFJ1
bGVGZWF0dXJlU2V0JiBmZWF0dXJlcykKICAgICAgICAgZmVhdHVyZXMuYWRkKGl0LT52YWx1ZS0+
ZmVhdHVyZXMoKSk7CiB9CiAKK2lubGluZSBSdWxlU2V0KiBTdHlsZVNjb3BlUmVzb2x2ZXI6OmVu
c3VyZUF0SG9zdFJ1bGVTZXRGb3IoY29uc3QgU2hhZG93Um9vdCogc2hhZG93Um9vdCkKK3sKKyAg
ICBTY29wZWRSdWxlU2V0TWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9hdEhvc3RSdWxlcy5h
ZGQoc2hhZG93Um9vdCwgbnVsbHB0cik7CisgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gUnVsZVNldDo6Y3JlYXRlKCk7Cisg
ICAgcmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Cit9CisKK2lubGluZSBS
dWxlU2V0KiBTdHlsZVNjb3BlUmVzb2x2ZXI6OmF0SG9zdFJ1bGVTZXRGb3IoY29uc3QgU2hhZG93
Um9vdCogc2hhZG93Um9vdCkgY29uc3QKK3sKKyAgICBTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fYXRIb3N0UnVsZXMuZmluZChzaGFkb3dSb290KTsKKyAgICByZXR1cm4g
aXQgIT0gbV9hdEhvc3RSdWxlcy5lbmQoKSA/IGl0LT52YWx1ZS5nZXQoKSA6IDA7Cit9CisKK3Zv
aWQgU3R5bGVTY29wZVJlc29sdmVyOjphZGRIb3N0UnVsZShTdHlsZVJ1bGVIb3N0KiBob3N0UnVs
ZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjb25zdCBDb250YWluZXJOb2RlKiBz
Y29wZSkKK3sKKyAgICBpZiAoIXNjb3BlIHx8ICFzY29wZS0+aXNJblNoYWRvd1RyZWUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IHNjb3BlLT5zaGFk
b3dSb290KCk7CisgICAgaWYgKCFzaGFkb3dSb290IHx8ICFzaGFkb3dSb290LT5ob3N0KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFJ1bGVTZXQqIHJ1bGUgPSBlbnN1cmVBdEhvc3RSdWxlU2V0
Rm9yKHNoYWRvd1Jvb3QpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNl
PiA+JiBjaGlsZFJ1bGVzID0gaG9zdFJ1bGUtPmNoaWxkUnVsZXMoKTsKKyAgICBBZGRSdWxlU3Rh
dGUgYWRkUnVsZVN0YXRlID0gaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA/IFJ1bGVIYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luIDogUnVsZUhhc05vU3BlY2lhbFN0YXRlOworICAgIGFkZFJ1bGVT
dGF0ZSA9IHN0YXRpY19jYXN0PEFkZFJ1bGVTdGF0ZT4oYWRkUnVsZVN0YXRlIHwgUnVsZUNhblVz
ZUZhc3RDaGVja1NlbGVjdG9yIHwgUnVsZUlzSG9zdFJ1bGUpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjaGlsZFJ1bGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0eWxlUnVsZUJh
c2UqIGhvc3RTdHlsaW5nUnVsZSA9IGNoaWxkUnVsZXNbaV0uZ2V0KCk7CisgICAgICAgIGlmICho
b3N0U3R5bGluZ1J1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICBydWxlLT5hZGRTdHls
ZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4oaG9zdFN0eWxpbmdSdWxlKSwgYWRkUnVsZVN0
YXRlKTsKKyAgICB9Cit9CisKK2Jvb2wgU3R5bGVTY29wZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAg
aWYgKG1fYXRIb3N0UnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBFbGVtZW50U2hhZG93KiBzaGFkb3cgPSBlbGVtZW50LT5zaGFkb3coKTsKKyAgICBpZiAoIXNo
YWRvdykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUUoOTk4MjcpOiBhZGQg
YSBuZXcgZmxhZyB0byBFbGVtZW50U2hhZG93IGFuZCBjYWNoZSB3aGV0aGVyIGFueQorICAgIC8v
IEBob3N0IEAtcnVsZXMgYXJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQgb3Igbm90LiBTbyB3ZSBj
YW4gYXZvaWQgYWx3YXlzCisgICAgLy8gdHJhdmVyc2luZyBzaGFkb3cgcm9vdHMuCisgICAgZm9y
IChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsg
c2hhZG93Um9vdDsgc2hhZG93Um9vdCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7
CisgICAgICAgIGlmIChhdEhvc3RSdWxlU2V0Rm9yKHNoYWRvd1Jvb3QpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFkb3dJbnNlcnRp
b25Qb2ludCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKGNvbnN0IEVsZW1l
bnQqIGVsZW1lbnQsIFZlY3RvcjxSdWxlU2V0Kj4mIG1hdGNoZWRSdWxlcykKK3sKKyAgICBpZiAo
bV9hdEhvc3RSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEVsZW1lbnRT
aGFkb3cqIHNoYWRvdyA9IGVsZW1lbnQtPnNoYWRvdygpOworICAgIGlmICghc2hhZG93KQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRSg5OTgyNyk6IGFkZCBhIG5ldyBmbGFnIHRvIEVs
ZW1lbnRTaGFkb3cgYW5kIGNhY2hlIHdoZXRoZXIgYW55CisgICAgLy8gQGhvc3QgQC1ydWxlcyBh
cmUgYXBwbGllZCB0byB0aGUgZWxlbWVudCBvciBub3QuIFNvIHdlIGNhbiBxdWlja2x5CisgICAg
Ly8gZXhpdCB0aGlzIG1ldGhvZCBieSB1c2luZyB0aGUgZmxhZy4KKyAgICBmb3IgKFNoYWRvd1Jv
b3QqIHNoYWRvd1Jvb3QgPSBzaGFkb3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dSb290
OyBzaGFkb3dSb290ID0gc2hhZG93Um9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsgCisgICAgICAg
IGlmIChSdWxlU2V0KiBydWxlU2V0ID0gYXRIb3N0UnVsZVNldEZvcihzaGFkb3dSb290KSkKKyAg
ICAgICAgICAgIG1hdGNoZWRSdWxlcy5hcHBlbmQocnVsZVNldCk7CisgICAgICAgIGlmICghc2hh
ZG93Um9vdC0+aGFzU2hhZG93SW5zZXJ0aW9uUG9pbnQoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKwogdm9pZCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1l
bW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xh
c3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpD
U1MpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fYXV0aG9yU3R5bGVzKTsKICAgICBpbmZvLmFkZE1l
bWJlcihtX3N0YWNrKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX2F0SG9zdFJ1bGVzKTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCmluZGV4IDVhMzJkZmU3OWY4
MzViYjdjZjk1YjhjN2RkOWIzYmI3MDQxZmI3ZmIuLjg1YzFkMDEwMDZhZDZjYzZmNDg5MDExNTA1
MDljYzM0OGIyZDZiMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3Bl
UmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgK
QEAgLTM3LDggKzM3LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29udGFpbmVy
Tm9kZTsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBFbGVtZW50OwogY2xhc3MgUnVsZVNl
dDsKIGNsYXNzIFJ1bGVGZWF0dXJlU2V0OworY2xhc3MgU2hhZG93Um9vdDsKK2NsYXNzIFN0eWxl
UnVsZUhvc3Q7CiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RP
TSkKIApAQCAtNzIsMTIgKzc1LDE4IEBAIHB1YmxpYzoKICAgICBib29sIG1hdGNoZXNTdHlsZUJv
dW5kcyhjb25zdCBTdGFja0ZyYW1lJiBmcmFtZSkgY29uc3QgeyByZXR1cm4gZnJhbWUubV9hdXRo
b3JTdHlsZUJvdW5kc0luZGV4ID09IG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleDsgfQogICAgIHZv
aWQgY29sbGVjdEZlYXR1cmVzVG8oUnVsZUZlYXR1cmVTZXQmKTsKIAorICAgIHZvaWQgYWRkSG9z
dFJ1bGUoU3R5bGVSdWxlSG9zdCosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY29u
c3QgQ29udGFpbmVyTm9kZSogc2NvcGUpOworICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRl
TWF0Y2hlc0hvc3RSdWxlcyhjb25zdCBFbGVtZW50Kik7CisgICAgdm9pZCBtYXRjaEhvc3RSdWxl
cyhjb25zdCBFbGVtZW50KiwgVmVjdG9yPFJ1bGVTZXQqPiYgbWF0Y2hlZFJ1bGVzKTsKKwogICAg
IHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIFJ1bGVTZXQqIHJ1bGVTZXRGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUp
IGNvbnN0OwogICAgIHZvaWQgc2V0dXBTdGFjayhjb25zdCBDb250YWluZXJOb2RlKik7CiAgICAg
Ym9vbCBzdGFja0lzQ29uc2lzdGVudChjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQpIGNvbnN0
IHsgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQgPT0gbV9zdGFja1BhcmVudDsgfQorICAgIFJ1bGVT
ZXQqIGVuc3VyZUF0SG9zdFJ1bGVTZXRGb3IoY29uc3QgU2hhZG93Um9vdCopOworICAgIFJ1bGVT
ZXQqIGF0SG9zdFJ1bGVTZXRGb3IoY29uc3QgU2hhZG93Um9vdCopIGNvbnN0OwogCiAgICAgU2Nv
cGVkUnVsZVNldE1hcCBtX2F1dGhvclN0eWxlczsKIApAQCAtODgsNiArOTcsOCBAQCBwcml2YXRl
OgogICAgIC8vIFRoaXMgaXMgdXNlZCB0byBkZWNpZGUgd2hldGhlciBtX3Njb3BpbmdFbGVtZW50
U3RhY2sgaXMgY29uc2lzdGVudCwgc2VwYXJhdGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tlcjo6bV9w
YXJlbnRTdGFjay4KICAgICBjb25zdCBDb250YWluZXJOb2RlKiBtX3N0YWNrUGFyZW50OwogICAg
IGludCBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXg7CisKKyAgICBTY29wZWRSdWxlU2V0TWFwIG1f
YXRIb3N0UnVsZXM7CiB9OwogCiBpbmxpbmUgYm9vbCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3Vy
ZVN0YWNrQ29uc2lzdGVuY3koQ29udGFpbmVyTm9kZSogcGFyZW50KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAppbmRleCBlN2NlODFlYWFiNDg3MTg2MjRmNGViNTUy
MzhlNWMxYWYzNTY4NWI4Li4zOWU5YTdiMmNkNmMyMTkzYmIwNDk4MGZhODhhODI3MjFlNGEyM2Rl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcApAQCAtNDM1LDYg
KzQzNSwxMCBAQCBzdGF0aWMgYm9vbCBjaGlsZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJy
ZXNvdXJjZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZQogICAgICAgICAgICAgaWYgKGNoaWxk
UnVsZXNIYXZlRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNlcyhzdGF0aWNfY2FzdDxjb25zdCBT
dHlsZVJ1bGVSZWdpb24qPihydWxlKS0+Y2hpbGRSdWxlcygpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0eWxlUnVsZUJh
c2U6Okhvc3Q6CisgICAgICAgICAgICBpZiAoY2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVk
U3VicmVzb3VyY2VzKHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZUhvc3QqPihydWxlKS0+Y2hp
bGRSdWxlcygpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFN0eWxlUnVsZUJhc2U6OkltcG9ydDoKICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBjYXNlIFN0eWxlUnVsZUJhc2U6OlBhZ2U6CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggYzRjYzgxYWEzMjQ1MmFjM2MyZWQ1ZTZkYzc4ZTliNzE0MzEyNGU3Ny4uZmExYzcwYjA5
YzIzODM4ZTU1OWMxNzhjNGU1YjhjZjMwNWE0MGYyYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDEyLTEwLTEyICBUYWthc2hpIFNha2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBbU2hhZG93IERPTV0gTmVlZHMgQGhvc3QgcnVsZSBmb3IgU2hhZG93RE9NIHN0eWxpbmcKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjA2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9z
aGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMuaHRtbDogQWRkZWQuCisKIDIwMTItMTAtMTggIEtl
bnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gVGVz
dCBleHBlY3RhdGlvbiB1cGRhdGUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9z
aGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
c2hhZG93L2F0aG9zdC1hdHJ1bGVzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMWYzYjFjMjU1
MTY5NTY3ODcyNWJkNjY1MTgxMzEzNDM4NjQ5YTE0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDE1IEBACitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdDogcmdiKDI1NSwgMCwgMCkKK2hv
c3RBOiByZ2IoMjU1LCAwLCAwKQoraG9zdEI6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMCwg
MCwgMjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAxMjgpCitob3N0OiByZ2IoMCwgMCwgMjU1KQor
aG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigxMjgsIDEyOCwgMTI4KQoraG9zdDogcmdi
KDI1NSwgMjU1LCAwKQoraG9zdDogcmdiKDI1NSwgMCwgMCkKK25lc3RlZEhvc3Q6IHJnYigwLCAw
LCAyNTUpCitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdDogcmdiKDI1NSwgMjU1LCAwKQorSGVs
bG8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxl
cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uN2Q0YjUxMWVlMDJmYTlkNzUxZTU3ZTE2OWIwMGE2ZDg3N2Q1M2E2ZAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxl
cy5odG1sCkBAIC0wLDAgKzEsMTkwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
Cis8c3R5bGU+CisjaG9zdCB7CisgIGNvbG9yOiBncmF5OworfQorPC9zdHlsZT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9wb2x5ZmlsbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZnVuY3Rp
b24gZHVtcENvbXB1dGVkU3R5bGUobm9kZSkKK3sKKyAgICBkZWJ1Zyhub2RlLmlkICsgIjogIiAr
IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJv
cGVydHlWYWx1ZSgnY29sb3InKSk7Cit9CisKK2Z1bmN0aW9uIHByZXByb2Nlc3NGb3JUZXN0KCkK
K3sKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcmVudCIpOwor
ICAgIHBhcmVudC5pbm5lckhUTUwgPSAnPGRpdiBpZD0iaG9zdCI+PHNwYW4+SGVsbG88L3NwYW4+
PC9kaXY+JzsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZUNvbnRlbnRDYXNlKCkKK3sKKyAgICBw
cmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7
CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVk
OyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxl
KGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlU2hhZG93Q2FzZSgpCit7CisgICAgcHJl
cHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJob3N0Iik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOwor
ICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsg
fSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9z
dCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0V2l0aFNlbGVjdG9yKCkKK3sKKyAgICB2YXIgcGFy
ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcmVudCIpOworICAgIHBhcmVudC5pbm5l
ckhUTUwgPSAiPHN0eWxlIHNjb3BlZD4gLmhvc3QgeyBjb2xvcjogZ3JheSB9Ozwvc3R5bGU+Igor
ICAgICAgICArICI8ZGl2IGlkPSdob3N0QScgY2xhc3M9J2hvc3QnPjxzcGFuPkhlbGxvPC9zcGFu
PjwvZGl2PiIKKyAgICAgICAgKyAiPHNwYW4gaWQ9J2hvc3RCJyBjbGFzcz0naG9zdCc+PHNwYW4+
V29ybGQ8L3NwYW4+PC9zcGFuPiI7CisKKyAgICB2YXIgaG9zdEEgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiaG9zdEEiKTsKKyAgICB2YXIgc2hhZG93QSA9IG5ldyBXZWJLaXRTaGFkb3dSb290
KGhvc3RBKTsKKyAgICB2YXIgc3R5bGUgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJl
ZDsgfSBzcGFuIHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+IjsKKyAgICBzaGFkb3dBLmlubmVy
SFRNTCA9IHN0eWxlICsgIjxzaGFkb3c+PC9zaGFkb3c+IjsKKworICAgIHZhciBob3N0QiA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0QiIpOworICAgIHZhciBzaGFkb3dCID0gbmV3IFdl
YktpdFNoYWRvd1Jvb3QoaG9zdEIpOworICAgIHNoYWRvd0IuaW5uZXJIVE1MID0gc3R5bGUgKyAi
PHNoYWRvdz48L3NoYWRvdz4iOworCisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdEEpOworICAg
IGR1bXBDb21wdXRlZFN0eWxlKGhvc3RCKTsKK30KKworZnVuY3Rpb24gdGVzdFBzZXVkb0hvc3RX
aXRoU2NvcGVkKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdl
YktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8ZGl2PjxzdHls
ZSBzY29wZWQ+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9z
aGFkb3c+PGRpdj48c3R5bGUgc2NvcGVkPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwv
c3R5bGU+PC9kaXY+PC9kaXY+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKwor
ZnVuY3Rpb24gdGVzdFBzZXVkb0hvc3RXaXRoRmFsbGJhY2tTaGFkb3coKQoreworICAgIHByZXBy
b2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
aG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsK
KyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9y
OiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgeW91bmdlc3RTaGFk
b3cuaW5uZXJIVE1MID0gIjxjb250ZW50PjxzaGFkb3c+PC9zaGFkb3c+PC9jb250ZW50PiI7Cisg
ICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RUd29TaGFkb3dS
b290c0Nhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBu
ZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcg
V2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxz
dHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250
ZW50PiI7CisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRp
diB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBkdW1w
Q29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFR3b1NoYWRvd1Jvb3RzQ3Jl
YXRpbmdEaWZmZXJlbnRPcmRlckNhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7Cisg
ICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBv
bGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdl
c3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB5b3VuZ2VzdFNoYWRv
dy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5
bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0
eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRl
bnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdE11
bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50KCkKK3sKKyAgICBwcmVwcm9j
ZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhv
c3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7
CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAg
dmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIg
eW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKworICAgIHlvdW5n
ZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c2hhZG93Pjwvc2hhZG93PiI7CisgICAgeW91bmdlclNo
YWRvdy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgb2xkZXJTaGFkb3cu
aW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBncmVlbjsgfSB9PC9zdHls
ZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5
bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVu
dD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0TXVs
dGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvdygpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRl
c3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7Cisg
ICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZh
ciBvbGRlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3Vu
Z2VyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXN0
U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisKKyAgICB5b3VuZ2VzdFNoYWRv
dy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHllbGxvdzsgfSB9PC9z
dHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgeW91bmdlclNoYWRvdy5pbm5lckhUTUwgPSAi
PHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+PGRpdj5pbmVydDwv
ZGl2PiI7CisgICAgb2xkZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7
IGNvbG9yOiBncmVlbjsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0
U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08
L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3Qp
OworfQorCitmdW5jdGlvbiB0ZXN0TmVzdGVkQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRl
c3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7Cisg
ICAgdmFyIG91dGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgb3V0
ZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0g
fTwvc3R5bGU+PGRpdiBpZD0ibmVzdGVkSG9zdCI+SW5uZXJTaGFkb3c8L2Rpdj4nOworICAgIHZh
ciBuZXN0ZWQgPSBvdXRlclNoYWRvdy5nZXRFbGVtZW50QnlJZCgibmVzdGVkSG9zdCIpOworICAg
IHZhciBpbm5lclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KG5lc3RlZCk7CisgICAgaW5u
ZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBibHVlOyB9
IH08L3N0eWxlPlNob3cgPHNoYWRvdz48L3NoYWRvdz4gaW4gb3V0ZXIuJzsKKyAgICBkdW1wQ29t
cHV0ZWRTdHlsZShob3N0KTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShuZXN0ZWQpOworfQorCitm
dW5jdGlvbiB0ZXN0SG9zdFZzU2NvcGVkU3R5bGUoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0
KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAg
IGhvc3QuaW5uZXJIVE1MID0gIjxzdHlsZSBzY29wZWQ+I2hvc3QgeyBjb2xvcjogeWVsbG93OyB9
PC9zdHlsZT48c3Bhbj5IZWxsbzwvc3Bhbj4iOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0
U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7
ICNob3N0IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAg
ICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdEhvc3RWc0lubGlu
ZVN0eWxlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICBob3N0LnN0eWxlLmNvbG9yID0gInll
bGxvdyI7CisgICAgaG9zdC5pbm5lckhUTUwgPSAiPHNwYW4+SGVsbG88L3NwYW4+IjsKKyAgICB2
YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVy
SFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250
ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5j
dGlvbiBydW5UZXN0cygpCit7CisgICAgdGVzdFNpbXBsZUNvbnRlbnRDYXNlKCk7CisgICAgdGVz
dFNpbXBsZVNoYWRvd0Nhc2UoKTsKKyAgICB0ZXN0SG9zdFdpdGhTZWxlY3RvcigpOworICAgIHRl
c3RQc2V1ZG9Ib3N0V2l0aFNjb3BlZCgpOworICAgIHRlc3RQc2V1ZG9Ib3N0V2l0aEZhbGxiYWNr
U2hhZG93KCk7CisgICAgdGVzdFR3b1NoYWRvd1Jvb3RzQ2FzZSgpOworICAgIHRlc3RUd29TaGFk
b3dSb290c0NyZWF0aW5nRGlmZmVyZW50T3JkZXJDYXNlKCk7CisgICAgdGVzdE11bHRpcGxlU2hh
ZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50KCk7CisgICAgdGVzdE11bHRpcGxlU2hhZG93
Um9vdHNXaXRoSW5lcnRTaGFkb3coKTsKKyAgICB0ZXN0TmVzdGVkQ2FzZSgpOworICAgIHRlc3RI
b3N0VnNTY29wZWRTdHlsZSgpOworICAgIHRlc3RIb3N0VnNJbmxpbmVTdHlsZSgpOworfQorPC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCkiPgorICA8ZGl2IGlkPSJw
YXJlbnQiPgorICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170124</attachid>
            <date>2012-10-23 04:49:18 -0700</date>
            <delta_ts>2012-10-23 19:10:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88606-20121023204755.patch</filename>
            <type>text/plain</type>
            <size>43463</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzNlMmQ3NTUyYTVkYWMy
YWEzYTgwMGMzZGIwNGMwOWY3NWRmYmE3OS4uZThmYjViODhiZTJhZDQwMWQxMGZhMDY1MjZlNTYw
MDgzMWFiOWJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMiBAQAorMjAxMi0xMC0xMiAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01d
IE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIEBob3N0LUBydWxlcyBh
Y2NvcmRpbmcgdG8gdGhlIHNoYWRvdyBkb20gc3BlYzoKKyAgICAgICAgaHR0cDovL2R2Y3MudzMu
b3JnL2hnL3dlYmNvbXBvbmVudHMvcmF3LWZpbGUvdGlwL3NwZWMvc2hhZG93L2luZGV4Lmh0bWwj
aG9zdC1hdC1ydWxlCisgICAgICAgIFRoZSBkZXNpZ24gZG9jIGlzOgorICAgICAgICBodHRwczov
L2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFQMnlvcmNoRjhsY2kyc2Njci1tVlNSZjJkdHZq
S2VpdXlRV3pDQjJiRUE4L2VkaXQKKworICAgICAgICBUZXN0OiBmYXN0L2RvbS9zaGFkb3cvYXRo
b3N0LWF0cnVsZXMuaHRtbAorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIueS5pbjoKKyAgICAg
ICAgQWRkZWQgcnVsZXMgZm9yIHBhcnNpbmcgQGhvc3QgQC1ydWxlcy4KKyAgICAgICAgKiBjc3Mv
Q1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tl
bik6CisgICAgICAgIEFkZGVkIGEgbmV3IHRva2VuICJAaG9zdCIuCisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxlKToKKyAgICAgICAgQWRkZWQgYSBuZXcgbWV0aG9k
IHRvIGNyZWF0ZSBhbiBAaG9zdCBALXJ1bGUsIHdoaWNoIGlzIGludm9rZWQgZnJvbQorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICBBZGRlZCBh
IGRlY2xhcmF0aW9uIG9mIHRoZSBhYm92ZSBuZXcgbWV0aG9kOiBjcmVhdGVIb3N0UnVsZS4KKyAg
ICAgICAgKiBjc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmg6CisgICAgICAgIEFkZGVkIEhPU1Rf
UlVMRSB0byBlbnVtIFR5cGUuCisgICAgICAgICogY3NzL1J1bGVTZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UnVsZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgTW9kaWZpZWQgbXVsdGlwbGUg
Ym9vbCBhcmd1bWVudHMgaW50byBvbmUgYXJndW1lbnQuIE5vdyBpdAorICAgICAgICB1c2VzIGNv
bWJpbmF0aW9ucyBvZiB2YWx1ZXMgZnJvbSBlbnVtIEFkZFJ1bGVGbGFnLgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRS
ZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFN0eWxlUnVsZSk6Cisg
ICAgICAgIFVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBSdWxlRGF0YSdzIGNoYW5nZS4KKyAgICAg
ICAgTW9kaWZpZWQgdG8gSW52b2tlIGluY3JlYXNlU3BlY2lmaWNpdHkgaWYgdGhlIGdpdmVuIHJ1
bGUgaXMgQGhvc3QKKyAgICAgICAgQC1ydWxlLgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6
YWRkUnVsZXNGcm9tU2hlZXQpOgorICAgICAgICBJbnZva2VkIGFkZEhvc3RSdWxlIGlmIHRoZSBn
aXZlbiBydWxlIGlzIEBob3N0IEAtcnVsZS4KKyAgICAgICAgKiBjc3MvUnVsZVNldC5oOgorICAg
ICAgICAoUnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmluY3JlYXNlU3Bl
Y2lmaWNpdHkpOgorICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgdG8gaW5jcmVhc2Ugc2VsZWN0
b3IncyBzcGVjaWZpY2l0eS4gVGhpcyBtZXRob2QgaXMKKyAgICAgICAgdXNlZCB0byBtYWtlIEBo
b3N0IEAtcnVsZXMnIHNwZWNpZmljaXR5IGxhcmdlciB0aGFuIG5vcm1hbCBhdXRob3IKKyAgICAg
ICAgcnVsZXMnIHNwZWNpZmljaXR5LgorICAgICAgICAoUnVsZVNldCk6CisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJ1bGVTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRkSG9zdFJ1bGUpOgorICAgICAgICBBIHdy
YXBwZXIgbWV0aG9kIHRvIGludm9rZSBTdHlsZVNjb3BlUmVzb2x2ZXI6OmFkZEhvc3RSdWxlLiBU
aGUgbWV0aG9kCisgICAgICAgIGlzIHVzZWQgdG8gbWFrZSBvbmx5IFN0eWxlUmVzb2x2ZXIga25v
dyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYWJvdXQKKyAgICAgICAgY2xhc3MgU3R5bGVTY29w
ZVJlc29sdmVyLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9y
U3R5bGVzaGVldHMpOgorICAgICAgICBVcGRhdGVkIGFjY29yZGluZyB0byB0aGUgUnVsZURhdGEn
cyBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQg
bWF0Y2hlZCBob3N0IHJ1bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhp
cyBtZXRob2QgaW52b2tlcworICAgICAgICBTdHlsZVNjb3BlUmVzb2x2ZXI6OnN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMgdG8gZmluZAorICAgICAgICBtYXRjaGVkIGhvc3Qg
cnVsZXMuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Om1hdGNoSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgbWF0Y2hl
ZCBob3N0IHJ1bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhpcyBtZXRo
b2QgaW52b2tlcyBTdHlsZVNjb3BlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzIHRvIGZpbmQKKyAg
ICAgICAgbWF0Y2hlZCBob3N0IHJ1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyk6CisgICAgICAgIE1vZGlmaWVkIHRvIGludm9rZSBt
YXRjaEhvc3RSdWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNo
YXJlZFN0eWxlKToKKyAgICAgICAgRGlzYWJsZSBzaWJsaW5nIHN0eWxlIGNhY2hlIGlmIHRoZSBn
aXZlbiBlbGVtZW50IGlzIGEgc2hhZG93IGhvc3QgYW5kCisgICAgICAgIGFueSBAaG9zdCBALXJ1
bGVzIGFyZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LgorICAgICAgICAqIGNzcy9TdHlsZVJlc29s
dmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjplbnN1cmVTY29wZVJlc29s
dmVyKToKKyAgICAgICAgSWYgbm8gc2NvcGVSZXNvbHZlciBpcyBjcmVhdGVkLCBjcmVhdGUgYW5k
IHJldHVybiB0aGUgaW5zdGFuY2UuCisgICAgICAgIElmIGNyZWF0ZWQsIGp1c3QgcmV0dXJuIHRo
ZSBpbnN0YW5jZS4KKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9TdHls
ZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6cmVwb3J0TWVtb3J5
VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJveSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KToKKyAgICAgICAgSW1wbGVtZW50ZWQgY2xhc3MgU3R5
bGVSdWxlSG9zdC4gVGhlIGNsYXNzIGlzIGFsbW9zdCB0aGUgc2FtZSBhcworICAgICAgICBTdHls
ZVJ1bGVCbG9jayBleGNlcHQgdHlwZS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNz
cy9TdHlsZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmlzSG9zdFJ1
bGUpOgorICAgICAgICAoU3R5bGVSdWxlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1
bGVIb3N0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y29weSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlQXRIb3N0UnVs
ZVNldEZvcik6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUnVsZVNldCBm
b3IgdGhlIGdpdmVuIHNoYWRvdyByb290LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OmF0SG9zdFJ1bGVTZXRGb3IpOgorICAgICAgICBB
IG5ldyBwcml2YXRlIGlubGluZSBtZXRob2QgdG8gb2J0YWluIEBob3N0IEAtcnVsZXMgZGVjbGFy
ZWQgaW4KKyAgICAgICAgdGhlIGdpdmVuIHNoYWRvdyByb290LgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVTY29wZVJlc29sdmVyOjphZGRIb3N0UnVsZSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1l
dGhvZCB0byByZWdpc3RlciBAaG9zdCBALXJ1bGVzIHdpdGggc2hhZG93IHJvb3RzLgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRj
aGVzSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgd2hldGhlciBhbnkg
QGhvc3QgQC1ydWxlcyBhcmUgYXBwbGllZCB0bworICAgICAgICB0aGUgZ2l2ZW4gaG9zdCBlbGVt
ZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjptYXRjaEhvc3RSdWxl
cyk6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBmaW5kIG1hdGNoZWQgcnVsZXMgZm9yIHRoZSBn
aXZlbiBob3N0IGVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6
OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN0eWxlU2NvcGVSZXNvbHZlcik6CisgICAg
ICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGls
ZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMpOgorCiAyMDEyLTEwLTIyICBL
ZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBJbnRyb2R1Y2UgTG9j
YWxpemVyOjpzdGFuZEFsb25lTW9udGhMYWJlbHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFtbWFyLnkuaW4gYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55Lmlu
CmluZGV4IDRiODk0ZmI5NTk3ZGVmNTJhMjRiOTNmZDU0ZWY3NDMyNDBhNWM3NjguLjQwNDUxMTM1
Y2NjMDg1MmFmYTRlMzk5YjE1MTE1MzBmZDQ2ZTFkYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1t
YXIueS5pbgpAQCAtOTUsNiArOTUsOSBAQCBzdGF0aWMgaW5saW5lIGludCBjc3N5eWVycm9yKHZv
aWQqLCBjb25zdCBjaGFyKikKICV0b2tlbiBTVVBQT1JUU19TWU0KICNlbmRpZgogJXRva2VuIEZP
TlRfRkFDRV9TWU0KKyNpZiBFTkFCTEVfU0hBRE9XX0RPTQorJXRva2VuIEhPU1RfU1lNCisjZW5k
aWYKICV0b2tlbiBDSEFSU0VUX1NZTQogJXRva2VuIE5BTUVTUEFDRV9TWU0KICV0b2tlbiBWQVJG
VU5DVElPTgpAQCAtMTg3LDYgKzE5MCw5IEBAIHN0YXRpYyBpbmxpbmUgaW50IGNzc3l5ZXJyb3Io
dm9pZCosIGNvbnN0IGNoYXIqKQogJXR5cGUgPHJ1bGU+IHBhZ2UKICV0eXBlIDxydWxlPiBtYXJn
aW5fYm94CiAldHlwZSA8cnVsZT4gZm9udF9mYWNlCisjaWYgRU5BQkxFX1NIQURPV19ET00KKyV0
eXBlIDxydWxlPiBob3N0CisjZW5kaWYKICV0eXBlIDxydWxlPiBrZXlmcmFtZXMKICV0eXBlIDxy
dWxlPiBpbnZhbGlkX3J1bGUKICV0eXBlIDxydWxlPiBzYXZlX2Jsb2NrCkBAIC00MDIsNiArNDA4
LDkgQEAgdmFsaWRfcnVsZToKICNpZiBFTkFCTEVfQ1NTM19DT05ESVRJT05BTF9SVUxFUwogICB8
IHN1cHBvcnRzCiAjZW5kaWYKKyNpZiBFTkFCTEVfU0hBRE9XX0RPTQorICB8IGhvc3QKKyNlbmRp
ZgogICA7CiAKIHJ1bGU6CkBAIC05MDEsNiArOTEwLDI1IEBAIGZvbnRfZmFjZToKICAgICB9CiA7
CiAKKyNpZiBFTkFCTEVfU0hBRE9XX0RPTQorYmVmb3JlX2hvc3RfcnVsZToKKyAgICAvKiBlbXB0
eSAqLyB7CisgICAgICAgIHBhcnNlci0+bWFya1J1bGVIZWFkZXJTdGFydChDU1NSdWxlU291cmNl
RGF0YTo6SE9TVF9SVUxFKTsKKyAgICB9CisgICAgOworCitob3N0OgorICAgIGJlZm9yZV9ob3N0
X3J1bGUgSE9TVF9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlCisgICAgJ3snIGF0
X3J1bGVfYm9keV9zdGFydCBtYXliZV9zcGFjZSBibG9ja19ydWxlX2xpc3Qgc2F2ZV9ibG9jayB7
CisgICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVIb3N0UnVsZSgkNyk7CisgICAgfQorICAgIHwg
YmVmb3JlX2hvc3RfcnVsZSBIT1NUX1NZTSBhdF9ydWxlX2hlYWRlcl9lbmRfbWF5YmVfc3BhY2Ug
JzsnIHsKKyAgICAgICAgJCQgPSAwOworICAgICAgICBwYXJzZXItPnBvcFJ1bGVEYXRhKCk7Cisg
ICAgfQorICAgIDsKKyNlbmRpZgorCiByZWdpb25fc2VsZWN0b3I6CiAgICAgc2VsZWN0b3JfbGlz
dCB7CiAgICAgICAgIGlmICgkMSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCBkMTY1
MzdlNmNlZThkYjNkNTllNmExNWE1MzJhNDQ2YmMxZTU0OWVhLi4xNWU1Y2NlYWE1MGUxMTBmMmRi
YjJjM2QzNjIxMzkwMzQ3Njc5YjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtOTE4
NSw2ICs5MTg1LDEzIEBAIGlubGluZSB2b2lkIENTU1BhcnNlcjo6ZGV0ZWN0QXRUb2tlbihpbnQg
bGVuZ3RoLCBib29sIGhhc0VzY2FwZSkKICAgICAgICAgICAgIG1fdG9rZW4gPSBGT05UX0ZBQ0Vf
U1lNOwogICAgICAgICByZXR1cm47CiAKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKKyAgICBjYXNl
ICdoJzoKKyAgICAgICAgaWYgKGxlbmd0aCA9PSA1ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIo
bmFtZSArIDIsICJvc3QiKSkKKyAgICAgICAgICAgIG1fdG9rZW4gPSBIT1NUX1NZTTsKKyAgICAg
ICAgcmV0dXJuOworI2VuZGlmCisKICAgICBjYXNlICdpJzoKICAgICAgICAgaWYgKGxlbmd0aCA9
PSA3ICYmIGlzRXF1YWxUb0NTU0lkZW50aWZpZXIobmFtZSArIDIsICJtcG9ydCIpKSB7CiAgICAg
ICAgICAgICBtX3BhcnNpbmdNb2RlID0gTWVkaWFRdWVyeU1vZGU7CkBAIC0xMDAxNyw2ICsxMDAy
NCwyNCBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZUZvbnRGYWNlUnVsZSgpCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2lmIEVOQUJMRShTSEFET1dfRE9NKQorU3R5bGVSdWxl
QmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVIb3N0UnVsZShSdWxlTGlzdCogcnVsZXMpCit7CisgICAg
bV9hbGxvd0ltcG9ydFJ1bGVzID0gbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNl
OworICAgIFJlZlB0cjxTdHlsZVJ1bGVIb3N0PiBydWxlOworICAgIGlmIChydWxlcykKKyAgICAg
ICAgcnVsZSA9IFN0eWxlUnVsZUhvc3Q6OmNyZWF0ZSgqcnVsZXMpOworICAgIGVsc2UgeworICAg
ICAgICBSdWxlTGlzdCBlbXB0eVJ1bGVzOworICAgICAgICBydWxlID0gU3R5bGVSdWxlSG9zdDo6
Y3JlYXRlKGVtcHR5UnVsZXMpOworICAgIH0KKyAgICBTdHlsZVJ1bGVIb3N0KiByZXN1bHQgPSBy
dWxlLmdldCgpOworICAgIG1fcGFyc2VkUnVsZXMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKKyAg
ICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKyNlbmRpZgorCiB2b2lkIENTU1BhcnNlcjo6YWRkTmFtZXNwYWNlKGNvbnN0
IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSkKIHsKICAgICBp
ZiAoIW1fc3R5bGVTaGVldCB8fCAhbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuaAppbmRleCA3NTY2OGNmMzBjZjUwOTIwMzQyNTEzM2QzYTY0NDgyNzFiOGVk
Njg1Li5jNWQ0OTAwOWJmM2NkNDk1ZmJkNDBkY2M3ODc2M2Y5ZjU3YmE1NWY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5oCkBAIC0yODIsNiArMjgyLDkgQEAgcHVibGljOgogICAgIFN0eWxlUnVsZUJh
c2UqIGNyZWF0ZVBhZ2VSdWxlKFBhc3NPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxl
Y3Rvcik7CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlUmVnaW9uUnVsZShDU1NTZWxlY3RvclZl
Y3RvciogcmVnaW9uU2VsZWN0b3IsIFJ1bGVMaXN0KiBydWxlcyk7CiAgICAgU3R5bGVSdWxlQmFz
ZSogY3JlYXRlTWFyZ2luQXRSdWxlKENTU1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlKTsKKyNpZiBF
TkFCTEUoU0hBRE9XX0RPTSkKKyAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVIb3N0UnVsZShSdWxl
TGlzdCogcnVsZXMpOworI2VuZGlmCiAgICAgdm9pZCBzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdp
bkJveCgpOwogICAgIHZvaWQgZW5kRGVjbGFyYXRpb25zRm9yTWFyZ2luQm94KCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAppbmRleCA0NjliZGI2MzBjMWE1
YzVkYmE5OTNmZDFhZDU5ZWQwNzQ0OWE1NWJlLi4wNzllYzMzNjI0OTVjMDc5NzliNDc1YWZkZTc3
NjAyMzg0Yzk5OTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlT
b3VyY2VEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0
YS5oCkBAIC05NCw3ICs5NCw4IEBAIHN0cnVjdCBDU1NSdWxlU291cmNlRGF0YSA6IHB1YmxpYyBS
ZWZDb3VudGVkPENTU1J1bGVTb3VyY2VEYXRhPiB7CiAgICAgICAgIEZPTlRfRkFDRV9SVUxFLAog
ICAgICAgICBQQUdFX1JVTEUsCiAgICAgICAgIEtFWUZSQU1FU19SVUxFLAotICAgICAgICBSRUdJ
T05fUlVMRQorICAgICAgICBSRUdJT05fUlVMRSwKKyAgICAgICAgSE9TVF9SVUxFCiAgICAgfTsK
IAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBjcmVhdGUoVHlwZSB0
eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwCmluZGV4IGUyYmU1NzcxZTAyNWYxNGNmOWE4NWRlN2U1
MWNkOWM1YTEzMDkwNTkuLjkyMDQ3ZmI5ODhlZDU3ZDc3ZTZiOTg5YzEyMTkwNWY2NmU4ZTFiOTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKQEAgLTEwNywxOCArMTA3LDE4IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBjb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0
b3IqIHNlbGVjdG9yCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SdWxlRGF0YTo6UnVsZURhdGEo
U3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlv
biwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1Nl
bGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSkKK1J1bGVEYXRhOjpSdWxlRGF0YShTdHlsZVJ1bGUq
IHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCBBZGRSdWxl
RmxhZyBhZGRSdWxlRmxhZykKICAgICA6IG1fcnVsZShydWxlKQogICAgICwgbV9zZWxlY3Rvcklu
ZGV4KHNlbGVjdG9ySW5kZXgpCiAgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQogICAgICwgbV9z
cGVjaWZpY2l0eShzZWxlY3RvcigpLT5zcGVjaWZpY2l0eSgpKQotICAgICwgbV9oYXNGYXN0Q2hl
Y2thYmxlU2VsZWN0b3IoY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IgJiYgU2VsZWN0b3JDaGVja2Vy
Ojppc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3RvcigpKSkKKyAgICAsIG1faGFzRmFzdENo
ZWNrYWJsZVNlbGVjdG9yKChhZGRSdWxlRmxhZyAmIFJ1bGVDYW5Vc2VGYXN0Q2hlY2tTZWxlY3Rv
cikgJiYgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxlY3RvcihzZWxlY3Rvcigp
KSkKICAgICAsIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3IoISFzZWxlY3RvcigpLT50YWdIaXN0b3J5
KCkpCiAgICAgLCBtX2hhc1JpZ2h0bW9zdFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVI
YXNoKGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goc2VsZWN0b3IoKSkpCiAg
ICAgLCBtX2NvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcihXZWJDb3JlOjpjb250YWlu
c1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ioc2VsZWN0b3IoKSkpCiAgICAgLCBtX2xpbmtNYXRj
aFR5cGUoU2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rTWF0Y2hUeXBlKHNlbGVjdG9yKCkp
KQotICAgICwgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4pCi0gICAgLCBtX2lzSW5SZWdpb25SdWxlKGluUmVnaW9uUnVsZSkKKyAgICAsIG1faGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbihhZGRSdWxlRmxhZyAmIFJ1bGVIYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luKQorICAgICwgbV9pc0luUmVnaW9uUnVsZShhZGRSdWxlRmxhZyAmIFJ1bGVJc0lu
UmVnaW9uUnVsZSkKIHsKICAgICBBU1NFUlQobV9wb3NpdGlvbiA9PSBwb3NpdGlvbik7CiAgICAg
QVNTRVJUKG1fc2VsZWN0b3JJbmRleCA9PSBzZWxlY3RvckluZGV4KTsKQEAgLTIwNyw5ICsyMDcs
MTQgQEAgdm9pZCBSdWxlU2V0OjphZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBB
dG9tUnVsZU1hcCYgbWFwLCBjb25zdCBSdWxlRGEKICAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRh
KTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQg
c2VsZWN0b3JJbmRleCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVz
ZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGluUmVnaW9uUnVsZSkKK3ZvaWQgUnVsZVNldDo6YWRk
UnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIEFkZFJ1bGVGbGFn
IGFkZFJ1bGVGbGFnKQogewotICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbGVjdG9ySW5k
ZXgsIG1fcnVsZUNvdW50KyssIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNhblVzZUZhc3RD
aGVja1NlbGVjdG9yLCBpblJlZ2lvblJ1bGUpOworICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUs
IHNlbGVjdG9ySW5kZXgsIG1fcnVsZUNvdW50KyssIGFkZFJ1bGVGbGFnKTsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgYXRob3N0UnVsZVNwZWNpZmljaXR5ID0gMHgxMDAwMDA7CisKKyAgICBp
ZiAoYWRkUnVsZUZsYWcgJiBSdWxlSXNIb3N0UnVsZSkKKyAgICAgICAgcnVsZURhdGEuaW5jcmVh
c2VTcGVjaWZpY2l0eShhdGhvc3RSdWxlU3BlY2lmaWNpdHkpOworCiAgICAgY29sbGVjdEZlYXR1
cmVzRnJvbVJ1bGVEYXRhKG1fZmVhdHVyZXMsIHJ1bGVEYXRhKTsKIAogICAgIENTU1NlbGVjdG9y
KiBzZWxlY3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7CkBAIC0yNjQsMTAgKzI2OSwxMiBAQCB2
b2lkIFJ1bGVTZXQ6OmFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiByZWdpb25SdWxlLCBi
b29sIGhhc0RvY3VtZW50U2VjdXJpdAogCiAgICAgLy8gQ29sbGVjdCB0aGUgcmVnaW9uIHJ1bGVz
IGludG8gYSBydWxlIHNldAogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4g
PiYgY2hpbGRSdWxlcyA9IHJlZ2lvblJ1bGUtPmNoaWxkUnVsZXMoKTsKKyAgICBBZGRSdWxlRmxh
ZyBhZGRSdWxlRmxhZyA9IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiA6IFJ1bGVIYXNOb1NwZWNpYWxTdGF0ZTsKKyAgICBhZGRSdWxlRmxh
ZyA9IHN0YXRpY19jYXN0PEFkZFJ1bGVGbGFnPihhZGRSdWxlRmxhZyB8IFJ1bGVDYW5Vc2VGYXN0
Q2hlY2tTZWxlY3RvciB8IFJ1bGVJc0luUmVnaW9uUnVsZSk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgU3R5bGVSdWxlQmFz
ZSogcmVnaW9uU3R5bGluZ1J1bGUgPSBjaGlsZFJ1bGVzW2ldLmdldCgpOwogICAgICAgICBpZiAo
cmVnaW9uU3R5bGluZ1J1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICByZWdpb25SdWxl
U2V0LT5hZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1
bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAg
IHJlZ2lvblJ1bGVTZXQtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihyZWdp
b25TdHlsaW5nUnVsZSksIGFkZFJ1bGVGbGFnKTsKICAgICB9CiAgICAgLy8gVXBkYXRlIHRoZSAi
Z2xvYmFsIiBydWxlIGNvdW50IHNvIHRoYXQgcHJvcGVyIG9yZGVyIGlzIG1haW50YWluZWQKICAg
ICBtX3J1bGVDb3VudCA9IHJlZ2lvblJ1bGVTZXQtPm1fcnVsZUNvdW50OwpAQCAtMjg2LDYgKzI5
Myw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRz
KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1CiAgICAgICAgICAgICBhZGRSdWxlc0Zyb21T
aGVldChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCksIG1lZGl1bSwgcmVzb2x2ZXIsIHNjb3BlKTsK
ICAgICB9CiAgICAgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID0gcmVzb2x2ZXIgJiYg
cmVzb2x2ZXItPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3Qoc2hlZXQt
PmJhc2VVUkwoKSk7CisgICAgQWRkUnVsZUZsYWcgYWRkUnVsZUZsYWcgPSBzdGF0aWNfY2FzdDxB
ZGRSdWxlRmxhZz4oKGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiA6IDApIHwgKCFzY29wZSA/IFJ1bGVDYW5Vc2VGYXN0Q2hlY2tTZWxlY3Rv
ciA6IDApKTsKIAogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgcnVs
ZXMgPSBzaGVldC0+Y2hpbGRSdWxlcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
dWxlcy5zaXplKCk7ICsraSkgewpAQCAtMjkzLDcgKzMwMSw3IEBAIHZvaWQgUnVsZVNldDo6YWRk
UnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVy
eUV2YWx1CiAKICAgICAgICAgQVNTRVJUKCFydWxlLT5pc0ltcG9ydFJ1bGUoKSk7CiAgICAgICAg
IGlmIChydWxlLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRp
Y19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCAhc2Nv
cGUpOworICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJ1
bGUpLCBhZGRSdWxlRmxhZyk7CiAgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUGFnZVJ1bGUoKSkK
ICAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihydWxl
KSk7CiAgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsKQEAgLTMwNSw3ICsz
MTMsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50
cyogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdQogICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IDA7IGogPCBjaGlsZFJ1bGVzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAg
ICAgICAgIFN0eWxlUnVsZUJhc2UqIGNoaWxkUnVsZSA9IGNoaWxkUnVsZXNbal0uZ2V0KCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFJ1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4oY2hp
bGRSdWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgIXNjb3BlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihjaGlsZFJ1
bGUpLCBhZGRSdWxlRmxhZyk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkUnVs
ZS0+aXNQYWdlUnVsZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3Rh
dGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+KGNoaWxkUnVsZSkpOwogICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzRm9udEZhY2VSdWxlKCkgJiYgcmVzb2x2ZXIpIHsKQEAg
LTM0NywxNSArMzU1LDE5IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVT
aGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1CiAgICAgICAgICAgICBh
ZGRSZWdpb25SdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVJlZ2lvbio+KHJ1bGUpLCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luKTsKICAgICAgICAgfQogI2VuZGlmCisjaWYgRU5BQkxFKFNIQURP
V19ET00pCisgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzSG9zdFJ1bGUoKSkKKyAgICAgICAgICAg
IHJlc29sdmVyLT5hZGRIb3N0UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4ocnVsZSks
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHNjb3BlKTsKKyNlbmRpZgogICAgIH0KICAgICBp
ZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQogICAgICAgICBzaHJpbmtUb0ZpdCgpOwogfQog
Ci12b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBp
c0luUmVnaW9uUnVsZSkKK3ZvaWQgUnVsZVNldDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSogcnVs
ZSwgQWRkUnVsZUZsYWcgYWRkUnVsZUZsYWcpCiB7CiAgICAgZm9yIChzaXplX3Qgc2VsZWN0b3JJ
bmRleCA9IDA7IHNlbGVjdG9ySW5kZXggIT0gbm90Rm91bmQ7IHNlbGVjdG9ySW5kZXggPSBydWxl
LT5zZWxlY3Rvckxpc3QoKS5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkp
Ci0gICAgICAgIGFkZFJ1bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGlzSW5SZWdpb25SdWxlKTsKKyAgICAg
ICAgYWRkUnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBhZGRSdWxlRmxhZyk7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVNYXAm
IG1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvUnVsZVNldC5oCmluZGV4IDY1NzcyMzhiYTkyMzZhOWQ2ODEwMzkxOTVhMGRk
NDNhMmU4MDgyYTAuLjE3Y2M0ODkxNDhmZTExZTY0NDkyNDY1NGIzNjA5ZDBhZTJiMGMwMTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1J1bGVTZXQuaApAQCAtMzEsNiArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitlbnVtIEFkZFJ1bGVGbGFnIHsKKyAgICBSdWxlSGFzTm9TcGVjaWFsU3RhdGUgICAgICAg
ICA9IDAsCisgICAgUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSAxLAorICAgIFJ1bGVD
YW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciAgID0gMSA8PCAxLAorICAgIFJ1bGVJc0luUmVnaW9uUnVs
ZSAgICAgICAgICAgID0gMSA8PCAyLAorICAgIFJ1bGVJc0hvc3RSdWxlICAgICAgICAgICAgICAg
ID0gMSA8PCAzLAorfTsKKwogY2xhc3MgQ1NTU2VsZWN0b3I7CiBjbGFzcyBDb250YWluZXJOb2Rl
OwogY2xhc3MgTWVkaWFRdWVyeUV2YWx1YXRvcjsKQEAgLTQwLDcgKzQ4LDcgQEAgY2xhc3MgU3R5
bGVTaGVldENvbnRlbnRzOwogCiBjbGFzcyBSdWxlRGF0YSB7CiBwdWJsaWM6Ci0gICAgUnVsZURh
dGEoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRpb24s
IGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxl
Y3RvciwgYm9vbCBpblJlZ2lvblJ1bGUpOworICAgIFJ1bGVEYXRhKFN0eWxlUnVsZSosIHVuc2ln
bmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCBBZGRSdWxlRmxhZyk7CiAKICAg
ICB1bnNpZ25lZCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KICAgICBT
dHlsZVJ1bGUqIHJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3J1bGU7IH0KQEAgLTU1LDYgKzYzLDcg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUoKSBjb25zdCB7IHJldHVybiBt
X2xpbmtNYXRjaFR5cGU7IH0KICAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSBj
b25zdCB7IHJldHVybiBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW47IH0KICAgICBib29sIGlz
SW5SZWdpb25SdWxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUmVnaW9uUnVsZTsgfQorICAgIHZv
aWQgaW5jcmVhc2VTcGVjaWZpY2l0eSh1bnNpZ25lZCB2YWx1ZSkgeyBtX3NwZWNpZmljaXR5ICs9
IHZhbHVlOyB9CiAKICAgICAvLyBUcnkgdG8gYmFsYW5jZSBiZXR3ZWVuIG1lbW9yeSB1c2FnZSAo
dGhlcmUgY2FuIGJlIGxvdHMgb2YgUnVsZURhdGEgb2JqZWN0cykgYW5kIGdvb2QgZmlsdGVyaW5n
IHBlcmZvcm1hbmNlLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVtSWRlbnRpZmll
ckNvdW50ID0gNDsKQEAgLTk4LDggKzEwNyw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkUnVs
ZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRv
ciYsIFN0eWxlUmVzb2x2ZXIqID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAwKTsKIAotICAg
IHZvaWQgYWRkU3R5bGVSdWxlKFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9
IGZhbHNlKTsKLSAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJ
bmRleCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVj
a1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOworICAgIHZvaWQgYWRkU3R5
bGVSdWxlKFN0eWxlUnVsZSosIEFkZFJ1bGVGbGFnKTsKKyAgICB2b2lkIGFkZFJ1bGUoU3R5bGVS
dWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgQWRkUnVsZUZsYWcpOwogICAgIHZvaWQgYWRk
UGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSopOwogICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0
cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwogICAgIHZvaWQg
YWRkUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDkzMThiN2ExNjVm
ZGYwYzA2MWVhNTk3NTBhZjgxN2YxZTc4ZDQwMWUuLmYzYWNiOWJlOWI5ZjM0M2UwYzZhOGFlNGVl
OTczZTdhNTI1ODEyMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTEx
Niw3ICsxMTYsNiBAQAogI2luY2x1ZGUgIlN0eWxlUGVuZGluZ0ltYWdlLmgiCiAjaW5jbHVkZSAi
U3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlSW1wb3J0LmgiCi0jaW5jbHVkZSAiU3R5
bGVTY29wZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5j
bHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBAIC0zNzEsNyArMzcw
LDcgQEAgc3RhdGljIFBhc3NPd25QdHI8UnVsZVNldD4gbWFrZVJ1bGVTZXQoY29uc3QgVmVjdG9y
PFJ1bGVGZWF0dXJlPiYgcnVsZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIE93blB0
cjxSdWxlU2V0PiBydWxlU2V0ID0gUnVsZVNldDo6Y3JlYXRlKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVsZXNbaV0u
cnVsZSwgcnVsZXNbaV0uc2VsZWN0b3JJbmRleCwgcnVsZXNbaV0uaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiwgZmFsc2UpOworICAgICAgICBydWxlU2V0LT5hZGRSdWxlKHJ1bGVzW2ldLnJ1bGUs
IHJ1bGVzW2ldLnNlbGVjdG9ySW5kZXgsIHJ1bGVzW2ldLmhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4gPyBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA6IFJ1bGVIYXNOb1NwZWNpYWxTdGF0
ZSk7CiAgICAgcnVsZVNldC0+c2hyaW5rVG9GaXQoKTsKICAgICByZXR1cm4gcnVsZVNldC5yZWxl
YXNlKCk7CiB9CkBAIC00MTAsMTIgKzQwOSwxMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGVu
ZEF1dGhvclN0eWxlU2hlZXRzKHVuc2lnbmVkIGZpcnN0TmV3LCBjb25zdCBWZWN0b3I8UmVmUAog
ICAgICAgICBpZiAoY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpICYmICFtX21lZGl1bS0+ZXZhbChj
c3NTaGVldC0+bWVkaWFRdWVyaWVzKCksIHRoaXMpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQgPSBjc3NTaGVldC0+Y29udGVudHMoKTsK
KyNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKQogICAgICAgICBpZiAoY29uc3QgQ29udGFpbmVyTm9k
ZSogc2NvcGUgPSBTdHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3BlRm9yKGNzc1NoZWV0KSkgewotICAg
ICAgICAgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCi0gICAgICAgICAgICAgICAgbV9zY29wZVJl
c29sdmVyID0gYWRvcHRQdHIobmV3IFN0eWxlU2NvcGVSZXNvbHZlcigpKTsKLSAgICAgICAgICAg
IG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlUnVsZVNldEZvcihzY29wZSktPmFkZFJ1bGVzRnJvbVNo
ZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAgICAgICAgICAgIGVuc3VyZVNj
b3BlUmVzb2x2ZXIoKS0+ZW5zdXJlUnVsZVNldEZvcihzY29wZSktPmFkZFJ1bGVzRnJvbVNoZWV0
KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CisjZW5kaWYKIAogICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICAgICAgaWYgKCFtX3N0eWxlUnVsZVRv
Q1NTT01XcmFwcGVyTWFwLmlzRW1wdHkoKSkKQEAgLTcwOSw3ICs3MDgsMTIgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3Vs
dCkKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3Vs
dCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogI2lmIEVOQUJMRShTVFlMRV9T
Q09QRUQpIHx8IEVOQUJMRShTSEFET1dfRE9NKQotICAgIGlmICghbV9zY29wZVJlc29sdmVyIHx8
ICFtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpKQorICAgIGlmICghbV9zY29wZVJl
c29sdmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXRjaEhvc3RSdWxlcyhyZXN1bHQsIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKKworICAgIGlmICghbV9zY29wZVJlc29sdmVyLT5oYXNTY29wZWRT
dHlsZXMoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWF0Y2ggc2NvcGVkIGF1dGhvciBy
dWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBzdGFjayAocmVidWlsZCBpdCBp
ZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KQEAgLTc0MSw2ICs3NDUsMzUgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wg
aW5jbHVkZUVtcHQKICNlbmRpZgogfQogCitpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpzdHls
ZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkKK3sKKyNpZiBFTkFCTEUoU0hBRE9X
X0RPTSkKKyAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2NvcGVSZXNvbHZlci0+c3R5
bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhtX2VsZW1lbnQpOworI2Vsc2UKKyAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhv
c3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQorewor
I2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAgIEFTU0VSVChtX3Njb3BlUmVzb2x2ZXIpOworCisg
ICAgVmVjdG9yPFJ1bGVTZXQqPiBtYXRjaGVkUnVsZXM7CisgICAgbV9zY29wZVJlc29sdmVyLT5t
YXRjaEhvc3RSdWxlcyhtX2VsZW1lbnQsIG1hdGNoZWRSdWxlcyk7CisgICAgaWYgKG1hdGNoZWRS
dWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIE1hdGNoT3B0aW9ucyBvcHRp
b25zKGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBvcHRpb25zLnNjb3BlID0gbV9lbGVtZW50Owor
ICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNoZWRSdWxlcy5zaXplKCk7IGkgPiAwOyAtLWkpCisg
ICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoZWRSdWxlcy5hdChpLTEpLCByZXN1bHQu
cmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgb3B0
aW9ucyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXN1bHQpOworICAgIFVOVVNFRF9QQVJB
TShpbmNsdWRlRW1wdHlSdWxlcyk7CisjZW5kaWYKK30KKwogdm9pZCBTdHlsZVJlc29sdmVyOjpt
YXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXMpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKQEAgLTEzMzAsNiArMTM2Myw5IEBA
IFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSgpCiAgICAgLy8g
Q2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5LgogICAgIGlmIChzdHlsZVNoYXJp
bmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3VuY29tbW9uQXR0cmlidXRlUnVsZVNldC5nZXQo
KSkpCiAgICAgICAgIHJldHVybiAwOworICAgIC8vIENhbid0IHNoYXJlIGlmIEBob3N0IEAtcnVs
ZXMgYXBwbHkuCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMo
KSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gVHJhY2tpbmcgY2hpbGQgaW5kZXggcmVxdWly
ZXMgdW5pcXVlIHN0eWxlIGZvciBlYWNoIG5vZGUuIFRoaXMgbWF5IGdldCBzZXQgYnkgdGhlIHNp
YmxpbmcgcnVsZSBtYXRjaCBhYm92ZS4KICAgICBpZiAocGFyZW50U3R5bGVQcmV2ZW50c1NoYXJp
bmcobV9wYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmgKaW5kZXggNWI1MTRjZTU1Yjc4YmIzYzE3NmQxZDZlMmVkM2M0MDYwNmU4NzNlNi4u
MThmNjFmMGYzY2Q1ZmU5M2UyNDI0NjRhNGZjZTUxODEyMmRiYjQ1OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCkBAIC0yOSw4ICsyOSwxMCBAQAogI2luY2x1ZGUgIk1lZGlhUXVlcnlF
eHAuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJ1bGVGZWF0dXJlLmgi
CisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNlbGVjdG9y
Q2hlY2tlci5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgorI2luY2x1ZGUgIlN0
eWxlU2NvcGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC04MCw2ICs4Miw3IEBA
IGNsYXNzIFN0eWxlS2V5ZnJhbWU7CiBjbGFzcyBTdHlsZVBlbmRpbmdJbWFnZTsKIGNsYXNzIFN0
eWxlUHJvcGVydHlTZXQ7CiBjbGFzcyBTdHlsZVJ1bGU7CitjbGFzcyBTdHlsZVJ1bGVIb3N0Owog
Y2xhc3MgU3R5bGVSdWxlS2V5ZnJhbWVzOwogY2xhc3MgU3R5bGVSdWxlUGFnZTsKIGNsYXNzIFN0
eWxlUnVsZVJlZ2lvbjsKQEAgLTEzNyw2ICsxNDAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwb3BQ
YXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIHB1c2hQYXJlbnRTaGFkb3dSb290KGNv
bnN0IFNoYWRvd1Jvb3QqKTsKICAgICB2b2lkIHBvcFBhcmVudFNoYWRvd1Jvb3QoY29uc3QgU2hh
ZG93Um9vdCopOworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAgIHZvaWQgYWRkSG9zdFJ1bGUo
U3R5bGVSdWxlSG9zdCogcnVsZSwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBjb25z
dCBDb250YWluZXJOb2RlKiBzY29wZSkgeyBlbnN1cmVTY29wZVJlc29sdmVyKCktPmFkZEhvc3RS
dWxlKHJ1bGUsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHNjb3BlKTsgfQorI2VuZGlmCiAK
ICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCosIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFN0eWxlU2hhcmluZ0JlaGF2aW9yID0gQWxsb3dT
dHlsZVNoYXJpbmcsCiAgICAgICAgIFJ1bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0Y2hBbGxSdWxl
cywgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gMCk7CkBAIC0xNjYsMTEgKzE3Miwy
MiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRBdXRob3JTdHlsZVNoZWV0cyh1bnNpZ25lZCBm
aXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+Jik7CiAKIHByaXZh
dGU6CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxFKFNIQURPV19ET00pCisgICAg
U3R5bGVTY29wZVJlc29sdmVyKiBlbnN1cmVTY29wZVJlc29sdmVyKCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFkb3dET01FbmFibGVkKCkgfHwgUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c3R5bGVTY29wZWRFbmFibGVkKCkpOworICAgICAgICBpZiAo
IW1fc2NvcGVSZXNvbHZlcikKKyAgICAgICAgICAgIG1fc2NvcGVSZXNvbHZlciA9IGFkb3B0UHRy
KG5ldyBTdHlsZVNjb3BlUmVzb2x2ZXIoKSk7CisgICAgICAgIHJldHVybiBtX3Njb3BlUmVzb2x2
ZXIuZ2V0KCk7CisgICAgfQorI2VuZGlmCisKICAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUo
RWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VV
RE8pOwogICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOwogICAgIHZvaWQgY29sbGVjdEZl
YXR1cmVzKCk7CiAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgYm9v
bCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0Kik7CisgICAgYm9v
bCBzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCk7CiAgICAgTm9kZSogbG9j
YXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50
KSBjb25zdDsKICAgICBTdHlsZWRFbGVtZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhO
b2RlKiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKICAgICBib29sIGNhblNoYXJlU3R5bGVXaXRo
RWxlbWVudChTdHlsZWRFbGVtZW50KikgY29uc3Q7CkBAIC0zMjMsNiArMzQwLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBp
bmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNo
UmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRjaEhvc3RSdWxl
cyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgY29sbGVj
dE1hdGNoaW5nUnVsZXMoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1
bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdS
dWxlc0ZvclJlZ2lvbihSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVs
ZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UnVsZS5jcHAKaW5kZXggNzNiMGFmMjZjZTQyYWE0NTk0ZDliNzYxNzk2YjE5ZDZhNmJiNjY1Yy4u
NjdmN2JjNzI4MjcwMmQ1YWVjOGEzNDBkZTY2YTVlZWEzMmQwZmQxOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUnVsZS5jcHAKQEAgLTc5LDYgKzc5LDkgQEAgdm9pZCBTdHlsZVJ1bGVCYXNlOjpyZXBvcnRN
ZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAg
IGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlm
cmFtZXMqPih0aGlzKS0+cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdElu
Zm8pOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBIb3N0OgorICAgICAgICBzdGF0aWNfY2Fz
dDxjb25zdCBTdHlsZVJ1bGVCbG9jayo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNh
Z2UobWVtb3J5T2JqZWN0SW5mbyk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFVua25vd246
CiAgICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xMTcsNiArMTIwLDkg
QEAgdm9pZCBTdHlsZVJ1bGVCYXNlOjpkZXN0cm95KCkKICAgICBjYXNlIEtleWZyYW1lczoKICAg
ICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMpOwogICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBIb3N0OgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8
U3R5bGVSdWxlSG9zdCo+KHRoaXMpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBVbmtub3du
OgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMTUwLDYgKzE1Niw4
IEBAIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gU3R5bGVSdWxlQmFzZTo6Y29weSgpIGNvbnN0
CiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKj4odGhpcyktPmNvcHkoKTsKKyAg
ICBjYXNlIEhvc3Q6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVI
b3N0Kj4odGhpcyktPmNvcHkoKTsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0
OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xOTEsNiArMTk5LDcgQEAgUGFzc1JlZlB0cjxDU1NS
dWxlPiBTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTU3R5bGVTaGVldCogcGFy
ZW50U2hlZXQKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgcnVsZSA9IFdlYktpdENTU0tl
eWZyYW1lc1J1bGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihzZWxm
KSwgcGFyZW50U2hlZXQpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEhvc3Q6CiAgICAgY2Fz
ZSBVbmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUnVsZS5oCmluZGV4IGUxNWYzMmU0MDJhYWYyMDhkM2NjMGZjY2QzNTg0NzdiMjMwMzU2
MzQuLmI3ZmY1MjMyNmNiZjIxODQ3MjFhMTM0MWM4MjlhMzg0ZmM0YTM5YjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSdWxlLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogICAgICAgICBQYWdlLAogICAg
ICAgICBLZXlmcmFtZXMsCiAgICAgICAgIEtleWZyYW1lLCAvLyBOb3QgdXNlZC4gVGhlc2UgYXJl
IGludGVybmFsbHkgbm9uLXJ1bGUgU3R5bGVLZXlmcmFtZSBvYmplY3RzLgorICAgICAgICBIb3N0
LAogICAgICAgICBSZWdpb24gPSAxNgogICAgIH07CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQpAQCAtNTgsNiArNTksNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc1N0eWxlUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBTdHls
ZTsgfQogICAgIGJvb2wgaXNSZWdpb25SdWxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFJl
Z2lvbjsgfQogICAgIGJvb2wgaXNJbXBvcnRSdWxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09
IEltcG9ydDsgfQorICAgIGJvb2wgaXNIb3N0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9
PSBIb3N0OyB9CiAKICAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IGNvcHkoKSBjb25zdDsK
IApAQCAtMjIzLDYgKzIyNSwyMCBAQCBwcml2YXRlOgogICAgIENTU1NlbGVjdG9yTGlzdCBtX3Nl
bGVjdG9yTGlzdDsKIH07CiAKK2NsYXNzIFN0eWxlUnVsZUhvc3QgOiBwdWJsaWMgU3R5bGVSdWxl
QmxvY2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUnVsZUhvc3Q+IGNy
ZWF0ZShWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZUhvc3QoYWRvcHRSdWxlcykpOwor
ICAgIH0KKworICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlSG9zdD4gY29weSgpIGNvbnN0IHsgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVJ1bGVIb3N0KCp0aGlzKSk7IH0KKworcHJpdmF0ZToKKyAg
ICBTdHlsZVJ1bGVIb3N0KFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxl
cykgOiBTdHlsZVJ1bGVCbG9jayhIb3N0LCBhZG9wdFJ1bGVzKSB7IH0KKyAgICBTdHlsZVJ1bGVI
b3N0KGNvbnN0IFN0eWxlUnVsZUhvc3QmIG8pIDogU3R5bGVSdWxlQmxvY2sobykgeyB9Cit9Owor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBTdHlsZVJ1bGVfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcAppbmRleCA4NzQwMmJhYTU5ODEwMjRl
ZTVkNjQ0NjVhZDE3OGRjY2I3OWRlYThhLi4yYjk1ZDhmZTljOTdiZWRjZDAzZjNjMjg3NzNmNDJk
MmE1YTE2ZmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29s
dmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcApA
QCAtMjksOCArMjksMTAgQEAKIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShT
SEFET1dfRE9NKQogCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTU3R5
bGVTaGVldC5oIgogI2luY2x1ZGUgIkNvbnRleHRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIkVsZW1l
bnRTaGFkb3cuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVF
bGVtZW50LmgiCiAjaW5jbHVkZSAiUnVsZUZlYXR1cmUuaCIKQEAgLTE1NCwxMSArMTU2LDkxIEBA
IHZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpjb2xsZWN0RmVhdHVyZXNUbyhSdWxlRmVhdHVyZVNl
dCYgZmVhdHVyZXMpCiAgICAgICAgIGZlYXR1cmVzLmFkZChpdC0+dmFsdWUtPmZlYXR1cmVzKCkp
OwogfQogCitpbmxpbmUgUnVsZVNldCogU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVBdEhvc3RS
dWxlU2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCit7CisgICAgU2NvcGVkUnVs
ZVNldE1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fYXRIb3N0UnVsZXMuYWRkKHNoYWRvd1Jv
b3QsIG51bGxwdHIpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRk
UmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgIHJldHVybiBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorCitpbmxpbmUgUnVsZVNldCogU3R5
bGVTY29wZVJlc29sdmVyOjphdEhvc3RSdWxlU2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRv
d1Jvb3QpIGNvbnN0Cit7CisgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2F0SG9zdFJ1bGVzLmZpbmQoc2hhZG93Um9vdCk7CisgICAgcmV0dXJuIGl0ICE9IG1fYXRI
b3N0UnVsZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOworfQorCit2b2lkIFN0eWxlU2Nv
cGVSZXNvbHZlcjo6YWRkSG9zdFJ1bGUoU3R5bGVSdWxlSG9zdCogaG9zdFJ1bGUsIGJvb2wgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7Cisg
ICAgaWYgKCFzY29wZSB8fCAhc2NvcGUtPmlzSW5TaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzY29wZS0+c2hhZG93Um9vdCgpOwor
ICAgIGlmICghc2hhZG93Um9vdCB8fCAhc2hhZG93Um9vdC0+aG9zdCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBSdWxlU2V0KiBydWxlID0gZW5zdXJlQXRIb3N0UnVsZVNldEZvcihzaGFkb3dS
b290KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRS
dWxlcyA9IGhvc3RSdWxlLT5jaGlsZFJ1bGVzKCk7CisgICAgQWRkUnVsZUZsYWcgYWRkUnVsZUZs
YWcgPSBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID8gUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4gOiBSdWxlSGFzTm9TcGVjaWFsU3RhdGU7CisgICAgYWRkUnVsZUZsYWcgPSBzdGF0aWNf
Y2FzdDxBZGRSdWxlRmxhZz4oYWRkUnVsZUZsYWcgfCBSdWxlQ2FuVXNlRmFzdENoZWNrU2VsZWN0
b3IgfCBSdWxlSXNIb3N0UnVsZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxk
UnVsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3R5bGVSdWxlQmFzZSogaG9zdFN0eWxpbmdS
dWxlID0gY2hpbGRSdWxlc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKGhvc3RTdHlsaW5nUnVsZS0+
aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJ1bGUtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2Fz
dDxTdHlsZVJ1bGUqPihob3N0U3R5bGluZ1J1bGUpLCBhZGRSdWxlRmxhZyk7CisgICAgfQorfQor
Citib29sIFN0eWxlU2NvcGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hv
c3RSdWxlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmIChtX2F0SG9zdFJ1bGVz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRWxlbWVudFNoYWRvdyog
c2hhZG93ID0gZWxlbWVudC0+c2hhZG93KCk7CisgICAgaWYgKCFzaGFkb3cpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FKDk5ODI3KTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk5ODI3CisgICAgLy8gYWRkIGEgbmV3IGZsYWcgdG8gRWxlbWVu
dFNoYWRvdyBhbmQgY2FjaGUgd2hldGhlciBhbnlAaG9zdCBALXJ1bGVzIGFyZQorICAgIC8vIGFw
cGxpZWQgdG8gdGhlIGVsZW1lbnQgb3Igbm90LiBTbyB3ZSBjYW4gYXZvaWQgYWx3YXlzIHRyYXZl
cnNpbmcKKyAgICAvLyBzaGFkb3cgcm9vdHMuCisgICAgZm9yIChTaGFkb3dSb290KiBzaGFkb3dS
b290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hhZG93Um9vdDsgc2hhZG93Um9v
dCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7CisgICAgICAgIGlmIChhdEhvc3RS
dWxlU2V0Rm9yKHNoYWRvd1Jvb3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTdHlsZVNjb3Bl
UmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFZlY3RvcjxS
dWxlU2V0Kj4mIG1hdGNoZWRSdWxlcykKK3sKKyAgICBpZiAobV9hdEhvc3RSdWxlcy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGVsZW1l
bnQtPnNoYWRvdygpOworICAgIGlmICghc2hhZG93KQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBGSVhNRSg5OTgyNyk6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
OTgyNworICAgIC8vIGFkZCBhIG5ldyBmbGFnIHRvIEVsZW1lbnRTaGFkb3cgYW5kIGNhY2hlIHdo
ZXRoZXIgYW55IEBob3N0IEAtcnVsZXMgYXJlCisgICAgLy8gYXBwbGllZCB0byB0aGUgZWxlbWVu
dCBvciBub3QuIFNvIHdlIGNhbiBxdWlja2x5IGV4aXQgdGhpcyBtZXRob2QKKyAgICAvLyBieSB1
c2luZyB0aGUgZmxhZy4KKyAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFkb3ct
PnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dSb290OyBzaGFkb3dSb290ID0gc2hhZG93Um9v
dC0+b2xkZXJTaGFkb3dSb290KCkpIHsgCisgICAgICAgIGlmIChSdWxlU2V0KiBydWxlU2V0ID0g
YXRIb3N0UnVsZVNldEZvcihzaGFkb3dSb290KSkKKyAgICAgICAgICAgIG1hdGNoZWRSdWxlcy5h
cHBlbmQocnVsZVNldCk7CisgICAgICAgIGlmICghc2hhZG93Um9vdC0+aGFzU2hhZG93SW5zZXJ0
aW9uUG9pbnQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogdm9pZCBTdHlsZVNj
b3BlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9i
amVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0
SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwogICAgIGluZm8uYWRkTWVtYmVy
KG1fYXV0aG9yU3R5bGVzKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3N0YWNrKTsKKyAgICBpbmZv
LmFkZE1lbWJlcihtX2F0SG9zdFJ1bGVzKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2NvcGVSZXNvbHZlci5oCmluZGV4IDVhMzJkZmU3OWY4MzViYjdjZjk1YjhjN2RkOWIzYmI3MDQx
ZmI3ZmIuLjg1YzFkMDEwMDZhZDZjYzZmNDg5MDExNTA1MDljYzM0OGIyZDZiMTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKQEAgLTM3LDggKzM3LDExIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIENTU1N0eWxlU2hl
ZXQ7CitjbGFzcyBFbGVtZW50OwogY2xhc3MgUnVsZVNldDsKIGNsYXNzIFJ1bGVGZWF0dXJlU2V0
OworY2xhc3MgU2hhZG93Um9vdDsKK2NsYXNzIFN0eWxlUnVsZUhvc3Q7CiAKICNpZiBFTkFCTEUo
U1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKIApAQCAtNzIsMTIgKzc1LDE4IEBA
IHB1YmxpYzoKICAgICBib29sIG1hdGNoZXNTdHlsZUJvdW5kcyhjb25zdCBTdGFja0ZyYW1lJiBm
cmFtZSkgY29uc3QgeyByZXR1cm4gZnJhbWUubV9hdXRob3JTdHlsZUJvdW5kc0luZGV4ID09IG1f
c3RhY2tQYXJlbnRCb3VuZHNJbmRleDsgfQogICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzVG8oUnVs
ZUZlYXR1cmVTZXQmKTsKIAorICAgIHZvaWQgYWRkSG9zdFJ1bGUoU3R5bGVSdWxlSG9zdCosIGJv
b2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUp
OworICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhjb25zdCBF
bGVtZW50Kik7CisgICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhjb25zdCBFbGVtZW50KiwgVmVjdG9y
PFJ1bGVTZXQqPiYgbWF0Y2hlZFJ1bGVzKTsKKwogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2Uo
TWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFJ1bGVTZXQqIHJ1bGVT
ZXRGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0OwogICAgIHZvaWQgc2V0dXBT
dGFjayhjb25zdCBDb250YWluZXJOb2RlKik7CiAgICAgYm9vbCBzdGFja0lzQ29uc2lzdGVudChj
b25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQpIGNvbnN0IHsgcmV0dXJuIHBhcmVudCAmJiBwYXJl
bnQgPT0gbV9zdGFja1BhcmVudDsgfQorICAgIFJ1bGVTZXQqIGVuc3VyZUF0SG9zdFJ1bGVTZXRG
b3IoY29uc3QgU2hhZG93Um9vdCopOworICAgIFJ1bGVTZXQqIGF0SG9zdFJ1bGVTZXRGb3IoY29u
c3QgU2hhZG93Um9vdCopIGNvbnN0OwogCiAgICAgU2NvcGVkUnVsZVNldE1hcCBtX2F1dGhvclN0
eWxlczsKIApAQCAtODgsNiArOTcsOCBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgdXNlZCB0
byBkZWNpZGUgd2hldGhlciBtX3Njb3BpbmdFbGVtZW50U3RhY2sgaXMgY29uc2lzdGVudCwgc2Vw
YXJhdGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tlcjo6bV9wYXJlbnRTdGFjay4KICAgICBjb25zdCBD
b250YWluZXJOb2RlKiBtX3N0YWNrUGFyZW50OwogICAgIGludCBtX3N0YWNrUGFyZW50Qm91bmRz
SW5kZXg7CisKKyAgICBTY29wZWRSdWxlU2V0TWFwIG1fYXRIb3N0UnVsZXM7CiB9OwogCiBpbmxp
bmUgYm9vbCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZVN0YWNrQ29uc2lzdGVuY3koQ29udGFp
bmVyTm9kZSogcGFyZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hl
ZXRDb250ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNw
cAppbmRleCBlN2NlODFlYWFiNDg3MTg2MjRmNGViNTUyMzhlNWMxYWYzNTY4NWI4Li4zOWU5YTdi
MmNkNmMyMTkzYmIwNDk4MGZhODhhODI3MjFlNGEyM2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTaGVldENvbnRlbnRzLmNwcApAQCAtNDM1LDYgKzQzNSwxMCBAQCBzdGF0aWMgYm9vbCBj
aGlsZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoY29uc3QgVmVjdG9yPFJl
ZlB0cjxTdHlsZQogICAgICAgICAgICAgaWYgKGNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5jZWxl
ZFN1YnJlc291cmNlcyhzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVSZWdpb24qPihydWxlKS0+
Y2hpbGRSdWxlcygpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFN0eWxlUnVsZUJhc2U6Okhvc3Q6CisgICAgICAgICAgICBp
ZiAoY2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKHN0YXRpY19jYXN0
PGNvbnN0IFN0eWxlUnVsZUhvc3QqPihydWxlKS0+Y2hpbGRSdWxlcygpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0eWxl
UnVsZUJhc2U6OkltcG9ydDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICBjYXNlIFN0eWxlUnVsZUJhc2U6OlBhZ2U6CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMmI4YjIxNmJhMzVkNjQ2NzU0
OWYxM2JiNTVkYzM5ODkwNmE1MmJlMS4uNmE2OGYxYmY3ZWZjNjVhNjI1ZTkzYTYzZmE2ZjMxOTUz
NjYxNmUyYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEwLTEyICBUYWthc2hpIFNha2Ft
b3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0gTmVlZHMgQGhv
c3QgcnVsZSBmb3IgU2hhZG93RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVs
ZXMuaHRtbDogQWRkZWQuCisKIDIwMTItMTAtMjIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgbW9yZSBDaHJvbWl1bSBNTCBleHBlY3Rh
dGlvbiB1cGRhdGluZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRvdy9h
dGhvc3QtYXRydWxlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cv
YXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExZjNiMWMyNTUxNjk1Njc4
NzI1YmQ2NjUxODEzMTM0Mzg2NDlhMTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTUg
QEAKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdEE6IHJn
YigyNTUsIDAsIDApCitob3N0QjogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigwLCAwLCAyNTUp
Citob3N0OiByZ2IoMTI4LCAxMjgsIDEyOCkKK2hvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiBy
Z2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAxMjgpCitob3N0OiByZ2IoMjU1LCAy
NTUsIDApCitob3N0OiByZ2IoMjU1LCAwLCAwKQorbmVzdGVkSG9zdDogcmdiKDAsIDAsIDI1NSkK
K2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0OiByZ2IoMjU1LCAyNTUsIDApCitIZWxsbwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43ZDRiNTExZWUwMmZhOWQ3NTFlNTdlMTY5YjAwYTZkODc3ZDUzYTZkCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLmh0bWwK
QEAgLTAsMCArMSwxOTAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzdHls
ZT4KKyNob3N0IHsKKyAgY29sb3I6IGdyYXk7Cit9Cis8L3N0eWxlPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3BvbHlmaWxsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBkdW1w
Q29tcHV0ZWRTdHlsZShub2RlKQoreworICAgIGRlYnVnKG5vZGUuaWQgKyAiOiAiICsgZG9jdW1l
bnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZh
bHVlKCdjb2xvcicpKTsKK30KKworZnVuY3Rpb24gcHJlcHJvY2Vzc0ZvclRlc3QoKQoreworICAg
IHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyZW50Iik7CisgICAgcGFy
ZW50LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJob3N0Ij48c3Bhbj5IZWxsbzwvc3Bhbj48L2Rpdj4n
OworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlQ29udGVudENhc2UoKQoreworICAgIHByZXByb2Nl
c3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9z
dCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBz
aGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwv
c3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVTaGFkb3dDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNz
Rm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3Qi
KTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hh
ZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0
eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30K
KworZnVuY3Rpb24gdGVzdEhvc3RXaXRoU2VsZWN0b3IoKQoreworICAgIHZhciBwYXJlbnQgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyZW50Iik7CisgICAgcGFyZW50LmlubmVySFRNTCA9
ICI8c3R5bGUgc2NvcGVkPiAuaG9zdCB7IGNvbG9yOiBncmF5IH07PC9zdHlsZT4iCisgICAgICAg
ICsgIjxkaXYgaWQ9J2hvc3RBJyBjbGFzcz0naG9zdCc+PHNwYW4+SGVsbG88L3NwYW4+PC9kaXY+
IgorICAgICAgICArICI8c3BhbiBpZD0naG9zdEInIGNsYXNzPSdob3N0Jz48c3Bhbj5Xb3JsZDwv
c3Bhbj48L3NwYW4+IjsKKworICAgIHZhciBob3N0QSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJob3N0QSIpOworICAgIHZhciBzaGFkb3dBID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdEEp
OworICAgIHZhciBzdHlsZSA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IHNw
YW4geyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT4iOworICAgIHNoYWRvd0EuaW5uZXJIVE1MID0g
c3R5bGUgKyAiPHNoYWRvdz48L3NoYWRvdz4iOworCisgICAgdmFyIGhvc3RCID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImhvc3RCIik7CisgICAgdmFyIHNoYWRvd0IgPSBuZXcgV2ViS2l0U2hh
ZG93Um9vdChob3N0Qik7CisgICAgc2hhZG93Qi5pbm5lckhUTUwgPSBzdHlsZSArICI8c2hhZG93
Pjwvc2hhZG93PiI7CisKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0QSk7CisgICAgZHVtcENv
bXB1dGVkU3R5bGUoaG9zdEIpOworfQorCitmdW5jdGlvbiB0ZXN0UHNldWRvSG9zdFdpdGhTY29w
ZWQoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hh
ZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxkaXY+PHN0eWxlIHNjb3Bl
ZD5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz48
ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48
L2Rpdj48L2Rpdj4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlv
biB0ZXN0UHNldWRvSG9zdFdpdGhGYWxsYmFja1NoYWRvdygpCit7CisgICAgcHJlcHJvY2Vzc0Zv
clRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7
CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAg
IHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG9s
ZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsg
fSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5l
ckhUTUwgPSAiPGNvbnRlbnQ+PHNoYWRvdz48L3NoYWRvdz48L2NvbnRlbnQ+IjsKKyAgICBkdW1w
Q29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFR3b1NoYWRvd1Jvb3RzQ2Fz
ZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJL
aXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRT
aGFkb3dSb290KGhvc3QpOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBo
b3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsK
KyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29s
b3I6IGJsdWU7IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIGR1bXBDb21wdXRl
ZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0VHdvU2hhZG93Um9vdHNDcmVhdGluZ0Rp
ZmZlcmVudE9yZGVyQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIg
aG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNo
YWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRv
dyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHlvdW5nZXN0U2hhZG93LmlubmVy
SFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48c2hh
ZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhv
c3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOwor
ICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0TXVsdGlwbGVT
aGFkb3dSb290c1dpdGhJbmVydFNoYWRvd0NvbnRlbnQoKQoreworICAgIHByZXByb2Nlc3NGb3JU
ZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOwor
ICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2
YXIgb2xkZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91
bmdlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2Vz
dFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworCisgICAgeW91bmdlc3RTaGFk
b3cuaW5uZXJIVE1MID0gIjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICB5b3VuZ2VyU2hhZG93Lmlu
bmVySFRNTCA9ICI8Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBvbGRlclNoYWRvdy5pbm5lckhU
TUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGdyZWVuOyB9IH08L3N0eWxlPjxzaGFk
b3c+PC9zaGFkb3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9z
dCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7Cisg
ICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZVNo
YWRvd1Jvb3RzV2l0aEluZXJ0U2hhZG93KCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOwor
ICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIg
b2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIG9sZGVy
U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXJTaGFk
b3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cg
PSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKworICAgIHlvdW5nZXN0U2hhZG93LmlubmVy
SFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogeWVsbG93OyB9IH08L3N0eWxlPjxz
aGFkb3c+PC9zaGFkb3c+IjsKKyAgICB5b3VuZ2VyU2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+
QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48ZGl2PmluZXJ0PC9kaXY+IjsK
KyAgICBvbGRlclNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6
IGdyZWVuOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBvbGRlc3RTaGFkb3cu
aW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+
PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisK
K2Z1bmN0aW9uIHRlc3ROZXN0ZWRDYXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOwor
ICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIg
b3V0ZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBvdXRlclNoYWRv
dy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHls
ZT48ZGl2IGlkPSJuZXN0ZWRIb3N0Ij5Jbm5lclNoYWRvdzwvZGl2Pic7CisgICAgdmFyIG5lc3Rl
ZCA9IG91dGVyU2hhZG93LmdldEVsZW1lbnRCeUlkKCJuZXN0ZWRIb3N0Iik7CisgICAgdmFyIGlu
bmVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QobmVzdGVkKTsKKyAgICBpbm5lclNoYWRv
dy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5
bGU+U2hvdyA8c2hhZG93Pjwvc2hhZG93PiBpbiBvdXRlci4nOworICAgIGR1bXBDb21wdXRlZFN0
eWxlKGhvc3QpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKG5lc3RlZCk7Cit9CisKK2Z1bmN0aW9u
IHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAg
ICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgaG9zdC5p
bm5lckhUTUwgPSAiPHN0eWxlIHNjb3BlZD4jaG9zdCB7IGNvbG9yOiB5ZWxsb3c7IH08L3N0eWxl
PjxzcGFuPkhlbGxvPC9zcGFuPiI7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dS
b290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgI2hvc3Qg
eyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBD
b21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0SG9zdFZzSW5saW5lU3R5bGUo
KQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIGhvc3Quc3R5bGUuY29sb3IgPSAieWVsbG93IjsK
KyAgICBob3N0LmlubmVySFRNTCA9ICI8c3Bhbj5IZWxsbzwvc3Bhbj4iOworICAgIHZhciBzaGFk
b3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0g
IjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9j
b250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHJ1
blRlc3RzKCkKK3sKKyAgICB0ZXN0U2ltcGxlQ29udGVudENhc2UoKTsKKyAgICB0ZXN0U2ltcGxl
U2hhZG93Q2FzZSgpOworICAgIHRlc3RIb3N0V2l0aFNlbGVjdG9yKCk7CisgICAgdGVzdFBzZXVk
b0hvc3RXaXRoU2NvcGVkKCk7CisgICAgdGVzdFBzZXVkb0hvc3RXaXRoRmFsbGJhY2tTaGFkb3co
KTsKKyAgICB0ZXN0VHdvU2hhZG93Um9vdHNDYXNlKCk7CisgICAgdGVzdFR3b1NoYWRvd1Jvb3Rz
Q3JlYXRpbmdEaWZmZXJlbnRPcmRlckNhc2UoKTsKKyAgICB0ZXN0TXVsdGlwbGVTaGFkb3dSb290
c1dpdGhJbmVydFNoYWRvd0NvbnRlbnQoKTsKKyAgICB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dp
dGhJbmVydFNoYWRvdygpOworICAgIHRlc3ROZXN0ZWRDYXNlKCk7CisgICAgdGVzdEhvc3RWc1Nj
b3BlZFN0eWxlKCk7CisgICAgdGVzdEhvc3RWc0lubGluZVN0eWxlKCk7Cit9Cis8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKSI+CisgIDxkaXYgaWQ9InBhcmVudCI+
CisgIDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170292</attachid>
            <date>2012-10-23 19:09:35 -0700</date>
            <delta_ts>2012-10-24 23:10:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88606-20121024110811.patch</filename>
            <type>text/plain</type>
            <size>43542</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMjg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWY4ZTEyMDg5Yzc0NjM2
NzQ2MDMwODIzNjQwNGUyNGUzNTMyNTE2MC4uOTI0ZTNlNTVjOTU4ZDNiZWU0NmYxYWI3MTU0MDcz
NjQyMmY1MzEzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMiBAQAorMjAxMi0xMC0xMiAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01d
IE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IEhhamltZSBNb3JpdGEuCisKKyAgICAgICAgSW1wbGVtZW50ZWQgQGhvc3QtQHJ1bGVzIGFj
Y29yZGluZyB0byB0aGUgc2hhZG93IGRvbSBzcGVjOgorICAgICAgICBodHRwOi8vZHZjcy53My5v
cmcvaGcvd2ViY29tcG9uZW50cy9yYXctZmlsZS90aXAvc3BlYy9zaGFkb3cvaW5kZXguaHRtbCNo
b3N0LWF0LXJ1bGUKKyAgICAgICAgVGhlIGRlc2lnbiBkb2MgaXM6CisgICAgICAgIGh0dHBzOi8v
ZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVAyeW9yY2hGOGxjaTJzY2NyLW1WU1JmMmR0dmpL
ZWl1eVFXekNCMmJFQTgvZWRpdAorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9hdGhv
c3QtYXRydWxlcy5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhbW1hci55LmluOgorICAgICAg
ICBBZGRlZCBydWxlcyBmb3IgcGFyc2luZyBAaG9zdCBALXJ1bGVzLgorICAgICAgICAqIGNzcy9D
U1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRlY3RBdFRva2Vu
KToKKyAgICAgICAgQWRkZWQgYSBuZXcgdG9rZW4gIkBob3N0Ii4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUpOgorICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2Qg
dG8gY3JlYXRlIGFuIEBob3N0IEAtcnVsZSwgd2hpY2ggaXMgaW52b2tlZCBmcm9tCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIEFkZGVkIGEg
ZGVjbGFyYXRpb24gb2YgdGhlIGFib3ZlIG5ldyBtZXRob2Q6IGNyZWF0ZUhvc3RSdWxlLgorICAg
ICAgICAqIGNzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaDoKKyAgICAgICAgQWRkZWQgSE9TVF9S
VUxFIHRvIGVudW0gVHlwZS4KKyAgICAgICAgKiBjc3MvUnVsZVNldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSdWxlRGF0YTo6UnVsZURhdGEpOgorICAgICAgICBNb2RpZmllZCBtdWx0aXBsZSBi
b29sIGFyZ3VtZW50cyBpbnRvIG9uZSBhcmd1bWVudC4gTm93IGl0CisgICAgICAgIHVzZXMgY29t
YmluYXRpb25zIG9mIHZhbHVlcyBmcm9tIGVudW0gQWRkUnVsZUZsYWdzLgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRS
ZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFN0eWxlUnVsZSk6Cisg
ICAgICAgIFVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBSdWxlRGF0YSdzIGNoYW5nZS4KKyAgICAg
ICAgTW9kaWZpZWQgdG8gSW52b2tlIGluY3JlYXNlU3BlY2lmaWNpdHkgaWYgdGhlIGdpdmVuIHJ1
bGUgaXMgQGhvc3QKKyAgICAgICAgQC1ydWxlLgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6
YWRkUnVsZXNGcm9tU2hlZXQpOgorICAgICAgICBJbnZva2VkIGFkZEhvc3RSdWxlIGlmIHRoZSBn
aXZlbiBydWxlIGlzIEBob3N0IEAtcnVsZS4KKyAgICAgICAgKiBjc3MvUnVsZVNldC5oOgorICAg
ICAgICAoUnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmluY3JlYXNlU3Bl
Y2lmaWNpdHkpOgorICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgdG8gaW5jcmVhc2Ugc2VsZWN0
b3IncyBzcGVjaWZpY2l0eS4gVGhpcyBtZXRob2QgaXMKKyAgICAgICAgdXNlZCB0byBtYWtlIEBo
b3N0IEAtcnVsZXMnIHNwZWNpZmljaXR5IGxhcmdlciB0aGFuIG5vcm1hbCBhdXRob3IKKyAgICAg
ICAgcnVsZXMnIHNwZWNpZmljaXR5LgorICAgICAgICAoUnVsZVNldCk6CisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJ1bGVTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRkSG9zdFJ1bGUpOgorICAgICAgICBBIHdy
YXBwZXIgbWV0aG9kIHRvIGludm9rZSBTdHlsZVNjb3BlUmVzb2x2ZXI6OmFkZEhvc3RSdWxlLiBU
aGUgbWV0aG9kCisgICAgICAgIGlzIHVzZWQgdG8gbWFrZSBvbmx5IFN0eWxlUmVzb2x2ZXIga25v
dyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYWJvdXQKKyAgICAgICAgY2xhc3MgU3R5bGVTY29w
ZVJlc29sdmVyLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9y
U3R5bGVzaGVldHMpOgorICAgICAgICBVcGRhdGVkIGFjY29yZGluZyB0byB0aGUgUnVsZURhdGEn
cyBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQg
bWF0Y2hlZCBob3N0IHJ1bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhp
cyBtZXRob2QgaW52b2tlcworICAgICAgICBTdHlsZVNjb3BlUmVzb2x2ZXI6OnN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMgdG8gZmluZAorICAgICAgICBtYXRjaGVkIGhvc3Qg
cnVsZXMuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Om1hdGNoSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgbWF0Y2hl
ZCBob3N0IHJ1bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhpcyBtZXRo
b2QgaW52b2tlcyBTdHlsZVNjb3BlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzIHRvIGZpbmQKKyAg
ICAgICAgbWF0Y2hlZCBob3N0IHJ1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyk6CisgICAgICAgIE1vZGlmaWVkIHRvIGludm9rZSBt
YXRjaEhvc3RSdWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNo
YXJlZFN0eWxlKToKKyAgICAgICAgRGlzYWJsZSBzaWJsaW5nIHN0eWxlIGNhY2hlIGlmIHRoZSBn
aXZlbiBlbGVtZW50IGlzIGEgc2hhZG93IGhvc3QgYW5kCisgICAgICAgIGFueSBAaG9zdCBALXJ1
bGVzIGFyZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LgorICAgICAgICAqIGNzcy9TdHlsZVJlc29s
dmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjplbnN1cmVTY29wZVJlc29s
dmVyKToKKyAgICAgICAgSWYgbm8gc2NvcGVSZXNvbHZlciBpcyBjcmVhdGVkLCBjcmVhdGUgYW5k
IHJldHVybiB0aGUgaW5zdGFuY2UuCisgICAgICAgIElmIGNyZWF0ZWQsIGp1c3QgcmV0dXJuIHRo
ZSBpbnN0YW5jZS4KKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9TdHls
ZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6cmVwb3J0TWVtb3J5
VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJveSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KToKKyAgICAgICAgSW1wbGVtZW50ZWQgY2xhc3MgU3R5
bGVSdWxlSG9zdC4gVGhlIGNsYXNzIGlzIGFsbW9zdCB0aGUgc2FtZSBhcworICAgICAgICBTdHls
ZVJ1bGVCbG9jayBleGNlcHQgdHlwZS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNz
cy9TdHlsZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmlzSG9zdFJ1
bGUpOgorICAgICAgICAoU3R5bGVSdWxlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1
bGVIb3N0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y29weSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlQXRIb3N0UnVs
ZVNldEZvcik6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUnVsZVNldCBm
b3IgdGhlIGdpdmVuIHNoYWRvdyByb290LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OmF0SG9zdFJ1bGVTZXRGb3IpOgorICAgICAgICBB
IG5ldyBwcml2YXRlIGlubGluZSBtZXRob2QgdG8gb2J0YWluIEBob3N0IEAtcnVsZXMgZGVjbGFy
ZWQgaW4KKyAgICAgICAgdGhlIGdpdmVuIHNoYWRvdyByb290LgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVTY29wZVJlc29sdmVyOjphZGRIb3N0UnVsZSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1l
dGhvZCB0byByZWdpc3RlciBAaG9zdCBALXJ1bGVzIHdpdGggc2hhZG93IHJvb3RzLgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRj
aGVzSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgd2hldGhlciBhbnkg
QGhvc3QgQC1ydWxlcyBhcmUgYXBwbGllZCB0bworICAgICAgICB0aGUgZ2l2ZW4gaG9zdCBlbGVt
ZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjptYXRjaEhvc3RSdWxl
cyk6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBmaW5kIG1hdGNoZWQgcnVsZXMgZm9yIHRoZSBn
aXZlbiBob3N0IGVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6
OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN0eWxlU2NvcGVSZXNvbHZlcik6CisgICAg
ICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGls
ZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMpOgorCiAyMDEyLTEwLTIzICBB
bmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBTaHJpbmsgaW1tdXRh
YmxlIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIGFuZCBTdHlsZVByb3BlcnR5U2V0IGJ5IG9uZSBwb2lu
dGVyIGVhY2guCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55Lmlu
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbgppbmRleCA0Yjg5NGZiOTU5N2Rl
ZjUyYTI0YjkzZmQ1NGVmNzQzMjQwYTVjNzY4Li40MDQ1MTEzNWNjYzA4NTJhZmE0ZTM5OWIxNTEx
NTMwZmQ0NmUxZGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55
LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4KQEAgLTk1LDYgKzk1
LDkgQEAgc3RhdGljIGlubGluZSBpbnQgY3NzeXllcnJvcih2b2lkKiwgY29uc3QgY2hhciopCiAl
dG9rZW4gU1VQUE9SVFNfU1lNCiAjZW5kaWYKICV0b2tlbiBGT05UX0ZBQ0VfU1lNCisjaWYgRU5B
QkxFX1NIQURPV19ET00KKyV0b2tlbiBIT1NUX1NZTQorI2VuZGlmCiAldG9rZW4gQ0hBUlNFVF9T
WU0KICV0b2tlbiBOQU1FU1BBQ0VfU1lNCiAldG9rZW4gVkFSRlVOQ1RJT04KQEAgLTE4Nyw2ICsx
OTAsOSBAQCBzdGF0aWMgaW5saW5lIGludCBjc3N5eWVycm9yKHZvaWQqLCBjb25zdCBjaGFyKikK
ICV0eXBlIDxydWxlPiBwYWdlCiAldHlwZSA8cnVsZT4gbWFyZ2luX2JveAogJXR5cGUgPHJ1bGU+
IGZvbnRfZmFjZQorI2lmIEVOQUJMRV9TSEFET1dfRE9NCisldHlwZSA8cnVsZT4gaG9zdAorI2Vu
ZGlmCiAldHlwZSA8cnVsZT4ga2V5ZnJhbWVzCiAldHlwZSA8cnVsZT4gaW52YWxpZF9ydWxlCiAl
dHlwZSA8cnVsZT4gc2F2ZV9ibG9jawpAQCAtNDAyLDYgKzQwOCw5IEBAIHZhbGlkX3J1bGU6CiAj
aWYgRU5BQkxFX0NTUzNfQ09ORElUSU9OQUxfUlVMRVMKICAgfCBzdXBwb3J0cwogI2VuZGlmCisj
aWYgRU5BQkxFX1NIQURPV19ET00KKyAgfCBob3N0CisjZW5kaWYKICAgOwogCiBydWxlOgpAQCAt
OTAxLDYgKzkxMCwyNSBAQCBmb250X2ZhY2U6CiAgICAgfQogOwogCisjaWYgRU5BQkxFX1NIQURP
V19ET00KK2JlZm9yZV9ob3N0X3J1bGU6CisgICAgLyogZW1wdHkgKi8geworICAgICAgICBwYXJz
ZXItPm1hcmtSdWxlSGVhZGVyU3RhcnQoQ1NTUnVsZVNvdXJjZURhdGE6OkhPU1RfUlVMRSk7Cisg
ICAgfQorICAgIDsKKworaG9zdDoKKyAgICBiZWZvcmVfaG9zdF9ydWxlIEhPU1RfU1lNIGF0X3J1
bGVfaGVhZGVyX2VuZF9tYXliZV9zcGFjZQorICAgICd7JyBhdF9ydWxlX2JvZHlfc3RhcnQgbWF5
YmVfc3BhY2UgYmxvY2tfcnVsZV9saXN0IHNhdmVfYmxvY2sgeworICAgICAgICAkJCA9IHBhcnNl
ci0+Y3JlYXRlSG9zdFJ1bGUoJDcpOworICAgIH0KKyAgICB8IGJlZm9yZV9ob3N0X3J1bGUgSE9T
VF9TWU0gYXRfcnVsZV9oZWFkZXJfZW5kX21heWJlX3NwYWNlICc7JyB7CisgICAgICAgICQkID0g
MDsKKyAgICAgICAgcGFyc2VyLT5wb3BSdWxlRGF0YSgpOworICAgIH0KKyAgICA7CisjZW5kaWYK
KwogcmVnaW9uX3NlbGVjdG9yOgogICAgIHNlbGVjdG9yX2xpc3QgewogICAgICAgICBpZiAoJDEp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggMGYwODg2ZjM0M2JhN2UzM2JlMmE3ZGIx
Y2Q3ZGVmYWQxOWZmZWFlOS4uOTUzOTJlOWI4OGY2ZjI0ZGY4MDI1ZDBkYjAxMzdiMDc5ZmUyMzE4
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTkxODUsNiArOTE4NSwxMyBAQCBpbmxp
bmUgdm9pZCBDU1NQYXJzZXI6OmRldGVjdEF0VG9rZW4oaW50IGxlbmd0aCwgYm9vbCBoYXNFc2Nh
cGUpCiAgICAgICAgICAgICBtX3Rva2VuID0gRk9OVF9GQUNFX1NZTTsKICAgICAgICAgcmV0dXJu
OwogCisjaWYgRU5BQkxFKFNIQURPV19ET00pCisgICAgY2FzZSAnaCc6CisgICAgICAgIGlmIChs
ZW5ndGggPT0gNSAmJiBpc0VxdWFsVG9DU1NJZGVudGlmaWVyKG5hbWUgKyAyLCAib3N0IikpCisg
ICAgICAgICAgICBtX3Rva2VuID0gSE9TVF9TWU07CisgICAgICAgIHJldHVybjsKKyNlbmRpZgor
CiAgICAgY2FzZSAnaSc6CiAgICAgICAgIGlmIChsZW5ndGggPT0gNyAmJiBpc0VxdWFsVG9DU1NJ
ZGVudGlmaWVyKG5hbWUgKyAyLCAibXBvcnQiKSkgewogICAgICAgICAgICAgbV9wYXJzaW5nTW9k
ZSA9IE1lZGlhUXVlcnlNb2RlOwpAQCAtMTAwMTcsNiArMTAwMjQsMjQgQEAgU3R5bGVSdWxlQmFz
ZSogQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUoKQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKK1N0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3Jl
YXRlSG9zdFJ1bGUoUnVsZUxpc3QqIHJ1bGVzKQoreworICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9
IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKKyAgICBSZWZQdHI8U3R5bGVS
dWxlSG9zdD4gcnVsZTsKKyAgICBpZiAocnVsZXMpCisgICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVI
b3N0OjpjcmVhdGUoKnJ1bGVzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUnVsZUxpc3QgZW1wdHlS
dWxlczsKKyAgICAgICAgcnVsZSA9IFN0eWxlUnVsZUhvc3Q6OmNyZWF0ZShlbXB0eVJ1bGVzKTsK
KyAgICB9CisgICAgU3R5bGVSdWxlSG9zdCogcmVzdWx0ID0gcnVsZS5nZXQoKTsKKyAgICBtX3Bh
cnNlZFJ1bGVzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CisgICAgcHJvY2Vzc0FuZEFkZE5ld1J1
bGVUb1NvdXJjZVRyZWVJZk5lZWRlZCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYK
Kwogdm9pZCBDU1NQYXJzZXI6OmFkZE5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZp
eCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpCiB7CiAgICAgaWYgKCFtX3N0eWxlU2hlZXQgfHwg
IW1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXgg
NWY5OWU2MjI2ZTBjM2JlNzczNjI0NTE1YmYxYWNiZjBiMzE4ZGZkZi4uOGIwOTY3YThmNmE3YTQ1
M2UyM2ZmMmQ1NjYyMjAyZDc4NGY5ZTNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMjgy
LDYgKzI4Miw5IEBAIHB1YmxpYzoKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVQYWdlUnVsZShQ
YXNzT3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2VsZWN0b3IpOwogICAgIFN0eWxlUnVs
ZUJhc2UqIGNyZWF0ZVJlZ2lvblJ1bGUoQ1NTU2VsZWN0b3JWZWN0b3IqIHJlZ2lvblNlbGVjdG9y
LCBSdWxlTGlzdCogcnVsZXMpOwogICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZU1hcmdpbkF0UnVs
ZShDU1NTZWxlY3Rvcjo6TWFyZ2luQm94VHlwZSk7CisjaWYgRU5BQkxFKFNIQURPV19ET00pCisg
ICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlSG9zdFJ1bGUoUnVsZUxpc3QqIHJ1bGVzKTsKKyNlbmRp
ZgogICAgIHZvaWQgc3RhcnREZWNsYXJhdGlvbnNGb3JNYXJnaW5Cb3goKTsKICAgICB2b2lkIGVu
ZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJv
cGVydHlTb3VyY2VEYXRhLmgKaW5kZXggNDY5YmRiNjMwYzFhNWM1ZGJhOTkzZmQxYWQ1OWVkMDc0
NDlhNTViZS4uMDc5ZWMzMzYyNDk1YzA3OTc5YjQ3NWFmZGU3NzYwMjM4NGM5OTk2ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaApAQCAtOTQsNyArOTQsOCBA
QCBzdHJ1Y3QgQ1NTUnVsZVNvdXJjZURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NSdWxlU291
cmNlRGF0YT4gewogICAgICAgICBGT05UX0ZBQ0VfUlVMRSwKICAgICAgICAgUEFHRV9SVUxFLAog
ICAgICAgICBLRVlGUkFNRVNfUlVMRSwKLSAgICAgICAgUkVHSU9OX1JVTEUKKyAgICAgICAgUkVH
SU9OX1JVTEUsCisgICAgICAgIEhPU1RfUlVMRQogICAgIH07CiAKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gY3JlYXRlKFR5cGUgdHlwZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0
LmNwcAppbmRleCBlMmJlNTc3MWUwMjVmMTRjZjlhODVkZTdlNTFjZDljNWExMzA5MDU5Li5iM2Yw
ZmRlZTFmY2JjMzM2ZDdlNGJmZTc4YzMzM2I0M2JkNDAwODA4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQu
Y3BwCkBAIC0xMDcsMTggKzEwNywxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNVbmNv
bW1vbkF0dHJpYnV0ZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcgogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotUnVsZURhdGE6OlJ1bGVEYXRhKFN0eWxlUnVsZSogcnVsZSwgdW5z
aWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRpb24sIGJvb2wgaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpblJlZ2lv
blJ1bGUpCitSdWxlRGF0YTo6UnVsZURhdGEoU3R5bGVSdWxlKiBydWxlLCB1bnNpZ25lZCBzZWxl
Y3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgQWRkUnVsZUZsYWdzIGFkZFJ1bGVGbGFncykK
ICAgICA6IG1fcnVsZShydWxlKQogICAgICwgbV9zZWxlY3RvckluZGV4KHNlbGVjdG9ySW5kZXgp
CiAgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQogICAgICwgbV9zcGVjaWZpY2l0eShzZWxlY3Rv
cigpLT5zcGVjaWZpY2l0eSgpKQotICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY2Fu
VXNlRmFzdENoZWNrU2VsZWN0b3IgJiYgU2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVT
ZWxlY3RvcihzZWxlY3RvcigpKSkKKyAgICAsIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKChh
ZGRSdWxlRmxhZ3MgJiBSdWxlQ2FuVXNlRmFzdENoZWNrU2VsZWN0b3IpICYmIFNlbGVjdG9yQ2hl
Y2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IoKSkpCiAgICAgLCBtX2hhc011
bHRpcGFydFNlbGVjdG9yKCEhc2VsZWN0b3IoKS0+dGFnSGlzdG9yeSgpKQogICAgICwgbV9oYXNS
aWdodG1vc3RTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChpc1NlbGVjdG9yTWF0
Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKHNlbGVjdG9yKCkpKQogICAgICwgbV9jb250YWluc1Vu
Y29tbW9uQXR0cmlidXRlU2VsZWN0b3IoV2ViQ29yZTo6Y29udGFpbnNVbmNvbW1vbkF0dHJpYnV0
ZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQogICAgICwgbV9saW5rTWF0Y2hUeXBlKFNlbGVjdG9yQ2hl
Y2tlcjo6ZGV0ZXJtaW5lTGlua01hdGNoVHlwZShzZWxlY3RvcigpKSkKLSAgICAsIG1faGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbihoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQotICAgICwgbV9p
c0luUmVnaW9uUnVsZShpblJlZ2lvblJ1bGUpCisgICAgLCBtX2hhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4oYWRkUnVsZUZsYWdzICYgUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4pCisgICAg
LCBtX2lzSW5SZWdpb25SdWxlKGFkZFJ1bGVGbGFncyAmIFJ1bGVJc0luUmVnaW9uUnVsZSkKIHsK
ICAgICBBU1NFUlQobV9wb3NpdGlvbiA9PSBwb3NpdGlvbik7CiAgICAgQVNTRVJUKG1fc2VsZWN0
b3JJbmRleCA9PSBzZWxlY3RvckluZGV4KTsKQEAgLTIwNyw5ICsyMDcsMTQgQEAgdm9pZCBSdWxl
U2V0OjphZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFw
LCBjb25zdCBSdWxlRGEKICAgICBydWxlcy0+YXBwZW5kKHJ1bGVEYXRhKTsKIH0KIAotdm9pZCBS
dWxlU2V0OjphZGRSdWxlKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwg
Ym9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVj
dG9yLCBib29sIGluUmVnaW9uUnVsZSkKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUq
IHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIEFkZFJ1bGVGbGFncyBhZGRSdWxlRmxhZ3Mp
CiB7Ci0gICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgbV9ydWxlQ291
bnQrKywgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3Is
IGluUmVnaW9uUnVsZSk7CisgICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRl
eCwgbV9ydWxlQ291bnQrKywgYWRkUnVsZUZsYWdzKTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgYXRob3N0UnVsZVNwZWNpZmljaXR5ID0gMHgxMDAwMDA7CisKKyAgICBpZiAoYWRkUnVsZUZs
YWdzICYgUnVsZUlzSG9zdFJ1bGUpCisgICAgICAgIHJ1bGVEYXRhLmluY3JlYXNlU3BlY2lmaWNp
dHkoYXRob3N0UnVsZVNwZWNpZmljaXR5KTsKKwogICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21SdWxl
RGF0YShtX2ZlYXR1cmVzLCBydWxlRGF0YSk7CiAKICAgICBDU1NTZWxlY3Rvciogc2VsZWN0b3Ig
PSBydWxlRGF0YS5zZWxlY3RvcigpOwpAQCAtMjY0LDEwICsyNjksMTIgQEAgdm9pZCBSdWxlU2V0
OjphZGRSZWdpb25SdWxlKFN0eWxlUnVsZVJlZ2lvbiogcmVnaW9uUnVsZSwgYm9vbCBoYXNEb2N1
bWVudFNlY3VyaXQKIAogICAgIC8vIENvbGxlY3QgdGhlIHJlZ2lvbiBydWxlcyBpbnRvIGEgcnVs
ZSBzZXQKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGNoaWxkUnVs
ZXMgPSByZWdpb25SdWxlLT5jaGlsZFJ1bGVzKCk7CisgICAgQWRkUnVsZUZsYWdzIGFkZFJ1bGVG
bGFncyA9IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbiA6IFJ1bGVIYXNOb1NwZWNpYWxTdGF0ZTsKKyAgICBhZGRSdWxlRmxhZ3MgPSBzdGF0
aWNfY2FzdDxBZGRSdWxlRmxhZ3M+KGFkZFJ1bGVGbGFncyB8IFJ1bGVDYW5Vc2VGYXN0Q2hlY2tT
ZWxlY3RvciB8IFJ1bGVJc0luUmVnaW9uUnVsZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgU3R5bGVSdWxlQmFzZSogcmVn
aW9uU3R5bGluZ1J1bGUgPSBjaGlsZFJ1bGVzW2ldLmdldCgpOwogICAgICAgICBpZiAocmVnaW9u
U3R5bGluZ1J1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICByZWdpb25SdWxlU2V0LT5h
ZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUpLCBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIHJlZ2lv
blJ1bGVTZXQtPmFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihyZWdpb25TdHls
aW5nUnVsZSksIGFkZFJ1bGVGbGFncyk7CiAgICAgfQogICAgIC8vIFVwZGF0ZSB0aGUgImdsb2Jh
bCIgcnVsZSBjb3VudCBzbyB0aGF0IHByb3BlciBvcmRlciBpcyBtYWludGFpbmVkCiAgICAgbV9y
dWxlQ291bnQgPSByZWdpb25SdWxlU2V0LT5tX3J1bGVDb3VudDsKQEAgLTI4Niw2ICsyOTMsNyBA
QCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hl
ZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdQogICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQo
aW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHJlc29sdmVyLCBzY29wZSk7CiAgICAg
fQogICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA9IHJlc29sdmVyICYmIHJlc29s
dmVyLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHNoZWV0LT5iYXNl
VVJMKCkpOworICAgIEFkZFJ1bGVGbGFncyBhZGRSdWxlRmxhZ3MgPSBzdGF0aWNfY2FzdDxBZGRS
dWxlRmxhZ3M+KChoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID8gUnVsZUhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4gOiAwKSB8ICghc2NvcGUgPyBSdWxlQ2FuVXNlRmFzdENoZWNrU2VsZWN0b3Ig
OiAwKSk7CiAKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIHJ1bGVz
ID0gc2hlZXQtPmNoaWxkUnVsZXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVs
ZXMuc2l6ZSgpOyArK2kpIHsKQEAgLTI5Myw3ICszMDEsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1
bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdQogCiAgICAgICAgIEFTU0VSVCghcnVsZS0+aXNJbXBvcnRSdWxlKCkpOwogICAgICAgICBp
ZiAocnVsZS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNf
Y2FzdDxTdHlsZVJ1bGUqPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgIXNjb3Bl
KTsKKyAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihydWxl
KSwgYWRkUnVsZUZsYWdzKTsKICAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNQYWdlUnVsZSgpKQog
ICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+KHJ1bGUp
KTsKICAgICAgICAgZWxzZSBpZiAocnVsZS0+aXNNZWRpYVJ1bGUoKSkgewpAQCAtMzA1LDcgKzMx
Myw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRz
KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1CiAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAg
ICAgICAgU3R5bGVSdWxlQmFzZSogY2hpbGRSdWxlID0gY2hpbGRSdWxlc1tqXS5nZXQoKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkUnVsZS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihjaGls
ZFJ1bGUpLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCAhc2NvcGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KGNoaWxkUnVs
ZSksIGFkZFJ1bGVGbGFncyk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkUnVs
ZS0+aXNQYWdlUnVsZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYWRkUGFnZVJ1bGUoc3Rh
dGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+KGNoaWxkUnVsZSkpOwogICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzRm9udEZhY2VSdWxlKCkgJiYgcmVzb2x2ZXIpIHsKQEAg
LTM0NywxNSArMzU1LDE5IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVT
aGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1CiAgICAgICAgICAgICBh
ZGRSZWdpb25SdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVJlZ2lvbio+KHJ1bGUpLCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luKTsKICAgICAgICAgfQogI2VuZGlmCisjaWYgRU5BQkxFKFNIQURP
V19ET00pCisgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzSG9zdFJ1bGUoKSkKKyAgICAgICAgICAg
IHJlc29sdmVyLT5hZGRIb3N0UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVIb3N0Kj4ocnVsZSks
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHNjb3BlKTsKKyNlbmRpZgogICAgIH0KICAgICBp
ZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQogICAgICAgICBzaHJpbmtUb0ZpdCgpOwogfQog
Ci12b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBp
c0luUmVnaW9uUnVsZSkKK3ZvaWQgUnVsZVNldDo6YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSogcnVs
ZSwgQWRkUnVsZUZsYWdzIGFkZFJ1bGVGbGFncykKIHsKICAgICBmb3IgKHNpemVfdCBzZWxlY3Rv
ckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHJ1
bGUtPnNlbGVjdG9yTGlzdCgpLmluZGV4T2ZOZXh0U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4
KSkKLSAgICAgICAgYWRkUnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luLCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgaXNJblJlZ2lvblJ1bGUpOworICAg
ICAgICBhZGRSdWxlKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIGFkZFJ1bGVGbGFncyk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgdm9pZCBzaHJpbmtNYXBWZWN0b3JzVG9GaXQoUnVsZVNldDo6QXRvbVJ1bGVN
YXAmIG1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oCmluZGV4IDY1NzcyMzhiYTkyMzZhOWQ2ODEwMzkxOTVh
MGRkNDNhMmU4MDgyYTAuLmEyZmJlY2JjMDBiMmNhMWI1MzJmNDk2YTk1YzA5MzUwMjZmYTRmN2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL1J1bGVTZXQuaApAQCAtMzEsNiArMzEsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitlbnVtIEFkZFJ1bGVGbGFncyB7CisgICAgUnVsZUhhc05vU3BlY2lhbFN0YXRlICAg
ICAgICAgPSAwLAorICAgIFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID0gMSwKKyAgICBS
dWxlQ2FuVXNlRmFzdENoZWNrU2VsZWN0b3IgICA9IDEgPDwgMSwKKyAgICBSdWxlSXNJblJlZ2lv
blJ1bGUgICAgICAgICAgICA9IDEgPDwgMiwKKyAgICBSdWxlSXNIb3N0UnVsZSAgICAgICAgICAg
ICAgICA9IDEgPDwgMywKK307CisKIGNsYXNzIENTU1NlbGVjdG9yOwogY2xhc3MgQ29udGFpbmVy
Tm9kZTsKIGNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3I7CkBAIC00MCw3ICs0OCw3IEBAIGNsYXNz
IFN0eWxlU2hlZXRDb250ZW50czsKIAogY2xhc3MgUnVsZURhdGEgewogcHVibGljOgotICAgIFJ1
bGVEYXRhKFN0eWxlUnVsZSosIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0
aW9uLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNr
U2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKTsKKyAgICBSdWxlRGF0YShTdHlsZVJ1bGUqLCB1
bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgQWRkUnVsZUZsYWdzKTsK
IAogICAgIHVuc2lnbmVkIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQog
ICAgIFN0eWxlUnVsZSogcnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQpAQCAtNTUsNiAr
NjMsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbGlua01hdGNoVHlwZTsgfQogICAgIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbjsgfQogICAgIGJv
b2wgaXNJblJlZ2lvblJ1bGUoKSBjb25zdCB7IHJldHVybiBtX2lzSW5SZWdpb25SdWxlOyB9Cisg
ICAgdm9pZCBpbmNyZWFzZVNwZWNpZmljaXR5KHVuc2lnbmVkIHZhbHVlKSB7IG1fc3BlY2lmaWNp
dHkgKz0gdmFsdWU7IH0KIAogICAgIC8vIFRyeSB0byBiYWxhbmNlIGJldHdlZW4gbWVtb3J5IHVz
YWdlICh0aGVyZSBjYW4gYmUgbG90cyBvZiBSdWxlRGF0YSBvYmplY3RzKSBhbmQgZ29vZCBmaWx0
ZXJpbmcgcGVyZm9ybWFuY2UuCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heGltdW1JZGVu
dGlmaWVyQ291bnQgPSA0OwpAQCAtOTgsOCArMTA3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBh
ZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yJiwgU3R5bGVSZXNvbHZlciogPSAwLCBjb25zdCBDb250YWluZXJOb2RlKiA9IDApOwog
Ci0gICAgdm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiwgYm9vbCBoYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29sIGlzSW5SZWdpb25S
dWxlID0gZmFsc2UpOwotICAgIHZvaWQgYWRkUnVsZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxl
Y3RvckluZGV4LCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFz
dENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1bGUgPSBmYWxzZSk7CisgICAgdm9pZCBh
ZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiwgQWRkUnVsZUZsYWdzKTsKKyAgICB2b2lkIGFkZFJ1bGUo
U3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgQWRkUnVsZUZsYWdzKTsKICAgICB2
b2lkIGFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UqKTsKICAgICB2b2lkIGFkZFRvUnVsZVNldChB
dG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiwgY29uc3QgUnVsZURhdGEmKTsKICAg
ICB2b2lkIGFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiwgYm9vbCBoYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCBhZDhk
ZGNiM2NkMTg4ZGE3NzBjM2M5NjViYjVmNTUyMTk4YjAyOTVhLi40YWQ1OTM5ZjQ3OWFhMDMzMzc4
NjlmOTE1NWM0Yzc3YTBkNWQyNGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CkBAIC0xMTcsNyArMTE3LDYgQEAKICNpbmNsdWRlICJTdHlsZVBlbmRpbmdJbWFnZS5oIgogI2lu
Y2x1ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgotI2luY2x1
ZGUgIlN0eWxlU2NvcGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5o
IgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgpAQCAtMzcy
LDcgKzM3MSw3IEBAIHN0YXRpYyBQYXNzT3duUHRyPFJ1bGVTZXQ+IG1ha2VSdWxlU2V0KGNvbnN0
IFZlY3RvcjxSdWxlRmVhdHVyZT4mIHJ1bGVzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBPd25QdHI8UnVsZVNldD4gcnVsZVNldCA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBydWxlU2V0LT5hZGRSdWxlKHJ1
bGVzW2ldLnJ1bGUsIHJ1bGVzW2ldLnNlbGVjdG9ySW5kZXgsIHJ1bGVzW2ldLmhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4sIGZhbHNlKTsKKyAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxlc1tp
XS5ydWxlLCBydWxlc1tpXS5zZWxlY3RvckluZGV4LCBydWxlc1tpXS5oYXNEb2N1bWVudFNlY3Vy
aXR5T3JpZ2luID8gUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gOiBSdWxlSGFzTm9TcGVj
aWFsU3RhdGUpOwogICAgIHJ1bGVTZXQtPnNocmlua1RvRml0KCk7CiAgICAgcmV0dXJuIHJ1bGVT
ZXQucmVsZWFzZSgpOwogfQpAQCAtNDExLDEyICs0MTAsMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9y
PFJlZlAKICAgICAgICAgaWYgKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSAmJiAhbV9tZWRpdW0t
PmV2YWwoY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpLCB0aGlzKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0ID0gY3NzU2hlZXQtPmNvbnRl
bnRzKCk7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKICAgICAgICAgaWYgKGNvbnN0IENvbnRh
aW5lck5vZGUqIHNjb3BlID0gU3R5bGVTY29wZVJlc29sdmVyOjpzY29wZUZvcihjc3NTaGVldCkp
IHsKLSAgICAgICAgICAgIGlmICghbV9zY29wZVJlc29sdmVyKQotICAgICAgICAgICAgICAgIG1f
c2NvcGVSZXNvbHZlciA9IGFkb3B0UHRyKG5ldyBTdHlsZVNjb3BlUmVzb2x2ZXIoKSk7Ci0gICAg
ICAgICAgICBtX3Njb3BlUmVzb2x2ZXItPmVuc3VyZVJ1bGVTZXRGb3Ioc2NvcGUpLT5hZGRSdWxl
c0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CisgICAgICAgICAgICBl
bnN1cmVTY29wZVJlc29sdmVyKCktPmVuc3VyZVJ1bGVTZXRGb3Ioc2NvcGUpLT5hZGRSdWxlc0Zy
b21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVs
ZXNGcm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcyk7CiAgICAgICAgIGlmICghbV9zdHls
ZVJ1bGVUb0NTU09NV3JhcHBlck1hcC5pc0VtcHR5KCkpCkBAIC03MTAsNyArNzA5LDEyIEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKE1hdGNoUmVzdWx0
JiByZXN1bHQpCiB2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKICNpZiBFTkFCTEUo
U1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKLSAgICBpZiAoIW1fc2NvcGVSZXNv
bHZlciB8fCAhbV9zY29wZVJlc29sdmVyLT5oYXNTY29wZWRTdHlsZXMoKSkKKyAgICBpZiAoIW1f
c2NvcGVSZXNvbHZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbWF0Y2hIb3N0UnVsZXMocmVz
dWx0LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisKKyAgICBpZiAoIW1fc2NvcGVSZXNvbHZlci0+aGFz
U2NvcGVkU3R5bGVzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hdGNoIHNjb3BlZCBh
dXRob3IgcnVsZXMgYnkgdHJhdmVyc2luZyB0aGUgc2NvcGVkIGVsZW1lbnQgc3RhY2sgKHJlYnVp
bGQgaXQgaWYgaXQgZ290IGluY29uc2lzdGVudCkuCkBAIC03NDIsNiArNzQ2LDM1IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
LCBib29sIGluY2x1ZGVFbXB0CiAjZW5kaWYKIH0KIAoraW5saW5lIGJvb2wgU3R5bGVSZXNvbHZl
cjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpCit7CisjaWYgRU5BQkxF
KFNIQURPV19ET00pCisgICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2
ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMobV9lbGVtZW50KTsKKyNl
bHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6
bWF0Y2hIb3N0UnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cykKK3sKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKKyAgICBBU1NFUlQobV9zY29wZVJlc29sdmVy
KTsKKworICAgIFZlY3RvcjxSdWxlU2V0Kj4gbWF0Y2hlZFJ1bGVzOworICAgIG1fc2NvcGVSZXNv
bHZlci0+bWF0Y2hIb3N0UnVsZXMobV9lbGVtZW50LCBtYXRjaGVkUnVsZXMpOworICAgIGlmICht
YXRjaGVkUnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNYXRjaE9wdGlv
bnMgb3B0aW9ucyhpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgb3B0aW9ucy5zY29wZSA9IG1fZWxl
bWVudDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtYXRjaGVkUnVsZXMuc2l6ZSgpOyBpID4gMDsg
LS1pKQorICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaGVkUnVsZXMuYXQoaS0xKSwg
cmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUsIG9wdGlvbnMpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKKyAgICBVTlVT
RURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOworI2VuZGlmCit9CisKIHZvaWQgU3R5bGVSZXNv
bHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKQogewogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CkBAIC0xMzMyLDYgKzEz
NjUsOSBAQCBSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQog
ICAgIC8vIENhbid0IHNoYXJlIGlmIGF0dHJpYnV0ZSBydWxlcyBhcHBseS4KICAgICBpZiAoc3R5
bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQobV91bmNvbW1vbkF0dHJpYnV0ZVJ1bGVT
ZXQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBDYW4ndCBzaGFyZSBpZiBAaG9z
dCBALXJ1bGVzIGFwcGx5LgorICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9z
dFJ1bGVzKCkpCisgICAgICAgIHJldHVybiAwOwogICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4
IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5
IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCiAgICAgaWYgKHBhcmVudFN0eWxlUHJldmVu
dHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCmluZGV4IDViNTE0Y2U1NWI3OGJiM2MxNzZkMWQ2ZTJlZDNjNDA2MDZl
ODczZTYuLjE4ZjYxZjBmM2NkNWZlOTNlMjQyNDY0YTRmY2U1MTgxMjJkYmI0NTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtMjksOCArMjksMTAgQEAKICNpbmNsdWRlICJNZWRp
YVF1ZXJ5RXhwLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSdWxlRmVh
dHVyZS5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJT
ZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKKyNpbmNs
dWRlICJTdHlsZVNjb3BlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtODAsNiAr
ODIsNyBAQCBjbGFzcyBTdHlsZUtleWZyYW1lOwogY2xhc3MgU3R5bGVQZW5kaW5nSW1hZ2U7CiBj
bGFzcyBTdHlsZVByb3BlcnR5U2V0OwogY2xhc3MgU3R5bGVSdWxlOworY2xhc3MgU3R5bGVSdWxl
SG9zdDsKIGNsYXNzIFN0eWxlUnVsZUtleWZyYW1lczsKIGNsYXNzIFN0eWxlUnVsZVBhZ2U7CiBj
bGFzcyBTdHlsZVJ1bGVSZWdpb247CkBAIC0xMzcsNiArMTQwLDkgQEAgcHVibGljOgogICAgIHZv
aWQgcG9wUGFyZW50RWxlbWVudChFbGVtZW50Kik7CiAgICAgdm9pZCBwdXNoUGFyZW50U2hhZG93
Um9vdChjb25zdCBTaGFkb3dSb290Kik7CiAgICAgdm9pZCBwb3BQYXJlbnRTaGFkb3dSb290KGNv
bnN0IFNoYWRvd1Jvb3QqKTsKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKKyAgICB2b2lkIGFkZEhv
c3RSdWxlKFN0eWxlUnVsZUhvc3QqIHJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
biwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIHsgZW5zdXJlU2NvcGVSZXNvbHZlcigpLT5h
ZGRIb3N0UnVsZShydWxlLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBzY29wZSk7IH0KKyNl
bmRpZgogCiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JFbGVtZW50KEVsZW1l
bnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBTdHlsZVNoYXJpbmdCZWhhdmlvciA9
IEFsbG93U3R5bGVTaGFyaW5nLAogICAgICAgICBSdWxlTWF0Y2hpbmdCZWhhdmlvciA9IE1hdGNo
QWxsUnVsZXMsIFJlbmRlclJlZ2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IDApOwpAQCAtMTY2LDEx
ICsxNzIsMjIgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5bGVTaGVldHModW5z
aWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYpOwog
CiBwcml2YXRlOgorI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFET1dfRE9N
KQorICAgIFN0eWxlU2NvcGVSZXNvbHZlciogZW5zdXJlU2NvcGVSZXNvbHZlcigpCisgICAgewor
ICAgICAgICBBU1NFUlQoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhZG93RE9NRW5hYmxlZCgp
IHx8IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnN0eWxlU2NvcGVkRW5hYmxlZCgpKTsKKyAgICAg
ICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCisgICAgICAgICAgICBtX3Njb3BlUmVzb2x2ZXIgPSBh
ZG9wdFB0cihuZXcgU3R5bGVTY29wZVJlc29sdmVyKCkpOworICAgICAgICByZXR1cm4gbV9zY29w
ZVJlc29sdmVyLmdldCgpOworICAgIH0KKyNlbmRpZgorCiAgICAgdm9pZCBpbml0Rm9yU3R5bGVS
ZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSAwLCBQc2V1ZG9JZCA9
IE5PUFNFVURPKTsKICAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIGNv
bGxlY3RGZWF0dXJlcygpOwogICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFyZWRTdHlsZSgpOwog
ICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoUnVsZVNldCopOwor
ICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygpOwogICAgIE5v
ZGUqIGxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5v
ZGVDb3VudCkgY29uc3Q7CiAgICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHlsZVNo
YXJpbmcoTm9kZSosIHVuc2lnbmVkJiBjb3VudCkgY29uc3Q7CiAgICAgYm9vbCBjYW5TaGFyZVN0
eWxlV2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCopIGNvbnN0OwpAQCAtMzIzLDYgKzM0MCw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBp
bmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFVzZXJSdWxlcyhNYXRjaFJlc3VsdCYs
IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgbWF0Y2hTY29wZWRBdXRob3JSdWxl
cyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIHZvaWQgbWF0Y2hI
b3N0UnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB2b2lk
IGNvbGxlY3RNYXRjaGluZ1J1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQm
IGxhc3RSdWxlSW5kZXgsIGNvbnN0IE1hdGNoT3B0aW9ucyYpOwogICAgIHZvaWQgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JSZWdpb24oUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYg
bGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxl
SW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJ1bGUuY3BwCmluZGV4IDczYjBhZjI2Y2U0MmFhNDU5NGQ5Yjc2MTc5NmIxOWQ2YTZi
YjY2NWMuLjY3ZjdiYzcyODI3MDJkNWFlYzhhMzQwZGU2NmE1ZWVhMzJkMGZkMTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJ1bGUuY3BwCkBAIC03OSw2ICs3OSw5IEBAIHZvaWQgU3R5bGVSdWxlQmFzZTo6
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29u
c3QKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVS
dWxlS2V5ZnJhbWVzKj4odGhpcyktPnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShtZW1vcnlP
YmplY3RJbmZvKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSG9zdDoKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlQmxvY2sqPih0aGlzKS0+cmVwb3J0RGVzY2VuZGFudE1l
bW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBV
bmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMTE3LDYg
KzEyMCw5IEBAIHZvaWQgU3R5bGVSdWxlQmFzZTo6ZGVzdHJveSgpCiAgICAgY2FzZSBLZXlmcmFt
ZXM6CiAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPih0aGlz
KTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSG9zdDoKKyAgICAgICAgZGVsZXRlIHN0YXRp
Y19jYXN0PFN0eWxlUnVsZUhvc3QqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
VW5rbm93bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlmcmFtZToKQEAgLTE1MCw2
ICsxNTYsOCBAQCBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IFN0eWxlUnVsZUJhc2U6OmNvcHko
KSBjb25zdAogICAgICAgICByZXR1cm4gMDsKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMpLT5jb3B5
KCk7CisgICAgY2FzZSBIb3N0OgorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU3R5
bGVSdWxlSG9zdCo+KHRoaXMpLT5jb3B5KCk7CiAgICAgY2FzZSBVbmtub3duOgogICAgIGNhc2Ug
Q2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMTkxLDYgKzE5OSw3IEBAIFBhc3NSZWZQ
dHI8Q1NTUnVsZT4gU3R5bGVSdWxlQmFzZTo6Y3JlYXRlQ1NTT01XcmFwcGVyKENTU1N0eWxlU2hl
ZXQqIHBhcmVudFNoZWV0CiAgICAgY2FzZSBLZXlmcmFtZXM6CiAgICAgICAgIHJ1bGUgPSBXZWJL
aXRDU1NLZXlmcmFtZXNSdWxlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVz
Kj4oc2VsZiksIHBhcmVudFNoZWV0KTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBIb3N0Ogog
ICAgIGNhc2UgVW5rbm93bjoKICAgICBjYXNlIENoYXJzZXQ6CiAgICAgY2FzZSBLZXlmcmFtZToK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJ1bGUuaAppbmRleCBlMTVmMzJlNDAyYWFmMjA4ZDNjYzBmY2NkMzU4NDc3
YjIzMDM1NjM0Li5iN2ZmNTIzMjZjYmYyMTg0NzIxYTEzNDFjODI5YTM4NGZjNGEzOWI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUnVsZS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgUGFn
ZSwKICAgICAgICAgS2V5ZnJhbWVzLAogICAgICAgICBLZXlmcmFtZSwgLy8gTm90IHVzZWQuIFRo
ZXNlIGFyZSBpbnRlcm5hbGx5IG5vbi1ydWxlIFN0eWxlS2V5ZnJhbWUgb2JqZWN0cy4KKyAgICAg
ICAgSG9zdCwKICAgICAgICAgUmVnaW9uID0gMTYKICAgICB9OwogICAgIFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGU+KG1fdHlwZSk7IH0KQEAgLTU4LDYgKzU5LDcg
QEAgcHVibGljOgogICAgIGJvb2wgaXNTdHlsZVJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkg
PT0gU3R5bGU7IH0KICAgICBib29sIGlzUmVnaW9uUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUo
KSA9PSBSZWdpb247IH0KICAgICBib29sIGlzSW1wb3J0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5
cGUoKSA9PSBJbXBvcnQ7IH0KKyAgICBib29sIGlzSG9zdFJ1bGUoKSBjb25zdCB7IHJldHVybiB0
eXBlKCkgPT0gSG9zdDsgfQogCiAgICAgUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBjb3B5KCkg
Y29uc3Q7CiAKQEAgLTIyMyw2ICsyMjUsMjAgQEAgcHJpdmF0ZToKICAgICBDU1NTZWxlY3Rvckxp
c3QgbV9zZWxlY3Rvckxpc3Q7CiB9OwogCitjbGFzcyBTdHlsZVJ1bGVIb3N0IDogcHVibGljIFN0
eWxlUnVsZUJsb2NrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVI
b3N0PiBjcmVhdGUoVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBhZG9wdFJ1bGVzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVJ1bGVIb3N0KGFkb3B0UnVs
ZXMpKTsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUhvc3Q+IGNvcHkoKSBjb25z
dCB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVSdWxlSG9zdCgqdGhpcykpOyB9CisKK3ByaXZh
dGU6CisgICAgU3R5bGVSdWxlSG9zdChWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFk
b3B0UnVsZXMpIDogU3R5bGVSdWxlQmxvY2soSG9zdCwgYWRvcHRSdWxlcykgeyB9CisgICAgU3R5
bGVSdWxlSG9zdChjb25zdCBTdHlsZVJ1bGVIb3N0JiBvKSA6IFN0eWxlUnVsZUJsb2NrKG8pIHsg
fQorfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gU3R5bGVSdWxlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAKaW5kZXggODc0MDJiYWE1
OTgxMDI0ZWU1ZDY0NDY1YWQxNzhkY2NiNzlkZWE4YS4uNWZmMmIzZTBiMTE1NDk5NDQ3ZTIxYzg2
ZjU4ZjY0NjEzMDFjZjBmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2Nv
cGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZl
ci5jcHAKQEAgLTI5LDggKzI5LDEwIEBACiAKICNpZiBFTkFCTEUoU1RZTEVfU0NPUEVEKSB8fCBF
TkFCTEUoU0hBRE9XX0RPTSkKIAorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgogI2luY2x1ZGUg
IkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDb250ZXh0RmVhdHVyZXMuaCIKKyNpbmNsdWRl
ICJFbGVtZW50U2hhZG93LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRN
TFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIlJ1bGVGZWF0dXJlLmgiCkBAIC0xNTQsMTEgKzE1
Niw5MSBAQCB2b2lkIFN0eWxlU2NvcGVSZXNvbHZlcjo6Y29sbGVjdEZlYXR1cmVzVG8oUnVsZUZl
YXR1cmVTZXQmIGZlYXR1cmVzKQogICAgICAgICBmZWF0dXJlcy5hZGQoaXQtPnZhbHVlLT5mZWF0
dXJlcygpKTsKIH0KIAoraW5saW5lIFJ1bGVTZXQqIFN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJl
QXRIb3N0UnVsZVNldEZvcihjb25zdCBTaGFkb3dSb290KiBzaGFkb3dSb290KQoreworICAgIFNj
b3BlZFJ1bGVTZXRNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX2F0SG9zdFJ1bGVzLmFkZChz
aGFkb3dSb290LCBudWxscHRyKTsKKyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBSdWxlU2V0OjpjcmVhdGUoKTsKKyAgICBy
ZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKK30KKworaW5saW5lIFJ1bGVT
ZXQqIFN0eWxlU2NvcGVSZXNvbHZlcjo6YXRIb3N0UnVsZVNldEZvcihjb25zdCBTaGFkb3dSb290
KiBzaGFkb3dSb290KSBjb25zdAoreworICAgIFNjb3BlZFJ1bGVTZXRNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9hdEhvc3RSdWxlcy5maW5kKHNoYWRvd1Jvb3QpOworICAgIHJldHVybiBpdCAh
PSBtX2F0SG9zdFJ1bGVzLmVuZCgpID8gaXQtPnZhbHVlLmdldCgpIDogMDsKK30KKwordm9pZCBT
dHlsZVNjb3BlUmVzb2x2ZXI6OmFkZEhvc3RSdWxlKFN0eWxlUnVsZUhvc3QqIGhvc3RSdWxlLCBi
b29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3Bl
KQoreworICAgIGlmICghc2NvcGUgfHwgIXNjb3BlLT5pc0luU2hhZG93VHJlZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2NvcGUtPnNoYWRvd1Jv
b3QoKTsKKyAgICBpZiAoIXNoYWRvd1Jvb3QgfHwgIXNoYWRvd1Jvb3QtPmhvc3QoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUnVsZVNldCogcnVsZSA9IGVuc3VyZUF0SG9zdFJ1bGVTZXRGb3Io
c2hhZG93Um9vdCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4m
IGNoaWxkUnVsZXMgPSBob3N0UnVsZS0+Y2hpbGRSdWxlcygpOworICAgIEFkZFJ1bGVGbGFncyBh
ZGRSdWxlRmxhZ3MgPSBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID8gUnVsZUhhc0RvY3VtZW50
U2VjdXJpdHlPcmlnaW4gOiBSdWxlSGFzTm9TcGVjaWFsU3RhdGU7CisgICAgYWRkUnVsZUZsYWdz
ID0gc3RhdGljX2Nhc3Q8QWRkUnVsZUZsYWdzPihhZGRSdWxlRmxhZ3MgfCBSdWxlQ2FuVXNlRmFz
dENoZWNrU2VsZWN0b3IgfCBSdWxlSXNIb3N0UnVsZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNoaWxkUnVsZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3R5bGVSdWxlQmFzZSog
aG9zdFN0eWxpbmdSdWxlID0gY2hpbGRSdWxlc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKGhvc3RT
dHlsaW5nUnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJ1bGUtPmFkZFN0eWxlUnVs
ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihob3N0U3R5bGluZ1J1bGUpLCBhZGRSdWxlRmxhZ3Mp
OworICAgIH0KK30KKworYm9vbCBTdHlsZVNjb3BlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRp
ZGF0ZU1hdGNoZXNIb3N0UnVsZXMoY29uc3QgRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBpZiAo
bV9hdEhvc3RSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVs
ZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGVsZW1lbnQtPnNoYWRvdygpOworICAgIGlmICghc2hhZG93
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRSg5OTgyNyk6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTgyNworICAgIC8vIGFkZCBhIG5ldyBm
bGFnIHRvIEVsZW1lbnRTaGFkb3cgYW5kIGNhY2hlIHdoZXRoZXIgYW55QGhvc3QgQC1ydWxlcyBh
cmUKKyAgICAvLyBhcHBsaWVkIHRvIHRoZSBlbGVtZW50IG9yIG5vdC4gU28gd2UgY2FuIGF2b2lk
IGFsd2F5cyB0cmF2ZXJzaW5nCisgICAgLy8gc2hhZG93IHJvb3RzLgorICAgIGZvciAoU2hhZG93
Um9vdCogc2hhZG93Um9vdCA9IHNoYWRvdy0+eW91bmdlc3RTaGFkb3dSb290KCk7IHNoYWRvd1Jv
b3Q7IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290LT5vbGRlclNoYWRvd1Jvb3QoKSkgeworICAgICAg
ICBpZiAoYXRIb3N0UnVsZVNldEZvcihzaGFkb3dSb290KSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgICAgIGlmICghc2hhZG93Um9vdC0+aGFzU2hhZG93SW5zZXJ0aW9uUG9pbnQo
KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgU3R5bGVTY29wZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhjb25zdCBFbGVtZW50KiBlbGVt
ZW50LCBWZWN0b3I8UnVsZVNldCo+JiBtYXRjaGVkUnVsZXMpCit7CisgICAgaWYgKG1fYXRIb3N0
UnVsZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBFbGVtZW50U2hhZG93KiBz
aGFkb3cgPSBlbGVtZW50LT5zaGFkb3coKTsKKyAgICBpZiAoIXNoYWRvdykKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gRklYTUUoOTk4MjcpOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTk4MjcKKyAgICAvLyBhZGQgYSBuZXcgZmxhZyB0byBFbGVtZW50U2hhZG93
IGFuZCBjYWNoZSB3aGV0aGVyIGFueSBAaG9zdCBALXJ1bGVzIGFyZQorICAgIC8vIGFwcGxpZWQg
dG8gdGhlIGVsZW1lbnQgb3Igbm90LiBTbyB3ZSBjYW4gcXVpY2tseSBleGl0IHRoaXMgbWV0aG9k
CisgICAgLy8gYnkgdXNpbmcgdGhlIGZsYWcuCisgICAgZm9yIChTaGFkb3dSb290KiBzaGFkb3dS
b290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hhZG93Um9vdDsgc2hhZG93Um9v
dCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7IAorICAgICAgICBpZiAoUnVsZVNl
dCogcnVsZVNldCA9IGF0SG9zdFJ1bGVTZXRGb3Ioc2hhZG93Um9vdCkpCisgICAgICAgICAgICBt
YXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGVTZXQpOworICAgICAgICBpZiAoIXNoYWRvd1Jvb3QtPmhh
c1NoYWRvd0luc2VydGlvblBvaW50KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
IHZvaWQgU3R5bGVTY29wZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJ
bmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZv
KG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKICAgICBp
bmZvLmFkZE1lbWJlcihtX2F1dGhvclN0eWxlcyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9zdGFj
ayk7CisgICAgaW5mby5hZGRNZW1iZXIobV9hdEhvc3RSdWxlcyk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaAppbmRleCA1YTMyZGZlNzlmODM1YmI3Y2Y5NWI4
YzdkZDliM2JiNzA0MWZiN2ZiLi44NWMxZDAxMDA2YWQ2Y2M2ZjQ4OTAxMTUwNTA5Y2MzNDhiMmQ2
YjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oCkBAIC0zNyw4ICsz
NywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENvbnRhaW5lck5vZGU7CiBjbGFz
cyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRWxlbWVudDsKIGNsYXNzIFJ1bGVTZXQ7CiBjbGFzcyBS
dWxlRmVhdHVyZVNldDsKK2NsYXNzIFNoYWRvd1Jvb3Q7CitjbGFzcyBTdHlsZVJ1bGVIb3N0Owog
CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxFKFNIQURPV19ET00pCiAKQEAgLTcy
LDEyICs3NSwxOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYXRjaGVzU3R5bGVCb3VuZHMoY29uc3Qg
U3RhY2tGcmFtZSYgZnJhbWUpIGNvbnN0IHsgcmV0dXJuIGZyYW1lLm1fYXV0aG9yU3R5bGVCb3Vu
ZHNJbmRleCA9PSBtX3N0YWNrUGFyZW50Qm91bmRzSW5kZXg7IH0KICAgICB2b2lkIGNvbGxlY3RG
ZWF0dXJlc1RvKFJ1bGVGZWF0dXJlU2V0Jik7CiAKKyAgICB2b2lkIGFkZEhvc3RSdWxlKFN0eWxl
UnVsZUhvc3QqLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNvbnN0IENvbnRhaW5l
ck5vZGUqIHNjb3BlKTsKKyAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0
UnVsZXMoY29uc3QgRWxlbWVudCopOworICAgIHZvaWQgbWF0Y2hIb3N0UnVsZXMoY29uc3QgRWxl
bWVudCosIFZlY3RvcjxSdWxlU2V0Kj4mIG1hdGNoZWRSdWxlcyk7CisKICAgICB2b2lkIHJlcG9y
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBS
dWxlU2V0KiBydWxlU2V0Rm9yKGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlKSBjb25zdDsKICAg
ICB2b2lkIHNldHVwU3RhY2soY29uc3QgQ29udGFpbmVyTm9kZSopOwogICAgIGJvb2wgc3RhY2tJ
c0NvbnNpc3RlbnQoY29uc3QgQ29udGFpbmVyTm9kZSogcGFyZW50KSBjb25zdCB7IHJldHVybiBw
YXJlbnQgJiYgcGFyZW50ID09IG1fc3RhY2tQYXJlbnQ7IH0KKyAgICBSdWxlU2V0KiBlbnN1cmVB
dEhvc3RSdWxlU2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqKTsKKyAgICBSdWxlU2V0KiBhdEhvc3RS
dWxlU2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqKSBjb25zdDsKIAogICAgIFNjb3BlZFJ1bGVTZXRN
YXAgbV9hdXRob3JTdHlsZXM7CiAKQEAgLTg4LDYgKzk3LDggQEAgcHJpdmF0ZToKICAgICAvLyBU
aGlzIGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgbV9zY29waW5nRWxlbWVudFN0YWNrIGlzIGNv
bnNpc3RlbnQsIHNlcGFyYXRlbHkgZnJvbSBTZWxlY3RvckNoZWNrZXI6Om1fcGFyZW50U3RhY2su
CiAgICAgY29uc3QgQ29udGFpbmVyTm9kZSogbV9zdGFja1BhcmVudDsKICAgICBpbnQgbV9zdGFj
a1BhcmVudEJvdW5kc0luZGV4OworCisgICAgU2NvcGVkUnVsZVNldE1hcCBtX2F0SG9zdFJ1bGVz
OwogfTsKIAogaW5saW5lIGJvb2wgU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVTdGFja0NvbnNp
c3RlbmN5KENvbnRhaW5lck5vZGUqIHBhcmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hl
ZXRDb250ZW50cy5jcHAKaW5kZXggZTdjZTgxZWFhYjQ4NzE4NjI0ZjRlYjU1MjM4ZTVjMWFmMzU2
ODViOC4uMzllOWE3YjJjZDZjMjE5M2JiMDQ5ODBmYTg4YTgyNzIxZTRhMjNkZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKQEAgLTQzNSw2ICs0MzUsMTAgQEAg
c3RhdGljIGJvb2wgY2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKGNv
bnN0IFZlY3RvcjxSZWZQdHI8U3R5bGUKICAgICAgICAgICAgIGlmIChjaGlsZFJ1bGVzSGF2ZUZh
aWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoc3RhdGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlUmVn
aW9uKj4ocnVsZSktPmNoaWxkUnVsZXMoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpIb3N0Ogor
ICAgICAgICAgICAgaWYgKGNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5jZWxlZFN1YnJlc291cmNl
cyhzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVIb3N0Kj4ocnVsZSktPmNoaWxkUnVsZXMoKSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpJbXBvcnQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgY2FzZSBTdHlsZVJ1bGVCYXNlOjpQYWdlOgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGZiZjg0
OWMyYzI3YmMxMWZlZTFjMGQxZmNjZGZlZTE0NDM5MzVjYWEuLjYyYjk3NTFiODA4MWYwZmU0ODhm
MzNjOGE0Y2QwMzUxMWNkMGI1MDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0xMC0xMiAg
VGFrYXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBE
T01dIE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmll
d2VkIGJ5IEhhamltZSBNb3JpdGEuCisKKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cvYXRob3N0
LWF0cnVsZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9zaGFkb3cv
YXRob3N0LWF0cnVsZXMuaHRtbDogQWRkZWQuCisKIDIwMTItMTAtMjMgIFZhcnVuIEphaW4gIDx2
YXJ1bmphaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENvbnRleHQgbWVudSBnZW5lcmF0ZWQg
ZnJvbSB0b3VjaCBnZXN0dXJlcyBvbiB0ZXh0YXJlYXMgaGFzCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hMWYzYjFjMjU1MTY5NTY3ODcyNWJkNjY1MTgxMzEzNDM4NjQ5YTE0Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9zdC1hdHJ1bGVzLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDE1IEBACitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdDogcmdi
KDI1NSwgMCwgMCkKK2hvc3RBOiByZ2IoMjU1LCAwLCAwKQoraG9zdEI6IHJnYigwLCAwLCAyNTUp
Citob3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAxMjgpCitob3N0OiBy
Z2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigxMjgsIDEyOCwg
MTI4KQoraG9zdDogcmdiKDI1NSwgMjU1LCAwKQoraG9zdDogcmdiKDI1NSwgMCwgMCkKK25lc3Rl
ZEhvc3Q6IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMjU1LCAwLCAwKQoraG9zdDogcmdiKDI1
NSwgMjU1LCAwKQorSGVsbG8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRv
dy9hdGhvc3QtYXRydWxlcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9z
dC1hdHJ1bGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Q0YjUxMWVlMDJmYTlkNzUxZTU3ZTE2OWIwMGE2
ZDg3N2Q1M2E2ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NoYWRv
dy9hdGhvc3QtYXRydWxlcy5odG1sCkBAIC0wLDAgKzEsMTkwIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisjaG9zdCB7CisgIGNvbG9yOiBncmF5OworfQorPC9z
dHlsZT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9wb2x5ZmlsbC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorZnVuY3Rpb24gZHVtcENvbXB1dGVkU3R5bGUobm9kZSkKK3sKKyAgICBkZWJ1Zyhu
b2RlLmlkICsgIjogIiArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUobm9k
ZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7Cit9CisKK2Z1bmN0aW9uIHByZXBy
b2Nlc3NGb3JUZXN0KCkKK3sKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInBhcmVudCIpOworICAgIHBhcmVudC5pbm5lckhUTUwgPSAnPGRpdiBpZD0iaG9zdCI+PHNw
YW4+SGVsbG88L3NwYW4+PC9kaXY+JzsKK30KKworZnVuY3Rpb24gdGVzdFNpbXBsZUNvbnRlbnRD
YXNlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNo
YWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBk
aXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1
bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlU2hhZG93Q2Fz
ZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIHNoYWRvdyA9IG5ldyBXZWJLaXRTaGFk
b3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2
IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgZHVtcENv
bXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0V2l0aFNlbGVjdG9yKCkK
K3sKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhcmVudCIpOwor
ICAgIHBhcmVudC5pbm5lckhUTUwgPSAiPHN0eWxlIHNjb3BlZD4gLmhvc3QgeyBjb2xvcjogZ3Jh
eSB9Ozwvc3R5bGU+IgorICAgICAgICArICI8ZGl2IGlkPSdob3N0QScgY2xhc3M9J2hvc3QnPjxz
cGFuPkhlbGxvPC9zcGFuPjwvZGl2PiIKKyAgICAgICAgKyAiPHNwYW4gaWQ9J2hvc3RCJyBjbGFz
cz0naG9zdCc+PHNwYW4+V29ybGQ8L3NwYW4+PC9zcGFuPiI7CisKKyAgICB2YXIgaG9zdEEgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdEEiKTsKKyAgICB2YXIgc2hhZG93QSA9IG5ldyBX
ZWJLaXRTaGFkb3dSb290KGhvc3RBKTsKKyAgICB2YXIgc3R5bGUgPSAiPHN0eWxlPkBob3N0IHsg
ZGl2IHsgY29sb3I6IHJlZDsgfSBzcGFuIHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+IjsKKyAg
ICBzaGFkb3dBLmlubmVySFRNTCA9IHN0eWxlICsgIjxzaGFkb3c+PC9zaGFkb3c+IjsKKworICAg
IHZhciBob3N0QiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0QiIpOworICAgIHZhciBz
aGFkb3dCID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdEIpOworICAgIHNoYWRvd0IuaW5uZXJI
VE1MID0gc3R5bGUgKyAiPHNoYWRvdz48L3NoYWRvdz4iOworCisgICAgZHVtcENvbXB1dGVkU3R5
bGUoaG9zdEEpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3RCKTsKK30KKworZnVuY3Rpb24g
dGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVkKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOwor
ICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIg
c2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAgc2hhZG93LmlubmVySFRN
TCA9ICI8ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0
eWxlPjxzaGFkb3c+PC9zaGFkb3c+PGRpdj48c3R5bGUgc2NvcGVkPkBob3N0IHsgZGl2IHsgY29s
b3I6IGJsdWU7IH0gfTwvc3R5bGU+PC9kaXY+PC9kaXY+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHls
ZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFBzZXVkb0hvc3RXaXRoRmFsbGJhY2tTaGFkb3co
KQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0
U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hh
ZG93Um9vdChob3N0KTsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9z
dCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7Cisg
ICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxjb250ZW50PjxzaGFkb3c+PC9zaGFkb3c+
PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9u
IHRlc3RUd29TaGFkb3dSb290c0Nhc2UoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7Cisg
ICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBv
bGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIgeW91bmdl
c3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBvbGRlc3RTaGFkb3cu
aW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+
PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxz
dHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFk
b3c+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFR3
b1NoYWRvd1Jvb3RzQ3JlYXRpbmdEaWZmZXJlbnRPcmRlckNhc2UoKQoreworICAgIHByZXByb2Nl
c3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9z
dCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsK
KyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAg
ICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6
IGJsdWU7IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOworICAgIG9sZGVzdFNoYWRvdy5p
bm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48
Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKwor
ZnVuY3Rpb24gdGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50KCkK
K3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNo
YWRvd1Jvb3QoaG9zdCk7CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jv
b3QoaG9zdCk7CisgICAgdmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdCho
b3N0KTsKKyAgICB2YXIgeW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
KTsKKworICAgIHlvdW5nZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c2hhZG93Pjwvc2hhZG93PiI7
CisgICAgeW91bmdlclNoYWRvdy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PC9jb250ZW50PiI7Cisg
ICAgb2xkZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBn
cmVlbjsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93Lmlu
bmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxj
b250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitm
dW5jdGlvbiB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvdygpCit7CisgICAg
cHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290
KGhvc3QpOworICAgIHZhciBvbGRlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3Qp
OworICAgIHZhciB5b3VuZ2VyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7Cisg
ICAgdmFyIHlvdW5nZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisKKyAg
ICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6
IHllbGxvdzsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgeW91bmdlclNoYWRv
dy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5
bGU+PGRpdj5pbmVydDwvZGl2PiI7CisgICAgb2xkZXJTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHls
ZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBncmVlbjsgfSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93
PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBj
b2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21w
dXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0TmVzdGVkQ2FzZSgpCit7CisgICAg
cHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJob3N0Iik7CisgICAgdmFyIG91dGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3Qo
aG9zdCk7CisgICAgb3V0ZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9zdCB7IGRpdiB7
IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGRpdiBpZD0ibmVzdGVkSG9zdCI+SW5uZXJTaGFkb3c8
L2Rpdj4nOworICAgIHZhciBuZXN0ZWQgPSBvdXRlclNoYWRvdy5nZXRFbGVtZW50QnlJZCgibmVz
dGVkSG9zdCIpOworICAgIHZhciBpbm5lclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KG5l
c3RlZCk7CisgICAgaW5uZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzdHlsZT5AaG9zdCB7IGRpdiB7
IGNvbG9yOiBibHVlOyB9IH08L3N0eWxlPlNob3cgPHNoYWRvdz48L3NoYWRvdz4gaW4gb3V0ZXIu
JzsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShu
ZXN0ZWQpOworfQorCitmdW5jdGlvbiB0ZXN0SG9zdFZzU2NvcGVkU3R5bGUoKQoreworICAgIHBy
ZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiaG9zdCIpOworICAgIGhvc3QuaW5uZXJIVE1MID0gIjxzdHlsZSBzY29wZWQ+I2hvc3QgeyBj
b2xvcjogeWVsbG93OyB9PC9zdHlsZT48c3Bhbj5IZWxsbzwvc3Bhbj4iOworICAgIHZhciBzaGFk
b3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0g
IjxzdHlsZT5AaG9zdCB7ICNob3N0IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48
L2NvbnRlbnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24g
dGVzdEhvc3RWc0lubGluZVN0eWxlKCkKK3sKKyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAg
IHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3QiKTsKKyAgICBob3N0LnN0
eWxlLmNvbG9yID0gInllbGxvdyI7CisgICAgaG9zdC5pbm5lckhUTUwgPSAiPHNwYW4+SGVsbG88
L3NwYW4+IjsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7Cisg
ICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9
IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhv
c3QpOworfQorCitmdW5jdGlvbiBydW5UZXN0cygpCit7CisgICAgdGVzdFNpbXBsZUNvbnRlbnRD
YXNlKCk7CisgICAgdGVzdFNpbXBsZVNoYWRvd0Nhc2UoKTsKKyAgICB0ZXN0SG9zdFdpdGhTZWxl
Y3RvcigpOworICAgIHRlc3RQc2V1ZG9Ib3N0V2l0aFNjb3BlZCgpOworICAgIHRlc3RQc2V1ZG9I
b3N0V2l0aEZhbGxiYWNrU2hhZG93KCk7CisgICAgdGVzdFR3b1NoYWRvd1Jvb3RzQ2FzZSgpOwor
ICAgIHRlc3RUd29TaGFkb3dSb290c0NyZWF0aW5nRGlmZmVyZW50T3JkZXJDYXNlKCk7CisgICAg
dGVzdE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3dDb250ZW50KCk7CisgICAgdGVz
dE11bHRpcGxlU2hhZG93Um9vdHNXaXRoSW5lcnRTaGFkb3coKTsKKyAgICB0ZXN0TmVzdGVkQ2Fz
ZSgpOworICAgIHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpOworICAgIHRlc3RIb3N0VnNJbmxpbmVT
dHlsZSgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCki
PgorICA8ZGl2IGlkPSJwYXJlbnQiPgorICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170555</attachid>
            <date>2012-10-24 23:10:35 -0700</date>
            <delta_ts>2012-10-25 23:50:50 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-88606-20121025150908.patch</filename>
            <type>text/plain</type>
            <size>43763</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyNDE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFkZDk2Yzg5YzkxNzY2
NmM4Y2FhYzU1Y2UzZTcwZmI3MDUyNjZmNC4uZTcxMGEyMmJmM2I2MmJjMzlhNTA1NDU2OTZjM2M0
NWNhNzU4OWZlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMiBAQAorMjAxMi0xMC0xMiAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01d
IE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IEhhamltZSBNb3JpdGEuCisKKyAgICAgICAgSW1wbGVtZW50ZWQgQGhvc3QtQHJ1bGVzIGFj
Y29yZGluZyB0byB0aGUgc2hhZG93IGRvbSBzcGVjOgorICAgICAgICBodHRwOi8vZHZjcy53My5v
cmcvaGcvd2ViY29tcG9uZW50cy9yYXctZmlsZS90aXAvc3BlYy9zaGFkb3cvaW5kZXguaHRtbCNo
b3N0LWF0LXJ1bGUKKyAgICAgICAgVGhlIGRlc2lnbiBkb2MgaXM6CisgICAgICAgIGh0dHBzOi8v
ZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVAyeW9yY2hGOGxjaTJzY2NyLW1WU1JmMmR0dmpL
ZWl1eVFXekNCMmJFQTgvZWRpdAorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9hdGhv
c3QtYXRydWxlcy5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhbW1hci55LmluOgorICAgICAg
ICBBZGRlZCBydWxlcyBmb3IgcGFyc2luZyBAaG9zdCBALXJ1bGVzLgorICAgICAgICAqIGNzcy9D
U1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRlY3RBdFRva2Vu
KToKKyAgICAgICAgQWRkZWQgYSBuZXcgdG9rZW4gIkBob3N0Ii4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUpOgorICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2Qg
dG8gY3JlYXRlIGFuIEBob3N0IEAtcnVsZSwgd2hpY2ggaXMgaW52b2tlZCBmcm9tCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIEFkZGVkIGEg
ZGVjbGFyYXRpb24gb2YgdGhlIGFib3ZlIG5ldyBtZXRob2Q6IGNyZWF0ZUhvc3RSdWxlLgorICAg
ICAgICAqIGNzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaDoKKyAgICAgICAgQWRkZWQgSE9TVF9S
VUxFIHRvIGVudW0gVHlwZS4KKyAgICAgICAgKiBjc3MvUnVsZVNldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSdWxlRGF0YTo6UnVsZURhdGEpOgorICAgICAgICBNb2RpZmllZCBtdWx0aXBsZSBi
b29sIGFyZ3VtZW50cyBpbnRvIG9uZSBhcmd1bWVudC4gTm93IGl0CisgICAgICAgIHVzZXMgY29t
YmluYXRpb25zIG9mIHZhbHVlcyBmcm9tIGVudW0gQWRkUnVsZUZsYWdzLgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRS
ZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFN0eWxlUnVsZSk6Cisg
ICAgICAgIFVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBSdWxlRGF0YSdzIGNoYW5nZS4KKyAgICAg
ICAgTW9kaWZpZWQgdG8gSW52b2tlIGluY3JlYXNlU3BlY2lmaWNpdHkgaWYgdGhlIGdpdmVuIHJ1
bGUgaXMgQGhvc3QKKyAgICAgICAgQC1ydWxlLgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6
YWRkUnVsZXNGcm9tU2hlZXQpOgorICAgICAgICBJbnZva2VkIGFkZEhvc3RSdWxlIGlmIHRoZSBn
aXZlbiBydWxlIGlzIEBob3N0IEAtcnVsZS4KKyAgICAgICAgKiBjc3MvUnVsZVNldC5oOgorICAg
ICAgICAoUnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmluY3JlYXNlU3Bl
Y2lmaWNpdHkpOgorICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgdG8gaW5jcmVhc2Ugc2VsZWN0
b3IncyBzcGVjaWZpY2l0eS4gVGhpcyBtZXRob2QgaXMKKyAgICAgICAgdXNlZCB0byBtYWtlIEBo
b3N0IEAtcnVsZXMnIHNwZWNpZmljaXR5IGxhcmdlciB0aGFuIG5vcm1hbCBhdXRob3IKKyAgICAg
ICAgcnVsZXMnIHNwZWNpZmljaXR5LgorICAgICAgICAoUnVsZVNldCk6CisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJ1bGVTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRkSG9zdFJ1bGUpOgorICAgICAgICBBIHdy
YXBwZXIgbWV0aG9kIHRvIGludm9rZSBTdHlsZVNjb3BlUmVzb2x2ZXI6OmFkZEhvc3RSdWxlLiBU
aGUgbWV0aG9kCisgICAgICAgIGlzIHVzZWQgdG8gbWFrZSBvbmx5IFN0eWxlUmVzb2x2ZXIga25v
dyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYWJvdXQKKyAgICAgICAgY2xhc3MgU3R5bGVTY29w
ZVJlc29sdmVyLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9y
U3R5bGVzaGVldHMpOgorICAgICAgICBVcGRhdGVkIGFjY29yZGluZyB0byB0aGUgUnVsZURhdGEn
cyBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQg
bWF0Y2hlZCBob3N0IHJ1bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhp
cyBtZXRob2QgaW52b2tlcworICAgICAgICBTdHlsZVNjb3BlUmVzb2x2ZXI6OnN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMgdG8gZmluZAorICAgICAgICBtYXRjaGVkIGhvc3Qg
cnVsZXMuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Om1hdGNoSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgbWF0Y2hl
ZCBob3N0IHJ1bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhpcyBtZXRo
b2QgaW52b2tlcyBTdHlsZVNjb3BlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzIHRvIGZpbmQKKyAg
ICAgICAgbWF0Y2hlZCBob3N0IHJ1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyk6CisgICAgICAgIE1vZGlmaWVkIHRvIGludm9rZSBt
YXRjaEhvc3RSdWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNo
YXJlZFN0eWxlKToKKyAgICAgICAgRGlzYWJsZSBzaWJsaW5nIHN0eWxlIGNhY2hlIGlmIHRoZSBn
aXZlbiBlbGVtZW50IGlzIGEgc2hhZG93IGhvc3QgYW5kCisgICAgICAgIGFueSBAaG9zdCBALXJ1
bGVzIGFyZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LgorICAgICAgICAqIGNzcy9TdHlsZVJlc29s
dmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjplbnN1cmVTY29wZVJlc29s
dmVyKToKKyAgICAgICAgSWYgbm8gc2NvcGVSZXNvbHZlciBpcyBjcmVhdGVkLCBjcmVhdGUgYW5k
IHJldHVybiB0aGUgaW5zdGFuY2UuCisgICAgICAgIElmIGNyZWF0ZWQsIGp1c3QgcmV0dXJuIHRo
ZSBpbnN0YW5jZS4KKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9TdHls
ZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6cmVwb3J0TWVtb3J5
VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJveSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KToKKyAgICAgICAgSW1wbGVtZW50ZWQgY2xhc3MgU3R5
bGVSdWxlSG9zdC4gVGhlIGNsYXNzIGlzIGFsbW9zdCB0aGUgc2FtZSBhcworICAgICAgICBTdHls
ZVJ1bGVCbG9jayBleGNlcHQgdHlwZS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNz
cy9TdHlsZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmlzSG9zdFJ1
bGUpOgorICAgICAgICAoU3R5bGVSdWxlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1
bGVIb3N0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y29weSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlQXRIb3N0UnVs
ZVNldEZvcik6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUnVsZVNldCBm
b3IgdGhlIGdpdmVuIHNoYWRvdyByb290LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OmF0SG9zdFJ1bGVTZXRGb3IpOgorICAgICAgICBB
IG5ldyBwcml2YXRlIGlubGluZSBtZXRob2QgdG8gb2J0YWluIEBob3N0IEAtcnVsZXMgZGVjbGFy
ZWQgaW4KKyAgICAgICAgdGhlIGdpdmVuIHNoYWRvdyByb290LgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVTY29wZVJlc29sdmVyOjphZGRIb3N0UnVsZSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1l
dGhvZCB0byByZWdpc3RlciBAaG9zdCBALXJ1bGVzIHdpdGggc2hhZG93IHJvb3RzLgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRj
aGVzSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgd2hldGhlciBhbnkg
QGhvc3QgQC1ydWxlcyBhcmUgYXBwbGllZCB0bworICAgICAgICB0aGUgZ2l2ZW4gaG9zdCBlbGVt
ZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjptYXRjaEhvc3RSdWxl
cyk6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBmaW5kIG1hdGNoZWQgcnVsZXMgZm9yIHRoZSBn
aXZlbiBob3N0IGVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6
OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN0eWxlU2NvcGVSZXNvbHZlcik6CisgICAg
ICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGls
ZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMpOgorCiAyMDEyLTEwLTI0ICBN
YXggVnVqb3ZpYyAgPG12dWpvdmljQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIFNoYWRlcnNd
IFRoZSBtZXNoIHNob3VsZCBiZSBzcGVjaWZpZWQgdXNpbmcgPGNvbHVtbiwgcm93PiBvcmRlcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbiBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4KaW5kZXggNGI4OTRmYjk1OTdkZWY1MmEyNGI5M2Zk
NTRlZjc0MzI0MGE1Yzc2OC4uNDA0NTExMzVjY2MwODUyYWZhNGUzOTliMTUxMTUzMGZkNDZlMWRi
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbgorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCkBAIC05NSw2ICs5NSw5IEBAIHN0YXRp
YyBpbmxpbmUgaW50IGNzc3l5ZXJyb3Iodm9pZCosIGNvbnN0IGNoYXIqKQogJXRva2VuIFNVUFBP
UlRTX1NZTQogI2VuZGlmCiAldG9rZW4gRk9OVF9GQUNFX1NZTQorI2lmIEVOQUJMRV9TSEFET1df
RE9NCisldG9rZW4gSE9TVF9TWU0KKyNlbmRpZgogJXRva2VuIENIQVJTRVRfU1lNCiAldG9rZW4g
TkFNRVNQQUNFX1NZTQogJXRva2VuIFZBUkZVTkNUSU9OCkBAIC0xODcsNiArMTkwLDkgQEAgc3Rh
dGljIGlubGluZSBpbnQgY3NzeXllcnJvcih2b2lkKiwgY29uc3QgY2hhciopCiAldHlwZSA8cnVs
ZT4gcGFnZQogJXR5cGUgPHJ1bGU+IG1hcmdpbl9ib3gKICV0eXBlIDxydWxlPiBmb250X2ZhY2UK
KyNpZiBFTkFCTEVfU0hBRE9XX0RPTQorJXR5cGUgPHJ1bGU+IGhvc3QKKyNlbmRpZgogJXR5cGUg
PHJ1bGU+IGtleWZyYW1lcwogJXR5cGUgPHJ1bGU+IGludmFsaWRfcnVsZQogJXR5cGUgPHJ1bGU+
IHNhdmVfYmxvY2sKQEAgLTQwMiw2ICs0MDgsOSBAQCB2YWxpZF9ydWxlOgogI2lmIEVOQUJMRV9D
U1MzX0NPTkRJVElPTkFMX1JVTEVTCiAgIHwgc3VwcG9ydHMKICNlbmRpZgorI2lmIEVOQUJMRV9T
SEFET1dfRE9NCisgIHwgaG9zdAorI2VuZGlmCiAgIDsKIAogcnVsZToKQEAgLTkwMSw2ICs5MTAs
MjUgQEAgZm9udF9mYWNlOgogICAgIH0KIDsKIAorI2lmIEVOQUJMRV9TSEFET1dfRE9NCitiZWZv
cmVfaG9zdF9ydWxlOgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgcGFyc2VyLT5tYXJrUnVs
ZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpIT1NUX1JVTEUpOworICAgIH0KKyAgICA7
CisKK2hvc3Q6CisgICAgYmVmb3JlX2hvc3RfcnVsZSBIT1NUX1NZTSBhdF9ydWxlX2hlYWRlcl9l
bmRfbWF5YmVfc3BhY2UKKyAgICAneycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNlIGJs
b2NrX3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKKyAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUhv
c3RSdWxlKCQ3KTsKKyAgICB9CisgICAgfCBiZWZvcmVfaG9zdF9ydWxlIEhPU1RfU1lNIGF0X3J1
bGVfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSAnOycgeworICAgICAgICAkJCA9IDA7CisgICAgICAg
IHBhcnNlci0+cG9wUnVsZURhdGEoKTsKKyAgICB9CisgICAgOworI2VuZGlmCisKIHJlZ2lvbl9z
ZWxlY3RvcjoKICAgICBzZWxlY3Rvcl9saXN0IHsKICAgICAgICAgaWYgKCQxKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuY3BwCmluZGV4IDBmMDg4NmYzNDNiYTdlMzNiZTJhN2RiMWNkN2RlZmFkMTlm
ZmVhZTkuLjk1MzkyZTliODhmNmYyNGRmODAyNWQwZGIwMTM3YjA3OWZlMjMxOGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC05MTg1LDYgKzkxODUsMTMgQEAgaW5saW5lIHZvaWQgQ1NT
UGFyc2VyOjpkZXRlY3RBdFRva2VuKGludCBsZW5ndGgsIGJvb2wgaGFzRXNjYXBlKQogICAgICAg
ICAgICAgbV90b2tlbiA9IEZPTlRfRkFDRV9TWU07CiAgICAgICAgIHJldHVybjsKIAorI2lmIEVO
QUJMRShTSEFET1dfRE9NKQorICAgIGNhc2UgJ2gnOgorICAgICAgICBpZiAobGVuZ3RoID09IDUg
JiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIm9zdCIpKQorICAgICAgICAgICAg
bV90b2tlbiA9IEhPU1RfU1lNOworICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIGNhc2Ug
J2knOgogICAgICAgICBpZiAobGVuZ3RoID09IDcgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihu
YW1lICsgMiwgIm1wb3J0IikpIHsKICAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRpYVF1
ZXJ5TW9kZTsKQEAgLTEwMDE3LDYgKzEwMDI0LDI0IEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNl
cjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYgRU5B
QkxFKFNIQURPV19ET00pCitTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZUhvc3RSdWxl
KFJ1bGVMaXN0KiBydWxlcykKK3sKKyAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFt
ZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CisgICAgUmVmUHRyPFN0eWxlUnVsZUhvc3Q+IHJ1
bGU7CisgICAgaWYgKHJ1bGVzKQorICAgICAgICBydWxlID0gU3R5bGVSdWxlSG9zdDo6Y3JlYXRl
KCpydWxlcyk7CisgICAgZWxzZSB7CisgICAgICAgIFJ1bGVMaXN0IGVtcHR5UnVsZXM7CisgICAg
ICAgIHJ1bGUgPSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoZW1wdHlSdWxlcyk7CisgICAgfQorICAg
IFN0eWxlUnVsZUhvc3QqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CisgICAgbV9wYXJzZWRSdWxlcy5h
cHBlbmQocnVsZS5yZWxlYXNlKCkpOworICAgIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VU
cmVlSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKIHZvaWQgQ1NT
UGFyc2VyOjphZGROYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0
b21pY1N0cmluZyYgdXJpKQogewogICAgIGlmICghbV9zdHlsZVNoZWV0IHx8ICFtX2FsbG93TmFt
ZXNwYWNlRGVjbGFyYXRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IDVmOTllNjIyNmUw
YzNiZTc3MzYyNDUxNWJmMWFjYmYwYjMxOGRmZGYuLjhiMDk2N2E4ZjZhN2E0NTNlMjNmZjJkNTY2
MjIwMmQ3ODRmOWUzZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTI4Miw2ICsyODIsOSBA
QCBwdWJsaWM6CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlUGFnZVJ1bGUoUGFzc093blB0cjxD
U1NQYXJzZXJTZWxlY3Rvcj4gcGFnZVNlbGVjdG9yKTsKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVh
dGVSZWdpb25SdWxlKENTU1NlbGVjdG9yVmVjdG9yKiByZWdpb25TZWxlY3RvciwgUnVsZUxpc3Qq
IHJ1bGVzKTsKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVNYXJnaW5BdFJ1bGUoQ1NTU2VsZWN0
b3I6Ok1hcmdpbkJveFR5cGUpOworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAgIFN0eWxlUnVs
ZUJhc2UqIGNyZWF0ZUhvc3RSdWxlKFJ1bGVMaXN0KiBydWxlcyk7CisjZW5kaWYKICAgICB2b2lk
IHN0YXJ0RGVjbGFyYXRpb25zRm9yTWFyZ2luQm94KCk7CiAgICAgdm9pZCBlbmREZWNsYXJhdGlv
bnNGb3JNYXJnaW5Cb3goKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1By
b3BlcnR5U291cmNlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNl
RGF0YS5oCmluZGV4IDQ2OWJkYjYzMGMxYTVjNWRiYTk5M2ZkMWFkNTllZDA3NDQ5YTU1YmUuLjA3
OWVjMzM2MjQ5NWMwNzk3OWI0NzVhZmRlNzc2MDIzODRjOTk5NmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKQEAgLTk0LDcgKzk0LDggQEAgc3RydWN0IENT
U1J1bGVTb3VyY2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTUnVsZVNvdXJjZURhdGE+IHsK
ICAgICAgICAgRk9OVF9GQUNFX1JVTEUsCiAgICAgICAgIFBBR0VfUlVMRSwKICAgICAgICAgS0VZ
RlJBTUVTX1JVTEUsCi0gICAgICAgIFJFR0lPTl9SVUxFCisgICAgICAgIFJFR0lPTl9SVUxFLAor
ICAgICAgICBIT1NUX1JVTEUKICAgICB9OwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVs
ZVNvdXJjZURhdGE+IGNyZWF0ZShUeXBlIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvUnVsZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKaW5kZXgg
ZTJiZTU3NzFlMDI1ZjE0Y2Y5YTg1ZGU3ZTUxY2Q5YzVhMTMwOTA1OS4uYjNmMGZkZWUxZmNiYzMz
NmQ3ZTRiZmU3OGMzMzNiNDNiZDQwMDgwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1J1bGVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcApAQCAtMTA3
LDE4ICsxMDcsMTggQEAgc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1
dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVJ1bGVEYXRhOjpSdWxlRGF0YShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVj
dG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmln
aW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQorUnVs
ZURhdGE6OlJ1bGVEYXRhKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwg
dW5zaWduZWQgcG9zaXRpb24sIEFkZFJ1bGVGbGFncyBhZGRSdWxlRmxhZ3MpCiAgICAgOiBtX3J1
bGUocnVsZSkKICAgICAsIG1fc2VsZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQogICAgICwgbV9w
b3NpdGlvbihwb3NpdGlvbikKICAgICAsIG1fc3BlY2lmaWNpdHkoc2VsZWN0b3IoKS0+c3BlY2lm
aWNpdHkoKSkKLSAgICAsIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNhblVzZUZhc3RDaGVj
a1NlbGVjdG9yICYmIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Ioc2Vs
ZWN0b3IoKSkpCisgICAgLCBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigoYWRkUnVsZUZsYWdz
ICYgUnVsZUNhblVzZUZhc3RDaGVja1NlbGVjdG9yKSAmJiBTZWxlY3RvckNoZWNrZXI6OmlzRmFz
dENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQogICAgICwgbV9oYXNNdWx0aXBhcnRTZWxl
Y3RvcighIXNlbGVjdG9yKCktPnRhZ0hpc3RvcnkoKSkKICAgICAsIG1faGFzUmlnaHRtb3N0U2Vs
ZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJh
c2VkT25SdWxlSGFzaChzZWxlY3RvcigpKSkKICAgICAsIG1fY29udGFpbnNVbmNvbW1vbkF0dHJp
YnV0ZVNlbGVjdG9yKFdlYkNvcmU6OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rvcihz
ZWxlY3RvcigpKSkKICAgICAsIG1fbGlua01hdGNoVHlwZShTZWxlY3RvckNoZWNrZXI6OmRldGVy
bWluZUxpbmtNYXRjaFR5cGUoc2VsZWN0b3IoKSkpCi0gICAgLCBtX2hhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4oaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKLSAgICAsIG1faXNJblJlZ2lvblJ1
bGUoaW5SZWdpb25SdWxlKQorICAgICwgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGFkZFJ1
bGVGbGFncyAmIFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQorICAgICwgbV9pc0luUmVn
aW9uUnVsZShhZGRSdWxlRmxhZ3MgJiBSdWxlSXNJblJlZ2lvblJ1bGUpCiB7CiAgICAgQVNTRVJU
KG1fcG9zaXRpb24gPT0gcG9zaXRpb24pOwogICAgIEFTU0VSVChtX3NlbGVjdG9ySW5kZXggPT0g
c2VsZWN0b3JJbmRleCk7CkBAIC0yMDcsOSArMjA3LDE0IEBAIHZvaWQgUnVsZVNldDo6YWRkVG9S
dWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3QgUnVs
ZURhCiAgICAgcnVsZXMtPmFwcGVuZChydWxlRGF0YSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRk
UnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIGJvb2wgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBp
blJlZ2lvblJ1bGUpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoU3R5bGVSdWxlKiBydWxlLCB1bnNp
Z25lZCBzZWxlY3RvckluZGV4LCBBZGRSdWxlRmxhZ3MgYWRkUnVsZUZsYWdzKQogewotICAgIFJ1
bGVEYXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIG1fcnVsZUNvdW50KyssIGhhc0Rv
Y3VtZW50U2VjdXJpdHlPcmlnaW4sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBpblJlZ2lvblJ1
bGUpOworICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIG1fcnVsZUNv
dW50KyssIGFkZFJ1bGVGbGFncyk7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGF0aG9zdFJ1
bGVTcGVjaWZpY2l0eSA9IDB4MTAwMDAwOworCisgICAgaWYgKGFkZFJ1bGVGbGFncyAmIFJ1bGVJ
c0hvc3RSdWxlKQorICAgICAgICBydWxlRGF0YS5pbmNyZWFzZVNwZWNpZmljaXR5KGF0aG9zdFJ1
bGVTcGVjaWZpY2l0eSk7CisKICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tUnVsZURhdGEobV9mZWF0
dXJlcywgcnVsZURhdGEpOwogCiAgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcnVsZURhdGEu
c2VsZWN0b3IoKTsKQEAgLTI2NCwxMCArMjY5LDEyIEBAIHZvaWQgUnVsZVNldDo6YWRkUmVnaW9u
UnVsZShTdHlsZVJ1bGVSZWdpb24qIHJlZ2lvblJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0
CiAKICAgICAvLyBDb2xsZWN0IHRoZSByZWdpb24gcnVsZXMgaW50byBhIHJ1bGUgc2V0CiAgICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzID0gcmVnaW9u
UnVsZS0+Y2hpbGRSdWxlcygpOworICAgIEFkZFJ1bGVGbGFncyBhZGRSdWxlRmxhZ3MgPSBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luID8gUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gOiBS
dWxlSGFzTm9TcGVjaWFsU3RhdGU7CisgICAgYWRkUnVsZUZsYWdzID0gc3RhdGljX2Nhc3Q8QWRk
UnVsZUZsYWdzPihhZGRSdWxlRmxhZ3MgfCBSdWxlQ2FuVXNlRmFzdENoZWNrU2VsZWN0b3IgfCBS
dWxlSXNJblJlZ2lvblJ1bGUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZFJ1
bGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFN0eWxlUnVsZUJhc2UqIHJlZ2lvblN0eWxpbmdS
dWxlID0gY2hpbGRSdWxlc1tpXS5nZXQoKTsKICAgICAgICAgaWYgKHJlZ2lvblN0eWxpbmdSdWxl
LT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgcmVnaW9uUnVsZVNldC0+YWRkU3R5bGVSdWxl
KHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJlZ2lvblN0eWxpbmdSdWxlKSwgaGFzRG9jdW1lbnRT
ZWN1cml0eU9yaWdpbiwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICByZWdpb25SdWxlU2V0LT5h
ZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUpLCBh
ZGRSdWxlRmxhZ3MpOwogICAgIH0KICAgICAvLyBVcGRhdGUgdGhlICJnbG9iYWwiIHJ1bGUgY291
bnQgc28gdGhhdCBwcm9wZXIgb3JkZXIgaXMgbWFpbnRhaW5lZAogICAgIG1fcnVsZUNvdW50ID0g
cmVnaW9uUnVsZVNldC0+bV9ydWxlQ291bnQ7CkBAIC0yODYsNiArMjkzLDcgQEAgdm9pZCBSdWxl
U2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHUKICAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydFJ1bGUt
PnN0eWxlU2hlZXQoKSwgbWVkaXVtLCByZXNvbHZlciwgc2NvcGUpOwogICAgIH0KICAgICBib29s
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSByZXNvbHZlciAmJiByZXNvbHZlci0+ZG9jdW1l
bnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChzaGVldC0+YmFzZVVSTCgpKTsKKyAg
ICBBZGRSdWxlRmxhZ3MgYWRkUnVsZUZsYWdzID0gc3RhdGljX2Nhc3Q8QWRkUnVsZUZsYWdzPigo
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA/IFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2lu
IDogMCkgfCAoIXNjb3BlID8gUnVsZUNhblVzZUZhc3RDaGVja1NlbGVjdG9yIDogMCkpOwogCiAg
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBydWxlcyA9IHNoZWV0LT5j
aGlsZFJ1bGVzKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzLnNpemUoKTsg
KytpKSB7CkBAIC0yOTMsNyArMzAxLDcgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVl
dChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHUKIAogICAg
ICAgICBBU1NFUlQoIXJ1bGUtPmlzSW1wb3J0UnVsZSgpKTsKICAgICAgICAgaWYgKHJ1bGUtPmlz
U3R5bGVSdWxlKCkpCi0gICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVS
dWxlKj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFzY29wZSk7CisgICAgICAg
ICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSksIGFkZFJ1bGVG
bGFncyk7CiAgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUGFnZVJ1bGUoKSkKICAgICAgICAgICAg
IGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihydWxlKSk7CiAgICAgICAg
IGVsc2UgaWYgKHJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsKQEAgLTMwNSw3ICszMTMsNyBAQCB2b2lk
IFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNv
bnN0IE1lZGlhUXVlcnlFdmFsdQogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCBjaGlsZFJ1bGVzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0eWxl
UnVsZUJhc2UqIGNoaWxkUnVsZSA9IGNoaWxkUnVsZXNbal0uZ2V0KCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChjaGlsZFJ1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4oY2hpbGRSdWxlKSwgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgIXNjb3BlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihjaGlsZFJ1bGUpLCBhZGRSdWxl
RmxhZ3MpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzUGFnZVJ1
bGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0
eWxlUnVsZVBhZ2UqPihjaGlsZFJ1bGUpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
Y2hpbGRSdWxlLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHJlc29sdmVyKSB7CkBAIC0zNDcsMTUgKzM1
NSwxOSBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50
cyogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdQogICAgICAgICAgICAgYWRkUmVnaW9uUnVs
ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVSZWdpb24qPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1cml0
eU9yaWdpbik7CiAgICAgICAgIH0KICNlbmRpZgorI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAg
ICAgICBlbHNlIGlmIChydWxlLT5pc0hvc3RSdWxlKCkpCisgICAgICAgICAgICByZXNvbHZlci0+
YWRkSG9zdFJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlSG9zdCo+KHJ1bGUpLCBoYXNEb2N1bWVu
dFNlY3VyaXR5T3JpZ2luLCBzY29wZSk7CisjZW5kaWYKICAgICB9CiAgICAgaWYgKG1fYXV0b1No
cmlua1RvRml0RW5hYmxlZCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBSdWxl
U2V0OjphZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiBydWxlLCBib29sIGhhc0RvY3VtZW50U2VjdXJp
dHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lvblJ1
bGUpCit2b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIEFkZFJ1bGVG
bGFncyBhZGRSdWxlRmxhZ3MpCiB7CiAgICAgZm9yIChzaXplX3Qgc2VsZWN0b3JJbmRleCA9IDA7
IHNlbGVjdG9ySW5kZXggIT0gbm90Rm91bmQ7IHNlbGVjdG9ySW5kZXggPSBydWxlLT5zZWxlY3Rv
ckxpc3QoKS5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpCi0gICAgICAg
IGFkZFJ1bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwg
Y2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGlzSW5SZWdpb25SdWxlKTsKKyAgICAgICAgYWRkUnVs
ZShydWxlLCBzZWxlY3RvckluZGV4LCBhZGRSdWxlRmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5l
IHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBtYXApCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1J1bGVTZXQuaAppbmRleCA2NTc3MjM4YmE5MjM2YTlkNjgxMDM5MTk1YTBkZDQzYTJlODA4
MmEwLi5hMmZiZWNiYzAwYjJjYTFiNTMyZjQ5NmE5NWMwOTM1MDI2ZmE0ZjdkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9S
dWxlU2V0LmgKQEAgLTMxLDYgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorZW51
bSBBZGRSdWxlRmxhZ3MgeworICAgIFJ1bGVIYXNOb1NwZWNpYWxTdGF0ZSAgICAgICAgID0gMCwK
KyAgICBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA9IDEsCisgICAgUnVsZUNhblVzZUZh
c3RDaGVja1NlbGVjdG9yICAgPSAxIDw8IDEsCisgICAgUnVsZUlzSW5SZWdpb25SdWxlICAgICAg
ICAgICAgPSAxIDw8IDIsCisgICAgUnVsZUlzSG9zdFJ1bGUgICAgICAgICAgICAgICAgPSAxIDw8
IDMsCit9OworCiBjbGFzcyBDU1NTZWxlY3RvcjsKIGNsYXNzIENvbnRhaW5lck5vZGU7CiBjbGFz
cyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOwpAQCAtNDAsNyArNDgsNyBAQCBjbGFzcyBTdHlsZVNoZWV0
Q29udGVudHM7CiAKIGNsYXNzIFJ1bGVEYXRhIHsKIHB1YmxpYzoKLSAgICBSdWxlRGF0YShTdHls
ZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9vbCBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBi
b29sIGluUmVnaW9uUnVsZSk7CisgICAgUnVsZURhdGEoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2Vs
ZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRpb24sIEFkZFJ1bGVGbGFncyk7CiAKICAgICB1bnNp
Z25lZCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KICAgICBTdHlsZVJ1
bGUqIHJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3J1bGU7IH0KQEAgLTU1LDYgKzYzLDcgQEAgcHVi
bGljOgogICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2xpbmtN
YXRjaFR5cGU7IH0KICAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSBjb25zdCB7
IHJldHVybiBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW47IH0KICAgICBib29sIGlzSW5SZWdp
b25SdWxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUmVnaW9uUnVsZTsgfQorICAgIHZvaWQgaW5j
cmVhc2VTcGVjaWZpY2l0eSh1bnNpZ25lZCB2YWx1ZSkgeyBtX3NwZWNpZmljaXR5ICs9IHZhbHVl
OyB9CiAKICAgICAvLyBUcnkgdG8gYmFsYW5jZSBiZXR3ZWVuIG1lbW9yeSB1c2FnZSAodGhlcmUg
Y2FuIGJlIGxvdHMgb2YgUnVsZURhdGEgb2JqZWN0cykgYW5kIGdvb2QgZmlsdGVyaW5nIHBlcmZv
cm1hbmNlLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVtSWRlbnRpZmllckNvdW50
ID0gNDsKQEAgLTk4LDggKzEwNyw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkUnVsZXNGcm9t
U2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIFN0
eWxlUmVzb2x2ZXIqID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAwKTsKIAotICAgIHZvaWQg
YWRkU3R5bGVSdWxlKFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwg
Ym9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNl
KTsKLSAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwg
Ym9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVj
dG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOworICAgIHZvaWQgYWRkU3R5bGVSdWxl
KFN0eWxlUnVsZSosIEFkZFJ1bGVGbGFncyk7CisgICAgdm9pZCBhZGRSdWxlKFN0eWxlUnVsZSos
IHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIEFkZFJ1bGVGbGFncyk7CiAgICAgdm9pZCBhZGRQYWdl
UnVsZShTdHlsZVJ1bGVQYWdlKik7CiAgICAgdm9pZCBhZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5n
SW1wbCoga2V5LCBBdG9tUnVsZU1hcCYsIGNvbnN0IFJ1bGVEYXRhJik7CiAgICAgdm9pZCBhZGRS
ZWdpb25SdWxlKFN0eWxlUnVsZVJlZ2lvbiosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggM2I4MGYxYTVhY2QyNzU4
MGJjMWE5NDk1Y2M1ZjY3OGU5NDkzZDAzNy4uNTVlM2FiNGQ3MmJiOGQyOTg4OGMzNTZjMjBhY2Fh
NmNmYTBlOGQzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMTE3LDcg
KzExNyw2IEBACiAjaW5jbHVkZSAiU3R5bGVQZW5kaW5nSW1hZ2UuaCIKICNpbmNsdWRlICJTdHls
ZVJ1bGUuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQuaCIKLSNpbmNsdWRlICJTdHlsZVNj
b3BlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRl
ICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAgLTM3Miw3ICszNzEsNyBA
QCBzdGF0aWMgUGFzc093blB0cjxSdWxlU2V0PiBtYWtlUnVsZVNldChjb25zdCBWZWN0b3I8UnVs
ZUZlYXR1cmU+JiBydWxlcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgT3duUHRyPFJ1
bGVTZXQ+IHJ1bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxlc1tpXS5ydWxl
LCBydWxlc1tpXS5zZWxlY3RvckluZGV4LCBydWxlc1tpXS5oYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luLCBmYWxzZSk7CisgICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVsZXNbaV0ucnVsZSwgcnVs
ZXNbaV0uc2VsZWN0b3JJbmRleCwgcnVsZXNbaV0uaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA/
IFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogUnVsZUhhc05vU3BlY2lhbFN0YXRlKTsK
ICAgICBydWxlU2V0LT5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiBydWxlU2V0LnJlbGVhc2Uo
KTsKIH0KQEAgLTQxMSwxMiArNDEwLDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0
aG9yU3R5bGVTaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQCiAgICAg
ICAgIGlmIChjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCkgJiYgIW1fbWVkaXVtLT5ldmFsKGNzc1No
ZWV0LT5tZWRpYVF1ZXJpZXMoKSwgdGhpcykpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCA9IGNzc1NoZWV0LT5jb250ZW50cygpOworI2lm
IEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFET1dfRE9NKQogICAgICAgICBpZiAo
Y29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBTdHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3BlRm9y
KGNzc1NoZWV0KSkgewotICAgICAgICAgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCi0gICAgICAg
ICAgICAgICAgbV9zY29wZVJlc29sdmVyID0gYWRvcHRQdHIobmV3IFN0eWxlU2NvcGVSZXNvbHZl
cigpKTsKLSAgICAgICAgICAgIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlUnVsZVNldEZvcihzY29w
ZSktPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAg
ICAgICAgICAgIGVuc3VyZVNjb3BlUmVzb2x2ZXIoKS0+ZW5zdXJlUnVsZVNldEZvcihzY29wZSkt
PmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CisjZW5kaWYKIAogICAgICAgICBtX2F1dGhvclN0
eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICAgICAg
aWYgKCFtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLmlzRW1wdHkoKSkKQEAgLTcxMCw3ICs3
MDksMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMo
TWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRBdXRo
b3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewog
I2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFET1dfRE9NKQotICAgIGlmICgh
bV9zY29wZVJlc29sdmVyIHx8ICFtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygpKQor
ICAgIGlmICghbV9zY29wZVJlc29sdmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXRjaEhv
c3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKworICAgIGlmICghbV9zY29wZVJl
c29sdmVyLT5oYXNTY29wZWRTdHlsZXMoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWF0
Y2ggc2NvcGVkIGF1dGhvciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVudCBz
dGFjayAocmVidWlsZCBpdCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KQEAgLTc0Miw2ICs3NDYs
MzUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVz
dWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHQKICNlbmRpZgogfQogCitpbmxpbmUgYm9vbCBT
dHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkKK3sK
KyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKKyAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1f
c2NvcGVSZXNvbHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhtX2Vs
ZW1lbnQpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBTdHls
ZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKQoreworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAgIEFTU0VSVChtX3Nj
b3BlUmVzb2x2ZXIpOworCisgICAgVmVjdG9yPFJ1bGVTZXQqPiBtYXRjaGVkUnVsZXM7CisgICAg
bV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhtX2VsZW1lbnQsIG1hdGNoZWRSdWxlcyk7
CisgICAgaWYgKG1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IE1hdGNoT3B0aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBvcHRpb25zLnNj
b3BlID0gbV9lbGVtZW50OworICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNoZWRSdWxlcy5zaXpl
KCk7IGkgPiAwOyAtLWkpCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoZWRSdWxl
cy5hdChpLTEpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdlcy5s
YXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXN1bHQp
OworICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlRW1wdHlSdWxlcyk7CisjZW5kaWYKK30KKwogdm9p
ZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKQEAg
LTEzMzIsNiArMTM2NSw5IEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFy
ZWRTdHlsZSgpCiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5Lgog
ICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3VuY29tbW9uQXR0
cmlidXRlUnVsZVNldC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOworICAgIC8vIENhbid0IHNo
YXJlIGlmIEBob3N0IEAtcnVsZXMgYXBwbHkuCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNIb3N0UnVsZXMoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gVHJhY2tpbmcg
Y2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZvciBlYWNoIG5vZGUuIFRoaXMgbWF5
IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBhYm92ZS4KICAgICBpZiAocGFyZW50
U3R5bGVQcmV2ZW50c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybiAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggNWI1MTRjZTU1Yjc4YmIzYzE3NmQxZDZl
MmVkM2M0MDYwNmU4NzNlNi4uMWM4NmUwMjcwZmY0ZjRmN2EwZWVjMGZhNmNiOWUxMDAzMmQxMWNi
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0yOSw4ICsyOSwxMCBAQAogI2lu
Y2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1
ZGUgIlJ1bGVGZWF0dXJlLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgog
I2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0
YS5oIgorI2luY2x1ZGUgIlN0eWxlU2NvcGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CkBAIC04MCw2ICs4Miw3IEBAIGNsYXNzIFN0eWxlS2V5ZnJhbWU7CiBjbGFzcyBTdHlsZVBlbmRp
bmdJbWFnZTsKIGNsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CiBjbGFzcyBTdHlsZVJ1bGU7CitjbGFz
cyBTdHlsZVJ1bGVIb3N0OwogY2xhc3MgU3R5bGVSdWxlS2V5ZnJhbWVzOwogY2xhc3MgU3R5bGVS
dWxlUGFnZTsKIGNsYXNzIFN0eWxlUnVsZVJlZ2lvbjsKQEAgLTEzNyw2ICsxNDAsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwb3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIHB1c2hQ
YXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKICAgICB2b2lkIHBvcFBhcmVudFNo
YWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCopOworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAg
IHZvaWQgYWRkSG9zdFJ1bGUoU3R5bGVSdWxlSG9zdCogcnVsZSwgYm9vbCBoYXNEb2N1bWVudFNl
Y3VyaXR5T3JpZ2luLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgeyBlbnN1cmVTY29wZVJl
c29sdmVyKCktPmFkZEhvc3RSdWxlKHJ1bGUsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIHNj
b3BlKTsgfQorI2VuZGlmCiAKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvckVs
ZW1lbnQoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFN0eWxlU2hhcmlu
Z0JlaGF2aW9yID0gQWxsb3dTdHlsZVNoYXJpbmcsCiAgICAgICAgIFJ1bGVNYXRjaGluZ0JlaGF2
aW9yID0gTWF0Y2hBbGxSdWxlcywgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gMCk7
CkBAIC0xNjYsMTEgKzE3MiwzMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRBdXRob3JTdHls
ZVNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiA+Jik7CiAKIHByaXZhdGU6CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxF
KFNIQURPV19ET00pCisgICAgU3R5bGVTY29wZVJlc29sdmVyKiBlbnN1cmVTY29wZVJlc29sdmVy
KCkKKyAgICB7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyNpZiBFTkFCTEUoU0hBRE9XX0RP
TSkKKyAgICAgICAgQVNTRVJUKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYWRvd0RPTUVuYWJs
ZWQoKSB8fCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzdHlsZVNjb3BlZEVuYWJsZWQoKSk7Cisj
ZWxzZQorICAgICAgICBBU1NFUlQoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c3R5bGVTY29wZWRF
bmFibGVkKCkpOworI2VuZGlmCisjZWxzZQorICAgICAgICBBU1NFUlQoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhZG93RE9NRW5hYmxlZCgpKTsKKyNlbmRpZgorICAgICAgICBpZiAoIW1fc2Nv
cGVSZXNvbHZlcikKKyAgICAgICAgICAgIG1fc2NvcGVSZXNvbHZlciA9IGFkb3B0UHRyKG5ldyBT
dHlsZVNjb3BlUmVzb2x2ZXIoKSk7CisgICAgICAgIHJldHVybiBtX3Njb3BlUmVzb2x2ZXIuZ2V0
KCk7CisgICAgfQorI2VuZGlmCisKICAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxlbWVu
dCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8pOwog
ICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOwogICAgIHZvaWQgY29sbGVjdEZlYXR1cmVz
KCk7CiAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgYm9vbCBzdHls
ZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0Kik7CisgICAgYm9vbCBzdHls
ZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCk7CiAgICAgTm9kZSogbG9jYXRlQ291
c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBjb25z
dDsKICAgICBTdHlsZWRFbGVtZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2RlKiwg
dW5zaWduZWQmIGNvdW50KSBjb25zdDsKICAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxlbWVu
dChTdHlsZWRFbGVtZW50KikgY29uc3Q7CkBAIC0zMjMsNiArMzQ4LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1
bGVzKTsKICAgICB2b2lkIG1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0
JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhNYXRj
aFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgY29sbGVjdE1hdGNo
aW5nUnVsZXMoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRl
eCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
clJlZ2lvbihSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4
LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
TGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBs
YXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5j
cHAKaW5kZXggNzNiMGFmMjZjZTQyYWE0NTk0ZDliNzYxNzk2YjE5ZDZhNmJiNjY1Yy4uNjdmN2Jj
NzI4MjcwMmQ1YWVjOGEzNDBkZTY2YTVlZWEzMmQwZmQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVs
ZS5jcHAKQEAgLTc5LDYgKzc5LDkgQEAgdm9pZCBTdHlsZVJ1bGVCYXNlOjpyZXBvcnRNZW1vcnlV
c2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIGNhc2Ug
S2V5ZnJhbWVzOgogICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZXMq
Pih0aGlzKS0+cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwog
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBIb3N0OgorICAgICAgICBzdGF0aWNfY2FzdDxjb25z
dCBTdHlsZVJ1bGVCbG9jayo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UobWVt
b3J5T2JqZWN0SW5mbyk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFVua25vd246CiAgICAg
Y2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xMTcsNiArMTIwLDkgQEAgdm9p
ZCBTdHlsZVJ1bGVCYXNlOjpkZXN0cm95KCkKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAg
ZGVsZXRlIHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMpOwogICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBIb3N0OgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5bGVS
dWxlSG9zdCo+KHRoaXMpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBVbmtub3duOgogICAg
IGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMTUwLDYgKzE1Niw4IEBAIFBh
c3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gU3R5bGVSdWxlQmFzZTo6Y29weSgpIGNvbnN0CiAgICAg
ICAgIHJldHVybiAwOwogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKj4odGhpcyktPmNvcHkoKTsKKyAgICBjYXNl
IEhvc3Q6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVIb3N0Kj4o
dGhpcyktPmNvcHkoKTsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0OgogICAg
IGNhc2UgS2V5ZnJhbWU6CkBAIC0xOTEsNiArMTk5LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlPiBT
dHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTU3R5bGVTaGVldCogcGFyZW50U2hl
ZXQKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgcnVsZSA9IFdlYktpdENTU0tleWZyYW1l
c1J1bGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihzZWxmKSwgcGFy
ZW50U2hlZXQpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEhvc3Q6CiAgICAgY2FzZSBVbmtu
b3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UnVsZS5oCmluZGV4IGUxNWYzMmU0MDJhYWYyMDhkM2NjMGZjY2QzNTg0NzdiMjMwMzU2MzQuLmI3
ZmY1MjMyNmNiZjIxODQ3MjFhMTM0MWM4MjlhMzg0ZmM0YTM5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
dWxlLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogICAgICAgICBQYWdlLAogICAgICAgICBL
ZXlmcmFtZXMsCiAgICAgICAgIEtleWZyYW1lLCAvLyBOb3QgdXNlZC4gVGhlc2UgYXJlIGludGVy
bmFsbHkgbm9uLXJ1bGUgU3R5bGVLZXlmcmFtZSBvYmplY3RzLgorICAgICAgICBIb3N0LAogICAg
ICAgICBSZWdpb24gPSAxNgogICAgIH07CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQpAQCAtNTgsNiArNTksNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc1N0eWxlUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBTdHlsZTsgfQog
ICAgIGJvb2wgaXNSZWdpb25SdWxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFJlZ2lvbjsg
fQogICAgIGJvb2wgaXNJbXBvcnRSdWxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEltcG9y
dDsgfQorICAgIGJvb2wgaXNIb3N0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBIb3N0
OyB9CiAKICAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IGNvcHkoKSBjb25zdDsKIApAQCAt
MjIzLDYgKzIyNSwyMCBAQCBwcml2YXRlOgogICAgIENTU1NlbGVjdG9yTGlzdCBtX3NlbGVjdG9y
TGlzdDsKIH07CiAKK2NsYXNzIFN0eWxlUnVsZUhvc3QgOiBwdWJsaWMgU3R5bGVSdWxlQmxvY2sg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUnVsZUhvc3Q+IGNyZWF0ZShW
ZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZUhvc3QoYWRvcHRSdWxlcykpOworICAgIH0K
KworICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlSG9zdD4gY29weSgpIGNvbnN0IHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTdHlsZVJ1bGVIb3N0KCp0aGlzKSk7IH0KKworcHJpdmF0ZToKKyAgICBTdHls
ZVJ1bGVIb3N0KFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcykgOiBT
dHlsZVJ1bGVCbG9jayhIb3N0LCBhZG9wdFJ1bGVzKSB7IH0KKyAgICBTdHlsZVJ1bGVIb3N0KGNv
bnN0IFN0eWxlUnVsZUhvc3QmIG8pIDogU3R5bGVSdWxlQmxvY2sobykgeyB9Cit9OworCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBTdHlsZVJ1bGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcAppbmRleCA4NzQwMmJhYTU5ODEwMjRlZTVkNjQ0
NjVhZDE3OGRjY2I3OWRlYThhLi41ZmYyYjNlMGIxMTU0OTk0NDdlMjFjODZmNThmNjQ2MTMwMWNm
MGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcApAQCAtMjks
OCArMjksMTAgQEAKIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFET1df
RE9NKQogCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVl
dC5oIgogI2luY2x1ZGUgIkNvbnRleHRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIkVsZW1lbnRTaGFk
b3cuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50
LmgiCiAjaW5jbHVkZSAiUnVsZUZlYXR1cmUuaCIKQEAgLTE1NCwxMSArMTU2LDkxIEBAIHZvaWQg
U3R5bGVTY29wZVJlc29sdmVyOjpjb2xsZWN0RmVhdHVyZXNUbyhSdWxlRmVhdHVyZVNldCYgZmVh
dHVyZXMpCiAgICAgICAgIGZlYXR1cmVzLmFkZChpdC0+dmFsdWUtPmZlYXR1cmVzKCkpOwogfQog
CitpbmxpbmUgUnVsZVNldCogU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVBdEhvc3RSdWxlU2V0
Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCit7CisgICAgU2NvcGVkUnVsZVNldE1h
cDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fYXRIb3N0UnVsZXMuYWRkKHNoYWRvd1Jvb3QsIG51
bGxwdHIpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgIHJldHVybiBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorCitpbmxpbmUgUnVsZVNldCogU3R5bGVTY29w
ZVJlc29sdmVyOjphdEhvc3RSdWxlU2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3Qp
IGNvbnN0Cit7CisgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2F0
SG9zdFJ1bGVzLmZpbmQoc2hhZG93Um9vdCk7CisgICAgcmV0dXJuIGl0ICE9IG1fYXRIb3N0UnVs
ZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOworfQorCit2b2lkIFN0eWxlU2NvcGVSZXNv
bHZlcjo6YWRkSG9zdFJ1bGUoU3R5bGVSdWxlSG9zdCogaG9zdFJ1bGUsIGJvb2wgaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAgaWYg
KCFzY29wZSB8fCAhc2NvcGUtPmlzSW5TaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzY29wZS0+c2hhZG93Um9vdCgpOworICAgIGlm
ICghc2hhZG93Um9vdCB8fCAhc2hhZG93Um9vdC0+aG9zdCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBSdWxlU2V0KiBydWxlID0gZW5zdXJlQXRIb3N0UnVsZVNldEZvcihzaGFkb3dSb290KTsK
KworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxlcyA9
IGhvc3RSdWxlLT5jaGlsZFJ1bGVzKCk7CisgICAgQWRkUnVsZUZsYWdzIGFkZFJ1bGVGbGFncyA9
IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
biA6IFJ1bGVIYXNOb1NwZWNpYWxTdGF0ZTsKKyAgICBhZGRSdWxlRmxhZ3MgPSBzdGF0aWNfY2Fz
dDxBZGRSdWxlRmxhZ3M+KGFkZFJ1bGVGbGFncyB8IFJ1bGVDYW5Vc2VGYXN0Q2hlY2tTZWxlY3Rv
ciB8IFJ1bGVJc0hvc3RSdWxlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRS
dWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBTdHlsZVJ1bGVCYXNlKiBob3N0U3R5bGluZ1J1
bGUgPSBjaGlsZFJ1bGVzW2ldLmdldCgpOworICAgICAgICBpZiAoaG9zdFN0eWxpbmdSdWxlLT5p
c1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgcnVsZS0+YWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0
PFN0eWxlUnVsZSo+KGhvc3RTdHlsaW5nUnVsZSksIGFkZFJ1bGVGbGFncyk7CisgICAgfQorfQor
Citib29sIFN0eWxlU2NvcGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hv
c3RSdWxlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmIChtX2F0SG9zdFJ1bGVz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRWxlbWVudFNoYWRvdyog
c2hhZG93ID0gZWxlbWVudC0+c2hhZG93KCk7CisgICAgaWYgKCFzaGFkb3cpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FKDk5ODI3KTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk5ODI3CisgICAgLy8gYWRkIGEgbmV3IGZsYWcgdG8gRWxlbWVu
dFNoYWRvdyBhbmQgY2FjaGUgd2hldGhlciBhbnlAaG9zdCBALXJ1bGVzIGFyZQorICAgIC8vIGFw
cGxpZWQgdG8gdGhlIGVsZW1lbnQgb3Igbm90LiBTbyB3ZSBjYW4gYXZvaWQgYWx3YXlzIHRyYXZl
cnNpbmcKKyAgICAvLyBzaGFkb3cgcm9vdHMuCisgICAgZm9yIChTaGFkb3dSb290KiBzaGFkb3dS
b290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hhZG93Um9vdDsgc2hhZG93Um9v
dCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7CisgICAgICAgIGlmIChhdEhvc3RS
dWxlU2V0Rm9yKHNoYWRvd1Jvb3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTdHlsZVNjb3Bl
UmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFZlY3RvcjxS
dWxlU2V0Kj4mIG1hdGNoZWRSdWxlcykKK3sKKyAgICBpZiAobV9hdEhvc3RSdWxlcy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGVsZW1l
bnQtPnNoYWRvdygpOworICAgIGlmICghc2hhZG93KQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBGSVhNRSg5OTgyNyk6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
OTgyNworICAgIC8vIGFkZCBhIG5ldyBmbGFnIHRvIEVsZW1lbnRTaGFkb3cgYW5kIGNhY2hlIHdo
ZXRoZXIgYW55IEBob3N0IEAtcnVsZXMgYXJlCisgICAgLy8gYXBwbGllZCB0byB0aGUgZWxlbWVu
dCBvciBub3QuIFNvIHdlIGNhbiBxdWlja2x5IGV4aXQgdGhpcyBtZXRob2QKKyAgICAvLyBieSB1
c2luZyB0aGUgZmxhZy4KKyAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFkb3ct
PnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dSb290OyBzaGFkb3dSb290ID0gc2hhZG93Um9v
dC0+b2xkZXJTaGFkb3dSb290KCkpIHsgCisgICAgICAgIGlmIChSdWxlU2V0KiBydWxlU2V0ID0g
YXRIb3N0UnVsZVNldEZvcihzaGFkb3dSb290KSkKKyAgICAgICAgICAgIG1hdGNoZWRSdWxlcy5h
cHBlbmQocnVsZVNldCk7CisgICAgICAgIGlmICghc2hhZG93Um9vdC0+aGFzU2hhZG93SW5zZXJ0
aW9uUG9pbnQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogdm9pZCBTdHlsZVNj
b3BlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9i
amVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0
SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwogICAgIGluZm8uYWRkTWVtYmVy
KG1fYXV0aG9yU3R5bGVzKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3N0YWNrKTsKKyAgICBpbmZv
LmFkZE1lbWJlcihtX2F0SG9zdFJ1bGVzKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2NvcGVSZXNvbHZlci5oCmluZGV4IDVhMzJkZmU3OWY4MzViYjdjZjk1YjhjN2RkOWIzYmI3MDQx
ZmI3ZmIuLjg1YzFkMDEwMDZhZDZjYzZmNDg5MDExNTA1MDljYzM0OGIyZDZiMTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKQEAgLTM3LDggKzM3LDExIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIENTU1N0eWxlU2hl
ZXQ7CitjbGFzcyBFbGVtZW50OwogY2xhc3MgUnVsZVNldDsKIGNsYXNzIFJ1bGVGZWF0dXJlU2V0
OworY2xhc3MgU2hhZG93Um9vdDsKK2NsYXNzIFN0eWxlUnVsZUhvc3Q7CiAKICNpZiBFTkFCTEUo
U1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKIApAQCAtNzIsMTIgKzc1LDE4IEBA
IHB1YmxpYzoKICAgICBib29sIG1hdGNoZXNTdHlsZUJvdW5kcyhjb25zdCBTdGFja0ZyYW1lJiBm
cmFtZSkgY29uc3QgeyByZXR1cm4gZnJhbWUubV9hdXRob3JTdHlsZUJvdW5kc0luZGV4ID09IG1f
c3RhY2tQYXJlbnRCb3VuZHNJbmRleDsgfQogICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzVG8oUnVs
ZUZlYXR1cmVTZXQmKTsKIAorICAgIHZvaWQgYWRkSG9zdFJ1bGUoU3R5bGVSdWxlSG9zdCosIGJv
b2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUp
OworICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhjb25zdCBF
bGVtZW50Kik7CisgICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhjb25zdCBFbGVtZW50KiwgVmVjdG9y
PFJ1bGVTZXQqPiYgbWF0Y2hlZFJ1bGVzKTsKKwogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2Uo
TWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFJ1bGVTZXQqIHJ1bGVT
ZXRGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0OwogICAgIHZvaWQgc2V0dXBT
dGFjayhjb25zdCBDb250YWluZXJOb2RlKik7CiAgICAgYm9vbCBzdGFja0lzQ29uc2lzdGVudChj
b25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQpIGNvbnN0IHsgcmV0dXJuIHBhcmVudCAmJiBwYXJl
bnQgPT0gbV9zdGFja1BhcmVudDsgfQorICAgIFJ1bGVTZXQqIGVuc3VyZUF0SG9zdFJ1bGVTZXRG
b3IoY29uc3QgU2hhZG93Um9vdCopOworICAgIFJ1bGVTZXQqIGF0SG9zdFJ1bGVTZXRGb3IoY29u
c3QgU2hhZG93Um9vdCopIGNvbnN0OwogCiAgICAgU2NvcGVkUnVsZVNldE1hcCBtX2F1dGhvclN0
eWxlczsKIApAQCAtODgsNiArOTcsOCBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgdXNlZCB0
byBkZWNpZGUgd2hldGhlciBtX3Njb3BpbmdFbGVtZW50U3RhY2sgaXMgY29uc2lzdGVudCwgc2Vw
YXJhdGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tlcjo6bV9wYXJlbnRTdGFjay4KICAgICBjb25zdCBD
b250YWluZXJOb2RlKiBtX3N0YWNrUGFyZW50OwogICAgIGludCBtX3N0YWNrUGFyZW50Qm91bmRz
SW5kZXg7CisKKyAgICBTY29wZWRSdWxlU2V0TWFwIG1fYXRIb3N0UnVsZXM7CiB9OwogCiBpbmxp
bmUgYm9vbCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZVN0YWNrQ29uc2lzdGVuY3koQ29udGFp
bmVyTm9kZSogcGFyZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hl
ZXRDb250ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNw
cAppbmRleCBlN2NlODFlYWFiNDg3MTg2MjRmNGViNTUyMzhlNWMxYWYzNTY4NWI4Li4zOWU5YTdi
MmNkNmMyMTkzYmIwNDk4MGZhODhhODI3MjFlNGEyM2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVTaGVldENvbnRlbnRzLmNwcApAQCAtNDM1LDYgKzQzNSwxMCBAQCBzdGF0aWMgYm9vbCBj
aGlsZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoY29uc3QgVmVjdG9yPFJl
ZlB0cjxTdHlsZQogICAgICAgICAgICAgaWYgKGNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5jZWxl
ZFN1YnJlc291cmNlcyhzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVSZWdpb24qPihydWxlKS0+
Y2hpbGRSdWxlcygpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFN0eWxlUnVsZUJhc2U6Okhvc3Q6CisgICAgICAgICAgICBp
ZiAoY2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKHN0YXRpY19jYXN0
PGNvbnN0IFN0eWxlUnVsZUhvc3QqPihydWxlKS0+Y2hpbGRSdWxlcygpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0eWxl
UnVsZUJhc2U6OkltcG9ydDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICBjYXNlIFN0eWxlUnVsZUJhc2U6OlBhZ2U6CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMGExYjliODI5YzgwOWJiMTc0
MDc3NDkzMTk2NmJmNjE0NDMwOWEwYi4uMDcwZTkxYjdlNjg1NTI0MTEzOTNjNzNjNGJkNjY0MTJh
Yjk5MTViYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEwLTEyICBUYWthc2hpIFNha2Ft
b3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0gTmVlZHMgQGhv
c3QgcnVsZSBmb3IgU2hhZG93RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSGFqaW1l
IE1vcml0YS4KKworICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxl
cy5odG1sOiBBZGRlZC4KKwogMjAxMi0xMC0yNCAgTWF4IFZ1am92aWMgIDxtdnVqb3ZpY0BhZG9i
ZS5jb20+CiAKICAgICAgICAgW0NTUyBTaGFkZXJzXSBUaGUgbWVzaCBzaG91bGQgYmUgc3BlY2lm
aWVkIHVzaW5nIDxjb2x1bW4sIHJvdz4gb3JkZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEx
ZjNiMWMyNTUxNjk1Njc4NzI1YmQ2NjUxODEzMTM0Mzg2NDlhMTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTUgQEAKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0OiByZ2IoMjU1LCAw
LCAwKQoraG9zdEE6IHJnYigyNTUsIDAsIDApCitob3N0QjogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6
IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMTI4LCAxMjgsIDEyOCkKK2hvc3Q6IHJnYigwLCAw
LCAyNTUpCitob3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAxMjgpCito
b3N0OiByZ2IoMjU1LCAyNTUsIDApCitob3N0OiByZ2IoMjU1LCAwLCAwKQorbmVzdGVkSG9zdDog
cmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0OiByZ2IoMjU1LCAyNTUs
IDApCitIZWxsbwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9z
dC1hdHJ1bGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVs
ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43ZDRiNTExZWUwMmZhOWQ3NTFlNTdlMTY5YjAwYTZkODc3ZDUz
YTZkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9z
dC1hdHJ1bGVzLmh0bWwKQEAgLTAsMCArMSwxOTAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzdHlsZT4KKyNob3N0IHsKKyAgY29sb3I6IGdyYXk7Cit9Cis8L3N0eWxlPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3BvbHlmaWxsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+
CitmdW5jdGlvbiBkdW1wQ29tcHV0ZWRTdHlsZShub2RlKQoreworICAgIGRlYnVnKG5vZGUuaWQg
KyAiOiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxs
KS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKK30KKworZnVuY3Rpb24gcHJlcHJvY2Vzc0Zv
clRlc3QoKQoreworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFy
ZW50Iik7CisgICAgcGFyZW50LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJob3N0Ij48c3Bhbj5IZWxs
bzwvc3Bhbj48L2Rpdj4nOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlQ29udGVudENhc2UoKQor
eworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9v
dChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNv
bG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1
dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVTaGFkb3dDYXNlKCkKK3sK
KyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3Qo
aG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xv
cjogcmVkOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBkdW1wQ29tcHV0ZWRT
dHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdEhvc3RXaXRoU2VsZWN0b3IoKQoreworICAg
IHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyZW50Iik7CisgICAgcGFy
ZW50LmlubmVySFRNTCA9ICI8c3R5bGUgc2NvcGVkPiAuaG9zdCB7IGNvbG9yOiBncmF5IH07PC9z
dHlsZT4iCisgICAgICAgICsgIjxkaXYgaWQ9J2hvc3RBJyBjbGFzcz0naG9zdCc+PHNwYW4+SGVs
bG88L3NwYW4+PC9kaXY+IgorICAgICAgICArICI8c3BhbiBpZD0naG9zdEInIGNsYXNzPSdob3N0
Jz48c3Bhbj5Xb3JsZDwvc3Bhbj48L3NwYW4+IjsKKworICAgIHZhciBob3N0QSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJob3N0QSIpOworICAgIHZhciBzaGFkb3dBID0gbmV3IFdlYktpdFNo
YWRvd1Jvb3QoaG9zdEEpOworICAgIHZhciBzdHlsZSA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBj
b2xvcjogcmVkOyB9IHNwYW4geyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT4iOworICAgIHNoYWRv
d0EuaW5uZXJIVE1MID0gc3R5bGUgKyAiPHNoYWRvdz48L3NoYWRvdz4iOworCisgICAgdmFyIGhv
c3RCID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3RCIik7CisgICAgdmFyIHNoYWRvd0Ig
PSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0Qik7CisgICAgc2hhZG93Qi5pbm5lckhUTUwgPSBz
dHlsZSArICI8c2hhZG93Pjwvc2hhZG93PiI7CisKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0
QSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdEIpOworfQorCitmdW5jdGlvbiB0ZXN0UHNl
dWRvSG9zdFdpdGhTY29wZWQoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFy
IGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cg
PSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxk
aXY+PHN0eWxlIHNjb3BlZD5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PHNo
YWRvdz48L3NoYWRvdz48ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1
ZTsgfSB9PC9zdHlsZT48L2Rpdj48L2Rpdj4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3Qp
OworfQorCitmdW5jdGlvbiB0ZXN0UHNldWRvSG9zdFdpdGhGYWxsYmFja1NoYWRvdygpCit7Cisg
ICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dS
b290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290
KGhvc3QpOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2
IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICB5b3Vu
Z2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PHNoYWRvdz48L3NoYWRvdz48L2NvbnRl
bnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFR3
b1NoYWRvd1Jvb3RzQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIg
aG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNo
YWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRv
dyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhU
TUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVu
dD48L2NvbnRlbnQ+IjsKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBo
b3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOwor
ICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0VHdvU2hhZG93
Um9vdHNDcmVhdGluZ0RpZmZlcmVudE9yZGVyQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRl
c3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7Cisg
ICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZh
ciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHlvdW5n
ZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsg
fSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRN
TCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50
PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlv
biB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvd0NvbnRlbnQoKQoreworICAg
IHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9v
dChob3N0KTsKKyAgICB2YXIgb2xkZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
KTsKKyAgICB2YXIgeW91bmdlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOwor
ICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworCisg
ICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICB5
b3VuZ2VyU2hhZG93LmlubmVySFRNTCA9ICI8Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBvbGRl
clNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGdyZWVuOyB9
IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1M
ID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+
PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9u
IHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3RzV2l0aEluZXJ0U2hhZG93KCkKK3sKKyAgICBwcmVwcm9j
ZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhv
c3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7
CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAg
dmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIg
eW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKworICAgIHlvdW5n
ZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogeWVsbG93
OyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICB5b3VuZ2VyU2hhZG93LmlubmVy
SFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48ZGl2
PmluZXJ0PC9kaXY+IjsKKyAgICBvbGRlclNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0
IHsgZGl2IHsgY29sb3I6IGdyZWVuOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAg
ICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBy
ZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5
bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3ROZXN0ZWRDYXNlKCkKK3sKKyAgICBwcmVwcm9j
ZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhv
c3QiKTsKKyAgICB2YXIgb3V0ZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsK
KyAgICBvdXRlclNoYWRvdy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6
IHJlZDsgfSB9PC9zdHlsZT48ZGl2IGlkPSJuZXN0ZWRIb3N0Ij5Jbm5lclNoYWRvdzwvZGl2Pic7
CisgICAgdmFyIG5lc3RlZCA9IG91dGVyU2hhZG93LmdldEVsZW1lbnRCeUlkKCJuZXN0ZWRIb3N0
Iik7CisgICAgdmFyIGlubmVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QobmVzdGVkKTsK
KyAgICBpbm5lclNoYWRvdy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6
IGJsdWU7IH0gfTwvc3R5bGU+U2hvdyA8c2hhZG93Pjwvc2hhZG93PiBpbiBvdXRlci4nOworICAg
IGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKG5lc3RlZCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpCit7CisgICAgcHJlcHJvY2Vz
c0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0
Iik7CisgICAgaG9zdC5pbm5lckhUTUwgPSAiPHN0eWxlIHNjb3BlZD4jaG9zdCB7IGNvbG9yOiB5
ZWxsb3c7IH08L3N0eWxlPjxzcGFuPkhlbGxvPC9zcGFuPiI7CisgICAgdmFyIHNoYWRvdyA9IG5l
dyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxl
PkBob3N0IHsgI2hvc3QgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVu
dD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0SG9z
dFZzSW5saW5lU3R5bGUoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhv
c3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIGhvc3Quc3R5bGUuY29s
b3IgPSAieWVsbG93IjsKKyAgICBob3N0LmlubmVySFRNTCA9ICI8c3Bhbj5IZWxsbzwvc3Bhbj4i
OworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFk
b3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5
bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9
CisKK2Z1bmN0aW9uIHJ1blRlc3RzKCkKK3sKKyAgICB0ZXN0U2ltcGxlQ29udGVudENhc2UoKTsK
KyAgICB0ZXN0U2ltcGxlU2hhZG93Q2FzZSgpOworICAgIHRlc3RIb3N0V2l0aFNlbGVjdG9yKCk7
CisgICAgdGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVkKCk7CisgICAgdGVzdFBzZXVkb0hvc3RXaXRo
RmFsbGJhY2tTaGFkb3coKTsKKyAgICB0ZXN0VHdvU2hhZG93Um9vdHNDYXNlKCk7CisgICAgdGVz
dFR3b1NoYWRvd1Jvb3RzQ3JlYXRpbmdEaWZmZXJlbnRPcmRlckNhc2UoKTsKKyAgICB0ZXN0TXVs
dGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvd0NvbnRlbnQoKTsKKyAgICB0ZXN0TXVsdGlw
bGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvdygpOworICAgIHRlc3ROZXN0ZWRDYXNlKCk7Cisg
ICAgdGVzdEhvc3RWc1Njb3BlZFN0eWxlKCk7CisgICAgdGVzdEhvc3RWc0lubGluZVN0eWxlKCk7
Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKSI+CisgIDxk
aXYgaWQ9InBhcmVudCI+CisgIDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170831</attachid>
            <date>2012-10-25 23:50:58 -0700</date>
            <delta_ts>2012-11-14 06:32:16 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-88606-20121026154930.patch</filename>
            <type>text/plain</type>
            <size>43763</size>
            <attacher name="Takashi Sakamoto">tasak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyNTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDllMzA0NjZhNzIwMzZi
ZDJmMWZkMjhjMzM4MDlmNWQ1ODZlMjA3Ni4uN2IzMmM0NTJiZmNhNTdmYzM3YTliZGMzZWU5ODIz
NTNjOGFhODI2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMiBAQAorMjAxMi0xMC0xMiAgVGFr
YXNoaSBTYWthbW90byAgPHRhc2FrQGdvb2dsZS5jb20+CisKKyAgICAgICAgW1NoYWRvdyBET01d
IE5lZWRzIEBob3N0IHJ1bGUgZm9yIFNoYWRvd0RPTSBzdHlsaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODYwNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IEhhamltZSBNb3JpdGEuCisKKyAgICAgICAgSW1wbGVtZW50ZWQgQGhvc3QtQHJ1bGVzIGFj
Y29yZGluZyB0byB0aGUgc2hhZG93IGRvbSBzcGVjOgorICAgICAgICBodHRwOi8vZHZjcy53My5v
cmcvaGcvd2ViY29tcG9uZW50cy9yYXctZmlsZS90aXAvc3BlYy9zaGFkb3cvaW5kZXguaHRtbCNo
b3N0LWF0LXJ1bGUKKyAgICAgICAgVGhlIGRlc2lnbiBkb2MgaXM6CisgICAgICAgIGh0dHBzOi8v
ZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVAyeW9yY2hGOGxjaTJzY2NyLW1WU1JmMmR0dmpL
ZWl1eVFXekNCMmJFQTgvZWRpdAorCisgICAgICAgIFRlc3Q6IGZhc3QvZG9tL3NoYWRvdy9hdGhv
c3QtYXRydWxlcy5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhbW1hci55LmluOgorICAgICAg
ICBBZGRlZCBydWxlcyBmb3IgcGFyc2luZyBAaG9zdCBALXJ1bGVzLgorICAgICAgICAqIGNzcy9D
U1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZXRlY3RBdFRva2Vu
KToKKyAgICAgICAgQWRkZWQgYSBuZXcgdG9rZW4gIkBob3N0Ii4KKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6Y3JlYXRlSG9zdFJ1bGUpOgorICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2Qg
dG8gY3JlYXRlIGFuIEBob3N0IEAtcnVsZSwgd2hpY2ggaXMgaW52b2tlZCBmcm9tCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIEFkZGVkIGEg
ZGVjbGFyYXRpb24gb2YgdGhlIGFib3ZlIG5ldyBtZXRob2Q6IGNyZWF0ZUhvc3RSdWxlLgorICAg
ICAgICAqIGNzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaDoKKyAgICAgICAgQWRkZWQgSE9TVF9S
VUxFIHRvIGVudW0gVHlwZS4KKyAgICAgICAgKiBjc3MvUnVsZVNldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSdWxlRGF0YTo6UnVsZURhdGEpOgorICAgICAgICBNb2RpZmllZCBtdWx0aXBsZSBi
b29sIGFyZ3VtZW50cyBpbnRvIG9uZSBhcmd1bWVudC4gTm93IGl0CisgICAgICAgIHVzZXMgY29t
YmluYXRpb25zIG9mIHZhbHVlcyBmcm9tIGVudW0gQWRkUnVsZUZsYWdzLgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZVNldDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRS
ZWdpb25SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFN0eWxlUnVsZSk6Cisg
ICAgICAgIFVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBSdWxlRGF0YSdzIGNoYW5nZS4KKyAgICAg
ICAgTW9kaWZpZWQgdG8gSW52b2tlIGluY3JlYXNlU3BlY2lmaWNpdHkgaWYgdGhlIGdpdmVuIHJ1
bGUgaXMgQGhvc3QKKyAgICAgICAgQC1ydWxlLgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6
YWRkUnVsZXNGcm9tU2hlZXQpOgorICAgICAgICBJbnZva2VkIGFkZEhvc3RSdWxlIGlmIHRoZSBn
aXZlbiBydWxlIGlzIEBob3N0IEAtcnVsZS4KKyAgICAgICAgKiBjc3MvUnVsZVNldC5oOgorICAg
ICAgICAoUnVsZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OmluY3JlYXNlU3Bl
Y2lmaWNpdHkpOgorICAgICAgICBBZGRlZCBhIG5ldyBtZXRob2QgdG8gaW5jcmVhc2Ugc2VsZWN0
b3IncyBzcGVjaWZpY2l0eS4gVGhpcyBtZXRob2QgaXMKKyAgICAgICAgdXNlZCB0byBtYWtlIEBo
b3N0IEAtcnVsZXMnIHNwZWNpZmljaXR5IGxhcmdlciB0aGFuIG5vcm1hbCBhdXRob3IKKyAgICAg
ICAgcnVsZXMnIHNwZWNpZmljaXR5LgorICAgICAgICAoUnVsZVNldCk6CisgICAgICAgICogY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVJ1bGVTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRkSG9zdFJ1bGUpOgorICAgICAgICBBIHdy
YXBwZXIgbWV0aG9kIHRvIGludm9rZSBTdHlsZVNjb3BlUmVzb2x2ZXI6OmFkZEhvc3RSdWxlLiBU
aGUgbWV0aG9kCisgICAgICAgIGlzIHVzZWQgdG8gbWFrZSBvbmx5IFN0eWxlUmVzb2x2ZXIga25v
dyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYWJvdXQKKyAgICAgICAgY2xhc3MgU3R5bGVTY29w
ZVJlc29sdmVyLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9y
U3R5bGVzaGVldHMpOgorICAgICAgICBVcGRhdGVkIGFjY29yZGluZyB0byB0aGUgUnVsZURhdGEn
cyBjaGFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQg
bWF0Y2hlZCBob3N0IHJ1bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhp
cyBtZXRob2QgaW52b2tlcworICAgICAgICBTdHlsZVNjb3BlUmVzb2x2ZXI6OnN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMgdG8gZmluZAorICAgICAgICBtYXRjaGVkIGhvc3Qg
cnVsZXMuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Om1hdGNoSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgbWF0Y2hl
ZCBob3N0IHJ1bGVzIHdoZW4gYW4gZWxlbWVudCBpcyBnaXZlbi4KKyAgICAgICAgVGhpcyBtZXRo
b2QgaW52b2tlcyBTdHlsZVNjb3BlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzIHRvIGZpbmQKKyAg
ICAgICAgbWF0Y2hlZCBob3N0IHJ1bGVzLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bWF0Y2hTY29wZWRBdXRob3JSdWxlcyk6CisgICAgICAgIE1vZGlmaWVkIHRvIGludm9rZSBt
YXRjaEhvc3RSdWxlcy4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNo
YXJlZFN0eWxlKToKKyAgICAgICAgRGlzYWJsZSBzaWJsaW5nIHN0eWxlIGNhY2hlIGlmIHRoZSBn
aXZlbiBlbGVtZW50IGlzIGEgc2hhZG93IGhvc3QgYW5kCisgICAgICAgIGFueSBAaG9zdCBALXJ1
bGVzIGFyZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50LgorICAgICAgICAqIGNzcy9TdHlsZVJlc29s
dmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjplbnN1cmVTY29wZVJlc29s
dmVyKToKKyAgICAgICAgSWYgbm8gc2NvcGVSZXNvbHZlciBpcyBjcmVhdGVkLCBjcmVhdGUgYW5k
IHJldHVybiB0aGUgaW5zdGFuY2UuCisgICAgICAgIElmIGNyZWF0ZWQsIGp1c3QgcmV0dXJuIHRo
ZSBpbnN0YW5jZS4KKyAgICAgICAgKFN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAqIGNzcy9TdHls
ZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6cmVwb3J0TWVtb3J5
VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQmFzZTo6ZGVzdHJveSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVCYXNlOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUnVsZUJhc2U6OmNyZWF0ZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJ1bGVIb3N0OjpTdHlsZVJ1bGVIb3N0KToKKyAgICAgICAgSW1wbGVtZW50ZWQgY2xhc3MgU3R5
bGVSdWxlSG9zdC4gVGhlIGNsYXNzIGlzIGFsbW9zdCB0aGUgc2FtZSBhcworICAgICAgICBTdHls
ZVJ1bGVCbG9jayBleGNlcHQgdHlwZS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNz
cy9TdHlsZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUJhc2U6OmlzSG9zdFJ1
bGUpOgorICAgICAgICAoU3R5bGVSdWxlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1
bGVIb3N0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSG9zdDo6Y29weSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2NvcGVSZXNvbHZlcjo6ZW5zdXJlQXRIb3N0UnVs
ZVNldEZvcik6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgUnVsZVNldCBm
b3IgdGhlIGdpdmVuIHNoYWRvdyByb290LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6OmF0SG9zdFJ1bGVTZXRGb3IpOgorICAgICAgICBB
IG5ldyBwcml2YXRlIGlubGluZSBtZXRob2QgdG8gb2J0YWluIEBob3N0IEAtcnVsZXMgZGVjbGFy
ZWQgaW4KKyAgICAgICAgdGhlIGdpdmVuIHNoYWRvdyByb290LgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVTY29wZVJlc29sdmVyOjphZGRIb3N0UnVsZSk6CisgICAgICAgIEFkZGVkIGEgbmV3IG1l
dGhvZCB0byByZWdpc3RlciBAaG9zdCBALXJ1bGVzIHdpdGggc2hhZG93IHJvb3RzLgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRj
aGVzSG9zdFJ1bGVzKToKKyAgICAgICAgQSBuZXcgbWV0aG9kIHRvIGZpbmQgd2hldGhlciBhbnkg
QGhvc3QgQC1ydWxlcyBhcmUgYXBwbGllZCB0bworICAgICAgICB0aGUgZ2l2ZW4gaG9zdCBlbGVt
ZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTY29wZVJlc29sdmVyOjptYXRjaEhvc3RSdWxl
cyk6CisgICAgICAgIEEgbmV3IG1ldGhvZCB0byBmaW5kIG1hdGNoZWQgcnVsZXMgZm9yIHRoZSBn
aXZlbiBob3N0IGVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNjb3BlUmVzb2x2ZXI6
OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKiBjc3MvU3R5bGVTY29wZVJlc29sdmVyLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN0eWxlU2NvcGVSZXNvbHZlcik6CisgICAg
ICAgICogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjaGls
ZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMpOgorCiAyMDEyLTEwLTI1ICBB
ZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1Y4XSBXZSBjYW4gbWVy
Z2UgdGhlIHdyYXBwZXIgbWFwcyBmb3IgRE9NIG9iamVjdHMgYW5kIGFjdGl2ZSBET00gb2JqZWN0
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbiBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4KaW5kZXggNGI4OTRmYjk1OTdkZWY1MmEyNGI5
M2ZkNTRlZjc0MzI0MGE1Yzc2OC4uNDA0NTExMzVjY2MwODUyYWZhNGUzOTliMTUxMTUzMGZkNDZl
MWRiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbgorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCkBAIC05NSw2ICs5NSw5IEBAIHN0
YXRpYyBpbmxpbmUgaW50IGNzc3l5ZXJyb3Iodm9pZCosIGNvbnN0IGNoYXIqKQogJXRva2VuIFNV
UFBPUlRTX1NZTQogI2VuZGlmCiAldG9rZW4gRk9OVF9GQUNFX1NZTQorI2lmIEVOQUJMRV9TSEFE
T1dfRE9NCisldG9rZW4gSE9TVF9TWU0KKyNlbmRpZgogJXRva2VuIENIQVJTRVRfU1lNCiAldG9r
ZW4gTkFNRVNQQUNFX1NZTQogJXRva2VuIFZBUkZVTkNUSU9OCkBAIC0xODcsNiArMTkwLDkgQEAg
c3RhdGljIGlubGluZSBpbnQgY3NzeXllcnJvcih2b2lkKiwgY29uc3QgY2hhciopCiAldHlwZSA8
cnVsZT4gcGFnZQogJXR5cGUgPHJ1bGU+IG1hcmdpbl9ib3gKICV0eXBlIDxydWxlPiBmb250X2Zh
Y2UKKyNpZiBFTkFCTEVfU0hBRE9XX0RPTQorJXR5cGUgPHJ1bGU+IGhvc3QKKyNlbmRpZgogJXR5
cGUgPHJ1bGU+IGtleWZyYW1lcwogJXR5cGUgPHJ1bGU+IGludmFsaWRfcnVsZQogJXR5cGUgPHJ1
bGU+IHNhdmVfYmxvY2sKQEAgLTQwMiw2ICs0MDgsOSBAQCB2YWxpZF9ydWxlOgogI2lmIEVOQUJM
RV9DU1MzX0NPTkRJVElPTkFMX1JVTEVTCiAgIHwgc3VwcG9ydHMKICNlbmRpZgorI2lmIEVOQUJM
RV9TSEFET1dfRE9NCisgIHwgaG9zdAorI2VuZGlmCiAgIDsKIAogcnVsZToKQEAgLTkwMSw2ICs5
MTAsMjUgQEAgZm9udF9mYWNlOgogICAgIH0KIDsKIAorI2lmIEVOQUJMRV9TSEFET1dfRE9NCiti
ZWZvcmVfaG9zdF9ydWxlOgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgcGFyc2VyLT5tYXJr
UnVsZUhlYWRlclN0YXJ0KENTU1J1bGVTb3VyY2VEYXRhOjpIT1NUX1JVTEUpOworICAgIH0KKyAg
ICA7CisKK2hvc3Q6CisgICAgYmVmb3JlX2hvc3RfcnVsZSBIT1NUX1NZTSBhdF9ydWxlX2hlYWRl
cl9lbmRfbWF5YmVfc3BhY2UKKyAgICAneycgYXRfcnVsZV9ib2R5X3N0YXJ0IG1heWJlX3NwYWNl
IGJsb2NrX3J1bGVfbGlzdCBzYXZlX2Jsb2NrIHsKKyAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0
ZUhvc3RSdWxlKCQ3KTsKKyAgICB9CisgICAgfCBiZWZvcmVfaG9zdF9ydWxlIEhPU1RfU1lNIGF0
X3J1bGVfaGVhZGVyX2VuZF9tYXliZV9zcGFjZSAnOycgeworICAgICAgICAkJCA9IDA7CisgICAg
ICAgIHBhcnNlci0+cG9wUnVsZURhdGEoKTsKKyAgICB9CisgICAgOworI2VuZGlmCisKIHJlZ2lv
bl9zZWxlY3RvcjoKICAgICBzZWxlY3Rvcl9saXN0IHsKICAgICAgICAgaWYgKCQxKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDBmMDg4NmYzNDNiYTdlMzNiZTJhN2RiMWNkN2RlZmFk
MTlmZmVhZTkuLjk1MzkyZTliODhmNmYyNGRmODAyNWQwZGIwMTM3YjA3OWZlMjMxOGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC05MTg1LDYgKzkxODUsMTMgQEAgaW5saW5lIHZvaWQg
Q1NTUGFyc2VyOjpkZXRlY3RBdFRva2VuKGludCBsZW5ndGgsIGJvb2wgaGFzRXNjYXBlKQogICAg
ICAgICAgICAgbV90b2tlbiA9IEZPTlRfRkFDRV9TWU07CiAgICAgICAgIHJldHVybjsKIAorI2lm
IEVOQUJMRShTSEFET1dfRE9NKQorICAgIGNhc2UgJ2gnOgorICAgICAgICBpZiAobGVuZ3RoID09
IDUgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmllcihuYW1lICsgMiwgIm9zdCIpKQorICAgICAgICAg
ICAgbV90b2tlbiA9IEhPU1RfU1lNOworICAgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIGNh
c2UgJ2knOgogICAgICAgICBpZiAobGVuZ3RoID09IDcgJiYgaXNFcXVhbFRvQ1NTSWRlbnRpZmll
cihuYW1lICsgMiwgIm1wb3J0IikpIHsKICAgICAgICAgICAgIG1fcGFyc2luZ01vZGUgPSBNZWRp
YVF1ZXJ5TW9kZTsKQEAgLTEwMDE3LDYgKzEwMDI0LDI0IEBAIFN0eWxlUnVsZUJhc2UqIENTU1Bh
cnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxlKCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWYg
RU5BQkxFKFNIQURPV19ET00pCitTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZUhvc3RS
dWxlKFJ1bGVMaXN0KiBydWxlcykKK3sKKyAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93
TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CisgICAgUmVmUHRyPFN0eWxlUnVsZUhvc3Q+
IHJ1bGU7CisgICAgaWYgKHJ1bGVzKQorICAgICAgICBydWxlID0gU3R5bGVSdWxlSG9zdDo6Y3Jl
YXRlKCpydWxlcyk7CisgICAgZWxzZSB7CisgICAgICAgIFJ1bGVMaXN0IGVtcHR5UnVsZXM7Cisg
ICAgICAgIHJ1bGUgPSBTdHlsZVJ1bGVIb3N0OjpjcmVhdGUoZW1wdHlSdWxlcyk7CisgICAgfQor
ICAgIFN0eWxlUnVsZUhvc3QqIHJlc3VsdCA9IHJ1bGUuZ2V0KCk7CisgICAgbV9wYXJzZWRSdWxl
cy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOworICAgIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3Vy
Y2VUcmVlSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKIHZvaWQg
Q1NTUGFyc2VyOjphZGROYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0
IEF0b21pY1N0cmluZyYgdXJpKQogewogICAgIGlmICghbV9zdHlsZVNoZWV0IHx8ICFtX2FsbG93
TmFtZXNwYWNlRGVjbGFyYXRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IDVmOTllNjIy
NmUwYzNiZTc3MzYyNDUxNWJmMWFjYmYwYjMxOGRmZGYuLjhiMDk2N2E4ZjZhN2E0NTNlMjNmZjJk
NTY2MjIwMmQ3ODRmOWUzZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTI4Miw2ICsyODIs
OSBAQCBwdWJsaWM6CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlUGFnZVJ1bGUoUGFzc093blB0
cjxDU1NQYXJzZXJTZWxlY3Rvcj4gcGFnZVNlbGVjdG9yKTsKICAgICBTdHlsZVJ1bGVCYXNlKiBj
cmVhdGVSZWdpb25SdWxlKENTU1NlbGVjdG9yVmVjdG9yKiByZWdpb25TZWxlY3RvciwgUnVsZUxp
c3QqIHJ1bGVzKTsKICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVNYXJnaW5BdFJ1bGUoQ1NTU2Vs
ZWN0b3I6Ok1hcmdpbkJveFR5cGUpOworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAgIFN0eWxl
UnVsZUJhc2UqIGNyZWF0ZUhvc3RSdWxlKFJ1bGVMaXN0KiBydWxlcyk7CisjZW5kaWYKICAgICB2
b2lkIHN0YXJ0RGVjbGFyYXRpb25zRm9yTWFyZ2luQm94KCk7CiAgICAgdm9pZCBlbmREZWNsYXJh
dGlvbnNGb3JNYXJnaW5Cb3goKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1Byb3BlcnR5U291cmNlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291
cmNlRGF0YS5oCmluZGV4IDQ2OWJkYjYzMGMxYTVjNWRiYTk5M2ZkMWFkNTllZDA3NDQ5YTU1YmUu
LjA3OWVjMzM2MjQ5NWMwNzk3OWI0NzVhZmRlNzc2MDIzODRjOTk5NmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKQEAgLTk0LDcgKzk0LDggQEAgc3RydWN0
IENTU1J1bGVTb3VyY2VEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTUnVsZVNvdXJjZURhdGE+
IHsKICAgICAgICAgRk9OVF9GQUNFX1JVTEUsCiAgICAgICAgIFBBR0VfUlVMRSwKICAgICAgICAg
S0VZRlJBTUVTX1JVTEUsCi0gICAgICAgIFJFR0lPTl9SVUxFCisgICAgICAgIFJFR0lPTl9SVUxF
LAorICAgICAgICBIT1NUX1JVTEUKICAgICB9OwogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NT
UnVsZVNvdXJjZURhdGE+IGNyZWF0ZShUeXBlIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvUnVsZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKaW5k
ZXggZTJiZTU3NzFlMDI1ZjE0Y2Y5YTg1ZGU3ZTUxY2Q5YzVhMTMwOTA1OS4uYjNmMGZkZWUxZmNi
YzMzNmQ3ZTRiZmU3OGMzMzNiNDNiZDQwMDgwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1J1bGVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcApAQCAt
MTA3LDE4ICsxMDcsMTggQEAgc3RhdGljIGlubGluZSBib29sIGNvbnRhaW5zVW5jb21tb25BdHRy
aWJ1dGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLVJ1bGVEYXRhOjpSdWxlRGF0YShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNl
bGVjdG9ySW5kZXgsIHVuc2lnbmVkIHBvc2l0aW9uLCBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaW5SZWdpb25SdWxlKQor
UnVsZURhdGE6OlJ1bGVEYXRhKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRl
eCwgdW5zaWduZWQgcG9zaXRpb24sIEFkZFJ1bGVGbGFncyBhZGRSdWxlRmxhZ3MpCiAgICAgOiBt
X3J1bGUocnVsZSkKICAgICAsIG1fc2VsZWN0b3JJbmRleChzZWxlY3RvckluZGV4KQogICAgICwg
bV9wb3NpdGlvbihwb3NpdGlvbikKICAgICAsIG1fc3BlY2lmaWNpdHkoc2VsZWN0b3IoKS0+c3Bl
Y2lmaWNpdHkoKSkKLSAgICAsIG1faGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKGNhblVzZUZhc3RD
aGVja1NlbGVjdG9yICYmIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2thYmxlU2VsZWN0b3Io
c2VsZWN0b3IoKSkpCisgICAgLCBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigoYWRkUnVsZUZs
YWdzICYgUnVsZUNhblVzZUZhc3RDaGVja1NlbGVjdG9yKSAmJiBTZWxlY3RvckNoZWNrZXI6Omlz
RmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVjdG9yKCkpKQogICAgICwgbV9oYXNNdWx0aXBhcnRT
ZWxlY3RvcighIXNlbGVjdG9yKCktPnRhZ0hpc3RvcnkoKSkKICAgICAsIG1faGFzUmlnaHRtb3N0
U2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goaXNTZWxlY3Rvck1hdGNoaW5nSFRN
TEJhc2VkT25SdWxlSGFzaChzZWxlY3RvcigpKSkKICAgICAsIG1fY29udGFpbnNVbmNvbW1vbkF0
dHJpYnV0ZVNlbGVjdG9yKFdlYkNvcmU6OmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rv
cihzZWxlY3RvcigpKSkKICAgICAsIG1fbGlua01hdGNoVHlwZShTZWxlY3RvckNoZWNrZXI6OmRl
dGVybWluZUxpbmtNYXRjaFR5cGUoc2VsZWN0b3IoKSkpCi0gICAgLCBtX2hhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4oaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbikKLSAgICAsIG1faXNJblJlZ2lv
blJ1bGUoaW5SZWdpb25SdWxlKQorICAgICwgbV9oYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKGFk
ZFJ1bGVGbGFncyAmIFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luKQorICAgICwgbV9pc0lu
UmVnaW9uUnVsZShhZGRSdWxlRmxhZ3MgJiBSdWxlSXNJblJlZ2lvblJ1bGUpCiB7CiAgICAgQVNT
RVJUKG1fcG9zaXRpb24gPT0gcG9zaXRpb24pOwogICAgIEFTU0VSVChtX3NlbGVjdG9ySW5kZXgg
PT0gc2VsZWN0b3JJbmRleCk7CkBAIC0yMDcsOSArMjA3LDE0IEBAIHZvaWQgUnVsZVNldDo6YWRk
VG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwgY29uc3Qg
UnVsZURhCiAgICAgcnVsZXMtPmFwcGVuZChydWxlRGF0YSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6
YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIGJvb2wgaGFz
RG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9v
bCBpblJlZ2lvblJ1bGUpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoU3R5bGVSdWxlKiBydWxlLCB1
bnNpZ25lZCBzZWxlY3RvckluZGV4LCBBZGRSdWxlRmxhZ3MgYWRkUnVsZUZsYWdzKQogewotICAg
IFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIG1fcnVsZUNvdW50KyssIGhh
c0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBpblJlZ2lv
blJ1bGUpOworICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIG1fcnVs
ZUNvdW50KyssIGFkZFJ1bGVGbGFncyk7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGF0aG9z
dFJ1bGVTcGVjaWZpY2l0eSA9IDB4MTAwMDAwOworCisgICAgaWYgKGFkZFJ1bGVGbGFncyAmIFJ1
bGVJc0hvc3RSdWxlKQorICAgICAgICBydWxlRGF0YS5pbmNyZWFzZVNwZWNpZmljaXR5KGF0aG9z
dFJ1bGVTcGVjaWZpY2l0eSk7CisKICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tUnVsZURhdGEobV9m
ZWF0dXJlcywgcnVsZURhdGEpOwogCiAgICAgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gcnVsZURh
dGEuc2VsZWN0b3IoKTsKQEAgLTI2NCwxMCArMjY5LDEyIEBAIHZvaWQgUnVsZVNldDo6YWRkUmVn
aW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qIHJlZ2lvblJ1bGUsIGJvb2wgaGFzRG9jdW1lbnRTZWN1
cml0CiAKICAgICAvLyBDb2xsZWN0IHRoZSByZWdpb24gcnVsZXMgaW50byBhIHJ1bGUgc2V0CiAg
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzID0gcmVn
aW9uUnVsZS0+Y2hpbGRSdWxlcygpOworICAgIEFkZFJ1bGVGbGFncyBhZGRSdWxlRmxhZ3MgPSBo
YXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luID8gUnVsZUhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4g
OiBSdWxlSGFzTm9TcGVjaWFsU3RhdGU7CisgICAgYWRkUnVsZUZsYWdzID0gc3RhdGljX2Nhc3Q8
QWRkUnVsZUZsYWdzPihhZGRSdWxlRmxhZ3MgfCBSdWxlQ2FuVXNlRmFzdENoZWNrU2VsZWN0b3Ig
fCBSdWxlSXNJblJlZ2lvblJ1bGUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGls
ZFJ1bGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFN0eWxlUnVsZUJhc2UqIHJlZ2lvblN0eWxp
bmdSdWxlID0gY2hpbGRSdWxlc1tpXS5nZXQoKTsKICAgICAgICAgaWYgKHJlZ2lvblN0eWxpbmdS
dWxlLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgcmVnaW9uUnVsZVNldC0+YWRkU3R5bGVS
dWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJlZ2lvblN0eWxpbmdSdWxlKSwgaGFzRG9jdW1l
bnRTZWN1cml0eU9yaWdpbiwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICByZWdpb25SdWxlU2V0
LT5hZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocmVnaW9uU3R5bGluZ1J1bGUp
LCBhZGRSdWxlRmxhZ3MpOwogICAgIH0KICAgICAvLyBVcGRhdGUgdGhlICJnbG9iYWwiIHJ1bGUg
Y291bnQgc28gdGhhdCBwcm9wZXIgb3JkZXIgaXMgbWFpbnRhaW5lZAogICAgIG1fcnVsZUNvdW50
ID0gcmVnaW9uUnVsZVNldC0+bV9ydWxlQ291bnQ7CkBAIC0yODYsNiArMjkzLDcgQEAgdm9pZCBS
dWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25z
dCBNZWRpYVF1ZXJ5RXZhbHUKICAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydFJ1
bGUtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCByZXNvbHZlciwgc2NvcGUpOwogICAgIH0KICAgICBi
b29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPSByZXNvbHZlciAmJiByZXNvbHZlci0+ZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChzaGVldC0+YmFzZVVSTCgpKTsK
KyAgICBBZGRSdWxlRmxhZ3MgYWRkUnVsZUZsYWdzID0gc3RhdGljX2Nhc3Q8QWRkUnVsZUZsYWdz
PigoaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA/IFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3Jp
Z2luIDogMCkgfCAoIXNjb3BlID8gUnVsZUNhblVzZUZhc3RDaGVja1NlbGVjdG9yIDogMCkpOwog
CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBydWxlcyA9IHNoZWV0
LT5jaGlsZFJ1bGVzKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGVzLnNpemUo
KTsgKytpKSB7CkBAIC0yOTMsNyArMzAxLDcgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21T
aGVldChTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHUKIAog
ICAgICAgICBBU1NFUlQoIXJ1bGUtPmlzSW1wb3J0UnVsZSgpKTsKICAgICAgICAgaWYgKHJ1bGUt
PmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5
bGVSdWxlKj4ocnVsZSksIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sICFzY29wZSk7CisgICAg
ICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4ocnVsZSksIGFkZFJ1
bGVGbGFncyk7CiAgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzUGFnZVJ1bGUoKSkKICAgICAgICAg
ICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0PFN0eWxlUnVsZVBhZ2UqPihydWxlKSk7CiAgICAg
ICAgIGVsc2UgaWYgKHJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsKQEAgLTMwNSw3ICszMTMsNyBAQCB2
b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQs
IGNvbnN0IE1lZGlhUXVlcnlFdmFsdQogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGogPCBjaGlsZFJ1bGVzLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0
eWxlUnVsZUJhc2UqIGNoaWxkUnVsZSA9IGNoaWxkUnVsZXNbal0uZ2V0KCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChjaGlsZFJ1bGUtPmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlKj4oY2hpbGRSdWxlKSwg
aGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgIXNjb3BlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihjaGlsZFJ1bGUpLCBhZGRS
dWxlRmxhZ3MpOwogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZFJ1bGUtPmlzUGFn
ZVJ1bGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHN0YXRpY19jYXN0
PFN0eWxlUnVsZVBhZ2UqPihjaGlsZFJ1bGUpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoY2hpbGRSdWxlLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHJlc29sdmVyKSB7CkBAIC0zNDcsMTUg
KzM1NSwxOSBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250
ZW50cyogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdQogICAgICAgICAgICAgYWRkUmVnaW9u
UnVsZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVSZWdpb24qPihydWxlKSwgaGFzRG9jdW1lbnRTZWN1
cml0eU9yaWdpbik7CiAgICAgICAgIH0KICNlbmRpZgorI2lmIEVOQUJMRShTSEFET1dfRE9NKQor
ICAgICAgICBlbHNlIGlmIChydWxlLT5pc0hvc3RSdWxlKCkpCisgICAgICAgICAgICByZXNvbHZl
ci0+YWRkSG9zdFJ1bGUoc3RhdGljX2Nhc3Q8U3R5bGVSdWxlSG9zdCo+KHJ1bGUpLCBoYXNEb2N1
bWVudFNlY3VyaXR5T3JpZ2luLCBzY29wZSk7CisjZW5kaWYKICAgICB9CiAgICAgaWYgKG1fYXV0
b1Nocmlua1RvRml0RW5hYmxlZCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBS
dWxlU2V0OjphZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiBydWxlLCBib29sIGhhc0RvY3VtZW50U2Vj
dXJpdHlPcmlnaW4sIGJvb2wgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGJvb2wgaXNJblJlZ2lv
blJ1bGUpCit2b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIEFkZFJ1
bGVGbGFncyBhZGRSdWxlRmxhZ3MpCiB7CiAgICAgZm9yIChzaXplX3Qgc2VsZWN0b3JJbmRleCA9
IDA7IHNlbGVjdG9ySW5kZXggIT0gbm90Rm91bmQ7IHNlbGVjdG9ySW5kZXggPSBydWxlLT5zZWxl
Y3Rvckxpc3QoKS5pbmRleE9mTmV4dFNlbGVjdG9yQWZ0ZXIoc2VsZWN0b3JJbmRleCkpCi0gICAg
ICAgIGFkZFJ1bGUocnVsZSwgc2VsZWN0b3JJbmRleCwgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
biwgY2FuVXNlRmFzdENoZWNrU2VsZWN0b3IsIGlzSW5SZWdpb25SdWxlKTsKKyAgICAgICAgYWRk
UnVsZShydWxlLCBzZWxlY3RvckluZGV4LCBhZGRSdWxlRmxhZ3MpOwogfQogCiBzdGF0aWMgaW5s
aW5lIHZvaWQgc2hyaW5rTWFwVmVjdG9yc1RvRml0KFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBtYXAp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL1J1bGVTZXQuaAppbmRleCA2NTc3MjM4YmE5MjM2YTlkNjgxMDM5MTk1YTBkZDQzYTJl
ODA4MmEwLi5hMmZiZWNiYzAwYjJjYTFiNTMyZjQ5NmE5NWMwOTM1MDI2ZmE0ZjdkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9SdWxlU2V0LmgKQEAgLTMxLDYgKzMxLDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
ZW51bSBBZGRSdWxlRmxhZ3MgeworICAgIFJ1bGVIYXNOb1NwZWNpYWxTdGF0ZSAgICAgICAgID0g
MCwKKyAgICBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiA9IDEsCisgICAgUnVsZUNhblVz
ZUZhc3RDaGVja1NlbGVjdG9yICAgPSAxIDw8IDEsCisgICAgUnVsZUlzSW5SZWdpb25SdWxlICAg
ICAgICAgICAgPSAxIDw8IDIsCisgICAgUnVsZUlzSG9zdFJ1bGUgICAgICAgICAgICAgICAgPSAx
IDw8IDMsCit9OworCiBjbGFzcyBDU1NTZWxlY3RvcjsKIGNsYXNzIENvbnRhaW5lck5vZGU7CiBj
bGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOwpAQCAtNDAsNyArNDgsNyBAQCBjbGFzcyBTdHlsZVNo
ZWV0Q29udGVudHM7CiAKIGNsYXNzIFJ1bGVEYXRhIHsKIHB1YmxpYzoKLSAgICBSdWxlRGF0YShT
dHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4LCB1bnNpZ25lZCBwb3NpdGlvbiwgYm9v
bCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9y
LCBib29sIGluUmVnaW9uUnVsZSk7CisgICAgUnVsZURhdGEoU3R5bGVSdWxlKiwgdW5zaWduZWQg
c2VsZWN0b3JJbmRleCwgdW5zaWduZWQgcG9zaXRpb24sIEFkZFJ1bGVGbGFncyk7CiAKICAgICB1
bnNpZ25lZCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KICAgICBTdHls
ZVJ1bGUqIHJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3J1bGU7IH0KQEAgLTU1LDYgKzYzLDcgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2xp
bmtNYXRjaFR5cGU7IH0KICAgICBib29sIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4oKSBjb25z
dCB7IHJldHVybiBtX2hhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW47IH0KICAgICBib29sIGlzSW5S
ZWdpb25SdWxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUmVnaW9uUnVsZTsgfQorICAgIHZvaWQg
aW5jcmVhc2VTcGVjaWZpY2l0eSh1bnNpZ25lZCB2YWx1ZSkgeyBtX3NwZWNpZmljaXR5ICs9IHZh
bHVlOyB9CiAKICAgICAvLyBUcnkgdG8gYmFsYW5jZSBiZXR3ZWVuIG1lbW9yeSB1c2FnZSAodGhl
cmUgY2FuIGJlIGxvdHMgb2YgUnVsZURhdGEgb2JqZWN0cykgYW5kIGdvb2QgZmlsdGVyaW5nIHBl
cmZvcm1hbmNlLgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhpbXVtSWRlbnRpZmllckNv
dW50ID0gNDsKQEAgLTk4LDggKzEwNyw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkUnVsZXNG
cm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYs
IFN0eWxlUmVzb2x2ZXIqID0gMCwgY29uc3QgQ29udGFpbmVyTm9kZSogPSAwKTsKIAotICAgIHZv
aWQgYWRkU3R5bGVSdWxlKFN0eWxlUnVsZSosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
biwgYm9vbCBjYW5Vc2VGYXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZh
bHNlKTsKLSAgICB2b2lkIGFkZFJ1bGUoU3R5bGVSdWxlKiwgdW5zaWduZWQgc2VsZWN0b3JJbmRl
eCwgYm9vbCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1Nl
bGVjdG9yLCBib29sIGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOworICAgIHZvaWQgYWRkU3R5bGVS
dWxlKFN0eWxlUnVsZSosIEFkZFJ1bGVGbGFncyk7CisgICAgdm9pZCBhZGRSdWxlKFN0eWxlUnVs
ZSosIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIEFkZFJ1bGVGbGFncyk7CiAgICAgdm9pZCBhZGRQ
YWdlUnVsZShTdHlsZVJ1bGVQYWdlKik7CiAgICAgdm9pZCBhZGRUb1J1bGVTZXQoQXRvbWljU3Ry
aW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYsIGNvbnN0IFJ1bGVEYXRhJik7CiAgICAgdm9pZCBh
ZGRSZWdpb25SdWxlKFN0eWxlUnVsZVJlZ2lvbiosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggZTA4MjUyNTU3ZGE4
ZDFkZDU5NWY3YzMxNTRkYzYxYTE2NmUyOTUxNy4uYjhjZGU1ZDIyMTUyN2RmMzA4ZDM5ZmYwNDJh
MzkyODI4YjIzYzM3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMTE3
LDcgKzExNyw2IEBACiAjaW5jbHVkZSAiU3R5bGVQZW5kaW5nSW1hZ2UuaCIKICNpbmNsdWRlICJT
dHlsZVJ1bGUuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQuaCIKLSNpbmNsdWRlICJTdHls
ZVNjb3BlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNs
dWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAgLTM3Myw3ICszNzIs
NyBAQCBzdGF0aWMgUGFzc093blB0cjxSdWxlU2V0PiBtYWtlUnVsZVNldChjb25zdCBWZWN0b3I8
UnVsZUZlYXR1cmU+JiBydWxlcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgT3duUHRy
PFJ1bGVTZXQ+IHJ1bGVTZXQgPSBSdWxlU2V0OjpjcmVhdGUoKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxlc1tpXS5y
dWxlLCBydWxlc1tpXS5zZWxlY3RvckluZGV4LCBydWxlc1tpXS5oYXNEb2N1bWVudFNlY3VyaXR5
T3JpZ2luLCBmYWxzZSk7CisgICAgICAgIHJ1bGVTZXQtPmFkZFJ1bGUocnVsZXNbaV0ucnVsZSwg
cnVsZXNbaV0uc2VsZWN0b3JJbmRleCwgcnVsZXNbaV0uaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdp
biA/IFJ1bGVIYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luIDogUnVsZUhhc05vU3BlY2lhbFN0YXRl
KTsKICAgICBydWxlU2V0LT5zaHJpbmtUb0ZpdCgpOwogICAgIHJldHVybiBydWxlU2V0LnJlbGVh
c2UoKTsKIH0KQEAgLTQxMiwxMiArNDExLDEyIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5k
QXV0aG9yU3R5bGVTaGVldHModW5zaWduZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQCiAg
ICAgICAgIGlmIChjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCkgJiYgIW1fbWVkaXVtLT5ldmFsKGNz
c1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSwgdGhpcykpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCA9IGNzc1NoZWV0LT5jb250ZW50cygpOwor
I2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFET1dfRE9NKQogICAgICAgICBp
ZiAoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUgPSBTdHlsZVNjb3BlUmVzb2x2ZXI6OnNjb3Bl
Rm9yKGNzc1NoZWV0KSkgewotICAgICAgICAgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCi0gICAg
ICAgICAgICAgICAgbV9zY29wZVJlc29sdmVyID0gYWRvcHRQdHIobmV3IFN0eWxlU2NvcGVSZXNv
bHZlcigpKTsKLSAgICAgICAgICAgIG1fc2NvcGVSZXNvbHZlci0+ZW5zdXJlUnVsZVNldEZvcihz
Y29wZSktPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsK
KyAgICAgICAgICAgIGVuc3VyZVNjb3BlUmVzb2x2ZXIoKS0+ZW5zdXJlUnVsZVNldEZvcihzY29w
ZSktPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CisjZW5kaWYKIAogICAgICAgICBtX2F1dGhv
clN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICAg
ICAgaWYgKCFtX3N0eWxlUnVsZVRvQ1NTT01XcmFwcGVyTWFwLmlzRW1wdHkoKSkKQEAgLTcxMSw3
ICs3MTAsMTIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hTY29wZWRB
dXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQog
ewogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFET1dfRE9NKQotICAgIGlm
ICghbV9zY29wZVJlc29sdmVyIHx8ICFtX3Njb3BlUmVzb2x2ZXItPmhhc1Njb3BlZFN0eWxlcygp
KQorICAgIGlmICghbV9zY29wZVJlc29sdmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXRj
aEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKworICAgIGlmICghbV9zY29w
ZVJlc29sdmVyLT5oYXNTY29wZWRTdHlsZXMoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
TWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcyBieSB0cmF2ZXJzaW5nIHRoZSBzY29wZWQgZWxlbWVu
dCBzdGFjayAocmVidWlsZCBpdCBpZiBpdCBnb3QgaW5jb25zaXN0ZW50KS4KQEAgLTc0Myw2ICs3
NDcsMzUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNo
UmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHQKICNlbmRpZgogfQogCitpbmxpbmUgYm9v
bCBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkK
K3sKKyNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKKyAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYm
IG1fc2NvcGVSZXNvbHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyht
X2VsZW1lbnQpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBT
dHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKQoreworI2lmIEVOQUJMRShTSEFET1dfRE9NKQorICAgIEFTU0VSVCht
X3Njb3BlUmVzb2x2ZXIpOworCisgICAgVmVjdG9yPFJ1bGVTZXQqPiBtYXRjaGVkUnVsZXM7Cisg
ICAgbV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhtX2VsZW1lbnQsIG1hdGNoZWRSdWxl
cyk7CisgICAgaWYgKG1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIE1hdGNoT3B0aW9ucyBvcHRpb25zKGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBvcHRpb25z
LnNjb3BlID0gbV9lbGVtZW50OworICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGNoZWRSdWxlcy5z
aXplKCk7IGkgPiAwOyAtLWkpCisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKG1hdGNoZWRS
dWxlcy5hdChpLTEpLCByZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgcmVzdWx0LnJhbmdl
cy5sYXN0QXV0aG9yUnVsZSwgb3B0aW9ucyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShyZXN1
bHQpOworICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlRW1wdHlSdWxlcyk7CisjZW5kaWYKK30KKwog
dm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQs
IGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsK
QEAgLTEzMzMsNiArMTM2Niw5IEBAIFJlbmRlclN0eWxlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVT
aGFyZWRTdHlsZSgpCiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5
LgogICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChtX3VuY29tbW9u
QXR0cmlidXRlUnVsZVNldC5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOworICAgIC8vIENhbid0
IHNoYXJlIGlmIEBob3N0IEAtcnVsZXMgYXBwbHkuCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRp
ZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gVHJhY2tp
bmcgY2hpbGQgaW5kZXggcmVxdWlyZXMgdW5pcXVlIHN0eWxlIGZvciBlYWNoIG5vZGUuIFRoaXMg
bWF5IGdldCBzZXQgYnkgdGhlIHNpYmxpbmcgcnVsZSBtYXRjaCBhYm92ZS4KICAgICBpZiAocGFy
ZW50U3R5bGVQcmV2ZW50c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybiAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggNzI0YWQ2NjUxZjI5NzQ2YjdjZGJm
MTIzYTYyZDc3MzdhMWQ4M2Q2Ny4uMDBmMGFkZGU2ZTE2NmI1ZTIwYjg4N2IzZjhkN2MwZDUyMGE3
Mjc2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0yOSw4ICsyOSwxMCBAQAog
I2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2lu
Y2x1ZGUgIlJ1bGVGZWF0dXJlLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVk
RGF0YS5oIgorI2luY2x1ZGUgIlN0eWxlU2NvcGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CkBAIC04MCw2ICs4Miw3IEBAIGNsYXNzIFN0eWxlS2V5ZnJhbWU7CiBjbGFzcyBTdHlsZVBl
bmRpbmdJbWFnZTsKIGNsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CiBjbGFzcyBTdHlsZVJ1bGU7Citj
bGFzcyBTdHlsZVJ1bGVIb3N0OwogY2xhc3MgU3R5bGVSdWxlS2V5ZnJhbWVzOwogY2xhc3MgU3R5
bGVSdWxlUGFnZTsKIGNsYXNzIFN0eWxlUnVsZVJlZ2lvbjsKQEAgLTEzNyw2ICsxNDAsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBwb3BQYXJlbnRFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIHB1
c2hQYXJlbnRTaGFkb3dSb290KGNvbnN0IFNoYWRvd1Jvb3QqKTsKICAgICB2b2lkIHBvcFBhcmVu
dFNoYWRvd1Jvb3QoY29uc3QgU2hhZG93Um9vdCopOworI2lmIEVOQUJMRShTSEFET1dfRE9NKQor
ICAgIHZvaWQgYWRkSG9zdFJ1bGUoU3R5bGVSdWxlSG9zdCogcnVsZSwgYm9vbCBoYXNEb2N1bWVu
dFNlY3VyaXR5T3JpZ2luLCBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZSkgeyBlbnN1cmVTY29w
ZVJlc29sdmVyKCktPmFkZEhvc3RSdWxlKHJ1bGUsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4s
IHNjb3BlKTsgfQorI2VuZGlmCiAKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZv
ckVsZW1lbnQoRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFN0eWxlU2hh
cmluZ0JlaGF2aW9yID0gQWxsb3dTdHlsZVNoYXJpbmcsCiAgICAgICAgIFJ1bGVNYXRjaGluZ0Jl
aGF2aW9yID0gTWF0Y2hBbGxSdWxlcywgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0g
MCk7CkBAIC0xNjYsMTEgKzE3MiwzMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRBdXRob3JT
dHlsZVNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHls
ZVNoZWV0PiA+Jik7CiAKIHByaXZhdGU6CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5B
QkxFKFNIQURPV19ET00pCisgICAgU3R5bGVTY29wZVJlc29sdmVyKiBlbnN1cmVTY29wZVJlc29s
dmVyKCkKKyAgICB7CisjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkKKyNpZiBFTkFCTEUoU0hBRE9X
X0RPTSkKKyAgICAgICAgQVNTRVJUKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYWRvd0RPTUVu
YWJsZWQoKSB8fCBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzdHlsZVNjb3BlZEVuYWJsZWQoKSk7
CisjZWxzZQorICAgICAgICBBU1NFUlQoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c3R5bGVTY29w
ZWRFbmFibGVkKCkpOworI2VuZGlmCisjZWxzZQorICAgICAgICBBU1NFUlQoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhZG93RE9NRW5hYmxlZCgpKTsKKyNlbmRpZgorICAgICAgICBpZiAoIW1f
c2NvcGVSZXNvbHZlcikKKyAgICAgICAgICAgIG1fc2NvcGVSZXNvbHZlciA9IGFkb3B0UHRyKG5l
dyBTdHlsZVNjb3BlUmVzb2x2ZXIoKSk7CisgICAgICAgIHJldHVybiBtX3Njb3BlUmVzb2x2ZXIu
Z2V0KCk7CisgICAgfQorI2VuZGlmCisKICAgICB2b2lkIGluaXRGb3JTdHlsZVJlc29sdmUoRWxl
bWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIFBzZXVkb0lkID0gTk9QU0VVRE8p
OwogICAgIHZvaWQgaW5pdEVsZW1lbnQoRWxlbWVudCopOwogICAgIHZvaWQgY29sbGVjdEZlYXR1
cmVzKCk7CiAgICAgUmVuZGVyU3R5bGUqIGxvY2F0ZVNoYXJlZFN0eWxlKCk7CiAgICAgYm9vbCBz
dHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChSdWxlU2V0Kik7CisgICAgYm9vbCBz
dHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCk7CiAgICAgTm9kZSogbG9jYXRl
Q291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUNvdW50KSBj
b25zdDsKICAgICBTdHlsZWRFbGVtZW50KiBmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyhOb2Rl
KiwgdW5zaWduZWQmIGNvdW50KSBjb25zdDsKICAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoRWxl
bWVudChTdHlsZWRFbGVtZW50KikgY29uc3Q7CkBAIC0zMjQsNiArMzQ5LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKICAgICB2b2lkIG1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVz
dWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhN
YXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIHZvaWQgY29sbGVjdE1h
dGNoaW5nUnVsZXMoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJ
bmRleCwgY29uc3QgTWF0Y2hPcHRpb25zJik7CiAgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxl
c0ZvclJlZ2lvbihSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUlu
ZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKICAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50
JiBsYXN0UnVsZUluZGV4LCBjb25zdCBNYXRjaE9wdGlvbnMmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVs
ZS5jcHAKaW5kZXggNzNiMGFmMjZjZTQyYWE0NTk0ZDliNzYxNzk2YjE5ZDZhNmJiNjY1Yy4uNjdm
N2JjNzI4MjcwMmQ1YWVjOGEzNDBkZTY2YTVlZWEzMmQwZmQxOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UnVsZS5jcHAKQEAgLTc5LDYgKzc5LDkgQEAgdm9pZCBTdHlsZVJ1bGVCYXNlOjpyZXBvcnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIGNh
c2UgS2V5ZnJhbWVzOgogICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVLZXlmcmFt
ZXMqPih0aGlzKS0+cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8p
OwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBIb3N0OgorICAgICAgICBzdGF0aWNfY2FzdDxj
b25zdCBTdHlsZVJ1bGVCbG9jayo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2Uo
bWVtb3J5T2JqZWN0SW5mbyk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFVua25vd246CiAg
ICAgY2FzZSBDaGFyc2V0OgogICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xMTcsNiArMTIwLDkgQEAg
dm9pZCBTdHlsZVJ1bGVCYXNlOjpkZXN0cm95KCkKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAg
ICAgZGVsZXRlIHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHRoaXMpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBIb3N0OgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U3R5
bGVSdWxlSG9zdCo+KHRoaXMpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBVbmtub3duOgog
ICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpAQCAtMTUwLDYgKzE1Niw4IEBA
IFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gU3R5bGVSdWxlQmFzZTo6Y29weSgpIGNvbnN0CiAg
ICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgS2V5ZnJhbWVzOgogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgU3R5bGVSdWxlS2V5ZnJhbWVzKj4odGhpcyktPmNvcHkoKTsKKyAgICBj
YXNlIEhvc3Q6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVIb3N0
Kj4odGhpcyktPmNvcHkoKTsKICAgICBjYXNlIFVua25vd246CiAgICAgY2FzZSBDaGFyc2V0Ogog
ICAgIGNhc2UgS2V5ZnJhbWU6CkBAIC0xOTEsNiArMTk5LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxl
PiBTdHlsZVJ1bGVCYXNlOjpjcmVhdGVDU1NPTVdyYXBwZXIoQ1NTU3R5bGVTaGVldCogcGFyZW50
U2hlZXQKICAgICBjYXNlIEtleWZyYW1lczoKICAgICAgICAgcnVsZSA9IFdlYktpdENTU0tleWZy
YW1lc1J1bGU6OmNyZWF0ZShzdGF0aWNfY2FzdDxTdHlsZVJ1bGVLZXlmcmFtZXMqPihzZWxmKSwg
cGFyZW50U2hlZXQpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEhvc3Q6CiAgICAgY2FzZSBV
bmtub3duOgogICAgIGNhc2UgQ2hhcnNldDoKICAgICBjYXNlIEtleWZyYW1lOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUnVsZS5oCmluZGV4IGUxNWYzMmU0MDJhYWYyMDhkM2NjMGZjY2QzNTg0NzdiMjMwMzU2MzQu
LmI3ZmY1MjMyNmNiZjIxODQ3MjFhMTM0MWM4MjlhMzg0ZmM0YTM5YjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSdWxlLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogICAgICAgICBQYWdlLAogICAgICAg
ICBLZXlmcmFtZXMsCiAgICAgICAgIEtleWZyYW1lLCAvLyBOb3QgdXNlZC4gVGhlc2UgYXJlIGlu
dGVybmFsbHkgbm9uLXJ1bGUgU3R5bGVLZXlmcmFtZSBvYmplY3RzLgorICAgICAgICBIb3N0LAog
ICAgICAgICBSZWdpb24gPSAxNgogICAgIH07CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8VHlwZT4obV90eXBlKTsgfQpAQCAtNTgsNiArNTksNyBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc1N0eWxlUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBTdHlsZTsg
fQogICAgIGJvb2wgaXNSZWdpb25SdWxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFJlZ2lv
bjsgfQogICAgIGJvb2wgaXNJbXBvcnRSdWxlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IElt
cG9ydDsgfQorICAgIGJvb2wgaXNIb3N0UnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBI
b3N0OyB9CiAKICAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IGNvcHkoKSBjb25zdDsKIApA
QCAtMjIzLDYgKzIyNSwyMCBAQCBwcml2YXRlOgogICAgIENTU1NlbGVjdG9yTGlzdCBtX3NlbGVj
dG9yTGlzdDsKIH07CiAKK2NsYXNzIFN0eWxlUnVsZUhvc3QgOiBwdWJsaWMgU3R5bGVSdWxlQmxv
Y2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlUnVsZUhvc3Q+IGNyZWF0
ZShWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZUhvc3QoYWRvcHRSdWxlcykpOworICAg
IH0KKworICAgIFBhc3NSZWZQdHI8U3R5bGVSdWxlSG9zdD4gY29weSgpIGNvbnN0IHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTdHlsZVJ1bGVIb3N0KCp0aGlzKSk7IH0KKworcHJpdmF0ZToKKyAgICBT
dHlsZVJ1bGVIb3N0KFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcykg
OiBTdHlsZVJ1bGVCbG9jayhIb3N0LCBhZG9wdFJ1bGVzKSB7IH0KKyAgICBTdHlsZVJ1bGVIb3N0
KGNvbnN0IFN0eWxlUnVsZUhvc3QmIG8pIDogU3R5bGVSdWxlQmxvY2sobykgeyB9Cit9OworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBTdHlsZVJ1bGVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcAppbmRleCA4NzQwMmJhYTU5ODEwMjRlZTVk
NjQ0NjVhZDE3OGRjY2I3OWRlYThhLi41ZmYyYjNlMGIxMTU0OTk0NDdlMjFjODZmNThmNjQ2MTMw
MWNmMGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmNwcApAQCAt
MjksOCArMjksMTAgQEAKIAogI2lmIEVOQUJMRShTVFlMRV9TQ09QRUQpIHx8IEVOQUJMRShTSEFE
T1dfRE9NKQogCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVT
aGVldC5oIgogI2luY2x1ZGUgIkNvbnRleHRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIkVsZW1lbnRT
aGFkb3cuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiUnVsZUZlYXR1cmUuaCIKQEAgLTE1NCwxMSArMTU2LDkxIEBAIHZv
aWQgU3R5bGVTY29wZVJlc29sdmVyOjpjb2xsZWN0RmVhdHVyZXNUbyhSdWxlRmVhdHVyZVNldCYg
ZmVhdHVyZXMpCiAgICAgICAgIGZlYXR1cmVzLmFkZChpdC0+dmFsdWUtPmZlYXR1cmVzKCkpOwog
fQogCitpbmxpbmUgUnVsZVNldCogU3R5bGVTY29wZVJlc29sdmVyOjplbnN1cmVBdEhvc3RSdWxl
U2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QpCit7CisgICAgU2NvcGVkUnVsZVNl
dE1hcDo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1fYXRIb3N0UnVsZXMuYWRkKHNoYWRvd1Jvb3Qs
IG51bGxwdHIpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOworICAgIHJldHVybiBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorCitpbmxpbmUgUnVsZVNldCogU3R5bGVT
Y29wZVJlc29sdmVyOjphdEhvc3RSdWxlU2V0Rm9yKGNvbnN0IFNoYWRvd1Jvb3QqIHNoYWRvd1Jv
b3QpIGNvbnN0Cit7CisgICAgU2NvcGVkUnVsZVNldE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2F0SG9zdFJ1bGVzLmZpbmQoc2hhZG93Um9vdCk7CisgICAgcmV0dXJuIGl0ICE9IG1fYXRIb3N0
UnVsZXMuZW5kKCkgPyBpdC0+dmFsdWUuZ2V0KCkgOiAwOworfQorCit2b2lkIFN0eWxlU2NvcGVS
ZXNvbHZlcjo6YWRkSG9zdFJ1bGUoU3R5bGVSdWxlSG9zdCogaG9zdFJ1bGUsIGJvb2wgaGFzRG9j
dW1lbnRTZWN1cml0eU9yaWdpbiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit7CisgICAg
aWYgKCFzY29wZSB8fCAhc2NvcGUtPmlzSW5TaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzY29wZS0+c2hhZG93Um9vdCgpOworICAg
IGlmICghc2hhZG93Um9vdCB8fCAhc2hhZG93Um9vdC0+aG9zdCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBSdWxlU2V0KiBydWxlID0gZW5zdXJlQXRIb3N0UnVsZVNldEZvcihzaGFkb3dSb290
KTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgY2hpbGRSdWxl
cyA9IGhvc3RSdWxlLT5jaGlsZFJ1bGVzKCk7CisgICAgQWRkUnVsZUZsYWdzIGFkZFJ1bGVGbGFn
cyA9IGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4gPyBSdWxlSGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiA6IFJ1bGVIYXNOb1NwZWNpYWxTdGF0ZTsKKyAgICBhZGRSdWxlRmxhZ3MgPSBzdGF0aWNf
Y2FzdDxBZGRSdWxlRmxhZ3M+KGFkZFJ1bGVGbGFncyB8IFJ1bGVDYW5Vc2VGYXN0Q2hlY2tTZWxl
Y3RvciB8IFJ1bGVJc0hvc3RSdWxlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hp
bGRSdWxlcy5zaXplKCk7ICsraSkgeworICAgICAgICBTdHlsZVJ1bGVCYXNlKiBob3N0U3R5bGlu
Z1J1bGUgPSBjaGlsZFJ1bGVzW2ldLmdldCgpOworICAgICAgICBpZiAoaG9zdFN0eWxpbmdSdWxl
LT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgcnVsZS0+YWRkU3R5bGVSdWxlKHN0YXRpY19j
YXN0PFN0eWxlUnVsZSo+KGhvc3RTdHlsaW5nUnVsZSksIGFkZFJ1bGVGbGFncyk7CisgICAgfQor
fQorCitib29sIFN0eWxlU2NvcGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hl
c0hvc3RSdWxlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50KQoreworICAgIGlmIChtX2F0SG9zdFJ1
bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRWxlbWVudFNoYWRv
dyogc2hhZG93ID0gZWxlbWVudC0+c2hhZG93KCk7CisgICAgaWYgKCFzaGFkb3cpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FKDk5ODI3KTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5ODI3CisgICAgLy8gYWRkIGEgbmV3IGZsYWcgdG8gRWxl
bWVudFNoYWRvdyBhbmQgY2FjaGUgd2hldGhlciBhbnlAaG9zdCBALXJ1bGVzIGFyZQorICAgIC8v
IGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQgb3Igbm90LiBTbyB3ZSBjYW4gYXZvaWQgYWx3YXlzIHRy
YXZlcnNpbmcKKyAgICAvLyBzaGFkb3cgcm9vdHMuCisgICAgZm9yIChTaGFkb3dSb290KiBzaGFk
b3dSb290ID0gc2hhZG93LT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hhZG93Um9vdDsgc2hhZG93
Um9vdCA9IHNoYWRvd1Jvb3QtPm9sZGVyU2hhZG93Um9vdCgpKSB7CisgICAgICAgIGlmIChhdEhv
c3RSdWxlU2V0Rm9yKHNoYWRvd1Jvb3QpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNTaGFkb3dJbnNlcnRpb25Qb2ludCgpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTdHlsZVNj
b3BlUmVzb2x2ZXI6Om1hdGNoSG9zdFJ1bGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIFZlY3Rv
cjxSdWxlU2V0Kj4mIG1hdGNoZWRSdWxlcykKK3sKKyAgICBpZiAobV9hdEhvc3RSdWxlcy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEVsZW1lbnRTaGFkb3cqIHNoYWRvdyA9IGVs
ZW1lbnQtPnNoYWRvdygpOworICAgIGlmICghc2hhZG93KQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBGSVhNRSg5OTgyNyk6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05OTgyNworICAgIC8vIGFkZCBhIG5ldyBmbGFnIHRvIEVsZW1lbnRTaGFkb3cgYW5kIGNhY2hl
IHdoZXRoZXIgYW55IEBob3N0IEAtcnVsZXMgYXJlCisgICAgLy8gYXBwbGllZCB0byB0aGUgZWxl
bWVudCBvciBub3QuIFNvIHdlIGNhbiBxdWlja2x5IGV4aXQgdGhpcyBtZXRob2QKKyAgICAvLyBi
eSB1c2luZyB0aGUgZmxhZy4KKyAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBzaGFk
b3ctPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3dSb290OyBzaGFkb3dSb290ID0gc2hhZG93
Um9vdC0+b2xkZXJTaGFkb3dSb290KCkpIHsgCisgICAgICAgIGlmIChSdWxlU2V0KiBydWxlU2V0
ID0gYXRIb3N0UnVsZVNldEZvcihzaGFkb3dSb290KSkKKyAgICAgICAgICAgIG1hdGNoZWRSdWxl
cy5hcHBlbmQocnVsZVNldCk7CisgICAgICAgIGlmICghc2hhZG93Um9vdC0+aGFzU2hhZG93SW5z
ZXJ0aW9uUG9pbnQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogdm9pZCBTdHls
ZVNjb3BlUmVzb2x2ZXI6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2Jq
ZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwogICAgIGluZm8uYWRkTWVt
YmVyKG1fYXV0aG9yU3R5bGVzKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3N0YWNrKTsKKyAgICBp
bmZvLmFkZE1lbWJlcihtX2F0SG9zdFJ1bGVzKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlU2NvcGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlU2NvcGVSZXNvbHZlci5oCmluZGV4IDVhMzJkZmU3OWY4MzViYjdjZjk1YjhjN2RkOWIzYmI3
MDQxZmI3ZmIuLjg1YzFkMDEwMDZhZDZjYzZmNDg5MDExNTA1MDljYzM0OGIyZDZiMTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNjb3BlUmVzb2x2ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVTY29wZVJlc29sdmVyLmgKQEAgLTM3LDggKzM3LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIENTU1N0eWxl
U2hlZXQ7CitjbGFzcyBFbGVtZW50OwogY2xhc3MgUnVsZVNldDsKIGNsYXNzIFJ1bGVGZWF0dXJl
U2V0OworY2xhc3MgU2hhZG93Um9vdDsKK2NsYXNzIFN0eWxlUnVsZUhvc3Q7CiAKICNpZiBFTkFC
TEUoU1RZTEVfU0NPUEVEKSB8fCBFTkFCTEUoU0hBRE9XX0RPTSkKIApAQCAtNzIsMTIgKzc1LDE4
IEBAIHB1YmxpYzoKICAgICBib29sIG1hdGNoZXNTdHlsZUJvdW5kcyhjb25zdCBTdGFja0ZyYW1l
JiBmcmFtZSkgY29uc3QgeyByZXR1cm4gZnJhbWUubV9hdXRob3JTdHlsZUJvdW5kc0luZGV4ID09
IG1fc3RhY2tQYXJlbnRCb3VuZHNJbmRleDsgfQogICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzVG8o
UnVsZUZlYXR1cmVTZXQmKTsKIAorICAgIHZvaWQgYWRkSG9zdFJ1bGUoU3R5bGVSdWxlSG9zdCos
IGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgY29uc3QgQ29udGFpbmVyTm9kZSogc2Nv
cGUpOworICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhjb25z
dCBFbGVtZW50Kik7CisgICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhjb25zdCBFbGVtZW50KiwgVmVj
dG9yPFJ1bGVTZXQqPiYgbWF0Y2hlZFJ1bGVzKTsKKwogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFJ1bGVTZXQqIHJ1
bGVTZXRGb3IoY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpIGNvbnN0OwogICAgIHZvaWQgc2V0
dXBTdGFjayhjb25zdCBDb250YWluZXJOb2RlKik7CiAgICAgYm9vbCBzdGFja0lzQ29uc2lzdGVu
dChjb25zdCBDb250YWluZXJOb2RlKiBwYXJlbnQpIGNvbnN0IHsgcmV0dXJuIHBhcmVudCAmJiBw
YXJlbnQgPT0gbV9zdGFja1BhcmVudDsgfQorICAgIFJ1bGVTZXQqIGVuc3VyZUF0SG9zdFJ1bGVT
ZXRGb3IoY29uc3QgU2hhZG93Um9vdCopOworICAgIFJ1bGVTZXQqIGF0SG9zdFJ1bGVTZXRGb3Io
Y29uc3QgU2hhZG93Um9vdCopIGNvbnN0OwogCiAgICAgU2NvcGVkUnVsZVNldE1hcCBtX2F1dGhv
clN0eWxlczsKIApAQCAtODgsNiArOTcsOCBAQCBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgdXNl
ZCB0byBkZWNpZGUgd2hldGhlciBtX3Njb3BpbmdFbGVtZW50U3RhY2sgaXMgY29uc2lzdGVudCwg
c2VwYXJhdGVseSBmcm9tIFNlbGVjdG9yQ2hlY2tlcjo6bV9wYXJlbnRTdGFjay4KICAgICBjb25z
dCBDb250YWluZXJOb2RlKiBtX3N0YWNrUGFyZW50OwogICAgIGludCBtX3N0YWNrUGFyZW50Qm91
bmRzSW5kZXg7CisKKyAgICBTY29wZWRSdWxlU2V0TWFwIG1fYXRIb3N0UnVsZXM7CiB9OwogCiBp
bmxpbmUgYm9vbCBTdHlsZVNjb3BlUmVzb2x2ZXI6OmVuc3VyZVN0YWNrQ29uc2lzdGVuY3koQ29u
dGFpbmVyTm9kZSogcGFyZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2hlZXRDb250ZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRz
LmNwcAppbmRleCBlN2NlODFlYWFiNDg3MTg2MjRmNGViNTUyMzhlNWMxYWYzNTY4NWI4Li4zOWU5
YTdiMmNkNmMyMTkzYmIwNDk4MGZhODhhODI3MjFlNGEyM2RlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVTaGVldENvbnRlbnRzLmNwcApAQCAtNDM1LDYgKzQzNSwxMCBAQCBzdGF0aWMgYm9v
bCBjaGlsZFJ1bGVzSGF2ZUZhaWxlZE9yQ2FuY2VsZWRTdWJyZXNvdXJjZXMoY29uc3QgVmVjdG9y
PFJlZlB0cjxTdHlsZQogICAgICAgICAgICAgaWYgKGNoaWxkUnVsZXNIYXZlRmFpbGVkT3JDYW5j
ZWxlZFN1YnJlc291cmNlcyhzdGF0aWNfY2FzdDxjb25zdCBTdHlsZVJ1bGVSZWdpb24qPihydWxl
KS0+Y2hpbGRSdWxlcygpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0eWxlUnVsZUJhc2U6Okhvc3Q6CisgICAgICAgICAg
ICBpZiAoY2hpbGRSdWxlc0hhdmVGYWlsZWRPckNhbmNlbGVkU3VicmVzb3VyY2VzKHN0YXRpY19j
YXN0PGNvbnN0IFN0eWxlUnVsZUhvc3QqPihydWxlKS0+Y2hpbGRSdWxlcygpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0
eWxlUnVsZUJhc2U6OkltcG9ydDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICBjYXNlIFN0eWxlUnVsZUJhc2U6OlBhZ2U6CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzBlYmY5N2EyMzYyZGE0
NjQzNGI3Mzc1ZjcxYzMxYjcyZmI2OTI5Mi4uMWNmOTM1NmE0MzliYzdlYWEwMzVjZjE5YjRlMGRm
MzVjMTkxMzMyYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEwLTEyICBUYWthc2hpIFNh
a2Ftb3RvICA8dGFzYWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBbU2hhZG93IERPTV0gTmVlZHMg
QGhvc3QgcnVsZSBmb3IgU2hhZG93RE9NIHN0eWxpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSGFq
aW1lIE1vcml0YS4KKworICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRy
dWxlcy5odG1sOiBBZGRlZC4KKwogMjAxMi0xMC0yNSAgTmljbyBXZWJlciAgPHRoYWtpc0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBBZGQgZXhwZWN0YXRpb25zIGZvciBmYXN0
L2ltYWdlcy9leGlmLW9yaWVudGF0aW9uLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZG9tL3NoYWRvdy9hdGhvc3QtYXRydWxlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEx
ZjNiMWMyNTUxNjk1Njc4NzI1YmQ2NjUxODEzMTM0Mzg2NDlhMTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVsZXMtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTUgQEAKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0OiByZ2IoMjU1LCAw
LCAwKQoraG9zdEE6IHJnYigyNTUsIDAsIDApCitob3N0QjogcmdiKDAsIDAsIDI1NSkKK2hvc3Q6
IHJnYigwLCAwLCAyNTUpCitob3N0OiByZ2IoMTI4LCAxMjgsIDEyOCkKK2hvc3Q6IHJnYigwLCAw
LCAyNTUpCitob3N0OiByZ2IoMCwgMCwgMjU1KQoraG9zdDogcmdiKDEyOCwgMTI4LCAxMjgpCito
b3N0OiByZ2IoMjU1LCAyNTUsIDApCitob3N0OiByZ2IoMjU1LCAwLCAwKQorbmVzdGVkSG9zdDog
cmdiKDAsIDAsIDI1NSkKK2hvc3Q6IHJnYigyNTUsIDAsIDApCitob3N0OiByZ2IoMjU1LCAyNTUs
IDApCitIZWxsbwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9z
dC1hdHJ1bGVzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zaGFkb3cvYXRob3N0LWF0cnVs
ZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43ZDRiNTExZWUwMmZhOWQ3NTFlNTdlMTY5YjAwYTZkODc3ZDUz
YTZkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2hhZG93L2F0aG9z
dC1hdHJ1bGVzLmh0bWwKQEAgLTAsMCArMSwxOTAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzdHlsZT4KKyNob3N0IHsKKyAgY29sb3I6IGdyYXk7Cit9Cis8L3N0eWxlPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3BvbHlmaWxsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+
CitmdW5jdGlvbiBkdW1wQ29tcHV0ZWRTdHlsZShub2RlKQoreworICAgIGRlYnVnKG5vZGUuaWQg
KyAiOiAiICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxs
KS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKK30KKworZnVuY3Rpb24gcHJlcHJvY2Vzc0Zv
clRlc3QoKQoreworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFy
ZW50Iik7CisgICAgcGFyZW50LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJob3N0Ij48c3Bhbj5IZWxs
bzwvc3Bhbj48L2Rpdj4nOworfQorCitmdW5jdGlvbiB0ZXN0U2ltcGxlQ29udGVudENhc2UoKQor
eworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9v
dChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNv
bG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1
dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTaW1wbGVTaGFkb3dDYXNlKCkKK3sK
KyAgICBwcmVwcm9jZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImhvc3QiKTsKKyAgICB2YXIgc2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3Qo
aG9zdCk7CisgICAgc2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xv
cjogcmVkOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBkdW1wQ29tcHV0ZWRT
dHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdEhvc3RXaXRoU2VsZWN0b3IoKQoreworICAg
IHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGFyZW50Iik7CisgICAgcGFy
ZW50LmlubmVySFRNTCA9ICI8c3R5bGUgc2NvcGVkPiAuaG9zdCB7IGNvbG9yOiBncmF5IH07PC9z
dHlsZT4iCisgICAgICAgICsgIjxkaXYgaWQ9J2hvc3RBJyBjbGFzcz0naG9zdCc+PHNwYW4+SGVs
bG88L3NwYW4+PC9kaXY+IgorICAgICAgICArICI8c3BhbiBpZD0naG9zdEInIGNsYXNzPSdob3N0
Jz48c3Bhbj5Xb3JsZDwvc3Bhbj48L3NwYW4+IjsKKworICAgIHZhciBob3N0QSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJob3N0QSIpOworICAgIHZhciBzaGFkb3dBID0gbmV3IFdlYktpdFNo
YWRvd1Jvb3QoaG9zdEEpOworICAgIHZhciBzdHlsZSA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBj
b2xvcjogcmVkOyB9IHNwYW4geyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT4iOworICAgIHNoYWRv
d0EuaW5uZXJIVE1MID0gc3R5bGUgKyAiPHNoYWRvdz48L3NoYWRvdz4iOworCisgICAgdmFyIGhv
c3RCID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvc3RCIik7CisgICAgdmFyIHNoYWRvd0Ig
PSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0Qik7CisgICAgc2hhZG93Qi5pbm5lckhUTUwgPSBz
dHlsZSArICI8c2hhZG93Pjwvc2hhZG93PiI7CisKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0
QSk7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdEIpOworfQorCitmdW5jdGlvbiB0ZXN0UHNl
dWRvSG9zdFdpdGhTY29wZWQoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFy
IGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIHZhciBzaGFkb3cg
PSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFkb3cuaW5uZXJIVE1MID0gIjxk
aXY+PHN0eWxlIHNjb3BlZD5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PHNo
YWRvdz48L3NoYWRvdz48ZGl2PjxzdHlsZSBzY29wZWQ+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1
ZTsgfSB9PC9zdHlsZT48L2Rpdj48L2Rpdj4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3Qp
OworfQorCitmdW5jdGlvbiB0ZXN0UHNldWRvSG9zdFdpdGhGYWxsYmFja1NoYWRvdygpCit7Cisg
ICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dS
b290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290
KGhvc3QpOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2
IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICB5b3Vu
Z2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPGNvbnRlbnQ+PHNoYWRvdz48L3NoYWRvdz48L2NvbnRl
bnQ+IjsKKyAgICBkdW1wQ29tcHV0ZWRTdHlsZShob3N0KTsKK30KKworZnVuY3Rpb24gdGVzdFR3
b1NoYWRvd1Jvb3RzQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRlc3QoKTsKKyAgICB2YXIg
aG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7CisgICAgdmFyIG9sZGVzdFNo
YWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZhciB5b3VuZ2VzdFNoYWRv
dyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIG9sZGVzdFNoYWRvdy5pbm5lckhU
TUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IHJlZDsgfSB9PC9zdHlsZT48Y29udGVu
dD48L2NvbnRlbnQ+IjsKKyAgICB5b3VuZ2VzdFNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBo
b3N0IHsgZGl2IHsgY29sb3I6IGJsdWU7IH0gfTwvc3R5bGU+PHNoYWRvdz48L3NoYWRvdz4iOwor
ICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0VHdvU2hhZG93
Um9vdHNDcmVhdGluZ0RpZmZlcmVudE9yZGVyQ2FzZSgpCit7CisgICAgcHJlcHJvY2Vzc0ZvclRl
c3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0Iik7Cisg
ICAgdmFyIG9sZGVzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHZh
ciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHlvdW5n
ZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsg
fSB9PC9zdHlsZT48c2hhZG93Pjwvc2hhZG93PiI7CisgICAgb2xkZXN0U2hhZG93LmlubmVySFRN
TCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50
PjwvY29udGVudD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlv
biB0ZXN0TXVsdGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvd0NvbnRlbnQoKQoreworICAg
IHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhvc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaG9zdCIpOworICAgIHZhciBvbGRlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9v
dChob3N0KTsKKyAgICB2YXIgb2xkZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0
KTsKKyAgICB2YXIgeW91bmdlclNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOwor
ICAgIHZhciB5b3VuZ2VzdFNoYWRvdyA9IG5ldyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworCisg
ICAgeW91bmdlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICB5
b3VuZ2VyU2hhZG93LmlubmVySFRNTCA9ICI8Y29udGVudD48L2NvbnRlbnQ+IjsKKyAgICBvbGRl
clNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6IGdyZWVuOyB9
IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1M
ID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+
PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9u
IHRlc3RNdWx0aXBsZVNoYWRvd1Jvb3RzV2l0aEluZXJ0U2hhZG93KCkKK3sKKyAgICBwcmVwcm9j
ZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhv
c3QiKTsKKyAgICB2YXIgb2xkZXN0U2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7
CisgICAgdmFyIG9sZGVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QoaG9zdCk7CisgICAg
dmFyIHlvdW5nZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICB2YXIg
eW91bmdlc3RTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKworICAgIHlvdW5n
ZXN0U2hhZG93LmlubmVySFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogeWVsbG93
OyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAgICB5b3VuZ2VyU2hhZG93LmlubmVy
SFRNTCA9ICI8c3R5bGU+QGhvc3QgeyBkaXYgeyBjb2xvcjogYmx1ZTsgfSB9PC9zdHlsZT48ZGl2
PmluZXJ0PC9kaXY+IjsKKyAgICBvbGRlclNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxlPkBob3N0
IHsgZGl2IHsgY29sb3I6IGdyZWVuOyB9IH08L3N0eWxlPjxzaGFkb3c+PC9zaGFkb3c+IjsKKyAg
ICBvbGRlc3RTaGFkb3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiBy
ZWQ7IH0gfTwvc3R5bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5
bGUoaG9zdCk7Cit9CisKK2Z1bmN0aW9uIHRlc3ROZXN0ZWRDYXNlKCkKK3sKKyAgICBwcmVwcm9j
ZXNzRm9yVGVzdCgpOworICAgIHZhciBob3N0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhv
c3QiKTsKKyAgICB2YXIgb3V0ZXJTaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsK
KyAgICBvdXRlclNoYWRvdy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6
IHJlZDsgfSB9PC9zdHlsZT48ZGl2IGlkPSJuZXN0ZWRIb3N0Ij5Jbm5lclNoYWRvdzwvZGl2Pic7
CisgICAgdmFyIG5lc3RlZCA9IG91dGVyU2hhZG93LmdldEVsZW1lbnRCeUlkKCJuZXN0ZWRIb3N0
Iik7CisgICAgdmFyIGlubmVyU2hhZG93ID0gbmV3IFdlYktpdFNoYWRvd1Jvb3QobmVzdGVkKTsK
KyAgICBpbm5lclNoYWRvdy5pbm5lckhUTUwgPSAnPHN0eWxlPkBob3N0IHsgZGl2IHsgY29sb3I6
IGJsdWU7IH0gfTwvc3R5bGU+U2hvdyA8c2hhZG93Pjwvc2hhZG93PiBpbiBvdXRlci4nOworICAg
IGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworICAgIGR1bXBDb21wdXRlZFN0eWxlKG5lc3RlZCk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RIb3N0VnNTY29wZWRTdHlsZSgpCit7CisgICAgcHJlcHJvY2Vz
c0ZvclRlc3QoKTsKKyAgICB2YXIgaG9zdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3N0
Iik7CisgICAgaG9zdC5pbm5lckhUTUwgPSAiPHN0eWxlIHNjb3BlZD4jaG9zdCB7IGNvbG9yOiB5
ZWxsb3c7IH08L3N0eWxlPjxzcGFuPkhlbGxvPC9zcGFuPiI7CisgICAgdmFyIHNoYWRvdyA9IG5l
dyBXZWJLaXRTaGFkb3dSb290KGhvc3QpOworICAgIHNoYWRvdy5pbm5lckhUTUwgPSAiPHN0eWxl
PkBob3N0IHsgI2hvc3QgeyBjb2xvcjogcmVkOyB9IH08L3N0eWxlPjxjb250ZW50PjwvY29udGVu
dD4iOworICAgIGR1bXBDb21wdXRlZFN0eWxlKGhvc3QpOworfQorCitmdW5jdGlvbiB0ZXN0SG9z
dFZzSW5saW5lU3R5bGUoKQoreworICAgIHByZXByb2Nlc3NGb3JUZXN0KCk7CisgICAgdmFyIGhv
c3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG9zdCIpOworICAgIGhvc3Quc3R5bGUuY29s
b3IgPSAieWVsbG93IjsKKyAgICBob3N0LmlubmVySFRNTCA9ICI8c3Bhbj5IZWxsbzwvc3Bhbj4i
OworICAgIHZhciBzaGFkb3cgPSBuZXcgV2ViS2l0U2hhZG93Um9vdChob3N0KTsKKyAgICBzaGFk
b3cuaW5uZXJIVE1MID0gIjxzdHlsZT5AaG9zdCB7IGRpdiB7IGNvbG9yOiByZWQ7IH0gfTwvc3R5
bGU+PGNvbnRlbnQ+PC9jb250ZW50PiI7CisgICAgZHVtcENvbXB1dGVkU3R5bGUoaG9zdCk7Cit9
CisKK2Z1bmN0aW9uIHJ1blRlc3RzKCkKK3sKKyAgICB0ZXN0U2ltcGxlQ29udGVudENhc2UoKTsK
KyAgICB0ZXN0U2ltcGxlU2hhZG93Q2FzZSgpOworICAgIHRlc3RIb3N0V2l0aFNlbGVjdG9yKCk7
CisgICAgdGVzdFBzZXVkb0hvc3RXaXRoU2NvcGVkKCk7CisgICAgdGVzdFBzZXVkb0hvc3RXaXRo
RmFsbGJhY2tTaGFkb3coKTsKKyAgICB0ZXN0VHdvU2hhZG93Um9vdHNDYXNlKCk7CisgICAgdGVz
dFR3b1NoYWRvd1Jvb3RzQ3JlYXRpbmdEaWZmZXJlbnRPcmRlckNhc2UoKTsKKyAgICB0ZXN0TXVs
dGlwbGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvd0NvbnRlbnQoKTsKKyAgICB0ZXN0TXVsdGlw
bGVTaGFkb3dSb290c1dpdGhJbmVydFNoYWRvdygpOworICAgIHRlc3ROZXN0ZWRDYXNlKCk7Cisg
ICAgdGVzdEhvc3RWc1Njb3BlZFN0eWxlKCk7CisgICAgdGVzdEhvc3RWc0lubGluZVN0eWxlKCk7
Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKSI+CisgIDxk
aXYgaWQ9InBhcmVudCI+CisgIDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>