<?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>93455</bug_id>
          
          <creation_ts>2012-08-08 02:18:10 -0700</creation_ts>
          <short_desc>Extract DOM modifications in the HTML5 parser into HTMLParserDOMMutationQueue.</short_desc>
          <delta_ts>2013-09-05 08:33:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>90751</blocked>
    
    <blocked>93608</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kwang Yul Seo">skyul</reporter>
          <assigned_to name="Kwang Yul Seo">skyul</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>690076</commentid>
    <comment_count>0</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 02:18:10 -0700</bug_when>
    <thetext>This patch extracts DOM modifications in the parser into DOMModifier and makes the tree builder and the element stack use it. DOMModifier can change its behavior dynamically by changing its strategy. The default strategy of DOMModifier is set to ImmediateDOMModifierStrategy which calls DOM operations synchronously.
    
This refactoring is a preparation for speculative parsing. To run the parser in speculation mode, we must be able to queue up DOM modifications. We can do this by adding DeferredDOMModifierStategy which queues up DOM operations and execute them later.
    
Both ImmediateDOMModifierStrategy and DeferredDOMModifierStategy eventually perform the same DOM operations. So I added DOMModifierExecutor which performs the actual DOM operations. DOMModifierStrategy classes should delegate to DOMModifierExecutor to remove code duplication.
    
Changed HTMLDocumentParser to own a DOMModifier instance and pass it to HTMLTreeBuilder, HTMLConstructionSite and HTMLElementStack.
    
This patch is not complete. HTMLConstructionSite still has DOM modifications including element creation. I will move the remaining DOM modifications into DOMModifier in a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690077</commentid>
    <comment_count>1</comment_count>
      <attachid>157160</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 02:21:02 -0700</bug_when>
    <thetext>Created attachment 157160
Patch (not for landing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690086</commentid>
    <comment_count>2</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 02:26:35 -0700</bug_when>
    <thetext>Eric, I&apos;ve implemented the idea we discussed in Bug 93113. Would you take a look at it?

I am a bit worried about the indirection and virtual method overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690091</commentid>
    <comment_count>3</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 02:34:24 -0700</bug_when>
    <thetext>rniwa, I changed the name &apos;detachNode&apos; to &apos;removeFromParent&apos; in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690109</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-08 03:26:13 -0700</bug_when>
    <thetext>Interesting.  Do we know how much of a regression this would be for perf?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690124</commentid>
    <comment_count>5</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 04:02:24 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Interesting.  Do we know how much of a regression this would be for perf?

This patch causes a 0.3% performance regression on the html5-parser benchmark.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690178</commentid>
    <comment_count>6</comment_count>
      <attachid>157188</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 05:13:06 -0700</bug_when>
    <thetext>Created attachment 157188
Patch (not for landing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690179</commentid>
    <comment_count>7</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 05:13:43 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=157188) [details]
&gt; Patch (not for landing)

I added more DOM modifications to DOMModifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690188</commentid>
    <comment_count>8</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 05:26:28 -0700</bug_when>
    <thetext>If this patch looks okay, I will move the rest of DOM modifications to DOMModifier and rebase NodeProxy patch ( https://github.com/kseo/webkit/commit/b9e6009013be65a629dcbebc7e4088c4c44f51e7 ) and speculative parser implementation on top of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690213</commentid>
    <comment_count>9</comment_count>
      <attachid>157188</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-08-08 05:47:27 -0700</bug_when>
    <thetext>Comment on attachment 157188
Patch (not for landing)

Attachment 157188 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13459207</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690220</commentid>
    <comment_count>10</comment_count>
      <attachid>157188</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-08 05:52:59 -0700</bug_when>
    <thetext>Comment on attachment 157188
Patch (not for landing)

Attachment 157188 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13451774</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690230</commentid>
    <comment_count>11</comment_count>
      <attachid>157188</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-08 05:59:57 -0700</bug_when>
    <thetext>Comment on attachment 157188
Patch (not for landing)

Attachment 157188 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13451777</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690236</commentid>
    <comment_count>12</comment_count>
      <attachid>157188</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-08-08 06:09:31 -0700</bug_when>
    <thetext>Comment on attachment 157188
Patch (not for landing)

Attachment 157188 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13453624</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690459</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-08-08 10:17:01 -0700</bug_when>
    <thetext>&quot;Modifier&quot; is not a noun that conveys much meaning. In a sense, half of WebCore code is a &quot;DOM modifier&quot;.

Is there a more specific way to describe the code you&apos;re extracting?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690487</commentid>
    <comment_count>14</comment_count>
      <attachid>157188</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-08 10:38:22 -0700</bug_when>
    <thetext>Comment on attachment 157188
Patch (not for landing)

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

&gt; Source/WebCore/html/parser/DOMModifier.h:42
&gt; +class DOMModifier {

The class name reflect the fact it&apos;s specific to parser.

&gt; Source/WebCore/html/parser/DOMModifierExecutor.h:37
&gt; +class DOMModifierExecutor {

Do we really need this class?

&gt; Source/WebCore/html/parser/DOMModifierStrategy.h:42
&gt; +    virtual void beginParsingChildren(Node*) = 0;
&gt; +    virtual void finishParsingChildren(Node*) = 0;

I am extremely concerned about the implication of all these new virtual function calls.
If there will be only two strategies, it&apos;s probably better to embed if-else in the DOMModifier class itself instead of using polymorphism.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690717</commentid>
    <comment_count>15</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 14:15:58 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &quot;Modifier&quot; is not a noun that conveys much meaning. In a sense, half of WebCore code is a &quot;DOM modifier&quot;.
&gt; 
&gt; Is there a more specific way to describe the code you&apos;re extracting?

It&apos;s a &quot;DOM modifier&quot; specific to the HTML parser. After this patch, the rest of the HTML parser never (and must not) modifies the DOM. Why don&apos;t we call it HTMLParserDOMModifier? Does it sound better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690720</commentid>
    <comment_count>16</comment_count>
      <attachid>157188</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-08 14:17:47 -0700</bug_when>
    <thetext>Comment on attachment 157188
Patch (not for landing)

I don&apos;t think we should be adding this many indirections and classes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690752</commentid>
    <comment_count>17</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 14:35:43 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 157188 [details])
&gt; I don&apos;t think we should be adding this many indirections and classes.

Another option is to remove ImmediateDOMModifierStrategy and DOMModifierExecutor and embed DOMModifierExecutor as the default behavior in DOMModifier.

void DOMModifier::beginParsingChildren(Node* node)
{
    ASSERT(node);
    if (!m_strategy) {
        node-&gt;beginParsingChildren();
        return;
    }

    m_strategy-&gt;beginParsingChildren(node);
}

Now we have only one additional NULL check in non-speculative parsing code paths. This also reduces the number of classes involved in this indirection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690763</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-08 14:43:38 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (From update of attachment 157188 [details] [details])
&gt; &gt; I don&apos;t think we should be adding this many indirections and classes.
&gt; 
&gt; Another option is to remove ImmediateDOMModifierStrategy and DOMModifierExecutor and embed DOMModifierExecutor as the default behavior in DOMModifier.
&gt; 
&gt; void DOMModifier::beginParsingChildren(Node* node)
&gt; {
&gt;     ASSERT(node);
&gt;     if (!m_strategy) {
&gt;         node-&gt;beginParsingChildren();
&gt;         return;
&gt;     }
&gt; 
&gt;     m_strategy-&gt;beginParsingChildren(node);
&gt; }
&gt; 
&gt; Now we have only one additional NULL check in non-speculative parsing code paths. This also reduces the number of classes involved in this indirection.

Why do we need this DOMModifier/Strategy classes at all? can&apos;t we just put the contents of each beginParsingChildren implementation right there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690795</commentid>
    <comment_count>19</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 15:05:57 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Why do we need this DOMModifier/Strategy classes at all? can&apos;t we just put the contents of each beginParsingChildren implementation right there?

eseidel and I discussed this issue on https://bugs.webkit.org/show_bug.cgi?id=93113.

DOMModifier is an abstraction to handle queueing of DOM operations (and cross-thread DOM mutation later) so that the parser can continue parsing speculatively while waiting for the parser blocking script to be loaded. If the speculation ends up succeeding, we perform the queued DOM operations at once. Otherwise, we throw them away.

I admit DOMModifierStrategy might be an overkill here. I can certainly put the queueing of DOM operations directly in DOMModifier class.

Let&apos;s listen to eseidel&apos;s opinion on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690900</commentid>
    <comment_count>20</comment_count>
      <attachid>157329</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 16:31:06 -0700</bug_when>
    <thetext>Created attachment 157329
Patch (not for landing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690906</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-08 16:36:26 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; DOMModifier is an abstraction to handle queueing of DOM operations (and cross-thread DOM mutation later) so that the parser can continue parsing speculatively while waiting for the parser blocking script to be loaded. If the speculation ends up succeeding, we perform the queued DOM operations at once. Otherwise, we throw them away.

HTMLParserDOMMutationQueue?  Anyhow, I would much prefer seeing code like:

if (m_inSpeculativeParsing) {
   ~~
} else {
   ~~
}

over

m_strategy-&gt;X() where we have two X()&apos;s.

The latter pattern is nice if we&apos;re going to have more than few cases and we want it to be extensible but it appears that we only have two code paths in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690929</commentid>
    <comment_count>22</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 16:51:37 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; HTMLParserDOMMutationQueue?  

It seems a bit weird to me that HTMLParserDOMMutationQueue can synchronously call DOM operations.

&gt; Anyhow, I would much prefer seeing code like:
&gt; 
&gt; if (m_inSpeculativeParsing) {
&gt;    ~~
&gt; } else {
&gt;    ~~
&gt; }
&gt; 
&gt; over
&gt; 
&gt; m_strategy-&gt;X() where we have two X()&apos;s.
&gt; 
&gt; The latter pattern is nice if we&apos;re going to have more than few cases and we want it to be extensible but it appears that we only have two code paths in this case.

That&apos;s exactly what I did in my previous try. At that time, I put DOM modifications into HTMLConstructionSite.

https://github.com/kseo/webkit/commit/cee9b035c7c14e73739467067fa96291d58e8082

e.g.,

void scheduleBeginParsingChildren(NodeProxy* node)
{
    if (m_isSpeculating)
        m_taskQueue.append(bind(&amp;HTMLConstructionSite::beginParsingChildrenTask, this, PassRefPtr&lt;NodeProxy&gt;(node)));
    else
        beginParsingChildrenTask(node);
}


The reason why I chose the latter pattern in this patch is to keep the speculative parsing code in a separate class. I thought the performance penalty caused by virtual method calls is acceptable in speculation code paths. 

However, I agree to your point. m_strategy-&gt;X() pattern is an overkill if there are only one or two strategies. I will see if I can do this better, or I will follow your suggestion!

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690934</commentid>
    <comment_count>23</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 16:53:58 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Created an attachment (id=157329) [details]
&gt; Patch (not for landing)

Changes over the previous patch:

- Changed the name DOMModifier to HTMLParserDOMModifier because this class is specific to the HTML parser.

- Removed ImmediateDOMModifierStrategy. Now HTMLParserDOMModifier synchronously calls DOM operations if no HTMLParserDOMModifierStrategy is provided. This removes virtual method calls in non-speculative parsing.

- Kept HTMLParserDOMModifierExecutor. Otherwise, DeferredDOMModifierStategy (which will be added later) can&apos;t reuse the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690951</commentid>
    <comment_count>24</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-08 16:59:57 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; HTMLParserDOMMutationQueue?  
&gt; 
&gt; It seems a bit weird to me that HTMLParserDOMMutationQueue can synchronously call DOM operations.

Why not? We have this pattern elsewhere in the WebKit. e.g. ScopedEventQueue.

I also dislike the use of the term &quot;modifier&quot; here. &quot;DOMModifier&quot; doesn&apos;t tell us anything about the nature or the purpose of the class. All we know is that it mutates DOM, as Alexey pointed out, is what a vast majority of WebCore classes do.

What we&apos;re trying to do here is to queue up possible DOM mutations when we&apos;re in the speculative parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690960</commentid>
    <comment_count>25</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-08-08 17:04:33 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; void scheduleBeginParsingChildren(NodeProxy* node)
&gt; {
&gt;     if (m_isSpeculating)
&gt;         m_taskQueue.append(bind(&amp;HTMLConstructionSite::beginParsingChildrenTask, this, PassRefPtr&lt;NodeProxy&gt;(node)));
&gt;     else
&gt;         beginParsingChildrenTask(node);
&gt; }

This code is much clearer than the one we have in your patch here.

&gt; The reason why I chose the latter pattern in this patch is to keep the speculative parsing code in a separate class. I thought the performance penalty caused by virtual method calls is acceptable in speculation code paths. 

It&apos;s not about virtual function calls. It&apos;s about the clarity. By adding extra two years of classes, we&apos;re obscuring what the code does. Imagine you don&apos;t know anything about HTML parser and trying to decipher what&apos;s happening that code. After your patch, we have to go through 3 layers of classes to figure out what it does.

Worse yet, just looking at the DOMModififer class is not sufficient to figure out what will happen because the actual implementation is hidden behind m_strategy. Now we have to find all subclasses of the strategy class and when and how they&apos;re associated with DOMModifier. That&apos;s A LOT more work than if we had a single boolean indicating whether we&apos;re in the speculative parsing or not. In that case, the intent of this class and what it does is self-evidently clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690975</commentid>
    <comment_count>26</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 17:14:25 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Why not? We have this pattern elsewhere in the WebKit. e.g. ScopedEventQueue.

I didn&apos;t know that. If this naming pattern is common in WebKit, I think HTMLParserDOMMutationQueue is okay!

&gt; I also dislike the use of the term &quot;modifier&quot; here. &quot;DOMModifier&quot; doesn&apos;t tell us anything about the nature or the purpose of the class. All we know is that it mutates DOM, as Alexey pointed out, is what a vast majority of WebCore classes do.

My intention was to collect all DOM modifications into one class. Then, we can dynamically add or remove a strategy which queues DOM mutations. DOMModifier simply modifies the DOM, while DeferredDOMModifierStrategy queues up DOM mutations. But if we combine these classes into one as you suggested, then the name should be HTMLParserDOMMutationQueue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>690980</commentid>
    <comment_count>27</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-08 17:17:14 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; It&apos;s not about virtual function calls. It&apos;s about the clarity. By adding extra two years of classes, we&apos;re obscuring what the code does. Imagine you don&apos;t know anything about HTML parser and trying to decipher what&apos;s happening that code. After your patch, we have to go through 3 layers of classes to figure out what it does.
&gt; 
&gt; Worse yet, just looking at the DOMModififer class is not sufficient to figure out what will happen because the actual implementation is hidden behind m_strategy. Now we have to find all subclasses of the strategy class and when and how they&apos;re associated with DOMModifier. That&apos;s A LOT more work than if we had a single boolean indicating whether we&apos;re in the speculative parsing or not. In that case, the intent of this class and what it does is self-evidently clear.

I see! I will follow your suggestion and combine these classes into HTMLParserDOMMutationQueue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691401</commentid>
    <comment_count>28</comment_count>
      <attachid>157441</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-09 05:18:01 -0700</bug_when>
    <thetext>Created attachment 157441
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691585</commentid>
    <comment_count>29</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-09 10:50:17 -0700</bug_when>
    <thetext>Sorry for not commenting earlier.  @skyul: I thought we were going to evaluate the speculative parser on a branch before landing more parser changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691590</commentid>
    <comment_count>30</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-09 10:51:56 -0700</bug_when>
    <thetext>I see that you&apos;ve already answered my question in https://bugs.webkit.org/show_bug.cgi?id=90751#c10</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691975</commentid>
    <comment_count>31</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2012-08-09 16:28:30 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Sorry for not commenting earlier.  @skyul: I thought we were going to evaluate the speculative parser on a branch before landing more parser changes.

(In reply to comment #30)
&gt; I see that you&apos;ve already answered my question in https://bugs.webkit.org/show_bug.cgi?id=90751#c10

Yeah, please take a look at these preparation patches. I won&apos;t land them until we  decide to land the whole speculative parser. I should&apos;ve turned off r+ flag in this case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847458</commentid>
    <comment_count>32</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-05 02:02:50 -0800</bug_when>
    <thetext>We took a different approach with the threaded parser work.  I think this is now WONTFIX/dupe of bug  106127.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925049</commentid>
    <comment_count>33</comment_count>
      <attachid>157441</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2013-09-05 08:33:14 -0700</bug_when>
    <thetext>Comment on attachment 157441
Patch

The work on this bug has ceased, removing the r? flag on the patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157160</attachid>
            <date>2012-08-08 02:21:02 -0700</date>
            <delta_ts>2012-08-08 05:13:01 -0700</delta_ts>
            <desc>Patch (not for landing)</desc>
            <filename>bug-93455-20120808182031.patch</filename>
            <type>text/plain</type>
            <size>32830</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTg0NGNlOThiY2JlMzQ2
YTEwM2VkZmZkY2ZlMjZmNDg0NmFmODJlNi4uN2Y4MGFhYzRjMDVjZTEwZDc4OTUzZWQ0Y2Q5MWY5
NDgwY2YxNzgxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk3IEBACisyMDEyLTA4LTA4ICBLd2Fu
ZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgRXh0cmFjdCBET00g
bW9kaWZpY2F0aW9ucyBpbiB0aGUgSFRNTDUgcGFyc2VyIGludG8gRE9NTW9kaWZpZXIuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzQ1NQorCisgICAg
ICAgIFRoaXMgcGF0Y2ggZXh0cmFjdHMgRE9NIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHBhcnNlciBp
bnRvIERPTU1vZGlmaWVyCisgICAgICAgIGFuZCBtYWtlcyB0aGUgdHJlZSBidWlsZGVyIGFuZCB0
aGUgZWxlbWVudCBzdGFjayB1c2UgaXQuIERPTU1vZGlmaWVyIGNhbgorICAgICAgICBjaGFuZ2Ug
aXRzIGJlaGF2aW9yIGR5bmFtaWNhbGx5IGJ5IGNoYW5naW5nIGl0cyBzdHJhdGVneS4gVGhlIGRl
ZmF1bHQKKyAgICAgICAgc3RyYXRlZ3kgb2YgRE9NTW9kaWZpZXIgaXMgc2V0IHRvIEltbWVkaWF0
ZURPTU1vZGlmaWVyU3RyYXRlZ3kgd2hpY2ggY2FsbHMKKyAgICAgICAgRE9NIG9wZXJhdGlvbnMg
c3luY2hyb25vdXNseS4KKworICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIGlzIGEgcHJlcGFyYXRp
b24gZm9yIHNwZWN1bGF0aXZlIHBhcnNpbmcuIFRvIHJ1biB0aGUKKyAgICAgICAgcGFyc2VyIGlu
IHNwZWN1bGF0aW9uIG1vZGUsIHdlIG11c3QgYmUgYWJsZSB0byBxdWV1ZSB1cCBET00gbW9kaWZp
Y2F0aW9ucy4KKyAgICAgICAgV2UgY2FuIGRvIHRoaXMgYnkgYWRkaW5nIERlZmVycmVkRE9NTW9k
aWZpZXJTdGF0ZWd5IHdoaWNoIHF1ZXVlcyB1cCBET00KKyAgICAgICAgb3BlcmF0aW9ucyBhbmQg
ZXhlY3V0ZXMgdGhlbSBsYXRlci4KKworICAgICAgICBCb3RoIEltbWVkaWF0ZURPTU1vZGlmaWVy
U3RyYXRlZ3kgYW5kIERlZmVycmVkRE9NTW9kaWZpZXJTdGF0ZWd5IGV2ZW50dWFsbHkKKyAgICAg
ICAgcGVyZm9ybSB0aGUgc2FtZSBET00gb3BlcmF0aW9ucy4gU28gSSBhZGRlZCBET01Nb2RpZmll
ckV4ZWN1dG9yIHdoaWNoIHBlcmZvcm1zCisgICAgICAgIHRoZSBhY3R1YWwgRE9NIG9wZXJhdGlv
bnMuIERPTU1vZGlmaWVyU3RyYXRlZ3kgY2xhc3NlcyBzaG91bGQgZGVsZWdhdGUgdG8KKyAgICAg
ICAgRE9NTW9kaWZpZXJFeGVjdXRvciB0byByZW1vdmUgY29kZSBkdXBsaWNhdGlvbi4KKworICAg
ICAgICBDaGFuZ2VkIEhUTUxEb2N1bWVudFBhcnNlciB0byBvd24gYSBET01Nb2RpZmllciBpbnN0
YW5jZSBhbmQgcGFzcyBpdAorICAgICAgICB0byBIVE1MVHJlZUJ1aWxkZXIsIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlIGFuZCBIVE1MRWxlbWVudFN0YWNrLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMg
bm90IGNvbXBsZXRlLiBIVE1MQ29uc3RydWN0aW9uU2l0ZSBzdGlsbCBoYXMgRE9NIG1vZGlmaWNh
dGlvbnMKKyAgICAgICAgaW5jbHVkaW5nIGVsZW1lbnQgY3JlYXRpb24uIEkgd2lsbCBtb3ZlIHRo
ZSByZW1haW5pbmcgRE9NIG1vZGlmaWNhdGlvbnMgaW50bworICAgICAgICBET01Nb2RpZmllciBp
biBhIGZvbGxvdy11cCBwYXRjaC4KKworICAgICAgICBObyBuZXcgdGVzdHM7IHJlZmFjdG9yaW5n
IG9ubHkuCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9ET01Nb2RpZmllci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRE9NTW9kaWZpZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NTW9kaWZpZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01Nb2RpZmllcjo6
c2V0U3RyYXRlZ3kpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTW9kaWZpZXI6OmJlZ2luUGFyc2lu
Z0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1vZGlmaWVyOjpmaW5pc2hQYXJzaW5n
Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9NTW9kaWZpZXI6OmFkZENoaWxkQW5kQXR0
YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1vZGlmaWVyOjpyZW1vdmVGcm9tUGFyZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTU1vZGlmaWVyOjptb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpET01Nb2RpZmllcjo6cmVtb3ZlQWxsQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NTW9kaWZpZXI6OnNldEF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpET01Nb2RpZmllcjo6RE9NTW9kaWZpZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0RPTU1vZGlmaWVyRXhlY3V0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKERPTU1vZGlmaWVyRXhlY3V0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTW9kaWZpZXJF
eGVjdXRvcjo6RE9NTW9kaWZpZXJFeGVjdXRvcik6CisgICAgICAgIChXZWJDb3JlOjpET01Nb2Rp
ZmllckV4ZWN1dG9yOjpiZWdpblBhcnNpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpE
T01Nb2RpZmllckV4ZWN1dG9yOjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NTW9kaWZpZXJFeGVjdXRvcjo6YWRkQ2hpbGRBbmRBdHRhY2gpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NTW9kaWZpZXJFeGVjdXRvcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpET01Nb2RpZmllckV4ZWN1dG9yOjptb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpET01Nb2RpZmllckV4ZWN1dG9yOjpyZW1vdmVBbGxDaGls
ZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpET01Nb2RpZmllckV4ZWN1dG9yOjpzZXRBdHRyaWJ1
dGUpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0RPTU1vZGlmaWVyU3RyYXRlZ3kuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKERPTU1vZGlmaWVyU3RyYXRlZ3kpOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZSk6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaDoKKyAgICAgICAgKEhUTUxD
b25zdHJ1Y3Rpb25TaXRlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJz
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50UGFyc2VyOjpIVE1MRG9jdW1l
bnRQYXJzZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6
OmRvbU1vZGlmaWVyKToKKyAgICAgICAgKEhUTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgICog
aHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RWxlbWVudFN0YWNrOjpIVE1MRWxlbWVudFN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxF
bGVtZW50U3RhY2s6OnBvcEFsbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNr
OjppbnNlcnRBYm92ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwb3BD
b21tb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cmVtb3ZlTm9uVG9w
Q29tbW9uKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhUTUxFbGVtZW50U3RhY2spOgorICAgICAgICAqIGh0
bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJl
ZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0lt
bWVkaWF0ZURPTU1vZGlmaWVyU3RyYXRlZ3kuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEltbWVkaWF0ZURPTU1vZGlmaWVyU3RyYXRlZ3kpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1tZWRpYXRlRE9NTW9kaWZpZXJTdHJhdGVneTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltbWVkaWF0ZURPTU1vZGlmaWVyU3RyYXRlZ3k6OmJlZ2luUGFyc2luZ0NoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OkltbWVkaWF0ZURPTU1vZGlmaWVyU3RyYXRlZ3k6OmZpbmlzaFBh
cnNpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpJbW1lZGlhdGVET01Nb2RpZmllclN0
cmF0ZWd5OjphZGRDaGlsZEFuZEF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpJbW1lZGlhdGVE
T01Nb2RpZmllclN0cmF0ZWd5OjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkltbWVkaWF0ZURPTU1vZGlmaWVyU3RyYXRlZ3k6Om1vdmVBbGxDaGlsZHJlblRvTmV3UGFyZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkltbWVkaWF0ZURPTU1vZGlmaWVyU3RyYXRlZ3k6OnJlbW92
ZUFsbENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkltbWVkaWF0ZURPTU1vZGlmaWVyU3Ry
YXRlZ3k6OnNldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbW1lZGlhdGVET01Nb2Rp
ZmllclN0cmF0ZWd5OjpJbW1lZGlhdGVET01Nb2RpZmllclN0cmF0ZWd5KToKKwogMjAxMi0wOC0w
NiAgRGF2aWQgUmV2ZW1hbiAgPHJldmVtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJv
bWl1bV0gUmVmYWN0b3IgQ0NUZXh0dXJlVXBkYXRlciBpbnRvIENDVGV4dHVyZVVwZGF0ZXIgYW5k
IENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9ET01Nb2RpZmllci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvRE9N
TW9kaWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMTEyMWRiOTcyMWNlNzQ5YTM4NTg0NjcxNGY0MTQ5MjVj
YzkzNmVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvRE9N
TW9kaWZpZXIuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBD
b21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERPTU1vZGlmaWVyX2gKKyNkZWZp
bmUgRE9NTW9kaWZpZXJfaAorCisjaW5jbHVkZSAiSW1tZWRpYXRlRE9NTW9kaWZpZXJTdHJhdGVn
eS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIENvbnRhaW5lck5vZGU7CitjbGFzcyBET01Nb2RpZmllclN0cmF0ZWd5OworY2xhc3Mg
RWxlbWVudDsKK2NsYXNzIE5vZGU7CisKK2NsYXNzIERPTU1vZGlmaWVyIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShET01Nb2RpZmllcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RE9NTW9kaWZpZXI+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UHRyKG5ldyBET01Nb2RpZmllcigpKTsgfQorCisgICAgdm9pZCBzZXRTdHJh
dGVneShQYXNzT3duUHRyPERPTU1vZGlmaWVyU3RyYXRlZ3k+IHN0cmF0ZWd5KQorICAgIHsKKyAg
ICAgICAgbV9zdHJhdGVneSA9IHN0cmF0ZWd5OworICAgIH0KKworICAgIHZvaWQgYmVnaW5QYXJz
aW5nQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChub2RlKTsKKyAg
ICAgICAgbV9zdHJhdGVneS0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4obm9kZSk7CisgICAgfQorCisg
ICAgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChub2RlKTsKKyAgICAgICAgbV9zdHJhdGVneS0+ZmluaXNoUGFyc2luZ0NoaWxkcmVu
KG5vZGUpOworICAgIH0KKworICAgIHZvaWQgYWRkQ2hpbGRBbmRBdHRhY2goQ29udGFpbmVyTm9k
ZSogcGFyZW50LCBOb2RlKiBjaGlsZCwgYm9vbCBsYXp5QXR0YWNoID0gdHJ1ZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChwYXJlbnQpOworICAgICAgICBBU1NFUlQoY2hpbGQpOworICAgICAgICBt
X3N0cmF0ZWd5LT5hZGRDaGlsZEFuZEF0dGFjaChwYXJlbnQsIGNoaWxkLCBsYXp5QXR0YWNoKTsK
KyAgICB9CisKKyAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoTm9kZSogbm9kZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgbV9zdHJhdGVneS0+cmVtb3ZlRnJvbVBhcmVu
dChub2RlKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmVBbGxDaGlsZHJlblRvTmV3UGFyZW50KENv
bnRhaW5lck5vZGUqIG5ld1BhcmVudCwgQ29udGFpbmVyTm9kZSogb2xkUGFyZW50KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG5ld1BhcmVudCk7CisgICAgICAgIEFTU0VSVChvbGRQYXJlbnQpOwor
ICAgICAgICBtX3N0cmF0ZWd5LT5tb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVudChuZXdQYXJlbnQs
IG9sZFBhcmVudCk7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVBbGxDaGlsZHJlbihDb250YWlu
ZXJOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUpOworICAgICAgICBtX3N0
cmF0ZWd5LT5yZW1vdmVBbGxDaGlsZHJlbihub2RlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEF0
dHJpYnV0ZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUs
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoZWxlbWVu
dCk7CisgICAgICAgIG1fc3RyYXRlZ3ktPnNldEF0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGUs
IHZhbHVlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRE9NTW9kaWZpZXIoKSA6IG1fc3RyYXRl
Z3koSW1tZWRpYXRlRE9NTW9kaWZpZXJTdHJhdGVneTo6Y3JlYXRlKCkpIHsgfQorCisgICAgT3du
UHRyPERPTU1vZGlmaWVyU3RyYXRlZ3k+IG1fc3RyYXRlZ3k7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBET01Nb2RpZmllcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9ET01Nb2RpZmllckV4ZWN1dG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9ET01Nb2RpZmllckV4ZWN1dG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjdlOWIyN2E1
NGYwNzg4NjI0MGU1ZDAzM2M1MDIzMWU2Mjc2NTdhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0RPTU1vZGlmaWVyRXhlY3V0b3IuaApAQCAtMCwwICsxLDg0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgRE9NTW9kaWZpZXJFeGVjdXRvcl9oCisjZGVmaW5lIERPTU1vZGlmaWVyRXhl
Y3V0b3JfaAorCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTU1vZGlmaWVyRXhlY3V0b3Ig
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERPTU1vZGlmaWVyRXhlY3V0b3IpOworcHVibGlj
OgorICAgIERPTU1vZGlmaWVyRXhlY3V0b3IoKSB7IH0KKworICAgIHZvaWQgYmVnaW5QYXJzaW5n
Q2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUtPmJlZ2luUGFyc2luZ0No
aWxkcmVuKCk7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oTm9kZSog
bm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUtPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworICAg
IH0KKworICAgIHZvaWQgYWRkQ2hpbGRBbmRBdHRhY2goQ29udGFpbmVyTm9kZSogcGFyZW50LCBO
b2RlKiBjaGlsZCwgYm9vbCBsYXp5QXR0YWNoID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIHBhcmVu
dC0+cGFyc2VyQWRkQ2hpbGQoY2hpbGQpOworICAgICAgICBpZiAocGFyZW50LT5hdHRhY2hlZCgp
ICYmICFjaGlsZC0+YXR0YWNoZWQoKSkgeworICAgICAgICAgICAgaWYgKGxhenlBdHRhY2gpCisg
ICAgICAgICAgICAgICAgY2hpbGQtPmxhenlBdHRhY2goKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBjaGlsZC0+YXR0YWNoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkIHJlbW92ZUZyb21QYXJlbnQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChDb250
YWluZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCkpCisgICAgICAgICAgICBwYXJl
bnQtPnBhcnNlclJlbW92ZUNoaWxkKG5vZGUpOworICAgIH0KKworICAgIHZvaWQgbW92ZUFsbENo
aWxkcmVuVG9OZXdQYXJlbnQoQ29udGFpbmVyTm9kZSogbmV3UGFyZW50LCBDb250YWluZXJOb2Rl
KiBvbGRQYXJlbnQpCisgICAgeworICAgICAgICBuZXdQYXJlbnQtPnRha2VBbGxDaGlsZHJlbkZy
b20ob2xkUGFyZW50KTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZUFsbENoaWxkcmVuKENvbnRh
aW5lck5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBub2RlLT5yZW1vdmVBbGxDaGlsZHJlbigp
OworICAgIH0KKworICAgIHZvaWQgc2V0QXR0cmlidXRlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBET01Nb2RpZmll
ckV4ZWN1dG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0RPTU1v
ZGlmaWVyU3RyYXRlZ3kuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0RPTU1vZGlmaWVy
U3RyYXRlZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTc3Njk2ZTc3ODBiM2YyMTVhOGFhNDQ5YzQ3NzlmZDgz
NjViNDMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvRE9N
TW9kaWZpZXJTdHJhdGVneS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBET01Nb2RpZmllclN0
cmF0ZWd5X2gKKyNkZWZpbmUgRE9NTW9kaWZpZXJTdHJhdGVneV9oCisKKyNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250
YWluZXJOb2RlOworY2xhc3MgRWxlbWVudDsKK2NsYXNzIE5vZGU7CitjbGFzcyBRdWFsaWZpZWRO
YW1lOworCitjbGFzcyBET01Nb2RpZmllclN0cmF0ZWd5IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5QYXJzaW5nQ2hpbGRyZW4oTm9kZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZmluaXNoUGFyc2luZ0NoaWxkcmVuKE5vZGUqKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
Q2hpbGRBbmRBdHRhY2goQ29udGFpbmVyTm9kZSogcGFyZW50LCBOb2RlKiBjaGlsZCwgYm9vbCBs
YXp5QXR0YWNoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoTm9kZSop
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnQoQ29udGFp
bmVyTm9kZSogbmV3UGFyZW50LCBDb250YWluZXJOb2RlKiBvbGRQYXJlbnQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSopID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0QXR0cmlidXRlKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpID0gMDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIERPTU1vZGlmaWVyU3RyYXRlZ3lfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCmlu
ZGV4IGZjOWQ3YzY2NDhhMmM0YTc1NTQ4ZmU5NmZmZTc5Zjc0OWUyYjAyZTYuLjk1MDhmNjYwM2Rl
OGQ5ZWE1ODI0OTYyNWY1NzQ2YTUxMTMxZDg5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpbmNsdWRlICJIVE1MVHJlZUJ1aWxkZXIuaCIKIAogI2luY2x1ZGUgIkNvbW1lbnQuaCIKKyNp
bmNsdWRlICJET01Nb2RpZmllci5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNp
bmNsdWRlICJEb2N1bWVudFR5cGUuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCkBAIC0xMzEsOSAr
MTMyLDExIEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6OmV4ZWN1dGVRdWV1ZWRUYXNrcygp
CiAgICAgLy8gV2UgbWlnaHQgYmUgZGV0YWNoZWQgbm93LgogfQogCi1IVE1MQ29uc3RydWN0aW9u
U2l0ZTo6SFRNTENvbnN0cnVjdGlvblNpdGUoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBt
YXhpbXVtRE9NVHJlZURlcHRoKQorSFRNTENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlKERvY3VtZW50KiBkb2N1bWVudCwgRE9NTW9kaWZpZXIqIGRvbU1vZGlmaWVyLCB1bnNp
Z25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKQogICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAg
ICAsIG1fYXR0YWNobWVudFJvb3QoZG9jdW1lbnQpCisgICAgLCBtX2RvbU1vZGlmaWVyKGRvbU1v
ZGlmaWVyKQorICAgICwgbV9vcGVuRWxlbWVudHMoZG9tTW9kaWZpZXIpCiAgICAgLCBtX2ZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbihBbGxvd1NjcmlwdGluZ0NvbnRlbnQpCiAgICAgLCBtX2lz
UGFyc2luZ0ZyYWdtZW50KGZhbHNlKQogICAgICwgbV9yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFy
ZW50KGZhbHNlKQpAQCAtMTQxLDkgKzE0NCwxMSBAQCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6SFRN
TENvbnN0cnVjdGlvblNpdGUoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBtYXhpbXVtRAog
ewogfQogCi1IVE1MQ29uc3RydWN0aW9uU2l0ZTo6SFRNTENvbnN0cnVjdGlvblNpdGUoRG9jdW1l
bnRGcmFnbWVudCogZnJhZ21lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRp
bmdQZXJtaXNzaW9uLCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKQorSFRNTENvbnN0cnVj
dGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50
LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbiwgRE9NTW9k
aWZpZXIqIGRvbU1vZGlmaWVyLCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKQogICAgIDog
bV9kb2N1bWVudChmcmFnbWVudC0+ZG9jdW1lbnQoKSkKICAgICAsIG1fYXR0YWNobWVudFJvb3Qo
ZnJhZ21lbnQpCisgICAgLCBtX2RvbU1vZGlmaWVyKGRvbU1vZGlmaWVyKQorICAgICwgbV9vcGVu
RWxlbWVudHMoZG9tTW9kaWZpZXIpCiAgICAgLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
bihzY3JpcHRpbmdQZXJtaXNzaW9uKQogICAgICwgbV9pc1BhcnNpbmdGcmFnbWVudCh0cnVlKQog
ICAgICwgbV9yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50KGZhbHNlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmgKaW5kZXggNjA1NzJi
ZGQ4NTYyNzQ0NWNiZDg2NWE5Njc5ZDJmZWJhNWY2YThkYy4uOThiMmVlOGQ5MGM5NmMwMzBiODA3
ZDk2NGQzMGEzZDk3ZDA1ZjRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCkBAIC02NiwxNCArNjYsMTUgQEAgZW51bSBXaGl0ZXNw
YWNlTW9kZSB7CiAKIGNsYXNzIEF0b21pY0hUTUxUb2tlbjsKIGNsYXNzIERvY3VtZW50OworY2xh
c3MgRE9NTW9kaWZpZXI7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgSFRNTEZvcm1FbGVtZW50Owog
CiBjbGFzcyBIVE1MQ29uc3RydWN0aW9uU2l0ZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SFRNTENvbnN0cnVjdGlvblNpdGUpOwogcHVibGljOgotICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
KERvY3VtZW50KiwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCk7Ci0gICAgSFRNTENvbnN0
cnVjdGlvblNpdGUoRG9jdW1lbnRGcmFnbWVudCosIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCk7CisgICAgSFRNTENvbnN0cnVjdGlvblNp
dGUoRG9jdW1lbnQqLCBET01Nb2RpZmllciosIHVuc2lnbmVkIG1heGltdW1ET01UcmVlRGVwdGgp
OworICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlKERvY3VtZW50RnJhZ21lbnQqLCBGcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24sIERPTU1vZGlmaWVyKiwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVE
ZXB0aCk7CiAgICAgfkhUTUxDb25zdHJ1Y3Rpb25TaXRlKCk7CiAKICAgICB2b2lkIGRldGFjaCgp
OwpAQCAtMTY3LDYgKzE2OCw4IEBAIHByaXZhdGU6CiAgICAgLy8gYW5kIGEgRG9jdW1lbnQgaW4g
YWxsIG90aGVyIGNhc2VzLgogICAgIENvbnRhaW5lck5vZGUqIG1fYXR0YWNobWVudFJvb3Q7CiAg
ICAgCisgICAgRE9NTW9kaWZpZXIqIG1fZG9tTW9kaWZpZXI7CisKICAgICBSZWZQdHI8SFRNTFN0
YWNrSXRlbT4gbV9oZWFkOwogICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IG1fZm9ybTsKICAg
ICBtdXRhYmxlIEhUTUxFbGVtZW50U3RhY2sgbV9vcGVuRWxlbWVudHM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCA4ODY0NmU0
ZjU3Y2UyNDkwMjRlOWFlNWRiN2I1NDY3YWFjZWJhYTg4Li45ZWJiNmIxODk1NjdiMWVkYzFkZWI1
ZGY5M2NjMjRmODk5NDFkMzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJIVE1M
RG9jdW1lbnRQYXJzZXIuaCIKIAogI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgor
I2luY2x1ZGUgIkRPTU1vZGlmaWVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgog
I2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAtNzIsNiArNzMsNyBA
QCBzdGF0aWMgSFRNTFRva2VuaXplclN0YXRlOjpTdGF0ZSB0b2tlbml6ZXJTdGF0ZUZvckNvbnRl
eHRFbGVtZW50KEVsZW1lbnQqIGNvbnRleAogCiBIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1
bWVudFBhcnNlcihIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9ycykKICAg
ICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihkb2N1bWVudCkKKyAgICAsIG1fZG9tTW9kaWZp
ZXIoRE9NTW9kaWZpZXI6OmNyZWF0ZSgpKQogICAgICwgbV90b2tlbml6ZXIoSFRNTFRva2VuaXpl
cjo6Y3JlYXRlKHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKGRvY3VtZW50KSkpCiAgICAgLCBtX3Nj
cmlwdFJ1bm5lcihIVE1MU2NyaXB0UnVubmVyOjpjcmVhdGUoZG9jdW1lbnQsIHRoaXMpKQogICAg
ICwgbV90cmVlQnVpbGRlcihIVE1MVHJlZUJ1aWxkZXI6OmNyZWF0ZSh0aGlzLCBkb2N1bWVudCwg
cmVwb3J0RXJyb3JzLCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcyhkb2N1bWVudCksIG1heGltdW1E
T01UcmVlRGVwdGgoZG9jdW1lbnQpKSkKQEAgLTg2LDYgKzg4LDcgQEAgSFRNTERvY3VtZW50UGFy
c2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCByZXBv
cnRFcnJvcnMKIC8vIG1pbmltaXplIGNvZGUgZHVwbGljYXRpb24gYmV0d2VlbiB0aGVzZSBjb25z
dHJ1Y3RvcnMuCiBIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihEb2N1bWVu
dEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQogICAgIDogU2NyaXB0YWJsZURv
Y3VtZW50UGFyc2VyKGZyYWdtZW50LT5kb2N1bWVudCgpKQorICAgICwgbV9kb21Nb2RpZmllcihE
T01Nb2RpZmllcjo6Y3JlYXRlKCkpCiAgICAgLCBtX3Rva2VuaXplcihIVE1MVG9rZW5pemVyOjpj
cmVhdGUodXNlUHJlSFRNTDVQYXJzZXJRdWlya3MoZnJhZ21lbnQtPmRvY3VtZW50KCkpKSkKICAg
ICAsIG1fdHJlZUJ1aWxkZXIoSFRNTFRyZWVCdWlsZGVyOjpjcmVhdGUodGhpcywgZnJhZ21lbnQs
IGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uLCB1c2VQcmVIVE1MNVBhcnNlclF1
aXJrcyhmcmFnbWVudC0+ZG9jdW1lbnQoKSksIG1heGltdW1ET01UcmVlRGVwdGgoZnJhZ21lbnQt
PmRvY3VtZW50KCkpKSkKICAgICAsIG1feHNzQXVkaXRvcih0aGlzKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCA0ZTI2YzU3MjY3Y2Zj
N2M0ZGJlNGZiZDY4NWQ5N2JhNTAyOTAyMTNkLi41MDQ4ODczZjEyMDBlMDczNzdhMjBjZjZiNGEz
NDc5NmNkYmVhMTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
RG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9j
dW1lbnRQYXJzZXIuaApAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIERvY3VtZW50OwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKK2NsYXNzIERPTU1vZGlmaWVy
OwogY2xhc3MgSFRNTERvY3VtZW50OwogY2xhc3MgSFRNTFBhcnNlclNjaGVkdWxlcjsKIGNsYXNz
IEhUTUxUb2tlbml6ZXI7CkBAIC03MCw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9v
bCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcyhEb2N1bWVudCopOwogICAgIHN0YXRpYyB1bnNpZ25l
ZCBtYXhpbXVtRE9NVHJlZURlcHRoKERvY3VtZW50Kik7CiAKKyAgICBET01Nb2RpZmllciogZG9t
TW9kaWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2RvbU1vZGlmaWVyLmdldCgpOyB9CiAgICAgSFRN
TFRva2VuaXplciogdG9rZW5pemVyKCkgY29uc3QgeyByZXR1cm4gbV90b2tlbml6ZXIuZ2V0KCk7
IH0KICAgICBTdHJpbmcgc291cmNlRm9yVG9rZW4oY29uc3QgSFRNTFRva2VuJik7CiAKQEAgLTE0
NCw2ICsxNDYsNyBAQCBwcml2YXRlOgogICAgIC8vIFdlIGhvbGQgbV90b2tlbiBoZXJlIGJlY2F1
c2UgaXQgbWlnaHQgYmUgcGFydGlhbGx5IGNvbXBsZXRlLgogICAgIEhUTUxUb2tlbiBtX3Rva2Vu
OwogCisgICAgT3duUHRyPERPTU1vZGlmaWVyPiBtX2RvbU1vZGlmaWVyOwogICAgIE93blB0cjxI
VE1MVG9rZW5pemVyPiBtX3Rva2VuaXplcjsKICAgICBPd25QdHI8SFRNTFNjcmlwdFJ1bm5lcj4g
bV9zY3JpcHRSdW5uZXI7CiAgICAgT3duUHRyPEhUTUxUcmVlQnVpbGRlcj4gbV90cmVlQnVpbGRl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3Rh
Y2suY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAK
aW5kZXggNjJlZDZmNGUzOWQyMjlkZThiNGI4NjgxOTM0MTFiMTc4MTk0OWM3NC4uNzI2MWYwMTll
ZGE4NGI3ZWJiODI5ODYxMzNmMjFlODdiNGE2MjFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudFN0YWNrLmgiCiAKKyNpbmNsdWRl
ICJET01Nb2RpZmllci5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRl
ICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC0xNTMsMTIgKzE1NCwxNCBA
QCBib29sIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OmlzQWJvdmUoRWxlbWVudFJl
Y29yZCogb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1IVE1MRWxlbWVudFN0
YWNrOjpIVE1MRWxlbWVudFN0YWNrKCkKK0hUTUxFbGVtZW50U3RhY2s6OkhUTUxFbGVtZW50U3Rh
Y2soRE9NTW9kaWZpZXIqIGRvbU1vZGlmaWVyKQogICAgIDogbV9yb290Tm9kZSgwKQogICAgICwg
bV9oZWFkRWxlbWVudCgwKQogICAgICwgbV9ib2R5RWxlbWVudCgwKQogICAgICwgbV9zdGFja0Rl
cHRoKDApCisgICAgLCBtX2RvbU1vZGlmaWVyKGRvbU1vZGlmaWVyKQogeworICAgIEFTU0VSVCht
X2RvbU1vZGlmaWVyKTsKIH0KIAogSFRNTEVsZW1lbnRTdGFjazo6fkhUTUxFbGVtZW50U3RhY2so
KQpAQCAtMjAzLDcgKzIwNiw3IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wQWxsKCkKICAg
ICBtX2JvZHlFbGVtZW50ID0gMDsKICAgICBtX3N0YWNrRGVwdGggPSAwOwogICAgIHdoaWxlICht
X3RvcCkgewotICAgICAgICB0b3BOb2RlKCktPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworICAg
ICAgICBtX2RvbU1vZGlmaWVyLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4odG9wTm9kZSgpKTsKICAg
ICAgICAgbV90b3AgPSBtX3RvcC0+cmVsZWFzZU5leHQoKTsKICAgICB9CiB9CkBAIC0zNzEsNyAr
Mzc0LDcgQEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjppbnNlcnRBYm92ZShQYXNzUmVmUHRyPEhU
TUxTdGFja0l0ZW0+IGl0ZW0sIEVsZW1lbnRSZWNvcmQKIAogICAgICAgICBtX3N0YWNrRGVwdGgr
KzsKICAgICAgICAgcmVjb3JkQWJvdmUtPnNldE5leHQoYWRvcHRQdHIobmV3IEVsZW1lbnRSZWNv
cmQoaXRlbSwgcmVjb3JkQWJvdmUtPnJlbGVhc2VOZXh0KCkpKSk7Ci0gICAgICAgIHJlY29yZEFi
b3ZlLT5uZXh0KCktPmVsZW1lbnQoKS0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKTsKKyAgICAgICAg
bV9kb21Nb2RpZmllci0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4ocmVjb3JkQWJvdmUtPm5leHQoKS0+
ZWxlbWVudCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKQEAgLTU3NCw3ICs1NzcsNyBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnBvcENvbW1v
bigpCiAgICAgQVNTRVJUKCF0b3BTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0
bWxUYWcpKTsKICAgICBBU1NFUlQoIXRvcFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aGVhZFRhZykgfHwgIW1faGVhZEVsZW1lbnQpOwogICAgIEFTU0VSVCghdG9wU3RhY2tJdGVt
KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5VGFnKSB8fCAhbV9ib2R5RWxlbWVudCk7Ci0g
ICAgdG9wKCktPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworICAgIG1fZG9tTW9kaWZpZXItPmZp
bmlzaFBhcnNpbmdDaGlsZHJlbih0b3AoKSk7CiAgICAgbV90b3AgPSBtX3RvcC0+cmVsZWFzZU5l
eHQoKTsKIAogICAgIG1fc3RhY2tEZXB0aC0tOwpAQCAtNTg5LDcgKzU5Miw3IEBAIHZvaWQgSFRN
TEVsZW1lbnRTdGFjazo6cmVtb3ZlTm9uVG9wQ29tbW9uKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAg
ICAgIGlmIChwb3MtPm5leHQoKS0+ZWxlbWVudCgpID09IGVsZW1lbnQpIHsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBJcyBpdCBPSyB0byBjYWxsIGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCiAgICAg
ICAgICAgICAvLyB3aGVuIHRoZSBjaGlsZHJlbiBhcmVuJ3QgYWN0dWFsbHkgZmluaXNoZWQ/Ci0g
ICAgICAgICAgICBlbGVtZW50LT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKyAgICAgICAgICAg
IG1fZG9tTW9kaWZpZXItPmZpbmlzaFBhcnNpbmdDaGlsZHJlbihlbGVtZW50KTsKICAgICAgICAg
ICAgIHBvcy0+c2V0TmV4dChwb3MtPm5leHQoKS0+cmVsZWFzZU5leHQoKSk7CiAgICAgICAgICAg
ICBtX3N0YWNrRGVwdGgtLTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suaAppbmRleCA2MjBjNWExOTQzZWM3YzBiZWFi
NTc0ODI0NDY2Y2M0MWYxNzY0ZjA0Li5hMWY0ODQ1YTQxODU0NDliY2VlMjJkMTBmZWU5NzU4ZmU2
OGY2MGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVu
dFN0YWNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFj
ay5oCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ29udGFp
bmVyTm9kZTsKIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CitjbGFzcyBET01Nb2RpZmllcjsKIGNs
YXNzIEVsZW1lbnQ7CiBjbGFzcyBRdWFsaWZpZWROYW1lOwogCkBAIC00OCw3ICs0OSw3IEBAIGNs
YXNzIFF1YWxpZmllZE5hbWU7CiBjbGFzcyBIVE1MRWxlbWVudFN0YWNrIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShIVE1MRWxlbWVudFN0YWNrKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgSFRNTEVsZW1lbnRTdGFjaygpOworICAgIEhUTUxFbGVtZW50U3RhY2so
RE9NTW9kaWZpZXIqKTsKICAgICB+SFRNTEVsZW1lbnRTdGFjaygpOwogCiAgICAgY2xhc3MgRWxl
bWVudFJlY29yZCB7CkBAIC0xNzgsNiArMTc5LDggQEAgcHJpdmF0ZToKICAgICBFbGVtZW50KiBt
X2hlYWRFbGVtZW50OwogICAgIEVsZW1lbnQqIG1fYm9keUVsZW1lbnQ7CiAgICAgdW5zaWduZWQg
bV9zdGFja0RlcHRoOworCisgICAgRE9NTW9kaWZpZXIqIG1fZG9tTW9kaWZpZXI7CiB9OwogICAg
IAogaW5saW5lIGJvb2wgaXNJbkhUTUxOYW1lc3BhY2UoY29uc3QgSFRNTFN0YWNrSXRlbSogaXRl
bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCmlu
ZGV4IGE3ZjE0NTE5ZWUyMzE1YWNmNWFjYTE4Y2IwNTYxOWZhNzkzYzE0NWMuLjAzNDM0MWJjYzVk
NGVkMTYzOTI4OGNkMGQ4ZmRhZGNiM2RlYzgxODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
IkhUTUxUcmVlQnVpbGRlci5oIgogCiAjaW5jbHVkZSAiQ29tbWVudC5oIgorI2luY2x1ZGUgIkRP
TU1vZGlmaWVyLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRG
cmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgpAQCAtMzUwLDcgKzM1MSw3IEBA
IHByaXZhdGU6CiBIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnRQ
YXJzZXIqIHBhcnNlciwgSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCwgYm9vbCB1c2VQcmVI
VE1MNVBhcnNlclF1aXJrcywgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCkKICAgICA6IG1f
ZnJhbWVzZXRPayh0cnVlKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fdHJl
ZShkb2N1bWVudCwgbWF4aW11bURPTVRyZWVEZXB0aCkKKyAgICAsIG1fdHJlZShkb2N1bWVudCwg
cGFyc2VyLT5kb21Nb2RpZmllcigpLCBtYXhpbXVtRE9NVHJlZURlcHRoKQogICAgICwgbV9pbnNl
cnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5p
dGlhbE1vZGUpCiAgICAgLCBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZShmYWxzZSkKQEAgLTM2
Niw3ICszNjcsNyBAQCBIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1l
bnRQYXJzZXIqIHBhcnNlciwgRG9jdW1lbnRGcmFnbWVudCogZgogICAgIDogbV9mcmFtZXNldE9r
KHRydWUpCiAgICAgLCBtX2ZyYWdtZW50Q29udGV4dChmcmFnbWVudCwgY29udGV4dEVsZW1lbnQs
IHNjcmlwdGluZ1Blcm1pc3Npb24pCiAgICAgLCBtX2RvY3VtZW50KGZyYWdtZW50LT5kb2N1bWVu
dCgpKQotICAgICwgbV90cmVlKGZyYWdtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uLCBtYXhpbXVt
RE9NVHJlZURlcHRoKQorICAgICwgbV90cmVlKGZyYWdtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9u
LCBwYXJzZXItPmRvbU1vZGlmaWVyKCksIG1heGltdW1ET01UcmVlRGVwdGgpCiAgICAgLCBtX2lu
c2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZShJ
bml0aWFsTW9kZSkKICAgICAsIG1fc2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lKGZhbHNlKQpAQCAt
NzY4LDkgKzc2OSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJ
bkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgfQogICAgICAgICBpZiAoIW1f
ZnJhbWVzZXRPaykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+Ym9keUVsZW1lbnQoKS0+cmVt
b3ZlKGVjKTsKLSAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgICAgIG1fcGFyc2VyLT5kb21Nb2Rp
ZmllcigpLT5yZW1vdmVGcm9tUGFyZW50KG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+Ym9keUVsZW1l
bnQoKSk7CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWwobV90cmVlLm9w
ZW5FbGVtZW50cygpLT5ib2R5RWxlbWVudCgpKTsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50
cygpLT5wb3BIVE1MQm9keUVsZW1lbnQoKTsKICAgICAgICAgQVNTRVJUKG1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+dG9wKCkgPT0gbV90cmVlLm9wZW5FbGVtZW50cygpLT5odG1sRWxlbWVudCgpKTsK
QEAgLTE1NzYsNDEgKzE1NzUsMjUgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9w
dGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgaWYgKGxhc3RO
b2RlID09IGZ1cnRoZXN0QmxvY2spCiAgICAgICAgICAgICAgICAgYm9va21hcmsubW92ZVRvQWZ0
ZXIobm9kZUVudHJ5KTsKICAgICAgICAgICAgIC8vIDYuNgotICAgICAgICAgICAgaWYgKENvbnRh
aW5lck5vZGUqIHBhcmVudCA9IGxhc3ROb2RlLT5lbGVtZW50KCktPnBhcmVudE5vZGUoKSkKLSAg
ICAgICAgICAgICAgICBwYXJlbnQtPnBhcnNlclJlbW92ZUNoaWxkKGxhc3ROb2RlLT5lbGVtZW50
KCkpOwotICAgICAgICAgICAgbm9kZS0+ZWxlbWVudCgpLT5wYXJzZXJBZGRDaGlsZChsYXN0Tm9k
ZS0+ZWxlbWVudCgpKTsKLSAgICAgICAgICAgIGlmIChsYXN0Tm9kZS0+ZWxlbWVudCgpLT5wYXJl
bnRFbGVtZW50KCktPmF0dGFjaGVkKCkgJiYgIWxhc3ROb2RlLT5lbGVtZW50KCktPmF0dGFjaGVk
KCkpCi0gICAgICAgICAgICAgICAgbGFzdE5vZGUtPmVsZW1lbnQoKS0+bGF6eUF0dGFjaCgpOwor
ICAgICAgICAgICAgbV9wYXJzZXItPmRvbU1vZGlmaWVyKCktPnJlbW92ZUZyb21QYXJlbnQobGFz
dE5vZGUtPmVsZW1lbnQoKSk7CisgICAgICAgICAgICBtX3BhcnNlci0+ZG9tTW9kaWZpZXIoKS0+
YWRkQ2hpbGRBbmRBdHRhY2gobm9kZS0+ZWxlbWVudCgpLCBsYXN0Tm9kZS0+ZWxlbWVudCgpKTsK
ICAgICAgICAgICAgIC8vIDYuNwogICAgICAgICAgICAgbGFzdE5vZGUgPSBub2RlOwogICAgICAg
ICB9CiAgICAgICAgIC8vIDcKLSAgICAgICAgaWYgKENvbnRhaW5lck5vZGUqIHBhcmVudCA9IGxh
c3ROb2RlLT5lbGVtZW50KCktPnBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgIHBhcmVudC0+cGFy
c2VyUmVtb3ZlQ2hpbGQobGFzdE5vZGUtPmVsZW1lbnQoKSk7CisgICAgICAgIG1fcGFyc2VyLT5k
b21Nb2RpZmllcigpLT5yZW1vdmVGcm9tUGFyZW50KGxhc3ROb2RlLT5lbGVtZW50KCkpOwogICAg
ICAgICBpZiAoY29tbW9uQW5jZXN0b3ItPmNhdXNlc0Zvc3RlclBhcmVudGluZygpKQogICAgICAg
ICAgICAgbV90cmVlLmZvc3RlclBhcmVudChsYXN0Tm9kZS0+ZWxlbWVudCgpKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBjb21tb25BbmNlc3Rvci0+bm9kZSgpLT5wYXJzZXJBZGRDaGls
ZChsYXN0Tm9kZS0+ZWxlbWVudCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChsYXN0Tm9kZS0+c3Rh
Y2tJdGVtKCktPmlzRWxlbWVudE5vZGUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobGFzdE5vZGUt
PmVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpKTsKLSAgICAgICAgICAgIGlmIChsYXN0Tm9kZS0+ZWxl
bWVudCgpLT5wYXJlbnROb2RlKCktPmF0dGFjaGVkKCkgJiYgIWxhc3ROb2RlLT5lbGVtZW50KCkt
PmF0dGFjaGVkKCkpCi0gICAgICAgICAgICAgICAgbGFzdE5vZGUtPmVsZW1lbnQoKS0+bGF6eUF0
dGFjaCgpOwotICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGFyc2VyLT5k
b21Nb2RpZmllcigpLT5hZGRDaGlsZEFuZEF0dGFjaChjb21tb25BbmNlc3Rvci0+bm9kZSgpLCBs
YXN0Tm9kZS0+ZWxlbWVudCgpKTsKICAgICAgICAgLy8gOAogICAgICAgICBSZWZQdHI8SFRNTFN0
YWNrSXRlbT4gbmV3SXRlbSA9IG1fdHJlZS5jcmVhdGVFbGVtZW50RnJvbVNhdmVkVG9rZW4oZm9y
bWF0dGluZ0VsZW1lbnRSZWNvcmQtPnN0YWNrSXRlbSgpLmdldCgpKTsKICAgICAgICAgLy8gOQot
ICAgICAgICBuZXdJdGVtLT5lbGVtZW50KCktPnRha2VBbGxDaGlsZHJlbkZyb20oZnVydGhlc3RC
bG9jay0+ZWxlbWVudCgpKTsKKyAgICAgICAgbV9wYXJzZXItPmRvbU1vZGlmaWVyKCktPm1vdmVB
bGxDaGlsZHJlblRvTmV3UGFyZW50KG5ld0l0ZW0tPmVsZW1lbnQoKSwgZnVydGhlc3RCbG9jay0+
ZWxlbWVudCgpKTsKICAgICAgICAgLy8gMTAKLSAgICAgICAgRWxlbWVudCogZnVydGhlc3RCbG9j
a0VsZW1lbnQgPSBmdXJ0aGVzdEJsb2NrLT5lbGVtZW50KCk7Ci0gICAgICAgIC8vIEZJWE1FOiBB
bGwgdGhpcyBjcmVhdGlvbiAvIHBhcnNlckFkZENoaWxkIC8gYXR0YWNoIGJ1c2luZXNzIHNob3Vs
ZAotICAgICAgICAvLyAgICAgICAgYmUgaW4gSFRNTENvbnN0cnVjdGlvblNpdGUuICBNeSBndWVz
cyBpcyB0aGF0IHN0ZXBzIDgtLTEyCi0gICAgICAgIC8vICAgICAgICBzaG91bGQgYWxsIGJlIGlu
IHNvbWUgSFRNTENvbnN0cnVjdGlvblNpdGUgZnVuY3Rpb24uCi0gICAgICAgIGZ1cnRoZXN0Qmxv
Y2tFbGVtZW50LT5wYXJzZXJBZGRDaGlsZChuZXdJdGVtLT5lbGVtZW50KCkpOwotICAgICAgICBp
ZiAoZnVydGhlc3RCbG9ja0VsZW1lbnQtPmF0dGFjaGVkKCkgJiYgIW5ld0l0ZW0tPmVsZW1lbnQo
KS0+YXR0YWNoZWQoKSkgewotICAgICAgICAgICAgLy8gTm90aWNlIHRoYXQgbmV3SXRlbS0+ZWxl
bWVudCgpIG1pZ2h0IGFscmVhZHkgYmUgYXR0YWNoZWQgaWYsIGZvciBleGFtcGxlLCBvbmUgb2Yg
dGhlIHJlcGFyZW50ZWQKLSAgICAgICAgICAgIC8vIGNoaWxkcmVuIGlzIGEgc3R5bGUgZWxlbWVu
dCwgd2hpY2ggYXR0YWNoZXMgaXRzZWxmIGF1dG9tYXRpY2FsbHkuCi0gICAgICAgICAgICBuZXdJ
dGVtLT5lbGVtZW50KCktPmF0dGFjaCgpOwotICAgICAgICB9CisgICAgICAgIC8vIE5vdGljZSB0
aGF0IG5ld0l0ZW0tPmVsZW1lbnQoKSBtaWdodCBhbHJlYWR5IGJlIGF0dGFjaGVkIGlmLCBmb3Ig
ZXhhbXBsZSwgb25lIG9mIHRoZSByZXBhcmVudGVkCisgICAgICAgIC8vIGNoaWxkcmVuIGlzIGEg
c3R5bGUgZWxlbWVudCwgd2hpY2ggYXR0YWNoZXMgaXRzZWxmIGF1dG9tYXRpY2FsbHkuCisgICAg
ICAgIG1fcGFyc2VyLT5kb21Nb2RpZmllcigpLT5hZGRDaGlsZEFuZEF0dGFjaChmdXJ0aGVzdEJs
b2NrLT5lbGVtZW50KCksIG5ld0l0ZW0tPmVsZW1lbnQoKSwgZmFsc2UpOwogICAgICAgICAvLyAx
MQogICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPnN3YXBUbyhmb3Jt
YXR0aW5nRWxlbWVudCwgbmV3SXRlbSwgYm9va21hcmspOwogICAgICAgICAvLyAxMgpAQCAtMjEy
NCw3ICsyMTA3LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWlj
SFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzID0gbV90cmVl
LmN1cnJlbnRFbGVtZW50KCk7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBv
cCgpOwogICAgICAgICAgICAgaWYgKGlzUGFyc2luZ0ZyYWdtZW50KCkgJiYgbV9mcmFnbWVudENv
bnRleHQuc2NyaXB0aW5nUGVybWlzc2lvbigpID09IERpc2FsbG93U2NyaXB0aW5nQ29udGVudCkK
LSAgICAgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2Vzcy0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsK
KyAgICAgICAgICAgICAgICBtX3BhcnNlci0+ZG9tTW9kaWZpZXIoKS0+cmVtb3ZlQWxsQ2hpbGRy
ZW4obV9zY3JpcHRUb1Byb2Nlc3MuZ2V0KCkpOwogICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9k
ZShtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSk7CiAKICAgICAgICAgICAgIC8vIFRoaXMgdG9rZW4g
d2lsbCBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYnkgdGhlIHRva2VuaXplciBpZiBhCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9JbW1lZGlhdGVET01Nb2RpZmllclN0cmF0
ZWd5LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9JbW1lZGlhdGVET01Nb2RpZmllclN0
cmF0ZWd5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU0ZjAyNjg1ZWVlZjE5YmE1ZTk3YjJhMGI4YTZjMmU3OWQ2
NDYyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0ltbWVk
aWF0ZURPTU1vZGlmaWVyU3RyYXRlZ3kuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW1tZWRp
YXRlRE9NTW9kaWZpZXJTdHJhdGVneV9oCisjZGVmaW5lIEltbWVkaWF0ZURPTU1vZGlmaWVyU3Ry
YXRlZ3lfaAorCisjaW5jbHVkZSAiRE9NTW9kaWZpZXJFeGVjdXRvci5oIgorI2luY2x1ZGUgIkRP
TU1vZGlmaWVyU3RyYXRlZ3kuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltbWVkaWF0ZURPTU1vZGlmaWVyU3RyYXRlZ3kgOiBw
dWJsaWMgRE9NTW9kaWZpZXJTdHJhdGVneSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1t
ZWRpYXRlRE9NTW9kaWZpZXJTdHJhdGVneSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW1tZWRpYXRlRE9NTW9kaWZpZXJTdHJh
dGVneT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW1tZWRp
YXRlRE9NTW9kaWZpZXJTdHJhdGVneSgpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5QYXJzaW5nQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIG1fZXhlY3V0b3Iu
YmVnaW5QYXJzaW5nQ2hpbGRyZW4obm9kZSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZp
bmlzaFBhcnNpbmdDaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgbV9leGVjdXRv
ci5maW5pc2hQYXJzaW5nQ2hpbGRyZW4obm9kZSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IGFkZENoaWxkQW5kQXR0YWNoKENvbnRhaW5lck5vZGUqIHBhcmVudCwgTm9kZSogY2hpbGQsIGJv
b2wgbGF6eUF0dGFjaCkKKyAgICB7CisgICAgICAgIG1fZXhlY3V0b3IuYWRkQ2hpbGRBbmRBdHRh
Y2gocGFyZW50LCBjaGlsZCwgbGF6eUF0dGFjaCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZUZyb21QYXJlbnQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIG1fZXhlY3V0b3Iu
cmVtb3ZlRnJvbVBhcmVudChub2RlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZUFs
bENoaWxkcmVuVG9OZXdQYXJlbnQoQ29udGFpbmVyTm9kZSogbmV3UGFyZW50LCBDb250YWluZXJO
b2RlKiBvbGRQYXJlbnQpCisgICAgeworICAgICAgICBtX2V4ZWN1dG9yLm1vdmVBbGxDaGlsZHJl
blRvTmV3UGFyZW50KG5ld1BhcmVudCwgb2xkUGFyZW50KTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQWxsQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIG1fZXhlY3V0b3IucmVtb3ZlQWxsQ2hpbGRyZW4obm9kZSk7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIHNldEF0dHJpYnV0ZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCisgICAgeworICAgICAg
ICBtX2V4ZWN1dG9yLnNldEF0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSW1tZWRpYXRlRE9NTW9kaWZpZXJTdHJhdGVneSgpIHsgfQor
CisgICAgRE9NTW9kaWZpZXJFeGVjdXRvciBtX2V4ZWN1dG9yOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSW1tZWRpYXRlRE9NTW9kaWZpZXJTdHJhdGVneV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157188</attachid>
            <date>2012-08-08 05:13:06 -0700</date>
            <delta_ts>2012-08-08 16:30:59 -0700</delta_ts>
            <desc>Patch (not for landing)</desc>
            <filename>bug-93455-20120808211235.patch</filename>
            <type>text/plain</type>
            <size>40776</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTg0NGNlOThiY2JlMzQ2
YTEwM2VkZmZkY2ZlMjZmNDg0NmFmODJlNi4uMmMwMTFiMTgxODJhZTdiMzE4ZjhkYWQ3YTI5Njcz
NDIyZmQ4NWU5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAxMi0wOC0wOCAgS3dh
bmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIEV4dHJhY3QgRE9N
IG1vZGlmaWNhdGlvbnMgaW4gdGhlIEhUTUw1IHBhcnNlciBpbnRvIERPTU1vZGlmaWVyLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM0NTUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGV4
dHJhY3RzIERPTSBtb2RpZmljYXRpb25zIGluIHRoZSBwYXJzZXIgaW50byBET01Nb2RpZmllcgor
ICAgICAgICBhbmQgbWFrZXMgdGhlIHRyZWUgYnVpbGRlciBhbmQgdGhlIGVsZW1lbnQgc3RhY2sg
dXNlIGl0LiBET01Nb2RpZmllciBjYW4KKyAgICAgICAgY2hhbmdlIGl0cyBiZWhhdmlvciBkeW5h
bWljYWxseSBieSBjaGFuZ2luZyBpdHMgc3RyYXRlZ3kuIFRoZSBkZWZhdWx0CisgICAgICAgIHN0
cmF0ZWd5IG9mIERPTU1vZGlmaWVyIGlzIHNldCB0byBJbW1lZGlhdGVET01Nb2RpZmllclN0cmF0
ZWd5IHdoaWNoIGNhbGxzCisgICAgICAgIERPTSBvcGVyYXRpb25zIHN5bmNocm9ub3VzbHkuCisK
KyAgICAgICAgVGhpcyByZWZhY3RvcmluZyBpcyBhIHByZXBhcmF0aW9uIGZvciBzcGVjdWxhdGl2
ZSBwYXJzaW5nLiBUbyBydW4gdGhlCisgICAgICAgIHBhcnNlciBpbiBzcGVjdWxhdGlvbiBtb2Rl
LCB3ZSBtdXN0IGJlIGFibGUgdG8gcXVldWUgdXAgRE9NIG1vZGlmaWNhdGlvbnMuCisgICAgICAg
IFdlIGNhbiBkbyB0aGlzIGJ5IGFkZGluZyBEZWZlcnJlZERPTU1vZGlmaWVyU3RhdGVneSB3aGlj
aCBxdWV1ZXMgdXAgRE9NCisgICAgICAgIG9wZXJhdGlvbnMgYW5kIGV4ZWN1dGVzIHRoZW0gbGF0
ZXIuCisKKyAgICAgICAgQm90aCBJbW1lZGlhdGVET01Nb2RpZmllclN0cmF0ZWd5IGFuZCBEZWZl
cnJlZERPTU1vZGlmaWVyU3RhdGVneSBldmVudHVhbGx5CisgICAgICAgIHBlcmZvcm0gdGhlIHNh
bWUgRE9NIG9wZXJhdGlvbnMuIFNvIEkgYWRkZWQgRE9NTW9kaWZpZXJFeGVjdXRvciB3aGljaCBw
ZXJmb3JtcworICAgICAgICB0aGUgYWN0dWFsIERPTSBvcGVyYXRpb25zLiBET01Nb2RpZmllclN0
cmF0ZWd5IGNsYXNzZXMgc2hvdWxkIGRlbGVnYXRlIHRvCisgICAgICAgIERPTU1vZGlmaWVyRXhl
Y3V0b3IgdG8gcmVtb3ZlIGNvZGUgZHVwbGljYXRpb24uCisKKyAgICAgICAgQ2hhbmdlZCBIVE1M
RG9jdW1lbnRQYXJzZXIgdG8gb3duIGEgRE9NTW9kaWZpZXIgaW5zdGFuY2UgYW5kIHBhc3MgaXQK
KyAgICAgICAgdG8gSFRNTFRyZWVCdWlsZGVyLCBIVE1MQ29uc3RydWN0aW9uU2l0ZSBhbmQgSFRN
TEVsZW1lbnRTdGFjay4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIG5vdCBjb21wbGV0ZS4gSFRN
TENvbnN0cnVjdGlvblNpdGUgc3RpbGwgaGFzIERPTSBtb2RpZmljYXRpb25zCisgICAgICAgIGlu
Y2x1ZGluZyBlbGVtZW50IGNyZWF0aW9uLiBJIHdpbGwgbW92ZSB0aGUgcmVtYWluaW5nIERPTSBt
b2RpZmljYXRpb25zIGludG8KKyAgICAgICAgRE9NTW9kaWZpZXIgaW4gYSBmb2xsb3ctdXAgcGF0
Y2guCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOyByZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAg
ICogaHRtbC9wYXJzZXIvRE9NTW9kaWZpZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKERPTU1vZGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1vZGlmaWVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTW9kaWZpZXI6OnNldFN0cmF0ZWd5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTU1vZGlmaWVyOjpiZWdpblBhcnNpbmdDaGlsZHJlbik6CisgICAg
ICAgIChXZWJDb3JlOjpET01Nb2RpZmllcjo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTU1vZGlmaWVyOjphZGRDaGlsZEFuZEF0dGFjaCk6CisgICAgICAgIChX
ZWJDb3JlOjpET01Nb2RpZmllcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpET01Nb2RpZmllcjo6bW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NTW9kaWZpZXI6OnJlbW92ZUFsbENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6
OkRPTU1vZGlmaWVyOjpzZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTW9kaWZp
ZXI6OnNldEluc2VydGVkQnlQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTW9kaWZpZXI6
OmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TU1vZGlmaWVyOjpzZXREZW1vdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1vZGlmaWVyOjpt
ZXJnZUF0dHJpYnV0ZXNJbnRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpET01Nb2RpZmll
cjo6c2V0Q29tcGF0aWJpbGl0eU1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTW9kaWZpZXI6
OnNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9N
TW9kaWZpZXI6OkRPTU1vZGlmaWVyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9ET01Nb2RpZmll
ckV4ZWN1dG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChET01Nb2Rp
ZmllckV4ZWN1dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1vZGlmaWVyRXhlY3V0b3I6OkRP
TU1vZGlmaWVyRXhlY3V0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTW9kaWZpZXJFeGVjdXRv
cjo6YmVnaW5QYXJzaW5nQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6RE9NTW9kaWZpZXJF
eGVjdXRvcjo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1v
ZGlmaWVyRXhlY3V0b3I6OmFkZENoaWxkQW5kQXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkRP
TU1vZGlmaWVyRXhlY3V0b3I6OnJlbW92ZUZyb21QYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NTW9kaWZpZXJFeGVjdXRvcjo6bW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NTW9kaWZpZXJFeGVjdXRvcjo6cmVtb3ZlQWxsQ2hpbGRyZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6RE9NTW9kaWZpZXJFeGVjdXRvcjo6c2V0QXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRPTU1vZGlmaWVyRXhlY3V0b3I6OnNldEluc2VydGVkQnlQYXJzZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NTW9kaWZpZXJFeGVjdXRvcjo6ZGlzcGF0Y2hEb2N1bWVudEVs
ZW1lbnRBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NTW9kaWZpZXJFeGVjdXRvcjo6
c2V0RGVtb3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpET01Nb2RpZmllckV4ZWN1dG9yOjptZXJn
ZUF0dHJpYnV0ZXNJbnRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpET01Nb2RpZmllckV4
ZWN1dG9yOjpzZXRDb21wYXRpYmlsaXR5TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpET01Nb2Rp
ZmllckV4ZWN1dG9yOjpzZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0eXBlKToKKyAgICAgICAg
KiBodG1sL3BhcnNlci9ET01Nb2RpZmllclN0cmF0ZWd5Lmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChET01Nb2RpZmllclN0cmF0ZWd5KToKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6SFRNTENvbnN0cnVjdGlvblNpdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENvbnN0cnVjdGlvblNpdGU6OmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhU
TUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5Cb2R5KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnREb2N0eXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRm9ybUVs
ZW1lbnQpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmg6Cisg
ICAgICAgIChIVE1MQ29uc3RydWN0aW9uU2l0ZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRN
TERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNl
cjo6SFRNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1l
bnRQYXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERv
Y3VtZW50UGFyc2VyOjpkb21Nb2RpZmllcik6CisgICAgICAgIChIVE1MRG9jdW1lbnRQYXJzZXIp
OgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6SFRNTEVsZW1lbnRTdGFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwb3BBbGwpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnRTdGFjazo6aW5zZXJ0QWJvdmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1l
bnRTdGFjazo6cG9wQ29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6
OnJlbW92ZU5vblRvcENvbW1vbik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRT
dGFjay5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIVE1MRWxlbWVudFN0YWNrKToK
KyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3kpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKToKKyAgICAgICAgKiBo
dG1sL3BhcnNlci9JbW1lZGlhdGVET01Nb2RpZmllclN0cmF0ZWd5Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChJbW1lZGlhdGVET01Nb2RpZmllclN0cmF0ZWd5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltbWVkaWF0ZURPTU1vZGlmaWVyU3RyYXRlZ3k6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbW1lZGlhdGVET01Nb2RpZmllclN0cmF0ZWd5OjpiZWdpblBhcnNp
bmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpJbW1lZGlhdGVET01Nb2RpZmllclN0cmF0
ZWd5OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6SW1tZWRpYXRl
RE9NTW9kaWZpZXJTdHJhdGVneTo6YWRkQ2hpbGRBbmRBdHRhY2gpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1tZWRpYXRlRE9NTW9kaWZpZXJTdHJhdGVneTo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbW1lZGlhdGVET01Nb2RpZmllclN0cmF0ZWd5Ojptb3ZlQWxsQ2hpbGRy
ZW5Ub05ld1BhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbW1lZGlhdGVET01Nb2RpZmllclN0
cmF0ZWd5OjpyZW1vdmVBbGxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpJbW1lZGlhdGVE
T01Nb2RpZmllclN0cmF0ZWd5OjpzZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1t
ZWRpYXRlRE9NTW9kaWZpZXJTdHJhdGVneTo6c2V0SW5zZXJ0ZWRCeVBhcnNlcik6CisgICAgICAg
IChXZWJDb3JlOjpJbW1lZGlhdGVET01Nb2RpZmllclN0cmF0ZWd5OjpkaXNwYXRjaERvY3VtZW50
RWxlbWVudEF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbW1lZGlhdGVET01Nb2RpZmll
clN0cmF0ZWd5OjpzZXREZW1vdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltbWVkaWF0ZURPTU1v
ZGlmaWVyU3RyYXRlZ3k6Om1lcmdlQXR0cmlidXRlc0ludG9FbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkltbWVkaWF0ZURPTU1vZGlmaWVyU3RyYXRlZ3k6OnNldENvbXBhdGliaWxpdHlNb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltbWVkaWF0ZURPTU1vZGlmaWVyU3RyYXRlZ3k6OnNldENv
bXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1tZWRpYXRl
RE9NTW9kaWZpZXJTdHJhdGVneTo6SW1tZWRpYXRlRE9NTW9kaWZpZXJTdHJhdGVneSk6CisKIDIw
MTItMDgtMDYgIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBbQ2hyb21pdW1dIFJlZmFjdG9yIENDVGV4dHVyZVVwZGF0ZXIgaW50byBDQ1RleHR1cmVVcGRh
dGVyIGFuZCBDQ1RleHR1cmVVcGRhdGVDb250cm9sbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvRE9NTW9kaWZpZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0RPTU1vZGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY1MDA3MTliNzViZjQ4ZjBjYzNhY2YwZmJh
ZTc5N2Q0YmE4NWM3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0RPTU1vZGlmaWVyLmgKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBET01Nb2RpZmllcl9o
CisjZGVmaW5lIERPTU1vZGlmaWVyX2gKKworI2luY2x1ZGUgIkltbWVkaWF0ZURPTU1vZGlmaWVy
U3RyYXRlZ3kuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDb250YWluZXJOb2RlOworY2xhc3MgRE9NTW9kaWZpZXJTdHJhdGVneTsK
K2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBIVE1MSHRtbEVsZW1lbnQ7CitjbGFzcyBOb2RlOworCitj
bGFzcyBET01Nb2RpZmllciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRE9NTW9kaWZpZXIp
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPERPTU1vZGlmaWVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgRE9NTW9k
aWZpZXIoKSk7IH0KKworICAgIHZvaWQgc2V0U3RyYXRlZ3koUGFzc093blB0cjxET01Nb2RpZmll
clN0cmF0ZWd5PiBzdHJhdGVneSkKKyAgICB7CisgICAgICAgIG1fc3RyYXRlZ3kgPSBzdHJhdGVn
eTsKKyAgICB9CisKKyAgICB2b2lkIGJlZ2luUGFyc2luZ0NoaWxkcmVuKE5vZGUqIG5vZGUpCisg
ICAgeworICAgICAgICBBU1NFUlQobm9kZSk7CisgICAgICAgIG1fc3RyYXRlZ3ktPmJlZ2luUGFy
c2luZ0NoaWxkcmVuKG5vZGUpOworICAgIH0KKworICAgIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxk
cmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQobm9kZSk7CisgICAgICAgIG1f
c3RyYXRlZ3ktPmZpbmlzaFBhcnNpbmdDaGlsZHJlbihub2RlKTsKKyAgICB9CisKKyAgICB2b2lk
IGFkZENoaWxkQW5kQXR0YWNoKENvbnRhaW5lck5vZGUqIHBhcmVudCwgTm9kZSogY2hpbGQsIGJv
b2wgbGF6eUF0dGFjaCA9IHRydWUpCisgICAgeworICAgICAgICBBU1NFUlQocGFyZW50KTsKKyAg
ICAgICAgQVNTRVJUKGNoaWxkKTsKKyAgICAgICAgbV9zdHJhdGVneS0+YWRkQ2hpbGRBbmRBdHRh
Y2gocGFyZW50LCBjaGlsZCwgbGF6eUF0dGFjaCk7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVG
cm9tUGFyZW50KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQobm9kZSk7CisgICAg
ICAgIG1fc3RyYXRlZ3ktPnJlbW92ZUZyb21QYXJlbnQobm9kZSk7CisgICAgfQorCisgICAgdm9p
ZCBtb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVudChDb250YWluZXJOb2RlKiBuZXdQYXJlbnQsIENv
bnRhaW5lck5vZGUqIG9sZFBhcmVudCkKKyAgICB7CisgICAgICAgIEFTU0VSVChuZXdQYXJlbnQp
OworICAgICAgICBBU1NFUlQob2xkUGFyZW50KTsKKyAgICAgICAgbV9zdHJhdGVneS0+bW92ZUFs
bENoaWxkcmVuVG9OZXdQYXJlbnQobmV3UGFyZW50LCBvbGRQYXJlbnQpOworICAgIH0KKworICAg
IHZvaWQgcmVtb3ZlQWxsQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgbV9zdHJhdGVneS0+cmVtb3ZlQWxsQ2hpbGRyZW4o
bm9kZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRBdHRyaWJ1dGUoRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnQpOworICAgICAgICBtX3N0cmF0ZWd5LT5z
ZXRBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9p
ZCBzZXRJbnNlcnRlZEJ5UGFyc2VyKEhUTUxIdG1sRWxlbWVudCogZWxlbWVudCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICAgICAgbV9zdHJhdGVneS0+c2V0SW5zZXJ0ZWRC
eVBhcnNlcihlbGVtZW50KTsKKyAgICB9CisKKyAgICB2b2lkIGRpc3BhdGNoRG9jdW1lbnRFbGVt
ZW50QXZhaWxhYmxlKERvY3VtZW50KiBkb2N1bWVudCkKKyAgICB7CisgICAgICAgIEFTU0VSVChk
b2N1bWVudCk7CisgICAgICAgIG1fc3RyYXRlZ3ktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZh
aWxhYmxlKGRvY3VtZW50KTsKKyAgICB9CisKKyAgICB2b2lkIHNldERlbW90ZWQoSFRNTEZvcm1F
bGVtZW50KiBmb3JtLCBib29sIGlzRGVtb3RlZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChmb3Jt
KTsKKyAgICAgICAgbV9zdHJhdGVneS0+c2V0RGVtb3RlZChmb3JtLCBpc0RlbW90ZWQpOworICAg
IH0KKworICAgIHZvaWQgbWVyZ2VBdHRyaWJ1dGVzSW50b0VsZW1lbnQoRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCisgICAgeworICAgICAgICBp
ZiAoYXR0cmlidXRlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
QVNTRVJUKGVsZW1lbnQpOworICAgICAgICBtX3N0cmF0ZWd5LT5tZXJnZUF0dHJpYnV0ZXNJbnRv
RWxlbWVudChlbGVtZW50LCBhdHRyaWJ1dGVzKTsKKyAgICB9CisKKyAgICB2b2lkIHNldENvbXBh
dGliaWxpdHlNb2RlKERvY3VtZW50KiBkb2N1bWVudCwgRG9jdW1lbnQ6OkNvbXBhdGliaWxpdHlN
b2RlIG1vZGUpCisgICAgeworICAgICAgICBBU1NFUlQoZG9jdW1lbnQpOworICAgICAgICBtX3N0
cmF0ZWd5LT5zZXRDb21wYXRpYmlsaXR5TW9kZShkb2N1bWVudCwgbW9kZSk7CisgICAgfQorCisg
ICAgdm9pZCBzZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0eXBlKERvY3VtZW50KiBkb2N1bWVu
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVChkb2N1bWVudCk7CisgICAgICAgIG1fc3RyYXRlZ3kt
PnNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUoZG9jdW1lbnQpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBET01Nb2RpZmllcigpIDogbV9zdHJhdGVneShJbW1lZGlhdGVET01Nb2RpZmll
clN0cmF0ZWd5OjpjcmVhdGUoKSkgeyB9CisKKyAgICBPd25QdHI8RE9NTW9kaWZpZXJTdHJhdGVn
eT4gbV9zdHJhdGVneTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IERPTU1vZGlmaWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0RP
TU1vZGlmaWVyRXhlY3V0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0RPTU1vZGlm
aWVyRXhlY3V0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTU2MjhjYmRlODZiZWNkZTk0MGUxOWNmMDYzMGFl
NWI5NWI2NTg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
RE9NTW9kaWZpZXJFeGVjdXRvci5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRE9NTW9kaWZp
ZXJFeGVjdXRvcl9oCisjZGVmaW5lIERPTU1vZGlmaWVyRXhlY3V0b3JfaAorCisjaW5jbHVkZSAi
RWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRE9NTW9kaWZpZXJFeGVjdXRv
ciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRE9NTW9kaWZpZXJFeGVjdXRvcik7CitwdWJs
aWM6CisgICAgRE9NTW9kaWZpZXJFeGVjdXRvcigpIHsgfQorCisgICAgdm9pZCBiZWdpblBhcnNp
bmdDaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS0+YmVnaW5QYXJzaW5n
Q2hpbGRyZW4oKTsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJlbihOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Cisg
ICAgfQorCisgICAgdm9pZCBhZGRDaGlsZEFuZEF0dGFjaChDb250YWluZXJOb2RlKiBwYXJlbnQs
IE5vZGUqIGNoaWxkLCBib29sIGxhenlBdHRhY2ggPSB0cnVlKQorICAgIHsKKyAgICAgICAgcGFy
ZW50LT5wYXJzZXJBZGRDaGlsZChjaGlsZCk7CisgICAgICAgIGlmIChwYXJlbnQtPmF0dGFjaGVk
KCkgJiYgIWNoaWxkLT5hdHRhY2hlZCgpKSB7CisgICAgICAgICAgICBpZiAobGF6eUF0dGFjaCkK
KyAgICAgICAgICAgICAgICBjaGlsZC0+bGF6eUF0dGFjaCgpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGNoaWxkLT5hdHRhY2goKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgcmVtb3ZlRnJvbVBhcmVudChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKENv
bnRhaW5lck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgIHBh
cmVudC0+cGFyc2VyUmVtb3ZlQ2hpbGQobm9kZSk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlQWxs
Q2hpbGRyZW5Ub05ld1BhcmVudChDb250YWluZXJOb2RlKiBuZXdQYXJlbnQsIENvbnRhaW5lck5v
ZGUqIG9sZFBhcmVudCkKKyAgICB7CisgICAgICAgIG5ld1BhcmVudC0+dGFrZUFsbENoaWxkcmVu
RnJvbShvbGRQYXJlbnQpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlQWxsQ2hpbGRyZW4oQ29u
dGFpbmVyTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIG5vZGUtPnJlbW92ZUFsbENoaWxkcmVu
KCk7CisgICAgfQorCisgICAgdm9pZCBzZXRBdHRyaWJ1dGUoRWxlbWVudCogZWxlbWVudCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpOwor
ICAgIH0KKworICAgIHZvaWQgc2V0SW5zZXJ0ZWRCeVBhcnNlcihIVE1MSHRtbEVsZW1lbnQqIGVs
ZW1lbnQpCisgICAgeworICAgICAgICBlbGVtZW50LT5pbnNlcnRlZEJ5UGFyc2VyKCk7CisgICAg
fQorCisgICAgdm9pZCBkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZShEb2N1bWVudCog
ZG9jdW1lbnQpCisgICAgeworICAgICAgICBpZiAoZG9jdW1lbnQtPmZyYW1lKCkpCisgICAgICAg
ICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50
QXZhaWxhYmxlKCk7CisgICAgfQorCisgICAgdm9pZCBzZXREZW1vdGVkKEhUTUxGb3JtRWxlbWVu
dCogZm9ybSwgYm9vbCBpc0RlbW90ZWQpCisgICAgeworICAgICAgICBmb3JtLT5zZXREZW1vdGVk
KGlzRGVtb3RlZCk7CisgICAgfQorCisgICAgdm9pZCBtZXJnZUF0dHJpYnV0ZXNJbnRvRWxlbWVu
dChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcykK
KyAgICB7CisgICAgICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBlbGVtZW50QXR0cmlidXRlRGF0
YSA9IGVsZW1lbnQtPm11dGFibGVBdHRyaWJ1dGVEYXRhKCk7CisKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNv
bnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gYXR0cmlidXRlcy5hdChpKTsKKyAgICAgICAgICAg
IGlmICghZWxlbWVudEF0dHJpYnV0ZURhdGEtPmdldEF0dHJpYnV0ZUl0ZW0oYXR0cmlidXRlLm5h
bWUoKSkpCisgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKGF0dHJpYnV0ZS5u
YW1lKCksIGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
c2V0Q29tcGF0aWJpbGl0eU1vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBEb2N1bWVudDo6Q29tcGF0
aWJpbGl0eU1vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIGRvY3VtZW50LT5zZXRDb21wYXRpYmls
aXR5TW9kZShtb2RlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldENvbXBhdGliaWxpdHlNb2RlRnJv
bURvY3R5cGUoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIHsKKyAgICAgICAgZG9jdW1lbnQtPnNl
dENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUoKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBET01Nb2RpZmllckV4ZWN1dG9yX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0RPTU1vZGlmaWVyU3RyYXRlZ3kuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0RPTU1vZGlmaWVyU3RyYXRlZ3kuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45YTlmNGQ0OGZhMzk2Mjk0MDYzY2QwZmU3MThmZTE3NTkwNGZlOGU1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvRE9NTW9kaWZpZXJTdHJhdGVneS5oCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgR09PR0xFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBET01Nb2RpZmllclN0cmF0ZWd5X2gKKyNkZWZpbmUgRE9N
TW9kaWZpZXJTdHJhdGVneV9oCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250YWluZXJOb2RlOworY2xhc3MgRWxl
bWVudDsKK2NsYXNzIEhUTUxIdG1sRWxlbWVudDsKK2NsYXNzIE5vZGU7CitjbGFzcyBRdWFsaWZp
ZWROYW1lOworCitjbGFzcyBET01Nb2RpZmllclN0cmF0ZWd5IHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIHZvaWQgYmVnaW5QYXJzaW5nQ2hpbGRyZW4oTm9kZSopID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKE5vZGUqKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkQ2hpbGRBbmRBdHRhY2goQ29udGFpbmVyTm9kZSogcGFyZW50LCBOb2RlKiBjaGlsZCwgYm9v
bCBsYXp5QXR0YWNoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoTm9k
ZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnQoQ29u
dGFpbmVyTm9kZSogbmV3UGFyZW50LCBDb250YWluZXJOb2RlKiBvbGRQYXJlbnQpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSopID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0QXR0cmlidXRlKEVsZW1lbnQqLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXRJbnNlcnRlZEJ5UGFyc2VyKEhUTUxIdG1sRWxlbWVudCopID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGUoRG9jdW1lbnQqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVtb3RlZChIVE1MRm9ybUVsZW1lbnQqLCBib29sIGlzRGVt
b3RlZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBtZXJnZUF0dHJpYnV0ZXNJbnRvRWxlbWVudChF
bGVtZW50KiwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldENvbXBhdGliaWxpdHlNb2RlKERvY3VtZW50KiwgRG9jdW1lbnQ6OkNvbXBhdGliaWxpdHlN
b2RlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5
cGUoRG9jdW1lbnQqKSA9IDA7CisKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIERPTU1vZGlmaWVyU3RyYXRlZ3lfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCmluZGV4IGZjOWQ3YzY2NDhhMmM0YTc1
NTQ4ZmU5NmZmZTc5Zjc0OWUyYjAyZTYuLjg2ODg2NDFmOGE5ZGMwNDljNDg4MWZjZDEzOTMzNTU5
MmM0MThhNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25z
dHJ1Y3Rpb25TaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29u
c3RydWN0aW9uU2l0ZS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJIVE1MVHJlZUJ1
aWxkZXIuaCIKIAogI2luY2x1ZGUgIkNvbW1lbnQuaCIKKyNpbmNsdWRlICJET01Nb2RpZmllci5o
IgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudFR5cGUu
aCIKICNpbmNsdWRlICJFbGVtZW50LmgiCkBAIC0xMzEsOSArMTMyLDExIEBAIHZvaWQgSFRNTENv
bnN0cnVjdGlvblNpdGU6OmV4ZWN1dGVRdWV1ZWRUYXNrcygpCiAgICAgLy8gV2UgbWlnaHQgYmUg
ZGV0YWNoZWQgbm93LgogfQogCi1IVE1MQ29uc3RydWN0aW9uU2l0ZTo6SFRNTENvbnN0cnVjdGlv
blNpdGUoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKQor
SFRNTENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlKERvY3VtZW50KiBkb2N1
bWVudCwgRE9NTW9kaWZpZXIqIGRvbU1vZGlmaWVyLCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURl
cHRoKQogICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAgICAsIG1fYXR0YWNobWVudFJvb3Qo
ZG9jdW1lbnQpCisgICAgLCBtX2RvbU1vZGlmaWVyKGRvbU1vZGlmaWVyKQorICAgICwgbV9vcGVu
RWxlbWVudHMoZG9tTW9kaWZpZXIpCiAgICAgLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
bihBbGxvd1NjcmlwdGluZ0NvbnRlbnQpCiAgICAgLCBtX2lzUGFyc2luZ0ZyYWdtZW50KGZhbHNl
KQogICAgICwgbV9yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50KGZhbHNlKQpAQCAtMTQxLDkg
KzE0NCwxMSBAQCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6SFRNTENvbnN0cnVjdGlvblNpdGUoRG9j
dW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBtYXhpbXVtRAogewogfQogCi1IVE1MQ29uc3RydWN0
aW9uU2l0ZTo6SFRNTENvbnN0cnVjdGlvblNpdGUoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQs
IEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uLCB1bnNpZ25l
ZCBtYXhpbXVtRE9NVHJlZURlcHRoKQorSFRNTENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbiwgRE9NTW9kaWZpZXIqIGRvbU1vZGlmaWVyLCB1
bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKQogICAgIDogbV9kb2N1bWVudChmcmFnbWVudC0+
ZG9jdW1lbnQoKSkKICAgICAsIG1fYXR0YWNobWVudFJvb3QoZnJhZ21lbnQpCisgICAgLCBtX2Rv
bU1vZGlmaWVyKGRvbU1vZGlmaWVyKQorICAgICwgbV9vcGVuRWxlbWVudHMoZG9tTW9kaWZpZXIp
CiAgICAgLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbihzY3JpcHRpbmdQZXJtaXNzaW9u
KQogICAgICwgbV9pc1BhcnNpbmdGcmFnbWVudCh0cnVlKQogICAgICwgbV9yZWRpcmVjdEF0dGFj
aFRvRm9zdGVyUGFyZW50KGZhbHNlKQpAQCAtMTc2LDggKzE4MSw4IEBAIFBhc3NSZWZQdHI8SFRN
TEZvcm1FbGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6dGFrZUZvcm0oKQogdm9pZCBIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVJZk5lZWRl
ZCgpCiB7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQpOwotICAgIGlmIChtX2RvY3VtZW50LT5mcmFt
ZSgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KQotICAgICAgICBtX2RvY3VtZW50LT5mcmFtZSgp
LT5sb2FkZXIoKS0+ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGUoKTsKKyAgICBpZiAo
IW1faXNQYXJzaW5nRnJhZ21lbnQpCisgICAgICAgIG1fZG9tTW9kaWZpZXItPmRpc3BhdGNoRG9j
dW1lbnRFbGVtZW50QXZhaWxhYmxlKG1fZG9jdW1lbnQpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTChBdG9taWNIVE1MVG9r
ZW4qIHRva2VuKQpAQCAtMTg4LDcgKzE5Myw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6
Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiogdG9rCiAg
ICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxIdG1sRWxlbWVudChIVE1MU3RhY2tJdGVtOjpjcmVh
dGUoZWxlbWVudCwgdG9rZW4pKTsKIAogICAgIGV4ZWN1dGVRdWV1ZWRUYXNrcygpOwotICAgIGVs
ZW1lbnQtPmluc2VydGVkQnlQYXJzZXIoKTsKKyAgICBtX2RvbU1vZGlmaWVyLT5zZXRJbnNlcnRl
ZEJ5UGFyc2VyKGVsZW1lbnQuZ2V0KCkpOwogICAgIGRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZh
aWxhYmxlSWZOZWVkZWQoKTsKIH0KIApAQCAtMjEzLDEyICsyMTgsMTIgQEAgdm9pZCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keShBdG9taWNIVE1MVG9r
ZW4qIHRva2VuKQogICAgIGlmIChtX2lzUGFyc2luZ0ZyYWdtZW50KQogICAgICAgICByZXR1cm47
CiAKLSAgICBtZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudCh0b2tlbiwgbV9vcGVu
RWxlbWVudHMuaHRtbEVsZW1lbnQoKSk7CisgICAgbV9kb21Nb2RpZmllci0+bWVyZ2VBdHRyaWJ1
dGVzSW50b0VsZW1lbnQobV9vcGVuRWxlbWVudHMuaHRtbEVsZW1lbnQoKSwgdG9rZW4tPmF0dHJp
YnV0ZXMoKSk7CiB9CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxCb2R5
U3RhcnRUYWdJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBtZXJnZUF0dHJp
YnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudCh0b2tlbiwgbV9vcGVuRWxlbWVudHMuYm9keUVsZW1l
bnQoKSk7CisgICAgbV9kb21Nb2RpZmllci0+bWVyZ2VBdHRyaWJ1dGVzSW50b0VsZW1lbnQobV9v
cGVuRWxlbWVudHMuYm9keUVsZW1lbnQoKSwgdG9rZW4tPmF0dHJpYnV0ZXMoKSk7CiB9CiAKIHZv
aWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUoQXRvbWljSFRNTFRva2VuKiB0
b2tlbikKQEAgLTIzOCwxMSArMjQzLDExIEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydERvY3R5cGUoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKHRva2VuLT5mb3JjZVF1aXJrcygpKQotICAgICAgICBtX2RvY3VtZW50LT5zZXRDb21w
YXRpYmlsaXR5TW9kZShEb2N1bWVudDo6UXVpcmtzTW9kZSk7CisgICAgICAgIG1fZG9tTW9kaWZp
ZXItPnNldENvbXBhdGliaWxpdHlNb2RlKG1fZG9jdW1lbnQsIERvY3VtZW50OjpRdWlya3NNb2Rl
KTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBhY3R1YWxseSBhZGQgdGhlIERv
Y3R5cGUgbm9kZSB0byB0aGUgRE9NLgogICAgICAgICBleGVjdXRlUXVldWVkVGFza3MoKTsKLSAg
ICAgICAgbV9kb2N1bWVudC0+c2V0Q29tcGF0aWJpbGl0eU1vZGVGcm9tRG9jdHlwZSgpOworICAg
ICAgICBtX2RvbU1vZGlmaWVyLT5zZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0eXBlKG1fZG9j
dW1lbnQpOwogICAgIH0KIH0KIApAQCAtMjg2LDcgKzI5MSw3IEBAIHZvaWQgSFRNTENvbnN0cnVj
dGlvblNpdGU6Omluc2VydEhUTUxGb3JtRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBi
b29sIGlzCiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudCh0
b2tlbik7CiAgICAgQVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUoZm9ybVRhZykpOwogICAgIG1f
Zm9ybSA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8SFRNTEZvcm1FbGVtZW50PihlbGVtZW50LnJlbGVh
c2UoKSk7Ci0gICAgbV9mb3JtLT5zZXREZW1vdGVkKGlzRGVtb3RlZCk7CisgICAgbV9kb21Nb2Rp
Zmllci0+c2V0RGVtb3RlZChtX2Zvcm0uZ2V0KCksIGlzRGVtb3RlZCk7CiAgICAgYXR0YWNoTGF0
ZXIoY3VycmVudE5vZGUoKSwgbV9mb3JtKTsKICAgICBtX29wZW5FbGVtZW50cy5wdXNoKEhUTUxT
dGFja0l0ZW06OmNyZWF0ZShtX2Zvcm0sIHRva2VuKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaAppbmRleCA2MDU3MmJkZDg1NjI3
NDQ1Y2JkODY1YTk2NzlkMmZlYmE1ZjZhOGRjLi45OGIyZWU4ZDkwYzk2YzAzMGI4MDdkOTY0ZDMw
YTNkOTdkMDVmNGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
Q29uc3RydWN0aW9uU2l0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxD
b25zdHJ1Y3Rpb25TaXRlLmgKQEAgLTY2LDE0ICs2NiwxNSBAQCBlbnVtIFdoaXRlc3BhY2VNb2Rl
IHsKIAogY2xhc3MgQXRvbWljSFRNTFRva2VuOwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBET01N
b2RpZmllcjsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiAKIGNsYXNz
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIVE1MQ29u
c3RydWN0aW9uU2l0ZSk7CiBwdWJsaWM6Ci0gICAgSFRNTENvbnN0cnVjdGlvblNpdGUoRG9jdW1l
bnQqLCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKTsKLSAgICBIVE1MQ29uc3RydWN0aW9u
U2l0ZShEb2N1bWVudEZyYWdtZW50KiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLCB1bnNp
Z25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKTsKKyAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZShEb2N1
bWVudCosIERPTU1vZGlmaWVyKiwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCk7CisgICAg
SFRNTENvbnN0cnVjdGlvblNpdGUoRG9jdW1lbnRGcmFnbWVudCosIEZyYWdtZW50U2NyaXB0aW5n
UGVybWlzc2lvbiwgRE9NTW9kaWZpZXIqLCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKTsK
ICAgICB+SFRNTENvbnN0cnVjdGlvblNpdGUoKTsKIAogICAgIHZvaWQgZGV0YWNoKCk7CkBAIC0x
NjcsNiArMTY4LDggQEAgcHJpdmF0ZToKICAgICAvLyBhbmQgYSBEb2N1bWVudCBpbiBhbGwgb3Ro
ZXIgY2FzZXMuCiAgICAgQ29udGFpbmVyTm9kZSogbV9hdHRhY2htZW50Um9vdDsKICAgICAKKyAg
ICBET01Nb2RpZmllciogbV9kb21Nb2RpZmllcjsKKwogICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVt
PiBtX2hlYWQ7CiAgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gbV9mb3JtOwogICAgIG11dGFi
bGUgSFRNTEVsZW1lbnRTdGFjayBtX29wZW5FbGVtZW50czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDg4NjQ2ZTRmNTdjZTI0
OTAyNGU5YWU1ZGI3YjU0NjdhYWNlYmFhODguLjllYmI2YjE4OTU2N2IxZWRjMWRlYjVkZjkzY2My
NGY4OTk0MWQzOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxE
b2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERv
Y3VtZW50UGFyc2VyLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkhUTUxEb2N1bWVu
dFBhcnNlci5oIgogCiAjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCisjaW5jbHVk
ZSAiRE9NTW9kaWZpZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBAIC03Miw2ICs3Myw3IEBAIHN0YXRp
YyBIVE1MVG9rZW5pemVyU3RhdGU6OlN0YXRlIHRva2VuaXplclN0YXRlRm9yQ29udGV4dEVsZW1l
bnQoRWxlbWVudCogY29udGV4CiAKIEhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFy
c2VyKEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0RXJyb3JzKQogICAgIDogU2Ny
aXB0YWJsZURvY3VtZW50UGFyc2VyKGRvY3VtZW50KQorICAgICwgbV9kb21Nb2RpZmllcihET01N
b2RpZmllcjo6Y3JlYXRlKCkpCiAgICAgLCBtX3Rva2VuaXplcihIVE1MVG9rZW5pemVyOjpjcmVh
dGUodXNlUHJlSFRNTDVQYXJzZXJRdWlya3MoZG9jdW1lbnQpKSkKICAgICAsIG1fc2NyaXB0UnVu
bmVyKEhUTUxTY3JpcHRSdW5uZXI6OmNyZWF0ZShkb2N1bWVudCwgdGhpcykpCiAgICAgLCBtX3Ry
ZWVCdWlsZGVyKEhUTUxUcmVlQnVpbGRlcjo6Y3JlYXRlKHRoaXMsIGRvY3VtZW50LCByZXBvcnRF
cnJvcnMsIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKGRvY3VtZW50KSwgbWF4aW11bURPTVRyZWVE
ZXB0aChkb2N1bWVudCkpKQpAQCAtODYsNiArODgsNyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6OkhU
TUxEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9y
cwogLy8gbWluaW1pemUgY29kZSBkdXBsaWNhdGlvbiBiZXR3ZWVuIHRoZXNlIGNvbnN0cnVjdG9y
cy4KIEhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21l
bnQqIGZyYWdtZW50LCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQ
ZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCiAgICAgOiBTY3JpcHRhYmxlRG9jdW1lbnRQ
YXJzZXIoZnJhZ21lbnQtPmRvY3VtZW50KCkpCisgICAgLCBtX2RvbU1vZGlmaWVyKERPTU1vZGlm
aWVyOjpjcmVhdGUoKSkKICAgICAsIG1fdG9rZW5pemVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0ZSh1
c2VQcmVIVE1MNVBhcnNlclF1aXJrcyhmcmFnbWVudC0+ZG9jdW1lbnQoKSkpKQogICAgICwgbV90
cmVlQnVpbGRlcihIVE1MVHJlZUJ1aWxkZXI6OmNyZWF0ZSh0aGlzLCBmcmFnbWVudCwgY29udGV4
dEVsZW1lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKGZy
YWdtZW50LT5kb2N1bWVudCgpKSwgbWF4aW11bURPTVRyZWVEZXB0aChmcmFnbWVudC0+ZG9jdW1l
bnQoKSkpKQogICAgICwgbV94c3NBdWRpdG9yKHRoaXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IDRlMjZjNTcyNjdjZmM3YzRkYmU0
ZmJkNjg1ZDk3YmE1MDI5MDIxM2QuLjUwNDg4NzNmMTIwMGUwNzM3N2EyMGNmNmI0YTM0Nzk2Y2Ri
ZWExMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVu
dFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBh
cnNlci5oCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9j
dW1lbnQ7CiBjbGFzcyBEb2N1bWVudEZyYWdtZW50OworY2xhc3MgRE9NTW9kaWZpZXI7CiBjbGFz
cyBIVE1MRG9jdW1lbnQ7CiBjbGFzcyBIVE1MUGFyc2VyU2NoZWR1bGVyOwogY2xhc3MgSFRNTFRv
a2VuaXplcjsKQEAgLTcwLDYgKzcxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHVzZVBy
ZUhUTUw1UGFyc2VyUXVpcmtzKERvY3VtZW50Kik7CiAgICAgc3RhdGljIHVuc2lnbmVkIG1heGlt
dW1ET01UcmVlRGVwdGgoRG9jdW1lbnQqKTsKIAorICAgIERPTU1vZGlmaWVyKiBkb21Nb2RpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1fZG9tTW9kaWZpZXIuZ2V0KCk7IH0KICAgICBIVE1MVG9rZW5p
emVyKiB0b2tlbml6ZXIoKSBjb25zdCB7IHJldHVybiBtX3Rva2VuaXplci5nZXQoKTsgfQogICAg
IFN0cmluZyBzb3VyY2VGb3JUb2tlbihjb25zdCBIVE1MVG9rZW4mKTsKIApAQCAtMTQ0LDYgKzE0
Niw3IEBAIHByaXZhdGU6CiAgICAgLy8gV2UgaG9sZCBtX3Rva2VuIGhlcmUgYmVjYXVzZSBpdCBt
aWdodCBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgSFRNTFRva2VuIG1fdG9rZW47CiAKKyAg
ICBPd25QdHI8RE9NTW9kaWZpZXI+IG1fZG9tTW9kaWZpZXI7CiAgICAgT3duUHRyPEhUTUxUb2tl
bml6ZXI+IG1fdG9rZW5pemVyOwogICAgIE93blB0cjxIVE1MU2NyaXB0UnVubmVyPiBtX3Njcmlw
dFJ1bm5lcjsKICAgICBPd25QdHI8SFRNTFRyZWVCdWlsZGVyPiBtX3RyZWVCdWlsZGVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAppbmRleCA2
MmVkNmY0ZTM5ZDIyOWRlOGI0Yjg2ODE5MzQxMWIxNzgxOTQ5Yzc0Li43MjYxZjAxOWVkYTg0Yjdl
YmI4Mjk4NjEzM2YyMWU4N2I0YTYyMWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50U3RhY2suaCIKIAorI2luY2x1ZGUgIkRPTU1v
ZGlmaWVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTE1MywxMiArMTU0LDE0IEBAIGJvb2wg
SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZDo6aXNBYm92ZShFbGVtZW50UmVjb3JkKiBv
dGhlcikgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUhUTUxFbGVtZW50U3RhY2s6OkhU
TUxFbGVtZW50U3RhY2soKQorSFRNTEVsZW1lbnRTdGFjazo6SFRNTEVsZW1lbnRTdGFjayhET01N
b2RpZmllciogZG9tTW9kaWZpZXIpCiAgICAgOiBtX3Jvb3ROb2RlKDApCiAgICAgLCBtX2hlYWRF
bGVtZW50KDApCiAgICAgLCBtX2JvZHlFbGVtZW50KDApCiAgICAgLCBtX3N0YWNrRGVwdGgoMCkK
KyAgICAsIG1fZG9tTW9kaWZpZXIoZG9tTW9kaWZpZXIpCiB7CisgICAgQVNTRVJUKG1fZG9tTW9k
aWZpZXIpOwogfQogCiBIVE1MRWxlbWVudFN0YWNrOjp+SFRNTEVsZW1lbnRTdGFjaygpCkBAIC0y
MDMsNyArMjA2LDcgQEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwb3BBbGwoKQogICAgIG1fYm9k
eUVsZW1lbnQgPSAwOwogICAgIG1fc3RhY2tEZXB0aCA9IDA7CiAgICAgd2hpbGUgKG1fdG9wKSB7
Ci0gICAgICAgIHRvcE5vZGUoKS0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisgICAgICAgIG1f
ZG9tTW9kaWZpZXItPmZpbmlzaFBhcnNpbmdDaGlsZHJlbih0b3BOb2RlKCkpOwogICAgICAgICBt
X3RvcCA9IG1fdG9wLT5yZWxlYXNlTmV4dCgpOwogICAgIH0KIH0KQEAgLTM3MSw3ICszNzQsNyBA
QCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6Omluc2VydEFib3ZlKFBhc3NSZWZQdHI8SFRNTFN0YWNr
SXRlbT4gaXRlbSwgRWxlbWVudFJlY29yZAogCiAgICAgICAgIG1fc3RhY2tEZXB0aCsrOwogICAg
ICAgICByZWNvcmRBYm92ZS0+c2V0TmV4dChhZG9wdFB0cihuZXcgRWxlbWVudFJlY29yZChpdGVt
LCByZWNvcmRBYm92ZS0+cmVsZWFzZU5leHQoKSkpKTsKLSAgICAgICAgcmVjb3JkQWJvdmUtPm5l
eHQoKS0+ZWxlbWVudCgpLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOworICAgICAgICBtX2RvbU1v
ZGlmaWVyLT5iZWdpblBhcnNpbmdDaGlsZHJlbihyZWNvcmRBYm92ZS0+bmV4dCgpLT5lbGVtZW50
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpA
QCAtNTc0LDcgKzU3Nyw3IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cG9wQ29tbW9uKCkKICAg
ICBBU1NFUlQoIXRvcFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbFRhZykp
OwogICAgIEFTU0VSVCghdG9wU3RhY2tJdGVtKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFk
VGFnKSB8fCAhbV9oZWFkRWxlbWVudCk7CiAgICAgQVNTRVJUKCF0b3BTdGFja0l0ZW0oKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpIHx8ICFtX2JvZHlFbGVtZW50KTsKLSAgICB0b3Ao
KS0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisgICAgbV9kb21Nb2RpZmllci0+ZmluaXNoUGFy
c2luZ0NoaWxkcmVuKHRvcCgpKTsKICAgICBtX3RvcCA9IG1fdG9wLT5yZWxlYXNlTmV4dCgpOwog
CiAgICAgbV9zdGFja0RlcHRoLS07CkBAIC01ODksNyArNTkyLDcgQEAgdm9pZCBIVE1MRWxlbWVu
dFN0YWNrOjpyZW1vdmVOb25Ub3BDb21tb24oRWxlbWVudCogZWxlbWVudCkKICAgICAgICAgaWYg
KHBvcy0+bmV4dCgpLT5lbGVtZW50KCkgPT0gZWxlbWVudCkgewogICAgICAgICAgICAgLy8gRklY
TUU6IElzIGl0IE9LIHRvIGNhbGwgZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKICAgICAgICAgICAg
IC8vIHdoZW4gdGhlIGNoaWxkcmVuIGFyZW4ndCBhY3R1YWxseSBmaW5pc2hlZD8KLSAgICAgICAg
ICAgIGVsZW1lbnQtPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworICAgICAgICAgICAgbV9kb21N
b2RpZmllci0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKGVsZW1lbnQpOwogICAgICAgICAgICAgcG9z
LT5zZXROZXh0KHBvcy0+bmV4dCgpLT5yZWxlYXNlTmV4dCgpKTsKICAgICAgICAgICAgIG1fc3Rh
Y2tEZXB0aC0tOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTEVsZW1lbnRTdGFjay5oCmluZGV4IDYyMGM1YTE5NDNlYzdjMGJlYWI1NzQ4MjQ0
NjZjYzQxZjE3NjRmMDQuLmExZjQ4NDVhNDE4NTQ0OWJjZWUyMmQxMGZlZTk3NThmZTY4ZjYwZmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2su
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmgKQEAg
LTQwLDYgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDb250YWluZXJOb2Rl
OwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKK2NsYXNzIERPTU1vZGlmaWVyOwogY2xhc3MgRWxl
bWVudDsKIGNsYXNzIFF1YWxpZmllZE5hbWU7CiAKQEAgLTQ4LDcgKzQ5LDcgQEAgY2xhc3MgUXVh
bGlmaWVkTmFtZTsKIGNsYXNzIEhUTUxFbGVtZW50U3RhY2sgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEhUTUxFbGVtZW50U3RhY2spOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKLSAgICBIVE1MRWxlbWVudFN0YWNrKCk7CisgICAgSFRNTEVsZW1lbnRTdGFjayhET01Nb2Rp
ZmllciopOwogICAgIH5IVE1MRWxlbWVudFN0YWNrKCk7CiAKICAgICBjbGFzcyBFbGVtZW50UmVj
b3JkIHsKQEAgLTE3OCw2ICsxNzksOCBAQCBwcml2YXRlOgogICAgIEVsZW1lbnQqIG1faGVhZEVs
ZW1lbnQ7CiAgICAgRWxlbWVudCogbV9ib2R5RWxlbWVudDsKICAgICB1bnNpZ25lZCBtX3N0YWNr
RGVwdGg7CisKKyAgICBET01Nb2RpZmllciogbV9kb21Nb2RpZmllcjsKIH07CiAgICAgCiBpbmxp
bmUgYm9vbCBpc0luSFRNTE5hbWVzcGFjZShjb25zdCBIVE1MU3RhY2tJdGVtKiBpdGVtKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5kZXggYTdm
MTQ1MTllZTIzMTVhY2Y1YWNhMThjYjA1NjE5ZmE3OTNjMTQ1Yy4uMDM0MzQxYmNjNWQ0ZWQxNjM5
Mjg4Y2QwZDhmZGFkY2IzZGVjODE4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MVHJlZUJ1aWxkZXIuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiSFRNTFRy
ZWVCdWlsZGVyLmgiCiAKICNpbmNsdWRlICJDb21tZW50LmgiCisjaW5jbHVkZSAiRE9NTW9kaWZp
ZXIuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCkBAIC0zNTAsNyArMzUxLDcgQEAgcHJpdmF0
ZToKIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxEb2N1bWVudFBhcnNlciog
cGFyc2VyLCBIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sLCBib29sIHVzZVByZUhUTUw1UGFy
c2VyUXVpcmtzLCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKQogICAgIDogbV9mcmFtZXNl
dE9rKHRydWUpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQotICAgICwgbV90cmVlKGRvY3Vt
ZW50LCBtYXhpbXVtRE9NVHJlZURlcHRoKQorICAgICwgbV90cmVlKGRvY3VtZW50LCBwYXJzZXIt
PmRvbU1vZGlmaWVyKCksIG1heGltdW1ET01UcmVlRGVwdGgpCiAgICAgLCBtX2luc2VydGlvbk1v
ZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZShJbml0aWFsTW9k
ZSkKICAgICAsIG1fc2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lKGZhbHNlKQpAQCAtMzY2LDcgKzM2
Nyw3IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxEb2N1bWVudFBhcnNl
ciogcGFyc2VyLCBEb2N1bWVudEZyYWdtZW50KiBmCiAgICAgOiBtX2ZyYW1lc2V0T2sodHJ1ZSkK
ICAgICAsIG1fZnJhZ21lbnRDb250ZXh0KGZyYWdtZW50LCBjb250ZXh0RWxlbWVudCwgc2NyaXB0
aW5nUGVybWlzc2lvbikKICAgICAsIG1fZG9jdW1lbnQoZnJhZ21lbnQtPmRvY3VtZW50KCkpCi0g
ICAgLCBtX3RyZWUoZnJhZ21lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24sIG1heGltdW1ET01UcmVl
RGVwdGgpCisgICAgLCBtX3RyZWUoZnJhZ21lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24sIHBhcnNl
ci0+ZG9tTW9kaWZpZXIoKSwgbWF4aW11bURPTVRyZWVEZXB0aCkKICAgICAsIG1faW5zZXJ0aW9u
TW9kZShJbml0aWFsTW9kZSkKICAgICAsIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKEluaXRpYWxN
b2RlKQogICAgICwgbV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUoZmFsc2UpCkBAIC03NjgsOSAr
NzY5LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICB9CiAgICAgICAgIGlmICghbV9mcmFtZXNl
dE9rKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5ib2R5RWxlbWVudCgpLT5yZW1vdmUoZWMp
OwotICAgICAgICBBU1NFUlQoIWVjKTsKKyAgICAgICAgbV9wYXJzZXItPmRvbU1vZGlmaWVyKCkt
PnJlbW92ZUZyb21QYXJlbnQobV90cmVlLm9wZW5FbGVtZW50cygpLT5ib2R5RWxlbWVudCgpKTsK
ICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbChtX3RyZWUub3BlbkVsZW1l
bnRzKCktPmJvZHlFbGVtZW50KCkpOwogICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBv
cEhUTUxCb2R5RWxlbWVudCgpOwogICAgICAgICBBU1NFUlQobV90cmVlLm9wZW5FbGVtZW50cygp
LT50b3AoKSA9PSBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmh0bWxFbGVtZW50KCkpOwpAQCAtMTU3
Niw0MSArMTU3NSwyNSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdl
bmN5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgICAgICBpZiAobGFzdE5vZGUgPT0g
ZnVydGhlc3RCbG9jaykKICAgICAgICAgICAgICAgICBib29rbWFyay5tb3ZlVG9BZnRlcihub2Rl
RW50cnkpOwogICAgICAgICAgICAgLy8gNi42Ci0gICAgICAgICAgICBpZiAoQ29udGFpbmVyTm9k
ZSogcGFyZW50ID0gbGFzdE5vZGUtPmVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpKQotICAgICAgICAg
ICAgICAgIHBhcmVudC0+cGFyc2VyUmVtb3ZlQ2hpbGQobGFzdE5vZGUtPmVsZW1lbnQoKSk7Ci0g
ICAgICAgICAgICBub2RlLT5lbGVtZW50KCktPnBhcnNlckFkZENoaWxkKGxhc3ROb2RlLT5lbGVt
ZW50KCkpOwotICAgICAgICAgICAgaWYgKGxhc3ROb2RlLT5lbGVtZW50KCktPnBhcmVudEVsZW1l
bnQoKS0+YXR0YWNoZWQoKSAmJiAhbGFzdE5vZGUtPmVsZW1lbnQoKS0+YXR0YWNoZWQoKSkKLSAg
ICAgICAgICAgICAgICBsYXN0Tm9kZS0+ZWxlbWVudCgpLT5sYXp5QXR0YWNoKCk7CisgICAgICAg
ICAgICBtX3BhcnNlci0+ZG9tTW9kaWZpZXIoKS0+cmVtb3ZlRnJvbVBhcmVudChsYXN0Tm9kZS0+
ZWxlbWVudCgpKTsKKyAgICAgICAgICAgIG1fcGFyc2VyLT5kb21Nb2RpZmllcigpLT5hZGRDaGls
ZEFuZEF0dGFjaChub2RlLT5lbGVtZW50KCksIGxhc3ROb2RlLT5lbGVtZW50KCkpOwogICAgICAg
ICAgICAgLy8gNi43CiAgICAgICAgICAgICBsYXN0Tm9kZSA9IG5vZGU7CiAgICAgICAgIH0KICAg
ICAgICAgLy8gNwotICAgICAgICBpZiAoQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbGFzdE5vZGUt
PmVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpKQotICAgICAgICAgICAgcGFyZW50LT5wYXJzZXJSZW1v
dmVDaGlsZChsYXN0Tm9kZS0+ZWxlbWVudCgpKTsKKyAgICAgICAgbV9wYXJzZXItPmRvbU1vZGlm
aWVyKCktPnJlbW92ZUZyb21QYXJlbnQobGFzdE5vZGUtPmVsZW1lbnQoKSk7CiAgICAgICAgIGlm
IChjb21tb25BbmNlc3Rvci0+Y2F1c2VzRm9zdGVyUGFyZW50aW5nKCkpCiAgICAgICAgICAgICBt
X3RyZWUuZm9zdGVyUGFyZW50KGxhc3ROb2RlLT5lbGVtZW50KCkpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yLT5ub2RlKCktPnBhcnNlckFkZENoaWxkKGxhc3RO
b2RlLT5lbGVtZW50KCkpOwotICAgICAgICAgICAgQVNTRVJUKGxhc3ROb2RlLT5zdGFja0l0ZW0o
KS0+aXNFbGVtZW50Tm9kZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChsYXN0Tm9kZS0+ZWxlbWVu
dCgpLT5wYXJlbnROb2RlKCkpOwotICAgICAgICAgICAgaWYgKGxhc3ROb2RlLT5lbGVtZW50KCkt
PnBhcmVudE5vZGUoKS0+YXR0YWNoZWQoKSAmJiAhbGFzdE5vZGUtPmVsZW1lbnQoKS0+YXR0YWNo
ZWQoKSkKLSAgICAgICAgICAgICAgICBsYXN0Tm9kZS0+ZWxlbWVudCgpLT5sYXp5QXR0YWNoKCk7
Ci0gICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9wYXJzZXItPmRvbU1vZGlm
aWVyKCktPmFkZENoaWxkQW5kQXR0YWNoKGNvbW1vbkFuY2VzdG9yLT5ub2RlKCksIGxhc3ROb2Rl
LT5lbGVtZW50KCkpOwogICAgICAgICAvLyA4CiAgICAgICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVt
PiBuZXdJdGVtID0gbV90cmVlLmNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tlbihmb3JtYXR0aW5n
RWxlbWVudFJlY29yZC0+c3RhY2tJdGVtKCkuZ2V0KCkpOwogICAgICAgICAvLyA5Ci0gICAgICAg
IG5ld0l0ZW0tPmVsZW1lbnQoKS0+dGFrZUFsbENoaWxkcmVuRnJvbShmdXJ0aGVzdEJsb2NrLT5l
bGVtZW50KCkpOworICAgICAgICBtX3BhcnNlci0+ZG9tTW9kaWZpZXIoKS0+bW92ZUFsbENoaWxk
cmVuVG9OZXdQYXJlbnQobmV3SXRlbS0+ZWxlbWVudCgpLCBmdXJ0aGVzdEJsb2NrLT5lbGVtZW50
KCkpOwogICAgICAgICAvLyAxMAotICAgICAgICBFbGVtZW50KiBmdXJ0aGVzdEJsb2NrRWxlbWVu
dCA9IGZ1cnRoZXN0QmxvY2stPmVsZW1lbnQoKTsKLSAgICAgICAgLy8gRklYTUU6IEFsbCB0aGlz
IGNyZWF0aW9uIC8gcGFyc2VyQWRkQ2hpbGQgLyBhdHRhY2ggYnVzaW5lc3Mgc2hvdWxkCi0gICAg
ICAgIC8vICAgICAgICBiZSBpbiBIVE1MQ29uc3RydWN0aW9uU2l0ZS4gIE15IGd1ZXNzIGlzIHRo
YXQgc3RlcHMgOC0tMTIKLSAgICAgICAgLy8gICAgICAgIHNob3VsZCBhbGwgYmUgaW4gc29tZSBI
VE1MQ29uc3RydWN0aW9uU2l0ZSBmdW5jdGlvbi4KLSAgICAgICAgZnVydGhlc3RCbG9ja0VsZW1l
bnQtPnBhcnNlckFkZENoaWxkKG5ld0l0ZW0tPmVsZW1lbnQoKSk7Ci0gICAgICAgIGlmIChmdXJ0
aGVzdEJsb2NrRWxlbWVudC0+YXR0YWNoZWQoKSAmJiAhbmV3SXRlbS0+ZWxlbWVudCgpLT5hdHRh
Y2hlZCgpKSB7Ci0gICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCBuZXdJdGVtLT5lbGVtZW50KCkg
bWlnaHQgYWxyZWFkeSBiZSBhdHRhY2hlZCBpZiwgZm9yIGV4YW1wbGUsIG9uZSBvZiB0aGUgcmVw
YXJlbnRlZAotICAgICAgICAgICAgLy8gY2hpbGRyZW4gaXMgYSBzdHlsZSBlbGVtZW50LCB3aGlj
aCBhdHRhY2hlcyBpdHNlbGYgYXV0b21hdGljYWxseS4KLSAgICAgICAgICAgIG5ld0l0ZW0tPmVs
ZW1lbnQoKS0+YXR0YWNoKCk7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gTm90aWNlIHRoYXQgbmV3
SXRlbS0+ZWxlbWVudCgpIG1pZ2h0IGFscmVhZHkgYmUgYXR0YWNoZWQgaWYsIGZvciBleGFtcGxl
LCBvbmUgb2YgdGhlIHJlcGFyZW50ZWQKKyAgICAgICAgLy8gY2hpbGRyZW4gaXMgYSBzdHlsZSBl
bGVtZW50LCB3aGljaCBhdHRhY2hlcyBpdHNlbGYgYXV0b21hdGljYWxseS4KKyAgICAgICAgbV9w
YXJzZXItPmRvbU1vZGlmaWVyKCktPmFkZENoaWxkQW5kQXR0YWNoKGZ1cnRoZXN0QmxvY2stPmVs
ZW1lbnQoKSwgbmV3SXRlbS0+ZWxlbWVudCgpLCBmYWxzZSk7CiAgICAgICAgIC8vIDExCiAgICAg
ICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+c3dhcFRvKGZvcm1hdHRpbmdF
bGVtZW50LCBuZXdJdGVtLCBib29rbWFyayk7CiAgICAgICAgIC8vIDEyCkBAIC0yMTI0LDcgKzIx
MDcsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9r
ZW4qIHRva2VuKQogICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nlc3MgPSBtX3RyZWUuY3VycmVu
dEVsZW1lbnQoKTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wKCk7CiAg
ICAgICAgICAgICBpZiAoaXNQYXJzaW5nRnJhZ21lbnQoKSAmJiBtX2ZyYWdtZW50Q29udGV4dC5z
Y3JpcHRpbmdQZXJtaXNzaW9uKCkgPT0gRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50KQotICAgICAg
ICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzLT5yZW1vdmVBbGxDaGlsZHJlbigpOworICAgICAg
ICAgICAgICAgIG1fcGFyc2VyLT5kb21Nb2RpZmllcigpLT5yZW1vdmVBbGxDaGlsZHJlbihtX3Nj
cmlwdFRvUHJvY2Vzcy5nZXQoKSk7CiAgICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKG1fb3Jp
Z2luYWxJbnNlcnRpb25Nb2RlKTsKIAogICAgICAgICAgICAgLy8gVGhpcyB0b2tlbiB3aWxsIG5v
dCBoYXZlIGJlZW4gY3JlYXRlZCBieSB0aGUgdG9rZW5pemVyIGlmIGEKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0ltbWVkaWF0ZURPTU1vZGlmaWVyU3RyYXRlZ3kuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0ltbWVkaWF0ZURPTU1vZGlmaWVyU3RyYXRlZ3ku
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iODdiYTk0Y2YxYjM4NzQ1NDIwMzFjODQ4NDFjZTM5ZTk1ZGM2ZTRjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSW1tZWRpYXRlRE9N
TW9kaWZpZXJTdHJhdGVneS5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEdPT0dMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW1tZWRpYXRlRE9N
TW9kaWZpZXJTdHJhdGVneV9oCisjZGVmaW5lIEltbWVkaWF0ZURPTU1vZGlmaWVyU3RyYXRlZ3lf
aAorCisjaW5jbHVkZSAiRE9NTW9kaWZpZXJFeGVjdXRvci5oIgorI2luY2x1ZGUgIkRPTU1vZGlm
aWVyU3RyYXRlZ3kuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEhUTUxIdG1sRWxlbWVudDsKKworY2xhc3MgSW1tZWRpYXRlRE9N
TW9kaWZpZXJTdHJhdGVneSA6IHB1YmxpYyBET01Nb2RpZmllclN0cmF0ZWd5IHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShJbW1lZGlhdGVET01Nb2RpZmllclN0cmF0ZWd5KTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbW1l
ZGlhdGVET01Nb2RpZmllclN0cmF0ZWd5PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBJbW1lZGlhdGVET01Nb2RpZmllclN0cmF0ZWd5KCkpOworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhcnNpbmdDaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsK
KyAgICAgICAgbV9leGVjdXRvci5iZWdpblBhcnNpbmdDaGlsZHJlbihub2RlKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoUGFyc2luZ0NoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAg
eworICAgICAgICBtX2V4ZWN1dG9yLmZpbmlzaFBhcnNpbmdDaGlsZHJlbihub2RlKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRBbmRBdHRhY2goQ29udGFpbmVyTm9kZSogcGFy
ZW50LCBOb2RlKiBjaGlsZCwgYm9vbCBsYXp5QXR0YWNoKQorICAgIHsKKyAgICAgICAgbV9leGVj
dXRvci5hZGRDaGlsZEFuZEF0dGFjaChwYXJlbnQsIGNoaWxkLCBsYXp5QXR0YWNoKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRnJvbVBhcmVudChOb2RlKiBub2RlKQorICAgIHsK
KyAgICAgICAgbV9leGVjdXRvci5yZW1vdmVGcm9tUGFyZW50KG5vZGUpOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBtb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVudChDb250YWluZXJOb2RlKiBu
ZXdQYXJlbnQsIENvbnRhaW5lck5vZGUqIG9sZFBhcmVudCkKKyAgICB7CisgICAgICAgIG1fZXhl
Y3V0b3IubW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnQobmV3UGFyZW50LCBvbGRQYXJlbnQpOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxDaGlsZHJlbihDb250YWluZXJOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgbV9leGVjdXRvci5yZW1vdmVBbGxDaGlsZHJlbihub2Rl
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXR0cmlidXRlKEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIG1fZXhlY3V0b3Iuc2V0QXR0cmlidXRlKGVsZW1lbnQsIGF0
dHJpYnV0ZSwgdmFsdWUpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRJbnNlcnRlZEJ5
UGFyc2VyKEhUTUxIdG1sRWxlbWVudCogZWxlbWVudCkKKyAgICB7CisgICAgICAgIG1fZXhlY3V0
b3Iuc2V0SW5zZXJ0ZWRCeVBhcnNlcihlbGVtZW50KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGUoRG9jdW1lbnQqIGRvY3VtZW50KQor
ICAgIHsKKyAgICAgICAgbV9leGVjdXRvci5kaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJs
ZShkb2N1bWVudCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHNldERlbW90ZWQoSFRNTEZv
cm1FbGVtZW50KiBmb3JtLCBib29sIGlzRGVtb3RlZCkKKyAgICB7CisgICAgICAgIG1fZXhlY3V0
b3Iuc2V0RGVtb3RlZChmb3JtLCBpc0RlbW90ZWQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBtZXJnZUF0dHJpYnV0ZXNJbnRvRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBWZWN0
b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIG1fZXhlY3V0b3IubWVy
Z2VBdHRyaWJ1dGVzSW50b0VsZW1lbnQoZWxlbWVudCwgYXR0cmlidXRlcyk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHNldENvbXBhdGliaWxpdHlNb2RlKERvY3VtZW50KiBkb2N1bWVudCwg
RG9jdW1lbnQ6OkNvbXBhdGliaWxpdHlNb2RlIG1vZGUpCisgICAgeworICAgICAgICBtX2V4ZWN1
dG9yLnNldENvbXBhdGliaWxpdHlNb2RlKGRvY3VtZW50LCBtb2RlKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29tcGF0aWJpbGl0eU1vZGVGcm9tRG9jdHlwZShEb2N1bWVudCogZG9j
dW1lbnQpCisgICAgeworICAgICAgICBtX2V4ZWN1dG9yLnNldENvbXBhdGliaWxpdHlNb2RlRnJv
bURvY3R5cGUoZG9jdW1lbnQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJbW1lZGlhdGVET01N
b2RpZmllclN0cmF0ZWd5KCkgeyB9CisKKyAgICBET01Nb2RpZmllckV4ZWN1dG9yIG1fZXhlY3V0
b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBJbW1lZGlhdGVE
T01Nb2RpZmllclN0cmF0ZWd5X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157329</attachid>
            <date>2012-08-08 16:31:06 -0700</date>
            <delta_ts>2012-08-08 17:19:11 -0700</delta_ts>
            <desc>Patch (not for landing)</desc>
            <filename>bug-93455-20120809083033.patch</filename>
            <type>text/plain</type>
            <size>38073</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTg0NGNlOThiY2JlMzQ2
YTEwM2VkZmZkY2ZlMjZmNDg0NmFmODJlNi4uMjBhNzY2NmJjYjE2MzdiNjQzMjg1NWJjNDNkNzg3
ZmNjZWJlYzFkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNSBAQAorMjAxMi0wOC0wOCAgS3dh
bmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIEV4dHJhY3QgRE9N
IG1vZGlmaWNhdGlvbnMgaW4gdGhlIEhUTUw1IHBhcnNlciBpbnRvIEhUTUxQYXJzZXJET01Nb2Rp
Zmllci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkz
NDU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBleHRyYWN0cyBET00gbW9kaWZpY2F0aW9ucyBpbiB0aGUgcGFyc2VyIGludG8gSFRN
TFBhcnNlckRPTU1vZGlmaWVyCisgICAgICAgIGFuZCBtYWtlcyB0aGUgdHJlZSBidWlsZGVyIGFu
ZCB0aGUgZWxlbWVudCBzdGFjayB1c2UgaXQuIEhUTUxQYXJzZXJET01Nb2RpZmllciBjYW4KKyAg
ICAgICAgY2hhbmdlIGl0cyBiZWhhdmlvciBkeW5hbWljYWxseSBieSBjaGFuZ2luZyBpdHMgc3Ry
YXRlZ3kuIElmIG5vIHN0cmF0ZWd5CisgICAgICAgIGlzIHByb3ZpZGVkLCBIVE1MUGFyc2VyRE9N
TW9kaWZpZXIgY2FsbHMgRE9NIG9wZXJhdGlvbnMgc3luY2hyb25vdXNseS4KKworICAgICAgICBU
aGlzIHJlZmFjdG9yaW5nIGlzIGEgcHJlcGFyYXRpb24gZm9yIHNwZWN1bGF0aXZlIHBhcnNpbmcu
IFRvIHJ1biB0aGUKKyAgICAgICAgcGFyc2VyIGluIHNwZWN1bGF0aW9uIG1vZGUsIHdlIG11c3Qg
YmUgYWJsZSB0byBxdWV1ZSB1cCBET00gbW9kaWZpY2F0aW9ucy4KKyAgICAgICAgV2UgY2FuIGRv
IHRoaXMgYnkgYWRkaW5nIERlZmVycmVkSFRNTFBhcnNlckRPTU1vZGlmaWVyU3RhdGVneSB3aGlj
aCBxdWV1ZXMgdXAgRE9NCisgICAgICAgIG9wZXJhdGlvbnMgYW5kIGV4ZWN1dGVzIHRoZW0gbGF0
ZXIuCisKKyAgICAgICAgQm90aCBIVE1MUGFyc2VyRE9NTW9kaWZpZXIgYW5kIEhUTUxQYXJzZXJE
T01Nb2RpZmllclN0cmF0ZWd5IHdpbGwgZXZlbnR1YWxseSBwZXJmb3JtCisgICAgICAgIHRoZSBz
YW1lIERPTSBvcGVyYXRpb25zLiBTbyBJIGFkZGVkIEhUTUxQYXJzZXJET01Nb2RpZmllckV4ZWN1
dG9yIHdoaWNoIHBlcmZvcm1zIHRoZQorICAgICAgICBhY3R1YWwgRE9NIG9wZXJhdGlvbnMuIEEg
SFRNTFBhcnNlckRPTU1vZGlmaWVyU3RyYXRlZ3kgY2xhc3Mgc2hvdWxkIGRlbGVnYXRlIHRvCisg
ICAgICAgIEhUTUxQYXJzZXJET01Nb2RpZmllckV4ZWN1dG9yIHRvIHJlbW92ZSBjb2RlIGR1cGxp
Y2F0aW9uLgorCisgICAgICAgIENoYW5nZWQgSFRNTERvY3VtZW50UGFyc2VyIHRvIG93biBhIEhU
TUxQYXJzZXJET01Nb2RpZmllciBpbnN0YW5jZSBhbmQgcGFzcyBpdAorICAgICAgICB0byBIVE1M
VHJlZUJ1aWxkZXIsIEhUTUxDb25zdHJ1Y3Rpb25TaXRlIGFuZCBIVE1MRWxlbWVudFN0YWNrLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggaXMgbm90IGNvbXBsZXRlLiBIVE1MQ29uc3RydWN0aW9uU2l0
ZSBzdGlsbCBoYXMgRE9NIG1vZGlmaWNhdGlvbnMKKyAgICAgICAgaW5jbHVkaW5nIGVsZW1lbnQg
Y3JlYXRpb24uIEkgd2lsbCBtb3ZlIHRoZSByZW1haW5pbmcgRE9NIG1vZGlmaWNhdGlvbnMgaW50
bworICAgICAgICBIVE1MUGFyc2VyRE9NTW9kaWZpZXIgaW4gYSBmb2xsb3ctdXAgcGF0Y2guCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzOyByZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJs
ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9k
eSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0RG9jdHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEZv
cm1FbGVtZW50KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5o
OgorICAgICAgICAoSFRNTENvbnN0cnVjdGlvblNpdGUpOgorICAgICAgICAqIGh0bWwvcGFyc2Vy
L0hUTUxEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQ
YXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERv
Y3VtZW50UGFyc2VyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxEb2N1bWVudFBhcnNlcjo6ZG9tTW9kaWZpZXIpOgorICAgICAgICAoSFRNTERvY3VtZW50UGFy
c2VyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OkhUTUxFbGVtZW50U3RhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6cG9wQWxsKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxFbGVtZW50U3RhY2s6Omluc2VydEFib3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxF
bGVtZW50U3RhY2s6OnBvcENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0
YWNrOjpyZW1vdmVOb25Ub3BDb21tb24pOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxFbGVt
ZW50U3RhY2suaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSFRNTEVsZW1lbnRTdGFj
ayk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU1vZGlmaWVyLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIVE1MUGFyc2VyRE9NTW9kaWZpZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU1vZGlmaWVyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU1vZGlmaWVyOjpzZXRTdHJhdGVneSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTW9kaWZpZXI6OmNsZWFyU3RyYXRlZ3kpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU1vZGlmaWVyOjpiZWdpblBhcnNpbmdDaGlsZHJlbik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTW9kaWZpZXI6OmZpbmlzaFBhcnNpbmdD
aGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTW9kaWZpZXI6OmFkZENo
aWxkQW5kQXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01Nb2RpZmllcjo6
cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTW9kaWZp
ZXI6Om1vdmVBbGxDaGlsZHJlblRvTmV3UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
YXJzZXJET01Nb2RpZmllcjo6cmVtb3ZlQWxsQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFBhcnNlckRPTU1vZGlmaWVyOjpzZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFBhcnNlckRPTU1vZGlmaWVyOjpzZXRJbnNlcnRlZEJ5UGFyc2VyKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxQYXJzZXJET01Nb2RpZmllcjo6ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFp
bGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU1vZGlmaWVyOjpzZXREZW1v
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01Nb2RpZmllcjo6bWVyZ2VBdHRy
aWJ1dGVzSW50b0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU1vZGlm
aWVyOjpzZXRDb21wYXRpYmlsaXR5TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2Vy
RE9NTW9kaWZpZXI6OnNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBhcnNlckRPTU1vZGlmaWVyOjpIVE1MUGFyc2VyRE9NTW9kaWZpZXIpOgor
ICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJET01Nb2RpZmllckV4ZWN1dG9yLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChIVE1MUGFyc2VyRE9NTW9kaWZpZXJF
eGVjdXRvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTW9kaWZpZXJFeGVjdXRv
cjo6SFRNTFBhcnNlckRPTU1vZGlmaWVyRXhlY3V0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFBhcnNlckRPTU1vZGlmaWVyRXhlY3V0b3I6OmJlZ2luUGFyc2luZ0NoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01Nb2RpZmllckV4ZWN1dG9yOjpmaW5pc2hQYXJzaW5n
Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU1vZGlmaWVyRXhlY3V0
b3I6OmFkZENoaWxkQW5kQXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01N
b2RpZmllckV4ZWN1dG9yOjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxQYXJzZXJET01Nb2RpZmllckV4ZWN1dG9yOjptb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTW9kaWZpZXJFeGVjdXRvcjo6cmVtb3Zl
QWxsQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU1vZGlmaWVyRXhl
Y3V0b3I6OnNldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTW9k
aWZpZXJFeGVjdXRvcjo6c2V0SW5zZXJ0ZWRCeVBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGFyc2VyRE9NTW9kaWZpZXJFeGVjdXRvcjo6ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFp
bGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU1vZGlmaWVyRXhlY3V0b3I6
OnNldERlbW90ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU1vZGlmaWVyRXhl
Y3V0b3I6Om1lcmdlQXR0cmlidXRlc0ludG9FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxQYXJzZXJET01Nb2RpZmllckV4ZWN1dG9yOjpzZXRDb21wYXRpYmlsaXR5TW9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTW9kaWZpZXJFeGVjdXRvcjo6c2V0Q29tcGF0aWJp
bGl0eU1vZGVGcm9tRG9jdHlwZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRP
TU1vZGlmaWVyU3RyYXRlZ3kuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KEhUTUxQYXJzZXJET01Nb2RpZmllclN0cmF0ZWd5KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpI
VE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzU3RhcnRUYWdGb3JJbkJvZHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVy
OjpjYWxsVGhlQWRvcHRpb25BZ2VuY3kpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzRW5kVGFnKToKKwogMjAxMi0wOC0wNiAgRGF2aWQgUmV2ZW1hbiAgPHJldmVt
YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gUmVmYWN0b3IgQ0NUZXh0dXJl
VXBkYXRlciBpbnRvIENDVGV4dHVyZVVwZGF0ZXIgYW5kIENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xs
ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0
aW9uU2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9u
U2l0ZS5jcHAKaW5kZXggZmM5ZDdjNjY0OGEyYzRhNzU1NDhmZTk2ZmZlNzlmNzQ5ZTJiMDJlNi4u
MTVlYjE3MzE3YmUxMWUwZDA2ZTU1NTI1MGU3MWQyZjFjYmMyMjlkMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAtMzcs
NiArMzcsNyBAQAogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxI
dG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQYXJz
ZXJET01Nb2RpZmllci5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRl
ICJIVE1MU2NyaXB0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxTdGFja0l0ZW0uaCIKQEAgLTEz
MSw5ICsxMzIsMTEgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6ZXhlY3V0ZVF1ZXVlZFRh
c2tzKCkKICAgICAvLyBXZSBtaWdodCBiZSBkZXRhY2hlZCBub3cuCiB9CiAKLUhUTUxDb25zdHJ1
Y3Rpb25TaXRlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZShEb2N1bWVudCogZG9jdW1lbnQsIHVuc2ln
bmVkIG1heGltdW1ET01UcmVlRGVwdGgpCitIVE1MQ29uc3RydWN0aW9uU2l0ZTo6SFRNTENvbnN0
cnVjdGlvblNpdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MUGFyc2VyRE9NTW9kaWZpZXIqIGRv
bU1vZGlmaWVyLCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKQogICAgIDogbV9kb2N1bWVu
dChkb2N1bWVudCkKICAgICAsIG1fYXR0YWNobWVudFJvb3QoZG9jdW1lbnQpCisgICAgLCBtX2Rv
bU1vZGlmaWVyKGRvbU1vZGlmaWVyKQorICAgICwgbV9vcGVuRWxlbWVudHMoZG9tTW9kaWZpZXIp
CiAgICAgLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbihBbGxvd1NjcmlwdGluZ0NvbnRl
bnQpCiAgICAgLCBtX2lzUGFyc2luZ0ZyYWdtZW50KGZhbHNlKQogICAgICwgbV9yZWRpcmVjdEF0
dGFjaFRvRm9zdGVyUGFyZW50KGZhbHNlKQpAQCAtMTQxLDkgKzE0NCwxMSBAQCBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6SFRNTENvbnN0cnVjdGlvblNpdGUoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNp
Z25lZCBtYXhpbXVtRAogewogfQogCi1IVE1MQ29uc3RydWN0aW9uU2l0ZTo6SFRNTENvbnN0cnVj
dGlvblNpdGUoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVy
bWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uLCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRo
KQorSFRNTENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlKERvY3VtZW50RnJh
Z21lbnQqIGZyYWdtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVy
bWlzc2lvbiwgSFRNTFBhcnNlckRPTU1vZGlmaWVyKiBkb21Nb2RpZmllciwgdW5zaWduZWQgbWF4
aW11bURPTVRyZWVEZXB0aCkKICAgICA6IG1fZG9jdW1lbnQoZnJhZ21lbnQtPmRvY3VtZW50KCkp
CiAgICAgLCBtX2F0dGFjaG1lbnRSb290KGZyYWdtZW50KQorICAgICwgbV9kb21Nb2RpZmllcihk
b21Nb2RpZmllcikKKyAgICAsIG1fb3BlbkVsZW1lbnRzKGRvbU1vZGlmaWVyKQogICAgICwgbV9m
cmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKICAgICAsIG1f
aXNQYXJzaW5nRnJhZ21lbnQodHJ1ZSkKICAgICAsIG1fcmVkaXJlY3RBdHRhY2hUb0Zvc3RlclBh
cmVudChmYWxzZSkKQEAgLTE3Niw4ICsxODEsOCBAQCBQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVu
dD4gSFRNTENvbnN0cnVjdGlvblNpdGU6OnRha2VGb3JtKCkKIHZvaWQgSFRNTENvbnN0cnVjdGlv
blNpdGU6OmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlSWZOZWVkZWQoKQogewogICAg
IEFTU0VSVChtX2RvY3VtZW50KTsKLSAgICBpZiAobV9kb2N1bWVudC0+ZnJhbWUoKSAmJiAhbV9p
c1BhcnNpbmdGcmFnbWVudCkKLSAgICAgICAgbV9kb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCkt
PmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7CisgICAgaWYgKCFtX2lzUGFyc2lu
Z0ZyYWdtZW50KQorICAgICAgICBtX2RvbU1vZGlmaWVyLT5kaXNwYXRjaERvY3VtZW50RWxlbWVu
dEF2YWlsYWJsZShtX2RvY3VtZW50KTsKIH0KIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwoQXRvbWljSFRNTFRva2VuKiB0b2tlbikK
QEAgLTE4OCw3ICsxOTMsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1M
SHRtbFN0YXJ0VGFnQmVmb3JlSFRNTChBdG9taWNIVE1MVG9rZW4qIHRvawogICAgIG1fb3BlbkVs
ZW1lbnRzLnB1c2hIVE1MSHRtbEVsZW1lbnQoSFRNTFN0YWNrSXRlbTo6Y3JlYXRlKGVsZW1lbnQs
IHRva2VuKSk7CiAKICAgICBleGVjdXRlUXVldWVkVGFza3MoKTsKLSAgICBlbGVtZW50LT5pbnNl
cnRlZEJ5UGFyc2VyKCk7CisgICAgbV9kb21Nb2RpZmllci0+c2V0SW5zZXJ0ZWRCeVBhcnNlcihl
bGVtZW50LmdldCgpKTsKICAgICBkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZUlmTmVl
ZGVkKCk7CiB9CiAKQEAgLTIxMywxMiArMjE4LDEyIEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkoQXRvbWljSFRNTFRva2VuKiB0b2tlbikK
ICAgICBpZiAobV9pc1BhcnNpbmdGcmFnbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWVy
Z2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnQodG9rZW4sIG1fb3BlbkVsZW1lbnRzLmh0
bWxFbGVtZW50KCkpOworICAgIG1fZG9tTW9kaWZpZXItPm1lcmdlQXR0cmlidXRlc0ludG9FbGVt
ZW50KG1fb3BlbkVsZW1lbnRzLmh0bWxFbGVtZW50KCksIHRva2VuLT5hdHRyaWJ1dGVzKCkpOwog
fQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5C
b2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgbWVyZ2VBdHRyaWJ1dGVzRnJvbVRv
a2VuSW50b0VsZW1lbnQodG9rZW4sIG1fb3BlbkVsZW1lbnRzLmJvZHlFbGVtZW50KCkpOworICAg
IG1fZG9tTW9kaWZpZXItPm1lcmdlQXR0cmlidXRlc0ludG9FbGVtZW50KG1fb3BlbkVsZW1lbnRz
LmJvZHlFbGVtZW50KCksIHRva2VuLT5hdHRyaWJ1dGVzKCkpOwogfQogCiB2b2lkIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjppbnNlcnREb2N0eXBlKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCkBAIC0y
MzgsMTEgKzI0MywxMSBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnREb2N0eXBl
KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICh0b2tl
bi0+Zm9yY2VRdWlya3MoKSkKLSAgICAgICAgbV9kb2N1bWVudC0+c2V0Q29tcGF0aWJpbGl0eU1v
ZGUoRG9jdW1lbnQ6OlF1aXJrc01vZGUpOworICAgICAgICBtX2RvbU1vZGlmaWVyLT5zZXRDb21w
YXRpYmlsaXR5TW9kZShtX2RvY3VtZW50LCBEb2N1bWVudDo6UXVpcmtzTW9kZSk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWN0dWFsbHkgYWRkIHRoZSBEb2N0eXBlIG5vZGUg
dG8gdGhlIERPTS4KICAgICAgICAgZXhlY3V0ZVF1ZXVlZFRhc2tzKCk7Ci0gICAgICAgIG1fZG9j
dW1lbnQtPnNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUoKTsKKyAgICAgICAgbV9kb21N
b2RpZmllci0+c2V0Q29tcGF0aWJpbGl0eU1vZGVGcm9tRG9jdHlwZShtX2RvY3VtZW50KTsKICAg
ICB9CiB9CiAKQEAgLTI4Niw3ICsyOTEsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpp
bnNlcnRIVE1MRm9ybUVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbiwgYm9vbCBpcwogICAg
IFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwogICAg
IEFTU0VSVChlbGVtZW50LT5oYXNUYWdOYW1lKGZvcm1UYWcpKTsKICAgICBtX2Zvcm0gPSBzdGF0
aWNfcG9pbnRlcl9jYXN0PEhUTUxGb3JtRWxlbWVudD4oZWxlbWVudC5yZWxlYXNlKCkpOwotICAg
IG1fZm9ybS0+c2V0RGVtb3RlZChpc0RlbW90ZWQpOworICAgIG1fZG9tTW9kaWZpZXItPnNldERl
bW90ZWQobV9mb3JtLmdldCgpLCBpc0RlbW90ZWQpOwogICAgIGF0dGFjaExhdGVyKGN1cnJlbnRO
b2RlKCksIG1fZm9ybSk7CiAgICAgbV9vcGVuRWxlbWVudHMucHVzaChIVE1MU3RhY2tJdGVtOjpj
cmVhdGUobV9mb3JtLCB0b2tlbikpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmgKaW5kZXggNjA1NzJiZGQ4NTYyNzQ0NWNiZDg2NWE5
Njc5ZDJmZWJhNWY2YThkYy4uYzE3OTUxNGE3ZjAwOWQ1MTg5YjI4ODEyMzk2NDk1ZGQ0OGY2ZmFk
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlv
blNpdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9u
U2l0ZS5oCkBAIC02NiwxNCArNjYsMTUgQEAgZW51bSBXaGl0ZXNwYWNlTW9kZSB7CiAKIGNsYXNz
IEF0b21pY0hUTUxUb2tlbjsKIGNsYXNzIERvY3VtZW50OworY2xhc3MgSFRNTFBhcnNlckRPTU1v
ZGlmaWVyOwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKIAogY2xhc3Mg
SFRNTENvbnN0cnVjdGlvblNpdGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhUTUxDb25z
dHJ1Y3Rpb25TaXRlKTsKIHB1YmxpYzoKLSAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZShEb2N1bWVu
dCosIHVuc2lnbmVkIG1heGltdW1ET01UcmVlRGVwdGgpOwotICAgIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlKERvY3VtZW50RnJhZ21lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24sIHVuc2ln
bmVkIG1heGltdW1ET01UcmVlRGVwdGgpOworICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlKERvY3Vt
ZW50KiwgSFRNTFBhcnNlckRPTU1vZGlmaWVyKiwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0
aCk7CisgICAgSFRNTENvbnN0cnVjdGlvblNpdGUoRG9jdW1lbnRGcmFnbWVudCosIEZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbiwgSFRNTFBhcnNlckRPTU1vZGlmaWVyKiwgdW5zaWduZWQgbWF4
aW11bURPTVRyZWVEZXB0aCk7CiAgICAgfkhUTUxDb25zdHJ1Y3Rpb25TaXRlKCk7CiAKICAgICB2
b2lkIGRldGFjaCgpOwpAQCAtMTY3LDYgKzE2OCw4IEBAIHByaXZhdGU6CiAgICAgLy8gYW5kIGEg
RG9jdW1lbnQgaW4gYWxsIG90aGVyIGNhc2VzLgogICAgIENvbnRhaW5lck5vZGUqIG1fYXR0YWNo
bWVudFJvb3Q7CiAgICAgCisgICAgSFRNTFBhcnNlckRPTU1vZGlmaWVyKiBtX2RvbU1vZGlmaWVy
OworCiAgICAgUmVmUHRyPEhUTUxTdGFja0l0ZW0+IG1faGVhZDsKICAgICBSZWZQdHI8SFRNTEZv
cm1FbGVtZW50PiBtX2Zvcm07CiAgICAgbXV0YWJsZSBIVE1MRWxlbWVudFN0YWNrIG1fb3BlbkVs
ZW1lbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3Vt
ZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBh
cnNlci5jcHAKaW5kZXggODg2NDZlNGY1N2NlMjQ5MDI0ZTlhZTVkYjdiNTQ2N2FhY2ViYWE4OC4u
N2UxZTgwYTU0YzJhZjgzYzJkZTM1NDc2NDM3NWMwZTEyMmMwYTgzMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlckRPTU1vZGlmaWVyLmgiCiAjaW5j
bHVkZSAiSFRNTFBhcnNlclNjaGVkdWxlci5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIK
ICNpbmNsdWRlICJIVE1MUHJlbG9hZFNjYW5uZXIuaCIKQEAgLTcyLDYgKzczLDcgQEAgc3RhdGlj
IEhUTUxUb2tlbml6ZXJTdGF0ZTo6U3RhdGUgdG9rZW5pemVyU3RhdGVGb3JDb250ZXh0RWxlbWVu
dChFbGVtZW50KiBjb250ZXgKIAogSFRNTERvY3VtZW50UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJz
ZXIoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCByZXBvcnRFcnJvcnMpCiAgICAgOiBTY3Jp
cHRhYmxlRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCisgICAgLCBtX2RvbU1vZGlmaWVyKEhUTUxQ
YXJzZXJET01Nb2RpZmllcjo6Y3JlYXRlKCkpCiAgICAgLCBtX3Rva2VuaXplcihIVE1MVG9rZW5p
emVyOjpjcmVhdGUodXNlUHJlSFRNTDVQYXJzZXJRdWlya3MoZG9jdW1lbnQpKSkKICAgICAsIG1f
c2NyaXB0UnVubmVyKEhUTUxTY3JpcHRSdW5uZXI6OmNyZWF0ZShkb2N1bWVudCwgdGhpcykpCiAg
ICAgLCBtX3RyZWVCdWlsZGVyKEhUTUxUcmVlQnVpbGRlcjo6Y3JlYXRlKHRoaXMsIGRvY3VtZW50
LCByZXBvcnRFcnJvcnMsIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKGRvY3VtZW50KSwgbWF4aW11
bURPTVRyZWVEZXB0aChkb2N1bWVudCkpKQpAQCAtODYsNiArODgsNyBAQCBIVE1MRG9jdW1lbnRQ
YXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHJl
cG9ydEVycm9ycwogLy8gbWluaW1pemUgY29kZSBkdXBsaWNhdGlvbiBiZXR3ZWVuIHRoZXNlIGNv
bnN0cnVjdG9ycy4KIEhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2VyKERvY3Vt
ZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCiAgICAgOiBTY3JpcHRhYmxl
RG9jdW1lbnRQYXJzZXIoZnJhZ21lbnQtPmRvY3VtZW50KCkpCisgICAgLCBtX2RvbU1vZGlmaWVy
KEhUTUxQYXJzZXJET01Nb2RpZmllcjo6Y3JlYXRlKCkpCiAgICAgLCBtX3Rva2VuaXplcihIVE1M
VG9rZW5pemVyOjpjcmVhdGUodXNlUHJlSFRNTDVQYXJzZXJRdWlya3MoZnJhZ21lbnQtPmRvY3Vt
ZW50KCkpKSkKICAgICAsIG1fdHJlZUJ1aWxkZXIoSFRNTFRyZWVCdWlsZGVyOjpjcmVhdGUodGhp
cywgZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uLCB1c2VQcmVI
VE1MNVBhcnNlclF1aXJrcyhmcmFnbWVudC0+ZG9jdW1lbnQoKSksIG1heGltdW1ET01UcmVlRGVw
dGgoZnJhZ21lbnQtPmRvY3VtZW50KCkpKSkKICAgICAsIG1feHNzQXVkaXRvcih0aGlzKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCA0
ZTI2YzU3MjY3Y2ZjN2M0ZGJlNGZiZDY4NWQ5N2JhNTAyOTAyMTNkLi45ZjY4N2I3YTYyNWQyNTk5
MTk1YWQzZmFjMDEyYWY4Y2JjNzNiYzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtNDMsNiArNDMsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBI
VE1MRG9jdW1lbnQ7CitjbGFzcyBIVE1MUGFyc2VyRE9NTW9kaWZpZXI7CiBjbGFzcyBIVE1MUGFy
c2VyU2NoZWR1bGVyOwogY2xhc3MgSFRNTFRva2VuaXplcjsKIGNsYXNzIEhUTUxTY3JpcHRSdW5u
ZXI7CkBAIC03MCw2ICs3MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCB1c2VQcmVIVE1M
NVBhcnNlclF1aXJrcyhEb2N1bWVudCopOwogICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhpbXVtRE9N
VHJlZURlcHRoKERvY3VtZW50Kik7CiAKKyAgICBIVE1MUGFyc2VyRE9NTW9kaWZpZXIqIGRvbU1v
ZGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9kb21Nb2RpZmllci5nZXQoKTsgfQogICAgIEhUTUxU
b2tlbml6ZXIqIHRva2VuaXplcigpIGNvbnN0IHsgcmV0dXJuIG1fdG9rZW5pemVyLmdldCgpOyB9
CiAgICAgU3RyaW5nIHNvdXJjZUZvclRva2VuKGNvbnN0IEhUTUxUb2tlbiYpOwogCkBAIC0xNDQs
NiArMTQ2LDcgQEAgcHJpdmF0ZToKICAgICAvLyBXZSBob2xkIG1fdG9rZW4gaGVyZSBiZWNhdXNl
IGl0IG1pZ2h0IGJlIHBhcnRpYWxseSBjb21wbGV0ZS4KICAgICBIVE1MVG9rZW4gbV90b2tlbjsK
IAorICAgIE93blB0cjxIVE1MUGFyc2VyRE9NTW9kaWZpZXI+IG1fZG9tTW9kaWZpZXI7CiAgICAg
T3duUHRyPEhUTUxUb2tlbml6ZXI+IG1fdG9rZW5pemVyOwogICAgIE93blB0cjxIVE1MU2NyaXB0
UnVubmVyPiBtX3NjcmlwdFJ1bm5lcjsKICAgICBPd25QdHI8SFRNTFRyZWVCdWlsZGVyPiBtX3Ry
ZWVCdWlsZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVs
ZW1lbnRTdGFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0
YWNrLmNwcAppbmRleCA2MmVkNmY0ZTM5ZDIyOWRlOGI0Yjg2ODE5MzQxMWIxNzgxOTQ5Yzc0Li43
OWJiYjhmYzE1MjlkZDI1ZjAzM2Q0OTNhOWM2MzI5YTcxYjllZDRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmNwcApAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlckRPTU1vZGlmaWVyLmgi
CiAjaW5jbHVkZSAiTWF0aE1MTmFtZXMuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0xNTMsMTIgKzE1NCwxNCBAQCBib29sIEhUTUxFbGVt
ZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQ6OmlzQWJvdmUoRWxlbWVudFJlY29yZCogb3RoZXIpIGNv
bnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1IVE1MRWxlbWVudFN0YWNrOjpIVE1MRWxlbWVu
dFN0YWNrKCkKK0hUTUxFbGVtZW50U3RhY2s6OkhUTUxFbGVtZW50U3RhY2soSFRNTFBhcnNlckRP
TU1vZGlmaWVyKiBkb21Nb2RpZmllcikKICAgICA6IG1fcm9vdE5vZGUoMCkKICAgICAsIG1faGVh
ZEVsZW1lbnQoMCkKICAgICAsIG1fYm9keUVsZW1lbnQoMCkKICAgICAsIG1fc3RhY2tEZXB0aCgw
KQorICAgICwgbV9kb21Nb2RpZmllcihkb21Nb2RpZmllcikKIHsKKyAgICBBU1NFUlQobV9kb21N
b2RpZmllcik7CiB9CiAKIEhUTUxFbGVtZW50U3RhY2s6On5IVE1MRWxlbWVudFN0YWNrKCkKQEAg
LTIwMyw3ICsyMDYsNyBAQCB2b2lkIEhUTUxFbGVtZW50U3RhY2s6OnBvcEFsbCgpCiAgICAgbV9i
b2R5RWxlbWVudCA9IDA7CiAgICAgbV9zdGFja0RlcHRoID0gMDsKICAgICB3aGlsZSAobV90b3Ap
IHsKLSAgICAgICAgdG9wTm9kZSgpLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKyAgICAgICAg
bV9kb21Nb2RpZmllci0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKHRvcE5vZGUoKSk7CiAgICAgICAg
IG1fdG9wID0gbV90b3AtPnJlbGVhc2VOZXh0KCk7CiAgICAgfQogfQpAQCAtMzcxLDcgKzM3NCw3
IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6aW5zZXJ0QWJvdmUoUGFzc1JlZlB0cjxIVE1MU3Rh
Y2tJdGVtPiBpdGVtLCBFbGVtZW50UmVjb3JkCiAKICAgICAgICAgbV9zdGFja0RlcHRoKys7CiAg
ICAgICAgIHJlY29yZEFib3ZlLT5zZXROZXh0KGFkb3B0UHRyKG5ldyBFbGVtZW50UmVjb3JkKGl0
ZW0sIHJlY29yZEFib3ZlLT5yZWxlYXNlTmV4dCgpKSkpOwotICAgICAgICByZWNvcmRBYm92ZS0+
bmV4dCgpLT5lbGVtZW50KCktPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7CisgICAgICAgIG1fZG9t
TW9kaWZpZXItPmJlZ2luUGFyc2luZ0NoaWxkcmVuKHJlY29yZEFib3ZlLT5uZXh0KCktPmVsZW1l
bnQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC01NzQsNyArNTc3LDcgQEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwb3BDb21tb24oKQog
ICAgIEFTU0VSVCghdG9wU3RhY2tJdGVtKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFn
KSk7CiAgICAgQVNTRVJUKCF0b3BTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omhl
YWRUYWcpIHx8ICFtX2hlYWRFbGVtZW50KTsKICAgICBBU1NFUlQoIXRvcFN0YWNrSXRlbSgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykgfHwgIW1fYm9keUVsZW1lbnQpOwotICAgIHRv
cCgpLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKyAgICBtX2RvbU1vZGlmaWVyLT5maW5pc2hQ
YXJzaW5nQ2hpbGRyZW4odG9wKCkpOwogICAgIG1fdG9wID0gbV90b3AtPnJlbGVhc2VOZXh0KCk7
CiAKICAgICBtX3N0YWNrRGVwdGgtLTsKQEAgLTU4OSw3ICs1OTIsNyBAQCB2b2lkIEhUTUxFbGVt
ZW50U3RhY2s6OnJlbW92ZU5vblRvcENvbW1vbihFbGVtZW50KiBlbGVtZW50KQogICAgICAgICBp
ZiAocG9zLT5uZXh0KCktPmVsZW1lbnQoKSA9PSBlbGVtZW50KSB7CiAgICAgICAgICAgICAvLyBG
SVhNRTogSXMgaXQgT0sgdG8gY2FsbCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogICAgICAgICAg
ICAgLy8gd2hlbiB0aGUgY2hpbGRyZW4gYXJlbid0IGFjdHVhbGx5IGZpbmlzaGVkPwotICAgICAg
ICAgICAgZWxlbWVudC0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisgICAgICAgICAgICBtX2Rv
bU1vZGlmaWVyLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oZWxlbWVudCk7CiAgICAgICAgICAgICBw
b3MtPnNldE5leHQocG9zLT5uZXh0KCktPnJlbGVhc2VOZXh0KCkpOwogICAgICAgICAgICAgbV9z
dGFja0RlcHRoLS07CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmgKaW5kZXggNjIwYzVhMTk0M2VjN2MwYmVhYjU3NDgy
NDQ2NmNjNDFmMTc2NGYwNC4uZmRiYmNiNTRiOTQ1YjEwODk5YzE1YTA0ZDljNDI4NGE4ODM0YmY3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFj
ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suaApA
QCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb250YWluZXJOb2Rl
OwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIGNsYXNzIEVsZW1lbnQ7CitjbGFzcyBIVE1MUGFy
c2VyRE9NTW9kaWZpZXI7CiBjbGFzcyBRdWFsaWZpZWROYW1lOwogCiAvLyBOT1RFOiBUaGUgSFRN
TDUgc3BlYyB1c2VzIGEgYmFja3dhcmRzIChncm93cyBkb3dud2FyZCkgc3RhY2suICBXZSdyZSB1
c2luZwpAQCAtNDgsNyArNDksNyBAQCBjbGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgSFRNTEVs
ZW1lbnRTdGFjayB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSFRNTEVsZW1lbnRTdGFjayk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEhUTUxFbGVtZW50U3RhY2so
KTsKKyAgICBIVE1MRWxlbWVudFN0YWNrKEhUTUxQYXJzZXJET01Nb2RpZmllciopOwogICAgIH5I
VE1MRWxlbWVudFN0YWNrKCk7CiAKICAgICBjbGFzcyBFbGVtZW50UmVjb3JkIHsKQEAgLTE3OCw2
ICsxNzksOCBAQCBwcml2YXRlOgogICAgIEVsZW1lbnQqIG1faGVhZEVsZW1lbnQ7CiAgICAgRWxl
bWVudCogbV9ib2R5RWxlbWVudDsKICAgICB1bnNpZ25lZCBtX3N0YWNrRGVwdGg7CisKKyAgICBI
VE1MUGFyc2VyRE9NTW9kaWZpZXIqIG1fZG9tTW9kaWZpZXI7CiB9OwogICAgIAogaW5saW5lIGJv
b2wgaXNJbkhUTUxOYW1lc3BhY2UoY29uc3QgSFRNTFN0YWNrSXRlbSogaXRlbSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJET01Nb2RpZmllci5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU1vZGlmaWVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMmE3YjdkNWYxOGQ3MDI4OWJiZWI3ZjBmNWI2ZDRjNDMwMDliNGEyOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJET01Nb2RpZmll
ci5oCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkg
MTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEdPT0dMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSFRNTFBhcnNlckRPTU1vZGlmaWVyX2gKKyNk
ZWZpbmUgSFRNTFBhcnNlckRPTU1vZGlmaWVyX2gKKworI2luY2x1ZGUgIkhUTUxQYXJzZXJET01N
b2RpZmllckV4ZWN1dG9yLmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlckRPTU1vZGlmaWVyU3RyYXRl
Z3kuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENvbnRhaW5lck5vZGU7CitjbGFzcyBIVE1MUGFyc2VyRE9NTW9kaWZpZXJTdHJh
dGVneTsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBIVE1MSHRtbEVsZW1lbnQ7CitjbGFzcyBOb2Rl
OworCitjbGFzcyBIVE1MUGFyc2VyRE9NTW9kaWZpZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEhUTUxQYXJzZXJET01Nb2RpZmllcik7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8SFRNTFBhcnNlckRPTU1vZGlmaWVyPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgSFRNTFBhcnNlckRPTU1vZGlmaWVyKCkpOyB9
CisKKyAgICB2b2lkIHNldFN0cmF0ZWd5KFBhc3NPd25QdHI8SFRNTFBhcnNlckRPTU1vZGlmaWVy
U3RyYXRlZ3k+IHN0cmF0ZWd5KQorICAgIHsKKyAgICAgICAgbV9zdHJhdGVneSA9IHN0cmF0ZWd5
OworICAgIH0KKworICAgIHZvaWQgY2xlYXJTdHJhdGVneSgpCisgICAgeworICAgICAgICBtX3N0
cmF0ZWd5LmNsZWFyKCk7CisgICAgfQorCisgICAgdm9pZCBiZWdpblBhcnNpbmdDaGlsZHJlbihO
b2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUpOworICAgICAgICBpZiAobV9z
dHJhdGVneSkgeworICAgICAgICAgICAgbV9zdHJhdGVneS0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4o
bm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9leGVjdXRv
ci5iZWdpblBhcnNpbmdDaGlsZHJlbihub2RlKTsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaFBh
cnNpbmdDaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUpOwor
ICAgICAgICBpZiAobV9zdHJhdGVneSkgeworICAgICAgICAgICAgbV9zdHJhdGVneS0+ZmluaXNo
UGFyc2luZ0NoaWxkcmVuKG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIG1fZXhlY3V0b3IuZmluaXNoUGFyc2luZ0NoaWxkcmVuKG5vZGUpOworICAgIH0KKwor
ICAgIHZvaWQgYWRkQ2hpbGRBbmRBdHRhY2goQ29udGFpbmVyTm9kZSogcGFyZW50LCBOb2RlKiBj
aGlsZCwgYm9vbCBsYXp5QXR0YWNoID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChwYXJl
bnQpOworICAgICAgICBBU1NFUlQoY2hpbGQpOworICAgICAgICBpZiAobV9zdHJhdGVneSkgewor
ICAgICAgICAgICAgbV9zdHJhdGVneS0+YWRkQ2hpbGRBbmRBdHRhY2gocGFyZW50LCBjaGlsZCwg
bGF6eUF0dGFjaCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9l
eGVjdXRvci5hZGRDaGlsZEFuZEF0dGFjaChwYXJlbnQsIGNoaWxkLCBsYXp5QXR0YWNoKTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgaWYgKG1fc3RyYXRlZ3kpIHsKKyAgICAgICAgICAg
IG1fc3RyYXRlZ3ktPnJlbW92ZUZyb21QYXJlbnQobm9kZSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgbV9leGVjdXRvci5yZW1vdmVGcm9tUGFyZW50KG5vZGUpOwor
ICAgIH0KKworICAgIHZvaWQgbW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnQoQ29udGFpbmVyTm9k
ZSogbmV3UGFyZW50LCBDb250YWluZXJOb2RlKiBvbGRQYXJlbnQpCisgICAgeworICAgICAgICBB
U1NFUlQobmV3UGFyZW50KTsKKyAgICAgICAgQVNTRVJUKG9sZFBhcmVudCk7CisgICAgICAgIGlm
IChtX3N0cmF0ZWd5KSB7CisgICAgICAgICAgICBtX3N0cmF0ZWd5LT5tb3ZlQWxsQ2hpbGRyZW5U
b05ld1BhcmVudChuZXdQYXJlbnQsIG9sZFBhcmVudCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgbV9leGVjdXRvci5tb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVudChu
ZXdQYXJlbnQsIG9sZFBhcmVudCk7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVBbGxDaGlsZHJl
bihDb250YWluZXJOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUpOworICAg
ICAgICBpZiAobV9zdHJhdGVneSkgeworICAgICAgICAgICAgbV9zdHJhdGVneS0+cmVtb3ZlQWxs
Q2hpbGRyZW4obm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
bV9leGVjdXRvci5yZW1vdmVBbGxDaGlsZHJlbihub2RlKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dEF0dHJpYnV0ZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1
dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoZWxl
bWVudCk7CisgICAgICAgIGlmIChtX3N0cmF0ZWd5KSB7CisgICAgICAgICAgICBtX3N0cmF0ZWd5
LT5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9leGVjdXRvci5zZXRBdHRyaWJ1dGUoZWxlbWVu
dCwgYXR0cmlidXRlLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRJbnNlcnRlZEJ5UGFy
c2VyKEhUTUxIdG1sRWxlbWVudCogZWxlbWVudCkKKyAgICB7CisgICAgICAgIEFTU0VSVChlbGVt
ZW50KTsKKyAgICAgICAgaWYgKG1fc3RyYXRlZ3kpIHsKKyAgICAgICAgICAgIG1fc3RyYXRlZ3kt
PnNldEluc2VydGVkQnlQYXJzZXIoZWxlbWVudCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgbV9leGVjdXRvci5zZXRJbnNlcnRlZEJ5UGFyc2VyKGVsZW1lbnQpOwor
ICAgIH0KKworICAgIHZvaWQgZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGUoRG9jdW1l
bnQqIGRvY3VtZW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICAgICAg
aWYgKG1fc3RyYXRlZ3kpIHsKKyAgICAgICAgICAgIG1fc3RyYXRlZ3ktPmRpc3BhdGNoRG9jdW1l
bnRFbGVtZW50QXZhaWxhYmxlKGRvY3VtZW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBtX2V4ZWN1dG9yLmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxl
KGRvY3VtZW50KTsKKyAgICB9CisKKyAgICB2b2lkIHNldERlbW90ZWQoSFRNTEZvcm1FbGVtZW50
KiBmb3JtLCBib29sIGlzRGVtb3RlZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChmb3JtKTsKKyAg
ICAgICAgaWYgKG1fc3RyYXRlZ3kpIHsKKyAgICAgICAgICAgIG1fc3RyYXRlZ3ktPnNldERlbW90
ZWQoZm9ybSwgaXNEZW1vdGVkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBtX2V4ZWN1dG9yLnNldERlbW90ZWQoZm9ybSwgaXNEZW1vdGVkKTsKKyAgICB9CisKKyAg
ICB2b2lkIG1lcmdlQXR0cmlidXRlc0ludG9FbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzKQorICAgIHsKKyAgICAgICAgaWYgKGF0dHJp
YnV0ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVChl
bGVtZW50KTsKKyAgICAgICAgaWYgKG1fc3RyYXRlZ3kpIHsKKyAgICAgICAgICAgIG1fc3RyYXRl
Z3ktPm1lcmdlQXR0cmlidXRlc0ludG9FbGVtZW50KGVsZW1lbnQsIGF0dHJpYnV0ZXMpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fZXhlY3V0b3IubWVyZ2VBdHRy
aWJ1dGVzSW50b0VsZW1lbnQoZWxlbWVudCwgYXR0cmlidXRlcyk7CisgICAgfQorCisgICAgdm9p
ZCBzZXRDb21wYXRpYmlsaXR5TW9kZShEb2N1bWVudCogZG9jdW1lbnQsIERvY3VtZW50OjpDb21w
YXRpYmlsaXR5TW9kZSBtb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAg
ICAgICAgaWYgKG1fc3RyYXRlZ3kpIHsKKyAgICAgICAgICAgIG1fc3RyYXRlZ3ktPnNldENvbXBh
dGliaWxpdHlNb2RlKGRvY3VtZW50LCBtb2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBtX2V4ZWN1dG9yLnNldENvbXBhdGliaWxpdHlNb2RlKGRvY3VtZW50LCBt
b2RlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUo
RG9jdW1lbnQqIGRvY3VtZW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAg
ICAgICAgaWYgKG1fc3RyYXRlZ3kpIHsKKyAgICAgICAgICAgIG1fc3RyYXRlZ3ktPnNldENvbXBh
dGliaWxpdHlNb2RlRnJvbURvY3R5cGUoZG9jdW1lbnQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIG1fZXhlY3V0b3Iuc2V0Q29tcGF0aWJpbGl0eU1vZGVGcm9tRG9j
dHlwZShkb2N1bWVudCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEhUTUxQYXJzZXJET01Nb2Rp
ZmllcigpIHsgfQorCisgICAgT3duUHRyPEhUTUxQYXJzZXJET01Nb2RpZmllclN0cmF0ZWd5PiBt
X3N0cmF0ZWd5OworCisgICAgSFRNTFBhcnNlckRPTU1vZGlmaWVyRXhlY3V0b3IgbV9leGVjdXRv
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhUTUxQYXJzZXJE
T01Nb2RpZmllcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
UGFyc2VyRE9NTW9kaWZpZXJFeGVjdXRvci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFBhcnNlckRPTU1vZGlmaWVyRXhlY3V0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzQyZTU2MmQ1MmMw
ZDVmYWNlOTFkN2QwYTYxOTM0YTMwZjU1ZDFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU1vZGlmaWVyRXhlY3V0b3IuaApAQCAtMCww
ICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgR09PR0xFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBH
T09HTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEhUTUxQYXJzZXJET01Nb2RpZmllckV4ZWN1dG9yX2gKKyNkZWZp
bmUgSFRNTFBhcnNlckRPTU1vZGlmaWVyRXhlY3V0b3JfaAorCisjaW5jbHVkZSAiRWxlbWVudC5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTFBhcnNlckRPTU1vZGlmaWVyRXhlY3V0
b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhUTUxQYXJzZXJET01Nb2RpZmllckV4ZWN1
dG9yKTsKK3B1YmxpYzoKKyAgICBIVE1MUGFyc2VyRE9NTW9kaWZpZXJFeGVjdXRvcigpIHsgfQor
CisgICAgdm9pZCBiZWdpblBhcnNpbmdDaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAg
ICAgbm9kZS0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKTsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlz
aFBhcnNpbmdDaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS0+ZmluaXNo
UGFyc2luZ0NoaWxkcmVuKCk7CisgICAgfQorCisgICAgdm9pZCBhZGRDaGlsZEFuZEF0dGFjaChD
b250YWluZXJOb2RlKiBwYXJlbnQsIE5vZGUqIGNoaWxkLCBib29sIGxhenlBdHRhY2ggPSB0cnVl
KQorICAgIHsKKyAgICAgICAgcGFyZW50LT5wYXJzZXJBZGRDaGlsZChjaGlsZCk7CisgICAgICAg
IGlmIChwYXJlbnQtPmF0dGFjaGVkKCkgJiYgIWNoaWxkLT5hdHRhY2hlZCgpKSB7CisgICAgICAg
ICAgICBpZiAobGF6eUF0dGFjaCkKKyAgICAgICAgICAgICAgICBjaGlsZC0+bGF6eUF0dGFjaCgp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNoaWxkLT5hdHRhY2goKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcmVtb3ZlRnJvbVBhcmVudChOb2RlKiBub2RlKQor
ICAgIHsKKyAgICAgICAgaWYgKENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5v
ZGUoKSkKKyAgICAgICAgICAgIHBhcmVudC0+cGFyc2VyUmVtb3ZlQ2hpbGQobm9kZSk7CisgICAg
fQorCisgICAgdm9pZCBtb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVudChDb250YWluZXJOb2RlKiBu
ZXdQYXJlbnQsIENvbnRhaW5lck5vZGUqIG9sZFBhcmVudCkKKyAgICB7CisgICAgICAgIG5ld1Bh
cmVudC0+dGFrZUFsbENoaWxkcmVuRnJvbShvbGRQYXJlbnQpOworICAgIH0KKworICAgIHZvaWQg
cmVtb3ZlQWxsQ2hpbGRyZW4oQ29udGFpbmVyTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIG5v
ZGUtPnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgfQorCisgICAgdm9pZCBzZXRBdHRyaWJ1dGUo
RWxlbWVudCogZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRl
KGF0dHJpYnV0ZSwgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0SW5zZXJ0ZWRCeVBhcnNl
cihIVE1MSHRtbEVsZW1lbnQqIGVsZW1lbnQpCisgICAgeworICAgICAgICBlbGVtZW50LT5pbnNl
cnRlZEJ5UGFyc2VyKCk7CisgICAgfQorCisgICAgdm9pZCBkaXNwYXRjaERvY3VtZW50RWxlbWVu
dEF2YWlsYWJsZShEb2N1bWVudCogZG9jdW1lbnQpCisgICAgeworICAgICAgICBpZiAoZG9jdW1l
bnQtPmZyYW1lKCkpCisgICAgICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRp
c3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7CisgICAgfQorCisgICAgdm9pZCBzZXRE
ZW1vdGVkKEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCBpc0RlbW90ZWQpCisgICAgeworICAg
ICAgICBmb3JtLT5zZXREZW1vdGVkKGlzRGVtb3RlZCk7CisgICAgfQorCisgICAgdm9pZCBtZXJn
ZUF0dHJpYnV0ZXNJbnRvRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBWZWN0b3I8QXR0
cmlidXRlPiYgYXR0cmlidXRlcykKKyAgICB7CisgICAgICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KiBlbGVtZW50QXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPm11dGFibGVBdHRyaWJ1dGVEYXRhKCk7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gYXR0cmlidXRl
cy5hdChpKTsKKyAgICAgICAgICAgIGlmICghZWxlbWVudEF0dHJpYnV0ZURhdGEtPmdldEF0dHJp
YnV0ZUl0ZW0oYXR0cmlidXRlLm5hbWUoKSkpCisgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0
QXR0cmlidXRlKGF0dHJpYnV0ZS5uYW1lKCksIGF0dHJpYnV0ZS52YWx1ZSgpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgc2V0Q29tcGF0aWJpbGl0eU1vZGUoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBEb2N1bWVudDo6Q29tcGF0aWJpbGl0eU1vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIGRv
Y3VtZW50LT5zZXRDb21wYXRpYmlsaXR5TW9kZShtb2RlKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIHsK
KyAgICAgICAgZG9jdW1lbnQtPnNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUoKTsKKyAg
ICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBIVE1MUGFyc2Vy
RE9NTW9kaWZpZXJFeGVjdXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MUGFyc2VyRE9NTW9kaWZpZXJTdHJhdGVneS5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFBhcnNlckRPTU1vZGlmaWVyU3RyYXRlZ3kuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTIz
ZWNjMjQ2NWExMzM5MGRmZTQ2ZjQ0NWFiMGNhYjk4YjM0MmNhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU1vZGlmaWVyU3RyYXRlZ3ku
aApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAw
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEdPT0dMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSFRNTFBhcnNlckRPTU1vZGlmaWVyU3RyYXRlZ3lf
aAorI2RlZmluZSBIVE1MUGFyc2VyRE9NTW9kaWZpZXJTdHJhdGVneV9oCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
b250YWluZXJOb2RlOworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEhUTUxIdG1sRWxlbWVudDsKK2Ns
YXNzIE5vZGU7CitjbGFzcyBRdWFsaWZpZWROYW1lOworCitjbGFzcyBIVE1MUGFyc2VyRE9NTW9k
aWZpZXJTdHJhdGVneSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGJlZ2luUGFyc2luZ0No
aWxkcmVuKE5vZGUqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdDaGlsZHJl
bihOb2RlKikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQW5kQXR0YWNoKENvbnRh
aW5lck5vZGUqIHBhcmVudCwgTm9kZSogY2hpbGQsIGJvb2wgbGF6eUF0dGFjaCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tUGFyZW50KE5vZGUqKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIG1vdmVBbGxDaGlsZHJlblRvTmV3UGFyZW50KENvbnRhaW5lck5vZGUqIG5ld1BhcmVudCwg
Q29udGFpbmVyTm9kZSogb2xkUGFyZW50KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFs
bENoaWxkcmVuKENvbnRhaW5lck5vZGUqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEF0dHJp
YnV0ZShFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHZhbHVlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5zZXJ0ZWRCeVBh
cnNlcihIVE1MSHRtbEVsZW1lbnQqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRG9j
dW1lbnRFbGVtZW50QXZhaWxhYmxlKERvY3VtZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHNldERl
bW90ZWQoSFRNTEZvcm1FbGVtZW50KiwgYm9vbCBpc0RlbW90ZWQpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgbWVyZ2VBdHRyaWJ1dGVzSW50b0VsZW1lbnQoRWxlbWVudCosIGNvbnN0IFZlY3RvcjxB
dHRyaWJ1dGU+JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb21wYXRpYmlsaXR5TW9kZShE
b2N1bWVudCosIERvY3VtZW50OjpDb21wYXRpYmlsaXR5TW9kZSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0eXBlKERvY3VtZW50KikgPSAwOworCit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBIVE1MUGFyc2VyRE9NTW9k
aWZpZXJTdHJhdGVneV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVC
dWlsZGVyLmNwcAppbmRleCBhN2YxNDUxOWVlMjMxNWFjZjVhY2ExOGNiMDU2MTlmYTc5M2MxNDVj
Li5kZGQwNzlhZWNmZjIwNDUyYzI3NTRjOThjZjk0NzRlMzQ2ZGJjYzJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTM4LDYgKzM4LDcg
QEAKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSHRtbEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGFyc2VyRE9NTW9k
aWZpZXIuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFNj
cmlwdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU3RhY2tJdGVtLmgiCkBAIC0zNTAsNyArMzUx
LDcgQEAgcHJpdmF0ZToKIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxEb2N1
bWVudFBhcnNlciogcGFyc2VyLCBIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29sLCBib29sIHVz
ZVByZUhUTUw1UGFyc2VyUXVpcmtzLCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKQogICAg
IDogbV9mcmFtZXNldE9rKHRydWUpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQotICAgICwg
bV90cmVlKGRvY3VtZW50LCBtYXhpbXVtRE9NVHJlZURlcHRoKQorICAgICwgbV90cmVlKGRvY3Vt
ZW50LCBwYXJzZXItPmRvbU1vZGlmaWVyKCksIG1heGltdW1ET01UcmVlRGVwdGgpCiAgICAgLCBt
X2luc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBtX29yaWdpbmFsSW5zZXJ0aW9uTW9k
ZShJbml0aWFsTW9kZSkKICAgICAsIG1fc2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lKGZhbHNlKQpA
QCAtMzY2LDcgKzM2Nyw3IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxE
b2N1bWVudFBhcnNlciogcGFyc2VyLCBEb2N1bWVudEZyYWdtZW50KiBmCiAgICAgOiBtX2ZyYW1l
c2V0T2sodHJ1ZSkKICAgICAsIG1fZnJhZ21lbnRDb250ZXh0KGZyYWdtZW50LCBjb250ZXh0RWxl
bWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbikKICAgICAsIG1fZG9jdW1lbnQoZnJhZ21lbnQtPmRv
Y3VtZW50KCkpCi0gICAgLCBtX3RyZWUoZnJhZ21lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24sIG1h
eGltdW1ET01UcmVlRGVwdGgpCisgICAgLCBtX3RyZWUoZnJhZ21lbnQsIHNjcmlwdGluZ1Blcm1p
c3Npb24sIHBhcnNlci0+ZG9tTW9kaWZpZXIoKSwgbWF4aW11bURPTVRyZWVEZXB0aCkKICAgICAs
IG1faW5zZXJ0aW9uTW9kZShJbml0aWFsTW9kZSkKICAgICAsIG1fb3JpZ2luYWxJbnNlcnRpb25N
b2RlKEluaXRpYWxNb2RlKQogICAgICwgbV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUoZmFsc2Up
CkBAIC03NjgsOSArNzY5LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRh
Z0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICB9CiAgICAgICAgIGlm
ICghbV9mcmFtZXNldE9rKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5ib2R5RWxlbWVudCgp
LT5yZW1vdmUoZWMpOwotICAgICAgICBBU1NFUlQoIWVjKTsKKyAgICAgICAgbV9wYXJzZXItPmRv
bU1vZGlmaWVyKCktPnJlbW92ZUZyb21QYXJlbnQobV90cmVlLm9wZW5FbGVtZW50cygpLT5ib2R5
RWxlbWVudCgpKTsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbChtX3Ry
ZWUub3BlbkVsZW1lbnRzKCktPmJvZHlFbGVtZW50KCkpOwogICAgICAgICBtX3RyZWUub3BlbkVs
ZW1lbnRzKCktPnBvcEhUTUxCb2R5RWxlbWVudCgpOwogICAgICAgICBBU1NFUlQobV90cmVlLm9w
ZW5FbGVtZW50cygpLT50b3AoKSA9PSBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmh0bWxFbGVtZW50
KCkpOwpAQCAtMTU3Niw0MSArMTU3NSwyNSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRo
ZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAgICAgICBpZiAo
bGFzdE5vZGUgPT0gZnVydGhlc3RCbG9jaykKICAgICAgICAgICAgICAgICBib29rbWFyay5tb3Zl
VG9BZnRlcihub2RlRW50cnkpOwogICAgICAgICAgICAgLy8gNi42Ci0gICAgICAgICAgICBpZiAo
Q29udGFpbmVyTm9kZSogcGFyZW50ID0gbGFzdE5vZGUtPmVsZW1lbnQoKS0+cGFyZW50Tm9kZSgp
KQotICAgICAgICAgICAgICAgIHBhcmVudC0+cGFyc2VyUmVtb3ZlQ2hpbGQobGFzdE5vZGUtPmVs
ZW1lbnQoKSk7Ci0gICAgICAgICAgICBub2RlLT5lbGVtZW50KCktPnBhcnNlckFkZENoaWxkKGxh
c3ROb2RlLT5lbGVtZW50KCkpOwotICAgICAgICAgICAgaWYgKGxhc3ROb2RlLT5lbGVtZW50KCkt
PnBhcmVudEVsZW1lbnQoKS0+YXR0YWNoZWQoKSAmJiAhbGFzdE5vZGUtPmVsZW1lbnQoKS0+YXR0
YWNoZWQoKSkKLSAgICAgICAgICAgICAgICBsYXN0Tm9kZS0+ZWxlbWVudCgpLT5sYXp5QXR0YWNo
KCk7CisgICAgICAgICAgICBtX3BhcnNlci0+ZG9tTW9kaWZpZXIoKS0+cmVtb3ZlRnJvbVBhcmVu
dChsYXN0Tm9kZS0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAgIG1fcGFyc2VyLT5kb21Nb2RpZmll
cigpLT5hZGRDaGlsZEFuZEF0dGFjaChub2RlLT5lbGVtZW50KCksIGxhc3ROb2RlLT5lbGVtZW50
KCkpOwogICAgICAgICAgICAgLy8gNi43CiAgICAgICAgICAgICBsYXN0Tm9kZSA9IG5vZGU7CiAg
ICAgICAgIH0KICAgICAgICAgLy8gNwotICAgICAgICBpZiAoQ29udGFpbmVyTm9kZSogcGFyZW50
ID0gbGFzdE5vZGUtPmVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpKQotICAgICAgICAgICAgcGFyZW50
LT5wYXJzZXJSZW1vdmVDaGlsZChsYXN0Tm9kZS0+ZWxlbWVudCgpKTsKKyAgICAgICAgbV9wYXJz
ZXItPmRvbU1vZGlmaWVyKCktPnJlbW92ZUZyb21QYXJlbnQobGFzdE5vZGUtPmVsZW1lbnQoKSk7
CiAgICAgICAgIGlmIChjb21tb25BbmNlc3Rvci0+Y2F1c2VzRm9zdGVyUGFyZW50aW5nKCkpCiAg
ICAgICAgICAgICBtX3RyZWUuZm9zdGVyUGFyZW50KGxhc3ROb2RlLT5lbGVtZW50KCkpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yLT5ub2RlKCktPnBhcnNlckFk
ZENoaWxkKGxhc3ROb2RlLT5lbGVtZW50KCkpOwotICAgICAgICAgICAgQVNTRVJUKGxhc3ROb2Rl
LT5zdGFja0l0ZW0oKS0+aXNFbGVtZW50Tm9kZSgpKTsKLSAgICAgICAgICAgIEFTU0VSVChsYXN0
Tm9kZS0+ZWxlbWVudCgpLT5wYXJlbnROb2RlKCkpOwotICAgICAgICAgICAgaWYgKGxhc3ROb2Rl
LT5lbGVtZW50KCktPnBhcmVudE5vZGUoKS0+YXR0YWNoZWQoKSAmJiAhbGFzdE5vZGUtPmVsZW1l
bnQoKS0+YXR0YWNoZWQoKSkKLSAgICAgICAgICAgICAgICBsYXN0Tm9kZS0+ZWxlbWVudCgpLT5s
YXp5QXR0YWNoKCk7Ci0gICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9wYXJz
ZXItPmRvbU1vZGlmaWVyKCktPmFkZENoaWxkQW5kQXR0YWNoKGNvbW1vbkFuY2VzdG9yLT5ub2Rl
KCksIGxhc3ROb2RlLT5lbGVtZW50KCkpOwogICAgICAgICAvLyA4CiAgICAgICAgIFJlZlB0cjxI
VE1MU3RhY2tJdGVtPiBuZXdJdGVtID0gbV90cmVlLmNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tl
bihmb3JtYXR0aW5nRWxlbWVudFJlY29yZC0+c3RhY2tJdGVtKCkuZ2V0KCkpOwogICAgICAgICAv
LyA5Ci0gICAgICAgIG5ld0l0ZW0tPmVsZW1lbnQoKS0+dGFrZUFsbENoaWxkcmVuRnJvbShmdXJ0
aGVzdEJsb2NrLT5lbGVtZW50KCkpOworICAgICAgICBtX3BhcnNlci0+ZG9tTW9kaWZpZXIoKS0+
bW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnQobmV3SXRlbS0+ZWxlbWVudCgpLCBmdXJ0aGVzdEJs
b2NrLT5lbGVtZW50KCkpOwogICAgICAgICAvLyAxMAotICAgICAgICBFbGVtZW50KiBmdXJ0aGVz
dEJsb2NrRWxlbWVudCA9IGZ1cnRoZXN0QmxvY2stPmVsZW1lbnQoKTsKLSAgICAgICAgLy8gRklY
TUU6IEFsbCB0aGlzIGNyZWF0aW9uIC8gcGFyc2VyQWRkQ2hpbGQgLyBhdHRhY2ggYnVzaW5lc3Mg
c2hvdWxkCi0gICAgICAgIC8vICAgICAgICBiZSBpbiBIVE1MQ29uc3RydWN0aW9uU2l0ZS4gIE15
IGd1ZXNzIGlzIHRoYXQgc3RlcHMgOC0tMTIKLSAgICAgICAgLy8gICAgICAgIHNob3VsZCBhbGwg
YmUgaW4gc29tZSBIVE1MQ29uc3RydWN0aW9uU2l0ZSBmdW5jdGlvbi4KLSAgICAgICAgZnVydGhl
c3RCbG9ja0VsZW1lbnQtPnBhcnNlckFkZENoaWxkKG5ld0l0ZW0tPmVsZW1lbnQoKSk7Ci0gICAg
ICAgIGlmIChmdXJ0aGVzdEJsb2NrRWxlbWVudC0+YXR0YWNoZWQoKSAmJiAhbmV3SXRlbS0+ZWxl
bWVudCgpLT5hdHRhY2hlZCgpKSB7Ci0gICAgICAgICAgICAvLyBOb3RpY2UgdGhhdCBuZXdJdGVt
LT5lbGVtZW50KCkgbWlnaHQgYWxyZWFkeSBiZSBhdHRhY2hlZCBpZiwgZm9yIGV4YW1wbGUsIG9u
ZSBvZiB0aGUgcmVwYXJlbnRlZAotICAgICAgICAgICAgLy8gY2hpbGRyZW4gaXMgYSBzdHlsZSBl
bGVtZW50LCB3aGljaCBhdHRhY2hlcyBpdHNlbGYgYXV0b21hdGljYWxseS4KLSAgICAgICAgICAg
IG5ld0l0ZW0tPmVsZW1lbnQoKS0+YXR0YWNoKCk7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gTm90
aWNlIHRoYXQgbmV3SXRlbS0+ZWxlbWVudCgpIG1pZ2h0IGFscmVhZHkgYmUgYXR0YWNoZWQgaWYs
IGZvciBleGFtcGxlLCBvbmUgb2YgdGhlIHJlcGFyZW50ZWQKKyAgICAgICAgLy8gY2hpbGRyZW4g
aXMgYSBzdHlsZSBlbGVtZW50LCB3aGljaCBhdHRhY2hlcyBpdHNlbGYgYXV0b21hdGljYWxseS4K
KyAgICAgICAgbV9wYXJzZXItPmRvbU1vZGlmaWVyKCktPmFkZENoaWxkQW5kQXR0YWNoKGZ1cnRo
ZXN0QmxvY2stPmVsZW1lbnQoKSwgbmV3SXRlbS0+ZWxlbWVudCgpLCBmYWxzZSk7CiAgICAgICAg
IC8vIDExCiAgICAgICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+c3dhcFRv
KGZvcm1hdHRpbmdFbGVtZW50LCBuZXdJdGVtLCBib29rbWFyayk7CiAgICAgICAgIC8vIDEyCkBA
IC0yMTI0LDcgKzIxMDcsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhB
dG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nlc3MgPSBt
X3RyZWUuY3VycmVudEVsZW1lbnQoKTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMo
KS0+cG9wKCk7CiAgICAgICAgICAgICBpZiAoaXNQYXJzaW5nRnJhZ21lbnQoKSAmJiBtX2ZyYWdt
ZW50Q29udGV4dC5zY3JpcHRpbmdQZXJtaXNzaW9uKCkgPT0gRGlzYWxsb3dTY3JpcHRpbmdDb250
ZW50KQotICAgICAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzLT5yZW1vdmVBbGxDaGlsZHJl
bigpOworICAgICAgICAgICAgICAgIG1fcGFyc2VyLT5kb21Nb2RpZmllcigpLT5yZW1vdmVBbGxD
aGlsZHJlbihtX3NjcmlwdFRvUHJvY2Vzcy5nZXQoKSk7CiAgICAgICAgICAgICBzZXRJbnNlcnRp
b25Nb2RlKG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKTsKIAogICAgICAgICAgICAgLy8gVGhpcyB0
b2tlbiB3aWxsIG5vdCBoYXZlIGJlZW4gY3JlYXRlZCBieSB0aGUgdG9rZW5pemVyIGlmIGEK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157441</attachid>
            <date>2012-08-09 05:18:01 -0700</date>
            <delta_ts>2013-09-05 08:33:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93455-20120809211727.patch</filename>
            <type>text/plain</type>
            <size>102024</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTg0NGNlOThiY2JlMzQ2
YTEwM2VkZmZkY2ZlMjZmNDg0NmFmODJlNi4uZGY1OTU3NTVkMGI4YzQ2YjljMmQ1NDQzM2FhNmE2
MWMwOGY1ZjVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNSBAQAorMjAxMi0wOC0wOSAgS3dh
bmcgWXVsIFNlbyAgPHNreXVsQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIEV4dHJhY3QgRE9N
IG1vZGlmaWNhdGlvbnMgaW4gdGhlIEhUTUw1IHBhcnNlciBpbnRvIEhUTUxQYXJzZXJET01NdXRh
dGlvblF1ZXVlLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTM0NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBFeHRyYWN0IERPTSBtb2RpZmljYXRpb25zIGluIHRoZSBIVE1MNSBwYXJzZXIgaW50byBIVE1M
UGFyc2VyRE9NTXV0YXRpb25RdWV1ZS4KKworICAgICAgICBUaGlzIHBhdGNoIGV4dHJhY3RzIERP
TSBtb2RpZmljYXRpb25zIGluIHRoZSBwYXJzZXIgaW50byBIVE1MUGFyc2VyRE9NTXV0YXRpb25R
dWV1ZQorICAgICAgICBhbmQgbWFrZXMgdGhlIHJlc3Qgb2YgdGhlIHBhcnNlciB1c2UgaXQuIENo
YW5nZWQgSFRNTERvY3VtZW50UGFyc2VyCisgICAgICAgIHRvIG93biBhIEhUTUxQYXJzZXJET01N
dXRhdGlvblF1ZXVlIGluc3RhbmNlIGFuZCBwYXNzIGl0IHRvIEhUTUxUcmVlQnVpbGRlciwKKyAg
ICAgICAgSFRNTENvbnN0cnVjdGlvblNpdGUgYW5kIEhUTUxFbGVtZW50U3RhY2sgd2hlcmUgRE9N
IG1vZGlmaWNhdGlvbnMgYXJlIG5lZWRlZC4KKworICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIGlz
IGEgcHJlcGFyYXRpb24gZm9yIHNwZWN1bGF0aXZlIHBhcnNpbmcuIFRvIHJ1biB0aGUgcGFyc2Vy
IGluCisgICAgICAgIHNwZWN1bGF0aW9uIG1vZGUsIHdlIG11c3QgYmUgYWJsZSB0byBxdWV1ZSB1
cCBET00gbW9kaWZpY2F0aW9ucy4KKyAgICAgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUg
ZWl0aGVyIHN5bmNocm9ub3VzbHkgY2FsbHMgRE9NIG9wZXJhdGlvbnMgb3IgcXVldXMgdXAKKyAg
ICAgICAgRE9NIG9wZXJhdGlvbnMgZm9yIGxhdGVyIGV4ZWN1dGlvbi4gSFRNTFBhcnNlckRPTU11
dGF0aW9uUXVldWU6OnNldFNwZWN1bGF0aW5nKGJvb2wpCisgICAgICAgIGNvbnRyb2xzIHRoaXMg
YmVoYXZpb3IuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBub3QgY29tcGxldGUuIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlIHN0aWxsIGhhcyBlbGVtZW50IGNyZWF0aW9uIG1ldGhvZHMuCisgICAgICAg
IEkgd2lsbCBtb3ZlIHRoZXNlIG1ldGhvZHMgaW50byBIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1
ZSBpbiBmb2xsb3ctdXAgcGF0Y2hlcy4KKworICAgICAgICBObyBuZXcgdGVzdHM7IHJlZmFjdG9y
aW5nIG9ubHkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5n
eXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6SFRNTENvbnN0cnVjdGlvblNpdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENvbnN0cnVjdGlvblNpdGU6OmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxI
dG1sU3RhcnRUYWdCZWZvcmVIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnSW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MQm9keVN0YXJ0VGFnSW5Cb2R5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnREb2N0eXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRDb21tZW50T25Eb2N1
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29t
bWVudE9uSFRNTEh0bWxFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlOjppbnNlcnRIVE1MRm9ybUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENv
bnN0cnVjdGlvblNpdGU6Omluc2VydFRleHROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjpzaG91bGRGb3N0ZXJQYXJlbnQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Zm9zdGVyUGFyZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5kTGFzdFRhYmxlRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoTGF0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmF0dGFjaEZvc3Rl
clBhcmVudGVkTGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6
OmF0dGFjaFRleHRMYXRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6YXR0YWNoRm9zdGVyUGFyZW50ZWRUZXh0TGF0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENvbnN0cnVjdGlvblNpdGU6OmF0dGFjaENvbW1lbnRMYXRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoQ29tbWVudE9uRG9jdW1lbnRMYXRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoRG9jdHlwZUxhdGVy
KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oOgorICAgICAg
ICAoSFRNTENvbnN0cnVjdGlvblNpdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVj
dGlvblNpdGU6Om1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCk6CisgICAgICAgICogaHRtbC9w
YXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1
bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTERvY3VtZW50UGFyc2VyOjpkb21NdXRhdGlvblF1ZXVlKToKKyAgICAgICAgKEhUTUxE
b2N1bWVudFBhcnNlcik6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjpIVE1MRWxlbWVudFN0YWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50U3RhY2s6OnBvcEFsbCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRWxlbWVudFN0YWNrOjppbnNlcnRBYm92ZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRWxlbWVudFN0YWNrOjpwb3BDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEVsZW1lbnRTdGFjazo6cmVtb3ZlTm9uVG9wQ29tbW9uKToKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MRWxlbWVudFN0YWNrLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEhUTUxF
bGVtZW50U3RhY2spOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJET01NdXRhdGlv
blF1ZXVlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlOjpmbHVzaCk6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU6OmlzU3BlY3VsYXRpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU6OnNldFNwZWN1bGF0aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlOjpiZWdpblBhcnNpbmdD
aGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZTo6
ZmluaXNoUGFyc2luZ0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01N
dXRhdGlvblF1ZXVlOjphZGRDaGlsZEFuZEF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UGFyc2VyRE9NTXV0YXRpb25RdWV1ZTo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZTo6bW92ZUFsbENoaWxkcmVuVG9OZXdQYXJl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU6OnJlbW92
ZUFsbENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvblF1
ZXVlOjpzZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0
aW9uUXVldWU6OnNldEluc2VydGVkQnlQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBh
cnNlckRPTU11dGF0aW9uUXVldWU6OmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlOjpzZXREZW1vdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlOjptZXJnZUF0
dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFy
c2VyRE9NTXV0YXRpb25RdWV1ZTo6c2V0Q29tcGF0aWJpbGl0eU1vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU6OnNldENvbXBhdGliaWxpdHlNb2RlRnJv
bURvY3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU6
Omluc2VydCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZTo6
aW5zZXJ0Rm9zdGVyUGFyZW50ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11
dGF0aW9uUXVldWU6Omluc2VydFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRP
TU11dGF0aW9uUXVldWU6Omluc2VydEZvc3RlclBhcmVudGVkVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZTo6aW5zZXJ0Q29tbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZTo6aW5zZXJ0Q29tbWVudE9uRG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU6Omlu
c2VydERvY3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uUXVl
dWU6OkhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9I
VE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OmZpbmRGb3N0ZXJQYXJlbnRBbmROZXh0Q2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6aW5zZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Omluc2VydFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0VGFzazo6ZG9QZXJmb3Jt
VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0
ZXJQYXJlbnRlZFRhc2s6OmRvUGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBh
cnNlckRPTU11dGF0aW9uSW5zZXJ0VGV4dFRhc2s6OmRvUGVyZm9ybVRhc2spOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Rm9zdGVyUGFyZW50ZWRUZXh0VGFz
azo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRp
b25JbnNlcnRDb21tZW50VGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRDb21tZW50T25Eb2N1bWVudFRhc2s6OmRvUGVyZm9y
bVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0RG9j
dHlwZVRhc2s6OmRvUGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRP
TU11dGF0aW9uQmVnaW5QYXJzaW5nQ2hpbGRyZW5UYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkZpbmlzaFBhcnNpbmdDaGlsZHJlblRh
c2s6OmRvUGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0
aW9uQWRkQ2hpbGRBbmRBdHRhY2hUYXNrOjpkb1BlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxQYXJzZXJET01NdXRhdGlvblJlbW92ZUZyb21QYXJlbnRUYXNrOjpkb1BlcmZvcm1U
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbk1vdmVBbGxDaGls
ZHJlblRvTmV3UGFyZW50VGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGFyc2VyRE9NTXV0YXRpb25SZW1vdmVBbGxDaGlsZHJlblRhc2s6OmRvUGVyZm9ybVRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uU2V0QXR0cmlidXRlVGFz
azo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRp
b25TZXRJbnNlcnRlZEJ5UGFyc2VyVGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25EaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJs
ZVRhc2s6OmRvUGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11
dGF0aW9uU2V0RGVtb3RlZFRhc2s6OmRvUGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFBhcnNlckRPTU11dGF0aW9uTWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnRU
YXNrOjpkb1BlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRh
dGlvblNldENvbXBhdGliaWxpdHlNb2RlVGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0
eXBlVGFzazo6ZG9QZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9N
TXV0YXRpb25UYXNrOjp+SFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayk6CisgICAgICAgICogaHRt
bC9wYXJzZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzay5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrOjp0eXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxQYXJzZXJET01NdXRhdGlvblRhc2s6OkhUTUxQYXJzZXJET01NdXRhdGlvblRhc2sp
OgorICAgICAgICAoSFRNTFBhcnNlckRPTU11dGF0aW9uQmVnaW5QYXJzaW5nQ2hpbGRyZW5UYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkJlZ2luUGFyc2luZ0No
aWxkcmVuVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRh
dGlvbkJlZ2luUGFyc2luZ0NoaWxkcmVuVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uQmVnaW5QYXJzaW5nQ2hpbGRyZW5UYXNrOjpIVE1M
UGFyc2VyRE9NTXV0YXRpb25CZWdpblBhcnNpbmdDaGlsZHJlblRhc2spOgorICAgICAgICAoSFRN
TFBhcnNlckRPTU11dGF0aW9uRmluaXNoUGFyc2luZ0NoaWxkcmVuVGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25GaW5pc2hQYXJzaW5nQ2hpbGRyZW5UYXNrOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uRmluaXNoUGFy
c2luZ0NoaWxkcmVuVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBh
cnNlckRPTU11dGF0aW9uRmluaXNoUGFyc2luZ0NoaWxkcmVuVGFzazo6SFRNTFBhcnNlckRPTU11
dGF0aW9uRmluaXNoUGFyc2luZ0NoaWxkcmVuVGFzayk6CisgICAgICAgIChIVE1MUGFyc2VyRE9N
TXV0YXRpb25BZGRDaGlsZEFuZEF0dGFjaFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBh
cnNlckRPTU11dGF0aW9uQWRkQ2hpbGRBbmRBdHRhY2hUYXNrOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uQWRkQ2hpbGRBbmRBdHRhY2hUYXNrOjpwZXJm
b3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25BZGRDaGls
ZEFuZEF0dGFjaFRhc2s6OkhUTUxQYXJzZXJET01NdXRhdGlvbkFkZENoaWxkQW5kQXR0YWNoVGFz
ayk6CisgICAgICAgIChIVE1MUGFyc2VyRE9NTXV0YXRpb25SZW1vdmVGcm9tUGFyZW50VGFzayk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25SZW1vdmVGcm9tUGFyZW50
VGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvblJl
bW92ZUZyb21QYXJlbnRUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UGFyc2VyRE9NTXV0YXRpb25SZW1vdmVGcm9tUGFyZW50VGFzazo6SFRNTFBhcnNlckRPTU11dGF0
aW9uUmVtb3ZlRnJvbVBhcmVudFRhc2spOgorICAgICAgICAoSFRNTFBhcnNlckRPTU11dGF0aW9u
TW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
YXJzZXJET01NdXRhdGlvbk1vdmVBbGxDaGlsZHJlblRvTmV3UGFyZW50VGFzazo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbk1vdmVBbGxDaGlsZHJlblRv
TmV3UGFyZW50VGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNl
ckRPTU11dGF0aW9uTW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnRUYXNrOjpIVE1MUGFyc2VyRE9N
TXV0YXRpb25Nb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVudFRhc2spOgorICAgICAgICAoSFRNTFBh
cnNlckRPTU11dGF0aW9uUmVtb3ZlQWxsQ2hpbGRyZW5UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxQYXJzZXJET01NdXRhdGlvblJlbW92ZUFsbENoaWxkcmVuVGFzazo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvblJlbW92ZUFsbENoaWxkcmVuVGFz
azo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9u
UmVtb3ZlQWxsQ2hpbGRyZW5UYXNrOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25SZW1vdmVBbGxDaGls
ZHJlblRhc2spOgorICAgICAgICAoSFRNTFBhcnNlckRPTU11dGF0aW9uU2V0QXR0cmlidXRlVGFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRBdHRyaWJ1dGVU
YXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uU2V0
QXR0cmlidXRlVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNl
ckRPTU11dGF0aW9uU2V0QXR0cmlidXRlVGFzazo6SFRNTFBhcnNlckRPTU11dGF0aW9uU2V0QXR0
cmlidXRlVGFzayk6CisgICAgICAgIChIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRJbnNlcnRlZEJ5
UGFyc2VyVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRJ
bnNlcnRlZEJ5UGFyc2VyVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJz
ZXJET01NdXRhdGlvblNldEluc2VydGVkQnlQYXJzZXJUYXNrOjpwZXJmb3JtVGFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRJbnNlcnRlZEJ5UGFyc2VyVGFz
azo6SFRNTFBhcnNlckRPTU11dGF0aW9uU2V0SW5zZXJ0ZWRCeVBhcnNlclRhc2spOgorICAgICAg
ICAoSFRNTFBhcnNlckRPTU11dGF0aW9uRGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVU
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkRpc3BhdGNoRG9j
dW1lbnRFbGVtZW50QXZhaWxhYmxlVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxQYXJzZXJET01NdXRhdGlvbkRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlVGFzazo6
cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uRGlz
cGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVUYXNrOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25E
aXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZVRhc2spOgorICAgICAgICAoSFRNTFBhcnNl
ckRPTU11dGF0aW9uU2V0RGVtb3RlZFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNl
ckRPTU11dGF0aW9uU2V0RGVtb3RlZFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MUGFyc2VyRE9NTXV0YXRpb25TZXREZW1vdGVkVGFzazo6cGVyZm9ybVRhc2spOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uU2V0RGVtb3RlZFRhc2s6OkhUTUxQYXJz
ZXJET01NdXRhdGlvblNldERlbW90ZWRUYXNrKToKKyAgICAgICAgKEhUTUxQYXJzZXJET01NdXRh
dGlvbk1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50VGFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25NZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRv
RWxlbWVudFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0
YXRpb25NZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudFRhc2s6OnBlcmZvcm1UYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbk1lcmdlQXR0cmlidXRl
c0Zyb21Ub2tlbkludG9FbGVtZW50VGFzazo6SFRNTFBhcnNlckRPTU11dGF0aW9uTWVyZ2VBdHRy
aWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnRUYXNrKToKKyAgICAgICAgKEhUTUxQYXJzZXJET01N
dXRhdGlvblNldENvbXBhdGliaWxpdHlNb2RlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UGFyc2VyRE9NTXV0YXRpb25TZXRDb21wYXRpYmlsaXR5TW9kZVRhc2s6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRDb21wYXRpYmlsaXR5TW9kZVRh
c2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlv
blNldENvbXBhdGliaWxpdHlNb2RlVGFzazo6SFRNTFBhcnNlckRPTU11dGF0aW9uU2V0Q29tcGF0
aWJpbGl0eU1vZGVUYXNrKToKKyAgICAgICAgKEhUTUxQYXJzZXJET01NdXRhdGlvblNldENvbXBh
dGliaWxpdHlNb2RlRnJvbURvY3R5cGVUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJz
ZXJET01NdXRhdGlvblNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGVUYXNrOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uU2V0Q29tcGF0aWJpbGl0
eU1vZGVGcm9tRG9jdHlwZVRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxQYXJzZXJET01NdXRhdGlvblNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGVUYXNrOjpI
VE1MUGFyc2VyRE9NTXV0YXRpb25TZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0eXBlVGFzayk6
CisgICAgICAgIChIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRUYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydFRhc2s6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRUYXNrOjpwZXJmb3JtVGFzayk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRUYXNrOjpIVE1M
UGFyc2VyRE9NTXV0YXRpb25JbnNlcnRUYXNrKToKKyAgICAgICAgKEhUTUxQYXJzZXJET01NdXRh
dGlvbkluc2VydEZvc3RlclBhcmVudGVkVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFy
c2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJlbnRlZFRhc2s6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJlbnRlZFRhc2s6
OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbklu
c2VydEZvc3RlclBhcmVudGVkVGFzazo6SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Rm9zdGVy
UGFyZW50ZWRUYXNrKToKKyAgICAgICAgKEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydFRleHRU
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydFRleHRU
YXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uSW5z
ZXJ0VGV4dFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJE
T01NdXRhdGlvbkluc2VydFRleHRUYXNrOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRUZXh0
VGFzayk6CisgICAgICAgIChIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJlbnRl
ZFRleHRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkluc2Vy
dEZvc3RlclBhcmVudGVkVGV4dFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
UGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJlbnRlZFRleHRUYXNrOjpwZXJmb3JtVGFz
ayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQ
YXJlbnRlZFRleHRUYXNrOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJlbnRl
ZFRleHRUYXNrKToKKyAgICAgICAgKEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENvbW1lbnRU
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENvbW1l
bnRUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9u
SW5zZXJ0Q29tbWVudFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQ
YXJzZXJET01NdXRhdGlvbkluc2VydENvbW1lbnRUYXNrOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25J
bnNlcnRDb21tZW50VGFzayk6CisgICAgICAgIChIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRD
b21tZW50T25Eb2N1bWVudFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlckRPTU11
dGF0aW9uSW5zZXJ0Q29tbWVudE9uRG9jdW1lbnRUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Q29tbWVudE9uRG9jdW1lbnRUYXNrOjpw
ZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNl
cnRDb21tZW50T25Eb2N1bWVudFRhc2s6OkhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENvbW1l
bnRPbkRvY3VtZW50VGFzayk6CisgICAgICAgIChIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRE
b2N0eXBlVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNl
cnREb2N0eXBlVGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXJET01N
dXRhdGlvbkluc2VydERvY3R5cGVUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnREb2N0eXBlVGFzazo6SFRNTFBhcnNlckRPTU11
dGF0aW9uSW5zZXJ0RG9jdHlwZVRhc2spOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxUcmVl
QnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVl
QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRy
ZWVGcm9tQXRvbWljVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzSXNpbmRleFN0YXJ0VGFnRm9ySW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2Vu
Y3kpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKToK
KwogMjAxMi0wOC0wNiAgRGF2aWQgUmV2ZW1hbiAgPHJldmVtYW5AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtDaHJvbWl1bV0gUmVmYWN0b3IgQ0NUZXh0dXJlVXBkYXRlciBpbnRvIENDVGV4dHVy
ZVVwZGF0ZXIgYW5kIENDVGV4dHVyZVVwZGF0ZUNvbnRyb2xsZXIuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CmluZGV4IGRiODhhMDU3YTZhNDcxOWVhZDhjOGU0MjlkM2I4NTVmNmUyMTE4YTEuLmQ1N2NkYjkz
Mjk2YjMwODJjMmVhOTExNGI5MGZmMzljNmJiMjhhZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC0xNDcwLDYgKzE0NzAsOCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaHRtbC9wYXJzZXIv
SFRNTFBhcnNlclNjaGVkdWxlci5jcHAKICAgICBodG1sL3BhcnNlci9IVE1MRm9ybWF0dGluZ0Vs
ZW1lbnRMaXN0LmNwcAogICAgIGh0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAK
KyAgICBodG1sL3BhcnNlci9IVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZS5jcHAKKyAgICBodG1s
L3BhcnNlci9IVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrLmNwcAogICAgIGh0bWwvcGFyc2VyL0hU
TUxQcmVsb2FkU2Nhbm5lci5jcHAKICAgICBodG1sL3BhcnNlci9IVE1MU2NyaXB0UnVubmVyLmNw
cAogICAgIGh0bWwvcGFyc2VyL0hUTUxTb3VyY2VUcmFja2VyLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KaW5kZXggNWVjMGJjMmYwZjhkNTU3ZjcyYTEzZWIxODMwOWZkNDI0ZmNiNzAz
My4uNTU4N2VhZWU0ZTRkYzM1YzcyZTU4YjMzMmZiNTMxOTNiMDFhODhmNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yNTgxLDYgKzI1ODEsMTAgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MSW5wdXRTdHJlYW0uaCBcCiAJ
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggXAorCVNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUu
aCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uVGFz
ay5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJET01NdXRhdGlv
blRhc2suaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuaCBcCiAJ
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlclNjaGVkdWxlci5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKaW5kZXggYmIwZWJlNDU0MGM3Zjg2MjRlYjAwMDE0ZDRjNDQ4NzJhMzI1NTA1ZC4uOGUz
YTViOGZiN2MwMDAzMTQ2ZmFkYTljNTJmNDFmYjE4M2VhNDM2YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC03
MTEsNiArNzExLDggQEAgU09VUkNFUyArPSBcCiAgICAgaHRtbC9wYXJzZXIvSFRNTEVudGl0eVNl
YXJjaC5jcHAgXAogICAgIGh0bWwvcGFyc2VyL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuY3Bw
IFwKICAgICBodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwIFwKKyAgICBodG1s
L3BhcnNlci9IVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZS5jcHAgXAorICAgIGh0bWwvcGFyc2Vy
L0hUTUxQYXJzZXJET01NdXRhdGlvblRhc2suY3BwIFwKICAgICBodG1sL3BhcnNlci9IVE1MUGFy
c2VySWRpb21zLmNwcCBcCiAgICAgaHRtbC9wYXJzZXIvSFRNTFBhcnNlclNjaGVkdWxlci5jcHAg
XAogICAgIGh0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IGI0NmU1NzFiNjIzZDdmNjQ5MmFlMDIzMGFjNjY2NWNiMjNkZGE3NmYuLmI3NmU4YzEw
NTZhMGUwNWE3NmMzNzEwYTMyOGY0NjYzOTIwODBkMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTU3
MTgsNiArNTcxOCwxMCBAQAogICAgICAgICAgICAgJ2h0bWwvcGFyc2VyL0hUTUxJbnB1dFN0cmVh
bS5oJywKICAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3Bw
JywKICAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCcsCisg
ICAgICAgICAgICAnaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUuaCcsCisg
ICAgICAgICAgICAnaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUuY3BwJywK
KyAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrLmgnLAor
ICAgICAgICAgICAgJ2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJET01NdXRhdGlvblRhc2suY3BwJywK
ICAgICAgICAgICAgICdodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcCcsCiAgICAgICAg
ICAgICAnaHRtbC9wYXJzZXIvSFRNTFBhcnNlclNjaGVkdWxlci5jcHAnLAogICAgICAgICAgICAg
J2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJTY2hlZHVsZXIuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDdmM2FmMTRkYWUwMDZlZjIwYWY2NzFl
YzYxNTJhMGEyZjdjYTU1YjkuLjk2Nzg2ZDg4M2RmYTI0MzBjYmRkOTQwNTk1MGRlOTFlYjgyOTA4
Y2YgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBA
IC02MzQ0Miw2ICs2MzQ0MiwyMiBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxwYXJzZXJcSFRNTFBhcnNlckRPTU11dGF0aW9uUXVl
dWUuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0
aD0iLi5caHRtbFxwYXJzZXJcSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUuaCIKKwkJCQkJPgor
CQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxccGFyc2Vy
XEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2suY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJ
CTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxwYXJzZXJcSFRNTFBhcnNlckRPTU11
dGF0aW9uVGFzay5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0
aXZlUGF0aD0iLi5caHRtbFxwYXJzZXJcSFRNTFBhcnNlcklkaW9tcy5jcHAiCiAJCQkJCT4KIAkJ
CQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggMGJkNDBlYjVmYjJhY2QyYzBmM2ExZmQxOTZmMjNiNmFmYzQ2YTkzNi4u
ZjE3NjlmY2I1MmZjNjg2YThhYmYxNjg2MDZiMmMyOWMxYmMzZTkyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzcwLDYgKzc3
MCwxMCBAQAogCQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0IgLyogUmVuZGVyU1ZHRWxsaXBzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkI0MjM1QTAx
NTI1MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLzsgfTsKIAkJMkJFOEUyQzcx
MkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkJFOEUyQzYxMkE1ODlFQzAwRkFENTUw
IC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oICovOyB9OwogCQkyQkU4RTJDOTEyQTU4QTAxMDBG
QUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCRThFMkM4MTJBNThBMDEwMEZBRDU1MCAvKiBIVE1M
TWV0YUNoYXJzZXRQYXJzZXIuY3BwICovOyB9OworCQkyQkU4RTJDNzEyQTU4OUVDMDBGQUQ1NTEg
LyogSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MSAvKiBIVE1MUGFy
c2VyRE9NTXV0YXRpb25RdWV1ZS5oICovOyB9OworCQkyQkU4RTJDOTEyQTU4QTAxMDBGQUQ1NTEg
LyogSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkJFOEUyQzgxMkE1OEEwMTAwRkFENTUxIC8qIEhUTUxQ
YXJzZXJET01NdXRhdGlvblF1ZXVlLmNwcCAqLzsgfTsKKwkJMkJFOEUyQzcxMkE1ODlFQzAwRkFE
NTUyIC8qIEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MiAvKiBIVE1M
UGFyc2VyRE9NTXV0YXRpb25UYXNrLmggKi87IH07CisJCTJCRThFMkM5MTJBNThBMDEwMEZBRDU1
MiAvKiBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCRThFMkM4MTJBNThBMDEwMEZBRDU1MiAvKiBIVE1M
UGFyc2VyRE9NTXV0YXRpb25UYXNrLmNwcCAqLzsgfTsKIAkJMkNGNjg3ODgxNEQzMkVCNTAwMzQw
RjM5IC8qIEVsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDRjY4Nzg3MTREMzJFQjUwMDM0MEYzOSAvKiBFbGVtZW50
QXR0cmlidXRlRGF0YS5jcHAgKi87IH07CiAJCTJDRjY4NzhBMTREMzJFRkYwMDM0MEYzOSAvKiBF
bGVtZW50QXR0cmlidXRlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkNGNjg3ODkxNEQzMkVGRjAwMzQwRjM5IC8qIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MkQzQTBFMzYxM0E3RDc2MTAwRTg1QUYwIC8qIFNWR1BhcnNpbmdFcnJvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQzQTBFMzUxM0E3RDc2MTAwRTg1
QUYwIC8qIFNWR1BhcnNpbmdFcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC03ODIwLDYgKzc4MjQsMTAgQEAKIAkJMkI0MjM1QTAxNTI1MEY2
MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBw
YXRoID0gcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyQkU4RTJDODEyQTU4QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFy
c2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEhUTUxNZXRhQ2hh
cnNldFBhcnNlci5jcHA7IHBhdGggPSBwYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkJFOEUyQzYxMkE1ODlFQzAwRkFENTUxIC8q
IEhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlLmg7IHBhdGggPSBwYXJzZXIvSFRNTFBh
cnNlckRPTU11dGF0aW9uUXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkJF
OEUyQzgxMkE1OEEwMTAwRkFENTUxIC8qIEhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEhUTUxQYXJzZXJET01NdXRhdGlv
blF1ZXVlLmNwcDsgcGF0aCA9IHBhcnNlci9IVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MiAv
KiBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2suaDsgcGF0aCA9IHBhcnNlci9IVE1MUGFy
c2VyRE9NTXV0YXRpb25UYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJCRThF
MkM4MTJBNThBMDEwMEZBRDU1MiAvKiBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEhUTUxQYXJzZXJET01NdXRhdGlvblRh
c2suY3BwOyBwYXRoID0gcGFyc2VyL0hUTUxQYXJzZXJET01NdXRhdGlvblRhc2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQ0Y2ODc4NzE0RDMyRUI1MDAzNDBGMzkgLyogRWxl
bWVudEF0dHJpYnV0ZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyQ0Y2ODc4OTE0RDMyRUZGMDAzNDBGMzkgLyogRWxlbWVudEF0dHJpYnV0ZURhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudEF0dHJpYnV0ZURhdGEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQyRkMwNTQxNDYwQ0Q2RjAwMjYzNjMzIC8qIENy
b3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE4MDEyLDYgKzE4MDIwLDEwIEBACiAJCQkJOTdCQzg0OUExMjM3MEE0QjAwMEM2
MTYxIC8qIEhUTUxJbnB1dFN0cmVhbS5oICovLAogCQkJCTJCRThFMkM4MTJBNThBMDEwMEZBRDU1
MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwICovLAogCQkJCTJCRThFMkM2MTJBNTg5RUMw
MEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCAqLywKKwkJCQkyQkU4RTJDODEyQTU4
QTAxMDBGQUQ1NTEgLyogSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUuY3BwICovLAorCQkJCTJC
RThFMkM2MTJBNTg5RUMwMEZBRDU1MSAvKiBIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZS5oICov
LAorCQkJCTJCRThFMkM4MTJBNThBMDEwMEZBRDU1MiAvKiBIVE1MUGFyc2VyRE9NTXV0YXRpb25U
YXNrLmNwcCAqLywKKwkJCQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTIgLyogSFRNTFBhcnNlckRP
TU11dGF0aW9uVGFzay5oICovLAogCQkJCTkzRTJBMzA0MTIzRTlEQzAwMDlGRTEyQSAvKiBIVE1M
UGFyc2VySWRpb21zLmNwcCAqLywKIAkJCQk5M0UyQTMwNTEyM0U5REMwMDA5RkUxMkEgLyogSFRN
TFBhcnNlcklkaW9tcy5oICovLAogCQkJCTk3N0IzODU3MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1M
UGFyc2VyU2NoZWR1bGVyLmNwcCAqLywKQEAgLTIzNDU0LDYgKzIzNDY2LDggQEAKIAkJCQk0QUQw
MTAwOTEyN0U2NDJBMDAxNTAzNUYgLyogSFRNTE91dHB1dEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4RUE3Q0I1MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MUGFyYWdyYXBoRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3MUQ0NTgwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxQYXJh
bUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTJCRThFMkM3MTJBNTg5RUMwMEZBRDU1MSAv
KiBIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkJFOEUy
QzcxMkE1ODlFQzAwRkFENTUyIC8qIEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDNTg4QUYwMEJGQTZDRjkwMEVFNjc5RSAvKiBIVE1MUGFyc2VyRXJyb3JD
b2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNFMkEzMDcxMjNFOURDMDAwOUZFMTJBIC8qIEhU
TUxQYXJzZXJJZGlvbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0OUIxOUY1MEZBNzJFQ0UwMDE1
Q0E0QSAvKiBIVE1MUGFyc2VyUXVpcmtzLmggaW4gSGVhZGVycyAqLywKQEAgLTI2NjQxLDYgKzI2
NjU1LDggQEAKIAkJCQk0QUQwMTAwODEyN0U2NDJBMDAxNTAzNUYgLyogSFRNTE91dHB1dEVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThFQTdDQjIwQTE5MkI5QzAwQThFRjVGIC8qIEhU
TUxQYXJhZ3JhcGhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NzFENDU5MEExMjdD
QkMwMEIxMkE2OCAvKiBIVE1MUGFyYW1FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJC
RThFMkM5MTJBNThBMDEwMEZBRDU1MSAvKiBIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkyQkU4RTJDOTEyQTU4QTAxMDBGQUQ1NTIgLyogSFRNTFBhcnNl
ckRPTU11dGF0aW9uVGFzay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzU4OEI0QjBCRkE3MjND
MDBFRTY3OUUgLyogSFRNTFBhcnNlckVycm9yQ29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTNFMkEzMDYxMjNFOURDMDAwOUZFMTJBIC8qIEhUTUxQYXJzZXJJZGlvbXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTc3QjM4NzAxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxQYXJzZXJTY2hlZHVs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXggZmM5ZDdjNjY0OGEyYzRhNzU1NDhmZTk2
ZmZlNzlmNzQ5ZTJiMDJlNi4uZDFkNjU0NzJjMTMzMDkxMDdiMmY0OTcyMGYzNThmOTJmMjAxMDM1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlv
blNpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rp
b25TaXRlLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIkhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlLmgiCiAjaW5jbHVkZSAiSFRNTFBh
cnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTFN0YWNrSXRlbS5oIgpAQCAtNzUsNjUgKzc2LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBp
c0FsbFdoaXRlc3BhY2UoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgcmV0dXJuIHN0cmluZy5p
c0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzSFRNTFNwYWNlPigpOwogfQogCi1zdGF0aWMgaW5saW5l
IHZvaWQgZXhlY3V0ZVRhc2soSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrJiB0YXNrKQotewotICAg
IGlmICh0YXNrLm5leHRDaGlsZCkKLSAgICAgICAgdGFzay5wYXJlbnQtPnBhcnNlckluc2VydEJl
Zm9yZSh0YXNrLmNoaWxkLmdldCgpLCB0YXNrLm5leHRDaGlsZC5nZXQoKSk7Ci0gICAgZWxzZQot
ICAgICAgICB0YXNrLnBhcmVudC0+cGFyc2VyQWRkQ2hpbGQodGFzay5jaGlsZC5nZXQoKSk7Ci0K
LSAgICAvLyBKYXZhU2NyaXB0IHJ1biBmcm9tIGJlZm9yZWxvYWQgKG9yIERPTSBNdXRhdGlvbiBv
ciBldmVudCBoYW5kbGVycykKLSAgICAvLyBtaWdodCBoYXZlIHJlbW92ZWQgdGhlIGNoaWxkLCBp
biB3aGljaCBjYXNlIHdlIHNob3VsZCBub3QgYXR0YWNoIGl0LgotCi0gICAgaWYgKHRhc2suY2hp
bGQtPnBhcmVudE5vZGUoKSAmJiB0YXNrLnBhcmVudC0+YXR0YWNoZWQoKSAmJiAhdGFzay5jaGls
ZC0+YXR0YWNoZWQoKSkKLSAgICAgICAgdGFzay5jaGlsZC0+YXR0YWNoKCk7Ci0KLSAgICB0YXNr
LmNoaWxkLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAgaWYgKHRhc2suc2VsZkNsb3Np
bmcpCi0gICAgICAgIHRhc2suY2hpbGQtPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwotfQotCi12
b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjphdHRhY2hMYXRlcihDb250YWluZXJOb2RlKiBwYXJl
bnQsIFBhc3NSZWZQdHI8Tm9kZT4gcHJwQ2hpbGQsIGJvb2wgc2VsZkNsb3NpbmcpCi17Ci0gICAg
SFRNTENvbnN0cnVjdGlvblNpdGVUYXNrIHRhc2s7Ci0gICAgdGFzay5wYXJlbnQgPSBwYXJlbnQ7
Ci0gICAgdGFzay5jaGlsZCA9IHBycENoaWxkOwotICAgIHRhc2suc2VsZkNsb3NpbmcgPSBzZWxm
Q2xvc2luZzsKLQotICAgIGlmIChzaG91bGRGb3N0ZXJQYXJlbnQoKSkgewotICAgICAgICBmb3N0
ZXJQYXJlbnQodGFzay5jaGlsZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBB
ZGQgYXMgYSBzaWJsaW5nIG9mIHRoZSBwYXJlbnQgaWYgd2UgaGF2ZSByZWFjaGVkIHRoZSBtYXhp
bXVtIGRlcHRoIGFsbG93ZWQuCi0gICAgaWYgKG1fb3BlbkVsZW1lbnRzLnN0YWNrRGVwdGgoKSA+
IG1fbWF4aW11bURPTVRyZWVEZXB0aCAmJiB0YXNrLnBhcmVudC0+cGFyZW50Tm9kZSgpKQotICAg
ICAgICB0YXNrLnBhcmVudCA9IHRhc2sucGFyZW50LT5wYXJlbnROb2RlKCk7Ci0KLSAgICBBU1NF
UlQodGFzay5wYXJlbnQpOwotICAgIG1fYXR0YWNobWVudFF1ZXVlLmFwcGVuZCh0YXNrKTsKLX0K
LQotdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6ZXhlY3V0ZVF1ZXVlZFRhc2tzKCkKLXsKLSAg
ICBjb25zdCBzaXplX3Qgc2l6ZSA9IG1fYXR0YWNobWVudFF1ZXVlLnNpemUoKTsKLSAgICBpZiAo
IXNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENvcHkgdGhlIHRhc2sgcXVldWUgaW50
byBhIGxvY2FsIHZhcmlhYmxlIGluIGNhc2UgZXhlY3V0ZVRhc2sKLSAgICAvLyByZS1lbnRlcnMg
dGhlIHBhcnNlci4KLSAgICBBdHRhY2htZW50UXVldWUgcXVldWU7Ci0gICAgcXVldWUuc3dhcCht
X2F0dGFjaG1lbnRRdWV1ZSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKLSAgICAgICAgZXhlY3V0ZVRhc2socXVldWVbaV0pOwotCi0gICAgLy8gV2UgbWlnaHQgYmUg
ZGV0YWNoZWQgbm93LgotfQotCi1IVE1MQ29uc3RydWN0aW9uU2l0ZTo6SFRNTENvbnN0cnVjdGlv
blNpdGUoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKQor
SFRNTENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlKERvY3VtZW50KiBkb2N1
bWVudCwgSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUqIGRvbU11dGF0aW9uUXVldWUsIHVuc2ln
bmVkIG1heGltdW1ET01UcmVlRGVwdGgpCiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAg
ICwgbV9hdHRhY2htZW50Um9vdChkb2N1bWVudCkKKyAgICAsIG1fZG9tTXV0YXRpb25RdWV1ZShk
b21NdXRhdGlvblF1ZXVlKQorICAgICwgbV9vcGVuRWxlbWVudHMoZG9tTXV0YXRpb25RdWV1ZSkK
ICAgICAsIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKEFsbG93U2NyaXB0aW5nQ29udGVu
dCkKICAgICAsIG1faXNQYXJzaW5nRnJhZ21lbnQoZmFsc2UpCiAgICAgLCBtX3JlZGlyZWN0QXR0
YWNoVG9Gb3N0ZXJQYXJlbnQoZmFsc2UpCkBAIC0xNDEsOSArODgsMTEgQEAgSFRNTENvbnN0cnVj
dGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlKERvY3VtZW50KiBkb2N1bWVudCwgdW5zaWdu
ZWQgbWF4aW11bUQKIHsKIH0KIAotSFRNTENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbiwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCkK
K0hUTUxDb25zdHJ1Y3Rpb25TaXRlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZShEb2N1bWVudEZyYWdt
ZW50KiBmcmFnbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1p
c3Npb24sIEhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlKiBkb21NdXRhdGlvblF1ZXVlLCB1bnNp
Z25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKQogICAgIDogbV9kb2N1bWVudChmcmFnbWVudC0+ZG9j
dW1lbnQoKSkKICAgICAsIG1fYXR0YWNobWVudFJvb3QoZnJhZ21lbnQpCisgICAgLCBtX2RvbU11
dGF0aW9uUXVldWUoZG9tTXV0YXRpb25RdWV1ZSkKKyAgICAsIG1fb3BlbkVsZW1lbnRzKGRvbU11
dGF0aW9uUXVldWUpCiAgICAgLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbihzY3JpcHRp
bmdQZXJtaXNzaW9uKQogICAgICwgbV9pc1BhcnNpbmdGcmFnbWVudCh0cnVlKQogICAgICwgbV9y
ZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50KGZhbHNlKQpAQCAtMTc2LDggKzEyNSw4IEBAIFBh
c3NSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6dGFrZUZvcm0o
KQogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFp
bGFibGVJZk5lZWRlZCgpCiB7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQpOwotICAgIGlmIChtX2Rv
Y3VtZW50LT5mcmFtZSgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KQotICAgICAgICBtX2RvY3Vt
ZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGUo
KTsKKyAgICBpZiAoIW1faXNQYXJzaW5nRnJhZ21lbnQpCisgICAgICAgIG1fZG9tTXV0YXRpb25R
dWV1ZS0+ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGUobV9kb2N1bWVudCk7CiB9CiAK
IHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVI
VE1MKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCkBAIC0xODcsMjUgKzEzNiwxMSBAQCB2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTChBdG9t
aWNIVE1MVG9rZW4qIHRvawogICAgIGF0dGFjaExhdGVyKG1fYXR0YWNobWVudFJvb3QsIGVsZW1l
bnQpOwogICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MSHRtbEVsZW1lbnQoSFRNTFN0YWNrSXRl
bTo6Y3JlYXRlKGVsZW1lbnQsIHRva2VuKSk7CiAKLSAgICBleGVjdXRlUXVldWVkVGFza3MoKTsK
LSAgICBlbGVtZW50LT5pbnNlcnRlZEJ5UGFyc2VyKCk7CisgICAgbV9kb21NdXRhdGlvblF1ZXVl
LT5mbHVzaCgpOworICAgIG1fZG9tTXV0YXRpb25RdWV1ZS0+c2V0SW5zZXJ0ZWRCeVBhcnNlcihl
bGVtZW50LmdldCgpKTsKICAgICBkaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZUlmTmVl
ZGVkKCk7CiB9CiAKLXZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zy
b21Ub2tlbkludG9FbGVtZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4sIEVsZW1lbnQqIGVsZW1l
bnQpCi17Ci0gICAgaWYgKHRva2VuLT5hdHRyaWJ1dGVzKCkuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogZWxlbWVudEF0dHJpYnV0ZURhdGEg
PSBlbGVtZW50LT5tdXRhYmxlQXR0cmlidXRlRGF0YSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRva2VuLT5hdHRyaWJ1dGVzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29u
c3QgQXR0cmlidXRlJiB0b2tlbkF0dHJpYnV0ZSA9IHRva2VuLT5hdHRyaWJ1dGVzKCkuYXQoaSk7
Ci0gICAgICAgIGlmICghZWxlbWVudEF0dHJpYnV0ZURhdGEtPmdldEF0dHJpYnV0ZUl0ZW0odG9r
ZW5BdHRyaWJ1dGUubmFtZSgpKSkKLSAgICAgICAgICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0
b2tlbkF0dHJpYnV0ZS5uYW1lKCksIHRva2VuQXR0cmlidXRlLnZhbHVlKCkpOwotICAgIH0KLX0K
LQogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9k
eShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIC8vIEZyYWdtZW50cyBkbyBub3QgaGF2
ZSBhIHJvb3QgSFRNTCBlbGVtZW50LCBzbyBhbnkgYWRkaXRpb25hbCBIVE1MIGVsZW1lbnRzCkBA
IC0yMTMsMjAgKzE0OCwxOSBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1M
SHRtbFN0YXJ0VGFnSW5Cb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgaWYgKG1faXNQ
YXJzaW5nRnJhZ21lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1lcmdlQXR0cmlidXRlc0Zy
b21Ub2tlbkludG9FbGVtZW50KHRva2VuLCBtX29wZW5FbGVtZW50cy5odG1sRWxlbWVudCgpKTsK
KyAgICBtX2RvbU11dGF0aW9uUXVldWUtPm1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVt
ZW50KG1fb3BlbkVsZW1lbnRzLmh0bWxFbGVtZW50KCksIHRva2VuKTsKIH0KIAogdm9pZCBIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keShBdG9taWNIVE1M
VG9rZW4qIHRva2VuKQogewotICAgIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50
KHRva2VuLCBtX29wZW5FbGVtZW50cy5ib2R5RWxlbWVudCgpKTsKKyAgICBtX2RvbU11dGF0aW9u
UXVldWUtPm1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KG1fb3BlbkVsZW1lbnRz
LmJvZHlFbGVtZW50KCksIHRva2VuKTsKIH0KIAogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
aW5zZXJ0RG9jdHlwZShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIEFTU0VSVCh0b2tl
bi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpET0NUWVBFKTsKIAotICAgIFJlZlB0cjxEb2N1
bWVudFR5cGU+IGRvY3R5cGUgPSBEb2N1bWVudFR5cGU6OmNyZWF0ZShtX2RvY3VtZW50LCB0b2tl
bi0+bmFtZSgpLCBTdHJpbmc6OmFkb3B0KHRva2VuLT5wdWJsaWNJZGVudGlmaWVyKCkpLCBTdHJp
bmc6OmFkb3B0KHRva2VuLT5zeXN0ZW1JZGVudGlmaWVyKCkpKTsKLSAgICBhdHRhY2hMYXRlciht
X2F0dGFjaG1lbnRSb290LCBkb2N0eXBlLnJlbGVhc2UoKSk7CisgICAgYXR0YWNoRG9jdHlwZUxh
dGVyKG1fYXR0YWNobWVudFJvb3QsIHRva2VuLT5uYW1lKCksIFN0cmluZzo6YWRvcHQodG9rZW4t
PnB1YmxpY0lkZW50aWZpZXIoKSksIFN0cmluZzo6YWRvcHQodG9rZW4tPnN5c3RlbUlkZW50aWZp
ZXIoKSkpOwogCiAgICAgLy8gRE9DVFlQRSBub2RlcyBhcmUgb25seSBwcm9jZXNzZWQgd2hlbiBw
YXJzaW5nIGZyYWdtZW50cyB3L28gY29udGV4dEVsZW1lbnRzLCB3aGljaAogICAgIC8vIG5ldmVy
IG9jY3Vycy4gIEhvd2V2ZXIsIGlmIHdlIGV2ZXIgY2hvc2UgdG8gc3VwcG9ydCBzdWNoLCB0aGlz
IGNvZGUgaXMgc3VidGx5IHdyb25nLApAQCAtMjM4LDMxICsxNzIsMzEgQEAgdm9pZCBIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6aW5zZXJ0RG9jdHlwZShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAodG9rZW4tPmZvcmNlUXVpcmtzKCkpCi0gICAgICAgIG1f
ZG9jdW1lbnQtPnNldENvbXBhdGliaWxpdHlNb2RlKERvY3VtZW50OjpRdWlya3NNb2RlKTsKKyAg
ICAgICAgbV9kb21NdXRhdGlvblF1ZXVlLT5zZXRDb21wYXRpYmlsaXR5TW9kZShtX2RvY3VtZW50
LCBEb2N1bWVudDo6UXVpcmtzTW9kZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFdlIG5lZWQg
dG8gYWN0dWFsbHkgYWRkIHRoZSBEb2N0eXBlIG5vZGUgdG8gdGhlIERPTS4KLSAgICAgICAgZXhl
Y3V0ZVF1ZXVlZFRhc2tzKCk7Ci0gICAgICAgIG1fZG9jdW1lbnQtPnNldENvbXBhdGliaWxpdHlN
b2RlRnJvbURvY3R5cGUoKTsKKyAgICAgICAgbV9kb21NdXRhdGlvblF1ZXVlLT5mbHVzaCgpOwor
ICAgICAgICBtX2RvbU11dGF0aW9uUXVldWUtPnNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5
cGUobV9kb2N1bWVudCk7CiAgICAgfQogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpp
bnNlcnRDb21tZW50KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2Vu
LT50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkNvbW1lbnQpOwotICAgIGF0dGFjaExhdGVyKGN1
cnJlbnROb2RlKCksIENvbW1lbnQ6OmNyZWF0ZShjdXJyZW50Tm9kZSgpLT5kb2N1bWVudCgpLCB0
b2tlbi0+Y29tbWVudCgpKSk7CisgICAgYXR0YWNoQ29tbWVudExhdGVyKGN1cnJlbnROb2RlKCks
IHRva2VuLT5jb21tZW50KCkpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRDb21tZW50T25Eb2N1bWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIEFTU0VS
VCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpDb21tZW50KTsKLSAgICBhdHRhY2hM
YXRlcihtX2F0dGFjaG1lbnRSb290LCBDb21tZW50OjpjcmVhdGUobV9kb2N1bWVudCwgdG9rZW4t
PmNvbW1lbnQoKSkpOworICAgIGF0dGFjaENvbW1lbnRPbkRvY3VtZW50TGF0ZXIobV9hdHRhY2ht
ZW50Um9vdCwgdG9rZW4tPmNvbW1lbnQoKSk7CiB9CiAKIHZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydENvbW1lbnRPbkhUTUxIdG1sRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2Vu
KQogewogICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpDb21tZW50
KTsKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBtX29wZW5FbGVtZW50cy5yb290Tm9kZSgp
OwotICAgIGF0dGFjaExhdGVyKHBhcmVudCwgQ29tbWVudDo6Y3JlYXRlKHBhcmVudC0+ZG9jdW1l
bnQoKSwgdG9rZW4tPmNvbW1lbnQoKSkpOworICAgIGF0dGFjaENvbW1lbnRMYXRlcihwYXJlbnQs
IHRva2VuLT5jb21tZW50KCkpOwogfQogCiB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKQEAgLTI4Niw3ICsyMjAs
NyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MRm9ybUVsZW1lbnQoQXRv
bWljSFRNTFRva2VuKiB0b2tlbiwgYm9vbCBpcwogICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50
ID0gY3JlYXRlSFRNTEVsZW1lbnQodG9rZW4pOwogICAgIEFTU0VSVChlbGVtZW50LT5oYXNUYWdO
YW1lKGZvcm1UYWcpKTsKICAgICBtX2Zvcm0gPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEhUTUxGb3Jt
RWxlbWVudD4oZWxlbWVudC5yZWxlYXNlKCkpOwotICAgIG1fZm9ybS0+c2V0RGVtb3RlZChpc0Rl
bW90ZWQpOworICAgIG1fZG9tTXV0YXRpb25RdWV1ZS0+c2V0RGVtb3RlZChtX2Zvcm0uZ2V0KCks
IGlzRGVtb3RlZCk7CiAgICAgYXR0YWNoTGF0ZXIoY3VycmVudE5vZGUoKSwgbV9mb3JtKTsKICAg
ICBtX29wZW5FbGVtZW50cy5wdXNoKEhUTUxTdGFja0l0ZW06OmNyZWF0ZShtX2Zvcm0sIHRva2Vu
KSk7CiB9CkBAIC0zNDcsNDMgKzI4MSwxMiBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpp
bnNlcnRGb3JlaWduRWxlbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuLCBjb25zdCBBdAogCiB2
b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0Tm9kZShjb25zdCBTdHJpbmcmIGNo
YXJhY3RlcnMsIFdoaXRlc3BhY2VNb2RlIHdoaXRlc3BhY2VNb2RlKQogewotICAgIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlVGFzayB0YXNrOwotICAgIHRhc2sucGFyZW50ID0gY3VycmVudE5vZGUoKTsK
LQotICAgIGlmIChzaG91bGRGb3N0ZXJQYXJlbnQoKSkKLSAgICAgICAgZmluZEZvc3RlclNpdGUo
dGFzayk7Ci0KICAgICAvLyBTdHJpbmdzIGNvbXBvc2VkIGVudGlyZWx5IG9mIHdoaXRlc3BhY2Ug
YXJlIGxpa2VseSB0byBiZSByZXBlYXRlZC4KICAgICAvLyBUdXJuIHRoZW0gaW50byBBdG9taWNT
dHJpbmcgc28gd2Ugc2hhcmUgYSBzaW5nbGUgc3RyaW5nIGZvciBlYWNoLgogICAgIGJvb2wgc2hv
dWxkVXNlQXRvbWljU3RyaW5nID0gd2hpdGVzcGFjZU1vZGUgPT0gQWxsV2hpdGVzcGFjZQogICAg
ICAgICB8fCAod2hpdGVzcGFjZU1vZGUgPT0gV2hpdGVzcGFjZVVua25vd24gJiYgaXNBbGxXaGl0
ZXNwYWNlKGNoYXJhY3RlcnMpKTsKIAotICAgIHVuc2lnbmVkIGN1cnJlbnRQb3NpdGlvbiA9IDA7
Ci0KLSAgICAvLyBGSVhNRTogU3BsaXR0aW5nIHRleHQgbm9kZXMgaW50byBzbWFsbGVyIGNodW5r
cyBjb250cmFkaWN0cyBIVE1MNSBzcGVjLCBidXQgaXMgY3VycmVudGx5IG5lY2Vzc2FyeQotICAg
IC8vIGZvciBwZXJmb3JtYW5jZSwgc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTU4OTg+LgotCi0gICAgTm9kZSogcHJldmlvdXNDaGlsZCA9IHRhc2submV4dENo
aWxkID8gdGFzay5uZXh0Q2hpbGQtPnByZXZpb3VzU2libGluZygpIDogdGFzay5wYXJlbnQtPmxh
c3RDaGlsZCgpOwotICAgIGlmIChwcmV2aW91c0NoaWxkICYmIHByZXZpb3VzQ2hpbGQtPmlzVGV4
dE5vZGUoKSkgewotICAgICAgICAvLyBGSVhNRTogV2UncmUgb25seSBzdXBwb3NlZCB0byBhcHBl
bmQgdG8gdGhpcyB0ZXh0IG5vZGUgaWYgaXQKLSAgICAgICAgLy8gd2FzIHRoZSBsYXN0IHRleHQg
bm9kZSBpbnNlcnRlZCBieSB0aGUgcGFyc2VyLgotICAgICAgICBDaGFyYWN0ZXJEYXRhKiB0ZXh0
Tm9kZSA9IHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGEqPihwcmV2aW91c0NoaWxkKTsKLSAgICAg
ICAgY3VycmVudFBvc2l0aW9uID0gdGV4dE5vZGUtPnBhcnNlckFwcGVuZERhdGEoY2hhcmFjdGVy
cy5jaGFyYWN0ZXJzKCksIGNoYXJhY3RlcnMubGVuZ3RoKCksIFRleHQ6OmRlZmF1bHRMZW5ndGhM
aW1pdCk7Ci0gICAgfQotCi0gICAgd2hpbGUgKGN1cnJlbnRQb3NpdGlvbiA8IGNoYXJhY3RlcnMu
bGVuZ3RoKCkpIHsKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gVGV4dDo6Y3JlYXRl
V2l0aExlbmd0aExpbWl0KHRhc2sucGFyZW50LT5kb2N1bWVudCgpLCBzaG91bGRVc2VBdG9taWNT
dHJpbmcgPyBBdG9taWNTdHJpbmcoY2hhcmFjdGVycykuc3RyaW5nKCkgOiBjaGFyYWN0ZXJzLCBj
dXJyZW50UG9zaXRpb24pOwotICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgd2hvbGUgc3RyaW5nIG9m
IHVuYnJlYWthYmxlIGNoYXJhY3RlcnMgdGhlIGFib3ZlIGNvdWxkIGxlYWQgdG8gYW4gaW5maW5p
dGUgbG9vcC4gRXhjZWVkaW5nIHRoZSBsZW5ndGggbGltaXQgaXMgdGhlIGxlc3NlciBldmlsLgot
ICAgICAgICBpZiAoIXRleHROb2RlLT5sZW5ndGgoKSkgewotICAgICAgICAgICAgU3RyaW5nIHN1
YnN0cmluZyA9IGNoYXJhY3RlcnMuc3Vic3RyaW5nKGN1cnJlbnRQb3NpdGlvbik7Ci0gICAgICAg
ICAgICB0ZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZSh0YXNrLnBhcmVudC0+ZG9jdW1lbnQoKSwgc2hv
dWxkVXNlQXRvbWljU3RyaW5nID8gQXRvbWljU3RyaW5nKHN1YnN0cmluZykuc3RyaW5nKCkgOiBz
dWJzdHJpbmcpOwotICAgICAgICB9Ci0KLSAgICAgICAgY3VycmVudFBvc2l0aW9uICs9IHRleHRO
b2RlLT5sZW5ndGgoKTsKLSAgICAgICAgQVNTRVJUKGN1cnJlbnRQb3NpdGlvbiA8PSBjaGFyYWN0
ZXJzLmxlbmd0aCgpKTsKLSAgICAgICAgdGFzay5jaGlsZCA9IHRleHROb2RlLnJlbGVhc2UoKTsK
LSAgICAgICAgZXhlY3V0ZVRhc2sodGFzayk7Ci0gICAgfQorICAgIGF0dGFjaFRleHRMYXRlcihj
dXJyZW50Tm9kZSgpLCBjaGFyYWN0ZXJzLCBzaG91bGRVc2VBdG9taWNTdHJpbmcpOwogfQogCiBQ
YXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50KEF0
b21pY0hUTUxUb2tlbiogdG9rZW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKQpA
QCAtNDYyLDQwICszNjUsNzcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Z2VuZXJhdGVJ
bXBsaWVkRW5kVGFncygpCiAgICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcCgpOwogfQogCi12b2lk
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5kRm9zdGVyU2l0ZShIVE1MQ29uc3RydWN0aW9uU2l0
ZVRhc2smIHRhc2spCitib29sIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpzaG91bGRGb3N0ZXJQYXJl
bnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQK
KyAgICAgICAgJiYgY3VycmVudFN0YWNrSXRlbSgpLT5pc0VsZW1lbnROb2RlKCkKKyAgICAgICAg
JiYgY3VycmVudFN0YWNrSXRlbSgpLT5jYXVzZXNGb3N0ZXJQYXJlbnRpbmcoKTsKK30KKwordm9p
ZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Zm9zdGVyUGFyZW50KFBhc3NSZWZQdHI8Tm9kZT4gbm9k
ZSkKK3sKKyAgICBhdHRhY2hGb3N0ZXJQYXJlbnRlZExhdGVyKG5vZGUpOworfQorCit2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5kTGFzdFRhYmxlRWxlbWVudChFbGVtZW50KiYgdGFibGUs
IENvbnRhaW5lck5vZGUqJiBzdGFja1BhcmVudCkKIHsKICAgICBIVE1MRWxlbWVudFN0YWNrOjpF
bGVtZW50UmVjb3JkKiBsYXN0VGFibGVFbGVtZW50UmVjb3JkID0gbV9vcGVuRWxlbWVudHMudG9w
bW9zdCh0YWJsZVRhZy5sb2NhbE5hbWUoKSk7CiAgICAgaWYgKGxhc3RUYWJsZUVsZW1lbnRSZWNv
cmQpIHsKLSAgICAgICAgRWxlbWVudCogbGFzdFRhYmxlRWxlbWVudCA9IGxhc3RUYWJsZUVsZW1l
bnRSZWNvcmQtPmVsZW1lbnQoKTsKLSAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbGFz
dFRhYmxlRWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAgICAgICAvLyBXaGVuIHBhcnNpbmcgSFRN
TCBmcmFnbWVudHMsIHdlIHNraXAgc3RlcCA0LjIgKCJMZXQgcm9vdCBiZSBhIG5ldyBodG1sIGVs
ZW1lbnQgd2l0aCBubyBhdHRyaWJ1dGVzIikgZm9yIGVmZmljaWVuY3ksCi0gICAgICAgIC8vIGFu
ZCBpbnN0ZWFkIHVzZSB0aGUgRG9jdW1lbnRGcmFnbWVudCBhcyBhIHJvb3Qgbm9kZS4gU28gd2Ug
bXVzdCB0cmVhdCB0aGUgcm9vdCBub2RlIChEb2N1bWVudEZyYWdtZW50KSBhcyBpZiBpdCBpcyBh
IGh0bWwgZWxlbWVudCBoZXJlLgotICAgICAgICBpZiAocGFyZW50ICYmIChwYXJlbnQtPmlzRWxl
bWVudE5vZGUoKSB8fCAobV9pc1BhcnNpbmdGcmFnbWVudCAmJiBwYXJlbnQgPT0gbV9vcGVuRWxl
bWVudHMucm9vdE5vZGUoKSkpKSB7Ci0gICAgICAgICAgICB0YXNrLnBhcmVudCA9IHBhcmVudDsK
LSAgICAgICAgICAgIHRhc2submV4dENoaWxkID0gbGFzdFRhYmxlRWxlbWVudDsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0YXNrLnBhcmVudCA9IGxhc3RUYWJsZUVs
ZW1lbnRSZWNvcmQtPm5leHQoKS0+ZWxlbWVudCgpOworICAgICAgICB0YWJsZSA9IGxhc3RUYWJs
ZUVsZW1lbnRSZWNvcmQtPmVsZW1lbnQoKTsKKyAgICAgICAgc3RhY2tQYXJlbnQgPSBsYXN0VGFi
bGVFbGVtZW50UmVjb3JkLT5uZXh0KCktPm5vZGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0
YWJsZSA9IDA7CisgICAgICAgIHN0YWNrUGFyZW50ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgSFRN
TENvbnN0cnVjdGlvblNpdGU6OmF0dGFjaExhdGVyKENvbnRhaW5lck5vZGUqIHBhcmVudCwgUGFz
c1JlZlB0cjxOb2RlPiBjaGlsZCwgYm9vbCBzZWxmQ2xvc2luZykKK3sKKyAgICBpZiAoc2hvdWxk
Rm9zdGVyUGFyZW50KCkpIHsKKyAgICAgICAgYXR0YWNoRm9zdGVyUGFyZW50ZWRMYXRlcihjaGls
ZCwgc2VsZkNsb3NpbmcpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIC8vIEZyYWdtZW50
IGNhc2UKLSAgICB0YXNrLnBhcmVudCA9IG1fb3BlbkVsZW1lbnRzLnJvb3ROb2RlKCk7IC8vIERv
Y3VtZW50RnJhZ21lbnQKKyAgICBtX2RvbU11dGF0aW9uUXVldWUtPmluc2VydChwYXJlbnQsIGNo
aWxkLCBzZWxmQ2xvc2luZywgbWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkKCkpOwogfQogCi1i
b29sIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpzaG91bGRGb3N0ZXJQYXJlbnQoKSBjb25zdAordm9p
ZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoRm9zdGVyUGFyZW50ZWRMYXRlcihQYXNzUmVm
UHRyPE5vZGU+IGNoaWxkLCBib29sIHNlbGZDbG9zaW5nKQogewotICAgIHJldHVybiBtX3JlZGly
ZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQKLSAgICAgICAgJiYgY3VycmVudFN0YWNrSXRlbSgpLT5p
c0VsZW1lbnROb2RlKCkKLSAgICAgICAgJiYgY3VycmVudFN0YWNrSXRlbSgpLT5jYXVzZXNGb3N0
ZXJQYXJlbnRpbmcoKTsKKyAgICBFbGVtZW50KiB0YWJsZTsKKyAgICBDb250YWluZXJOb2RlKiB0
YWJsZU5leHQ7CisgICAgZmluZExhc3RUYWJsZUVsZW1lbnQodGFibGUsIHRhYmxlTmV4dCk7Cisg
ICAgbV9kb21NdXRhdGlvblF1ZXVlLT5pbnNlcnRGb3N0ZXJQYXJlbnRlZCh0YWJsZSwgdGFibGVO
ZXh0LCBtX29wZW5FbGVtZW50cy5yb290Tm9kZSgpLCBtX2lzUGFyc2luZ0ZyYWdtZW50LCBjaGls
ZCwgc2VsZkNsb3NpbmcpOwogfQogCi12b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmb3N0ZXJQ
YXJlbnQoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
YXR0YWNoVGV4dExhdGVyKENvbnRhaW5lck5vZGUqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBjaGFy
YWN0ZXJzLCBib29sIHNob3VsZFVzZUF0b21pY1N0cmluZykKK3sKKyAgICBpZiAoc2hvdWxkRm9z
dGVyUGFyZW50KCkpIHsKKyAgICAgICAgYXR0YWNoRm9zdGVyUGFyZW50ZWRUZXh0TGF0ZXIoY2hh
cmFjdGVycywgc2hvdWxkVXNlQXRvbWljU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2RvbU11dGF0aW9uUXVldWUtPmluc2VydFRleHQocGFyZW50LCBjaGFyYWN0ZXJzLCBz
aG91bGRVc2VBdG9taWNTdHJpbmcsIG1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCgpKTsKK30K
Kwordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoRm9zdGVyUGFyZW50ZWRUZXh0TGF0
ZXIoY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBib29sIHNob3VsZFVzZUF0b21pY1N0cmluZykK
K3sKKyAgICBFbGVtZW50KiB0YWJsZTsKKyAgICBDb250YWluZXJOb2RlKiB0YWJsZU5leHQ7Cisg
ICAgZmluZExhc3RUYWJsZUVsZW1lbnQodGFibGUsIHRhYmxlTmV4dCk7CisgICAgbV9kb21NdXRh
dGlvblF1ZXVlLT5pbnNlcnRGb3N0ZXJQYXJlbnRlZFRleHQodGFibGUsIHRhYmxlTmV4dCwgbV9v
cGVuRWxlbWVudHMucm9vdE5vZGUoKSwgbV9pc1BhcnNpbmdGcmFnbWVudCwgY2hhcmFjdGVycywg
c2hvdWxkVXNlQXRvbWljU3RyaW5nKTsKK30KKwordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
YXR0YWNoQ29tbWVudExhdGVyKENvbnRhaW5lck5vZGUqIHBhcmVudCwgY29uc3QgU3RyaW5nJiBj
b21tZW50KQoreworICAgIG1fZG9tTXV0YXRpb25RdWV1ZS0+aW5zZXJ0Q29tbWVudChwYXJlbnQs
IGNvbW1lbnQsIG1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCgpKTsKK30KKwordm9pZCBIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoQ29tbWVudE9uRG9jdW1lbnRMYXRlcihDb250YWluZXJO
b2RlKiBhdHRhY2htZW50Um9vdCwgY29uc3QgU3RyaW5nJiBjb21tZW50KQoreworICAgIG1fZG9t
TXV0YXRpb25RdWV1ZS0+aW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQobV9kb2N1bWVudCwgYXR0YWNo
bWVudFJvb3QsIGNvbW1lbnQpOworfQorCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjphdHRh
Y2hEb2N0eXBlTGF0ZXIoQ29udGFpbmVyTm9kZSogYXR0YWNobWVudFJvb3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCkK
IHsKLSAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2sgdGFzazsKLSAgICBmaW5kRm9zdGVyU2l0
ZSh0YXNrKTsKLSAgICB0YXNrLmNoaWxkID0gbm9kZTsKLSAgICBBU1NFUlQodGFzay5wYXJlbnQp
OwotICAgIG1fYXR0YWNobWVudFF1ZXVlLmFwcGVuZCh0YXNrKTsKKyAgICBtX2RvbU11dGF0aW9u
UXVldWUtPmluc2VydERvY3R5cGUobV9kb2N1bWVudCwgYXR0YWNobWVudFJvb3QsIG5hbWUsIHB1
YmxpY0lkLCBzeXN0ZW1JZCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5oCmluZGV4IDYwNTcyYmRkODU2Mjc0NDVjYmQ4NjVh
OTY3OWQyZmViYTVmNmE4ZGMuLjQxNTRmNWRiZTM0NjgwZmZiYmYyZjA1MzJjODgyMjljNDU0ZGFh
ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rp
b25TaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlv
blNpdGUuaApAQCAtMzgsMjYgKzM4LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1
Y3QgSFRNTENvbnN0cnVjdGlvblNpdGVUYXNrIHsKLSAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZVRh
c2soKQotICAgICAgICA6IHNlbGZDbG9zaW5nKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50OwotICAgIFJlZlB0cjxOb2RlPiBuZXh0Q2hpbGQ7
Ci0gICAgUmVmUHRyPE5vZGU+IGNoaWxkOwotICAgIGJvb2wgc2VsZkNsb3Npbmc7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLW5hbWVzcGFjZSBXVEYgewotdGVtcGxhdGU8PiBzdHJ1
Y3QgVmVjdG9yVHJhaXRzPFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlVGFzaz4gOiBTaW1w
bGVDbGFzc1ZlY3RvclRyYWl0cyB7IH07Ci19IC8vIG5hbWVzcGFjZSBXVEYKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCiBlbnVtIFdoaXRlc3BhY2VNb2RlIHsKICAgICBBbGxXaGl0ZXNwYWNlLAog
ICAgIE5vdEFsbFdoaXRlc3BhY2UsCkBAIC02NiwxOCArNDYsMTggQEAgZW51bSBXaGl0ZXNwYWNl
TW9kZSB7CiAKIGNsYXNzIEF0b21pY0hUTUxUb2tlbjsKIGNsYXNzIERvY3VtZW50OworY2xhc3Mg
SFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgSFRNTEZv
cm1FbGVtZW50OwogCiBjbGFzcyBIVE1MQ29uc3RydWN0aW9uU2l0ZSB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSFRNTENvbnN0cnVjdGlvblNpdGUpOwogcHVibGljOgotICAgIEhUTUxDb25z
dHJ1Y3Rpb25TaXRlKERvY3VtZW50KiwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCk7Ci0g
ICAgSFRNTENvbnN0cnVjdGlvblNpdGUoRG9jdW1lbnRGcmFnbWVudCosIEZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbiwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCk7CisgICAgSFRNTENv
bnN0cnVjdGlvblNpdGUoRG9jdW1lbnQqLCBIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZSosIHVu
c2lnbmVkIG1heGltdW1ET01UcmVlRGVwdGgpOworICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlKERv
Y3VtZW50RnJhZ21lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24sIEhUTUxQYXJzZXJE
T01NdXRhdGlvblF1ZXVlKiwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCk7CiAgICAgfkhU
TUxDb25zdHJ1Y3Rpb25TaXRlKCk7CiAKICAgICB2b2lkIGRldGFjaCgpOwotICAgIHZvaWQgZXhl
Y3V0ZVF1ZXVlZFRhc2tzKCk7CiAKICAgICB2b2lkIGluc2VydERvY3R5cGUoQXRvbWljSFRNTFRv
a2VuKik7CiAgICAgdm9pZCBpbnNlcnRDb21tZW50KEF0b21pY0hUTUxUb2tlbiopOwpAQCAtMTA4
LDYgKzg4LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpOwog
ICAgIHZvaWQgZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24oY29uc3QgQXRvbWlj
U3RyaW5nJiB0YWdOYW1lKTsKIAorICAgIGJvb2wgbWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVk
KCkgY29uc3QgeyByZXR1cm4gbV9vcGVuRWxlbWVudHMuc3RhY2tEZXB0aCgpID4gbV9tYXhpbXVt
RE9NVHJlZURlcHRoOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fb3Bl
bkVsZW1lbnRzLnN0YWNrRGVwdGgoKTsgfQogICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRS
ZWNvcmQqIGN1cnJlbnRFbGVtZW50UmVjb3JkKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuRWxlbWVu
dHMudG9wUmVjb3JkKCk7IH0KICAgICBFbGVtZW50KiBjdXJyZW50RWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BlbkVsZW1lbnRzLnRvcCgpOyB9CkBAIC0xNDYsMTggKzEyNywxOSBAQCBwdWJs
aWM6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAgICAvLyBJbiB0aGUgY29tbW9uIGNhc2UsIHRoaXMg
cXVldWUgd2lsbCBoYXZlIG9ubHkgb25lIHRhc2sgYmVjYXVzZSBtb3N0Ci0gICAgLy8gdG9rZW5z
IHByb2R1Y2Ugb25seSBvbmUgRE9NIG11dGF0aW9uLgotICAgIHR5cGVkZWYgVmVjdG9yPEhUTUxD
b25zdHJ1Y3Rpb25TaXRlVGFzaywgMT4gQXR0YWNobWVudFF1ZXVlOworICAgIHZvaWQgZmluZExh
c3RUYWJsZUVsZW1lbnQoRWxlbWVudComIHRhYmxlLCBDb250YWluZXJOb2RlKiYgdGFibGVOZXh0
KTsKIAogICAgIHZvaWQgYXR0YWNoTGF0ZXIoQ29udGFpbmVyTm9kZSogcGFyZW50LCBQYXNzUmVm
UHRyPE5vZGU+IGNoaWxkLCBib29sIHNlbGZDbG9zaW5nID0gZmFsc2UpOwotCi0gICAgdm9pZCBm
aW5kRm9zdGVyU2l0ZShIVE1MQ29uc3RydWN0aW9uU2l0ZVRhc2smKTsKKyAgICB2b2lkIGF0dGFj
aEZvc3RlclBhcmVudGVkTGF0ZXIoUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCwgYm9vbCBzZWxmQ2xv
c2luZyA9IGZhbHNlKTsKKyAgICB2b2lkIGF0dGFjaFRleHRMYXRlcihDb250YWluZXJOb2RlKiBw
YXJlbnQsIGNvbnN0IFN0cmluZyYgY2hhcmFjdGVycywgYm9vbCBzaG91bGRVc2VBdG9taWNTdHJp
bmcpOworICAgIHZvaWQgYXR0YWNoRm9zdGVyUGFyZW50ZWRUZXh0TGF0ZXIoY29uc3QgU3RyaW5n
JiBjaGFyYWN0ZXJzLCBib29sIHNob3VsZFVzZUF0b21pY1N0cmluZyk7CisgICAgdm9pZCBhdHRh
Y2hDb21tZW50TGF0ZXIoQ29udGFpbmVyTm9kZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGNvbW1l
bnQpOworICAgIHZvaWQgYXR0YWNoQ29tbWVudE9uRG9jdW1lbnRMYXRlcihDb250YWluZXJOb2Rl
KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgY29tbWVudCk7CisgICAgdm9pZCBhdHRhY2hEb2N0eXBl
TGF0ZXIoQ29udGFpbmVyTm9kZSogYXR0YWNobWVudFJvb3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCk7CiAKICAgICBQ
YXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUhUTUxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiopOwog
ICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gY3JlYXRlRWxlbWVudChBdG9taWNIVE1MVG9rZW4qLCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7CiAKLSAgICB2b2lkIG1lcmdlQXR0cmli
dXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KEF0b21pY0hUTUxUb2tlbiosIEVsZW1lbnQqKTsKICAg
ICB2b2lkIGRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlSWZOZWVkZWQoKTsKIAogICAg
IERvY3VtZW50KiBtX2RvY3VtZW50OwpAQCAtMTY3LDEzICsxNDksMTMgQEAgcHJpdmF0ZToKICAg
ICAvLyBhbmQgYSBEb2N1bWVudCBpbiBhbGwgb3RoZXIgY2FzZXMuCiAgICAgQ29udGFpbmVyTm9k
ZSogbV9hdHRhY2htZW50Um9vdDsKICAgICAKKyAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1
ZSogbV9kb21NdXRhdGlvblF1ZXVlOworCiAgICAgUmVmUHRyPEhUTUxTdGFja0l0ZW0+IG1faGVh
ZDsKICAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBtX2Zvcm07CiAgICAgbXV0YWJsZSBIVE1M
RWxlbWVudFN0YWNrIG1fb3BlbkVsZW1lbnRzOwogICAgIG11dGFibGUgSFRNTEZvcm1hdHRpbmdF
bGVtZW50TGlzdCBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50czsKIAotICAgIEF0dGFjaG1lbnRR
dWV1ZSBtX2F0dGFjaG1lbnRRdWV1ZTsKLQogICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbjsKICAgICBib29sIG1faXNQYXJzaW5nRnJh
Z21lbnQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1
bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQ
YXJzZXIuY3BwCmluZGV4IDg4NjQ2ZTRmNTdjZTI0OTAyNGU5YWU1ZGI3YjU0NjdhYWNlYmFhODgu
LjgxMDFlYmMwZDNkZTFiOTY3ZjJkMjBhMjM2Zjk0ZDg2NzQ3ZjM1YjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlLmgi
CiAjaW5jbHVkZSAiSFRNTFBhcnNlclNjaGVkdWxlci5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6
ZXIuaCIKICNpbmNsdWRlICJIVE1MUHJlbG9hZFNjYW5uZXIuaCIKQEAgLTcyLDYgKzczLDcgQEAg
c3RhdGljIEhUTUxUb2tlbml6ZXJTdGF0ZTo6U3RhdGUgdG9rZW5pemVyU3RhdGVGb3JDb250ZXh0
RWxlbWVudChFbGVtZW50KiBjb250ZXgKIAogSFRNTERvY3VtZW50UGFyc2VyOjpIVE1MRG9jdW1l
bnRQYXJzZXIoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCByZXBvcnRFcnJvcnMpCiAgICAg
OiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCisgICAgLCBtX2RvbU11dGF0aW9u
UXVldWUoSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU6OmNyZWF0ZSgpKQogICAgICwgbV90b2tl
bml6ZXIoSFRNTFRva2VuaXplcjo6Y3JlYXRlKHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKGRvY3Vt
ZW50KSkpCiAgICAgLCBtX3NjcmlwdFJ1bm5lcihIVE1MU2NyaXB0UnVubmVyOjpjcmVhdGUoZG9j
dW1lbnQsIHRoaXMpKQogICAgICwgbV90cmVlQnVpbGRlcihIVE1MVHJlZUJ1aWxkZXI6OmNyZWF0
ZSh0aGlzLCBkb2N1bWVudCwgcmVwb3J0RXJyb3JzLCB1c2VQcmVIVE1MNVBhcnNlclF1aXJrcyhk
b2N1bWVudCksIG1heGltdW1ET01UcmVlRGVwdGgoZG9jdW1lbnQpKSkKQEAgLTg2LDYgKzg4LDcg
QEAgSFRNTERvY3VtZW50UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoSFRNTERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCByZXBvcnRFcnJvcnMKIC8vIG1pbmltaXplIGNvZGUgZHVwbGljYXRpb24g
YmV0d2VlbiB0aGVzZSBjb25zdHJ1Y3RvcnMuCiBIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1
bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVs
ZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQog
ICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGZyYWdtZW50LT5kb2N1bWVudCgpKQorICAg
ICwgbV9kb21NdXRhdGlvblF1ZXVlKEhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlOjpjcmVhdGUo
KSkKICAgICAsIG1fdG9rZW5pemVyKEhUTUxUb2tlbml6ZXI6OmNyZWF0ZSh1c2VQcmVIVE1MNVBh
cnNlclF1aXJrcyhmcmFnbWVudC0+ZG9jdW1lbnQoKSkpKQogICAgICwgbV90cmVlQnVpbGRlcihI
VE1MVHJlZUJ1aWxkZXI6OmNyZWF0ZSh0aGlzLCBmcmFnbWVudCwgY29udGV4dEVsZW1lbnQsIHNj
cmlwdGluZ1Blcm1pc3Npb24sIHVzZVByZUhUTUw1UGFyc2VyUXVpcmtzKGZyYWdtZW50LT5kb2N1
bWVudCgpKSwgbWF4aW11bURPTVRyZWVEZXB0aChmcmFnbWVudC0+ZG9jdW1lbnQoKSkpKQogICAg
ICwgbV94c3NBdWRpdG9yKHRoaXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxEb2N1bWVudFBhcnNlci5oCmluZGV4IDRlMjZjNTcyNjdjZmM3YzRkYmU0ZmJkNjg1ZDk3YmE1
MDI5MDIxM2QuLjFlYmQwNjMxMTYyNDk4MjYyYzE4MDc1M2MyYWJhNWM0Nzg4MjM1NWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oCkBAIC00
Myw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERvY3VtZW50OwogY2xhc3Mg
RG9jdW1lbnRGcmFnbWVudDsKIGNsYXNzIEhUTUxEb2N1bWVudDsKK2NsYXNzIEhUTUxQYXJzZXJE
T01NdXRhdGlvblF1ZXVlOwogY2xhc3MgSFRNTFBhcnNlclNjaGVkdWxlcjsKIGNsYXNzIEhUTUxU
b2tlbml6ZXI7CiBjbGFzcyBIVE1MU2NyaXB0UnVubmVyOwpAQCAtNzAsNiArNzEsNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGJvb2wgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MoRG9jdW1lbnQqKTsK
ICAgICBzdGF0aWMgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aChEb2N1bWVudCopOwogCisg
ICAgSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUqIGRvbU11dGF0aW9uUXVldWUoKSBjb25zdCB7
IHJldHVybiBtX2RvbU11dGF0aW9uUXVldWUuZ2V0KCk7IH0KICAgICBIVE1MVG9rZW5pemVyKiB0
b2tlbml6ZXIoKSBjb25zdCB7IHJldHVybiBtX3Rva2VuaXplci5nZXQoKTsgfQogICAgIFN0cmlu
ZyBzb3VyY2VGb3JUb2tlbihjb25zdCBIVE1MVG9rZW4mKTsKIApAQCAtMTQ0LDYgKzE0Niw3IEBA
IHByaXZhdGU6CiAgICAgLy8gV2UgaG9sZCBtX3Rva2VuIGhlcmUgYmVjYXVzZSBpdCBtaWdodCBi
ZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgSFRNTFRva2VuIG1fdG9rZW47CiAKKyAgICBPd25Q
dHI8SFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWU+IG1fZG9tTXV0YXRpb25RdWV1ZTsKICAgICBP
d25QdHI8SFRNTFRva2VuaXplcj4gbV90b2tlbml6ZXI7CiAgICAgT3duUHRyPEhUTUxTY3JpcHRS
dW5uZXI+IG1fc2NyaXB0UnVubmVyOwogICAgIE93blB0cjxIVE1MVHJlZUJ1aWxkZXI+IG1fdHJl
ZUJ1aWxkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxl
bWVudFN0YWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3Rh
Y2suY3BwCmluZGV4IDYyZWQ2ZjRlMzlkMjI5ZGU4YjRiODY4MTkzNDExYjE3ODE5NDljNzQuLmNl
MWQ4MjQxYTYwNmYyMWY2MDRkMWE4NDI5ODMxMzkyNjhhMGQ4ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suY3BwCkBAIC0zMCw2ICszMCw3IEBA
CiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1
ZS5oIgogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtMTUzLDEyICsxNTQsMTQgQEAgYm9vbCBIVE1M
RWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkOjppc0Fib3ZlKEVsZW1lbnRSZWNvcmQqIG90aGVy
KSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSFRNTEVsZW1lbnRTdGFjazo6SFRNTEVs
ZW1lbnRTdGFjaygpCitIVE1MRWxlbWVudFN0YWNrOjpIVE1MRWxlbWVudFN0YWNrKEhUTUxQYXJz
ZXJET01NdXRhdGlvblF1ZXVlKiBkb21NdXRhdGlvblF1ZXVlKQogICAgIDogbV9yb290Tm9kZSgw
KQogICAgICwgbV9oZWFkRWxlbWVudCgwKQogICAgICwgbV9ib2R5RWxlbWVudCgwKQogICAgICwg
bV9zdGFja0RlcHRoKDApCisgICAgLCBtX2RvbU11dGF0aW9uUXVldWUoZG9tTXV0YXRpb25RdWV1
ZSkKIHsKKyAgICBBU1NFUlQobV9kb21NdXRhdGlvblF1ZXVlKTsKIH0KIAogSFRNTEVsZW1lbnRT
dGFjazo6fkhUTUxFbGVtZW50U3RhY2soKQpAQCAtMjAzLDcgKzIwNiw3IEBAIHZvaWQgSFRNTEVs
ZW1lbnRTdGFjazo6cG9wQWxsKCkKICAgICBtX2JvZHlFbGVtZW50ID0gMDsKICAgICBtX3N0YWNr
RGVwdGggPSAwOwogICAgIHdoaWxlIChtX3RvcCkgewotICAgICAgICB0b3BOb2RlKCktPmZpbmlz
aFBhcnNpbmdDaGlsZHJlbigpOworICAgICAgICBtX2RvbU11dGF0aW9uUXVldWUtPmZpbmlzaFBh
cnNpbmdDaGlsZHJlbih0b3BOb2RlKCkpOwogICAgICAgICBtX3RvcCA9IG1fdG9wLT5yZWxlYXNl
TmV4dCgpOwogICAgIH0KIH0KQEAgLTM3MSw3ICszNzQsNyBAQCB2b2lkIEhUTUxFbGVtZW50U3Rh
Y2s6Omluc2VydEFib3ZlKFBhc3NSZWZQdHI8SFRNTFN0YWNrSXRlbT4gaXRlbSwgRWxlbWVudFJl
Y29yZAogCiAgICAgICAgIG1fc3RhY2tEZXB0aCsrOwogICAgICAgICByZWNvcmRBYm92ZS0+c2V0
TmV4dChhZG9wdFB0cihuZXcgRWxlbWVudFJlY29yZChpdGVtLCByZWNvcmRBYm92ZS0+cmVsZWFz
ZU5leHQoKSkpKTsKLSAgICAgICAgcmVjb3JkQWJvdmUtPm5leHQoKS0+ZWxlbWVudCgpLT5iZWdp
blBhcnNpbmdDaGlsZHJlbigpOworICAgICAgICBtX2RvbU11dGF0aW9uUXVldWUtPmJlZ2luUGFy
c2luZ0NoaWxkcmVuKHJlY29yZEFib3ZlLT5uZXh0KCktPmVsZW1lbnQoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC01NzQsNyArNTc3LDcg
QEAgdm9pZCBIVE1MRWxlbWVudFN0YWNrOjpwb3BDb21tb24oKQogICAgIEFTU0VSVCghdG9wU3Rh
Y2tJdGVtKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sVGFnKSk7CiAgICAgQVNTRVJUKCF0
b3BTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpIHx8ICFtX2hlYWRF
bGVtZW50KTsKICAgICBBU1NFUlQoIXRvcFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6Ym9keVRhZykgfHwgIW1fYm9keUVsZW1lbnQpOwotICAgIHRvcCgpLT5maW5pc2hQYXJzaW5n
Q2hpbGRyZW4oKTsKKyAgICBtX2RvbU11dGF0aW9uUXVldWUtPmZpbmlzaFBhcnNpbmdDaGlsZHJl
bih0b3AoKSk7CiAgICAgbV90b3AgPSBtX3RvcC0+cmVsZWFzZU5leHQoKTsKIAogICAgIG1fc3Rh
Y2tEZXB0aC0tOwpAQCAtNTg5LDcgKzU5Miw3IEBAIHZvaWQgSFRNTEVsZW1lbnRTdGFjazo6cmVt
b3ZlTm9uVG9wQ29tbW9uKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIGlmIChwb3MtPm5leHQo
KS0+ZWxlbWVudCgpID09IGVsZW1lbnQpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyBpdCBP
SyB0byBjYWxsIGZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCiAgICAgICAgICAgICAvLyB3aGVuIHRo
ZSBjaGlsZHJlbiBhcmVuJ3QgYWN0dWFsbHkgZmluaXNoZWQ/Ci0gICAgICAgICAgICBlbGVtZW50
LT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIG1fZG9tTXV0YXRpb25RdWV1
ZS0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKGVsZW1lbnQpOwogICAgICAgICAgICAgcG9zLT5zZXRO
ZXh0KHBvcy0+bmV4dCgpLT5yZWxlYXNlTmV4dCgpKTsKICAgICAgICAgICAgIG1fc3RhY2tEZXB0
aC0tOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTEVsZW1lbnRTdGFjay5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTEVsZW1lbnRTdGFjay5oCmluZGV4IDYyMGM1YTE5NDNlYzdjMGJlYWI1NzQ4MjQ0NjZjYzQx
ZjE3NjRmMDQuLjEwYjI0MjVlYmI4Yzk2OWMxZjQ1YjcwY2Y1M2UwZGE2ZjY3MGQ0YmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbGVtZW50U3RhY2suaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRWxlbWVudFN0YWNrLmgKQEAgLTQxLDYg
KzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNz
IERvY3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBFbGVtZW50OworY2xhc3MgSFRNTFBhcnNlckRPTU11
dGF0aW9uUXVldWU7CiBjbGFzcyBRdWFsaWZpZWROYW1lOwogCiAvLyBOT1RFOiBUaGUgSFRNTDUg
c3BlYyB1c2VzIGEgYmFja3dhcmRzIChncm93cyBkb3dud2FyZCkgc3RhY2suICBXZSdyZSB1c2lu
ZwpAQCAtNDgsNyArNDksNyBAQCBjbGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgSFRNTEVsZW1l
bnRTdGFjayB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSFRNTEVsZW1lbnRTdGFjayk7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEhUTUxFbGVtZW50U3RhY2soKTsK
KyAgICBIVE1MRWxlbWVudFN0YWNrKEhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlKik7CiAgICAg
fkhUTUxFbGVtZW50U3RhY2soKTsKIAogICAgIGNsYXNzIEVsZW1lbnRSZWNvcmQgewpAQCAtMTc4
LDYgKzE3OSw4IEBAIHByaXZhdGU6CiAgICAgRWxlbWVudCogbV9oZWFkRWxlbWVudDsKICAgICBF
bGVtZW50KiBtX2JvZHlFbGVtZW50OwogICAgIHVuc2lnbmVkIG1fc3RhY2tEZXB0aDsKKworICAg
IEhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlKiBtX2RvbU11dGF0aW9uUXVldWU7CiB9OwogICAg
IAogaW5saW5lIGJvb2wgaXNJbkhUTUxOYW1lc3BhY2UoY29uc3QgSFRNTFN0YWNrSXRlbSogaXRl
bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJET01N
dXRhdGlvblF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJE
T01NdXRhdGlvblF1ZXVlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOGQ2ZmVhOGI0ZDAwYWQ3YmNmNzdjYTUx
MGQ4Y2MyNmY5YzdjZWZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgR09PR0xFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVl
OjpmbHVzaCgpCit7CisgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBtX3Rhc2tRdWV1ZS5zaXplKCk7
CisgICAgaWYgKCFzaXplKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDb3B5IHRoZSB0YXNr
IHF1ZXVlIGludG8gYSBsb2NhbCB2YXJpYWJsZSBpbiBjYXNlIGV4ZWN1dGVUYXNrCisgICAgLy8g
cmUtZW50ZXJzIHRoZSBwYXJzZXIuCisgICAgVGFza1F1ZXVlIHF1ZXVlOworICAgIHF1ZXVlLnN3
YXAobV90YXNrUXVldWUpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
CisgICAgICAgIHF1ZXVlW2ldLT5wZXJmb3JtVGFzaygpOworCisgICAgLy8gV2UgbWlnaHQgYmUg
ZGV0YWNoZWQgbm93LgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZS5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yNzdiMzVjYzYyNzE0OWQ0YjhmOThkYTQzNDcwNDhmZGM2NzdhM2FhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU11
dGF0aW9uUXVldWUuaApAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBHT09HTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEhUTUxQYXJzZXJET01NdXRh
dGlvblF1ZXVlX2gKKyNkZWZpbmUgSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWVfaAorCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50QXR0cmlidXRlRGF0YS5oIgorI2lu
Y2x1ZGUgIkhUTUxQYXJzZXJET01NdXRhdGlvblRhc2suaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDb250YWluZXJOb2RlOworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBFbGVt
ZW50OworY2xhc3MgSFRNTEZvcm1FbGVtZW50OworY2xhc3MgSFRNTEh0bWxFbGVtZW50OworY2xh
c3MgTm9kZTsKKworY2xhc3MgSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEhUTUxQYXJzZXJET01NdXRhdGlvblF1ZXVlKTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxIVE1MUGFy
c2VyRE9NTXV0YXRpb25RdWV1ZT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgSFRNTFBhcnNlckRPTU11dGF0aW9uUXVldWUoKSk7CisgICAgfQorCisgICAgYm9v
bCBpc1NwZWN1bGF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc1NwZWN1bGF0aW5nOyB9CisgICAg
dm9pZCBzZXRTcGVjdWxhdGluZyhib29sIGlzU3BlY3VsYXRpbmcpIHsgbV9pc1NwZWN1bGF0aW5n
ID0gaXNTcGVjdWxhdGluZzsgfQorCisgICAgdm9pZCBiZWdpblBhcnNpbmdDaGlsZHJlbihOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUpOworICAgICAgICBpZiAobV9pc1Nw
ZWN1bGF0aW5nKQorICAgICAgICAgICAgbV90YXNrUXVldWUuYXBwZW5kKEhUTUxQYXJzZXJET01N
dXRhdGlvbkJlZ2luUGFyc2luZ0NoaWxkcmVuVGFzazo6Y3JlYXRlKG5vZGUpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uQmVnaW5QYXJzaW5nQ2hpbGRy
ZW5UYXNrOjpkb1BlcmZvcm1UYXNrKG5vZGUpOworICAgIH0KKworICAgIHZvaWQgZmluaXNoUGFy
c2luZ0NoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQobm9kZSk7Cisg
ICAgICAgIGlmIChtX2lzU3BlY3VsYXRpbmcpCisgICAgICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBl
bmQoSFRNTFBhcnNlckRPTU11dGF0aW9uRmluaXNoUGFyc2luZ0NoaWxkcmVuVGFzazo6Y3JlYXRl
KG5vZGUpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgSFRNTFBhcnNlckRPTU11dGF0aW9u
RmluaXNoUGFyc2luZ0NoaWxkcmVuVGFzazo6ZG9QZXJmb3JtVGFzayhub2RlKTsKKyAgICB9CisK
KyAgICB2b2lkIGFkZENoaWxkQW5kQXR0YWNoKENvbnRhaW5lck5vZGUqIHBhcmVudCwgTm9kZSog
Y2hpbGQsIGJvb2wgbGF6eUF0dGFjaCA9IHRydWUpCisgICAgeworICAgICAgICBBU1NFUlQocGFy
ZW50KTsKKyAgICAgICAgQVNTRVJUKGNoaWxkKTsKKyAgICAgICAgaWYgKG1faXNTcGVjdWxhdGlu
ZykKKyAgICAgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVuZChIVE1MUGFyc2VyRE9NTXV0YXRpb25B
ZGRDaGlsZEFuZEF0dGFjaFRhc2s6OmNyZWF0ZShwYXJlbnQsIGNoaWxkLCBsYXp5QXR0YWNoKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbkFkZENoaWxk
QW5kQXR0YWNoVGFzazo6ZG9QZXJmb3JtVGFzayhwYXJlbnQsIGNoaWxkLCBsYXp5QXR0YWNoKTsK
KyAgICB9CisKKyAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoTm9kZSogbm9kZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChub2RlKTsKKyAgICAgICAgaWYgKG1faXNTcGVjdWxhdGluZykKKyAgICAg
ICAgICAgIG1fdGFza1F1ZXVlLmFwcGVuZChIVE1MUGFyc2VyRE9NTXV0YXRpb25SZW1vdmVGcm9t
UGFyZW50VGFzazo6Y3JlYXRlKG5vZGUpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgSFRN
TFBhcnNlckRPTU11dGF0aW9uUmVtb3ZlRnJvbVBhcmVudFRhc2s6OmRvUGVyZm9ybVRhc2sobm9k
ZSk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVudChDb250YWlu
ZXJOb2RlKiBuZXdQYXJlbnQsIENvbnRhaW5lck5vZGUqIG9sZFBhcmVudCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChuZXdQYXJlbnQpOworICAgICAgICBBU1NFUlQob2xkUGFyZW50KTsKKyAgICAg
ICAgaWYgKG1faXNTcGVjdWxhdGluZykKKyAgICAgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVuZChI
VE1MUGFyc2VyRE9NTXV0YXRpb25Nb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVudFRhc2s6OmNyZWF0
ZShuZXdQYXJlbnQsIG9sZFBhcmVudCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBIVE1M
UGFyc2VyRE9NTXV0YXRpb25Nb3ZlQWxsQ2hpbGRyZW5Ub05ld1BhcmVudFRhc2s6OmRvUGVyZm9y
bVRhc2sobmV3UGFyZW50LCBvbGRQYXJlbnQpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlQWxs
Q2hpbGRyZW4oQ29udGFpbmVyTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChub2Rl
KTsKKyAgICAgICAgaWYgKG1faXNTcGVjdWxhdGluZykKKyAgICAgICAgICAgIG1fdGFza1F1ZXVl
LmFwcGVuZChIVE1MUGFyc2VyRE9NTXV0YXRpb25SZW1vdmVBbGxDaGlsZHJlblRhc2s6OmNyZWF0
ZShub2RlKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEhUTUxQYXJzZXJET01NdXRhdGlv
blJlbW92ZUFsbENoaWxkcmVuVGFzazo6ZG9QZXJmb3JtVGFzayhub2RlKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldEF0dHJpYnV0ZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBB
U1NFUlQoZWxlbWVudCk7CisgICAgICAgIGlmIChtX2lzU3BlY3VsYXRpbmcpCisgICAgICAgICAg
ICBtX3Rhc2tRdWV1ZS5hcHBlbmQoSFRNTFBhcnNlckRPTU11dGF0aW9uU2V0QXR0cmlidXRlVGFz
azo6Y3JlYXRlKGVsZW1lbnQsIGF0dHJpYnV0ZSwgdmFsdWUpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uU2V0QXR0cmlidXRlVGFzazo6ZG9QZXJmb3Jt
VGFzayhlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldElu
c2VydGVkQnlQYXJzZXIoSFRNTEh0bWxFbGVtZW50KiBlbGVtZW50KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGVsZW1lbnQpOworICAgICAgICBpZiAobV9pc1NwZWN1bGF0aW5nKQorICAgICAgICAg
ICAgbV90YXNrUXVldWUuYXBwZW5kKEhUTUxQYXJzZXJET01NdXRhdGlvblNldEluc2VydGVkQnlQ
YXJzZXJUYXNrOjpjcmVhdGUoZWxlbWVudCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBI
VE1MUGFyc2VyRE9NTXV0YXRpb25TZXRJbnNlcnRlZEJ5UGFyc2VyVGFzazo6ZG9QZXJmb3JtVGFz
ayhlbGVtZW50KTsKKyAgICB9CisKKyAgICB2b2lkIGRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZh
aWxhYmxlKERvY3VtZW50KiBkb2N1bWVudCkKKyAgICB7CisgICAgICAgIEFTU0VSVChkb2N1bWVu
dCk7CisgICAgICAgIGlmIChtX2lzU3BlY3VsYXRpbmcpCisgICAgICAgICAgICBtX3Rhc2tRdWV1
ZS5hcHBlbmQoSFRNTFBhcnNlckRPTU11dGF0aW9uRGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFp
bGFibGVUYXNrOjpjcmVhdGUoZG9jdW1lbnQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
SFRNTFBhcnNlckRPTU11dGF0aW9uRGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVUYXNr
Ojpkb1BlcmZvcm1UYXNrKGRvY3VtZW50KTsKKyAgICB9CisKKyAgICB2b2lkIHNldERlbW90ZWQo
SFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sIGlzRGVtb3RlZCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChmb3JtKTsKKyAgICAgICAgaWYgKG1faXNTcGVjdWxhdGluZykKKyAgICAgICAgICAgIG1f
dGFza1F1ZXVlLmFwcGVuZChIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXREZW1vdGVkVGFzazo6Y3Jl
YXRlKGZvcm0sIGlzRGVtb3RlZCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBIVE1MUGFy
c2VyRE9NTXV0YXRpb25TZXREZW1vdGVkVGFzazo6ZG9QZXJmb3JtVGFzayhmb3JtLCBpc0RlbW90
ZWQpOworICAgIH0KKworICAgIHZvaWQgbWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1l
bnQoRWxlbWVudCogZWxlbWVudCwgQXRvbWljSFRNTFRva2VuKiB0b2tlbikKKyAgICB7CisgICAg
ICAgIGlmICh0b2tlbi0+YXR0cmlidXRlcygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBBU1NFUlQoZWxlbWVudCk7CisgICAgICAgIGlmIChtX2lzU3BlY3VsYXRp
bmcpCisgICAgICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoSFRNTFBhcnNlckRPTU11dGF0aW9u
TWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnRUYXNrOjpjcmVhdGUoZWxlbWVudCwg
dG9rZW4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgSFRNTFBhcnNlckRPTU11dGF0aW9u
TWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnRUYXNrOjpkb1BlcmZvcm1UYXNrKGVs
ZW1lbnQsIHRva2VuKTsKKyAgICB9CisKKyAgICB2b2lkIHNldENvbXBhdGliaWxpdHlNb2RlKERv
Y3VtZW50KiBkb2N1bWVudCwgRG9jdW1lbnQ6OkNvbXBhdGliaWxpdHlNb2RlIG1vZGUpCisgICAg
eworICAgICAgICBBU1NFUlQoZG9jdW1lbnQpOworICAgICAgICBpZiAobV9pc1NwZWN1bGF0aW5n
KQorICAgICAgICAgICAgbV90YXNrUXVldWUuYXBwZW5kKEhUTUxQYXJzZXJET01NdXRhdGlvblNl
dENvbXBhdGliaWxpdHlNb2RlVGFzazo6Y3JlYXRlKGRvY3VtZW50LCBtb2RlKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIEhUTUxQYXJzZXJET01NdXRhdGlvblNldENvbXBhdGliaWxpdHlN
b2RlVGFzazo6ZG9QZXJmb3JtVGFzayhkb2N1bWVudCwgbW9kZSk7CisgICAgfQorCisgICAgdm9p
ZCBzZXRDb21wYXRpYmlsaXR5TW9kZUZyb21Eb2N0eXBlKERvY3VtZW50KiBkb2N1bWVudCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChkb2N1bWVudCk7CisgICAgICAgIGlmIChtX2lzU3BlY3VsYXRp
bmcpCisgICAgICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoSFRNTFBhcnNlckRPTU11dGF0aW9u
U2V0Q29tcGF0aWJpbGl0eU1vZGVGcm9tRG9jdHlwZVRhc2s6OmNyZWF0ZShkb2N1bWVudCkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRDb21wYXRp
YmlsaXR5TW9kZUZyb21Eb2N0eXBlVGFzazo6ZG9QZXJmb3JtVGFzayhkb2N1bWVudCk7CisgICAg
fQorCisgICAgdm9pZCBpbnNlcnQoQ29udGFpbmVyTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPE5v
ZGU+IGNoaWxkLCBib29sIHNlbGZDbG9zaW5nLCBib29sIG1heGltdW1ET01UcmVlRGVwdGhFeGNl
ZWRlZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChwYXJlbnQpOworICAgICAgICBBU1NFUlQoY2hp
bGQpOworICAgICAgICBtX3Rhc2tRdWV1ZS5hcHBlbmQoSFRNTFBhcnNlckRPTU11dGF0aW9uSW5z
ZXJ0VGFzazo6Y3JlYXRlKHBhcmVudCwgY2hpbGQsIHNlbGZDbG9zaW5nLCBtYXhpbXVtRE9NVHJl
ZURlcHRoRXhjZWVkZWQpKTsKKyAgICB9CisKKyAgICB2b2lkIGluc2VydEZvc3RlclBhcmVudGVk
KEVsZW1lbnQqIHRhYmxlLCBDb250YWluZXJOb2RlKiB0YWJsZU5leHQsIENvbnRhaW5lck5vZGUq
IHJvb3QsIGJvb2wgaXNQYXNpbmdGcmFnbWVudCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCwgYm9v
bCBzZWxmQ2xvc2luZykKKyAgICB7CisgICAgICAgIEFTU0VSVCh0YWJsZSk7CisgICAgICAgIEFT
U0VSVCh0YWJsZU5leHQpOworICAgICAgICBBU1NFUlQocm9vdCk7CisgICAgICAgIEFTU0VSVChj
aGlsZCk7CisgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVuZChIVE1MUGFyc2VyRE9NTXV0YXRpb25J
bnNlcnRGb3N0ZXJQYXJlbnRlZFRhc2s6OmNyZWF0ZSh0YWJsZSwgdGFibGVOZXh0LCByb290LCBp
c1Bhc2luZ0ZyYWdtZW50LCBjaGlsZCwgc2VsZkNsb3NpbmcpKTsKKyAgICB9CisKKyAgICB2b2lk
IGluc2VydFRleHQoQ29udGFpbmVyTm9kZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGNoYXJhY3Rl
cnMsIGJvb2wgc2hvdWxkVXNlQXRvbWljU3RyaW5nLCBib29sIG1heGltdW1ET01UcmVlRGVwdGhF
eGNlZWRlZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChwYXJlbnQpOworICAgICAgICBtX3Rhc2tR
dWV1ZS5hcHBlbmQoSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0VGV4dFRhc2s6OmNyZWF0ZShw
YXJlbnQsIGNoYXJhY3RlcnMsIHNob3VsZFVzZUF0b21pY1N0cmluZywgbWF4aW11bURPTVRyZWVE
ZXB0aEV4Y2VlZGVkKSk7CisgICAgfQorCisgICAgdm9pZCBpbnNlcnRGb3N0ZXJQYXJlbnRlZFRl
eHQoRWxlbWVudCogdGFibGUsIENvbnRhaW5lck5vZGUqIHRhYmxlTmV4dCwgQ29udGFpbmVyTm9k
ZSogcm9vdCwgYm9vbCBpc1Bhc2luZ0ZyYWdtZW50LCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMs
IGJvb2wgc2hvdWxkVXNlQXRvbWljU3RyaW5nKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRhYmxl
KTsKKyAgICAgICAgQVNTRVJUKHRhYmxlTmV4dCk7CisgICAgICAgIEFTU0VSVChyb290KTsKKyAg
ICAgICAgbV90YXNrUXVldWUuYXBwZW5kKEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydEZvc3Rl
clBhcmVudGVkVGV4dFRhc2s6OmNyZWF0ZSh0YWJsZSwgdGFibGVOZXh0LCByb290LCBpc1Bhc2lu
Z0ZyYWdtZW50LCBjaGFyYWN0ZXJzLCBzaG91bGRVc2VBdG9taWNTdHJpbmcpKTsKKyAgICB9CisK
KyAgICB2b2lkIGluc2VydENvbW1lbnQoQ29udGFpbmVyTm9kZSogcGFyZW50LCBjb25zdCBTdHJp
bmcmIGNvbW1lbnQsIGJvb2wgbWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHBhcmVudCk7CisgICAgICAgIG1fdGFza1F1ZXVlLmFwcGVuZChIVE1MUGFy
c2VyRE9NTXV0YXRpb25JbnNlcnRDb21tZW50VGFzazo6Y3JlYXRlKHBhcmVudCwgY29tbWVudCwg
bWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkKSk7CisgICAgfQorCisgICAgdm9pZCBpbnNlcnRD
b21tZW50T25Eb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQsIENvbnRhaW5lck5vZGUqIGF0dGFj
aG1lbnRSb290LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpCisgICAgeworICAgICAgICBBU1NFUlQo
ZG9jdW1lbnQpOworICAgICAgICBBU1NFUlQoYXR0YWNobWVudFJvb3QpOworICAgICAgICBtX3Rh
c2tRdWV1ZS5hcHBlbmQoSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Q29tbWVudE9uRG9jdW1l
bnRUYXNrOjpjcmVhdGUoZG9jdW1lbnQsIGF0dGFjaG1lbnRSb290LCBjb21tZW50KSk7CisgICAg
fQorCisgICAgdm9pZCBpbnNlcnREb2N0eXBlKERvY3VtZW50KiBkb2N1bWVudCwgQ29udGFpbmVy
Tm9kZSogYXR0YWNobWVudFJvb3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBw
dWJsaWNJZCwgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCkKKyAgICB7CisgICAgICAgIG1fdGFza1F1
ZXVlLmFwcGVuZChIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnREb2N0eXBlVGFzazo6Y3JlYXRl
KGRvY3VtZW50LCBhdHRhY2htZW50Um9vdCwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSk7Cisg
ICAgfQorCisgICAgdm9pZCBmbHVzaCgpOworCitwcml2YXRlOgorICAgIEhUTUxQYXJzZXJET01N
dXRhdGlvblF1ZXVlKCkKKyAgICAgICAgOiBtX2lzU3BlY3VsYXRpbmcoZmFsc2UpCisgICAgewor
ICAgIH0KKworICAgIC8vIEZJWE1FOiBhZGp1c3QgdGhlIGluaXRpYWwgY2FwYWNpdHkuCisgICAg
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2s+LCAxPiBUYXNr
UXVldWU7CisKKyAgICBUYXNrUXVldWUgbV90YXNrUXVldWU7CisKKyAgICBib29sIG1faXNTcGVj
dWxhdGluZzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEhUTUxQ
YXJzZXJET01NdXRhdGlvblF1ZXVlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxQYXJzZXJET01NdXRhdGlvblRhc2suY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2I0ZjQx
MjQ5ODRhOGYzM2FjODdjNjYwZjNmYTdlYjBhMzkwMjU1NwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJET01NdXRhdGlvblRhc2suY3BwCkBA
IC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEdPT0dMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhUTUxQYXJzZXJE
T01NdXRhdGlvblRhc2suaCIKKworI2luY2x1ZGUgIkNoYXJhY3RlckRhdGEuaCIKKyNpbmNsdWRl
ICJDb21tZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCisjaW5jbHVkZSAiRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCisjaW5jbHVkZSAiVGV4dC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIGZpbmRGb3N0ZXJQYXJlbnRBbmROZXh0Q2hpbGQo
RWxlbWVudCogdGFibGUsIENvbnRhaW5lck5vZGUqIHRhYmxlTmV4dCwgQ29udGFpbmVyTm9kZSog
cm9vdCwgYm9vbCBpc1BhcnNpbmdGcmFnbWVudCwgQ29udGFpbmVyTm9kZSomIHBhcmVudCwgTm9k
ZSomIG5leHRDaGlsZCkKK3sKKyAgICAvLyBGcmFnbWVudCBjYXNlLgorICAgIGlmICghdGFibGUp
IHsKKyAgICAgICAgcGFyZW50ID0gcm9vdDsgLy8gRG9jdW1lbnRGcmFnbWVudAorICAgICAgICBu
ZXh0Q2hpbGQgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRWxlbWVudCogbGFz
dFRhYmxlRWxlbWVudCA9IHRhYmxlOworICAgIENvbnRhaW5lck5vZGUqIGZvc3RlciA9IGxhc3RU
YWJsZUVsZW1lbnQtPnBhcmVudE5vZGUoKTsKKyAgICAvLyBXaGVuIHBhcnNpbmcgSFRNTCBmcmFn
bWVudHMsIHdlIHNraXAgc3RlcCA0LjIgKCJMZXQgcm9vdCBiZSBhIG5ldyBodG1sIGVsZW1lbnQg
d2l0aCBubyBhdHRyaWJ1dGVzIikgZm9yIGVmZmljaWVuY3ksCisgICAgLy8gYW5kIGluc3RlYWQg
dXNlIHRoZSBEb2N1bWVudEZyYWdtZW50IGFzIGEgcm9vdCBub2RlLiBTbyB3ZSBtdXN0IHRyZWF0
IHRoZSByb290IG5vZGUgKERvY3VtZW50RnJhZ21lbnQpIGFzIGlmIGl0IGlzIGEgaHRtbCBlbGVt
ZW50IGhlcmUuCisgICAgaWYgKGZvc3RlciAmJiAoZm9zdGVyLT5pc0VsZW1lbnROb2RlKCkgfHwg
KGlzUGFyc2luZ0ZyYWdtZW50ICYmIGZvc3RlciA9PSByb290KSkpIHsKKyAgICAgICAgcGFyZW50
ID0gZm9zdGVyOworICAgICAgICBuZXh0Q2hpbGQgPSBsYXN0VGFibGVFbGVtZW50OworICAgIH0g
ZWxzZSB7CisgICAgICAgIHBhcmVudCA9IHRhYmxlTmV4dDsKKyAgICAgICAgbmV4dENoaWxkID0g
MDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGluc2VydChDb250YWluZXJOb2RlKiBwYXJlbnQs
IE5vZGUqIG5leHRDaGlsZCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCwgYm9vbCBzZWxmQ2xvc2lu
ZyA9IGZhbHNlKQoreworICAgIGlmIChuZXh0Q2hpbGQpCisgICAgICAgIHBhcmVudC0+cGFyc2Vy
SW5zZXJ0QmVmb3JlKGNoaWxkLmdldCgpLCBuZXh0Q2hpbGQpOworICAgIGVsc2UKKyAgICAgICAg
cGFyZW50LT5wYXJzZXJBZGRDaGlsZChjaGlsZC5nZXQoKSk7CisKKyAgICAvLyBKYXZhU2NyaXB0
IHJ1biBmcm9tIGJlZm9yZWxvYWQgKG9yIERPTSBNdXRhdGlvbiBvciBldmVudCBoYW5kbGVycykK
KyAgICAvLyBtaWdodCBoYXZlIHJlbW92ZWQgdGhlIGNoaWxkLCBpbiB3aGljaCBjYXNlIHdlIHNo
b3VsZCBub3QgYXR0YWNoIGl0LgorCisgICAgaWYgKGNoaWxkLT5wYXJlbnROb2RlKCkgJiYgcGFy
ZW50LT5hdHRhY2hlZCgpICYmICFjaGlsZC0+YXR0YWNoZWQoKSkKKyAgICAgICAgY2hpbGQtPmF0
dGFjaCgpOworCisgICAgY2hpbGQtPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICBpZiAo
c2VsZkNsb3NpbmcpCisgICAgICAgIGNoaWxkLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKK30K
Kworc3RhdGljIHZvaWQgaW5zZXJ0VGV4dChDb250YWluZXJOb2RlKiBwYXJlbnQsIE5vZGUqIG5l
eHRDaGlsZCwgY29uc3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBib29sIHNob3VsZFVzZUF0b21pY1N0
cmluZykKK3sKKyAgICB1bnNpZ25lZCBjdXJyZW50UG9zaXRpb24gPSAwOworCisgICAgLy8gRklY
TUU6IFNwbGl0dGluZyB0ZXh0IG5vZGVzIGludG8gc21hbGxlciBjaHVua3MgY29udHJhZGljdHMg
SFRNTDUgc3BlYywgYnV0IGlzIGN1cnJlbnRseSBuZWNlc3NhcnkKKyAgICAvLyBmb3IgcGVyZm9y
bWFuY2UsIHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1ODk4
Pi4KKworICAgIE5vZGUqIHByZXZpb3VzQ2hpbGQgPSBuZXh0Q2hpbGQgPyBuZXh0Q2hpbGQtPnBy
ZXZpb3VzU2libGluZygpIDogcGFyZW50LT5sYXN0Q2hpbGQoKTsKKyAgICBpZiAocHJldmlvdXND
aGlsZCAmJiBwcmV2aW91c0NoaWxkLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgLy8gRklYTUU6
IFdlJ3JlIG9ubHkgc3VwcG9zZWQgdG8gYXBwZW5kIHRvIHRoaXMgdGV4dCBub2RlIGlmIGl0Cisg
ICAgICAgIC8vIHdhcyB0aGUgbGFzdCB0ZXh0IG5vZGUgaW5zZXJ0ZWQgYnkgdGhlIHBhcnNlci4K
KyAgICAgICAgQ2hhcmFjdGVyRGF0YSogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJE
YXRhKj4ocHJldmlvdXNDaGlsZCk7CisgICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IHRleHROb2Rl
LT5wYXJzZXJBcHBlbmREYXRhKGNoYXJhY3RlcnMuY2hhcmFjdGVycygpLCBjaGFyYWN0ZXJzLmxl
bmd0aCgpLCBUZXh0OjpkZWZhdWx0TGVuZ3RoTGltaXQpOworICAgIH0KKworICAgIHdoaWxlIChj
dXJyZW50UG9zaXRpb24gPCBjaGFyYWN0ZXJzLmxlbmd0aCgpKSB7CisgICAgICAgIFJlZlB0cjxU
ZXh0PiB0ZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdChwYXJlbnQtPmRvY3Vt
ZW50KCksIHNob3VsZFVzZUF0b21pY1N0cmluZyA/IEF0b21pY1N0cmluZyhjaGFyYWN0ZXJzKS5z
dHJpbmcoKSA6IGNoYXJhY3RlcnMsIGN1cnJlbnRQb3NpdGlvbik7CisgICAgICAgIC8vIElmIHdl
IGhhdmUgYSB3aG9sZSBzdHJpbmcgb2YgdW5icmVha2FibGUgY2hhcmFjdGVycyB0aGUgYWJvdmUg
Y291bGQgbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wLiBFeGNlZWRpbmcgdGhlIGxlbmd0aCBsaW1p
dCBpcyB0aGUgbGVzc2VyIGV2aWwuCisgICAgICAgIGlmICghdGV4dE5vZGUtPmxlbmd0aCgpKSB7
CisgICAgICAgICAgICBTdHJpbmcgc3Vic3RyaW5nID0gY2hhcmFjdGVycy5zdWJzdHJpbmcoY3Vy
cmVudFBvc2l0aW9uKTsKKyAgICAgICAgICAgIHRleHROb2RlID0gVGV4dDo6Y3JlYXRlKHBhcmVu
dC0+ZG9jdW1lbnQoKSwgc2hvdWxkVXNlQXRvbWljU3RyaW5nID8gQXRvbWljU3RyaW5nKHN1YnN0
cmluZykuc3RyaW5nKCkgOiBzdWJzdHJpbmcpOworICAgICAgICB9CisKKyAgICAgICAgY3VycmVu
dFBvc2l0aW9uICs9IHRleHROb2RlLT5sZW5ndGgoKTsKKyAgICAgICAgQVNTRVJUKGN1cnJlbnRQ
b3NpdGlvbiA8PSBjaGFyYWN0ZXJzLmxlbmd0aCgpKTsKKyAgICAgICAgaW5zZXJ0KHBhcmVudCwg
bmV4dENoaWxkLCB0ZXh0Tm9kZS5yZWxlYXNlKCkpOworICAgIH0KK30KKwordm9pZCBIVE1MUGFy
c2VyRE9NTXV0YXRpb25JbnNlcnRUYXNrOjpkb1BlcmZvcm1UYXNrKENvbnRhaW5lck5vZGUqIHBh
cmVudCwgUGFzc1JlZlB0cjxOb2RlPiBjaGlsZCwgYm9vbCBzZWxmQ2xvc2luZywgYm9vbCBtYXhp
bXVtRE9NVHJlZURlcHRoRXhjZWVkZWQpCit7CisgICAgaWYgKG1heGltdW1ET01UcmVlRGVwdGhF
eGNlZWRlZCAmJiBwYXJlbnQtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgcGFyZW50ID0gcGFyZW50
LT5wYXJlbnROb2RlKCk7CisgICAgaW5zZXJ0KHBhcmVudCwgMCwgY2hpbGQsIHNlbGZDbG9zaW5n
KTsKK30KKwordm9pZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJlbnRlZFRh
c2s6OmRvUGVyZm9ybVRhc2soRWxlbWVudCogdGFibGUsIENvbnRhaW5lck5vZGUqIHRhYmxlTmV4
dCwgQ29udGFpbmVyTm9kZSogcm9vdCwgYm9vbCBpc1BhcnNpbmdGcmFnbWVudCwgUGFzc1JlZlB0
cjxOb2RlPiBjaGlsZCwgYm9vbCBzZWxmQ2xvc2luZykKK3sKKyAgICBDb250YWluZXJOb2RlKiBw
YXJlbnQ7CisgICAgTm9kZSogbmV4dENoaWxkOworICAgIGZpbmRGb3N0ZXJQYXJlbnRBbmROZXh0
Q2hpbGQodGFibGUsIHRhYmxlTmV4dCwgcm9vdCwgaXNQYXJzaW5nRnJhZ21lbnQsIHBhcmVudCwg
bmV4dENoaWxkKTsKKyAgICBpbnNlcnQocGFyZW50LCBuZXh0Q2hpbGQsIGNoaWxkLCBzZWxmQ2xv
c2luZyk7Cit9CisKK3ZvaWQgSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0VGV4dFRhc2s6OmRv
UGVyZm9ybVRhc2soQ29udGFpbmVyTm9kZSogcGFyZW50LCBjb25zdCBTdHJpbmcmIGNoYXJhY3Rl
cnMsIGJvb2wgc2hvdWxkVXNlQXRvbWljU3RyaW5nLCBib29sIG1heGltdW1ET01UcmVlRGVwdGhF
eGNlZWRlZCkKK3sKKyAgICBpZiAobWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkICYmIHBhcmVu
dC0+cGFyZW50Tm9kZSgpKQorICAgICAgICBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsK
KyAgICBpbnNlcnRUZXh0KHBhcmVudCwgMCwgY2hhcmFjdGVycywgc2hvdWxkVXNlQXRvbWljU3Ry
aW5nKTsKK30KKwordm9pZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRGb3N0ZXJQYXJlbnRl
ZFRleHRUYXNrOjpkb1BlcmZvcm1UYXNrKEVsZW1lbnQqIHRhYmxlLCBDb250YWluZXJOb2RlKiB0
YWJsZU5leHQsIENvbnRhaW5lck5vZGUqIHJvb3QsIGJvb2wgaXNQYXJzaW5nRnJhZ21lbnQsIGNv
bnN0IFN0cmluZyYgY2hhcmFjdGVycywgYm9vbCBzaG91bGRVc2VBdG9taWNTdHJpbmcpCit7Cisg
ICAgQ29udGFpbmVyTm9kZSogcGFyZW50OworICAgIE5vZGUqIG5leHRDaGlsZDsKKyAgICBmaW5k
Rm9zdGVyUGFyZW50QW5kTmV4dENoaWxkKHRhYmxlLCB0YWJsZU5leHQsIHJvb3QsIGlzUGFyc2lu
Z0ZyYWdtZW50LCBwYXJlbnQsIG5leHRDaGlsZCk7CisgICAgaW5zZXJ0VGV4dChwYXJlbnQsIG5l
eHRDaGlsZCwgY2hhcmFjdGVycywgc2hvdWxkVXNlQXRvbWljU3RyaW5nKTsKK30KKwordm9pZCBI
VE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnRDb21tZW50VGFzazo6ZG9QZXJmb3JtVGFzayhDb250
YWluZXJOb2RlKiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgY29tbWVudCwgYm9vbCBtYXhpbXVtRE9N
VHJlZURlcHRoRXhjZWVkZWQpCit7CisgICAgaWYgKG1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRl
ZCAmJiBwYXJlbnQtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgcGFyZW50ID0gcGFyZW50LT5wYXJl
bnROb2RlKCk7CisgICAgaW5zZXJ0KHBhcmVudCwgMCwgQ29tbWVudDo6Y3JlYXRlKHBhcmVudC0+
ZG9jdW1lbnQoKSwgY29tbWVudCkpOworfQorCit2b2lkIEhUTUxQYXJzZXJET01NdXRhdGlvbklu
c2VydENvbW1lbnRPbkRvY3VtZW50VGFzazo6ZG9QZXJmb3JtVGFzayhEb2N1bWVudCogZG9jdW1l
bnQsIENvbnRhaW5lck5vZGUqIGF0dGFjaG1lbnRSb290LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQp
Cit7CisgICAgaW5zZXJ0KGF0dGFjaG1lbnRSb290LCAwLCBDb21tZW50OjpjcmVhdGUoZG9jdW1l
bnQsIGNvbW1lbnQpKTsKK30KKwordm9pZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnREb2N0
eXBlVGFzazo6ZG9QZXJmb3JtVGFzayhEb2N1bWVudCogZG9jdW1lbnQsIENvbnRhaW5lck5vZGUq
IGF0dGFjaG1lbnRSb290LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgcHVibGlj
SWQsIGNvbnN0IFN0cmluZyYgc3lzdGVtSWQpCit7CisgICAgaW5zZXJ0KGF0dGFjaG1lbnRSb290
LCAwLCBEb2N1bWVudFR5cGU6OmNyZWF0ZShkb2N1bWVudCwgbmFtZSwgcHVibGljSWQsIHN5c3Rl
bUlkKSk7Cit9CisKK3ZvaWQgSFRNTFBhcnNlckRPTU11dGF0aW9uQmVnaW5QYXJzaW5nQ2hpbGRy
ZW5UYXNrOjpkb1BlcmZvcm1UYXNrKE5vZGUqIG5vZGUpCit7CisgICAgbm9kZS0+YmVnaW5QYXJz
aW5nQ2hpbGRyZW4oKTsKK30KKwordm9pZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25GaW5pc2hQYXJz
aW5nQ2hpbGRyZW5UYXNrOjpkb1BlcmZvcm1UYXNrKE5vZGUqIG5vZGUpCit7CisgICAgbm9kZS0+
ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7Cit9CisKK3ZvaWQgSFRNTFBhcnNlckRPTU11dGF0aW9u
QWRkQ2hpbGRBbmRBdHRhY2hUYXNrOjpkb1BlcmZvcm1UYXNrKENvbnRhaW5lck5vZGUqIHBhcmVu
dCwgTm9kZSogY2hpbGQsIGJvb2wgbGF6eUF0dGFjaCkKK3sKKyAgICBwYXJlbnQtPnBhcnNlckFk
ZENoaWxkKGNoaWxkKTsKKyAgICBpZiAocGFyZW50LT5hdHRhY2hlZCgpICYmICFjaGlsZC0+YXR0
YWNoZWQoKSkgeworICAgICAgICBpZiAobGF6eUF0dGFjaCkKKyAgICAgICAgICAgIGNoaWxkLT5s
YXp5QXR0YWNoKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNoaWxkLT5hdHRhY2goKTsK
KyAgICB9Cit9CisKK3ZvaWQgSFRNTFBhcnNlckRPTU11dGF0aW9uUmVtb3ZlRnJvbVBhcmVudFRh
c2s6OmRvUGVyZm9ybVRhc2soTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoQ29udGFpbmVyTm9kZSog
cGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpKQorICAgICAgICBwYXJlbnQtPnBhcnNlclJlbW92
ZUNoaWxkKG5vZGUpOworfQorCit2b2lkIEhUTUxQYXJzZXJET01NdXRhdGlvbk1vdmVBbGxDaGls
ZHJlblRvTmV3UGFyZW50VGFzazo6ZG9QZXJmb3JtVGFzayhDb250YWluZXJOb2RlKiBuZXdQYXJl
bnQsIENvbnRhaW5lck5vZGUqIG9sZFBhcmVudCkKK3sKKyAgICBuZXdQYXJlbnQtPnRha2VBbGxD
aGlsZHJlbkZyb20ob2xkUGFyZW50KTsKK30KKwordm9pZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25S
ZW1vdmVBbGxDaGlsZHJlblRhc2s6OmRvUGVyZm9ybVRhc2soQ29udGFpbmVyTm9kZSogbm9kZSkK
K3sKKyAgICBub2RlLT5yZW1vdmVBbGxDaGlsZHJlbigpOworfQorCit2b2lkIEhUTUxQYXJzZXJE
T01NdXRhdGlvblNldEF0dHJpYnV0ZVRhc2s6OmRvUGVyZm9ybVRhc2soRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlKQoreworICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlKTsKK30K
Kwordm9pZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRJbnNlcnRlZEJ5UGFyc2VyVGFzazo6ZG9Q
ZXJmb3JtVGFzayhIVE1MSHRtbEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgZWxlbWVudC0+aW5z
ZXJ0ZWRCeVBhcnNlcigpOworfQorCit2b2lkIEhUTUxQYXJzZXJET01NdXRhdGlvbkRpc3BhdGNo
RG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlVGFzazo6ZG9QZXJmb3JtVGFzayhEb2N1bWVudCogZG9j
dW1lbnQpCit7CisgICAgaWYgKGRvY3VtZW50LT5mcmFtZSgpKQorICAgICAgICBkb2N1bWVudC0+
ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7Cit9
CisKK3ZvaWQgSFRNTFBhcnNlckRPTU11dGF0aW9uU2V0RGVtb3RlZFRhc2s6OmRvUGVyZm9ybVRh
c2soSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sIGlzRGVtb3RlZCkKK3sKKyAgICBmb3JtLT5z
ZXREZW1vdGVkKGlzRGVtb3RlZCk7Cit9CisKK3ZvaWQgSFRNTFBhcnNlckRPTU11dGF0aW9uTWVy
Z2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnRUYXNrOjpkb1BlcmZvcm1UYXNrKEVsZW1l
bnQqIGVsZW1lbnQsIEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCit7CisgICAgRWxlbWVudEF0dHJp
YnV0ZURhdGEqIGVsZW1lbnRBdHRyaWJ1dGVEYXRhID0gZWxlbWVudC0+bXV0YWJsZUF0dHJpYnV0
ZURhdGEoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b2tlbi0+YXR0cmlidXRl
cygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0g
dG9rZW4tPmF0dHJpYnV0ZXMoKS5hdChpKTsKKyAgICAgICAgaWYgKCFlbGVtZW50QXR0cmlidXRl
RGF0YS0+Z2V0QXR0cmlidXRlSXRlbShhdHRyaWJ1dGUubmFtZSgpKSkKKyAgICAgICAgICAgIGVs
ZW1lbnQtPnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUubmFtZSgpLCBhdHRyaWJ1dGUudmFsdWUoKSk7
CisgICAgfQorfQorCit2b2lkIEhUTUxQYXJzZXJET01NdXRhdGlvblNldENvbXBhdGliaWxpdHlN
b2RlVGFzazo6ZG9QZXJmb3JtVGFzayhEb2N1bWVudCogZG9jdW1lbnQsIERvY3VtZW50OjpDb21w
YXRpYmlsaXR5TW9kZSBtb2RlKQoreworICAgIGRvY3VtZW50LT5zZXRDb21wYXRpYmlsaXR5TW9k
ZShtb2RlKTsKK30KKwordm9pZCBIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRDb21wYXRpYmlsaXR5
TW9kZUZyb21Eb2N0eXBlVGFzazo6ZG9QZXJmb3JtVGFzayhEb2N1bWVudCogZG9jdW1lbnQpCit7
CisgICAgZG9jdW1lbnQtPnNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGUoKTsKK30KKwor
SFRNTFBhcnNlckRPTU11dGF0aW9uVGFzazo6fkhUTUxQYXJzZXJET01NdXRhdGlvblRhc2soKQor
eworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJET01NdXRhdGlvblRhc2suaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJET01NdXRhdGlvblRhc2suaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
YTcxMjIwMjMwOGEwMzhhODc5YjA3NzQzYTIzYjI5MmFkNzZjMWYyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzay5o
CkBAIC0wLDAgKzEsNjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAw
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEdPT0dMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSFRNTFBhcnNlckRPTU11dGF0aW9uVGFza19oCisj
ZGVmaW5lIEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2tfaAorCisjaW5jbHVkZSAiSFRNTEZvcm1F
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRv
a2VuLmgiCisKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1MUGFyc2VyRE9NTXV0YXRp
b25UYXNrIDogcHVibGljIFJlZkNvdW50ZWQ8SFRNTFBhcnNlckRPTU11dGF0aW9uVGFzaz4gewor
cHVibGljOgorICAgIGVudW0gVHlwZSB7CisgICAgICAgIEJlZ2luUGFyc2luZ0NoaWxkcmVuLAor
ICAgICAgICBGaW5pc2hQYXJzaW5nQ2hpbGRyZW4sCisgICAgICAgIEFkZENoaWxkQW5kQXR0YWNo
LAorICAgICAgICBSZW1vdmVGcm9tUGFyZW50LAorICAgICAgICBNb3ZlQWxsQ2hpbGRyZW5Ub05l
d1BhcmVudCwKKyAgICAgICAgUmVtb3ZlQWxsQ2hpbGRyZW4sCisgICAgICAgIFNldEF0dHJpYnV0
ZSwKKyAgICAgICAgU2V0SW5zZXJ0ZWRCeVBhcnNlciwKKyAgICAgICAgRGlzcGF0Y2hEb2N1bWVu
dEVsZW1lbnRBdmFpbGFibGUsCisgICAgICAgIFNldERlbW90ZWQsCisgICAgICAgIE1lcmdlQXR0
cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50LAorICAgICAgICBTZXRDb21wYXRpYmlsaXR5TW9k
ZSwKKyAgICAgICAgU2V0Q29tcGF0aWJpbGl0eU1vZGVGcm9tRG9jdHlwZSwKKyAgICAgICAgSW5z
ZXJ0LAorICAgICAgICBJbnNlcnRGb3N0ZXJQYXJlbnRlZCwKKyAgICAgICAgSW5zZXJ0VGV4dCwK
KyAgICAgICAgSW5zZXJ0Rm9zdGVyUGFyZW50ZWRUZXh0LAorICAgICAgICBJbnNlcnRDb21tZW50
LAorICAgICAgICBJbnNlcnRDb21tZW50T25Eb2N1bWVudCwKKyAgICAgICAgSW5zZXJ0RG9jdHlw
ZSwKKyAgICB9OworCisgICAgdmlydHVhbCB+SFRNTFBhcnNlckRPTU11dGF0aW9uVGFzaygpOwor
CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybVRhc2soKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBIVE1MUGFyc2VyRE9N
TXV0YXRpb25UYXNrKFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUodHlwZSkKKyAgICB7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIFR5cGUgbV90eXBlOworfTsKKworY2xhc3MgSFRNTFBhcnNl
ckRPTU11dGF0aW9uQmVnaW5QYXJzaW5nQ2hpbGRyZW5UYXNrIDogcHVibGljIEhUTUxQYXJzZXJE
T01NdXRhdGlvblRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxQYXJz
ZXJET01NdXRhdGlvbkJlZ2luUGFyc2luZ0NoaWxkcmVuVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8
Tm9kZT4gbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFBhcnNl
ckRPTU11dGF0aW9uQmVnaW5QYXJzaW5nQ2hpbGRyZW5UYXNrKG5vZGUpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCBkb1BlcmZvcm1UYXNrKE5vZGUqKTsKKworICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICBkb1BlcmZvcm1UYXNrKG1fbm9kZS5nZXQoKSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbkJlZ2luUGFyc2lu
Z0NoaWxkcmVuVGFzayhQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCisgICAgICAgIDogSFRNTFBhcnNl
ckRPTU11dGF0aW9uVGFzayhCZWdpblBhcnNpbmdDaGlsZHJlbikKKyAgICAgICAgLCBtX25vZGUo
bm9kZSkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKK307CisKK2Ns
YXNzIEhUTUxQYXJzZXJET01NdXRhdGlvbkZpbmlzaFBhcnNpbmdDaGlsZHJlblRhc2sgOiBwdWJs
aWMgSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SFRNTFBhcnNlckRPTU11dGF0aW9uRmluaXNoUGFyc2luZ0NoaWxkcmVuVGFzaz4gY3Jl
YXRlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSFRNTFBhcnNlckRPTU11dGF0aW9uRmluaXNoUGFyc2luZ0NoaWxkcmVuVGFzayhub2Rl
KSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhOb2RlKik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgZG9QZXJmb3JtVGFz
ayhtX25vZGUuZ2V0KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIVE1MUGFyc2VyRE9NTXV0
YXRpb25GaW5pc2hQYXJzaW5nQ2hpbGRyZW5UYXNrKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKKyAg
ICAgICAgOiBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrKEZpbmlzaFBhcnNpbmdDaGlsZHJlbikK
KyAgICAgICAgLCBtX25vZGUobm9kZSkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPE5vZGU+
IG1fbm9kZTsKK307CisKK2NsYXNzIEhUTUxQYXJzZXJET01NdXRhdGlvbkFkZENoaWxkQW5kQXR0
YWNoVGFzayA6IHB1YmxpYyBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9NTXV0YXRpb25BZGRDaGlsZEFuZEF0dGFj
aFRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCwgUGFzc1JlZlB0
cjxOb2RlPiBjaGlsZCwgYm9vbCBsYXp5QXR0YWNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBIVE1MUGFyc2VyRE9NTXV0YXRpb25BZGRDaGlsZEFuZEF0dGFjaFRhc2socGFy
ZW50LCBjaGlsZCwgbGF6eUF0dGFjaCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRvUGVy
Zm9ybVRhc2soQ29udGFpbmVyTm9kZSogcGFyZW50LCBOb2RlKiBjaGlsZCwgYm9vbCBsYXp5QXR0
YWNoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICBk
b1BlcmZvcm1UYXNrKG1fcGFyZW50LmdldCgpLCBtX2NoaWxkLmdldCgpLCBtX2xhenlBdHRhY2gp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25BZGRDaGlsZEFu
ZEF0dGFjaFRhc2soUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQsIFBhc3NSZWZQdHI8
Tm9kZT4gY2hpbGQsIGJvb2wgbGF6eUF0dGFjaCkKKyAgICAgICAgOiBIVE1MUGFyc2VyRE9NTXV0
YXRpb25UYXNrKEFkZENoaWxkQW5kQXR0YWNoKQorICAgICAgICAsIG1fcGFyZW50KHBhcmVudCkK
KyAgICAgICAgLCBtX2NoaWxkKGNoaWxkKQorICAgICAgICAsIG1fbGF6eUF0dGFjaChsYXp5QXR0
YWNoKQorCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX3BhcmVu
dDsKKyAgICBSZWZQdHI8Tm9kZT4gbV9jaGlsZDsKKyAgICBib29sIG1fbGF6eUF0dGFjaDsKK307
CisKK2NsYXNzIEhUTUxQYXJzZXJET01NdXRhdGlvblJlbW92ZUZyb21QYXJlbnRUYXNrIDogcHVi
bGljIEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEhUTUxQYXJzZXJET01NdXRhdGlvblJlbW92ZUZyb21QYXJlbnRUYXNrPiBjcmVhdGUo
UGFzc1JlZlB0cjxOb2RlPiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBIVE1MUGFyc2VyRE9NTXV0YXRpb25SZW1vdmVGcm9tUGFyZW50VGFzayhub2RlKSk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhOb2RlKik7CisKKyAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgZG9QZXJmb3JtVGFzayhtX25vZGUu
Z2V0KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25SZW1v
dmVGcm9tUGFyZW50VGFzayhQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCisgICAgICAgIDogSFRNTFBh
cnNlckRPTU11dGF0aW9uVGFzayhSZW1vdmVGcm9tUGFyZW50KQorICAgICAgICAsIG1fbm9kZShu
b2RlKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworfTsKKworY2xh
c3MgSFRNTFBhcnNlckRPTU11dGF0aW9uTW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnRUYXNrIDog
cHVibGljIEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEhUTUxQYXJzZXJET01NdXRhdGlvbk1vdmVBbGxDaGlsZHJlblRvTmV3UGFyZW50
VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gbmV3UGFyZW50LCBQYXNzUmVm
UHRyPENvbnRhaW5lck5vZGU+IG9sZFBhcmVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSFRNTFBhcnNlckRPTU11dGF0aW9uTW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnRU
YXNrKG5ld1BhcmVudCwgb2xkUGFyZW50KSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZG9Q
ZXJmb3JtVGFzayhDb250YWluZXJOb2RlKiBuZXdQYXJlbnQsIENvbnRhaW5lck5vZGUqIG9sZFBh
cmVudCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAg
ZG9QZXJmb3JtVGFzayhtX25ld1BhcmVudC5nZXQoKSwgbV9vbGRQYXJlbnQuZ2V0KCkpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25Nb3ZlQWxsQ2hpbGRyZW5U
b05ld1BhcmVudFRhc2soUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBuZXdQYXJlbnQsIFBhc3NS
ZWZQdHI8Q29udGFpbmVyTm9kZT4gb2xkUGFyZW50KQorICAgICAgICA6IEhUTUxQYXJzZXJET01N
dXRhdGlvblRhc2soTW92ZUFsbENoaWxkcmVuVG9OZXdQYXJlbnQpCisgICAgICAgICwgbV9uZXdQ
YXJlbnQobmV3UGFyZW50KQorICAgICAgICAsIG1fb2xkUGFyZW50KG9sZFBhcmVudCkKKyAgICB7
CisgICAgfQorCisgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG1fbmV3UGFyZW50OworICAgIFJl
ZlB0cjxDb250YWluZXJOb2RlPiBtX29sZFBhcmVudDsKK307CisKK2NsYXNzIEhUTUxQYXJzZXJE
T01NdXRhdGlvblJlbW92ZUFsbENoaWxkcmVuVGFzayA6IHB1YmxpYyBIVE1MUGFyc2VyRE9NTXV0
YXRpb25UYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9N
TXV0YXRpb25SZW1vdmVBbGxDaGlsZHJlblRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPENvbnRhaW5l
ck5vZGU+IG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxQYXJz
ZXJET01NdXRhdGlvblJlbW92ZUFsbENoaWxkcmVuVGFzayhub2RlKSk7CisgICAgfQorCisgICAg
c3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhDb250YWluZXJOb2RlKik7CisKKyAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgZG9QZXJmb3JtVGFzayhtX25vZGUu
Z2V0KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25SZW1v
dmVBbGxDaGlsZHJlblRhc2soUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBub2RlKQorICAgICAg
ICA6IEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2soUmVtb3ZlQWxsQ2hpbGRyZW4pCisgICAgICAg
ICwgbV9ub2RlKG5vZGUpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxDb250YWluZXJOb2Rl
PiBtX25vZGU7Cit9OworCitjbGFzcyBIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXRBdHRyaWJ1dGVU
YXNrIDogcHVibGljIEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2sgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxQYXJzZXJET01NdXRhdGlvblNldEF0dHJpYnV0ZVRhc2s+IGNy
ZWF0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJpYnV0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSFRNTFBhcnNlckRPTU11dGF0aW9uU2V0QXR0cmlidXRlVGFzayhlbGVt
ZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZG9QZXJm
b3JtVGFzayhFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisg
ICAgeworICAgICAgICBkb1BlcmZvcm1UYXNrKG1fZWxlbWVudC5nZXQoKSwgbV9hdHRyaWJ1dGUs
IG1fdmFsdWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIVE1MUGFyc2VyRE9NTXV0YXRpb25T
ZXRBdHRyaWJ1dGVUYXNrKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQorICAgICAgICA6
IEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2soU2V0QXR0cmlidXRlKQorICAgICAgICAsIG1fZWxl
bWVudChlbGVtZW50KQorICAgICAgICAsIG1fYXR0cmlidXRlKGF0dHJpYnV0ZSkKKyAgICAgICAg
LCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8RWxlbWVudD4gbV9l
bGVtZW50OworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUgbV9hdHRyaWJ1dGU7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nIG1fdmFsdWU7Cit9OworCitjbGFzcyBIVE1MUGFyc2VyRE9NTXV0YXRpb25T
ZXRJbnNlcnRlZEJ5UGFyc2VyVGFzayA6IHB1YmxpYyBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNr
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9NTXV0YXRpb25T
ZXRJbnNlcnRlZEJ5UGFyc2VyVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8SFRNTEh0bWxFbGVtZW50
PiBlbGVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MUGFyc2Vy
RE9NTXV0YXRpb25TZXRJbnNlcnRlZEJ5UGFyc2VyVGFzayhlbGVtZW50KSk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhIVE1MSHRtbEVsZW1lbnQqKTsKKworICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICBkb1BlcmZvcm1UYXNrKG1f
ZWxlbWVudC5nZXQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEhUTUxQYXJzZXJET01NdXRh
dGlvblNldEluc2VydGVkQnlQYXJzZXJUYXNrKFBhc3NSZWZQdHI8SFRNTEh0bWxFbGVtZW50PiBl
bGVtZW50KQorICAgICAgICA6IEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2soU2V0SW5zZXJ0ZWRC
eVBhcnNlcikKKyAgICAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICB7CisgICAgfQorCisg
ICAgUmVmUHRyPEhUTUxIdG1sRWxlbWVudD4gbV9lbGVtZW50OworfTsKKworY2xhc3MgSFRNTFBh
cnNlckRPTU11dGF0aW9uRGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGVUYXNrIDogcHVi
bGljIEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEhUTUxQYXJzZXJET01NdXRhdGlvbkRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxh
YmxlVGFzaz4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSFRNTFBhcnNlckRPTU11dGF0aW9uRGlzcGF0Y2hEb2N1bWVudEVsZW1l
bnRBdmFpbGFibGVUYXNrKGRvY3VtZW50KSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZG9Q
ZXJmb3JtVGFzayhEb2N1bWVudCopOworCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkK
KyAgICB7CisgICAgICAgIGRvUGVyZm9ybVRhc2sobV9kb2N1bWVudCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIEhUTUxQYXJzZXJET01NdXRhdGlvbkRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZh
aWxhYmxlVGFzayhEb2N1bWVudCogZG9jdW1lbnQpCisgICAgICAgIDogSFRNTFBhcnNlckRPTU11
dGF0aW9uVGFzayhEaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJsZSkKKyAgICAgICAgLCBt
X2RvY3VtZW50KGRvY3VtZW50KQorICAgIHsKKyAgICB9CisKKyAgICBEb2N1bWVudCogbV9kb2N1
bWVudDsKK307CisKK2NsYXNzIEhUTUxQYXJzZXJET01NdXRhdGlvblNldERlbW90ZWRUYXNrIDog
cHVibGljIEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEhUTUxQYXJzZXJET01NdXRhdGlvblNldERlbW90ZWRUYXNrPiBjcmVhdGUoUGFz
c1JlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IGZvcm0sIGJvb2wgaXNEZW1vdGVkKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MUGFyc2VyRE9NTXV0YXRpb25TZXREZW1vdGVk
VGFzayhmb3JtLCBpc0RlbW90ZWQpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkb1BlcmZv
cm1UYXNrKEhUTUxGb3JtRWxlbWVudCosIGJvb2wgaXNEZW1vdGVkKTsKKworICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICBkb1BlcmZvcm1UYXNrKG1fZm9ybS5n
ZXQoKSwgbV9pc0RlbW90ZWQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIVE1MUGFyc2VyRE9N
TXV0YXRpb25TZXREZW1vdGVkVGFzayhQYXNzUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gZm9ybSwg
Ym9vbCBpc0RlbW90ZWQpCisgICAgICAgIDogSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayhTZXRE
ZW1vdGVkKQorICAgICAgICAsIG1fZm9ybShmb3JtKQorICAgICAgICAsIG1faXNEZW1vdGVkKGlz
RGVtb3RlZCkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gbV9m
b3JtOworICAgIGJvb2wgbV9pc0RlbW90ZWQ7Cit9OworCitjbGFzcyBIVE1MUGFyc2VyRE9NTXV0
YXRpb25NZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudFRhc2sgOiBwdWJsaWMgSFRN
TFBhcnNlckRPTU11dGF0aW9uVGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SFRNTFBhcnNlckRPTU11dGF0aW9uTWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnRU
YXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBQYXNzUmVmUHRyPEF0b21p
Y0hUTUxUb2tlbj4gdG9rZW4pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhU
TUxQYXJzZXJET01NdXRhdGlvbk1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50VGFz
ayhlbGVtZW50LCB0b2tlbikpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRvUGVyZm9ybVRh
c2soRWxlbWVudCosIEF0b21pY0hUTUxUb2tlbiopOworCisgICAgdmlydHVhbCB2b2lkIHBlcmZv
cm1UYXNrKCkKKyAgICB7CisgICAgICAgIGRvUGVyZm9ybVRhc2sobV9lbGVtZW50LmdldCgpLCBt
X3Rva2VuLmdldCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSFRNTFBhcnNlckRPTU11dGF0
aW9uTWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnRUYXNrKFBhc3NSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCwgUGFzc1JlZlB0cjxBdG9taWNIVE1MVG9rZW4+IHRva2VuKQorICAgICAg
ICA6IEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2soTWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50
b0VsZW1lbnQpCisgICAgICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgICAgICwgbV90b2tl
bih0b2tlbikKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsK
KyAgICBSZWZQdHI8QXRvbWljSFRNTFRva2VuPiBtX3Rva2VuOworfTsKKworY2xhc3MgSFRNTFBh
cnNlckRPTU11dGF0aW9uU2V0Q29tcGF0aWJpbGl0eU1vZGVUYXNrIDogcHVibGljIEhUTUxQYXJz
ZXJET01NdXRhdGlvblRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxQ
YXJzZXJET01NdXRhdGlvblNldENvbXBhdGliaWxpdHlNb2RlVGFzaz4gY3JlYXRlKERvY3VtZW50
KiBkb2N1bWVudCwgRG9jdW1lbnQ6OkNvbXBhdGliaWxpdHlNb2RlIG1vZGUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxQYXJzZXJET01NdXRhdGlvblNldENvbXBhdGli
aWxpdHlNb2RlVGFzayhkb2N1bWVudCwgbW9kZSkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IGRvUGVyZm9ybVRhc2soRG9jdW1lbnQqLCBEb2N1bWVudDo6Q29tcGF0aWJpbGl0eU1vZGUpOwor
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgIGRvUGVyZm9y
bVRhc2sobV9kb2N1bWVudCwgbV9tb2RlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSFRNTFBh
cnNlckRPTU11dGF0aW9uU2V0Q29tcGF0aWJpbGl0eU1vZGVUYXNrKERvY3VtZW50KiBkb2N1bWVu
dCwgRG9jdW1lbnQ6OkNvbXBhdGliaWxpdHlNb2RlIG1vZGUpCisgICAgICAgIDogSFRNTFBhcnNl
ckRPTU11dGF0aW9uVGFzayhTZXRDb21wYXRpYmlsaXR5TW9kZSkKKyAgICAgICAgLCBtX2RvY3Vt
ZW50KGRvY3VtZW50KQorICAgICAgICAsIG1fbW9kZShtb2RlKQorICAgIHsKKyAgICB9CisKKyAg
ICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBEb2N1bWVudDo6Q29tcGF0aWJpbGl0eU1vZGUg
bV9tb2RlOworfTsKKworY2xhc3MgSFRNTFBhcnNlckRPTU11dGF0aW9uU2V0Q29tcGF0aWJpbGl0
eU1vZGVGcm9tRG9jdHlwZVRhc2sgOiBwdWJsaWMgSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNlckRPTU11dGF0aW9uU2V0
Q29tcGF0aWJpbGl0eU1vZGVGcm9tRG9jdHlwZVRhc2s+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1l
bnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxQYXJzZXJET01NdXRh
dGlvblNldENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGVUYXNrKGRvY3VtZW50KSk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhEb2N1bWVudCopOworCisgICAgdmly
dHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgIGRvUGVyZm9ybVRhc2sobV9k
b2N1bWVudCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEhUTUxQYXJzZXJET01NdXRhdGlvblNl
dENvbXBhdGliaWxpdHlNb2RlRnJvbURvY3R5cGVUYXNrKERvY3VtZW50KiBkb2N1bWVudCkKKyAg
ICAgICAgOiBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrKFNldENvbXBhdGliaWxpdHlNb2RlRnJv
bURvY3R5cGUpCisgICAgICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKKyAgICB7CisgICAgfQor
CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Cit9OworCitjbGFzcyBIVE1MUGFyc2VyRE9NTXV0
YXRpb25JbnNlcnRUYXNrIDogcHVibGljIEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2sgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydFRh
c2s+IGNyZWF0ZShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCwgUGFzc1JlZlB0cjxO
b2RlPiBjaGlsZCwgYm9vbCBzZWxmQ2xvc2luZywgYm9vbCBtYXhpbXVtRE9NVHJlZURlcHRoRXhj
ZWVkZWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxQYXJzZXJET01N
dXRhdGlvbkluc2VydFRhc2socGFyZW50LCBjaGlsZCwgc2VsZkNsb3NpbmcsIG1heGltdW1ET01U
cmVlRGVwdGhFeGNlZWRlZCkpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRvUGVyZm9ybVRh
c2soQ29udGFpbmVyTm9kZSogcGFyZW50LCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxkLCBib29sIHNl
bGZDbG9zaW5nLCBib29sIG1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgZG9QZXJmb3JtVGFzayhtX3Bh
cmVudC5nZXQoKSwgbV9jaGlsZC5yZWxlYXNlKCksIG1fc2VsZkNsb3NpbmcsIG1fbWF4aW11bURP
TVRyZWVEZXB0aEV4Y2VlZGVkKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSFRNTFBhcnNlckRP
TU11dGF0aW9uSW5zZXJ0VGFzayhQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCwgUGFz
c1JlZlB0cjxOb2RlPiBjaGlsZCwgYm9vbCBzZWxmQ2xvc2luZywgYm9vbCBtYXhpbXVtRE9NVHJl
ZURlcHRoRXhjZWVkZWQpCisgICAgICAgIDogSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayhJbnNl
cnQpCisgICAgICAgICwgbV9wYXJlbnQocGFyZW50KQorICAgICAgICAsIG1fY2hpbGQoY2hpbGQp
CisgICAgICAgICwgbV9zZWxmQ2xvc2luZyhzZWxmQ2xvc2luZykKKyAgICAgICAgLCBtX21heGlt
dW1ET01UcmVlRGVwdGhFeGNlZWRlZChtYXhpbXVtRE9NVHJlZURlcHRoRXhjZWVkZWQpCisgICAg
eworICAgIH0KKworICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX3BhcmVudDsKKyAgICBSZWZQ
dHI8Tm9kZT4gbV9jaGlsZDsKKworICAgIGJvb2wgbV9zZWxmQ2xvc2luZzsKKyAgICBib29sIG1f
bWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkOworfTsKKworY2xhc3MgSFRNTFBhcnNlckRPTU11
dGF0aW9uSW5zZXJ0Rm9zdGVyUGFyZW50ZWRUYXNrIDogcHVibGljIEhUTUxQYXJzZXJET01NdXRh
dGlvblRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxQYXJzZXJET01N
dXRhdGlvbkluc2VydEZvc3RlclBhcmVudGVkVGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVu
dD4gdGFibGUsIFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gdGFibGVOZXh0LCBQYXNzUmVmUHRy
PENvbnRhaW5lck5vZGU+IHJvb3QsIGJvb2wgaXNQYXJzaW5nRnJhZ21lbnQsIFBhc3NSZWZQdHI8
Tm9kZT4gY2hpbGQsIGJvb2wgc2VsZkNsb3NpbmcpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydEZvc3RlclBhcmVudGVkVGFzayh0
YWJsZSwgdGFibGVOZXh0LCByb290LCBpc1BhcnNpbmdGcmFnbWVudCwgY2hpbGQsIHNlbGZDbG9z
aW5nKSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhFbGVtZW50KiB0
YWJsZSwgQ29udGFpbmVyTm9kZSogdGFibGVOZXh0LCBDb250YWluZXJOb2RlKiByb290LCBib29s
IGlzUGFyc2luZ0ZyYWdtZW50LCBQYXNzUmVmUHRyPE5vZGU+IGNoaWxkLCBib29sIHNlbGZDbG9z
aW5nKTsKKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICBk
b1BlcmZvcm1UYXNrKG1fdGFibGUuZ2V0KCksIG1fdGFibGVOZXh0LmdldCgpLCBtX3Jvb3QuZ2V0
KCksIG1faXNQYXJzaW5nRnJhZ21lbnQsIG1fY2hpbGQucmVsZWFzZSgpLCBtX3NlbGZDbG9zaW5n
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Rm9z
dGVyUGFyZW50ZWRUYXNrKFBhc3NSZWZQdHI8RWxlbWVudD4gdGFibGUsIFBhc3NSZWZQdHI8Q29u
dGFpbmVyTm9kZT4gdGFibGVOZXh0LCBQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IHJvb3QsIGJv
b2wgaXNQYXJzaW5nRnJhZ21lbnQsIFBhc3NSZWZQdHI8Tm9kZT4gY2hpbGQsIGJvb2wgc2VsZkNs
b3NpbmcpCisgICAgICAgIDogSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayhJbnNlcnRGb3N0ZXJQ
YXJlbnRlZCkKKyAgICAgICAgLCBtX3RhYmxlKHRhYmxlKQorICAgICAgICAsIG1fdGFibGVOZXh0
KHRhYmxlTmV4dCkKKyAgICAgICAgLCBtX3Jvb3Qocm9vdCkKKyAgICAgICAgLCBtX2NoaWxkKGNo
aWxkKQorICAgICAgICAsIG1faXNQYXJzaW5nRnJhZ21lbnQoaXNQYXJzaW5nRnJhZ21lbnQpCisg
ICAgICAgICwgbV9zZWxmQ2xvc2luZyhzZWxmQ2xvc2luZykKKyAgICB7CisgICAgfQorCisgICAg
UmVmUHRyPEVsZW1lbnQ+IG1fdGFibGU7CisgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG1fdGFi
bGVOZXh0OworICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBtX3Jvb3Q7CisgICAgUmVmUHRyPE5v
ZGU+IG1fY2hpbGQ7CisKKyAgICBib29sIG1faXNQYXJzaW5nRnJhZ21lbnQ7CisgICAgYm9vbCBt
X3NlbGZDbG9zaW5nOworfTsKKworY2xhc3MgSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0VGV4
dFRhc2sgOiBwdWJsaWMgSFRNTFBhcnNlckRPTU11dGF0aW9uVGFzayB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0VGV4dFRhc2s+IGNy
ZWF0ZShQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCwgY29uc3QgU3RyaW5nJiBjaGFy
YWN0ZXJzLCBib29sIHNob3VsZFVzZUF0b21pY1N0cmluZywgYm9vbCBtYXhpbXVtRE9NVHJlZURl
cHRoRXhjZWVkZWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxQYXJz
ZXJET01NdXRhdGlvbkluc2VydFRleHRUYXNrKHBhcmVudCwgY2hhcmFjdGVycywgc2hvdWxkVXNl
QXRvbWljU3RyaW5nLCBtYXhpbXVtRE9NVHJlZURlcHRoRXhjZWVkZWQpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCBkb1BlcmZvcm1UYXNrKENvbnRhaW5lck5vZGUqIHBhcmVudCwgY29uc3Qg
U3RyaW5nJiBjaGFyYWN0ZXJzLCBib29sIHNob3VsZFVzZUF0b21pY1N0cmluZywgYm9vbCBtYXhp
bXVtRE9NVHJlZURlcHRoRXhjZWVkZWQpOworCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNr
KCkKKyAgICB7CisgICAgICAgIGRvUGVyZm9ybVRhc2sobV9wYXJlbnQuZ2V0KCksIG1fY2hhcmFj
dGVycywgbV9zaG91bGRVc2VBdG9taWNTdHJpbmcsIG1fbWF4aW11bURPTVRyZWVEZXB0aEV4Y2Vl
ZGVkKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0
VGV4dFRhc2soUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQsIGNvbnN0IFN0cmluZyYg
Y2hhcmFjdGVycywgYm9vbCBzaG91bGRVc2VBdG9taWNTdHJpbmcsIGJvb2wgbWF4aW11bURPTVRy
ZWVEZXB0aEV4Y2VlZGVkKQorICAgICAgICA6IEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2soSW5z
ZXJ0VGV4dCkKKyAgICAgICAgLCBtX3BhcmVudChwYXJlbnQpCisgICAgICAgICwgbV9jaGFyYWN0
ZXJzKGNoYXJhY3RlcnMpCisgICAgICAgICwgbV9zaG91bGRVc2VBdG9taWNTdHJpbmcoc2hvdWxk
VXNlQXRvbWljU3RyaW5nKQorICAgICAgICAsIG1fbWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVk
KG1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRy
PENvbnRhaW5lck5vZGU+IG1fcGFyZW50OworCisgICAgY29uc3QgU3RyaW5nIG1fY2hhcmFjdGVy
czsKKyAgICBib29sIG1fc2hvdWxkVXNlQXRvbWljU3RyaW5nOworCisgICAgYm9vbCBtX21heGlt
dW1ET01UcmVlRGVwdGhFeGNlZWRlZDsKK307CisKK2NsYXNzIEhUTUxQYXJzZXJET01NdXRhdGlv
bkluc2VydEZvc3RlclBhcmVudGVkVGV4dFRhc2sgOiBwdWJsaWMgSFRNTFBhcnNlckRPTU11dGF0
aW9uVGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNlckRPTU11
dGF0aW9uSW5zZXJ0Rm9zdGVyUGFyZW50ZWRUZXh0VGFzaz4gY3JlYXRlKFBhc3NSZWZQdHI8RWxl
bWVudD4gdGFibGUsIFBhc3NSZWZQdHI8Q29udGFpbmVyTm9kZT4gdGFibGVOZXh0LCBQYXNzUmVm
UHRyPENvbnRhaW5lck5vZGU+IHJvb3QsIGJvb2wgaXNQYXJzaW5nRnJhZ21lbnQsIGNvbnN0IFN0
cmluZyYgY2hhcmFjdGVycywgYm9vbCBzaG91bGRVc2VBdG9taWNTdHJpbmcpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydEZvc3Rl
clBhcmVudGVkVGV4dFRhc2sodGFibGUsIHRhYmxlTmV4dCwgcm9vdCwgaXNQYXJzaW5nRnJhZ21l
bnQsIGNoYXJhY3RlcnMsIHNob3VsZFVzZUF0b21pY1N0cmluZykpOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIGRvUGVyZm9ybVRhc2soRWxlbWVudCogdGFibGUsIENvbnRhaW5lck5vZGUqIHRh
YmxlTmV4dCwgQ29udGFpbmVyTm9kZSogcm9vdCwgYm9vbCBpc1BhcnNpbmdGcmFnbWVudCwgY29u
c3QgU3RyaW5nJiBjaGFyYWN0ZXJzLCBib29sIHNob3VsZFVzZUF0b21pY1N0cmluZyk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgZG9QZXJmb3JtVGFz
ayhtX3RhYmxlLmdldCgpLCBtX3RhYmxlTmV4dC5nZXQoKSwgbV9yb290LmdldCgpLCBtX2lzUGFy
c2luZ0ZyYWdtZW50LCBtX2NoYXJhY3RlcnMsIG1fc2hvdWxkVXNlQXRvbWljU3RyaW5nKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Rm9zdGVyUGFy
ZW50ZWRUZXh0VGFzayhQYXNzUmVmUHRyPEVsZW1lbnQ+IHRhYmxlLCBQYXNzUmVmUHRyPENvbnRh
aW5lck5vZGU+IHRhYmxlTmV4dCwgUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiByb290LCBib29s
IGlzUGFyc2luZ0ZyYWdtZW50LCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlcnMsIGJvb2wgc2hvdWxk
VXNlQXRvbWljU3RyaW5nKQorICAgICAgICA6IEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2soSW5z
ZXJ0Rm9zdGVyUGFyZW50ZWRUZXh0KQorICAgICAgICAsIG1fdGFibGUodGFibGUpCisgICAgICAg
ICwgbV90YWJsZU5leHQodGFibGVOZXh0KQorICAgICAgICAsIG1fcm9vdChyb290KQorICAgICAg
ICAsIG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJzKQorICAgICAgICAsIG1fc2hvdWxkVXNlQXRvbWlj
U3RyaW5nKHNob3VsZFVzZUF0b21pY1N0cmluZykKKyAgICAgICAgLCBtX2lzUGFyc2luZ0ZyYWdt
ZW50KGlzUGFyc2luZ0ZyYWdtZW50KQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8RWxlbWVu
dD4gbV90YWJsZTsKKyAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gbV90YWJsZU5leHQ7CisgICAg
UmVmUHRyPENvbnRhaW5lck5vZGU+IG1fcm9vdDsKKworICAgIGNvbnN0IFN0cmluZyBtX2NoYXJh
Y3RlcnM7CisgICAgYm9vbCBtX3Nob3VsZFVzZUF0b21pY1N0cmluZzsKKworICAgIGJvb2wgbV9p
c1BhcnNpbmdGcmFnbWVudDsKK307CisKK2NsYXNzIEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2Vy
dENvbW1lbnRUYXNrIDogcHVibGljIEhUTUxQYXJzZXJET01NdXRhdGlvblRhc2sgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENvbW1l
bnRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQsIGNvbnN0IFN0
cmluZyYgY29tbWVudCwgYm9vbCBtYXhpbXVtRE9NVHJlZURlcHRoRXhjZWVkZWQpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxQYXJzZXJET01NdXRhdGlvbkluc2VydENv
bW1lbnRUYXNrKHBhcmVudCwgY29tbWVudCwgbWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkKSk7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhDb250YWluZXJOb2RlKiBw
YXJlbnQsIGNvbnN0IFN0cmluZyYgY29tbWVudCwgYm9vbCBtYXhpbXVtRE9NVHJlZURlcHRoRXhj
ZWVkZWQpOworCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAg
IGRvUGVyZm9ybVRhc2sobV9wYXJlbnQuZ2V0KCksIG1fY29tbWVudCwgbV9tYXhpbXVtRE9NVHJl
ZURlcHRoRXhjZWVkZWQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIVE1MUGFyc2VyRE9NTXV0
YXRpb25JbnNlcnRDb21tZW50VGFzayhQYXNzUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCwg
Y29uc3QgU3RyaW5nJiBjb21tZW50LCBib29sIG1heGltdW1ET01UcmVlRGVwdGhFeGNlZWRlZCkK
KyAgICAgICAgOiBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrKEluc2VydENvbW1lbnQpCisgICAg
ICAgICwgbV9wYXJlbnQocGFyZW50KQorICAgICAgICAsIG1fY29tbWVudChjb21tZW50KQorICAg
ICAgICAsIG1fbWF4aW11bURPTVRyZWVEZXB0aEV4Y2VlZGVkKG1heGltdW1ET01UcmVlRGVwdGhF
eGNlZWRlZCkKKyAgICB7CisgICAgfQorCisgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IG1fcGFy
ZW50OworCisgICAgY29uc3QgU3RyaW5nIG1fY29tbWVudDsKKworICAgIGJvb2wgbV9tYXhpbXVt
RE9NVHJlZURlcHRoRXhjZWVkZWQ7Cit9OworCitjbGFzcyBIVE1MUGFyc2VyRE9NTXV0YXRpb25J
bnNlcnRDb21tZW50T25Eb2N1bWVudFRhc2sgOiBwdWJsaWMgSFRNTFBhcnNlckRPTU11dGF0aW9u
VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFBhcnNlckRPTU11dGF0
aW9uSW5zZXJ0Q29tbWVudE9uRG9jdW1lbnRUYXNrPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50
LCBDb250YWluZXJOb2RlKiBhdHRhY2htZW50Um9vdCwgY29uc3QgU3RyaW5nJiBjb21tZW50KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1MUGFyc2VyRE9NTXV0YXRpb25J
bnNlcnRDb21tZW50T25Eb2N1bWVudFRhc2soZG9jdW1lbnQsIGF0dGFjaG1lbnRSb290LCBjb21t
ZW50KSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZG9QZXJmb3JtVGFzayhEb2N1bWVudCos
IENvbnRhaW5lck5vZGUqIGF0dGFjaG1lbnRSb290LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpOwor
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgIGRvUGVyZm9y
bVRhc2sobV9kb2N1bWVudCwgbV9hdHRhY2htZW50Um9vdCwgbV9jb21tZW50KTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgSFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0Q29tbWVudE9uRG9jdW1l
bnRUYXNrKERvY3VtZW50KiBkb2N1bWVudCwgQ29udGFpbmVyTm9kZSogYXR0YWNobWVudFJvb3Qs
IGNvbnN0IFN0cmluZyYgY29tbWVudCkKKyAgICAgICAgOiBIVE1MUGFyc2VyRE9NTXV0YXRpb25U
YXNrKEluc2VydENvbW1lbnRPbkRvY3VtZW50KQorICAgICAgICAsIG1fZG9jdW1lbnQoZG9jdW1l
bnQpCisgICAgICAgICwgbV9hdHRhY2htZW50Um9vdChhdHRhY2htZW50Um9vdCkKKyAgICAgICAg
LCBtX2NvbW1lbnQoY29tbWVudCkKKyAgICB7CisgICAgfQorCisgICAgRG9jdW1lbnQqIG1fZG9j
dW1lbnQ7CisgICAgQ29udGFpbmVyTm9kZSogbV9hdHRhY2htZW50Um9vdDsKKworICAgIGNvbnN0
IFN0cmluZyBtX2NvbW1lbnQ7Cit9OworCitjbGFzcyBIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNl
cnREb2N0eXBlVGFzayA6IHB1YmxpYyBIVE1MUGFyc2VyRE9NTXV0YXRpb25UYXNrIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MUGFyc2VyRE9NTXV0YXRpb25JbnNlcnREb2N0
eXBlVGFzaz4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ29udGFpbmVyTm9kZSogYXR0YWNo
bWVudFJvb3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29u
c3QgU3RyaW5nJiBzeXN0ZW1JZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SFRNTFBhcnNlckRPTU11dGF0aW9uSW5zZXJ0RG9jdHlwZVRhc2soZG9jdW1lbnQsIGF0dGFjaG1l
bnRSb290LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBkb1BlcmZvcm1UYXNrKERvY3VtZW50KiwgQ29udGFpbmVyTm9kZSogYXR0YWNobWVudFJv
b3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3Ry
aW5nJiBzeXN0ZW1JZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsK
KyAgICAgICAgZG9QZXJmb3JtVGFzayhtX2RvY3VtZW50LCBtX2F0dGFjaG1lbnRSb290LCBtX25h
bWUsIG1fcHVibGljSWQsIG1fc3lzdGVtSWQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIVE1M
UGFyc2VyRE9NTXV0YXRpb25JbnNlcnREb2N0eXBlVGFzayhEb2N1bWVudCogZG9jdW1lbnQsIENv
bnRhaW5lck5vZGUqIGF0dGFjaG1lbnRSb290LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgcHVibGljSWQsIGNvbnN0IFN0cmluZyYgc3lzdGVtSWQpCisgICAgICAgIDogSFRNTFBh
cnNlckRPTU11dGF0aW9uVGFzayhJbnNlcnREb2N0eXBlKQorICAgICAgICAsIG1fZG9jdW1lbnQo
ZG9jdW1lbnQpCisgICAgICAgICwgbV9hdHRhY2htZW50Um9vdChhdHRhY2htZW50Um9vdCkKKyAg
ICAgICAgLCBtX25hbWUobmFtZSkKKyAgICAgICAgLCBtX3B1YmxpY0lkKHB1YmxpY0lkKQorICAg
ICAgICAsIG1fc3lzdGVtSWQoc3lzdGVtSWQpCisgICAgeworICAgIH0KKworICAgIERvY3VtZW50
KiBtX2RvY3VtZW50OworICAgIENvbnRhaW5lck5vZGUqIG1fYXR0YWNobWVudFJvb3Q7CisKKyAg
ICBjb25zdCBTdHJpbmcgbV9uYW1lOworICAgIGNvbnN0IFN0cmluZyBtX3B1YmxpY0lkOworICAg
IGNvbnN0IFN0cmluZyBtX3N5c3RlbUlkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gSFRNTFBhcnNlckRPTU11dGF0aW9uVGFza19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCBhN2YxNDUxOWVlMjMxNWFj
ZjVhY2ExOGNiMDU2MTlmYTc5M2MxNDVjLi45MGYyODkyMzVkM2FlM2E3MTViYzY3YjdjMmUxMjhh
NTQxZDkyY2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJl
ZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVp
bGRlci5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJIVE1MUGFyc2VyRE9NTXV0YXRpb25RdWV1ZS5oIgogI2luY2x1ZGUgIkhUTUxQYXJz
ZXJJZGlvbXMuaCIKICNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxTdGFja0l0ZW0uaCIKQEAgLTM1MCw3ICszNTEsNyBAQCBwcml2YXRlOgogSFRNTFRyZWVCdWls
ZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIEhUTUxEb2N1
bWVudCogZG9jdW1lbnQsIGJvb2wsIGJvb2wgdXNlUHJlSFRNTDVQYXJzZXJRdWlya3MsIHVuc2ln
bmVkIG1heGltdW1ET01UcmVlRGVwdGgpCiAgICAgOiBtX2ZyYW1lc2V0T2sodHJ1ZSkKICAgICAs
IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAgLCBtX3RyZWUoZG9jdW1lbnQsIG1heGltdW1ET01U
cmVlRGVwdGgpCisgICAgLCBtX3RyZWUoZG9jdW1lbnQsIHBhcnNlci0+ZG9tTXV0YXRpb25RdWV1
ZSgpLCBtYXhpbXVtRE9NVHJlZURlcHRoKQogICAgICwgbV9pbnNlcnRpb25Nb2RlKEluaXRpYWxN
b2RlKQogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBt
X3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZShmYWxzZSkKQEAgLTM2Niw3ICszNjcsNyBAQCBIVE1M
VHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNlciwg
RG9jdW1lbnRGcmFnbWVudCogZgogICAgIDogbV9mcmFtZXNldE9rKHRydWUpCiAgICAgLCBtX2Zy
YWdtZW50Q29udGV4dChmcmFnbWVudCwgY29udGV4dEVsZW1lbnQsIHNjcmlwdGluZ1Blcm1pc3Np
b24pCiAgICAgLCBtX2RvY3VtZW50KGZyYWdtZW50LT5kb2N1bWVudCgpKQotICAgICwgbV90cmVl
KGZyYWdtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uLCBtYXhpbXVtRE9NVHJlZURlcHRoKQorICAg
ICwgbV90cmVlKGZyYWdtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uLCBwYXJzZXItPmRvbU11dGF0
aW9uUXVldWUoKSwgbWF4aW11bURPTVRyZWVEZXB0aCkKICAgICAsIG1faW5zZXJ0aW9uTW9kZShJ
bml0aWFsTW9kZSkKICAgICAsIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKEluaXRpYWxNb2RlKQog
ICAgICwgbV9zaG91bGRTa2lwTGVhZGluZ05ld2xpbmUoZmFsc2UpCkBAIC00NzgsNyArNDc5LDcg
QEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWVGcm9tQXRvbWljVG9rZW4oQXRv
bWljSFRNTFRva2VuKiB0b2tlbikKICAgICBtX3BhcnNlci0+dG9rZW5pemVyKCktPnNldEZvcmNl
TnVsbENoYXJhY3RlclJlcGxhY2VtZW50KG1faW5zZXJ0aW9uTW9kZSA9PSBUZXh0TW9kZSB8fCBp
bkZvcmVpZ25Db250ZW50KTsKICAgICBtX3BhcnNlci0+dG9rZW5pemVyKCktPnNldFNob3VsZEFs
bG93Q0RBVEEoaW5Gb3JlaWduQ29udGVudCk7CiAKLSAgICBtX3RyZWUuZXhlY3V0ZVF1ZXVlZFRh
c2tzKCk7CisgICAgbV9wYXJzZXItPmRvbU11dGF0aW9uUXVldWUoKS0+Zmx1c2goKTsKICAgICAv
LyBXZSBtaWdodCBiZSBkZXRhY2hlZCBub3cuCiB9CiAKQEAgLTU4OCw3ICs1ODksNyBAQCB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0lzaW5kZXhTdGFydFRhZ0ZvckluQm9keShBdG9taWNI
VE1MVG9rZW4qIHRva2VuKQogICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcoZm9ybVRhZyk7CiAgICAg
QXR0cmlidXRlKiBhY3Rpb25BdHRyaWJ1dGUgPSB0b2tlbi0+Z2V0QXR0cmlidXRlSXRlbShhY3Rp
b25BdHRyKTsKICAgICBpZiAoYWN0aW9uQXR0cmlidXRlKQotICAgICAgICBtX3RyZWUuZm9ybSgp
LT5zZXRBdHRyaWJ1dGUoYWN0aW9uQXR0ciwgYWN0aW9uQXR0cmlidXRlLT52YWx1ZSgpKTsKKyAg
ICAgICAgbV9wYXJzZXItPmRvbU11dGF0aW9uUXVldWUoKS0+c2V0QXR0cmlidXRlKG1fdHJlZS5m
b3JtKCksIGFjdGlvbkF0dHIsIGFjdGlvbkF0dHJpYnV0ZS0+dmFsdWUoKSk7CiAgICAgcHJvY2Vz
c0Zha2VTdGFydFRhZyhoclRhZyk7CiAgICAgcHJvY2Vzc0Zha2VTdGFydFRhZyhsYWJlbFRhZyk7
CiAgICAgQXR0cmlidXRlKiBwcm9tcHRBdHRyaWJ1dGUgPSB0b2tlbi0+Z2V0QXR0cmlidXRlSXRl
bShwcm9tcHRBdHRyKTsKQEAgLTc2OCw5ICs3NjksNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiAgICAgICAg
IH0KICAgICAgICAgaWYgKCFtX2ZyYW1lc2V0T2spCiAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCkt
PmJvZHlFbGVtZW50KCktPnJlbW92ZShlYyk7Ci0gICAgICAgIEFTU0VSVCghZWMpOworICAgICAg
ICBtX3BhcnNlci0+ZG9tTXV0YXRpb25RdWV1ZSgpLT5yZW1vdmVGcm9tUGFyZW50KG1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+Ym9keUVsZW1lbnQoKSk7CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVu
dHMoKS0+cG9wVW50aWwobV90cmVlLm9wZW5FbGVtZW50cygpLT5ib2R5RWxlbWVudCgpKTsKICAg
ICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BIVE1MQm9keUVsZW1lbnQoKTsKICAgICAg
ICAgQVNTRVJUKG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+dG9wKCkgPT0gbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5odG1sRWxlbWVudCgpKTsKQEAgLTE1NzYsNDEgKzE1NzUsMjUgQEAgdm9pZCBIVE1M
VHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4qIHRva2Vu
KQogICAgICAgICAgICAgaWYgKGxhc3ROb2RlID09IGZ1cnRoZXN0QmxvY2spCiAgICAgICAgICAg
ICAgICAgYm9va21hcmsubW92ZVRvQWZ0ZXIobm9kZUVudHJ5KTsKICAgICAgICAgICAgIC8vIDYu
NgotICAgICAgICAgICAgaWYgKENvbnRhaW5lck5vZGUqIHBhcmVudCA9IGxhc3ROb2RlLT5lbGVt
ZW50KCktPnBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICBwYXJlbnQtPnBhcnNlclJlbW92
ZUNoaWxkKGxhc3ROb2RlLT5lbGVtZW50KCkpOwotICAgICAgICAgICAgbm9kZS0+ZWxlbWVudCgp
LT5wYXJzZXJBZGRDaGlsZChsYXN0Tm9kZS0+ZWxlbWVudCgpKTsKLSAgICAgICAgICAgIGlmIChs
YXN0Tm9kZS0+ZWxlbWVudCgpLT5wYXJlbnRFbGVtZW50KCktPmF0dGFjaGVkKCkgJiYgIWxhc3RO
b2RlLT5lbGVtZW50KCktPmF0dGFjaGVkKCkpCi0gICAgICAgICAgICAgICAgbGFzdE5vZGUtPmVs
ZW1lbnQoKS0+bGF6eUF0dGFjaCgpOworICAgICAgICAgICAgbV9wYXJzZXItPmRvbU11dGF0aW9u
UXVldWUoKS0+cmVtb3ZlRnJvbVBhcmVudChsYXN0Tm9kZS0+ZWxlbWVudCgpKTsKKyAgICAgICAg
ICAgIG1fcGFyc2VyLT5kb21NdXRhdGlvblF1ZXVlKCktPmFkZENoaWxkQW5kQXR0YWNoKG5vZGUt
PmVsZW1lbnQoKSwgbGFzdE5vZGUtPmVsZW1lbnQoKSk7CiAgICAgICAgICAgICAvLyA2LjcKICAg
ICAgICAgICAgIGxhc3ROb2RlID0gbm9kZTsKICAgICAgICAgfQogICAgICAgICAvLyA3Ci0gICAg
ICAgIGlmIChDb250YWluZXJOb2RlKiBwYXJlbnQgPSBsYXN0Tm9kZS0+ZWxlbWVudCgpLT5wYXJl
bnROb2RlKCkpCi0gICAgICAgICAgICBwYXJlbnQtPnBhcnNlclJlbW92ZUNoaWxkKGxhc3ROb2Rl
LT5lbGVtZW50KCkpOworICAgICAgICBtX3BhcnNlci0+ZG9tTXV0YXRpb25RdWV1ZSgpLT5yZW1v
dmVGcm9tUGFyZW50KGxhc3ROb2RlLT5lbGVtZW50KCkpOwogICAgICAgICBpZiAoY29tbW9uQW5j
ZXN0b3ItPmNhdXNlc0Zvc3RlclBhcmVudGluZygpKQogICAgICAgICAgICAgbV90cmVlLmZvc3Rl
clBhcmVudChsYXN0Tm9kZS0+ZWxlbWVudCgpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBjb21tb25BbmNlc3Rvci0+bm9kZSgpLT5wYXJzZXJBZGRDaGlsZChsYXN0Tm9kZS0+ZWxlbWVu
dCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChsYXN0Tm9kZS0+c3RhY2tJdGVtKCktPmlzRWxlbWVu
dE5vZGUoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobGFzdE5vZGUtPmVsZW1lbnQoKS0+cGFyZW50
Tm9kZSgpKTsKLSAgICAgICAgICAgIGlmIChsYXN0Tm9kZS0+ZWxlbWVudCgpLT5wYXJlbnROb2Rl
KCktPmF0dGFjaGVkKCkgJiYgIWxhc3ROb2RlLT5lbGVtZW50KCktPmF0dGFjaGVkKCkpCi0gICAg
ICAgICAgICAgICAgbGFzdE5vZGUtPmVsZW1lbnQoKS0+bGF6eUF0dGFjaCgpOwotICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGFyc2VyLT5kb21NdXRhdGlvblF1ZXVlKCkt
PmFkZENoaWxkQW5kQXR0YWNoKGNvbW1vbkFuY2VzdG9yLT5ub2RlKCksIGxhc3ROb2RlLT5lbGVt
ZW50KCkpOwogICAgICAgICAvLyA4CiAgICAgICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVtPiBuZXdJ
dGVtID0gbV90cmVlLmNyZWF0ZUVsZW1lbnRGcm9tU2F2ZWRUb2tlbihmb3JtYXR0aW5nRWxlbWVu
dFJlY29yZC0+c3RhY2tJdGVtKCkuZ2V0KCkpOwogICAgICAgICAvLyA5Ci0gICAgICAgIG5ld0l0
ZW0tPmVsZW1lbnQoKS0+dGFrZUFsbENoaWxkcmVuRnJvbShmdXJ0aGVzdEJsb2NrLT5lbGVtZW50
KCkpOworICAgICAgICBtX3BhcnNlci0+ZG9tTXV0YXRpb25RdWV1ZSgpLT5tb3ZlQWxsQ2hpbGRy
ZW5Ub05ld1BhcmVudChuZXdJdGVtLT5lbGVtZW50KCksIGZ1cnRoZXN0QmxvY2stPmVsZW1lbnQo
KSk7CiAgICAgICAgIC8vIDEwCi0gICAgICAgIEVsZW1lbnQqIGZ1cnRoZXN0QmxvY2tFbGVtZW50
ID0gZnVydGhlc3RCbG9jay0+ZWxlbWVudCgpOwotICAgICAgICAvLyBGSVhNRTogQWxsIHRoaXMg
Y3JlYXRpb24gLyBwYXJzZXJBZGRDaGlsZCAvIGF0dGFjaCBidXNpbmVzcyBzaG91bGQKLSAgICAg
ICAgLy8gICAgICAgIGJlIGluIEhUTUxDb25zdHJ1Y3Rpb25TaXRlLiAgTXkgZ3Vlc3MgaXMgdGhh
dCBzdGVwcyA4LS0xMgotICAgICAgICAvLyAgICAgICAgc2hvdWxkIGFsbCBiZSBpbiBzb21lIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlIGZ1bmN0aW9uLgotICAgICAgICBmdXJ0aGVzdEJsb2NrRWxlbWVu
dC0+cGFyc2VyQWRkQ2hpbGQobmV3SXRlbS0+ZWxlbWVudCgpKTsKLSAgICAgICAgaWYgKGZ1cnRo
ZXN0QmxvY2tFbGVtZW50LT5hdHRhY2hlZCgpICYmICFuZXdJdGVtLT5lbGVtZW50KCktPmF0dGFj
aGVkKCkpIHsKLSAgICAgICAgICAgIC8vIE5vdGljZSB0aGF0IG5ld0l0ZW0tPmVsZW1lbnQoKSBt
aWdodCBhbHJlYWR5IGJlIGF0dGFjaGVkIGlmLCBmb3IgZXhhbXBsZSwgb25lIG9mIHRoZSByZXBh
cmVudGVkCi0gICAgICAgICAgICAvLyBjaGlsZHJlbiBpcyBhIHN0eWxlIGVsZW1lbnQsIHdoaWNo
IGF0dGFjaGVzIGl0c2VsZiBhdXRvbWF0aWNhbGx5LgotICAgICAgICAgICAgbmV3SXRlbS0+ZWxl
bWVudCgpLT5hdHRhY2goKTsKLSAgICAgICAgfQorICAgICAgICAvLyBOb3RpY2UgdGhhdCBuZXdJ
dGVtLT5lbGVtZW50KCkgbWlnaHQgYWxyZWFkeSBiZSBhdHRhY2hlZCBpZiwgZm9yIGV4YW1wbGUs
IG9uZSBvZiB0aGUgcmVwYXJlbnRlZAorICAgICAgICAvLyBjaGlsZHJlbiBpcyBhIHN0eWxlIGVs
ZW1lbnQsIHdoaWNoIGF0dGFjaGVzIGl0c2VsZiBhdXRvbWF0aWNhbGx5LgorICAgICAgICBtX3Bh
cnNlci0+ZG9tTXV0YXRpb25RdWV1ZSgpLT5hZGRDaGlsZEFuZEF0dGFjaChmdXJ0aGVzdEJsb2Nr
LT5lbGVtZW50KCksIG5ld0l0ZW0tPmVsZW1lbnQoKSwgZmFsc2UpOwogICAgICAgICAvLyAxMQog
ICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPnN3YXBUbyhmb3JtYXR0
aW5nRWxlbWVudCwgbmV3SXRlbSwgYm9va21hcmspOwogICAgICAgICAvLyAxMgpAQCAtMjEyNCw3
ICsyMTA3LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRN
TFRva2VuKiB0b2tlbikKICAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9jZXNzID0gbV90cmVlLmN1
cnJlbnRFbGVtZW50KCk7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgp
OwogICAgICAgICAgICAgaWYgKGlzUGFyc2luZ0ZyYWdtZW50KCkgJiYgbV9mcmFnbWVudENvbnRl
eHQuc2NyaXB0aW5nUGVybWlzc2lvbigpID09IERpc2FsbG93U2NyaXB0aW5nQ29udGVudCkKLSAg
ICAgICAgICAgICAgICBtX3NjcmlwdFRvUHJvY2Vzcy0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAg
ICAgICAgICAgICAgICBtX3BhcnNlci0+ZG9tTXV0YXRpb25RdWV1ZSgpLT5yZW1vdmVBbGxDaGls
ZHJlbihtX3NjcmlwdFRvUHJvY2Vzcy5nZXQoKSk7CiAgICAgICAgICAgICBzZXRJbnNlcnRpb25N
b2RlKG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKTsKIAogICAgICAgICAgICAgLy8gVGhpcyB0b2tl
biB3aWxsIG5vdCBoYXZlIGJlZW4gY3JlYXRlZCBieSB0aGUgdG9rZW5pemVyIGlmIGEK
</data>

          </attachment>
      

    </bug>

</bugzilla>